@bsuite/ ui (英语)
BSuite应用软件(D2C Neon Electric + Corporation品牌)的共享UI原始产品.
船舶作为 npm 包,因为Vercel 部署 每一个 BSuite 应用程序从自己的
GitHub repo — 父单曲 packages/ 目录不存在于
vercel构建上下文。 消费者从npm安装有被固定的铸模.
构成部分
核心原始(v. 4.0+) s
该软件包现在拥有共享的 第一级 UI 原始应用程序应该聚合于:
import {
Button,
Dialog,
DialogContent,
DialogHeader,
DialogTitle,
EmptyState,
ErrorBoundary,
LoadingSpinner,
StatusBadge,
} from '@bsuite/ui'
这些原始人只使用 BSuite/shadcn 语义符号类(bg-primary, (中文(简体) ),
text-muted-foreground, (中文(简体) ), border-border, (中文(简体) ), text-status-successd2C应用程序可以
把它剥光 @bsuite/theme 布莱登可以将同样的角色映射到
公司调色板.
故事书
从此软件包运行共享原始相册 :
pnpm -C packages/ui storybook
pnpm -C packages/ui build-storybook
DotPattern
全景口点-平面背景. 特别工作组 <pattern> 平板-~1 DOM 节点
(vs~1800运动. 一个典型的取景口上的圆形节点).
import { DotPattern } from '@bsuite/ui'
<div className="relative">
<DotPattern
width={28}
height={28}
cr={1.5}
className="opacity-[0.35] text-muted-foreground"
/>
{/* page content */}
</div>
通过语义 Tailwind 控制颜色 text-* 水电费(水电费)
fill="currentColor") (中文(简体) ).
Logo
Slot-aware,主题-aware,品牌-aware标志组件 所有 BSuite app.
import { Logo } from '@bsuite/ui'
<Logo slot="header" colorScheme="auto" />
D2CDefaultLogo
内置 D2C 霓虹电器 SVG 标识(无资产依赖性).
import { D2CDefaultLogo } from '@bsuite/ui'
<D2CDefaultLogo className="h-8 w-auto" />
品牌组件(v0.3.0+)
OklchColorPicker
OKLCH色彩格式(BSite标准)的色彩输入组件.
import { OklchColorPicker } from '@bsuite/ui'
<OklchColorPicker
value="oklch(0.546 0.215 262.9)"
onChange={(value) => console.log(value)}
label="Primary Color"
description="Your brand's primary color in OKLCH format"
/>
特征 :
- 现场颜色预览
- L( 亮度)、 C( 色相)、 H( 色相) 输入字段
- 方便调整的滑动控制
- 验证 OKLCH 格式
- 可访问标签和错误消息
ColorEditorSheet
用于编辑品牌颜色的平面/对话框,并配有基于槽的颜色编辑器.
import { ColorEditorSheet, OklchColorPicker } from '@bsuite/ui'
<ColorEditorSheet
open={isOpen}
onOpenChange={setIsOpen}
title="Edit Primary Color"
description="Adjust the OKLCH color values"
value="oklch(0.546 0.215 262.9)"
onSave={(value) => updateBranding('primary', value)}
renderEditor={(props) => <OklchColorPicker {...props} />}
/>
特征 :
- 幻灯片出工作表接口
- 基于槽的颜色编辑器( 输入您自己的拾取器)
- 保存/取消动作
- 反应设计
- 可访问的对话执行
BrandingCard
用于显示和编辑租户品牌配置的卡片组件.
import { BrandingCard, OklchColorPicker } from '@bsuite/ui'
<BrandingCard
branding={{
primary: "oklch(0.546 0.215 262.9)",
accent: "oklch(0.769 0.132 191.7)",
logo_url: "https://example.com/logo.svg",
company_name: "Acme Corp"
}}
onUpdate={async (key, value) => {
await updateTenantBranding(key, value)
}}
renderColorEditor={(props) => <OklchColorPicker {...props} />}
/>
特征 :
- 显示当前品牌值( 颜色、 标志、 公司名称)
- 编辑每个品牌属性的按钮
- 与 ColorEditor Sheet 合并色彩编辑
- 标识的图像预览
- 无障碍和响应性设计
- 支持轻/暗模式标志变体
标记属性 :
primary- 主动作颜色(OKLCH)accent- 丙烯/二级颜色(OKLCH)logo_url- 主要标志 URLlogo_light_url- 轻模式标志变体(可选)logo_dark_url- 暗模式标志变体(可选)favicon_url- 法维康URL(16x16或32x32)company_name- 备选文本的公司名称
EntitySelector (v1.2.0+) (中文(简体) )
通用的、可忽略的可搜索组合框,用于从任意一行中选择一行 须菩提座. 从crm7(AD-5,2026-08-17)中摘录的crm7有65个文件: 收养和另外两个应用 开始亲手传送自己的副本 相同的路径。 这是目前唯一的执行.
数据访问是依赖注入的——软件包没有Supabase
客户端,因为每个应用程序的客户端形状不同(Vite-SPA singleton,
按请求数 createClient() 工厂,不同 storageKey, . : (中文(简体) )
import { EntitySelector } from '@bsuite/ui'
import { supabase } from '@/lib/supabase' // your app's own client
<EntitySelector<Employer>
supabaseClient={supabase}
table="employers"
value={form.employer_id}
onSelect={(emp) => setValue('employer_id', emp?.id ?? null)}
displayField={(r) => r.business_name}
secondaryField={(r) => r.abn ?? r.industry}
searchColumns={['business_name', 'trading_name', 'abn']}
/>
建议的每项申请模式: 将导入包入本地文件一次
绑起你的客户端, 所以其余的应用程序的~十几个呼叫网站
永远不要重复 supabaseClient={supabase}数字 :
// src/components/entity/EntitySelector.tsx
import { EntitySelector as BaseEntitySelector, type EntitySelectorProps as BaseProps } from '@bsuite/ui'
import { supabase } from '@/lib/supabase'
export type EntitySelectorProps<T extends Record<string, unknown>> = Omit<BaseProps<T>, 'supabaseClient'>
export function EntitySelector<T extends Record<string, unknown>>(props: EntitySelectorProps<T>) {
return <BaseEntitySelector<T> supabaseClient={supabase} {...props} />
}
特征 : 已卸出型号头( e)ilike 跨越已配置的列,
可选的横切图为(schema 道具),a filterFn 逃生舱门
任意 PostgREST 过滤链, “一发” 建议选项( 已列)
链接在较早的屏幕上,在任何打字前显示),一个自动安全
onSelect (当呼叫者通过一个
导入/ RPC 步骤),以及一个明显的错误状态(不是相同的“ 无结果” 复制
一个真正的空搜索显示).
也输出用于建造同一种视觉语言的自定义拾取器:
Command, (中文(简体) ), CommandInput, (中文(简体) ), CommandList, (中文(简体) ), CommandGroup, (中文(简体) ), CommandItem, (中文(简体) ),
CommandEmpty, (中文(简体) ), Popover, (中文(简体) ), PopoverTrigger, (中文(简体) ), PopoverContent。 。 。 .
用户
cn(...classes)
阴影风格的类Name 合并 - clsx + 键 tailwind-merge备查
想要作曲的消费者 @bsuite/ui 有本地覆盖的组件
别再扯出阴影.
模块导出
该套件提供子路径导出, 用于更好的树摇:
// Main exports
import { Logo, BrandingCard, Button, StatusBadge } from '@bsuite/ui'
// Dot pattern only
import { DotPattern } from '@bsuite/ui/dot-pattern'
// Utils only
import { cn } from '@bsuite/ui/utils'
// Branding components only
import { BrandingCard, ColorEditorSheet, OklchColorPicker } from '@bsuite/ui/branding'
// Primitive subpaths
import { Button } from '@bsuite/ui/button'
import { DialogContent } from '@bsuite/ui/dialog'
import { EmptyState } from '@bsuite/ui/empty-state'
import { EntitySelector } from '@bsuite/ui/entity-selector'
import { Command, CommandInput } from '@bsuite/ui/command'
import { Popover, PopoverContent } from '@bsuite/ui/popover'
// SVG asset
import logoSvg from '@bsuite/ui/assets/d2c-default-logo.svg'
释放
- 在下方编辑源
src/。 。 。 . pnpm -C packages/ui test所有案件都必须通过.pnpm -C packages/ui build- 发射dist/。 。 。 .- 弹出版本
package.json(em. - 将软件包释放的 PR 合并到
main· ;.github/workflows/publish-ui.yml通过 npm 信任出版商出版(GitHub Actions OIDC, no)NPM_TOKEN) (中文(简体) ). - 更新消费者
package.json重新生成锁文件 外部 bsuite 树( 见根)CLAUDE.md第7条) lockfile + 一个消费者侧凸起式 PR.
从来没有 使用情况 workspace:* 或者说 file:../packages/ui 用于此软件包的 a
消费者 Vercel Building无法解决这些问题.
发布 1.3.4
最后敲定 1.3.4-next.2 源代码没有进一步的运行时间变化。 那个预览
已经拒绝每个样式表上下文中的资源加载图像函数
并包括下面可访问选择器的清晰控制。 消费者采用
在公布和检查现有所储存的品牌CSS之后,将推出稳定版本.
自定义品牌 CSS 边界
资源加载图像函数被拒绝 完整样式表,在逃出解码后,
案件折叠和供应商前缀删除,每处上下文(规则, @media, (中文(简体) ), @supports
前奏 键盘, @property 和定制财产价值, var() 倒计时 :
url, (中文(简体) ), src, (中文(简体) ), image, (中文(简体) ), image-set, (中文(简体) ), cross-fade, (中文(简体) ), element 财务报告和审定财务报表 paint. 纯油漆
例如 linear-gradient, (中文(简体) ), radial-gradient, (中文(简体) ), conic-gradient 联合国
重复表格仍然被接受,但须遵守以下语义-颜色规则。 存储
使用这些功能的租户CSS现在无法验证; 测量存储的
数据是一个消费者-采纳步骤,而不是这个软件包变化的一部分.
validateCustomCss 双向导出 @bsuite/ui 财务报告和审定财务报表 @bsuite/ui/branding。 。 。 .
在保存样式表前调用它 。 接受的结果包含不变的结果
样式表; 无效或不支持的结果包含可操作的理由,并且,
可用时,源行. 保留作者的草稿拒绝.
sanitizeCustomCss 每个运行时间槽保留其现有的字符串 API,并
返回已拒绝样式表的空字符串。 通过插入接受的CSS
HTMLStyleElement.textContent从HTML插入.
拥有的剖析器为CSS-tree 3.2.1. 其AST和财产/描述语法允许 排版、打字、媒体/支持/容器/层规则、键框和界限 本地自定义属性。 彩色消费者必须使用语义主题变量; 透明且当前颜色仍为中性值。 原始调色板颜色, 端点颜色,包括α形式、不安全的资源、受保护的角色和 阴影定义, 和不支持的语法拒绝整个样式表 。 逃亡, 可变回落、别名级联和打入自定义财产初始值 穿过同一个边界。 解析的 @ supports 容量探测器不画或 重新界定角色;其真正的规则块仍然受到注意,资源/可执行 整个样式表仍然适用排除。 自定义动画和网格名称保留其大小写和 不被误认为颜色绑定。 解析器和别名的扩展 明确源、符、深度和节点限制.
主题调色板命名空间及其颜色别名也受到保护,因为 主题角色在已提交的样式表之外消耗它们。 尾风颜色和 整个油漆/效果槽(包括梯度、阴影、环和口罩)不能 重新定义。 它的数位变换,位置和口罩几何槽仍然保留 可编写,并检查有颜色的别名和回放。 测试得到这个 主题来源和实际排放的 Tailwind 公用事业的边界; 此 不声称在不相关的外部样式表中识别任意变量.
编辑器必须表面拒绝,而不是默默地保存空CSS. 运行时间 还需要验证,因为现有的持续CSS早于这一规则. BSU, CRM7 和 Braden 是当前六应用程序中的三个定制CSS消费者 来源普查;仍采用出版物包装和部署用户验收 分开的大门.
EntitySelector 显示选中的可选本地兄弟清晰按钮
实体。 它的可访问名称包括所选标签. 单击、输入和
空间呼叫 onSelect(null) 一次返回焦点到组合框中而不打开
选择者或提交周围表格。 残疾人 clearable=false
合同适用于此按钮。 承诺回归的父储蓄仍然具有权威性:
a 有待澄清的防止重新提交和相互冲突的选择/设定,
拒绝保留所保存的选择
显示重试消息,然后按照控值成功清除。 仅注重定居返回
(a) 仍在启动控制中或因使其失效而丢失;
焦点被保留到另一个字段.
选定的ID水合和过滤是分开的
合同,但因这一修补而保持不变.