@seanyeh77/ui 0.0.0-stage → 0.3.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 (564) hide show
  1. package/dist/bundle.js +81 -0
  2. package/dist/bundle.js.map +1 -0
  3. package/dist/fonts/LICENSE-OFL.txt +93 -0
  4. package/dist/fonts/geist-mono-cyrillic-400-normal.woff2 +0 -0
  5. package/dist/fonts/geist-mono-cyrillic-500-normal.woff2 +0 -0
  6. package/dist/fonts/geist-mono-cyrillic-600-normal.woff2 +0 -0
  7. package/dist/fonts/geist-mono-cyrillic-700-normal.woff2 +0 -0
  8. package/dist/fonts/geist-mono-cyrillic-ext-400-normal.woff2 +0 -0
  9. package/dist/fonts/geist-mono-cyrillic-ext-500-normal.woff2 +0 -0
  10. package/dist/fonts/geist-mono-cyrillic-ext-600-normal.woff2 +0 -0
  11. package/dist/fonts/geist-mono-cyrillic-ext-700-normal.woff2 +0 -0
  12. package/dist/fonts/geist-mono-latin-400-normal.woff2 +0 -0
  13. package/dist/fonts/geist-mono-latin-500-normal.woff2 +0 -0
  14. package/dist/fonts/geist-mono-latin-600-normal.woff2 +0 -0
  15. package/dist/fonts/geist-mono-latin-700-normal.woff2 +0 -0
  16. package/dist/fonts/geist-mono-latin-ext-400-normal.woff2 +0 -0
  17. package/dist/fonts/geist-mono-latin-ext-500-normal.woff2 +0 -0
  18. package/dist/fonts/geist-mono-latin-ext-600-normal.woff2 +0 -0
  19. package/dist/fonts/geist-mono-latin-ext-700-normal.woff2 +0 -0
  20. package/dist/fonts/geist-mono-symbols2-400-normal.woff2 +0 -0
  21. package/dist/fonts/geist-mono-symbols2-500-normal.woff2 +0 -0
  22. package/dist/fonts/geist-mono-symbols2-600-normal.woff2 +0 -0
  23. package/dist/fonts/geist-mono-symbols2-700-normal.woff2 +0 -0
  24. package/dist/fonts/geist-mono-vietnamese-400-normal.woff2 +0 -0
  25. package/dist/fonts/geist-mono-vietnamese-500-normal.woff2 +0 -0
  26. package/dist/fonts/geist-mono-vietnamese-600-normal.woff2 +0 -0
  27. package/dist/fonts/geist-mono-vietnamese-700-normal.woff2 +0 -0
  28. package/dist/fonts/inter-cyrillic-400-normal.woff2 +0 -0
  29. package/dist/fonts/inter-cyrillic-500-normal.woff2 +0 -0
  30. package/dist/fonts/inter-cyrillic-600-normal.woff2 +0 -0
  31. package/dist/fonts/inter-cyrillic-700-normal.woff2 +0 -0
  32. package/dist/fonts/inter-cyrillic-ext-400-normal.woff2 +0 -0
  33. package/dist/fonts/inter-cyrillic-ext-500-normal.woff2 +0 -0
  34. package/dist/fonts/inter-cyrillic-ext-600-normal.woff2 +0 -0
  35. package/dist/fonts/inter-cyrillic-ext-700-normal.woff2 +0 -0
  36. package/dist/fonts/inter-greek-400-normal.woff2 +0 -0
  37. package/dist/fonts/inter-greek-500-normal.woff2 +0 -0
  38. package/dist/fonts/inter-greek-600-normal.woff2 +0 -0
  39. package/dist/fonts/inter-greek-700-normal.woff2 +0 -0
  40. package/dist/fonts/inter-greek-ext-400-normal.woff2 +0 -0
  41. package/dist/fonts/inter-greek-ext-500-normal.woff2 +0 -0
  42. package/dist/fonts/inter-greek-ext-600-normal.woff2 +0 -0
  43. package/dist/fonts/inter-greek-ext-700-normal.woff2 +0 -0
  44. package/dist/fonts/inter-latin-400-normal.woff2 +0 -0
  45. package/dist/fonts/inter-latin-500-normal.woff2 +0 -0
  46. package/dist/fonts/inter-latin-600-normal.woff2 +0 -0
  47. package/dist/fonts/inter-latin-700-normal.woff2 +0 -0
  48. package/dist/fonts/inter-latin-ext-400-normal.woff2 +0 -0
  49. package/dist/fonts/inter-latin-ext-500-normal.woff2 +0 -0
  50. package/dist/fonts/inter-latin-ext-600-normal.woff2 +0 -0
  51. package/dist/fonts/inter-latin-ext-700-normal.woff2 +0 -0
  52. package/dist/fonts/inter-vietnamese-400-normal.woff2 +0 -0
  53. package/dist/fonts/inter-vietnamese-500-normal.woff2 +0 -0
  54. package/dist/fonts/inter-vietnamese-600-normal.woff2 +0 -0
  55. package/dist/fonts/inter-vietnamese-700-normal.woff2 +0 -0
  56. package/dist/fonts/noto-sans-tc-0-400-normal.woff2 +0 -0
  57. package/dist/fonts/noto-sans-tc-0-500-normal.woff2 +0 -0
  58. package/dist/fonts/noto-sans-tc-0-600-normal.woff2 +0 -0
  59. package/dist/fonts/noto-sans-tc-0-700-normal.woff2 +0 -0
  60. package/dist/fonts/noto-sans-tc-1-400-normal.woff2 +0 -0
  61. package/dist/fonts/noto-sans-tc-1-500-normal.woff2 +0 -0
  62. package/dist/fonts/noto-sans-tc-1-600-normal.woff2 +0 -0
  63. package/dist/fonts/noto-sans-tc-1-700-normal.woff2 +0 -0
  64. package/dist/fonts/noto-sans-tc-10-400-normal.woff2 +0 -0
  65. package/dist/fonts/noto-sans-tc-10-500-normal.woff2 +0 -0
  66. package/dist/fonts/noto-sans-tc-10-600-normal.woff2 +0 -0
  67. package/dist/fonts/noto-sans-tc-10-700-normal.woff2 +0 -0
  68. package/dist/fonts/noto-sans-tc-101-400-normal.woff2 +0 -0
  69. package/dist/fonts/noto-sans-tc-101-500-normal.woff2 +0 -0
  70. package/dist/fonts/noto-sans-tc-101-600-normal.woff2 +0 -0
  71. package/dist/fonts/noto-sans-tc-101-700-normal.woff2 +0 -0
  72. package/dist/fonts/noto-sans-tc-102-400-normal.woff2 +0 -0
  73. package/dist/fonts/noto-sans-tc-102-500-normal.woff2 +0 -0
  74. package/dist/fonts/noto-sans-tc-102-600-normal.woff2 +0 -0
  75. package/dist/fonts/noto-sans-tc-102-700-normal.woff2 +0 -0
  76. package/dist/fonts/noto-sans-tc-103-400-normal.woff2 +0 -0
  77. package/dist/fonts/noto-sans-tc-103-500-normal.woff2 +0 -0
  78. package/dist/fonts/noto-sans-tc-103-600-normal.woff2 +0 -0
  79. package/dist/fonts/noto-sans-tc-103-700-normal.woff2 +0 -0
  80. package/dist/fonts/noto-sans-tc-104-400-normal.woff2 +0 -0
  81. package/dist/fonts/noto-sans-tc-104-500-normal.woff2 +0 -0
  82. package/dist/fonts/noto-sans-tc-104-600-normal.woff2 +0 -0
  83. package/dist/fonts/noto-sans-tc-104-700-normal.woff2 +0 -0
  84. package/dist/fonts/noto-sans-tc-105-400-normal.woff2 +0 -0
  85. package/dist/fonts/noto-sans-tc-105-500-normal.woff2 +0 -0
  86. package/dist/fonts/noto-sans-tc-105-600-normal.woff2 +0 -0
  87. package/dist/fonts/noto-sans-tc-105-700-normal.woff2 +0 -0
  88. package/dist/fonts/noto-sans-tc-106-400-normal.woff2 +0 -0
  89. package/dist/fonts/noto-sans-tc-106-500-normal.woff2 +0 -0
  90. package/dist/fonts/noto-sans-tc-106-600-normal.woff2 +0 -0
  91. package/dist/fonts/noto-sans-tc-106-700-normal.woff2 +0 -0
  92. package/dist/fonts/noto-sans-tc-107-400-normal.woff2 +0 -0
  93. package/dist/fonts/noto-sans-tc-107-500-normal.woff2 +0 -0
  94. package/dist/fonts/noto-sans-tc-107-600-normal.woff2 +0 -0
  95. package/dist/fonts/noto-sans-tc-107-700-normal.woff2 +0 -0
  96. package/dist/fonts/noto-sans-tc-108-400-normal.woff2 +0 -0
  97. package/dist/fonts/noto-sans-tc-108-500-normal.woff2 +0 -0
  98. package/dist/fonts/noto-sans-tc-108-600-normal.woff2 +0 -0
  99. package/dist/fonts/noto-sans-tc-108-700-normal.woff2 +0 -0
  100. package/dist/fonts/noto-sans-tc-109-400-normal.woff2 +0 -0
  101. package/dist/fonts/noto-sans-tc-109-500-normal.woff2 +0 -0
  102. package/dist/fonts/noto-sans-tc-109-600-normal.woff2 +0 -0
  103. package/dist/fonts/noto-sans-tc-109-700-normal.woff2 +0 -0
  104. package/dist/fonts/noto-sans-tc-11-400-normal.woff2 +0 -0
  105. package/dist/fonts/noto-sans-tc-11-500-normal.woff2 +0 -0
  106. package/dist/fonts/noto-sans-tc-11-600-normal.woff2 +0 -0
  107. package/dist/fonts/noto-sans-tc-11-700-normal.woff2 +0 -0
  108. package/dist/fonts/noto-sans-tc-110-400-normal.woff2 +0 -0
  109. package/dist/fonts/noto-sans-tc-110-500-normal.woff2 +0 -0
  110. package/dist/fonts/noto-sans-tc-110-600-normal.woff2 +0 -0
  111. package/dist/fonts/noto-sans-tc-110-700-normal.woff2 +0 -0
  112. package/dist/fonts/noto-sans-tc-111-400-normal.woff2 +0 -0
  113. package/dist/fonts/noto-sans-tc-111-500-normal.woff2 +0 -0
  114. package/dist/fonts/noto-sans-tc-111-600-normal.woff2 +0 -0
  115. package/dist/fonts/noto-sans-tc-111-700-normal.woff2 +0 -0
  116. package/dist/fonts/noto-sans-tc-112-400-normal.woff2 +0 -0
  117. package/dist/fonts/noto-sans-tc-112-500-normal.woff2 +0 -0
  118. package/dist/fonts/noto-sans-tc-112-600-normal.woff2 +0 -0
  119. package/dist/fonts/noto-sans-tc-112-700-normal.woff2 +0 -0
  120. package/dist/fonts/noto-sans-tc-113-400-normal.woff2 +0 -0
  121. package/dist/fonts/noto-sans-tc-113-500-normal.woff2 +0 -0
  122. package/dist/fonts/noto-sans-tc-113-600-normal.woff2 +0 -0
  123. package/dist/fonts/noto-sans-tc-113-700-normal.woff2 +0 -0
  124. package/dist/fonts/noto-sans-tc-114-400-normal.woff2 +0 -0
  125. package/dist/fonts/noto-sans-tc-114-500-normal.woff2 +0 -0
  126. package/dist/fonts/noto-sans-tc-114-600-normal.woff2 +0 -0
  127. package/dist/fonts/noto-sans-tc-114-700-normal.woff2 +0 -0
  128. package/dist/fonts/noto-sans-tc-115-400-normal.woff2 +0 -0
  129. package/dist/fonts/noto-sans-tc-115-500-normal.woff2 +0 -0
  130. package/dist/fonts/noto-sans-tc-115-600-normal.woff2 +0 -0
  131. package/dist/fonts/noto-sans-tc-115-700-normal.woff2 +0 -0
  132. package/dist/fonts/noto-sans-tc-116-400-normal.woff2 +0 -0
  133. package/dist/fonts/noto-sans-tc-116-500-normal.woff2 +0 -0
  134. package/dist/fonts/noto-sans-tc-116-600-normal.woff2 +0 -0
  135. package/dist/fonts/noto-sans-tc-116-700-normal.woff2 +0 -0
  136. package/dist/fonts/noto-sans-tc-117-400-normal.woff2 +0 -0
  137. package/dist/fonts/noto-sans-tc-117-500-normal.woff2 +0 -0
  138. package/dist/fonts/noto-sans-tc-117-600-normal.woff2 +0 -0
  139. package/dist/fonts/noto-sans-tc-117-700-normal.woff2 +0 -0
  140. package/dist/fonts/noto-sans-tc-118-400-normal.woff2 +0 -0
  141. package/dist/fonts/noto-sans-tc-118-500-normal.woff2 +0 -0
  142. package/dist/fonts/noto-sans-tc-118-600-normal.woff2 +0 -0
  143. package/dist/fonts/noto-sans-tc-118-700-normal.woff2 +0 -0
  144. package/dist/fonts/noto-sans-tc-119-400-normal.woff2 +0 -0
  145. package/dist/fonts/noto-sans-tc-119-500-normal.woff2 +0 -0
  146. package/dist/fonts/noto-sans-tc-119-600-normal.woff2 +0 -0
  147. package/dist/fonts/noto-sans-tc-119-700-normal.woff2 +0 -0
  148. package/dist/fonts/noto-sans-tc-12-400-normal.woff2 +0 -0
  149. package/dist/fonts/noto-sans-tc-12-500-normal.woff2 +0 -0
  150. package/dist/fonts/noto-sans-tc-12-600-normal.woff2 +0 -0
  151. package/dist/fonts/noto-sans-tc-12-700-normal.woff2 +0 -0
  152. package/dist/fonts/noto-sans-tc-120-400-normal.woff2 +0 -0
  153. package/dist/fonts/noto-sans-tc-120-500-normal.woff2 +0 -0
  154. package/dist/fonts/noto-sans-tc-120-600-normal.woff2 +0 -0
  155. package/dist/fonts/noto-sans-tc-120-700-normal.woff2 +0 -0
  156. package/dist/fonts/noto-sans-tc-121-400-normal.woff2 +0 -0
  157. package/dist/fonts/noto-sans-tc-121-500-normal.woff2 +0 -0
  158. package/dist/fonts/noto-sans-tc-121-600-normal.woff2 +0 -0
  159. package/dist/fonts/noto-sans-tc-121-700-normal.woff2 +0 -0
  160. package/dist/fonts/noto-sans-tc-122-400-normal.woff2 +0 -0
  161. package/dist/fonts/noto-sans-tc-122-500-normal.woff2 +0 -0
  162. package/dist/fonts/noto-sans-tc-122-600-normal.woff2 +0 -0
  163. package/dist/fonts/noto-sans-tc-122-700-normal.woff2 +0 -0
  164. package/dist/fonts/noto-sans-tc-123-400-normal.woff2 +0 -0
  165. package/dist/fonts/noto-sans-tc-123-500-normal.woff2 +0 -0
  166. package/dist/fonts/noto-sans-tc-123-600-normal.woff2 +0 -0
  167. package/dist/fonts/noto-sans-tc-123-700-normal.woff2 +0 -0
  168. package/dist/fonts/noto-sans-tc-2-400-normal.woff2 +0 -0
  169. package/dist/fonts/noto-sans-tc-2-500-normal.woff2 +0 -0
  170. package/dist/fonts/noto-sans-tc-2-600-normal.woff2 +0 -0
  171. package/dist/fonts/noto-sans-tc-2-700-normal.woff2 +0 -0
  172. package/dist/fonts/noto-sans-tc-23-400-normal.woff2 +0 -0
  173. package/dist/fonts/noto-sans-tc-23-500-normal.woff2 +0 -0
  174. package/dist/fonts/noto-sans-tc-23-600-normal.woff2 +0 -0
  175. package/dist/fonts/noto-sans-tc-23-700-normal.woff2 +0 -0
  176. package/dist/fonts/noto-sans-tc-24-400-normal.woff2 +0 -0
  177. package/dist/fonts/noto-sans-tc-24-500-normal.woff2 +0 -0
  178. package/dist/fonts/noto-sans-tc-24-600-normal.woff2 +0 -0
  179. package/dist/fonts/noto-sans-tc-24-700-normal.woff2 +0 -0
  180. package/dist/fonts/noto-sans-tc-25-400-normal.woff2 +0 -0
  181. package/dist/fonts/noto-sans-tc-25-500-normal.woff2 +0 -0
  182. package/dist/fonts/noto-sans-tc-25-600-normal.woff2 +0 -0
  183. package/dist/fonts/noto-sans-tc-25-700-normal.woff2 +0 -0
  184. package/dist/fonts/noto-sans-tc-26-400-normal.woff2 +0 -0
  185. package/dist/fonts/noto-sans-tc-26-500-normal.woff2 +0 -0
  186. package/dist/fonts/noto-sans-tc-26-600-normal.woff2 +0 -0
  187. package/dist/fonts/noto-sans-tc-26-700-normal.woff2 +0 -0
  188. package/dist/fonts/noto-sans-tc-27-400-normal.woff2 +0 -0
  189. package/dist/fonts/noto-sans-tc-27-500-normal.woff2 +0 -0
  190. package/dist/fonts/noto-sans-tc-27-600-normal.woff2 +0 -0
  191. package/dist/fonts/noto-sans-tc-27-700-normal.woff2 +0 -0
  192. package/dist/fonts/noto-sans-tc-28-400-normal.woff2 +0 -0
  193. package/dist/fonts/noto-sans-tc-28-500-normal.woff2 +0 -0
  194. package/dist/fonts/noto-sans-tc-28-600-normal.woff2 +0 -0
  195. package/dist/fonts/noto-sans-tc-28-700-normal.woff2 +0 -0
  196. package/dist/fonts/noto-sans-tc-29-400-normal.woff2 +0 -0
  197. package/dist/fonts/noto-sans-tc-29-500-normal.woff2 +0 -0
  198. package/dist/fonts/noto-sans-tc-29-600-normal.woff2 +0 -0
  199. package/dist/fonts/noto-sans-tc-29-700-normal.woff2 +0 -0
  200. package/dist/fonts/noto-sans-tc-30-400-normal.woff2 +0 -0
  201. package/dist/fonts/noto-sans-tc-30-500-normal.woff2 +0 -0
  202. package/dist/fonts/noto-sans-tc-30-600-normal.woff2 +0 -0
  203. package/dist/fonts/noto-sans-tc-30-700-normal.woff2 +0 -0
  204. package/dist/fonts/noto-sans-tc-31-400-normal.woff2 +0 -0
  205. package/dist/fonts/noto-sans-tc-31-500-normal.woff2 +0 -0
  206. package/dist/fonts/noto-sans-tc-31-600-normal.woff2 +0 -0
  207. package/dist/fonts/noto-sans-tc-31-700-normal.woff2 +0 -0
  208. package/dist/fonts/noto-sans-tc-32-400-normal.woff2 +0 -0
  209. package/dist/fonts/noto-sans-tc-32-500-normal.woff2 +0 -0
  210. package/dist/fonts/noto-sans-tc-32-600-normal.woff2 +0 -0
  211. package/dist/fonts/noto-sans-tc-32-700-normal.woff2 +0 -0
  212. package/dist/fonts/noto-sans-tc-33-400-normal.woff2 +0 -0
  213. package/dist/fonts/noto-sans-tc-33-500-normal.woff2 +0 -0
  214. package/dist/fonts/noto-sans-tc-33-600-normal.woff2 +0 -0
  215. package/dist/fonts/noto-sans-tc-33-700-normal.woff2 +0 -0
  216. package/dist/fonts/noto-sans-tc-34-400-normal.woff2 +0 -0
  217. package/dist/fonts/noto-sans-tc-34-500-normal.woff2 +0 -0
  218. package/dist/fonts/noto-sans-tc-34-600-normal.woff2 +0 -0
  219. package/dist/fonts/noto-sans-tc-34-700-normal.woff2 +0 -0
  220. package/dist/fonts/noto-sans-tc-35-400-normal.woff2 +0 -0
  221. package/dist/fonts/noto-sans-tc-35-500-normal.woff2 +0 -0
  222. package/dist/fonts/noto-sans-tc-35-600-normal.woff2 +0 -0
  223. package/dist/fonts/noto-sans-tc-35-700-normal.woff2 +0 -0
  224. package/dist/fonts/noto-sans-tc-36-400-normal.woff2 +0 -0
  225. package/dist/fonts/noto-sans-tc-36-500-normal.woff2 +0 -0
  226. package/dist/fonts/noto-sans-tc-36-600-normal.woff2 +0 -0
  227. package/dist/fonts/noto-sans-tc-36-700-normal.woff2 +0 -0
  228. package/dist/fonts/noto-sans-tc-37-400-normal.woff2 +0 -0
  229. package/dist/fonts/noto-sans-tc-37-500-normal.woff2 +0 -0
  230. package/dist/fonts/noto-sans-tc-37-600-normal.woff2 +0 -0
  231. package/dist/fonts/noto-sans-tc-37-700-normal.woff2 +0 -0
  232. package/dist/fonts/noto-sans-tc-38-400-normal.woff2 +0 -0
  233. package/dist/fonts/noto-sans-tc-38-500-normal.woff2 +0 -0
  234. package/dist/fonts/noto-sans-tc-38-600-normal.woff2 +0 -0
  235. package/dist/fonts/noto-sans-tc-38-700-normal.woff2 +0 -0
  236. package/dist/fonts/noto-sans-tc-39-400-normal.woff2 +0 -0
  237. package/dist/fonts/noto-sans-tc-39-500-normal.woff2 +0 -0
  238. package/dist/fonts/noto-sans-tc-39-600-normal.woff2 +0 -0
  239. package/dist/fonts/noto-sans-tc-39-700-normal.woff2 +0 -0
  240. package/dist/fonts/noto-sans-tc-4-400-normal.woff2 +0 -0
  241. package/dist/fonts/noto-sans-tc-4-500-normal.woff2 +0 -0
  242. package/dist/fonts/noto-sans-tc-4-600-normal.woff2 +0 -0
  243. package/dist/fonts/noto-sans-tc-4-700-normal.woff2 +0 -0
  244. package/dist/fonts/noto-sans-tc-40-400-normal.woff2 +0 -0
  245. package/dist/fonts/noto-sans-tc-40-500-normal.woff2 +0 -0
  246. package/dist/fonts/noto-sans-tc-40-600-normal.woff2 +0 -0
  247. package/dist/fonts/noto-sans-tc-40-700-normal.woff2 +0 -0
  248. package/dist/fonts/noto-sans-tc-41-400-normal.woff2 +0 -0
  249. package/dist/fonts/noto-sans-tc-41-500-normal.woff2 +0 -0
  250. package/dist/fonts/noto-sans-tc-41-600-normal.woff2 +0 -0
  251. package/dist/fonts/noto-sans-tc-41-700-normal.woff2 +0 -0
  252. package/dist/fonts/noto-sans-tc-42-400-normal.woff2 +0 -0
  253. package/dist/fonts/noto-sans-tc-42-500-normal.woff2 +0 -0
  254. package/dist/fonts/noto-sans-tc-42-600-normal.woff2 +0 -0
  255. package/dist/fonts/noto-sans-tc-42-700-normal.woff2 +0 -0
  256. package/dist/fonts/noto-sans-tc-43-400-normal.woff2 +0 -0
  257. package/dist/fonts/noto-sans-tc-43-500-normal.woff2 +0 -0
  258. package/dist/fonts/noto-sans-tc-43-600-normal.woff2 +0 -0
  259. package/dist/fonts/noto-sans-tc-43-700-normal.woff2 +0 -0
  260. package/dist/fonts/noto-sans-tc-44-400-normal.woff2 +0 -0
  261. package/dist/fonts/noto-sans-tc-44-500-normal.woff2 +0 -0
  262. package/dist/fonts/noto-sans-tc-44-600-normal.woff2 +0 -0
  263. package/dist/fonts/noto-sans-tc-44-700-normal.woff2 +0 -0
  264. package/dist/fonts/noto-sans-tc-45-400-normal.woff2 +0 -0
  265. package/dist/fonts/noto-sans-tc-45-500-normal.woff2 +0 -0
  266. package/dist/fonts/noto-sans-tc-45-600-normal.woff2 +0 -0
  267. package/dist/fonts/noto-sans-tc-45-700-normal.woff2 +0 -0
  268. package/dist/fonts/noto-sans-tc-46-400-normal.woff2 +0 -0
  269. package/dist/fonts/noto-sans-tc-46-500-normal.woff2 +0 -0
  270. package/dist/fonts/noto-sans-tc-46-600-normal.woff2 +0 -0
  271. package/dist/fonts/noto-sans-tc-46-700-normal.woff2 +0 -0
  272. package/dist/fonts/noto-sans-tc-47-400-normal.woff2 +0 -0
  273. package/dist/fonts/noto-sans-tc-47-500-normal.woff2 +0 -0
  274. package/dist/fonts/noto-sans-tc-47-600-normal.woff2 +0 -0
  275. package/dist/fonts/noto-sans-tc-47-700-normal.woff2 +0 -0
  276. package/dist/fonts/noto-sans-tc-48-400-normal.woff2 +0 -0
  277. package/dist/fonts/noto-sans-tc-48-500-normal.woff2 +0 -0
  278. package/dist/fonts/noto-sans-tc-48-600-normal.woff2 +0 -0
  279. package/dist/fonts/noto-sans-tc-48-700-normal.woff2 +0 -0
  280. package/dist/fonts/noto-sans-tc-49-400-normal.woff2 +0 -0
  281. package/dist/fonts/noto-sans-tc-49-500-normal.woff2 +0 -0
  282. package/dist/fonts/noto-sans-tc-49-600-normal.woff2 +0 -0
  283. package/dist/fonts/noto-sans-tc-49-700-normal.woff2 +0 -0
  284. package/dist/fonts/noto-sans-tc-50-400-normal.woff2 +0 -0
  285. package/dist/fonts/noto-sans-tc-50-500-normal.woff2 +0 -0
  286. package/dist/fonts/noto-sans-tc-50-600-normal.woff2 +0 -0
  287. package/dist/fonts/noto-sans-tc-50-700-normal.woff2 +0 -0
  288. package/dist/fonts/noto-sans-tc-51-400-normal.woff2 +0 -0
  289. package/dist/fonts/noto-sans-tc-51-500-normal.woff2 +0 -0
  290. package/dist/fonts/noto-sans-tc-51-600-normal.woff2 +0 -0
  291. package/dist/fonts/noto-sans-tc-51-700-normal.woff2 +0 -0
  292. package/dist/fonts/noto-sans-tc-52-400-normal.woff2 +0 -0
  293. package/dist/fonts/noto-sans-tc-52-500-normal.woff2 +0 -0
  294. package/dist/fonts/noto-sans-tc-52-600-normal.woff2 +0 -0
  295. package/dist/fonts/noto-sans-tc-52-700-normal.woff2 +0 -0
  296. package/dist/fonts/noto-sans-tc-53-400-normal.woff2 +0 -0
  297. package/dist/fonts/noto-sans-tc-53-500-normal.woff2 +0 -0
  298. package/dist/fonts/noto-sans-tc-53-600-normal.woff2 +0 -0
  299. package/dist/fonts/noto-sans-tc-53-700-normal.woff2 +0 -0
  300. package/dist/fonts/noto-sans-tc-54-400-normal.woff2 +0 -0
  301. package/dist/fonts/noto-sans-tc-54-500-normal.woff2 +0 -0
  302. package/dist/fonts/noto-sans-tc-54-600-normal.woff2 +0 -0
  303. package/dist/fonts/noto-sans-tc-54-700-normal.woff2 +0 -0
  304. package/dist/fonts/noto-sans-tc-55-400-normal.woff2 +0 -0
  305. package/dist/fonts/noto-sans-tc-55-500-normal.woff2 +0 -0
  306. package/dist/fonts/noto-sans-tc-55-600-normal.woff2 +0 -0
  307. package/dist/fonts/noto-sans-tc-55-700-normal.woff2 +0 -0
  308. package/dist/fonts/noto-sans-tc-56-400-normal.woff2 +0 -0
  309. package/dist/fonts/noto-sans-tc-56-500-normal.woff2 +0 -0
  310. package/dist/fonts/noto-sans-tc-56-600-normal.woff2 +0 -0
  311. package/dist/fonts/noto-sans-tc-56-700-normal.woff2 +0 -0
  312. package/dist/fonts/noto-sans-tc-57-400-normal.woff2 +0 -0
  313. package/dist/fonts/noto-sans-tc-57-500-normal.woff2 +0 -0
  314. package/dist/fonts/noto-sans-tc-57-600-normal.woff2 +0 -0
  315. package/dist/fonts/noto-sans-tc-57-700-normal.woff2 +0 -0
  316. package/dist/fonts/noto-sans-tc-58-400-normal.woff2 +0 -0
  317. package/dist/fonts/noto-sans-tc-58-500-normal.woff2 +0 -0
  318. package/dist/fonts/noto-sans-tc-58-600-normal.woff2 +0 -0
  319. package/dist/fonts/noto-sans-tc-58-700-normal.woff2 +0 -0
  320. package/dist/fonts/noto-sans-tc-59-400-normal.woff2 +0 -0
  321. package/dist/fonts/noto-sans-tc-59-500-normal.woff2 +0 -0
  322. package/dist/fonts/noto-sans-tc-59-600-normal.woff2 +0 -0
  323. package/dist/fonts/noto-sans-tc-59-700-normal.woff2 +0 -0
  324. package/dist/fonts/noto-sans-tc-60-400-normal.woff2 +0 -0
  325. package/dist/fonts/noto-sans-tc-60-500-normal.woff2 +0 -0
  326. package/dist/fonts/noto-sans-tc-60-600-normal.woff2 +0 -0
  327. package/dist/fonts/noto-sans-tc-60-700-normal.woff2 +0 -0
  328. package/dist/fonts/noto-sans-tc-61-400-normal.woff2 +0 -0
  329. package/dist/fonts/noto-sans-tc-61-500-normal.woff2 +0 -0
  330. package/dist/fonts/noto-sans-tc-61-600-normal.woff2 +0 -0
  331. package/dist/fonts/noto-sans-tc-61-700-normal.woff2 +0 -0
  332. package/dist/fonts/noto-sans-tc-62-400-normal.woff2 +0 -0
  333. package/dist/fonts/noto-sans-tc-62-500-normal.woff2 +0 -0
  334. package/dist/fonts/noto-sans-tc-62-600-normal.woff2 +0 -0
  335. package/dist/fonts/noto-sans-tc-62-700-normal.woff2 +0 -0
  336. package/dist/fonts/noto-sans-tc-63-400-normal.woff2 +0 -0
  337. package/dist/fonts/noto-sans-tc-63-500-normal.woff2 +0 -0
  338. package/dist/fonts/noto-sans-tc-63-600-normal.woff2 +0 -0
  339. package/dist/fonts/noto-sans-tc-63-700-normal.woff2 +0 -0
  340. package/dist/fonts/noto-sans-tc-64-400-normal.woff2 +0 -0
  341. package/dist/fonts/noto-sans-tc-64-500-normal.woff2 +0 -0
  342. package/dist/fonts/noto-sans-tc-64-600-normal.woff2 +0 -0
  343. package/dist/fonts/noto-sans-tc-64-700-normal.woff2 +0 -0
  344. package/dist/fonts/noto-sans-tc-65-400-normal.woff2 +0 -0
  345. package/dist/fonts/noto-sans-tc-65-500-normal.woff2 +0 -0
  346. package/dist/fonts/noto-sans-tc-65-600-normal.woff2 +0 -0
  347. package/dist/fonts/noto-sans-tc-65-700-normal.woff2 +0 -0
  348. package/dist/fonts/noto-sans-tc-66-400-normal.woff2 +0 -0
  349. package/dist/fonts/noto-sans-tc-66-500-normal.woff2 +0 -0
  350. package/dist/fonts/noto-sans-tc-66-600-normal.woff2 +0 -0
  351. package/dist/fonts/noto-sans-tc-66-700-normal.woff2 +0 -0
  352. package/dist/fonts/noto-sans-tc-67-400-normal.woff2 +0 -0
  353. package/dist/fonts/noto-sans-tc-67-500-normal.woff2 +0 -0
  354. package/dist/fonts/noto-sans-tc-67-600-normal.woff2 +0 -0
  355. package/dist/fonts/noto-sans-tc-67-700-normal.woff2 +0 -0
  356. package/dist/fonts/noto-sans-tc-68-400-normal.woff2 +0 -0
  357. package/dist/fonts/noto-sans-tc-68-500-normal.woff2 +0 -0
  358. package/dist/fonts/noto-sans-tc-68-600-normal.woff2 +0 -0
  359. package/dist/fonts/noto-sans-tc-68-700-normal.woff2 +0 -0
  360. package/dist/fonts/noto-sans-tc-69-400-normal.woff2 +0 -0
  361. package/dist/fonts/noto-sans-tc-69-500-normal.woff2 +0 -0
  362. package/dist/fonts/noto-sans-tc-69-600-normal.woff2 +0 -0
  363. package/dist/fonts/noto-sans-tc-69-700-normal.woff2 +0 -0
  364. package/dist/fonts/noto-sans-tc-70-400-normal.woff2 +0 -0
  365. package/dist/fonts/noto-sans-tc-70-500-normal.woff2 +0 -0
  366. package/dist/fonts/noto-sans-tc-70-600-normal.woff2 +0 -0
  367. package/dist/fonts/noto-sans-tc-70-700-normal.woff2 +0 -0
  368. package/dist/fonts/noto-sans-tc-71-400-normal.woff2 +0 -0
  369. package/dist/fonts/noto-sans-tc-71-500-normal.woff2 +0 -0
  370. package/dist/fonts/noto-sans-tc-71-600-normal.woff2 +0 -0
  371. package/dist/fonts/noto-sans-tc-71-700-normal.woff2 +0 -0
  372. package/dist/fonts/noto-sans-tc-72-400-normal.woff2 +0 -0
  373. package/dist/fonts/noto-sans-tc-72-500-normal.woff2 +0 -0
  374. package/dist/fonts/noto-sans-tc-72-600-normal.woff2 +0 -0
  375. package/dist/fonts/noto-sans-tc-72-700-normal.woff2 +0 -0
  376. package/dist/fonts/noto-sans-tc-73-400-normal.woff2 +0 -0
  377. package/dist/fonts/noto-sans-tc-73-500-normal.woff2 +0 -0
  378. package/dist/fonts/noto-sans-tc-73-600-normal.woff2 +0 -0
  379. package/dist/fonts/noto-sans-tc-73-700-normal.woff2 +0 -0
  380. package/dist/fonts/noto-sans-tc-74-400-normal.woff2 +0 -0
  381. package/dist/fonts/noto-sans-tc-74-500-normal.woff2 +0 -0
  382. package/dist/fonts/noto-sans-tc-74-600-normal.woff2 +0 -0
  383. package/dist/fonts/noto-sans-tc-74-700-normal.woff2 +0 -0
  384. package/dist/fonts/noto-sans-tc-75-400-normal.woff2 +0 -0
  385. package/dist/fonts/noto-sans-tc-75-500-normal.woff2 +0 -0
  386. package/dist/fonts/noto-sans-tc-75-600-normal.woff2 +0 -0
  387. package/dist/fonts/noto-sans-tc-75-700-normal.woff2 +0 -0
  388. package/dist/fonts/noto-sans-tc-76-400-normal.woff2 +0 -0
  389. package/dist/fonts/noto-sans-tc-76-500-normal.woff2 +0 -0
  390. package/dist/fonts/noto-sans-tc-76-600-normal.woff2 +0 -0
  391. package/dist/fonts/noto-sans-tc-76-700-normal.woff2 +0 -0
  392. package/dist/fonts/noto-sans-tc-77-400-normal.woff2 +0 -0
  393. package/dist/fonts/noto-sans-tc-77-500-normal.woff2 +0 -0
  394. package/dist/fonts/noto-sans-tc-77-600-normal.woff2 +0 -0
  395. package/dist/fonts/noto-sans-tc-77-700-normal.woff2 +0 -0
  396. package/dist/fonts/noto-sans-tc-78-400-normal.woff2 +0 -0
  397. package/dist/fonts/noto-sans-tc-78-500-normal.woff2 +0 -0
  398. package/dist/fonts/noto-sans-tc-78-600-normal.woff2 +0 -0
  399. package/dist/fonts/noto-sans-tc-78-700-normal.woff2 +0 -0
  400. package/dist/fonts/noto-sans-tc-79-400-normal.woff2 +0 -0
  401. package/dist/fonts/noto-sans-tc-79-500-normal.woff2 +0 -0
  402. package/dist/fonts/noto-sans-tc-79-600-normal.woff2 +0 -0
  403. package/dist/fonts/noto-sans-tc-79-700-normal.woff2 +0 -0
  404. package/dist/fonts/noto-sans-tc-80-400-normal.woff2 +0 -0
  405. package/dist/fonts/noto-sans-tc-80-500-normal.woff2 +0 -0
  406. package/dist/fonts/noto-sans-tc-80-600-normal.woff2 +0 -0
  407. package/dist/fonts/noto-sans-tc-80-700-normal.woff2 +0 -0
  408. package/dist/fonts/noto-sans-tc-81-400-normal.woff2 +0 -0
  409. package/dist/fonts/noto-sans-tc-81-500-normal.woff2 +0 -0
  410. package/dist/fonts/noto-sans-tc-81-600-normal.woff2 +0 -0
  411. package/dist/fonts/noto-sans-tc-81-700-normal.woff2 +0 -0
  412. package/dist/fonts/noto-sans-tc-82-400-normal.woff2 +0 -0
  413. package/dist/fonts/noto-sans-tc-82-500-normal.woff2 +0 -0
  414. package/dist/fonts/noto-sans-tc-82-600-normal.woff2 +0 -0
  415. package/dist/fonts/noto-sans-tc-82-700-normal.woff2 +0 -0
  416. package/dist/fonts/noto-sans-tc-83-400-normal.woff2 +0 -0
  417. package/dist/fonts/noto-sans-tc-83-500-normal.woff2 +0 -0
  418. package/dist/fonts/noto-sans-tc-83-600-normal.woff2 +0 -0
  419. package/dist/fonts/noto-sans-tc-83-700-normal.woff2 +0 -0
  420. package/dist/fonts/noto-sans-tc-84-400-normal.woff2 +0 -0
  421. package/dist/fonts/noto-sans-tc-84-500-normal.woff2 +0 -0
  422. package/dist/fonts/noto-sans-tc-84-600-normal.woff2 +0 -0
  423. package/dist/fonts/noto-sans-tc-84-700-normal.woff2 +0 -0
  424. package/dist/fonts/noto-sans-tc-85-400-normal.woff2 +0 -0
  425. package/dist/fonts/noto-sans-tc-85-500-normal.woff2 +0 -0
  426. package/dist/fonts/noto-sans-tc-85-600-normal.woff2 +0 -0
  427. package/dist/fonts/noto-sans-tc-85-700-normal.woff2 +0 -0
  428. package/dist/fonts/noto-sans-tc-86-400-normal.woff2 +0 -0
  429. package/dist/fonts/noto-sans-tc-86-500-normal.woff2 +0 -0
  430. package/dist/fonts/noto-sans-tc-86-600-normal.woff2 +0 -0
  431. package/dist/fonts/noto-sans-tc-86-700-normal.woff2 +0 -0
  432. package/dist/fonts/noto-sans-tc-87-400-normal.woff2 +0 -0
  433. package/dist/fonts/noto-sans-tc-87-500-normal.woff2 +0 -0
  434. package/dist/fonts/noto-sans-tc-87-600-normal.woff2 +0 -0
  435. package/dist/fonts/noto-sans-tc-87-700-normal.woff2 +0 -0
  436. package/dist/fonts/noto-sans-tc-88-400-normal.woff2 +0 -0
  437. package/dist/fonts/noto-sans-tc-88-500-normal.woff2 +0 -0
  438. package/dist/fonts/noto-sans-tc-88-600-normal.woff2 +0 -0
  439. package/dist/fonts/noto-sans-tc-88-700-normal.woff2 +0 -0
  440. package/dist/fonts/noto-sans-tc-89-400-normal.woff2 +0 -0
  441. package/dist/fonts/noto-sans-tc-89-500-normal.woff2 +0 -0
  442. package/dist/fonts/noto-sans-tc-89-600-normal.woff2 +0 -0
  443. package/dist/fonts/noto-sans-tc-89-700-normal.woff2 +0 -0
  444. package/dist/fonts/noto-sans-tc-90-400-normal.woff2 +0 -0
  445. package/dist/fonts/noto-sans-tc-90-500-normal.woff2 +0 -0
  446. package/dist/fonts/noto-sans-tc-90-600-normal.woff2 +0 -0
  447. package/dist/fonts/noto-sans-tc-90-700-normal.woff2 +0 -0
  448. package/dist/fonts/noto-sans-tc-91-400-normal.woff2 +0 -0
  449. package/dist/fonts/noto-sans-tc-91-500-normal.woff2 +0 -0
  450. package/dist/fonts/noto-sans-tc-91-600-normal.woff2 +0 -0
  451. package/dist/fonts/noto-sans-tc-91-700-normal.woff2 +0 -0
  452. package/dist/fonts/noto-sans-tc-92-400-normal.woff2 +0 -0
  453. package/dist/fonts/noto-sans-tc-92-500-normal.woff2 +0 -0
  454. package/dist/fonts/noto-sans-tc-92-600-normal.woff2 +0 -0
  455. package/dist/fonts/noto-sans-tc-92-700-normal.woff2 +0 -0
  456. package/dist/fonts/noto-sans-tc-93-400-normal.woff2 +0 -0
  457. package/dist/fonts/noto-sans-tc-93-500-normal.woff2 +0 -0
  458. package/dist/fonts/noto-sans-tc-93-600-normal.woff2 +0 -0
  459. package/dist/fonts/noto-sans-tc-93-700-normal.woff2 +0 -0
  460. package/dist/fonts/noto-sans-tc-94-400-normal.woff2 +0 -0
  461. package/dist/fonts/noto-sans-tc-94-500-normal.woff2 +0 -0
  462. package/dist/fonts/noto-sans-tc-94-600-normal.woff2 +0 -0
  463. package/dist/fonts/noto-sans-tc-94-700-normal.woff2 +0 -0
  464. package/dist/fonts/noto-sans-tc-95-400-normal.woff2 +0 -0
  465. package/dist/fonts/noto-sans-tc-95-500-normal.woff2 +0 -0
  466. package/dist/fonts/noto-sans-tc-95-600-normal.woff2 +0 -0
  467. package/dist/fonts/noto-sans-tc-95-700-normal.woff2 +0 -0
  468. package/dist/fonts/noto-sans-tc-96-400-normal.woff2 +0 -0
  469. package/dist/fonts/noto-sans-tc-96-500-normal.woff2 +0 -0
  470. package/dist/fonts/noto-sans-tc-96-600-normal.woff2 +0 -0
  471. package/dist/fonts/noto-sans-tc-96-700-normal.woff2 +0 -0
  472. package/dist/fonts/noto-sans-tc-cyrillic-400-normal.woff2 +0 -0
  473. package/dist/fonts/noto-sans-tc-cyrillic-500-normal.woff2 +0 -0
  474. package/dist/fonts/noto-sans-tc-cyrillic-600-normal.woff2 +0 -0
  475. package/dist/fonts/noto-sans-tc-cyrillic-700-normal.woff2 +0 -0
  476. package/dist/fonts/noto-sans-tc-latin-400-normal.woff2 +0 -0
  477. package/dist/fonts/noto-sans-tc-latin-500-normal.woff2 +0 -0
  478. package/dist/fonts/noto-sans-tc-latin-600-normal.woff2 +0 -0
  479. package/dist/fonts/noto-sans-tc-latin-700-normal.woff2 +0 -0
  480. package/dist/fonts/noto-sans-tc-latin-ext-400-normal.woff2 +0 -0
  481. package/dist/fonts/noto-sans-tc-latin-ext-500-normal.woff2 +0 -0
  482. package/dist/fonts/noto-sans-tc-latin-ext-600-normal.woff2 +0 -0
  483. package/dist/fonts/noto-sans-tc-latin-ext-700-normal.woff2 +0 -0
  484. package/dist/fonts/noto-sans-tc-vietnamese-400-normal.woff2 +0 -0
  485. package/dist/fonts/noto-sans-tc-vietnamese-500-normal.woff2 +0 -0
  486. package/dist/fonts/noto-sans-tc-vietnamese-600-normal.woff2 +0 -0
  487. package/dist/fonts/noto-sans-tc-vietnamese-700-normal.woff2 +0 -0
  488. package/dist/fonts.css +7543 -0
  489. package/dist/format-entry-B1gAZnIN.js +400 -0
  490. package/dist/format-entry-B1gAZnIN.js.map +1 -0
  491. package/dist/format-entry-BKj7P9i6.d.ts +64 -0
  492. package/dist/format.d.ts +2 -0
  493. package/dist/format.js +1 -0
  494. package/dist/index.d.ts +1435 -0
  495. package/dist/index.js +5875 -0
  496. package/dist/index.js.map +1 -0
  497. package/dist/styles.css +5240 -0
  498. package/dist/tokens.css +131 -0
  499. package/docs/AccentPicker.md +7 -0
  500. package/docs/ActionBar.md +17 -0
  501. package/docs/Alert.md +8 -0
  502. package/docs/AppShell.md +30 -0
  503. package/docs/Badge.md +17 -0
  504. package/docs/BarChart.md +7 -0
  505. package/docs/Breadcrumb.md +7 -0
  506. package/docs/Button.md +18 -0
  507. package/docs/Calendar.md +15 -0
  508. package/docs/Card.md +14 -0
  509. package/docs/Checkbox.md +8 -0
  510. package/docs/CodeView.md +21 -0
  511. package/docs/CommandPalette.md +30 -0
  512. package/docs/DangerZone.md +10 -0
  513. package/docs/DataTable.md +77 -0
  514. package/docs/DatePicker.md +7 -0
  515. package/docs/DateRangePicker.md +7 -0
  516. package/docs/DetailList.md +17 -0
  517. package/docs/Dialog.md +15 -0
  518. package/docs/Drawer.md +22 -0
  519. package/docs/EmptyState.md +6 -0
  520. package/docs/ErrorPage.md +7 -0
  521. package/docs/FileUpload.md +9 -0
  522. package/docs/FormGrid.md +7 -0
  523. package/docs/Format.md +27 -0
  524. package/docs/Graph.md +31 -0
  525. package/docs/Grid.md +18 -0
  526. package/docs/IconButton.md +12 -0
  527. package/docs/InlineCode.md +35 -0
  528. package/docs/KpiCard.md +11 -0
  529. package/docs/LayerGraph.md +32 -0
  530. package/docs/LineChart.md +10 -0
  531. package/docs/LoadingBar.md +7 -0
  532. package/docs/LoginCard.md +8 -0
  533. package/docs/Menu.md +20 -0
  534. package/docs/MobileTabBar.md +8 -0
  535. package/docs/MultiSelect.md +9 -0
  536. package/docs/NotificationBell.md +9 -0
  537. package/docs/Popover.md +9 -0
  538. package/docs/ProgressBar.md +7 -0
  539. package/docs/ProgressRing.md +7 -0
  540. package/docs/ProjectSwitcher.md +22 -0
  541. package/docs/RadioGroup.md +7 -0
  542. package/docs/SearchField.md +7 -0
  543. package/docs/Select.md +7 -0
  544. package/docs/SettingsLayout.md +8 -0
  545. package/docs/SideNav.md +11 -0
  546. package/docs/Skeleton.md +5 -0
  547. package/docs/Suggestion.md +15 -0
  548. package/docs/Switch.md +8 -0
  549. package/docs/Tabs.md +10 -0
  550. package/docs/Tag.md +11 -0
  551. package/docs/Term.md +30 -0
  552. package/docs/TextArea.md +7 -0
  553. package/docs/TextField.md +10 -0
  554. package/docs/ThemePicker.md +9 -0
  555. package/docs/Toast.md +7 -0
  556. package/docs/Tooltip.md +9 -0
  557. package/docs/TopBar.md +9 -0
  558. package/docs/Tour.md +24 -0
  559. package/docs/TreeList.md +93 -0
  560. package/docs/guidelines.md +269 -0
  561. package/docs/layout.md +35 -0
  562. package/docs/motion.md +63 -0
  563. package/package.json +59 -3
  564. package/README.md +0 -3
