niuma-ui 2.0.4 → 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.
Files changed (291) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/NOTICE +0 -1
  3. package/README.md +3 -3
  4. package/README.zh-CN.md +3 -3
  5. package/dist/components/_shared/index.d.ts +2 -2
  6. package/dist/components/_shared/src/overlay-utils.d.ts +44 -1
  7. package/dist/components/_shared/src/overlay-utils.js +87 -2
  8. package/dist/components/alert/index.d.ts +1 -0
  9. package/dist/components/alert/src/RsAlert.css +120 -65
  10. package/dist/components/alert/src/RsAlert.d.ts +24 -5
  11. package/dist/components/alert/src/RsAlert.impl.js +108 -36
  12. package/dist/components/alert/src/RsAlert.js +1 -1
  13. package/dist/components/alert/src/alert-utils.d.ts +37 -0
  14. package/dist/components/alert/src/alert-utils.js +71 -0
  15. package/dist/components/auto-complete/src/RsAutoComplete.d.ts +1 -1
  16. package/dist/components/button/src/RsButton.css +75 -72
  17. package/dist/components/button/src/RsButton.d.ts +1 -4
  18. package/dist/components/button/src/RsButton.impl.js +3 -7
  19. package/dist/components/button/src/RsButton.js +1 -1
  20. package/dist/components/card/src/RsCard.d.ts +1 -1
  21. package/dist/components/code-block/index.d.ts +1 -0
  22. package/dist/components/code-block/src/RsCodeBlock.css +93 -52
  23. package/dist/components/code-block/src/RsCodeBlock.d.ts +36 -9
  24. package/dist/components/code-block/src/RsCodeBlock.impl.js +203 -84
  25. package/dist/components/code-block/src/RsCodeBlock.js +1 -1
  26. package/dist/components/code-block/src/code-block-highlight.d.ts +4 -0
  27. package/dist/components/code-block/src/code-block-highlight.js +34 -0
  28. package/dist/components/code-block/src/code-block-utils.d.ts +23 -0
  29. package/dist/components/code-block/src/code-block-utils.js +71 -0
  30. package/dist/components/code-editor/index.d.ts +1 -1
  31. package/dist/components/code-editor/src/RsCodeEditor.css +118 -92
  32. package/dist/components/code-editor/src/RsCodeEditor.d.ts +14 -3
  33. package/dist/components/code-editor/src/RsCodeEditor.impl.js +261 -94
  34. package/dist/components/code-editor/src/RsCodeEditor.js +1 -1
  35. package/dist/components/code-editor/src/code-editor-utils.d.ts +15 -0
  36. package/dist/components/code-editor/src/code-editor-utils.js +36 -1
  37. package/dist/components/code-editor/src/code-mirror-completion.d.ts +1 -1
  38. package/dist/components/code-editor/src/code-mirror-completion.js +8 -5
  39. package/dist/components/code-editor/src/code-mirror-diagnostics.d.ts +2 -3
  40. package/dist/components/code-editor/src/code-mirror-diagnostics.js +3 -4
  41. package/dist/components/code-editor/src/code-mirror-ghost.d.ts +1 -1
  42. package/dist/components/code-editor/src/code-mirror-ghost.js +12 -3
  43. package/dist/components/code-editor/src/code-mirror-inline-edit.js +8 -3
  44. package/dist/components/code-editor/src/code-mirror-intel.d.ts +2 -2
  45. package/dist/components/code-editor/src/code-mirror-intel.js +50 -39
  46. package/dist/components/code-editor/src/code-mirror-lang.js +4 -0
  47. package/dist/components/code-editor/src/code-mirror-session.d.ts +13 -0
  48. package/dist/components/code-editor/src/code-mirror-session.js +30 -0
  49. package/dist/components/config-provider/src/RsConfigProvider.css +1 -1
  50. package/dist/components/config-provider/src/RsConfigProvider.d.ts +2 -2
  51. package/dist/components/config-provider/src/RsConfigProvider.impl.js +7 -16
  52. package/dist/components/config-provider/src/RsConfigProvider.js +1 -1
  53. package/dist/components/context-menu/index.d.ts +1 -1
  54. package/dist/components/context-menu/src/RsContextMenu.css +115 -89
  55. package/dist/components/context-menu/src/RsContextMenu.d.ts +32 -11
  56. package/dist/components/context-menu/src/RsContextMenu.impl.js +795 -48
  57. package/dist/components/context-menu/src/RsContextMenuItems.d.ts +25 -1
  58. package/dist/components/context-menu/src/RsContextMenuItems.impl.js +110 -61
  59. package/dist/components/context-menu/src/context-menu-utils.d.ts +89 -3
  60. package/dist/components/context-menu/src/context-menu-utils.js +168 -3
  61. package/dist/components/date-picker/src/RsDatePicker.d.ts +2 -2
  62. package/dist/components/date-picker/src/RsDateTimePicker.d.ts +2 -2
  63. package/dist/components/descriptions/index.d.ts +1 -1
  64. package/dist/components/descriptions/src/RsDescriptions.css +38 -11
  65. package/dist/components/descriptions/src/RsDescriptions.d.ts +20 -4
  66. package/dist/components/descriptions/src/RsDescriptions.impl.js +89 -19
  67. package/dist/components/descriptions/src/RsDescriptionsItem.impl.js +13 -6
  68. package/dist/components/descriptions/src/descriptions-utils.d.ts +19 -0
  69. package/dist/components/descriptions/src/descriptions-utils.js +39 -1
  70. package/dist/components/dialog/index.d.ts +1 -1
  71. package/dist/components/dialog/src/RsConfirmDialog.css +47 -21
  72. package/dist/components/dialog/src/RsConfirmDialog.d.ts +19 -7
  73. package/dist/components/dialog/src/RsConfirmDialog.impl.js +349 -119
  74. package/dist/components/dialog/src/RsConfirmDialog.js +2 -1
  75. package/dist/components/dialog/src/RsDialog.css +102 -109
  76. package/dist/components/dialog/src/RsDialog.d.ts +34 -24
  77. package/dist/components/dialog/src/RsDialog.impl.js +410 -177
  78. package/dist/components/dialog/src/RsDialog.js +2 -1
  79. package/dist/components/dialog/src/dialog-utils.d.ts +40 -1
  80. package/dist/components/dialog/src/dialog-utils.js +152 -1
  81. package/dist/components/dialog/src/dialog-window.js +29 -8
  82. package/dist/components/drawer/index.d.ts +1 -1
  83. package/dist/components/drawer/src/RsDrawer.css +61 -29
  84. package/dist/components/drawer/src/RsDrawer.d.ts +37 -21
  85. package/dist/components/drawer/src/RsDrawer.impl.js +441 -223
  86. package/dist/components/drawer/src/drawer-utils.d.ts +35 -0
  87. package/dist/components/drawer/src/drawer-utils.js +131 -1
  88. package/dist/components/dropdown/index.d.ts +1 -1
  89. package/dist/components/dropdown/src/RsDropdown.css +140 -61
  90. package/dist/components/dropdown/src/RsDropdown.d.ts +39 -6
  91. package/dist/components/dropdown/src/RsDropdown.impl.js +693 -63
  92. package/dist/components/dropdown/src/RsDropdownItemView.impl.js +17 -7
  93. package/dist/components/dropdown/src/RsDropdownItems.d.ts +32 -3
  94. package/dist/components/dropdown/src/RsDropdownItems.impl.js +171 -59
  95. package/dist/components/dropdown/src/dropdown-utils.d.ts +50 -0
  96. package/dist/components/dropdown/src/dropdown-utils.js +103 -3
  97. package/dist/components/empty/index.d.ts +1 -0
  98. package/dist/components/empty/src/RsEmpty.css +105 -23
  99. package/dist/components/empty/src/RsEmpty.d.ts +27 -4
  100. package/dist/components/empty/src/RsEmpty.impl.js +154 -11
  101. package/dist/components/empty/src/RsEmpty.js +2 -1
  102. package/dist/components/empty/src/empty-utils.d.ts +28 -0
  103. package/dist/components/empty/src/empty-utils.js +55 -0
  104. package/dist/components/form/src/RsForm.d.ts +1 -1
  105. package/dist/components/input-number/src/RsInputNumber.d.ts +1 -1
  106. package/dist/components/label/src/RsLabel.d.ts +1 -1
  107. package/dist/components/loading/index.d.ts +1 -0
  108. package/dist/components/loading/src/RsLoading.css +13 -97
  109. package/dist/components/loading/src/RsLoading.d.ts +52 -2
  110. package/dist/components/loading/src/RsLoading.impl.js +216 -33
  111. package/dist/components/loading/src/RsLoading.js +2 -1
  112. package/dist/components/loading/src/loading-status.css +210 -0
  113. package/dist/components/loading/src/loading-status.d.ts +34 -0
  114. package/dist/components/loading/src/loading-status.impl.js +84 -0
  115. package/dist/components/loading/src/loading-status.js +8 -0
  116. package/dist/components/loading/src/loading-utils.d.ts +51 -4
  117. package/dist/components/loading/src/loading-utils.js +122 -0
  118. package/dist/components/loading-bar/index.d.ts +1 -0
  119. package/dist/components/loading-bar/src/RsLoadingBar.css +72 -8
  120. package/dist/components/loading-bar/src/RsLoadingBar.d.ts +55 -11
  121. package/dist/components/loading-bar/src/RsLoadingBar.impl.js +298 -57
  122. package/dist/components/loading-bar/src/RsLoadingBar.js +1 -1
  123. package/dist/components/loading-bar/src/loading-bar-utils.d.ts +69 -0
  124. package/dist/components/loading-bar/src/loading-bar-utils.js +97 -0
  125. package/dist/components/log/src/RsLog.css +52 -144
  126. package/dist/components/log/src/RsLog.d.ts +12 -11
  127. package/dist/components/log/src/RsLog.impl.js +181 -148
  128. package/dist/components/log/src/RsLog.js +1 -1
  129. package/dist/components/log/src/RsLogRow.css +152 -0
  130. package/dist/components/log/src/RsLogRow.d.ts +35 -0
  131. package/dist/components/log/src/RsLogRow.impl.js +91 -0
  132. package/dist/components/log/src/RsLogRow.js +8 -0
  133. package/dist/components/log/src/log-utils.d.ts +8 -0
  134. package/dist/components/log/src/log-utils.js +71 -10
  135. package/dist/components/markdown/index.d.ts +1 -1
  136. package/dist/components/markdown/src/RsMarkdown.css +75 -32
  137. package/dist/components/markdown/src/RsMarkdown.d.ts +6 -2
  138. package/dist/components/markdown/src/RsMarkdown.impl.js +185 -17
  139. package/dist/components/markdown/src/markdown-utils.d.ts +26 -0
  140. package/dist/components/markdown/src/markdown-utils.js +114 -12
  141. package/dist/components/mentions/src/RsMentions.d.ts +2 -2
  142. package/dist/components/menu/index.d.ts +1 -1
  143. package/dist/components/menu/src/RsMenu.css +70 -29
  144. package/dist/components/menu/src/RsMenu.d.ts +58 -4
  145. package/dist/components/menu/src/RsMenu.impl.js +93 -46
  146. package/dist/components/menu/src/RsMenuItems.d.ts +22 -5
  147. package/dist/components/menu/src/RsMenuItems.impl.js +506 -154
  148. package/dist/components/menu/src/menu-utils.d.ts +56 -0
  149. package/dist/components/menu/src/menu-utils.js +139 -6
  150. package/dist/components/monaco-editor/index.d.ts +1 -1
  151. package/dist/components/monaco-editor/src/RsMonacoEditor.css +28 -16
  152. package/dist/components/monaco-editor/src/RsMonacoEditor.d.ts +39 -41
  153. package/dist/components/monaco-editor/src/RsMonacoEditor.impl.js +212 -133
  154. package/dist/components/monaco-editor/src/RsMonacoEditor.js +1 -1
  155. package/dist/components/monaco-editor/src/monaco-editor-utils.d.ts +126 -0
  156. package/dist/components/monaco-editor/src/monaco-editor-utils.js +302 -0
  157. package/dist/components/pagination/index.d.ts +2 -2
  158. package/dist/components/pagination/src/RsPagination.css +93 -46
  159. package/dist/components/pagination/src/RsPagination.d.ts +68 -8
  160. package/dist/components/pagination/src/RsPagination.impl.js +229 -86
  161. package/dist/components/pagination/src/RsPagination.js +1 -1
  162. package/dist/components/pagination/src/pagination-utils.d.ts +59 -0
  163. package/dist/components/pagination/src/pagination-utils.js +105 -1
  164. package/dist/components/popover/index.d.ts +1 -0
  165. package/dist/components/popover/src/RsPopover.css +124 -14
  166. package/dist/components/popover/src/RsPopover.d.ts +38 -7
  167. package/dist/components/popover/src/RsPopover.impl.js +546 -35
  168. package/dist/components/popover/src/RsPopover.js +2 -1
  169. package/dist/components/popover/src/popover-utils.d.ts +24 -2
  170. package/dist/components/popover/src/popover-utils.js +55 -0
  171. package/dist/components/sidebar/index.d.ts +1 -0
  172. package/dist/components/sidebar/src/RsSidebar.css +91 -33
  173. package/dist/components/sidebar/src/RsSidebar.d.ts +17 -9
  174. package/dist/components/sidebar/src/RsSidebar.impl.js +124 -22
  175. package/dist/components/sidebar/src/RsSidebar.js +1 -1
  176. package/dist/components/sidebar/src/RsSidebarGroup.css +23 -6
  177. package/dist/components/sidebar/src/RsSidebarGroup.d.ts +6 -2
  178. package/dist/components/sidebar/src/RsSidebarGroup.impl.js +17 -4
  179. package/dist/components/sidebar/src/RsSidebarGroup.js +1 -1
  180. package/dist/components/sidebar/src/RsSidebarItem.css +50 -20
  181. package/dist/components/sidebar/src/RsSidebarItem.d.ts +21 -3
  182. package/dist/components/sidebar/src/RsSidebarItem.impl.js +71 -20
  183. package/dist/components/sidebar/src/RsSidebarItem.js +1 -1
  184. package/dist/components/sidebar/src/sidebar-utils.d.ts +47 -0
  185. package/dist/components/sidebar/src/sidebar-utils.js +72 -0
  186. package/dist/components/split-pane/index.d.ts +2 -2
  187. package/dist/components/split-pane/src/RsSplitPane.css +41 -30
  188. package/dist/components/split-pane/src/RsSplitPane.d.ts +6 -2
  189. package/dist/components/split-pane/src/RsSplitPane.impl.js +153 -45
  190. package/dist/components/split-pane/src/split-pane-utils.d.ts +23 -0
  191. package/dist/components/split-pane/src/split-pane-utils.js +18 -1
  192. package/dist/components/stat-card/index.d.ts +1 -0
  193. package/dist/components/stat-card/src/RsStatCard.css +129 -25
  194. package/dist/components/stat-card/src/RsStatCard.d.ts +40 -4
  195. package/dist/components/stat-card/src/RsStatCard.impl.js +106 -12
  196. package/dist/components/stat-card/src/RsStatCard.js +1 -1
  197. package/dist/components/stat-card/src/stat-card-utils.d.ts +39 -0
  198. package/dist/components/stat-card/src/stat-card-utils.js +113 -0
  199. package/dist/components/steps/index.d.ts +1 -1
  200. package/dist/components/steps/src/RsSteps.css +158 -37
  201. package/dist/components/steps/src/RsSteps.d.ts +69 -5
  202. package/dist/components/steps/src/RsSteps.impl.js +168 -28
  203. package/dist/components/steps/src/RsSteps.js +1 -1
  204. package/dist/components/steps/src/steps-utils.d.ts +51 -1
  205. package/dist/components/steps/src/steps-utils.js +67 -1
  206. package/dist/components/table/src/RsTable.impl.js +4 -2
  207. package/dist/components/table/src/composables/useRsTableContextMenu.d.ts +16 -0
  208. package/dist/components/table/src/composables/useRsTableContextMenu.js +1 -1
  209. package/dist/components/table/src/composables/useRsTableEngine.js +6 -2
  210. package/dist/components/table/src/composables/useRsTableScrollLayout.js +2 -0
  211. package/dist/components/table/src/composables/useRsTableShell.d.ts +16 -0
  212. package/dist/components/table/src/rs-table-props.d.ts +1 -1
  213. package/dist/components/table/src/rs-table-props.js +0 -1
  214. package/dist/components/table/src/table-body/RsTableBody.impl.js +1 -0
  215. package/dist/components/table/src/table-body/RsTableCell.impl.js +1 -1
  216. package/dist/components/table/src/table-body/RsTableCellEditor.impl.js +10 -2
  217. package/dist/components/table/src/table-body/RsTableColGroup.impl.js +1 -0
  218. package/dist/components/table/src/table-footer/RsTableSummaryRow.impl.js +1 -0
  219. package/dist/components/table/src/table-header/RsTableHeader.impl.js +1 -0
  220. package/dist/components/table/src/utils/table-utils.d.ts +10 -6
  221. package/dist/components/table/src/utils/table-utils.js +27 -25
  222. package/dist/components/table/style/rs-table.css +86 -28
  223. package/dist/components/tabs/index.d.ts +2 -2
  224. package/dist/components/tabs/src/RsTabs.css +225 -101
  225. package/dist/components/tabs/src/RsTabs.d.ts +37 -8
  226. package/dist/components/tabs/src/RsTabs.impl.js +400 -270
  227. package/dist/components/tabs/src/tabs-utils.d.ts +41 -2
  228. package/dist/components/tabs/src/tabs-utils.js +55 -1
  229. package/dist/components/terminal/index.d.ts +1 -1
  230. package/dist/components/terminal/src/RsTerminal.css +60 -37
  231. package/dist/components/terminal/src/RsTerminal.d.ts +36 -4
  232. package/dist/components/terminal/src/RsTerminal.impl.js +288 -68
  233. package/dist/components/terminal/src/RsTerminal.js +1 -1
  234. package/dist/components/terminal/src/terminal-utils.d.ts +42 -4
  235. package/dist/components/terminal/src/terminal-utils.js +113 -10
  236. package/dist/components/textarea/src/RsTextarea.d.ts +1 -1
  237. package/dist/components/time-picker/src/RsTimePicker.d.ts +2 -2
  238. package/dist/components/toaster/src/RsToaster.css +156 -203
  239. package/dist/components/toaster/src/RsToaster.d.ts +32 -2
  240. package/dist/components/toaster/src/RsToaster.impl.js +309 -34
  241. package/dist/components/toaster/src/toast-store.d.ts +95 -0
  242. package/dist/components/toaster/src/toast-store.js +177 -0
  243. package/dist/components/toaster/src/toast-utils.d.ts +60 -0
  244. package/dist/components/toaster/src/toast-utils.js +86 -0
  245. package/dist/components/toolbar/index.d.ts +1 -1
  246. package/dist/components/toolbar/src/RsToolbar.css +206 -32
  247. package/dist/components/toolbar/src/RsToolbar.d.ts +41 -16
  248. package/dist/components/toolbar/src/RsToolbar.impl.js +146 -18
  249. package/dist/components/toolbar/src/RsToolbar.js +2 -1
  250. package/dist/components/toolbar/src/toolbar-utils.d.ts +20 -0
  251. package/dist/components/toolbar/src/toolbar-utils.js +105 -0
  252. package/dist/components/tooltip/index.d.ts +1 -0
  253. package/dist/components/tooltip/src/RsTooltip.css +104 -26
  254. package/dist/components/tooltip/src/RsTooltip.d.ts +38 -16
  255. package/dist/components/tooltip/src/RsTooltip.impl.js +420 -51
  256. package/dist/components/tooltip/src/RsTooltip.js +2 -1
  257. package/dist/components/tooltip/src/RsTooltipProvider.d.ts +4 -4
  258. package/dist/components/tooltip/src/RsTooltipProvider.impl.js +51 -14
  259. package/dist/components/tooltip/src/tooltip-utils.d.ts +30 -0
  260. package/dist/components/tooltip/src/tooltip-utils.js +23 -0
  261. package/dist/components/tree/index.d.ts +2 -2
  262. package/dist/components/tree/src/RsTree.css +84 -75
  263. package/dist/components/tree/src/RsTree.d.ts +20 -20
  264. package/dist/components/tree/src/RsTree.impl.js +292 -66
  265. package/dist/components/tree/src/RsTree.js +1 -1
  266. package/dist/components/tree/src/tree-utils.d.ts +22 -0
  267. package/dist/components/tree/src/tree-utils.js +18 -4
  268. package/dist/components/tree-select/src/RsTreeSelect.d.ts +1 -1
  269. package/dist/components/virtual-list/index.d.ts +1 -1
  270. package/dist/components/virtual-list/src/RsVirtualList.css +64 -9
  271. package/dist/components/virtual-list/src/RsVirtualList.d.ts +31 -5
  272. package/dist/components/virtual-list/src/RsVirtualList.impl.js +425 -76
  273. package/dist/components/virtual-list/src/RsVirtualList.js +1 -1
  274. package/dist/components/virtual-list/src/virtual-list-utils.d.ts +64 -1
  275. package/dist/components/virtual-list/src/virtual-list-utils.js +215 -1
  276. package/dist/composables/useRsLoadingBar.d.ts +2 -5
  277. package/dist/composables/useRsLoadingBar.js +21 -5
  278. package/dist/composables/useRsTabsNav.d.ts +3 -1
  279. package/dist/composables/useRsTabsNav.js +96 -28
  280. package/dist/composables/useRsToast.d.ts +11 -13
  281. package/dist/composables/useRsToast.js +66 -17
  282. package/dist/index.d.ts +30 -21
  283. package/dist/index.js +14 -0
  284. package/dist/locale/apply.js +6 -1
  285. package/dist/locale/messages.js +128 -2
  286. package/dist/styles.css +465 -808
  287. package/dist/theme/brand.example.css +3 -2
  288. package/dist/vite-plugins/niuma-ui-host.js +1 -1
  289. package/package.json +2 -5
  290. package/dist/components/_shared/src/reka.d.ts +0 -2
  291. package/dist/components/_shared/src/reka.js +0 -2
