niuma-ui 2.0.9 → 2.1.2
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 +28 -0
- package/NOTICE +0 -1
- package/README.md +3 -3
- package/README.zh-CN.md +3 -3
- package/dist/components/auto-complete/src/RsAutoComplete.d.ts +2 -2
- package/dist/components/button/src/RsButton.css +75 -72
- package/dist/components/button/src/RsButton.d.ts +1 -4
- package/dist/components/button/src/RsButton.impl.js +2 -6
- package/dist/components/button/src/RsButton.js +1 -1
- package/dist/components/code-block/src/RsCodeBlock.css +26 -26
- package/dist/components/code-block/src/RsCodeBlock.impl.js +2 -2
- package/dist/components/code-block/src/RsCodeBlock.js +1 -1
- package/dist/components/config-provider/src/RsConfigProvider.css +1 -1
- package/dist/components/config-provider/src/RsConfigProvider.d.ts +2 -2
- package/dist/components/config-provider/src/RsConfigProvider.impl.js +7 -16
- package/dist/components/config-provider/src/RsConfigProvider.js +1 -1
- package/dist/components/context-menu/src/RsContextMenu.css +19 -19
- package/dist/components/date-picker/src/RsDatePicker.d.ts +2 -2
- package/dist/components/date-picker/src/RsDateTimePicker.d.ts +2 -2
- package/dist/components/dialog/src/RsConfirmDialog.css +25 -25
- package/dist/components/dialog/src/RsConfirmDialog.impl.js +4 -4
- package/dist/components/dialog/src/RsConfirmDialog.js +1 -1
- package/dist/components/dialog/src/RsDialog.css +63 -63
- package/dist/components/dialog/src/RsDialog.impl.js +56 -11
- package/dist/components/dialog/src/RsDialog.js +1 -1
- package/dist/components/dialog/src/dialog-window.d.ts +1 -0
- package/dist/components/dialog/src/dialog-window.js +1 -0
- package/dist/components/dynamic-tags/src/RsDynamicTags.d.ts +2 -2
- package/dist/components/icon/src/RsIcon.css +5 -5
- package/dist/components/icon/src/RsIcon.d.ts +1 -1
- package/dist/components/icon/src/RsIcon.impl.js +1 -1
- package/dist/components/icon/src/RsIcon.js +1 -1
- package/dist/components/input/src/RsInput.d.ts +2 -2
- package/dist/components/mentions/src/RsMentions.d.ts +2 -2
- package/dist/components/select/src/RsSelect.d.ts +2 -2
- package/dist/components/table/src/table-body/RsTableCell.impl.js +1 -1
- package/dist/components/table/style/rs-table.css +54 -10
- package/dist/components/tabs/src/RsTabs.d.ts +3 -3
- package/dist/components/tabs/src/RsTabs.impl.js +1 -1
- package/dist/components/textarea/src/RsTextarea.d.ts +2 -2
- package/dist/components/time-picker/src/RsTimePicker.d.ts +2 -2
- package/dist/components/toaster/src/RsToaster.d.ts +1 -1
- package/dist/components/tree/src/RsTree.css +74 -74
- package/dist/components/tree/src/RsTree.js +1 -1
- package/dist/components/tree-select/src/RsTreeSelect.d.ts +2 -2
- package/dist/icons/host.d.ts +11 -0
- package/dist/icons/host.js +30 -0
- package/dist/icons/lucide.js +10 -3
- package/dist/icons/registry.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/styles.css +34 -24
- package/dist/theme/brand.example.css +1 -1
- package/dist/utils/rs-clipboard.d.ts +1 -1
- package/dist/utils/rs-clipboard.js +17 -7
- package/dist/vite-plugins/niuma-ui-host.d.ts +2 -1
- package/dist/vite-plugins/niuma-ui-host.js +25 -6
- package/package.json +2 -4
- package/dist/components/_shared/src/reka.d.ts +0 -2
- package/dist/components/_shared/src/reka.js +0 -2
package/dist/icons/registry.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LUCIDE_ATTRIBUTION, LUCIDE_LICENSE, isRsIconName, lucideIconCount, resolveLucideIcon } from "./lucide.js";
|
|
2
1
|
import { isRsBrandIconName, rsBrandIconAccentVar, rsBrandIconNames } from "./brand.js";
|
|
2
|
+
import { LUCIDE_ATTRIBUTION, LUCIDE_LICENSE, isRsIconName, lucideIconCount, resolveLucideIcon } from "./lucide.js";
|
|
3
3
|
//#region src/icons/registry.ts
|
|
4
4
|
/** Playground / 文档常用图标(Lucide 全库约 1600+;kebab-case,如 `house`、`trash-2`) */
|
|
5
5
|
var rsCommonIconNames = [
|
package/dist/index.d.ts
CHANGED
|
@@ -237,6 +237,7 @@ export type { RsTranslateFn } from './composables/useRsI18n';
|
|
|
237
237
|
export { useRsToast } from './composables/useRsToast';
|
|
238
238
|
export type { RsToastAction, RsToastInput, RsToastKind, RsToastOptions, RsToastPromiseMessages, } from './composables/useRsToast';
|
|
239
239
|
export { rsCommonIconNames, rsBrandIconNames, rsBrandIconAccentVar, LUCIDE_ATTRIBUTION, LUCIDE_LICENSE, lucideIconCount, isRsIconName, isRsBrandIconName, } from './icons/registry';
|
|
240
|
+
export { registerRsIcon } from './icons/host';
|
|
240
241
|
export type { RsBrandIconName } from './icons/registry';
|
|
241
242
|
export type { RsThemeMode, RsResolvedTheme, RsThemeTokens, RsComponentSize, RsRadius, RsFontSize, RsFontWeight, } from './theme/types';
|
|
242
243
|
export { RS_COMPONENT_SIZES, RS_COMPONENT_SIZE_ICON_PX, RS_RADII, RS_RADIUS_CSS, RS_FONT_SIZES, RS_FONT_SIZE_CSS, RS_FONT_WEIGHTS, RS_FONT_WEIGHT_CSS, } from './theme/types';
|
package/dist/index.js
CHANGED
|
@@ -340,6 +340,7 @@ export { readTerminalFontSizePx } from './theme/css-token.js'
|
|
|
340
340
|
export { readTerminalFontWeight } from './theme/css-token.js'
|
|
341
341
|
export { readTerminalFontWeightBold } from './theme/css-token.js'
|
|
342
342
|
export { readTerminalThemeFromCss } from './components/terminal/src/terminal-utils.js'
|
|
343
|
+
export { registerRsIcon } from './icons/host.js'
|
|
343
344
|
export { registerRsLocale } from './locale/registry.js'
|
|
344
345
|
export { removeUploadFileAt } from './components/upload/src/upload-utils.js'
|
|
345
346
|
export { renderMarkdown } from './components/markdown/src/markdown-utils.js'
|
package/dist/styles.css
CHANGED
|
@@ -360,29 +360,33 @@ html {
|
|
|
360
360
|
--rs-dropdown-max-height: 16rem;
|
|
361
361
|
--rs-dropdown-disabled-opacity: 0.38;
|
|
362
362
|
|
|
363
|
-
/*
|
|
363
|
+
/*
|
|
364
|
+
* Context menu。macOS 菜单:12px 面板、6px 选中条、约 26px 行、13px 字。
|
|
365
|
+
* 选中用主题色铺底、文字反白。颜色别名语义 token,随 data-rs-theme。
|
|
366
|
+
* 挂到 body 须盖住 Dialog。实色底,不用 backdrop-filter。
|
|
367
|
+
*/
|
|
364
368
|
--rs-ctx-z: calc(var(--rs-z-modal) + 2);
|
|
365
|
-
--rs-ctx-min-width:
|
|
369
|
+
--rs-ctx-min-width: 11.5rem;
|
|
366
370
|
--rs-ctx-max-width: 22rem;
|
|
367
371
|
--rs-ctx-pad: 5px;
|
|
368
|
-
--rs-ctx-radius:
|
|
369
|
-
--rs-ctx-item-height: 1.
|
|
372
|
+
--rs-ctx-radius: 12px;
|
|
373
|
+
--rs-ctx-item-height: 1.625rem;
|
|
370
374
|
--rs-ctx-item-radius: 6px;
|
|
371
|
-
--rs-ctx-font-size:
|
|
372
|
-
--rs-ctx-icon-col:
|
|
375
|
+
--rs-ctx-font-size: 0.8125rem;
|
|
376
|
+
--rs-ctx-icon-col: 1.75rem;
|
|
373
377
|
--rs-ctx-disabled-opacity: 0.38;
|
|
374
|
-
--rs-ctx-motion-in: 0.
|
|
378
|
+
--rs-ctx-motion-in: 0.14s;
|
|
375
379
|
--rs-ctx-motion-sub: 0.1s;
|
|
376
380
|
--rs-ctx-bg: var(--rs-surface-elevated);
|
|
377
381
|
--rs-ctx-fg: var(--rs-text-primary);
|
|
378
382
|
--rs-ctx-muted: var(--rs-text-tertiary);
|
|
379
|
-
--rs-ctx-border: var(--rs-
|
|
380
|
-
--rs-ctx-separator: var(--rs-
|
|
381
|
-
--rs-ctx-shadow:
|
|
383
|
+
--rs-ctx-border: color-mix(in srgb, var(--rs-text-primary) 8%, transparent);
|
|
384
|
+
--rs-ctx-separator: color-mix(in srgb, var(--rs-text-primary) 10%, transparent);
|
|
385
|
+
--rs-ctx-shadow: 0 16px 40px rgb(0 0 0 / 0.12), 0 2px 8px rgb(0 0 0 / 0.06);
|
|
382
386
|
--rs-ctx-danger: var(--rs-danger);
|
|
383
387
|
--rs-ctx-item-active-bg: var(--rs-primary);
|
|
384
388
|
--rs-ctx-item-active-fg: var(--rs-primary-foreground);
|
|
385
|
-
--rs-ctx-item-active-muted: color-mix(in srgb, var(--rs-primary-foreground)
|
|
389
|
+
--rs-ctx-item-active-muted: color-mix(in srgb, var(--rs-primary-foreground) 78%, transparent);
|
|
386
390
|
|
|
387
391
|
/* Popover(气泡卡片)。尺寸静态;颜色在主题块内。 */
|
|
388
392
|
--rs-popover-pad: 0.75rem;
|
|
@@ -639,7 +643,7 @@ html {
|
|
|
639
643
|
--rs-table-checkbox-bg: var(--rs-surface);
|
|
640
644
|
--rs-table-sort-active-fg: var(--rs-primary);
|
|
641
645
|
--rs-table-drop-indicator: var(--rs-primary);
|
|
642
|
-
--rs-table-resize-handle: var(--rs-
|
|
646
|
+
--rs-table-resize-handle: var(--rs-table-cell-divider);
|
|
643
647
|
--rs-table-resize-handle-hover: var(--rs-primary);
|
|
644
648
|
|
|
645
649
|
/* ── Tree(导航线 / 行选中 / 焦点;业务可覆盖)── */
|
|
@@ -666,10 +670,10 @@ html {
|
|
|
666
670
|
--rs-border: #6e6e6e;
|
|
667
671
|
--rs-border-subtle: #3a3a3a;
|
|
668
672
|
/*
|
|
669
|
-
* Button secondary/default
|
|
673
|
+
* Button secondary/default:描边跟输入框,不另用更亮的实色灰。
|
|
670
674
|
* 业务可用 --rs-btn-* 覆盖(见 theme/brand.example.css)。
|
|
671
675
|
*/
|
|
672
|
-
--rs-btn-outline-border:
|
|
676
|
+
--rs-btn-outline-border: var(--rs-input-border);
|
|
673
677
|
--rs-btn-secondary-bg: var(--rs-surface-hover);
|
|
674
678
|
--rs-btn-secondary-bg-hover: color-mix(in srgb, var(--rs-primary) 16%, var(--rs-surface-hover));
|
|
675
679
|
--rs-btn-secondary-bg-active: color-mix(in srgb, var(--rs-primary) 24%, var(--rs-surface-hover));
|
|
@@ -977,6 +981,7 @@ html {
|
|
|
977
981
|
--rs-shadow-sm: 0 1px 3px rgb(0 0 0 / 0.4);
|
|
978
982
|
--rs-shadow: 0 4px 16px rgb(0 0 0 / 0.45), 0 0 0 0.5px rgb(255 255 255 / 0.08);
|
|
979
983
|
--rs-shadow-lg: 0 12px 32px rgb(0 0 0 / 0.5), 0 0 0 0.5px rgb(255 255 255 / 0.1);
|
|
984
|
+
--rs-ctx-shadow: 0 16px 40px rgb(0 0 0 / 0.46), 0 2px 8px rgb(0 0 0 / 0.28);
|
|
980
985
|
}
|
|
981
986
|
|
|
982
987
|
/* ── 公共亮色:无属性 = light,避免盖住后面的 dark(:root 与属性选择器同权)── */
|
|
@@ -1029,7 +1034,7 @@ html {
|
|
|
1029
1034
|
--rs-table-checkbox-bg: var(--rs-surface);
|
|
1030
1035
|
--rs-table-sort-active-fg: var(--rs-primary);
|
|
1031
1036
|
--rs-table-drop-indicator: var(--rs-primary);
|
|
1032
|
-
--rs-table-resize-handle: var(--rs-
|
|
1037
|
+
--rs-table-resize-handle: var(--rs-table-cell-divider);
|
|
1033
1038
|
--rs-table-resize-handle-hover: var(--rs-primary);
|
|
1034
1039
|
|
|
1035
1040
|
/* ── Tree(导航线 / 行选中 / 焦点;业务可覆盖)── */
|
|
@@ -1055,10 +1060,10 @@ html {
|
|
|
1055
1060
|
--rs-border: rgb(60 60 67 / 0.16);
|
|
1056
1061
|
--rs-border-subtle: rgb(60 60 67 / 0.10);
|
|
1057
1062
|
/*
|
|
1058
|
-
* Button secondary/default
|
|
1059
|
-
*
|
|
1063
|
+
* Button secondary/default:描边跟输入框(柔分隔线),焦点环负责强调。
|
|
1064
|
+
* 需要更重的轮廓时覆盖 --rs-btn-outline-border。
|
|
1060
1065
|
*/
|
|
1061
|
-
--rs-btn-outline-border:
|
|
1066
|
+
--rs-btn-outline-border: var(--rs-input-border);
|
|
1062
1067
|
--rs-btn-secondary-bg: var(--rs-surface-hover);
|
|
1063
1068
|
--rs-btn-secondary-bg-hover: color-mix(in srgb, var(--rs-primary) 12%, var(--rs-surface-hover));
|
|
1064
1069
|
--rs-btn-secondary-bg-active: color-mix(in srgb, var(--rs-primary) 18%, var(--rs-surface-hover));
|
|
@@ -1362,6 +1367,7 @@ html {
|
|
|
1362
1367
|
--rs-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.04), 0 0 0 0.5px rgb(0 0 0 / 0.04);
|
|
1363
1368
|
--rs-shadow: 0 4px 16px rgb(0 0 0 / 0.08), 0 0 0 0.5px rgb(0 0 0 / 0.06);
|
|
1364
1369
|
--rs-shadow-lg: 0 12px 32px rgb(0 0 0 / 0.12), 0 0 0 0.5px rgb(0 0 0 / 0.08);
|
|
1370
|
+
--rs-ctx-shadow: 0 16px 40px rgb(0 0 0 / 0.12), 0 2px 8px rgb(0 0 0 / 0.06);
|
|
1365
1371
|
}
|
|
1366
1372
|
|
|
1367
1373
|
/**
|
|
@@ -1419,6 +1425,16 @@ html {
|
|
|
1419
1425
|
--rs-shadow-sm: none;
|
|
1420
1426
|
--rs-shadow: none;
|
|
1421
1427
|
--rs-shadow-lg: none;
|
|
1428
|
+
--rs-ctx-bg: Canvas;
|
|
1429
|
+
--rs-ctx-fg: CanvasText;
|
|
1430
|
+
--rs-ctx-muted: GrayText;
|
|
1431
|
+
--rs-ctx-border: CanvasText;
|
|
1432
|
+
--rs-ctx-separator: CanvasText;
|
|
1433
|
+
--rs-ctx-shadow: none;
|
|
1434
|
+
--rs-ctx-danger: Mark;
|
|
1435
|
+
--rs-ctx-item-active-bg: Highlight;
|
|
1436
|
+
--rs-ctx-item-active-fg: HighlightText;
|
|
1437
|
+
--rs-ctx-item-active-muted: HighlightText;
|
|
1422
1438
|
--rs-card-border: CanvasText;
|
|
1423
1439
|
--rs-card-separator: CanvasText;
|
|
1424
1440
|
--rs-card-header-bg: Canvas;
|
|
@@ -1700,12 +1716,6 @@ code {
|
|
|
1700
1716
|
min-width: 0;
|
|
1701
1717
|
}
|
|
1702
1718
|
|
|
1703
|
-
/* ContextMenu:Dialog 内表格右键菜单 Portal 后须高于 modal */
|
|
1704
|
-
[data-reka-popper-content-wrapper]:has(> .rs-context-menu__content),
|
|
1705
|
-
[data-reka-popper-content-wrapper]:has(> .rs-context-menu__sub-content) {
|
|
1706
|
-
z-index: calc(var(--rs-z-modal) + 2);
|
|
1707
|
-
}
|
|
1708
|
-
|
|
1709
1719
|
/*
|
|
1710
1720
|
* TimePicker 面板 Teleport 到 body。
|
|
1711
1721
|
* 独立面板跟 DatePicker 同一档(modal+2);嵌在日期面板里再高一档。
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
--rs-primary-hover: #4f46e5;
|
|
35
35
|
--rs-primary-container: #eef2ff;
|
|
36
36
|
--rs-on-primary-container: #312e81;
|
|
37
|
-
/* secondary
|
|
37
|
+
/* secondary 轮廓:默认跟输入框;需要更重的线时再覆盖 */
|
|
38
38
|
--rs-btn-outline-border: #6b7280;
|
|
39
39
|
--rs-btn-secondary-bg: #f3f4f6;
|
|
40
40
|
--rs-btn-secondary-bg-hover: #ede9fe;
|
|
@@ -13,7 +13,7 @@ export declare function writeClipboardText(text: string): Promise<boolean>;
|
|
|
13
13
|
export declare function copyTextWithExecCommand(text: string): boolean;
|
|
14
14
|
/** HTTP / 非安全上下文没有 Clipboard API,writeText 会 SecurityError。 */
|
|
15
15
|
export declare function isInsecureClipboardContext(): boolean;
|
|
16
|
-
/**
|
|
16
|
+
/** 写入系统剪贴板。先同步 execCommand,避免 await 丢掉点击手势;对话框里也要在这一拍写完。 */
|
|
17
17
|
export declare function copyTextToClipboard(text: string): Promise<boolean>;
|
|
18
18
|
/** @internal vitest 用 */
|
|
19
19
|
export declare function __resetClipboardStateForTests(): void;
|
|
@@ -158,6 +158,19 @@ async function writeClipboardText(text) {
|
|
|
158
158
|
return false;
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
|
+
/** 打开的 dialog 会把焦点留在框内。临时输入框必须挂在这个 dialog 里,挂到 body 上选不中,复制是空的。 */
|
|
162
|
+
function clipboardMount() {
|
|
163
|
+
const active = document.activeElement;
|
|
164
|
+
if (active instanceof Element) {
|
|
165
|
+
const dialog = active.closest("dialog");
|
|
166
|
+
if (dialog instanceof HTMLElement) return dialog;
|
|
167
|
+
}
|
|
168
|
+
if (typeof document.querySelector === "function") {
|
|
169
|
+
const open = document.querySelector("dialog[open]");
|
|
170
|
+
if (open instanceof HTMLElement) return open;
|
|
171
|
+
}
|
|
172
|
+
return document.body;
|
|
173
|
+
}
|
|
161
174
|
/** execCommand 兜底:CEF / 无 Clipboard API 权限时菜单复制仍可用 */
|
|
162
175
|
function copyTextWithExecCommand(text) {
|
|
163
176
|
if (!text || typeof document === "undefined") return false;
|
|
@@ -166,7 +179,7 @@ function copyTextWithExecCommand(text) {
|
|
|
166
179
|
textarea.value = text;
|
|
167
180
|
textarea.setAttribute("readonly", "");
|
|
168
181
|
textarea.style.cssText = "position:fixed;left:0;top:0;width:1px;height:1px;padding:0;border:0;opacity:0.01";
|
|
169
|
-
|
|
182
|
+
clipboardMount().appendChild(textarea);
|
|
170
183
|
if (typeof textarea.focus === "function") textarea.focus();
|
|
171
184
|
textarea.select();
|
|
172
185
|
if (typeof textarea.setSelectionRange === "function") textarea.setSelectionRange(0, text.length);
|
|
@@ -181,16 +194,13 @@ function copyTextWithExecCommand(text) {
|
|
|
181
194
|
function isInsecureClipboardContext() {
|
|
182
195
|
return typeof globalThis !== "undefined" && globalThis.isSecureContext === false;
|
|
183
196
|
}
|
|
184
|
-
/**
|
|
197
|
+
/** 写入系统剪贴板。先同步 execCommand,避免 await 丢掉点击手势;对话框里也要在这一拍写完。 */
|
|
185
198
|
async function copyTextToClipboard(text) {
|
|
186
199
|
if (!text) return false;
|
|
187
|
-
if (
|
|
188
|
-
|
|
189
|
-
return writeClipboardViaShell(text);
|
|
190
|
-
}
|
|
200
|
+
if (copyTextWithExecCommand(text)) return true;
|
|
201
|
+
if (isInsecureClipboardContext()) return writeClipboardViaShell(text);
|
|
191
202
|
await syncClipboardPermissionState();
|
|
192
203
|
if (!writeApiBlocked && await writeClipboardText(text)) return true;
|
|
193
|
-
if (copyTextWithExecCommand(text)) return true;
|
|
194
204
|
return writeClipboardViaShell(text);
|
|
195
205
|
}
|
|
196
206
|
//#endregion
|
|
@@ -64,7 +64,8 @@ export declare function emitLiveReexportIndex(map: Map<string, NiumaUiBinding>):
|
|
|
64
64
|
*/
|
|
65
65
|
export declare function parseRuntimeBindings(source: string): Map<string, NiumaUiBinding>;
|
|
66
66
|
/**
|
|
67
|
-
* FollowSourceBarrels
|
|
67
|
+
* FollowSourceBarrels 把目录 index,以及 `icons/registry.ts` 这类纯再导出,展开到实现文件。
|
|
68
68
|
* 只跟一层,避免评估整桶 `src/index.ts`。
|
|
69
|
+
* 非 index 只有名字本身是 `export { x } from` 时才改指向,这样 `isRsBrandIconName` 落到 `brand.ts`,不会把同文件再导出的 Lucide 一起求值。
|
|
69
70
|
*/
|
|
70
71
|
export declare function followSourceBarrels(root: string, map: Map<string, NiumaUiBinding>): Map<string, NiumaUiBinding>;
|
|
@@ -123,7 +123,16 @@ function niumaUiHostRewrite(ctx) {
|
|
|
123
123
|
return null;
|
|
124
124
|
if (!code.includes('@niuma/ui') && !code.includes('niuma-ui'))
|
|
125
125
|
return null;
|
|
126
|
-
|
|
126
|
+
const rewrite = () => rewriteHostModule(code, id, ctx.map, (from, spec) => resolveTarget(from, spec, ctx.root, ctx.useSource));
|
|
127
|
+
try {
|
|
128
|
+
return await rewrite();
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
if (!(err instanceof Error) || !err.message.includes('未找到运行时导出'))
|
|
132
|
+
throw err;
|
|
133
|
+
ctx.map = loadRuntimeBindings(ctx.root, ctx.useSource);
|
|
134
|
+
return rewrite();
|
|
135
|
+
}
|
|
127
136
|
},
|
|
128
137
|
};
|
|
129
138
|
}
|
|
@@ -400,21 +409,31 @@ function loadRuntimeBindings(root, useSource) {
|
|
|
400
409
|
return map;
|
|
401
410
|
}
|
|
402
411
|
/**
|
|
403
|
-
* FollowSourceBarrels
|
|
412
|
+
* FollowSourceBarrels 把目录 index,以及 `icons/registry.ts` 这类纯再导出,展开到实现文件。
|
|
404
413
|
* 只跟一层,避免评估整桶 `src/index.ts`。
|
|
414
|
+
* 非 index 只有名字本身是 `export { x } from` 时才改指向,这样 `isRsBrandIconName` 落到 `brand.ts`,不会把同文件再导出的 Lucide 一起求值。
|
|
405
415
|
*/
|
|
406
416
|
export function followSourceBarrels(root, map) {
|
|
407
417
|
const next = new Map();
|
|
418
|
+
const parsed = new Map();
|
|
419
|
+
const bindingsIn = (file) => {
|
|
420
|
+
const cached = parsed.get(file);
|
|
421
|
+
if (cached)
|
|
422
|
+
return cached;
|
|
423
|
+
const child = parseRuntimeBindings(readFileSync(file, 'utf8'));
|
|
424
|
+
parsed.set(file, child);
|
|
425
|
+
return child;
|
|
426
|
+
};
|
|
408
427
|
for (const [name, binding] of map) {
|
|
409
428
|
const file = resolveSourceModule(root, binding.from);
|
|
410
|
-
if (!file
|
|
429
|
+
if (!file) {
|
|
411
430
|
next.set(name, binding);
|
|
412
431
|
continue;
|
|
413
432
|
}
|
|
414
|
-
const
|
|
415
|
-
const inner =
|
|
433
|
+
const barrel = /[/\\]index\.(ts|js)$/.test(file);
|
|
434
|
+
const inner = bindingsIn(file).get(name);
|
|
416
435
|
if (!inner) {
|
|
417
|
-
next.set(name, { ...binding, from: toSrcRel(root, file) });
|
|
436
|
+
next.set(name, barrel ? { ...binding, from: toSrcRel(root, file) } : binding);
|
|
418
437
|
continue;
|
|
419
438
|
}
|
|
420
439
|
const innerAbs = resolveRelativeModule(file, inner.from);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "niuma-ui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Vue 3 workbench design system — Rs* components, --rs-* tokens, optional Monaco / CodeMirror / xterm",
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
"components",
|
|
12
12
|
"design-system",
|
|
13
13
|
"workbench",
|
|
14
|
-
"reka-ui",
|
|
15
14
|
"niuma"
|
|
16
15
|
],
|
|
17
16
|
"author": "Blair-Shang",
|
|
@@ -117,8 +116,7 @@
|
|
|
117
116
|
"magic-string": "^0.30.17",
|
|
118
117
|
"marked": "^18.0.9",
|
|
119
118
|
"monaco-editor": "^0.55.1",
|
|
120
|
-
"monaco-sql-languages": "^1.2.0"
|
|
121
|
-
"reka-ui": "^2.9.10"
|
|
119
|
+
"monaco-sql-languages": "^1.2.0"
|
|
122
120
|
},
|
|
123
121
|
"devDependencies": {
|
|
124
122
|
"@playwright/test": "^1.62.1",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export { AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogOverlay, AlertDialogPortal, AlertDialogRoot, AlertDialogTitle, AlertDialogTrigger, Primitive, CollapsibleContent, CollapsibleRoot, CollapsibleTrigger, ComboboxAnchor, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxItemIndicator, ComboboxLabel, ComboboxPortal, ComboboxRoot, ComboboxTrigger, ComboboxViewport, ComboboxVirtualizer, ConfigProvider, ContextMenuContent, ContextMenuItem, ContextMenuPortal, ContextMenuRoot, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DialogClose, DialogContent, DialogDescription, DialogOverlay, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuRoot, DropdownMenuTrigger, PopoverContent, PopoverPortal, PopoverRoot, PopoverTrigger, SwitchRoot, SwitchThumb, PaginationEllipsis, PaginationFirst, PaginationLast, PaginationList, PaginationListItem, PaginationNext, PaginationPrev, PaginationRoot, ScrollAreaCorner, ScrollAreaRoot, ScrollAreaScrollbar, ScrollAreaThumb, ScrollAreaViewport, SelectContent, SelectItem, SelectItemIndicator, SelectItemText, SelectPortal, SelectRoot, SelectTrigger, SelectValue, SelectViewport, StepperDescription, StepperIndicator, StepperItem, StepperRoot, StepperSeparator, StepperTitle, StepperTrigger, TabsContent, TabsList, TabsRoot, TabsTrigger, TooltipContent, TooltipPortal, TooltipProvider, TooltipRoot, TooltipTrigger, TreeItem, TreeRoot, TreeVirtualizer, useForwardExpose, useFilter, } from 'reka-ui';
|
|
2
|
-
export type { AcceptableValue, PrimitiveProps, TooltipRootEmits, TooltipRootProps } from 'reka-ui';
|