@sutrata/editor 0.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.
Files changed (337) hide show
  1. package/LICENSE +674 -0
  2. package/dist/ai/OnboardingDialog.d.ts +6 -0
  3. package/dist/ai/OnboardingDialog.js +115 -0
  4. package/dist/ai/VoiceConfirmDialog.d.ts +9 -0
  5. package/dist/ai/VoiceConfirmDialog.js +37 -0
  6. package/dist/ai/VoiceToolbar.d.ts +2 -0
  7. package/dist/ai/VoiceToolbar.js +177 -0
  8. package/dist/ai/ai-client.d.ts +71 -0
  9. package/dist/ai/ai-client.js +494 -0
  10. package/dist/ai/commands.d.ts +12 -0
  11. package/dist/ai/commands.js +140 -0
  12. package/dist/ai/generated-providers.json +3696 -0
  13. package/dist/ai/prompts.d.ts +25 -0
  14. package/dist/ai/prompts.js +59 -0
  15. package/dist/ai/voice-service.d.ts +15 -0
  16. package/dist/ai/voice-service.js +81 -0
  17. package/dist/autocomplete/AutocompletePlugin.d.ts +2 -0
  18. package/dist/autocomplete/AutocompletePlugin.js +19 -0
  19. package/dist/autocomplete/suggestions.d.ts +25 -0
  20. package/dist/autocomplete/suggestions.js +126 -0
  21. package/dist/context/DocumentContext.d.ts +68 -0
  22. package/dist/context/DocumentContext.js +605 -0
  23. package/dist/desktop-api.d.ts +40 -0
  24. package/dist/editor/EditorView.d.ts +2 -0
  25. package/dist/editor/EditorView.js +78 -0
  26. package/dist/editor/SelectionMenu.d.ts +2 -0
  27. package/dist/editor/SelectionMenu.js +102 -0
  28. package/dist/editor/attr-pencil-plugin.d.ts +17 -0
  29. package/dist/editor/attr-pencil-plugin.js +158 -0
  30. package/dist/editor/character-decoration-plugin.d.ts +26 -0
  31. package/dist/editor/character-decoration-plugin.js +77 -0
  32. package/dist/editor/character-view.d.ts +35 -0
  33. package/dist/editor/character-view.js +112 -0
  34. package/dist/editor/editor-bus.d.ts +14 -0
  35. package/dist/editor/editor-bus.js +39 -0
  36. package/dist/editor/find-highlight-plugin.d.ts +7 -0
  37. package/dist/editor/find-highlight-plugin.js +57 -0
  38. package/dist/editor/frontmatter-field-view.d.ts +10 -0
  39. package/dist/editor/frontmatter-field-view.js +48 -0
  40. package/dist/editor/frontmatter-field.d.ts +21 -0
  41. package/dist/editor/frontmatter-field.js +116 -0
  42. package/dist/editor/grapheme-cursor.d.ts +10 -0
  43. package/dist/editor/grapheme-cursor.js +104 -0
  44. package/dist/editor/ime-plugin.d.ts +18 -0
  45. package/dist/editor/ime-plugin.js +71 -0
  46. package/dist/editor/insert-helper.d.ts +1 -0
  47. package/dist/editor/insert-helper.js +42 -0
  48. package/dist/editor/keymap.d.ts +3 -0
  49. package/dist/editor/keymap.js +131 -0
  50. package/dist/editor/language-class-plugin.d.ts +7 -0
  51. package/dist/editor/language-class-plugin.js +75 -0
  52. package/dist/editor/plugins.d.ts +1 -0
  53. package/dist/editor/plugins.js +25 -0
  54. package/dist/editor/prosemirror-to-sutra.d.ts +2 -0
  55. package/dist/editor/prosemirror-to-sutra.js +208 -0
  56. package/dist/editor/scene-heading-view.d.ts +27 -0
  57. package/dist/editor/scene-heading-view.js +136 -0
  58. package/dist/editor/schema.d.ts +3 -0
  59. package/dist/editor/schema.js +135 -0
  60. package/dist/editor/sutra-to-prosemirror.d.ts +3 -0
  61. package/dist/editor/sutra-to-prosemirror.js +154 -0
  62. package/dist/editor/transliterate-input.d.ts +10 -0
  63. package/dist/editor/transliterate-input.js +88 -0
  64. package/dist/extensions/storage-adapter.d.ts +59 -0
  65. package/dist/extensions/storage-adapter.js +9 -0
  66. package/dist/extensions/types.d.ts +73 -0
  67. package/dist/extensions/types.js +12 -0
  68. package/dist/file/docx-exporter.d.ts +8 -0
  69. package/dist/file/docx-exporter.js +494 -0
  70. package/dist/file/docx-importer.d.ts +10 -0
  71. package/dist/file/docx-importer.js +283 -0
  72. package/dist/file/print-paginator.d.ts +29 -0
  73. package/dist/file/print-paginator.js +289 -0
  74. package/dist/file/templates.d.ts +2 -0
  75. package/dist/file/templates.js +66 -0
  76. package/dist/file/workflow-reports.d.ts +34 -0
  77. package/dist/file/workflow-reports.js +719 -0
  78. package/dist/findreplace/FindReplace.d.ts +2 -0
  79. package/dist/findreplace/FindReplace.js +164 -0
  80. package/dist/findreplace/find-engine.d.ts +29 -0
  81. package/dist/findreplace/find-engine.js +69 -0
  82. package/dist/findreplace/scroll-to-match.d.ts +29 -0
  83. package/dist/findreplace/scroll-to-match.js +74 -0
  84. package/dist/fonts/tofu-detect.d.ts +1 -0
  85. package/dist/fonts/tofu-detect.js +48 -0
  86. package/dist/i18n/LanguageContext.d.ts +10 -0
  87. package/dist/i18n/LanguageContext.js +174 -0
  88. package/dist/i18n/language-detect.d.ts +1 -0
  89. package/dist/i18n/language-detect.js +58 -0
  90. package/dist/i18n/useTranslation.d.ts +11 -0
  91. package/dist/i18n/useTranslation.js +60 -0
  92. package/dist/index.d.ts +11 -0
  93. package/dist/index.js +5 -0
  94. package/dist/locales/bn.json +143 -0
  95. package/dist/locales/en.json +143 -0
  96. package/dist/locales/gu.json +143 -0
  97. package/dist/locales/hi.json +143 -0
  98. package/dist/locales/kn.json +143 -0
  99. package/dist/locales/ml.json +143 -0
  100. package/dist/locales/mr.json +143 -0
  101. package/dist/locales/or.json +143 -0
  102. package/dist/locales/pa.json +143 -0
  103. package/dist/locales/si.json +143 -0
  104. package/dist/locales/ta.json +143 -0
  105. package/dist/locales/te.json +143 -0
  106. package/dist/navigator/SceneNavigator.d.ts +2 -0
  107. package/dist/navigator/SceneNavigator.js +612 -0
  108. package/dist/navigator/StatisticsDialog.d.ts +6 -0
  109. package/dist/navigator/StatisticsDialog.js +146 -0
  110. package/dist/navigator/scene-list.d.ts +16 -0
  111. package/dist/navigator/scene-list.js +70 -0
  112. package/dist/settings/SettingsDialog.d.ts +6 -0
  113. package/dist/settings/SettingsDialog.js +147 -0
  114. package/dist/shell/AppBar.d.ts +2 -0
  115. package/dist/shell/AppBar.js +34 -0
  116. package/dist/shell/AppShell.d.ts +2 -0
  117. package/dist/shell/AppShell.js +30 -0
  118. package/dist/shell/ConfirmDialog.d.ts +16 -0
  119. package/dist/shell/ConfirmDialog.js +23 -0
  120. package/dist/shell/ElementToolbar.d.ts +2 -0
  121. package/dist/shell/ElementToolbar.js +30 -0
  122. package/dist/shell/LanguageStatus.d.ts +2 -0
  123. package/dist/shell/LanguageStatus.js +65 -0
  124. package/dist/shell/StatusBar.d.ts +2 -0
  125. package/dist/shell/StatusBar.js +54 -0
  126. package/dist/shell/SutrataLogo.d.ts +8 -0
  127. package/dist/shell/SutrataLogo.js +7 -0
  128. package/dist/shell/Toast.d.ts +12 -0
  129. package/dist/shell/Toast.js +21 -0
  130. package/dist/shell/ToolbarButton.d.ts +11 -0
  131. package/dist/shell/ToolbarButton.js +4 -0
  132. package/dist/shell/VersionHistory.d.ts +12 -0
  133. package/dist/shell/VersionHistory.js +89 -0
  134. package/dist/shell/Watermark.d.ts +3 -0
  135. package/dist/shell/Watermark.js +10 -0
  136. package/dist/shell/fonts/fonts.css +1133 -0
  137. package/dist/shell/icons.d.ts +45 -0
  138. package/dist/shell/icons.js +51 -0
  139. package/dist/shell/toolbar-actions.d.ts +6 -0
  140. package/dist/shell/toolbar-actions.js +58 -0
  141. package/dist/source/SourceView.d.ts +1 -0
  142. package/dist/source/SourceView.js +106 -0
  143. package/dist/source/find-highlight-source.d.ts +14 -0
  144. package/dist/source/find-highlight-source.js +47 -0
  145. package/dist/source/sutra-lang.d.ts +2 -0
  146. package/dist/source/sutra-lang.js +97 -0
  147. package/dist/spellcheck/dictionaries.d.ts +9 -0
  148. package/dist/spellcheck/dictionaries.js +16 -0
  149. package/dist/spellcheck/hunspell.d.ts +23 -0
  150. package/dist/spellcheck/hunspell.js +94 -0
  151. package/dist/spellcheck/spellcheck-plugin.d.ts +18 -0
  152. package/dist/spellcheck/spellcheck-plugin.js +75 -0
  153. package/dist/styles/StyleDialog.d.ts +6 -0
  154. package/dist/styles/StyleDialog.js +63 -0
  155. package/dist/styles/builtin-styles.d.ts +43 -0
  156. package/dist/styles/builtin-styles.js +131 -0
  157. package/dist/styles/css-adapter.d.ts +32 -0
  158. package/dist/styles/css-adapter.js +71 -0
  159. package/dist/styles/docx-adapter.d.ts +7 -0
  160. package/dist/styles/docx-adapter.js +84 -0
  161. package/dist/styles/embed-fonts.d.ts +20 -0
  162. package/dist/styles/embed-fonts.js +81 -0
  163. package/dist/styles/pagination.d.ts +19 -0
  164. package/dist/styles/pagination.js +22 -0
  165. package/dist/styles/print-adapter.d.ts +6 -0
  166. package/dist/styles/print-adapter.js +288 -0
  167. package/dist/styles/registry.d.ts +6 -0
  168. package/dist/styles/registry.js +14 -0
  169. package/dist/styles/screenplay.css +3006 -0
  170. package/dist/styles/script-ranges.d.ts +6 -0
  171. package/dist/styles/script-ranges.js +17 -0
  172. package/dist/styles/types.d.ts +93 -0
  173. package/dist/styles/types.js +18 -0
  174. package/dist/styles/validate.d.ts +12 -0
  175. package/dist/styles/validate.js +105 -0
  176. package/dist/templates/templates.d.ts +10 -0
  177. package/dist/templates/templates.js +181 -0
  178. package/dist/titlepage/ExportDialog.d.ts +1 -0
  179. package/dist/titlepage/ExportDialog.js +152 -0
  180. package/dist/titlepage/TitlePageDialog.d.ts +6 -0
  181. package/dist/titlepage/TitlePageDialog.js +96 -0
  182. package/dist/titlepage/frontmatter-form.d.ts +56 -0
  183. package/dist/titlepage/frontmatter-form.js +245 -0
  184. package/dist/titlepage/languages.d.ts +10 -0
  185. package/dist/titlepage/languages.js +31 -0
  186. package/dist/types.d.ts +6 -0
  187. package/dist/types.js +1 -0
  188. package/package.json +47 -0
  189. package/scripts/copy-assets.mjs +16 -0
  190. package/scripts/generate-providers.mjs +127 -0
  191. package/src/ai/OnboardingDialog.tsx +390 -0
  192. package/src/ai/VoiceConfirmDialog.tsx +137 -0
  193. package/src/ai/VoiceToolbar.tsx +321 -0
  194. package/src/ai/ai-client.ts +596 -0
  195. package/src/ai/commands.ts +164 -0
  196. package/src/ai/generated-providers.json +3696 -0
  197. package/src/ai/prompts.ts +62 -0
  198. package/src/ai/voice-service.ts +96 -0
  199. package/src/autocomplete/AutocompletePlugin.ts +21 -0
  200. package/src/autocomplete/suggestions.ts +147 -0
  201. package/src/context/DocumentContext.tsx +648 -0
  202. package/src/desktop-api.d.ts +40 -0
  203. package/src/editor/EditorView.tsx +82 -0
  204. package/src/editor/SelectionMenu.tsx +152 -0
  205. package/src/editor/attr-pencil-plugin.ts +172 -0
  206. package/src/editor/character-decoration-plugin.ts +104 -0
  207. package/src/editor/editor-bus.ts +51 -0
  208. package/src/editor/find-highlight-plugin.ts +68 -0
  209. package/src/editor/frontmatter-field-view.ts +52 -0
  210. package/src/editor/frontmatter-field.ts +115 -0
  211. package/src/editor/grapheme-cursor.ts +99 -0
  212. package/src/editor/ime-plugin.ts +85 -0
  213. package/src/editor/insert-helper.ts +43 -0
  214. package/src/editor/keymap.ts +124 -0
  215. package/src/editor/language-class-plugin.ts +91 -0
  216. package/src/editor/plugins.ts +26 -0
  217. package/src/editor/prosemirror-to-sutra.ts +192 -0
  218. package/src/editor/scene-heading-view.ts +147 -0
  219. package/src/editor/schema.ts +156 -0
  220. package/src/editor/sutra-to-prosemirror.ts +156 -0
  221. package/src/extensions/storage-adapter.ts +65 -0
  222. package/src/extensions/types.ts +60 -0
  223. package/src/file/docx-exporter.ts +585 -0
  224. package/src/file/docx-importer.ts +313 -0
  225. package/src/file/print-paginator.ts +301 -0
  226. package/src/file/templates.ts +73 -0
  227. package/src/file/workflow-reports.ts +820 -0
  228. package/src/findreplace/FindReplace.tsx +242 -0
  229. package/src/findreplace/find-engine.ts +97 -0
  230. package/src/findreplace/scroll-to-match.ts +89 -0
  231. package/src/fonts/tofu-detect.ts +53 -0
  232. package/src/i18n/LanguageContext.tsx +207 -0
  233. package/src/i18n/language-detect.ts +73 -0
  234. package/src/i18n/useTranslation.tsx +74 -0
  235. package/src/index.ts +27 -0
  236. package/src/locales/bn.json +143 -0
  237. package/src/locales/en.json +143 -0
  238. package/src/locales/gu.json +143 -0
  239. package/src/locales/hi.json +143 -0
  240. package/src/locales/kn.json +143 -0
  241. package/src/locales/ml.json +143 -0
  242. package/src/locales/mr.json +143 -0
  243. package/src/locales/or.json +143 -0
  244. package/src/locales/pa.json +143 -0
  245. package/src/locales/si.json +143 -0
  246. package/src/locales/ta.json +143 -0
  247. package/src/locales/te.json +143 -0
  248. package/src/navigator/SceneNavigator.tsx +844 -0
  249. package/src/navigator/StatisticsDialog.tsx +249 -0
  250. package/src/navigator/scene-list.ts +84 -0
  251. package/src/settings/SettingsDialog.tsx +303 -0
  252. package/src/shell/AppBar.tsx +354 -0
  253. package/src/shell/AppShell.tsx +71 -0
  254. package/src/shell/ConfirmDialog.tsx +71 -0
  255. package/src/shell/ElementToolbar.tsx +175 -0
  256. package/src/shell/LanguageStatus.tsx +101 -0
  257. package/src/shell/StatusBar.tsx +135 -0
  258. package/src/shell/SutrataLogo.tsx +89 -0
  259. package/src/shell/Toast.tsx +46 -0
  260. package/src/shell/ToolbarButton.tsx +30 -0
  261. package/src/shell/VersionHistory.tsx +212 -0
  262. package/src/shell/Watermark.tsx +9 -0
  263. package/src/shell/fonts/fonts.css +1133 -0
  264. package/src/shell/icons.tsx +335 -0
  265. package/src/shell/toolbar-actions.ts +59 -0
  266. package/src/source/SourceView.tsx +111 -0
  267. package/src/source/find-highlight-source.ts +57 -0
  268. package/src/source/sutra-lang.ts +121 -0
  269. package/src/spellcheck/dictionaries.ts +21 -0
  270. package/src/spellcheck/hunspell.ts +110 -0
  271. package/src/spellcheck/spellcheck-plugin.ts +83 -0
  272. package/src/styles/StyleDialog.tsx +148 -0
  273. package/src/styles/builtin-styles.ts +139 -0
  274. package/src/styles/css-adapter.ts +76 -0
  275. package/src/styles/docx-adapter.ts +109 -0
  276. package/src/styles/embed-fonts.ts +81 -0
  277. package/src/styles/pagination.ts +27 -0
  278. package/src/styles/print-adapter.ts +288 -0
  279. package/src/styles/registry.ts +20 -0
  280. package/src/styles/screenplay.css +3006 -0
  281. package/src/styles/script-ranges.ts +17 -0
  282. package/src/styles/types.ts +104 -0
  283. package/src/styles/validate.ts +114 -0
  284. package/src/templates/templates.ts +194 -0
  285. package/src/titlepage/ExportDialog.tsx +494 -0
  286. package/src/titlepage/TitlePageDialog.tsx +312 -0
  287. package/src/titlepage/frontmatter-form.ts +280 -0
  288. package/src/titlepage/languages.ts +37 -0
  289. package/src/types.ts +7 -0
  290. package/tests/AppBar.test.tsx +35 -0
  291. package/tests/AppShell.test.tsx +22 -0
  292. package/tests/ElementToolbar.test.tsx +36 -0
  293. package/tests/LanguageStatus.test.tsx +129 -0
  294. package/tests/SelectionMenu.test.tsx +71 -0
  295. package/tests/ToolbarButton.test.tsx +24 -0
  296. package/tests/ai-onboarding.test.ts +102 -0
  297. package/tests/ai-status.test.tsx +72 -0
  298. package/tests/ai-structured.test.ts +94 -0
  299. package/tests/autocomplete/AutocompletePlugin.test.ts +20 -0
  300. package/tests/autocomplete/suggestions.test.ts +106 -0
  301. package/tests/document-context.test.tsx +565 -0
  302. package/tests/docx-importer.test.ts +160 -0
  303. package/tests/editor/character-decoration-plugin.test.ts +101 -0
  304. package/tests/editor/character-extension.test.ts +44 -0
  305. package/tests/editor/grapheme-cursor.test.ts +118 -0
  306. package/tests/editor/ime-plugin.test.ts +72 -0
  307. package/tests/editor/inline-note-bridge.test.ts +32 -0
  308. package/tests/editor/language-class-plugin.test.ts +265 -0
  309. package/tests/editor/title-page.test.ts +124 -0
  310. package/tests/embed-fonts.test.ts +17 -0
  311. package/tests/exporters.test.ts +365 -0
  312. package/tests/findreplace/FindReplace.test.tsx +391 -0
  313. package/tests/findreplace/find-engine.test.ts +86 -0
  314. package/tests/findreplace/scroll-to-match.test.ts +50 -0
  315. package/tests/fonts/tofu-detect.test.ts +122 -0
  316. package/tests/i18n/LanguageContext.test.tsx +146 -0
  317. package/tests/i18n/language-detect.test.ts +54 -0
  318. package/tests/i18n/locale-parity.test.ts +25 -0
  319. package/tests/i18n/useTranslation.test.tsx +45 -0
  320. package/tests/keymap.test.ts +18 -0
  321. package/tests/navigator/SceneNavigator.test.tsx +177 -0
  322. package/tests/navigator/StatisticsDialog.test.tsx +63 -0
  323. package/tests/navigator/scene-list.test.ts +71 -0
  324. package/tests/print-paginator.test.ts +82 -0
  325. package/tests/shell/VersionHistory.test.tsx +129 -0
  326. package/tests/spellcheck/hunspell.test.ts +82 -0
  327. package/tests/spellcheck/spellcheck-plugin.test.ts +56 -0
  328. package/tests/styles.test.ts +315 -0
  329. package/tests/templates/templates.test.ts +83 -0
  330. package/tests/titlepage/TitlePageDialog.test.tsx +90 -0
  331. package/tests/titlepage/apply-title-page.test.ts +61 -0
  332. package/tests/titlepage/frontmatter-form.test.ts +115 -0
  333. package/tests/toolbar-actions.test.ts +93 -0
  334. package/tests/voice-commands.test.ts +58 -0
  335. package/tsconfig.json +17 -0
  336. package/vitest.config.ts +11 -0
  337. package/vitest.setup.ts +65 -0
