mokkun 0.1.5 → 0.1.6

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.
Files changed (85) hide show
  1. package/README.md +18 -6
  2. package/bin/cli.mjs +6 -6
  3. package/bin/viewer.html +2 -2
  4. package/dist/mokkun.css +1 -1
  5. package/dist/mokkun.esm.js +4898 -2913
  6. package/dist/mokkun.esm.js.map +1 -1
  7. package/dist/mokkun.js +359 -322
  8. package/dist/mokkun.js.map +1 -1
  9. package/dist/types/lib.d.ts +80 -0
  10. package/dist/types/loader/file-loader.d.ts +114 -0
  11. package/dist/types/loader/index.d.ts +4 -0
  12. package/dist/types/parser/index.d.ts +4 -0
  13. package/dist/types/parser/key-normalizer.d.ts +24 -0
  14. package/dist/types/parser/yaml-parser.d.ts +58 -0
  15. package/dist/types/renderer/action-handler.d.ts +76 -0
  16. package/dist/types/renderer/components/accordion-panel.d.ts +144 -0
  17. package/dist/types/renderer/components/action-buttons.d.ts +183 -0
  18. package/dist/types/renderer/components/alert-banner.d.ts +43 -0
  19. package/dist/types/renderer/components/app-header.d.ts +277 -0
  20. package/dist/types/renderer/components/app-navi.d.ts +167 -0
  21. package/dist/types/renderer/components/badge.d.ts +134 -0
  22. package/dist/types/renderer/components/browser.d.ts +134 -0
  23. package/dist/types/renderer/components/calendar.d.ts +198 -0
  24. package/dist/types/renderer/components/checkbox.d.ts +132 -0
  25. package/dist/types/renderer/components/chip.d.ts +120 -0
  26. package/dist/types/renderer/components/combobox.d.ts +217 -0
  27. package/dist/types/renderer/components/data-table.d.ts +186 -0
  28. package/dist/types/renderer/components/date-range-picker.d.ts +203 -0
  29. package/dist/types/renderer/components/definition-list.d.ts +165 -0
  30. package/dist/types/renderer/components/delete-confirm-dialog.d.ts +151 -0
  31. package/dist/types/renderer/components/dialog/action-dialog.d.ts +61 -0
  32. package/dist/types/renderer/components/dialog/base-dialog.d.ts +125 -0
  33. package/dist/types/renderer/components/dialog/dialog-types.d.ts +96 -0
  34. package/dist/types/renderer/components/disclosure.d.ts +118 -0
  35. package/dist/types/renderer/components/dropdown.d.ts +220 -0
  36. package/dist/types/renderer/components/duration-input.d.ts +154 -0
  37. package/dist/types/renderer/components/duration-picker.d.ts +108 -0
  38. package/dist/types/renderer/components/field-renderer.d.ts +22 -0
  39. package/dist/types/renderer/components/float-area.d.ts +196 -0
  40. package/dist/types/renderer/components/form-fields.d.ts +94 -0
  41. package/dist/types/renderer/components/form-section.d.ts +118 -0
  42. package/dist/types/renderer/components/google-map-embed.d.ts +88 -0
  43. package/dist/types/renderer/components/heading.d.ts +119 -0
  44. package/dist/types/renderer/components/image-uploader.d.ts +271 -0
  45. package/dist/types/renderer/components/index.d.ts +48 -0
  46. package/dist/types/renderer/components/information-panel.d.ts +139 -0
  47. package/dist/types/renderer/components/input.d.ts +222 -0
  48. package/dist/types/renderer/components/layout.d.ts +71 -0
  49. package/dist/types/renderer/components/line-clamp.d.ts +170 -0
  50. package/dist/types/renderer/components/loader.d.ts +104 -0
  51. package/dist/types/renderer/components/notification-bar.d.ts +251 -0
  52. package/dist/types/renderer/components/pagination.d.ts +167 -0
  53. package/dist/types/renderer/components/photo-manager-renderer.d.ts +9 -0
  54. package/dist/types/renderer/components/radio-button-panel.d.ts +152 -0
  55. package/dist/types/renderer/components/radio.d.ts +117 -0
  56. package/dist/types/renderer/components/repeater.d.ts +116 -0
  57. package/dist/types/renderer/components/response-message.d.ts +180 -0
  58. package/dist/types/renderer/components/search-input.d.ts +198 -0
  59. package/dist/types/renderer/components/section-nav.d.ts +151 -0
  60. package/dist/types/renderer/components/segmented-control.d.ts +143 -0
  61. package/dist/types/renderer/components/select.d.ts +98 -0
  62. package/dist/types/renderer/components/status-label.d.ts +146 -0
  63. package/dist/types/renderer/components/stepper.d.ts +123 -0
  64. package/dist/types/renderer/components/tabs.d.ts +185 -0
  65. package/dist/types/renderer/components/textarea.d.ts +173 -0
  66. package/dist/types/renderer/components/timeline.d.ts +146 -0
  67. package/dist/types/renderer/components/toggle.d.ts +109 -0
  68. package/dist/types/renderer/components/tooltip.d.ts +158 -0
  69. package/dist/types/renderer/components/wizard.d.ts +118 -0
  70. package/dist/types/renderer/layouts/index.d.ts +5 -0
  71. package/dist/types/renderer/layouts/shell.d.ts +7 -0
  72. package/dist/types/renderer/layouts/types.d.ts +34 -0
  73. package/dist/types/renderer/screen-renderer.d.ts +53 -0
  74. package/dist/types/renderer/utils/dom.d.ts +29 -0
  75. package/dist/types/renderer/utils/dummy-data.d.ts +13 -0
  76. package/dist/types/renderer/utils/field-helpers.d.ts +90 -0
  77. package/dist/types/renderer/utils/icons.d.ts +13 -0
  78. package/dist/types/renderer/utils/index.d.ts +6 -0
  79. package/dist/types/theme/index.d.ts +6 -0
  80. package/dist/types/theme/theme-manager.d.ts +102 -0
  81. package/dist/types/types/field-renderable.d.ts +40 -0
  82. package/dist/types/types/index.d.ts +6 -0
  83. package/dist/types/types/schema.d.ts +1701 -0
  84. package/dist/types/types/theme.d.ts +111 -0
  85. package/package.json +3 -1
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Browser Component
3
+ * 階層構造を持つデータの中から項目を単一選択するコンポーネント
4
+ *
5
+ * https://smarthr.design/products/components/browser/
6
+ *
7
+ * 機能:
8
+ * - 階層的なデータの表示
9
+ * - 複数カラム表示(最大3列)
10
+ * - キーボードナビゲーション
11
+ * - 単一選択
12
+ * - アクセシビリティ対応(ARIA属性)
13
+ *
14
+ * 用途:
15
+ * - カテゴリ選択
16
+ * - ファイルブラウジング
17
+ * - 組織階層の選択
18
+ */
19
+ import type { InputField } from '../../types/schema';
20
+ /**
21
+ * Browserアイテムの定義
22
+ */
23
+ export interface BrowserItem {
24
+ /** アイテムの値(一意) */
25
+ value: string;
26
+ /** 表示ラベル */
27
+ label: string;
28
+ /** 子アイテム */
29
+ children?: BrowserItem[];
30
+ /** 無効化 */
31
+ disabled?: boolean;
32
+ }
33
+ /**
34
+ * Browserの状態
35
+ */
36
+ export interface BrowserState {
37
+ /** 選択中のアイテムのvalue */
38
+ selectedValue: string | null;
39
+ /** 選択パス(ルートからのvalue配列) */
40
+ selectedPath: string[];
41
+ /** フォーカス中のカラムインデックス */
42
+ focusedColumnIndex: number;
43
+ /** 各カラムでフォーカス中のアイテムのインデックス */
44
+ focusedItemIndexes: number[];
45
+ }
46
+ /**
47
+ * Browserのコールバック
48
+ */
49
+ export interface BrowserCallbacks {
50
+ /** アイテム選択時 */
51
+ onSelect?: (value: string, path: string[], item: BrowserItem) => void;
52
+ /** 選択変更時 */
53
+ onChange?: (value: string | null, path: string[]) => void;
54
+ }
55
+ /**
56
+ * Browserの設定
57
+ */
58
+ export interface BrowserConfig {
59
+ /** アイテムの配列 */
60
+ items: BrowserItem[];
61
+ /** 初期選択値 */
62
+ defaultValue?: string;
63
+ /** ID属性 */
64
+ id?: string;
65
+ /** カスタムCSSクラス */
66
+ className?: string;
67
+ /** 最大カラム数(デフォルト: 3) */
68
+ maxColumns?: number;
69
+ /** 高さ(デフォルト: 'auto') */
70
+ height?: string;
71
+ }
72
+ /**
73
+ * Browserコンポーネント
74
+ */
75
+ export declare class Browser {
76
+ private config;
77
+ private state;
78
+ private callbacks;
79
+ private container;
80
+ private instanceId;
81
+ private columnsWrapper;
82
+ private itemsMap;
83
+ private parentMap;
84
+ constructor(container: HTMLElement, config: BrowserConfig, callbacks?: BrowserCallbacks);
85
+ /**
86
+ * Browserをレンダリング
87
+ */
88
+ render(): void;
89
+ /**
90
+ * 値を選択
91
+ */
92
+ selectValue(value: string): void;
93
+ /**
94
+ * 選択をクリア
95
+ */
96
+ clearSelection(): void;
97
+ /**
98
+ * 現在の選択値を取得
99
+ */
100
+ getValue(): string | null;
101
+ /**
102
+ * 現在の選択パスを取得
103
+ */
104
+ getPath(): string[];
105
+ /**
106
+ * 現在の状態を取得
107
+ */
108
+ getState(): BrowserState;
109
+ /**
110
+ * アイテムを更新
111
+ */
112
+ setItems(items: BrowserItem[]): void;
113
+ /**
114
+ * コンポーネントを破棄
115
+ */
116
+ destroy(): void;
117
+ private buildItemsMap;
118
+ private getPathToValue;
119
+ private getColumnsData;
120
+ private renderColumns;
121
+ private renderColumn;
122
+ private renderItem;
123
+ private renderArrowIcon;
124
+ private handleItemSelect;
125
+ private handleKeyDown;
126
+ private moveFocus;
127
+ private selectFocusedOrMoveRight;
128
+ private focusCurrentItem;
129
+ static renderField(field: InputField): string;
130
+ }
131
+ /**
132
+ * Browserを作成
133
+ */
134
+ export declare function createBrowser(container: HTMLElement, config: BrowserConfig, callbacks?: BrowserCallbacks): Browser;
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Calendar Component
3
+ * カレンダーを表示し日付を選択するためのコンポーネント
4
+ *
5
+ * Features:
6
+ * - 月表示カレンダー
7
+ * - 日付選択
8
+ * - 選択可能な日付範囲の制限 (from/to)
9
+ * - 月移動ナビゲーション
10
+ * - 今日の日付ハイライト
11
+ * - キーボードナビゲーション
12
+ */
13
+ import type { InputField } from '../../types/schema';
14
+ /**
15
+ * カレンダーの状態
16
+ */
17
+ export interface CalendarState {
18
+ /** 現在選択されている日付 */
19
+ value: Date | null;
20
+ /** 表示中の年月 */
21
+ displayedMonth: Date;
22
+ /** フォーカスされている日付 */
23
+ focusedDate: Date | null;
24
+ /** 無効化状態 */
25
+ disabled: boolean;
26
+ }
27
+ /**
28
+ * カレンダーのコールバック
29
+ */
30
+ export interface CalendarCallbacks {
31
+ /** 日付選択時 */
32
+ onSelectDate: (event: MouseEvent, date: Date, state: CalendarState) => void;
33
+ /** 月変更時 */
34
+ onMonthChange?: (date: Date, state: CalendarState) => void;
35
+ }
36
+ /**
37
+ * カレンダーの設定
38
+ */
39
+ export interface CalendarConfig {
40
+ /** 初期選択日付 */
41
+ value?: Date;
42
+ /** 選択可能な日付範囲の開始日 */
43
+ from?: Date;
44
+ /** 選択可能な日付範囲の終了日 */
45
+ to?: Date;
46
+ /** 無効化 */
47
+ disabled?: boolean;
48
+ /** 週の開始曜日 (0: 日曜, 1: 月曜) */
49
+ weekStartsOn?: 0 | 1;
50
+ /** ロケール */
51
+ locale?: string;
52
+ /** aria-label */
53
+ ariaLabel?: string;
54
+ }
55
+ /**
56
+ * カレンダーコンポーネント
57
+ */
58
+ export declare class Calendar {
59
+ private config;
60
+ private state;
61
+ private callbacks;
62
+ private container;
63
+ private calendarElement;
64
+ constructor(container: HTMLElement, config: CalendarConfig | undefined, callbacks: CalendarCallbacks);
65
+ /**
66
+ * カレンダーをレンダリング
67
+ */
68
+ render(): void;
69
+ /**
70
+ * 選択日付を設定
71
+ */
72
+ setValue(value: Date | null): void;
73
+ /**
74
+ * 選択日付を取得
75
+ */
76
+ getValue(): Date | null;
77
+ /**
78
+ * 表示月を設定
79
+ */
80
+ setDisplayedMonth(date: Date): void;
81
+ /**
82
+ * 無効化状態を設定
83
+ */
84
+ setDisabled(disabled: boolean): void;
85
+ /**
86
+ * 選択可能範囲を設定
87
+ */
88
+ setRange(from?: Date, to?: Date): void;
89
+ /**
90
+ * 状態を取得
91
+ */
92
+ getState(): CalendarState;
93
+ /**
94
+ * 破棄
95
+ */
96
+ destroy(): void;
97
+ /**
98
+ * 初期状態を作成
99
+ */
100
+ private createInitialState;
101
+ /**
102
+ * ヘッダーをレンダリング
103
+ */
104
+ private renderHeader;
105
+ /**
106
+ * カレンダーグリッドをレンダリング
107
+ */
108
+ private renderGrid;
109
+ /**
110
+ * 曜日ヘッダーをレンダリング
111
+ */
112
+ private renderWeekdayHeader;
113
+ /**
114
+ * 週の行をレンダリング
115
+ */
116
+ private renderWeekRow;
117
+ /**
118
+ * 日付セルをレンダリング
119
+ */
120
+ private renderDateCell;
121
+ /**
122
+ * キーボードナビゲーションを設定
123
+ */
124
+ private setupKeyboardNavigation;
125
+ /**
126
+ * 日付にフォーカス
127
+ */
128
+ private focusDate;
129
+ /**
130
+ * 前月クリック
131
+ */
132
+ private handlePrevMonth;
133
+ /**
134
+ * 次月クリック
135
+ */
136
+ private handleNextMonth;
137
+ /**
138
+ * 日付クリック
139
+ */
140
+ private handleDateClick;
141
+ /**
142
+ * 日付を正規化(時刻を0時0分0秒に)
143
+ */
144
+ private normalizeDate;
145
+ /**
146
+ * 月の最初の日を取得
147
+ */
148
+ private getFirstDayOfMonth;
149
+ /**
150
+ * カレンダーの週を取得
151
+ */
152
+ private getCalendarWeeks;
153
+ /**
154
+ * 曜日ラベルを取得
155
+ */
156
+ private getWeekdayLabels;
157
+ /**
158
+ * 年月をフォーマット
159
+ */
160
+ private formatMonthYear;
161
+ /**
162
+ * 日付をフルフォーマット
163
+ */
164
+ private formatDateFull;
165
+ /**
166
+ * 今日かどうか
167
+ */
168
+ private isToday;
169
+ /**
170
+ * 選択されているかどうか
171
+ */
172
+ private isSelected;
173
+ /**
174
+ * 日付が無効化されているかどうか
175
+ */
176
+ private isDateDisabled;
177
+ /**
178
+ * 日付が範囲内かどうか
179
+ */
180
+ private isDateInRange;
181
+ /**
182
+ * 日数を加算
183
+ */
184
+ private addDays;
185
+ /**
186
+ * 左矢印アイコン
187
+ */
188
+ private getChevronLeftIcon;
189
+ /**
190
+ * 右矢印アイコン
191
+ */
192
+ private getChevronRightIcon;
193
+ static renderField(field: InputField): string;
194
+ }
195
+ /**
196
+ * カレンダーコンポーネントを作成
197
+ */
198
+ export declare function createCalendar(container: HTMLElement, config: CalendarConfig | undefined, callbacks: CalendarCallbacks): Calendar;
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Checkbox Component
3
+ * チェックボックスコンポーネント
4
+ *
5
+ *
6
+ * - `checked` / `defaultChecked` for state
7
+ * - `indeterminate` state support (一部選択)
8
+ * - `data-state="checked|unchecked|indeterminate"` for styling
9
+ * - `error` state with error messages
10
+ * - `role="checkbox"` with `aria-checked` for accessibility
11
+ */
12
+ import type { InputField } from '../../types/schema';
13
+ /**
14
+ * チェックボックスの状態
15
+ */
16
+ export interface CheckboxState {
17
+ /** チェック状態 */
18
+ checked: boolean;
19
+ /** 中間状態(一部選択) */
20
+ indeterminate: boolean;
21
+ /** 無効化状態 */
22
+ disabled: boolean;
23
+ }
24
+ /**
25
+ * チェックボックスのコールバック
26
+ */
27
+ export interface CheckboxCallbacks {
28
+ /** 状態変更時 */
29
+ onChange?: (checked: boolean, state: CheckboxState) => void;
30
+ /** チェック状態変更時 */
31
+ onCheckedChange?: (checked: boolean) => void;
32
+ }
33
+ /**
34
+ * チェックボックスの設定
35
+ */
36
+ export interface CheckboxConfig {
37
+ /** 初期チェック状態 */
38
+ defaultChecked?: boolean;
39
+ /** 初期中間状態 */
40
+ defaultIndeterminate?: boolean;
41
+ /** 無効化 */
42
+ disabled?: boolean;
43
+ /** チェック時ラベル */
44
+ checkedLabel?: string;
45
+ /** 非チェック時ラベル */
46
+ uncheckedLabel?: string;
47
+ /** サイズ */
48
+ size?: 'small' | 'medium' | 'large';
49
+ /** name属性(フォーム用) */
50
+ name?: string;
51
+ /** ラベル位置 */
52
+ labelPosition?: 'left' | 'right';
53
+ }
54
+ /**
55
+ * チェックボックスコンポーネント
56
+ */
57
+ export declare class Checkbox {
58
+ private config;
59
+ private state;
60
+ private callbacks;
61
+ private container;
62
+ private instanceId;
63
+ constructor(container: HTMLElement, config?: CheckboxConfig, callbacks?: CheckboxCallbacks);
64
+ /**
65
+ * チェックボックスをレンダリング
66
+ */
67
+ render(): void;
68
+ /**
69
+ * チェック状態を設定
70
+ */
71
+ setChecked(checked: boolean): void;
72
+ /**
73
+ * 中間状態を設定
74
+ */
75
+ setIndeterminate(indeterminate: boolean): void;
76
+ /**
77
+ * 状態をトグル
78
+ */
79
+ toggle(): void;
80
+ /**
81
+ * 無効化状態を設定
82
+ */
83
+ setDisabled(disabled: boolean): void;
84
+ /**
85
+ * 現在の状態を取得
86
+ */
87
+ getState(): CheckboxState;
88
+ /**
89
+ * チェック状態を取得
90
+ */
91
+ isChecked(): boolean;
92
+ /**
93
+ * 中間状態かどうかを取得
94
+ */
95
+ isIndeterminate(): boolean;
96
+ /**
97
+ * 無効化されているかどうかを取得
98
+ */
99
+ isDisabled(): boolean;
100
+ /**
101
+ * 初期状態を作成
102
+ */
103
+ private createInitialState;
104
+ /**
105
+ * チェックボックスをレンダリング
106
+ */
107
+ private renderCheckbox;
108
+ /**
109
+ * ラベルをレンダリング
110
+ */
111
+ private renderLabel;
112
+ /**
113
+ * チェックボックスグループフィールドをHTMLとしてレンダリング(静的メソッド)
114
+ * SSR/初期レンダリング用
115
+ *
116
+ * @param field - チェックボックスグループフィールド定義
117
+ * @returns 生成されたHTML文字列
118
+ */
119
+ static renderField(field: InputField): string;
120
+ /**
121
+ * 単一チェックボックスをレンダリング
122
+ */
123
+ private static renderSingleCheckbox;
124
+ /**
125
+ * チェックボックスグループをレンダリング
126
+ */
127
+ private static renderCheckboxGroup;
128
+ }
129
+ /**
130
+ * Checkboxを作成するファクトリ関数
131
+ */
132
+ export declare function createCheckbox(container: HTMLElement, config?: CheckboxConfig, callbacks?: CheckboxCallbacks): Checkbox;
@@ -0,0 +1,120 @@
1
+ import type { InputField } from '../../types/schema';
2
+ /**
3
+ * Chip component state
4
+ */
5
+ export interface ChipState {
6
+ /** Whether the chip is selected */
7
+ selected: boolean;
8
+ /** Whether the chip is disabled */
9
+ disabled: boolean;
10
+ }
11
+ /**
12
+ * Chip component callbacks
13
+ */
14
+ export interface ChipCallbacks {
15
+ /** Called when chip is clicked (selection toggle) */
16
+ onClick?: (selected: boolean, state: ChipState) => void;
17
+ /** Called when delete button is clicked */
18
+ onDelete?: (state: ChipState) => void;
19
+ }
20
+ /**
21
+ * Chip component configuration
22
+ */
23
+ export interface ChipConfig {
24
+ /** Label text for the chip */
25
+ label: string;
26
+ /** Icon to display before the label (emoji, SVG path, or HTML string) */
27
+ icon?: string;
28
+ /** Whether to show delete button */
29
+ deletable?: boolean;
30
+ /** Whether the chip is selected by default */
31
+ selected?: boolean;
32
+ /** Whether the chip is disabled */
33
+ disabled?: boolean;
34
+ /** Size variant */
35
+ size?: 'small' | 'medium' | 'large';
36
+ /** Color variant */
37
+ color?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
38
+ /** Accessible label for screen readers */
39
+ ariaLabel?: string;
40
+ }
41
+ /**
42
+ * Chip component
43
+ *
44
+ * A small UI element for displaying tags, filter conditions, or categories.
45
+ * Supports selection toggle, delete button, icons, and color variations.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * const chip = createChip(container, {
50
+ * label: 'JavaScript',
51
+ * icon: '🚀',
52
+ * deletable: true,
53
+ * color: 'primary'
54
+ * }, {
55
+ * onClick: (selected) => console.log('Selected:', selected),
56
+ * onDelete: () => console.log('Deleted')
57
+ * })
58
+ * ```
59
+ */
60
+ export declare class Chip {
61
+ private config;
62
+ private state;
63
+ private callbacks;
64
+ private container;
65
+ constructor(container: HTMLElement, config: ChipConfig, callbacks?: ChipCallbacks);
66
+ /**
67
+ * Create initial component state
68
+ */
69
+ private createInitialState;
70
+ /**
71
+ * Render the chip component
72
+ */
73
+ render(): void;
74
+ /**
75
+ * Render the chip element
76
+ */
77
+ private renderChip;
78
+ /**
79
+ * Render the delete button
80
+ */
81
+ private renderDeleteButton;
82
+ /**
83
+ * Handle chip click (selection toggle)
84
+ */
85
+ private handleChipClick;
86
+ /**
87
+ * Handle delete button click
88
+ */
89
+ private handleDelete;
90
+ /**
91
+ * Set the selected state
92
+ */
93
+ setSelected(selected: boolean): void;
94
+ /**
95
+ * Set the disabled state
96
+ */
97
+ setDisabled(disabled: boolean): void;
98
+ /**
99
+ * Update component state
100
+ */
101
+ private setState;
102
+ /**
103
+ * Get current component state
104
+ */
105
+ getState(): ChipState;
106
+ /**
107
+ * Update chip configuration
108
+ */
109
+ updateConfig(config: Partial<ChipConfig>): void;
110
+ static renderField(field: InputField): string;
111
+ }
112
+ /**
113
+ * Factory function to create a Chip component
114
+ *
115
+ * @param container - HTMLElement to render the chip into
116
+ * @param config - Chip configuration
117
+ * @param callbacks - Event callbacks
118
+ * @returns Chip instance
119
+ */
120
+ export declare function createChip(container: HTMLElement, config: ChipConfig, callbacks?: ChipCallbacks): Chip;