@vizejs/fresco 0.100.0 → 0.103.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.
@@ -0,0 +1,318 @@
1
+ import { _ as updateLastRenderLayouts, h as getLastRenderLayout, w as useApp } from "./useInput-DrlvpGkS.mjs";
2
+ import { computed, onMounted, onUnmounted, reactive, ref, watch } from "@vue/runtime-core";
3
+ //#region src/composables/useIme.ts
4
+ /**
5
+ * useIme - IME (Input Method Editor) composable
6
+ */
7
+ const MODE_DISPLAY = {
8
+ direct: "A",
9
+ hiragana: "あ",
10
+ katakana: "ア",
11
+ "half-katakana": "ア",
12
+ "full-alpha": "A",
13
+ pinyin: "拼",
14
+ hangul: "한"
15
+ };
16
+ function useIme(options = {}) {
17
+ const { mode: initialMode = "direct", onModeChange, onCompositionUpdate, onCommit } = options;
18
+ const isActive = ref(false);
19
+ const mode = ref(initialMode);
20
+ const isComposing = ref(false);
21
+ const preedit = ref("");
22
+ const preeditCursor = ref(0);
23
+ const candidates = ref([]);
24
+ const selectedCandidate = ref(0);
25
+ const modeDisplay = computed(() => MODE_DISPLAY[mode.value] ?? "A");
26
+ const enable = () => {
27
+ isActive.value = true;
28
+ };
29
+ const disable = () => {
30
+ isActive.value = false;
31
+ cancel();
32
+ };
33
+ const setMode = (newMode) => {
34
+ if (mode.value !== newMode) {
35
+ cancel();
36
+ mode.value = newMode;
37
+ onModeChange?.(newMode);
38
+ }
39
+ };
40
+ const handleKey = (key, modifiers) => {
41
+ if (!isActive.value || mode.value === "direct") return false;
42
+ if (modifiers.ctrl && key === " ") {
43
+ setMode("direct");
44
+ return true;
45
+ }
46
+ if (isComposing.value) {
47
+ switch (key) {
48
+ case "enter":
49
+ commit();
50
+ return true;
51
+ case "escape":
52
+ cancel();
53
+ return true;
54
+ case "backspace":
55
+ if (preedit.value.length > 0) {
56
+ preedit.value = preedit.value.slice(0, -1);
57
+ preeditCursor.value = Math.min(preeditCursor.value, preedit.value.length);
58
+ onCompositionUpdate?.(preedit.value, preeditCursor.value);
59
+ return true;
60
+ }
61
+ break;
62
+ case "space":
63
+ if (candidates.value.length > 0) {
64
+ nextCandidate();
65
+ return true;
66
+ }
67
+ break;
68
+ }
69
+ if (/^[1-9]$/.test(key)) {
70
+ selectCandidate(parseInt(key, 10));
71
+ return true;
72
+ }
73
+ }
74
+ if (key.length === 1 && !modifiers.ctrl && !modifiers.alt) {
75
+ if (!isComposing.value) isComposing.value = true;
76
+ preedit.value += key;
77
+ preeditCursor.value = preedit.value.length;
78
+ onCompositionUpdate?.(preedit.value, preeditCursor.value);
79
+ return true;
80
+ }
81
+ return false;
82
+ };
83
+ const commit = () => {
84
+ if (preedit.value) {
85
+ const text = candidates.value[selectedCandidate.value] ?? preedit.value;
86
+ onCommit?.(text);
87
+ }
88
+ preedit.value = "";
89
+ preeditCursor.value = 0;
90
+ candidates.value = [];
91
+ selectedCandidate.value = 0;
92
+ isComposing.value = false;
93
+ };
94
+ const cancel = () => {
95
+ preedit.value = "";
96
+ preeditCursor.value = 0;
97
+ candidates.value = [];
98
+ selectedCandidate.value = 0;
99
+ isComposing.value = false;
100
+ };
101
+ const nextCandidate = () => {
102
+ if (candidates.value.length > 0) selectedCandidate.value = (selectedCandidate.value + 1) % candidates.value.length;
103
+ };
104
+ const prevCandidate = () => {
105
+ if (candidates.value.length > 0) selectedCandidate.value = (selectedCandidate.value - 1 + candidates.value.length) % candidates.value.length;
106
+ };
107
+ const selectCandidate = (num) => {
108
+ if (num >= 1 && num <= candidates.value.length) {
109
+ selectedCandidate.value = num - 1;
110
+ commit();
111
+ }
112
+ };
113
+ return {
114
+ isActive,
115
+ mode,
116
+ isComposing,
117
+ preedit,
118
+ preeditCursor,
119
+ candidates,
120
+ selectedCandidate,
121
+ modeDisplay,
122
+ enable,
123
+ disable,
124
+ setMode,
125
+ handleKey,
126
+ commit,
127
+ cancel,
128
+ nextCandidate,
129
+ prevCandidate,
130
+ selectCandidate
131
+ };
132
+ }
133
+ //#endregion
134
+ //#region src/composables/useWindowSize.ts
135
+ /**
136
+ * useWindowSize - terminal dimensions.
137
+ */
138
+ function useWindowSize() {
139
+ const { width, height } = useApp();
140
+ return reactive({
141
+ get columns() {
142
+ return width.value;
143
+ },
144
+ get rows() {
145
+ return height.value;
146
+ }
147
+ });
148
+ }
149
+ //#endregion
150
+ //#region src/composables/useAnimation.ts
151
+ /**
152
+ * useAnimation - Ink-compatible shared animation state.
153
+ */
154
+ const defaultAnimationInterval = 100;
155
+ const maximumTimerInterval = 2147483647;
156
+ const animationSubscribers = /* @__PURE__ */ new Map();
157
+ let animationTimer = null;
158
+ function currentTime() {
159
+ return performance.now();
160
+ }
161
+ function normalizeAnimationInterval(interval) {
162
+ if (!Number.isFinite(interval)) return defaultAnimationInterval;
163
+ return Math.min(maximumTimerInterval, Math.max(1, interval));
164
+ }
165
+ function clearAnimationTimer() {
166
+ if (!animationTimer) return;
167
+ clearTimeout(animationTimer);
168
+ animationTimer = null;
169
+ }
170
+ function scheduleAnimationTick() {
171
+ clearAnimationTimer();
172
+ if (animationSubscribers.size === 0) return;
173
+ let nextDueTime = Number.POSITIVE_INFINITY;
174
+ for (const subscriber of animationSubscribers.values()) nextDueTime = Math.min(nextDueTime, subscriber.nextDueTime);
175
+ animationTimer = setTimeout(() => {
176
+ animationTimer = null;
177
+ const now = currentTime();
178
+ for (const subscriber of animationSubscribers.values()) {
179
+ if (now < subscriber.nextDueTime) continue;
180
+ subscriber.callback(now);
181
+ const elapsedTime = now - subscriber.startTime;
182
+ const elapsedFrames = Math.floor(elapsedTime / subscriber.interval) + 1;
183
+ subscriber.nextDueTime = subscriber.startTime + elapsedFrames * subscriber.interval;
184
+ }
185
+ scheduleAnimationTick();
186
+ }, Math.max(0, nextDueTime - currentTime()));
187
+ }
188
+ function subscribeToAnimation(callback, interval) {
189
+ const startTime = currentTime();
190
+ animationSubscribers.set(callback, {
191
+ callback,
192
+ interval,
193
+ startTime,
194
+ nextDueTime: startTime + interval
195
+ });
196
+ scheduleAnimationTick();
197
+ return {
198
+ startTime,
199
+ unsubscribe() {
200
+ animationSubscribers.delete(callback);
201
+ scheduleAnimationTick();
202
+ }
203
+ };
204
+ }
205
+ function useAnimation(options = {}) {
206
+ const safeInterval = computed(() => normalizeAnimationInterval(options.interval ?? defaultAnimationInterval));
207
+ const active = computed(() => options.isActive ?? true);
208
+ let unsubscribe = null;
209
+ let startedAt = currentTime();
210
+ let previousTick = startedAt;
211
+ const state = reactive({
212
+ frame: 0,
213
+ time: 0,
214
+ delta: 0,
215
+ reset: () => {
216
+ if (active.value) start();
217
+ else resetState(currentTime());
218
+ }
219
+ });
220
+ const resetState = (now) => {
221
+ startedAt = now;
222
+ previousTick = now;
223
+ state.frame = 0;
224
+ state.time = 0;
225
+ state.delta = 0;
226
+ };
227
+ const tick = (now) => {
228
+ const elapsed = now - startedAt;
229
+ state.frame = Math.floor(elapsed / safeInterval.value);
230
+ state.time = elapsed;
231
+ state.delta = now - previousTick;
232
+ previousTick = now;
233
+ };
234
+ const stop = () => {
235
+ unsubscribe?.();
236
+ unsubscribe = null;
237
+ };
238
+ const start = () => {
239
+ stop();
240
+ resetState(currentTime());
241
+ const subscription = subscribeToAnimation(tick, safeInterval.value);
242
+ startedAt = subscription.startTime;
243
+ previousTick = subscription.startTime;
244
+ unsubscribe = () => subscription.unsubscribe();
245
+ };
246
+ onMounted(() => {
247
+ if (active.value) start();
248
+ });
249
+ watch([active, safeInterval], ([isActive]) => {
250
+ if (isActive) start();
251
+ else stop();
252
+ });
253
+ onUnmounted(stop);
254
+ return state;
255
+ }
256
+ //#endregion
257
+ //#region src/composables/useBoxMetrics.ts
258
+ /**
259
+ * useBoxMetrics - best-effort layout metrics for a rendered Fresco node.
260
+ */
261
+ async function loadNative() {
262
+ return import("@vizejs/fresco-native");
263
+ }
264
+ function targetId(target) {
265
+ return target?.id ?? target?.$el?.id;
266
+ }
267
+ function useBoxMetrics(ref) {
268
+ const metrics = reactive({
269
+ width: 0,
270
+ height: 0,
271
+ left: 0,
272
+ top: 0,
273
+ hasMeasured: false
274
+ });
275
+ let timer = null;
276
+ const refresh = () => {
277
+ const id = targetId(ref.value);
278
+ if (id === void 0) {
279
+ metrics.width = 0;
280
+ metrics.height = 0;
281
+ metrics.left = 0;
282
+ metrics.top = 0;
283
+ metrics.hasMeasured = false;
284
+ return;
285
+ }
286
+ loadNative().then((native) => {
287
+ const layouts = "getLastRenderLayouts" in native ? native.getLastRenderLayouts() : [];
288
+ updateLastRenderLayouts(layouts);
289
+ const layout = layouts.find((item) => item.id === id);
290
+ if (!layout) return;
291
+ metrics.width = layout.width;
292
+ metrics.height = layout.height;
293
+ metrics.left = layout.x;
294
+ metrics.top = layout.y;
295
+ metrics.hasMeasured = true;
296
+ }).catch(() => {});
297
+ };
298
+ onMounted(() => {
299
+ const layout = getLastRenderLayout(ref.value);
300
+ if (layout) {
301
+ metrics.width = layout.width;
302
+ metrics.height = layout.height;
303
+ metrics.left = layout.x;
304
+ metrics.top = layout.y;
305
+ metrics.hasMeasured = true;
306
+ }
307
+ refresh();
308
+ timer = setInterval(refresh, 100);
309
+ });
310
+ onUnmounted(() => {
311
+ if (timer) clearInterval(timer);
312
+ });
313
+ return metrics;
314
+ }
315
+ //#endregion
316
+ export { useIme as i, useAnimation as n, useWindowSize as r, useBoxMetrics as t };
317
+
318
+ //# sourceMappingURL=composables-BKj30tnc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composables-BKj30tnc.mjs","names":[],"sources":["../src/composables/useIme.ts","../src/composables/useWindowSize.ts","../src/composables/useAnimation.ts","../src/composables/useBoxMetrics.ts"],"sourcesContent":["/**\n * useIme - IME (Input Method Editor) composable\n */\n\nimport { ref, computed, type Ref } from \"@vue/runtime-core\";\n\nexport interface UseImeOptions {\n /** Initial IME mode */\n mode?: ImeMode;\n /** Called when IME mode changes */\n onModeChange?: (mode: ImeMode) => void;\n /** Called when composition updates */\n onCompositionUpdate?: (text: string, cursor: number) => void;\n /** Called when text is committed */\n onCommit?: (text: string) => void;\n}\n\nexport type ImeMode =\n | \"direct\"\n | \"hiragana\"\n | \"katakana\"\n | \"half-katakana\"\n | \"full-alpha\"\n | \"pinyin\"\n | \"hangul\";\n\nexport interface ImeManager {\n /** Whether IME is active */\n isActive: Ref<boolean>;\n /** Current input mode */\n mode: Ref<ImeMode>;\n /** Whether currently composing */\n isComposing: Ref<boolean>;\n /** Preedit text */\n preedit: Ref<string>;\n /** Cursor position in preedit */\n preeditCursor: Ref<number>;\n /** Candidate list */\n candidates: Ref<string[]>;\n /** Selected candidate index */\n selectedCandidate: Ref<number>;\n /** Mode display name */\n modeDisplay: Ref<string>;\n /** Enable IME */\n enable: () => void;\n /** Disable IME */\n disable: () => void;\n /** Set input mode */\n setMode: (mode: ImeMode) => void;\n /** Handle key event for IME */\n handleKey: (key: string, modifiers: { ctrl: boolean; alt: boolean }) => boolean;\n /** Commit current composition */\n commit: () => void;\n /** Cancel current composition */\n cancel: () => void;\n /** Select next candidate */\n nextCandidate: () => void;\n /** Select previous candidate */\n prevCandidate: () => void;\n /** Select candidate by number (1-9) */\n selectCandidate: (num: number) => void;\n}\n\nconst MODE_DISPLAY: Record<ImeMode, string> = {\n direct: \"A\",\n hiragana: \"あ\",\n katakana: \"ア\",\n \"half-katakana\": \"ア\",\n \"full-alpha\": \"A\",\n pinyin: \"拼\",\n hangul: \"한\",\n};\n\nexport function useIme(options: UseImeOptions = {}): ImeManager {\n const { mode: initialMode = \"direct\", onModeChange, onCompositionUpdate, onCommit } = options;\n\n const isActive = ref(false);\n const mode = ref<ImeMode>(initialMode);\n const isComposing = ref(false);\n const preedit = ref(\"\");\n const preeditCursor = ref(0);\n const candidates = ref<string[]>([]);\n const selectedCandidate = ref(0);\n\n const modeDisplay = computed(() => MODE_DISPLAY[mode.value] ?? \"A\");\n\n const enable = () => {\n isActive.value = true;\n };\n\n const disable = () => {\n isActive.value = false;\n cancel();\n };\n\n const setMode = (newMode: ImeMode) => {\n if (mode.value !== newMode) {\n cancel();\n mode.value = newMode;\n onModeChange?.(newMode);\n }\n };\n\n const handleKey = (key: string, modifiers: { ctrl: boolean; alt: boolean }): boolean => {\n if (!isActive.value || mode.value === \"direct\") {\n return false;\n }\n\n // IME mode toggle (usually Ctrl+Space or similar)\n // If we're here, mode is not 'direct' (filtered above), so toggle to 'direct'\n if (modifiers.ctrl && key === \" \") {\n setMode(\"direct\");\n return true;\n }\n\n // Handle composition\n if (isComposing.value) {\n switch (key) {\n case \"enter\":\n commit();\n return true;\n case \"escape\":\n cancel();\n return true;\n case \"backspace\":\n if (preedit.value.length > 0) {\n preedit.value = preedit.value.slice(0, -1);\n preeditCursor.value = Math.min(preeditCursor.value, preedit.value.length);\n onCompositionUpdate?.(preedit.value, preeditCursor.value);\n return true;\n }\n break;\n case \"space\":\n // Convert / select candidate\n if (candidates.value.length > 0) {\n nextCandidate();\n return true;\n }\n break;\n }\n\n // Number for candidate selection\n if (/^[1-9]$/.test(key)) {\n selectCandidate(parseInt(key, 10));\n return true;\n }\n }\n\n // Start/continue composition for printable characters\n if (key.length === 1 && !modifiers.ctrl && !modifiers.alt) {\n if (!isComposing.value) {\n isComposing.value = true;\n }\n preedit.value += key;\n preeditCursor.value = preedit.value.length;\n onCompositionUpdate?.(preedit.value, preeditCursor.value);\n return true;\n }\n\n return false;\n };\n\n const commit = () => {\n if (preedit.value) {\n const text = candidates.value[selectedCandidate.value] ?? preedit.value;\n onCommit?.(text);\n }\n preedit.value = \"\";\n preeditCursor.value = 0;\n candidates.value = [];\n selectedCandidate.value = 0;\n isComposing.value = false;\n };\n\n const cancel = () => {\n preedit.value = \"\";\n preeditCursor.value = 0;\n candidates.value = [];\n selectedCandidate.value = 0;\n isComposing.value = false;\n };\n\n const nextCandidate = () => {\n if (candidates.value.length > 0) {\n selectedCandidate.value = (selectedCandidate.value + 1) % candidates.value.length;\n }\n };\n\n const prevCandidate = () => {\n if (candidates.value.length > 0) {\n selectedCandidate.value =\n (selectedCandidate.value - 1 + candidates.value.length) % candidates.value.length;\n }\n };\n\n const selectCandidate = (num: number) => {\n if (num >= 1 && num <= candidates.value.length) {\n selectedCandidate.value = num - 1;\n commit();\n }\n };\n\n return {\n isActive,\n mode,\n isComposing,\n preedit,\n preeditCursor,\n candidates,\n selectedCandidate,\n modeDisplay,\n enable,\n disable,\n setMode,\n handleKey,\n commit,\n cancel,\n nextCandidate,\n prevCandidate,\n selectCandidate,\n };\n}\n","/**\n * useWindowSize - terminal dimensions.\n */\n\nimport { reactive } from \"@vue/runtime-core\";\nimport { useApp } from \"./useApp.js\";\n\nexport interface WindowSize {\n columns: number;\n rows: number;\n}\n\nexport function useWindowSize() {\n const { width, height } = useApp();\n\n return reactive({\n get columns() {\n return width.value;\n },\n get rows() {\n return height.value;\n },\n }) as WindowSize;\n}\n","/**\n * useAnimation - Ink-compatible shared animation state.\n */\n\nimport { computed, onMounted, onUnmounted, reactive, watch } from \"@vue/runtime-core\";\n\nexport interface UseAnimationOptions {\n /** Time between ticks in milliseconds */\n interval?: number;\n /** Whether the animation is running */\n isActive?: boolean;\n}\n\nexport interface AnimationResult {\n frame: number;\n time: number;\n delta: number;\n reset: () => void;\n}\n\nconst defaultAnimationInterval = 100;\nconst maximumTimerInterval = 2_147_483_647;\n\ntype AnimationCallback = (currentTime: number) => void;\n\ninterface AnimationSubscriber {\n callback: AnimationCallback;\n interval: number;\n startTime: number;\n nextDueTime: number;\n}\n\nconst animationSubscribers = new Map<AnimationCallback, AnimationSubscriber>();\nlet animationTimer: ReturnType<typeof setTimeout> | null = null;\n\nfunction currentTime(): number {\n return performance.now();\n}\n\nfunction normalizeAnimationInterval(interval: number): number {\n if (!Number.isFinite(interval)) {\n return defaultAnimationInterval;\n }\n\n return Math.min(maximumTimerInterval, Math.max(1, interval));\n}\n\nfunction clearAnimationTimer() {\n if (!animationTimer) return;\n clearTimeout(animationTimer);\n animationTimer = null;\n}\n\nfunction scheduleAnimationTick() {\n clearAnimationTimer();\n if (animationSubscribers.size === 0) return;\n\n let nextDueTime = Number.POSITIVE_INFINITY;\n for (const subscriber of animationSubscribers.values()) {\n nextDueTime = Math.min(nextDueTime, subscriber.nextDueTime);\n }\n\n animationTimer = setTimeout(\n () => {\n animationTimer = null;\n const now = currentTime();\n\n for (const subscriber of animationSubscribers.values()) {\n if (now < subscriber.nextDueTime) continue;\n\n subscriber.callback(now);\n\n const elapsedTime = now - subscriber.startTime;\n const elapsedFrames = Math.floor(elapsedTime / subscriber.interval) + 1;\n subscriber.nextDueTime = subscriber.startTime + elapsedFrames * subscriber.interval;\n }\n\n scheduleAnimationTick();\n },\n Math.max(0, nextDueTime - currentTime()),\n );\n}\n\nfunction subscribeToAnimation(callback: AnimationCallback, interval: number) {\n const startTime = currentTime();\n animationSubscribers.set(callback, {\n callback,\n interval,\n startTime,\n nextDueTime: startTime + interval,\n });\n scheduleAnimationTick();\n\n return {\n startTime,\n unsubscribe() {\n animationSubscribers.delete(callback);\n scheduleAnimationTick();\n },\n };\n}\n\nexport function useAnimation(options: UseAnimationOptions = {}): AnimationResult {\n const safeInterval = computed(() =>\n normalizeAnimationInterval(options.interval ?? defaultAnimationInterval),\n );\n const active = computed(() => options.isActive ?? true);\n let unsubscribe: (() => void) | null = null;\n let startedAt = currentTime();\n let previousTick = startedAt;\n\n const state = reactive<AnimationResult>({\n frame: 0,\n time: 0,\n delta: 0,\n reset: () => {\n if (active.value) {\n start();\n } else {\n resetState(currentTime());\n }\n },\n });\n\n const resetState = (now: number) => {\n startedAt = now;\n previousTick = now;\n state.frame = 0;\n state.time = 0;\n state.delta = 0;\n };\n\n const tick = (now: number) => {\n const elapsed = now - startedAt;\n state.frame = Math.floor(elapsed / safeInterval.value);\n state.time = elapsed;\n state.delta = now - previousTick;\n previousTick = now;\n };\n\n const stop = () => {\n unsubscribe?.();\n unsubscribe = null;\n };\n\n const start = () => {\n stop();\n resetState(currentTime());\n const subscription = subscribeToAnimation(tick, safeInterval.value);\n startedAt = subscription.startTime;\n previousTick = subscription.startTime;\n unsubscribe = () => subscription.unsubscribe();\n };\n\n onMounted(() => {\n if (active.value) {\n start();\n }\n });\n\n watch([active, safeInterval], ([isActive]) => {\n if (isActive) {\n start();\n } else {\n stop();\n }\n });\n\n onUnmounted(stop);\n\n return state;\n}\n","/**\n * useBoxMetrics - best-effort layout metrics for a rendered Fresco node.\n */\n\nimport { onMounted, onUnmounted, reactive, type Ref } from \"@vue/runtime-core\";\nimport { getLastRenderLayout, updateLastRenderLayouts, type DOMElement } from \"../layoutMetrics.js\";\n\nexport interface BoxMetrics {\n width: number;\n height: number;\n left: number;\n top: number;\n}\n\nexport interface UseBoxMetricsResult extends BoxMetrics {\n hasMeasured: boolean;\n}\n\nexport type MetricTarget = DOMElement;\n\nasync function loadNative() {\n return import(\"@vizejs/fresco-native\");\n}\n\nfunction targetId(target: MetricTarget | null | undefined): number | undefined {\n return target?.id ?? target?.$el?.id;\n}\n\nexport function useBoxMetrics(ref: Ref<MetricTarget | null>): UseBoxMetricsResult {\n const metrics = reactive<UseBoxMetricsResult>({\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n hasMeasured: false,\n });\n\n let timer: ReturnType<typeof setInterval> | null = null;\n\n const refresh = () => {\n const id = targetId(ref.value);\n if (id === undefined) {\n metrics.width = 0;\n metrics.height = 0;\n metrics.left = 0;\n metrics.top = 0;\n metrics.hasMeasured = false;\n return;\n }\n\n void loadNative()\n .then((native) => {\n const layouts = \"getLastRenderLayouts\" in native ? native.getLastRenderLayouts() : [];\n updateLastRenderLayouts(layouts);\n const layout = layouts.find((item: { id: number }) => item.id === id);\n if (!layout) return;\n\n metrics.width = layout.width;\n metrics.height = layout.height;\n metrics.left = layout.x;\n metrics.top = layout.y;\n metrics.hasMeasured = true;\n })\n .catch(() => {});\n };\n\n onMounted(() => {\n const layout = getLastRenderLayout(ref.value);\n if (layout) {\n metrics.width = layout.width;\n metrics.height = layout.height;\n metrics.left = layout.x;\n metrics.top = layout.y;\n metrics.hasMeasured = true;\n }\n\n refresh();\n timer = setInterval(refresh, 100);\n });\n\n onUnmounted(() => {\n if (timer) clearInterval(timer);\n });\n\n return metrics;\n}\n"],"mappings":"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"}
@@ -0,0 +1,316 @@
1
+ import { Ref } from "@vue/runtime-core";
2
+ import * as _$_vue_reactivity0 from "@vue/reactivity";
3
+
4
+ //#region src/composables/useInput.d.ts
5
+ interface Key {
6
+ upArrow: boolean;
7
+ downArrow: boolean;
8
+ leftArrow: boolean;
9
+ rightArrow: boolean;
10
+ pageDown: boolean;
11
+ pageUp: boolean;
12
+ home: boolean;
13
+ end: boolean;
14
+ return: boolean;
15
+ escape: boolean;
16
+ ctrl: boolean;
17
+ shift: boolean;
18
+ tab: boolean;
19
+ backspace: boolean;
20
+ delete: boolean;
21
+ meta: boolean;
22
+ super: boolean;
23
+ hyper: boolean;
24
+ capsLock: boolean;
25
+ numLock: boolean;
26
+ eventType?: "press" | "repeat" | "release";
27
+ }
28
+ interface KeyHandler {
29
+ (key: string, modifiers: {
30
+ ctrl: boolean;
31
+ alt: boolean;
32
+ shift: boolean;
33
+ meta: boolean;
34
+ }): void;
35
+ }
36
+ interface UseInputOptions {
37
+ /** Whether to capture input (boolean or Ref<boolean>) */
38
+ active?: boolean | Ref<boolean>;
39
+ /** Whether to capture input (alias for active, boolean or Ref<boolean>) */
40
+ isActive?: boolean | Ref<boolean>;
41
+ /** Ink-compatible input callback */
42
+ handler?: (input: string, key: Key) => void;
43
+ /** Called on key press */
44
+ onKey?: KeyHandler;
45
+ /** Called on character input */
46
+ onChar?: (char: string) => void;
47
+ /** Called on Enter */
48
+ onSubmit?: () => void;
49
+ /** Called on Escape */
50
+ onEscape?: () => void;
51
+ /** Called on arrow keys */
52
+ onArrow?: (direction: "up" | "down" | "left" | "right") => void;
53
+ /** Called when an IME composition starts */
54
+ onCompositionStart?: () => void;
55
+ /** Called when IME preedit text changes */
56
+ onCompositionUpdate?: (text: string, cursor: number) => void;
57
+ /** Called when IME commits text */
58
+ onCompositionEnd?: (text: string) => void;
59
+ }
60
+ interface UseInputReturn {
61
+ isActive: Ref<boolean>;
62
+ lastKey: Ref<string | null>;
63
+ enable: () => void;
64
+ disable: () => void;
65
+ }
66
+ type InputHandler = (input: string, key: Key) => void;
67
+ interface UseInputHandlerOptions {
68
+ isActive?: boolean | Ref<boolean>;
69
+ }
70
+ declare function useInput(handler: InputHandler, options?: UseInputHandlerOptions): UseInputReturn;
71
+ declare function useInput(options?: UseInputOptions): UseInputReturn;
72
+ /**
73
+ * Shorthand for handling specific key combinations
74
+ */
75
+ declare function useKeyPress(key: string, handler: () => void, options?: {
76
+ ctrl?: boolean;
77
+ alt?: boolean;
78
+ shift?: boolean;
79
+ meta?: boolean;
80
+ }): void;
81
+ //#endregion
82
+ //#region src/composables/usePaste.d.ts
83
+ interface UsePasteOptions {
84
+ /** Whether the paste handler is active */
85
+ isActive?: boolean | Ref<boolean>;
86
+ }
87
+ declare function usePaste(handler: (text: string) => void, options?: UsePasteOptions): {
88
+ isActive: Ref<boolean, boolean>;
89
+ enable: () => void;
90
+ disable: () => void;
91
+ };
92
+ //#endregion
93
+ //#region src/composables/useFocus.d.ts
94
+ interface UseFocusOptions {
95
+ /** Enable or disable this focus target while keeping its logical identity */
96
+ isActive?: boolean | Ref<boolean>;
97
+ /** Auto-focus this component when nothing else is focused */
98
+ autoFocus?: boolean;
99
+ /** Focus ID for this element */
100
+ id?: string;
101
+ }
102
+ interface FocusManager {
103
+ /** Currently focused element ID */
104
+ focusedId: Ref<string | null>;
105
+ /** Ink-compatible currently focused ID alias */
106
+ activeId: Readonly<Ref<string | undefined>>;
107
+ /** All active focusable element IDs */
108
+ focusableIds: Readonly<Ref<string[]>>;
109
+ /** Whether focus management is enabled */
110
+ isEnabled: Ref<boolean>;
111
+ /** Enable focus management */
112
+ enableFocus: () => void;
113
+ /** Disable focus management */
114
+ disableFocus: () => void;
115
+ /** Focus a specific element */
116
+ focus: (id: string) => void;
117
+ /** Focus next element */
118
+ focusNext: () => void;
119
+ /** Focus previous element */
120
+ focusPrevious: () => void;
121
+ /** Register a focusable element */
122
+ register: (id: string, options?: {
123
+ isActive?: boolean;
124
+ autoFocus?: boolean;
125
+ }) => void;
126
+ /** Unregister a focusable element */
127
+ unregister: (id: string) => void;
128
+ /** Activate or deactivate a focusable element while keeping its order */
129
+ setActive: (id: string, isActive: boolean) => void;
130
+ }
131
+ /**
132
+ * Use focus management
133
+ */
134
+ declare function useFocus(options?: UseFocusOptions): {
135
+ id: string;
136
+ isFocused: _$_vue_reactivity0.ComputedRef<boolean>;
137
+ focus: (targetId?: string) => void;
138
+ blur: () => void;
139
+ };
140
+ /**
141
+ * Use global focus manager controls.
142
+ */
143
+ declare function useFocusManager(): {
144
+ enableFocus: () => void;
145
+ disableFocus: () => void;
146
+ focusNext: () => void;
147
+ focusPrevious: () => void;
148
+ focus: (id: string) => void;
149
+ activeId: Readonly<Ref<string | undefined, string | undefined>>;
150
+ focusableIds: Readonly<Ref<string[], string[]>>;
151
+ };
152
+ //#endregion
153
+ //#region src/composables/useApp.d.ts
154
+ interface UseAppReturn {
155
+ /** Terminal width */
156
+ width: Ref<number>;
157
+ /** Terminal height */
158
+ height: Ref<number>;
159
+ /** Whether app is running */
160
+ isRunning: Ref<boolean>;
161
+ /** Exit the app */
162
+ exit: (errorOrResult?: unknown) => void;
163
+ /** Force re-render */
164
+ render: () => void;
165
+ /** Clear the screen */
166
+ clear: () => void;
167
+ /** Wait until pending render output has flushed */
168
+ waitUntilRenderFlush: () => Promise<void>;
169
+ }
170
+ /**
171
+ * Use app context
172
+ */
173
+ declare function useApp(): UseAppReturn;
174
+ //#endregion
175
+ //#region src/composables/useIme.d.ts
176
+ interface UseImeOptions {
177
+ /** Initial IME mode */
178
+ mode?: ImeMode;
179
+ /** Called when IME mode changes */
180
+ onModeChange?: (mode: ImeMode) => void;
181
+ /** Called when composition updates */
182
+ onCompositionUpdate?: (text: string, cursor: number) => void;
183
+ /** Called when text is committed */
184
+ onCommit?: (text: string) => void;
185
+ }
186
+ type ImeMode = "direct" | "hiragana" | "katakana" | "half-katakana" | "full-alpha" | "pinyin" | "hangul";
187
+ interface ImeManager {
188
+ /** Whether IME is active */
189
+ isActive: Ref<boolean>;
190
+ /** Current input mode */
191
+ mode: Ref<ImeMode>;
192
+ /** Whether currently composing */
193
+ isComposing: Ref<boolean>;
194
+ /** Preedit text */
195
+ preedit: Ref<string>;
196
+ /** Cursor position in preedit */
197
+ preeditCursor: Ref<number>;
198
+ /** Candidate list */
199
+ candidates: Ref<string[]>;
200
+ /** Selected candidate index */
201
+ selectedCandidate: Ref<number>;
202
+ /** Mode display name */
203
+ modeDisplay: Ref<string>;
204
+ /** Enable IME */
205
+ enable: () => void;
206
+ /** Disable IME */
207
+ disable: () => void;
208
+ /** Set input mode */
209
+ setMode: (mode: ImeMode) => void;
210
+ /** Handle key event for IME */
211
+ handleKey: (key: string, modifiers: {
212
+ ctrl: boolean;
213
+ alt: boolean;
214
+ }) => boolean;
215
+ /** Commit current composition */
216
+ commit: () => void;
217
+ /** Cancel current composition */
218
+ cancel: () => void;
219
+ /** Select next candidate */
220
+ nextCandidate: () => void;
221
+ /** Select previous candidate */
222
+ prevCandidate: () => void;
223
+ /** Select candidate by number (1-9) */
224
+ selectCandidate: (num: number) => void;
225
+ }
226
+ declare function useIme(options?: UseImeOptions): ImeManager;
227
+ //#endregion
228
+ //#region src/composables/useStreams.d.ts
229
+ interface UseStdinReturn {
230
+ stdin: NodeJS.ReadStream;
231
+ setRawMode: (isRawMode: boolean) => void;
232
+ isRawModeSupported: boolean;
233
+ internal_exitOnCtrlC: boolean;
234
+ }
235
+ interface UseStdoutReturn {
236
+ stdout: NodeJS.WriteStream;
237
+ write: (data: string) => void;
238
+ }
239
+ interface UseStderrReturn {
240
+ stderr: NodeJS.WriteStream;
241
+ write: (data: string) => void;
242
+ }
243
+ declare function useStdin(): UseStdinReturn;
244
+ declare function useStdout(): UseStdoutReturn;
245
+ declare function useStderr(): UseStderrReturn;
246
+ //#endregion
247
+ //#region src/composables/useWindowSize.d.ts
248
+ /**
249
+ * useWindowSize - terminal dimensions.
250
+ */
251
+ interface WindowSize {
252
+ columns: number;
253
+ rows: number;
254
+ }
255
+ declare function useWindowSize(): WindowSize;
256
+ //#endregion
257
+ //#region src/composables/useCursor.d.ts
258
+ interface CursorPosition {
259
+ x: number;
260
+ y: number;
261
+ }
262
+ declare function useCursor(): {
263
+ setCursorPosition: (position: CursorPosition | undefined) => void;
264
+ };
265
+ //#endregion
266
+ //#region src/composables/useAnimation.d.ts
267
+ /**
268
+ * useAnimation - Ink-compatible shared animation state.
269
+ */
270
+ interface UseAnimationOptions {
271
+ /** Time between ticks in milliseconds */
272
+ interval?: number;
273
+ /** Whether the animation is running */
274
+ isActive?: boolean;
275
+ }
276
+ interface AnimationResult {
277
+ frame: number;
278
+ time: number;
279
+ delta: number;
280
+ reset: () => void;
281
+ }
282
+ declare function useAnimation(options?: UseAnimationOptions): AnimationResult;
283
+ //#endregion
284
+ //#region src/layoutMetrics.d.ts
285
+ interface DOMElement {
286
+ id?: number;
287
+ $el?: {
288
+ id?: number;
289
+ };
290
+ }
291
+ declare function measureElement(node: DOMElement): {
292
+ width: number;
293
+ height: number;
294
+ };
295
+ //#endregion
296
+ //#region src/composables/useBoxMetrics.d.ts
297
+ interface BoxMetrics {
298
+ width: number;
299
+ height: number;
300
+ left: number;
301
+ top: number;
302
+ }
303
+ interface UseBoxMetricsResult extends BoxMetrics {
304
+ hasMeasured: boolean;
305
+ }
306
+ type MetricTarget = DOMElement;
307
+ declare function useBoxMetrics(ref: Ref<MetricTarget | null>): UseBoxMetricsResult;
308
+ //#endregion
309
+ //#region src/composables/useIsScreenReaderEnabled.d.ts
310
+ /**
311
+ * useIsScreenReaderEnabled - screen reader mode flag.
312
+ */
313
+ declare function useIsScreenReaderEnabled(): boolean;
314
+ //#endregion
315
+ export { usePaste as A, UseAppReturn as C, useFocus as D, UseFocusOptions as E, UseInputReturn as F, useInput as I, useKeyPress as L, Key as M, KeyHandler as N, useFocusManager as O, UseInputOptions as P, useIme as S, FocusManager as T, useStderr as _, DOMElement as a, ImeManager as b, UseAnimationOptions as c, useCursor as d, WindowSize as f, UseStdoutReturn as g, UseStdinReturn as h, useBoxMetrics as i, InputHandler as j, UsePasteOptions as k, useAnimation as l, UseStderrReturn as m, BoxMetrics as n, measureElement as o, useWindowSize as p, UseBoxMetricsResult as r, AnimationResult as s, useIsScreenReaderEnabled as t, CursorPosition as u, useStdin as v, useApp as w, UseImeOptions as x, useStdout as y };
316
+ //# sourceMappingURL=index-43FxHkwF.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-43FxHkwF.d.mts","names":[],"sources":["../src/composables/useInput.ts","../src/composables/usePaste.ts","../src/composables/useFocus.ts","../src/composables/useApp.ts","../src/composables/useIme.ts","../src/composables/useStreams.ts","../src/composables/useWindowSize.ts","../src/composables/useCursor.ts","../src/composables/useAnimation.ts","../src/layoutMetrics.ts","../src/composables/useBoxMetrics.ts","../src/composables/useIsScreenReaderEnabled.ts"],"mappings":"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"}