@kupola/kupola 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/INTEGRATION.md +440 -0
  3. package/PROJECT_SUMMARY.md +312 -0
  4. package/README.md +286 -0
  5. package/SKILL.md +572 -0
  6. package/css/accessibility.css +119 -0
  7. package/css/animations.css +224 -0
  8. package/css/brand-themes.css +300 -0
  9. package/css/colors_and_type.css +441 -0
  10. package/css/components-ext.css +4165 -0
  11. package/css/components.css +1483 -0
  12. package/css/kupola.css +12 -0
  13. package/css/responsive.css +697 -0
  14. package/css/scaffold.css +145 -0
  15. package/css/states.css +316 -0
  16. package/css/theme-dark.css +296 -0
  17. package/css/theme-light.css +296 -0
  18. package/css/utilities.css +171 -0
  19. package/dist/css/kupola.css +12 -0
  20. package/dist/icons/icons/activity.svg +3 -0
  21. package/dist/icons/icons/alert-circle.svg +1 -0
  22. package/dist/icons/icons/alert-triangle.svg +1 -0
  23. package/dist/icons/icons/alert.d27e24.svg +1 -0
  24. package/dist/icons/icons/alert.svg +1 -0
  25. package/dist/icons/icons/apple.svg +1 -0
  26. package/dist/icons/icons/arrow-down.svg +1 -0
  27. package/dist/icons/icons/arrow-expand.svg +1 -0
  28. package/dist/icons/icons/arrow-left.svg +1 -0
  29. package/dist/icons/icons/arrow-minimize.svg +1 -0
  30. package/dist/icons/icons/arrow-right-to-line.svg +1 -0
  31. package/dist/icons/icons/arrow-right.svg +1 -0
  32. package/dist/icons/icons/arrow-up-right.svg +1 -0
  33. package/dist/icons/icons/arrow-up.0c0c0d.svg +1 -0
  34. package/dist/icons/icons/arrow-up.svg +1 -0
  35. package/dist/icons/icons/at.svg +1 -0
  36. package/dist/icons/icons/atom.0c0c0d.svg +1 -0
  37. package/dist/icons/icons/atom.svg +1 -0
  38. package/dist/icons/icons/bar-chart-2.svg +1 -0
  39. package/dist/icons/icons/bar.svg +1 -0
  40. package/dist/icons/icons/bell.svg +1 -0
  41. package/dist/icons/icons/box.svg +1 -0
  42. package/dist/icons/icons/bug.svg +1 -0
  43. package/dist/icons/icons/button.svg +1 -0
  44. package/dist/icons/icons/calendar.svg +1 -0
  45. package/dist/icons/icons/check-circle.33c192.svg +1 -0
  46. package/dist/icons/icons/check-circle.svg +1 -0
  47. package/dist/icons/icons/check-square.svg +4 -0
  48. package/dist/icons/icons/check.d1d3db.svg +1 -0
  49. package/dist/icons/icons/check.svg +1 -0
  50. package/dist/icons/icons/chevron-down.svg +1 -0
  51. package/dist/icons/icons/chevron-left.svg +1 -0
  52. package/dist/icons/icons/chevron-right.svg +1 -0
  53. package/dist/icons/icons/chevron-up.svg +1 -0
  54. package/dist/icons/icons/circle.svg +1 -0
  55. package/dist/icons/icons/clock.svg +1 -0
  56. package/dist/icons/icons/cmd.svg +1 -0
  57. package/dist/icons/icons/code.svg +1 -0
  58. package/dist/icons/icons/columns.svg +1 -0
  59. package/dist/icons/icons/copy.svg +1 -0
  60. package/dist/icons/icons/cpu.svg +1 -0
  61. package/dist/icons/icons/dashboard.0c0c0d.svg +1 -0
  62. package/dist/icons/icons/dashboard.svg +1 -0
  63. package/dist/icons/icons/dollar.svg +1 -0
  64. package/dist/icons/icons/download.svg +1 -0
  65. package/dist/icons/icons/edit.svg +1 -0
  66. package/dist/icons/icons/extensions.svg +1 -0
  67. package/dist/icons/icons/external.svg +1 -0
  68. package/dist/icons/icons/eye.svg +1 -0
  69. package/dist/icons/icons/file-text.svg +1 -0
  70. package/dist/icons/icons/file.svg +1 -0
  71. package/dist/icons/icons/files.svg +1 -0
  72. package/dist/icons/icons/filter.svg +1 -0
  73. package/dist/icons/icons/folder-open.svg +4 -0
  74. package/dist/icons/icons/folder.svg +1 -0
  75. package/dist/icons/icons/gear.svg +1 -0
  76. package/dist/icons/icons/git.svg +1 -0
  77. package/dist/icons/icons/github.svg +1 -0
  78. package/dist/icons/icons/globe.svg +1 -0
  79. package/dist/icons/icons/grid-2x2.svg +1 -0
  80. package/dist/icons/icons/hash.svg +1 -0
  81. package/dist/icons/icons/heart.svg +1 -0
  82. package/dist/icons/icons/help-circle.svg +5 -0
  83. package/dist/icons/icons/help.svg +1 -0
  84. package/dist/icons/icons/home.svg +1 -0
  85. package/dist/icons/icons/icons.svg +153 -0
  86. package/dist/icons/icons/image.svg +1 -0
  87. package/dist/icons/icons/info-circle.svg +1 -0
  88. package/dist/icons/icons/info-square.svg +1 -0
  89. package/dist/icons/icons/info.387bff.svg +1 -0
  90. package/dist/icons/icons/info.svg +1 -0
  91. package/dist/icons/icons/input.svg +1 -0
  92. package/dist/icons/icons/key.svg +1 -0
  93. package/dist/icons/icons/layers.svg +1 -0
  94. package/dist/icons/icons/layout-grid.svg +6 -0
  95. package/dist/icons/icons/layout.svg +1 -0
  96. package/dist/icons/icons/link.svg +1 -0
  97. package/dist/icons/icons/list.svg +1 -0
  98. package/dist/icons/icons/lock.svg +1 -0
  99. package/dist/icons/icons/log-out.svg +1 -0
  100. package/dist/icons/icons/logo.svg +1 -0
  101. package/dist/icons/icons/mail.svg +1 -0
  102. package/dist/icons/icons/menu.svg +1 -0
  103. package/dist/icons/icons/message-circle.svg +1 -0
  104. package/dist/icons/icons/message-plus.svg +1 -0
  105. package/dist/icons/icons/message-square.svg +1 -0
  106. package/dist/icons/icons/mic.svg +1 -0
  107. package/dist/icons/icons/minus.svg +1 -0
  108. package/dist/icons/icons/moon.svg +1 -0
  109. package/dist/icons/icons/more-h.svg +1 -0
  110. package/dist/icons/icons/mouse.svg +1 -0
  111. package/dist/icons/icons/palette.svg +1 -0
  112. package/dist/icons/icons/panel-bottom.svg +1 -0
  113. package/dist/icons/icons/pause.svg +1 -0
  114. package/dist/icons/icons/play.svg +1 -0
  115. package/dist/icons/icons/plug.svg +1 -0
  116. package/dist/icons/icons/plus.0c0c0d.svg +1 -0
  117. package/dist/icons/icons/plus.svg +1 -0
  118. package/dist/icons/icons/refresh.svg +1 -0
  119. package/dist/icons/icons/ruler.svg +1 -0
  120. package/dist/icons/icons/scroll-text.svg +1 -0
  121. package/dist/icons/icons/search-menu.svg +1 -0
  122. package/dist/icons/icons/search.svg +1 -0
  123. package/dist/icons/icons/send.0c0c0d.svg +1 -0
  124. package/dist/icons/icons/send.svg +1 -0
  125. package/dist/icons/icons/settings.0c0c0d.svg +1 -0
  126. package/dist/icons/icons/settings.svg +1 -0
  127. package/dist/icons/icons/shield.svg +1 -0
  128. package/dist/icons/icons/sidebar-left.svg +1 -0
  129. package/dist/icons/icons/sidebar-right.svg +1 -0
  130. package/dist/icons/icons/sliders.svg +1 -0
  131. package/dist/icons/icons/sparkles.32f08c.svg +1 -0
  132. package/dist/icons/icons/sparkles.svg +1 -0
  133. package/dist/icons/icons/square.svg +1 -0
  134. package/dist/icons/icons/star.svg +1 -0
  135. package/dist/icons/icons/sun.svg +1 -0
  136. package/dist/icons/icons/table.svg +1 -0
  137. package/dist/icons/icons/terminal.svg +1 -0
  138. package/dist/icons/icons/trash.svg +1 -0
  139. package/dist/icons/icons/trending-down.svg +1 -0
  140. package/dist/icons/icons/trending-up.svg +1 -0
  141. package/dist/icons/icons/type.svg +1 -0
  142. package/dist/icons/icons/upload.svg +1 -0
  143. package/dist/icons/icons/user-circle.svg +1 -0
  144. package/dist/icons/icons/user-plus.svg +6 -0
  145. package/dist/icons/icons/user.svg +1 -0
  146. package/dist/icons/icons/users.svg +1 -0
  147. package/dist/icons/icons/warning.svg +1 -0
  148. package/dist/icons/icons/wrench.svg +1 -0
  149. package/dist/icons/icons/x-circle.svg +1 -0
  150. package/dist/icons/icons/x.svg +1 -0
  151. package/dist/icons/icons/zap.0c0c0d.svg +1 -0
  152. package/dist/icons/icons/zap.svg +1 -0
  153. package/dist/kupola.cjs.js +258 -0
  154. package/dist/kupola.cjs.js.map +1 -0
  155. package/dist/kupola.esm.js +7640 -0
  156. package/dist/kupola.esm.js.map +1 -0
  157. package/dist/kupola.umd.js +258 -0
  158. package/dist/kupola.umd.js.map +1 -0
  159. package/dist/types/kupola.d.ts +1359 -0
  160. package/dist/utils/utils/Kupola.cs +77 -0
  161. package/dist/utils/utils/Kupola.java +104 -0
  162. package/dist/utils/utils/kupola.go +120 -0
  163. package/dist/utils/utils/kupola.js +63 -0
  164. package/dist/utils/utils/kupola.py +1392 -0
  165. package/dist/utils/utils/kupola.rb +69 -0
  166. package/icons/activity.svg +3 -0
  167. package/icons/alert-circle.svg +1 -0
  168. package/icons/alert-triangle.svg +1 -0
  169. package/icons/alert.d27e24.svg +1 -0
  170. package/icons/alert.svg +1 -0
  171. package/icons/apple.svg +1 -0
  172. package/icons/arrow-down.svg +1 -0
  173. package/icons/arrow-expand.svg +1 -0
  174. package/icons/arrow-left.svg +1 -0
  175. package/icons/arrow-minimize.svg +1 -0
  176. package/icons/arrow-right-to-line.svg +1 -0
  177. package/icons/arrow-right.svg +1 -0
  178. package/icons/arrow-up-right.svg +1 -0
  179. package/icons/arrow-up.0c0c0d.svg +1 -0
  180. package/icons/arrow-up.svg +1 -0
  181. package/icons/at.svg +1 -0
  182. package/icons/atom.0c0c0d.svg +1 -0
  183. package/icons/atom.svg +1 -0
  184. package/icons/bar-chart-2.svg +1 -0
  185. package/icons/bar.svg +1 -0
  186. package/icons/bell.svg +1 -0
  187. package/icons/box.svg +1 -0
  188. package/icons/bug.svg +1 -0
  189. package/icons/button.svg +1 -0
  190. package/icons/calendar.svg +1 -0
  191. package/icons/check-circle.33c192.svg +1 -0
  192. package/icons/check-circle.svg +1 -0
  193. package/icons/check-square.svg +4 -0
  194. package/icons/check.d1d3db.svg +1 -0
  195. package/icons/check.svg +1 -0
  196. package/icons/chevron-down.svg +1 -0
  197. package/icons/chevron-left.svg +1 -0
  198. package/icons/chevron-right.svg +1 -0
  199. package/icons/chevron-up.svg +1 -0
  200. package/icons/circle.svg +1 -0
  201. package/icons/clock.svg +1 -0
  202. package/icons/cmd.svg +1 -0
  203. package/icons/code.svg +1 -0
  204. package/icons/columns.svg +1 -0
  205. package/icons/copy.svg +1 -0
  206. package/icons/cpu.svg +1 -0
  207. package/icons/dashboard.0c0c0d.svg +1 -0
  208. package/icons/dashboard.svg +1 -0
  209. package/icons/dollar.svg +1 -0
  210. package/icons/download.svg +1 -0
  211. package/icons/edit.svg +1 -0
  212. package/icons/extensions.svg +1 -0
  213. package/icons/external.svg +1 -0
  214. package/icons/eye.svg +1 -0
  215. package/icons/file-text.svg +1 -0
  216. package/icons/file.svg +1 -0
  217. package/icons/files.svg +1 -0
  218. package/icons/filter.svg +1 -0
  219. package/icons/folder-open.svg +4 -0
  220. package/icons/folder.svg +1 -0
  221. package/icons/gear.svg +1 -0
  222. package/icons/git.svg +1 -0
  223. package/icons/github.svg +1 -0
  224. package/icons/globe.svg +1 -0
  225. package/icons/grid-2x2.svg +1 -0
  226. package/icons/hash.svg +1 -0
  227. package/icons/heart.svg +1 -0
  228. package/icons/help-circle.svg +5 -0
  229. package/icons/help.svg +1 -0
  230. package/icons/home.svg +1 -0
  231. package/icons/icons.svg +153 -0
  232. package/icons/image.svg +1 -0
  233. package/icons/info-circle.svg +1 -0
  234. package/icons/info-square.svg +1 -0
  235. package/icons/info.387bff.svg +1 -0
  236. package/icons/info.svg +1 -0
  237. package/icons/input.svg +1 -0
  238. package/icons/key.svg +1 -0
  239. package/icons/layers.svg +1 -0
  240. package/icons/layout-grid.svg +6 -0
  241. package/icons/layout.svg +1 -0
  242. package/icons/link.svg +1 -0
  243. package/icons/list.svg +1 -0
  244. package/icons/lock.svg +1 -0
  245. package/icons/log-out.svg +1 -0
  246. package/icons/logo.svg +1 -0
  247. package/icons/mail.svg +1 -0
  248. package/icons/menu.svg +1 -0
  249. package/icons/message-circle.svg +1 -0
  250. package/icons/message-plus.svg +1 -0
  251. package/icons/message-square.svg +1 -0
  252. package/icons/mic.svg +1 -0
  253. package/icons/minus.svg +1 -0
  254. package/icons/moon.svg +1 -0
  255. package/icons/more-h.svg +1 -0
  256. package/icons/mouse.svg +1 -0
  257. package/icons/palette.svg +1 -0
  258. package/icons/panel-bottom.svg +1 -0
  259. package/icons/pause.svg +1 -0
  260. package/icons/play.svg +1 -0
  261. package/icons/plug.svg +1 -0
  262. package/icons/plus.0c0c0d.svg +1 -0
  263. package/icons/plus.svg +1 -0
  264. package/icons/refresh.svg +1 -0
  265. package/icons/ruler.svg +1 -0
  266. package/icons/scroll-text.svg +1 -0
  267. package/icons/search-menu.svg +1 -0
  268. package/icons/search.svg +1 -0
  269. package/icons/send.0c0c0d.svg +1 -0
  270. package/icons/send.svg +1 -0
  271. package/icons/settings.0c0c0d.svg +1 -0
  272. package/icons/settings.svg +1 -0
  273. package/icons/shield.svg +1 -0
  274. package/icons/sidebar-left.svg +1 -0
  275. package/icons/sidebar-right.svg +1 -0
  276. package/icons/sliders.svg +1 -0
  277. package/icons/sparkles.32f08c.svg +1 -0
  278. package/icons/sparkles.svg +1 -0
  279. package/icons/square.svg +1 -0
  280. package/icons/star.svg +1 -0
  281. package/icons/sun.svg +1 -0
  282. package/icons/table.svg +1 -0
  283. package/icons/terminal.svg +1 -0
  284. package/icons/trash.svg +1 -0
  285. package/icons/trending-down.svg +1 -0
  286. package/icons/trending-up.svg +1 -0
  287. package/icons/type.svg +1 -0
  288. package/icons/upload.svg +1 -0
  289. package/icons/user-circle.svg +1 -0
  290. package/icons/user-plus.svg +6 -0
  291. package/icons/user.svg +1 -0
  292. package/icons/users.svg +1 -0
  293. package/icons/warning.svg +1 -0
  294. package/icons/wrench.svg +1 -0
  295. package/icons/x-circle.svg +1 -0
  296. package/icons/x.svg +1 -0
  297. package/icons/zap.0c0c0d.svg +1 -0
  298. package/icons/zap.svg +1 -0
  299. package/js/calendar.js +184 -0
  300. package/js/carousel.js +173 -0
  301. package/js/collapse.js +127 -0
  302. package/js/color-picker.js +144 -0
  303. package/js/component.js +276 -0
  304. package/js/composition-api.js +458 -0
  305. package/js/countdown.js +144 -0
  306. package/js/data-bind.js +1286 -0
  307. package/js/datepicker.js +270 -0
  308. package/js/dialog.js +131 -0
  309. package/js/drawer.js +118 -0
  310. package/js/dropdown.js +122 -0
  311. package/js/dynamic-tags.js +156 -0
  312. package/js/error-handler.js +181 -0
  313. package/js/fileupload.js +392 -0
  314. package/js/form.js +291 -0
  315. package/js/global-events.js +203 -0
  316. package/js/heatmap.js +405 -0
  317. package/js/http.js +419 -0
  318. package/js/i18n.js +228 -0
  319. package/js/icons.js +165 -0
  320. package/js/image-preview.js +218 -0
  321. package/js/initializer.js +162 -0
  322. package/js/kupola-core.js +66 -0
  323. package/js/kupola-devtools.js +598 -0
  324. package/js/kupola-lifecycle.js +510 -0
  325. package/js/message.js +60 -0
  326. package/js/modal.js +191 -0
  327. package/js/notification.js +73 -0
  328. package/js/numberinput.js +146 -0
  329. package/js/performance.js +250 -0
  330. package/js/registry.js +205 -0
  331. package/js/router.js +396 -0
  332. package/js/security.js +189 -0
  333. package/js/select.js +143 -0
  334. package/js/slide-captcha.js +504 -0
  335. package/js/slider.js +94 -0
  336. package/js/statcard.js +219 -0
  337. package/js/tag.js +83 -0
  338. package/js/test-utils.js +251 -0
  339. package/js/theme.js +363 -0
  340. package/js/timepicker.js +238 -0
  341. package/js/tooltip.js +122 -0
  342. package/js/utils.js +1458 -0
  343. package/js/validation.js +553 -0
  344. package/js/virtual-list.js +593 -0
  345. package/package.json +105 -0
  346. package/templates/base.html +30 -0
  347. package/templates/base_dashboard.html +99 -0
  348. package/types/kupola.d.ts +1359 -0
  349. package/utils/Kupola.cs +77 -0
  350. package/utils/Kupola.java +104 -0
  351. package/utils/kupola.go +120 -0
  352. package/utils/kupola.js +63 -0
  353. package/utils/kupola.py +1392 -0
  354. package/utils/kupola.rb +69 -0