@@ -0,0 +1,73 @@
1
+ // Detect the dominant script/language from a text run using Unicode blocks
2
+ // Returns BCP-47 language code: 'hi', 'ta', 'te', 'kn', 'ml', 'bn', 'gu', 'pa', 'or', 'si', 'en'
3
+
4
+ interface ScriptRange {
5
+ name: string
6
+ lang: string
7
+ start: number
8
+ end: number
9
+ }
10
+
11
+ // Unicode block ranges for each script (start–end inclusive codepoint)
12
+ const SCRIPT_RANGES: ScriptRange[] = [
13
+ // Devanagari: U+0900–U+097F
14
+ { name: 'Devanagari', lang: 'hi', start: 0x0900, end: 0x097f },
15
+ // Bengali: U+0980–U+09FF
16
+ { name: 'Bengali', lang: 'bn', start: 0x0980, end: 0x09ff },
17
+ // Gurmukhi: U+0A00–U+0A7F
18
+ { name: 'Gurmukhi', lang: 'pa', start: 0x0a00, end: 0x0a7f },
19
+ // Gujarati: U+0A80–U+0AFF
20
+ { name: 'Gujarati', lang: 'gu', start: 0x0a80, end: 0x0aff },
21
+ // Odia: U+0B00–U+0B7F
22
+ { name: 'Odia', lang: 'or', start: 0x0b00, end: 0x0b7f },
23
+ // Tamil: U+0B80–U+0BFF
24
+ { name: 'Tamil', lang: 'ta', start: 0x0b80, end: 0x0bff },
25
+ // Telugu: U+0C00–U+0C7F
26
+ { name: 'Telugu', lang: 'te', start: 0x0c00, end: 0x0c7f },
27
+ // Kannada: U+0C80–U+0CFF
28
+ { name: 'Kannada', lang: 'kn', start: 0x0c80, end: 0x0cff },
29
+ // Malayalam: U+0D00–U+0D7F
30
+ { name: 'Malayalam', lang: 'ml', start: 0x0d00, end: 0x0d7f },
31
+ // Sinhala: U+0D80–U+0DFF
32
+ { name: 'Sinhala', lang: 'si', start: 0x0d80, end: 0x0dff },
33
+ // Latin: U+0000–U+007F, U+0100–U+017F (Latin Extended-A, etc.)
34
+ { name: 'Latin', lang: 'en', start: 0x0000, end: 0x007f },
35
+ { name: 'Latin Extended', lang: 'en', start: 0x0100, end: 0x017f },
36
+ ]
37
+
38
+ export function detectScript(text: string): string {
39
+ if (!text || text.length === 0) return 'en'
40
+
41
+ // Count codepoints in each script
42
+ const scriptCounts: Record<string, number> = {}
43
+
44
+ for (const char of text) {
45
+ const code = char.charCodeAt(0)
46
+
47
+ // Skip common symbols, whitespace, punctuation (treat as neutral)
48
+ if (code <= 0x007f && (code < 0x0041 || (code > 0x005a && code < 0x0061) || code > 0x007a)) {
49
+ continue // punctuation, spaces, numbers
50
+ }
51
+
52
+ // Find matching script range
53
+ for (const range of SCRIPT_RANGES) {
54
+ if (code >= range.start && code <= range.end) {
55
+ scriptCounts[range.lang] = (scriptCounts[range.lang] ?? 0) + 1
56
+ break
57
+ }
58
+ }
59
+ }
60
+
61
+ // Find the dominant script
62
+ let dominantLang = 'en'
63
+ let maxCount = 0
64
+
65
+ for (const [lang, count] of Object.entries(scriptCounts)) {
66
+ if (count > maxCount) {
67
+ dominantLang = lang
68
+ maxCount = count
69
+ }
70
+ }
71
+
72
+ return dominantLang
73
+ }
@@ -0,0 +1,74 @@
1
+ import { createContext, useContext, useState, useCallback, ReactNode } from 'react'
2
+
3
+ // Statically import all locale files
4
+ import en from '../locales/en.json'
5
+ import hi from '../locales/hi.json'
6
+ import ta from '../locales/ta.json'
7
+ import te from '../locales/te.json'
8
+ import ml from '../locales/ml.json'
9
+ import kn from '../locales/kn.json'
10
+ import bn from '../locales/bn.json'
11
+ import gu from '../locales/gu.json'
12
+ import mr from '../locales/mr.json'
13
+ import pa from '../locales/pa.json'
14
+ import or from '../locales/or.json'
15
+ import si from '../locales/si.json'
16
+
17
+ const LOCALES: Record<string, Record<string, string>> = { en, hi, ta, te, ml, kn, bn, gu, mr, pa, or, si }
18
+
19
+ interface TranslationContextType {
20
+ locale: string
21
+ setLocale: (locale: string) => void
22
+ t: (key: string) => string
23
+ }
24
+
25
+ const TranslationContext = createContext<TranslationContextType>({
26
+ locale: 'en',
27
+ setLocale: () => {},
28
+ t: (key) => key,
29
+ })
30
+
31
+ const STORAGE_KEY = 'sutrata-ui-locale'
32
+
33
+ export function TranslationProvider({ children }: { children: ReactNode }) {
34
+ const [locale, setLocaleState] = useState(() => {
35
+ try {
36
+ const saved = typeof window !== 'undefined' && window.localStorage ? window.localStorage.getItem(STORAGE_KEY) : (typeof localStorage !== 'undefined' ? localStorage.getItem(STORAGE_KEY) : null)
37
+ return saved && LOCALES[saved] ? saved : 'en'
38
+ } catch {
39
+ return 'en'
40
+ }
41
+ })
42
+
43
+ const setLocale = useCallback((newLocale: string) => {
44
+ if (LOCALES[newLocale]) {
45
+ setLocaleState(newLocale)
46
+ try {
47
+ if (typeof window !== 'undefined' && window.localStorage) {
48
+ window.localStorage.setItem(STORAGE_KEY, newLocale)
49
+ } else if (typeof localStorage !== 'undefined') {
50
+ localStorage.setItem(STORAGE_KEY, newLocale)
51
+ }
52
+ } catch {
53
+ // ignore storage errors
54
+ }
55
+ }
56
+ }, [])
57
+
58
+ const t = useCallback((key: string): string => {
59
+ const strings = LOCALES[locale]
60
+ if (strings?.[key] !== undefined) return strings[key]
61
+ // Fallback to English
62
+ return LOCALES['en']?.[key] ?? key
63
+ }, [locale])
64
+
65
+ return (
66
+ <TranslationContext.Provider value={{ locale, setLocale, t }}>
67
+ {children}
68
+ </TranslationContext.Provider>
69
+ )
70
+ }
71
+
72
+ export function useTranslation() {
73
+ return useContext(TranslationContext)
74
+ }
package/src/index.ts ADDED
@@ -0,0 +1,27 @@
1
+ // Public entry point for @sutrata/editor.
2
+ // Re-exported so consumers (e.g. @sutrata/app) get the ambient `Window.desktopAPI`
3
+ // augmentation from dist/, not just from source — a loose sibling .d.ts in dist/
4
+ // isn't picked up by a downstream tsconfig on its own.
5
+ export type * from './desktop-api'
6
+
7
+ export { DocumentProvider, useDocument } from './context/DocumentContext'
8
+ export type { FindMode } from './context/DocumentContext'
9
+ export { AppShell } from './shell/AppShell'
10
+ export { LanguageProvider, useLanguage } from './i18n/LanguageContext'
11
+ export { TranslationProvider, useTranslation } from './i18n/useTranslation'
12
+
13
+ export type { EditorMode, VersionEntry } from './types'
14
+ export type { ScreenplayStyleDefinition } from './styles/types'
15
+
16
+ export type { StorageAdapter } from './extensions/storage-adapter'
17
+ export { useStorageAdapter } from './extensions/storage-adapter'
18
+ export type {
19
+ AIProvider,
20
+ SpeechProvider,
21
+ SessionContext,
22
+ PanelRegistry,
23
+ CommandRegistry,
24
+ ExportRegistry,
25
+ CollabBinding,
26
+ DecorationProvider,
27
+ } from './extensions/types'
@@ -0,0 +1,143 @@
1
+ {
2
+ "toolbar.undo": "পূর্বাবস্থায় ফেরান",
3
+ "toolbar.redo": "পুনরায় করুন",
4
+ "toolbar.scene": "দৃশ্য শিরোনাম",
5
+ "toolbar.action": "ক্রিয়া",
6
+ "toolbar.character": "চরিত্র",
7
+ "toolbar.dialogue": "সংলাপ",
8
+ "toolbar.parenthetical": "বন্ধনী নোট",
9
+ "toolbar.transition": "পরিবর্তন",
10
+ "toolbar.centered": "কেন্দ্রীভূত",
11
+ "toolbar.lyrics": "গান",
12
+ "toolbar.note": "নোট",
13
+ "toolbar.pageBreak": "পৃষ্ঠা বিরতি",
14
+ "toolbar.section": "অনুভাগ",
15
+ "toolbar.bold": "মোটা",
16
+ "toolbar.italic": "বাঁকা",
17
+ "toolbar.underline": "আন্ডারলাইন",
18
+ "appbar.navigator": "দৃশ্য নেভিগেটর",
19
+ "appbar.titlePage": "শিরোনাম পৃষ্ঠা",
20
+ "appbar.new": "নতুন ফাইল",
21
+ "appbar.open": "খুলুন",
22
+ "appbar.save": "সংরক্ষণ করুন",
23
+ "appbar.saveAs": "হিসেবে সংরক্ষণ করুন",
24
+ "appbar.importDocx": "সংশোধিত DOCX আমদানি",
25
+ "appbar.export": "DOCX রপ্তানি",
26
+ "appbar.switchToSource": "উৎসে যান",
27
+ "appbar.switchToFormatted": "ফর্ম্যাটে যান",
28
+ "appbar.showToolbar": "টুলবার দেখান",
29
+ "appbar.hideToolbar": "টুলবার লুকান",
30
+ "navigator.title": "দৃশ্যগুলি",
31
+ "navigator.frontmatter": "শিরোনাম পৃষ্ঠা",
32
+ "navigator.empty": "এখনো কোনো দৃশ্য নেই। ## দিয়ে শুরু করুন।",
33
+ "findreplace.title": "খুঁজুন ও প্রতিস্থাপন করুন",
34
+ "findreplace.find": "খুঁজুন…",
35
+ "findreplace.replace": "প্রতিস্থাপন করুন…",
36
+ "findreplace.caseSensitive": "কেস সংবেদনশীল",
37
+ "findreplace.replaceOne": "প্রতিস্থাপন করুন",
38
+ "findreplace.replaceAll": "সব প্রতিস্থাপন করুন",
39
+ "findreplace.scope.all": "সব",
40
+ "findreplace.scope.selection": "নির্বাচন",
41
+ "findreplace.noMatches": "কোনো মিল নেই",
42
+ "findreplace.findOnly": "খুঁজুন",
43
+ "findreplace.matches": "মিলেছে",
44
+ "lang.status.label": "ভাষা",
45
+ "status.bar.lang": "কার্সারে ভাষা",
46
+ "export.title": "রপ্তানি",
47
+ "export.format": "ফরম্যাট",
48
+ "export.fountainDesc": "স্ট্যান্ডার্ড Fountain ফরম্যাট — Final Draft, Highland ইত্যাদির সাথে সামঞ্জস্যপূর্ণ।",
49
+ "export.sutraDesc": "Sutra উৎস — বর্তমান .sutra ফাইলের অনুলিপি।",
50
+ "export.pdfNote": "Select a format below to export your screenplay or workflow data.",
51
+ "export.warnings": "সতর্কবার্তা",
52
+ "export.cancel": "বাতিল",
53
+ "export.download": "ডাউনলোড",
54
+ "settings.title": "সেটিংস",
55
+ "settings.general": "সাধারণ",
56
+ "settings.uiLanguage": "ইন্টারফেস ভাষা",
57
+ "settings.close": "বন্ধ করুন",
58
+ "export.screenplay": "Screenplay",
59
+ "export.docxDesc": "Formatted Microsoft Word document (.docx)",
60
+ "export.reports": "Workflow Reports",
61
+ "export.onelinerPrint": "One-Liner Schedule (Print/PDF)",
62
+ "export.onelinerDocx": "One-Liner Schedule (Word Table)",
63
+ "export.onelinerCsv": "One-Liner Schedule (CSV)",
64
+ "export.shotlistDocx": "Shot List (Word Table)",
65
+ "export.shotlistCsv": "Shot List (CSV)",
66
+ "export.castDocx": "Cast Report / Characters (Word Table)",
67
+ "export.castCsv": "Cast Report / Characters (CSV)",
68
+ "appbar.style": "স্ক্রিনপ্লে শৈলী",
69
+ "export.style": "শৈলী",
70
+ "export.styleDefault": "ডকুমেন্ট ডিফল্ট",
71
+ "style.title": "স্ক্রিনপ্লে শৈলী",
72
+ "style.close": "বন্ধ করুন",
73
+ "style.builtIn": "অন্তর্নির্মিত শৈলী",
74
+ "style.custom": "কাস্টম শৈলী",
75
+ "style.current": "বর্তমান",
76
+ "style.import": "শৈলী আমদানি করুন…",
77
+ "style.delete": "মুছুন",
78
+ "style.deleteConfirm": "এই কাস্টম শৈলীটি মুছবেন? এটি ব্যবহারকারী নথিগুলি ডিফল্ট শৈলীতে ফিরে যাবে।",
79
+ "style.importInvalid": "এই শৈলী আমদানি করা যায়নি",
80
+ "style.importIdReserved": "এই শৈলীর id একটি অন্তর্নির্মিত শৈলীর জন্য সংরক্ষিত। এর \"id\" ফিল্ড পরিবর্তন করে আবার চেষ্টা করুন।",
81
+ "style.importOverwriteConfirm": "এই id সহ একটি কাস্টম শৈলী ইতিমধ্যে আছে। প্রতিস্থাপন করবেন?",
82
+ "titlePage.title": "শিরোনাম পৃষ্ঠা",
83
+ "titlePage.edit": "শিরোনাম পৃষ্ঠা সম্পাদনা করুন",
84
+ "titlePage.save": "সংরক্ষণ করুন",
85
+ "titlePage.cancel": "বাতিল",
86
+ "titlePage.saved": "শিরোনাম পৃষ্ঠা হালনাগাদ হয়েছে",
87
+ "titlePage.section.story": "শিরোনাম ও কাহিনি",
88
+ "titlePage.section.credits": "ক্রেডিট",
89
+ "titlePage.section.draft": "খসড়া",
90
+ "titlePage.section.contact": "যোগাযোগ ও স্বত্ব",
91
+ "titlePage.section.document": "নথির সেটিংস",
92
+ "titlePage.section.other": "অন্যান্য ক্ষেত্র",
93
+ "titlePage.field.title": "শিরোনাম",
94
+ "titlePage.field.titleLanguage": "শিরোনামের ভাষা",
95
+ "titlePage.field.titleIn": "এই ভাষায় শিরোনাম",
96
+ "titlePage.field.logline": "লগলাইন",
97
+ "titlePage.field.author": "রচনা",
98
+ "titlePage.field.credit": "ক্রেডিট লাইন",
99
+ "titlePage.field.source": "অবলম্বনে",
100
+ "titlePage.field.story": "কাহিনি",
101
+ "titlePage.field.screenplay": "চিত্রনাট্য",
102
+ "titlePage.field.dialogue": "সংলাপ",
103
+ "titlePage.field.draft": "খসড়া",
104
+ "titlePage.field.revision": "সংশোধন",
105
+ "titlePage.field.date": "তারিখ",
106
+ "titlePage.field.contact": "যোগাযোগ",
107
+ "titlePage.field.copyright": "কপিরাইট",
108
+ "titlePage.field.lang": "প্রধান ভাষা",
109
+ "titlePage.field.langSecondary": "অন্যান্য ভাষা",
110
+ "titlePage.field.page": "পৃষ্ঠার আকার",
111
+ "titlePage.field.style": "চিত্রনাট্যের শৈলী",
112
+ "titlePage.field.watermark": "জলছাপ",
113
+ "titlePage.field.key": "ক্ষেত্রের নাম",
114
+ "titlePage.field.value": "মান",
115
+ "titlePage.addTitle": "অন্য ভাষায় শিরোনাম যোগ করুন",
116
+ "titlePage.addField": "ক্ষেত্র যোগ করুন",
117
+ "titlePage.addLanguage": "ভাষা যোগ করুন…",
118
+ "titlePage.chooseLanguage": "ভাষা…",
119
+ "titlePage.remove": "সরান",
120
+ "titlePage.words": "{n}টি শব্দ",
121
+ "titlePage.notSet": "নির্ধারিত নয়",
122
+ "titlePage.pageDefault": "ডিফল্ট (A4)",
123
+ "titlePage.styleDefault": "ডিফল্ট ({name})",
124
+ "titlePage.usePicker": "তারিখ বেছে নিন",
125
+ "titlePage.useText": "টেক্সট হিসেবে লিখুন",
126
+ "titlePage.preserved": "একাধিক লাইন বা নেস্টেড মানযুক্ত আরও {n}টি ক্ষেত্র অপরিবর্তিত রাখা হয়েছে। সেগুলি সোর্স মোডে সম্পাদনা করুন।",
127
+ "statusbar.scene": "দৃশ্য",
128
+ "statusbar.scenes": "দৃশ্যগুলি",
129
+ "statusbar.page": "পাতা",
130
+ "statusbar.pages": "পাতাগুলি",
131
+ "statusbar.words": "শব্দ",
132
+ "statusbar.unsavedChanges": "সংরক্ষণ করা হয়নি এমন পরিবর্তন",
133
+ "statusbar.allChangesSaved": "সমস্ত পরিবর্তন সংরক্ষিত হয়েছে",
134
+ "statusbar.savedToFile": "ফাইলে সংরক্ষিত হয়েছে",
135
+ "statusbar.savedToFileTooltip": "আপনার ডিভাইসের ফাইলে লেখা হয়েছে",
136
+ "statusbar.savedLocally": "স্থানীয়ভাবে সংরক্ষিত হয়েছে",
137
+ "statusbar.savedLocallyTooltip": "শুধুমাত্র এই ব্রাউজারে ব্যাকআপ করা হয়েছে — ফাইলে লিখতে সংরক্ষণ করুন ব্যবহার করুন",
138
+ "statusbar.scenesTooltip": "চিত্রনাট্যে মোট দৃশ্য",
139
+ "statusbar.pagesTooltip": "আনুমানিক পৃষ্ঠা সংখ্যা (~1 মিনিট/পৃষ্ঠা)",
140
+ "statusbar.wordsTooltip": "মোট শব্দ সংখ্যা",
141
+ "statusbar.statsButton": "পরিসংখ্যান",
142
+ "statusbar.statsTooltip": "চিত্রনাট্যের পরিসংখ্যান এবং কুশীলব দেখুন"
143
+ }
@@ -0,0 +1,143 @@
1
+ {
2
+ "toolbar.undo": "Undo",
3
+ "toolbar.redo": "Redo",
4
+ "toolbar.scene": "Scene Heading",
5
+ "toolbar.action": "Action",
6
+ "toolbar.character": "Character",
7
+ "toolbar.dialogue": "Dialogue",
8
+ "toolbar.parenthetical": "Parenthetical",
9
+ "toolbar.transition": "Transition",
10
+ "toolbar.centered": "Centered",
11
+ "toolbar.lyrics": "Lyrics",
12
+ "toolbar.note": "Note",
13
+ "toolbar.pageBreak": "Page Break",
14
+ "toolbar.section": "Section",
15
+ "toolbar.bold": "Bold",
16
+ "toolbar.italic": "Italic",
17
+ "toolbar.underline": "Underline",
18
+ "appbar.navigator": "Scene Navigator",
19
+ "appbar.titlePage": "Title Page",
20
+ "appbar.new": "New file",
21
+ "appbar.open": "Open .sutra",
22
+ "appbar.save": "Save",
23
+ "appbar.saveAs": "Save As",
24
+ "appbar.importDocx": "Import Corrected DOCX",
25
+ "appbar.export": "Export",
26
+ "appbar.style": "Screenplay Style",
27
+ "appbar.switchToSource": "Switch to Source",
28
+ "appbar.switchToFormatted": "Switch to Formatted",
29
+ "appbar.showToolbar": "Show toolbar",
30
+ "appbar.hideToolbar": "Hide toolbar",
31
+ "navigator.title": "Scenes",
32
+ "navigator.frontmatter": "Title Page",
33
+ "navigator.empty": "No scenes yet. Start with a scene heading (##).",
34
+ "findreplace.title": "Find & Replace",
35
+ "findreplace.find": "Find…",
36
+ "findreplace.replace": "Replace with…",
37
+ "findreplace.caseSensitive": "Case sensitive",
38
+ "findreplace.replaceOne": "Replace",
39
+ "findreplace.replaceAll": "Replace All",
40
+ "findreplace.scope.all": "All",
41
+ "findreplace.scope.selection": "Selection",
42
+ "findreplace.noMatches": "No matches",
43
+ "findreplace.findOnly": "Find",
44
+ "findreplace.matches": "matches",
45
+ "lang.status.label": "Language",
46
+ "status.bar.lang": "Language at cursor",
47
+ "export.title": "Export",
48
+ "export.format": "Format",
49
+ "export.fountainDesc": "Standard Fountain format, compatible with Final Draft, Highland, and others.",
50
+ "export.sutraDesc": "Sutra source — copy of the current .sutra file.",
51
+ "export.pdfNote": "Select a format below to export your screenplay or workflow data.",
52
+ "export.warnings": "Warnings",
53
+ "export.cancel": "Cancel",
54
+ "export.download": "Download",
55
+ "export.screenplay": "Screenplay",
56
+ "export.docxDesc": "Formatted Microsoft Word document (.docx)",
57
+ "export.reports": "Workflow Reports",
58
+ "export.onelinerPrint": "One-Liner Schedule (Print/PDF)",
59
+ "export.onelinerDocx": "One-Liner Schedule (Word Table)",
60
+ "export.onelinerCsv": "One-Liner Schedule (CSV)",
61
+ "export.shotlistDocx": "Shot List (Word Table)",
62
+ "export.shotlistCsv": "Shot List (CSV)",
63
+ "export.castDocx": "Cast Report / Characters (Word Table)",
64
+ "export.castCsv": "Cast Report / Characters (CSV)",
65
+ "export.style": "Style",
66
+ "export.styleDefault": "Document default",
67
+ "settings.title": "Settings",
68
+ "settings.general": "General",
69
+ "settings.uiLanguage": "Interface Language",
70
+ "settings.close": "Close",
71
+ "style.title": "Screenplay Style",
72
+ "style.close": "Close",
73
+ "style.builtIn": "Built-in styles",
74
+ "style.custom": "Custom styles",
75
+ "style.current": "current",
76
+ "style.import": "Import style…",
77
+ "style.delete": "Delete",
78
+ "style.deleteConfirm": "Delete this custom style? Documents using it will fall back to the default style.",
79
+ "style.importInvalid": "Could not import this style",
80
+ "style.importIdReserved": "This style's id is reserved by a built-in style. Rename its \"id\" field and try again.",
81
+ "style.importOverwriteConfirm": "A custom style with this id already exists. Replace it?",
82
+ "titlePage.title": "Title Page",
83
+ "titlePage.edit": "Edit title page",
84
+ "titlePage.save": "Save",
85
+ "titlePage.cancel": "Cancel",
86
+ "titlePage.saved": "Title page updated",
87
+ "titlePage.section.story": "Title & Story",
88
+ "titlePage.section.credits": "Credits",
89
+ "titlePage.section.draft": "Draft",
90
+ "titlePage.section.contact": "Contact & Rights",
91
+ "titlePage.section.document": "Document Settings",
92
+ "titlePage.section.other": "Other Fields",
93
+ "titlePage.field.title": "Title",
94
+ "titlePage.field.titleLanguage": "Title language",
95
+ "titlePage.field.titleIn": "Title in this language",
96
+ "titlePage.field.logline": "Logline",
97
+ "titlePage.field.author": "Written by",
98
+ "titlePage.field.credit": "Credit line",
99
+ "titlePage.field.source": "Based on",
100
+ "titlePage.field.story": "Story",
101
+ "titlePage.field.screenplay": "Screenplay",
102
+ "titlePage.field.dialogue": "Dialogue",
103
+ "titlePage.field.draft": "Draft",
104
+ "titlePage.field.revision": "Revision",
105
+ "titlePage.field.date": "Date",
106
+ "titlePage.field.contact": "Contact",
107
+ "titlePage.field.copyright": "Copyright",
108
+ "titlePage.field.lang": "Primary language",
109
+ "titlePage.field.langSecondary": "Other languages",
110
+ "titlePage.field.page": "Page size",
111
+ "titlePage.field.style": "Screenplay style",
112
+ "titlePage.field.watermark": "Watermark",
113
+ "titlePage.field.key": "Field name",
114
+ "titlePage.field.value": "Value",
115
+ "titlePage.addTitle": "Add title in another language",
116
+ "titlePage.addField": "Add field",
117
+ "titlePage.addLanguage": "Add a language…",
118
+ "titlePage.chooseLanguage": "Language…",
119
+ "titlePage.remove": "Remove",
120
+ "titlePage.words": "{n} words",
121
+ "titlePage.notSet": "Not set",
122
+ "titlePage.pageDefault": "Default (A4)",
123
+ "titlePage.styleDefault": "Default ({name})",
124
+ "titlePage.usePicker": "Pick a date",
125
+ "titlePage.useText": "Type as text",
126
+ "titlePage.preserved": "{n} other field(s) with multi-line or nested values are kept unchanged. Edit them in source mode.",
127
+ "statusbar.scene": "scene",
128
+ "statusbar.scenes": "scenes",
129
+ "statusbar.page": "page",
130
+ "statusbar.pages": "pages",
131
+ "statusbar.words": "words",
132
+ "statusbar.unsavedChanges": "Unsaved changes",
133
+ "statusbar.allChangesSaved": "All changes saved",
134
+ "statusbar.savedToFile": "Saved to file",
135
+ "statusbar.savedToFileTooltip": "Written to the file on your device",
136
+ "statusbar.savedLocally": "Saved locally",
137
+ "statusbar.savedLocallyTooltip": "Backed up in this browser only — use Save to write it to a file",
138
+ "statusbar.scenesTooltip": "Total Scenes in Screenplay",
139
+ "statusbar.pagesTooltip": "Estimated Page Count (~1 min/page)",
140
+ "statusbar.wordsTooltip": "Total Word Count",
141
+ "statusbar.statsButton": "Stats",
142
+ "statusbar.statsTooltip": "View Screenplay Statistics & Cast"
143
+ }
@@ -0,0 +1,143 @@
1
+ {
2
+ "toolbar.undo": "પૂર્વવત્ કરો",
3
+ "toolbar.redo": "ફરી કરો",
4
+ "toolbar.scene": "દ્રશ્ય શીર્ષક",
5
+ "toolbar.action": "ક્રિયા",
6
+ "toolbar.character": "પાત્ર",
7
+ "toolbar.dialogue": "સંવાદ",
8
+ "toolbar.parenthetical": "કૌંસ નોંધ",
9
+ "toolbar.transition": "સંક્રમણ",
10
+ "toolbar.centered": "મધ્યમાં",
11
+ "toolbar.lyrics": "ગીત",
12
+ "toolbar.note": "નોંધ",
13
+ "toolbar.pageBreak": "પૃષ્ઠ વિભાજન",
14
+ "toolbar.section": "વિભાગ",
15
+ "toolbar.bold": "જાડા",
16
+ "toolbar.italic": "ત્રાંસા",
17
+ "toolbar.underline": "રેખાંકિત",
18
+ "appbar.navigator": "દ્રશ્ય નેવિગેટર",
19
+ "appbar.titlePage": "શીર્ષક પૃષ્ઠ",
20
+ "appbar.new": "નવી ફાઇલ",
21
+ "appbar.open": "ખોલો",
22
+ "appbar.save": "સાચવો",
23
+ "appbar.saveAs": "આ નામે સાચવો",
24
+ "appbar.importDocx": "સુધારેલ DOCX આયાત",
25
+ "appbar.export": "DOCX નિકાસ",
26
+ "appbar.switchToSource": "સ્રોત પર જાઓ",
27
+ "appbar.switchToFormatted": "ફોર્મેટ પર જાઓ",
28
+ "appbar.showToolbar": "ટૂલબાર બતાવો",
29
+ "appbar.hideToolbar": "ટૂલબાર છુપાવો",
30
+ "navigator.title": "દ્રશ્યો",
31
+ "navigator.frontmatter": "શીર્ષક પૃષ્ઠ",
32
+ "navigator.empty": "હજુ સુધી કોઈ દ્રશ્ય નથી. ## થી શરૂ કરો.",
33
+ "findreplace.title": "શોધો અને બદલો",
34
+ "findreplace.find": "શોધો…",
35
+ "findreplace.replace": "બદલો…",
36
+ "findreplace.caseSensitive": "કેસ સંવેદનશીલ",
37
+ "findreplace.replaceOne": "બદલો",
38
+ "findreplace.replaceAll": "બધું બદલો",
39
+ "findreplace.scope.all": "બધા",
40
+ "findreplace.scope.selection": "પસંદગી",
41
+ "findreplace.noMatches": "કોઈ મેળ નહીં",
42
+ "findreplace.findOnly": "શોધો",
43
+ "findreplace.matches": "મળ્યા",
44
+ "lang.status.label": "ભાષા",
45
+ "status.bar.lang": "કર્સર પર ભાષા",
46
+ "export.title": "નિકાસ",
47
+ "export.format": "ફોર્મેટ",
48
+ "export.fountainDesc": "પ્રમાણભૂત Fountain ફોર્મેટ — Final Draft, Highland વગેરે સાથે સુસંગત.",
49
+ "export.sutraDesc": "Sutra સ્રોત — વર્તમાન .sutra ફાઇલની નકલ.",
50
+ "export.pdfNote": "Select a format below to export your screenplay or workflow data.",
51
+ "export.warnings": "ચેતવણીઓ",
52
+ "export.cancel": "રદ કરો",
53
+ "export.download": "ડાઉનલોડ",
54
+ "settings.title": "સેટિંગ્સ",
55
+ "settings.general": "સામાન્ય",
56
+ "settings.uiLanguage": "ઇન્ટરફેસ ભાષા",
57
+ "settings.close": "બંધ કરો",
58
+ "export.screenplay": "Screenplay",
59
+ "export.docxDesc": "Formatted Microsoft Word document (.docx)",
60
+ "export.reports": "Workflow Reports",
61
+ "export.onelinerPrint": "One-Liner Schedule (Print/PDF)",
62
+ "export.onelinerDocx": "One-Liner Schedule (Word Table)",
63
+ "export.onelinerCsv": "One-Liner Schedule (CSV)",
64
+ "export.shotlistDocx": "Shot List (Word Table)",
65
+ "export.shotlistCsv": "Shot List (CSV)",
66
+ "export.castDocx": "Cast Report / Characters (Word Table)",
67
+ "export.castCsv": "Cast Report / Characters (CSV)",
68
+ "appbar.style": "સ્ક્રીનપ્લે શૈલી",
69
+ "export.style": "શૈલી",
70
+ "export.styleDefault": "દસ્તાવેજ ડિફોલ્ટ",
71
+ "style.title": "સ્ક્રીનપ્લે શૈલી",
72
+ "style.close": "બંધ કરો",
73
+ "style.builtIn": "બિલ્ટ-ઇન શૈલીઓ",
74
+ "style.custom": "કસ્ટમ શૈલીઓ",
75
+ "style.current": "વર્તમાન",
76
+ "style.import": "શૈલી આયાત કરો…",
77
+ "style.delete": "કાઢી નાખો",
78
+ "style.deleteConfirm": "આ કસ્ટમ શૈલી કાઢી નાખવી છે? તેનો ઉપયોગ કરતા દસ્તાવેજો ડિફોલ્ટ શૈલી પર પાછા જશે.",
79
+ "style.importInvalid": "આ શૈલી આયાત કરી શકાઈ નથી",
80
+ "style.importIdReserved": "આ શૈલીની id એક બિલ્ટ-ઇન શૈલી માટે આરક્ષિત છે. તેનું \"id\" ફીલ્ડ બદલીને ફરી પ્રયાસ કરો.",
81
+ "style.importOverwriteConfirm": "આ id સાથેની કસ્ટમ શૈલી પહેલેથી અસ્તિત્વમાં છે. બદલવી છે?",
82
+ "titlePage.title": "શીર્ષક પૃષ્ઠ",
83
+ "titlePage.edit": "શીર્ષક પૃષ્ઠ સંપાદિત કરો",
84
+ "titlePage.save": "સાચવો",
85
+ "titlePage.cancel": "રદ કરો",
86
+ "titlePage.saved": "શીર્ષક પૃષ્ઠ અપડેટ થયું",
87
+ "titlePage.section.story": "શીર્ષક અને વાર્તા",
88
+ "titlePage.section.credits": "શ્રેય",
89
+ "titlePage.section.draft": "ડ્રાફ્ટ",
90
+ "titlePage.section.contact": "સંપર્ક અને અધિકારો",
91
+ "titlePage.section.document": "દસ્તાવેજ સેટિંગ્સ",
92
+ "titlePage.section.other": "અન્ય ફીલ્ડ",
93
+ "titlePage.field.title": "શીર્ષક",
94
+ "titlePage.field.titleLanguage": "શીર્ષકની ભાષા",
95
+ "titlePage.field.titleIn": "આ ભાષામાં શીર્ષક",
96
+ "titlePage.field.logline": "લૉગલાઇન",
97
+ "titlePage.field.author": "લેખક",
98
+ "titlePage.field.credit": "શ્રેય પંક્તિ",
99
+ "titlePage.field.source": "આધારિત",
100
+ "titlePage.field.story": "વાર્તા",
101
+ "titlePage.field.screenplay": "પટકથા",
102
+ "titlePage.field.dialogue": "સંવાદ",
103
+ "titlePage.field.draft": "ડ્રાફ્ટ",
104
+ "titlePage.field.revision": "સુધારો",
105
+ "titlePage.field.date": "તારીખ",
106
+ "titlePage.field.contact": "સંપર્ક",
107
+ "titlePage.field.copyright": "કૉપિરાઇટ",
108
+ "titlePage.field.lang": "મુખ્ય ભાષા",
109
+ "titlePage.field.langSecondary": "અન્ય ભાષાઓ",
110
+ "titlePage.field.page": "પૃષ્ઠનું કદ",
111
+ "titlePage.field.style": "પટકથા શૈલી",
112
+ "titlePage.field.watermark": "વૉટરમાર્ક",
113
+ "titlePage.field.key": "ફીલ્ડનું નામ",
114
+ "titlePage.field.value": "મૂલ્ય",
115
+ "titlePage.addTitle": "બીજી ભાષામાં શીર્ષક ઉમેરો",
116
+ "titlePage.addField": "ફીલ્ડ ઉમેરો",
117
+ "titlePage.addLanguage": "ભાષા ઉમેરો…",
118
+ "titlePage.chooseLanguage": "ભાષા…",
119
+ "titlePage.remove": "દૂર કરો",
120
+ "titlePage.words": "{n} શબ્દો",
121
+ "titlePage.notSet": "સેટ નથી",
122
+ "titlePage.pageDefault": "ડિફૉલ્ટ (A4)",
123
+ "titlePage.styleDefault": "ડિફૉલ્ટ ({name})",
124
+ "titlePage.usePicker": "તારીખ પસંદ કરો",
125
+ "titlePage.useText": "ટેક્સ્ટ તરીકે લખો",
126
+ "titlePage.preserved": "બહુ-પંક્તિ અથવા નેસ્ટેડ મૂલ્યોવાળા અન્ય {n} ફીલ્ડ યથાવત રાખવામાં આવ્યા છે. તેમને સોર્સ મોડમાં સંપાદિત કરો.",
127
+ "statusbar.scene": "દ્રશ્ય",
128
+ "statusbar.scenes": "દ્રશ્યો",
129
+ "statusbar.page": "પાનું",
130
+ "statusbar.pages": "પાનાં",
131
+ "statusbar.words": "શબ્દો",
132
+ "statusbar.unsavedChanges": "સાચવેલા ન હોય તેવા ફેરફારો",
133
+ "statusbar.allChangesSaved": "બધા ફેરફારો સાચવાયા",
134
+ "statusbar.savedToFile": "ફાઇલમાં સાચવાયું",
135
+ "statusbar.savedToFileTooltip": "તમારા ડિવાઇસ પરની ફાઇલમાં લખાયું",
136
+ "statusbar.savedLocally": "સ્થાનિક રીતે સાચવાયું",
137
+ "statusbar.savedLocallyTooltip": "ફક્ત આ બ્રાઉઝરમાં બેકઅપ થયું — ફાઇલમાં લખવા માટે સાચવો નો ઉપયોગ કરો",
138
+ "statusbar.scenesTooltip": "પટકથામાં કુલ દ્રશ્યો",
139
+ "statusbar.pagesTooltip": "અંદાજિત પાનાંની સંખ્યા (~1 મિનિટ/પાનું)",
140
+ "statusbar.wordsTooltip": "કુલ શબ્દોની સંખ્યા",
141
+ "statusbar.statsButton": "આંકડા",
142
+ "statusbar.statsTooltip": "પટકથાના આંકડા અને કલાકારો જુઓ"
143
+ }