niuma-ui 1.1.3 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -1
- package/package.json +5 -1
- package/src/__tests__/RsDialog.spec.ts +13 -0
- package/src/__tests__/RsIcon.spec.ts +14 -0
- package/src/__tests__/RsSelect.spec.ts +96 -0
- package/src/__tests__/RsTable.spec.ts +17 -0
- package/src/__tests__/createRsDialog.spec.ts +17 -4
- package/src/components/RsDialog.vue +14 -9
- package/src/components/RsMonacoEditor.vue +14 -4
- package/src/components/RsSelect.vue +10 -0
- package/src/components/RsTerminal.vue +182 -78
- package/src/components/dialog-utils.ts +3 -2
- package/src/components/table/rs-table.css +3 -3
- package/src/components/table-utils.ts +2 -2
- package/src/components/terminal-utils.ts +22 -0
- package/src/components/terminal-wheel.ts +32 -7
- package/src/components/use-rs-select.ts +17 -2
- package/src/composables/createRsDialog.ts +58 -7
- package/src/composables/useRsTableEditLayer.ts +1 -1
- package/src/composables/useTableCellTooltip.ts +4 -3
- package/src/dev/vite-xterm-deps.ts +8 -0
- package/src/icons/custom/postgres.ts +52 -0
- package/src/icons/lucide.ts +2 -0
- package/src/index.ts +3 -0
- package/src/monaco/index.ts +1 -0
- package/src/monaco/languages/index.ts +1 -0
- package/src/monaco/languages/types.ts +4 -0
- package/src/styles.css +15 -0
|
@@ -20,9 +20,10 @@ export interface RsDialogOpenOptions {
|
|
|
20
20
|
tone?: RsFeedbackTone
|
|
21
21
|
/**
|
|
22
22
|
* 布局。默认 window(工作窗)。
|
|
23
|
-
* confirm
|
|
23
|
+
* form:居中轻量表单/说明;confirm 仅作历史兼容(等同 form)。
|
|
24
|
+
* 确认/提示请用 rsConfirm / RsConfirmDialog。
|
|
24
25
|
*/
|
|
25
|
-
layout?: 'window' | 'confirm'
|
|
26
|
+
layout?: 'window' | 'form' | 'confirm'
|
|
26
27
|
showOverlay?: boolean
|
|
27
28
|
/** 遮罩不透明度 0–1 */
|
|
28
29
|
overlayOpacity?: number
|
|
@@ -79,6 +80,9 @@ function readDomLocale(): RsLocale {
|
|
|
79
80
|
return value === 'en-US' || value === 'zh-CN' ? value : defaultLocale
|
|
80
81
|
}
|
|
81
82
|
|
|
83
|
+
/** 命令式实例的销毁函数;测试收尾用 destroyAllRsDialogHosts 走正规 unmount。 */
|
|
84
|
+
const liveHosts = new Set<() => void>()
|
|
85
|
+
|
|
82
86
|
function mountHost(
|
|
83
87
|
render: () => unknown,
|
|
84
88
|
config?: { theme?: RsThemeMode; locale?: RsLocale },
|
|
@@ -102,13 +106,48 @@ function mountHost(
|
|
|
102
106
|
},
|
|
103
107
|
})
|
|
104
108
|
app.mount(container)
|
|
109
|
+
let destroyed = false
|
|
105
110
|
const destroy = () => {
|
|
106
|
-
|
|
111
|
+
if (destroyed) return
|
|
112
|
+
destroyed = true
|
|
113
|
+
liveHosts.delete(destroy)
|
|
114
|
+
try {
|
|
115
|
+
app.unmount()
|
|
116
|
+
} catch {
|
|
117
|
+
// Teleport 节点可能已被外部从 DOM 摘掉(测试误删 portal、宿主提前清理)
|
|
118
|
+
}
|
|
107
119
|
container.remove()
|
|
108
120
|
}
|
|
121
|
+
liveHosts.add(destroy)
|
|
109
122
|
return { app, container, destroy }
|
|
110
123
|
}
|
|
111
124
|
|
|
125
|
+
const pendingDestroyTimers = new Set<number>()
|
|
126
|
+
|
|
127
|
+
function scheduleHostDestroy(destroy: () => void): number {
|
|
128
|
+
const timer = window.setTimeout(() => {
|
|
129
|
+
pendingDestroyTimers.delete(timer)
|
|
130
|
+
destroy()
|
|
131
|
+
}, 200)
|
|
132
|
+
pendingDestroyTimers.add(timer)
|
|
133
|
+
return timer
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function clearHostDestroyTimer(timer: number | undefined): void {
|
|
137
|
+
if (timer == null) return
|
|
138
|
+
clearTimeout(timer)
|
|
139
|
+
pendingDestroyTimers.delete(timer)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** 立即销毁所有命令式对话框宿主。测试 afterEach 使用,避免拆 DOM 后再延迟 unmount。 */
|
|
143
|
+
export function destroyAllRsDialogHosts(): void {
|
|
144
|
+
for (const timer of [...pendingDestroyTimers]) {
|
|
145
|
+
clearTimeout(timer)
|
|
146
|
+
pendingDestroyTimers.delete(timer)
|
|
147
|
+
}
|
|
148
|
+
for (const destroy of [...liveHosts]) destroy()
|
|
149
|
+
}
|
|
150
|
+
|
|
112
151
|
function normalizeConfirmInput(
|
|
113
152
|
options: RsConfirmInput | undefined,
|
|
114
153
|
defaults: Partial<RsConfirmOptions>,
|
|
@@ -130,7 +169,15 @@ function rsConfirmCore(options: RsConfirmOptions = {}): Promise<RsConfirmResult>
|
|
|
130
169
|
const loading = ref(options.confirmLoading ?? false)
|
|
131
170
|
let settled = false
|
|
132
171
|
let confirmed = false
|
|
172
|
+
let closeTimer: number | undefined
|
|
133
173
|
const hasAsyncConfirm = typeof options.onConfirm === 'function'
|
|
174
|
+
let unmountHost = () => {}
|
|
175
|
+
|
|
176
|
+
const destroy = () => {
|
|
177
|
+
clearHostDestroyTimer(closeTimer)
|
|
178
|
+
closeTimer = undefined
|
|
179
|
+
unmountHost()
|
|
180
|
+
}
|
|
134
181
|
|
|
135
182
|
const settle = (value: boolean) => {
|
|
136
183
|
if (settled) return
|
|
@@ -138,11 +185,11 @@ function rsConfirmCore(options: RsConfirmOptions = {}): Promise<RsConfirmResult>
|
|
|
138
185
|
open.value = false
|
|
139
186
|
if (!value) options.onCancel?.()
|
|
140
187
|
// 等关闭帧后再销毁,避免动画被硬切
|
|
141
|
-
|
|
188
|
+
closeTimer = scheduleHostDestroy(destroy)
|
|
142
189
|
resolve(value)
|
|
143
190
|
}
|
|
144
191
|
|
|
145
|
-
|
|
192
|
+
unmountHost = mountHost(
|
|
146
193
|
() =>
|
|
147
194
|
h(
|
|
148
195
|
RsConfirmDialog,
|
|
@@ -200,7 +247,7 @@ function rsConfirmCore(options: RsConfirmOptions = {}): Promise<RsConfirmResult>
|
|
|
200
247
|
: undefined,
|
|
201
248
|
),
|
|
202
249
|
{ theme: options.theme, locale: options.locale },
|
|
203
|
-
)
|
|
250
|
+
).destroy
|
|
204
251
|
})
|
|
205
252
|
}
|
|
206
253
|
|
|
@@ -267,11 +314,13 @@ export const rsConfirm: RsConfirmApi = Object.assign(rsConfirmCore, {
|
|
|
267
314
|
/**
|
|
268
315
|
* 命令式打开 RsDialog;适合临时表单/说明层。
|
|
269
316
|
* 确认/危险提示请用 rsConfirm,不要传 layout: 'confirm'。
|
|
317
|
+
* 轻量表单/说明请用 layout: 'form'。
|
|
270
318
|
* 复杂长期状态仍建议声明式使用组件。
|
|
271
319
|
*/
|
|
272
320
|
export function openRsDialog(options: RsDialogOpenOptions = {}): RsDialogHandle {
|
|
273
321
|
const open = ref(true)
|
|
274
322
|
let destroyed = false
|
|
323
|
+
let closeTimer: number | undefined
|
|
275
324
|
let dialogExpose: { close?: (reason?: RsDialogCloseReason) => Promise<boolean> } | null = null
|
|
276
325
|
const layout = options.layout ?? 'window'
|
|
277
326
|
|
|
@@ -293,7 +342,7 @@ export function openRsDialog(options: RsDialogOpenOptions = {}): RsDialogHandle
|
|
|
293
342
|
'onUpdate:open': (value: boolean) => {
|
|
294
343
|
open.value = value
|
|
295
344
|
if (!value && !destroyed) {
|
|
296
|
-
|
|
345
|
+
closeTimer = scheduleHostDestroy(destroy)
|
|
297
346
|
}
|
|
298
347
|
},
|
|
299
348
|
title: options.title,
|
|
@@ -342,6 +391,8 @@ export function openRsDialog(options: RsDialogOpenOptions = {}): RsDialogHandle
|
|
|
342
391
|
function destroy(): void {
|
|
343
392
|
if (destroyed) return
|
|
344
393
|
destroyed = true
|
|
394
|
+
clearHostDestroyTimer(closeTimer)
|
|
395
|
+
closeTimer = undefined
|
|
345
396
|
unmount()
|
|
346
397
|
}
|
|
347
398
|
|
|
@@ -105,7 +105,7 @@ export function useRsTableEditLayer<T extends RsTableRowData>(
|
|
|
105
105
|
})
|
|
106
106
|
|
|
107
107
|
function cellTooltipEnabled(column: RsTableColumn<T>, _rowIndex: number): boolean {
|
|
108
|
-
return options.cellTooltip() && columnUsesSharedTooltip(column)
|
|
108
|
+
return options.cellTooltip() && columnUsesSharedTooltip(column)
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
function cellTooltipMode(column: RsTableColumn<T>, rowIndex: number): string | undefined {
|
|
@@ -23,10 +23,11 @@ function isHeaderTipHost(host: HTMLElement): boolean {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
function findTipHost(target: EventTarget | null): HTMLElement | null {
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
const el = target instanceof Element ? target : target instanceof Node ? target.parentElement : null
|
|
27
|
+
if (!el) return null
|
|
28
|
+
const header = el.closest(`[${RS_TABLE_HEADER_TIP_ATTR}]`)
|
|
28
29
|
if (header instanceof HTMLElement) return header
|
|
29
|
-
const cell =
|
|
30
|
+
const cell = el.closest(`[${RS_TABLE_TIP_ATTR}], .rs-table__cell-tip`)
|
|
30
31
|
return cell instanceof HTMLElement ? cell : null
|
|
31
32
|
}
|
|
32
33
|
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { defineComponent, h, type PropType } from 'vue'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* PostgreSQL 官方大象(Slonik)品牌 mark(仅图形,不含字样)。
|
|
5
|
+
* 路径来自 Simple Icons postgresql.svg(CC0 1.0),已是 24×24。
|
|
6
|
+
* 来源:https://cdn.jsdelivr.net/npm/simple-icons@11.15.0/icons/postgresql.svg
|
|
7
|
+
* 品牌色:PostgreSQL 蓝 #336791。
|
|
8
|
+
*/
|
|
9
|
+
const POSTGRES_MARK_PATH =
|
|
10
|
+
'M23.5594 14.7228a.5269.5269 0 0 0-.0563-.1191c-.139-.2632-.4768-.3418-1.0074-.2321-1.6533.3411-2.2935.1312-2.5256-.0191 1.342-2.0482 2.445-4.522 3.0411-6.8297.2714-1.0507.7982-3.5237.1222-4.7316a1.5641 1.5641 0 0 0-.1509-.235C21.6931.9086 19.8007.0248 17.5099.0005c-1.4947-.0158-2.7705.3461-3.1161.4794a9.449 9.449 0 0 0-.5159-.0816 8.044 8.044 0 0 0-1.3114-.1278c-1.1822-.0184-2.2038.2642-3.0498.8406-.8573-.3211-4.7888-1.645-7.2219.0788C.9359 2.1526.3086 3.8733.4302 6.3043c.0409.818.5069 3.334 1.2423 5.7436.4598 1.5065.9387 2.7019 1.4334 3.582.553.9942 1.1259 1.5933 1.7143 1.7895.4474.1491 1.1327.1441 1.8581-.7279.8012-.9635 1.5903-1.8258 1.9446-2.2069.4351.2355.9064.3625 1.39.3772a.0569.0569 0 0 0 .0004.0041 11.0312 11.0312 0 0 0-.2472.3054c-.3389.4302-.4094.5197-1.5002.7443-.3102.064-1.1344.2339-1.1464.8115-.0025.1224.0329.2309.0919.3268.2269.4231.9216.6097 1.015.6331 1.3345.3335 2.5044.092 3.3714-.6787-.017 2.231.0775 4.4174.3454 5.0874.2212.5529.7618 1.9045 2.4692 1.9043.2505 0 .5263-.0291.8296-.0941 1.7819-.3821 2.5557-1.1696 2.855-2.9059.1503-.8707.4016-2.8753.5388-4.1012.0169-.0703.0357-.1207.057-.1362.0007-.0005.0697-.0471.4272.0307a.3673.3673 0 0 0 .0443.0068l.2539.0223.0149.001c.8468.0384 1.9114-.1426 2.5312-.4308.6438-.2988 1.8057-1.0323 1.5951-1.6698zM2.371 11.8765c-.7435-2.4358-1.1779-4.8851-1.2123-5.5719-.1086-2.1714.4171-3.6829 1.5623-4.4927 1.8367-1.2986 4.8398-.5408 6.108-.13-.0032.0032-.0066.0061-.0098.0094-2.0238 2.044-1.9758 5.536-1.9708 5.7495-.0002.0823.0066.1989.0162.3593.0348.5873.0996 1.6804-.0735 2.9184-.1609 1.1504.1937 2.2764.9728 3.0892.0806.0841.1648.1631.2518.2374-.3468.3714-1.1004 1.1926-1.9025 2.1576-.5677.6825-.9597.5517-1.0886.5087-.3919-.1307-.813-.5871-1.2381-1.3223-.4796-.839-.9635-2.0317-1.4155-3.5126zm6.0072 5.0871c-.1711-.0428-.3271-.1132-.4322-.1772.0889-.0394.2374-.0902.4833-.1409 1.2833-.2641 1.4815-.4506 1.9143-1.0002.0992-.126.2116-.2687.3673-.4426a.3549.3549 0 0 0 .0737-.1298c.1708-.1513.2724-.1099.4369-.0417.156.0646.3078.26.3695.4752.0291.1016.0619.2945-.0452.4444-.9043 1.2658-2.2216 1.2494-3.1676 1.0128zm2.094-3.988-.0525.141c-.133.3566-.2567.6881-.3334 1.003-.6674-.0021-1.3168-.2872-1.8105-.8024-.6279-.6551-.9131-1.5664-.7825-2.5004.1828-1.3079.1153-2.4468.079-3.0586-.005-.0857-.0095-.1607-.0122-.2199.2957-.2621 1.6659-.9962 2.6429-.7724.4459.1022.7176.4057.8305.928.5846 2.7038.0774 3.8307-.3302 4.7363-.084.1866-.1633.3629-.2311.5454zm7.3637 4.5725c-.0169.1768-.0358.376-.0618.5959l-.146.4383a.3547.3547 0 0 0-.0182.1077c-.0059.4747-.054.6489-.115.8693-.0634.2292-.1353.4891-.1794 1.0575-.11 1.4143-.8782 2.2267-2.4172 2.5565-1.5155.3251-1.7843-.4968-2.0212-1.2217a6.5824 6.5824 0 0 0-.0769-.2266c-.2154-.5858-.1911-1.4119-.1574-2.5551.0165-.5612-.0249-1.9013-.3302-2.6462.0044-.2932.0106-.5909.019-.8918a.3529.3529 0 0 0-.0153-.1126 1.4927 1.4927 0 0 0-.0439-.208c-.1226-.4283-.4213-.7866-.7797-.9351-.1424-.059-.4038-.1672-.7178-.0869.067-.276.1831-.5875.309-.9249l.0529-.142c.0595-.16.134-.3257.213-.5012.4265-.9476 1.0106-2.2453.3766-5.1772-.2374-1.0981-1.0304-1.6343-2.2324-1.5098-.7207.0746-1.3799.3654-1.7088.5321a5.6716 5.6716 0 0 0-.1958.1041c.0918-1.1064.4386-3.1741 1.7357-4.4823a4.0306 4.0306 0 0 1 .3033-.276.3532.3532 0 0 0 .1447-.0644c.7524-.5706 1.6945-.8506 2.802-.8325.4091.0067.8017.0339 1.1742.081 1.939.3544 3.2439 1.4468 4.0359 2.3827.8143.9623 1.2552 1.9315 1.4312 2.4543-1.3232-.1346-2.2234.1268-2.6797.779-.9926 1.4189.543 4.1729 1.2811 5.4964.1353.2426.2522.4522.2889.5413.2403.5825.5515.9713.7787 1.2552.0696.087.1372.1714.1885.245-.4008.1155-1.1208.3825-1.0552 1.717-.0123.1563-.0423.4469-.0834.8148-.0461.2077-.0702.4603-.0994.7662zm.8905-1.6211c-.0405-.8316.2691-.9185.5967-1.0105a2.8566 2.8566 0 0 0 .135-.0406 1.202 1.202 0 0 0 .1342.103c.5703.3765 1.5823.4213 3.0068.1344-.2016.1769-.5189.3994-.9533.6011-.4098.1903-1.0957.333-1.7473.3636-.7197.0336-1.0859-.0807-1.1721-.151zm.5695-9.2712c-.0059.3508-.0542.6692-.1054 1.0017-.055.3576-.112.7274-.1264 1.1762-.0142.4368.0404.8909.0932 1.3301.1066.887.216 1.8003-.2075 2.7014a3.5272 3.5272 0 0 1-.1876-.3856c-.0527-.1276-.1669-.3326-.3251-.6162-.6156-1.1041-2.0574-3.6896-1.3193-4.7446.3795-.5427 1.3408-.5661 2.1781-.463zm.2284 7.0137a12.3762 12.3762 0 0 0-.0853-.1074l-.0355-.0444c.7262-1.1995.5842-2.3862.4578-3.4385-.0519-.4318-.1009-.8396-.0885-1.2226.0129-.4061.0666-.7543.1185-1.0911.0639-.415.1288-.8443.1109-1.3505.0134-.0531.0188-.1158.0118-.1902-.0457-.4855-.5999-1.938-1.7294-3.253-.6076-.7073-1.4896-1.4972-2.6889-2.0395.5251-.1066 1.2328-.2035 2.0244-.1859 2.0515.0456 3.6746.8135 4.8242 2.2824a.908.908 0 0 1 .0667.1002c.7231 1.3556-.2762 6.2751-2.9867 10.5405zm-8.8166-6.1162c-.025.1794-.3089.4225-.6211.4225a.5821.5821 0 0 1-.0809-.0056c-.1873-.026-.3765-.144-.5059-.3156-.0458-.0605-.1203-.178-.1055-.2844.0055-.0401.0261-.0985.0925-.1488.1182-.0894.3518-.1226.6096-.0867.3163.0441.6426.1938.6113.4186zm7.9305-.4114c.0111.0792-.049.201-.1531.3102-.0683.0717-.212.1961-.4079.2232a.5456.5456 0 0 1-.075.0052c-.2935 0-.5414-.2344-.5607-.3717-.024-.1765.2641-.3106.5611-.352.297-.0414.6111.0088.6356.1851z'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* NiuMa PostgreSQL —— 官方大象品牌 mark,单色填充,默认走 PG 蓝并随主题明暗自动调整对比度。
|
|
14
|
+
*/
|
|
15
|
+
export const PostgresIcon = defineComponent({
|
|
16
|
+
name: 'PostgresIcon',
|
|
17
|
+
inheritAttrs: false,
|
|
18
|
+
props: {
|
|
19
|
+
size: { type: [Number, String] as PropType<number | string>, default: 24 },
|
|
20
|
+
strokeWidth: { type: [Number, String] as PropType<number | string>, default: 2 },
|
|
21
|
+
color: { type: String, default: 'currentColor' },
|
|
22
|
+
},
|
|
23
|
+
setup(props, { attrs }) {
|
|
24
|
+
return () => {
|
|
25
|
+
const size = Number(props.size) || 24
|
|
26
|
+
const { class: attrClass, style: attrStyle, ...restAttrs } = attrs
|
|
27
|
+
const accent = props.color && props.color !== 'currentColor' ? props.color : undefined
|
|
28
|
+
const style: Record<string, string> = {
|
|
29
|
+
...(typeof attrStyle === 'object' && attrStyle && !Array.isArray(attrStyle)
|
|
30
|
+
? (attrStyle as Record<string, string>)
|
|
31
|
+
: {}),
|
|
32
|
+
...(accent ? { '--rs-icon-postgres-accent': accent } : {}),
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return h(
|
|
36
|
+
'svg',
|
|
37
|
+
{
|
|
38
|
+
...restAttrs,
|
|
39
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
40
|
+
width: size,
|
|
41
|
+
height: size,
|
|
42
|
+
viewBox: '0 0 24 24',
|
|
43
|
+
fill: 'none',
|
|
44
|
+
overflow: 'visible',
|
|
45
|
+
style: Object.keys(style).length > 0 ? style : undefined,
|
|
46
|
+
class: ['lucide', 'lucide-postgres-icon', attrClass].filter(Boolean),
|
|
47
|
+
},
|
|
48
|
+
[h('path', { class: 'postgres-icon__mark', d: POSTGRES_MARK_PATH })],
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
})
|
package/src/icons/lucide.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { OracleIcon } from './custom/oracle'
|
|
|
12
12
|
import { ClickhouseIcon } from './custom/clickhouse'
|
|
13
13
|
import { KingbaseIcon } from './custom/kingbase'
|
|
14
14
|
import { SqlserverIcon } from './custom/sqlserver'
|
|
15
|
+
import { PostgresIcon } from './custom/postgres'
|
|
15
16
|
|
|
16
17
|
export const LUCIDE_LICENSE = 'ISC'
|
|
17
18
|
export const LUCIDE_ATTRIBUTION =
|
|
@@ -31,6 +32,7 @@ const customIconMap = new Map<string, Component>([
|
|
|
31
32
|
['clickhouse', ClickhouseIcon],
|
|
32
33
|
['kingbase', KingbaseIcon],
|
|
33
34
|
['sqlserver', SqlserverIcon],
|
|
35
|
+
['postgres', PostgresIcon],
|
|
34
36
|
])
|
|
35
37
|
|
|
36
38
|
const lucideExports = LucideVue as Record<string, unknown>
|
package/src/index.ts
CHANGED
|
@@ -157,6 +157,7 @@ export {
|
|
|
157
157
|
MONACO_MYSQL_LANGUAGE,
|
|
158
158
|
MONACO_DAMENG_LANGUAGE,
|
|
159
159
|
MONACO_KINGBASE_LANGUAGE,
|
|
160
|
+
MONACO_POSTGRESQL_LANGUAGE,
|
|
160
161
|
MONACO_SQLITE_LANGUAGE,
|
|
161
162
|
RS_MONACO_DEBUG,
|
|
162
163
|
setupMonacoWorkers,
|
|
@@ -196,6 +197,8 @@ export {
|
|
|
196
197
|
export type {
|
|
197
198
|
RsResolvedTerminalTheme,
|
|
198
199
|
RsTerminalAction,
|
|
200
|
+
RsTerminalExpose,
|
|
201
|
+
RsTerminalGeometry,
|
|
199
202
|
RsTerminalThemeMode,
|
|
200
203
|
} from './components/terminal-utils'
|
|
201
204
|
|
package/src/monaco/index.ts
CHANGED
|
@@ -16,6 +16,7 @@ export type MonacoSqlLanguageId =
|
|
|
16
16
|
| 'genericsql'
|
|
17
17
|
| 'dameng'
|
|
18
18
|
| 'kingbase'
|
|
19
|
+
| 'postgresql'
|
|
19
20
|
| 'clickhouse'
|
|
20
21
|
| 'sqlite'
|
|
21
22
|
| 'sqlserver'
|
|
@@ -36,6 +37,9 @@ export const MONACO_DAMENG_LANGUAGE = 'dameng' as const
|
|
|
36
37
|
/** Kingbase 在 Monaco 中的 languageId(Bridge LSP)。 */
|
|
37
38
|
export const MONACO_KINGBASE_LANGUAGE = 'kingbase' as const
|
|
38
39
|
|
|
40
|
+
/** 官方 PostgreSQL 在 Monaco 中的 languageId(Bridge LSP;与 dialect family 对齐)。 */
|
|
41
|
+
export const MONACO_POSTGRESQL_LANGUAGE = 'postgresql' as const
|
|
42
|
+
|
|
39
43
|
/** ClickHouse 在 Monaco 中的 languageId(Bridge LSP)。 */
|
|
40
44
|
export const MONACO_CLICKHOUSE_LANGUAGE = 'clickhouse' as const
|
|
41
45
|
|
package/src/styles.css
CHANGED
|
@@ -183,6 +183,9 @@
|
|
|
183
183
|
/* SQL Server 品牌图标默认强调色(Simple Icons / 产品红) */
|
|
184
184
|
--rs-icon-sqlserver-accent: #cc2927;
|
|
185
185
|
|
|
186
|
+
/* PostgreSQL 品牌图标默认强调色(官方大象蓝) */
|
|
187
|
+
--rs-icon-postgres-accent: #336791;
|
|
188
|
+
|
|
186
189
|
/* macOS 风格原生滚动条(与 RsScrollbar 视觉一致) */
|
|
187
190
|
--rs-scrollbar-size: 13px;
|
|
188
191
|
--rs-scrollbar-padding: 2px;
|
|
@@ -309,6 +312,7 @@
|
|
|
309
312
|
--rs-icon-clickhouse-accent: #ffe066;
|
|
310
313
|
--rs-icon-kingbase-accent: #ff4d57;
|
|
311
314
|
--rs-icon-sqlserver-accent: #ff5a57;
|
|
315
|
+
--rs-icon-postgres-accent: #6a9ec4;
|
|
312
316
|
--rs-focus-border: var(--rs-primary);
|
|
313
317
|
--rs-focus-ring: color-mix(in srgb, var(--rs-primary) 28%, transparent);
|
|
314
318
|
--rs-focus-ring-width: 2px;
|
|
@@ -670,6 +674,7 @@
|
|
|
670
674
|
--rs-icon-clickhouse-accent: #ffcc01;
|
|
671
675
|
--rs-icon-kingbase-accent: #c9151e;
|
|
672
676
|
--rs-icon-sqlserver-accent: #cc2927;
|
|
677
|
+
--rs-icon-postgres-accent: #336791;
|
|
673
678
|
}
|
|
674
679
|
|
|
675
680
|
/**
|
|
@@ -1347,3 +1352,13 @@ code {
|
|
|
1347
1352
|
.rs-context-menu__item[data-state='open'] .lucide-sqlserver-icon .sqlserver-icon__mark {
|
|
1348
1353
|
fill: rgb(255 255 255 / 0.95);
|
|
1349
1354
|
}
|
|
1355
|
+
|
|
1356
|
+
/* PostgreSQL 自定义图标:官方大象(Slonik)mark,单色填充随主题调整明暗对比度 */
|
|
1357
|
+
.lucide-postgres-icon .postgres-icon__mark {
|
|
1358
|
+
fill: var(--rs-icon-postgres-accent);
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1361
|
+
.rs-context-menu__item[data-highlighted] .lucide-postgres-icon .postgres-icon__mark,
|
|
1362
|
+
.rs-context-menu__item[data-state='open'] .lucide-postgres-icon .postgres-icon__mark {
|
|
1363
|
+
fill: rgb(255 255 255 / 0.95);
|
|
1364
|
+
}
|