@seclab-dev/vue 0.1.0-alpha.1

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 (33) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/LICENSE +21 -0
  3. package/README.md +62 -0
  4. package/dist/components/SecLabActionMenu.vue.d.ts +24 -0
  5. package/dist/components/SecLabAlert.vue.d.ts +37 -0
  6. package/dist/components/SecLabBreadcrumb.vue.d.ts +23 -0
  7. package/dist/components/SecLabBreadcrumbItem.vue.d.ts +13 -0
  8. package/dist/components/SecLabButton.vue.d.ts +36 -0
  9. package/dist/components/SecLabCard.vue.d.ts +34 -0
  10. package/dist/components/SecLabCheckbox.vue.d.ts +31 -0
  11. package/dist/components/SecLabDateTimeRangePicker.vue.d.ts +53 -0
  12. package/dist/components/SecLabDescriptions.vue.d.ts +41 -0
  13. package/dist/components/SecLabDialog.vue.d.ts +39 -0
  14. package/dist/components/SecLabDrawer.vue.d.ts +35 -0
  15. package/dist/components/SecLabEmpty.vue.d.ts +26 -0
  16. package/dist/components/SecLabFormItem.vue.d.ts +25 -0
  17. package/dist/components/SecLabIcon.vue.d.ts +17 -0
  18. package/dist/components/SecLabInput.vue.d.ts +49 -0
  19. package/dist/components/SecLabLoading.vue.d.ts +25 -0
  20. package/dist/components/SecLabMenu.vue.d.ts +28 -0
  21. package/dist/components/SecLabModal.vue.d.ts +31 -0
  22. package/dist/components/SecLabPagination.vue.d.ts +35 -0
  23. package/dist/components/SecLabSelect.vue.d.ts +29 -0
  24. package/dist/components/SecLabSwitch.vue.d.ts +24 -0
  25. package/dist/components/SecLabTable.vue.d.ts +60 -0
  26. package/dist/components/SecLabTabs.vue.d.ts +24 -0
  27. package/dist/components/SecLabTag.vue.d.ts +26 -0
  28. package/dist/components/SecLabToast.vue.d.ts +17 -0
  29. package/dist/components/SecLabTooltip.vue.d.ts +29 -0
  30. package/dist/index.d.ts +30 -0
  31. package/dist/index.js +1237 -0
  32. package/dist/style.css +2 -0
  33. package/package.json +48 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,14 @@
