mcpField
M
marketplace-build-component

marketplace-build-component

github.com/vercel-labs设计与 UI561 次安装30 周前更新
代码仓库

关于 marketplace-build-component

marketplace-build-component 指导开发者使用 Blok 设计系统构建 Sitecore Marketplace 应用界面,并根据扩展类型和可用空间选择组件及 SDK 数据状态处理方式。

主要功能

  1. 01使用 Blok 设计系统组件
  2. 02通过 shadcn CLI 安装组件
  3. 03按扩展类型选择界面模式
  4. 04处理 SDK 加载与错误状态
  5. 05适应 iframe 尺寸和主题

适用场景

  1. 01构建紧凑的自定义字段
  2. 02创建仪表板小部件
  3. 03设计 Pages 上下文面板
  4. 04实现全屏 Marketplace 界面

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/vercel-labs/sitecore-skills --skill marketplace-build-component

安装后在 Claude Code 中输入/marketplace-build-component确认已加载。

附带文件references/blok-components.md

详细介绍

使用 Blok Design System 构建 UI

你正在帮助用户使用 Blok 设计系统(Sitecore 基于 shadcn 的组件库)为 Sitecore Marketplace 应用构建 UI 组件。

核心原则

  1. 始终使用 Blok 组件 — 它们与 Sitecore 宿主 UI 匹配,并自动支持浅色/深色主题
  2. SDK 数据集成 — 获取 SDK 数据时使用加载状态(Skeleton)和错误状态(Alert)
  3. 了解扩展点限制 — 不同的扩展类型有不同的 UI 限制(见下文)
  4. 响应式 — 组件会在尺寸各异的 iframe 中渲染

安装组件

通过 shadcn CLI 安装 Blok 组件:

# Install the Blok theme (required first)
npx shadcn@latest add https://marketplace-sdk.sitecorecloud.io/r/blok-theme.json

# Install individual components
npx shadcn@latest add https://marketplace-sdk.sitecorecloud.io/r/<component-name>.json

请参阅 blok-components.md,了解完整的组件目录和安装命令。

不同扩展类型的 UI 模式

紧凑字段(custom-field)
  • 空间非常有限(宽约 300px,高度可变)
  • 使用:Input、Select、Badge、小型内联组件
  • 避免:表格、大型布局、模态框
仪表板小组件
  • 中等空间(默认约 400x300px,可调整大小)
  • 使用:卡片、图表、统计信息、紧凑表格
  • 适用于:汇总数据、快捷操作
Pages 上下文面板
  • 侧边面板(宽约 350px,高度占满)
  • 使用:垂直布局、列表、Accordion、Tabs
  • 适用于:当前页面的上下文信息、操作
全屏
  • Sitecore shell 内的整个视口
  • 使用:任何组件、复杂布局、表格、表单
  • 适用于:完整的 CRUD 界面、仪表板、设置
独立页面
  • 独立页面,不在 Sitecore shell 中
  • 使用:任何组件,完全自由发挥
  • 适用于:面向公众的页面、OAuth 回调

SDK 数据集成模式

"use client";

import { useEffect, useState } from "react";
import { useMarketplaceClient, useAppContext } from "@/components/providers/marketplace";
import { Skeleton } from "@/components/ui/skeleton";
import { Alert, AlertDescription } from "@/components/ui/alert";

export function MyComponent() {
  const { client } = useMarketplaceClient();
  const appContext = useAppContext();
  const [error, setError] = useState<string | null>(null);

  const loading = !appContext;

  if (loading) return <Skeleton className="h-32 w-full" />;
  if (error) return <Alert variant="destructive"><AlertDescription>{error}</AlertDescription></Alert>;

  return <div>{/* Render data */}</div>;
}

参考文件

评论

支持 Markdown