@@ -0,0 +1,312 @@
1
+ # Kupola Design System - 项目总结
2
+
3
+ ## 一、项目概述
4
+
5
+ Kupola 是一个轻量级设计系统,专为 Python Web 项目(Flask/Django)设计,无需 React/Vue 等重型框架。
6
+
7
+ ### 项目历史
8
+
9
+ | 阶段 | 时间 | 事件 |
10
+ |------|------|------|
11
+ | Nimbus | 初始版本 | 项目创建,命名为 Nimbus Design System |
12
+ | 重构 | 2026-07 | 代码重构,修复响应式、HTTP、内存泄漏等问题 |
13
+ | 重命名 | 2026-07-09 | 项目从 Nimbus 重命名为 Kupola |
14
+ | 清理 | 2026-07-09 | 清理无用文件,优化项目结构 |
15
+ | GitHub | 2026-07-09 | 推送到 GitHub 仓库 `github.com/kupola-cn/kupola` |
16
+
17
+ ### 核心特性
18
+
19
+ - **50+ 组件**:按钮、输入框、卡片、弹窗、日期选择器、时间选择器、热力图、虚拟列表等
20
+ - **双主题**:深色优先设计,支持浅色主题
21
+ - **11 个品牌色**:可切换的品牌色彩系统
22
+ - **响应式设计**:适配 PC、平板、手机
23
+ - **无障碍**:符合 WCAG AA 标准
24
+ - **表单验证**:内置验证规则,支持自定义规则
25
+ - **数据绑定**:基于 Proxy 的双向数据绑定系统
26
+ - **无依赖**:纯 HTML/CSS/JavaScript
27
+
28
+ ---
29
+
30
+ ## 二、架构设计
31
+
32
+ ### 架构原则
33
+
34
+ ```
35
+ ┌──────────────────────────────────────────────────────┐
36
+ │ HTML 层(后端渲染) │
37
+ │ Jinja2/Django 模板输出语义化 HTML │
38
+ │ data-bind / data-component / data-validate 属性 │
39
+ ├──────────────────────────────────────────────────────┤
40
+ │ CSS 层(视觉增强) │
41
+ │ CSS 变量 + BEM 命名 + 双主题支持 │
42
+ │ 即使 JS 未加载,页面依然可用 │
43
+ ├──────────────────────────────────────────────────────┤
44
+ │ JS 层(交互增强) │
45
+ │ IIFE + window 全局挂载,无需打包器 │
46
+ │ MutationObserver 自动检测并初始化组件 │
47
+ │ 响应式系统(Proxy)+ 组合式 API │
48
+ └──────────────────────────────────────────────────────┘
49
+ ```
50
+
51
+ ### 组件生命周期
52
+
53
+ ```
54
+ 创建 → init() → 挂载 → 更新 → 销毁 → destroy()
55
+ ```
56
+
57
+ 通过 `KupolaLifecycle` 和 `GlobalEventManager` 统一管理组件生命周期。
58
+
59
+ ### 响应式系统
60
+
61
+ 基于 Proxy 实现,支持:
62
+ - `ref()` - 基础响应式引用
63
+ - `reactive()` - 响应式对象
64
+ - `computed()` - 计算属性(自动依赖追踪)
65
+
66
+ ---
67
+
68
+ ## 三、项目结构
69
+
70
+ ```
71
+ kupola/
72
+ ├── css/ # CSS 样式表(13个文件)
73
+ │ ├── kupola.css # 主样式入口
74
+ │ ├── components.css # 组件样式
75
+ │ ├── theme-dark.css # 深色主题
76
+ │ ├── theme-light.css # 浅色主题
77
+ │ └── ... # 其他样式
78
+ ├── js/ # JavaScript 模块(40+个)
79
+ │ ├── kupola-core.js # 核心框架
80
+ │ ├── kupola-lifecycle.js # 生命周期管理
81
+ │ ├── component.js # 组件基类
82
+ │ ├── data-bind.js # 数据绑定
83
+ │ ├── composition-api.js # 组合式 API
84
+ │ ├── http.js # HTTP 客户端
85
+ │ ├── router.js # 路由系统
86
+ │ ├── theme.js # 主题切换
87
+ │ └── ... # UI 组件
88
+ ├── icons/ # SVG 图标(133个)
89
+ ├── dist/ # 构建产物
90
+ │ ├── kupola.esm.js # ES Module 格式
91
+ │ ├── kupola.cjs.js # CommonJS 格式
92
+ │ ├── kupola.umd.js # UMD 格式
93
+ │ └── types/kupola.d.ts # TypeScript 类型定义
94
+ ├── src/ # 构建入口
95
+ ├── utils/ # Python 工具函数
96
+ ├── dashboard/ # 仪表盘模板
97
+ ├── casepages/ # 组件展示页面
98
+ ├── examples/ # 使用示例
99
+ ├── test/ # 测试文件
100
+ ├── docs/ # 文档
101
+ └── package.json # 构建脚本
102
+ ```
103
+
104
+ ---
105
+
106
+ ## 四、核心功能
107
+
108
+ ### 1. 组件系统
109
+
110
+ | 类别 | 组件 |
111
+ |------|------|
112
+ | **基础** | Button, Input, Textarea, Select, Checkbox, Radio, Switch |
113
+ | **数据** | Table, Pagination, VirtualList, DynamicTags |
114
+ | **反馈** | Modal, Dialog, Message, Notification, Tooltip |
115
+ | **导航** | Tabs, Dropdown, Breadcrumb |
116
+ | **表单** | Form, DatePicker, TimePicker, ColorPicker |
117
+ | **数据可视化** | Heatmap, StatCard |
118
+ | **其他** | Carousel, Drawer, Collapse, Upload |
119
+
120
+ ### 2. 数据绑定
121
+
122
+ ```html
123
+ <input type="text" data-bind="user.name:value">
124
+ <span data-bind="user.name:text"></span>
125
+ <input type="checkbox" data-bind="user.active:checked">
126
+ ```
127
+
128
+ ```javascript
129
+ kupolaData.data.user = { name: 'John', active: true };
130
+ kupolaData.data.user.name = 'Jane';
131
+ ```
132
+
133
+ ### 3. 组合式 API
134
+
135
+ ```javascript
136
+ setup(() => {
137
+ const count = ref(0);
138
+ const doubled = computed(() => count.value * 2);
139
+
140
+ onMounted(() => {
141
+ console.log('组件挂载');
142
+ });
143
+
144
+ return { count, doubled };
145
+ });
146
+ ```
147
+
148
+ ### 4. 主题系统
149
+
150
+ ```javascript
151
+ setTheme('dark'); // 切换到深色主题
152
+ setTheme('light'); // 切换到浅色主题
153
+ setBrand('zengqing'); // 设置品牌色
154
+ ```
155
+
156
+ ### 5. HTTP 客户端
157
+
158
+ ```javascript
159
+ const http = createHttp({ baseURL: '/api' });
160
+ http.get('/users');
161
+ http.post('/login', { username, password });
162
+ http.cancelRequest('/users');
163
+ http.cancelAllRequests();
164
+ ```
165
+
166
+ ---
167
+
168
+ ## 五、使用方法
169
+
170
+ ### 快速开始
171
+
172
+ ```html
173
+ <!-- 引入 CSS -->
174
+ <link rel="stylesheet" href="kupola/css/kupola.css">
175
+
176
+ <!-- 引入 JavaScript -->
177
+ <script src="kupola/js/kupola-core.js"></script>
178
+
179
+ <!-- 使用组件 -->
180
+ <button class="ds-btn ds-btn--brand">提交</button>
181
+ <input type="text" class="ds-input" placeholder="输入内容">
182
+ ```
183
+
184
+ ### ES Module 方式
185
+
186
+ ```javascript
187
+ import { KupolaComponent, ref, reactive, createHttp } from 'kupola';
188
+ ```
189
+
190
+ ### 构建命令
191
+
192
+ ```bash
193
+ npm install # 安装依赖
194
+ npm run build # 生产构建(Vite)
195
+ npm run build:rollup # 备选构建(Rollup)
196
+ npm run dev # 开发服务器
197
+ npm run test # 运行测试
198
+ npm run lint # 代码检查
199
+ ```
200
+
201
+ ---
202
+
203
+ ## 六、构建系统
204
+
205
+ ### 构建工具
206
+
207
+ - **Vite ^5.4.1**:主要构建工具,生成 ESM/CJS/UMD 格式
208
+ - **Rollup**:备选构建工具,兼容更多场景
209
+
210
+ ### 构建产物
211
+
212
+ | 文件 | 大小 | 说明 |
213
+ |------|------|------|
214
+ | `dist/kupola.esm.js` | ~332 kB | ES Module 格式 |
215
+ | `dist/kupola.cjs.js` | ~254 kB | CommonJS 格式 |
216
+ | `dist/kupola.umd.js` | ~254 kB | UMD 格式 |
217
+
218
+ ---
219
+
220
+ ## 七、分支管理
221
+
222
+ ### 分支策略
223
+
224
+ ```
225
+ main # 生产分支(稳定版本)
226
+ └── develop # 开发分支(日常开发)
227
+ ├── feature/xxx # 功能分支
228
+ ├── fix/xxx # 修复分支
229
+ └── release/xxx # 发布分支
230
+ ```
231
+
232
+ ### 工作流程
233
+
234
+ ```bash
235
+ # 切换到开发分支
236
+ git checkout develop
237
+
238
+ # 创建功能分支
239
+ git checkout -b feature/new-component
240
+
241
+ # 开发完成后推送
242
+ git push github feature/new-component
243
+
244
+ # 创建 PR 到 develop
245
+ # 合并后删除分支
246
+ ```
247
+
248
+ ---
249
+
250
+ ## 八、贡献指南
251
+
252
+ ### 代码规范
253
+
254
+ - **JavaScript**:使用 ESLint 检查,遵循 Airbnb 规范
255
+ - **CSS**:使用 BEM 命名规范
256
+ - **提交信息**:使用 Conventional Commits 格式
257
+
258
+ ### 开发流程
259
+
260
+ 1. Fork 仓库
261
+ 2. 创建功能分支 `feature/xxx`
262
+ 3. 开发并测试
263
+ 4. 创建 PR 到 `develop` 分支
264
+ 5. 等待审核和合并
265
+
266
+ ---
267
+
268
+ ## 九、迁移指南(从 Nimbus)
269
+
270
+ ### 名称变更
271
+
272
+ | 旧名称 | 新名称 |
273
+ |--------|--------|
274
+ | `NimbusComponent` | `KupolaComponent` |
275
+ | `NimbusHttp` | `KupolaHttp` |
276
+ | `window.nimbusData` | `window.kupolaData` |
277
+ | `nimbus-core.js` | `kupola-core.js` |
278
+ | `nimbus.css` | `kupola.css` |
279
+
280
+ ### 引用路径变更
281
+
282
+ | 旧路径 | 新路径 |
283
+ |--------|--------|
284
+ | `/nimbus-js/` | `/kupola-js/` |
285
+ | `/nimbus-css/` | `/kupola-css/` |
286
+ | `/nimbus-dist/` | `/kupola-dist/` |
287
+
288
+ ---
289
+
290
+ ## 十、版本历史
291
+
292
+ | 版本 | 日期 | 变更 |
293
+ |------|------|------|
294
+ | 1.2.0 | 2026-07-09 | 项目重命名为 Kupola,清理无用文件 |
295
+ | 1.1.0 | 2026-07 | 修复响应式系统、HTTP 取消、内存泄漏 |
296
+ | 1.0.0 | 初始 | Nimbus Design System 发布 |
297
+
298
+ ---
299
+
300
+ ## 十一、相关链接
301
+
302
+ - **GitHub**:https://github.com/kupola-cn/kupola
303
+ - **Gitee**:https://gitee.com/coln/nimbus
304
+ - **文档**:docs/api.md, docs/kupola-vs-vue-react.md
305
+ - **集成指南**:INTEGRATION.md
306
+ - **组件展示**:dashboard/showcase.html
307
+
308
+ ---
309
+
310
+ ## 十二、许可证
311
+
312
+ MIT License
package/README.md ADDED
@@ -0,0 +1,286 @@
1
+ # Kupola
2
+
3
+ A lightweight UI toolkit for any web project. No heavy frontend frameworks required. Works seamlessly with Flask, Django, Gin, Spring Boot, ASP.NET Core, Express, Ruby on Rails, and any backend framework that outputs HTML.
4
+
5
+ ## Features
6
+
7
+ - **50+ Components**: Buttons, inputs, cards, modals, datepickers, timepickers, heatmap, virtual list, stat cards, image components, and more
8
+ - **Dual Themes**: Dark-first design with light theme support
9
+ - **11 Brand Colors**: Switchable brand colors
10
+ - **Responsive Design**: Works on PC, Pad, and Phone
11
+ - **Accessibility**: WCAG AA compliant
12
+ - **Form Validation**: Built-in validation with custom rules
13
+ - **Data Binding**: Two-way data binding system (Proxy-based)
14
+ - **No Dependencies**: Pure HTML/CSS/JavaScript
15
+ - **Multi-language Support**: Helper functions for Python, Go, Java, C#, Node.js, Ruby
16
+
17
+ ## Quick Start
18
+
19
+ ### 1. Copy Files
20
+
21
+ Copy the `kupola` directory to your project:
22
+
23
+ ```
24
+ your-project/
25
+ ├── kupola/
26
+ │ ├── css/
27
+ │ ├── js/
28
+ │ └── icons/
29
+ └── index.html
30
+ ```
31
+
32
+ ### 2. Include CSS
33
+
34
+ ```html
35
+ <link rel="stylesheet" href="kupola/css/kupola.css">
36
+ ```
37
+
38
+ ### 3. Include JavaScript
39
+
40
+ ```html
41
+ <script src="kupola/js/kupola-core.js"></script>
42
+ ```
43
+
44
+ ### 4. Start Using Components
45
+
46
+ ```html
47
+ <button class="ds-btn ds-btn--brand">Click Me</button>
48
+ <input type="text" class="ds-input" placeholder="Enter text">
49
+ <div class="ds-card">
50
+ <div class="ds-card__header">
51
+ <h3 class="ds-card__title">Card Title</h3>
52
+ </div>
53
+ <div class="ds-card__body">Card content</div>
54
+ </div>
55
+ ```
56
+
57
+ ## Framework Integration
58
+
59
+ ### Python (Flask/Django)
60
+
61
+ ```python
62
+ from kupola import button, card
63
+
64
+ html = card("Welcome", "Hello Kupola!", "") + button("Submit", "brand", "md")
65
+ ```
66
+
67
+ ### Go (Gin/Echo)
68
+
69
+ ```go
70
+ import "kupola"
71
+
72
+ html := kupola.Card("Welcome", "Hello Kupola!", "") + kupola.Button("Submit", "brand", "md")
73
+ ```
74
+
75
+ ### Java (Spring Boot)
76
+
77
+ ```java
78
+ import com.kupola.Kupola;
79
+
80
+ String html = Kupola.card("Welcome", "Hello Kupola!", "") + Kupola.button("Submit", "brand", "md");
81
+ ```
82
+
83
+ ### C# (ASP.NET Core)
84
+
85
+ ```csharp
86
+ using Kupola;
87
+
88
+ string html = Components.Card("Welcome", "Hello Kupola!", "") + Components.Button("Submit", "brand", "md");
89
+ ```
90
+
91
+ ### Node.js (Express/Koa)
92
+
93
+ ```javascript
94
+ import { button, card } from './kupola/utils/kupola.js';
95
+
96
+ const html = card('Welcome', 'Hello Kupola!', '') + button('Submit', 'brand', 'md');
97
+ ```
98
+
99
+ ### Ruby (Ruby on Rails)
100
+
101
+ ```ruby
102
+ require './utils/kupola.rb'
103
+
104
+ html = Kupola.card('Welcome', 'Hello Kupola!', '') + Kupola.button('Submit', 'brand', 'md')
105
+ ```
106
+
107
+ ## Basic Usage Examples
108
+
109
+ ### Buttons
110
+
111
+ ```html
112
+ <button class="ds-btn ds-btn--brand">Primary</button>
113
+ <button class="ds-btn ds-btn--secondary">Secondary</button>
114
+ <button class="ds-btn ds-btn--outline">Outline</button>
115
+ <button class="ds-btn ds-btn--ghost">Ghost</button>
116
+ <button class="ds-btn ds-btn--danger">Danger</button>
117
+ ```
118
+
119
+ ### Inputs
120
+
121
+ ```html
122
+ <input type="text" class="ds-input" placeholder="Text input">
123
+ <input type="password" class="ds-input" placeholder="Password">
124
+ <input type="email" class="ds-input" placeholder="Email">
125
+ <textarea class="ds-textarea" placeholder="Textarea"></textarea>
126
+ ```
127
+
128
+ ### Cards
129
+
130
+ ```html
131
+ <div class="ds-card">
132
+ <div class="ds-card__header">
133
+ <h3 class="ds-card__title">Card Title</h3>
134
+ <p class="ds-card__subtitle">Subtitle</p>
135
+ </div>
136
+ <div class="ds-card__body">Card content goes here</div>
137
+ <div class="ds-card__footer">Footer actions</div>
138
+ </div>
139
+ ```
140
+
141
+ ### Forms
142
+
143
+ ```html
144
+ <form class="ds-form">
145
+ <div class="ds-form-item">
146
+ <label class="ds-form-item__label">Name</label>
147
+ <input type="text" class="ds-input" placeholder="Enter name">
148
+ </div>
149
+ <div class="ds-form-item">
150
+ <label class="ds-form-item__label">Email</label>
151
+ <input type="email" class="ds-input" data-validate="email" placeholder="Enter email">
152
+ </div>
153
+ <button type="submit" class="ds-btn ds-btn--brand">Submit</button>
154
+ </form>
155
+ ```
156
+
157
+ ### Data Binding
158
+
159
+ ```html
160
+ <input type="text" data-bind="user.name:value" placeholder="Name">
161
+ <span data-bind="user.name:text"></span>
162
+ <input type="checkbox" data-bind="user.active:checked">
163
+ ```
164
+
165
+ ```javascript
166
+ kupolaData.data.user = { name: 'John', active: true };
167
+ kupolaData.data.user.name = 'Jane'; // Auto updates all bound elements
168
+ ```
169
+
170
+ ### Theme Switching
171
+
172
+ ```javascript
173
+ setTheme('light'); // Switch to light theme
174
+ setTheme('dark'); // Switch to dark theme
175
+ setBrand('zengqing'); // Set brand color to 曾青
176
+ ```
177
+
178
+ ## Project Structure
179
+
180
+ ```
181
+ kupola/
182
+ ├── css/ # CSS stylesheets
183
+ │ ├── kupola.css # Main CSS bundle
184
+ │ ├── components.css # Component styles
185
+ │ ├── components-ext.css # Extended component styles
186
+ │ ├── theme-dark.css # Dark theme tokens
187
+ │ ├── theme-light.css # Light theme tokens
188
+ │ └── ... # Other stylesheets
189
+ ├── js/ # JavaScript modules (40+)
190
+ │ ├── kupola-core.js # Core framework
191
+ │ ├── kupola-lifecycle.js # Lifecycle management
192
+ │ ├── kupola-devtools.js # Development tools
193
+ │ ├── component.js # Base component class
194
+ │ ├── router.js # Client-side router
195
+ │ ├── http.js # HTTP client
196
+ │ ├── data-bind.js # Data binding
197
+ │ ├── validation.js # Form validation
198
+ │ ├── theme.js # Theme/brand switching
199
+ │ └── ... # UI components
200
+ ├── icons/ # 120+ SVG icons
201
+ ├── dist/ # Build output
202
+ │ ├── kupola.esm.js # ES Module format
203
+ │ ├── kupola.cjs.js # CommonJS format
204
+ │ ├── kupola.umd.js # UMD format
205
+ │ └── types/kupola.d.ts # TypeScript types
206
+ ├── src/ # Build entry points
207
+ ├── utils/ # Multi-language utility functions
208
+ │ ├── kupola.py # Python component generation
209
+ │ ├── kupola.go # Go component generation
210
+ │ ├── Kupola.java # Java component generation
211
+ │ ├── Kupola.cs # C# component generation
212
+ │ ├── kupola.js # Node.js component generation
213
+ │ └── kupola.rb # Ruby component generation
214
+ ├── templates/ # HTML templates
215
+ │ ├── base.html # Base template
216
+ │ └── base_dashboard.html # Dashboard base template
217
+ ├── dashboard/ # Dashboard template
218
+ ├── casepages/ # Component showcase pages
219
+ ├── test/ # Test files
220
+ ├── examples/ # Usage examples
221
+ ├── docs/ # Documentation
222
+ ├── INTEGRATION.md # Integration guide
223
+ └── package.json # Build scripts
224
+ ```
225
+
226
+ ## Build
227
+
228
+ ```bash
229
+ cd kupola
230
+ npm install
231
+ npm run build # Production build (Vite)
232
+ npm run build:rollup # Alternative build (Rollup)
233
+ npm run dev # Development server
234
+ ```
235
+
236
+ ## Documentation
237
+
238
+ - [Integration Guide](INTEGRATION.md) - Framework integration examples
239
+ - [API Documentation](docs/api.md) - API reference
240
+ - [showcase.html](dashboard/showcase.html) - Interactive component showcase
241
+ - [Case Pages](casepages/) - Component usage examples
242
+
243
+ ## Browser Support
244
+
245
+ Chrome, Firefox, Safari, Edge (latest versions)
246
+
247
+ ## License
248
+
249
+ MIT License
250
+
251
+ ## Migration Notice
252
+
253
+ This project was previously known as **Nimbus Design System**. It has been renamed to **Kupola** with the following changes:
254
+
255
+ ### Name Changes
256
+
257
+ | Old Name | New Name |
258
+ |----------|----------|
259
+ | `NimbusComponent` | `KupolaComponent` |
260
+ | `NimbusHttp` | `KupolaHttp` |
261
+ | `NimbusRouter` | `KupolaRouter` |
262
+ | `NimbusLifecycle` | `KupolaLifecycle` |
263
+ | `window.nimbusData` | `window.kupolaData` |
264
+ | `window.nimbusRegistry` | `window.kupolaRegistry` |
265
+
266
+ ### File Changes
267
+
268
+ | Old Path | New Path |
269
+ |----------|----------|
270
+ | `js/nimbus-core.js` | `js/kupola-core.js` |
271
+ | `js/nimbus-lifecycle.js` | `js/kupola-lifecycle.js` |
272
+ | `js/nimbus-devtools.js` | `js/kupola-devtools.js` |
273
+ | `css/nimbus.css` | `css/kupola.css` |
274
+ | `types/nimbus.d.ts` | `types/kupola.d.ts` |
275
+ | `dist/nimbus.esm.js` | `dist/kupola.esm.js` |
276
+ | `dist/nimbus.cjs.js` | `dist/kupola.cjs.js` |
277
+ | `dist/nimbus.umd.js` | `dist/kupola.umd.js` |
278
+
279
+ ### Removed Files
280
+
281
+ - `build.js` / `watch.js` - Legacy build scripts (replaced by Vite)
282
+ - `dev-server.js` - Unused development server
283
+ - `DOCS.md` - Outdated documentation
284
+ - `components/` - Legacy HTML components
285
+ - `common/` - Empty directory
286
+ - Temporary scripts: `rename-project.cjs`, `fix-remaining.cjs`, etc.