1
+ # Changelog
2
+
3
+ 格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),并遵循 [Semantic Versioning](https://semver.org/lang/zh-CN/)。
4
+
5
+ ## [0.1.0-alpha.1] - 2026-06-28
6
+
7
+ ### Added
8
+
9
+ - 首次发布 SecLab Vue 3 基础组件库。
10
+ - 提供按钮、输入、选择、开关、复选框、日期范围和表单组件。
11
+ - 提供表格、分页、标签、描述列表、卡片和空状态组件。
12
+ - 提供弹窗、抽屉、模态框、菜单、标签页和面包屑组件。
13
+ - 提供提示、通知、加载、告警和统一 SVG 图标组件。
14
+ - 发布 ESM、TypeScript 类型声明和独立组件样式。
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 seclab-dev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # @seclab-dev/vue
2
+
3
+ SecLab Vue 3 基础组件库,实现 SecLab Design Language(SDL)的通用交互和视觉规范。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ pnpm add @seclab-dev/vue @seclab-dev/icons @seclab-dev/tokens
9
+ ```
10
+
11
+ 项目需要安装 Vue 3:
12
+
13
+ ```bash
14
+ pnpm add vue
15
+ ```
16
+
17
+ ## 样式
18
+
19
+ 在全局样式入口导入主题变量和组件样式:
20
+
21
+ ```css
22
+ @import "@seclab-dev/tokens/index.css";
23
+ @import "@seclab-dev/vue/style.css";
24
+ ```
25
+
26
+ ## 使用
27
+
28
+ 组件采用按需导入:
29
+
30
+ ```vue
31
+ <script setup lang="ts">
32
+ import { SecLabButton, SecLabIcon, SecLabInput } from "@seclab-dev/vue";
33
+
34
+ const keyword = defineModel<string>({ default: "" });
35
+ </script>
36
+
37
+ <template>
38
+ <SecLabInput v-model="keyword" placeholder="搜索" />
39
+ <SecLabButton type="primary">
40
+ <SecLabIcon name="search" :size="16" />
41
+ 查询
42
+ </SecLabButton>
43
+ </template>
44
+ ```
45
+
46
+ ## 组件范围
47
+
48
+ - 操作:按钮、操作菜单
49
+ - 输入:输入框、选择器、开关、复选框、日期时间范围
50
+ - 数据:表格、分页、标签、描述列表
51
+ - 容器:卡片、对话框、抽屉、模态框
52
+ - 反馈:告警、通知、加载、空状态、提示
53
+ - 导航:菜单、标签页、面包屑
54
+
55
+ 组件的实际 Props、事件和类型声明以发布包中的 TypeScript 类型为准。
56
+
57
+ ## 约束
58
+
59
+ - 组件不依赖业务 API、Pinia Store 或 Vue Router。
60
+ - 视觉变量由 `@seclab-dev/tokens` 提供。
61
+ - 图标由 `@seclab-dev/icons` 提供。
62
+ - `vue` 是 peer dependency,不会被组件库重复打包。
@@ -0,0 +1,24 @@
1
+ interface Action {
2
+ label: string;
3
+ class?: string;
4
+ icon?: string;
5
+ disabled?: boolean;
6
+ tooltip?: string;
7
+ handler: () => void;
8
+ }
9
+ type __VLS_Props = {
10
+ /** 操作列表 */
11
+ actions: Action[];
12
+ /** 按钮文案 */
13
+ label?: string;
14
+ /** 是否禁用菜单入口 */
15
+ disabled?: boolean;
16
+ /** 菜单项默认图标 */
17
+ defaultIcon?: string;
18
+ };
19
+ declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
20
+ disabled: boolean;
21
+ defaultIcon: string;
22
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
23
+ declare const _default: typeof __VLS_export;
24
+ export default _default;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @file SecLabAlert.vue
3
+ * @description SecLab 平台自研通知横幅组件,严格遵循 SDL 设计规范。
4
+ */
5
+ interface Props {
6
+ /** 警告标题 */
7
+ title?: string;
8
+ /** 警告描述 (如果有 title, 则在下方显示) */
9
+ description?: string;
10
+ /** 警告类型 */
11
+ type?: "success" | "warning" | "error" | "info";
12
+ /** 是否显示图标 */
13
+ showIcon?: boolean;
14
+ /** 是否可关闭 */
15
+ closable?: boolean;
16
+ }
17
+ declare var __VLS_12: {};
18
+ type __VLS_Slots = {} & {
19
+ default?: (props: typeof __VLS_12) => any;
20
+ };
21
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
22
+ close: () => any;
23
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
24
+ onClose?: (() => any) | undefined;
25
+ }>, {
26
+ type: "success" | "warning" | "error" | "info";
27
+ showIcon: boolean;
28
+ closable: boolean;
29
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
30
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
31
+ declare const _default: typeof __VLS_export;
32
+ export default _default;
33
+ type __VLS_WithSlots<T, S> = T & {
34
+ new (): {
35
+ $slots: S;
36
+ };
37
+ };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @file SecLabBreadcrumb.vue
3
+ * @description SecLab 平台自研面包屑导航容器。
4
+ */
5
+ interface Props {
6
+ /** 分隔符 */
7
+ separator?: string;
8
+ }
9
+ declare var __VLS_1: {};
10
+ type __VLS_Slots = {} & {
11
+ default?: (props: typeof __VLS_1) => any;
12
+ };
13
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
14
+ separator: string;
15
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
16
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
17
+ declare const _default: typeof __VLS_export;
18
+ export default _default;
19
+ type __VLS_WithSlots<T, S> = T & {
20
+ new (): {
21
+ $slots: S;
22
+ };
23
+ };
@@ -0,0 +1,13 @@
1
+ declare var __VLS_1: {};
2
+ type __VLS_Slots = {} & {
3
+ default?: (props: typeof __VLS_1) => any;
4
+ };
5
+ declare const __VLS_base: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
6
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
9
+ type __VLS_WithSlots<T, S> = T & {
10
+ new (): {
11
+ $slots: S;
12
+ };
13
+ };
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @file SecLabButton.vue
3
+ * @description SecLab 平台自研按钮组件,严格遵循 SDL 设计规范。
4
+ */
5
+ interface Props {
6
+ /** 按钮类型 */
7
+ type?: "primary" | "secondary" | "danger" | "warning" | "info";
8
+ /** 按钮尺寸 */
9
+ size?: "small" | "default" | "large";
10
+ /** 是否禁用 */
11
+ disabled?: boolean;
12
+ /** 是否加载中 */
13
+ loading?: boolean;
14
+ }
15
+ declare var __VLS_1: {};
16
+ type __VLS_Slots = {} & {
17
+ default?: (props: typeof __VLS_1) => any;
18
+ };
19
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
20
+ click: (event: MouseEvent) => any;
21
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
22
+ onClick?: ((event: MouseEvent) => any) | undefined;
23
+ }>, {
24
+ size: "small" | "default" | "large";
25
+ type: "primary" | "secondary" | "danger" | "warning" | "info";
26
+ disabled: boolean;
27
+ loading: boolean;
28
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
29
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
30
+ declare const _default: typeof __VLS_export;
31
+ export default _default;
32
+ type __VLS_WithSlots<T, S> = T & {
33
+ new (): {
34
+ $slots: S;
35
+ };
36
+ };
@@ -0,0 +1,34 @@
1
+ import { CSSProperties } from 'vue';
2
+ /**
3
+ * @file SecLabCard.vue
4
+ * @description SecLab 平台自研卡片组件,严格遵循 SDL 设计规范。
5
+ */
6
+ interface Props {
7
+ /** 阴影显示时机 */
8
+ shadow?: "always" | "hover" | "never";
9
+ /** 内容区自定义样式 */
10
+ contentStyle?: CSSProperties;
11
+ /** 默认插槽容器语义 */
12
+ contentRole?: "content" | "header";
13
+ /** 内容区是否撑满高度 (用于包含滚动表格的场景) */
14
+ fullHeight?: boolean;
15
+ }
16
+ declare var __VLS_1: {}, __VLS_3: {};
17
+ type __VLS_Slots = {} & {
18
+ header?: (props: typeof __VLS_1) => any;
19
+ } & {
20
+ default?: (props: typeof __VLS_3) => any;
21
+ };
22
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
23
+ shadow: "always" | "hover" | "never";
24
+ contentRole: "content" | "header";
25
+ fullHeight: boolean;
26
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
27
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
28
+ declare const _default: typeof __VLS_export;
29
+ export default _default;
30
+ type __VLS_WithSlots<T, S> = T & {
31
+ new (): {
32
+ $slots: S;
33
+ };
34
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @file SecLabCheckbox.vue
3
+ * @description SecLab 平台自研复选框组件,严格遵循 SDL 设计规范。
4
+ */
5
+ interface Props {
6
+ /** 绑定值 */
7
+ modelValue: boolean;
8
+ /** 禁用状态 */
9
+ disabled?: boolean;
10
+ }
11
+ declare var __VLS_1: {};
12
+ type __VLS_Slots = {} & {
13
+ default?: (props: typeof __VLS_1) => any;
14
+ };
15
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
16
+ "update:modelValue": (value: boolean) => any;
17
+ change: (value: boolean) => any;
18
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
19
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
20
+ onChange?: ((value: boolean) => any) | undefined;
21
+ }>, {
22
+ disabled: boolean;
23
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
24
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
27
+ type __VLS_WithSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @file SecLabDateTimeRangePicker.vue
3
+ * @description SecLab 自研日期时间范围选择器,支持快捷范围、日历选择与时间列表选择。
4
+ */
5
+ export interface DateTimeRangeValue {
6
+ startAt: number | null;
7
+ endAt: number | null;
8
+ }
9
+ interface ShortcutOption {
10
+ label: string;
11
+ value: "15m" | "1h" | "24h" | "7d" | "today";
12
+ }
13
+ interface Props {
14
+ /** 绑定的时间范围,使用 Unix epoch milliseconds。 */
15
+ modelValue: DateTimeRangeValue;
16
+ /** 占位文案 */
17
+ placeholder: string;
18
+ /** 起始端标签 */
19
+ startLabel: string;
20
+ /** 结束端标签 */
21
+ endLabel: string;
22
+ /** 快捷范围标题 */
23
+ shortcutsLabel: string;
24
+ /** 日历标题 */
25
+ calendarLabel: string;
26
+ /** 时间标题 */
27
+ timeLabel: string;
28
+ /** 清空按钮文案 */
29
+ clearLabel: string;
30
+ /** 确认按钮文案 */
31
+ confirmLabel: string;
32
+ /** 取消按钮文案 */
33
+ cancelLabel: string;
34
+ /** 当前应用语言 */
35
+ locale: string;
36
+ /** 星期标题,长度为 7。 */
37
+ weekDays: string[];
38
+ /** 快捷范围选项 */
39
+ shortcuts: ShortcutOption[];
40
+ /** 是否禁用 */
41
+ disabled?: boolean;
42
+ }
43
+ declare const __VLS_export: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
44
+ "update:modelValue": (value: DateTimeRangeValue) => any;
45
+ apply: (value: DateTimeRangeValue) => any;
46
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
47
+ "onUpdate:modelValue"?: ((value: DateTimeRangeValue) => any) | undefined;
48
+ onApply?: ((value: DateTimeRangeValue) => any) | undefined;
49
+ }>, {
50
+ disabled: boolean;
51
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
52
+ declare const _default: typeof __VLS_export;
53
+ export default _default;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @file SecLabDescriptions.vue
3
+ * @description SecLab 平台自研详情列表组件,用于展示键值对数据。
4
+ */
5
+ interface DescriptionItem {
6
+ label: string;
7
+ value?: string | number | boolean;
8
+ slot?: string;
9
+ span?: number;
10
+ }
11
+ interface Props {
12
+ /** 标题 */
13
+ title?: string;
14
+ /** 列表项配置 */
15
+ items: DescriptionItem[];
16
+ /** 原始数据对象 (用于插槽渲染) */
17
+ data?: Record<string, unknown>;
18
+ /** 列数 */
19
+ column?: number;
20
+ /** 是否显示边框 */
21
+ border?: boolean;
22
+ }
23
+ declare var __VLS_2: string, __VLS_3: {
24
+ item: DescriptionItem;
25
+ data: Record<string, unknown> | undefined;
26
+ };
27
+ type __VLS_Slots = {} & {
28
+ [K in NonNullable<typeof __VLS_2>]?: (props: typeof __VLS_3) => any;
29
+ };
30
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
31
+ column: number;
32
+ border: boolean;
33
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
34
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
35
+ declare const _default: typeof __VLS_export;
36
+ export default _default;
37
+ type __VLS_WithSlots<T, S> = T & {
38
+ new (): {
39
+ $slots: S;
40
+ };
41
+ };
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @file SecLabDialog.vue
3
+ * @description SecLab 平台自研通用对话框 (子窗口) 组件,符合 SDL 设计规范,具有高密度与精致的悬浮工程感。
4
+ */
5
+ interface Props {
6
+ /** 对话框是否显示 */
7
+ visible: boolean;
8
+ /** 对话框标题 */
9
+ title: string;
10
+ /** 自定义宽度,支持 px 或百分比,默认值为 500px */
11
+ width?: string;
12
+ /** 点击遮罩层是否允许自动关闭对话框,默认为 true */
13
+ closeOnClickOverlay?: boolean;
14
+ /** 对话框遮罩层级,默认使用 SDL modal 层级 */
15
+ zIndex?: number | string;
16
+ }
17
+ declare var __VLS_13: {}, __VLS_15: {};
18
+ type __VLS_Slots = {} & {
19
+ default?: (props: typeof __VLS_13) => any;
20
+ } & {
21
+ footer?: (props: typeof __VLS_15) => any;
22
+ };
23
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
24
+ close: () => any;
25
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
26
+ onClose?: (() => any) | undefined;
27
+ }>, {
28
+ width: string;
29
+ closeOnClickOverlay: boolean;
30
+ zIndex: number | string;
31
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
32
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
33
+ declare const _default: typeof __VLS_export;
34
+ export default _default;
35
+ type __VLS_WithSlots<T, S> = T & {
36
+ new (): {
37
+ $slots: S;
38
+ };
39
+ };
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @file SecLabDrawer.vue
3
+ * @description SecLab 平台自研侧边抽屉组件,严格遵循 SDL 设计规范。
4
+ */
5
+ type __VLS_Props = {
6
+ modelValue: boolean;
7
+ title?: string;
8
+ width?: string;
9
+ closeOnOverlay?: boolean;
10
+ };
11
+ declare var __VLS_13: {}, __VLS_15: {};
12
+ type __VLS_Slots = {} & {
13
+ default?: (props: typeof __VLS_13) => any;
14
+ } & {
15
+ footer?: (props: typeof __VLS_15) => any;
16
+ };
17
+ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
18
+ "update:modelValue": (value: boolean) => any;
19
+ close: () => any;
20
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
21
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
22
+ onClose?: (() => any) | undefined;
23
+ }>, {
24
+ title: string;
25
+ width: string;
26
+ closeOnOverlay: boolean;
27
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
28
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
29
+ declare const _default: typeof __VLS_export;
30
+ export default _default;
31
+ type __VLS_WithSlots<T, S> = T & {
32
+ new (): {
33
+ $slots: S;
34
+ };
35
+ };
@@ -0,0 +1,26 @@
1
+ interface Props {
2
+ /** 描述文字 */
3
+ description?: string;
4
+ /** SDL 图标名称。 */
5
+ icon?: string;
6
+ }
7
+ declare var __VLS_1: {}, __VLS_8: {}, __VLS_10: {};
8
+ type __VLS_Slots = {} & {
9
+ icon?: (props: typeof __VLS_1) => any;
10
+ } & {
11
+ default?: (props: typeof __VLS_8) => any;
12
+ } & {
13
+ extra?: (props: typeof __VLS_10) => any;
14
+ };
15
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
16
+ description: string;
17
+ icon: string;
18
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
19
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
20
+ declare const _default: typeof __VLS_export;
21
+ export default _default;
22
+ type __VLS_WithSlots<T, S> = T & {
23
+ new (): {
24
+ $slots: S;
25
+ };
26
+ };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @file SecLabFormItem.vue
3
+ * @description SecLab 平台自研表单项组件,处理标签和布局。
4
+ */
5
+ interface Props {
6
+ /** 标签文本 */
7
+ label?: string;
8
+ /** 是否必填 (显示红星) */
9
+ required?: boolean;
10
+ /** 提示文本 */
11
+ hint?: string;
12
+ }
13
+ declare var __VLS_1: {};
14
+ type __VLS_Slots = {} & {
15
+ default?: (props: typeof __VLS_1) => any;
16
+ };
17
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
18
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
21
+ type __VLS_WithSlots<T, S> = T & {
22
+ new (): {
23
+ $slots: S;
24
+ };
25
+ };
@@ -0,0 +1,17 @@
1
+ import { IconNamespace } from '@seclab-dev/icons';
2
+ interface Props {
3
+ name?: string | null;
4
+ namespace?: IconNamespace;
5
+ size?: number | string;
6
+ label?: string;
7
+ decorative?: boolean;
8
+ }
9
+ declare const __VLS_export: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
10
+ name: string | null;
11
+ namespace: IconNamespace;
12
+ size: number | string;
13
+ label: string;
14
+ decorative: boolean;
15
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
16
+ declare const _default: typeof __VLS_export;
17
+ export default _default;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @file SecLabInput.vue
3
+ * @description SecLab 平台自研输入框组件,严格遵循 SDL 设计规范。
4
+ */
5
+ interface Props {
6
+ /** 绑定值 */
7
+ modelValue: string | number | null;
8
+ /** 输入类型 */
9
+ type?: "text" | "password" | "textarea" | "number" | "datetime-local";
10
+ /** 占位符 */
11
+ placeholder?: string;
12
+ /** 是否禁用 */
13
+ disabled?: boolean;
14
+ /** 是否只读 */
15
+ readonly?: boolean;
16
+ /** 最大长度 */
17
+ maxlength?: number;
18
+ /** 行数 (仅 textarea 有效) */
19
+ rows?: number;
20
+ /** 是否显示密码切换按钮 */
21
+ showPassword?: boolean;
22
+ /** 最小值 (仅 number 有效) */
23
+ min?: number;
24
+ /** 最大值 (仅 number 有效) */
25
+ max?: number;
26
+ /** 步长 (仅 number 有效) */
27
+ step?: number;
28
+ /** 自动填充属性 */
29
+ autocomplete?: string;
30
+ }
31
+ declare const __VLS_export: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
32
+ "update:modelValue": (value: string) => any;
33
+ focus: (event: FocusEvent) => any;
34
+ blur: (event: FocusEvent) => any;
35
+ change: (value: string) => any;
36
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
37
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
38
+ onFocus?: ((event: FocusEvent) => any) | undefined;
39
+ onBlur?: ((event: FocusEvent) => any) | undefined;
40
+ onChange?: ((value: string) => any) | undefined;
41
+ }>, {
42
+ type: "text" | "password" | "textarea" | "number" | "datetime-local";
43
+ disabled: boolean;
44
+ readonly: boolean;
45
+ rows: number;
46
+ showPassword: boolean;
47
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
48
+ declare const _default: typeof __VLS_export;
49
+ export default _default;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @file SecLabLoading.vue
3
+ * @description SecLab 平台自研加载遮罩组件,严格遵循 SDL 设计规范。
4
+ */
5
+ interface Props {
6
+ /** 是否显示加载中 */
7
+ loading: boolean;
8
+ /** 提示文字 */
9
+ text?: string;
10
+ /** 是否覆盖父容器 */
11
+ cover?: boolean;
12
+ }
13
+ declare var __VLS_1: {};
14
+ type __VLS_Slots = {} & {
15
+ default?: (props: typeof __VLS_1) => any;
16
+ };
17
+ declare const __VLS_base: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
18
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
21
+ type __VLS_WithSlots<T, S> = T & {
22
+ new (): {
23
+ $slots: S;
24
+ };
25
+ };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @file SecLabMenu.vue
3
+ * @description SecLab 平台自研侧边栏菜单组件,支持分组和单选高亮,严格遵循 SDL 设计规范。
4
+ */
5
+ interface MenuItem {
6
+ key: string;
7
+ label: string;
8
+ }
9
+ interface MenuCategory {
10
+ key: string;
11
+ label: string;
12
+ children: MenuItem[];
13
+ }
14
+ interface Props {
15
+ /** 当前选中的菜单项 key */
16
+ modelValue: string;
17
+ /** 菜单项列表 (带分组) */
18
+ items: MenuCategory[];
19
+ }
20
+ declare const __VLS_export: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
21
+ select: (value: string) => any;
22
+ "update:modelValue": (value: string) => any;
23
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
24
+ onSelect?: ((value: string) => any) | undefined;
25
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
26
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
27
+ declare const _default: typeof __VLS_export;
28
+ export default _default;