{"_id":"@composy/portal-core","name":"@composy/portal-core","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@composy/portal-core","version":"0.0.1","description":"企业门户编辑器 - Portal editor with drag-and-drop widget layout","keywords":["portal","homepage","widget","dashboard","ldesign","typescript"],"author":{"name":"LDesign Team"},"license":"MIT","type":"module","sideEffects":false,"exports":{".":{"types":"./es/index.d.ts","import":"./es/index.js","require":"./lib/index.cjs","default":"./es/index.js"},"./constants":{"types":"./es/constants/dom.d.ts","import":"./es/constants/dom.js","require":"./lib/constants/dom.cjs","default":"./es/constants/dom.js"},"./core/*":{"types":"./es/core/*.d.ts","import":"./es/core/*.js","require":"./lib/core/*.cjs","default":"./es/core/*.js"},"./layout/*":{"types":"./es/layout/*.d.ts","import":"./es/layout/*.js","require":"./lib/layout/*.cjs","default":"./es/layout/*.js"},"./renderer/*":{"types":"./es/renderer/*.d.ts","import":"./es/renderer/*.js","require":"./lib/renderer/*.cjs","default":"./es/renderer/*.js"},"./themes/*":{"types":"./es/themes/*.d.ts","import":"./es/themes/*.js","require":"./lib/themes/*.cjs","default":"./es/themes/*.js"},"./types":{"types":"./es/types/index.d.ts","import":"./es/types/index.js","require":"./lib/types/index.cjs","default":"./es/types/index.js"},"./utils":{"types":"./es/utils/index.d.ts","import":"./es/utils/index.js","require":"./lib/utils/index.cjs","default":"./es/utils/index.js"},"./widgets/*":{"types":"./es/widgets/*.d.ts","import":"./es/widgets/*.js","require":"./lib/widgets/*.cjs","default":"./es/widgets/*.js"},"./package.json":"./package.json"},"main":"./lib/index.cjs","module":"./es/index.js","types":"./es/index.d.ts","unpkg":"./dist/index.min.js","jsdelivr":"./dist/index.min.js","scripts":{"build":"ldesign-builder build","postbuild":"node --experimental-strip-types ../../../../scripts/index.ts workspace:normalize-package-output --cwd .. --target packages/core && node --experimental-strip-types ../../../../scripts/index.ts workspace:check-package-outputs --cwd .. --target packages/core","lint":"eslint . --cache","lint:check":"eslint . --cache --max-warnings 0","lint:fix":"eslint . --cache --fix","type-check":"tsc --noEmit","test":"ltesting run:unit","test:run":"ltesting run:unit"},"dependencies":{"@composy/grid-core":"^0.0.1"},"devDependencies":{"@antfu/eslint-config":"9.1.0","@composy/builder":"^0.0.1","@composy/testing":"^0.0.1","eslint":"10.7.0","typescript":"5.9.3"},"publishConfig":{"registry":"http://npm.longrise.cn:6286/"},"typings":"./es/index.d.ts","browser":"./dist/index.js","_id":"@composy/portal-core@0.0.1","_nodeVersion":"23.11.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-6yYCZ//YIedVuTqLuwHhjkAgKcnNA1kEeEj4nEDKOke86jwZQUfY2rInfNXav8fbDyvCbMyrWwCY6YWmQm+NvQ==","shasum":"7b442398becdd1379ae144fdbe285b3e660a0bfb","tarball":"https://registry.npmjs.org/@composy/portal-core/-/portal-core-0.0.1.tgz","fileCount":116,"unpackedSize":843606,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBNIJDUZmLq/+RKTZT72hHGsosKy/beMirwhLL3D/wVCAiBXNqujo9RngdHLrQTOtYS9QDUYcIBpn/pRYW8eLd3kAw=="}]},"_npmUser":{"name":"swimly","email":"979741120@qq.com"},"directories":{},"maintainers":[{"name":"swimly","email":"979741120@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/portal-core_0.0.1_1786949237942_0.9120724724541134"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-17T06:47:17.602Z","0.0.1":"2026-08-17T06:47:18.085Z","modified":"2026-08-17T06:47:18.382Z"},"maintainers":[{"name":"swimly","email":"979741120@qq.com"}],"description":"企业门户编辑器 - Portal editor with drag-and-drop widget layout","keywords":["portal","homepage","widget","dashboard","ldesign","typescript"],"author":{"name":"LDesign Team"},"license":"MIT","readme":"# @composy/portal-core\n\n企业门户编辑器核心模块 - 门户页面可视化搭建与展示\n\n## 功能特性\n\n- 可视化门户页面编辑器（拖拽搭建、栅格布局、组件调整）\n- 丰富的内置组件（待办、公告、日程、快捷入口、数据卡片、图表、嵌入、时钟）\n- 主题切换（亮色/暗色）与 LDesign token 集成\n- 支持自定义 Widget 注册\n- 响应式布局与碰撞检测\n\n## 安装\n\n```bash\npnpm add @composy/portal-core\n```\n\n## 快速开始\n\n```typescript\nimport { createPortalEditor } from '@composy/portal-core'\n\nconst editor = createPortalEditor({\n  container: '#portal-editor',\n  layout: {\n    columns: 12,\n    rowGap: 16,\n    colGap: 16,\n    items: [],\n  },\n  theme: 'light',\n})\n\neditor.on('change', (layout) => {\n  console.log('布局变化：', layout)\n})\n\neditor.addWidget('chart')\n```\n\n## Vue 使用\n\n```vue\n<template>\n  <LDesignPortalEditor v-model=\"layout\" theme=\"light\" />\n</template>\n\n<script setup>\nimport { ref } from 'vue'\nimport { LDesignPortalEditor } from '@composy/portal-vue'\n\nconst layout = ref(null)\n</script>\n```\n\n## Class 命名规范\n\n所有 DOM class 使用 `ldesign-portal-*` 前缀，遵循 BEM 风格：\n\n| Class | 说明 |\n|-------|------|\n| `ldesign-portal-editor` | 编辑器根 |\n| `ldesign-portal__sidebar` | 侧边栏 |\n| `ldesign-portal__widget` | Widget 卡片 |\n| `ldesign-portal__widget--selected` | 选中状态 |\n| `ldesign-portal--disabled` | 禁用状态 |\n\n## CSS 变量\n\n组件使用 `--ldesign-portal-*` CSS 变量，默认值引用 LDesign color/size token：\n\n```css\n--ldesign-portal-color-primary: var(--ld-primary-600);\n--ldesign-portal-bg-page: var(--ld-bg-page);\n--ldesign-portal-border-color: var(--ld-border);\n--ldesign-portal-text-primary: var(--ld-text-primary);\n--ldesign-portal-radius-lg: var(--ld-radius-lg, 10px);\n--ldesign-portal-spacing-md: var(--ld-size-4, 16px);\n```\n\n## Style 加载\n\n```typescript\n// 使用默认主题\nimport '@composy/portal-core/dist/style.css'\n```\n\n## 构建产物\n\n| 目录 | 说明 |\n|------|------|\n| `dist/` | UMD 格式（含 min.js） |\n| `es/` | ESM 格式 |\n| `esm/` | ESM 格式（preserveModules） |\n| `lib/` | CJS 格式 |\n\n## API\n\n### createPortalEditor\n\n```typescript\ncreatePortalEditor(config: PortalEditorConfig): PortalEditorInstance\n```\n\n### PortalEditorInstance\n\n- `getLayout()` / `setLayout(layout)` — 布局读写\n- `addWidget(type, position?, size?, data?)` — 添加 Widget\n- `removeWidget(id)` / `select(id)` — 删除/选中 Widget\n- `setTheme(theme)` / `setDisabled(disabled)` — 主题/禁用\n- `exportLayout()` / `importLayout(json)` — 导入导出\n- `on(event, handler)` / `destroy()` — 事件/销毁\n\n## 内置 Widget\n\n| 类型 | 说明 | 默认尺寸 |\n|------|------|----------|\n| `todo` | 我的待办 | 4x3 |\n| `announcement` | 公告通知 | 4x3 |\n| `calendar` | 今日日程 | 4x3 |\n| `shortcuts` | 快捷入口 | 4x3 |\n| `dataCard` | 数据卡片 | 4x3 |\n| `chart` | 趋势图表 | 6x3 |\n| `iframe` | 外部嵌入 | 6x4 |\n| `clock` | 时钟 | 3x2 |\n\n## 验证\n\n```bash\npnpm --dir libraries/portal/packages/core run type-check\npnpm --dir libraries/portal/packages/core run build\nnode libraries/portal/scripts/check-package-outputs.mjs all\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-5115f4975bd103c61864328d8d8b78ad"}