required-doc 0.0.7 → 0.0.8

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/README.md CHANGED
@@ -99,6 +99,16 @@ createSpecViewer({
99
99
  components: [Input, Button],
100
100
  pages: [loginPage],
101
101
  colors,
102
+ options: {
103
+ devices: [
104
+ { id: 'pc', label: 'PC', frame: 'pc', minWidth: 1024, maxWidth: 1920 },
105
+ { id: 'phone', label: 'Phone', frame: 'phone', minWidth: 320, maxWidth: 1023 },
106
+ ],
107
+ baseColors: {
108
+ light: { bg: '#f5f6f8', font: '#1f2937' },
109
+ dark: { bg: '#131313', font: '#f3f3f3' },
110
+ },
111
+ },
102
112
  }).mount('#app')
103
113
  ```
104
114
 
@@ -159,8 +169,30 @@ const meta: ItemMeta = {
159
169
  export default meta
160
170
  ```
161
171
 
162
- - `view`: モックの表示物。**素の HTML 文字列(`?raw`)** または Vue コンポーネント。
163
- - `req`: 要件の Markdown 文字列(`?raw`)。
172
+ - `view`: 単一 mock のとき。**HTML 文字列(`?raw`)** または Vue コンポーネント。
173
+ - `variants`: 状態別 mock(例: 0件 / 10件)。**2 件以上**で mock 内にタブが出る。`variants` を使う場合 `view` は省略可。
174
+ - `req`: 要件 Markdown(状態共通)。
175
+
176
+ ```ts
177
+ const meta: ItemMeta = {
178
+ name: 'CollageListPage',
179
+ kind: 'page',
180
+ title: 'コラージュ一覧',
181
+ desc: '…',
182
+ latest: 'v1',
183
+ versions: {
184
+ v1: {
185
+ req: CollageListReq,
186
+ variants: [
187
+ { id: 'empty', label: '0件', view: CollageListEmptyMock },
188
+ { id: 'full', label: '10件', view: CollageListFullMock },
189
+ ],
190
+ },
191
+ },
192
+ }
193
+ ```
194
+
195
+ 単一 mock の従来形(`view` のみ)もそのまま使える。
164
196
 
165
197
  作ったら `main.ts` の `components` / `pages` 配列に 1 行足す。
166
198
 
