@oplytics /共享的ui
为所有人共享UI组件库 Oplytics.digital 子域。提供标准化布局、层次管理、RBAC、报告、挂钩和设计令牌作为可重用的构建块。
安装
pnpm add @oplytics/shared-ui
需要
.npmrc与@oplytics:registry=https://npm.pkg.github.com
模块
| 模块 | 进口 | 描述 |
|---|---|---|
| 布局 | @oplytics/shared-ui/layout | 配置驱动的侧边栏,页眉,页脚,布局工厂 |
| 层次结构 | @oplytics/shared-ui/hierarchy | 组织层次结构类型、选择状态、企业覆盖 |
| RBAC | @oplytics/shared-ui/rbac | 角色模型,权限检查,错误常量 |
| 报告 | @oplytics/shared-ui/reporting | 事件报告和反馈工具栏类型/配置 |
| 组件 | @oplytics/shared-ui/components | SharedFooter, NotFound, ErrorBoundary, ViewOnlyBadge, AcceptanceBadge类型 |
| 钩子 | @oplytics/shared-ui/hooks | 使用移动,使用组合,使用持久化 |
| 主题 | @oplytics/shared-ui/theme | 设计令牌,调色板,排版,CSS变量 |
| 行动 | @pablo2410/shared-ui/actions | 到期日期状态(过期,即将到期)及其芯片,用于操作和租约 |
| I18n | @pablo2410/shared-ui/i18n | 翻译: useT()英语后退,语言选择, formatDate |
快速入门
// RBAC — check permissions
import { hasMinimumRole, ALL_ROLES } from "@oplytics/shared-ui/rbac";
if (hasMinimumRole(user.role, "enterprise_admin")) {
// show admin features
}
// Hierarchy — enterprise override
import { applyEnterpriseOverride } from "@oplytics/shared-ui/hierarchy";
const resolvedUser = applyEnterpriseOverride(user, req.headers.cookie);
// Layout — service config
import {
SERVICE_CONFIGS,
defineServiceLayout,
} from "@oplytics/shared-ui/layout";
const myConfig = SERVICE_CONFIGS.sqdcp;
// Theme — design tokens
import { OPLYTICS_COLORS, OPLYTICS_FONTS } from "@oplytics/shared-ui/theme";
// Hooks
import { useMobile, usePersistFn } from "@oplytics/shared-ui/hooks";
Opi旅游
每个模块都以同样的方式进行入门之旅。模块提供 定义和标记其聚光灯步骤指向的元素-仅此而已 是每个模块(没有存储,没有触发,没有叙述代码):
import {
useRegisterTour,
type TourDefinition,
} from "@pablo2410/shared-ui/tour";
// Module scope (or useMemo) so the object is stable across renders.
const tour: TourDefinition = {
id: "policy-deployment", // lowercase-kebab; never rename once shipped
steps: [
{ id: "welcome", kind: "intro", label: "Welcome", fallbackText: "…" },
{
id: "plans",
kind: "service",
label: "Policy plans",
fallbackText: "…",
spotlight: { selector: "plan-card" }, // <div data-tour-target="plan-card">
},
],
};
function PolicyPage() {
useRegisterTour(tour);
// …
}
然后共享代码做什么:
- 触发 - - - - - -
DashboardLayout的标题只显示“参观” Tour已注册,并从步骤1开始重播。 - 进步 -通过传送门读写
onboarding.userTourState/setUserTourState,因此它跟随用户跨模块。没有模块表。 - 叙述 -每一步调用传送门
ai.askOpi带着保留的onboarding服务(传送门的登录角色),回落到 一步的fallbackText如果Opi不可用。 - 显示歌词 -默认关闭;集
autoStart: true关于的定义 对没有参观过或中途离开的用户开放。模块从来没有 安装他们自己的OpiTourHost- - - - - -DashboardLayout挂载一个。
每个巡回存储需要Portal接受并回显a tourId 在这两个方面
端点。在此之前,模块巡视的进度不会被保存(读取失败)
安全,没有自动打开,旅游和它的头回放仍然工作),和
Service Hub tour自己的进度永远不会被覆盖。
翻译
@pablo2410/shared-ui/i18n 是每个应用程序使用的一个翻译设置(i18next与react-i18next)。英语是默认值,而退一步:在其他语言中缺少的字符串将以英语显示,永远不会作为其键或空白。键看 <app>.<page>.<thing>;共享ui自己的是 shared. 钥匙在 src/i18n/en.json 和 fr.json.
import { I18nProvider, createI18n, useT } from "@pablo2410/shared-ui/i18n";
// Once, around the app, with the app's own strings beside shared-ui's:
const i18n = createI18n({ language: user.language, resources: { en, fr } });
<I18nProvider i18n={i18n} onLanguageChange={saveLanguage}>
…
</I18nProvider>;
// In a component:
const t = useT();
t("portal.home.title");
- 在没有提供程序的情况下,shared-ui的组件仍然以英语或浏览器选择的语言呈现。
- 语言选择器位于shell的用户菜单中(英语、法语)。它把选择交给
onLanguageChange(在DashboardLayout或者I18nProvider);如果没有,浏览器会记住它。DashboardLayout的languageProp将外壳切换为应用程序已经知道的语言。 - 一款没有每种语言都有文本的应用程序,但它提供的是:
<I18nProvider languages={["en"]}>. 然后,选择器只列出那些,保留的语言永远不会是活动语言(即使是之前选择的语言),并且useLanguage().languages给出相同的列表。如果不设置,则提供所有语言(shared-ui#211)。 formatDate和formatNumber(或useFormat())格式通过Intl用现在的语言;英语是en-GB.- 客户自己输入的内容显示为输入的,而不是翻译的。
- 服务器和营销站点的服务目录保持英文。
localizeService(service, t)(从/services)提供服务的标语、描述和入门文本t的语言。 - 如果组件呈现不在中的文本,则测试失败
en.json,如果显示文本位于代码(a)中label,title或者description值,一个道具默认值,一个*_LABELMap),或者iffr.json不匹配en.json钥匙对钥匙。
主题CSS
导入规范的Oplytics主题变量:
@import "@oplytics/shared-ui/theme/oplytics-theme.css";
这提供了所有 --oplytics-* 背景、文本、重音、边框、间距、半径和阴影的CSS自定义属性。
开发
pnpm install
pnpm build # Build with tsup
pnpm test # Run vitest
pnpm typecheck # TypeScript check
体系结构
这个包是可树摇的,每个模块都有单独的入口点。每个子域只导入它需要的内容:
src/
layout/ # SharedSidebar, createServiceLayout, serviceConfigs
hierarchy/ # orgHierarchy types, enterpriseOverride
rbac/ # Roles, permissions, error constants
reporting/ # ReportingToolbar types and config
components/ # SharedFooter, NotFound, ErrorBoundary types
hooks/ # useMobile, useComposition, usePersistFn
theme/ # Design tokens, CSS variables
actions/ # getDueDateStatus, DueDateChip (Action Manager and Policy Deployment)
i18n/ # i18next set-up, useT, en.json / fr.json, LanguagePicker, formatDate
版本控制
- v0.x -类型、配置和纯实用程序(没有React组件渲染)
- v1.0 -完整的React组件与shadcn/ui原语捆绑
许可证
未经许可-内部整形。仅限数字使用。