聪明的
ably-ui 是Ably设计系统库的所在地(https://hably-ui.herokuapp.com/ 页面存档备份,存于互联网档案馆) (中文(简体) ). 它提供了一个展示、开发/测试环境以及不同可分配产品的出版管道.
图书馆结构
库由模块,资产,和JavaScript组件所建. 一个模块是所有这些的容器.
例如 core 模块提供了可以构建基于网络的界面的“色调”的最一般要素——打字、颜色、间隔(即容器)等。 模块中的组件支持我们最常见的构建"色调"的需要,如导航元素,脚印,英雄部分,代码样本等. 资产,和JavaScript都由模块中的组件共享.
部件并不直接要求资产——相反,由消费者来装入资产并传递给部件. 这确保了URL的灵活性.
安装
国家预防机制
这类安装使您可以访问模块/组件资产以及反应组件.
pnpm add @ably/ui # Preferred
附加自“% 1” 导入的 JavaScript Core 模块 window 对象 :
import "@ably/ui/core/scripts";
// AblyUi.Core is now available on window
要导入 Es6 core 模块并显示任何窗口 :
import ablyUiCore from "@ably/ui/core/scripts";
将 JavaScript 导入为 Accordion 组件 :
import Accordion from "@ably/ui/core/accordion/component";
如果您的捆绑器支持 CSS 导入, 您也可以导入 :
import "@ably/ui/core/styles.css";
设立 TailwindCSS
目前,AblyUI CSS的建设是为了与TailwindCSS合作. 要融入您的应用程序:
- 在您的工程中添加 AblyUI
- 在您的工程中添加 TailwindCSS
- 按项目类型:
- 如果安装时间超过5分钟或有问题,请尝试一次安装一个库
- 确保您正在安装 v2
npm install -D [email protected]
- 确定您使用的格式
@import 'tailwindcss/base';...在你身边global.css文件而不是@tailwind/base来自 Tailwind v3 的格式 - 在您的
tailwind.config.js。注意不同的配置属性总是由ablyUIConfig数字 :
const extendConfig = require("@ably/ui/tailwind.extend.js");
module.exports = extendConfig((ablyUIConfig) => ({
...ablyUIConfig,
purge: {
content: [
...(relative - globbed - paths - to - your - templates),
...ablyUIConfig.purge.content,
],
options: {
...ablyUIConfig.purge.options,
},
},
}));
- 在 CSS 文件中, 您添加了您的尾风声明, 导入 CSS 用于您需要的模块和组件 :
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
@import "@ably/ui/reset/styles.css"; /* needed as we disable the default Tailwind reset */
@import "@ably/ui/core/styles.css"; /* styles for core module components and more */
@import "@ably/ui/core/Flash/component.css";
导入反应组件
请注意,根据组成部分的不同,你可能需要包括CSS和JS:
import Meganav from "@ably/ui/core/Meganav";
使用量
图标
图标有两种格式支持不同的应用程序类型:
- 反应组件导入 (推荐React Apps) (中文(简体) )
- SVG 打印表 (非反应应用程序的倒置)
我们提供对收押地和第三方托管的当地定制资产的访问 赫罗伊孔斯 图书馆.
反应应用( 建议)
使用图标反应组件
这个 Icon 组件是反应应用程序的首选方法,提供自动回落和一致的大小:
// Local custom icon
<Icon name="icon-display-live-chat" size="3rem" additionalCSS="block mb-16" />
// Heroicon with explicit variant
<Icon name="icon-gui-arrow-long-right-outline" size="2rem" />
// Heroicon using variant prop (appends variant to name)
<Icon name="icon-gui-chevron-down" variant="solid" size="1.5rem" />
反应组件如何工作
- 第一届: 尝试加载您自定义 SVG 生成的本地反应组件
- 倒计时: 如果不存在本地组件, 则动态导入相应的英雄
- 严重退化: 如果两者均不存在, 返回为无效( 没有显示图标)
非反应应用程序
使用 SVG 打印表
对于不使用React的应用程序,图标作为SVG图案可以直接引用:
<!-- The width and height are required for correct sizing. The actual color class might depend on the svg and whether it uses strokes, fills etc. Note as well xlink:href, which is xlinkHref in react. -->
<svg class="w-12 h-12 text-cool-black">
<use xlink:href="#sprite-disclosure-arrow" />
</svg>
即使在 React 应用程序中,您也可以使用 Sprite 方法来进行高级使用, 如悬浮状态 组 类 :
<a
href="{url}"
className="text-gui-default hover:text-gui-hover focus:text-gui-focus group"
>
{children}
<svg className="w-12 h-12 transform -rotate-90 align-top ui-icon-dark-grey group-hover:icon-gui-hover group-focus:icon-gui-focus ml-4">
<use xlinkHref="#sprite-disclosure-arrow" />
</svg>
</a>
种子文件可以装入 loadSprites 可用的助手 core 模块或直接包含在页面中.
图标来源
本地自定义图标
将 SVG 文件放入 a src/core/icons 文件夹将 :
- 生成可动态导入的反动组件
- 将它们添加到每个组的 Sprites 文件(例如,
core/sprites-gui.svg用于非反应使用
Heroicons 整合
系统自动回落到 赫罗伊孔斯 当找不到本地图标时, 使用此命名常规 :
icon-gui-{heroicon-name}-{variant}
何处 variant 可为:
outline— 24px 大纲图标solid— 24px 固态图标mini— 20px 固态图标micro— 16px 固态图标
这种混合方式允许您使用自定义品牌图标,同时可以访问整个英雄文库作为后退.
见 https://hably-ui.herokuapp.com/组件/icon 互联网档案馆的存檔,存档日期2013-12-22 更多细节.
字体
字体资产不自动包含,而是属于repo的一部分,以及字体面文件的示例;参见 src/core/fonts 用于实例。 确保将许可证文件申报纳入使用.
无障碍
能力-自来水的一个重要部分是,确保尽可能多的用户能够使用所生产的UI。 所有组件都应至少遵守AA无障碍标准。 在大多数情况下,这可以通过遵循一些简单的规则来实现:
- 使用正确的 HTML 元素: 导航锚地、互动按钮、列表列表等
- 使用屏幕读取器进行测试(例如) 用网络转子在Mac OSX上的声音(中文(简体) ) ——确认设计有适当的水龙头目标,形成对比 ——使用 aria 属性 在 HTML 中达到极限 ——不要打破网络平台(即不要打破后键,滚动,页内链接等行为)
发展
将资产直观化为 ably-ui,有一个故事书的例子,它既是展示,又是发展环境.
快速启动
最容易开始的方法就是使用开发脚本:
./bin/dev
此脚本将 :
- 检查所有需要的工具(Node.js, pnpm)是否通过 mise 安装在正确的版本中
- 安装所有项目依赖性
- 自动启动故事本
手动设置
如果您喜欢手动运行命令 :
首先,通过运行确保您拥有所有所需的项目依赖性 pnpm install 在项目根中.
然后,运行故事书,运行 pnpm storybook 在工程根中 - 它应该在浏览器中自动打开.
将故事书建设成一个静态的站点(即部署时的样子),运行 pnpm build-storybook 从工程根,转到生成的目录 cd preview,然后运行 npx http-server (如果还没有完成,则接受安装该软件包的提示). 建成的站点将在列出的本地URL中提供.
SWC 编译旗帜
我们有一个动态的 SWC 配置, 允许我们在库中支持编译时间特征标记 。 这使得我们在编译时间(不是运行时间)中可以改变某些代码路径的行为,这在开发模式中大多有用.
例如,在我们代码的某处可能会有一面旗子,在开发中记录额外的调试信息,在发布的版本中是无用的. 它可能看起来像这样:
// Example usage in api-client.ts
declare const __DEBUG_MODE__: boolean;
const api = createApiClient();
if (__DEBUG_MODE__) {
console.log("Debug mode enabled");
}
旗帜可以添加到列表中 swc.config.ts,并启用环境变量:
$ DEBUG_MODE=true pnpm build
发布审查应用程序的预发包
在这样做之前确保您承诺并推进您的工作( P) .
您需要认证 无 将出版.
以上之后,你应该:
- 设置在您环境中的 NPU TOKEN
- 您的用户级别
~/.npmrc(不是这个包裹).npmrc)读之:
pnpm 忽略了任务项目中环境可变的证书//registry.npmjs.org/:_authToken=${NPM_TOKEN}.npmrc。 。 。 .
要使用您在建的代码部署审查应用程序,您可以使用 pre-release 脚本 :
# in packages/ui directory
./scripts/pre-release.sh
此脚本实现以下步骤的自动化 :
- 释放前:
- 更新当地对能动设备的依赖性,并运行一个生产大楼
- 释放一个带有您当前 SemVer 构建的版本的 NPA 套件, 但根据您总部承诺的简短 SHA 添加一个释放前标签
- 等待在国家预防机制登记册上提供这套资料(手提传播延迟)
- 自动更新两者
apps/website财务报告和审定财务报表apps/voltaire与新 dev 版本连接
- 更新发布前版本 :
- 在一个原子执行中提交所有更改(UI package.json,app package.json文件,以及锁文件)
- 将承诺并标记到原产地
这将启动一个编审应用的构建,同时安装在两个消耗性应用中的预发版本.
构成部分
组件和模块包含JS和CSS文件,但没有模板. 相反,对于一个特定组件支持的每个框架,都会创建一个单独的"框架模板". 一个组件仍然可以在任何其他框架中使用,只需使用它所需要的资产.
所有组件都居住在 src 并遵循目录和文件名公约:
- 模块目录(TitleCase)
- 模块资产文件 :
scripts.js用于 Java 脚本和styles.css支助科 - 组件目录( TitleCase)
component.js- 支持联署文件(遗产)component.css- 补充支助科(后勤)[ComponentName].stories.tsx- 如果反应, 故事书演示文件
- 如果反应,
[ComponentName].tsx在兄弟级到组件目录
- 模块资产文件 :
例如:
- Core
- script.js
- styles.css
- Accordion
- component.js
- component.css
- Accordion.stories.tsx
- Accordion.tsx
支助科
z指数和定位
如果使用静态以外的定位,请注意创建堆叠上下文. 单位 properties.css 你会找到 z-index hTML 堆放上下文的值(被像巨型导航这样的组件所使用)。 在您组件内创建新元件时, 将 Z 索引值提升到创建堆叠上下文并定义的选中器 z-index 易于扫描的值(参见 https://www.oreilly.com/library/view/developing-web-组件/9781491905685/ch04.html 互联网档案馆的存檔,存档日期2013-12-21 在堆放上下文和z-index上写得很好.
正在格式化文件( L)
默认, 高级 打开 奥克林特 (外加一个用于故事本和评论规则的小ESLint)将处理大部分前端文件. 您可以通过编辑器( 编辑器应该取取相关的配置文件) 或命令行( 见 scripts (原始内容存档于2018-09-21). in package.json.
添加新组件
增加一个新的组成部分:
添加一个 [ComponentName].tsx 文件输入 src,在您选择的模块中(最有可能) core) (中文(简体) ). 任何辅助文件,即样式表,都应被放入与组件同名的目录.
在故事书中看到此组件:
创建一个 [ComponentName].stories.tsx 文档与您的 component 资产,遵循其他故事故事的例子,或其在线文档以提供指导。 运行"故事本"时,故事应该被取出并自动地被制作出来.
出版
我们用 语义版 2.0.0 用于版本不同的图书馆版本.
软件包将公布于 GitHub 私人登记处。 。 。 .
出版是通过在 GitHub 中标记一个发布来完成的. 这引发了 " GitHub " 行动,将行动推向国家防范机制登记册,并将 " 童话 " 部署到国家防范机制登记册 能力/能力 - ui 寄存器,其版本取自 GitHub 发行的标签.
发布后,您可以手动触发 update-ably-ui 创建单一的 PR 草案的工作流程 伏尔泰 财务报告和审定财务报表 网站 与新的精通版本.
启动释放:
- 确定您已经运行了预发布脚本
./scripts/pre-release.sh(此更新 npm 软件包版本, 用于在package.json并更新两个消费应用程序. - 合并您的 PR 到
main经批准后. - 在基图布 Ably -UI (英语) 重击, 创建新发行 标签.
- 为发行创建有新版本号的新标签.
- 不在标签上加前缀
v
- 不在标签上加前缀
- 为"发行"增加一个有意义的标题.
- 单击自动生成器释放注释按钮.
- 发布发布.
- 检查Github
Actions选项卡,以确保发行为绿色. - 成功发布后,将使用汇编版的《故事书》网站 能力/能力 - ui 仓库的 gh- pages 分支 .
- 手动触发
update-ably-ui从 Action 选项卡创建两个应用程序的 PR 更新草稿的工作流程 .
这将向国家防范机制公布该软件包,并部署一个新的故事书网站 https://hably.github.io/ably-ui/ 互联网档案馆的存檔,存档日期2013-12-02。为了更新消费应用程序,手动启动工作流程,该工作流程将为Voltaire和Webast创建一个单一的PR草案,在合并前需要审查.
《塔克公约》(摩纳哥)
在单体中,精通使用 组件前缀标签 实现独立释放:
释放标签 : ui-<version> (例如, ui-17.13.2(中文(简体) )
- 用于生产国家预防机制的释放
- 通过 GitHub 发布创建
- 不包含
v前缀
释放前标记 : ui-v<version>-dev.<sha> (例如, ui-v17.13.2-dev.a1b2c3d(中文(简体) )
- 自动创建于
./scripts/pre-release.sh - 向国家预防机制公布
dev标签 - 包括
v前缀并输入 SHA
见 根文件/磁盘 完整的细节 单列标注公约.
审查应用程序
审阅应用允许您创建"故事书"的临时部署,用于与利益攸关方共享UI变化而无需本地开发设置.
要创建审查应用程序:
- 使用修改创建拉动请求
- 添加数据
review-app标签到您的 PR - 将自动创建和部署一个 Heroku 评论应用程序
- 部署将出现在您的 PR 的部署部分( 基本授权已启用 -- -- 需要时请其他贡献者提供证书)
在PR关闭或标签被去掉时,审查应用会自动被清理. 只有寄存器贡献者可以创建审查应用程序.
正在测试
ably-ui 用途 测试 与 Vitest 的故事书加词 以自动将所有故事变成可执行测试。 这意味着我们不必为故事写明确的测试 尽管我们有能力写 播放函数,这让我们可以测试更详细的相互作用.
测试使用Playwright在浏览器环境中运行,提供了全面的视觉回归测试和交互测试能力.
您可以使用 :
pnpm test
这将在无头浏览器环境中使用vitest运行所有的故事测试.