mokkun 0.1.5 → 0.2.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/README.md +18 -6
- package/bin/cli.mjs +6 -6
- package/bin/viewer.html +78 -3
- package/dist/example.html +225 -0
- package/dist/mokkun.css +1 -1
- package/dist/mokkun.esm.js +14476 -9626
- package/dist/mokkun.esm.js.map +1 -1
- package/dist/mokkun.js +761 -363
- package/dist/mokkun.js.map +1 -1
- package/dist/types/lib.d.ts +109 -0
- package/dist/types/loader/file-loader.d.ts +118 -0
- package/dist/types/loader/index.d.ts +4 -0
- package/dist/types/parser/index.d.ts +5 -0
- package/dist/types/parser/key-normalizer.d.ts +24 -0
- package/dist/types/parser/v2/compile-expand.d.ts +23 -0
- package/dist/types/parser/v2/compile-field.d.ts +28 -0
- package/dist/types/parser/v2/compile-section.d.ts +6 -0
- package/dist/types/parser/v2/compile-v2.d.ts +14 -0
- package/dist/types/parser/v2/compile-warnings.d.ts +17 -0
- package/dist/types/parser/v2/file-spec.d.ts +24 -0
- package/dist/types/parser/v2/index.d.ts +5 -0
- package/dist/types/parser/v2/iso-date.d.ts +10 -0
- package/dist/types/parser/v2/parse-v2.d.ts +24 -0
- package/dist/types/parser/v2/validate-action.d.ts +11 -0
- package/dist/types/parser/v2/validate-app.d.ts +9 -0
- package/dist/types/parser/v2/validate-context.d.ts +41 -0
- package/dist/types/parser/v2/validate-field.d.ts +17 -0
- package/dist/types/parser/v2/validate-keys.d.ts +29 -0
- package/dist/types/parser/v2/validate-list.d.ts +5 -0
- package/dist/types/parser/v2/validate-v2.d.ts +6 -0
- package/dist/types/parser/v2/validate-view.d.ts +6 -0
- package/dist/types/parser/yaml-parser.d.ts +68 -0
- package/dist/types/renderer/action-handler.d.ts +76 -0
- package/dist/types/renderer/components/accordion-panel.d.ts +144 -0
- package/dist/types/renderer/components/action-buttons.d.ts +183 -0
- package/dist/types/renderer/components/alert-banner.d.ts +43 -0
- package/dist/types/renderer/components/app-header.d.ts +277 -0
- package/dist/types/renderer/components/app-navi.d.ts +167 -0
- package/dist/types/renderer/components/badge.d.ts +134 -0
- package/dist/types/renderer/components/browser.d.ts +134 -0
- package/dist/types/renderer/components/calendar.d.ts +198 -0
- package/dist/types/renderer/components/checkbox.d.ts +132 -0
- package/dist/types/renderer/components/chip.d.ts +120 -0
- package/dist/types/renderer/components/combobox.d.ts +217 -0
- package/dist/types/renderer/components/data-table.d.ts +186 -0
- package/dist/types/renderer/components/date-range-picker.d.ts +203 -0
- package/dist/types/renderer/components/definition-list.d.ts +165 -0
- package/dist/types/renderer/components/delete-confirm-dialog.d.ts +151 -0
- package/dist/types/renderer/components/dialog/action-dialog.d.ts +61 -0
- package/dist/types/renderer/components/dialog/base-dialog.d.ts +125 -0
- package/dist/types/renderer/components/dialog/dialog-types.d.ts +96 -0
- package/dist/types/renderer/components/disclosure.d.ts +118 -0
- package/dist/types/renderer/components/dropdown.d.ts +220 -0
- package/dist/types/renderer/components/duration-input.d.ts +154 -0
- package/dist/types/renderer/components/duration-picker.d.ts +108 -0
- package/dist/types/renderer/components/field-renderer.d.ts +22 -0
- package/dist/types/renderer/components/float-area.d.ts +196 -0
- package/dist/types/renderer/components/form-fields.d.ts +94 -0
- package/dist/types/renderer/components/form-section.d.ts +118 -0
- package/dist/types/renderer/components/google-map-embed.d.ts +88 -0
- package/dist/types/renderer/components/heading.d.ts +119 -0
- package/dist/types/renderer/components/image-uploader.d.ts +271 -0
- package/dist/types/renderer/components/index.d.ts +48 -0
- package/dist/types/renderer/components/information-panel.d.ts +139 -0
- package/dist/types/renderer/components/input.d.ts +222 -0
- package/dist/types/renderer/components/layout.d.ts +71 -0
- package/dist/types/renderer/components/line-clamp.d.ts +170 -0
- package/dist/types/renderer/components/loader.d.ts +104 -0
- package/dist/types/renderer/components/notification-bar.d.ts +251 -0
- package/dist/types/renderer/components/pagination.d.ts +167 -0
- package/dist/types/renderer/components/photo-manager-renderer.d.ts +9 -0
- package/dist/types/renderer/components/radio-button-panel.d.ts +152 -0
- package/dist/types/renderer/components/radio.d.ts +117 -0
- package/dist/types/renderer/components/repeater.d.ts +116 -0
- package/dist/types/renderer/components/response-message.d.ts +180 -0
- package/dist/types/renderer/components/search-input.d.ts +198 -0
- package/dist/types/renderer/components/section-nav.d.ts +151 -0
- package/dist/types/renderer/components/segmented-control.d.ts +143 -0
- package/dist/types/renderer/components/select.d.ts +98 -0
- package/dist/types/renderer/components/status-label.d.ts +146 -0
- package/dist/types/renderer/components/stepper.d.ts +123 -0
- package/dist/types/renderer/components/tabs.d.ts +185 -0
- package/dist/types/renderer/components/textarea.d.ts +173 -0
- package/dist/types/renderer/components/timeline.d.ts +146 -0
- package/dist/types/renderer/components/toggle.d.ts +109 -0
- package/dist/types/renderer/components/tooltip.d.ts +158 -0
- package/dist/types/renderer/components/wizard.d.ts +118 -0
- package/dist/types/renderer/layouts/index.d.ts +5 -0
- package/dist/types/renderer/layouts/shell.d.ts +7 -0
- package/dist/types/renderer/layouts/types.d.ts +34 -0
- package/dist/types/renderer/screen-renderer.d.ts +57 -0
- package/dist/types/renderer/utils/dom.d.ts +29 -0
- package/dist/types/renderer/utils/dummy-data.d.ts +13 -0
- package/dist/types/renderer/utils/field-helpers.d.ts +90 -0
- package/dist/types/renderer/utils/icons.d.ts +13 -0
- package/dist/types/renderer/utils/index.d.ts +6 -0
- package/dist/types/renderer-v2/actions.d.ts +30 -0
- package/dist/types/renderer-v2/app-shell.d.ts +15 -0
- package/dist/types/renderer-v2/condition.d.ts +19 -0
- package/dist/types/renderer-v2/context.d.ts +37 -0
- package/dist/types/renderer-v2/fields/choice.d.ts +12 -0
- package/dist/types/renderer-v2/fields/control-label.d.ts +57 -0
- package/dist/types/renderer-v2/fields/date.d.ts +6 -0
- package/dist/types/renderer-v2/fields/display.d.ts +22 -0
- package/dist/types/renderer-v2/fields/file-support.d.ts +15 -0
- package/dist/types/renderer-v2/fields/file.d.ts +9 -0
- package/dist/types/renderer-v2/fields/index.d.ts +20 -0
- package/dist/types/renderer-v2/fields/select.d.ts +17 -0
- package/dist/types/renderer-v2/fields/text.d.ts +26 -0
- package/dist/types/renderer-v2/fields/textarea.d.ts +5 -0
- package/dist/types/renderer-v2/fields/toggle.d.ts +6 -0
- package/dist/types/renderer-v2/icons.d.ts +35 -0
- package/dist/types/renderer-v2/index.d.ts +45 -0
- package/dist/types/renderer-v2/list-cells.d.ts +6 -0
- package/dist/types/renderer-v2/list-data.d.ts +53 -0
- package/dist/types/renderer-v2/mount-parts.d.ts +19 -0
- package/dist/types/renderer-v2/mount-repeat.d.ts +8 -0
- package/dist/types/renderer-v2/mount-section.d.ts +10 -0
- package/dist/types/renderer-v2/mount-visibility.d.ts +13 -0
- package/dist/types/renderer-v2/mount.d.ts +9 -0
- package/dist/types/renderer-v2/role.d.ts +15 -0
- package/dist/types/renderer-v2/section-fields.d.ts +11 -0
- package/dist/types/renderer-v2/section-list.d.ts +8 -0
- package/dist/types/renderer-v2/section-readonly.d.ts +8 -0
- package/dist/types/renderer-v2/section.d.ts +15 -0
- package/dist/types/renderer-v2/styles.d.ts +13 -0
- package/dist/types/renderer-v2/util.d.ts +28 -0
- package/dist/types/renderer-v2/view-state.d.ts +25 -0
- package/dist/types/renderer-v2/view.d.ts +8 -0
- package/dist/types/theme/index.d.ts +6 -0
- package/dist/types/theme/theme-manager.d.ts +102 -0
- package/dist/types/types/field-renderable.d.ts +40 -0
- package/dist/types/types/index.d.ts +7 -0
- package/dist/types/types/schema-v2.d.ts +270 -0
- package/dist/types/types/schema.d.ts +1712 -0
- package/dist/types/types/theme.d.ts +111 -0
- package/package.json +3 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mokkun v2 レンダラー(DADS 準拠)
|
|
3
|
+
* v2 文書を旧フォーマットへ変換せずに直接描画する。
|
|
4
|
+
*
|
|
5
|
+
* - renderViewV2: HTML 文字列を返す(SSR / 静的出力)
|
|
6
|
+
* - mountViewV2: container に描画し、イベントを結線して V2Controller を返す
|
|
7
|
+
*
|
|
8
|
+
* 設計: docs/format-redesign/03-renderer-v2.md
|
|
9
|
+
*/
|
|
10
|
+
import type { MokkunV2Schema } from '../types/schema-v2';
|
|
11
|
+
import { V2_VIEW_STATES, type V2RenderOptions, type V2ViewState } from './context';
|
|
12
|
+
/** onAction の付随情報 */
|
|
13
|
+
export interface V2ActionPayload {
|
|
14
|
+
/** Section.actions / list.bulkActions のとき、操作が属する Section の id */
|
|
15
|
+
section?: string;
|
|
16
|
+
/** list.bulkActions のとき、選択されている行の ID(行の `id`、なければ先頭列の値、なければ 1 始まりの通し番号) */
|
|
17
|
+
selectedRows?: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface V2Callbacks {
|
|
20
|
+
/** グローバルナビ・パンくず・navigate アクションで遷移先 view を通知する */
|
|
21
|
+
onNavigate?: (view: string) => void;
|
|
22
|
+
/** navigate 以外のアクション(submit / custom / reset)を実行したとき。Section 内の操作は payload を持つ */
|
|
23
|
+
onAction?: (actionId: string, kind: string, payload?: V2ActionPayload) => void;
|
|
24
|
+
/** true のとき、遷移時に location.hash も書き換える(既定 false) */
|
|
25
|
+
syncHash?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface V2Controller {
|
|
28
|
+
destroy(): void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* view を HTML 文字列にする。出力は `.mokkun-v2` ルート要素で包まれる。
|
|
32
|
+
* view 名が存在しないときは空のルートにエラー文を入れて返す。
|
|
33
|
+
*/
|
|
34
|
+
export declare function renderViewV2(schema: MokkunV2Schema, viewName: string, options?: V2RenderOptions): string;
|
|
35
|
+
/**
|
|
36
|
+
* container に view を描画して振る舞いを結線する。
|
|
37
|
+
* destroy() でイベントを外し、DADS の CSS 注入も解除する(二重に呼んでも何も起きない)。
|
|
38
|
+
* 同じ container に destroy() せずに続けて mount すると、前の mount のイベントが残って重複して結線される。
|
|
39
|
+
* 作り直すときは先に前の V2Controller の destroy() を呼ぶこと。
|
|
40
|
+
*/
|
|
41
|
+
export declare function mountViewV2(container: HTMLElement, schema: MokkunV2Schema, viewName: string, callbacks?: V2Callbacks & V2RenderOptions, options?: V2RenderOptions): V2Controller;
|
|
42
|
+
export { holdV2Styles } from './styles';
|
|
43
|
+
export { V2_VIEW_STATES };
|
|
44
|
+
export { availableStates, parseViewState, resolveRole, resolveViewState, V2_STATE_LABELS } from './view-state';
|
|
45
|
+
export type { V2RenderOptions, V2ViewState };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 一覧のセル: 型ごとの表示(status = chip-label、date、number 右寄せ)、リンク(column.to)、入力欄(column.field)
|
|
3
|
+
*/
|
|
4
|
+
import type { ListColumnV2 } from '../types/schema-v2';
|
|
5
|
+
import { type ListRow } from './list-data';
|
|
6
|
+
export declare function renderCell(col: ListColumnV2, row: ListRow, index: number, base: string): string;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 一覧(kind: list)の行データと、セルの型ごとの値の整形
|
|
3
|
+
* 行は list.rows(代表行)が優先。なければ列の id / ラベル / type からダミーを作る。
|
|
4
|
+
*/
|
|
5
|
+
import type { ListColumnV2, ListV2 } from '../types/schema-v2';
|
|
6
|
+
import type { ViewContext } from './context';
|
|
7
|
+
export type CellKind = 'id' | 'date' | 'number' | 'status' | 'text';
|
|
8
|
+
/** 列の種類。type があればそれに従い、なければ id / ラベルから推測する(従来どおり) */
|
|
9
|
+
export declare function columnKind(col: ListColumnV2): CellKind;
|
|
10
|
+
/**
|
|
11
|
+
* 状態列のダミー値に使うラベル。同じ view の status / select / radio などの選択肢から借りる
|
|
12
|
+
* (項目 id が列 id と同じか、列 id を含むもの。「すべて」は除く)。無ければ undefined
|
|
13
|
+
*/
|
|
14
|
+
export declare function statusLabelsFor(col: ListColumnV2, ctx: ViewContext): string[] | undefined;
|
|
15
|
+
/** 列の id / ラベルから推測したダミー値 */
|
|
16
|
+
export declare function dummyCell(col: ListColumnV2, row: number, ctx?: ViewContext): string;
|
|
17
|
+
export interface ListRow {
|
|
18
|
+
/** 行 ID。選択行の payload(selectedRows)と入力欄の name に使う。一覧の中で一意 */
|
|
19
|
+
id: string;
|
|
20
|
+
values: Record<string, unknown>;
|
|
21
|
+
/** 1 ページ目に収まらない行(rows と pageSize があるとき。並べ替えのあとで表示を決め直す) */
|
|
22
|
+
pageHidden: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 行 ID を一意にする。空のキーと重複したキーには `#<行の添字(0 始まり)>` を付ける
|
|
26
|
+
* (付けたあとも既存のキーと重なるなら、重ならなくなるまで `#` を足す)
|
|
27
|
+
*/
|
|
28
|
+
export declare function uniqueRowKeys(keys: string[]): string[];
|
|
29
|
+
/** 表示する行。empty 状態では 0 行。rows があればそれ(pageSize があれば 2 ページ目以降は pageHidden)、なければダミー行 */
|
|
30
|
+
export declare function listRows(list: ListV2, ctx: ViewContext): {
|
|
31
|
+
rows: ListRow[];
|
|
32
|
+
total: number;
|
|
33
|
+
given: boolean;
|
|
34
|
+
};
|
|
35
|
+
/** 日付を「2026年11月7日」にする。YYYY-MM は「2026年11月」。解釈できない値はそのまま */
|
|
36
|
+
export declare function formatDateCell(value: unknown): string;
|
|
37
|
+
/** 数値セル: 数値(と数字だけの文字列)は桁区切りにする。単位付きの文字列はそのまま */
|
|
38
|
+
export declare function formatNumberCell(value: unknown): string;
|
|
39
|
+
/**
|
|
40
|
+
* 状態ラベル → チップの色(03-renderer-v2.md の表と同じ。上から順に最初に当たったものを使う)
|
|
41
|
+
*
|
|
42
|
+
* | 順 | 当たるラベル | 色 |
|
|
43
|
+
* |---|---|---|
|
|
44
|
+
* | 1 | 不承認・不承諾・非承認・不可・却下 | error(red) |
|
|
45
|
+
* | 2 | 未〜・不〜・非〜で始まる(未完了・不備)、〜予定、〜なし で終わる | neutral(gray) |
|
|
46
|
+
* | 3 | 〜待ち で終わる(承認待ち・キャンセル待ち) | warning(yellow) |
|
|
47
|
+
* | 4 | 間近・保留・注意・期限・差戻 | warning(yellow) |
|
|
48
|
+
* | 5 | 要確認・要対応・エラー・欠品・失敗・取下・無効・廃番 | error(red) |
|
|
49
|
+
* | 6 | 〜済(対応済み・送信済み・受付済)・完了・承認・内定・有効・適正・販売中・成功・受理 | success(green) |
|
|
50
|
+
* | 7 | 処理中・審査中・確認中・準備中・対応中・配送中・進行中 | info(light-blue) |
|
|
51
|
+
* | 8 | それ以外(キャンセル・受付・下書きなど) | neutral(gray) |
|
|
52
|
+
*/
|
|
53
|
+
export declare function statusColor(label: string): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 部品ごとの小さな振る舞い: switch / file-upload / table の並べ替え / tab / submenu / dialog
|
|
3
|
+
*/
|
|
4
|
+
/** switch の状態を aria-checked と、フォーム送信用の hidden input の両方へ反映する */
|
|
5
|
+
export declare function setSwitch(button: HTMLElement, on: boolean): void;
|
|
6
|
+
export declare function toggleSwitch(button: HTMLElement): void;
|
|
7
|
+
/** 選択済みファイルを一覧に反映する(DADS の file-upload JS の最小相当) */
|
|
8
|
+
export declare function updateFileList(input: HTMLInputElement): void;
|
|
9
|
+
/** 並べ替えヘッダーのクリック。none → ascending → descending → ascending … */
|
|
10
|
+
export declare function sortTable(button: HTMLElement): void;
|
|
11
|
+
/** rows と pageSize があるときは、並べ替えた全行の先頭 pageSize 件だけを表示する(2 ページ目以降は hidden) */
|
|
12
|
+
export declare function applyPage(list: HTMLElement | null): void;
|
|
13
|
+
export declare function selectTab(tab: HTMLElement): void;
|
|
14
|
+
/** 矢印キー / Home / End で隣のタブへ */
|
|
15
|
+
export declare function moveTabFocus(tab: HTMLElement, key: string): boolean;
|
|
16
|
+
export declare function setSubmenu(button: HTMLElement, open: boolean): void;
|
|
17
|
+
export declare function closeAllSubmenus(root: ParentNode): void;
|
|
18
|
+
export declare function openDialog(dialog: HTMLDialogElement): void;
|
|
19
|
+
export declare function closeDialog(dialog: HTMLDialogElement): void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* repeatable: グループの追加・削除、添字の再採番、min / max の反映
|
|
3
|
+
*/
|
|
4
|
+
export declare function syncAllRepeatables(root: ParentNode): void;
|
|
5
|
+
/** クリックされたボタンが追加 / 削除なら処理して true を返す */
|
|
6
|
+
export declare function handleRepeatClick(target: Element): boolean;
|
|
7
|
+
/** フォームのリセット後: 繰り返しグループを min 件に戻す(超過分は削除) */
|
|
8
|
+
export declare function resetRepeatables(root: ParentNode): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 単位の操作: reset(その Section の項目だけ初期値に戻す)、一括操作が使う選択行の収集
|
|
3
|
+
*/
|
|
4
|
+
/** 行の選択チェックボックス/ラジオで選ばれている行 ID(list.bulkActions の payload.selectedRows) */
|
|
5
|
+
export declare function selectedRowIds(root: HTMLElement, sectionId: string | undefined): string[];
|
|
6
|
+
/**
|
|
7
|
+
* その Section の入力欄だけを初期値に戻す(ネイティブの form.reset() はフォーム全体を戻してしまう)。
|
|
8
|
+
* 繰り返しは min 件に戻し、switch とファイル一覧も追随させる。
|
|
9
|
+
*/
|
|
10
|
+
export declare function resetSection(root: HTMLElement, sectionId: string | undefined): void;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 条件: 参照先項目の現在値で、visibleWhen(項目ラッパー/セクションの hidden)と
|
|
3
|
+
* requiredWhen(必須/任意の表示と required 属性)を切り替える
|
|
4
|
+
*/
|
|
5
|
+
import { type Token } from './condition';
|
|
6
|
+
/** 項目の現在値。複数選択(data-multiple)は選択値の配列、単一 checkbox / switch は 'true' / 'false' */
|
|
7
|
+
export declare function readValue(field: HTMLElement): Token;
|
|
8
|
+
/** root 内の [data-visible-when] をすべて評価する */
|
|
9
|
+
export declare function evaluateVisibility(root: ParentNode): void;
|
|
10
|
+
/** root 内の [data-required-when] をすべて評価し、「※必須」「※任意」と required 属性を切り替える */
|
|
11
|
+
export declare function evaluateRequired(root: ParentNode): void;
|
|
12
|
+
/** visibleWhen と requiredWhen を評価する */
|
|
13
|
+
export declare function evaluateConditions(root: ParentNode): void;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mountViewV2 の振る舞い結線(イベント委譲)
|
|
3
|
+
* - 遷移: グローバルナビ・パンくず・navigate アクション → callbacks.onNavigate
|
|
4
|
+
* - 確認ダイアログ: アクションボタンで開き、確定ボタンでアクションを実行
|
|
5
|
+
* - visibleWhen / repeatable / accordion 以外の DADS 部品の最小限の JS
|
|
6
|
+
*/
|
|
7
|
+
import type { V2Callbacks } from './index';
|
|
8
|
+
/** イベントを結線する。戻り値で解除 */
|
|
9
|
+
export declare function attachV2Behavior(root: HTMLElement, callbacks: V2Callbacks): () => void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ロール指定(Action.role / NavGroup.role / Notice.role)の評価
|
|
3
|
+
*/
|
|
4
|
+
import type { RoleSpecV2 } from '../types/schema-v2';
|
|
5
|
+
/**
|
|
6
|
+
* 現在のロールで表示するか。role の省略は全ロール、現在のロールが未選択なら常に表示する
|
|
7
|
+
* (ロールを選ばない既存の挙動を変えない)。
|
|
8
|
+
*/
|
|
9
|
+
export declare function visibleForRole(role: RoleSpecV2 | undefined, current: string | undefined): boolean;
|
|
10
|
+
/** ローカル日付 YYYY-MM-DD */
|
|
11
|
+
export declare function isoDate(date: Date): string;
|
|
12
|
+
/** until が今日より前なら期限切れ(当日までは表示する) */
|
|
13
|
+
export declare function isExpired(until: string | undefined, today: string): boolean;
|
|
14
|
+
/** 今日(YYYY-MM-DD)。YYYY-MM-DD の文字列か有効な Date だけ受け付け、それ以外は実行時の日付にする */
|
|
15
|
+
export declare function resolveToday(today: Date | string | undefined): string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kind: form の項目グリッドと repeatable
|
|
3
|
+
*/
|
|
4
|
+
import type { SectionV2 } from '../types/schema-v2';
|
|
5
|
+
import { type ViewContext } from './context';
|
|
6
|
+
/** 添字付きの DOM id / name の区切り。mount.ts が繰り返しの再採番に使う */
|
|
7
|
+
export declare const GROUP_SEP = "__";
|
|
8
|
+
/** 項目グリッド。group を渡すと繰り返しグループ内(id / name に添字を付ける) */
|
|
9
|
+
export declare function renderFieldGrid(section: SectionV2, ctx: ViewContext, group?: number): string;
|
|
10
|
+
/** 繰り返し: min 件を初期表示し、追加用に <template> を持つ */
|
|
11
|
+
export declare function renderRepeatable(section: SectionV2, ctx: ViewContext): string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kind: list → table(ソート可能列は sortable-header)+ page-navigation
|
|
3
|
+
* 行は list.rows(代表行)があればそれを、なければ list-data.ts のダミー(3 行)
|
|
4
|
+
* 検索と bulkActions(選択した行への操作)は表の上の同じ行に置く
|
|
5
|
+
*/
|
|
6
|
+
import type { SectionV2 } from '../types/schema-v2';
|
|
7
|
+
import { type ViewContext } from './context';
|
|
8
|
+
export declare function renderList(section: SectionV2, ctx: ViewContext): string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kind: readonly / summary → description-list(term = ラベル、description = 値)
|
|
3
|
+
*/
|
|
4
|
+
import type { FieldV2, SectionV2 } from '../types/schema-v2';
|
|
5
|
+
import type { ViewContext } from './context';
|
|
6
|
+
/** 表示値(options があればラベルに置換、値なしは -) */
|
|
7
|
+
export declare function displayText(f: FieldV2): string;
|
|
8
|
+
export declare function renderReadonly(section: SectionV2, ctx: ViewContext): string;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 層: kind / reveal / repeatable の出し分け
|
|
3
|
+
*
|
|
4
|
+
* - reveal: collapsed が 1 つだけ → DADS disclosure(見出しはサマリー自身)
|
|
5
|
+
* - collapsed が連続 → 1 つの積み重ねた DADS accordion(各サマリー = セクション名)
|
|
6
|
+
* - visibleWhen はセクション要素自身に付ける(見出しごと隠れる)
|
|
7
|
+
*/
|
|
8
|
+
import type { SectionV2 } from '../types/schema-v2';
|
|
9
|
+
import { type ViewContext } from './context';
|
|
10
|
+
/** Section の DOM id(toc・タブのリンク先) */
|
|
11
|
+
export declare function sectionDomId(ctx: ViewContext, section: SectionV2): string;
|
|
12
|
+
/** 通常(open)のセクション */
|
|
13
|
+
export declare function renderSection(section: SectionV2, ctx: ViewContext): string;
|
|
14
|
+
/** セクション列を描画する。連続する collapsed は 1 つの accordion にまとめ、1 つだけなら disclosure */
|
|
15
|
+
export declare function renderSections(sections: SectionV2[], ctx: ViewContext): string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DADS の CSS を v2 描画中だけ document に差し込む。
|
|
3
|
+
*
|
|
4
|
+
* DADS の global.css は html / a / :focus-visible などの要素セレクタを含むため、
|
|
5
|
+
* ライブラリの CSS(mokkun.css)に静的に含めると v1 画面まで再スタイルされる。
|
|
6
|
+
* そのため ?inline で文字列として取り込み、v2 を描画している間だけ <style> として挿入する。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* スタイルを 1 つ保持する。戻り値の release で解放する(二重に呼んでも 1 回分しか減らない)。
|
|
10
|
+
* 画面遷移で「古い view を destroy → 新しい view を mount」する間に <style> が外れて付け直されないよう、
|
|
11
|
+
* 呼び出し側は destroy の前に hold し、mount の後に release する。
|
|
12
|
+
*/
|
|
13
|
+
export declare function holdV2Styles(): () => void;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2 レンダラー共通ユーティリティ
|
|
3
|
+
* HTML 文字列を組み立てるための最小限のヘルパー(DOM に依存しない)
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* ユーザー由来のテキストを HTML(要素内・属性値)に埋め込めるようエスケープする
|
|
7
|
+
*/
|
|
8
|
+
export declare function esc(value: unknown): string;
|
|
9
|
+
type AttrValue = string | number | boolean | null | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* 属性文字列を組み立てる。true は値なし属性、false / null / undefined は出力しない。
|
|
12
|
+
* 先頭に空白を含むため、そのままタグ名の直後に連結できる。
|
|
13
|
+
*/
|
|
14
|
+
export declare function attrs(map: Record<string, AttrValue>): string;
|
|
15
|
+
/** 値を比較用の文字列にする(YAML の数値・真偽値と DOM の文字列値を揃える) */
|
|
16
|
+
export declare function str(value: unknown): string;
|
|
17
|
+
/** props から文字列を取り出す */
|
|
18
|
+
export declare function propString(props: Record<string, unknown> | undefined, key: string): string | undefined;
|
|
19
|
+
/** props から有限の数値を取り出す */
|
|
20
|
+
export declare function propNumber(props: Record<string, unknown> | undefined, key: string): number | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* リンク・画像の URL を http / https / mailto に限る(javascript: などは '#' に置き換える)。
|
|
23
|
+
* 相対 URL は許可する。
|
|
24
|
+
*/
|
|
25
|
+
export declare function safeUrl(url: unknown): string;
|
|
26
|
+
/** props の配列から、指定キーが文字列のオブジェクトだけを取り出す */
|
|
27
|
+
export declare function objectItems<T extends object>(value: unknown, requiredStringKey: string): T[];
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View の状態表示(ビューアーの「状態」切替)
|
|
3
|
+
* - 既定(normal)は状態バナーを出さない。success / error は選ばれた 1 つだけ、同時には出さない
|
|
4
|
+
* - loading は DADS の progress-indicator(スピナー)。フォームの代わりに出す
|
|
5
|
+
* - empty は一覧の空表示(section-list.ts)で扱う
|
|
6
|
+
*/
|
|
7
|
+
import type { MokkunV2Schema } from '../types/schema-v2';
|
|
8
|
+
import { type V2ViewState, type ViewContext } from './context';
|
|
9
|
+
/** states.success / error のバナー。選ばれた状態の分だけ出す */
|
|
10
|
+
export declare function renderStates(ctx: ViewContext): string;
|
|
11
|
+
/** 読み込み中(上流 progress-indicator の spinner-loop.html、stacked / 大)。不確定進捗なので data-indeterminate を静的に付ける */
|
|
12
|
+
export declare function renderLoading(ctx: ViewContext): string;
|
|
13
|
+
/** 状態の表示名(ビューアーの選択肢) */
|
|
14
|
+
export declare const V2_STATE_LABELS: Record<V2ViewState, string>;
|
|
15
|
+
/**
|
|
16
|
+
* view が選べる状態。normal は常に、success / error / loading は対応する states.* があるとき、
|
|
17
|
+
* empty は states.empty か、list.empty を持つ一覧があるとき(一覧の空文言は list.empty が正)
|
|
18
|
+
*/
|
|
19
|
+
export declare function availableStates(schema: MokkunV2Schema, viewName: string): V2ViewState[];
|
|
20
|
+
/** URL パラメータなどの文字列を状態にする(不正は normal) */
|
|
21
|
+
export declare function parseViewState(value: unknown): V2ViewState;
|
|
22
|
+
/** view で選べない状態なら normal に戻す(不正な値も normal) */
|
|
23
|
+
export declare function resolveViewState(schema: MokkunV2Schema, viewName: string, state: unknown): V2ViewState;
|
|
24
|
+
/** app.roles にあるロールだけ(それ以外は未選択=すべて) */
|
|
25
|
+
export declare function resolveRole(schema: MokkunV2Schema, role: unknown): string | undefined;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View 層: 見出し、ゴール、手順ナビ、状態バナー、アクション、レイアウト(stack / tabs / sectioned)
|
|
3
|
+
*/
|
|
4
|
+
import { type ViewContext } from './context';
|
|
5
|
+
/** flow の手順ナビ(step-navigation, horizontal)。前の step は completed、現在の step は reached */
|
|
6
|
+
export declare function renderStepNavigation(ctx: ViewContext): string;
|
|
7
|
+
/** View 本体(main の中身): パンくずは app-shell 側で前置する */
|
|
8
|
+
export declare function renderViewBody(ctx: ViewContext): string;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme module exports
|
|
3
|
+
*/
|
|
4
|
+
export { ThemeManager, themeManager, initializeTheme, applyTheme, getAvailableThemes, getCurrentTheme, onThemeChange, } from './theme-manager';
|
|
5
|
+
export type { ThemeDefinition, ThemeConfig, ThemeCSSVariables, ThemeChangeEventDetail, BuiltInThemeId, } from '../types/theme';
|
|
6
|
+
export { THEME_STORAGE_KEY, THEME_DATA_ATTRIBUTE, THEME_CHANGE_EVENT, } from '../types/theme';
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mokkun Theme Manager
|
|
3
|
+
* テーマの読み込み、切り替え、保存を管理
|
|
4
|
+
*/
|
|
5
|
+
import type { ThemeDefinition, ThemeChangeEventDetail } from '../types/theme';
|
|
6
|
+
/**
|
|
7
|
+
* Theme Manager class
|
|
8
|
+
*/
|
|
9
|
+
export declare class ThemeManager {
|
|
10
|
+
private themes;
|
|
11
|
+
private currentThemeId;
|
|
12
|
+
private config;
|
|
13
|
+
private customStyleElement;
|
|
14
|
+
constructor();
|
|
15
|
+
/**
|
|
16
|
+
* Initialize the theme manager
|
|
17
|
+
* Loads saved preference or applies default theme
|
|
18
|
+
*/
|
|
19
|
+
initialize(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Load theme configuration from YAML string
|
|
22
|
+
*/
|
|
23
|
+
loadConfig(yamlContent: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get all available themes
|
|
26
|
+
*/
|
|
27
|
+
getAvailableThemes(): ThemeDefinition[];
|
|
28
|
+
/**
|
|
29
|
+
* Get current theme ID
|
|
30
|
+
*/
|
|
31
|
+
getCurrentTheme(): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Get theme by ID
|
|
34
|
+
*/
|
|
35
|
+
getTheme(id: string): ThemeDefinition | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Check if a theme exists
|
|
38
|
+
*/
|
|
39
|
+
hasTheme(id: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Apply a theme by ID
|
|
42
|
+
*/
|
|
43
|
+
applyTheme(themeId: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Apply custom CSS variables
|
|
46
|
+
*/
|
|
47
|
+
private applyCustomVariables;
|
|
48
|
+
/**
|
|
49
|
+
* Remove custom CSS variables style element
|
|
50
|
+
*/
|
|
51
|
+
private removeCustomVariables;
|
|
52
|
+
/**
|
|
53
|
+
* Register a custom theme
|
|
54
|
+
*/
|
|
55
|
+
registerTheme(theme: ThemeDefinition): void;
|
|
56
|
+
/**
|
|
57
|
+
* Unregister a theme (only custom themes can be removed)
|
|
58
|
+
*/
|
|
59
|
+
unregisterTheme(themeId: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Save theme preference to localStorage
|
|
62
|
+
*/
|
|
63
|
+
private saveTheme;
|
|
64
|
+
/**
|
|
65
|
+
* Get saved theme from localStorage
|
|
66
|
+
*/
|
|
67
|
+
getSavedTheme(): string | null;
|
|
68
|
+
/**
|
|
69
|
+
* Clear saved theme preference
|
|
70
|
+
*/
|
|
71
|
+
clearSavedTheme(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Dispatch theme change event
|
|
74
|
+
*/
|
|
75
|
+
private dispatchThemeChangeEvent;
|
|
76
|
+
/**
|
|
77
|
+
* Subscribe to theme changes
|
|
78
|
+
*/
|
|
79
|
+
onThemeChange(callback: (detail: ThemeChangeEventDetail) => void): () => void;
|
|
80
|
+
/**
|
|
81
|
+
* Get default theme ID
|
|
82
|
+
*/
|
|
83
|
+
getDefaultTheme(): string;
|
|
84
|
+
/**
|
|
85
|
+
* Check if system prefers dark mode
|
|
86
|
+
*/
|
|
87
|
+
prefersColorScheme(): 'light' | 'dark';
|
|
88
|
+
/**
|
|
89
|
+
* Apply system preference
|
|
90
|
+
*/
|
|
91
|
+
applySystemPreference(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Watch for system preference changes
|
|
94
|
+
*/
|
|
95
|
+
watchSystemPreference(autoApply?: boolean): () => void;
|
|
96
|
+
}
|
|
97
|
+
export declare const themeManager: ThemeManager;
|
|
98
|
+
export declare const initializeTheme: () => void;
|
|
99
|
+
export declare const applyTheme: (id: string) => boolean;
|
|
100
|
+
export declare const getAvailableThemes: () => ThemeDefinition[];
|
|
101
|
+
export declare const getCurrentTheme: () => string | null;
|
|
102
|
+
export declare const onThemeChange: (callback: (detail: ThemeChangeEventDetail) => void) => () => void;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field Renderable Interface
|
|
3
|
+
* 静的renderFieldメソッドを持つコンポーネントの共通インターフェース
|
|
4
|
+
*/
|
|
5
|
+
import type { InputField } from './schema';
|
|
6
|
+
/**
|
|
7
|
+
* 静的renderFieldメソッドを持つコンポーネントのインターフェース
|
|
8
|
+
*
|
|
9
|
+
* このインターフェースは、フォームフィールドをHTMLとしてレンダリングする
|
|
10
|
+
* 静的メソッドを持つコンポーネントクラスに実装されます。
|
|
11
|
+
*
|
|
12
|
+
* @template T - 対応するInputFieldの型(例: TextField, SelectField)
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* export class Input implements FieldRenderable<TextField> {
|
|
17
|
+
* static renderField(field: TextField): string {
|
|
18
|
+
* // HTML生成ロジック
|
|
19
|
+
* return '<input type="text" ... />'
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export interface FieldRenderable<T extends InputField = InputField> {
|
|
25
|
+
/**
|
|
26
|
+
* フィールド定義からHTMLを生成する静的メソッド
|
|
27
|
+
*
|
|
28
|
+
* @param field - フィールド定義オブジェクト
|
|
29
|
+
* @returns 生成されたHTML文字列
|
|
30
|
+
*/
|
|
31
|
+
renderField(field: T): string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* FieldRenderableを実装するクラスの型
|
|
35
|
+
* staticメソッドを持つクラスの型チェックに使用
|
|
36
|
+
*/
|
|
37
|
+
export interface FieldRenderableClass<T extends InputField = InputField> {
|
|
38
|
+
new (...args: unknown[]): unknown;
|
|
39
|
+
renderField(field: T): string;
|
|
40
|
+
}
|