@@ -0,0 +1,131 @@
1
+ /* Generated from tokens.json by scripts/build.ts. Do not edit by hand. */
2
+ :root {
3
+ --bg: #fcfbfb;
4
+ --surface: #ffffff;
5
+ --surface-sub: #f6f5f4;
6
+ --surface-chrome: #ffffff;
7
+ --surface-input: #ffffff;
8
+ --ink: #171512;
9
+ --ink-muted: #6d645a;
10
+ --line: #e2dfdc;
11
+ --line-strong: #8c8073;
12
+ --graph-edge: #8c8073;
13
+ --graph-node: #f6f5f4;
14
+ --code-keyword: #2457d6;
15
+ --code-constant: #0b7a6b;
16
+ --accent: #2457d6;
17
+ --accent-hover: #204dbc;
18
+ --accent-press: #1c44a7;
19
+ --accent-text: #2457d6;
20
+ --accent-soft: #e5ebfa;
21
+ --on-accent: #ffffff;
22
+ --focus-ring: rgba(36, 87, 214, 0.3);
23
+ --success: #1ca655;
24
+ --success-text: #14743b;
25
+ --success-soft: #e8f6ee;
26
+ --warning: #d68710;
27
+ --warning-text: #965f0b;
28
+ --warning-soft: #fbf3e7;
29
+ --danger: #cd2823;
30
+ --danger-text: #901c19;
31
+ --danger-soft: #faeae9;
32
+ --info-text: #193d96;
33
+ --info-soft: #e9eefb;
34
+ --neutral-0: #fcfbfb;
35
+ --neutral-50: #f6f5f4;
36
+ --neutral-100: #eeecea;
37
+ --neutral-200: #e1dedb;
38
+ --neutral-300: #cfcac4;
39
+ --neutral-400: #aca49a;
40
+ --neutral-500: #8c8073;
41
+ --neutral-600: #6d645a;
42
+ --neutral-700: #514a43;
43
+ --neutral-800: #39332d;
44
+ --neutral-900: #25211d;
45
+ --neutral-950: #171512;
46
+ --chart-1: #2457d6;
47
+ --chart-2: #0f9d8a;
48
+ --chart-3: #cf6a12;
49
+ --space-1: 4px;
50
+ --space-2: 8px;
51
+ --space-3: 12px;
52
+ --space-4: 16px;
53
+ --space-5: 20px;
54
+ --space-6: 24px;
55
+ --space-8: 32px;
56
+ --space-12: 48px;
57
+ --radius-sm: 6px;
58
+ --radius-chip: 8px;
59
+ --radius-md: 10px;
60
+ --radius-lg: 14px;
61
+ --radius-full: 9999px;
62
+ --shadow-sm: 0 1px 2px rgba(16, 24, 40, 0.12);
63
+ --shadow-chip: 0 1px 2px rgba(16, 24, 40, 0.14), 0 2px 6px rgba(16, 24, 40, 0.08);
64
+ --shadow-card: 0 1px 2px rgba(16, 24, 40, 0.06), 0 8px 24px rgba(16, 24, 40, 0.1);
65
+ --shadow-card-hover: 0 2px 4px rgba(16, 24, 40, 0.08), 0 16px 36px rgba(16, 24, 40, 0.14);
66
+ --shadow-overlay: 0 20px 48px rgba(0, 0, 0, 0.25);
67
+ --control-height: 40px;
68
+ --chip-height: 32px;
69
+ --touch-target: 48px;
70
+ --header-height: 64px;
71
+ --sidebar-width: 240px;
72
+ --sidebar-collapsed: 72px;
73
+ --tabbar-height: 68px;
74
+ --icon-stroke: 2px;
75
+ --alert-bar: 3px;
76
+ --bp-tablet: 600px;
77
+ --bp-desktop: 960px;
78
+ --bp-wide: 1280px;
79
+ --font-sans: Inter, "Noto Sans TC", system-ui, sans-serif;
80
+ --font-mono: "Geist Mono", "Noto Sans TC", ui-monospace, monospace;
81
+ }
82
+ [data-theme="dark"] {
83
+ --bg: #2f2a25;
84
+ --surface: #393530;
85
+ --surface-sub: #443f3b;
86
+ --surface-chrome: #35302c;
87
+ --surface-input: #26221e;
88
+ --ink: #f6f5f4;
89
+ --ink-muted: #b3aba2;
90
+ --line: #4c4844;
91
+ --graph-edge: #b3aba2;
92
+ --graph-node: #443f3b;
93
+ --code-keyword: #a3b7ee;
94
+ --code-constant: #3cc4ae;
95
+ --accent-text: #819ee7;
96
+ --accent-soft: #2d344c;
97
+ --focus-ring: rgba(124, 154, 230, 0.45);
98
+ --success-text: #82cea2;
99
+ --success-soft: #2c3e2d;
100
+ --warning-text: #e8bd7c;
101
+ --warning-soft: #4a3922;
102
+ --danger-text: #e48986;
103
+ --danger-soft: #482a25;
104
+ --info-text: #87a3e8;
105
+ --info-soft: #2d3141;
106
+ --chart-1: #819ee7;
107
+ --chart-2: #3cc4ae;
108
+ --chart-3: #f0a35e;
109
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.5);
110
+ --shadow-chip: 0 1px 3px rgba(0, 0, 0, 0.6), 0 2px 6px rgba(0, 0, 0, 0.4);
111
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.6), 0 8px 24px rgba(0, 0, 0, 0.55);
112
+ --shadow-card-hover: 0 2px 4px rgba(0, 0, 0, 0.6), 0 16px 36px rgba(0, 0, 0, 0.6);
113
+ --shadow-overlay: 0 20px 48px rgba(0, 0, 0, 0.5);
114
+ }
115
+ [data-theme="teaching"] {
116
+ --accent: #0f766e;
117
+ --accent-hover: #0d6861;
118
+ --accent-press: #0c5c56;
119
+ --accent-text: #0f766e;
120
+ --accent-soft: #e2efee;
121
+ --focus-ring: rgba(15, 118, 110, 0.3);
122
+ --chart-1: #0f766e;
123
+ --radius-sm: 0px;
124
+ --radius-chip: 0px;
125
+ --radius-md: 0px;
126
+ --radius-lg: 0px;
127
+ --shadow-sm: none;
128
+ --shadow-chip: none;
129
+ --shadow-card: none;
130
+ --shadow-card-hover: none;
131
+ }
@@ -0,0 +1,7 @@
1
+ # AccentPicker
2
+
3
+ 強調色選擇:8 個推薦色票,下方可以輸入任何色碼。
4
+
5
+ - 色票:藍、靛、紫、桃紅、紅、橘、綠、青;選中的色票外圍一圈同色外框並打勾。
6
+ - 色碼欄位:輸入 # 加 6 碼就立即套用;格式不正確時框變紅並說明。
7
+ - 不傳 `onChange` 時會直接呼叫 `UI.setAccent()`,依 README「自訂強調色的換算」重新算出 hover、按下、淺底、文字色與 focus 光暈,並存在 localStorage。
@@ -0,0 +1,17 @@
1
+ # ActionBar
2
+
3
+ 卡片底部的一組操作按鈕。
4
+
5
+ - 寬度小於 600 px:最常用的一個(`primary: true`,沒有標示時用第一個)是全寬的主要按鈕,高度 44 px;其他收進右邊的「⋯」選單(外框,44 × 44 px)。
6
+ - 比較寬時:全部並排,主要按鈕在最前面,其他是次要按鈕,放不下就換行。
7
+ - 每個區塊最多一個主要按鈕。危險操作加 `danger: true` 和 `confirm`,在選單裡會放到最後,確認後才執行。
8
+
9
+ ```tsx
10
+ <ActionBar
11
+ actions={[
12
+ { label: '部署', primary: true, onClick: deploy },
13
+ { label: '查看紀錄', onClick: openLogs },
14
+ { label: '刪除', danger: true, confirm: { title: '刪除這個環境?' }, onClick: remove },
15
+ ]}
16
+ />
17
+ ```
package/docs/Alert.md ADDED
@@ -0,0 +1,8 @@
1
+ # Alert
2
+
3
+ 頁面或區塊內持續顯示的提示:白底卡片,上緣一條 3 px 狀態色條。
4
+
5
+ - 外型:`surface` 底色、`shadow-card` 陰影、`radius-md` 圓角;上緣色條高度 `alert-bar` 3 px,圖示與色條同色。
6
+ - 四種 `tone`:`info`(`accent`)、`success`、`warning`、`danger`。
7
+ - 關閉:只有 `info` 與 `success` 會顯示右上角的關閉按鈕(需傳入 `onDismiss`);`warning` 與 `danger` 不能關閉。
8
+ - 動作:用外框按鈕放在右側(`actionLabel`、`onAction`),按鈕文字只用動詞。
@@ -0,0 +1,30 @@
1
+ # AppShell
2
+
3
+ Dashboard 類頁面的外框:側邊欄、頂部列和內容區。頁面都從這裡開始,不要自己排側邊欄。
4
+
5
+ - 電腦(960 px 以上):側邊欄 240 px,左下角的按鈕可以收合成 72 px,選擇會記在瀏覽器。
6
+ - 平板(600 到 959 px):側邊欄固定收合成 72 px 圖示;有第二層的項目點了直接進第一個子頁面,頁面內用 Tabs 切換其他子頁面。
7
+ - 手機(小於 600 px):沒有側邊欄,最上層有圖示的項目變成底部分頁列,有子頁面的項目開啟第一個子頁面。分頁列到不了的頁面(沒有圖示、第 5 個以後、第二個以後的子頁面)放在最後一格「更多」,開啟完整的導覽。
8
+ - 頂部列:頁面標題(只出現一次,頁面裡不要再寫一次)或麵包屑,右邊放搜尋、NotificationBell、ProjectSwitcher。往下捲時隱藏,往上捲時出現。
9
+ - 內容區自己捲動,四周留 24 px(手機 16 px)。裡面用 `Page` 和 `Grid` 排版。
10
+
11
+ ```tsx
12
+ <AppShell
13
+ nav={[
14
+ {
15
+ items: [
16
+ { id: 'home', label: '總覽', icon: 'house' },
17
+ { id: 'projects', label: '專案', icon: 'folder' },
18
+ ],
19
+ },
20
+ ]}
21
+ value={page}
22
+ onNavigate={setPage}
23
+ brand="專案中心"
24
+ title="總覽"
25
+ onSearch={() => setSearchOpen(true)}
26
+ actions={<NotificationBell items={notifications} />}
27
+ >
28
+ <Page>…</Page>
29
+ </AppShell>
30
+ ```
package/docs/Badge.md ADDED
@@ -0,0 +1,17 @@
1
+ # Badge
2
+
3
+ 項目的狀態標籤:浮起 Chip,左側以進度圓圈表示狀態。
4
+
5
+ - 放在卡片上時用 `variant="dot"`:圓點加文字,沒有底色和陰影,文字用該狀態的文字色(`success-text`、`danger-text`、`warning-text`、`accent-text`、`ink-muted`),避免看起來像按鈕。DataTable 的手機卡片會自動使用。
6
+
7
+ - 外型:`surface` 底色、`shadow-chip` 陰影、`radius-chip` 8 px 圓角、高度 `chip-height` 32 px。
8
+ - 文字用主要文字色 `ink`,顏色只出現在進度圓圈上。
9
+ - 5 種狀態與進度圓圈:
10
+
11
+ | status | 文字 | 進度圓圈 | 顏色 |
12
+ | -------- | ------ | -------- | ------------- |
13
+ | `draft` | 草稿 | 空心 | `neutral-500` |
14
+ | `doing` | 進行中 | 半滿 | `accent` |
15
+ | `review` | 審核中 | 四分之一 | `warning` |
16
+ | `done` | 完成 | 全滿 | `success` |
17
+ | `fail` | 失敗 | 全滿 | `danger` |
@@ -0,0 +1,7 @@
1
+ # BarChart
2
+
3
+ 長條圖(單組資料)。
4
+
5
+ - 顏色 `chart-1`,柱子頂部 4 px 圓角,間距 8 px。
6
+ - 格線為淡色虛線;滑過時其他柱子變淡,上方出現浮起卡片顯示數值。
7
+ - 進場時一根接一根長高,間隔 40 ms。
@@ -0,0 +1,7 @@
1
+ # Breadcrumb
2
+
3
+ 目前頁面在層級中的位置。
4
+
5
+ - 一般字(Inter 與思源黑體),14 px,`ink-muted`。
6
+ - 分隔符號用箭頭「›」。
7
+ - 最後一層是目前頁面:`ink`、字重 600,帶 `aria-current="page"`。
package/docs/Button.md ADDED
@@ -0,0 +1,18 @@
1
+ # Button
2
+
3
+ 按鈕觸發一個動作。
4
+
5
+ - `primary`:實心 `accent`。每個區塊(例如一張卡片、一個表單)最多一個主要按鈕。
6
+ - `secondary`(預設):外框 `line-strong`。
7
+ - `danger`:實心 `danger`,用在刪除等無法復原的動作。一定要確認:給 `confirm={{ title, body }}`,按下時先跳出 Dialog,按 Dialog 裡的紅色按鈕才執行 `onClick`;放在確認框裡的那顆按鈕本身改給 `confirmed`。兩者都沒給時型別檢查不會過。
8
+ - 狀態:滑過變深(`accent-hover`)、按下下移 1 px(`accent-press`)、停用為 `surface-sub` 灰底加 `ink-muted` 灰字、`loading` 顯示轉圈並停用,文字改成進行式(「儲存中」)。
9
+ - 高度 `control-height` 40 px;觸控點擊範圍 `touch-target` 48 px(按鈕外觀不變,外圍擴大可點範圍)。
10
+ - 按鈕文字只用動詞,例如「儲存」、「刪除」。
11
+ - `icon`:Phosphor 圖示名稱(例如 `'plus'`,拼錯時型別檢查不會過),或自訂圖示的 24 px path(`'M4 12h16'`)。
12
+
13
+ ```tsx
14
+ <Button variant="primary" icon="plus" onClick={add}>新增</Button>
15
+ <Button variant="danger" confirm={{ title: '刪除 api-gateway?', body: '設定和紀錄會一起刪除,無法復原。' }} onClick={remove}>
16
+ 刪除
17
+ </Button>
18
+ ```
@@ -0,0 +1,15 @@
1
+ # Calendar
2
+
3
+ 固定顯示在頁面上的月曆,DatePicker 和 DateRangePicker 的下拉日曆也是它。要選日期時用 DatePicker 或 DateRangePicker;只有日曆要一直顯示在頁面上(例如排程頁的側欄)才直接用 Calendar。
4
+
5
+ - 一週的第一天依語系決定;選中的日期是強調色圓角方塊,今天下方有一個小圓點。
6
+ - 每一天的樣子由 `dayState` 決定:`selected`、`inRange`、`start`、`end`、`disabled`。
7
+ - 點日期呼叫 `onPick`;`focus` 是一開始顯示的月份。
8
+
9
+ ```tsx
10
+ const [day, setDay] = useState<Date | null>(null);
11
+
12
+ <Card>
13
+ <Calendar focus={day} onPick={setDay} dayState={(d) => ({ selected: d.toDateString() === day?.toDateString() })} />
14
+ </Card>;
15
+ ```
package/docs/Card.md ADDED
@@ -0,0 +1,14 @@
1
+ # Card
2
+
3
+ 頁面上的區塊容器:`surface` 底、`shadow-card` 陰影、14 px 圓角,內距 16 px。
4
+
5
+ - 卡片裡不再放卡片,避免一層層的陰影。TreeList、KpiCard、Alert、SettingsSection 本身就有卡片樣式:單獨使用時直接當成區塊,不要再包一層;放進 `UI.Card` 時會自動拿掉自己的陰影,TreeList 也拿掉底色。
6
+ - 自己寫的區塊不要另外加陰影,改用 `UI.Card`;需要分出一塊時用 `surface-sub` 底色或分隔線。
7
+ - `title` 和 `actions`:標題列,左邊標題,右邊按鈕。
8
+ - `padding: false`:沒有內距,給整張卡片放表格或樹狀清單時用。
9
+
10
+ ```js
11
+ h(UI.Card, { title: '流程', actions: h(UI.Button, { icon: 'magnifying-glass' }, '換起點函式') },
12
+ h(UI.Tabs, { … }),
13
+ h(UI.TreeList, { kind: 'plain', items, height: 640 })) // 沒有自己的陰影
14
+ ```
@@ -0,0 +1,8 @@
1
+ # Checkbox
2
+
3
+ 勾選框。
4
+
5
+ - 方框 22 px,小圓角(`radius-sm`),未勾選時 2 px `line-strong` 邊框。
6
+ - 勾選後強調色實心,白色勾號以描繪動畫(200 ms)畫出;`checked="mixed"` 顯示橫線。
7
+ - 整列(框加文字)都可以點,高度 40 px。
8
+ - 鍵盤 focus 時方框加 `focus-ring` 光暈。
@@ -0,0 +1,21 @@
1
+ # CodeView
2
+
3
+ 有行號的程式碼檢視,用在詳細卡片的原始碼、檢查筆記的引用。
4
+
5
+ - 行號:灰色等寬數字靠右,沒有底色和分隔線。可以選取複製程式碼,不會連行號一起複製。
6
+ - 目標行(`target`,一行或 `[from, to]`):淡強調色底,左側 3 px 強調色細條,行號變粗。有 `maxHeight` 時會自動捲到目標行。
7
+ - 太長的行自動換行,續行縮排 4 個字元寬,不用橫向捲動。
8
+ - 語法上色:關鍵字藍、常數與字串綠、註解灰色斜體,其他是文字顏色。語言看 `file` 的副檔名(c、h、cpp、js、ts、py、sh),或用 `language` 指定;`highlight={false}` 關掉。內建的上色只認這幾種語言;其他語言給 `tokenizer`,把每行切成 `[class, 文字]`(class 是 `is-keyword`、`is-constant`、`is-comment`、`is-string` 或空字串)。
9
+ - 手機上(寬度小於 600 px)只顯示目標行前後 2 行(`context`),下方「顯示全部 N 行」。
10
+ - 標題列:`file` 顯示路徑,給 `fileHref` 或 `onFile` 變成連結;右邊寫語言。沒有檔案時可以給 `title`。
11
+
12
+ ```js
13
+ h(UI.CodeView, {
14
+ file: 'src/libibtrace/hooks/ops.c',
15
+ fileHref: '#/file/ops.c',
16
+ code: source,
17
+ start: 70,
18
+ target: 74,
19
+ maxHeight: '420px',
20
+ });
21
+ ```
@@ -0,0 +1,30 @@
1
+ # CommandPalette
2
+
3
+ 一個搜尋找全部:頁面、設定、指令、檔案,以及專案自己的種類。任何頁面按 Ctrl K(Mac 是 ⌘K)都能打開。
4
+
5
+ - 入口:電腦上是 TopBar 的填色搜尋框,手機上(小於 600 px)TopBar 自動換成搜尋圖示。兩者都把 `onSearch` 接到打開面板。
6
+ - 樣子:畫面中間浮起的面板,電腦寬 640 px;手機上也置中浮起,左右各留 12 px,在頂部列下方,高度最多 55% 螢幕,留位置給鍵盤。
7
+ - 結果:所有種類混在一起,名稱開頭符合的排前面,再來是名稱中間符合,最後是說明或關鍵字符合;同分照資料原本的順序。最多顯示 50 筆。
8
+ - 每一筆:左邊是種類圖示,名稱(符合的字粗體),下面一行次要文字的說明。名稱是程式碼(函式、路徑、變數)時給 `code: true`,改用 Geist Mono;說明裡的程式碼用反引號包起來。
9
+ - 種類圖示:內建 `頁面` `file-text`、`設定` `gear`、`指令` `command`、`檔案` `file-code`;專案自己的種類用 `kinds` 指定(例如 `{ 函式: 'brackets-curly', 環境變數: 'terminal-window' }`),或每筆的 `icon`。`items` 的型別可以加自己的欄位,`onSelect` 收到的是同一個型別。
10
+ - 還沒輸入時顯示 `recent`(「最近開啟」);沒有就顯示提示。找不到時寫「找不到符合「x」的結果」。
11
+ - 鍵盤:↑ ↓ 選擇,Enter 打開,Esc 或「取消」關閉;面板底部寫這三個按鍵,觸控裝置不顯示。關閉後 focus 回到原本的位置。
12
+ - 資料要從伺服器搜尋時給 `filter: false`,在 `onQueryChange` 裡更新 `items`,等待時給 `loading`。
13
+
14
+ ```tsx
15
+ const [open, setOpen] = React.useState(false);
16
+
17
+ <TopBar title="專案" onSearch={() => setOpen(true)} />
18
+ <CommandPalette
19
+ open={open}
20
+ onOpenChange={setOpen}
21
+ placeholder="搜尋頁面、專案、設定"
22
+ kinds={{ 專案: 'folder' }}
23
+ items={[
24
+ { id: 'p1', kind: '專案', label: 'api-gateway', detail: '最後部署 `v2.4.1`' },
25
+ { id: 's1', kind: '設定', label: '通知', detail: '部署失敗時寄 Email' },
26
+ { id: 'g1', kind: '頁面', label: '成本報表' },
27
+ ]}
28
+ onSelect={(item) => go(item.id)}
29
+ />
30
+ ```
@@ -0,0 +1,10 @@
1
+ # DangerZone
2
+
3
+ 危險操作區塊:設定頁最下方的紅框區塊。
4
+
5
+ - 紅色 1 px 外框,標題用 `danger-text`。
6
+ - 左邊一句說明後果,右邊紅色實心按鈕;`confirm`(必填)是確認框的標題和說明,確認後才執行 `onAction`。
7
+
8
+ ```tsx
9
+ <DangerZone description="刪除後,所有專案和資料都無法復原。" actionLabel="刪除帳號" confirm={{ title: '刪除帳號?' }} onAction={deleteAccount} />
10
+ ```
@@ -0,0 +1,77 @@
1
+ # DataTable
2
+
3
+ 資料表格,有排序、勾選、篩選和分頁。
4
+
5
+ ## 外觀
6
+
7
+ - 表頭:灰底(`surface-sub`)粗體 14 px,往下捲動時固定在上方。
8
+ - 列高 48 px。
9
+ - 分隔:斑馬紋加格線。偶數列用 `surface-sub`,每列之間有橫線,欄之間有直線,外圍有框,全部用 `line`。
10
+ - 滑過列:整列變成強調淺底 `accent-soft`;勾選中的列也用 `accent-soft`。
11
+ - 數字欄 `numeric: true`:Geist Mono、等寬數字、靠右對齊。
12
+ - 單位寫在每格數字後面:欄位設定 `unit`,例如 `unit: 'GB'` 會顯示「3,480.3 GB」。表格裡的數字不縮寫。
13
+ - 欄位格式 `format`:`money`(NT$ 1,280,000)、`date`(2026/11/04(三))、`datetime`、`relative`(一週內寫「2 小時前」)、`percent`(一位小數,% 用 `unit: '%'` 加上,和 KpiCard 一樣)。
14
+ - 狀態欄使用 Badge。
15
+ - 欄位標題不換行;欄寬至少要放得下標題和排序箭頭(`width` 設最小寬度),放不下時表格橫向捲動,底色延伸到最右邊。
16
+
17
+ ## 排序
18
+
19
+ - 點欄位標題排序。第一下:文字欄從小到大,數字欄從大到小;第二下:反過來;第三下:還原成原本的順序。
20
+ - 排序箭頭滑過標題才顯示;正在排序的欄位一直顯示箭頭,標題變成 `accent-text`。
21
+ - 不能排序的欄位設 `sortable: false`;排序依據和顯示內容不同時用 `sortValue`。
22
+
23
+ ## 勾選與操作
24
+
25
+ - `selectable`:勾選框平常隱藏,滑過列(或用鍵盤移到列上)才出現;勾了任一筆後所有列都顯示。觸控裝置一直顯示。
26
+ - 勾選後,表頭換成批次操作列:全選框、「已選 n 筆」、`bulkActions` 的按鈕、取消選取 ×。
27
+ - 篩選、搜尋、檢視或摘要改變後看不到的列會自動取消勾選,刪除的列也一樣,所以 `bulkActions` 只處理畫面上留下的列(換頁不影響)。
28
+ - 單筆操作 `rowActions`:放 IconButton,滑過列時出現在最右邊(例如編輯、刪除)。刪除一樣要先跳確認對話框。
29
+
30
+ ## 搜尋與篩選
31
+
32
+ - 搜尋框搜所有欄位,符合的文字用黃底標出(`mark`)。只想搜部分欄位時用 `search.keys`;用 `render` 的欄位提供 `searchText`。
33
+ - 篩選:搜尋框旁邊的「篩選」按鈕,按鈕上顯示已套用的條件數。點開是彈出框,`filters` 裡的每個欄位一區:
34
+ - `type: 'list'`:勾選清單,每個選項後面寫套用後會剩幾筆;沒給 `options` 時從資料取出。
35
+ - `type: 'range'`:最低、最高兩個欄位;`scale` 是輸入單位(例如 10000 代表「萬」),`unitLabel` 寫在下方。
36
+ - 勾選就生效,不需要「套用」按鈕。彈出框右上角有「清除全部」。
37
+ - 搜尋框右邊顯示「10 / 24 筆」。
38
+ - 沒有結果時顯示一句話,再加「清除篩選」按鈕。
39
+ - 條件寫進網址(`?status=doing,review&q=…`),重新整理或分享連結時保留;同一頁有兩個表格時用 `urlKey` 分開;`urlSync={false}` 關掉。
40
+ - 換成另一份資料(例如切換專案)時,給新的 `resetKey`:搜尋、篩選、排序、頁碼、勾選和摘要都回到預設。只換內容、條件要保留時不用給。
41
+ - 分頁:頁碼,每頁 10 筆(`pageSize`),左下顯示「第 1–10 筆,共 24 筆」。
42
+
43
+ ## 看情況決定的功能
44
+
45
+ 這幾項沒有固定規定,依資料決定要不要開:
46
+
47
+ - 同一欄位能不能選多個:預設可以(`multiple: true`),選項互斥時(例如「本月/上個月」)設 `multiple: false`。
48
+ - 合計列 `totals`:有金額或數量需要加總時才開,例如 `{ budget: 'sum', progress: 'avg' }`;第一欄自動寫「合計 n 筆」。
49
+ - 固定第一欄 `stickyFirst`:欄位多、常需要橫向捲動時才開。
50
+ - 常用檢視 `views`:有幾組固定的看法(例如「我負責的」、「本週到期」)時才開,表格上方變成分頁,旁邊寫筆數。
51
+
52
+ ## 欄位顯示
53
+
54
+ - 工具列右邊的「欄位」按鈕可以隱藏或顯示欄位,第一欄不能隱藏。`columnMenu={false}` 關掉。
55
+
56
+ ## 動畫
57
+
58
+ - 排序:留在本頁的列由上往下依序滑到新位置,每列 320 ms,間隔 25 ms;底色跟著從舊位置的顏色轉成新位置的顏色。還原(第三下)用同樣的動畫。
59
+ - 排序後被換到其他頁的列往下滑出並淡出,從其他頁換進來的列從下方滑上來並淡入。
60
+ - 換頁:下一頁時整頁往上滑出、新的一頁從下方滑進來;上一頁相反。
61
+ - 減少動態效果時不播放這些動畫。
62
+
63
+ ## 結果摘要
64
+
65
+ - `summary={{ key, items: [{ value, label }] }}`:表格上方放一個分段控制(Tabs),「全部」加上每種狀態,各自附筆數,點了就只看那一種。用在檢查結果、審核清單這類有狀態的清單。
66
+ - 排序看情況:結果清單預設照資料原本的順序(例如筆記的行號),不自動把錯誤排到前面;需要處理的項目用摘要篩選出來。
67
+
68
+ ## 手機
69
+
70
+ - 寬度小於 600 px 時,所有列放在同一張卡片裡,列與列之間用分隔線。
71
+ - 每一列:第一行是標題列,左邊是標題欄位,右邊是狀態欄位,最右邊是操作按鈕(`rowActions`);其他欄位往下堆疊,欄位名稱在上(12 px 次要文字)、值在下,全部靠左,欄位之間 4 px。
72
+ - 欄位用 `mobile` 指定:`'title'`(標題列左邊,預設是第一欄)、`'status'`(標題列右邊)、`'hide'`(手機不顯示)。
73
+ - 長文字欄位設 `long: true`:卡片上最多 2 行,超過時下方出現「顯示全部」;桌機時一行,超過用「…」。
74
+ - 卡片裡的 Badge 自動改成「圓點加文字」:沒有底色和陰影,文字用該狀態的文字色。
75
+ - 勾選框在標題列最左邊,一直顯示;操作按鈕一直顯示,不用滑過。
76
+ - 工具列維持一行:搜尋框佔剩下的寬度,接著「篩選」和筆數;「欄位」按鈕在手機上不顯示。
77
+ - 筆數和頁碼文字只有數字用 Geist Mono,「筆」等文字用一般字體;有單位的數字欄也一樣(「1 層」)。
@@ -0,0 +1,7 @@
1
+ # DatePicker
2
+
3
+ 單一日期:可以直接輸入,也可以點右邊的日曆圖示選。
4
+
5
+ - 格式 YYYY/MM/DD,等寬字;打錯時框變紅並寫出正確格式。
6
+ - 日曆一週從週日開始;選中的日期是強調色圓角方塊,今天下方有一個小圓點。
7
+ - 日曆下方有「今天」和「清除」;點外面或按 Esc 關閉。
@@ -0,0 +1,7 @@
1
+ # DateRangePicker
2
+
3
+ 日期範圍:一個月曆加上左側的快捷範圍。
4
+
5
+ - 快捷:今天、最近 7 天、最近 30 天、本月、上個月。
6
+ - 在月曆上先點開始日、再點結束日;中間的日期用強調淺底連起來。
7
+ - 樣式和 DatePicker 相同:圓角方塊、今天下方圓點、週日開始。
@@ -0,0 +1,17 @@
1
+ # DetailList
2
+
3
+ 一個項目的詳細欄位,例如選取的函式、訂單、使用者。
4
+
5
+ - 寬度 600 px 以上:欄位名稱在左(13 px 次要文字,不換行)、值在右。
6
+ - 比較窄時:名稱在上、值在下,全部靠左,和手機表格卡片一致。依照元件本身的寬度切換。
7
+ - 值可以放任何元素:`UI.InlineCode` 連結、`UI.Tag`、`UI.Badge`。
8
+
9
+ ```js
10
+ h(UI.DetailList, {
11
+ items: [
12
+ { label: '定義', value: h(UI.InlineCode, { href: '/code/ops.c#L55' }, 'src/libibtrace/hooks/ops.c:55') },
13
+ { label: '元件', value: 'src/libibtrace' },
14
+ { label: '關係', value: '1 個 caller · 呼叫 4 個函式' },
15
+ ],
16
+ });
17
+ ```
package/docs/Dialog.md ADDED
@@ -0,0 +1,15 @@
1
+ # Dialog
2
+
3
+ 需要使用者決定時跳出的視窗,置中顯示。
4
+
5
+ - 寬 400 px,背景 20% 黑色加模糊。
6
+ - 給 `open` 和 `onClose`:焦點鎖在框內,Esc、點背景、右上角 × 都會關閉,關閉後焦點回到原本的按鈕。一定要給 `open`,不要用 `{show && <Dialog …>}` 控制顯示。只要畫出框本身(文件和預覽用)時給 `modal={false}`。
7
+ - 標題寫要決定的事,可以是問句:「刪除 api-gateway?」。內容最多兩句:會發生什麼、能不能復原。
8
+ - 按鈕:給 `confirmLabel` 和 `onConfirm`,會自動排好「取消」(次要,左)和確認按鈕(右);`tone="danger"` 時確認按鈕是紅色。要自己排按鈕時給 `actions`。
9
+ - 刪除這類動作通常不用自己開 Dialog:Button、Menu、DangerZone 給 `confirm` 就會跳出這個框。
10
+
11
+ ```tsx
12
+ <Dialog open={open} onClose={() => setOpen(false)} title="發布 v2.4.1?" confirmLabel="發布" onConfirm={publish} confirmLoading={publishing}>
13
+ 發布後使用者會立刻看到新版本。
14
+ </Dialog>
15
+ ```
package/docs/Drawer.md ADDED
@@ -0,0 +1,22 @@
1
+ # Drawer
2
+
3
+ 側邊抽屜:從右邊滑出的編輯面板,用來編輯一筆資料而不離開列表。
4
+
5
+ - 寬 400 px(和對話框同寬),滿版高度,底色 `surface`。
6
+ - 背景:模糊遮罩,和對話框一致;點遮罩、按 Esc 或右上角 × 關閉。
7
+ - 滑入:彈性滑入,450 ms,滑過頭一點再彈回;關閉時 300 ms 滑出。減少動態效果時只淡入淡出。
8
+ - 按鈕固定在底部:次要(取消)在左、主要(儲存)在右;內容太長時只有中間捲動。
9
+ - 有未儲存的修改(`dirty`)時關閉,先跳「放棄未儲存的變更?」,按鈕是「繼續編輯」和紅色「放棄」。
10
+ - 底部的「取消」也要先確認:`actions` 寫成函式,拿到的 `requestClose` 和 × 走同一個確認。
11
+
12
+ ```tsx
13
+ <Drawer open={open} dirty={dirty} onClose={close} title="編輯專案"
14
+ actions={(requestClose) => (
15
+ <>
16
+ <Button onClick={requestClose}>取消</Button>
17
+ <Button variant="primary" onClick={save}>儲存</Button>
18
+ </>
19
+ )}>
20
+ ```
21
+
22
+ - 打開時焦點移到第一個欄位,關閉後回到打開它的按鈕。
@@ -0,0 +1,6 @@
1
+ # EmptyState
2
+
3
+ 沒有資料時的畫面,用引導步驟告訴使用者怎麼開始。
4
+
5
+ - 步驟下方放一個次要按鈕(Button `secondary`)。
6
+ - 搜尋沒有結果時只顯示一句話:只傳 `title`,不傳 `description` 與 `steps`。
@@ -0,0 +1,7 @@
1
+ # ErrorPage
2
+
3
+ 錯誤頁:404、500、403。
4
+
5
+ - 大號錯誤碼:等寬字 96 px,用強調文字色;下面是標題和一句說明。
6
+ - 按鈕:「回上一頁」(次要)和「回首頁」(主要)。
7
+ - 預設文字:404 找不到這個頁面;500 伺服器暫時無法回應;403 沒有權限查看這個頁面。可以用 `title`、`description` 改。
@@ -0,0 +1,9 @@
1
+ # FileUpload
2
+
3
+ 檔案上傳:一行拖放區,下方列出檔案與進度。
4
+
5
+ - 拖放區是一行虛線框:「拖放檔案,或 選擇檔案」,限制(類型、大小)寫在拖放區右邊(`limitText`)。
6
+ - 拖到上方時框變強調色、底色變淺。
7
+ - 每個檔案:名稱、大小、8 px 進度條(百分比在下方),完成時變綠並顯示「完成 ✓」。
8
+ - 失敗:檔案外框變紅,下方紅字寫原因加修正方式,旁邊有「重試」。
9
+ - 上傳本身由你實作:用 `onAdd` 收到檔案,更新 `files` 裡的 `progress`、`status`(`uploading`、`done`、`error`)。
@@ -0,0 +1,7 @@
1
+ # FormGrid
2
+
3
+ 表單欄位排列。
4
+
5
+ - 寬度 960 px(`bp-desktop`)以上雙欄,以下單欄。
6
+ - 需要整行的欄位(例如多行輸入)加 `className="is-full"` 跨滿兩欄。
7
+ - 標籤一律在欄位上方。
package/docs/Format.md ADDED
@@ -0,0 +1,27 @@
1
+ # Format
2
+
3
+ 日期、時間、數字、金額的格式,以及介面文字的語系。所有元件都透過 `UI.format` 和 `UI.t` 輸出,不要自己拼字串。
4
+
5
+ ## 規則(zh-TW)
6
+
7
+ - 日期:`2026/11/04(三)`,年份一律顯示,加星期。`UI.format.date(d)`;不要星期時傳 `{ weekday: false }`。
8
+ - 時間:24 小時制 `15:57`。`UI.format.time(d)`、`UI.format.dateTime(d)`。
9
+ - 相對時間:一週內用「2 小時前」、「昨天」、「3 天前」;超過一週寫完整日期時間。`UI.format.relative(d)`。
10
+ - 大數字:只有 KPI 卡片縮寫,單位用萬、億(`1,284 萬`);表格和明細寫完整數字。`UI.format.compact(v)`。
11
+ - 金額:`NT$ 1,280`,負數用減號 `-NT$ 1,280`。`UI.format.money(v)`。
12
+ - 小數位數依單位:金額 0 位、百分比 1 位、容量(GB、MB)1 位、數量 0 位。`UI.format.number(v, 'money' | 'percent' | 'size' | 'count')`。
13
+ - 日期輸入框一律用 `YYYY/MM/DD`,不分語系,避免月日順序看錯。
14
+
15
+ ## 國際化(i18n)
16
+
17
+ - 介面文字以繁體中文為原文,經過 `UI.t()` 輸出;其他語言用 `UI.addMessages(locale, { 原文: 譯文 })` 提供。已內建英文(`en`)。
18
+ - 有變數的句子用整句加佔位符,不要把句子拆開拼:`UI.t('已選 {n} 筆', { n: 3 })`,英文是 `{n} selected`。不同語言的字序不同。
19
+ - 切換語系:`UI.setLocale('en-US', { currency: 'USD' })`,會設定 `<html lang>`;之後重新渲染畫面。
20
+ - 寫新元件時:按鈕、提示、`aria-label` 的文字都要經過 `UI.t()`。
21
+
22
+ ## 在地化(L10n)
23
+
24
+ - 上面的格式規則是 zh-TW 的選擇。其他語系使用該語系自己的習慣(透過瀏覽器的 `Intl`):英文是 `Wed, 11/04/2026`、`3:57 PM`、`12.8M`、`$486,000`;德文用 `04.11.2026`、`3.480,3`。
25
+ - 一週的第一天:zh-TW 是週日;其他語系依瀏覽器提供的地區資訊(例如德文從週一開始)。
26
+ - 幣別跟著資料走,不跟著語系:同一筆台幣金額,在英文介面顯示 `NT$486,000`。
27
+ - 文字長度:英文、德文通常比中文長 1.5 到 2 倍,按鈕和欄位標題要留空間;標題不換行的規則不變,放不下就讓表格橫向捲動。
package/docs/Graph.md ADDED
@@ -0,0 +1,31 @@
1
+ # Graph
2
+
3
+ 方框與箭頭的圖的樣式:自己畫 SVG,套用這些 class,再加 `UI.GraphDefs` 和 `UI.GraphLegend`。
4
+
5
+ 元件架構圖請直接用 `UI.LayerGraph`,它會自己排版和畫線。這裡的 class 給其他種類的圖用。
6
+
7
+ - 外層加 `ui-graph`,`<svg>` 裡第一個放 `h(UI.GraphDefs)`,提供箭頭 `url(#ui-arrow)` 和強調色的 `url(#ui-arrow-accent)`。
8
+ - 線:`<path class="ui-graph-edge">`,1.5 px、`graph-edge` 灰色,直角轉彎(`M x y V … H … V …`)。推測的關係加 `is-inferred`,變成虛線。
9
+ - 方框:`<rect class="ui-graph-node" rx="10">`,名稱用 `<text class="ui-graph-name">`(Geist Mono 13 px)。外部的項目加 `is-external`(虛線外框、不填色),選取的加 `is-selected`。
10
+ - 線上的標籤:`<text class="ui-graph-label">`(12 px 粗體,一般字體)。程式名稱、路徑和數字包在 `<tspan class="ui-graph-code">` 裡,用 Geist Mono,例如「`<tspan class="ui-graph-code">8</tspan> 次呼叫`」。外圍描一圈卡片底色,線從字後面穿過仍看得清楚。放在線的旁邊或轉角附近,不要蓋住箭頭。
11
+ - 選取時:沒有關係的方框和線包在 `<g class="is-dim">` 裡(淡到 40%),相關的線加 `is-related`(強調色,箭頭改用 `#ui-arrow-accent`),標籤也加 `is-related`。
12
+ - 圖例:`<GraphLegend />` 放在圖的下方,預設三項:確定的關係、推測的關係、外部項目。用 `items` 換成專案自己的說法(例如「呼叫」「推測的呼叫」「外部函式」),給 `text` 會變成可以點開說明的 Term。
13
+ - 圖放在卡片(`surface`)上。直接放在頁面底色上時,外層加 `style: { '--ui-graph-bg': 'var(--bg)' }`,標籤的描邊才會和底色一致。
14
+ - 深色模式的線和外框自動變亮。顏色只用 token:`graph-edge`、`graph-node`、`accent`、`accent-soft`。
15
+
16
+ ```js
17
+ h(
18
+ 'div',
19
+ { className: 'ui-graph' },
20
+ h(
21
+ 'svg',
22
+ { viewBox: '0 0 640 300', width: 640, height: 300 },
23
+ h(UI.GraphDefs),
24
+ h('path', { d: 'M320 56 V80 H320 V118', className: 'ui-graph-edge is-inferred is-related', markerEnd: 'url(#ui-arrow-accent)' }),
25
+ h('text', { x: 320, y: 100, textAnchor: 'middle', className: 'ui-graph-label is-related' }, 'LD_PRELOAD'),
26
+ h('rect', { x: 230, y: 120, width: 180, height: 40, rx: 10, className: 'ui-graph-node is-selected' }),
27
+ h('text', { x: 320, y: 140, textAnchor: 'middle', dominantBaseline: 'central', className: 'ui-graph-name' }, 'trace_post_send'),
28
+ ),
29
+ h(UI.GraphLegend),
30
+ );
31
+ ```
package/docs/Grid.md ADDED
@@ -0,0 +1,18 @@
1
+ # Grid
2
+
3
+ 頁面內容的排版:`Page` 把區塊上下排開,`Grid` 把卡片排成等寬的欄。不要自己寫 CSS grid。
4
+
5
+ - `Page`:區塊之間 32 px(`space-8`)。
6
+ - `Grid`:卡片之間 24 px(`space-6`),手機 16 px。`columns` 是 1280 px 以上的欄數(1、2、3、4、6);1280 px 以下 4 欄變 2 欄、6 欄變 3 欄;960 px 以下最多 2 欄;手機一欄。
7
+
8
+ ```tsx
9
+ <Page>
10
+ <Grid columns={4}>
11
+ <KpiCard label="本月營收" value={12840000} format="money" />
12
+ <KpiCard label="進行中專案" value={18} unit="個" />
13
+ </Grid>
14
+ <Card title="專案" padding={false}>
15
+ <DataTable columns={columns} rows={rows} />
16
+ </Card>
17
+ </Page>
18
+ ```