@@ -1,12 +1,15 @@
1
- import { readCodeFontFamily, readCodeFontSizePx, readCssVar } from "../../../theme/css-token.js";
1
+ import { useRsI18n } from "../../../composables/useRsI18n.js";
2
+ import { rsRadiusCss, useResolvedRsRadius } from "../../_shared/src/resolve-radius.js";
2
3
  /* empty css */
3
4
  import { applyMonacoDebugDecorations } from "../../../monaco/debug-decorations2.js";
4
- import "../../../monaco/languages/types.js";
5
5
  import { ensureMongodbShellLanguage } from "../../../monaco/languages/mongodb-shell.js";
6
- import { createElementBlock, defineComponent, mergeModels, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, ref, useModel, watch } from "vue";
6
+ import { RS_MONACO_SCHEMA_PREFIX, applySharedMonacoTheme, completionLanguages, completionReplaceRange, createMonacoModelUri, isManagedSqlDialect, mergeMonacoEditorOptions, mergeMonacoJsonSchemas, monacoMotionOptions, prefersReducedMotion, readDocumentRsTheme, readMonacoMetrics, readMonacoThemeColors, resolveCompletionPrefix, resolveMonacoHeight, resolveMonacoThemeName, setOwnedMonacoJsonSchema, subscribeDocumentTheme, subscribeReducedMotion, syncMonacoCompletionProvider } from "./monaco-editor-utils.js";
7
+ import { computed, createElementBlock, defineComponent, mergeModels, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, ref, useId, useModel, watch } from "vue";
7
8
  import * as monaco from "monaco-editor";
