@broberg/ui-controls-core

中文文档
0.3.0发布于 2026/10/25MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 1.6万

庄园本土控制替代的无头逻辑(克里斯蒂安的"非本土-对面"/控制规则): 星期一第一个日历数学 + DD- MM- YYYY/ YY- MM- DD 规范化,一个选定的键盘导航减少器,一个外部点击/滚动/大小处理器,以及

中文使用文档
文档目录5 节
  1. 日历
  2. 选择键盘压缩器
  3. 外部单击/ 滚动/ 调整大小
  4. 敬酒队列
  5. 许可证

@ broberg/ ui- controls- core

这个 无头逻辑 在庄园的本土控制替代之后—— 自定义 <select>采枣者 模式者 土司者 克里斯蒂安的 "从来没有本土对话或形式控制"规则授权. 纯类型脚本, 0 JSX,零道岔. 反应( R)@broberg/ui-controls-react)和预告 (单位:千美元)@broberg/ui-controls-preact适配器在顶上渲染;这是拥有部分 两者必须行为一致.

npm i @broberg/ui-controls-core

日历

import { buildMonthGrid, ymd, parseYmd, isInRange, monthLabel, normalizeYmd } from "@broberg/ui-controls-core";

buildMonthGrid(2026, 7);          // 42 Monday-first cells, padded → [{date,day,inMonth}, …]
monthLabel(2026, 7, "da-DK");     // "juli 2026"  (locale-delegated, no baked-in names)
isInRange("2026-07-04", "2026-07-01", "2026-07-31");   // true

// Typed-input normalisation — disambiguates strictly by the 4-digit year:
normalizeYmd("03-04-2025");       // "2025-04-03"  (3 April, never April-03)
normalizeYmd("2025-04-03");       // "2025-04-03"
normalizeYmd("3.4.2025");         // "2025-04-03"

选择键盘压缩器

import { selectKeyReducer } from "@broberg/ui-controls-core";

let state = { open: false, highlighted: -1 };
const { state: next, intent } = selectKeyReducer(state, event.key, options.length);
// intent: "open" | "close" | { type: "select", index } | "none"
// ArrowDown/Up wrap; Enter/Space select the highlight (or open); Escape closes.

0.3.0 — 选入:没有露出武装,第一箭头为当前值(F016.10).

selectKeyReducer(state, event.key, options.length, { armOnOpen: false, currentIndex: selectedIndex });
  • armOnOpen: false ——在闭接器上输入/空间打开 无 突出显示, 因此Enter 之后的意外打开会选择无; Enter 只选择箭头键后.
  • currentIndex ——第一个箭头落在已经被选中的选项上,而不是跳到第一个/最后一个,因此一个按键从不移动两个位置. 外出值被忽略.

无选项(或 {}缩写完全为0.2.4——按每张键×国×分大小的逐字记录.

外部单击/ 滚动/ 调整大小

import { makeOutsideClickHandler } from "@broberg/ui-controls-core";

const handle = makeOutsideClickHandler(() => [triggerEl, menuEl], () => setOpen(false));
handle.attach();   // closes on a pointerdown outside all els, or on ancestor scroll / resize
handle.detach();   // (a fixed-position portal would otherwise drift from its trigger)

敬酒队列

import { ToastQueue } from "@broberg/ui-controls-core";

const toasts = new ToastQueue({ maxVisible: 4, defaultDuration: 4000 });
const id = toasts.push({ message: "Saved", kind: "success" });   // auto-dismisses; 0 = sticky
toasts.dismiss(id);
toasts.subscribe((items) => render(items));   // items: { id, message, kind, duration }[]

决定性( monotic ids, no) Math.random编号 :Date.now所以这是微不足道的 可检验和SSR安全。 盖子在 maxVisible丢掉最老的.

许可证

麻省理工学院的一部分 @broberg/* 共享库存.

版本与发布记录

@broberg/ui-controls-core 共发布 6 个版本,首次发布于 2026/07/12;过去 12 个月发布了 6 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.3.0latest2026/10/2514 天前
0.2.42026/10/2316 天前
0.2.32026/09/101 个月前
0.2.22026/09/101 个月前
0.1.12026/08/292 个月前
0.1.02026/07/123 个月前

关于 @broberg/ui-controls-core 的常见问题

@broberg/ui-controls-core 是什么?

庄园本土控制替代的无头逻辑(克里斯蒂安的"非本土-对面"/控制规则): 星期一第一个日历数学 + DD- MM- YYYY/ YY- MM- DD 规范化,一个选定的键盘导航减少器,一个外部点击/滚动/大小处理器,以及

如何安装 @broberg/ui-controls-core?

在项目目录运行 npm install @broberg/ui-controls-core,或使用 pnpm add / yarn add / bun add。

@broberg/ui-controls-core 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@broberg/ui-controls-core 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@broberg/ui-controls-core 可以商用吗?

@broberg/ui-controls-core 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@broberg/ui-controls-core 的下载量有多少?

根据 npm 官方下载统计,@broberg/ui-controls-core 在 2026/10/09 – 2026/11/07 这 30 天内被下载 16,279 次,日均约 543 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@broberg/ui-controls-core 还在维护吗?

最新版本 0.3.0 发布于 2026/10/25(14 天前);至今共发布 6 个版本,其中过去 12 个月发布了 6 个;首次发布于 2026/07/12。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。