@@ -207,19 +239,19 @@ export const colors: ColorToken[] = [
207
239
 
208
240
  ## オプション(`createSpecViewer({ ..., options })`)
209
241
 
210
- すべて**任意**。省略すればデフォルトが使われる(書くのは変えたい項目だけでOK)。
242
+ `showThemeToggle` 以外は**省略時デフォルトなし**。`devices` と `baseColors` は利用側で必ず指定する。
211
243
 
212
244
  ```ts
213
245
  createSpecViewer({
214
246
  components, pages, colors,
215
247
  options: {
216
- showThemeToggle: true, // ダーク/ライト切替ボタンの表示(既定 true)
217
- devices: [ // mock の端末タブ(既定 PC / Phone)
218
- { id: 'pc', label: 'PC', frame: 'pc', width: 1024 },
219
- { id: 'tablet', label: 'Tablet', frame: 'tablet', width: 768 },
220
- { id: 'phone', label: 'Phone', frame: 'phone', width: 360 },
248
+ showThemeToggle: true, // ダーク/ライト切替ボタン(省略時 true)
249
+ devices: [ // mock の端末タブ(必須)
250
+ { id: 'pc', label: 'PC', frame: 'pc', minWidth: 1024, maxWidth: 1920 },
251
+ { id: 'tablet', label: 'Tablet', frame: 'tablet', minWidth: 768, maxWidth: 1024 },
252
+ { id: 'phone', label: 'Phone', frame: 'phone', minWidth: 320, maxWidth: 1023 },
221
253
  ],
222
- baseColors: { // モック画面の基本色(既定は下記の値)
254
+ baseColors: { // モック画面の基本色(必須)
223
255
  light: { bg: '#f5f6f8', font: '#1f2937' },
224
256
  dark: { bg: '#131313', font: '#f3f3f3' },
225
257
  },
@@ -233,29 +265,36 @@ createSpecViewer({
233
265
 
234
266
  ### devices
235
267
 
236
- mock 上部のタブに出る端末リスト。
268
+ mock 上部のタブに出る端末リスト。**タブごとに min〜max の範囲が独立**している(Phone の max を超えて PC 幅にはならない)。
237
269
 
238
270
  | フィールド | 説明 |
239
271
  | --- | --- |
240
272
  | `id` | タブ識別子(例 `'pc'`) |
241
273
  | `label` | タブ表示名(例 `'PC'`) |
242
274
  | `frame` | 枠の見た目。`'pc'`=ブラウザ風 / `'phone'`=ノッチ付き / `'tablet'`=ノッチなしベゼル |
243
- | `width` | 画面幅(**px・必須**) |
275
+ | `minWidth` | mock の **viewport 最小幅**(px)。端末枠・ノッチは含まない |
276
+ | `maxWidth` | mock の **viewport 最大幅**(px)。端末枠・ノッチは含まない |
244
277
 
245
278
  - 配列を 1 件だけ(例: PC のみ)にすると端末タブ自体が消える。
246
- - `width` は**デザインの実寸**。ペースに収まらなければ縮めず、**全体を縮尺(最大 1x、はみ出す分だけ縮小)**して表示する。
279
+ - `minWidth === maxWidth` の端末は幅固定(リサイズハンドル非表示)。
280
+ - 表示幅は **mock が描画される viewport 幅**。Phone の黒ベゼル・ノッチはその外側の装飾として重ねる(mock の左右 padding は付けない)。
281
+ - 詳細画面: 右端ドラッグで **選択中タブの min〜max** の範囲内に変更。ペースに収まらなければ**端末枠込みで縮尺**(最大 1x)。
282
+ - タブ切替時は現在幅を引き継ぎ、新タブの min〜max に clamp する。
247
283
 
248
284
  ### baseColors
249
285
 
250
- モック画面(PC/Tablet/Phone の画面・全画面プレビュー)の**背景色と基本文字色**を、ライト/ダークごとに指定する。
286
+ モック画面(PC/Tablet/Phone の画面・プレビュー)の**背景色と基本文字色**を、ライト/ダークごとに指定する。
251
287
  ここで指定した値は `/colors` の一覧に `baseBg` / `baseFont` として自動表示される(情報源が二重化しない)。
252
288
 
253
289
  ---
254
290
 
255
291
  ## プレビューモード
256
292
 
257
- - ヘッダの「プレビュー」ボタンで、**要件パネルを隠し画面そのものだけを全画面表示**する。
258
- - 余計な枠・ヘッダ・ラベルは出さず、選択中端末の `width` で実寸レイアウト ビューポートに合わせて縮尺表示。
293
+ - ヘッダの「プレビュー」ボタンで、**要件パネルを隠して全画面表示**する。
294
+ - **詳細画面と同じ端末枠・同じ viewport 幅**で mock を **1:1** 表示する(縮尺なし。はみ出す場合はスクロール)。
295
+ - mock の viewport がブラウザより**狭い**ときだけ、外側に境界線(グレー背景 + ボーダー)を出す。**同幅なら枠なし**。
296
+ - 右端ドラッグで幅変更可能(詳細と同じく、**プレビュー前に選んだ端末タブの min〜max 内**)。
297
+ - 端末タブはプレビュー中は出ない(詳細で選んだ端末を引き継ぐ)。
259
298
  - 退室は **`Esc`** または右上の「閉じる」ボタン。
260
299
 
261
300
  ---
@@ -264,7 +303,7 @@ mock 上部のタブに出る端末リスト。
264
303
 
265
304
  - `createSpecViewer(config)` が `config` を `registryStore` に注入し、ルータ付き Vue アプリを返す。
266
305
  - ルート: `/catalog`, `/components/:name/:ver?`, `/pages/:name/:ver?`, `/colors`。
267
- - `ReqScreen.vue` が額縁(ヘッダ / 左モック / 右要件)と端末枠・縮尺・プレビューを担当。
306
+ - `ReqScreen.vue` が額縁(ヘッダ / mock / 右要件)と端末枠・縮尺・プレビューを担当。端末枠は `MockDeviceFrame.vue`。
268
307
  - Tailwind ユーティリティはパッケージに同梱せず、**利用側の `@source` 経由で生成**(`dist/index.js` 内のクラス文字列を走査)。パッケージ同梱の `style.css` は req-md 等の独自スタイルのみ。
269
308
 
270
309
  ### 公開 API / 型
@@ -290,9 +329,8 @@ import {
290
329
  | --- | --- |
291
330
  | 部品/画面を追加 | `meta.ts` + `v1/*.html` + `v1/*.req.md` を作り、`main.ts` の配列に追加 |
292
331
  | バージョンを増やす | `v2/` を足して `meta.ts` の `versions` と `latest` を更新 |
293
- | 端末を変える | `options.devices` を編集(PC のみ・Tablet 追加など) |
294
- | 端末の幅を変える | device `width`(px) |
332
+ | 端末を変える | 詳細画面の mock 上部タブ、または `options.devices` を編集 |
333
+ | 端末の幅を変える | 詳細 / プレビューで右端ドラッグ(選択中タブの `minWidth`〜`maxWidth` 内) |
295
334
  | ダーク切替を隠す | `options.showThemeToggle: false` |
296
335
  | モックの基本色を変える | `options.baseColors`(`/colors` にも反映) |
297
336
  | ビューア本体を直した | `cd npm_pack && npm run build` で再ビルド |
298
- ```
package/dist/index.js CHANGED
@@ -1,92 +1,92 @@
1
- import { Fragment as e, computed as t, createApp as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createTextVNode as s, createVNode as c, defineComponent as l, nextTick as u, normalizeClass as d, normalizeStyle as f, onBeforeUnmount as p, onMounted as ee, openBlock as m, ref as h, renderList as g, renderSlot as _, resolveDynamicComponent as te, toDisplayString as v, unref as y, watch as ne, withCtx as b } from "vue";
2
- import { RouterLink as x, RouterView as re, createRouter as ie, createWebHistory as ae, useRouter as S } from "vue-router";
1
+ import { Fragment as e, computed as t, createApp as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createTextVNode as s, createVNode as c, defineComponent as l, nextTick as u, normalizeClass as d, normalizeStyle as f, onBeforeUnmount as p, onMounted as m, openBlock as h, ref as g, renderList as _, renderSlot as v, resolveDynamicComponent as ee, toDisplayString as y, unref as b, watch as te, withCtx as x } from "vue";
2
+ import { RouterLink as S, RouterView as ne, createRouter as C, createWebHistory as re, useRouter as w } from "vue-router";
3
3
  //#endregion
4
4
  //#region src/App.vue
5
- var C = /* @__PURE__ */ l({
5
+ var T = /* @__PURE__ */ l({
6
6
  __name: "App",
7
7
  setup(e) {
8
- return (e, t) => (m(), r(y(re)));
8
+ return (e, t) => (h(), r(b(ne)));
9
9
  }
10
- }), w = [], T = [], E = [], D = !0, O = [], k;
11
- function oe(e) {
12
- w = e.components, T = e.pages, E = e.colors, D = e.options?.showThemeToggle ?? !0, O = e.options?.devices ?? [], k = e.options?.baseColors;
10
+ }), E = [], D = [], O = [], k = !0, A = [], j;
11
+ function ie(e) {
12
+ E = e.components, D = e.pages, O = e.colors, k = e.options?.showThemeToggle ?? !0, A = e.options?.devices ?? [], j = e.options?.baseColors;
13
13
  }
14
- function se() {
15
- return D;
16
- }
17
- function ce() {
18
- return O;
19
- }
20
- function le() {
14
+ function ae() {
21
15
  return k;
22
16
  }
23
- function ue() {
24
- return w;
17
+ function oe() {
18
+ return A;
25
19
  }
26
- function A() {
27
- return T;
20
+ function se() {
21
+ return j;
28
22
  }
29
- function de() {
23
+ function M() {
30
24
  return E;
31
25
  }
32
- function fe(e, t) {
33
- return [...w, ...T].find((n) => n.kind === e && n.name === t);
26
+ function N() {
27
+ return D;
28
+ }
29
+ function ce() {
30
+ return O;
31
+ }
32
+ function le(e, t) {
33
+ return [...E, ...D].find((n) => n.kind === e && n.name === t);
34
34
  }
35
35
  //#endregion
36
36
  //#region src/lib/theme.ts
37
- var j = h(!1);
38
- ne(j, (e) => {
37
+ var P = g(!1);
38
+ te(P, (e) => {
39
39
  document.documentElement.classList.toggle("dark", e);
40
40
  }, { immediate: !0 });
41
- function pe() {
41
+ function ue() {
42
42
  return {
43
- isDark: j,
43
+ isDark: P,
44
44
  toggle: () => {
45
- j.value = !j.value;
45
+ P.value = !P.value;
46
46
  }
47
47
  };
48
48
  }
49
49
  //#endregion
50
50
  //#region src/catalog/CatalogView.vue?vue&type=script&setup=true&lang.ts
51
- var M = { class: "mx-auto min-h-screen max-w-3xl p-8" }, N = { class: "mb-8 flex items-center" }, P = { class: "mb-10" }, me = { class: "space-y-2" }, he = { class: "font-bold dark:text-gray-100" }, ge = { class: "ml-1 text-xs text-gray-400" }, F = { class: "text-sm text-gray-500 dark:text-gray-400" }, _e = { class: "mb-10" }, ve = { class: "space-y-2" }, ye = { class: "font-bold dark:text-gray-100" }, be = { class: "ml-1 text-xs text-gray-400" }, xe = { class: "text-sm text-gray-500 dark:text-gray-400" }, Se = { class: "mb-2 rounded-lg border border-gray-300 bg-white p-4 dark:border-gray-700 dark:bg-gray-800" }, I = { class: "space-y-2 text-sm" }, L = { class: "flex gap-3" }, Ce = { class: "font-bold dark:text-gray-100" }, we = { class: "flex gap-3" }, Te = { class: "flex-1" }, Ee = { class: "space-y-1" }, De = { class: "space-y-2" }, Oe = "block rounded-lg border border-gray-300 bg-white p-4 transition hover:border-blue-500 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-400", ke = /* @__PURE__ */ l({
51
+ var F = { class: "mx-auto min-h-screen max-w-3xl p-8" }, I = { class: "mb-8 flex items-center" }, L = { class: "mb-10" }, de = { class: "space-y-2" }, fe = { class: "font-bold dark:text-gray-100" }, pe = { class: "ml-1 text-xs text-gray-400" }, R = { class: "text-sm text-gray-500 dark:text-gray-400" }, me = { class: "mb-10" }, he = { class: "space-y-2" }, ge = { class: "font-bold dark:text-gray-100" }, _e = { class: "ml-1 text-xs text-gray-400" }, ve = { class: "text-sm text-gray-500 dark:text-gray-400" }, ye = { class: "mb-2 rounded-lg border border-gray-300 bg-white p-4 dark:border-gray-700 dark:bg-gray-800" }, z = { class: "space-y-2 text-sm" }, B = { class: "flex gap-3" }, be = { class: "font-bold dark:text-gray-100" }, xe = { class: "flex gap-3" }, Se = { class: "flex-1" }, Ce = { class: "space-y-1" }, we = { class: "space-y-2" }, Te = "block rounded-lg border border-gray-300 bg-white p-4 transition hover:border-blue-500 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-400", Ee = /* @__PURE__ */ l({
52
52
  __name: "CatalogView",
53
53
  setup(t) {
54
- let { isDark: n, toggle: r } = pe(), l = se(), u = ce(), f = ue(), p = A();
55
- function ee(e) {
54
+ let { isDark: n, toggle: r } = ue(), l = ae(), u = oe(), f = M(), p = N();
55
+ function m(e) {
56
56
  return e.minWidth === e.maxWidth ? `${e.maxWidth}px` : `${e.minWidth}–${e.maxWidth}px`;
57
57
  }
58
- return (t, h) => (m(), a("div", M, [
59
- o("div", N, [h[1] ||= o("h1", { class: "text-2xl font-bold dark:text-gray-100" }, "要件書カタログ", -1), y(l) ? (m(), a("button", {
58
+ return (t, g) => (h(), a("div", F, [
59
+ o("div", I, [g[1] ||= o("h1", { class: "text-2xl font-bold dark:text-gray-100" }, "要件書カタログ", -1), b(l) ? (h(), a("button", {
60
60
  key: 0,
61
61
  type: "button",
62
62
  class: "ml-auto rounded-md border border-gray-300 px-3 py-1 text-xs font-bold text-gray-600 transition hover:bg-gray-100 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800",
63
- onClick: h[0] ||= (...e) => y(r) && y(r)(...e)
64
- }, v(y(n) ? "ライトモード" : "ダークモード"), 1)) : i("", !0)]),
65
- o("section", P, [h[2] ||= o("h2", { class: "mb-3 text-lg font-bold text-gray-700 dark:text-gray-300" }, "ページ", -1), o("ul", me, [(m(!0), a(e, null, g(y(p), (e) => (m(), a("li", { key: e.name }, [c(y(x), {
63
+ onClick: g[0] ||= (...e) => b(r) && b(r)(...e)
64
+ }, y(b(n) ? "ライトモード" : "ダークモード"), 1)) : i("", !0)]),
65
+ o("section", L, [g[2] ||= o("h2", { class: "mb-3 text-lg font-bold text-gray-700 dark:text-gray-300" }, "ページ", -1), o("ul", de, [(h(!0), a(e, null, _(b(p), (e) => (h(), a("li", { key: e.name }, [c(b(S), {
66
66
  to: `/pages/${e.name}`,
67
- class: d(Oe)
67
+ class: d(Te)
68
68
  }, {
69
- default: b(() => [o("div", he, [s(v(e.title) + " ", 1), o("span", ge, "(" + v(e.latest) + ")", 1)]), o("div", F, v(e.desc), 1)]),
69
+ default: x(() => [o("div", fe, [s(y(e.title) + " ", 1), o("span", pe, "(" + y(e.latest) + ")", 1)]), o("div", R, y(e.desc), 1)]),
70
70
  _: 2
71
71
  }, 1032, ["to"])]))), 128))])]),
72
- o("section", _e, [h[3] ||= o("h2", { class: "mb-3 text-lg font-bold text-gray-700 dark:text-gray-300" }, "コンポーネント", -1), o("ul", ve, [(m(!0), a(e, null, g(y(f), (e) => (m(), a("li", { key: e.name }, [c(y(x), {
72
+ o("section", me, [g[3] ||= o("h2", { class: "mb-3 text-lg font-bold text-gray-700 dark:text-gray-300" }, "コンポーネント", -1), o("ul", he, [(h(!0), a(e, null, _(b(f), (e) => (h(), a("li", { key: e.name }, [c(b(S), {
73
73
  to: `/components/${e.name}`,
74
- class: d(Oe)
74
+ class: d(Te)
75
75
  }, {
76
- default: b(() => [o("div", ye, [s(v(e.title) + " ", 1), o("span", be, "(" + v(e.latest) + ")", 1)]), o("div", xe, v(e.desc), 1)]),
76
+ default: x(() => [o("div", ge, [s(y(e.title) + " ", 1), o("span", _e, "(" + y(e.latest) + ")", 1)]), o("div", ve, y(e.desc), 1)]),
77
77
  _: 2
78
78
  }, 1032, ["to"])]))), 128))])]),
79
79
  o("section", null, [
80
- h[8] ||= o("h2", { class: "mb-3 text-lg font-bold text-gray-700 dark:text-gray-300" }, "デザイン", -1),
81
- o("div", Se, [h[6] ||= o("div", { class: "mb-2 text-xs font-bold uppercase tracking-wide text-gray-400" }, "表示設定", -1), o("dl", I, [o("div", L, [h[4] ||= o("dt", { class: "w-28 shrink-0 text-gray-500 dark:text-gray-400" }, "ダークモード切替", -1), o("dd", Ce, v(y(l) ? "表示" : "非表示"), 1)]), o("div", we, [h[5] ||= o("dt", { class: "w-28 shrink-0 text-gray-500 dark:text-gray-400" }, "端末", -1), o("dd", Te, [o("ul", Ee, [(m(!0), a(e, null, g(y(u), (e) => (m(), a("li", {
80
+ g[8] ||= o("h2", { class: "mb-3 text-lg font-bold text-gray-700 dark:text-gray-300" }, "デザイン", -1),
81
+ o("div", ye, [g[6] ||= o("div", { class: "mb-2 text-xs font-bold uppercase tracking-wide text-gray-400" }, "表示設定", -1), o("dl", z, [o("div", B, [g[4] ||= o("dt", { class: "w-28 shrink-0 text-gray-500 dark:text-gray-400" }, "ダークモード切替", -1), o("dd", be, y(b(l) ? "表示" : "非表示"), 1)]), o("div", xe, [g[5] ||= o("dt", { class: "w-28 shrink-0 text-gray-500 dark:text-gray-400" }, "端末", -1), o("dd", Se, [o("ul", Ce, [(h(!0), a(e, null, _(b(u), (e) => (h(), a("li", {
82
82
  key: e.id,
83
83
  class: "font-mono text-xs text-gray-700 dark:text-gray-200"
84
- }, v(e.label) + "(" + v(e.frame) + ") / 幅: " + v(ee(e)), 1))), 128))])])])])]),
85
- o("ul", De, [o("li", null, [c(y(x), {
84
+ }, y(e.label) + "(" + y(e.frame) + ") / 幅: " + y(m(e)), 1))), 128))])])])])]),
85
+ o("ul", we, [o("li", null, [c(b(S), {
86
86
  to: "/colors",
87
- class: d(Oe)
87
+ class: d(Te)
88
88
  }, {
89
- default: b(() => [...h[7] ||= [o("div", { class: "font-bold dark:text-gray-100" }, "カラー", -1), o("div", { class: "text-sm text-gray-500 dark:text-gray-400" }, "accentColor 等の色定義一覧", -1)]]),
89
+ default: x(() => [...g[7] ||= [o("div", { class: "font-bold dark:text-gray-100" }, "カラー", -1), o("div", { class: "text-sm text-gray-500 dark:text-gray-400" }, "accentColor 等の色定義一覧", -1)]]),
90
90
  _: 1
91
91
  })])])
92
92
  ])
@@ -95,7 +95,7 @@ var M = { class: "mx-auto min-h-screen max-w-3xl p-8" }, N = { class: "mb-8 flex
95
95
  });
96
96
  //#endregion
97
97
  //#region node_modules/marked/lib/marked.esm.js
98
- function Ae() {
98
+ function De() {
99
99
  return {
100
100
  async: !1,
101
101
  breaks: !1,
@@ -109,22 +109,22 @@ function Ae() {
109
109
  walkTokens: null
110
110
  };
111
111
  }
112
- var R = Ae();
113
- function je(e) {
114
- R = e;
112
+ var V = De();
113
+ function Oe(e) {
114
+ V = e;
115
115
  }
116
- var z = { exec: () => null };
117
- function B(e, t = "") {
116
+ var H = { exec: () => null };
117
+ function U(e, t = "") {
118
118
  let n = typeof e == "string" ? e : e.source, r = {
119
119
  replace: (e, t) => {
120
120
  let i = typeof t == "string" ? t : t.source;
121
- return i = i.replace(V.caret, "$1"), n = n.replace(e, i), r;
121
+ return i = i.replace(W.caret, "$1"), n = n.replace(e, i), r;
122
122
  },
123
123
  getRegex: () => new RegExp(n, t)
124
124
  };
125
125
  return r;
126
126
  }
127
- var V = {
127
+ var W = {
128
128
  codeRemoveIndent: /^(?: {1,4}| {0,3}\t)/gm,
129
129
  outputLinkReplace: /\\([\[\]])/g,
130
130
  indentCodeCompensation: /^(\s+)(?:```)/,
@@ -181,78 +181,78 @@ var V = {
181
181
  fencesBeginRegex: (e) => RegExp(`^ {0,${Math.min(3, e - 1)}}(?:\`\`\`|~~~)`),
182
182
  headingBeginRegex: (e) => RegExp(`^ {0,${Math.min(3, e - 1)}}#`),
183
183
  htmlBeginRegex: (e) => RegExp(`^ {0,${Math.min(3, e - 1)}}<(?:[a-z].*>|!--)`, "i")
184
- }, Me = /^(?:[ \t]*(?:\n|$))+/, Ne = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/, Pe = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/, H = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, Fe = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, Ie = /(?:[*+-]|\d{1,9}[.)])/, Le = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/, Re = B(Le).replace(/bull/g, Ie).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex(), ze = B(Le).replace(/bull/g, Ie).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(), Be = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/, Ve = /^[^\n]+/, He = /(?!\s*\])(?:\\.|[^\[\]\\])+/, Ue = B(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", He).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(), We = B(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, Ie).getRegex(), U = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul", Ge = /<!--(?:-?>|[\s\S]*?(?:-->|$))/, Ke = B("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", "i").replace("comment", Ge).replace("tag", U).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(), qe = B(Be).replace("hr", H).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", U).getRegex(), Je = {
185
- blockquote: B(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", qe).getRegex(),
186
- code: Ne,
187
- def: Ue,
188
- fences: Pe,
189
- heading: Fe,
190
- hr: H,
191
- html: Ke,
192
- lheading: Re,
193
- list: We,
194
- newline: Me,
195
- paragraph: qe,
196
- table: z,
197
- text: Ve
198
- }, Ye = B("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", H).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3} )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", U).getRegex(), Xe = {
199
- ...Je,
200
- lheading: ze,
201
- table: Ye,
202
- paragraph: B(Be).replace("hr", H).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", Ye).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", U).getRegex()
203
- }, Ze = {
204
- ...Je,
205
- html: B("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment", Ge).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),
184
+ }, ke = /^(?:[ \t]*(?:\n|$))+/, Ae = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/, je = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/, G = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, Me = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, Ne = /(?:[*+-]|\d{1,9}[.)])/, Pe = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/, Fe = U(Pe).replace(/bull/g, Ne).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex(), Ie = U(Pe).replace(/bull/g, Ne).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(), Le = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/, Re = /^[^\n]+/, ze = /(?!\s*\])(?:\\.|[^\[\]\\])+/, Be = U(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", ze).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(), Ve = U(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, Ne).getRegex(), He = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul", Ue = /<!--(?:-?>|[\s\S]*?(?:-->|$))/, We = U("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", "i").replace("comment", Ue).replace("tag", He).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(), Ge = U(Le).replace("hr", G).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", He).getRegex(), Ke = {
185
+ blockquote: U(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", Ge).getRegex(),
186
+ code: Ae,
187
+ def: Be,
188
+ fences: je,
189
+ heading: Me,
190
+ hr: G,
191
+ html: We,
192
+ lheading: Fe,
193
+ list: Ve,
194
+ newline: ke,
195
+ paragraph: Ge,
196
+ table: H,
197
+ text: Re
198
+ }, qe = U("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", G).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3} )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", He).getRegex(), Je = {
199
+ ...Ke,
200
+ lheading: Ie,
201
+ table: qe,
202
+ paragraph: U(Le).replace("hr", G).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", qe).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", He).getRegex()
203
+ }, Ye = {
204
+ ...Ke,
205
+ html: U("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment", Ue).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),
206
206
  def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
207
207
  heading: /^(#{1,6})(.*)(?:\n+|$)/,
208
- fences: z,
208
+ fences: H,
209
209
  lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,
210
- paragraph: B(Be).replace("hr", H).replace("heading", " *#{1,6} *[^\n]").replace("lheading", Re).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex()
211
- }, Qe = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, $e = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, et = /^( {2,}|\\)\n(?!\s*$)/, tt = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/, W = /[\p{P}\p{S}]/u, nt = /[\s\p{P}\p{S}]/u, rt = /[^\s\p{P}\p{S}]/u, it = B(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, nt).getRegex(), at = /(?!~)[\p{P}\p{S}]/u, ot = /(?!~)[\s\p{P}\p{S}]/u, st = /(?:[^\s\p{P}\p{S}]|~)/u, ct = /\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<[^<>]*?>/g, lt = /^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/, ut = B(lt, "u").replace(/punct/g, W).getRegex(), dt = B(lt, "u").replace(/punct/g, at).getRegex(), ft = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)", pt = B(ft, "gu").replace(/notPunctSpace/g, rt).replace(/punctSpace/g, nt).replace(/punct/g, W).getRegex(), mt = B(ft, "gu").replace(/notPunctSpace/g, st).replace(/punctSpace/g, ot).replace(/punct/g, at).getRegex(), ht = B("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, rt).replace(/punctSpace/g, nt).replace(/punct/g, W).getRegex(), gt = B(/\\(punct)/, "gu").replace(/punct/g, W).getRegex(), _t = B(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(), vt = B(Ge).replace("(?:-->|$)", "-->").getRegex(), yt = B("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", vt).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(), G = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/, bt = B(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label", G).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(), xt = B(/^!?\[(label)\]\[(ref)\]/).replace("label", G).replace("ref", He).getRegex(), St = B(/^!?\[(ref)\](?:\[\])?/).replace("ref", He).getRegex(), Ct = {
212
- _backpedal: z,
213
- anyPunctuation: gt,
214
- autolink: _t,
215
- blockSkip: ct,
216
- br: et,
217
- code: $e,
218
- del: z,
219
- emStrongLDelim: ut,
220
- emStrongRDelimAst: pt,
221
- emStrongRDelimUnd: ht,
222
- escape: Qe,
223
- link: bt,
224
- nolink: St,
225
- punctuation: it,
226
- reflink: xt,
227
- reflinkSearch: B("reflink|nolink(?!\\()", "g").replace("reflink", xt).replace("nolink", St).getRegex(),
228
- tag: yt,
229
- text: tt,
230
- url: z
210
+ paragraph: U(Le).replace("hr", G).replace("heading", " *#{1,6} *[^\n]").replace("lheading", Fe).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex()
211
+ }, Xe = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, Ze = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, Qe = /^( {2,}|\\)\n(?!\s*$)/, $e = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/, K = /[\p{P}\p{S}]/u, et = /[\s\p{P}\p{S}]/u, tt = /[^\s\p{P}\p{S}]/u, nt = U(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, et).getRegex(), rt = /(?!~)[\p{P}\p{S}]/u, it = /(?!~)[\s\p{P}\p{S}]/u, at = /(?:[^\s\p{P}\p{S}]|~)/u, ot = /\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<[^<>]*?>/g, st = /^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/, ct = U(st, "u").replace(/punct/g, K).getRegex(), lt = U(st, "u").replace(/punct/g, rt).getRegex(), ut = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)", dt = U(ut, "gu").replace(/notPunctSpace/g, tt).replace(/punctSpace/g, et).replace(/punct/g, K).getRegex(), ft = U(ut, "gu").replace(/notPunctSpace/g, at).replace(/punctSpace/g, it).replace(/punct/g, rt).getRegex(), pt = U("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, tt).replace(/punctSpace/g, et).replace(/punct/g, K).getRegex(), mt = U(/\\(punct)/, "gu").replace(/punct/g, K).getRegex(), ht = U(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(), gt = U(Ue).replace("(?:-->|$)", "-->").getRegex(), _t = U("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", gt).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(), vt = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/, yt = U(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label", vt).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(), bt = U(/^!?\[(label)\]\[(ref)\]/).replace("label", vt).replace("ref", ze).getRegex(), xt = U(/^!?\[(ref)\](?:\[\])?/).replace("ref", ze).getRegex(), St = {
212
+ _backpedal: H,
213
+ anyPunctuation: mt,
214
+ autolink: ht,
215
+ blockSkip: ot,
216
+ br: Qe,
217
+ code: Ze,
218
+ del: H,
219
+ emStrongLDelim: ct,
220
+ emStrongRDelimAst: dt,
221
+ emStrongRDelimUnd: pt,
222
+ escape: Xe,
223
+ link: yt,
224
+ nolink: xt,
225
+ punctuation: nt,
226
+ reflink: bt,
227
+ reflinkSearch: U("reflink|nolink(?!\\()", "g").replace("reflink", bt).replace("nolink", xt).getRegex(),
228
+ tag: _t,
229
+ text: $e,
230
+ url: H
231
+ }, Ct = {
232
+ ...St,
233
+ link: U(/^!?\[(label)\]\((.*?)\)/).replace("label", vt).getRegex(),
234
+ reflink: U(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", vt).getRegex()
231
235
  }, wt = {
232
- ...Ct,
233
- link: B(/^!?\[(label)\]\((.*?)\)/).replace("label", G).getRegex(),
234
- reflink: B(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", G).getRegex()
235
- }, Tt = {
236
- ...Ct,
237
- emStrongRDelimAst: mt,
238
- emStrongLDelim: dt,
239
- url: B(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, "i").replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),
236
+ ...St,
237
+ emStrongRDelimAst: ft,
238
+ emStrongLDelim: lt,
239
+ url: U(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, "i").replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),
240
240
  _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,
241
241
  del: /^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,
242
242
  text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/
243
+ }, Tt = {
244
+ ...wt,
245
+ br: U(Qe).replace("{2,}", "*").getRegex(),
246
+ text: U(wt.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex()
243
247
  }, Et = {
244
- ...Tt,
245
- br: B(et).replace("{2,}", "*").getRegex(),
246
- text: B(Tt.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex()
247
- }, K = {
248
- normal: Je,
249
- gfm: Xe,
250
- pedantic: Ze
248
+ normal: Ke,
249
+ gfm: Je,
250
+ pedantic: Ye
251
251
  }, q = {
252
- normal: Ct,
253
- gfm: Tt,
254
- breaks: Et,
255
- pedantic: wt
252
+ normal: St,
253
+ gfm: wt,
254
+ breaks: Tt,
255
+ pedantic: Ct
256
256
  }, Dt = {
257
257
  "&": "&amp;",
258
258
  "<": "&lt;",
@@ -262,27 +262,27 @@ var V = {
262
262
  }, Ot = (e) => Dt[e];
263
263
  function J(e, t) {
264
264
  if (t) {
265
- if (V.escapeTest.test(e)) return e.replace(V.escapeReplace, Ot);
266
- } else if (V.escapeTestNoEncode.test(e)) return e.replace(V.escapeReplaceNoEncode, Ot);
265
+ if (W.escapeTest.test(e)) return e.replace(W.escapeReplace, Ot);
266
+ } else if (W.escapeTestNoEncode.test(e)) return e.replace(W.escapeReplaceNoEncode, Ot);
267
267
  return e;
268
268
  }
269
269
  function kt(e) {
270
270
  try {
271
- e = encodeURI(e).replace(V.percentDecode, "%");
271
+ e = encodeURI(e).replace(W.percentDecode, "%");
272
272
  } catch {
273
273
  return null;
274
274
  }
275
275
  return e;
276
276
  }
277
277
  function At(e, t) {
278
- let n = e.replace(V.findPipe, (e, t, n) => {
278
+ let n = e.replace(W.findPipe, (e, t, n) => {
279
279
  let r = !1, i = t;
280
280
  for (; --i >= 0 && n[i] === "\\";) r = !r;
281
281
  return r ? "|" : " |";
282
- }).split(V.splitPipe), r = 0;
282
+ }).split(W.splitPipe), r = 0;
283
283
  if (n[0].trim() || n.shift(), n.length > 0 && !n.at(-1)?.trim() && n.pop(), t) if (n.length > t) n.splice(t);
284
284
  else for (; n.length < t;) n.push("");
285
- for (; r < n.length; r++) n[r] = n[r].trim().replace(V.slashPipe, "|");
285
+ for (; r < n.length; r++) n[r] = n[r].trim().replace(W.slashPipe, "|");
286
286
  return n;
287
287
  }
288
288
  function Y(e, t, n) {
@@ -334,7 +334,7 @@ var Pt = class {
334
334
  rules;
335
335
  lexer;
336
336
  constructor(e) {
337
- this.options = e || R;
337
+ this.options = e || V;
338
338
  }
339
339
  space(e) {
340
340
  let t = this.rules.block.newline.exec(e);
@@ -747,21 +747,21 @@ ${c}` : c;
747
747
  tokenizer;
748
748
  inlineQueue;
749
749
  constructor(e) {
750
- this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = e || R, this.options.tokenizer = this.options.tokenizer || new Pt(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = {
750
+ this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = e || V, this.options.tokenizer = this.options.tokenizer || new Pt(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = {
751
751
  inLink: !1,
752
752
  inRawBlock: !1,
753
753
  top: !0
754
754
  };
755
755
  let t = {
756
- other: V,
757
- block: K.normal,
756
+ other: W,
757
+ block: Et.normal,
758
758
  inline: q.normal
759
759
  };
760
- this.options.pedantic ? (t.block = K.pedantic, t.inline = q.pedantic) : this.options.gfm && (t.block = K.gfm, this.options.breaks ? t.inline = q.breaks : t.inline = q.gfm), this.tokenizer.rules = t;
760
+ this.options.pedantic ? (t.block = Et.pedantic, t.inline = q.pedantic) : this.options.gfm && (t.block = Et.gfm, this.options.breaks ? t.inline = q.breaks : t.inline = q.gfm), this.tokenizer.rules = t;
761
761
  }
762
762
  static get rules() {
763
763
  return {
764
- block: K,
764
+ block: Et,
765
765
  inline: q
766
766
  };
767
767
  }
@@ -772,7 +772,7 @@ ${c}` : c;
772
772
  return new e(n).inlineTokens(t);
773
773
  }
774
774
  lex(e) {
775
- e = e.replace(V.carriageReturn, "\n"), this.blockTokens(e, this.tokens);
775
+ e = e.replace(W.carriageReturn, "\n"), this.blockTokens(e, this.tokens);
776
776
  for (let e = 0; e < this.inlineQueue.length; e++) {
777
777
  let t = this.inlineQueue[e];
778
778
  this.inlineTokens(t.src, t.tokens);
@@ -780,7 +780,7 @@ ${c}` : c;
780
780
  return this.inlineQueue = [], this.tokens;
781
781
  }
782
782
  blockTokens(e, t = [], n = !1) {
783
- for (this.options.pedantic && (e = e.replace(V.tabCharGlobal, " ").replace(V.spaceLine, "")); e;) {
783
+ for (this.options.pedantic && (e = e.replace(W.tabCharGlobal, " ").replace(W.spaceLine, "")); e;) {
784
784
  let r;
785
785
  if (this.options.extensions?.block?.some((n) => (r = n.call({ lexer: this }, e, t)) ? (e = e.substring(r.raw.length), t.push(r), !0) : !1)) continue;
786
786
  if (r = this.tokenizer.space(e)) {
@@ -952,13 +952,13 @@ ${c}` : c;
952
952
  options;
953
953
  parser;
954
954
  constructor(e) {
955
- this.options = e || R;
955
+ this.options = e || V;
956
956
  }
957
957
  space(e) {
958
958
  return "";
959
959
  }
960
960
  code({ text: e, lang: t, escaped: n }) {
961
- let r = (t || "").match(V.notSpaceStart)?.[0], i = e.replace(V.endingNewline, "") + "\n";
961
+ let r = (t || "").match(W.notSpaceStart)?.[0], i = e.replace(W.endingNewline, "") + "\n";
962
962
  return r ? "<pre><code class=\"language-" + J(r) + "\">" + (n ? i : J(i, !0)) + "</code></pre>\n" : "<pre><code>" + (n ? i : J(i, !0)) + "</code></pre>\n";
963
963
  }
964
964
  blockquote({ tokens: e }) {
@@ -1095,7 +1095,7 @@ ${e}</tr>
1095
1095
  renderer;
1096
1096
  textRenderer;
1097
1097
  constructor(e) {
1098
- this.options = e || R, this.options.renderer = this.options.renderer || new Ft(), this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new It();
1098
+ this.options = e || V, this.options.renderer = this.options.renderer || new Ft(), this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new It();
1099
1099
  }
1100
1100
  static parse(t, n) {
1101
1101
  return new e(n).parse(t);
@@ -1246,7 +1246,7 @@ ${e}</tr>
1246
1246
  options;
1247
1247
  block;
1248
1248
  constructor(e) {
1249
- this.options = e || R;
1249
+ this.options = e || V;
1250
1250
  }
1251
1251
  static passThroughHooks = /* @__PURE__ */ new Set([
1252
1252
  "preprocess",
@@ -1269,7 +1269,7 @@ ${e}</tr>
1269
1269
  return this.block ? Z.parse : Z.parseInline;
1270
1270
  }
1271
1271
  }, Q = new class {
1272
- defaults = Ae();
1272
+ defaults = De();
1273
1273
  options = this.setOptions;
1274
1274
  parse = this.parseMarkdown(!0);
1275
1275
  parseInline = this.parseMarkdown(!1);
@@ -1440,9 +1440,9 @@ function $(e, t) {
1440
1440
  //#endregion
1441
1441
  //#region src/lib/markdown.ts
1442
1442
  $.options = $.setOptions = function(e) {
1443
- return Q.setOptions(e), $.defaults = Q.defaults, je($.defaults), $;
1444
- }, $.getDefaults = Ae, $.defaults = R, $.use = function(...e) {
1445
- return Q.use(...e), $.defaults = Q.defaults, je($.defaults), $;
1443
+ return Q.setOptions(e), $.defaults = Q.defaults, Oe($.defaults), $;
1444
+ }, $.getDefaults = De, $.defaults = V, $.use = function(...e) {
1445
+ return Q.use(...e), $.defaults = Q.defaults, Oe($.defaults), $;
1446
1446
  }, $.walkTokens = function(e, t) {
1447
1447
  return Q.walkTokens(e, t);
1448
1448
  }, $.parseInline = Q.parseInline, $.Parser = Z, $.parser = Z.parse, $.Renderer = Ft, $.TextRenderer = It, $.Lexer = X, $.lexer = X.lex, $.Tokenizer = Pt, $.Hooks = Lt, $.parse = $, $.options, $.setOptions, $.use, $.walkTokens, $.parseInline, Z.parse, X.lex, $.setOptions({
@@ -1471,17 +1471,17 @@ var zt = {
1471
1471
  function t(e) {
1472
1472
  return `${e}px`;
1473
1473
  }
1474
- return (n, r) => e.frame === "phone" || e.frame === "tablet" ? (m(), a("div", zt, [o("div", Bt, [o("div", {
1474
+ return (n, r) => e.frame === "phone" || e.frame === "tablet" ? (h(), a("div", zt, [o("div", Bt, [o("div", {
1475
1475
  class: "relative overflow-hidden rounded-[1.8rem]",
1476
1476
  style: f({
1477
1477
  width: t(e.screenWidth),
1478
1478
  ...e.baseStyle
1479
1479
  })
1480
1480
  }, [
1481
- e.frame === "phone" ? (m(), a("div", Vt)) : i("", !0),
1482
- _(n.$slots, "default"),
1481
+ e.frame === "phone" ? (h(), a("div", Vt)) : i("", !0),
1482
+ v(n.$slots, "default"),
1483
1483
  r[0] ||= o("div", { class: "pointer-events-none absolute bottom-2 left-1/2 z-10 h-1 w-24 -translate-x-1/2 rounded-full bg-gray-300 dark:bg-gray-600" }, null, -1)
1484
- ], 4)])])) : (m(), a("div", {
1484
+ ], 4)])])) : (h(), a("div", {
1485
1485
  key: 1,
1486
1486
  class: "inline-block overflow-hidden rounded-xl border-2 border-gray-300 shadow-sm dark:border-gray-700",
1487
1487
  style: f({ width: t(e.screenWidth) })
@@ -1489,7 +1489,7 @@ var zt = {
1489
1489
  o("span", { class: "h-3 w-3 rounded-full bg-red-400" }),
1490
1490
  o("span", { class: "h-3 w-3 rounded-full bg-yellow-400" }),
1491
1491
  o("span", { class: "h-3 w-3 rounded-full bg-green-400" })
1492
- ], -1), o("div", { style: f(e.baseStyle) }, [_(n.$slots, "default")], 4)], 4));
1492
+ ], -1), o("div", { style: f(e.baseStyle) }, [v(n.$slots, "default")], 4)], 4));
1493
1493
  }
1494
1494
  }), Ut = {
1495
1495
  key: 0,
@@ -1510,15 +1510,15 @@ var zt = {
1510
1510
  doc: {}
1511
1511
  },
1512
1512
  setup(n) {
1513
- let l = n, te = t(() => Rt(l.doc)), { isDark: re, toggle: ie } = pe(), ae = se(), S = ce(), C = h(S[0]?.id ?? ""), w = t(() => S.find((e) => e.id === C.value) ?? S[0]), T = le(), E = t(() => {
1514
- if (!T) return {};
1515
- let e = re.value ? T.dark : T.light;
1513
+ let l = n, ee = t(() => Rt(l.doc)), { isDark: ne, toggle: C } = ue(), re = ae(), w = oe(), T = g(w[0]?.id ?? ""), E = t(() => w.find((e) => e.id === T.value) ?? w[0]), D = se(), O = t(() => {
1514
+ if (!D) return {};
1515
+ let e = ne.value ? D.dark : D.light;
1516
1516
  return {
1517
1517
  background: e.bg,
1518
1518
  color: e.font
1519
1519
  };
1520
- }), D = h(null), O = h(null), k = h(0), oe = h(0), ue = h(0), A = h(!1), de = h(null), fe = t(() => {
1521
- let e = w.value;
1520
+ }), k = g(null), A = g(null), j = g(0), ie = g(0), M = g(0), N = g(!1), ce = g(null), le = t(() => {
1521
+ let e = E.value;
1522
1522
  return e ? {
1523
1523
  min: e.minWidth,
1524
1524
  max: e.maxWidth
@@ -1527,168 +1527,171 @@ var zt = {
1527
1527
  max: 0
1528
1528
  };
1529
1529
  });
1530
- function j() {
1531
- let e = w.value;
1530
+ function P() {
1531
+ let e = E.value;
1532
1532
  if (!e) return 0;
1533
- let t = de.value ?? e.minWidth;
1533
+ let t = ce.value ?? e.minWidth;
1534
1534
  return Math.min(e.maxWidth, Math.max(e.minWidth, t));
1535
1535
  }
1536
- let M = t(() => j()), N = t(() => {
1537
- let e = w.value;
1536
+ let F = t(() => P()), I = t(() => {
1537
+ let e = E.value;
1538
1538
  return !!e && e.minWidth < e.maxWidth;
1539
- }), P = t(() => {
1540
- if (A.value) return 1;
1541
- let e = ue.value || M.value;
1542
- return !e || k.value === 0 ? 1 : Math.min(1, k.value / e);
1543
- }), me = t(() => {
1544
- let e = ue.value || M.value;
1545
- return e ? e * P.value : 0;
1546
- }), he = t(() => oe.value * P.value), ge = t(() => A.value && M.value > 0 && k.value > 0 && M.value < k.value), F = h(!1), _e = 0, ve = 0, ye = 1;
1547
- function be(e) {
1548
- let t = w.value;
1549
- t && (de.value = Math.min(t.maxWidth, Math.max(t.minWidth, e)));
1539
+ }), L = t(() => {
1540
+ if (N.value) return 1;
1541
+ let e = M.value || F.value;
1542
+ return !e || j.value === 0 ? 1 : Math.min(1, j.value / e);
1543
+ }), de = t(() => {
1544
+ let e = M.value || F.value;
1545
+ return e ? e * L.value : 0;
1546
+ }), fe = t(() => ie.value * L.value), pe = t(() => N.value && F.value > 0 && j.value > 0 && F.value < j.value), R = g(!1), me = 0, he = 0, ge = 1;
1547
+ function _e(e) {
1548
+ let t = E.value;
1549
+ t && (ce.value = Math.min(t.maxWidth, Math.max(t.minWidth, e)));
1550
1550
  }
1551
- function xe(e) {
1552
- let t = M.value;
1553
- C.value = e, be(t);
1551
+ function ve(e) {
1552
+ let t = F.value;
1553
+ T.value = e, _e(t);
1554
1554
  }
1555
- function Se(e) {
1556
- if (!w.value || !N.value) return;
1555
+ function ye(e) {
1556
+ if (!E.value || !I.value) return;
1557
1557
  e.preventDefault(), e.stopPropagation();
1558
1558
  let t = e.currentTarget;
1559
- t.setPointerCapture(e.pointerId), F.value = !0, _e = e.clientX, ve = M.value, ye = P.value, document.body.style.userSelect = "none", document.body.style.cursor = "ew-resize";
1559
+ t.setPointerCapture(e.pointerId), R.value = !0, me = e.clientX, he = F.value, ge = L.value, document.body.style.userSelect = "none", document.body.style.cursor = "ew-resize";
1560
1560
  function n(e) {
1561
1561
  if (!e.isPrimary) return;
1562
- let t = (e.clientX - _e) / ye;
1563
- be(ve + t);
1562
+ let t = (e.clientX - me) / ge;
1563
+ _e(he + t);
1564
1564
  }
1565
1565
  function r(e) {
1566
- e.isPrimary && (t.releasePointerCapture(e.pointerId), F.value = !1, document.body.style.userSelect = "", document.body.style.cursor = "", t.removeEventListener("pointermove", n), t.removeEventListener("pointerup", r), t.removeEventListener("pointercancel", r), u(L));
1566
+ e.isPrimary && (t.releasePointerCapture(e.pointerId), R.value = !1, document.body.style.userSelect = "", document.body.style.cursor = "", t.removeEventListener("pointermove", n), t.removeEventListener("pointerup", r), t.removeEventListener("pointercancel", r), u(B));
1567
1567
  }
1568
1568
  t.addEventListener("pointermove", n), t.addEventListener("pointerup", r), t.addEventListener("pointercancel", r);
1569
1569
  }
1570
- let I = null;
1571
- function L() {
1572
- D.value && (k.value = D.value.clientWidth), O.value && (oe.value = O.value.offsetHeight, ue.value = O.value.offsetWidth);
1570
+ let z = null;
1571
+ function B() {
1572
+ k.value && (j.value = k.value.clientWidth), A.value && (ie.value = A.value.offsetHeight, M.value = A.value.offsetWidth);
1573
1573
  }
1574
- function Ce() {
1575
- I?.disconnect(), D.value && I?.observe(D.value), O.value && I?.observe(O.value);
1574
+ function be() {
1575
+ z?.disconnect(), k.value && z?.observe(k.value), A.value && z?.observe(A.value);
1576
1576
  }
1577
- function we(e) {
1578
- e.key === "Escape" && (A.value = !1);
1577
+ function xe(e) {
1578
+ e.key === "Escape" && (N.value = !1);
1579
1579
  }
1580
- return ee(() => {
1581
- I = new ResizeObserver(() => L()), Ce(), L(), window.addEventListener("keydown", we);
1580
+ return m(() => {
1581
+ z = new ResizeObserver(() => B()), be(), B(), window.addEventListener("keydown", xe);
1582
1582
  }), p(() => {
1583
- I?.disconnect(), window.removeEventListener("keydown", we);
1584
- }), ne([
1585
- C,
1586
- A,
1587
- M
1583
+ z?.disconnect(), window.removeEventListener("keydown", xe);
1584
+ }), te([
1585
+ T,
1586
+ N,
1587
+ F
1588
1588
  ], () => u(() => {
1589
- Ce(), L();
1590
- })), (t, l) => A.value ? (m(), a("div", rn, [o("button", {
1589
+ be(), B();
1590
+ })), (t, l) => N.value ? (h(), a("div", rn, [o("button", {
1591
1591
  type: "button",
1592
1592
  class: "fixed right-4 top-4 z-10 rounded-md border border-gray-300 bg-white px-3 py-1 text-xs font-bold text-gray-700 shadow-sm transition hover:bg-gray-100 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100 dark:hover:bg-gray-700",
1593
- onClick: l[2] ||= (e) => A.value = !1
1593
+ onClick: l[2] ||= (e) => N.value = !1
1594
1594
  }, " 閉じる(Esc) "), o("div", {
1595
1595
  ref_key: "areaRef",
1596
- ref: D,
1596
+ ref: k,
1597
1597
  class: "flex min-h-full w-full justify-center"
1598
- }, [w.value ? (m(), a("div", {
1598
+ }, [E.value ? (h(), a("div", {
1599
1599
  key: 0,
1600
- class: d(["relative w-fit shrink-0", ge.value ? "border border-gray-300 shadow-lg dark:border-gray-600" : ""])
1600
+ class: d(["relative w-fit shrink-0", pe.value ? "border border-gray-300 shadow-lg dark:border-gray-600" : ""])
1601
1601
  }, [o("div", {
1602
1602
  ref_key: "contentRef",
1603
- ref: O,
1603
+ ref: A,
1604
1604
  class: "w-fit"
1605
- }, [w.value ? (m(), r(Ht, {
1605
+ }, [E.value ? (h(), r(Ht, {
1606
1606
  key: 0,
1607
- frame: w.value.frame,
1608
- "screen-width": M.value,
1609
- "base-style": E.value
1607
+ frame: E.value.frame,
1608
+ "screen-width": F.value,
1609
+ "base-style": O.value
1610
1610
  }, {
1611
- default: b(() => [_(t.$slots, "mock")]),
1611
+ default: x(() => [v(t.$slots, "mock")]),
1612
1612
  _: 3
1613
1613
  }, 8, [
1614
1614
  "frame",
1615
1615
  "screen-width",
1616
1616
  "base-style"
1617
- ])) : i("", !0)], 512), N.value ? (m(), a("div", {
1617
+ ])) : i("", !0)], 512), I.value ? (h(), a("div", {
1618
1618
  key: 0,
1619
- class: d(["absolute inset-y-0 -right-1 z-20 flex w-3 cursor-ew-resize touch-none items-center justify-center opacity-60 hover:opacity-100", F.value ? "opacity-100" : ""]),
1620
- onPointerdown: Se
1621
- }, [o("div", { class: d(["h-10 w-1 rounded-full bg-gray-400 dark:bg-gray-500", F.value ? "bg-blue-500 dark:bg-blue-400" : ""]) }, null, 2)], 34)) : i("", !0)], 2)) : i("", !0)], 512)])) : (m(), a("div", Ut, [o("header", Wt, [
1622
- c(y(x), {
1619
+ class: d(["absolute inset-y-0 -right-1 z-20 flex w-3 cursor-ew-resize touch-none items-center justify-center opacity-60 hover:opacity-100", R.value ? "opacity-100" : ""]),
1620
+ onPointerdown: ye
1621
+ }, [o("div", { class: d(["h-10 w-1 rounded-full bg-gray-400 dark:bg-gray-500", R.value ? "bg-blue-500 dark:bg-blue-400" : ""]) }, null, 2)], 34)) : i("", !0)], 2)) : i("", !0)], 512)])) : (h(), a("div", Ut, [o("header", Wt, [
1622
+ c(b(S), {
1623
1623
  to: "/catalog",
1624
1624
  class: "text-sm text-gray-500 underline hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-100"
1625
1625
  }, {
1626
- default: b(() => [...l[3] ||= [s(" ← 一覧 ", -1)]]),
1626
+ default: x(() => [...l[3] ||= [s(" ← 一覧 ", -1)]]),
1627
1627
  _: 1
1628
1628
  }),
1629
- o("h1", Gt, v(n.title), 1),
1629
+ o("h1", Gt, y(n.title), 1),
1630
1630
  o("div", Kt, [
1631
- _(t.$slots, "toolbar"),
1631
+ v(t.$slots, "toolbar"),
1632
1632
  o("button", {
1633
1633
  type: "button",
1634
1634
  class: "rounded-md border border-gray-300 px-3 py-1 text-xs font-bold text-gray-600 transition hover:bg-gray-100 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700",
1635
- onClick: l[0] ||= (e) => A.value = !A.value
1636
- }, v(A.value ? "要件を表示" : "プレビュー"), 1),
1637
- y(ae) ? (m(), a("button", {
1635
+ onClick: l[0] ||= (e) => N.value = !N.value
1636
+ }, y(N.value ? "要件を表示" : "プレビュー"), 1),
1637
+ b(re) ? (h(), a("button", {
1638
1638
  key: 0,
1639
1639
  type: "button",
1640
1640
  class: "rounded-md border border-gray-300 px-3 py-1 text-xs font-bold text-gray-600 transition hover:bg-gray-100 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700",
1641
- onClick: l[1] ||= (...e) => y(ie) && y(ie)(...e)
1642
- }, v(y(re) ? "ライトモード" : "ダークモード"), 1)) : i("", !0)
1641
+ onClick: l[1] ||= (...e) => b(C) && b(C)(...e)
1642
+ }, y(b(ne) ? "ライトモード" : "ダークモード"), 1)) : i("", !0)
1643
1643
  ])
1644
- ]), o("div", qt, [o("section", Jt, [o("div", Yt, [l[4] ||= o("span", { class: "text-xs font-bold uppercase tracking-wide text-gray-400" }, " 画面 mock ", -1), o("div", Xt, [w.value ? (m(), a("span", Zt, [s(v(M.value) + "px ", 1), N.value ? (m(), a("span", Qt, " (" + v(fe.value.min) + "–" + v(fe.value.max) + ") ", 1)) : i("", !0)])) : i("", !0), y(S).length > 1 ? (m(), a("div", {
1644
+ ]), o("div", qt, [o("section", Jt, [o("div", Yt, [l[4] ||= o("span", { class: "text-xs font-bold uppercase tracking-wide text-gray-400" }, " 画面 mock ", -1), o("div", Xt, [E.value ? (h(), a("span", Zt, [s(y(F.value) + "px ", 1), I.value ? (h(), a("span", Qt, " (" + y(le.value.min) + "–" + y(le.value.max) + ") ", 1)) : i("", !0)])) : i("", !0), b(w).length > 1 ? (h(), a("div", {
1645
1645
  key: 1,
1646
- class: d(["inline-flex overflow-hidden rounded-md border border-gray-300 text-xs font-bold dark:border-gray-600", F.value ? "pointer-events-none" : ""])
1647
- }, [(m(!0), a(e, null, g(y(S), (e) => (m(), a("button", {
1646
+ class: d(["inline-flex overflow-hidden rounded-md border border-gray-300 text-xs font-bold dark:border-gray-600", R.value ? "pointer-events-none" : ""])
1647
+ }, [(h(!0), a(e, null, _(b(w), (e) => (h(), a("button", {
1648
1648
  key: e.id,
1649
1649
  type: "button",
1650
- class: d(["px-3 py-1 transition", C.value === e.id ? "bg-gray-800 text-white dark:bg-gray-200 dark:text-gray-900" : "text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700"]),
1651
- onClick: (t) => xe(e.id)
1652
- }, v(e.label), 11, $t))), 128))], 2)) : i("", !0)])]), o("div", en, [o("div", {
1650
+ class: d(["px-3 py-1 transition", T.value === e.id ? "bg-gray-800 text-white dark:bg-gray-200 dark:text-gray-900" : "text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700"]),
1651
+ onClick: (t) => ve(e.id)
1652
+ }, y(e.label), 11, $t))), 128))], 2)) : i("", !0)])]), o("div", en, [o("div", {
1653
1653
  ref_key: "areaRef",
1654
- ref: D
1655
- }, [w.value ? (m(), a("div", {
1654
+ ref: k
1655
+ }, [E.value ? (h(), a("div", {
1656
1656
  key: 0,
1657
1657
  class: "relative mx-auto overflow-hidden",
1658
1658
  style: f({
1659
- width: me.value ? `${me.value}px` : "",
1660
- height: oe.value ? `${he.value}px` : "auto"
1659
+ width: de.value ? `${de.value}px` : "",
1660
+ height: ie.value ? `${fe.value}px` : "auto"
1661
1661
  })
1662
1662
  }, [o("div", {
1663
1663
  ref_key: "contentRef",
1664
- ref: O,
1664
+ ref: A,
1665
1665
  class: "origin-top-left w-fit",
1666
- style: f({ transform: `scale(${P.value})` })
1667
- }, [w.value ? (m(), r(Ht, {
1666
+ style: f({ transform: `scale(${L.value})` })
1667
+ }, [E.value ? (h(), r(Ht, {
1668
1668
  key: 0,
1669
- frame: w.value.frame,
1670
- "screen-width": M.value,
1671
- "base-style": E.value
1669
+ frame: E.value.frame,
1670
+ "screen-width": F.value,
1671
+ "base-style": O.value
1672
1672
  }, {
1673
- default: b(() => [_(t.$slots, "mock")]),
1673
+ default: x(() => [v(t.$slots, "mock")]),
1674
1674
  _: 3
1675
1675
  }, 8, [
1676
1676
  "frame",
1677
1677
  "screen-width",
1678
1678
  "base-style"
1679
- ])) : i("", !0)], 4), N.value ? (m(), a("div", {
1679
+ ])) : i("", !0)], 4), I.value ? (h(), a("div", {
1680
1680
  key: 0,
1681
- class: d(["absolute inset-y-0 -right-1 z-20 flex w-3 cursor-ew-resize touch-none items-center justify-center", F.value ? "opacity-100" : "opacity-60 hover:opacity-100"]),
1682
- onPointerdown: Se
1683
- }, [o("div", { class: d(["h-10 w-1 rounded-full bg-gray-400 dark:bg-gray-500", F.value ? "bg-blue-500 dark:bg-blue-400" : ""]) }, null, 2)], 34)) : i("", !0)], 4)) : i("", !0)], 512)])]), o("section", tn, [l[5] ||= o("div", { class: "mb-3 text-xs font-bold uppercase tracking-wide text-gray-400" }, " 要件 ", -1), o("div", {
1681
+ class: d(["absolute inset-y-0 -right-1 z-20 flex w-3 cursor-ew-resize touch-none items-center justify-center", R.value ? "opacity-100" : "opacity-60 hover:opacity-100"]),
1682
+ onPointerdown: ye
1683
+ }, [o("div", { class: d(["h-10 w-1 rounded-full bg-gray-400 dark:bg-gray-500", R.value ? "bg-blue-500 dark:bg-blue-400" : ""]) }, null, 2)], 34)) : i("", !0)], 4)) : i("", !0)], 512)])]), o("section", tn, [l[5] ||= o("div", { class: "mb-3 text-xs font-bold uppercase tracking-wide text-gray-400" }, " 要件 ", -1), o("div", {
1684
1684
  class: "req-md",
1685
- innerHTML: te.value
1685
+ innerHTML: ee.value
1686
1686
  }, null, 8, nn)])])]));
1687
1687
  }
1688
- }), on = { class: "flex items-center gap-2 text-sm" }, sn = ["value"], cn = ["value"], ln = ["innerHTML"], un = {
1688
+ }), on = { class: "flex items-center gap-2 text-sm" }, sn = ["value"], cn = ["value"], ln = {
1689
+ key: 0,
1690
+ class: "mb-3 flex items-center gap-2"
1691
+ }, un = { class: "inline-flex overflow-hidden rounded-md border border-gray-300 text-xs font-bold dark:border-gray-600" }, dn = ["onClick"], fn = ["innerHTML"], pn = {
1689
1692
  key: 1,
1690
1693
  class: "p-8"
1691
- }, dn = { class: "text-gray-600" }, fn = /* @__PURE__ */ l({
1694
+ }, mn = { class: "text-gray-600" }, hn = /* @__PURE__ */ l({
1692
1695
  __name: "ReqPageView",
1693
1696
  props: {
1694
1697
  kind: {},
@@ -1696,44 +1699,60 @@ var zt = {
1696
1699
  ver: {}
1697
1700
  },
1698
1701
  setup(n) {
1699
- let i = n, l = S(), u = t(() => fe(i.kind, i.name)), d = t(() => i.ver || u.value?.latest || ""), f = t(() => u.value?.versions[d.value]), p = t(() => u.value ? Object.keys(u.value.versions) : []);
1700
- function ee(e) {
1702
+ let l = n, u = w(), f = t(() => le(l.kind, l.name)), p = t(() => l.ver || f.value?.latest || ""), m = t(() => f.value?.versions[p.value]), v = t(() => f.value ? Object.keys(f.value.versions) : []);
1703
+ function ne(e) {
1704
+ return e ? e.variants?.length ? e.variants : e.view === void 0 ? [] : [{
1705
+ id: "default",
1706
+ label: "default",
1707
+ view: e.view
1708
+ }] : [];
1709
+ }
1710
+ let C = t(() => ne(m.value)), re = t(() => C.value.length > 1), T = g(""), E = t(() => C.value.find((e) => e.id === T.value)?.view ?? C.value[0]?.view);
1711
+ te(() => [m.value, p.value], () => {
1712
+ T.value = C.value[0]?.id ?? "";
1713
+ }, { immediate: !0 });
1714
+ function D(e) {
1701
1715
  let t = e.target.value;
1702
- l.push(`/${i.kind}s/${i.name}/${t}`);
1716
+ u.push(`/${l.kind}s/${l.name}/${t}`);
1703
1717
  }
1704
- return (t, i) => u.value && f.value ? (m(), r(an, {
1718
+ return (t, l) => f.value && m.value && E.value !== void 0 ? (h(), r(an, {
1705
1719
  key: 0,
1706
- title: u.value.title,
1707
- doc: f.value.req
1720
+ title: f.value.title,
1721
+ doc: m.value.req
1708
1722
  }, {
1709
- toolbar: b(() => [o("label", on, [i[0] ||= o("span", { class: "text-gray-500 dark:text-gray-400" }, "バージョン", -1), o("select", {
1710
- value: d.value,
1723
+ toolbar: x(() => [o("label", on, [l[0] ||= o("span", { class: "text-gray-500 dark:text-gray-400" }, "バージョン", -1), o("select", {
1724
+ value: p.value,
1711
1725
  class: "rounded border border-gray-300 bg-white px-2 py-1 text-gray-800 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100",
1712
- onChange: ee
1713
- }, [(m(!0), a(e, null, g(p.value, (e) => (m(), a("option", {
1726
+ onChange: D
1727
+ }, [(h(!0), a(e, null, _(v.value, (e) => (h(), a("option", {
1714
1728
  key: e,
1715
1729
  value: e
1716
- }, v(e), 9, cn))), 128))], 40, sn)])]),
1717
- mock: b(() => [typeof f.value.view == "string" ? (m(), a("div", {
1718
- key: 0,
1719
- innerHTML: f.value.view
1720
- }, null, 8, ln)) : (m(), r(te(f.value.view), { key: 1 }))]),
1730
+ }, y(e), 9, cn))), 128))], 40, sn)])]),
1731
+ mock: x(() => [re.value ? (h(), a("div", ln, [l[1] ||= o("span", { class: "text-xs font-bold uppercase tracking-wide text-gray-400" }, "状態", -1), o("div", un, [(h(!0), a(e, null, _(C.value, (e) => (h(), a("button", {
1732
+ key: e.id,
1733
+ type: "button",
1734
+ class: d(["px-3 py-1 transition", T.value === e.id ? "bg-gray-800 text-white dark:bg-gray-200 dark:text-gray-900" : "text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700"]),
1735
+ onClick: (t) => T.value = e.id
1736
+ }, y(e.label), 11, dn))), 128))])])) : i("", !0), typeof E.value == "string" ? (h(), a("div", {
1737
+ key: 1,
1738
+ innerHTML: E.value
1739
+ }, null, 8, fn)) : (h(), r(ee(E.value), { key: 2 }))]),
1721
1740
  _: 1
1722
- }, 8, ["title", "doc"])) : (m(), a("div", un, [o("p", dn, "該当するアイテムが見つかりません: " + v(n.kind) + " / " + v(n.name), 1), c(y(x), {
1741
+ }, 8, ["title", "doc"])) : (h(), a("div", pn, [o("p", mn, "該当するアイテムが見つかりません: " + y(n.kind) + " / " + y(n.name), 1), c(b(S), {
1723
1742
  to: "/catalog",
1724
1743
  class: "text-blue-600 underline"
1725
1744
  }, {
1726
- default: b(() => [...i[1] ||= [s("← 一覧へ戻る", -1)]]),
1745
+ default: x(() => [...l[2] ||= [s("← 一覧へ戻る", -1)]]),
1727
1746
  _: 1
1728
1747
  })]));
1729
1748
  }
1730
- }), pn = { class: "min-h-screen p-6" }, mn = { class: "mb-5 flex items-center gap-4 rounded-lg border border-gray-200 bg-white px-5 py-3 text-gray-800 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100" }, hn = { class: "rounded-lg bg-gray-50 p-5 transition-colors dark:bg-gray-900" }, gn = { class: "grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4" }, _n = { class: "p-3" }, vn = { class: "font-mono text-sm font-bold dark:text-gray-100" }, yn = { class: "mt-1 space-y-0.5 font-mono text-xs" }, bn = {
1749
+ }), gn = { class: "min-h-screen p-6" }, _n = { class: "mb-5 flex items-center gap-4 rounded-lg border border-gray-200 bg-white px-5 py-3 text-gray-800 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-100" }, vn = { class: "rounded-lg bg-gray-50 p-5 transition-colors dark:bg-gray-900" }, yn = { class: "grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4" }, bn = { class: "p-3" }, xn = { class: "font-mono text-sm font-bold dark:text-gray-100" }, Sn = { class: "mt-1 space-y-0.5 font-mono text-xs" }, Cn = {
1731
1750
  key: 0,
1732
1751
  class: "mt-1 text-xs text-gray-600 dark:text-gray-400"
1733
- }, xn = /* @__PURE__ */ l({
1752
+ }, wn = /* @__PURE__ */ l({
1734
1753
  __name: "ColorsView",
1735
1754
  setup(t) {
1736
- let { isDark: n, toggle: r } = pe(), l = se(), u = le(), p = [...u ? [{
1755
+ let { isDark: n, toggle: r } = ue(), l = ae(), u = se(), p = [...u ? [{
1737
1756
  name: "baseBg",
1738
1757
  light: u.light.bg,
1739
1758
  dark: u.dark.bg,
@@ -1743,40 +1762,40 @@ var zt = {
1743
1762
  light: u.light.font,
1744
1763
  dark: u.dark.font,
1745
1764
  desc: "モックの基本文字色"
1746
- }] : [], ...de()];
1747
- return (t, u) => (m(), a("div", pn, [o("header", mn, [
1748
- c(y(x), {
1765
+ }] : [], ...ce()];
1766
+ return (t, u) => (h(), a("div", gn, [o("header", _n, [
1767
+ c(b(S), {
1749
1768
  to: "/catalog",
1750
1769
  class: "text-sm text-gray-500 underline hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-100"
1751
1770
  }, {
1752
- default: b(() => [...u[1] ||= [s(" ← 一覧 ", -1)]]),
1771
+ default: x(() => [...u[1] ||= [s(" ← 一覧 ", -1)]]),
1753
1772
  _: 1
1754
1773
  }),
1755
1774
  u[2] ||= o("h1", { class: "text-lg font-bold" }, "カラー", -1),
1756
- y(l) ? (m(), a("button", {
1775
+ b(l) ? (h(), a("button", {
1757
1776
  key: 0,
1758
1777
  type: "button",
1759
1778
  class: "ml-auto rounded-md border border-gray-300 px-3 py-1 text-xs font-bold text-gray-600 transition hover:bg-gray-100 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-700",
1760
- onClick: u[0] ||= (...e) => y(r) && y(r)(...e)
1761
- }, v(y(n) ? "ライトモード" : "ダークモード"), 1)) : i("", !0)
1762
- ]), o("div", hn, [o("div", gn, [(m(), a(e, null, g(p, (e) => o("div", {
1779
+ onClick: u[0] ||= (...e) => b(r) && b(r)(...e)
1780
+ }, y(b(n) ? "ライトモード" : "ダークモード"), 1)) : i("", !0)
1781
+ ]), o("div", vn, [o("div", yn, [(h(), a(e, null, _(p, (e) => o("div", {
1763
1782
  key: e.name,
1764
1783
  class: "overflow-hidden rounded-lg border border-gray-300 bg-white dark:border-gray-700 dark:bg-gray-800"
1765
1784
  }, [o("div", {
1766
1785
  class: "h-24 w-full border-b border-gray-200 dark:border-gray-700",
1767
- style: f({ background: y(n) ? e.dark : e.light })
1768
- }, null, 4), o("div", _n, [
1769
- o("div", vn, v(e.name), 1),
1770
- o("div", yn, [o("div", { class: d(y(n) ? "text-gray-500" : "font-bold text-gray-700") }, " light: " + v(e.light), 3), o("div", { class: d(y(n) ? "font-bold text-gray-200" : "text-gray-500") }, " dark: " + v(e.dark), 3)]),
1771
- e.desc ? (m(), a("div", bn, v(e.desc), 1)) : i("", !0)
1786
+ style: f({ background: b(n) ? e.dark : e.light })
1787
+ }, null, 4), o("div", bn, [
1788
+ o("div", xn, y(e.name), 1),
1789
+ o("div", Sn, [o("div", { class: d(b(n) ? "text-gray-500" : "font-bold text-gray-700") }, " light: " + y(e.light), 3), o("div", { class: d(b(n) ? "font-bold text-gray-200" : "text-gray-500") }, " dark: " + y(e.dark), 3)]),
1790
+ e.desc ? (h(), a("div", Cn, y(e.desc), 1)) : i("", !0)
1772
1791
  ])])), 64))])])]));
1773
1792
  }
1774
1793
  });
1775
1794
  //#endregion
1776
1795
  //#region src/router.ts
1777
- function Sn() {
1778
- return ie({
1779
- history: ae(),
1796
+ function Tn() {
1797
+ return C({
1798
+ history: re(),
1780
1799
  routes: [
1781
1800
  {
1782
1801
  path: "/",
@@ -1785,17 +1804,17 @@ function Sn() {
1785
1804
  {
1786
1805
  path: "/catalog",
1787
1806
  name: "catalog",
1788
- component: ke
1807
+ component: Ee
1789
1808
  },
1790
1809
  {
1791
1810
  path: "/colors",
1792
1811
  name: "colors",
1793
- component: xn
1812
+ component: wn
1794
1813
  },
1795
1814
  {
1796
1815
  path: "/components/:name/:ver?",
1797
1816
  name: "component",
1798
- component: fn,
1817
+ component: hn,
1799
1818
  props: (e) => ({
1800
1819
  kind: "component",
1801
1820
  name: e.params.name,
@@ -1805,7 +1824,7 @@ function Sn() {
1805
1824
  {
1806
1825
  path: "/pages/:name/:ver?",
1807
1826
  name: "page",
1808
- component: fn,
1827
+ component: hn,
1809
1828
  props: (e) => ({
1810
1829
  kind: "page",
1811
1830
  name: e.params.name,
@@ -1817,10 +1836,10 @@ function Sn() {
1817
1836
  }
1818
1837
  //#endregion
1819
1838
  //#region src/createSpecViewer.ts
1820
- function Cn(e) {
1821
- oe(e);
1822
- let t = n(C);
1823
- return t.use(Sn()), t;
1839
+ function En(e) {
1840
+ ie(e);
1841
+ let t = n(T);
1842
+ return t.use(Tn()), t;
1824
1843
  }
1825
1844
  //#endregion
1826
- export { Cn as createSpecViewer };
1845
+ export { En as createSpecViewer };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "required-doc",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "type": "module",
5
5
  "files": ["dist", "style.css", "types.d.ts"],
6
6
  "main": "./dist/index.js",
package/types.d.ts CHANGED
@@ -2,8 +2,15 @@ import type { App, Component } from 'vue'
2
2
 
3
3
  export type ItemKind = 'component' | 'page'
4
4
 
5
- export interface VersionEntry {
5
+ export interface ViewVariant {
6
+ id: string
7
+ label: string
6
8
  view: string | Component
9
+ }
10
+
11
+ export interface VersionEntry {
12
+ view?: string | Component
13
+ variants?: ViewVariant[]
7
14
  req: string
8
15
  }
9
16