8
9
  //#region src/components/monaco-editor/src/RsMonacoEditor.vue?vue&type=script&setup=true&lang.ts
10
+ var _hoisted_1 = ["id", "aria-disabled"];
9
11
  var RsMonacoEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
+ name: "RsMonacoEditor",
10
13
  __name: "RsMonacoEditor",
11
14
  props: /*@__PURE__*/ mergeModels({
12
15
  language: { default: "json" },
@@ -15,6 +18,10 @@ var RsMonacoEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
15
18
  type: Boolean,
16
19
  default: false
17
20
  },
21
+ disabled: {
22
+ type: Boolean,
23
+ default: false
24
+ },
18
25
  theme: { default: "auto" },
19
26
  minimap: {
20
27
  type: Boolean,
@@ -30,6 +37,7 @@ var RsMonacoEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
30
37
  type: Boolean,
31
38
  default: false
32
39
  },
40
+ radius: {},
33
41
  jsonSchema: {},
34
42
  snippets: {},
35
43
  completionRequest: {},
@@ -41,26 +49,54 @@ var RsMonacoEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
41
49
  ","
42
50
  ] },
43
51
  completionPrefixResolver: {},
44
- options: {}
52
+ options: {},
53
+ placeholder: {},
54
+ ariaLabel: {},
55
+ id: {},
56
+ contextMenu: {
57
+ type: Boolean,
58
+ default: true
59
+ }
45
60
  }, {
46
61
  "modelValue": { default: "" },
47
62
  "modelModifiers": {}
48
63
  }),
