@lokascript/domain-voice 2.1.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/dist/index.js ADDED
@@ -0,0 +1,1803 @@
1
+ // src/index.ts
2
+ import { createMultilingualDSL } from "@lokascript/framework";
3
+
4
+ // src/schemas/index.ts
5
+ import { defineCommand, defineRole } from "@lokascript/framework";
6
+ var navigateSchema = defineCommand({
7
+ action: "navigate",
8
+ description: "Navigate to a URL, page section, or ARIA landmark",
9
+ category: "navigation",
10
+ primaryRole: "destination",
11
+ roles: [
12
+ defineRole({
13
+ role: "destination",
14
+ description: "URL, page section, or ARIA landmark to navigate to",
15
+ required: true,
16
+ expectedTypes: ["expression"],
17
+ svoPosition: 1,
18
+ sovPosition: 1,
19
+ markerOverride: {
20
+ en: "to",
21
+ es: "a",
22
+ ja: "\u306B",
23
+ ar: "\u0625\u0644\u0649",
24
+ ko: "\uB85C",
25
+ zh: "\u5230",
26
+ tr: "ya",
27
+ fr: "vers"
28
+ }
29
+ })
30
+ ]
31
+ });
32
+ var clickSchema = defineCommand({
33
+ action: "click",
34
+ description: "Click an element identified by selector, text content, or ARIA label",
35
+ category: "interaction",
36
+ primaryRole: "patient",
37
+ roles: [
38
+ defineRole({
39
+ role: "patient",
40
+ description: "The element to click",
41
+ required: true,
42
+ expectedTypes: ["expression", "selector"],
43
+ svoPosition: 1,
44
+ sovPosition: 1,
45
+ markerOverride: {
46
+ ja: "\u3092",
47
+ ko: "\uC744",
48
+ ar: "\u0639\u0644\u0649",
49
+ fr: "sur"
50
+ }
51
+ })
52
+ ]
53
+ });
54
+ var typeSchema = defineCommand({
55
+ action: "type",
56
+ description: "Type text into an input field",
57
+ category: "interaction",
58
+ primaryRole: "patient",
59
+ roles: [
60
+ defineRole({
61
+ role: "patient",
62
+ description: "The text to type",
63
+ required: true,
64
+ expectedTypes: ["expression"],
65
+ svoPosition: 2,
66
+ sovPosition: 2,
67
+ markerOverride: { ja: "\u3092", ko: "\uC744" }
68
+ }),
69
+ defineRole({
70
+ role: "destination",
71
+ description: "The input field to type into",
72
+ required: false,
73
+ expectedTypes: ["expression", "selector"],
74
+ svoPosition: 1,
75
+ sovPosition: 3,
76
+ markerOverride: {
77
+ en: "into",
78
+ es: "en",
79
+ ja: "\u306B",
80
+ ar: "\u0641\u064A",
81
+ ko: "\uC5D0",
82
+ zh: "\u5230",
83
+ tr: "ya",
84
+ fr: "dans"
85
+ }
86
+ })
87
+ ]
88
+ });
89
+ var scrollSchema = defineCommand({
90
+ action: "scroll",
91
+ description: "Scroll the page or a specific element",
92
+ category: "navigation",
93
+ primaryRole: "manner",
94
+ roles: [
95
+ defineRole({
96
+ role: "manner",
97
+ description: "Direction to scroll (up, down, left, right, top, bottom)",
98
+ required: true,
99
+ expectedTypes: ["expression"],
100
+ svoPosition: 2,
101
+ sovPosition: 2
102
+ }),
103
+ defineRole({
104
+ role: "quantity",
105
+ description: 'Amount to scroll (pixels or "page")',
106
+ required: false,
107
+ expectedTypes: ["expression"],
108
+ svoPosition: 1,
109
+ sovPosition: 1,
110
+ markerOverride: {
111
+ en: "by",
112
+ es: "por",
113
+ ja: "\u3060\u3051",
114
+ ar: "\u0628",
115
+ ko: "\uB9CC\uD07C",
116
+ zh: "\u5E45",
117
+ tr: "kadar",
118
+ fr: "de"
119
+ }
120
+ })
121
+ ]
122
+ });
123
+ var readSchema = defineCommand({
124
+ action: "read",
125
+ description: "Read element content aloud using text-to-speech",
126
+ category: "accessibility",
127
+ primaryRole: "patient",
128
+ roles: [
129
+ defineRole({
130
+ role: "patient",
131
+ description: "The element whose content to read aloud",
132
+ required: true,
133
+ expectedTypes: ["expression", "selector"],
134
+ svoPosition: 1,
135
+ sovPosition: 1,
136
+ markerOverride: { ja: "\u3092", ko: "\uC744" }
137
+ })
138
+ ]
139
+ });
140
+ var zoomSchema = defineCommand({
141
+ action: "zoom",
142
+ description: "Zoom the page in or out",
143
+ category: "accessibility",
144
+ primaryRole: "manner",
145
+ roles: [
146
+ defineRole({
147
+ role: "manner",
148
+ description: "Zoom direction (in, out, reset)",
149
+ required: true,
150
+ expectedTypes: ["expression"],
151
+ svoPosition: 1,
152
+ sovPosition: 1
153
+ })
154
+ ]
155
+ });
156
+ var selectSchema = defineCommand({
157
+ action: "select",
158
+ description: "Select text content or an element",
159
+ category: "interaction",
160
+ primaryRole: "patient",
161
+ roles: [
162
+ defineRole({
163
+ role: "patient",
164
+ description: "The element or text to select",
165
+ required: true,
166
+ expectedTypes: ["expression", "selector"],
167
+ svoPosition: 1,
168
+ sovPosition: 1,
169
+ markerOverride: { ja: "\u3092", ko: "\uB97C" }
170
+ })
171
+ ]
172
+ });
173
+ var backSchema = defineCommand({
174
+ action: "back",
175
+ description: "Navigate to the previous page in history",
176
+ category: "navigation",
177
+ primaryRole: "quantity",
178
+ roles: [
179
+ defineRole({
180
+ role: "quantity",
181
+ description: "Number of pages to go back (default: 1)",
182
+ required: false,
183
+ expectedTypes: ["expression"],
184
+ svoPosition: 1,
185
+ sovPosition: 1
186
+ })
187
+ ]
188
+ });
189
+ var forwardSchema = defineCommand({
190
+ action: "forward",
191
+ description: "Navigate to the next page in history",
192
+ category: "navigation",
193
+ primaryRole: "quantity",
194
+ roles: [
195
+ defineRole({
196
+ role: "quantity",
197
+ description: "Number of pages to go forward (default: 1)",
198
+ required: false,
199
+ expectedTypes: ["expression"],
200
+ svoPosition: 1,
201
+ sovPosition: 1
202
+ })
203
+ ]
204
+ });
205
+ var focusSchema = defineCommand({
206
+ action: "focus",
207
+ description: "Move keyboard focus to an element",
208
+ category: "accessibility",
209
+ primaryRole: "patient",
210
+ roles: [
211
+ defineRole({
212
+ role: "patient",
213
+ description: "The element to focus",
214
+ required: true,
215
+ expectedTypes: ["expression", "selector"],
216
+ svoPosition: 1,
217
+ sovPosition: 1,
218
+ markerOverride: {
219
+ ja: "\u306B",
220
+ ko: "\uC5D0",
221
+ ar: "\u0639\u0644\u0649",
222
+ tr: "ya"
223
+ }
224
+ })
225
+ ]
226
+ });
227
+ var closeSchema = defineCommand({
228
+ action: "close",
229
+ description: "Close the current tab, dialog, or modal",
230
+ category: "interaction",
231
+ primaryRole: "patient",
232
+ roles: [
233
+ defineRole({
234
+ role: "patient",
235
+ description: "What to close (tab, dialog, modal, menu)",
236
+ required: false,
237
+ expectedTypes: ["expression"],
238
+ svoPosition: 1,
239
+ sovPosition: 1,
240
+ markerOverride: { ja: "\u3092", ko: "\uB97C" }
241
+ })
242
+ ]
243
+ });
244
+ var openSchema = defineCommand({
245
+ action: "open",
246
+ description: "Open a link in a new tab, or open a menu/dropdown",
247
+ category: "interaction",
248
+ primaryRole: "patient",
249
+ roles: [
250
+ defineRole({
251
+ role: "patient",
252
+ description: "What to open (link, tab, menu, URL)",
253
+ required: true,
254
+ expectedTypes: ["expression"],
255
+ svoPosition: 1,
256
+ sovPosition: 1,
257
+ markerOverride: { ja: "\u3092", ko: "\uC744" }
258
+ })
259
+ ]
260
+ });
261
+ var searchSchema = defineCommand({
262
+ action: "search",
263
+ description: "Search for text on the page or via a search form",
264
+ category: "interaction",
265
+ primaryRole: "patient",
266
+ roles: [
267
+ defineRole({
268
+ role: "patient",
269
+ description: "The search query text",
270
+ required: true,
271
+ expectedTypes: ["expression"],
272
+ svoPosition: 2,
273
+ sovPosition: 2,
274
+ markerOverride: {
275
+ ar: "\u0639\u0646",
276
+ ja: "\u3092",
277
+ ko: "\uC744"
278
+ }
279
+ }),
280
+ defineRole({
281
+ role: "destination",
282
+ description: "Where to search (page, site, or search field)",
283
+ required: false,
284
+ expectedTypes: ["expression"],
285
+ svoPosition: 1,
286
+ sovPosition: 3,
287
+ markerOverride: {
288
+ en: "in",
289
+ es: "en",
290
+ ja: "\u3067",
291
+ ar: "\u0641\u064A",
292
+ ko: "\uC5D0\uC11C",
293
+ zh: "\u5728",
294
+ tr: "da",
295
+ fr: "dans"
296
+ }
297
+ })
298
+ ]
299
+ });
300
+ var helpSchema = defineCommand({
301
+ action: "help",
302
+ description: "List available voice commands or get help for a specific command",
303
+ category: "meta",
304
+ primaryRole: "patient",
305
+ roles: [
306
+ defineRole({
307
+ role: "patient",
308
+ description: "Specific command to get help for (optional)",
309
+ required: false,
310
+ expectedTypes: ["expression"],
311
+ svoPosition: 1,
312
+ sovPosition: 1
313
+ })
314
+ ]
315
+ });
316
+ var allSchemas = [
317
+ navigateSchema,
318
+ clickSchema,
319
+ typeSchema,
320
+ scrollSchema,
321
+ readSchema,
322
+ zoomSchema,
323
+ selectSchema,
324
+ backSchema,
325
+ forwardSchema,
326
+ focusSchema,
327
+ closeSchema,
328
+ openSchema,
329
+ searchSchema,
330
+ helpSchema
331
+ ];
332
+
333
+ // src/profiles/index.ts
334
+ var enProfile = {
335
+ code: "en",
336
+ wordOrder: "SVO",
337
+ keywords: {
338
+ navigate: { primary: "navigate", alternatives: ["go"] },
339
+ click: { primary: "click", alternatives: ["press", "tap"] },
340
+ type: { primary: "type", alternatives: ["enter"] },
341
+ scroll: { primary: "scroll" },
342
+ read: { primary: "read", alternatives: ["say"] },
343
+ zoom: { primary: "zoom" },
344
+ select: { primary: "select" },
345
+ back: { primary: "back" },
346
+ forward: { primary: "forward" },
347
+ focus: { primary: "focus" },
348
+ close: { primary: "close" },
349
+ open: { primary: "open" },
350
+ search: { primary: "search", alternatives: ["find"] },
351
+ help: { primary: "help" }
352
+ },
353
+ roleMarkers: {}
354
+ };
355
+ var esProfile = {
356
+ code: "es",
357
+ wordOrder: "SVO",
358
+ keywords: {
359
+ navigate: { primary: "navegar", alternatives: ["ir"] },
360
+ click: { primary: "clic", alternatives: ["pulsar"] },
361
+ type: { primary: "escribir" },
362
+ scroll: { primary: "desplazar" },
363
+ read: { primary: "leer" },
364
+ zoom: { primary: "zoom" },
365
+ select: { primary: "seleccionar" },
366
+ back: { primary: "atr\xE1s", alternatives: ["volver"] },
367
+ forward: { primary: "adelante" },
368
+ focus: { primary: "enfocar" },
369
+ close: { primary: "cerrar" },
370
+ open: { primary: "abrir" },
371
+ search: { primary: "buscar" },
372
+ help: { primary: "ayuda" }
373
+ },
374
+ roleMarkers: {}
375
+ };
376
+ var jaProfile = {
377
+ code: "ja",
378
+ wordOrder: "SOV",
379
+ keywords: {
380
+ navigate: { primary: "\u79FB\u52D5" },
381
+ click: { primary: "\u30AF\u30EA\u30C3\u30AF" },
382
+ type: { primary: "\u5165\u529B" },
383
+ scroll: { primary: "\u30B9\u30AF\u30ED\u30FC\u30EB" },
384
+ read: { primary: "\u8AAD\u3080" },
385
+ zoom: { primary: "\u30BA\u30FC\u30E0" },
386
+ select: { primary: "\u9078\u629E" },
387
+ back: { primary: "\u623B\u308B" },
388
+ forward: { primary: "\u9032\u3080" },
389
+ focus: { primary: "\u30D5\u30A9\u30FC\u30AB\u30B9" },
390
+ close: { primary: "\u9589\u3058\u308B" },
391
+ open: { primary: "\u958B\u304F" },
392
+ search: { primary: "\u691C\u7D22" },
393
+ help: { primary: "\u30D8\u30EB\u30D7" }
394
+ },
395
+ roleMarkers: {}
396
+ };
397
+ var arProfile = {
398
+ code: "ar",
399
+ wordOrder: "VSO",
400
+ keywords: {
401
+ navigate: { primary: "\u0627\u0646\u062A\u0642\u0644" },
402
+ click: { primary: "\u0627\u0646\u0642\u0631" },
403
+ type: { primary: "\u0627\u0643\u062A\u0628" },
404
+ scroll: { primary: "\u062A\u0645\u0631\u064A\u0631" },
405
+ read: { primary: "\u0627\u0642\u0631\u0623" },
406
+ zoom: { primary: "\u062A\u0643\u0628\u064A\u0631" },
407
+ select: { primary: "\u0627\u062E\u062A\u0631" },
408
+ back: { primary: "\u0631\u062C\u0648\u0639" },
409
+ forward: { primary: "\u062A\u0642\u062F\u0645" },
410
+ focus: { primary: "\u0631\u0643\u0632" },
411
+ close: { primary: "\u0623\u063A\u0644\u0642" },
412
+ open: { primary: "\u0627\u0641\u062A\u062D" },
413
+ search: { primary: "\u0627\u0628\u062D\u062B" },
414
+ help: { primary: "\u0645\u0633\u0627\u0639\u062F\u0629" }
415
+ },
416
+ roleMarkers: {}
417
+ };
418
+ var koProfile = {
419
+ code: "ko",
420
+ wordOrder: "SOV",
421
+ keywords: {
422
+ navigate: { primary: "\uC774\uB3D9" },
423
+ click: { primary: "\uD074\uB9AD" },
424
+ type: { primary: "\uC785\uB825" },
425
+ scroll: { primary: "\uC2A4\uD06C\uB864" },
426
+ read: { primary: "\uC77D\uAE30" },
427
+ zoom: { primary: "\uD655\uB300" },
428
+ select: { primary: "\uC120\uD0DD" },
429
+ back: { primary: "\uB4A4\uB85C" },
430
+ forward: { primary: "\uC55E\uC73C\uB85C" },
431
+ focus: { primary: "\uD3EC\uCEE4\uC2A4" },
432
+ close: { primary: "\uB2EB\uAE30" },
433
+ open: { primary: "\uC5F4\uAE30" },
434
+ search: { primary: "\uAC80\uC0C9" },
435
+ help: { primary: "\uB3C4\uC6C0\uB9D0" }
436
+ },
437
+ roleMarkers: {}
438
+ };
439
+ var zhProfile = {
440
+ code: "zh",
441
+ wordOrder: "SVO",
442
+ keywords: {
443
+ navigate: { primary: "\u5BFC\u822A" },
444
+ click: { primary: "\u70B9\u51FB" },
445
+ type: { primary: "\u8F93\u5165" },
446
+ scroll: { primary: "\u6EDA\u52A8" },
447
+ read: { primary: "\u6717\u8BFB" },
448
+ zoom: { primary: "\u7F29\u653E" },
449
+ select: { primary: "\u9009\u62E9" },
450
+ back: { primary: "\u8FD4\u56DE" },
451
+ forward: { primary: "\u524D\u8FDB" },
452
+ focus: { primary: "\u805A\u7126" },
453
+ close: { primary: "\u5173\u95ED" },
454
+ open: { primary: "\u6253\u5F00" },
455
+ search: { primary: "\u641C\u7D22" },
456
+ help: { primary: "\u5E2E\u52A9" }
457
+ },
458
+ roleMarkers: {}
459
+ };
460
+ var trProfile = {
461
+ code: "tr",
462
+ wordOrder: "SOV",
463
+ keywords: {
464
+ navigate: { primary: "git" },
465
+ click: { primary: "t\u0131kla" },
466
+ type: { primary: "yaz" },
467
+ scroll: { primary: "kayd\u0131r" },
468
+ read: { primary: "oku" },
469
+ zoom: { primary: "yak\u0131nla\u015F" },
470
+ select: { primary: "se\xE7" },
471
+ back: { primary: "geri" },
472
+ forward: { primary: "ileri" },
473
+ focus: { primary: "odakla" },
474
+ close: { primary: "kapat" },
475
+ open: { primary: "a\xE7" },
476
+ search: { primary: "ara" },
477
+ help: { primary: "yard\u0131m" }
478
+ },
479
+ roleMarkers: {}
480
+ };
481
+ var frProfile = {
482
+ code: "fr",
483
+ wordOrder: "SVO",
484
+ keywords: {
485
+ navigate: { primary: "naviguer", alternatives: ["aller"] },
486
+ click: { primary: "cliquer" },
487
+ type: { primary: "taper", alternatives: ["\xE9crire"] },
488
+ scroll: { primary: "d\xE9filer" },
489
+ read: { primary: "lire" },
490
+ zoom: { primary: "zoomer" },
491
+ select: { primary: "s\xE9lectionner" },
492
+ back: { primary: "retour" },
493
+ forward: { primary: "avancer" },
494
+ focus: { primary: "focaliser" },
495
+ close: { primary: "fermer" },
496
+ open: { primary: "ouvrir" },
497
+ search: { primary: "chercher", alternatives: ["rechercher"] },
498
+ help: { primary: "aide" }
499
+ },
500
+ roleMarkers: {}
501
+ };
502
+ var allProfiles = [
503
+ enProfile,
504
+ esProfile,
505
+ jaProfile,
506
+ arProfile,
507
+ koProfile,
508
+ zhProfile,
509
+ trProfile,
510
+ frProfile
511
+ ];
512
+
513
+ // src/tokenizers/index.ts
514
+ import { createSimpleTokenizer } from "@lokascript/framework";
515
+ var CSSSelectorExtractor = class {
516
+ name = "css-selector";
517
+ canExtract(input, position) {
518
+ const ch = input[position];
519
+ return ch === "#" || ch === ".";
520
+ }
521
+ extract(input, position) {
522
+ const prefix = input[position];
523
+ if (prefix !== "#" && prefix !== ".") return null;
524
+ let end = position + 1;
525
+ while (end < input.length && /[\p{L}\p{N}_-]/u.test(input[end])) {
526
+ end++;
527
+ }
528
+ if (end === position + 1) return null;
529
+ return { value: input.slice(position, end), length: end - position };
530
+ }
531
+ };
532
+ var LatinExtendedIdentifierExtractor = class {
533
+ name = "latin-extended-identifier";
534
+ canExtract(input, position) {
535
+ return /\p{L}/u.test(input[position]);
536
+ }
537
+ extract(input, position) {
538
+ let end = position;
539
+ while (end < input.length && /[\p{L}\p{N}_-]/u.test(input[end])) {
540
+ end++;
541
+ }
542
+ if (end === position) return null;
543
+ return { value: input.slice(position, end), length: end - position };
544
+ }
545
+ };
546
+ var cssSelectorExtractor = new CSSSelectorExtractor();
547
+ var EnglishVoiceTokenizer = createSimpleTokenizer({
548
+ language: "en",
549
+ direction: "ltr",
550
+ customExtractors: [cssSelectorExtractor],
551
+ keywords: [
552
+ // commands
553
+ "navigate",
554
+ "go",
555
+ "click",
556
+ "press",
557
+ "tap",
558
+ "type",
559
+ "enter",
560
+ "scroll",
561
+ "read",
562
+ "say",
563
+ "zoom",
564
+ "select",
565
+ "back",
566
+ "forward",
567
+ "focus",
568
+ "close",
569
+ "open",
570
+ "search",
571
+ "find",
572
+ "help",
573
+ // markers
574
+ "to",
575
+ "into",
576
+ "by",
577
+ "in",
578
+ "on",
579
+ "the",
580
+ "a",
581
+ // direction words
582
+ "up",
583
+ "down",
584
+ "left",
585
+ "right",
586
+ "top",
587
+ "bottom",
588
+ // zoom words
589
+ "in",
590
+ "out",
591
+ "reset",
592
+ // targets
593
+ "tab",
594
+ "dialog",
595
+ "modal",
596
+ "menu",
597
+ "page",
598
+ "all"
599
+ ],
600
+ caseInsensitive: true
601
+ });
602
+ var SpanishVoiceTokenizer = createSimpleTokenizer({
603
+ language: "es",
604
+ direction: "ltr",
605
+ customExtractors: [cssSelectorExtractor, new LatinExtendedIdentifierExtractor()],
606
+ keywords: [
607
+ "navegar",
608
+ "ir",
609
+ "clic",
610
+ "pulsar",
611
+ "escribir",
612
+ "desplazar",
613
+ "leer",
614
+ "zoom",
615
+ "seleccionar",
616
+ "atr\xE1s",
617
+ "volver",
618
+ "adelante",
619
+ "enfocar",
620
+ "cerrar",
621
+ "abrir",
622
+ "buscar",
623
+ "ayuda",
624
+ "a",
625
+ "en",
626
+ "por",
627
+ "el",
628
+ "la",
629
+ "de",
630
+ "sur",
631
+ "arriba",
632
+ "abajo",
633
+ "izquierda",
634
+ "derecha",
635
+ "m\xE1s",
636
+ "menos",
637
+ "todo",
638
+ "p\xE1gina",
639
+ "di\xE1logo"
640
+ ],
641
+ caseInsensitive: true
642
+ });
643
+ var JapaneseVoiceTokenizer = createSimpleTokenizer({
644
+ language: "ja",
645
+ direction: "ltr",
646
+ customExtractors: [cssSelectorExtractor],
647
+ keywords: [
648
+ "\u79FB\u52D5",
649
+ "\u30AF\u30EA\u30C3\u30AF",
650
+ "\u5165\u529B",
651
+ "\u30B9\u30AF\u30ED\u30FC\u30EB",
652
+ "\u8AAD\u3080",
653
+ "\u30BA\u30FC\u30E0",
654
+ "\u9078\u629E",
655
+ "\u623B\u308B",
656
+ "\u9032\u3080",
657
+ "\u30D5\u30A9\u30FC\u30AB\u30B9",
658
+ "\u9589\u3058\u308B",
659
+ "\u958B\u304F",
660
+ "\u691C\u7D22",
661
+ "\u30D8\u30EB\u30D7",
662
+ "\u3092",
663
+ "\u306B",
664
+ "\u3067",
665
+ "\u306E",
666
+ "\u3060\u3051",
667
+ "\u4E0A",
668
+ "\u4E0B",
669
+ "\u5DE6",
670
+ "\u53F3",
671
+ "\u30A4\u30F3",
672
+ "\u30A2\u30A6\u30C8",
673
+ "\u30EA\u30BB\u30C3\u30C8",
674
+ "\u30BF\u30D6",
675
+ "\u30C0\u30A4\u30A2\u30ED\u30B0",
676
+ "\u30DA\u30FC\u30B8",
677
+ "\u5168\u3066"
678
+ ],
679
+ keywordExtras: [
680
+ { native: "\u79FB\u52D5", normalized: "navigate" },
681
+ { native: "\u30AF\u30EA\u30C3\u30AF", normalized: "click" },
682
+ { native: "\u5165\u529B", normalized: "type" },
683
+ { native: "\u30B9\u30AF\u30ED\u30FC\u30EB", normalized: "scroll" },
684
+ { native: "\u8AAD\u3080", normalized: "read" },
685
+ { native: "\u30BA\u30FC\u30E0", normalized: "zoom" },
686
+ { native: "\u9078\u629E", normalized: "select" },
687
+ { native: "\u623B\u308B", normalized: "back" },
688
+ { native: "\u9032\u3080", normalized: "forward" },
689
+ { native: "\u30D5\u30A9\u30FC\u30AB\u30B9", normalized: "focus" },
690
+ { native: "\u9589\u3058\u308B", normalized: "close" },
691
+ { native: "\u958B\u304F", normalized: "open" },
692
+ { native: "\u691C\u7D22", normalized: "search" },
693
+ { native: "\u30D8\u30EB\u30D7", normalized: "help" },
694
+ { native: "\u3092", normalized: "wo" },
695
+ { native: "\u306B", normalized: "ni" },
696
+ { native: "\u3067", normalized: "de" }
697
+ ],
698
+ keywordProfile: {
699
+ keywords: {
700
+ navigate: { primary: "\u79FB\u52D5" },
701
+ click: { primary: "\u30AF\u30EA\u30C3\u30AF" },
702
+ type: { primary: "\u5165\u529B" },
703
+ scroll: { primary: "\u30B9\u30AF\u30ED\u30FC\u30EB" },
704
+ read: { primary: "\u8AAD\u3080" },
705
+ zoom: { primary: "\u30BA\u30FC\u30E0" },
706
+ select: { primary: "\u9078\u629E" },
707
+ back: { primary: "\u623B\u308B" },
708
+ forward: { primary: "\u9032\u3080" },
709
+ focus: { primary: "\u30D5\u30A9\u30FC\u30AB\u30B9" },
710
+ close: { primary: "\u9589\u3058\u308B" },
711
+ open: { primary: "\u958B\u304F" },
712
+ search: { primary: "\u691C\u7D22" },
713
+ help: { primary: "\u30D8\u30EB\u30D7" }
714
+ }
715
+ },
716
+ caseInsensitive: false
717
+ });
718
+ var ArabicVoiceTokenizer = createSimpleTokenizer({
719
+ language: "ar",
720
+ direction: "rtl",
721
+ customExtractors: [cssSelectorExtractor],
722
+ keywords: [
723
+ "\u0627\u0646\u062A\u0642\u0644",
724
+ "\u0627\u0646\u0642\u0631",
725
+ "\u0627\u0643\u062A\u0628",
726
+ "\u062A\u0645\u0631\u064A\u0631",
727
+ "\u0627\u0642\u0631\u0623",
728
+ "\u062A\u0643\u0628\u064A\u0631",
729
+ "\u0627\u062E\u062A\u0631",
730
+ "\u0631\u062C\u0648\u0639",
731
+ "\u062A\u0642\u062F\u0645",
732
+ "\u0631\u0643\u0632",
733
+ "\u0623\u063A\u0644\u0642",
734
+ "\u0627\u0641\u062A\u062D",
735
+ "\u0627\u0628\u062D\u062B",
736
+ "\u0645\u0633\u0627\u0639\u062F\u0629",
737
+ "\u0625\u0644\u0649",
738
+ "\u0639\u0644\u0649",
739
+ "\u0641\u064A",
740
+ "\u0639\u0646",
741
+ "\u0628",
742
+ "\u0623\u0639\u0644\u0649",
743
+ "\u0623\u0633\u0641\u0644",
744
+ "\u064A\u0633\u0627\u0631",
745
+ "\u064A\u0645\u064A\u0646",
746
+ "\u0627\u0644\u0643\u0644",
747
+ "\u0627\u0644\u0635\u0641\u062D\u0629",
748
+ "\u0627\u0644\u062D\u0648\u0627\u0631"
749
+ ],
750
+ keywordExtras: [
751
+ { native: "\u0627\u0646\u062A\u0642\u0644", normalized: "navigate" },
752
+ { native: "\u0627\u0646\u0642\u0631", normalized: "click" },
753
+ { native: "\u0627\u0643\u062A\u0628", normalized: "type" },
754
+ { native: "\u062A\u0645\u0631\u064A\u0631", normalized: "scroll" },
755
+ { native: "\u0627\u0642\u0631\u0623", normalized: "read" },
756
+ { native: "\u062A\u0643\u0628\u064A\u0631", normalized: "zoom" },
757
+ { native: "\u0627\u062E\u062A\u0631", normalized: "select" },
758
+ { native: "\u0631\u062C\u0648\u0639", normalized: "back" },
759
+ { native: "\u062A\u0642\u062F\u0645", normalized: "forward" },
760
+ { native: "\u0631\u0643\u0632", normalized: "focus" },
761
+ { native: "\u0623\u063A\u0644\u0642", normalized: "close" },
762
+ { native: "\u0627\u0641\u062A\u062D", normalized: "open" },
763
+ { native: "\u0627\u0628\u062D\u062B", normalized: "search" },
764
+ { native: "\u0645\u0633\u0627\u0639\u062F\u0629", normalized: "help" },
765
+ { native: "\u0625\u0644\u0649", normalized: "to" },
766
+ { native: "\u0639\u0644\u0649", normalized: "on" },
767
+ { native: "\u0641\u064A", normalized: "in" },
768
+ { native: "\u0639\u0646", normalized: "about" }
769
+ ],
770
+ keywordProfile: {
771
+ keywords: {
772
+ navigate: { primary: "\u0627\u0646\u062A\u0642\u0644" },
773
+ click: { primary: "\u0627\u0646\u0642\u0631" },
774
+ type: { primary: "\u0627\u0643\u062A\u0628" },
775
+ scroll: { primary: "\u062A\u0645\u0631\u064A\u0631" },
776
+ read: { primary: "\u0627\u0642\u0631\u0623" },
777
+ zoom: { primary: "\u062A\u0643\u0628\u064A\u0631" },
778
+ select: { primary: "\u0627\u062E\u062A\u0631" },
779
+ back: { primary: "\u0631\u062C\u0648\u0639" },
780
+ forward: { primary: "\u062A\u0642\u062F\u0645" },
781
+ focus: { primary: "\u0631\u0643\u0632" },
782
+ close: { primary: "\u0623\u063A\u0644\u0642" },
783
+ open: { primary: "\u0627\u0641\u062A\u062D" },
784
+ search: { primary: "\u0627\u0628\u062D\u062B" },
785
+ help: { primary: "\u0645\u0633\u0627\u0639\u062F\u0629" }
786
+ }
787
+ },
788
+ caseInsensitive: false
789
+ });
790
+ var KoreanVoiceTokenizer = createSimpleTokenizer({
791
+ language: "ko",
792
+ direction: "ltr",
793
+ customExtractors: [cssSelectorExtractor],
794
+ keywords: [
795
+ "\uC774\uB3D9",
796
+ "\uD074\uB9AD",
797
+ "\uC785\uB825",
798
+ "\uC2A4\uD06C\uB864",
799
+ "\uC77D\uAE30",
800
+ "\uD655\uB300",
801
+ "\uC120\uD0DD",
802
+ "\uB4A4\uB85C",
803
+ "\uC55E\uC73C\uB85C",
804
+ "\uD3EC\uCEE4\uC2A4",
805
+ "\uB2EB\uAE30",
806
+ "\uC5F4\uAE30",
807
+ "\uAC80\uC0C9",
808
+ "\uB3C4\uC6C0\uB9D0",
809
+ "\uC744",
810
+ "\uB97C",
811
+ "\uC5D0",
812
+ "\uC5D0\uC11C",
813
+ "\uB85C",
814
+ "\uB9CC\uD07C",
815
+ "\uC704",
816
+ "\uC544\uB798",
817
+ "\uC67C\uCABD",
818
+ "\uC624\uB978\uCABD",
819
+ "\uC804\uCCB4",
820
+ "\uD0ED",
821
+ "\uB300\uD654\uC0C1\uC790",
822
+ "\uD398\uC774\uC9C0"
823
+ ],
824
+ keywordExtras: [
825
+ { native: "\uC774\uB3D9", normalized: "navigate" },
826
+ { native: "\uD074\uB9AD", normalized: "click" },
827
+ { native: "\uC785\uB825", normalized: "type" },
828
+ { native: "\uC2A4\uD06C\uB864", normalized: "scroll" },
829
+ { native: "\uC77D\uAE30", normalized: "read" },
830
+ { native: "\uD655\uB300", normalized: "zoom" },
831
+ { native: "\uC120\uD0DD", normalized: "select" },
832
+ { native: "\uB4A4\uB85C", normalized: "back" },
833
+ { native: "\uC55E\uC73C\uB85C", normalized: "forward" },
834
+ { native: "\uD3EC\uCEE4\uC2A4", normalized: "focus" },
835
+ { native: "\uB2EB\uAE30", normalized: "close" },
836
+ { native: "\uC5F4\uAE30", normalized: "open" },
837
+ { native: "\uAC80\uC0C9", normalized: "search" },
838
+ { native: "\uB3C4\uC6C0\uB9D0", normalized: "help" },
839
+ { native: "\uC744", normalized: "eul" },
840
+ { native: "\uB97C", normalized: "reul" },
841
+ { native: "\uC5D0", normalized: "e" },
842
+ { native: "\uC5D0\uC11C", normalized: "eseo" },
843
+ { native: "\uB85C", normalized: "ro" }
844
+ ],
845
+ keywordProfile: {
846
+ keywords: {
847
+ navigate: { primary: "\uC774\uB3D9" },
848
+ click: { primary: "\uD074\uB9AD" },
849
+ type: { primary: "\uC785\uB825" },
850
+ scroll: { primary: "\uC2A4\uD06C\uB864" },
851
+ read: { primary: "\uC77D\uAE30" },
852
+ zoom: { primary: "\uD655\uB300" },
853
+ select: { primary: "\uC120\uD0DD" },
854
+ back: { primary: "\uB4A4\uB85C" },
855
+ forward: { primary: "\uC55E\uC73C\uB85C" },
856
+ focus: { primary: "\uD3EC\uCEE4\uC2A4" },
857
+ close: { primary: "\uB2EB\uAE30" },
858
+ open: { primary: "\uC5F4\uAE30" },
859
+ search: { primary: "\uAC80\uC0C9" },
860
+ help: { primary: "\uB3C4\uC6C0\uB9D0" }
861
+ }
862
+ },
863
+ caseInsensitive: false
864
+ });
865
+ var ChineseVoiceTokenizer = createSimpleTokenizer({
866
+ language: "zh",
867
+ direction: "ltr",
868
+ customExtractors: [cssSelectorExtractor],
869
+ keywords: [
870
+ "\u5BFC\u822A",
871
+ "\u70B9\u51FB",
872
+ "\u8F93\u5165",
873
+ "\u6EDA\u52A8",
874
+ "\u6717\u8BFB",
875
+ "\u7F29\u653E",
876
+ "\u9009\u62E9",
877
+ "\u8FD4\u56DE",
878
+ "\u524D\u8FDB",
879
+ "\u805A\u7126",
880
+ "\u5173\u95ED",
881
+ "\u6253\u5F00",
882
+ "\u641C\u7D22",
883
+ "\u5E2E\u52A9",
884
+ "\u5230",
885
+ "\u5728",
886
+ "\u5E45",
887
+ "\u4E0A",
888
+ "\u4E0B",
889
+ "\u5DE6",
890
+ "\u53F3",
891
+ "\u5168\u90E8",
892
+ "\u6807\u7B7E",
893
+ "\u5BF9\u8BDD\u6846",
894
+ "\u9875\u9762",
895
+ "\u653E\u5927",
896
+ "\u7F29\u5C0F",
897
+ "\u91CD\u7F6E"
898
+ ],
899
+ keywordExtras: [
900
+ { native: "\u5BFC\u822A", normalized: "navigate" },
901
+ { native: "\u70B9\u51FB", normalized: "click" },
902
+ { native: "\u8F93\u5165", normalized: "type" },
903
+ { native: "\u6EDA\u52A8", normalized: "scroll" },
904
+ { native: "\u6717\u8BFB", normalized: "read" },
905
+ { native: "\u7F29\u653E", normalized: "zoom" },
906
+ { native: "\u9009\u62E9", normalized: "select" },
907
+ { native: "\u8FD4\u56DE", normalized: "back" },
908
+ { native: "\u524D\u8FDB", normalized: "forward" },
909
+ { native: "\u805A\u7126", normalized: "focus" },
910
+ { native: "\u5173\u95ED", normalized: "close" },
911
+ { native: "\u6253\u5F00", normalized: "open" },
912
+ { native: "\u641C\u7D22", normalized: "search" },
913
+ { native: "\u5E2E\u52A9", normalized: "help" },
914
+ { native: "\u5230", normalized: "to" },
915
+ { native: "\u5728", normalized: "in" }
916
+ ],
917
+ keywordProfile: {
918
+ keywords: {
919
+ navigate: { primary: "\u5BFC\u822A" },
920
+ click: { primary: "\u70B9\u51FB" },
921
+ type: { primary: "\u8F93\u5165" },
922
+ scroll: { primary: "\u6EDA\u52A8" },
923
+ read: { primary: "\u6717\u8BFB" },
924
+ zoom: { primary: "\u7F29\u653E" },
925
+ select: { primary: "\u9009\u62E9" },
926
+ back: { primary: "\u8FD4\u56DE" },
927
+ forward: { primary: "\u524D\u8FDB" },
928
+ focus: { primary: "\u805A\u7126" },
929
+ close: { primary: "\u5173\u95ED" },
930
+ open: { primary: "\u6253\u5F00" },
931
+ search: { primary: "\u641C\u7D22" },
932
+ help: { primary: "\u5E2E\u52A9" }
933
+ }
934
+ },
935
+ caseInsensitive: false
936
+ });
937
+ var TurkishVoiceTokenizer = createSimpleTokenizer({
938
+ language: "tr",
939
+ direction: "ltr",
940
+ customExtractors: [cssSelectorExtractor, new LatinExtendedIdentifierExtractor()],
941
+ keywords: [
942
+ "git",
943
+ "t\u0131kla",
944
+ "yaz",
945
+ "kayd\u0131r",
946
+ "oku",
947
+ "yak\u0131nla\u015F",
948
+ "se\xE7",
949
+ "geri",
950
+ "ileri",
951
+ "odakla",
952
+ "kapat",
953
+ "a\xE7",
954
+ "ara",
955
+ "yard\u0131m",
956
+ "ya",
957
+ "da",
958
+ "kadar",
959
+ "yukar\u0131",
960
+ "a\u015Fa\u011F\u0131",
961
+ "sol",
962
+ "sa\u011F",
963
+ "sekme",
964
+ "diyalog",
965
+ "sayfa",
966
+ "hepsi"
967
+ ],
968
+ keywordExtras: [
969
+ { native: "git", normalized: "navigate" },
970
+ { native: "t\u0131kla", normalized: "click" },
971
+ { native: "yaz", normalized: "type" },
972
+ { native: "kayd\u0131r", normalized: "scroll" },
973
+ { native: "oku", normalized: "read" },
974
+ { native: "yak\u0131nla\u015F", normalized: "zoom" },
975
+ { native: "se\xE7", normalized: "select" },
976
+ { native: "geri", normalized: "back" },
977
+ { native: "ileri", normalized: "forward" },
978
+ { native: "odakla", normalized: "focus" },
979
+ { native: "kapat", normalized: "close" },
980
+ { native: "a\xE7", normalized: "open" },
981
+ { native: "ara", normalized: "search" },
982
+ { native: "yard\u0131m", normalized: "help" },
983
+ { native: "ya", normalized: "to" },
984
+ { native: "da", normalized: "in" }
985
+ ],
986
+ keywordProfile: {
987
+ keywords: {
988
+ navigate: { primary: "git" },
989
+ click: { primary: "t\u0131kla" },
990
+ type: { primary: "yaz" },
991
+ scroll: { primary: "kayd\u0131r" },
992
+ read: { primary: "oku" },
993
+ zoom: { primary: "yak\u0131nla\u015F" },
994
+ select: { primary: "se\xE7" },
995
+ back: { primary: "geri" },
996
+ forward: { primary: "ileri" },
997
+ focus: { primary: "odakla" },
998
+ close: { primary: "kapat" },
999
+ open: { primary: "a\xE7" },
1000
+ search: { primary: "ara" },
1001
+ help: { primary: "yard\u0131m" }
1002
+ }
1003
+ },
1004
+ caseInsensitive: true
1005
+ });
1006
+ var FrenchVoiceTokenizer = createSimpleTokenizer({
1007
+ language: "fr",
1008
+ direction: "ltr",
1009
+ customExtractors: [cssSelectorExtractor, new LatinExtendedIdentifierExtractor()],
1010
+ keywords: [
1011
+ "naviguer",
1012
+ "aller",
1013
+ "cliquer",
1014
+ "taper",
1015
+ "\xE9crire",
1016
+ "d\xE9filer",
1017
+ "lire",
1018
+ "zoomer",
1019
+ "s\xE9lectionner",
1020
+ "retour",
1021
+ "avancer",
1022
+ "focaliser",
1023
+ "fermer",
1024
+ "ouvrir",
1025
+ "chercher",
1026
+ "rechercher",
1027
+ "aide",
1028
+ "vers",
1029
+ "dans",
1030
+ "de",
1031
+ "sur",
1032
+ "le",
1033
+ "la",
1034
+ "les",
1035
+ "un",
1036
+ "une",
1037
+ "haut",
1038
+ "bas",
1039
+ "gauche",
1040
+ "droite",
1041
+ "onglet",
1042
+ "dialogue",
1043
+ "page",
1044
+ "tout"
1045
+ ],
1046
+ keywordExtras: [
1047
+ { native: "naviguer", normalized: "navigate" },
1048
+ { native: "aller", normalized: "go" },
1049
+ { native: "cliquer", normalized: "click" },
1050
+ { native: "taper", normalized: "type" },
1051
+ { native: "\xE9crire", normalized: "write" },
1052
+ { native: "d\xE9filer", normalized: "scroll" },
1053
+ { native: "lire", normalized: "read" },
1054
+ { native: "zoomer", normalized: "zoom" },
1055
+ { native: "s\xE9lectionner", normalized: "select" },
1056
+ { native: "retour", normalized: "back" },
1057
+ { native: "avancer", normalized: "forward" },
1058
+ { native: "focaliser", normalized: "focus" },
1059
+ { native: "fermer", normalized: "close" },
1060
+ { native: "ouvrir", normalized: "open" },
1061
+ { native: "chercher", normalized: "search" },
1062
+ { native: "rechercher", normalized: "search" },
1063
+ { native: "aide", normalized: "help" },
1064
+ { native: "vers", normalized: "to" },
1065
+ { native: "dans", normalized: "in" },
1066
+ { native: "sur", normalized: "on" }
1067
+ ],
1068
+ keywordProfile: {
1069
+ keywords: {
1070
+ navigate: { primary: "naviguer", alternatives: ["aller"] },
1071
+ click: { primary: "cliquer" },
1072
+ type: { primary: "taper", alternatives: ["\xE9crire"] },
1073
+ scroll: { primary: "d\xE9filer" },
1074
+ read: { primary: "lire" },
1075
+ zoom: { primary: "zoomer" },
1076
+ select: { primary: "s\xE9lectionner" },
1077
+ back: { primary: "retour" },
1078
+ forward: { primary: "avancer" },
1079
+ focus: { primary: "focaliser" },
1080
+ close: { primary: "fermer" },
1081
+ open: { primary: "ouvrir" },
1082
+ search: { primary: "chercher", alternatives: ["rechercher"] },
1083
+ help: { primary: "aide" }
1084
+ }
1085
+ },
1086
+ caseInsensitive: true
1087
+ });
1088
+
1089
+ // src/generators/voice-generator.ts
1090
+ import { extractRoleValue } from "@lokascript/framework";
1091
+ function esc(s) {
1092
+ return s.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, '\\"').replace(/`/g, "\\`").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\$/g, "\\$");
1093
+ }
1094
+ var FIND_EL = [
1095
+ `if(!window._findEl){window._findEl=function(q,root){`,
1096
+ ` root=root||document;`,
1097
+ ` if(q.startsWith('#')||q.startsWith('.')||q.includes('[')){`,
1098
+ ` try{return root.querySelector(q)}catch(e){}`,
1099
+ ` }`,
1100
+ ` var el=root.querySelector('[aria-label="'+q+'"]');`,
1101
+ ` if(el)return el;`,
1102
+ ` el=root.querySelector('[role="'+q+'"]');`,
1103
+ ` if(el)return el;`,
1104
+ ` var c=root.querySelectorAll('button,a,input,[role="button"],[tabindex]');`,
1105
+ ` var lq=q.toLowerCase();`,
1106
+ ` for(var i=0;i<c.length;i++){`,
1107
+ ` if((c[i].textContent||'').toLowerCase().includes(lq))return c[i];`,
1108
+ ` if((c[i].getAttribute('aria-label')||'').toLowerCase().includes(lq))return c[i];`,
1109
+ ` }`,
1110
+ ` return null;`,
1111
+ `}}`
1112
+ ].join("");
1113
+ var SELECT_ALL_WORDS = /* @__PURE__ */ new Set(["all", "todo", "\u5168\u3066", "\u5168\u90E8", "\u0627\u0644\u0643\u0644", "\uC804\uCCB4", "hepsi", "tout"]);
1114
+ var TAB_WORDS = /* @__PURE__ */ new Set(["tab", "pesta\xF1a", "\u30BF\u30D6", "\uD0ED", "\u6807\u7B7E", "sekme", "onglet"]);
1115
+ var DIALOG_WORDS = /* @__PURE__ */ new Set([
1116
+ "dialog",
1117
+ "modal",
1118
+ "di\xE1logo",
1119
+ "\u30C0\u30A4\u30A2\u30ED\u30B0",
1120
+ "\uB300\uD654\uC0C1\uC790",
1121
+ "\u5BF9\u8BDD\u6846",
1122
+ "diyalog",
1123
+ "dialogue"
1124
+ ]);
1125
+ var PAGE_WORDS = /* @__PURE__ */ new Set(["page", "p\xE1gina", "\u30DA\u30FC\u30B8", "\u0627\u0644\u0635\u0641\u062D\u0629", "\uD398\uC774\uC9C0", "\u9875\u9762", "sayfa"]);
1126
+ function generateNavigate(node) {
1127
+ const dest = extractRoleValue(node, "destination");
1128
+ if (!dest) return "// navigate: missing destination";
1129
+ if (dest.startsWith("/") || dest.startsWith("http")) {
1130
+ return `window.location.href = '${esc(dest)}';`;
1131
+ }
1132
+ return [
1133
+ FIND_EL,
1134
+ `var el = _findEl('${esc(dest)}');`,
1135
+ `if (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' });`,
1136
+ `else window.location.hash = '${esc(dest)}';`
1137
+ ].join("\n");
1138
+ }
1139
+ function generateClick(node) {
1140
+ const patient = extractRoleValue(node, "patient");
1141
+ if (!patient) return "// click: missing target";
1142
+ return [FIND_EL, `var el = _findEl('${esc(patient)}');`, `if (el) el.click();`].join("\n");
1143
+ }
1144
+ function generateType(node) {
1145
+ const text = extractRoleValue(node, "patient");
1146
+ if (!text) return "// type: missing text";
1147
+ const dest = extractRoleValue(node, "destination");
1148
+ const target = dest ? `_findEl('${esc(dest)}') || document.activeElement` : `document.activeElement`;
1149
+ return [
1150
+ FIND_EL,
1151
+ `var el = ${target};`,
1152
+ `if (el && ('value' in el || el.isContentEditable)) {`,
1153
+ ` if ('value' in el) { el.value = (el.value || '') + '${esc(text)}'; }`,
1154
+ ` else { el.textContent = (el.textContent || '') + '${esc(text)}'; }`,
1155
+ ` el.dispatchEvent(new Event('input', { bubbles: true }));`,
1156
+ `}`
1157
+ ].join("\n");
1158
+ }
1159
+ function generateScroll(node) {
1160
+ const manner = (extractRoleValue(node, "manner") || "down").toLowerCase();
1161
+ const quantity = extractRoleValue(node, "quantity");
1162
+ const px = quantity ? parseInt(quantity, 10) || 300 : 300;
1163
+ switch (manner) {
1164
+ case "up":
1165
+ return `window.scrollBy({ top: -${px}, behavior: 'smooth' });`;
1166
+ case "down":
1167
+ return `window.scrollBy({ top: ${px}, behavior: 'smooth' });`;
1168
+ case "left":
1169
+ return `window.scrollBy({ left: -${px}, behavior: 'smooth' });`;
1170
+ case "right":
1171
+ return `window.scrollBy({ left: ${px}, behavior: 'smooth' });`;
1172
+ case "top":
1173
+ return `window.scrollTo({ top: 0, behavior: 'smooth' });`;
1174
+ case "bottom":
1175
+ return `window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });`;
1176
+ default:
1177
+ return `window.scrollBy({ top: ${px}, behavior: 'smooth' });`;
1178
+ }
1179
+ }
1180
+ function generateRead(node) {
1181
+ const patient = extractRoleValue(node, "patient");
1182
+ if (!patient) return "// read: missing target";
1183
+ return [
1184
+ FIND_EL,
1185
+ `var el = _findEl('${esc(patient)}');`,
1186
+ `if (el && el.textContent) {`,
1187
+ ` var utterance = new SpeechSynthesisUtterance(el.textContent);`,
1188
+ ` speechSynthesis.speak(utterance);`,
1189
+ `}`
1190
+ ].join("\n");
1191
+ }
1192
+ function generateZoom(node) {
1193
+ const manner = (extractRoleValue(node, "manner") || "in").toLowerCase();
1194
+ if (manner === "reset") {
1195
+ return [
1196
+ `document.documentElement.dataset.zoom = '1';`,
1197
+ `document.documentElement.style.transform = '';`
1198
+ ].join("\n");
1199
+ }
1200
+ const factor = manner === "out" ? 0.9 : 1.1;
1201
+ return [
1202
+ `var s = parseFloat(document.documentElement.dataset.zoom || '1');`,
1203
+ `s = Math.round(s * ${factor} * 100) / 100;`,
1204
+ `document.documentElement.dataset.zoom = s;`,
1205
+ `document.documentElement.style.transform = 'scale(' + s + ')';`,
1206
+ `document.documentElement.style.transformOrigin = 'top left';`
1207
+ ].join("\n");
1208
+ }
1209
+ function generateSelect(node) {
1210
+ const patient = extractRoleValue(node, "patient");
1211
+ if (!patient) return "// select: missing target";
1212
+ const target = SELECT_ALL_WORDS.has(patient) ? "document.body" : `_findEl('${esc(patient)}')`;
1213
+ const lines = SELECT_ALL_WORDS.has(patient) ? [] : [FIND_EL];
1214
+ lines.push(
1215
+ `var el = ${target};`,
1216
+ `if (el) {`,
1217
+ ` var range = document.createRange();`,
1218
+ ` range.selectNodeContents(el);`,
1219
+ ` var sel = window.getSelection();`,
1220
+ ` sel.removeAllRanges();`,
1221
+ ` sel.addRange(range);`,
1222
+ `}`
1223
+ );
1224
+ return lines.join("\n");
1225
+ }
1226
+ function generateBack(node) {
1227
+ const quantity = extractRoleValue(node, "quantity");
1228
+ const n = quantity ? parseInt(quantity, 10) || 1 : 1;
1229
+ return `history.go(-${n});`;
1230
+ }
1231
+ function generateForward(node) {
1232
+ const quantity = extractRoleValue(node, "quantity");
1233
+ const n = quantity ? parseInt(quantity, 10) || 1 : 1;
1234
+ return `history.go(${n});`;
1235
+ }
1236
+ function generateFocus(node) {
1237
+ const patient = extractRoleValue(node, "patient");
1238
+ if (!patient) return "// focus: missing target";
1239
+ return [FIND_EL, `var el = _findEl('${esc(patient)}');`, `if (el) el.focus();`].join("\n");
1240
+ }
1241
+ function generateClose(node) {
1242
+ const patient = extractRoleValue(node, "patient") || "";
1243
+ if (TAB_WORDS.has(patient)) {
1244
+ return `window.close();`;
1245
+ }
1246
+ if (DIALOG_WORDS.has(patient)) {
1247
+ return `var d = document.querySelector('dialog[open]'); if (d) d.close();`;
1248
+ }
1249
+ return [
1250
+ `var d = document.querySelector('dialog[open]');`,
1251
+ `if (d) { d.close(); }`,
1252
+ `else {`,
1253
+ ` var m = document.querySelector('[role="dialog"], .modal.show, .modal.open');`,
1254
+ ` if (m) m.remove();`,
1255
+ `}`
1256
+ ].join("\n");
1257
+ }
1258
+ function generateOpen(node) {
1259
+ const patient = extractRoleValue(node, "patient");
1260
+ if (!patient) return "// open: missing target";
1261
+ if (patient.startsWith("/") || patient.startsWith("http")) {
1262
+ return `window.open('${esc(patient)}', '_blank');`;
1263
+ }
1264
+ return [FIND_EL, `var el = _findEl('${esc(patient)}');`, `if (el) el.click();`].join("\n");
1265
+ }
1266
+ function generateSearch(node) {
1267
+ const query = extractRoleValue(node, "patient");
1268
+ if (!query) return "// search: missing query";
1269
+ const dest = extractRoleValue(node, "destination");
1270
+ if (dest && PAGE_WORDS.has(dest)) {
1271
+ return `window.find('${esc(query)}');`;
1272
+ }
1273
+ const selector = dest ? `'${esc(dest)}'` : `'input[type="search"], [role="searchbox"], input[name="q"], input[name="search"]'`;
1274
+ return [
1275
+ `var searchInput = document.querySelector(${selector});`,
1276
+ `if (searchInput) {`,
1277
+ ` searchInput.value = '${esc(query)}';`,
1278
+ ` searchInput.dispatchEvent(new Event('input', { bubbles: true }));`,
1279
+ ` if (searchInput.form) searchInput.form.submit();`,
1280
+ `}`
1281
+ ].join("\n");
1282
+ }
1283
+ function generateHelp(node) {
1284
+ const topic = extractRoleValue(node, "patient");
1285
+ const commands = [
1286
+ "navigate",
1287
+ "click",
1288
+ "type",
1289
+ "scroll",
1290
+ "read",
1291
+ "zoom",
1292
+ "select",
1293
+ "back",
1294
+ "forward",
1295
+ "focus",
1296
+ "close",
1297
+ "open",
1298
+ "search",
1299
+ "help"
1300
+ ];
1301
+ if (topic) {
1302
+ return `console.log('Help: ${esc(topic)}');`;
1303
+ }
1304
+ return `console.log('Available commands: ${commands.join(", ")}');`;
1305
+ }
1306
+ var voiceCodeGenerator = {
1307
+ generate(node) {
1308
+ switch (node.action) {
1309
+ case "navigate":
1310
+ return generateNavigate(node);
1311
+ case "click":
1312
+ return generateClick(node);
1313
+ case "type":
1314
+ return generateType(node);
1315
+ case "scroll":
1316
+ return generateScroll(node);
1317
+ case "read":
1318
+ return generateRead(node);
1319
+ case "zoom":
1320
+ return generateZoom(node);
1321
+ case "select":
1322
+ return generateSelect(node);
1323
+ case "back":
1324
+ return generateBack(node);
1325
+ case "forward":
1326
+ return generateForward(node);
1327
+ case "focus":
1328
+ return generateFocus(node);
1329
+ case "close":
1330
+ return generateClose(node);
1331
+ case "open":
1332
+ return generateOpen(node);
1333
+ case "search":
1334
+ return generateSearch(node);
1335
+ case "help":
1336
+ return generateHelp(node);
1337
+ default:
1338
+ return `// Unknown voice command: ${node.action}`;
1339
+ }
1340
+ }
1341
+ };
1342
+
1343
+ // src/generators/voice-renderer.ts
1344
+ import { extractRoleValue as extractRoleValue2 } from "@lokascript/framework";
1345
+ var COMMAND_KEYWORDS = {
1346
+ navigate: {
1347
+ en: "navigate",
1348
+ es: "navegar",
1349
+ ja: "\u79FB\u52D5",
1350
+ ar: "\u0627\u0646\u062A\u0642\u0644",
1351
+ ko: "\uC774\uB3D9",
1352
+ zh: "\u5BFC\u822A",
1353
+ tr: "git",
1354
+ fr: "naviguer"
1355
+ },
1356
+ click: {
1357
+ en: "click",
1358
+ es: "clic",
1359
+ ja: "\u30AF\u30EA\u30C3\u30AF",
1360
+ ar: "\u0627\u0646\u0642\u0631",
1361
+ ko: "\uD074\uB9AD",
1362
+ zh: "\u70B9\u51FB",
1363
+ tr: "t\u0131kla",
1364
+ fr: "cliquer"
1365
+ },
1366
+ type: {
1367
+ en: "type",
1368
+ es: "escribir",
1369
+ ja: "\u5165\u529B",
1370
+ ar: "\u0627\u0643\u062A\u0628",
1371
+ ko: "\uC785\uB825",
1372
+ zh: "\u8F93\u5165",
1373
+ tr: "yaz",
1374
+ fr: "taper"
1375
+ },
1376
+ scroll: {
1377
+ en: "scroll",
1378
+ es: "desplazar",
1379
+ ja: "\u30B9\u30AF\u30ED\u30FC\u30EB",
1380
+ ar: "\u062A\u0645\u0631\u064A\u0631",
1381
+ ko: "\uC2A4\uD06C\uB864",
1382
+ zh: "\u6EDA\u52A8",
1383
+ tr: "kayd\u0131r",
1384
+ fr: "d\xE9filer"
1385
+ },
1386
+ read: {
1387
+ en: "read",
1388
+ es: "leer",
1389
+ ja: "\u8AAD\u3080",
1390
+ ar: "\u0627\u0642\u0631\u0623",
1391
+ ko: "\uC77D\uAE30",
1392
+ zh: "\u6717\u8BFB",
1393
+ tr: "oku",
1394
+ fr: "lire"
1395
+ },
1396
+ zoom: {
1397
+ en: "zoom",
1398
+ es: "zoom",
1399
+ ja: "\u30BA\u30FC\u30E0",
1400
+ ar: "\u062A\u0643\u0628\u064A\u0631",
1401
+ ko: "\uD655\uB300",
1402
+ zh: "\u7F29\u653E",
1403
+ tr: "yak\u0131nla\u015F",
1404
+ fr: "zoomer"
1405
+ },
1406
+ select: {
1407
+ en: "select",
1408
+ es: "seleccionar",
1409
+ ja: "\u9078\u629E",
1410
+ ar: "\u0627\u062E\u062A\u0631",
1411
+ ko: "\uC120\uD0DD",
1412
+ zh: "\u9009\u62E9",
1413
+ tr: "se\xE7",
1414
+ fr: "s\xE9lectionner"
1415
+ },
1416
+ back: {
1417
+ en: "back",
1418
+ es: "atr\xE1s",
1419
+ ja: "\u623B\u308B",
1420
+ ar: "\u0631\u062C\u0648\u0639",
1421
+ ko: "\uB4A4\uB85C",
1422
+ zh: "\u8FD4\u56DE",
1423
+ tr: "geri",
1424
+ fr: "retour"
1425
+ },
1426
+ forward: {
1427
+ en: "forward",
1428
+ es: "adelante",
1429
+ ja: "\u9032\u3080",
1430
+ ar: "\u062A\u0642\u062F\u0645",
1431
+ ko: "\uC55E\uC73C\uB85C",
1432
+ zh: "\u524D\u8FDB",
1433
+ tr: "ileri",
1434
+ fr: "avancer"
1435
+ },
1436
+ focus: {
1437
+ en: "focus",
1438
+ es: "enfocar",
1439
+ ja: "\u30D5\u30A9\u30FC\u30AB\u30B9",
1440
+ ar: "\u0631\u0643\u0632",
1441
+ ko: "\uD3EC\uCEE4\uC2A4",
1442
+ zh: "\u805A\u7126",
1443
+ tr: "odakla",
1444
+ fr: "focaliser"
1445
+ },
1446
+ close: {
1447
+ en: "close",
1448
+ es: "cerrar",
1449
+ ja: "\u9589\u3058\u308B",
1450
+ ar: "\u0623\u063A\u0644\u0642",
1451
+ ko: "\uB2EB\uAE30",
1452
+ zh: "\u5173\u95ED",
1453
+ tr: "kapat",
1454
+ fr: "fermer"
1455
+ },
1456
+ open: {
1457
+ en: "open",
1458
+ es: "abrir",
1459
+ ja: "\u958B\u304F",
1460
+ ar: "\u0627\u0641\u062A\u062D",
1461
+ ko: "\uC5F4\uAE30",
1462
+ zh: "\u6253\u5F00",
1463
+ tr: "a\xE7",
1464
+ fr: "ouvrir"
1465
+ },
1466
+ search: {
1467
+ en: "search",
1468
+ es: "buscar",
1469
+ ja: "\u691C\u7D22",
1470
+ ar: "\u0627\u0628\u062D\u062B",
1471
+ ko: "\uAC80\uC0C9",
1472
+ zh: "\u641C\u7D22",
1473
+ tr: "ara",
1474
+ fr: "chercher"
1475
+ },
1476
+ help: {
1477
+ en: "help",
1478
+ es: "ayuda",
1479
+ ja: "\u30D8\u30EB\u30D7",
1480
+ ar: "\u0645\u0633\u0627\u0639\u062F\u0629",
1481
+ ko: "\uB3C4\uC6C0\uB9D0",
1482
+ zh: "\u5E2E\u52A9",
1483
+ tr: "yard\u0131m",
1484
+ fr: "aide"
1485
+ }
1486
+ };
1487
+ function buildMarkerLookup(schemas) {
1488
+ const lookup = {};
1489
+ for (const schema of schemas) {
1490
+ const actionMarkers = {};
1491
+ for (const role of schema.roles) {
1492
+ if (role.markerOverride) {
1493
+ actionMarkers[role.role] = role.markerOverride;
1494
+ }
1495
+ }
1496
+ lookup[schema.action] = actionMarkers;
1497
+ }
1498
+ return lookup;
1499
+ }
1500
+ var SCHEMA_MARKERS = buildMarkerLookup(allSchemas);
1501
+ function getMarker(action, role, lang) {
1502
+ return SCHEMA_MARKERS[action]?.[role]?.[lang] ?? "";
1503
+ }
1504
+ var SOV_LANGUAGES = /* @__PURE__ */ new Set(["ja", "ko", "tr"]);
1505
+ function kw(command, lang) {
1506
+ return COMMAND_KEYWORDS[command]?.[lang] ?? command;
1507
+ }
1508
+ function renderSingleRole(node, lang, roleName) {
1509
+ const value = extractRoleValue2(node, roleName) || "";
1510
+ const keyword = kw(node.action, lang);
1511
+ if (!value) return keyword;
1512
+ if (SOV_LANGUAGES.has(lang)) {
1513
+ const parts = [value];
1514
+ const marker2 = getMarker(node.action, roleName, lang);
1515
+ if (marker2) parts.push(marker2);
1516
+ parts.push(keyword);
1517
+ return parts.join(" ");
1518
+ }
1519
+ const marker = getMarker(node.action, roleName, lang);
1520
+ if (marker) return `${keyword} ${marker} ${value}`;
1521
+ return `${keyword} ${value}`;
1522
+ }
1523
+ function renderNavigate(node, lang) {
1524
+ const dest = extractRoleValue2(node, "destination") || "";
1525
+ const keyword = kw("navigate", lang);
1526
+ if (!dest) return keyword;
1527
+ const marker = getMarker("navigate", "destination", lang);
1528
+ if (SOV_LANGUAGES.has(lang)) {
1529
+ return marker ? `${dest} ${marker} ${keyword}` : `${dest} ${keyword}`;
1530
+ }
1531
+ return marker ? `${keyword} ${marker} ${dest}` : `${keyword} ${dest}`;
1532
+ }
1533
+ function renderClick(node, lang) {
1534
+ return renderSingleRole(node, lang, "patient");
1535
+ }
1536
+ function renderType(node, lang) {
1537
+ const text = extractRoleValue2(node, "patient") || "";
1538
+ const dest = extractRoleValue2(node, "destination");
1539
+ const keyword = kw("type", lang);
1540
+ if (!text) return keyword;
1541
+ if (SOV_LANGUAGES.has(lang)) {
1542
+ const parts2 = [];
1543
+ if (dest) {
1544
+ parts2.push(dest);
1545
+ const destMarker = getMarker("type", "destination", lang);
1546
+ if (destMarker) parts2.push(destMarker);
1547
+ }
1548
+ parts2.push(text);
1549
+ const patientMarker = getMarker("type", "patient", lang);
1550
+ if (patientMarker) parts2.push(patientMarker);
1551
+ parts2.push(keyword);
1552
+ return parts2.join(" ");
1553
+ }
1554
+ const parts = [keyword, text];
1555
+ if (dest) {
1556
+ const destMarker = getMarker("type", "destination", lang);
1557
+ if (destMarker) parts.push(destMarker);
1558
+ parts.push(dest);
1559
+ }
1560
+ return parts.filter(Boolean).join(" ");
1561
+ }
1562
+ function renderScroll(node, lang) {
1563
+ const manner = extractRoleValue2(node, "manner") || "";
1564
+ const keyword = kw("scroll", lang);
1565
+ if (!manner) return keyword;
1566
+ if (SOV_LANGUAGES.has(lang)) {
1567
+ return `${manner} ${keyword}`;
1568
+ }
1569
+ return `${keyword} ${manner}`;
1570
+ }
1571
+ function renderRead(node, lang) {
1572
+ return renderSingleRole(node, lang, "patient");
1573
+ }
1574
+ function renderZoom(node, lang) {
1575
+ const manner = extractRoleValue2(node, "manner") || "";
1576
+ const keyword = kw("zoom", lang);
1577
+ if (!manner) return keyword;
1578
+ if (SOV_LANGUAGES.has(lang)) {
1579
+ return `${manner} ${keyword}`;
1580
+ }
1581
+ return `${keyword} ${manner}`;
1582
+ }
1583
+ function renderSelect(node, lang) {
1584
+ return renderSingleRole(node, lang, "patient");
1585
+ }
1586
+ function renderBack(node, lang) {
1587
+ const quantity = extractRoleValue2(node, "quantity");
1588
+ const keyword = kw("back", lang);
1589
+ if (quantity) return `${keyword} ${quantity}`;
1590
+ return keyword;
1591
+ }
1592
+ function renderForward(node, lang) {
1593
+ const quantity = extractRoleValue2(node, "quantity");
1594
+ const keyword = kw("forward", lang);
1595
+ if (quantity) return `${keyword} ${quantity}`;
1596
+ return keyword;
1597
+ }
1598
+ function renderFocus(node, lang) {
1599
+ const patient = extractRoleValue2(node, "patient") || "";
1600
+ const keyword = kw("focus", lang);
1601
+ if (!patient) return keyword;
1602
+ if (SOV_LANGUAGES.has(lang)) {
1603
+ const marker = getMarker("focus", "patient", lang);
1604
+ return marker ? `${patient} ${marker} ${keyword}` : `${patient} ${keyword}`;
1605
+ }
1606
+ return `${keyword} ${patient}`;
1607
+ }
1608
+ function renderClose(node, lang) {
1609
+ return renderSingleRole(node, lang, "patient");
1610
+ }
1611
+ function renderOpen(node, lang) {
1612
+ return renderSingleRole(node, lang, "patient");
1613
+ }
1614
+ function renderSearch(node, lang) {
1615
+ const query = extractRoleValue2(node, "patient") || "";
1616
+ const dest = extractRoleValue2(node, "destination");
1617
+ const keyword = kw("search", lang);
1618
+ if (!query) return keyword;
1619
+ if (SOV_LANGUAGES.has(lang)) {
1620
+ const parts2 = [];
1621
+ if (dest) {
1622
+ parts2.push(dest);
1623
+ const destMarker = getMarker("search", "destination", lang);
1624
+ if (destMarker) parts2.push(destMarker);
1625
+ }
1626
+ parts2.push(query);
1627
+ const patientMarker = getMarker("search", "patient", lang);
1628
+ if (patientMarker) parts2.push(patientMarker);
1629
+ parts2.push(keyword);
1630
+ return parts2.filter(Boolean).join(" ");
1631
+ }
1632
+ const parts = [keyword, query];
1633
+ if (dest) {
1634
+ const destMarker = getMarker("search", "destination", lang);
1635
+ if (destMarker) parts.push(destMarker, dest);
1636
+ }
1637
+ return parts.join(" ");
1638
+ }
1639
+ function renderHelp(node, lang) {
1640
+ const topic = extractRoleValue2(node, "patient");
1641
+ const keyword = kw("help", lang);
1642
+ if (topic) return `${keyword} ${topic}`;
1643
+ return keyword;
1644
+ }
1645
+ function renderVoice(node, language) {
1646
+ switch (node.action) {
1647
+ case "navigate":
1648
+ return renderNavigate(node, language);
1649
+ case "click":
1650
+ return renderClick(node, language);
1651
+ case "type":
1652
+ return renderType(node, language);
1653
+ case "scroll":
1654
+ return renderScroll(node, language);
1655
+ case "read":
1656
+ return renderRead(node, language);
1657
+ case "zoom":
1658
+ return renderZoom(node, language);
1659
+ case "select":
1660
+ return renderSelect(node, language);
1661
+ case "back":
1662
+ return renderBack(node, language);
1663
+ case "forward":
1664
+ return renderForward(node, language);
1665
+ case "focus":
1666
+ return renderFocus(node, language);
1667
+ case "close":
1668
+ return renderClose(node, language);
1669
+ case "open":
1670
+ return renderOpen(node, language);
1671
+ case "search":
1672
+ return renderSearch(node, language);
1673
+ case "help":
1674
+ return renderHelp(node, language);
1675
+ default:
1676
+ return `-- Unknown: ${node.action}`;
1677
+ }
1678
+ }
1679
+
1680
+ // src/types.ts
1681
+ import { extractRoleValue as extractRoleValue3 } from "@lokascript/framework";
1682
+ function toVoiceActionSpec(node, language) {
1683
+ return {
1684
+ action: node.action,
1685
+ target: extractRoleValue3(node, "patient") || extractRoleValue3(node, "destination") || void 0,
1686
+ value: extractRoleValue3(node, "patient") || void 0,
1687
+ direction: extractRoleValue3(node, "manner") || void 0,
1688
+ amount: extractRoleValue3(node, "quantity") || void 0,
1689
+ metadata: { sourceLanguage: language }
1690
+ };
1691
+ }
1692
+
1693
+ // src/index.ts
1694
+ function createVoiceDSL() {
1695
+ return /* @__PURE__ */ createMultilingualDSL({
1696
+ name: "Voice",
1697
+ schemas: allSchemas,
1698
+ languages: [
1699
+ {
1700
+ code: "en",
1701
+ name: "English",
1702
+ nativeName: "English",
1703
+ tokenizer: EnglishVoiceTokenizer,
1704
+ patternProfile: enProfile
1705
+ },
1706
+ {
1707
+ code: "es",
1708
+ name: "Spanish",
1709
+ nativeName: "Espa\xF1ol",
1710
+ tokenizer: SpanishVoiceTokenizer,
1711
+ patternProfile: esProfile
1712
+ },
1713
+ {
1714
+ code: "ja",
1715
+ name: "Japanese",
1716
+ nativeName: "\u65E5\u672C\u8A9E",
1717
+ tokenizer: JapaneseVoiceTokenizer,
1718
+ patternProfile: jaProfile
1719
+ },
1720
+ {
1721
+ code: "ar",
1722
+ name: "Arabic",
1723
+ nativeName: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629",
1724
+ tokenizer: ArabicVoiceTokenizer,
1725
+ patternProfile: arProfile
1726
+ },
1727
+ {
1728
+ code: "ko",
1729
+ name: "Korean",
1730
+ nativeName: "\uD55C\uAD6D\uC5B4",
1731
+ tokenizer: KoreanVoiceTokenizer,
1732
+ patternProfile: koProfile
1733
+ },
1734
+ {
1735
+ code: "zh",
1736
+ name: "Chinese",
1737
+ nativeName: "\u4E2D\u6587",
1738
+ tokenizer: ChineseVoiceTokenizer,
1739
+ patternProfile: zhProfile
1740
+ },
1741
+ {
1742
+ code: "tr",
1743
+ name: "Turkish",
1744
+ nativeName: "T\xFCrk\xE7e",
1745
+ tokenizer: TurkishVoiceTokenizer,
1746
+ patternProfile: trProfile
1747
+ },
1748
+ {
1749
+ code: "fr",
1750
+ name: "French",
1751
+ nativeName: "Fran\xE7ais",
1752
+ tokenizer: FrenchVoiceTokenizer,
1753
+ patternProfile: frProfile
1754
+ }
1755
+ ],
1756
+ codeGenerator: voiceCodeGenerator
1757
+ });
1758
+ }
1759
+ var voiceScanConfig = {
1760
+ attributes: ["data-voice", "_voice"],
1761
+ scriptTypes: ["text/voice"],
1762
+ defaultLanguage: "en"
1763
+ };
1764
+ export {
1765
+ ArabicVoiceTokenizer,
1766
+ ChineseVoiceTokenizer,
1767
+ EnglishVoiceTokenizer,
1768
+ FrenchVoiceTokenizer,
1769
+ JapaneseVoiceTokenizer,
1770
+ KoreanVoiceTokenizer,
1771
+ SpanishVoiceTokenizer,
1772
+ TurkishVoiceTokenizer,
1773
+ allProfiles,
1774
+ allSchemas,
1775
+ arProfile,
1776
+ backSchema,
1777
+ clickSchema,
1778
+ closeSchema,
1779
+ createVoiceDSL,
1780
+ enProfile,
1781
+ esProfile,
1782
+ focusSchema,
1783
+ forwardSchema,
1784
+ frProfile,
1785
+ helpSchema,
1786
+ jaProfile,
1787
+ koProfile,
1788
+ navigateSchema,
1789
+ openSchema,
1790
+ readSchema,
1791
+ renderVoice,
1792
+ scrollSchema,
1793
+ searchSchema,
1794
+ selectSchema,
1795
+ toVoiceActionSpec,
1796
+ trProfile,
1797
+ typeSchema,
1798
+ voiceCodeGenerator,
1799
+ voiceScanConfig,
1800
+ zhProfile,
1801
+ zoomSchema
1802
+ };
1803
+ //# sourceMappingURL=index.js.map