49
- emits: /*@__PURE__*/ mergeModels(["glyphMarginClick"], ["update:modelValue"]),
64
+ emits: /*@__PURE__*/ mergeModels([
65
+ "glyphMarginClick",
66
+ "focus",
67
+ "blur",
68
+ "ready",
69
+ "contextmenu"
70
+ ], ["update:modelValue"]),
50
71
  setup(__props, { expose: __expose, emit: __emit }) {
51
72
  const props = __props;
52
73
  const emit = __emit;
53
74
  const model = useModel(__props, "modelValue");
75
+ const { t } = useRsI18n();
76
+ const autoId = useId();
77
+ const rootId = computed(() => props.id || autoId);
78
+ const resolvedAriaLabel = computed(() => props.ariaLabel || t("monaco.label"));
79
+ const resolvedRadius = useResolvedRsRadius(() => props.radius, "md");
80
+ const frameStyle = computed(() => ({
81
+ height: resolveMonacoHeight(props.height),
82
+ "--rs-monaco-radius": props.embedded ? "inherit" : rsRadiusCss(resolvedRadius.value)
83
+ }));
54
84
  const editorEl = ref(null);
55
85
  let editor = null;
56
86
  let editorModel = null;
57
- /** 每个实例的唯一 schema URI,用于 fileMatch 精确匹配,避免全局污染 */
87
+ /** 每个 JSON 实例的唯一 schema URI,用于 fileMatch 精确匹配 */
58
88
  let schemaUri = "";
59
- let snippetDisposable = null;
89
+ let contentDisposable = null;
90
+ let focusDisposable = null;
91
+ let blurDisposable = null;
60
92
  let glyphClickDisposable = null;
93
+ let contextMenuDisposable = null;
61
94
  let debugDecoIds = [];
62
95
  let suppressChange = false;
63
96
  let unmounted = false;
97
+ let completionGeneration = 0;
98
+ let unsubscribeTheme = null;
99
+ let unsubscribeMotion = null;
64
100
  function syncDebugDecorations() {
65
101
  if (!editor || !props.glyphMargin) {
66
102
  if (editor && debugDecoIds.length) debugDecoIds = editor.deltaDecorations(debugDecoIds, []);
@@ -75,54 +111,49 @@ var RsMonacoEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
75
111
  glyphClickDisposable?.dispose();
76
112
  glyphClickDisposable = null;
77
113
  if (!editor || !props.glyphMargin) return;
78
- glyphClickDisposable = editor.onMouseDown((e) => {
79
- if (e.target.type !== monaco.editor.MouseTargetType.GUTTER_GLYPH_MARGIN) return;
80
- const line = e.target.position?.lineNumber;
114
+ glyphClickDisposable = editor.onMouseDown((event) => {
115
+ if (event.target.type !== monaco.editor.MouseTargetType.GUTTER_GLYPH_MARGIN) return;
116
+ const line = event.target.position?.lineNumber;
81
117
  if (!line) return;
82
118
  emit("glyphMarginClick", line);
83
119
  });
84
120
  }
85
- function resolveTheme() {
86
- if (props.theme !== "auto") return props.theme;
87
- return document.documentElement.dataset["rsTheme"] === "light" ? "light" : "vs-dark";
88
- }
89
- function applyTheme() {
90
- monaco.editor.setTheme(resolveTheme());
91
- }
92
- /**
93
- * 将当前 jsonSchema 应用到 JSON Language Defaults。
94
- * Monaco v0.55+ 使用顶层 `monaco.json` 命名空间(原 `monaco.languages.json` 已废弃)。
95
- * 每实例使用独立 schemaUri,通过 fileMatch 精确绑定,不污染其他编辑器。
96
- */
97
- function applyJsonSchema() {
98
- if (props.language !== "json") return;
99
- const defaults = monaco.json.jsonDefaults;
100
- const existing = defaults.diagnosticsOptions;
101
- const schemas = (existing.schemas ?? []).filter((s) => s.uri !== schemaUri);
102
- if (props.jsonSchema && schemaUri) schemas.push({
103
- uri: schemaUri,
104
- fileMatch: [schemaUri],
105
- schema: props.jsonSchema
106
- });
107
- defaults.setDiagnosticsOptions({
108
- ...existing,
109
- validate: true,
110
- schemas
121
+ function bindContextMenu() {
122
+ contextMenuDisposable?.dispose();
123
+ contextMenuDisposable = null;
124
+ if (!editor) return;
125
+ contextMenuDisposable = editor.onContextMenu((event) => {
126
+ if (!editor?.getOption(monaco.editor.EditorOption.contextmenu)) {
127
+ event.event.preventDefault();
128
+ event.event.stopPropagation();
129
+ }
130
+ const position = event.target.position;
131
+ const selection = editor?.getSelection();
132
+ const selectedText = position && selection && editorModel && !selection.isEmpty() && selection.containsPosition(position) ? editorModel.getValueInRange(selection) : "";
133
+ emit("contextmenu", {
134
+ line: position?.lineNumber ?? 0,
135
+ column: position?.column ?? 0,
136
+ selectedText,
137
+ x: event.event.browserEvent.clientX,
138
+ y: event.event.browserEvent.clientY
139
+ });
111
140
  });
112
141
  }
113
- function removeJsonSchema() {
114
- if (!schemaUri) return;
142
+ function publishJsonSchemas() {
115
143
  const defaults = monaco.json.jsonDefaults;
116
144
  const existing = defaults.diagnosticsOptions;
117
- const schemas = (existing.schemas ?? []).filter((s) => s.uri !== schemaUri);
145
+ const schemas = mergeMonacoJsonSchemas(existing.schemas);
146
+ const owned = schemas.some((item) => item.uri.startsWith(RS_MONACO_SCHEMA_PREFIX));
118
147
  defaults.setDiagnosticsOptions({
119
148
  ...existing,
149
+ ...owned ? { validate: true } : {},
120
150
  schemas
121
151
  });
122
152
  }
123
- function disposeSnippets() {
124
- snippetDisposable?.dispose();
125
- snippetDisposable = null;
153
+ function applyJsonSchema() {
154
+ if (props.language === "json" && props.jsonSchema && schemaUri) setOwnedMonacoJsonSchema(schemaUri, props.jsonSchema);
155
+ else if (schemaUri) setOwnedMonacoJsonSchema(schemaUri, null);
156
+ publishJsonSchemas();
126
157
  }
127
158
  function completionKind(kind) {
128
159
  switch (kind) {
@@ -134,59 +165,33 @@ var RsMonacoEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
134
165
  default: return monaco.languages.CompletionItemKind.Snippet;
135
166
  }
136
167
  }
137
- function completionPrefix(line) {
138
- if (props.completionPrefixResolver) return props.completionPrefixResolver(line);
139
- let start = line.length;
140
- while (start > 0 && /[\w$.-]/.test(line[start - 1] ?? "")) start -= 1;
141
- return line.slice(start);
142
- }
143
- function isManagedSqlDialect(language) {
144
- return language === "mysql" || language === "dameng" || language === "kingbase" || language === "postgresql" || language === "clickhouse" || language === "sqlite" || language === "sqlserver" || language === "oracle";
145
- }
146
- /** 合并业务侧 options;suggest 做一层浅合并,避免整对象覆盖默认。 */
147
- function mergeEditorOptions(overrides) {
148
- if (!overrides) return {};
149
- const out = { ...overrides };
150
- if (overrides.suggest && typeof overrides.suggest === "object" && !Array.isArray(overrides.suggest)) out.suggest = {
151
- snippetsPreventQuickSuggestions: false,
152
- filterGraceful: !isManagedSqlDialect(props.language),
153
- matchOnWordStartOnly: isManagedSqlDialect(props.language),
154
- ...overrides.suggest
155
- };
156
- return out;
157
- }
158
- function completionLanguages() {
159
- if (isManagedSqlDialect(props.language)) return [];
160
- if (props.language === "javascript" || props.language === "typescript" || props.language === "mongodb-shell" || props.language === "plaintext" || props.language === "sql" || props.language === "yaml") return [props.language];
161
- if (props.language === "json") return ["json"];
162
- return [];
163
- }
164
168
  function applySnippets() {
165
- disposeSnippets();
166
- const languages = completionLanguages();
167
- if (languages.length === 0 || !editorModel || !props.snippets?.length && !props.completionRequest) return;
168
- const modelUri = editorModel.uri.toString();
169
- for (const language of languages) snippetDisposable = monaco.languages.registerCompletionItemProvider(language, {
170
- triggerCharacters: props.completionTriggerCharacters,
171
- async provideCompletionItems(model, position, context, token) {
172
- if (model.uri.toString() !== modelUri) return { suggestions: [] };
173
- const prefix = completionPrefix(model.getLineContent(position.lineNumber).slice(0, position.column - 1));
174
- const startColumn = position.column - prefix.length;
175
- const range = {
176
- startLineNumber: position.lineNumber,
177
- endLineNumber: position.lineNumber,
178
- startColumn,
179
- endColumn: position.column
180
- };
169
+ const uri = editorModel?.uri.toString() ?? "";
170
+ const languages = completionLanguages(props.language);
171
+ const enabled = languages.length > 0 && Boolean(props.snippets?.length || props.completionRequest);
172
+ if (!uri || !enabled) {
173
+ if (uri) syncMonacoCompletionProvider(monaco, uri, null);
174
+ return;
175
+ }
176
+ const language = languages[0];
177
+ if (!language) return;
178
+ const generation = completionGeneration;
179
+ syncMonacoCompletionProvider(monaco, uri, {
180
+ language,
181
+ triggers: props.completionTriggerCharacters ?? [],
182
+ provide: async (textModel, position, context, token) => {
183
+ if (generation !== completionGeneration || unmounted || token.isCancellationRequested) return { suggestions: [] };
184
+ const prefix = resolveCompletionPrefix(textModel.getLineContent(position.lineNumber).slice(0, position.column - 1), props.completionPrefixResolver);
185
+ const range = completionReplaceRange(position.lineNumber, position.column, prefix);
181
186
  const dynamic = props.completionRequest ? await props.completionRequest({
182
- text: model.getValue(),
183
- offset: model.getOffsetAt(position),
187
+ text: textModel.getValue(),
188
+ offset: textModel.getOffsetAt(position),
184
189
  line: position.lineNumber,
185
190
  column: position.column,
186
191
  prefix,
187
192
  triggerCharacter: context.triggerCharacter
188
193
  }) : [];
189
- if (token.isCancellationRequested) return { suggestions: [] };
194
+ if (generation !== completionGeneration || unmounted || token.isCancellationRequested) return { suggestions: [] };
190
195
  return {
191
196
  incomplete: true,
192
197
  suggestions: [...props.snippets ?? [], ...dynamic].map((snippet) => ({
@@ -205,50 +210,91 @@ var RsMonacoEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
205
210
  }
206
211
  });
207
212
  }
213
+ function applyTheme() {
214
+ if (!editor || !editorEl.value || unmounted) return;
215
+ const host = editorEl.value;
216
+ const metrics = readMonacoMetrics(host);
217
+ const motion = monacoMotionOptions(prefersReducedMotion());
218
+ editor.updateOptions({
219
+ fontFamily: metrics.fontFamily,
220
+ fontSize: metrics.fontSize,
221
+ lineHeight: metrics.lineHeight,
222
+ smoothScrolling: motion.smoothScrolling,
223
+ cursorSmoothCaretAnimation: motion.cursorSmoothCaretAnimation,
224
+ ariaLabel: resolvedAriaLabel.value
225
+ });
226
+ const overrides = mergeMonacoEditorOptions(props.options, props.language);
227
+ if (typeof overrides.theme === "string") {
228
+ monaco.editor.setTheme(overrides.theme);
229
+ return;
230
+ }
231
+ applySharedMonacoTheme(monaco, resolveMonacoThemeName(props.theme, readDocumentRsTheme()), readMonacoThemeColors(host));
232
+ }
208
233
  function disposeEditor() {
209
- removeJsonSchema();
210
- disposeSnippets();
234
+ completionGeneration += 1;
235
+ const uri = editorModel?.uri.toString() ?? "";
236
+ if (uri) syncMonacoCompletionProvider(monaco, uri, null);
237
+ const hadSchema = Boolean(schemaUri);
238
+ if (schemaUri) setOwnedMonacoJsonSchema(schemaUri, null);
239
+ contentDisposable?.dispose();
240
+ contentDisposable = null;
241
+ focusDisposable?.dispose();
242
+ focusDisposable = null;
243
+ blurDisposable?.dispose();
244
+ blurDisposable = null;
211
245
  glyphClickDisposable?.dispose();
212
246
  glyphClickDisposable = null;
247
+ contextMenuDisposable?.dispose();
248
+ contextMenuDisposable = null;
213
249
  debugDecoIds = [];
214
250
  editor?.dispose();
215
251
  editorModel?.dispose();
216
252
  editor = null;
217
253
  editorModel = null;
254
+ schemaUri = "";
255
+ if (hadSchema) publishJsonSchemas();
218
256
  }
219
257
  function initEditor() {
220
258
  if (!editorEl.value || unmounted) return;
221
259
  disposeEditor();
222
- if (props.language === "mongodb-shell") ensureMongodbShellLanguage(monaco);
223
- schemaUri = `inmemory://rs-monaco/${crypto.randomUUID()}.json`;
224
- editorModel = monaco.editor.createModel(model.value, props.language, props.language === "json" ? monaco.Uri.parse(schemaUri) : void 0);
225
260
  const host = editorEl.value;
226
- const fontSize = readCodeFontSizePx(host);
227
- const lineHeightRatio = Number.parseFloat(readCssVar("--rs-code-line-height", host) || readCssVar("--rs-line-height-relaxed", host)) || 1.625;
228
- editor = monaco.editor.create(editorEl.value, {
261
+ if (!host || unmounted) return;
262
+ if (props.language === "mongodb-shell") ensureMongodbShellLanguage(monaco);
263
+ const metrics = readMonacoMetrics(host);
264
+ const motion = monacoMotionOptions(prefersReducedMotion());
265
+ const overrides = mergeMonacoEditorOptions(props.options, props.language);
266
+ const forcedTheme = typeof overrides.theme === "string" ? overrides.theme : "";
267
+ const themeName = forcedTheme || resolveMonacoThemeName(props.theme, readDocumentRsTheme());
268
+ if (!forcedTheme) applySharedMonacoTheme(monaco, themeName, readMonacoThemeColors(host));
269
+ schemaUri = props.language === "json" ? createMonacoModelUri() : "";
270
+ editorModel = monaco.editor.createModel(model.value, props.language, schemaUri ? monaco.Uri.parse(schemaUri) : void 0);
271
+ editor = monaco.editor.create(host, {
229
272
  model: editorModel,
230
- theme: resolveTheme(),
231
- readOnly: props.readonly,
273
+ theme: themeName,
274
+ readOnly: props.readonly || props.disabled,
275
+ domReadOnly: props.disabled,
276
+ ariaLabel: resolvedAriaLabel.value,
277
+ placeholder: props.placeholder ?? "",
232
278
  automaticLayout: true,
233
279
  minimap: { enabled: props.minimap },
234
280
  scrollBeyondLastLine: false,
235
- fontFamily: readCodeFontFamily(host),
236
- fontSize,
237
- lineHeight: Math.round(fontSize * lineHeightRatio),
281
+ fontFamily: metrics.fontFamily,
282
+ fontSize: metrics.fontSize,
283
+ lineHeight: metrics.lineHeight,
238
284
  tabSize: 2,
239
285
  wordWrap: "on",
240
286
  bracketPairColorization: { enabled: true },
241
287
  padding: {
242
- top: 8,
243
- bottom: 8
288
+ top: metrics.padding,
289
+ bottom: metrics.padding
244
290
  },
245
291
  renderLineHighlight: "line",
246
- smoothScrolling: true,
247
- cursorSmoothCaretAnimation: "on",
292
+ smoothScrolling: motion.smoothScrolling,
293
+ cursorSmoothCaretAnimation: motion.cursorSmoothCaretAnimation,
248
294
  folding: true,
249
295
  glyphMargin: props.glyphMargin,
250
296
  lineNumbersMinChars: 3,
251
- lineDecorationsWidth: props.glyphMargin ? 16 : 4,
297
+ lineDecorationsWidth: props.glyphMargin ? metrics.glyphWidth : metrics.decorationWidth,
252
298
  overviewRulerLanes: 0,
253
299
  hideCursorInOverviewRuler: true,
254
300
  quickSuggestions: props.language === "mongodb-shell" ? {
@@ -264,67 +310,85 @@ var RsMonacoEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
264
310
  matchOnWordStartOnly: isManagedSqlDialect(props.language)
265
311
  },
266
312
  scrollbar: {
267
- verticalScrollbarSize: 8,
268
- horizontalScrollbarSize: 8
313
+ verticalScrollbarSize: metrics.scrollbarSize,
314
+ horizontalScrollbarSize: metrics.scrollbarSize
269
315
  },
270
316
  fixedOverflowWidgets: true,
271
- ...mergeEditorOptions(props.options)
317
+ ...overrides,
318
+ contextmenu: props.contextMenu
272
319
  });
273
- editorModel.onDidChangeContent(() => {
320
+ contentDisposable = editorModel.onDidChangeContent(() => {
274
321
  if (suppressChange) return;
275
322
  const value = editorModel?.getValue() ?? "";
276
323
  if (value !== model.value) model.value = value;
277
324
  });
325
+ focusDisposable = editor.onDidFocusEditorText(() => emit("focus"));
326
+ blurDisposable = editor.onDidBlurEditorText(() => emit("blur"));
278
327
  applyJsonSchema();
279
328
  applySnippets();
280
329
  bindGlyphClick();
330
+ bindContextMenu();
281
331
  syncDebugDecorations();
332
+ emit("ready");
282
333
  }
283
- let themeObserver = null;
284
334
  onMounted(() => {
285
335
  unmounted = false;
286
336
  initEditor();
287
- themeObserver = new MutationObserver(applyTheme);
288
- themeObserver.observe(document.documentElement, {
289
- attributes: true,
290
- attributeFilter: ["data-rs-theme"]
291
- });
337
+ unsubscribeTheme = subscribeDocumentTheme(() => applyTheme());
338
+ unsubscribeMotion = subscribeReducedMotion(() => applyTheme());
292
339
  });
293
340
  onUnmounted(() => {
294
341
  unmounted = true;
295
- glyphClickDisposable?.dispose();
296
- glyphClickDisposable = null;
297
- debugDecoIds = [];
342
+ unsubscribeTheme?.();
343
+ unsubscribeTheme = null;
344
+ unsubscribeMotion?.();
345
+ unsubscribeMotion = null;
298
346
  disposeEditor();
299
- themeObserver?.disconnect();
300
- themeObserver = null;
301
347
  });
302
348
  watch(() => model.value, (val) => {
303
- if (!editorModel) return;
304
- if (editorModel.getValue() === val) return;
349
+ if (!editorModel || editorModel.getValue() === val) return;
305
350
  suppressChange = true;
306
- editorModel.setValue(val);
307
- suppressChange = false;
351
+ try {
352
+ editorModel.setValue(val);
353
+ } finally {
354
+ suppressChange = false;
355
+ }
356
+ });
357
+ watch(() => [props.readonly, props.disabled], ([readonly, disabled]) => {
358
+ editor?.updateOptions({
359
+ readOnly: readonly || disabled,
360
+ domReadOnly: disabled
361
+ });
308
362
  });
309
- watch(() => props.readonly, (val) => editor?.updateOptions({ readOnly: val }));
310
363
  watch(() => props.minimap, (val) => editor?.updateOptions({ minimap: { enabled: val } }));
364
+ watch(() => props.contextMenu, (val) => editor?.updateOptions({ contextmenu: val }));
365
+ watch(resolvedAriaLabel, (label) => editor?.updateOptions({ ariaLabel: label }));
366
+ watch(() => props.placeholder, (value) => editor?.updateOptions({ placeholder: value ?? "" }));
311
367
  watch(() => props.glyphMargin, (val) => {
368
+ const metrics = readMonacoMetrics(editorEl.value);
312
369
  editor?.updateOptions({
313
370
  glyphMargin: val,
314
- lineDecorationsWidth: val ? 16 : 4
371
+ lineDecorationsWidth: val ? metrics.glyphWidth : metrics.decorationWidth
315
372
  });
316
373
  bindGlyphClick();
317
374
  syncDebugDecorations();
318
375
  });
319
- watch(() => [props.debugCurrentLine, props.debugBreakpoints], () => {
320
- syncDebugDecorations();
321
- }, { deep: true });
376
+ watch(() => [props.debugCurrentLine, props.debugBreakpoints], () => syncDebugDecorations(), { deep: true });
322
377
  watch(() => props.language, () => initEditor());
378
+ watch(() => props.theme, () => applyTheme());
323
379
  watch(() => props.jsonSchema, () => applyJsonSchema(), { deep: true });
324
380
  watch(() => props.snippets, () => applySnippets(), { deep: true });
325
381
  watch(() => props.completionRequest, () => applySnippets());
326
382
  watch(() => props.completionTriggerCharacters, () => applySnippets(), { deep: true });
327
383
  watch(() => props.completionPrefixResolver, () => applySnippets());
384
+ watch(() => props.options, () => {
385
+ if (!editor || !props.options) return;
386
+ editor.updateOptions({
387
+ ...mergeMonacoEditorOptions(props.options, props.language),
388
+ contextmenu: props.contextMenu
389
+ });
390
+ applyTheme();
391
+ });
328
392
  __expose({
329
393
  /** 格式化文档(等价于 Shift+Alt+F) */
330
394
  format() {
@@ -337,15 +401,30 @@ var RsMonacoEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
337
401
  revealLine(line) {
338
402
  if (!editor || line <= 0) return;
339
403
  editor.revealLineInCenter(line);
404
+ },
405
+ focus() {
406
+ editor?.focus();
407
+ },
408
+ blur() {
409
+ const node = editor?.getDomNode();
410
+ if (!node) return;
411
+ const active = node.ownerDocument.activeElement;
412
+ if (active instanceof HTMLElement && node.contains(active)) active.blur();
340
413
  }
341
414
  });
342
415
  return (_ctx, _cache) => {
343
416
  return openBlock(), createElementBlock("div", {
417
+ id: rootId.value,
344
418
  ref_key: "editorEl",
345
419
  ref: editorEl,
346
- class: normalizeClass(["rs-monaco", { "rs-monaco--embedded": __props.embedded }]),
347
- style: normalizeStyle({ height: typeof __props.height === "number" ? `${__props.height}px` : __props.height })
348
- }, null, 6);
420
+ class: normalizeClass(["rs-monaco", {
421
+ "rs-monaco--embedded": __props.embedded,
422
+ "rs-monaco--disabled": __props.disabled
423
+ }]),
424
+ style: normalizeStyle(frameStyle.value),
425
+ dir: "ltr",
426
+ "aria-disabled": __props.disabled || void 0
427
+ }, null, 14, _hoisted_1);
349
428
  };
350
429
  }
351
430
  });
@@ -4,6 +4,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
4
4
  import RsMonacoEditor_vue_vue_type_script_setup_true_lang_default from "./RsMonacoEditor.impl.js";
5
5
 
6
6
  //#region src/components/monaco-editor/src/RsMonacoEditor.vue
7
- var RsMonacoEditor_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsMonacoEditor_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-1366fa31"]]);
7
+ var RsMonacoEditor_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsMonacoEditor_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-b3d8e08a"]]);
8
8
  //#endregion
9
9
  export { RsMonacoEditor_default as default };
@@ -0,0 +1,126 @@
1
+ import type * as Monaco from 'monaco-editor';
2
+ /** 实例级补全片段(仅作用于当前编辑器 Model)。 */
3
+ export interface MonacoCompletionSnippet {
4
+ label: string;
5
+ insertText: string;
6
+ detail?: string;
7
+ documentation?: string;
8
+ filterText?: string;
9
+ sortText?: string;
10
+ kind?: 'snippet' | 'keyword' | 'property' | 'field' | 'function' | 'value';
11
+ preselect?: boolean;
12
+ }
13
+ /** MonacoCompletionContext 描述一次补全请求的编辑器上下文。 */
14
+ export interface MonacoCompletionContext {
15
+ text: string;
16
+ offset: number;
17
+ line: number;
18
+ column: number;
19
+ prefix: string;
20
+ triggerCharacter?: string;
21
+ }
22
+ /** MonacoCompletionRequest 按当前文本和光标位置返回实例级候选。 */
23
+ export type MonacoCompletionRequest = (context: MonacoCompletionContext) => MonacoCompletionSnippet[] | Promise<MonacoCompletionSnippet[]>;
24
+ /** 补全前缀解析:由业务侧按方言注入,默认按标识符切词。 */
25
+ export type MonacoCompletionPrefixResolver = (linePrefix: string) => string;
26
+ /**
27
+ * RsMonacoEditor 模板 ref 请用此类型。
28
+ * 不要写 `InstanceType<typeof RsMonacoEditor>`:组件实例类型过深,vue-tsc 会报 Excessive stack depth。
29
+ */
30
+ export interface RsMonacoEditorExpose {
31
+ format: () => void;
32
+ getEditor: () => Monaco.editor.IStandaloneCodeEditor | null;
33
+ revealLine: (line: number) => void;
34
+ focus: () => void;
35
+ blur: () => void;
36
+ }
37
+ /** 右键命中。行、列 1-based;点在滚动条等无光标处时为 0。 */
38
+ export interface RsMonacoEditorContextMenu {
39
+ line: number;
40
+ column: number;
41
+ selectedText: string;
42
+ x: number;
43
+ y: number;
44
+ }
45
+ export type RsMonacoEditorInstance = RsMonacoEditorExpose;
46
+ /** `light` / `vs-dark` 是公开取值;实际主题名是带 token 色的 rs-light / rs-dark。 */
47
+ export type RsMonacoEditorTheme = 'auto' | 'vs-dark' | 'light';
48
+ export declare const RS_MONACO_THEME_LIGHT = "rs-light";
49
+ export declare const RS_MONACO_THEME_DARK = "rs-dark";
50
+ export declare const RS_MONACO_SCHEMA_PREFIX = "inmemory://rs-monaco/";
51
+ export interface MonacoJsonSchemaEntry {
52
+ uri: string;
53
+ fileMatch?: string[];
54
+ schema?: unknown;
55
+ }
56
+ export interface MonacoCompletionBinding {
57
+ language: string;
58
+ triggers: readonly string[];
59
+ provide: Monaco.languages.CompletionItemProvider['provideCompletionItems'];
60
+ }
61
+ /** Bridge LSP 接管补全;勿再注册实例级 Provider。 */
62
+ export declare function isManagedSqlDialect(language: string | undefined): boolean;
63
+ export declare function completionLanguages(language: string | undefined): string[];
64
+ export declare function resolveMonacoHeight(height: number | string | undefined): string;
65
+ /** 未写 data-rs-theme 时跟全库浅色,不把缺省当成深色。 */
66
+ export declare function readDocumentRsTheme(): 'light' | 'dark';
67
+ export declare function resolveMonacoThemeName(theme: RsMonacoEditorTheme | undefined, documentTheme: 'light' | 'dark'): string;
68
+ export declare function monacoThemeBase(themeName: string): 'vs' | 'vs-dark';
69
+ export declare function resolveMonacoLineHeight(fontSize: number, lineHeightRaw: string): number;
70
+ export declare function resolveCompletionPrefix(line: string, resolver?: MonacoCompletionPrefixResolver): string;
71
+ export declare function completionReplaceRange(lineNumber: number, column: number, prefix: string): {
72
+ startLineNumber: number;
73
+ endLineNumber: number;
74
+ startColumn: number;
75
+ endColumn: number;
76
+ };
77
+ /** 合并业务侧 options;suggest 做一层浅合并,避免整对象覆盖默认。 */
78
+ export declare function mergeMonacoEditorOptions(overrides: Record<string, unknown> | undefined, language: string | undefined): Record<string, unknown>;
79
+ export declare function prefersReducedMotion(): boolean;
80
+ export declare function monacoMotionOptions(reduced: boolean): {
81
+ smoothScrolling: boolean;
82
+ cursorSmoothCaretAnimation: 'on' | 'off';
83
+ };
84
+ /** Monaco 主题色只收 hex。rgb()/rgba() 在这里转成 #rrggbb / #rrggbbaa。 */
85
+ export declare function cssColorToHex(input: string): string | null;
86
+ declare const THEME_COLOR_IDS: {
87
+ readonly background: "editor.background";
88
+ readonly foreground: "editor.foreground";
89
+ readonly gutter: "editorGutter.background";
90
+ readonly gutterForeground: "editorLineNumber.foreground";
91
+ readonly lineHighlight: "editor.lineHighlightBackground";
92
+ readonly selection: "editor.selectionBackground";
93
+ readonly widget: "editorWidget.background";
94
+ readonly widgetBorder: "editorWidget.border";
95
+ };
96
+ export declare function buildMonacoThemeColors(raw: Partial<Record<keyof typeof THEME_COLOR_IDS, string>>): Record<string, string>;
97
+ export declare function readMonacoThemeColors(el?: HTMLElement | null): Record<string, string>;
98
+ export declare function readMonacoMetrics(el?: HTMLElement | null): {
99
+ fontFamily: string;
100
+ fontSize: number;
101
+ lineHeight: number;
102
+ padding: number;
103
+ scrollbarSize: number;
104
+ glyphWidth: number;
105
+ decorationWidth: number;
106
+ };
107
+ export declare function createMonacoModelUri(): string;
108
+ export declare function setOwnedMonacoJsonSchema(uri: string, schema: object | null): void;
109
+ /** 外部 schema 保留;本组件的 uri 只来自这份登记,避免两个编辑器交错写丢。 */
110
+ export declare function mergeMonacoJsonSchemas(existing: readonly MonacoJsonSchemaEntry[] | undefined): MonacoJsonSchemaEntry[];
111
+ export declare function resetOwnedMonacoJsonSchemasForTests(): void;
112
+ /** 多个编辑器共用一个 MutationObserver,最后一个卸载才断开。 */
113
+ export declare function subscribeDocumentTheme(listener: () => void): () => void;
114
+ export declare function resetDocumentThemeSubscriptionForTests(): void;
115
+ export declare function subscribeReducedMotion(listener: (reduced: boolean) => void): () => void;
116
+ /** defineTheme 可重复;setTheme 是进程级的,签名没变就不再刷。 */
117
+ export declare function applySharedMonacoTheme(monaco: MonacoNamespace, themeName: string, colors: Record<string, string>): void;
118
+ export declare function resetSharedMonacoThemeForTests(): void;
119
+ type MonacoNamespace = typeof import('monaco-editor');
120
+ /**
121
+ * 每种语言只注册一个 Provider,按 model uri 分发。
122
+ * 避免 N 个编辑器各挂一个、卸载时只丢掉最后一个。
123
+ */
124
+ export declare function syncMonacoCompletionProvider(monaco: MonacoNamespace, modelUri: string, binding: MonacoCompletionBinding | null): void;
125
+ export declare function resetMonacoCompletionProvidersForTests(): void;
126
+ export {};