@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 @@
1
+ {"version":3,"file":"index.js","names":["Base","Base","Base","Base","builtIn","Dialog","Popover","Dialog","Popover","Base","Menu","BaseSelect","Popover"],"sources":["../src/icons/data.ts","../src/internal/util.tsx","../src/icons/Icon.tsx","../src/motion.ts","../src/components/SideNav/SideNav.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/IconButton/IconButton.tsx","../src/components/TopBar/TopBar.tsx","../src/components/MobileTabBar/MobileTabBar.tsx","../src/internal/dev.ts","../src/components/Button/Button.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Drawer/Drawer.tsx","../src/components/AppShell/AppShell.tsx","../src/components/Grid/Grid.tsx","../src/theme.ts","../src/components/AccentPicker/AccentPicker.tsx","../src/components/Menu/Menu.tsx","../src/components/ActionBar/ActionBar.tsx","../src/components/Alert/Alert.tsx","../src/components/Badge/Badge.tsx","../src/internal/chart.tsx","../src/components/BarChart/BarChart.tsx","../src/components/Calendar/Calendar.tsx","../src/components/Card/Card.tsx","../src/internal/Field.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/InlineCode/InlineCode.tsx","../src/components/CodeView/tokens.ts","../src/components/CodeView/CodeView.tsx","../src/components/CommandPalette/CommandPalette.tsx","../src/components/DangerZone/DangerZone.tsx","../src/components/SearchField/SearchField.tsx","../src/components/Tabs/Tabs.tsx","../src/components/DataTable/filters.ts","../src/internal/FloatingPanel.tsx","../src/components/DataTable/parts.tsx","../src/components/DataTable/DataTable.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/DateRangePicker/DateRangePicker.tsx","../src/components/DetailList/DetailList.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/ErrorPage/ErrorPage.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/FormGrid/FormGrid.tsx","../src/components/Term/Term.tsx","../src/components/Graph/Graph.tsx","../src/components/KpiCard/KpiCard.tsx","../src/components/LayerGraph/LayerGraph.tsx","../src/components/LineChart/LineChart.tsx","../src/components/LoadingBar/LoadingBar.tsx","../src/components/TextField/TextField.tsx","../src/components/LoginCard/LoginCard.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/NotificationBell/NotificationBell.tsx","../src/components/Popover/Popover.tsx","../src/components/ProgressRing/ProgressRing.tsx","../src/components/ProjectSwitcher/ProjectSwitcher.tsx","../src/components/RadioGroup/RadioGroup.tsx","../src/components/Select/Select.tsx","../src/components/Toast/Toast.tsx","../src/components/SettingsLayout/SettingsLayout.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Suggestion/Suggestion.tsx","../src/components/Switch/Switch.tsx","../src/components/Tag/Tag.tsx","../src/components/TextArea/TextArea.tsx","../src/components/ThemePicker/ThemePicker.tsx","../src/components/Tour/Tour.tsx","../src/components/TreeList/helpers.ts","../src/components/TreeList/TreeList.tsx"],"sourcesContent":["/* Icons: Phosphor (MIT license), regular and fill weights as SVG markup on a 256 x 256 viewBox.\n Generated once from @phosphor-icons/core; add an icon by adding its regular and fill markup under the same name. */\n\nexport const PH = {\n archive:\n '<path d=\"M224,48H32A16,16,0,0,0,16,64V88a16,16,0,0,0,16,16v88a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V104a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48ZM208,192H48V104H208ZM224,88H32V64H224V88ZM96,136a8,8,0,0,1,8-8h48a8,8,0,0,1,0,16H104A8,8,0,0,1,96,136Z\"/>',\n 'arrow-down':\n '<path d=\"M205.66,149.66l-72,72a8,8,0,0,1-11.32,0l-72-72a8,8,0,0,1,11.32-11.32L120,196.69V40a8,8,0,0,1,16,0V196.69l58.34-58.35a8,8,0,0,1,11.32,11.32Z\"/>',\n 'arrow-left':\n '<path d=\"M224,128a8,8,0,0,1-8,8H59.31l58.35,58.34a8,8,0,0,1-11.32,11.32l-72-72a8,8,0,0,1,0-11.32l72-72a8,8,0,0,1,11.32,11.32L59.31,120H216A8,8,0,0,1,224,128Z\"/>',\n 'arrow-right':\n '<path d=\"M221.66,133.66l-72,72a8,8,0,0,1-11.32-11.32L196.69,136H40a8,8,0,0,1,0-16H196.69L138.34,61.66a8,8,0,0,1,11.32-11.32l72,72A8,8,0,0,1,221.66,133.66Z\"/>',\n 'arrow-square-out':\n '<path d=\"M224,104a8,8,0,0,1-16,0V59.32l-66.33,66.34a8,8,0,0,1-11.32-11.32L196.68,48H152a8,8,0,0,1,0-16h64a8,8,0,0,1,8,8Zm-40,24a8,8,0,0,0-8,8v72H48V80h72a8,8,0,0,0,0-16H48A16,16,0,0,0,32,80V208a16,16,0,0,0,16,16H176a16,16,0,0,0,16-16V136A8,8,0,0,0,184,128Z\"/>',\n 'arrow-u-up-left':\n '<path d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H51.31l34.35,34.34a8,8,0,0,1-11.32,11.32l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,85.66,45.66L51.31,80H168A64.07,64.07,0,0,1,232,144Z\"/>',\n 'arrow-u-up-right':\n '<path d=\"M170.34,130.34,204.69,96H88a48,48,0,0,0,0,96h88a8,8,0,0,1,0,16H88A64,64,0,0,1,88,80H204.69L170.34,45.66a8,8,0,0,1,11.32-11.32l48,48a8,8,0,0,1,0,11.32l-48,48a8,8,0,0,1-11.32-11.32Z\"/>',\n 'arrow-up':\n '<path d=\"M205.66,117.66a8,8,0,0,1-11.32,0L136,59.31V216a8,8,0,0,1-16,0V59.31L61.66,117.66a8,8,0,0,1-11.32-11.32l72-72a8,8,0,0,1,11.32,0l72,72A8,8,0,0,1,205.66,117.66Z\"/>',\n 'arrows-clockwise':\n '<path d=\"M224,48V96a8,8,0,0,1-8,8H168a8,8,0,0,1,0-16h28.69L182.06,73.37a79.56,79.56,0,0,0-56.13-23.43h-.45A79.52,79.52,0,0,0,69.59,72.71,8,8,0,0,1,58.41,61.27a96,96,0,0,1,135,.79L208,76.69V48a8,8,0,0,1,16,0ZM186.41,183.29a80,80,0,0,1-112.47-.66L59.31,168H88a8,8,0,0,0,0-16H40a8,8,0,0,0-8,8v48a8,8,0,0,0,16,0V179.31l14.63,14.63A95.43,95.43,0,0,0,130,222.06h.53a95.36,95.36,0,0,0,67.07-27.33,8,8,0,0,0-11.18-11.44Z\"/>',\n bell: '<path d=\"M221.8,175.94C216.25,166.38,208,139.33,208,104a80,80,0,1,0-160,0c0,35.34-8.26,62.38-13.81,71.94A16,16,0,0,0,48,200H88.81a40,40,0,0,0,78.38,0H208a16,16,0,0,0,13.8-24.06ZM128,216a24,24,0,0,1-22.62-16h45.24A24,24,0,0,1,128,216ZM48,184c7.7-13.24,16-43.92,16-80a64,64,0,1,1,128,0c0,36.05,8.28,66.73,16,80Z\"/>',\n 'calendar-blank':\n '<path d=\"M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM72,48v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24V80H48V48ZM208,208H48V96H208V208Z\"/>',\n 'caret-down': '<path d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"/>',\n 'caret-left': '<path d=\"M165.66,202.34a8,8,0,0,1-11.32,11.32l-80-80a8,8,0,0,1,0-11.32l80-80a8,8,0,0,1,11.32,11.32L91.31,128Z\"/>',\n 'caret-right': '<path d=\"M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z\"/>',\n 'caret-up':\n '<path d=\"M213.66,165.66a8,8,0,0,1-11.32,0L128,91.31,53.66,165.66a8,8,0,0,1-11.32-11.32l80-80a8,8,0,0,1,11.32,0l80,80A8,8,0,0,1,213.66,165.66Z\"/>',\n 'chart-bar':\n '<path d=\"M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z\"/>',\n 'chart-line':\n '<path d=\"M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1-8-8V48a8,8,0,0,1,16,0v94.37L90.73,98a8,8,0,0,1,10.07-.38l58.81,44.11L218.73,90a8,8,0,1,1,10.54,12l-64,56a8,8,0,0,1-10.07.38L96.39,114.29,40,163.63V200H224A8,8,0,0,1,232,208Z\"/>',\n 'chart-pie':\n '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm71.87,53.27L136,114.14V40.37A88,88,0,0,1,199.87,77.27ZM120,40.37v83l-71.89,41.5A88,88,0,0,1,120,40.37ZM128,216a88,88,0,0,1-71.87-37.27L207.89,91.12A88,88,0,0,1,128,216Z\"/>',\n 'chat-centered':\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V184a16,16,0,0,0,16,16h60.43l13.68,23.94a16,16,0,0,0,27.78,0L155.57,200H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,144H150.93a8,8,0,0,0-7,4l-16,28-16-28a8,8,0,0,0-7-4H40V56H216Z\"/>',\n check: '<path d=\"M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z\"/>',\n 'check-circle':\n '<path d=\"M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z\"/>',\n 'circle-notch':\n '<path d=\"M232,128a104,104,0,0,1-208,0c0-41,23.81-78.36,60.66-95.27a8,8,0,0,1,6.68,14.54C60.15,61.59,40,93.27,40,128a88,88,0,0,0,176,0c0-34.73-20.15-66.41-51.34-80.73a8,8,0,0,1,6.68-14.54C208.19,49.64,232,87,232,128Z\"/>',\n clock:\n '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm64-88a8,8,0,0,1-8,8H128a8,8,0,0,1-8-8V72a8,8,0,0,1,16,0v48h48A8,8,0,0,1,192,128Z\"/>',\n cloud:\n '<path d=\"M160,40A88.09,88.09,0,0,0,81.29,88.67,64,64,0,1,0,72,216h88a88,88,0,0,0,0-176Zm0,160H72a48,48,0,0,1,0-96c1.1,0,2.2,0,3.29.11A88,88,0,0,0,72,128a8,8,0,0,0,16,0,72,72,0,1,1,72,72Z\"/>',\n copy: '<path d=\"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z\"/>',\n cpu: '<path d=\"M152,96H104a8,8,0,0,0-8,8v48a8,8,0,0,0,8,8h48a8,8,0,0,0,8-8V104A8,8,0,0,0,152,96Zm-8,48H112V112h32Zm88,0H216V112h16a8,8,0,0,0,0-16H216V56a16,16,0,0,0-16-16H160V24a8,8,0,0,0-16,0V40H112V24a8,8,0,0,0-16,0V40H56A16,16,0,0,0,40,56V96H24a8,8,0,0,0,0,16H40v32H24a8,8,0,0,0,0,16H40v40a16,16,0,0,0,16,16H96v16a8,8,0,0,0,16,0V216h32v16a8,8,0,0,0,16,0V216h40a16,16,0,0,0,16-16V160h16a8,8,0,0,0,0-16Zm-32,56H56V56H200v95.87s0,.09,0,.13,0,.09,0,.13V200Z\"/>',\n database:\n '<path d=\"M128,24C74.17,24,32,48.6,32,80v96c0,31.4,42.17,56,96,56s96-24.6,96-56V80C224,48.6,181.83,24,128,24Zm80,104c0,9.62-7.88,19.43-21.61,26.92C170.93,163.35,150.19,168,128,168s-42.93-4.65-58.39-13.08C55.88,147.43,48,137.62,48,128V111.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64ZM69.61,53.08C85.07,44.65,105.81,40,128,40s42.93,4.65,58.39,13.08C200.12,60.57,208,70.38,208,80s-7.88,19.43-21.61,26.92C170.93,115.35,150.19,120,128,120s-42.93-4.65-58.39-13.08C55.88,99.43,48,89.62,48,80S55.88,60.57,69.61,53.08ZM186.39,202.92C170.93,211.35,150.19,216,128,216s-42.93-4.65-58.39-13.08C55.88,195.43,48,185.62,48,176V159.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64V176C208,185.62,200.12,195.43,186.39,202.92Z\"/>',\n 'dots-three':\n '<path d=\"M140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128Zm56-12a12,12,0,1,0,12,12A12,12,0,0,0,196,116ZM60,116a12,12,0,1,0,12,12A12,12,0,0,0,60,116Z\"/>',\n 'dots-three-vertical':\n '<path d=\"M140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128ZM128,72a12,12,0,1,0-12-12A12,12,0,0,0,128,72Zm0,112a12,12,0,1,0,12,12A12,12,0,0,0,128,184Z\"/>',\n 'download-simple':\n '<path d=\"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z\"/>',\n 'envelope-simple':\n '<path d=\"M224,48H32a8,8,0,0,0-8,8V192a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A8,8,0,0,0,224,48ZM203.43,64,128,133.15,52.57,64ZM216,192H40V74.19l82.59,75.71a8,8,0,0,0,10.82,0L216,74.19V192Z\"/>',\n eye: '<path d=\"M247.31,124.76c-.35-.79-8.82-19.58-27.65-38.41C194.57,61.26,162.88,48,128,48S61.43,61.26,36.34,86.35C17.51,105.18,9,124,8.69,124.76a8,8,0,0,0,0,6.5c.35.79,8.82,19.57,27.65,38.4C61.43,194.74,93.12,208,128,208s66.57-13.26,91.66-38.34c18.83-18.83,27.3-37.61,27.65-38.4A8,8,0,0,0,247.31,124.76ZM128,192c-30.78,0-57.67-11.19-79.93-33.25A133.47,133.47,0,0,1,25,128,133.33,133.33,0,0,1,48.07,97.25C70.33,75.19,97.22,64,128,64s57.67,11.19,79.93,33.25A133.46,133.46,0,0,1,231.05,128C223.84,141.46,192.43,192,128,192Zm0-112a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Z\"/>',\n 'eye-slash':\n '<path d=\"M53.92,34.62A8,8,0,1,0,42.08,45.38L61.32,66.55C25,88.84,9.38,123.2,8.69,124.76a8,8,0,0,0,0,6.5c.35.79,8.82,19.57,27.65,38.4C61.43,194.74,93.12,208,128,208a127.11,127.11,0,0,0,52.07-10.83l22,24.21a8,8,0,1,0,11.84-10.76Zm47.33,75.84,41.67,45.85a32,32,0,0,1-41.67-45.85ZM128,192c-30.78,0-57.67-11.19-79.93-33.25A133.16,133.16,0,0,1,25,128c4.69-8.79,19.66-33.39,47.35-49.38l18,19.75a48,48,0,0,0,63.66,70l14.73,16.2A112,112,0,0,1,128,192Zm6-95.43a8,8,0,0,1,3-15.72,48.16,48.16,0,0,1,38.77,42.64,8,8,0,0,1-7.22,8.71,6.39,6.39,0,0,1-.75,0,8,8,0,0,1-8-7.26A32.09,32.09,0,0,0,134,96.57Zm113.28,34.69c-.42.94-10.55,23.37-33.36,43.8a8,8,0,1,1-10.67-11.92A132.77,132.77,0,0,0,231.05,128a133.15,133.15,0,0,0-23.12-30.77C185.67,75.19,158.78,64,128,64a118.37,118.37,0,0,0-19.36,1.57A8,8,0,1,1,106,49.79,134,134,0,0,1,128,48c34.88,0,66.57,13.26,91.66,38.35,18.83,18.83,27.3,37.62,27.65,38.41A8,8,0,0,1,247.31,131.26Z\"/>',\n file: '<path d=\"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Z\"/>',\n 'file-text':\n '<path d=\"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Zm-32-80a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,136Zm0,32a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,168Z\"/>',\n 'floppy-disk':\n '<path d=\"M219.31,72,184,36.69A15.86,15.86,0,0,0,172.69,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V83.31A15.86,15.86,0,0,0,219.31,72ZM168,208H88V152h80Zm40,0H184V152a16,16,0,0,0-16-16H88a16,16,0,0,0-16,16v56H48V48H172.69L208,83.31ZM160,72a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h56A8,8,0,0,1,160,72Z\"/>',\n folder:\n '<path d=\"M216,72H131.31L104,44.69A15.86,15.86,0,0,0,92.69,40H40A16,16,0,0,0,24,56V200.62A15.4,15.4,0,0,0,39.38,216H216.89A15.13,15.13,0,0,0,232,200.89V88A16,16,0,0,0,216,72ZM40,56H92.69l16,16H40ZM216,200H40V88H216Z\"/>',\n 'folder-open':\n '<path d=\"M245,110.64A16,16,0,0,0,232,104H216V88a16,16,0,0,0-16-16H130.67L102.94,51.2a16.14,16.14,0,0,0-9.6-3.2H40A16,16,0,0,0,24,64V208h0a8,8,0,0,0,8,8H211.1a8,8,0,0,0,7.59-5.47l28.49-85.47A16.05,16.05,0,0,0,245,110.64ZM93.34,64,123.2,86.4A8,8,0,0,0,128,88h72v16H69.77a16,16,0,0,0-15.18,10.94L40,158.7V64Zm112,136H43.1l26.67-80H232Z\"/>',\n funnel:\n '<path d=\"M230.6,49.53A15.81,15.81,0,0,0,216,40H40A16,16,0,0,0,28.19,66.76l.08.09L96,139.17V216a16,16,0,0,0,24.87,13.32l32-21.34A16,16,0,0,0,160,194.66V139.17l67.74-72.32.08-.09A15.8,15.8,0,0,0,230.6,49.53ZM40,56h0Zm106.18,74.58A8,8,0,0,0,144,136v58.66L112,216V136a8,8,0,0,0-2.16-5.47L40,56H216Z\"/>',\n gauge:\n '<path d=\"M207.06,72.67A111.24,111.24,0,0,0,128,40h-.4C66.07,40.21,16,91,16,153.13V176a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V152A111.25,111.25,0,0,0,207.06,72.67ZM224,176H119.71l54.76-75.3a8,8,0,0,0-12.94-9.42L99.92,176H32V153.13c0-3.08.15-6.12.43-9.13H56a8,8,0,0,0,0-16H35.27c10.32-38.86,44-68.24,84.73-71.66V80a8,8,0,0,0,16,0V56.33A96.14,96.14,0,0,1,221,128H200a8,8,0,0,0,0,16h23.67c.21,2.65.33,5.31.33,8Z\"/>',\n gear: '<path d=\"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z\"/>',\n globe:\n '<path d=\"M128,24h0A104,104,0,1,0,232,128,104.12,104.12,0,0,0,128,24Zm88,104a87.61,87.61,0,0,1-3.33,24H174.16a157.44,157.44,0,0,0,0-48h38.51A87.61,87.61,0,0,1,216,128ZM102,168H154a115.11,115.11,0,0,1-26,45A115.27,115.27,0,0,1,102,168Zm-3.9-16a140.84,140.84,0,0,1,0-48h59.88a140.84,140.84,0,0,1,0,48ZM40,128a87.61,87.61,0,0,1,3.33-24H81.84a157.44,157.44,0,0,0,0,48H43.33A87.61,87.61,0,0,1,40,128ZM154,88H102a115.11,115.11,0,0,1,26-45A115.27,115.27,0,0,1,154,88Zm52.33,0H170.71a135.28,135.28,0,0,0-22.3-45.6A88.29,88.29,0,0,1,206.37,88ZM107.59,42.4A135.28,135.28,0,0,0,85.29,88H49.63A88.29,88.29,0,0,1,107.59,42.4ZM49.63,168H85.29a135.28,135.28,0,0,0,22.3,45.6A88.29,88.29,0,0,1,49.63,168Zm98.78,45.6a135.28,135.28,0,0,0,22.3-45.6h35.66A88.29,88.29,0,0,1,148.41,213.6Z\"/>',\n 'hard-drives':\n '<path d=\"M208,136H48a16,16,0,0,0-16,16v48a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V152A16,16,0,0,0,208,136Zm0,64H48V152H208v48Zm0-160H48A16,16,0,0,0,32,56v48a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V56A16,16,0,0,0,208,40Zm0,64H48V56H208v48ZM192,80a12,12,0,1,1-12-12A12,12,0,0,1,192,80Zm0,96a12,12,0,1,1-12-12A12,12,0,0,1,192,176Z\"/>',\n heart:\n '<path d=\"M178,40c-20.65,0-38.73,8.88-50,23.89C116.73,48.88,98.65,40,78,40a62.07,62.07,0,0,0-62,62c0,70,103.79,126.66,108.21,129a8,8,0,0,0,7.58,0C136.21,228.66,240,172,240,102A62.07,62.07,0,0,0,178,40ZM128,214.8C109.74,204.16,32,155.69,32,102A46.06,46.06,0,0,1,78,56c19.45,0,35.78,10.36,42.6,27a8,8,0,0,0,14.8,0c6.82-16.67,23.15-27,42.6-27a46.06,46.06,0,0,1,46,46C224,155.61,146.24,204.15,128,214.8Z\"/>',\n house:\n '<path d=\"M219.31,108.68l-80-80a16,16,0,0,0-22.62,0l-80,80A15.87,15.87,0,0,0,32,120v96a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V160h32v56a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V120A15.87,15.87,0,0,0,219.31,108.68ZM208,208H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48V120l80-80,80,80Z\"/>',\n image:\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,16V158.75l-26.07-26.06a16,16,0,0,0-22.63,0l-20,20-44-44a16,16,0,0,0-22.62,0L40,149.37V56ZM40,172l52-52,80,80H40Zm176,28H194.63l-36-36,20-20L216,181.38V200ZM144,100a12,12,0,1,1,12,12A12,12,0,0,1,144,100Z\"/>',\n info: '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm16-40a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176ZM112,84a12,12,0,1,1,12,12A12,12,0,0,1,112,84Z\"/>',\n key: '<path d=\"M216.57,39.43A80,80,0,0,0,83.91,120.78L28.69,176A15.86,15.86,0,0,0,24,187.31V216a16,16,0,0,0,16,16H72a8,8,0,0,0,8-8V208H96a8,8,0,0,0,8-8V184h16a8,8,0,0,0,5.66-2.34l9.56-9.57A79.73,79.73,0,0,0,160,176h.1A80,80,0,0,0,216.57,39.43ZM224,98.1c-1.09,34.09-29.75,61.86-63.89,61.9H160a63.7,63.7,0,0,1-23.65-4.51,8,8,0,0,0-8.84,1.68L116.69,168H96a8,8,0,0,0-8,8v16H72a8,8,0,0,0-8,8v16H40V187.31l58.83-58.82a8,8,0,0,0,1.68-8.84A63.72,63.72,0,0,1,96,95.92c0-34.14,27.81-62.8,61.9-63.89A64,64,0,0,1,224,98.1ZM192,76a12,12,0,1,1-12-12A12,12,0,0,1,192,76Z\"/>',\n layout:\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,16V96H40V56ZM40,112H96v88H40Zm176,88H112V112H216v88Z\"/>',\n link: '<path d=\"M240,88.23a54.43,54.43,0,0,1-16,37L189.25,160a54.27,54.27,0,0,1-38.63,16h-.05A54.63,54.63,0,0,1,96,119.84a8,8,0,0,1,16,.45A38.62,38.62,0,0,0,150.58,160h0a38.39,38.39,0,0,0,27.31-11.31l34.75-34.75a38.63,38.63,0,0,0-54.63-54.63l-11,11A8,8,0,0,1,135.7,59l11-11A54.65,54.65,0,0,1,224,48,54.86,54.86,0,0,1,240,88.23ZM109,185.66l-11,11A38.41,38.41,0,0,1,70.6,208h0a38.63,38.63,0,0,1-27.29-65.94L78,107.31A38.63,38.63,0,0,1,144,135.71a8,8,0,0,0,16,.45A54.86,54.86,0,0,0,144,96a54.65,54.65,0,0,0-77.27,0L32,130.75A54.62,54.62,0,0,0,70.56,224h0a54.28,54.28,0,0,0,38.64-16l11-11A8,8,0,0,0,109,185.66Z\"/>',\n list: '<path d=\"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z\"/>',\n 'list-bullets':\n '<path d=\"M80,64a8,8,0,0,1,8-8H216a8,8,0,0,1,0,16H88A8,8,0,0,1,80,64Zm136,56H88a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Zm0,64H88a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16ZM44,52A12,12,0,1,0,56,64,12,12,0,0,0,44,52Zm0,64a12,12,0,1,0,12,12A12,12,0,0,0,44,116Zm0,64a12,12,0,1,0,12,12A12,12,0,0,0,44,180Z\"/>',\n lock: '<path d=\"M208,80H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80ZM96,56a32,32,0,0,1,64,0V80H96ZM208,208H48V96H208V208Zm-68-56a12,12,0,1,1-12-12A12,12,0,0,1,140,152Z\"/>',\n 'magnifying-glass':\n '<path d=\"M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z\"/>',\n minus: '<path d=\"M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128Z\"/>',\n monitor:\n '<path d=\"M208,40H48A24,24,0,0,0,24,64V176a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V64A24,24,0,0,0,208,40Zm8,136a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V64a8,8,0,0,1,8-8H208a8,8,0,0,1,8,8Zm-48,48a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h64A8,8,0,0,1,168,224Z\"/>',\n moon: '<path d=\"M233.54,142.23a8,8,0,0,0-8-2,88.08,88.08,0,0,1-109.8-109.8,8,8,0,0,0-10-10,104.84,104.84,0,0,0-52.91,37A104,104,0,0,0,136,224a103.09,103.09,0,0,0,62.52-20.88,104.84,104.84,0,0,0,37-52.91A8,8,0,0,0,233.54,142.23ZM188.9,190.34A88,88,0,0,1,65.66,67.11a89,89,0,0,1,31.4-26A106,106,0,0,0,96,56,104.11,104.11,0,0,0,200,160a106,106,0,0,0,14.92-1.06A89,89,0,0,1,188.9,190.34Z\"/>',\n 'paper-plane-tilt':\n '<path d=\"M227.32,28.68a16,16,0,0,0-15.66-4.08l-.15,0L19.57,82.84a16,16,0,0,0-2.49,29.8L102,154l41.3,84.87A15.86,15.86,0,0,0,157.74,248q.69,0,1.38-.06a15.88,15.88,0,0,0,14-11.51l58.2-191.94c0-.05,0-.1,0-.15A16,16,0,0,0,227.32,28.68ZM157.83,231.85l-.05.14,0-.07-40.06-82.3,48-48a8,8,0,0,0-11.31-11.31l-48,48L24.08,98.25l-.07,0,.14,0L216,40Z\"/>',\n 'pencil-simple':\n '<path d=\"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z\"/>',\n plus: '<path d=\"M224,128a8,8,0,0,1-8,8H136v80a8,8,0,0,1-16,0V136H40a8,8,0,0,1,0-16h80V40a8,8,0,0,1,16,0v80h80A8,8,0,0,1,224,128Z\"/>',\n printer:\n '<path d=\"M214.67,72H200V40a8,8,0,0,0-8-8H64a8,8,0,0,0-8,8V72H41.33C27.36,72,16,82.77,16,96v80a8,8,0,0,0,8,8H56v32a8,8,0,0,0,8,8H192a8,8,0,0,0,8-8V184h32a8,8,0,0,0,8-8V96C240,82.77,228.64,72,214.67,72ZM72,48H184V72H72ZM184,208H72V160H184Zm40-40H200V152a8,8,0,0,0-8-8H64a8,8,0,0,0-8,8v16H32V96c0-4.41,4.19-8,9.33-8H214.67c5.14,0,9.33,3.59,9.33,8Zm-24-52a12,12,0,1,1-12-12A12,12,0,0,1,200,116Z\"/>',\n pulse:\n '<path d=\"M240,128a8,8,0,0,1-8,8H204.94l-37.78,75.58A8,8,0,0,1,160,216h-.4a8,8,0,0,1-7.08-5.14L95.35,60.76,63.28,131.31A8,8,0,0,1,56,136H24a8,8,0,0,1,0-16H50.85L88.72,36.69a8,8,0,0,1,14.76.46l57.51,151,31.85-63.71A8,8,0,0,1,200,120h32A8,8,0,0,1,240,128Z\"/>',\n question:\n '<path d=\"M140,180a12,12,0,1,1-12-12A12,12,0,0,1,140,180ZM128,72c-22.06,0-40,16.15-40,36v4a8,8,0,0,0,16,0v-4c0-11,10.77-20,24-20s24,9,24,20-10.77,20-24,20a8,8,0,0,0-8,8v8a8,8,0,0,0,16,0v-.72c18.24-3.35,32-17.9,32-35.28C168,88.15,150.06,72,128,72Zm104,56A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z\"/>',\n 'share-network':\n '<path d=\"M176,160a39.89,39.89,0,0,0-28.62,12.09l-46.1-29.63a39.8,39.8,0,0,0,0-28.92l46.1-29.63a40,40,0,1,0-8.66-13.45l-46.1,29.63a40,40,0,1,0,0,55.82l46.1,29.63A40,40,0,1,0,176,160Zm0-128a24,24,0,1,1-24,24A24,24,0,0,1,176,32ZM64,152a24,24,0,1,1,24-24A24,24,0,0,1,64,152Zm112,72a24,24,0,1,1,24-24A24,24,0,0,1,176,224Z\"/>',\n shield:\n '<path d=\"M208,40H48A16,16,0,0,0,32,56v56c0,52.72,25.52,84.67,46.93,102.19,23.06,18.86,46,25.27,47,25.53a8,8,0,0,0,4.2,0c1-.26,23.91-6.67,47-25.53C198.48,196.67,224,164.72,224,112V56A16,16,0,0,0,208,40Zm0,72c0,37.07-13.66,67.16-40.6,89.42A129.3,129.3,0,0,1,128,223.62a128.25,128.25,0,0,1-38.92-21.81C61.82,179.51,48,149.3,48,112l0-56,160,0Z\"/>',\n 'sidebar-simple':\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM40,56H80V200H40ZM216,200H96V56H216V200Z\"/>',\n 'sign-in':\n '<path d=\"M141.66,133.66l-40,40a8,8,0,0,1-11.32-11.32L116.69,136H24a8,8,0,0,1,0-16h92.69L90.34,93.66a8,8,0,0,1,11.32-11.32l40,40A8,8,0,0,1,141.66,133.66ZM200,32H136a8,8,0,0,0,0,16h56V208H136a8,8,0,0,0,0,16h64a8,8,0,0,0,8-8V40A8,8,0,0,0,200,32Z\"/>',\n 'sign-out':\n '<path d=\"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z\"/>',\n 'sliders-horizontal':\n '<path d=\"M40,88H73a32,32,0,0,0,62,0h81a8,8,0,0,0,0-16H135a32,32,0,0,0-62,0H40a8,8,0,0,0,0,16Zm64-24A16,16,0,1,1,88,80,16,16,0,0,1,104,64ZM216,168H199a32,32,0,0,0-62,0H40a8,8,0,0,0,0,16h97a32,32,0,0,0,62,0h17a8,8,0,0,0,0-16Zm-48,24a16,16,0,1,1,16-16A16,16,0,0,1,168,192Z\"/>',\n 'squares-four':\n '<path d=\"M104,40H56A16,16,0,0,0,40,56v48a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V56A16,16,0,0,0,104,40Zm0,64H56V56h48v48Zm96-64H152a16,16,0,0,0-16,16v48a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V56A16,16,0,0,0,200,40Zm0,64H152V56h48v48Zm-96,32H56a16,16,0,0,0-16,16v48a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V152A16,16,0,0,0,104,136Zm0,64H56V152h48v48Zm96-64H152a16,16,0,0,0-16,16v48a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V152A16,16,0,0,0,200,136Zm0,64H152V152h48v48Z\"/>',\n star: '<path d=\"M239.18,97.26A16.38,16.38,0,0,0,224.92,86l-59-4.76L143.14,26.15a16.36,16.36,0,0,0-30.27,0L90.11,81.23,31.08,86a16.46,16.46,0,0,0-9.37,28.86l45,38.83L53,211.75a16.38,16.38,0,0,0,24.5,17.82L128,198.49l50.53,31.08A16.4,16.4,0,0,0,203,211.75l-13.76-58.07,45-38.83A16.43,16.43,0,0,0,239.18,97.26Zm-15.34,5.47-48.7,42a8,8,0,0,0-2.56,7.91l14.88,62.8a.37.37,0,0,1-.17.48c-.18.14-.23.11-.38,0l-54.72-33.65a8,8,0,0,0-8.38,0L69.09,215.94c-.15.09-.19.12-.38,0a.37.37,0,0,1-.17-.48l14.88-62.8a8,8,0,0,0-2.56-7.91l-48.7-42c-.12-.1-.23-.19-.13-.5s.18-.27.33-.29l63.92-5.16A8,8,0,0,0,103,91.86l24.62-59.61c.08-.17.11-.25.35-.25s.27.08.35.25L153,91.86a8,8,0,0,0,6.75,4.92l63.92,5.16c.15,0,.24,0,.33.29S224,102.63,223.84,102.73Z\"/>',\n sun: '<path d=\"M120,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm72,88a64,64,0,1,1-64-64A64.07,64.07,0,0,1,192,128Zm-16,0a48,48,0,1,0-48,48A48.05,48.05,0,0,0,176,128ZM58.34,69.66A8,8,0,0,0,69.66,58.34l-16-16A8,8,0,0,0,42.34,53.66Zm0,116.68-16,16a8,8,0,0,0,11.32,11.32l16-16a8,8,0,0,0-11.32-11.32ZM192,72a8,8,0,0,0,5.66-2.34l16-16a8,8,0,0,0-11.32-11.32l-16,16A8,8,0,0,0,192,72Zm5.66,114.34a8,8,0,0,0-11.32,11.32l16,16a8,8,0,0,0,11.32-11.32ZM48,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H40A8,8,0,0,0,48,128Zm80,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V216A8,8,0,0,0,128,208Zm112-88H216a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16Z\"/>',\n trash:\n '<path d=\"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z\"/>',\n 'upload-simple':\n '<path d=\"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0ZM93.66,77.66,120,51.31V144a8,8,0,0,0,16,0V51.31l26.34,26.35a8,8,0,0,0,11.32-11.32l-40-40a8,8,0,0,0-11.32,0l-40,40A8,8,0,0,0,93.66,77.66Z\"/>',\n user: '<path d=\"M230.92,212c-15.23-26.33-38.7-45.21-66.09-54.16a72,72,0,1,0-73.66,0C63.78,166.78,40.31,185.66,25.08,212a8,8,0,1,0,13.85,8c18.84-32.56,52.14-52,89.07-52s70.23,19.44,89.07,52a8,8,0,1,0,13.85-8ZM72,96a56,56,0,1,1,56,56A56.06,56.06,0,0,1,72,96Z\"/>',\n users:\n '<path d=\"M117.25,157.92a60,60,0,1,0-66.5,0A95.83,95.83,0,0,0,3.53,195.63a8,8,0,1,0,13.4,8.74,80,80,0,0,1,134.14,0,8,8,0,0,0,13.4-8.74A95.83,95.83,0,0,0,117.25,157.92ZM40,108a44,44,0,1,1,44,44A44.05,44.05,0,0,1,40,108Zm210.14,98.7a8,8,0,0,1-11.07-2.33A79.83,79.83,0,0,0,172,168a8,8,0,0,1,0-16,44,44,0,1,0-16.34-84.87,8,8,0,1,1-5.94-14.85,60,60,0,0,1,55.53,105.64,95.83,95.83,0,0,1,47.22,37.71A8,8,0,0,1,250.14,206.7Z\"/>',\n warning:\n '<path d=\"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z\"/>',\n 'warning-circle':\n '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z\"/>',\n x: '<path d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"/>',\n 'x-circle':\n '<path d=\"M165.66,101.66,139.31,128l26.35,26.34a8,8,0,0,1-11.32,11.32L128,139.31l-26.34,26.35a8,8,0,0,1-11.32-11.32L116.69,128,90.34,101.66a8,8,0,0,1,11.32-11.32L128,116.69l26.34-26.35a8,8,0,0,1,11.32,11.32ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z\"/>',\n columns:\n '<path d=\"M104,32H64A16,16,0,0,0,48,48V208a16,16,0,0,0,16,16h40a16,16,0,0,0,16-16V48A16,16,0,0,0,104,32Zm0,176H64V48h40ZM192,32H152a16,16,0,0,0-16,16V208a16,16,0,0,0,16,16h40a16,16,0,0,0,16-16V48A16,16,0,0,0,192,32Zm0,176H152V48h40Z\"/>',\n square: '<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32Zm0,176H48V48H208V208Z\"/>',\n 'check-square':\n '<path d=\"M173.66,98.34a8,8,0,0,1,0,11.32l-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35A8,8,0,0,1,173.66,98.34ZM224,48V208a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32H208A16,16,0,0,1,224,48ZM208,208V48H48V208H208Z\"/>',\n 'brackets-curly':\n '<path d=\"M43.18,128a29.78,29.78,0,0,1,8,10.26c4.8,9.9,4.8,22,4.8,33.74,0,24.31,1,36,24,36a8,8,0,0,1,0,16c-17.48,0-29.32-6.14-35.2-18.26-4.8-9.9-4.8-22-4.8-33.74,0-24.31-1-36-24-36a8,8,0,0,1,0-16c23,0,24-11.69,24-36,0-11.72,0-23.84,4.8-33.74C50.68,38.14,62.52,32,80,32a8,8,0,0,1,0,16C57,48,56,59.69,56,84c0,11.72,0,23.84-4.8,33.74A29.78,29.78,0,0,1,43.18,128ZM240,120c-23,0-24-11.69-24-36,0-11.72,0-23.84-4.8-33.74C205.32,38.14,193.48,32,176,32a8,8,0,0,0,0,16c23,0,24,11.69,24,36,0,11.72,0,23.84,4.8,33.74a29.78,29.78,0,0,0,8,10.26,29.78,29.78,0,0,0-8,10.26c-4.8,9.9-4.8,22-4.8,33.74,0,24.31-1,36-24,36a8,8,0,0,0,0,16c17.48,0,29.32-6.14,35.2-18.26,4.8-9.9,4.8-22,4.8-33.74,0-24.31,1-36,24-36a8,8,0,0,0,0-16Z\"/>',\n function:\n '<path d=\"M208,40a8,8,0,0,1-8,8H170.71a24,24,0,0,0-23.62,19.71L137.59,120H184a8,8,0,0,1,0,16H134.68l-10,55.16A40,40,0,0,1,85.29,224H56a8,8,0,0,1,0-16H85.29a24,24,0,0,0,23.62-19.71l9.5-52.29H72a8,8,0,0,1,0-16h49.32l10-55.16A40,40,0,0,1,170.71,32H200A8,8,0,0,1,208,40Z\"/>',\n stack:\n '<path d=\"M230.91,172A8,8,0,0,1,228,182.91l-96,56a8,8,0,0,1-8.06,0l-96-56A8,8,0,0,1,36,169.09l92,53.65,92-53.65A8,8,0,0,1,230.91,172ZM220,121.09l-92,53.65L36,121.09A8,8,0,0,0,28,134.91l96,56a8,8,0,0,0,8.06,0l96-56A8,8,0,1,0,220,121.09ZM24,80a8,8,0,0,1,4-6.91l96-56a8,8,0,0,1,8.06,0l96,56a8,8,0,0,1,0,13.82l-96,56a8,8,0,0,1-8.06,0l-96-56A8,8,0,0,1,24,80Zm23.88,0L128,126.74,208.12,80,128,33.26Z\"/>',\n 'terminal-window':\n '<path d=\"M128,128a8,8,0,0,1-3,6.25l-40,32a8,8,0,1,1-10-12.5L107.19,128,75,102.25a8,8,0,1,1,10-12.5l40,32A8,8,0,0,1,128,128Zm48,24H136a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm56-96V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56ZM216,200V56H40V200H216Z\"/>',\n 'file-code':\n '<path d=\"M181.66,146.34a8,8,0,0,1,0,11.32l-24,24a8,8,0,0,1-11.32-11.32L164.69,152l-18.35-18.34a8,8,0,0,1,11.32-11.32Zm-72-24a8,8,0,0,0-11.32,0l-24,24a8,8,0,0,0,0,11.32l24,24a8,8,0,0,0,11.32-11.32L91.31,152l18.35-18.34A8,8,0,0,0,109.66,122.34ZM216,88V216a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V40A16,16,0,0,1,56,24h96a8,8,0,0,1,5.66,2.34l56,56A8,8,0,0,1,216,88Zm-56-8h28.69L160,51.31Zm40,136V96H152a8,8,0,0,1-8-8V40H56V216H200Z\"/>',\n hash: '<path d=\"M224,88H175.4l8.47-46.57a8,8,0,0,0-15.74-2.86l-9,49.43H111.4l8.47-46.57a8,8,0,0,0-15.74-2.86L95.14,88H48a8,8,0,0,0,0,16H92.23L83.5,152H32a8,8,0,0,0,0,16H80.6l-8.47,46.57a8,8,0,0,0,6.44,9.3A7.79,7.79,0,0,0,80,224a8,8,0,0,0,7.86-6.57l9-49.43H144.6l-8.47,46.57a8,8,0,0,0,6.44,9.3A7.79,7.79,0,0,0,144,224a8,8,0,0,0,7.86-6.57l9-49.43H208a8,8,0,0,0,0-16H163.77l8.73-48H224a8,8,0,0,0,0-16Zm-76.5,64H99.77l8.73-48h47.73Z\"/>',\n command:\n '<path d=\"M180,144H160V112h20a36,36,0,1,0-36-36V96H112V76a36,36,0,1,0-36,36H96v32H76a36,36,0,1,0,36,36V160h32v20a36,36,0,1,0,36-36ZM160,76a20,20,0,1,1,20,20H160ZM56,76a20,20,0,0,1,40,0V96H76A20,20,0,0,1,56,76ZM96,180a20,20,0,1,1-20-20H96Zm16-68h32v32H112Zm68,88a20,20,0,0,1-20-20V160h20a20,20,0,0,1,0,40Z\"/>',\n} as const;\n\nexport const PH_FILL: Record<keyof typeof PH, string> = {\n archive:\n '<path d=\"M224,48H32A16,16,0,0,0,16,64V88a16,16,0,0,0,16,16v88a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V104a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48Zm-72,96H104a8,8,0,0,1,0-16h48a8,8,0,0,1,0,16Zm72-56H32V64H224V88Z\"/>',\n 'arrow-down': '<path d=\"M205.66,149.66l-72,72a8,8,0,0,1-11.32,0l-72-72A8,8,0,0,1,56,136h64V40a8,8,0,0,1,16,0v96h64a8,8,0,0,1,5.66,13.66Z\"/>',\n 'arrow-left': '<path d=\"M224,128a8,8,0,0,1-8,8H120v64a8,8,0,0,1-13.66,5.66l-72-72a8,8,0,0,1,0-11.32l72-72A8,8,0,0,1,120,56v64h96A8,8,0,0,1,224,128Z\"/>',\n 'arrow-right': '<path d=\"M221.66,133.66l-72,72A8,8,0,0,1,136,200V136H40a8,8,0,0,1,0-16h96V56a8,8,0,0,1,13.66-5.66l72,72A8,8,0,0,1,221.66,133.66Z\"/>',\n 'arrow-square-out':\n '<path d=\"M192,136v72a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V80A16,16,0,0,1,48,64h72a8,8,0,0,1,0,16H48V208H176V136a8,8,0,0,1,16,0Zm32-96a8,8,0,0,0-8-8H152a8,8,0,0,0-5.66,13.66L172.69,72l-42.35,42.34a8,8,0,0,0,11.32,11.32L184,83.31l26.34,26.35A8,8,0,0,0,224,104Z\"/>',\n 'arrow-u-up-left':\n '<path d=\"M232,144a64.07,64.07,0,0,1-64,64H80a8,8,0,0,1,0-16h88a48,48,0,0,0,0-96H88v40a8,8,0,0,1-13.66,5.66l-48-48a8,8,0,0,1,0-11.32l48-48A8,8,0,0,1,88,40V80h80A64.07,64.07,0,0,1,232,144Z\"/>',\n 'arrow-u-up-right':\n '<path d=\"M168,136V96H88a48,48,0,0,0,0,96h88a8,8,0,0,1,0,16H88A64,64,0,0,1,88,80h80V40a8,8,0,0,1,13.66-5.66l48,48a8,8,0,0,1,0,11.32l-48,48A8,8,0,0,1,168,136Z\"/>',\n 'arrow-up':\n '<path d=\"M207.39,115.06A8,8,0,0,1,200,120H136v96a8,8,0,0,1-16,0V120H56a8,8,0,0,1-5.66-13.66l72-72a8,8,0,0,1,11.32,0l72,72A8,8,0,0,1,207.39,115.06Z\"/>',\n 'arrows-clockwise':\n '<path d=\"M224,48V96a8,8,0,0,1-8,8H168a8,8,0,0,1-5.66-13.66L180.65,72a79.48,79.48,0,0,0-54.72-22.09h-.45A79.52,79.52,0,0,0,69.59,72.71,8,8,0,0,1,58.41,61.27,96,96,0,0,1,192,60.7l18.36-18.36A8,8,0,0,1,224,48ZM186.41,183.29A80,80,0,0,1,75.35,184l18.31-18.31A8,8,0,0,0,88,152H40a8,8,0,0,0-8,8v48a8,8,0,0,0,13.66,5.66L64,195.3a95.42,95.42,0,0,0,66,26.76h.53a95.36,95.36,0,0,0,67.07-27.33,8,8,0,0,0-11.18-11.44Z\"/>',\n bell: '<path d=\"M221.8,175.94C216.25,166.38,208,139.33,208,104a80,80,0,1,0-160,0c0,35.34-8.26,62.38-13.81,71.94A16,16,0,0,0,48,200H88.81a40,40,0,0,0,78.38,0H208a16,16,0,0,0,13.8-24.06ZM128,216a24,24,0,0,1-22.62-16h45.24A24,24,0,0,1,128,216Z\"/>',\n 'calendar-blank':\n '<path d=\"M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32Zm0,48H48V48H72v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24Z\"/>',\n 'caret-down': '<path d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,48,88H208a8,8,0,0,1,5.66,13.66Z\"/>',\n 'caret-left': '<path d=\"M168,48V208a8,8,0,0,1-13.66,5.66l-80-80a8,8,0,0,1,0-11.32l80-80A8,8,0,0,1,168,48Z\"/>',\n 'caret-right': '<path d=\"M181.66,133.66l-80,80A8,8,0,0,1,88,208V48a8,8,0,0,1,13.66-5.66l80,80A8,8,0,0,1,181.66,133.66Z\"/>',\n 'caret-up': '<path d=\"M215.39,163.06A8,8,0,0,1,208,168H48a8,8,0,0,1-5.66-13.66l80-80a8,8,0,0,1,11.32,0l80,80A8,8,0,0,1,215.39,163.06Z\"/>',\n 'chart-bar':\n '<path d=\"M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1,0-16h8V136a8,8,0,0,1,8-8H72a8,8,0,0,1,8,8v64H96V88a8,8,0,0,1,8-8h32a8,8,0,0,1,8,8V200h16V40a8,8,0,0,1,8-8h40a8,8,0,0,1,8,8V200h8A8,8,0,0,1,232,208Z\"/>',\n 'chart-line':\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM200,176a8,8,0,0,1,0,16H56a8,8,0,0,1-8-8V72a8,8,0,0,1,16,0v62.92l34.88-29.07a8,8,0,0,1,9.56-.51l43,28.69,43.41-36.18a8,8,0,0,1,10.24,12.3l-48,40a8,8,0,0,1-9.56.51l-43-28.69L64,155.75V176Z\"/>',\n 'chart-pie':\n '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,16a88,88,0,0,1,71.87,37.27L128,118.76Zm0,176a88,88,0,0,1-71.87-37.27L207.89,91.12A88,88,0,0,1,128,216Z\"/>',\n 'chat-centered':\n '<path d=\"M232,56V184a16,16,0,0,1-16,16H155.57l-13.68,23.94a16,16,0,0,1-27.78,0L100.43,200H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56Z\"/>',\n check:\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM205.66,85.66l-96,96a8,8,0,0,1-11.32,0l-40-40a8,8,0,0,1,11.32-11.32L104,164.69l90.34-90.35a8,8,0,0,1,11.32,11.32Z\"/>',\n 'check-circle':\n '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm45.66,85.66-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35a8,8,0,0,1,11.32,11.32Z\"/>',\n 'circle-notch':\n '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,176A72,72,0,0,1,92,65.64a8,8,0,0,1,8,13.85,56,56,0,1,0,56,0,8,8,0,0,1,8-13.85A72,72,0,0,1,128,200Z\"/>',\n clock: '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm56,112H128a8,8,0,0,1-8-8V72a8,8,0,0,1,16,0v48h48a8,8,0,0,1,0,16Z\"/>',\n cloud:\n '<path d=\"M160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160a88.09,88.09,0,0,0,87.93-91.48C246.11,77.54,207.07,40,160.06,40Z\"/>',\n copy: '<path d=\"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32Zm-8,128H176V88a8,8,0,0,0-8-8H96V48H208Z\"/>',\n cpu: '<path d=\"M104,104h48v48H104Zm136,48a8,8,0,0,1-8,8H216v40a16,16,0,0,1-16,16H160v16a8,8,0,0,1-16,0V216H112v16a8,8,0,0,1-16,0V216H56a16,16,0,0,1-16-16V160H24a8,8,0,0,1,0-16H40V112H24a8,8,0,0,1,0-16H40V56A16,16,0,0,1,56,40H96V24a8,8,0,0,1,16,0V40h32V24a8,8,0,0,1,16,0V40h40a16,16,0,0,1,16,16V96h16a8,8,0,0,1,0,16H216v32h16A8,8,0,0,1,240,152ZM168,96a8,8,0,0,0-8-8H96a8,8,0,0,0-8,8v64a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8Z\"/>',\n database:\n '<path d=\"M128,24C74.17,24,32,48.6,32,80v96c0,31.4,42.17,56,96,56s96-24.6,96-56V80C224,48.6,181.83,24,128,24Zm80,104c0,9.62-7.88,19.43-21.61,26.92C170.93,163.35,150.19,168,128,168s-42.93-4.65-58.39-13.08C55.88,147.43,48,137.62,48,128V111.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64Zm-21.61,74.92C170.93,211.35,150.19,216,128,216s-42.93-4.65-58.39-13.08C55.88,195.43,48,185.62,48,176V159.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64V176C208,185.62,200.12,195.43,186.39,202.92Z\"/>',\n 'dots-three':\n '<path d=\"M224,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V96A16,16,0,0,0,224,80ZM60,140a12,12,0,1,1,12-12A12,12,0,0,1,60,140Zm68,0a12,12,0,1,1,12-12A12,12,0,0,1,128,140Zm68,0a12,12,0,1,1,12-12A12,12,0,0,1,196,140Z\"/>',\n 'dots-three-vertical':\n '<path d=\"M160,16H96A16,16,0,0,0,80,32V224a16,16,0,0,0,16,16h64a16,16,0,0,0,16-16V32A16,16,0,0,0,160,16ZM128,208a12,12,0,1,1,12-12A12,12,0,0,1,128,208Zm0-68a12,12,0,1,1,12-12A12,12,0,0,1,128,140Zm0-68a12,12,0,1,1,12-12A12,12,0,0,1,128,72Z\"/>',\n 'download-simple':\n '<path d=\"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,168,96H136V32a8,8,0,0,0-16,0V96H88a8,8,0,0,0-5.66,13.66Z\"/>',\n 'envelope-simple':\n '<path d=\"M224,48H32a8,8,0,0,0-8,8V192a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A8,8,0,0,0,224,48Zm-8,144H40V74.19l82.59,75.71a8,8,0,0,0,10.82,0L216,74.19V192Z\"/>',\n eye: '<path d=\"M247.31,124.76c-.35-.79-8.82-19.58-27.65-38.41C194.57,61.26,162.88,48,128,48S61.43,61.26,36.34,86.35C17.51,105.18,9,124,8.69,124.76a8,8,0,0,0,0,6.5c.35.79,8.82,19.57,27.65,38.4C61.43,194.74,93.12,208,128,208s66.57-13.26,91.66-38.34c18.83-18.83,27.3-37.61,27.65-38.4A8,8,0,0,0,247.31,124.76ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z\"/>',\n 'eye-slash':\n '<path d=\"M96.68,57.87a4,4,0,0,1,2.08-6.6A130.13,130.13,0,0,1,128,48c34.88,0,66.57,13.26,91.66,38.35,18.83,18.83,27.3,37.62,27.65,38.41a8,8,0,0,1,0,6.5c-.35.79-8.82,19.57-27.65,38.4q-4.28,4.26-8.79,8.07a4,4,0,0,1-5.55-.36ZM213.92,210.62a8,8,0,1,1-11.84,10.76L180,197.13A127.21,127.21,0,0,1,128,208c-34.88,0-66.57-13.26-91.66-38.34C17.51,150.83,9,132.05,8.69,131.26a8,8,0,0,1,0-6.5C9,124,17.51,105.18,36.34,86.35a135,135,0,0,1,25-19.78L42.08,45.38A8,8,0,1,1,53.92,34.62Zm-65.49-48.25-52.69-58a40,40,0,0,0,52.69,58Z\"/>',\n file: '<path d=\"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM152,88V44l44,44Z\"/>',\n 'file-text':\n '<path d=\"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,176H96a8,8,0,0,1,0-16h64a8,8,0,0,1,0,16Zm0-32H96a8,8,0,0,1,0-16h64a8,8,0,0,1,0,16Zm-8-56V44l44,44Z\"/>',\n 'floppy-disk':\n '<path d=\"M219.31,72,184,36.69A15.86,15.86,0,0,0,172.69,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V83.31A15.86,15.86,0,0,0,219.31,72ZM208,208H184V152a16,16,0,0,0-16-16H88a16,16,0,0,0-16,16v56H48V48H172.69L208,83.31ZM160,72a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h56A8,8,0,0,1,160,72Z\"/>',\n folder:\n '<path d=\"M216,72H131.31L104,44.69A15.88,15.88,0,0,0,92.69,40H40A16,16,0,0,0,24,56V200.62A15.41,15.41,0,0,0,39.39,216h177.5A15.13,15.13,0,0,0,232,200.89V88A16,16,0,0,0,216,72ZM40,56H92.69l16,16H40Z\"/>',\n 'folder-open':\n '<path d=\"M245,110.64A16,16,0,0,0,232,104H216V88a16,16,0,0,0-16-16H130.67L102.94,51.2a16.14,16.14,0,0,0-9.6-3.2H40A16,16,0,0,0,24,64V208h0a8,8,0,0,0,8,8H211.1a8,8,0,0,0,7.59-5.47l28.49-85.47A16.05,16.05,0,0,0,245,110.64ZM93.34,64,123.2,86.4A8,8,0,0,0,128,88h72v16H69.77a16,16,0,0,0-15.18,10.94L40,158.7V64Z\"/>',\n funnel:\n '<path d=\"M227.81,66.76l-.08.09L160,139.17v55.49A16,16,0,0,1,152.87,208l-32,21.34A16,16,0,0,1,96,216V139.17L28.27,66.85l-.08-.09A16,16,0,0,1,40,40H216a16,16,0,0,1,11.84,26.76Z\"/>',\n gauge:\n '<path d=\"M240,152v24a16,16,0,0,1-16,16H115.93a4,4,0,0,1-3.24-6.35L174.27,101a8.21,8.21,0,0,0-1.37-11.3,8,8,0,0,0-11.37,1.61l-72,99.06A4,4,0,0,1,86.25,192H32a16,16,0,0,1-16-16V153.13c0-1.79,0-3.57.13-5.33a4,4,0,0,1,4-3.8H48a8,8,0,0,0,8-8.53A8.17,8.17,0,0,0,47.73,128H23.92a4,4,0,0,1-3.87-5c12-43.84,49.66-77.13,95.52-82.28a4,4,0,0,1,4.43,4V72a8,8,0,0,0,8.53,8A8.17,8.17,0,0,0,136,71.73V44.67a4,4,0,0,1,4.43-4A112.18,112.18,0,0,1,236.23,123a4,4,0,0,1-3.88,5H208.27a8.17,8.17,0,0,0-8.25,7.47,8,8,0,0,0,8,8.53h27.92a4,4,0,0,1,4,3.86C240,149.23,240,150.61,240,152Z\"/>',\n gear: '<path d=\"M216,130.16q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z\"/>',\n globe:\n '<path d=\"M128,24h0A104,104,0,1,0,232,128,104.12,104.12,0,0,0,128,24Zm78.36,64H170.71a135.28,135.28,0,0,0-22.3-45.6A88.29,88.29,0,0,1,206.37,88ZM216,128a87.61,87.61,0,0,1-3.33,24H174.16a157.44,157.44,0,0,0,0-48h38.51A87.61,87.61,0,0,1,216,128ZM128,43a115.27,115.27,0,0,1,26,45H102A115.11,115.11,0,0,1,128,43ZM102,168H154a115.11,115.11,0,0,1-26,45A115.27,115.27,0,0,1,102,168Zm-3.9-16a140.84,140.84,0,0,1,0-48h59.88a140.84,140.84,0,0,1,0,48Zm50.35,61.6a135.28,135.28,0,0,0,22.3-45.6h35.66A88.29,88.29,0,0,1,148.41,213.6Z\"/>',\n 'hard-drives':\n '<path d=\"M208,40H48A16,16,0,0,0,32,56v48a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V56A16,16,0,0,0,208,40ZM180,92a12,12,0,1,1,12-12A12,12,0,0,1,180,92Z\"/><path d=\"M208,136H48a16,16,0,0,0-16,16v48a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V152A16,16,0,0,0,208,136Zm-28,52a12,12,0,1,1,12-12A12,12,0,0,1,180,188Z\"/>',\n heart:\n '<path d=\"M240,102c0,70-103.79,126.66-108.21,129a8,8,0,0,1-7.58,0C119.79,228.66,16,172,16,102A62.07,62.07,0,0,1,78,40c20.65,0,38.73,8.88,50,23.89C139.27,48.88,157.35,40,178,40A62.07,62.07,0,0,1,240,102Z\"/>',\n house:\n '<path d=\"M224,120v96a8,8,0,0,1-8,8H160a8,8,0,0,1-8-8V164a4,4,0,0,0-4-4H108a4,4,0,0,0-4,4v52a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V120a16,16,0,0,1,4.69-11.31l80-80a16,16,0,0,1,22.62,0l80,80A16,16,0,0,1,224,120Z\"/>',\n image:\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM156,88a12,12,0,1,1-12,12A12,12,0,0,1,156,88Zm60,112H40V160.69l46.34-46.35a8,8,0,0,1,11.32,0h0L165,181.66a8,8,0,0,0,11.32-11.32l-17.66-17.65L173,138.34a8,8,0,0,1,11.31,0L216,170.07V200Z\"/>',\n info: '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-4,48a12,12,0,1,1-12,12A12,12,0,0,1,124,72Zm12,112a16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40a8,8,0,0,1,0,16Z\"/>',\n key: '<path d=\"M216.57,39.43A80,80,0,0,0,83.91,120.78L28.69,176A15.86,15.86,0,0,0,24,187.31V216a16,16,0,0,0,16,16H72a8,8,0,0,0,8-8V208H96a8,8,0,0,0,8-8V184h16a8,8,0,0,0,5.66-2.34l9.56-9.57A79.73,79.73,0,0,0,160,176h.1A80,80,0,0,0,216.57,39.43ZM180,92a16,16,0,1,1,16-16A16,16,0,0,1,180,92Z\"/>',\n layout:\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM40,56H216V96H40ZM216,200H112V112H216v88Z\"/>',\n link: '<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM115.7,192.49a43.31,43.31,0,0,1-55-66.43l25.37-25.37a43.35,43.35,0,0,1,61.25,0,42.9,42.9,0,0,1,9.95,15.43,8,8,0,1,1-15,5.6A27.33,27.33,0,0,0,97.37,112L72,137.37a27.32,27.32,0,0,0,34.68,41.91,8,8,0,1,1,9,13.21Zm79.61-62.55-25.37,25.37A43,43,0,0,1,139.32,168h0a43.35,43.35,0,0,1-40.53-28.12,8,8,0,1,1,15-5.6A27.35,27.35,0,0,0,139.28,152h0a27.14,27.14,0,0,0,19.32-8L184,118.63a27.32,27.32,0,0,0-34.68-41.91,8,8,0,1,1-9-13.21,43.32,43.32,0,0,1,55,66.43Z\"/>',\n list: '<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM192,184H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Zm0-48H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Zm0-48H64a8,8,0,0,1,0-16H192a8,8,0,0,1,0,16Z\"/>',\n 'list-bullets':\n '<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM68,188a12,12,0,1,1,12-12A12,12,0,0,1,68,188Zm0-48a12,12,0,1,1,12-12A12,12,0,0,1,68,140Zm0-48A12,12,0,1,1,80,80,12,12,0,0,1,68,92Zm124,92H104a8,8,0,0,1,0-16h88a8,8,0,0,1,0,16Zm0-48H104a8,8,0,0,1,0-16h88a8,8,0,0,1,0,16Zm0-48H104a8,8,0,0,1,0-16h88a8,8,0,0,1,0,16Z\"/>',\n lock: '<path d=\"M208,80H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80Zm-80,84a12,12,0,1,1,12-12A12,12,0,0,1,128,164Zm32-84H96V56a32,32,0,0,1,64,0Z\"/>',\n 'magnifying-glass':\n '<path d=\"M168,112a56,56,0,1,1-56-56A56,56,0,0,1,168,112Zm61.66,117.66a8,8,0,0,1-11.32,0l-50.06-50.07a88,88,0,1,1,11.32-11.31l50.06,50.06A8,8,0,0,1,229.66,229.66ZM112,184a72,72,0,1,0-72-72A72.08,72.08,0,0,0,112,184Z\"/>',\n minus:\n '<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM184,136H72a8,8,0,0,1,0-16H184a8,8,0,0,1,0,16Z\"/>',\n monitor:\n '<path d=\"M232,64V176a24,24,0,0,1-24,24H48a24,24,0,0,1-24-24V64A24,24,0,0,1,48,40H208A24,24,0,0,1,232,64ZM160,216H96a8,8,0,0,0,0,16h64a8,8,0,0,0,0-16Z\"/>',\n moon: '<path d=\"M235.54,150.21a104.84,104.84,0,0,1-37,52.91A104,104,0,0,1,32,120,103.09,103.09,0,0,1,52.88,57.48a104.84,104.84,0,0,1,52.91-37,8,8,0,0,1,10,10,88.08,88.08,0,0,0,109.8,109.8,8,8,0,0,1,10,10Z\"/>',\n 'paper-plane-tilt':\n '<path d=\"M231.4,44.34s0,.1,0,.15l-58.2,191.94a15.88,15.88,0,0,1-14,11.51q-.69.06-1.38.06a15.86,15.86,0,0,1-14.42-9.15L107,164.15a4,4,0,0,1,.77-4.58l57.92-57.92a8,8,0,0,0-11.31-11.31L96.43,148.26a4,4,0,0,1-4.58.77L17.08,112.64a16,16,0,0,1,2.49-29.8l191.94-58.2.15,0A16,16,0,0,1,231.4,44.34Z\"/>',\n 'pencil-simple':\n '<path d=\"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM192,108.68,147.31,64l24-24L216,84.68Z\"/>',\n plus: '<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM184,136H136v48a8,8,0,0,1-16,0V136H72a8,8,0,0,1,0-16h48V72a8,8,0,0,1,16,0v48h48a8,8,0,0,1,0,16Z\"/>',\n printer:\n '<path d=\"M240,96v80a8,8,0,0,1-8,8H200v32a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V184H24a8,8,0,0,1-8-8V96c0-13.23,11.36-24,25.33-24H56V40a8,8,0,0,1,8-8H192a8,8,0,0,1,8,8V72h14.67C228.64,72,240,82.77,240,96ZM72,72H184V48H72Zm112,88H72v48H184Zm16-44a12,12,0,1,0-12,12A12,12,0,0,0,200,116Z\"/>',\n pulse:\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm-8,96H188.64L159,188a8,8,0,0,1-6.95,4h-.46a8,8,0,0,1-6.89-4.84L103,89.92,79,132a8,8,0,0,1-7,4H48a8,8,0,0,1,0-16H67.36L97.05,68a8,8,0,0,1,14.3.82L153,166.08l24-42.05a8,8,0,0,1,6.95-4h24a8,8,0,0,1,0,16Z\"/>',\n question:\n '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,168a12,12,0,1,1,12-12A12,12,0,0,1,128,192Zm8-48.72V144a8,8,0,0,1-16,0v-8a8,8,0,0,1,8-8c13.23,0,24-9,24-20s-10.77-20-24-20-24,9-24,20v4a8,8,0,0,1-16,0v-4c0-19.85,17.94-36,40-36s40,16.15,40,36C168,125.38,154.24,139.93,136,143.28Z\"/>',\n 'share-network':\n '<path d=\"M212,200a36,36,0,1,1-69.85-12.25l-53-34.05a36,36,0,1,1,0-51.4l53-34a36.09,36.09,0,1,1,8.67,13.45l-53,34.05a36,36,0,0,1,0,24.5l53,34.05A36,36,0,0,1,212,200Z\"/>',\n shield:\n '<path d=\"M224,56v56c0,52.72-25.52,84.67-46.93,102.19-23.06,18.86-46,25.27-47,25.53a8,8,0,0,1-4.2,0c-1-.26-23.91-6.67-47-25.53C57.52,196.67,32,164.72,32,112V56A16,16,0,0,1,48,40H208A16,16,0,0,1,224,56Z\"/>',\n 'sidebar-simple': '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,160H88V56H216V200Z\"/>',\n 'sign-in':\n '<path d=\"M141.66,133.66l-40,40A8,8,0,0,1,88,168V136H24a8,8,0,0,1,0-16H88V88a8,8,0,0,1,13.66-5.66l40,40A8,8,0,0,1,141.66,133.66ZM200,32H136a8,8,0,0,0,0,16h56V208H136a8,8,0,0,0,0,16h64a8,8,0,0,0,8-8V40A8,8,0,0,0,200,32Z\"/>',\n 'sign-out':\n '<path d=\"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40A8,8,0,0,0,176,88v32H112a8,8,0,0,0,0,16h64v32a8,8,0,0,0,13.66,5.66l40-40A8,8,0,0,0,229.66,122.34Z\"/>',\n 'sliders-horizontal':\n '<path d=\"M32,80a8,8,0,0,1,8-8H77.17a28,28,0,0,1,53.66,0H216a8,8,0,0,1,0,16H130.83a28,28,0,0,1-53.66,0H40A8,8,0,0,1,32,80Zm184,88H194.83a28,28,0,0,0-53.66,0H40a8,8,0,0,0,0,16H141.17a28,28,0,0,0,53.66,0H216a8,8,0,0,0,0-16Z\"/>',\n 'squares-four':\n '<path d=\"M120,56v48a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V56A16,16,0,0,1,56,40h48A16,16,0,0,1,120,56Zm80-16H152a16,16,0,0,0-16,16v48a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V56A16,16,0,0,0,200,40Zm-96,96H56a16,16,0,0,0-16,16v48a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V152A16,16,0,0,0,104,136Zm96,0H152a16,16,0,0,0-16,16v48a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V152A16,16,0,0,0,200,136Z\"/>',\n star: '<path d=\"M234.29,114.85l-45,38.83L203,211.75a16.4,16.4,0,0,1-24.5,17.82L128,198.49,77.47,229.57A16.4,16.4,0,0,1,53,211.75l13.76-58.07-45-38.83A16.46,16.46,0,0,1,31.08,86l59-4.76,22.76-55.08a16.36,16.36,0,0,1,30.27,0l22.75,55.08,59,4.76a16.46,16.46,0,0,1,9.37,28.86Z\"/>',\n sun: '<path d=\"M120,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm8,24a64,64,0,1,0,64,64A64.07,64.07,0,0,0,128,64ZM58.34,69.66A8,8,0,0,0,69.66,58.34l-16-16A8,8,0,0,0,42.34,53.66Zm0,116.68-16,16a8,8,0,0,0,11.32,11.32l16-16a8,8,0,0,0-11.32-11.32ZM192,72a8,8,0,0,0,5.66-2.34l16-16a8,8,0,0,0-11.32-11.32l-16,16A8,8,0,0,0,192,72Zm5.66,114.34a8,8,0,0,0-11.32,11.32l16,16a8,8,0,0,0,11.32-11.32ZM48,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H40A8,8,0,0,0,48,128Zm80,80a8,8,0,0,0-8,8v24a8,8,0,0,0,16,0V216A8,8,0,0,0,128,208Zm112-88H216a8,8,0,0,0,0,16h24a8,8,0,0,0,0-16Z\"/>',\n trash:\n '<path d=\"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM112,168a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm0-120H96V40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8Z\"/>',\n 'upload-simple':\n '<path d=\"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0ZM88,80h32v64a8,8,0,0,0,16,0V80h32a8,8,0,0,0,5.66-13.66l-40-40a8,8,0,0,0-11.32,0l-40,40A8,8,0,0,0,88,80Z\"/>',\n user: '<path d=\"M230.93,220a8,8,0,0,1-6.93,4H32a8,8,0,0,1-6.92-12c15.23-26.33,38.7-45.21,66.09-54.16a72,72,0,1,1,73.66,0c27.39,8.95,50.86,27.83,66.09,54.16A8,8,0,0,1,230.93,220Z\"/>',\n users:\n '<path d=\"M164.47,195.63a8,8,0,0,1-6.7,12.37H10.23a8,8,0,0,1-6.7-12.37,95.83,95.83,0,0,1,47.22-37.71,60,60,0,1,1,66.5,0A95.83,95.83,0,0,1,164.47,195.63Zm87.91-.15a95.87,95.87,0,0,0-47.13-37.56A60,60,0,0,0,144.7,54.59a4,4,0,0,0-1.33,6A75.83,75.83,0,0,1,147,150.53a4,4,0,0,0,1.07,5.53,112.32,112.32,0,0,1,29.85,30.83,23.92,23.92,0,0,1,3.65,16.47,4,4,0,0,0,3.95,4.64h60.3a8,8,0,0,0,7.73-5.93A8.22,8.22,0,0,0,252.38,195.48Z\"/>',\n warning:\n '<path d=\"M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM120,104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm8,88a12,12,0,1,1,12-12A12,12,0,0,1,128,192Z\"/>',\n 'warning-circle':\n '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-8,56a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm8,104a12,12,0,1,1,12-12A12,12,0,0,1,128,184Z\"/>',\n x: '<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM181.66,170.34a8,8,0,0,1-11.32,11.32L128,139.31,85.66,181.66a8,8,0,0,1-11.32-11.32L116.69,128,74.34,85.66A8,8,0,0,1,85.66,74.34L128,116.69l42.34-42.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"/>',\n 'x-circle':\n '<path d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm37.66,130.34a8,8,0,0,1-11.32,11.32L128,139.31l-26.34,26.35a8,8,0,0,1-11.32-11.32L116.69,128,90.34,101.66a8,8,0,0,1,11.32-11.32L128,116.69l26.34-26.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"/>',\n columns:\n '<path d=\"M120,48V208a16,16,0,0,1-16,16H64a16,16,0,0,1-16-16V48A16,16,0,0,1,64,32h40A16,16,0,0,1,120,48Zm72-16H152a16,16,0,0,0-16,16V208a16,16,0,0,0,16,16h40a16,16,0,0,0,16-16V48A16,16,0,0,0,192,32Z\"/>',\n square: '<path d=\"M224,48V208a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32H208A16,16,0,0,1,224,48Z\"/>',\n 'check-square':\n '<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32Zm-34.34,77.66-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35a8,8,0,0,1,11.32,11.32Z\"/>',\n 'brackets-curly':\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM88,155.84c.29,14.26.41,20.16,16,20.16a8,8,0,0,1,0,16c-31.27,0-31.72-22.43-32-35.84C71.71,141.9,71.59,136,56,136a8,8,0,0,1,0-16c15.59,0,15.71-5.9,16-20.16C72.28,86.43,72.73,64,104,64a8,8,0,0,1,0,16c-15.59,0-15.71,5.9-16,20.16-.17,8.31-.41,20.09-8,27.84C87.59,135.75,87.83,147.53,88,155.84ZM200,136c-15.59,0-15.71,5.9-16,20.16-.28,13.41-.73,35.84-32,35.84a8,8,0,0,1,0-16c15.59,0,15.71-5.9,16-20.16.17-8.31.41-20.09,8-27.84-7.6-7.75-7.84-19.53-8-27.84C167.71,85.9,167.59,80,152,80a8,8,0,0,1,0-16c31.27,0,31.72,22.43,32,35.84.29,14.26.41,20.16,16,20.16a8,8,0,0,1,0,16Z\"/>',\n function:\n '<path d=\"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM176,72H159.92a16,16,0,0,0-15.73,13l-6.55,35H168a8,8,0,0,1,0,16H134.64l-7.11,37.9A32,32,0,0,1,96.08,200H80a8,8,0,0,1,0-16H96.08A16,16,0,0,0,111.81,171L118.36,136H88a8,8,0,0,1,0-16h33.36l7.11-37.9A32,32,0,0,1,159.92,56H176a8,8,0,0,1,0,16Z\"/>',\n stack:\n '<path d=\"M220,169.09l-92,53.65L36,169.09A8,8,0,0,0,28,182.91l96,56a8,8,0,0,0,8.06,0l96-56A8,8,0,1,0,220,169.09Z\"/><path d=\"M220,121.09l-92,53.65L36,121.09A8,8,0,0,0,28,134.91l96,56a8,8,0,0,0,8.06,0l96-56A8,8,0,1,0,220,121.09Z\"/><path d=\"M28,86.91l96,56a8,8,0,0,0,8.06,0l96-56a8,8,0,0,0,0-13.82l-96-56a8,8,0,0,0-8.06,0l-96,56a8,8,0,0,0,0,13.82Z\"/>',\n 'terminal-window':\n '<path d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm-91,94.25-40,32a8,8,0,1,1-10-12.5L107.19,128,75,102.25a8,8,0,1,1,10-12.5l40,32a8,8,0,0,1,0,12.5ZM176,168H136a8,8,0,0,1,0-16h40a8,8,0,0,1,0,16Z\"/>',\n 'file-code':\n '<path d=\"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34Zm-104,88a8,8,0,0,1-11.32,11.32l-24-24a8,8,0,0,1,0-11.32l24-24a8,8,0,0,1,11.32,11.32L91.31,152Zm72-12.68-24,24a8,8,0,0,1-11.32-11.32L164.69,152l-18.35-18.34a8,8,0,0,1,11.32-11.32l24,24A8,8,0,0,1,181.66,157.66ZM152,88V44l44,44Z\"/>',\n hash: '<path d=\"M116.25,112h31.5l-8,32h-31.5ZM224,48V208a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32H208A16,16,0,0,1,224,48Zm-16,56a8,8,0,0,0-8-8H168.25l7.51-30.06a8,8,0,0,0-15.52-3.88L151.75,96h-31.5l7.51-30.06a8,8,0,0,0-15.52-3.88L103.75,96H64a8,8,0,0,0,0,16H99.75l-8,32H56a8,8,0,0,0,0,16H87.75l-7.51,30.06a8,8,0,0,0,5.82,9.7,8.13,8.13,0,0,0,2,.24,8,8,0,0,0,7.75-6.06L104.25,160h31.5l-7.51,30.06a8,8,0,0,0,5.82,9.7A8.13,8.13,0,0,0,136,200a8,8,0,0,0,7.75-6.06L152.25,160H192a8,8,0,0,0,0-16H156.25l8-32H200A8,8,0,0,0,208,104Z\"/>',\n command:\n '<path d=\"M116,116h24v24H116ZM86,72a14,14,0,0,0,0,28h14V86A14,14,0,0,0,86,72Zm98,14a14,14,0,0,0-28,0v14h14A14,14,0,0,0,184,86ZM72,170a14,14,0,0,0,28,0V156H86A14,14,0,0,0,72,170ZM224,48V208a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32H208A16,16,0,0,1,224,48Zm-68,92V116h14a30,30,0,1,0-30-30v14H116V86a30,30,0,1,0-30,30h14v24H86a30,30,0,1,0,30,30V156h24v14a30,30,0,1,0,30-30Zm0,30a14,14,0,1,0,14-14H156Z\"/>',\n};\n\n/** Lucide names that map to a Phosphor icon. */\nexport const PH_ALIAS = {\n 'chart-column': 'chart-bar',\n settings: 'gear',\n search: 'magnifying-glass',\n pencil: 'pencil-simple',\n 'trash-2': 'trash',\n download: 'download-simple',\n upload: 'upload-simple',\n 'refresh-cw': 'arrows-clockwise',\n 'chevron-right': 'caret-right',\n 'chevron-left': 'caret-left',\n 'chevron-down': 'caret-down',\n 'chevron-up': 'caret-up',\n ellipsis: 'dots-three',\n 'ellipsis-vertical': 'dots-three-vertical',\n calendar: 'calendar-blank',\n 'log-out': 'sign-out',\n 'log-in': 'sign-in',\n 'eye-off': 'eye-slash',\n 'circle-alert': 'warning-circle',\n 'triangle-alert': 'warning',\n 'circle-check': 'check-circle',\n 'circle-x': 'x-circle',\n 'loader-circle': 'circle-notch',\n 'panel-left-close': 'sidebar-simple',\n 'panel-left-open': 'sidebar-simple',\n 'external-link': 'arrow-square-out',\n mail: 'envelope-simple',\n 'share-2': 'share-network',\n send: 'paper-plane-tilt',\n save: 'floppy-disk',\n 'undo-2': 'arrow-u-up-left',\n 'redo-2': 'arrow-u-up-right',\n list: 'list-bullets',\n 'layout-grid': 'squares-four',\n 'layout-dashboard': 'layout',\n server: 'hard-drives',\n menu: 'list',\n activity: 'pulse',\n 'circle-help': 'question',\n 'message-square': 'chat-centered',\n} as const;\n\nexport type PhosphorName = keyof typeof PH;\n/** A built-in icon: a Phosphor name, or a Lucide name that maps to one. */\nexport type IconName = PhosphorName | keyof typeof PH_ALIAS;\n","import * as React from 'react';\n\n/** Joins the truthy class names. */\nexport function cx(...names: unknown[]): string {\n return names.filter(Boolean).join(' ');\n}\n\n// Puts the numbers of a translated sentence in Geist Mono and leaves the words in the text font.\n// The sentence marks each number with \\u0001, \\u0002 or \\u0003 in the order of nums.\nexport function monoNums(text: string, nums: React.ReactNode[]): React.ReactNode[] {\n const marks = ['\\u0001', '\\u0002', '\\u0003'];\n // eslint-disable-next-line no-control-regex -- the marks are control characters on purpose\n return text.split(/(\\u0001|\\u0002|\\u0003)/).map((t, i) => {\n const k = marks.indexOf(t);\n return k >= 0 ? (\n <span key={i} className=\"ui-num\">\n {nums[k]}\n </span>\n ) : (\n t\n );\n });\n}\n\n/** localStorage get (no value) or set; null when storage is blocked. */\nexport function store(key: string, value?: string): string | null {\n try {\n if (value === undefined) return localStorage.getItem(key);\n localStorage.setItem(key, value);\n } catch {\n /* storage blocked (private mode, sandboxed frame) */\n }\n return null;\n}\n\nexport function reduced(): boolean {\n return typeof window !== 'undefined' && typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nexport const IS_MAC = /Mac|iPhone|iPad/.test((typeof navigator !== 'undefined' && (navigator.platform || navigator.userAgent)) || '');\nexport const SHORTCUT = IS_MAC ? '⌘K' : 'Ctrl K';\n\n/** Matches a media query and follows changes. */\nexport function useMedia(query: string): boolean {\n const get = () => typeof window !== 'undefined' && typeof window.matchMedia === 'function' && window.matchMedia(query).matches;\n const [match, setMatch] = React.useState(get);\n React.useEffect(() => {\n if (typeof window.matchMedia !== 'function') return;\n const m = window.matchMedia(query);\n const f = () => setMatch(m.matches);\n f();\n m.addEventListener('change', f);\n return () => m.removeEventListener('change', f);\n }, [query]);\n return match;\n}\n\n/** True under 600 px, the same width where cards stack. */\nexport function useNarrow(): boolean {\n return useMedia('(max-width: 599px)');\n}\n\nexport async function copyText(text: string): Promise<void> {\n if (navigator.clipboard?.writeText) {\n try {\n return await navigator.clipboard.writeText(text);\n } catch {\n /* fall back below (insecure context, denied permission) */\n }\n }\n const t = document.createElement('textarea');\n t.value = text;\n t.setAttribute('readonly', '');\n t.style.position = 'fixed';\n t.style.opacity = '0';\n document.body.appendChild(t);\n t.select();\n try {\n if (!document.execCommand('copy')) throw new Error('copy failed');\n } finally {\n document.body.removeChild(t);\n }\n}\n\n/** Text with every number in Geist Mono and the words in the text font, for labels that mix both (「第 1 週」). */\nexport function digits(text: string, numbers = /(\\d[\\d,.:/]*)/): React.ReactNode[] {\n return text.split(numbers).map((t, i) =>\n i % 2 ? (\n <span key={i} className=\"ui-num\">\n {t}\n </span>\n ) : (\n t\n ),\n );\n}\n","import { PH, PH_ALIAS, PH_FILL, type IconName, type PhosphorName } from './data';\nimport { cx } from '../internal/util';\n\nexport type { IconName } from './data';\n\n/** Path data for a custom 24 x 24 stroke icon ('M4 12h16'), or SVG markup on a 256 x 256 viewBox. */\nexport type CustomIcon = `M${string}` | `m${string}` | `<${string}`;\n/** What an `icon` prop takes: a built-in name (checked by TypeScript) or a custom icon. */\nexport type IconSource = IconName | CustomIcon;\n\nconst BY_MARKUP = new Map<string, PhosphorName>();\nfor (const k of Object.keys(PH) as PhosphorName[]) {\n BY_MARKUP.set(PH[k], k);\n BY_MARKUP.set(PH_FILL[k], k);\n}\n\nconst isName = (s: string): s is IconName => s in PH || s in PH_ALIAS;\n\n/** The Phosphor name behind a name, an alias or the markup of a built-in icon. */\nfunction iconKey(source: string | undefined): PhosphorName | undefined {\n if (!source) return undefined;\n if (isName(source)) return source in PH ? (source as PhosphorName) : PH_ALIAS[source as keyof typeof PH_ALIAS];\n return BY_MARKUP.get(source);\n}\n\nexport interface IconProps {\n /** Built-in Phosphor name, e.g. 'house', 'trash' (Lucide names work as aliases). */\n name?: IconName;\n /** A custom icon when it is not built in: 24 px path data, or SVG markup. */\n d?: CustomIcon;\n /** Default 20. */\n size?: number;\n /** Stroke width of a custom path icon. Default 2. */\n strokeWidth?: number;\n /** The Fill version, for a selected item. */\n filled?: boolean;\n className?: string;\n}\n\n/** Phosphor icon, 20 px, inherits the text color. Decorative: label the control that holds it. */\nexport function Icon({ name, d, size = 20, strokeWidth = 2, filled, className }: IconProps) {\n const key = iconKey(name ?? d);\n const base = { className: cx('ui-icon', className), width: size, height: size, 'aria-hidden': true } as const;\n if (key) return <svg {...base} viewBox=\"0 0 256 256\" fill=\"currentColor\" dangerouslySetInnerHTML={{ __html: filled ? PH_FILL[key] : PH[key] }} />;\n if (d?.startsWith('<')) return <svg {...base} viewBox=\"0 0 256 256\" fill=\"currentColor\" dangerouslySetInnerHTML={{ __html: d }} />;\n return (\n <svg {...base} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={strokeWidth} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={d} />\n </svg>\n );\n}\n\n/** Renders an `icon` prop value: a name or a custom icon. */\nexport function IconOf({ icon, ...rest }: Omit<IconProps, 'name' | 'd'> & { icon: IconSource }) {\n return isName(icon) ? <Icon name={icon} {...rest} /> : <Icon d={icon} {...rest} />;\n}\n\n/** Names the first bundle used for a few icons; kept so old pages keep working. Pass the Phosphor name instead. */\nconst LEGACY: Record<string, PhosphorName> = {\n close: 'x',\n edit: 'pencil-simple',\n more: 'dots-three',\n spinner: 'circle-notch',\n alert: 'warning-circle',\n warn: 'warning',\n chevronRight: 'caret-right',\n chevronDown: 'caret-down',\n panelClose: 'sidebar-simple',\n panelOpen: 'sidebar-simple',\n filter: 'funnel',\n refresh: 'arrows-clockwise',\n};\n\n/** Markup of every built-in icon by name, aliases included. */\nexport const icons: Readonly<Record<IconName, string>> = Object.freeze({\n ...Object.fromEntries(Object.entries(LEGACY).map(([alias, target]) => [alias, PH[target]])),\n ...PH,\n ...Object.fromEntries(Object.entries(PH_ALIAS).map(([alias, target]) => [alias, PH[target as PhosphorName]])),\n} as Record<IconName, string>);\n\nexport function Spinner() {\n return <Icon name=\"circle-notch\" className=\"ui-spin\" size={16} />;\n}\n\n/** The check mark of Checkbox and selected options, 24 px path. */\nexport const CHECK: CustomIcon = 'M4 12.5l5 5L20 6.5';\n","import * as React from 'react';\n\n/** Droplet motion of tab and sidebar indicators: lead duration in ms and how much longer the trailing edge takes. */\nexport const MOTION = { dur: 200, stretch: 2.2 } as const;\n\n/** Transition for an indicator whose leading edge moves first and trailing edge catches up (the droplet stretch). */\nexport function dropTransition(axisA: string, axisB: string, forward: boolean): string {\n const lead = MOTION.dur * 0.6 + 'ms cubic-bezier(.2,.8,.2,1)';\n const follow = MOTION.dur * MOTION.stretch + 'ms cubic-bezier(.65,0,.25,1.15)';\n return axisA + ' ' + (forward ? follow : lead) + ', ' + axisB + ' ' + (forward ? lead : follow) + ', transform 150ms ease';\n}\n\n/** [moving, start]: true from start() until the droplet has settled. */\nexport function useMoving(): [boolean, () => void] {\n const [moving, set] = React.useState(false);\n const t = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n const start = React.useCallback(() => {\n set(true);\n clearTimeout(t.current);\n t.current = setTimeout(() => set(false), MOTION.dur * MOTION.stretch + 60);\n }, []);\n React.useEffect(() => () => clearTimeout(t.current), []);\n return [moving, start];\n}\n","import * as React from 'react';\nimport { tr } from '../../i18n';\nimport { Icon, IconOf, type IconSource } from '../../icons/Icon';\nimport { dropTransition, useMoving } from '../../motion';\nimport { cx } from '../../internal/util';\n\nexport interface NavItem {\n id: string;\n label: string;\n /** Top-level items have an icon; the selected one is filled. */\n icon?: IconSource;\n /** Second level, shown under the item; it opens and closes. */\n children?: NavItem[];\n}\n\nexport interface NavSection {\n items: NavItem[];\n}\n\nexport interface SideNavProps {\n /** Groups separated by a divider. */\n sections: NavSection[];\n /** Id of the current page. */\n value: string;\n onChange?: (id: string) => void;\n /** 72 px with icons only, labels as tooltips. */\n collapsed?: boolean;\n /** Adds the collapse button at the bottom left. */\n onToggle?: () => void;\n brand?: React.ReactNode;\n /** Default 「主要導覽」. */\n label?: string;\n className?: string;\n}\n\n/** The 240 px dashboard sidebar (72 px collapsed). The selection bar moves like a droplet. */\nexport function SideNav({ sections, value, onChange, collapsed = false, onToggle, brand, label, className }: SideNavProps) {\n const refs = React.useRef<Record<string, HTMLButtonElement | null>>({});\n const wrap = React.useRef<HTMLDivElement>(null);\n const [bar, setBar] = React.useState({ top: 0, bottom: 0, show: false, down: true });\n const last = React.useRef<{ top: number; bottom: number } | null>(null);\n const [moving, bump] = useMoving();\n const [closed, setClosed] = React.useState<Record<string, boolean>>({});\n const closedKey = Object.keys(closed)\n .filter((k) => closed[k])\n .join();\n React.useLayoutEffect(() => {\n let el = refs.current[value];\n if (!el) {\n const parent = sections.flatMap((s) => s.items).find((it) => it.children?.some((c) => c.id === value));\n el = parent ? refs.current[parent.id] : null;\n }\n const box = wrap.current;\n if (!el || !box) return;\n const y = el.getBoundingClientRect().top - box.getBoundingClientRect().top;\n const top = Math.round(y) + 8;\n const bottom = Math.round(box.clientHeight - y - el.offsetHeight) + 8;\n const prev = last.current;\n if (prev && prev.top === top && prev.bottom === bottom) return;\n if (prev && prev.top !== top) bump();\n last.current = { top, bottom };\n setBar({ top, bottom, show: true, down: !prev || top >= prev.top });\n }, [value, collapsed, closedKey, sections, bump]);\n\n const row = (it: NavItem, sub: boolean): React.ReactNode[] => {\n const kids = it.children ?? [];\n const hasKids = kids.length > 0 && !collapsed;\n const isOpen = !closed[it.id];\n const selected = value === it.id || ((!hasKids || !isOpen) && kids.some((c) => c.id === value));\n const out: React.ReactNode[] = [\n <div key={it.id} className=\"ui-nav-row\">\n <button\n type=\"button\"\n ref={(n) => {\n refs.current[it.id] = n;\n }}\n className={cx('ui-nav-item', sub && 'is-sub', selected && 'is-selected')}\n aria-current={selected ? 'page' : undefined}\n aria-expanded={hasKids ? isOpen : undefined}\n aria-label={collapsed ? it.label : undefined}\n // Collapsed, a parent opens its first page; the page switches between its siblings itself.\n onClick={() => (hasKids ? setClosed({ ...closed, [it.id]: isOpen }) : onChange?.(kids[0]?.id ?? it.id))}\n >\n {it.icon && !sub ? <IconOf icon={it.icon} size={22} filled={selected} className=\"ui-nav-icon\" /> : null}\n {collapsed ? null : <span className=\"ui-nav-label\">{it.label}</span>}\n {hasKids ? <Icon name=\"caret-right\" size={16} className={cx('ui-nav-chev', isOpen && 'is-open')} /> : null}\n </button>\n {collapsed ? (\n <span className=\"ui-nav-tip\" role=\"tooltip\">\n {it.label}\n </span>\n ) : null}\n </div>,\n ];\n if (hasKids && isOpen) for (const c of kids) out.push(...row(c, true));\n return out;\n };\n\n const toggleLabel = collapsed ? tr('展開側邊欄') : tr('收合側邊欄');\n return (\n <aside className={cx('ui-sidenav', collapsed && 'is-collapsed', className)}>\n {brand ? <div className=\"ui-nav-brand\">{brand}</div> : null}\n <nav className=\"ui-nav-list\" aria-label={label || tr('主要導覽')}>\n <div ref={wrap} className=\"ui-nav-inner\">\n {bar.show ? (\n <span\n className=\"ui-nav-bar\"\n aria-hidden=\"true\"\n style={{ top: bar.top, bottom: bar.bottom, transform: moving ? 'scaleX(.7)' : 'none', transition: dropTransition('top', 'bottom', bar.down) }}\n />\n ) : null}\n {sections.map((sec, i) => (\n <React.Fragment key={i}>\n {i > 0 ? <div className=\"ui-nav-divider\" role=\"separator\" /> : null}\n {sec.items.flatMap((it) => row(it, false))}\n </React.Fragment>\n ))}\n </div>\n </nav>\n {onToggle ? (\n <button type=\"button\" className=\"ui-nav-collapse\" aria-label={toggleLabel} title={toggleLabel} onClick={onToggle}>\n <Icon name=\"sidebar-simple\" size={20} />\n </button>\n ) : null}\n </aside>\n );\n}\n","import { tr } from '../../i18n';\nimport { cx } from '../../internal/util';\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps {\n /** From the top level down; the last one is the current page. */\n items: BreadcrumbItem[];\n className?: string;\n}\n\n/** Where the page sits: links to each level, the current page last and not a link. */\nexport function Breadcrumb({ items, className }: BreadcrumbProps) {\n return (\n <nav className={cx('ui-crumb', className)} aria-label={tr('路徑')}>\n <ol>\n {items.map((it, i) => {\n const last = i === items.length - 1;\n return (\n <li key={i}>\n {last ? <span aria-current=\"page\">{it.label}</span> : it.href ? <a href={it.href}>{it.label}</a> : <span>{it.label}</span>}\n {last ? null : (\n <span className=\"ui-crumb-sep\" aria-hidden=\"true\">\n ›\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","import * as React from 'react';\nimport { Tooltip as Base } from '@base-ui/react/tooltip';\n\nexport interface TooltipProps {\n /** Short text, also announced as the trigger's description. Never the only place important information lives. */\n label: string;\n /** Preferred side; flips when there is no room. Default 'top'. */\n side?: 'top' | 'bottom';\n /** One focusable element that accepts a ref (a button, IconButton, Button, a link). */\n children: React.ReactElement;\n /** false: the label only repeats the trigger's own name (an IconButton's aria-label), so it is not added as its description. Default true. */\n describe?: boolean;\n}\n\n/** Dark label above the element (below when there is no room), with an arrow. Appears at once on hover and focus. */\nexport function Tooltip({ label, side = 'top', describe = true, children }: TooltipProps) {\n // Base UI tooltips are visual only; a hidden copy gives screen readers the description.\n const id = React.useId();\n return (\n <Base.Root>\n <Base.Trigger delay={0} render={children} aria-describedby={describe ? id : undefined} />\n {describe ? (\n <span id={id} hidden>\n {label}\n </span>\n ) : null}\n <Base.Portal>\n <Base.Positioner side={side} sideOffset={8} className=\"ui-tooltip-positioner\">\n <Base.Popup className=\"ui-tooltip\">\n {label}\n <Base.Arrow className=\"ui-tooltip-arrow\" />\n </Base.Popup>\n </Base.Positioner>\n </Base.Portal>\n </Base.Root>\n );\n}\n","import * as React from 'react';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport { IconOf, type IconSource } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\n\nexport interface IconButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** What the button does, a verb: 「刪除」「複製連結」. Becomes aria-label and the tooltip. */\n label: string;\n /** A built-in name such as 'trash', or custom path data. */\n icon: IconSource;\n /** false: no tooltip (when the label is already visible next to it). Default true. */\n tooltip?: boolean;\n ref?: React.Ref<HTMLButtonElement>;\n}\n\n/** A square icon-only button with a tooltip. */\nexport function IconButton({ label, icon, className, tooltip = true, ...native }: IconButtonProps) {\n const btn = (\n <button type=\"button\" {...native} className={cx('ui-iconbtn', className)} aria-label={label}>\n <IconOf icon={icon} />\n </button>\n );\n return tooltip ? (\n <Tooltip label={label} describe={false}>\n {btn}\n </Tooltip>\n ) : (\n btn\n );\n}\n","import type * as React from 'react';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { IS_MAC, SHORTCUT, cx } from '../../internal/util';\nimport { Breadcrumb, type BreadcrumbItem } from '../Breadcrumb/Breadcrumb';\nimport { IconButton } from '../IconButton/IconButton';\n\nexport interface TopBarProps {\n /** The page title, shown once: either here or as the page's own heading. */\n title?: string;\n breadcrumb?: BreadcrumbItem[];\n /** Opens search (CommandPalette). false hides the search entry. */\n onSearch?: (() => void) | false;\n /** Default 「搜尋」. */\n searchLabel?: string;\n /** Right side: NotificationBell, ProjectSwitcher, the account menu. */\n children?: React.ReactNode;\n className?: string;\n}\n\n/** The bar at the top of a dashboard page: title or breadcrumb on the left, search and tools on the right. */\nexport function TopBar({ title, breadcrumb, onSearch, searchLabel, children, className }: TopBarProps) {\n return (\n <header className={cx('ui-topbar', className)}>\n {title ? <h1 className=\"ui-topbar-title\">{title}</h1> : null}\n {breadcrumb ? <Breadcrumb items={breadcrumb} /> : null}\n <div className=\"ui-topbar-end\">\n {onSearch !== false ? (\n <>\n <button type=\"button\" className=\"ui-search\" data-tour=\"search\" onClick={onSearch} aria-keyshortcuts={IS_MAC ? 'Meta+K' : 'Control+K'}>\n <Icon name=\"magnifying-glass\" size={16} />\n <span>{searchLabel || tr('搜尋')}</span>\n <kbd>{SHORTCUT}</kbd>\n </button>\n <IconButton className=\"ui-search-icon\" data-tour=\"search\" icon=\"magnifying-glass\" label={tr('搜尋({k})', { k: SHORTCUT })} onClick={onSearch} />\n </>\n ) : null}\n {children}\n </div>\n </header>\n );\n}\n","import * as React from 'react';\nimport { tr } from '../../i18n';\nimport { IconOf, type IconSource } from '../../icons/Icon';\nimport { dropTransition } from '../../motion';\nimport { cx } from '../../internal/util';\n\nexport interface MobileTab {\n id: string;\n label: string;\n icon: IconSource;\n}\n\nexport interface MobileTabBarProps {\n /** 3 to 5 top-level pages. */\n items: MobileTab[];\n value: string;\n onChange?: (id: string) => void;\n /** Default 「主要導覽」. */\n label?: string;\n className?: string;\n}\n\n/** Bottom navigation on phones, in place of the sidebar. The pill slides like a droplet; the selected icon is filled. */\nexport function MobileTabBar({ items, value, onChange, label, className }: MobileTabBarProps) {\n const idx = Math.max(\n 0,\n items.findIndex((t) => t.id === value),\n );\n const [forward, setForward] = React.useState(true);\n const w = 100 / Math.max(1, items.length);\n return (\n <nav className={cx('ui-tabbar', className)} aria-label={label || tr('主要導覽')}>\n <span\n className=\"ui-tabbar-pill\"\n aria-hidden=\"true\"\n style={{\n left: `calc(${idx * w + w / 2}% - 28px)`,\n right: `calc(${100 - idx * w - w / 2}% - 28px)`,\n transition: dropTransition('left', 'right', forward),\n }}\n />\n {items.map((t, i) => (\n <button\n key={t.id}\n type=\"button\"\n className={cx('ui-tabbar-item', i === idx && 'is-selected')}\n aria-label={t.label}\n aria-current={i === idx ? 'page' : undefined}\n onClick={() => {\n // The selected tab still reports a press: a tab like 「更多」 opens something each time.\n if (i !== idx) setForward(i > idx);\n onChange?.(t.id);\n }}\n >\n <IconOf icon={t.icon} size={22} filled={i === idx} />\n </button>\n ))}\n </nav>\n );\n}\n","/* Development-only warnings for misuse an agent or a person is likely to make. Each message gives the\n cause and the fix. Off in production builds (the bundler replaces NODE_ENV); the single-file build (bundle.js) keeps them on. */\n\ndeclare const process: { env: { NODE_ENV?: string } };\ndeclare const __UI_DEV__: boolean | undefined;\n\n// Bundlers replace process.env.NODE_ENV; without a bundler there is no process, and the warnings stay off.\nconst DEV =\n typeof __UI_DEV__ === 'boolean'\n ? __UI_DEV__\n : (() => {\n try {\n return process.env.NODE_ENV !== 'production';\n } catch {\n return false;\n }\n })();\n\nconst seen = new Set<string>();\n\n/** Logs once per message when cond is true. */\nexport function devWarn(cond: unknown, component: string, message: string): void {\n if (!DEV || !cond) return;\n const text = `[@seanyeh77/ui] ${component}: ${message}`;\n if (seen.has(text)) return;\n seen.add(text);\n console.warn(text);\n}\n","import * as React from 'react';\nimport { IconOf, Spinner, type IconSource } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { devWarn } from '../../internal/dev';\nimport { tr } from '../../i18n';\nimport { Dialog } from '../Dialog/Dialog';\n\ninterface ButtonBase extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** A verb: 儲存, 刪除, 匯出. No 「確定」or 「好」. */\n children: React.ReactNode;\n /** Shows a spinner and disables the button; pair it with a progressive label such as 儲存中. */\n loading?: boolean;\n /** Leading icon: a built-in name such as 'plus', or custom path data. */\n icon?: IconSource;\n ref?: React.Ref<HTMLButtonElement>;\n}\n\n/** What the confirm dialog of a danger button says. */\nexport interface DangerConfirm {\n /** Names the object: 「刪除 api-gateway?」. */\n title: string;\n /** What is lost and whether it can be undone. */\n body?: React.ReactNode;\n /** The danger button's label in the dialog. Default: the button's own label. */\n confirmLabel?: string;\n}\n\nexport type ButtonProps =\n | (ButtonBase & {\n /** primary: the one main action of a section. secondary (default): everything else. */\n variant?: 'primary' | 'secondary';\n })\n | (ButtonBase & {\n /** Destructive. Must be confirmed: pass `confirm`, or `confirmed` when this button is itself inside the confirm Dialog. */\n variant: 'danger';\n /** Opens a Dialog first; onClick runs only after the person confirms. */\n confirm: DangerConfirm;\n confirmed?: never;\n })\n | (ButtonBase & {\n variant: 'danger';\n /** This button is the confirming button of a Dialog (or DangerZone), so it runs at once. */\n confirmed: true;\n confirm?: never;\n });\n\n/** Buttons. Labels are verbs; one primary per section; danger actions are always confirmed. */\nexport function Button(props: ButtonProps) {\n const { variant = 'secondary', loading, icon, className, children, disabled, onClick, ...other } = props;\n const { confirm, confirmed, ...native } = other as typeof other & { confirm?: DangerConfirm; confirmed?: boolean };\n const [asking, setAsking] = React.useState(false);\n devWarn(\n variant === 'danger' && !confirm && !confirmed,\n 'Button',\n 'a danger button needs confirm={{ title }} (or confirmed when it is the button inside the confirm Dialog).',\n );\n const ownEvent = React.useRef<{ event: React.MouseEvent<HTMLButtonElement>; button: HTMLButtonElement } | null>(null);\n const button = (\n <button\n type=\"button\"\n {...native}\n className={cx('ui-btn', 'ui-btn-' + variant, loading && 'is-loading', className)}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n onClick={(e) => {\n if (confirm) {\n // A submit button must not submit before the person confirms.\n e.preventDefault();\n ownEvent.current = { event: e, button: e.currentTarget };\n setAsking(true);\n } else onClick?.(e);\n }}\n >\n {loading ? <Spinner /> : icon ? <IconOf icon={icon} /> : null}\n {children}\n </button>\n );\n if (!confirm) return button;\n return (\n <>\n {button}\n <Dialog\n open={asking}\n onClose={() => setAsking(false)}\n title={confirm.title}\n tone=\"danger\"\n confirmLabel={confirm.confirmLabel ?? (typeof children === 'string' ? children : tr('刪除'))}\n onConfirm={() => {\n setAsking(false);\n const own = ownEvent.current;\n if (!own) return;\n onClick?.(own.event);\n if (own.button.type === 'submit') own.button.form?.requestSubmit(own.button);\n }}\n >\n {confirm.body}\n </Dialog>\n </>\n );\n}\n","import * as React from 'react';\nimport { Dialog as Base } from '@base-ui/react/dialog';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { devWarn } from '../../internal/dev';\nimport { Button } from '../Button/Button';\n\nexport interface DialogProps {\n /** Shows the dialog over a blurred backdrop, with focus trapped inside and Esc to close.\n * Required unless modal={false}. */\n open?: boolean;\n /** Called on Esc, a press on the backdrop, × and the cancel button. */\n onClose?: () => void;\n /** States the decision; may be a question: 「刪除 api-gateway?」. */\n title: string;\n /** What happens and whether it can be undone, at most 2 short sentences. */\n children?: React.ReactNode;\n /** The confirming button's label, a verb: 刪除, 發布. With onConfirm, the dialog draws its own buttons. */\n confirmLabel?: string;\n onConfirm?: () => void;\n /** Default 「取消」. */\n cancelLabel?: string;\n /** danger: the confirming button is red. */\n tone?: 'default' | 'danger';\n /** Spinner on the confirming button while the action runs. */\n confirmLoading?: boolean;\n /** Your own buttons instead of confirmLabel: secondary first, primary last. */\n actions?: React.ReactNode;\n className?: string;\n /** @deprecated the id is generated. */\n titleId?: string;\n /** false: draw the panel inline, as a static preview in docs. Without it, pass open. */\n modal?: false;\n}\n\n/** A centered 400 px dialog for a decision. Secondary button left, primary right. */\nexport function Dialog(props: DialogProps) {\n const { open, onClose, title, children, confirmLabel, onConfirm, cancelLabel, tone = 'default', confirmLoading, actions, className } = props;\n devWarn((confirmLabel !== undefined) !== !!onConfirm, 'Dialog', 'confirmLabel and onConfirm go together; pass both, or pass actions.');\n devWarn(\n open === undefined && props.modal !== false,\n 'Dialog',\n 'pass open={…} (and onClose) to show a dialog; rendering it conditionally without open draws a static panel with no focus trap or Esc. Use modal={false} for a static preview.',\n );\n devWarn(open !== undefined && !onClose, 'Dialog', 'an open dialog needs onClose, or Esc and the backdrop cannot close it.');\n const footer =\n actions ??\n (confirmLabel && onConfirm ? (\n <>\n <Button onClick={onClose}>{cancelLabel ?? tr('取消')}</Button>\n {tone === 'danger' ? (\n <Button variant=\"danger\" confirmed loading={confirmLoading} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n ) : (\n <Button variant=\"primary\" loading={confirmLoading} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n )}\n </>\n ) : null);\n const id = React.useId();\n const inline = open === undefined;\n const closeIcon = <Icon name=\"x\" />;\n const head = (\n <div className=\"ui-dialog-head\">\n {inline ? (\n <div id={id} className=\"ui-dialog-title\">\n {title}\n </div>\n ) : (\n <Base.Title className=\"ui-dialog-title\">{title}</Base.Title>\n )}\n {onClose && inline ? (\n <button type=\"button\" className=\"ui-dialog-close\" aria-label={tr('關閉')} onClick={onClose}>\n {closeIcon}\n </button>\n ) : onClose ? (\n <Base.Close className=\"ui-dialog-close\" aria-label={tr('關閉')}>\n {closeIcon}\n </Base.Close>\n ) : null}\n </div>\n );\n const content = (\n <>\n {head}\n {children ? <div className=\"ui-dialog-body\">{children}</div> : null}\n {footer ? <div className=\"ui-dialog-actions\">{footer}</div> : null}\n </>\n );\n\n if (inline) {\n // A static panel for previews and docs: no backdrop, no focus handling.\n return (\n <div className={cx('ui-dialog', className)} role=\"dialog\" aria-labelledby={id}>\n {content}\n </div>\n );\n }\n return (\n <Base.Root open={open} onOpenChange={(next) => !next && onClose?.()}>\n <Base.Portal>\n <Base.Backdrop className=\"ui-backdrop\" />\n <Base.Viewport className=\"ui-dialog-viewport\">\n <Base.Popup className={cx('ui-dialog', className)}>{content}</Base.Popup>\n </Base.Viewport>\n </Base.Portal>\n </Base.Root>\n );\n}\n","import * as React from 'react';\nimport { Dialog as Base } from '@base-ui/react/dialog';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { Dialog } from '../Dialog/Dialog';\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n title: string;\n /** Footer buttons: secondary first, primary last. Pass a function to get requestClose for your 取消 button: it\n * asks before discarding unsaved changes, like ✕ and Esc. */\n actions?: React.ReactNode | ((requestClose: () => void) => React.ReactNode);\n /** Unsaved changes: closing asks 「放棄未儲存的變更?」 first. */\n dirty?: boolean;\n /** px. Default 400. */\n width?: number;\n confirmTitle?: string;\n confirmText?: string;\n children?: React.ReactNode;\n}\n\n/** A 400 px panel from the right for editing one item without leaving the page. */\nexport function Drawer({ open, onClose, title, actions, dirty, width, confirmTitle, confirmText, children }: DrawerProps) {\n const [asking, setAsking] = React.useState(false);\n const request = () => (dirty ? setAsking(true) : onClose());\n const panel = React.useRef<HTMLDivElement>(null);\n // Focus the first field (or action), not the close button.\n const firstField = () =>\n panel.current?.querySelector<HTMLElement>(\n '.ui-drawer-body :is(input, textarea, select, button, [tabindex]):not([disabled], [tabindex=\"-1\"]), .ui-drawer-foot button:not([disabled])',\n ) ?? true;\n return (\n <Base.Root open={open} onOpenChange={(next) => !next && request()}>\n <Base.Portal>\n <Base.Backdrop className=\"ui-drawer-backdrop\" />\n <Base.Popup ref={panel} initialFocus={firstField} className=\"ui-drawer\" style={width ? { width } : undefined}>\n <div className=\"ui-drawer-head\">\n <Base.Title className=\"ui-drawer-title\">{title}</Base.Title>\n <button type=\"button\" className=\"ui-drawer-close ui-dialog-close\" aria-label={tr('關閉')} onClick={request}>\n <Icon name=\"x\" />\n </button>\n </div>\n <div className=\"ui-drawer-body\">{children}</div>\n {actions ? <div className=\"ui-drawer-foot\">{typeof actions === 'function' ? actions(request) : actions}</div> : null}\n <Dialog\n open={asking}\n onClose={() => setAsking(false)}\n title={confirmTitle || tr('放棄未儲存的變更?')}\n tone=\"danger\"\n cancelLabel={tr('繼續編輯')}\n confirmLabel={tr('放棄')}\n onConfirm={() => {\n setAsking(false);\n onClose();\n }}\n >\n {confirmText || tr('關閉後,剛才的修改不會保留。')}\n </Dialog>\n </Base.Popup>\n </Base.Portal>\n </Base.Root>\n );\n}\n","import * as React from 'react';\nimport { SideNav, type NavItem, type NavSection } from '../SideNav/SideNav';\nimport { TopBar } from '../TopBar/TopBar';\nimport { MobileTabBar, type MobileTab } from '../MobileTabBar/MobileTabBar';\nimport { Drawer } from '../Drawer/Drawer';\nimport { tr } from '../../i18n';\nimport type { BreadcrumbItem } from '../Breadcrumb/Breadcrumb';\nimport { cx, store, useMedia, useNarrow } from '../../internal/util';\nimport { devWarn } from '../../internal/dev';\n\nexport interface AppShellProps {\n /** Sidebar groups. On phones, top-level items with an icon become bottom tabs; pages they cannot reach go under 「更多」. */\n nav: NavSection[];\n /** Id of the current page. */\n value: string;\n onNavigate: (id: string) => void;\n /** Logo or product name at the top of the sidebar. */\n brand?: React.ReactNode;\n /** The page title, shown once in the top bar. Do not repeat it as a heading in the page. */\n title?: string;\n breadcrumb?: BreadcrumbItem[];\n /** Opens search (CommandPalette). */\n onSearch?: () => void;\n /** Right side of the top bar: NotificationBell, ProjectSwitcher, the account menu. */\n actions?: React.ReactNode;\n /** The page: Cards and sections, 32 px apart. */\n children: React.ReactNode;\n className?: string;\n}\n\nconst COLLAPSE_KEY = 'ui-nav-collapsed';\nconst MORE = '\\u0000more';\n\n/** The dashboard frame: sidebar (240 px, 72 px collapsed and on tablets), top bar, and bottom tabs on phones.\n * The top bar hides while scrolling down and returns when scrolling up. */\nexport function AppShell({ nav, value, onNavigate, brand, title, breadcrumb, onSearch, actions, children, className }: AppShellProps) {\n const phone = useNarrow();\n const tablet = useMedia('(min-width: 600px) and (max-width: 959px)');\n const [userCollapsed, setUserCollapsed] = React.useState(() => store(COLLAPSE_KEY) === '1');\n const collapsed = tablet || userCollapsed;\n const top = nav.flatMap((s) => s.items);\n const parentOf = (id: string) => top.find((it) => it.children?.some((c) => c.id === id));\n // Phones: top-level items with an icon become tabs (a group opens its first page).\n // When some page is not reachable that way, the last tab becomes 「更多」 and opens the whole nav.\n const withIcon = top.filter((it): it is NavItem & { icon: NonNullable<NavItem['icon']> } => !!it.icon);\n const unreachable = top.some((it) => !it.icon || (it.children?.length ?? 0) > 1) || withIcon.length > 5;\n const tabs: MobileTab[] = withIcon.slice(0, unreachable ? 4 : 5).map((it) => ({ id: it.id, label: it.label, icon: it.icon }));\n if (unreachable) tabs.push({ id: MORE, label: tr('更多'), icon: 'dots-three' });\n const [moreOpen, setMoreOpen] = React.useState(false);\n devWarn(phone && withIcon.length < 2, 'AppShell', 'phones show the top-level nav items as bottom tabs; give at least 2 of them an icon.');\n const current = parentOf(value)?.id ?? value;\n const tabValue = tabs.some((t) => t.id === current) ? current : MORE;\n const onTab = (id: string) => {\n if (id === MORE) return setMoreOpen(true);\n if (id === current) return;\n const item = top.find((it) => it.id === id);\n onNavigate(item?.children?.[0]?.id ?? id);\n };\n\n // Hide the top bar while scrolling down, show it again on the way up.\n const main = React.useRef<HTMLElement>(null);\n const [hidden, setHidden] = React.useState(false);\n React.useEffect(() => {\n const el = main.current;\n if (!el) return;\n let last = el.scrollTop;\n const onScroll = () => {\n const y = el.scrollTop;\n if (Math.abs(y - last) < 8) return;\n setHidden(y > last && y > 64);\n last = y;\n };\n el.addEventListener('scroll', onScroll, { passive: true });\n return () => el.removeEventListener('scroll', onScroll);\n }, []);\n\n return (\n <div className={cx('ui-shell', phone && 'is-phone', className)}>\n {phone ? null : (\n <SideNav\n sections={nav}\n value={value}\n onChange={onNavigate}\n brand={brand}\n collapsed={collapsed}\n onToggle={\n tablet\n ? undefined\n : () => {\n store(COLLAPSE_KEY, userCollapsed ? '0' : '1');\n setUserCollapsed(!userCollapsed);\n }\n }\n />\n )}\n <div className=\"ui-shell-body\">\n <TopBar className={cx('ui-shell-top', hidden && 'is-hidden')} title={title} breadcrumb={breadcrumb} onSearch={onSearch ?? false}>\n {actions}\n </TopBar>\n <main ref={main} className=\"ui-shell-main\">\n {children}\n </main>\n {phone && tabs.length ? <MobileTabBar items={tabs} value={tabValue} onChange={onTab} /> : null}\n {phone ? (\n <Drawer open={moreOpen} onClose={() => setMoreOpen(false)} title={tr('全部頁面')}>\n <SideNav\n className=\"ui-shell-allnav\"\n sections={nav}\n value={value}\n onChange={(id) => {\n setMoreOpen(false);\n onNavigate(id);\n }}\n />\n </Drawer>\n ) : null}\n </div>\n </div>\n );\n}\n","import type * as React from 'react';\nimport { cx } from '../../internal/util';\n\nexport interface GridProps {\n /** Columns from 1280 px. Under 600 px there is one column; in between, at most 2. Default 3. */\n columns?: 1 | 2 | 3 | 4 | 6;\n children: React.ReactNode;\n className?: string;\n}\n\n/** Equal columns for Cards and KpiCards, 24 px apart. Use it instead of writing your own CSS grid. */\nexport function Grid({ columns = 3, children, className }: GridProps) {\n return <div className={cx('ui-grid', 'is-' + columns, className)}>{children}</div>;\n}\n\nexport interface PageProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/** The content of a page: sections and Grids stacked 32 px apart. */\nexport function Page({ children, className }: PageProps) {\n return <div className={cx('ui-page', className)}>{children}</div>;\n}\n","import { reduced, store } from './internal/util';\n\n/* Theme and accent color. 'auto' follows prefers-color-scheme; colors cross-fade for 300 ms on a change.\n The choice is kept in localStorage, so initTheme() on the next visit restores it. */\n\nexport type ThemeSetting = 'auto' | 'light' | 'dark';\n\nconst THEME_KEY = 'ui-theme';\nexport const ACCENT_KEY = 'ui-accent';\nexport const DEFAULT_ACCENT = '#2457d6';\n\nconst isSetting = (v: string | null): v is ThemeSetting => v === 'auto' || v === 'light' || v === 'dark';\n\n/** The stored theme setting, 'auto' when there is none. */\nexport function storedTheme(): ThemeSetting {\n const v = store(THEME_KEY);\n return isSetting(v) ? v : 'auto';\n}\n\nfunction resolveTheme(t: ThemeSetting): 'light' | 'dark' {\n if (t !== 'auto') return t;\n return typeof window.matchMedia === 'function' && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n}\n\nlet fadeTimer: ReturnType<typeof setTimeout> | undefined;\n\n/** Switches the theme on <html data-theme> and remembers it. */\nexport function setTheme(t: ThemeSetting): void {\n const root = document.documentElement;\n if (!reduced()) {\n root.classList.add('ui-theme-fade');\n clearTimeout(fadeTimer);\n fadeTimer = setTimeout(() => root.classList.remove('ui-theme-fade'), 320);\n }\n root.setAttribute('data-theme', resolveTheme(t));\n root.setAttribute('data-theme-setting', t);\n store(THEME_KEY, t);\n // The accent's text and soft colors depend on the theme.\n setAccent(store(ACCENT_KEY) || DEFAULT_ACCENT, true);\n}\n\nconst hexRgb = (x: string): number[] => [1, 3, 5].map((i) => parseInt(x.slice(i, i + 2), 16));\n\nfunction mixHex(a: string, b: string, t: number): string {\n const p = hexRgb(a);\n const q = hexRgb(b);\n return (\n '#' +\n p\n .map((v, i) =>\n Math.round(v + (q[i] - v) * t)\n .toString(16)\n .padStart(2, '0'),\n )\n .join('')\n );\n}\n\nfunction lum(x: string): number {\n const w = [0.2126, 0.7152, 0.0722];\n return hexRgb(x)\n .map((v) => {\n v /= 255;\n return v <= 0.03928 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4;\n })\n .reduce((s, v, i) => s + v * w[i], 0);\n}\n\nfunction contrast(a: string, b: string): number {\n const x = lum(a);\n const y = lum(b);\n return (Math.max(x, y) + 0.05) / (Math.min(x, y) + 0.05);\n}\n\n/** Derives every accent token from one color (自訂強調色的換算 in docs/guidelines.md).\n * Returns false for anything but #rrggbb. quiet: apply without storing. */\nexport function setAccent(hex: string, quiet = false): boolean {\n if (!/^#[0-9a-fA-F]{6}$/.test(hex)) return false;\n hex = hex.toLowerCase();\n const root = document.documentElement;\n const dark = root.getAttribute('data-theme') === 'dark';\n const cs = getComputedStyle(root);\n const surface = (cs.getPropertyValue('--surface') || (dark ? '#393530' : '#ffffff')).trim();\n const bg = (cs.getPropertyValue('--bg') || (dark ? '#2f2a25' : '#fcfbfb')).trim();\n // In dark, lighten the text color until it reads on surface (4.5:1).\n let text = hex;\n if (dark) for (let t = 0; t <= 1 && contrast(text, surface) < 4.5; t += 0.05) text = mixHex(hex, '#ffffff', t);\n const ink = '#171512';\n const vars: Record<string, string> = {\n '--accent': hex,\n '--accent-hover': mixHex(hex, '#000000', 0.12),\n '--accent-press': mixHex(hex, '#000000', 0.22),\n '--accent-soft': dark ? mixHex(bg.startsWith('#') ? bg : '#2f2a25', hex, 0.22) : mixHex('#ffffff', hex, 0.12),\n '--accent-text': text,\n '--on-accent': contrast('#ffffff', hex) >= contrast(ink, hex) ? '#ffffff' : ink,\n '--focus-ring': `rgba(${hexRgb(hex).join(', ')}, 0.3)`,\n };\n for (const [k, v] of Object.entries(vars)) root.style.setProperty(k, v);\n if (!quiet) store(ACCENT_KEY, hex);\n return true;\n}\n\nlet following = false;\n\n/** Applies the stored theme and accent; call once when the page starts. */\nexport function initTheme(): void {\n setTheme(storedTheme());\n if (following || typeof window.matchMedia !== 'function') return;\n following = true;\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {\n if (storedTheme() === 'auto') setTheme('auto');\n });\n}\n","import * as React from 'react';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx, store } from '../../internal/util';\nimport { ACCENT_KEY, DEFAULT_ACCENT, setAccent } from '../../theme';\n\nconst SWATCHES: [name: string, hex: string][] = [\n ['藍', '#2457d6'],\n ['靛', '#5b4fd6'],\n ['紫', '#8a4fd6'],\n ['桃紅', '#c2407a'],\n ['紅', '#cd3a2f'],\n ['橘', '#c4600f'],\n ['綠', '#1b8a4d'],\n ['青', '#0f8a85'],\n];\nconst HEX = /^#[0-9a-fA-F]{6}$/;\n\nexport interface AccentPickerProps {\n /** Controlled #rrggbb. Without it, the picker reads and sets the stored accent itself. */\n value?: string;\n /** Without it, picking applies the color with setAccent. */\n onChange?: (hex: string) => void;\n /** Default 「強調色」. */\n label?: string;\n className?: string;\n}\n\n/** 8 swatches plus a hex field for any color. */\nexport function AccentPicker({ value, onChange, label, className }: AccentPickerProps) {\n const [own, setOwn] = React.useState(() => (value || store(ACCENT_KEY) || DEFAULT_ACCENT).toLowerCase());\n const [hexIn, setHexIn] = React.useState('');\n const cur = (value || own).toLowerCase();\n const pick = (c: string) => {\n setOwn(c);\n if (onChange) onChange(c);\n else setAccent(c);\n };\n const bad = !!hexIn && !HEX.test(hexIn);\n return (\n <div className={cx('ui-accentpick', className)}>\n <div role=\"radiogroup\" aria-label={label || tr('強調色')} className=\"ui-accentpick-swatches\">\n {SWATCHES.map(([name, hex]) => {\n const on = cur === hex;\n return (\n <button\n key={hex}\n type=\"button\"\n role=\"radio\"\n aria-checked={on}\n aria-label={tr(name)}\n title={tr(name)}\n className={cx('ui-swatch', on && 'is-on')}\n style={{ background: hex, color: hex }}\n onClick={() => {\n setHexIn('');\n pick(hex);\n }}\n >\n {on ? <Icon name=\"check\" size={14} /> : null}\n </button>\n );\n })}\n </div>\n <div className=\"ui-accentpick-hex\">\n <span className=\"ui-accentpick-preview\" style={{ background: !bad && hexIn ? hexIn : cur }} />\n <input\n className={cx('ui-input', bad && 'is-invalid')}\n aria-label={tr('自訂強調色(色碼)')}\n aria-invalid={bad || undefined}\n value={hexIn}\n placeholder={cur}\n onChange={(e) => {\n const x = e.target.value.trim();\n setHexIn(x);\n if (HEX.test(x)) pick(x.toLowerCase());\n }}\n />\n <span className={cx('ui-field-hint', bad && 'is-error')}>{bad ? tr('色碼格式不正確,例如 #2457d6') : tr('輸入 # 加 6 碼')}</span>\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { Menu as Base } from '@base-ui/react/menu';\nimport { tr } from '../../i18n';\nimport { IconOf, type IconSource } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { Dialog } from '../Dialog/Dialog';\nimport type { DangerConfirm } from '../Button/Button';\n\ninterface MenuItemBase {\n /** A verb: 重新命名, 複製連結. */\n label: string;\n icon?: IconSource;\n /** Shown at the right, e.g. ⌘D. */\n shortcut?: string;\n disabled?: boolean;\n onSelect?: () => void;\n}\n\nexport type MenuItem =\n | (MenuItemBase & { danger?: false })\n | (MenuItemBase & {\n /** Red, last, after a divider. Must be confirmed: onSelect runs after the dialog. */\n danger: true;\n confirm: DangerConfirm;\n });\n\nexport interface MenuProps {\n items: MenuItem[];\n /** aria-label and tooltip of the ⋯ button. Default 「更多操作」. */\n label?: string;\n /** Default 'dots-three'. */\n icon?: IconSource;\n /** 'end' lines up right edges (default); flips when the menu would leave the window. */\n align?: 'end' | 'start';\n /** Extra class on the ⋯ button. */\n triggerClassName?: string;\n}\n\n/** The ⋯ button and its list of actions. Danger items go last, in red, after a divider, and are confirmed. */\nexport function Menu({ items, label, icon = 'dots-three', align = 'end', triggerClassName }: MenuProps) {\n const [asking, setAsking] = React.useState<Extract<MenuItem, { danger: true }> | null>(null);\n const normal = items.filter((it) => !it.danger);\n const danger = items.filter((it): it is Extract<MenuItem, { danger: true }> => !!it.danger);\n const row = (it: MenuItem) => (\n <>\n {it.icon ? <IconOf icon={it.icon} size={16} /> : <span className=\"ui-menu-noicon\" />}\n <span className=\"ui-menu-label\">{it.label}</span>\n {it.shortcut ? <kbd className=\"ui-menu-kbd\">{it.shortcut}</kbd> : null}\n </>\n );\n return (\n <>\n <Base.Root>\n <Base.Trigger className={cx('ui-iconbtn', 'ui-menu-trigger', triggerClassName)} aria-label={label || tr('更多操作')}>\n <IconOf icon={icon} size={20} />\n </Base.Trigger>\n <Base.Portal>\n <Base.Positioner className=\"ui-float\" side=\"bottom\" align={align} sideOffset={4}>\n <Base.Popup className=\"ui-menu\">\n {normal.map((it, i) => (\n <Base.Item key={i} disabled={it.disabled} className=\"ui-menu-item\" onClick={() => it.onSelect?.()}>\n {row(it)}\n </Base.Item>\n ))}\n {danger.length && normal.length ? <Base.Separator className=\"ui-menu-sep\" /> : null}\n {danger.map((it, i) => (\n <Base.Item key={'d' + i} disabled={it.disabled} className=\"ui-menu-item is-danger\" onClick={() => setAsking(it)}>\n {row(it)}\n </Base.Item>\n ))}\n </Base.Popup>\n </Base.Positioner>\n </Base.Portal>\n </Base.Root>\n {danger.length ? (\n <Dialog\n open={!!asking}\n onClose={() => setAsking(null)}\n title={asking ? (asking.confirm?.title ?? asking.label + '?') : ''}\n tone=\"danger\"\n confirmLabel={asking?.confirm?.confirmLabel ?? asking?.label ?? ''}\n onConfirm={() => {\n const it = asking;\n setAsking(null);\n it?.onSelect?.();\n }}\n >\n {asking?.confirm?.body}\n </Dialog>\n ) : null}\n </>\n );\n}\n","import { tr } from '../../i18n';\nimport type { IconSource } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { Button, type DangerConfirm } from '../Button/Button';\nimport { Menu, type MenuItem } from '../Menu/Menu';\n\ninterface ActionBase {\n /** A verb. */\n label: string;\n onClick?: () => void;\n icon?: IconSource;\n disabled?: boolean;\n}\n\nexport type ActionBarAction =\n | (ActionBase & {\n /** The one primary action. Default: the first action. */\n primary?: boolean;\n danger?: false;\n })\n | (ActionBase & {\n /** Red in the 「更多」 menu, confirmed first. */\n danger: true;\n confirm: DangerConfirm;\n primary?: false;\n });\n\nexport interface ActionBarProps {\n actions: ActionBarAction[];\n className?: string;\n}\n\n/** A card's actions in a row. Under 600 px the primary one fills the width and the rest go into 「更多」. */\nexport function ActionBar({ actions, className }: ActionBarProps) {\n const main = actions.find((a) => a.primary) ?? actions.find((a) => !a.danger);\n const others = actions.filter((a) => a !== main);\n const button = (a: ActionBarAction, i: number, wide: boolean) =>\n a.danger ? (\n <Button key={i} variant=\"danger\" confirm={a.confirm} icon={a.icon} onClick={a.onClick} disabled={a.disabled}>\n {a.label}\n </Button>\n ) : (\n <Button\n key={i}\n variant={a === main ? 'primary' : 'secondary'}\n icon={a.icon}\n onClick={a.onClick}\n disabled={a.disabled}\n className={wide ? 'ui-actbar-main' : undefined}\n >\n {a.label}\n </Button>\n );\n const menuItems = others.map((a): MenuItem =>\n a.danger\n ? { label: a.label, icon: a.icon, onSelect: a.onClick, disabled: a.disabled, danger: true, confirm: a.confirm }\n : { label: a.label, icon: a.icon, onSelect: a.onClick, disabled: a.disabled },\n );\n return (\n <div className={cx('ui-actbar', className)}>\n <div className=\"ui-actbar-wide\">{(main ? [main, ...others] : others).map((a, i) => button(a, i, false))}</div>\n <div className=\"ui-actbar-narrow\">\n {main ? button(main, 0, true) : null}\n {others.length ? <Menu label={tr('更多操作')} triggerClassName=\"ui-actbar-more\" items={menuItems} /> : null}\n </div>\n </div>\n );\n}\n","import type * as React from 'react';\nimport { tr } from '../../i18n';\nimport { Icon, type CustomIcon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\n\nexport type AlertTone = 'info' | 'success' | 'warning' | 'danger';\n\nconst ALERT_ICONS: Record<AlertTone, CustomIcon> = {\n info: 'M12 3a9 9 0 1 0 0 18a9 9 0 1 0 0-18zM12 11v5M12 7.5v.5',\n success: 'M5 12.5l4.5 4.5L19 7',\n warning: 'M12 4l9 16H3zM12 10v4M12 17v.5',\n danger: 'M12 3a9 9 0 1 0 0 18a9 9 0 1 0 0-18zM12 8v5M12 16.5v.5',\n};\n\nexport interface AlertProps {\n /** Default 'info'. danger is announced at once (role alert). */\n tone?: AlertTone;\n title?: string;\n /** The cause and the fix, at most 2 short sentences. */\n children?: React.ReactNode;\n /** A verb, such as 重試. */\n actionLabel?: string;\n onAction?: () => void;\n /** Adds × for info and success; warning and danger stay until the problem is solved. */\n onDismiss?: () => void;\n className?: string;\n}\n\n/** A message inside the page with a colored bar and icon. */\nexport function Alert({ tone = 'info', title, children, actionLabel, onAction, onDismiss, className }: AlertProps) {\n const t = ALERT_ICONS[tone] ? tone : 'info';\n const canClose = (t === 'info' || t === 'success') && onDismiss;\n return (\n <div className={cx('ui-alert', 'ui-alert-' + t, className)} role={t === 'danger' ? 'alert' : 'status'}>\n <Icon d={ALERT_ICONS[t]} className=\"ui-alert-icon\" />\n <div className=\"ui-alert-content\">\n {title ? <div className=\"ui-alert-title\">{title}</div> : null}\n {children ? <div className=\"ui-alert-body\">{children}</div> : null}\n </div>\n {actionLabel ? (\n <button type=\"button\" className=\"ui-btn ui-btn-secondary ui-alert-action\" onClick={onAction}>\n {actionLabel}\n </button>\n ) : null}\n {canClose ? (\n <button type=\"button\" className=\"ui-alert-close\" aria-label={tr('關閉提示')} onClick={onDismiss}>\n <Icon name=\"x\" size={16} />\n </button>\n ) : null}\n </div>\n );\n}\n","import type * as React from 'react';\nimport { tr } from '../../i18n';\nimport { cx } from '../../internal/util';\n\nexport type BadgeStatus = 'draft' | 'doing' | 'review' | 'done' | 'fail';\n\nconst STATUS: Record<BadgeStatus, { label: string; fill: string }> = {\n draft: { label: '草稿', fill: '' },\n doing: { label: '進行中', fill: 'M12 4a8 8 0 0 1 0 16z' },\n review: { label: '審核中', fill: 'M12 4a8 8 0 0 1 8 8h-8z' },\n done: { label: '完成', fill: 'M12 4a8 8 0 1 1 0 16a8 8 0 1 1 0-16z' },\n fail: { label: '失敗', fill: 'M12 4a8 8 0 1 1 0 16a8 8 0 1 1 0-16z' },\n};\n\nexport interface BadgeProps {\n status: BadgeStatus;\n /** 'dot' on cards: a mark and colored text, no chip. Default 'chip'. */\n variant?: 'chip' | 'dot';\n /** Default: the status name (草稿, 進行中, 審核中, 完成, 失敗). */\n children?: React.ReactNode;\n className?: string;\n}\n\n/** Status of an item. The mark's shape carries the status too, so it never depends on color alone. */\nexport function Badge({ status, variant = 'chip', children, className }: BadgeProps) {\n const st = STATUS[status] ? status : 'draft';\n return (\n <span className={cx('ui-badge', 'ui-badge-' + st, variant === 'dot' && 'is-dot', className)}>\n <svg className=\"ui-badge-mark\" width={15} height={15} viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx={12} cy={12} r={8} fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} />\n {STATUS[st].fill ? <path d={STATUS[st].fill} fill=\"currentColor\" /> : null}\n </svg>\n <span className=\"ui-badge-text\">{children || tr(STATUS[st].label)}</span>\n </span>\n );\n}\n","import * as React from 'react';\nimport { format } from '../format';\nimport { reduced } from './util';\nimport type { KpiCardProps } from '../components/KpiCard/KpiCard';\n\n/** 0 → 1 with an ease-out over ms, restarted when target changes; 1 at once with reduced motion. */\nexport function useCountUp(target: unknown, ms: number): number {\n const [t, setT] = React.useState(reduced() ? 1 : 0);\n React.useEffect(() => {\n if (reduced()) return;\n let t0: number | null = null;\n let raf = 0;\n const step = (now: number) => {\n t0 ??= now;\n const x = Math.min(1, (now - t0) / ms);\n setT(1 - (1 - x) ** 3);\n if (x < 1) raf = requestAnimationFrame(step);\n };\n raf = requestAnimationFrame(step);\n return () => cancelAnimationFrame(raf);\n }, [target, ms]);\n return t;\n}\n\n/** Decimals the axis labels need so that ticks a step apart read differently (0.5, 1, 1.5). */\nexport const tickDecimals = (top: number): number => Math.min(3, (String(+(top / 4).toPrecision(6)).split('.')[1] ?? '').length);\n\nexport type Point = [number, number];\n\n/** A smooth SVG path (Catmull-Rom as cubic Béziers) through the points. */\nexport function smoothPath(p: Point[]): string {\n const f = (q: Point) => q[0].toFixed(1) + ',' + q[1].toFixed(1);\n if (p.length < 2) return p.length ? 'M' + f(p[0]) : '';\n let d = 'M' + f(p[0]);\n for (let i = 0; i < p.length - 1; i++) {\n const p0 = p[i - 1] || p[i];\n const p1 = p[i];\n const p2 = p[i + 1];\n const p3 = p[i + 2] || p2;\n d += ` C${f([p1[0] + (p2[0] - p0[0]) / 6, p1[1] + (p2[1] - p0[1]) / 6])} ${f([p2[0] - (p3[0] - p1[0]) / 6, p2[1] - (p3[1] - p1[1]) / 6])} ${f(p2)}`;\n }\n return d;\n}\n\nconst CHART = ['var(--chart-1)', 'var(--chart-2)', 'var(--chart-3)'];\n/** The color of series i. */\nexport const seriesColor = (i: number): string => CHART[i % CHART.length];\n/** Grid lines at these fractions of the axis maximum. */\nexport const TICKS = [0, 0.25, 0.5, 0.75, 1];\n\n/** KPI cards are the only place that abbreviates large numbers (format rules). */\nexport function kpiText(v: number, p: KpiCardProps, dec?: number): string {\n const big = p.compact !== false && Math.abs(p.value) >= 1e4;\n if (p.format === 'money') return format.money(v, { compact: big, currency: p.currency, like: p.value });\n if (p.format === 'percent') return format.number(v, dec || 1);\n return big ? format.compact(v, p.value) : format.number(v, dec);\n}\n\n/** Shrinks the KPI number (31 px down to 20 px) when the final value is wider than the card. */\nexport function useFitText(ref: React.RefObject<HTMLElement | null>, deps: React.DependencyList): void {\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n const fit = () => {\n el.style.fontSize = '';\n const base = parseFloat(getComputedStyle(el).fontSize) || 31;\n const sizer = el.querySelector<HTMLElement>('.ui-kpi-sizer');\n const unit = el.querySelector<HTMLElement>('.ui-kpi-unit');\n const need = (sizer ? sizer.scrollWidth : 0) + (unit ? unit.offsetWidth + 4 : 0);\n const have = el.clientWidth;\n const next = need > have && have > 0 ? Math.max(20, Math.floor((base * have) / need)) : null;\n el.style.fontSize = next ? next + 'px' : '';\n };\n fit();\n const ro = typeof ResizeObserver === 'function' ? new ResizeObserver(fit) : null;\n ro?.observe((el.parentNode as Element | null) || el);\n return () => ro?.disconnect();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- the caller lists what changes the text\n }, deps);\n}\n\ninterface ChartTipRow {\n name: React.ReactNode;\n value: React.ReactNode;\n color?: string;\n}\n\nexport function ChartTip({ title, rows, style }: { title?: React.ReactNode; rows: ChartTipRow[]; style?: React.CSSProperties }) {\n return (\n <div className=\"ui-chart-tip\" style={style}>\n {title ? <div className=\"ui-chart-tip-title\">{title}</div> : null}\n {rows.map((r, i) => (\n <div key={i} className=\"ui-chart-tip-row\">\n {r.color ? <span className=\"ui-chart-swatch\" style={{ background: r.color }} /> : null}\n <span className=\"ui-chart-tip-name\">{r.name}</span>\n <span className=\"ui-chart-tip-val\">{r.value}</span>\n </div>\n ))}\n </div>\n );\n}\n\n/** Rounds an axis maximum up to 2, 4, 5, 8 or 10 times a power of ten. */\nexport function niceMax(v: number): number {\n const e = 10 ** Math.floor(Math.log10(v || 1));\n const n = Math.ceil(v / e);\n return (n <= 2 ? 2 : n <= 4 ? 4 : n <= 5 ? 5 : n <= 8 ? 8 : 10) * e;\n}\n","import * as React from 'react';\nimport { ChartTip, TICKS, tickDecimals, niceMax } from '../../internal/chart';\nimport { cx, digits } from '../../internal/util';\nimport { format } from '../../format';\n\nexport interface BarDatum {\n label: string;\n /** Shorter x-axis label when the full one would crowd. */\n short?: string;\n value: number;\n}\n\nexport interface BarChartProps {\n data: BarDatum[];\n /** Describes the chart for screen readers. */\n label: string;\n unit?: string;\n /** Decimals of the values in the tooltip. Default 0. */\n decimals?: number;\n max?: number;\n className?: string;\n}\n\n/** Compares a few categories: rounded bars that grow in, a tooltip on hover. */\nexport function BarChart({ data, label, unit, decimals, max, className }: BarChartProps) {\n const [hi, setHi] = React.useState(-1);\n const top = max || niceMax(Math.max(1, ...data.map((d) => d.value)));\n const suffix = unit ? ' ' + unit : '';\n return (\n <div className={cx('ui-chart', className)}>\n <div className=\"ui-bars\" role=\"img\" aria-label={label} onMouseLeave={() => setHi(-1)}>\n {TICKS.map((f, i) => (\n <div key={'g' + i} className={cx('ui-bars-grid', !i && 'is-axis')} style={{ bottom: f * 100 + '%' }}>\n <span className=\"ui-chart-tick\">{format.number(f * top, tickDecimals(top))}</span>\n </div>\n ))}\n <div className=\"ui-bars-row\">\n {data.map((d, i) => {\n const ht = (d.value / top) * 100 + '%';\n return (\n <div key={i} className=\"ui-bar-slot\" onMouseEnter={() => setHi(i)}>\n <div className=\"ui-bar\" style={{ height: ht, animationDelay: i * 40 + 'ms', opacity: hi >= 0 && hi !== i ? 0.55 : 1 }} />\n {hi === i ? (\n <ChartTip\n style={{ bottom: `calc(${ht} + 8px)`, left: '50%', transform: 'translateX(-50%)', whiteSpace: 'nowrap' }}\n rows={[{ name: d.label, value: format.number(d.value, decimals) + suffix }]}\n />\n ) : null}\n </div>\n );\n })}\n </div>\n </div>\n <div className=\"ui-bars-labels\">\n {data.map((d, i) => (\n <span key={i}>{digits(d.short || d.label)}</span>\n ))}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { format, sameDay } from '../../format';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\n\nexport interface DayState {\n selected?: boolean;\n inRange?: boolean;\n start?: boolean;\n end?: boolean;\n disabled?: boolean;\n}\n\nexport interface CalendarProps {\n /** The month shown first. Default: this month. */\n focus?: Date | null;\n onPick?: (d: Date) => void;\n onHover?: (d: Date | null) => void;\n /** How each day looks: selected, inside a range, disabled. */\n dayState?: (d: Date) => DayState | undefined;\n}\n\n/** A month grid: selected days are rounded squares, today has a dot under the number. */\nexport function Calendar({ focus, onPick, onHover, dayState }: CalendarProps) {\n const [month, setMonth] = React.useState(() => {\n const b = focus || new Date();\n return new Date(b.getFullYear(), b.getMonth(), 1);\n });\n const today = new Date();\n const y = month.getFullYear();\n const m = month.getMonth();\n const start = (new Date(y, m, 1).getDay() - format.firstDay() + 7) % 7;\n const days = new Date(y, m + 1, 0).getDate();\n const cells: (Date | null)[] = [...Array<null>(start).fill(null), ...Array.from({ length: days }, (_, i) => new Date(y, m, i + 1))];\n return (\n <div className=\"ui-cal\">\n <div className=\"ui-cal-head\">\n <button type=\"button\" className=\"ui-cal-nav\" aria-label={tr('上個月')} onClick={() => setMonth(new Date(y, m - 1, 1))}>\n <Icon name=\"caret-left\" size={16} />\n </button>\n <span className=\"ui-cal-title\" aria-live=\"polite\">\n {format.month(month)}\n </span>\n <button type=\"button\" className=\"ui-cal-nav\" aria-label={tr('下個月')} onClick={() => setMonth(new Date(y, m + 1, 1))}>\n <Icon name=\"caret-right\" size={16} />\n </button>\n </div>\n <div className=\"ui-cal-grid\" role=\"group\" aria-label={format.month(month)}>\n {format.weekdays().map((w, i) => (\n <span key={'w' + i} className=\"ui-cal-wk\" aria-hidden=\"true\">\n {w}\n </span>\n ))}\n {cells.map((c, i) => {\n if (!c) return <span key={'e' + i} />;\n const st = dayState?.(c) ?? {};\n const isToday = sameDay(c, today);\n return (\n <button\n key={i}\n type=\"button\"\n disabled={st.disabled}\n className={cx('ui-cal-day', st.selected && 'is-sel', st.inRange && 'is-range', st.start && 'is-start', st.end && 'is-end', isToday && 'is-today')}\n aria-pressed={!!st.selected}\n aria-label={format.date(c, { weekday: false, long: true }) + (isToday ? tr('(今天)') : '')}\n onClick={() => onPick?.(c)}\n onMouseEnter={onHover ? () => onHover(c) : undefined}\n >\n {c.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { cx } from '../../internal/util';\nimport { devWarn } from '../../internal/dev';\n\n/** True inside a Card: card-styled components drop their own shadow there. */\nconst InCard = React.createContext(false);\n\nexport interface CardProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {\n /** Heading at the top left. */\n title?: React.ReactNode;\n /** Buttons at the top right. */\n actions?: React.ReactNode;\n /** false: no inner padding, for a table or a tree that fills the card. */\n padding?: boolean;\n /** Element to render. Default 'section'. */\n as?: 'section' | 'div' | 'article' | 'aside' | 'form';\n children?: React.ReactNode;\n}\n\n/** The one container with a shadow. Never put a Card inside a Card: split the content into sections with headings instead. */\nexport function Card({ as: Tag = 'section', title, actions, padding = true, className, children, ...native }: CardProps) {\n const nested = React.useContext(InCard);\n devWarn(nested, 'Card', 'a Card inside a Card gives two shadows. Use one Card and separate its parts with headings or a divider.');\n return (\n <InCard.Provider value>\n <Tag {...native} className={cx('ui-card', !padding && 'is-flush', className)}>\n {title || actions ? (\n <div className=\"ui-card-head\">\n {title ? <h2 className=\"ui-card-title\">{title}</h2> : <span />}\n {actions ? <div className=\"ui-card-actions\">{actions}</div> : null}\n </div>\n ) : null}\n {children}\n </Tag>\n </InCard.Provider>\n );\n}\n","import * as React from 'react';\nimport { CHECK } from '../icons/Icon';\nimport { cx } from './util';\n\n/** A field's label above it, with the red asterisk when required. A <label> when it names one input, otherwise a <span>. */\nexport function FieldLabel({ htmlFor, id, required, children }: { htmlFor?: string; id?: string; required?: boolean; children: React.ReactNode }) {\n const Tag = htmlFor ? 'label' : 'span';\n return (\n <Tag htmlFor={htmlFor} id={id} className=\"ui-field-label\">\n {children}\n {required ? (\n <span className=\"ui-req\" aria-hidden=\"true\">\n {' *'}\n </span>\n ) : null}\n </Tag>\n );\n}\n\n/** The mark inside a check box: a drawn check, a dash for 'mixed', or nothing. The check draws itself only when it\n * turns on after mount, never when a list or menu opens with it already on. */\nexport function CheckMark({ v }: { v: boolean | 'mixed' }) {\n const [prev, setPrev] = React.useState(v);\n const [draw, setDraw] = React.useState(false);\n if (prev !== v) {\n setPrev(v);\n setDraw(v === true);\n }\n if (v === 'mixed') return <span className=\"ui-check-dash\" />;\n if (!v) return null;\n return (\n <svg\n className={cx(draw && 'ui-draw')}\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d={CHECK} />\n </svg>\n );\n}\n","import * as React from 'react';\nimport { cx } from '../../internal/util';\nimport { CheckMark } from '../../internal/Field';\n\nexport interface CheckboxProps {\n /** 'mixed': some of a group are checked (shows a dash). */\n checked?: boolean | 'mixed';\n /** Receives the new state; from 'mixed' it goes to true. */\n onChange?: (checked: boolean) => void;\n /** Text to the right of the box. Without it, pass aria-label. */\n label?: React.ReactNode;\n 'aria-label'?: string;\n disabled?: boolean;\n className?: string;\n}\n\n/** A check box with a drawn check mark. The whole row is the touch target. */\nexport function Checkbox({ checked, onChange, label, disabled, className, ...aria }: CheckboxProps) {\n const v = checked === 'mixed' ? 'mixed' : !!checked;\n return (\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={v}\n aria-label={aria['aria-label']}\n disabled={disabled}\n className={cx('ui-check', v && 'is-on', className)}\n onClick={() => onChange?.(v !== true)}\n >\n <span className=\"ui-check-box\" aria-hidden=\"true\">\n <CheckMark v={v} />\n </span>\n {label ? <span>{label}</span> : null}\n </button>\n );\n}\n","import * as React from 'react';\nimport { cx } from '../../internal/util';\n\nexport interface InlineCodeProps {\n children?: React.ReactNode;\n /** Makes it a link. */\n href?: string;\n onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n className?: string;\n}\n\n/** Code inside a sentence: monospace on a light gray chip. A span that points somewhere is a link. */\nexport function InlineCode({ children, href, onClick, className }: InlineCodeProps) {\n const cls = cx('ui-code', (href || onClick) && 'is-link', typeof children === 'string' && children.length <= 24 && 'is-short', className);\n if (href)\n return (\n <a className={cls} href={href} onClick={onClick}>\n {children}\n </a>\n );\n if (onClick)\n return (\n <button type=\"button\" className={cls} onClick={onClick}>\n {children}\n </button>\n );\n return <code className={cls}>{children}</code>;\n}\n\n/** Returns the link of a reference such as src/app.c:86, or undefined when it has no target. */\nexport type RefHref = (ref: string) => string | undefined | null;\n/** Called on a plain click on a reference; the default navigation is prevented. */\nexport type OnRef = (ref: string, e: React.MouseEvent<HTMLElement>) => void;\n\n/** A file and line, such as src/app.c:86 or main.py:12-20. */\nconst CODE_REF = /^[\\w./-]+\\.[A-Za-z0-9]+:\\d+(-\\d+)?$/;\nexport const isCodeRef = (span: string): boolean => CODE_REF.test(span);\n\nexport interface CodeTextProps {\n /** Text with `backtick` spans, as written in Markdown. */\n text: string;\n /** Spans that look like file.c:86 become links; return undefined when the reference has no target. */\n refHref?: RefHref;\n onRef?: OnRef;\n /** Which spans are references. Default: a file name with a line number. */\n isRef?: (span: string) => boolean;\n as?: 'span' | 'p' | 'div' | 'li';\n className?: string;\n}\n\n/** Text with `backtick` spans: renders them as InlineCode, never as raw backticks. */\nexport function CodeText({ text, refHref, onRef, isRef = isCodeRef, as: Tag = 'span', className }: CodeTextProps) {\n const parts = String(text || '').split(/(`[^`]+`)/);\n return (\n <Tag className={className}>\n {parts.map((t, i) => {\n if (!t) return null;\n if (t[0] !== '`' || t.length < 2) return t;\n const v = t.slice(1, -1);\n const href = refHref && isRef(v) ? refHref(v) || undefined : undefined;\n const link = isRef(v) && (refHref ? !!href : !!onRef);\n if (!link) return <InlineCode key={i}>{v}</InlineCode>;\n return (\n <InlineCode\n key={i}\n href={href}\n onClick={\n onRef\n ? (e) => {\n // A plain click goes to onRef; Ctrl, ⌘, Shift or the middle button still opens href in a new tab.\n if (href && (e.metaKey || e.ctrlKey || e.shiftKey || e.button === 1)) return;\n e.preventDefault();\n onRef(v, e);\n }\n : undefined\n }\n >\n {v}\n </InlineCode>\n );\n })}\n </Tag>\n );\n}\n","/* Light syntax colors for CodeView. A token is [class, text]; the classes are is-keyword, is-constant, is-comment,\n is-string and '' for plain text. Any highlighter that returns these classes can replace the built-in one (CodeView's tokenizer prop). */\n\nexport type TokenClass = '' | 'is-keyword' | 'is-constant' | 'is-comment' | 'is-string';\nexport type Token = [TokenClass, string];\n/** Splits each line into tokens. Block comments and strings may span lines. */\nexport type Tokenizer = (lines: string[], lang: string) => Token[][];\n\nexport type CodeLanguage = 'c' | 'js' | 'py' | 'sh' | 'plain';\n\nconst KEYWORDS: Record<Exclude<CodeLanguage, 'plain'>, Set<string>> = {\n c: new Set(\n 'auto break case char const continue default do double else enum extern float for goto if inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while bool true false NULL nullptr class namespace template typename public private protected virtual new delete'.split(\n ' ',\n ),\n ),\n js: new Set(\n 'async await break case catch class const continue default delete do else export extends false finally for from function if import in instanceof let new null of return static super switch this throw true try typeof undefined var void while yield interface type enum implements'.split(\n ' ',\n ),\n ),\n py: new Set(\n 'and as assert async await break class continue def del elif else except False finally for from global if import in is lambda None nonlocal not or pass raise return True try while with yield'.split(\n ' ',\n ),\n ),\n sh: new Set('if then else elif fi for while do done case esac in function return export local set unset echo exit'.split(' ')),\n};\n\nconst EXT: Record<string, CodeLanguage> = {\n c: 'c',\n h: 'c',\n cc: 'c',\n cpp: 'c',\n hpp: 'c',\n cu: 'c',\n js: 'js',\n jsx: 'js',\n ts: 'js',\n tsx: 'js',\n mjs: 'js',\n py: 'py',\n sh: 'sh',\n bash: 'sh',\n};\n\n/** The language from a file's extension; 'plain' when unknown. */\nexport function languageOf(file: string | undefined): CodeLanguage {\n const m = /\\.([A-Za-z0-9]+)$/.exec(file || '');\n return (m && EXT[m[1].toLowerCase()]) || 'plain';\n}\n\nexport const LANGUAGE_NAMES: Record<string, string> = { c: 'C', js: 'JavaScript', py: 'Python', sh: 'Shell' };\n\n/** The built-in tokenizer: keywords, CONSTANTS and numbers, comments, strings for C-like, JS, Python and shell. */\nexport const tokenize: Tokenizer = (lines, lang) => {\n const kw = KEYWORDS[lang as Exclude<CodeLanguage, 'plain'>];\n if (!kw) return lines.map((l) => [['', l]]);\n const hash = lang === 'py' || lang === 'sh';\n const re = hash\n ? /(#.*$)|(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')|([A-Za-z_]\\w*)|(\\b\\d[\\w.]*)/g\n : /(\\/\\/.*$|\\/\\*.*?(?:\\*\\/|$))|(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|`(?:[^`\\\\]|\\\\.)*`)|([A-Za-z_]\\w*)|(\\b\\d[\\w.]*)/g;\n let inBlock = false;\n return lines.map((line) => {\n const out: Token[] = [];\n let i = 0;\n if (inBlock) {\n const e = line.indexOf('*/');\n if (e < 0) return [['is-comment', line]];\n out.push(['is-comment', line.slice(0, e + 2)]);\n i = e + 2;\n inBlock = false;\n }\n re.lastIndex = i;\n let m: RegExpExecArray | null;\n while ((m = re.exec(line))) {\n if (m.index > i) out.push(['', line.slice(i, m.index)]);\n const cls: TokenClass = m[1]\n ? 'is-comment'\n : m[2]\n ? 'is-string'\n : m[3]\n ? kw.has(m[3])\n ? 'is-keyword'\n : /^[A-Z][A-Z0-9_]+$/.test(m[3])\n ? 'is-constant'\n : ''\n : 'is-constant';\n if (m[1] && !hash && m[1].startsWith('/*') && !m[1].endsWith('*/')) inBlock = true;\n out.push([cls, m[0]]);\n i = m.index + m[0].length;\n if (!m[0].length) re.lastIndex++;\n }\n if (i < line.length) out.push(['', line.slice(i)]);\n return out.length ? out : [['', '']];\n });\n};\n","import * as React from 'react';\nimport { InlineCode } from '../InlineCode/InlineCode';\nimport { tr } from '../../i18n';\nimport { cx, monoNums, useNarrow } from '../../internal/util';\nimport { LANGUAGE_NAMES, languageOf, tokenize as builtIn, type Tokenizer } from './tokens';\n\nexport interface CodeViewProps {\n /** The source text. */\n code: string;\n /** Number of the first line. Default 1. */\n start?: number;\n /** A line or [from, to] to mark. On phones only these lines and `context` lines either side show at first. */\n target?: number | [number, number];\n /** Lines shown either side of the target on phones. Default 2. */\n context?: number;\n /** Path in the header; its extension picks the language. */\n file?: string;\n fileHref?: string;\n onFile?: (e: React.MouseEvent<HTMLElement>) => void;\n /** Header text when there is no file. */\n title?: string;\n /** 'c' | 'js' | 'py' | 'sh' | 'plain', or any language your tokenizer knows. Default: from the file extension. */\n language?: string;\n /** Label at the right of the header; false hides it. */\n languageLabel?: string | false;\n /** false: no syntax colors. */\n highlight?: boolean;\n /** Replaces the built-in highlighter, e.g. one built on Shiki that returns the same token classes. */\n tokenizer?: Tokenizer;\n /** Scrolls inside the box and keeps the target in view, e.g. '420px'. */\n maxHeight?: string;\n className?: string;\n}\n\n/** Source with line numbers and an optional target line: soft accent background, long lines wrap, light syntax colors. */\nexport function CodeView({\n code,\n start = 1,\n target,\n context = 2,\n file,\n fileHref,\n onFile,\n title,\n language,\n languageLabel,\n highlight = true,\n tokenizer = builtIn,\n maxHeight,\n className,\n}: CodeViewProps) {\n const lines = React.useMemo(\n () =>\n String(code || '')\n .replace(/\\n$/, '')\n .split('\\n'),\n [code],\n );\n const lang = language || languageOf(file);\n const toks = React.useMemo(() => (highlight ? tokenizer(lines, lang) : lines.map((l) => [['', l] as const])), [lines, lang, highlight, tokenizer]);\n const [ta, tb] = target == null ? [null, null] : Array.isArray(target) ? target : [target, target];\n const narrow = useNarrow();\n const [all, setAll] = React.useState(false);\n const [shownFor, setShownFor] = React.useState({ code, ta, tb });\n if (shownFor.code !== code || shownFor.ta !== ta || shownFor.tb !== tb) {\n setShownFor({ code, ta, tb });\n setAll(false);\n }\n const canWindow = ta != null && tb != null && lines.length > tb - ta + 1 + context * 2;\n const windowed = narrow && canWindow && !all;\n const from = windowed ? Math.max(0, ta - start - context) : 0;\n const to = windowed ? Math.min(lines.length, tb - start + context + 1) : lines.length;\n const body = React.useRef<HTMLPreElement>(null);\n React.useEffect(() => {\n const b = body.current;\n const el = b?.querySelector<HTMLElement>('.is-target');\n if (b && el && b.scrollHeight > b.clientHeight)\n b.scrollTop += el.getBoundingClientRect().top - b.getBoundingClientRect().top - b.clientHeight / 2 + el.offsetHeight / 2;\n }, [ta, code]);\n const digits = String(start + lines.length - 1).length;\n const rows: React.ReactNode[] = [];\n for (let i = from; i < to; i++) {\n const n = start + i;\n const on = ta != null && tb != null && n >= ta && n <= tb;\n rows.push(\n <div key={i} className={cx('ui-cv-line', on && 'is-target')} aria-current={on && n === ta ? 'location' : undefined}>\n <span className=\"ui-cv-num\" style={{ width: digits + 2 + 'ch' }}>\n {n}\n </span>\n <span className=\"ui-cv-text\">\n {toks[i].map(([cls, text], j) =>\n cls ? (\n <span key={j} className={cls}>\n {text}\n </span>\n ) : (\n text\n ),\n )}\n </span>\n </div>,\n );\n }\n const head =\n file || title ? (\n <div className=\"ui-cv-head\">\n {file ? (\n fileHref || onFile ? (\n <InlineCode href={fileHref} onClick={onFile} className=\"ui-cv-file\">\n {file}\n </InlineCode>\n ) : (\n <span className=\"ui-cv-file\">{file}</span>\n )\n ) : (\n <span className=\"ui-cv-title\">{title}</span>\n )}\n {languageLabel !== false && lang !== 'plain' ? <span className=\"ui-cv-lang\">{languageLabel || LANGUAGE_NAMES[lang] || lang}</span> : null}\n </div>\n ) : null;\n return (\n <div className={cx('ui-cv', className)} role=\"region\" aria-label={file || title || tr('原始碼')}>\n {head}\n <pre ref={body} className=\"ui-cv-body\" style={maxHeight ? { maxHeight } : undefined} tabIndex={0}>\n <code>{rows}</code>\n </pre>\n {narrow && canWindow ? (\n <button type=\"button\" className=\"ui-link-btn ui-cv-more\" onClick={() => setAll(!all)}>\n <span>{all ? tr('只顯示第 {n} 行前後', { n: ta }) : monoNums(tr('顯示全部 {n} 行', { n: '\\u0001' }), [lines.length])}</span>\n </button>\n ) : null}\n </div>\n );\n}\n","import * as React from 'react';\nimport { Dialog } from '@base-ui/react/dialog';\nimport { CodeText } from '../InlineCode/InlineCode';\nimport { tr } from '../../i18n';\nimport { Icon, IconOf, type IconSource } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\n\nexport interface PaletteItem {\n id?: string | number;\n label: string;\n /** Under the label; `backticks` are code. */\n detail?: string;\n /** What it is: 頁面, 設定, 指令, 檔案, or your own kinds (with `kinds`). Picks the icon. */\n kind?: string;\n /** Overrides the kind's icon. */\n icon?: IconSource;\n /** The label is code: Geist Mono. */\n code?: boolean;\n /** More words that find it. */\n keywords?: string[];\n}\n\nconst KIND_ICONS: Record<string, IconSource> = { 頁面: 'file-text', 設定: 'gear', 指令: 'command', 檔案: 'file-code' };\n\nexport interface CommandPaletteProps<T extends PaletteItem = PaletteItem> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n items: T[];\n onSelect?: (item: T) => void;\n /** Default 「搜尋」. */\n placeholder?: string;\n /** Shown before anything is typed. */\n recent?: T[];\n /** Default 「最近開啟」. */\n recentLabel?: string;\n /** Shown with nothing typed and no recent items. Default 「輸入名稱開始搜尋」. */\n emptyText?: string;\n /** Icon for each of your own kinds: { 函式: 'brackets-curly' }. */\n kinds?: Record<string, IconSource>;\n /** false: items are already filtered (server search with onQueryChange). */\n filter?: boolean;\n onQueryChange?: (query: string) => void;\n /** Shows 「搜尋中」 when there are no items yet. */\n loading?: boolean;\n /** Most results shown. Default 50. */\n limit?: number;\n /** Ctrl K / ⌘K toggles it. Default true. */\n hotkey?: boolean;\n defaultQuery?: string;\n /** Default 「搜尋」. */\n label?: string;\n}\n\n/** The score of an item for a query: label starts with it, label contains it, other text contains it; null: no match. */\nfunction score(it: PaletteItem, q: string): [rank: number, at: number] | null {\n const i = it.label.toLowerCase().indexOf(q);\n if (i === 0) return [0, 0];\n if (i > 0) return [1, i];\n const more = [it.detail, it.kind, ...(it.keywords ?? [])].join(' ').toLowerCase();\n return more.includes(q) ? [2, -1] : null;\n}\n\n/** One search for everything, opened with Ctrl K (⌘K). A panel in the middle of the screen; results sorted by relevance. */\nexport function CommandPalette<T extends PaletteItem = PaletteItem>(props: CommandPaletteProps<T>) {\n const {\n open,\n onOpenChange,\n items,\n onSelect,\n placeholder,\n recent,\n recentLabel,\n emptyText,\n kinds,\n filter = true,\n onQueryChange,\n loading,\n limit = 50,\n hotkey = true,\n defaultQuery = '',\n label,\n } = props;\n const [q, setQ] = React.useState(defaultQuery);\n const [active, setActive] = React.useState(0);\n // Every open starts from the default query; opens come from the open prop, so compare during render.\n const [wasOpen, setWasOpen] = React.useState(open);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open) {\n setQ(defaultQuery);\n setActive(0);\n }\n }\n const list = React.useRef<HTMLUListElement>(null);\n const id = React.useId();\n const toggle = React.useRef(onOpenChange);\n const reportQuery = React.useRef(onQueryChange);\n React.useLayoutEffect(() => {\n toggle.current = onOpenChange;\n reportQuery.current = onQueryChange;\n });\n React.useEffect(() => {\n if (open) reportQuery.current?.(defaultQuery);\n }, [open, defaultQuery]);\n React.useEffect(() => {\n if (!hotkey) return;\n const key = (e: KeyboardEvent) => {\n if ((e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey && e.key.toLowerCase() === 'k') {\n e.preventDefault();\n toggle.current(!open);\n }\n };\n document.addEventListener('keydown', key);\n return () => document.removeEventListener('keydown', key);\n }, [hotkey, open]);\n const query = q.trim().toLowerCase();\n const shown: { it: T; at: number }[] = (\n filter === false\n ? items.map((it) => ({ it, at: -1 }))\n : !query\n ? (recent ?? []).map((it) => ({ it, at: -1 }))\n : items\n .map((it, i) => {\n const r = score(it, query);\n return r ? { it, rank: r[0], at: r[1], i } : null;\n })\n .filter((x) => x !== null)\n .sort((a, b) => a.rank - b.rank || a.i - b.i)\n ).slice(0, limit);\n const act = Math.min(active, Math.max(0, shown.length - 1));\n React.useEffect(() => {\n list.current?.querySelector('.is-active')?.scrollIntoView?.({ block: 'nearest' });\n }, [act, open]);\n const pick = (it: T) => {\n onOpenChange(false);\n onSelect?.(it);\n };\n const onKey = (e: React.KeyboardEvent) => {\n // Enter and arrows during IME composition (注音, 倉頡) belong to the input method.\n if (e.nativeEvent.isComposing || e.keyCode === 229) return;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const d = e.key === 'ArrowDown' ? 1 : -1;\n setActive(shown.length ? (act + d + shown.length) % shown.length : 0);\n } else if (e.key === 'Enter') {\n e.preventDefault();\n if (shown[act]) pick(shown[act].it);\n }\n };\n const labelOf = (it: T, at: number) => {\n const t = it.label;\n return (\n <span className={cx('ui-pal-label', it.code && 'is-code')}>\n {at >= 0 && query ? (\n <>\n {t.slice(0, at)}\n <mark className=\"ui-pal-hit\">{t.slice(at, at + query.length)}</mark>\n {t.slice(at + query.length)}\n </>\n ) : (\n t\n )}\n </span>\n );\n };\n const empty = query ? tr('找不到符合「{q}」的結果', { q: q.trim() }) : emptyText || tr('輸入名稱開始搜尋');\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Backdrop className=\"ui-pal-backdrop\" />\n <Dialog.Popup className=\"ui-pal\" aria-label={label || tr('搜尋')}>\n <div className=\"ui-pal-head\">\n <Icon name=\"magnifying-glass\" className=\"ui-pal-icon\" />\n <input\n className=\"ui-pal-input\"\n type=\"text\"\n value={q}\n placeholder={placeholder || tr('搜尋')}\n role=\"combobox\"\n aria-expanded={shown.length > 0}\n aria-controls={shown.length ? id : undefined}\n aria-autocomplete=\"list\"\n aria-activedescendant={shown[act] ? `${id}-${act}` : undefined}\n autoComplete=\"off\"\n spellCheck={false}\n enterKeyHint=\"go\"\n onChange={(e) => {\n setQ(e.target.value);\n setActive(0);\n onQueryChange?.(e.target.value);\n }}\n onKeyDown={onKey}\n />\n <Dialog.Close className=\"ui-pal-cancel\">{tr('取消')}</Dialog.Close>\n </div>\n {!query && shown.length && recent ? <div className=\"ui-pal-group\">{recentLabel || tr('最近開啟')}</div> : null}\n {shown.length ? (\n <ul ref={list} id={id} className=\"ui-pal-list\" role=\"listbox\" aria-label={tr('搜尋結果')}>\n {shown.map(({ it, at }, i) => (\n <li\n key={it.id ?? i}\n id={`${id}-${i}`}\n role=\"option\"\n aria-selected={i === act}\n className={cx('ui-pal-item', i === act && 'is-active')}\n onMouseMove={() => act !== i && setActive(i)}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => pick(it)}\n >\n <span className=\"ui-pal-kind\" title={it.kind}>\n <IconOf icon={it.icon ?? (it.kind ? (kinds?.[it.kind] ?? KIND_ICONS[it.kind]) : undefined) ?? 'file'} size={16} />\n </span>\n <span className=\"ui-pal-text\">\n <span className=\"ui-pal-line\">\n {labelOf(it, at)}\n {it.kind ? <span className=\"ui-visually-hidden\">{',' + it.kind}</span> : null}\n </span>\n {it.detail ? <CodeText className=\"ui-pal-detail\" text={it.detail} /> : null}\n </span>\n </li>\n ))}\n </ul>\n ) : (\n <p className=\"ui-pal-empty\" role=\"status\">\n {loading ? tr('搜尋中') : empty}\n </p>\n )}\n <div className=\"ui-pal-keys\" aria-hidden=\"true\">\n <span>\n <kbd>↑</kbd>\n <kbd>↓</kbd>\n {tr('選擇')}\n </span>\n <span>\n <kbd>Enter</kbd>\n {tr('打開')}\n </span>\n <span>\n <kbd>Esc</kbd>\n {tr('關閉')}\n </span>\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { tr } from '../../i18n';\nimport { cx } from '../../internal/util';\nimport { Button, type DangerConfirm } from '../Button/Button';\n\nexport interface DangerZoneProps {\n /** Default 「危險操作」. */\n title?: string;\n /** What the action destroys. */\n description: string;\n /** Default 「刪除」. */\n actionLabel?: string;\n /** Runs after the person confirms. */\n onAction: () => void;\n /** The confirm dialog: name the object in the title. */\n confirm: DangerConfirm;\n className?: string;\n}\n\n/** A red-bordered block at the bottom of a settings page for delete-type actions; the button asks to confirm. */\nexport function DangerZone({ title, description, actionLabel, onAction, confirm, className }: DangerZoneProps) {\n const label = actionLabel || tr('刪除');\n return (\n <section className={cx('ui-danger', className)}>\n <h2 className=\"ui-danger-title\">{title || tr('危險操作')}</h2>\n <div className=\"ui-danger-row\">\n <p>{description}</p>\n {/* Without a build step nothing enforces confirm: ask anyway. */}\n <Button variant=\"danger\" confirm={confirm ?? { title: `${label}?` }} onClick={onAction}>\n {label}\n </Button>\n </div>\n </section>\n );\n}\n","import type * as React from 'react';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\n\nexport interface SearchFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value'> {\n value: string;\n onChange: (value: string) => void;\n /** aria-label. Default 「搜尋」. */\n label?: string;\n}\n\n/** A search box with a clear button. Filter as the person types. */\nexport function SearchField({ value, onChange, className, label, ...native }: SearchFieldProps) {\n return (\n <div className={cx('ui-searchfield', className)}>\n <Icon name=\"magnifying-glass\" size={16} className=\"ui-searchfield-icon\" />\n <input type=\"search\" aria-label={label || tr('搜尋')} {...native} className=\"ui-input\" value={value} onChange={(e) => onChange(e.target.value)} />\n {value ? (\n <button type=\"button\" className=\"ui-searchfield-clear\" aria-label={tr('清除搜尋')} onClick={() => onChange('')}>\n <Icon name=\"x\" size={12} />\n </button>\n ) : null}\n </div>\n );\n}\n","import * as React from 'react';\nimport { format } from '../../format';\nimport { dropTransition, useMoving } from '../../motion';\nimport { cx } from '../../internal/util';\n\nexport interface TabItem<V extends string = string> {\n id: V;\n label: string;\n /** A count after the label, e.g. how many rows a view has. */\n count?: number;\n}\n\nexport interface TabsProps<V extends string = string> {\n items: TabItem<V>[];\n value: V;\n onChange?: (id: V) => void;\n /** aria-label of the tab list. */\n label?: string;\n className?: string;\n}\n\n/** Views of the same content. The underline moves like a droplet; arrow keys move between tabs. */\nexport function Tabs<V extends string = string>({ items, value, onChange, label, className }: TabsProps<V>) {\n const refs = React.useRef<(HTMLButtonElement | null)[]>([]);\n const track = React.useRef<HTMLDivElement>(null);\n const [box, setBox] = React.useState<{ left: number; right: number } | null>(null);\n const [forward, setForward] = React.useState(true);\n const [moving, bump] = useMoving();\n const idx = Math.max(\n 0,\n items.findIndex((t) => t.id === value),\n );\n React.useLayoutEffect(() => {\n const el = refs.current[idx];\n const tr = track.current;\n if (!el || !tr) return;\n // Counts, fonts and the container change tab widths without changing the selection.\n const measure = () => setBox({ left: el.offsetLeft, right: tr.clientWidth - el.offsetLeft - el.offsetWidth });\n measure();\n const ro = new ResizeObserver(measure);\n ro.observe(tr);\n for (const t of refs.current) if (t) ro.observe(t);\n return () => ro.disconnect();\n }, [idx, items.length]);\n const go = (i: number) => {\n if (i === idx || !items[i]) return;\n setForward(i > idx);\n bump();\n onChange?.(items[i].id);\n };\n return (\n <div ref={track} className={cx('ui-tabs', className)} role=\"tablist\" aria-label={label}>\n {box ? (\n <span\n className=\"ui-tabs-ind\"\n aria-hidden=\"true\"\n style={{ left: box.left, right: box.right, transform: moving ? 'scaleY(.82)' : 'none', transition: dropTransition('left', 'right', forward) }}\n />\n ) : null}\n {items.map((t, i) => (\n <button\n key={t.id}\n ref={(n) => {\n refs.current[i] = n;\n }}\n type=\"button\"\n role=\"tab\"\n aria-selected={i === idx}\n tabIndex={i === idx ? 0 : -1}\n className={cx('ui-tab', i === idx && 'is-selected')}\n onClick={() => go(i)}\n onKeyDown={(e) => {\n const to = e.key === 'ArrowRight' ? (i + 1) % items.length : e.key === 'ArrowLeft' ? (i - 1 + items.length) % items.length : -1;\n if (to < 0) return;\n e.preventDefault();\n refs.current[to]?.focus();\n go(to);\n }}\n >\n {t.label}\n {t.count != null ? <span className=\"ui-tab-count\">{format.number(t.count)}</span> : null}\n </button>\n ))}\n </div>\n );\n}\n","import { format } from '../../format';\nimport type { DataTableColumn, DataTableFilter, FilterValue, RangeValue, ResolvedFilter, Row } from './types';\n\n/* Search, filters and the URL for DataTable. Filters apply at once; every option shows how many rows it would leave;\n search covers every column and marks the matching text; the conditions go into the URL. */\n\nconst field = <R extends Row>(row: R, key: string): unknown => (row as Record<string, unknown>)[key];\n\n/** Cell text: money as NT$ 1,280, dates as 2026/11/04(三), numbers with their unit after them. */\nexport function cellText<R extends Row>(c: DataTableColumn<R>, v: unknown): string {\n if (v === null || v === undefined || v === '') return '—';\n const asDate = () => (v instanceof Date ? v : new Date(v as string | number));\n if (c.format === 'money') return format.money(Number(v), { currency: c.currency });\n if (c.format === 'date') return format.date(asDate());\n if (c.format === 'datetime') return format.dateTime(asDate());\n if (c.format === 'relative') return format.relative(asDate());\n // percent fixes the decimals only; the % comes from unit, as in KpiCard.\n const n =\n c.format === 'percent'\n ? format.number(Number(v), c.decimals ?? 'percent')\n : c.numeric && typeof v === 'number'\n ? format.number(v, c.decimals ?? (c.unit === 'GB' || c.unit === 'MB' ? 'size' : 0))\n : String(v);\n return c.unit ? `${n} ${c.unit}` : n;\n}\n\n/** The filters with defaults: list type, multiple, and options from the rows' distinct values. */\nexport function resolveFilters<R extends Row>(filters: DataTableFilter<R>[], rows: R[]): ResolvedFilter<R>[] {\n return filters.map((f) => {\n let options = f.options;\n if ((f.type ?? 'list') === 'list' && !options) {\n const seen = new Set<string>();\n options = [];\n for (const r of rows) {\n const v = field(r, f.key);\n if (v != null && !seen.has(String(v))) {\n seen.add(String(v));\n options.push({ value: String(v), label: String(v) });\n }\n }\n }\n return { ...f, type: f.type ?? 'list', multiple: f.multiple ?? true, options: options ?? [] };\n });\n}\n\nconst isRange = (v: FilterValue): v is RangeValue => !Array.isArray(v);\n\nexport function isActive(v: FilterValue | undefined): boolean {\n if (!v) return false;\n return isRange(v) ? (v.min !== '' && v.min != null) || (v.max !== '' && v.max != null) : v.length > 0;\n}\n\nexport function matches<R extends Row>(f: ResolvedFilter<R>, row: R, v: FilterValue | undefined): boolean {\n if (!v || !isActive(v)) return true;\n if (f.match) return f.match(row, v);\n const x = field(row, f.key);\n if (isRange(v)) {\n const k = f.scale || 1;\n const mn = parseFloat(v.min);\n const mx = parseFloat(v.max);\n const n = Number(x);\n return !(!Number.isNaN(mn) && n < mn * k) && !(!Number.isNaN(mx) && n > mx * k);\n }\n return v.includes(String(x));\n}\n\nexport function searchHit<R extends Row>(row: R, cols: DataTableColumn<R>[], filters: ResolvedFilter<R>[], q: string, keys?: string[]): boolean {\n const ql = q.toLowerCase();\n return cols.some((c) => {\n if (keys && !keys.includes(c.key)) return false;\n const raw = field(row, c.key);\n let t = c.searchText ? c.searchText(row) : c.render ? '' : cellText(c, raw);\n const opt = filters.find((x) => x.key === c.key)?.options.find((o) => o.value === String(raw));\n if (opt) t += ' ' + opt.label;\n if (!t && c.render) t = raw == null ? '' : String(raw);\n return t.toLowerCase().includes(ql);\n });\n}\n\nconst param = (prefix: string | undefined, key: string) => (prefix ? prefix + '.' : '') + key;\n\n/** Filter values from the URL (?status=a,b&size_min=10). */\nexport function readUrl<R extends Row>(prefix: string | undefined, filters: ResolvedFilter<R>[]): { q: string; values: Record<string, FilterValue> } {\n const values: Record<string, FilterValue> = {};\n const sp = new URLSearchParams(location.search);\n for (const f of filters) {\n if (f.type === 'range') {\n const a = sp.get(param(prefix, f.key + '_min'));\n const b = sp.get(param(prefix, f.key + '_max'));\n if (a || b) values[f.key] = { min: a || '', max: b || '' };\n } else {\n const v = sp.get(param(prefix, f.key));\n if (v) values[f.key] = v.split(',');\n }\n }\n return { q: sp.get(param(prefix, 'q')) || '', values };\n}\n\n/** Writes search and filters into the URL without adding a history entry. */\nexport function writeUrl<R extends Row>(prefix: string | undefined, filters: ResolvedFilter<R>[], values: Record<string, FilterValue>, q: string): void {\n const sp = new URLSearchParams(location.search);\n const set = (k: string, v: string | undefined) => (v ? sp.set(param(prefix, k), v) : sp.delete(param(prefix, k)));\n set('q', q);\n for (const f of filters) {\n const v = values[f.key];\n if (f.type === 'range') {\n set(f.key + '_min', v && isRange(v) ? v.min : undefined);\n set(f.key + '_max', v && isRange(v) ? v.max : undefined);\n } else set(f.key, v && !isRange(v) && v.length ? v.join(',') : undefined);\n }\n const s = sp.toString();\n history.replaceState(history.state, '', location.pathname + (s ? '?' + s : '') + location.hash);\n}\n","import * as React from 'react';\nimport { Popover } from '@base-ui/react/popover';\n\nexport interface FloatingPanelProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** The element that opens the panel; it must accept a ref (a native element or a component that passes ref on). */\n trigger: React.ReactElement;\n side?: 'top' | 'bottom';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n /** Class of the panel (it carries the look: .ui-datepop, .ui-noti …). */\n className?: string;\n /** Accessible name of the panel. */\n 'aria-label'?: string;\n /** Position against this element instead of the trigger (e.g. the whole field around a calendar button). */\n anchor?: React.RefObject<Element | null>;\n /** Open on hover as well as on press. */\n openOnHover?: boolean;\n children: React.ReactNode;\n}\n\n/** A positioned panel next to its trigger: flips when there is no room, closes on Esc and outside press, returns focus. */\nexport function FloatingPanel({\n open,\n onOpenChange,\n trigger,\n side = 'bottom',\n align = 'start',\n sideOffset = 6,\n className,\n openOnHover,\n anchor,\n children,\n ...aria\n}: FloatingPanelProps) {\n return (\n <Popover.Root open={open} onOpenChange={onOpenChange}>\n <Popover.Trigger render={trigger} openOnHover={openOnHover} delay={0} closeDelay={150} />\n <Popover.Portal>\n <Popover.Positioner className=\"ui-float\" side={side} align={align} sideOffset={sideOffset} anchor={anchor}>\n <Popover.Popup className={className} aria-label={aria['aria-label']}>\n {children}\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import * as React from 'react';\nimport { format } from '../../format';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { FloatingPanel } from '../../internal/FloatingPanel';\nimport { CheckMark } from '../../internal/Field';\nimport type { DataTableColumn, FilterValue, RangeValue, ResolvedFilter, Row } from './types';\n\n/** Marks the first match of q in text. */\nexport function markMatch(text: React.ReactNode, q: string): React.ReactNode {\n if (!q || typeof text !== 'string') return text;\n const i = text.toLowerCase().indexOf(q.toLowerCase());\n if (i < 0) return text;\n return (\n <>\n {text.slice(0, i)}\n <mark className=\"ui-mark\">{text.slice(i, i + q.length)}</mark>\n {text.slice(i + q.length)}\n </>\n );\n}\n\n/** 「欄位」: hide and show columns. The first column cannot be hidden; the menu stays open while toggling. */\nexport function ColumnMenu<R extends Row>({\n cols,\n hidden,\n onToggle,\n}: {\n cols: DataTableColumn<R>[];\n hidden: Record<string, boolean>;\n onToggle: (key: string) => void;\n}) {\n const [open, setOpen] = React.useState(false);\n return (\n <FloatingPanel\n open={open}\n onOpenChange={setOpen}\n align=\"end\"\n className=\"ui-menu ui-dt-colmenu\"\n aria-label={tr('顯示的欄位')}\n trigger={\n <button type=\"button\" className={cx('ui-btn', 'ui-btn-secondary', 'ui-dt-colbtn', open && 'is-open')}>\n <Icon name=\"columns\" size={18} />\n {tr('欄位')}\n </button>\n }\n >\n <div className=\"ui-noti-group\">{tr('顯示的欄位')}</div>\n {cols.map((c, i) => {\n const on = i === 0 || !hidden[c.key];\n return (\n <button key={c.key} type=\"button\" role=\"checkbox\" aria-checked={on} disabled={i === 0} className=\"ui-menu-item\" onClick={() => onToggle(c.key)}>\n <span className={cx('ui-check-box', on && 'is-on')} aria-hidden=\"true\">\n <CheckMark v={on} />\n </span>\n <span className=\"ui-menu-label\">{c.label}</span>\n </button>\n );\n })}\n </FloatingPanel>\n );\n}\n\ninterface FilterButtonProps<R extends Row> {\n filters: ResolvedFilter<R>[];\n values: Record<string, FilterValue>;\n activeCount: number;\n /** Rows left if this option alone changed. */\n count: (f: ResolvedFilter<R>, value: string) => number;\n onChange: (key: string, value: FilterValue) => void;\n onClear: () => void;\n}\n\n/** 「篩選」 with the number of active filters; options apply at once and show how many rows they would leave. */\nexport function FilterButton<R extends Row>({ filters, values, activeCount, count, onChange, onClear }: FilterButtonProps<R>) {\n const [open, setOpen] = React.useState(false);\n return (\n <FloatingPanel\n open={open}\n onOpenChange={setOpen}\n className=\"ui-dt-filterpop\"\n aria-label={tr('篩選')}\n trigger={\n <button type=\"button\" className={cx('ui-btn', 'ui-btn-secondary', 'ui-dt-filterbtn', open && 'is-open')}>\n <Icon name=\"funnel\" size={18} />\n {tr('篩選')}\n {activeCount ? <span className=\"ui-pop-count\">{activeCount}</span> : null}\n </button>\n }\n >\n <div className=\"ui-dt-filterhead\">\n <span className=\"ui-popover-title\">{tr('篩選')}</span>\n {activeCount ? (\n <button type=\"button\" className=\"ui-link-btn\" onClick={onClear}>\n {tr('清除全部')}\n </button>\n ) : null}\n </div>\n <div className=\"ui-dt-facets\">\n {filters.map((f) => {\n const v = values[f.key];\n if (f.type === 'range') {\n const cur: RangeValue = v && !Array.isArray(v) ? v : { min: '', max: '' };\n const set = (k: keyof RangeValue) => (e: React.ChangeEvent<HTMLInputElement>) =>\n onChange(f.key, { ...cur, [k]: e.target.value.replace(/[^\\d.]/g, '') });\n return (\n <fieldset key={f.key} className=\"ui-dt-facet\">\n <legend>{f.label}</legend>\n <div className=\"ui-dt-range-inputs\">\n <input\n className=\"ui-input\"\n inputMode=\"decimal\"\n aria-label={`${f.label} ${tr('最低')}`}\n placeholder={tr('最低')}\n value={cur.min}\n onChange={set('min')}\n />\n <span>–</span>\n <input\n className=\"ui-input\"\n inputMode=\"decimal\"\n aria-label={`${f.label} ${tr('最高')}`}\n placeholder={tr('最高')}\n value={cur.max}\n onChange={set('max')}\n />\n </div>\n {f.unitLabel ? <div className=\"ui-field-hint\">{f.unitLabel}</div> : null}\n </fieldset>\n );\n }\n const arr = Array.isArray(v) ? v : [];\n return (\n <fieldset key={f.key} className=\"ui-dt-facet\">\n <legend>{f.label}</legend>\n {f.options.map((o) => {\n const value = String(o.value);\n const on = arr.includes(value);\n const n = count(f, value);\n const next = f.multiple ? (on ? arr.filter((x) => x !== value) : [...arr, value]) : on ? [] : [value];\n return (\n <button\n key={o.value}\n type=\"button\"\n role={f.multiple ? 'checkbox' : 'radio'}\n aria-checked={on}\n className={cx('ui-dt-opt', on && 'is-on', !n && !on && 'is-zero')}\n onClick={() => onChange(f.key, next)}\n >\n <span className={cx(f.multiple ? 'ui-check-box' : 'ui-radio-ring', on && 'is-on')} aria-hidden=\"true\">\n {f.multiple ? <CheckMark v={on} /> : on ? <span className=\"ui-radio-dot\" /> : null}\n </span>\n <span className=\"ui-dt-opt-label\">{o.label}</span>\n <span className=\"ui-dt-opt-n\">{format.number(n)}</span>\n </button>\n );\n })}\n </fieldset>\n );\n })}\n </div>\n </FloatingPanel>\n );\n}\n\n/** Long text in a cell: on phone cards at most 2 lines with 「顯示全部」. */\nexport function LongText({ children }: { children: React.ReactNode }) {\n const ref = React.useRef<HTMLSpanElement>(null);\n const [open, setOpen] = React.useState(false);\n const [over, setOver] = React.useState(false);\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el || open) return;\n const check = () => setOver(el.scrollHeight > el.clientHeight + 1);\n check();\n window.addEventListener('resize', check);\n return () => window.removeEventListener('resize', check);\n }, [open, children]);\n return (\n <span className=\"ui-dt-long\">\n <span ref={ref} className={cx('ui-dt-long-text', !open && 'is-clamped')}>\n {children}\n </span>\n {over || open ? (\n <button\n type=\"button\"\n className=\"ui-dt-more\"\n onClick={(e) => {\n e.stopPropagation();\n setOpen(!open);\n }}\n >\n {open ? tr('收合') : tr('顯示全部')}\n </button>\n ) : null}\n </span>\n );\n}\n","import * as React from 'react';\nimport { Button } from '../Button/Button';\nimport { SearchField } from '../SearchField/SearchField';\nimport { Tabs } from '../Tabs/Tabs';\nimport { format } from '../../format';\nimport { tr } from '../../i18n';\nimport { Icon, type CustomIcon } from '../../icons/Icon';\nimport { cx, monoNums, reduced } from '../../internal/util';\nimport { devWarn } from '../../internal/dev';\nimport { CheckMark } from '../../internal/Field';\nimport { cellText, isActive, matches, readUrl, resolveFilters, searchHit, writeUrl } from './filters';\nimport { ColumnMenu, FilterButton, LongText, markMatch } from './parts';\nimport type { DataTableColumn, DataTableFilter, DataTableView, FilterOption, FilterValue, ResolvedFilter, Row, RowKey, Total } from './types';\n\nexport type { DataTableColumn, DataTableFilter, DataTableView, FilterOption, FilterValue, RangeValue, Row, RowKey, Total } from './types';\n\nexport interface DataTableProps<R extends Row = Record<string, unknown>> {\n columns: DataTableColumn<R>[];\n /** Give each row an `id` so selection and animations follow the row, not its position. */\n rows: R[];\n /** Title above the table, also its accessible name. */\n caption?: string;\n /** Segmented summary above the table: 「全部」 plus one tab per status with its count; picking one filters the rows. */\n summary?: { key: RowKey<R>; items: { value: string; label: string }[]; label?: string };\n /** aria-label when there is no caption. */\n label?: string;\n /** Rows per page. Default 10. */\n pageSize?: number;\n /** Change it when the rows become a different data set: search, filters, sort, page, selection and summary reset. */\n resetKey?: string | number;\n /** Checkboxes appear when a row is hovered, and on every row once any row is selected. */\n selectable?: boolean;\n /** Buttons for the bar that replaces the header while rows are selected. */\n bulkActions?: (ids: string[], clear: () => void) => React.ReactNode;\n /** IconButtons at the row's right end, shown when the row is hovered. */\n rowActions?: (row: R) => React.ReactNode;\n /** px. Default 88. */\n actionsWidth?: number;\n /** Search box (default on; false hides it). Searches every column unless keys is given. */\n search?: false | { placeholder?: string; keys?: RowKey<R>[] };\n /** Filters in the 「篩選」 popover. */\n filters?: DataTableFilter<R>[];\n /** @deprecated use filters. */\n filter?: { key: RowKey<R>; label?: string; options: FilterOption[] };\n /** Write search and filters into the URL. Default true. */\n urlSync?: boolean;\n /** Prefix of the URL parameters when a page has several tables. */\n urlKey?: string;\n /** Saved views shown as tabs above the table. */\n views?: DataTableView<R>[];\n /** Totals row: 'sum', 'avg' or a function per column key. */\n totals?: Partial<Record<string, Total<R>>>;\n /** Keep the first column visible while scrolling sideways. */\n stickyFirst?: boolean;\n /** 「欄位」 menu to hide columns. Default true. */\n columnMenu?: boolean;\n /** Default 「沒有符合的資料」. */\n emptyText?: string;\n className?: string;\n}\n\nconst MOVE = { dur: 320, stagger: 25, ease: 'cubic-bezier(.2,.8,.2,1)' };\nconst ARROWS: Record<'asc' | 'desc' | 'none', CustomIcon> = { asc: 'M12 19V5M6 11l6-6 6 6', desc: 'M12 5v14M6 13l6 6 6-6', none: 'M8 9l4-4 4 4M8 15l4 4 4-4' };\n\nconst get = (row: Row, key: string): unknown => (row as Record<string, unknown>)[key];\nconst isNum = (c: DataTableColumn<never>) => c.numeric || c.format === 'money' || c.format === 'percent';\n\nfunction RowCheck({ v, label, onClick }: { v: boolean | 'mixed'; label: string; onClick: () => void }) {\n return (\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={v}\n aria-label={label}\n className={cx('ui-check-box', 'ui-dt-check', v && 'is-on')}\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n >\n <CheckMark v={v} />\n </button>\n );\n}\n\ninterface Snapshot {\n kind: 'sort' | 'next' | 'prev';\n rows: Record<string, { top: number; bg: string; node: HTMLElement }>;\n order: string[];\n}\n\n/** The table for records: sort, search, filters, page numbers, selection with a bulk bar, row actions; cards on phones. */\nexport function DataTable<R extends Row = Record<string, unknown>>(p: DataTableProps<R>) {\n const { columns: cols, rows, pageSize = 10, urlSync = true, urlKey, search = {}, selectable = false, stickyFirst: sticky = false } = p;\n const filters: ResolvedFilter<R>[] = React.useMemo(() => {\n const list = p.filters ? [...p.filters] : [];\n if (p.filter && !list.length)\n list.push({ key: p.filter.key, label: p.filter.label || cols.find((c) => c.key === p.filter?.key)?.label || p.filter.key, options: p.filter.options });\n return resolveFilters(list, rows);\n }, [p.filters, p.filter, cols, rows]);\n const fromUrl = () => (urlSync && typeof location !== 'undefined' ? readUrl(urlKey, filters) : { q: '', values: {} });\n const [sort, setSort] = React.useState<{ key: string | null; dir: 'asc' | 'desc' }>({ key: null, dir: 'desc' });\n const [page, setPage] = React.useState(0);\n const [q, setQ] = React.useState(() => fromUrl().q);\n const [values, setValues] = React.useState<Record<string, FilterValue>>(() => fromUrl().values);\n const [view, setView] = React.useState(p.views?.[0]?.id ?? null);\n const [hidden, setHidden] = React.useState<Record<string, boolean>>({});\n const [sel, setSel] = React.useState<Record<string, boolean>>({});\n const [sumVal, setSumVal] = React.useState('all');\n const [resetKey, setResetKey] = React.useState(p.resetKey);\n const resetting = resetKey !== p.resetKey;\n if (resetting) {\n setResetKey(p.resetKey);\n setQ('');\n setValues({});\n setPage(0);\n setSel({});\n setSumVal('all');\n setSort({ key: null, dir: 'desc' });\n }\n const valuesKey = JSON.stringify(values);\n React.useEffect(() => {\n if (urlSync && filters.length) writeUrl(urlKey, filters, values, q);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- written when the conditions change, not when the filter list is rebuilt\n }, [valuesKey, q]);\n devWarn(\n cols.some((c) => c.format === 'percent' && !c.unit),\n 'DataTable',\n \"format: 'percent' sets 1 decimal and shows no % sign; add unit: '%' to that column.\",\n );\n devWarn(\n rows.length > 1 && rows.every((r) => get(r, 'id') == null) && selectable,\n 'DataTable',\n 'rows have no id, so a selection follows the position, not the row. Add an id to each row.',\n );\n\n const shownCols = cols.filter((c, i) => i === 0 || !hidden[c.key]);\n const bodyRef = React.useRef<HTMLDivElement>(null);\n const rowEls = React.useRef<Record<string, HTMLDivElement | null>>({});\n const snap = React.useRef<Snapshot | null>(null);\n\n let all = rows.map((r, i) => ({ r, i }));\n const viewObj = p.views?.find((v) => v.id === view);\n if (viewObj?.filter) all = all.filter((x) => viewObj.filter?.(x.r));\n const sumAll = all;\n const summary = p.summary;\n if (summary && sumVal !== 'all') all = all.filter((x) => String(get(x.r, summary.key)) === sumVal);\n const baseCount = all.length;\n const searching = search !== false && !!q;\n const passes = (r: R, skip?: string) =>\n (!searching || searchHit(r, cols, filters, q, search ? search.keys : undefined)) && filters.every((f) => f.key === skip || matches(f, r, values[f.key]));\n let list = all.filter((x) => passes(x.r));\n const activeN = filters.filter((f) => isActive(values[f.key])).length;\n if (sort.key) {\n const key = sort.key;\n const col = cols.find((c) => c.key === key);\n const val = (r: R) => (col?.sortValue ? col.sortValue(r) : get(r, key));\n const d = sort.dir === 'asc' ? 1 : -1;\n list = [...list].sort((a, b) => {\n const x = val(a.r);\n const y = val(b.r);\n const c = typeof x === 'number' && typeof y === 'number' ? x - y : String(x).localeCompare(String(y), 'zh-Hant');\n return c * d || a.i - b.i;\n });\n }\n const pages = Math.max(1, Math.ceil(list.length / pageSize));\n const pageNow = Math.min(page, pages - 1);\n const start = pageNow * pageSize;\n const vis = list.slice(start, start + pageSize);\n const idOf = (x: { r: R; i: number }) => {\n const id = get(x.r, 'id');\n return id != null ? String(id) : String(x.i);\n };\n // Only rows the filters, search, view and summary still show (any page) stay selected: rows filtered out or\n // deleted are unchecked, so bulkActions acts only on what the person can see.\n const present = new Set(list.map(idOf));\n const selIds = Object.keys(sel).filter((k) => sel[k] && present.has(k));\n // Skipped while resetting: the reset above already cleared the selection, and this call would win over it.\n if (!resetting && Object.keys(sel).some((k) => sel[k] && !present.has(k))) setSel(Object.fromEntries(selIds.map((k) => [k, true])));\n const visIds = vis.map(idOf);\n const selVis = visIds.filter((id) => sel[id]).length;\n const allOn = visIds.length > 0 && selVis === visIds.length;\n const mixed = selVis > 0 && !allOn;\n\n // Remember where every row is; the layout effect then animates from there (FLIP).\n const capture = (kind: Snapshot['kind']) => {\n const body = bodyRef.current;\n if (!body) return;\n const top0 = body.getBoundingClientRect().top;\n const snapRows: Snapshot['rows'] = {};\n const order: string[] = [];\n for (const id of visIds) {\n const el = rowEls.current[id];\n if (!el) continue;\n snapRows[id] = { top: el.getBoundingClientRect().top - top0, bg: getComputedStyle(el).backgroundColor, node: el };\n order.push(id);\n }\n snap.current = { kind, rows: snapRows, order };\n };\n React.useLayoutEffect(() => {\n const sn = snap.current;\n snap.current = null;\n const body = bodyRef.current;\n if (!sn || !body || reduced() || typeof Element.prototype.animate !== 'function') return;\n const top0 = body.getBoundingClientRect().top;\n const n = Math.max(sn.order.length, visIds.length);\n let k = 0;\n let rh = 48;\n visIds.forEach((id, i) => {\n const el = rowEls.current[id];\n if (!el) return;\n const r = el.getBoundingClientRect();\n rh = r.height || rh;\n const old = sn.rows[id];\n const timing = { duration: MOVE.dur, delay: i * MOVE.stagger, easing: MOVE.ease, fill: 'backwards' as const };\n if (old) {\n const from = old.top - (r.top - top0);\n el.animate(\n [\n { transform: `translateY(${from}px)`, backgroundColor: old.bg },\n { transform: 'none', backgroundColor: getComputedStyle(el).backgroundColor },\n ],\n timing,\n );\n } else {\n const off = sn.kind === 'next' ? n : sn.kind === 'prev' ? -n : n + k - i;\n k++;\n el.animate(\n [\n { transform: `translateY(${off * rh}px)`, opacity: 0 },\n { transform: 'none', opacity: 1 },\n ],\n timing,\n );\n }\n });\n // Rows that left the page: animate a copy out.\n sn.order.forEach((id, j) => {\n if (visIds.includes(id)) return;\n const o = sn.rows[id];\n const ghost = o.node.cloneNode(true) as HTMLElement;\n ghost.removeAttribute('data-rid');\n ghost.setAttribute('aria-hidden', 'true');\n ghost.classList.add('ui-dt-ghost');\n ghost.style.top = o.top + 'px';\n ghost.style.backgroundColor = o.bg;\n body.appendChild(ghost);\n const to = sn.kind === 'next' ? -n : sn.kind === 'prev' ? n : n + 1 - j;\n ghost.animate(\n [\n { transform: 'none', opacity: 1 },\n { transform: `translateY(${to * rh}px)`, opacity: 0 },\n ],\n { duration: MOVE.dur, easing: MOVE.ease, fill: 'forwards' },\n ).onfinish = () => ghost.remove();\n });\n });\n\n const sortBy = (c: DataTableColumn<R>) => {\n if (c.sortable === false) return;\n const first = c.numeric ? 'desc' : 'asc';\n capture('sort');\n if (sort.key !== c.key) setSort({ key: c.key, dir: first });\n else if (sort.dir === first) setSort({ key: c.key, dir: first === 'asc' ? 'desc' : 'asc' });\n else setSort({ key: null, dir: 'desc' });\n };\n const goPage = (n: number) => {\n if (n === pageNow || n < 0 || n >= pages) return;\n capture(n > pageNow ? 'next' : 'prev');\n setPage(n);\n };\n const toggle = (ids: string[], v: boolean) => setSel({ ...sel, ...Object.fromEntries(ids.map((id) => [id, v])) });\n const clear = () => setSel({});\n const clearFilters = () => {\n setValues({});\n setQ('');\n setPage(0);\n };\n\n const hasAct = !!p.rowActions;\n const actW = p.actionsWidth || 88;\n const hasTitle = shownCols.some((c) => c.mobile === 'title');\n const mobileClass = (c: DataTableColumn<R>, ci: number) => {\n const m = c.mobile || (!hasTitle && ci === 0 ? 'title' : null);\n return m ? 'is-m-' + m : null;\n };\n const template = [\n selectable ? '46px' : null,\n ...shownCols.map((c) => (c.width ? `minmax(${c.width}px, ${c.grow || 1}fr)` : c.numeric ? 'minmax(96px, .8fr)' : 'minmax(120px, 1fr)')),\n hasAct ? actW + 'px' : null,\n ]\n .filter(Boolean)\n .join(' ');\n const minW = (selectable ? 46 : 0) + shownCols.reduce((a, c) => a + (c.width || (c.numeric ? 96 : 120)), 0) + (hasAct ? actW : 0);\n const gridStyle = { gridTemplateColumns: template, minWidth: minW };\n const stickyStyle = (ci: number) => (ci === 0 && sticky ? { left: selectable ? 46 : 0 } : undefined);\n const cellClass = (c: DataTableColumn<R>, ci: number, ...more: unknown[]) =>\n cx('ui-dt-cell', isNum(c) && 'is-num', ci === 0 && sticky && 'is-sticky', ...more);\n\n const head =\n selectable && selIds.length && p.bulkActions ? (\n <div className=\"ui-dt-row ui-dt-head ui-dt-bulk\" role=\"row\" style={{ minWidth: minW }}>\n <div className=\"ui-dt-cell\" role=\"columnheader\">\n <RowCheck v={allOn ? true : 'mixed'} label={tr('全選')} onClick={() => toggle(visIds, !allOn)} />\n </div>\n <span className=\"ui-dt-bulk-count\">{tr('已選 {n} 筆', { n: selIds.length })}</span>\n <span className=\"ui-dt-bulk-actions\">{p.bulkActions(selIds, clear)}</span>\n <button type=\"button\" className=\"ui-dt-bulk-close\" aria-label={tr('取消選取')} onClick={clear}>\n <Icon name=\"x\" size={14} />\n </button>\n </div>\n ) : (\n <div className=\"ui-dt-row ui-dt-head\" role=\"row\" style={gridStyle}>\n {selectable ? (\n <div className=\"ui-dt-cell ui-dt-sel\" role=\"columnheader\">\n <RowCheck v={allOn ? true : mixed ? 'mixed' : false} label={tr('全選')} onClick={() => toggle(visIds, !allOn)} />\n </div>\n ) : null}\n {shownCols.map((c, ci) => {\n const cur = sort.key === c.key;\n return (\n <div\n key={c.key}\n role=\"columnheader\"\n aria-sort={cur ? (sort.dir === 'asc' ? 'ascending' : 'descending') : 'none'}\n className={cellClass(c, ci)}\n style={stickyStyle(ci)}\n >\n {c.sortable === false ? (\n c.label\n ) : (\n <button type=\"button\" className={cx('ui-dt-sort', cur && 'is-on')} onClick={() => sortBy(c)}>\n <span>{c.label}</span>\n <Icon d={ARROWS[cur ? sort.dir : 'none']} size={14} className=\"ui-dt-arrow\" />\n </button>\n )}\n </div>\n );\n })}\n {hasAct ? <div className=\"ui-dt-cell\" role=\"columnheader\" aria-label={tr('操作')} /> : null}\n </div>\n );\n\n const mark = searching ? q : '';\n const cell = (r: R, c: DataTableColumn<R>) => {\n const raw = get(r, c.key);\n let v: React.ReactNode;\n if (c.render) v = c.render(r);\n else if (c.unit && raw !== null && raw !== undefined && raw !== '')\n v = (\n <>\n {markMatch(cellText({ ...c, unit: undefined }, raw), mark)} <span className=\"ui-unit\">{c.unit}</span>\n </>\n );\n else v = markMatch(cellText(c, raw), mark);\n return c.long ? <LongText>{v}</LongText> : v;\n };\n const total = (c: DataTableColumn<R>, ci: number): React.ReactNode => {\n const how = p.totals?.[c.key];\n const rowsAll = list.map((x) => x.r);\n if (ci === 0 && !how) return tr('合計 {n} 筆', { n: format.number(rowsAll.length) });\n if (typeof how === 'function') return how(rowsAll);\n if (how === 'sum' || how === 'avg') {\n const sum = rowsAll.reduce((a, r) => a + (Number(get(r, c.key)) || 0), 0);\n const val = how === 'sum' ? sum : sum / (rowsAll.length || 1);\n return (how === 'avg' ? tr('平均') + ' ' : '') + cellText(how === 'avg' && !c.format ? { ...c, decimals: 1 } : c, val);\n }\n return '';\n };\n\n return (\n <div className={cx('ui-dt', selIds.length && 'has-sel', p.className)}>\n {p.caption ? <div className=\"ui-dt-caption\">{p.caption}</div> : null}\n {p.views ? (\n <div className=\"ui-dt-views\" role=\"tablist\" aria-label={tr('檢視')}>\n {p.views.map((v) => {\n const on = v.id === view;\n return (\n <button\n key={v.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={on}\n className={cx('ui-dt-view', on && 'is-on')}\n onClick={() => {\n setView(v.id);\n setPage(0);\n }}\n >\n {v.label}\n <span className=\"ui-dt-view-n\">{format.number(rows.filter((r) => !v.filter || v.filter(r)).length)}</span>\n </button>\n );\n })}\n </div>\n ) : null}\n {summary ? (\n <Tabs\n className=\"ui-dt-summary\"\n label={summary.label || tr('依狀態篩選')}\n value={sumVal}\n onChange={(v) => {\n capture('sort');\n setSumVal(v);\n setPage(0);\n }}\n items={[\n { id: 'all', label: tr('全部'), count: sumAll.length },\n ...summary.items.map((it) => ({\n id: String(it.value),\n label: it.label,\n count: sumAll.filter((x) => String(get(x.r, summary.key)) === String(it.value)).length,\n })),\n ]}\n />\n ) : null}\n <div className=\"ui-dt-tools\">\n {search !== false ? (\n <SearchField\n value={q}\n onChange={(v) => {\n setQ(v);\n setPage(0);\n }}\n placeholder={search.placeholder || tr('搜尋')}\n label={search.placeholder || tr('搜尋')}\n className=\"ui-dt-search\"\n />\n ) : null}\n {filters.length ? (\n <FilterButton\n filters={filters}\n values={values}\n activeCount={activeN}\n count={(f, v) => all.filter((x) => passes(x.r, f.key) && matches(f, x.r, f.type === 'list' ? [v] : undefined)).length}\n onChange={(key, v) => {\n setValues({ ...values, [key]: v });\n setPage(0);\n }}\n onClear={() => {\n setValues({});\n setPage(0);\n }}\n />\n ) : null}\n <span className=\"ui-dt-result\">\n {monoNums(tr('{n} / {total} 筆', { n: '\\u0001', total: '\\u0002' }), [format.number(list.length), format.number(baseCount)])}\n </span>\n {p.columnMenu !== false && cols.length > 2 ? (\n <ColumnMenu cols={cols} hidden={hidden} onToggle={(k) => setHidden({ ...hidden, [k]: !hidden[k] })} />\n ) : null}\n </div>\n <div className=\"ui-dt-scroll\">\n <div className=\"ui-dt-table\" role=\"table\" aria-label={p.label || p.caption}>\n {head}\n <div ref={bodyRef} className=\"ui-dt-body\" role=\"rowgroup\">\n {vis.length ? (\n vis.map((x, i) => {\n const id = visIds[i];\n const on = !!sel[id];\n return (\n <div\n key={id}\n data-rid={id}\n ref={(el) => {\n rowEls.current[id] = el;\n }}\n role=\"row\"\n className={cx('ui-dt-row', i % 2 && 'is-even', on && 'is-selected', selectable && 'has-sel')}\n style={gridStyle}\n >\n {selectable ? (\n <div className=\"ui-dt-cell ui-dt-sel\" role=\"cell\">\n <RowCheck v={on} label={tr('選取第 {n} 筆', { n: start + i + 1 })} onClick={() => toggle([id], !on)} />\n </div>\n ) : null}\n {shownCols.map((c, ci) => (\n <div\n key={c.key}\n role=\"cell\"\n data-label={c.label}\n className={cellClass(c, ci, c.long && 'is-long', mobileClass(c, ci))}\n style={stickyStyle(ci)}\n >\n {cell(x.r, c)}\n </div>\n ))}\n {hasAct ? (\n <div className=\"ui-dt-cell ui-dt-acts\" role=\"cell\">\n {p.rowActions?.(x.r)}\n </div>\n ) : null}\n </div>\n );\n })\n ) : (\n <div className=\"ui-dt-empty\">\n {p.emptyText || tr('沒有符合的資料')}\n {q || activeN ? (\n <div>\n <Button onClick={clearFilters}>{tr('清除篩選')}</Button>\n </div>\n ) : null}\n </div>\n )}\n </div>\n {p.totals && list.length ? (\n <div className=\"ui-dt-row ui-dt-total\" role=\"row\" style={gridStyle}>\n {selectable ? <div className=\"ui-dt-cell\" role=\"cell\" /> : null}\n {shownCols.map((c, ci) => (\n <div key={c.key} role=\"cell\" className={cellClass(c, ci)} style={stickyStyle(ci)}>\n {total(c, ci)}\n </div>\n ))}\n {hasAct ? <div className=\"ui-dt-cell\" role=\"cell\" /> : null}\n </div>\n ) : null}\n </div>\n </div>\n {list.length > 0 ? (\n <div className=\"ui-dt-foot\">\n <span className=\"ui-dt-range\">\n {monoNums(tr('第 {a}–{b} 筆,共 {n} 筆', { a: '\\u0001', b: '\\u0002', n: '\\u0003' }), [\n start + 1,\n Math.min(list.length, start + pageSize),\n format.number(list.length),\n ])}\n </span>\n {pages > 1 ? (\n <nav className=\"ui-dt-pages\" aria-label={tr('分頁')}>\n <button type=\"button\" className=\"ui-dt-page\" aria-label={tr('上一頁')} disabled={pageNow === 0} onClick={() => goPage(pageNow - 1)}>\n ‹\n </button>\n {Array.from({ length: pages }, (_, i) => (\n <button\n key={i}\n type=\"button\"\n className={cx('ui-dt-page', i === pageNow && 'is-on')}\n aria-current={i === pageNow ? 'page' : undefined}\n onClick={() => goPage(i)}\n >\n {String(i + 1)}\n </button>\n ))}\n <button type=\"button\" className=\"ui-dt-page\" aria-label={tr('下一頁')} disabled={pageNow >= pages - 1} onClick={() => goPage(pageNow + 1)}>\n ›\n </button>\n </nav>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n","import * as React from 'react';\nimport { fmtDate, parseDate, sameDay } from '../../format';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { FieldLabel } from '../../internal/Field';\nimport { FloatingPanel } from '../../internal/FloatingPanel';\nimport { Calendar } from '../Calendar/Calendar';\n\nexport interface DatePickerProps {\n label?: string;\n value: Date | null;\n onChange: (d: Date | null) => void;\n /** Default 「可以直接輸入,例如 2026/11/14」. */\n hint?: string;\n required?: boolean;\n className?: string;\n}\n\n/** A date field: type YYYY/MM/DD, or pick from the calendar button's month grid. */\nexport function DatePicker({ label, value, onChange, hint, required, className }: DatePickerProps) {\n const id = React.useId();\n const [open, setOpen] = React.useState(false);\n const [typed, setTyped] = React.useState<string | null>(null);\n const field = React.useRef<HTMLDivElement>(null);\n const bad = typed !== null && typed !== '' && !parseDate(typed);\n const commit = (d: Date | null) => {\n setTyped(null);\n onChange(d);\n setOpen(false);\n };\n return (\n <div className={cx('ui-field', className)}>\n {label ? (\n <FieldLabel htmlFor={id} required={required}>\n {label}\n </FieldLabel>\n ) : null}\n <div ref={field} className={cx('ui-datefield', bad && 'is-invalid')}>\n <input\n id={id}\n className=\"ui-datefield-input\"\n value={typed ?? fmtDate(value)}\n placeholder=\"YYYY/MM/DD\"\n aria-invalid={bad || undefined}\n onChange={(e) => {\n const t = e.target.value;\n setTyped(t);\n const d = parseDate(t);\n if (d) onChange(d);\n else if (t === '') onChange(null);\n }}\n onBlur={() => !bad && setTyped(null)}\n />\n <FloatingPanel\n open={open}\n onOpenChange={setOpen}\n anchor={field}\n className=\"ui-datepop\"\n aria-label={tr('選擇日期')}\n trigger={\n <button type=\"button\" className=\"ui-datefield-btn\" aria-label={tr('開啟日曆')}>\n <Icon name=\"calendar-blank\" size={18} />\n </button>\n }\n >\n <Calendar focus={value} dayState={(d) => ({ selected: sameDay(d, value) })} onPick={commit} />\n <div className=\"ui-datepop-foot\">\n <button type=\"button\" className=\"ui-link-btn\" onClick={() => commit(new Date(new Date().setHours(0, 0, 0, 0)))}>\n {tr('今天')}\n </button>\n <button type=\"button\" className=\"ui-link-btn is-muted\" onClick={() => commit(null)}>\n {tr('清除')}\n </button>\n </div>\n </FloatingPanel>\n </div>\n <div className={cx('ui-field-hint', bad && 'is-error')}>\n {bad ? tr('日期格式不正確,請寫成 2026/11/14') : hint || tr('可以直接輸入,例如 2026/11/14')}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { dayAdd, fmtDate, sameDay } from '../../format';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { FieldLabel } from '../../internal/Field';\nimport { FloatingPanel } from '../../internal/FloatingPanel';\nimport { Calendar } from '../Calendar/Calendar';\n\nexport type DateRange = [Date, Date];\n\nexport interface DateRangePickerProps {\n label?: string;\n value: [Date | null, Date | null];\n onChange: (range: DateRange) => void;\n /** Default 「選擇期間」. */\n placeholder?: string;\n className?: string;\n}\n\n/** A period: quick ranges (今天、最近 7 天、最近 30 天、本月、上個月) beside one month. Click a start day, then an end day. */\nexport function DateRangePicker({ label, value, onChange, placeholder, className }: DateRangePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [first, setFirst] = React.useState<Date | null>(null);\n const [hover, setHover] = React.useState<Date | null>(null);\n const t0 = new Date();\n t0.setHours(0, 0, 0, 0);\n const quick: [string, DateRange][] = [\n [tr('今天'), [t0, t0]],\n [tr('最近 7 天'), [dayAdd(t0, -6), t0]],\n [tr('最近 30 天'), [dayAdd(t0, -29), t0]],\n [tr('本月'), [new Date(t0.getFullYear(), t0.getMonth(), 1), new Date(t0.getFullYear(), t0.getMonth() + 1, 0)]],\n [tr('上個月'), [new Date(t0.getFullYear(), t0.getMonth() - 1, 1), new Date(t0.getFullYear(), t0.getMonth(), 0)]],\n ];\n const toggle = (next: boolean) => {\n setOpen(next);\n if (!next) setFirst(null);\n };\n const set = (r: DateRange) => {\n onChange(r);\n toggle(false);\n };\n const a = first || value[0];\n const b = first ? hover || first : value[1];\n const lo = a && b && b < a ? b : a;\n const hi = a && b && b < a ? a : b;\n return (\n <div className={cx('ui-field', className)}>\n {label ? <FieldLabel>{label}</FieldLabel> : null}\n <FloatingPanel\n open={open}\n onOpenChange={toggle}\n className=\"ui-datepop ui-rangepop\"\n aria-label={tr('選擇期間')}\n trigger={\n <button\n type=\"button\"\n className={cx('ui-datefield', 'ui-rangefield', open && 'is-open')}\n aria-label={\n value[0]\n ? tr('{label}:{a} 到 {b}', { label: label || tr('期間'), a: fmtDate(value[0]), b: fmtDate(value[1]) })\n : `${label || tr('期間')}:${placeholder || tr('選擇期間')}`\n }\n >\n <Icon name=\"calendar-blank\" size={18} />\n <span>{value[0] ? `${fmtDate(value[0])} – ${fmtDate(value[1])}` : placeholder || tr('選擇期間')}</span>\n </button>\n }\n >\n <div className=\"ui-quick\">\n {quick.map(([name, r]) => (\n <button\n key={name}\n type=\"button\"\n className={cx('ui-quick-btn', sameDay(r[0], value[0]) && sameDay(r[1], value[1]) && 'is-on')}\n onClick={() => set(r)}\n >\n {name}\n </button>\n ))}\n </div>\n <Calendar\n focus={value[1] || value[0]}\n onHover={first ? setHover : undefined}\n dayState={(d) => ({\n selected: sameDay(d, lo) || sameDay(d, hi),\n start: sameDay(d, lo),\n end: sameDay(d, hi),\n inRange: !!lo && !!hi && d > lo && d < hi,\n })}\n onPick={(d) => {\n if (!first) {\n setFirst(d);\n setHover(d);\n } else set(first <= d ? [first, d] : [d, first]);\n }}\n />\n </FloatingPanel>\n </div>\n );\n}\n","import type * as React from 'react';\nimport { cx } from '../../internal/util';\n\nexport interface DetailListItem {\n label: string;\n value: React.ReactNode;\n}\n\nexport interface DetailListProps {\n items: DetailListItem[];\n className?: string;\n}\n\n/** Labelled facts about one item: label beside the value when there is room, above it under 600 px. */\nexport function DetailList({ items, className }: DetailListProps) {\n return (\n <dl className={cx('ui-dl', className)}>\n {items.map((it, i) => (\n <div key={i} className=\"ui-dl-item\">\n <dt>{it.label}</dt>\n <dd>{it.value}</dd>\n </div>\n ))}\n </dl>\n );\n}\n","import type * as React from 'react';\n\nexport interface EmptyStateProps {\n /** What is empty, stated: 「還沒有專案」. */\n title: string;\n /** One sentence on what to do. */\n description?: string;\n /** Numbered first steps. */\n steps?: string[];\n /** Index of the current step. Default 0. */\n current?: number;\n /** The one button that starts the first step. */\n action?: React.ReactNode;\n}\n\n/** What a list or page shows when it has nothing yet: what is missing and the first step. */\nexport function EmptyState({ title, description, steps = [], current = 0, action }: EmptyStateProps) {\n return (\n <div className=\"ui-empty\">\n <div className=\"ui-empty-title\">{title}</div>\n {description ? <p className=\"ui-empty-desc\">{description}</p> : null}\n {steps.length ? (\n <ol className=\"ui-steps\">\n {steps.map((s, i) => (\n <li key={i} className={i === current ? 'is-current' : undefined}>\n <span className=\"ui-step-num\">{i + 1}</span>\n <span>{s}</span>\n </li>\n ))}\n </ol>\n ) : null}\n {action ?? null}\n </div>\n );\n}\n","import { tr } from '../../i18n';\nimport { cx } from '../../internal/util';\nimport { Button } from '../Button/Button';\n\nconst ERR_COPY: Record<number, [string, string]> = {\n 404: ['找不到這個頁面', '網址可能打錯了,或這個頁面已經移除。'],\n 500: ['伺服器暫時無法回應', '這個問題已經記錄下來,請稍後重新整理再試。'],\n 403: ['沒有權限查看這個頁面', '請向管理員申請權限,或切換成有權限的帳號。'],\n};\n\nexport interface ErrorPageProps {\n /** 404, 403 and 500 come with their own title and sentence. */\n code: number;\n title?: string;\n description?: string;\n /** Default: history.back(). */\n onBack?: () => void;\n onHome?: () => void;\n /** Default '/'. */\n homeHref?: string;\n className?: string;\n}\n\n/** A whole page for 404, 403 and 500: the code, a title, one sentence, then 「回上一頁」 and 「回首頁」. */\nexport function ErrorPage({ code, title, description, onBack, onHome, homeHref = '/', className }: ErrorPageProps) {\n const copy = ERR_COPY[code];\n return (\n <main className={cx('ui-errorpage', className)}>\n <div className=\"ui-errorpage-code\" aria-hidden=\"true\">\n {code}\n </div>\n <h1 className=\"ui-errorpage-title\">{title || (copy ? tr(copy[0]) : tr('發生錯誤'))}</h1>\n <p className=\"ui-errorpage-desc\">{description || (copy ? tr(copy[1]) : '')}</p>\n <div className=\"ui-errorpage-actions\">\n <Button onClick={onBack ?? (() => history.back())}>{tr('回上一頁')}</Button>\n <Button variant=\"primary\" onClick={onHome ?? (() => (location.href = homeHref))}>\n {tr('回首頁')}\n </Button>\n </div>\n </main>\n );\n}\n","import { tr } from '../../i18n';\nimport { cx } from '../../internal/util';\n\nexport interface ProgressBarProps {\n /** 0 to 100. */\n value: number;\n label?: string;\n className?: string;\n}\n\n/** Progress of a task with a known end, with the percentage after the bar. */\nexport function ProgressBar({ value, label, className }: ProgressBarProps) {\n const v = Math.max(0, Math.min(100, value || 0));\n const done = v >= 100;\n return (\n <div className={cx('ui-progress', done && 'is-done', className)}>\n {label ? <div className=\"ui-field-label\">{label}</div> : null}\n <div className=\"ui-progress-track\" role=\"progressbar\" aria-valuemin={0} aria-valuemax={100} aria-valuenow={Math.round(v)} aria-label={label}>\n <div className=\"ui-progress-fill\" style={{ width: v + '%' }} />\n </div>\n <div className=\"ui-progress-text\">{done ? tr('完成 ✓') : Math.round(v) + '%'}</div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { FieldLabel } from '../../internal/Field';\nimport { ProgressBar } from '../ProgressBar/ProgressBar';\n\nexport interface UploadFile {\n id?: string | number;\n name: string;\n /** format.fileSize(bytes), e.g. 「1.2 MB」. */\n size?: string;\n /** 0 to 100 while uploading. */\n progress?: number;\n status?: 'uploading' | 'done' | 'error';\n /** The cause and the fix, shown in red. */\n error?: string;\n}\n\nexport interface FileUploadProps {\n label?: string;\n files?: UploadFile[];\n onAdd?: (files: File[]) => void;\n onRemove?: (file: UploadFile) => void;\n onRetry?: (file: UploadFile) => void;\n /** Written inside the drop zone, e.g. 「每個最大 100 MB」. */\n limitText?: string;\n accept?: string;\n /** Default true. */\n multiple?: boolean;\n className?: string;\n}\n\n/** A one-line drop zone and a list of files with progress. The upload itself is yours: pass files with progress and status. */\nexport function FileUpload({ label, files = [], onAdd, onRemove, onRetry, limitText, accept, multiple = true, className }: FileUploadProps) {\n const [drag, setDrag] = React.useState(false);\n const input = React.useRef<HTMLInputElement>(null);\n const add = (list: FileList | null) => {\n const arr = Array.from(list ?? []);\n if (arr.length) onAdd?.(arr);\n };\n return (\n <div className={cx('ui-upload', className)}>\n {label ? <FieldLabel>{label}</FieldLabel> : null}\n <div\n className={cx('ui-dropline', drag && 'is-drag')}\n onDragOver={(e) => {\n e.preventDefault();\n setDrag(true);\n }}\n onDragLeave={() => setDrag(false)}\n onDrop={(e) => {\n e.preventDefault();\n setDrag(false);\n add(e.dataTransfer.files);\n }}\n >\n <Icon name=\"upload-simple\" size={18} />\n <span className=\"ui-dropline-text\">\n {tr('拖放檔案,或 ')}\n <button type=\"button\" className=\"ui-link-btn\" onClick={() => input.current?.click()}>\n {tr('選擇檔案')}\n </button>\n </span>\n {limitText ? <span className=\"ui-dropline-limit\">{limitText}</span> : null}\n <input\n ref={input}\n type=\"file\"\n multiple={multiple}\n accept={accept}\n hidden\n onChange={(e) => {\n add(e.target.files);\n e.target.value = '';\n }}\n />\n </div>\n {files.length ? (\n <ul className=\"ui-upload-list\">\n {files.map((fl) => {\n const fail = fl.status === 'error';\n return (\n <li key={fl.id ?? fl.name} className={cx('ui-upload-item', fail && 'is-error')}>\n <Icon name=\"file\" size={20} className=\"ui-upload-icon\" />\n <div className=\"ui-upload-body\">\n <div className=\"ui-upload-row\">\n <span className=\"ui-upload-name\">{fl.name}</span>\n {fl.size ? <span className=\"ui-upload-size\">{fl.size}</span> : null}\n </div>\n {!fail ? (\n <ProgressBar value={fl.status === 'done' ? 100 : fl.progress || 0} />\n ) : (\n <div className=\"ui-upload-error\" role=\"alert\">\n {fl.error || tr('上傳失敗,請再試一次。')}\n {onRetry ? (\n <button type=\"button\" className=\"ui-link-btn\" onClick={() => onRetry(fl)}>\n {tr('重試')}\n </button>\n ) : null}\n </div>\n )}\n </div>\n {onRemove ? (\n <button type=\"button\" className=\"ui-dialog-close\" aria-label={tr('移除 {name}', { name: fl.name })} onClick={() => onRemove(fl)}>\n <Icon name=\"x\" size={16} />\n </button>\n ) : null}\n </li>\n );\n })}\n </ul>\n ) : null}\n </div>\n );\n}\n","import type * as React from 'react';\nimport { cx } from '../../internal/util';\n\nexport interface FormGridProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/** Form layout: one column, two columns from 960 px. */\nexport function FormGrid({ children, className }: FormGridProps) {\n return <div className={cx('ui-formgrid', className)}>{children}</div>;\n}\n","import * as React from 'react';\nimport { Popover } from '@base-ui/react/popover';\nimport { Dialog } from '@base-ui/react/dialog';\nimport { CodeText, type OnRef, type RefHref } from '../InlineCode/InlineCode';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx, useNarrow } from '../../internal/util';\nimport { FloatingPanel } from '../../internal/FloatingPanel';\n\nexport interface TermProps {\n /** The word or label that needs explaining. */\n children?: React.ReactNode;\n /** Heading of the explanation. Default: children when it is text. */\n title?: string;\n /** The explanation, at most 2 short sentences; `backticks` are code. */\n text?: string;\n /** Other content instead of text. */\n content?: React.ReactNode;\n /** An evidence line, shown as a code block. */\n code?: string;\n /** One link-style action at the bottom. */\n action?: { label: string; onClick?: () => void };\n refHref?: RefHref;\n onRef?: OnRef;\n isRef?: (span: string) => boolean;\n className?: string;\n}\n\n/** A word followed by a small question mark that opens its explanation: a floating card from 600 px, a sheet from the bottom on phones. */\nexport function Term({ children, title, text, content, code, action, refHref, onRef, isRef, className }: TermProps) {\n const [open, setOpen] = React.useState(false);\n const narrow = useNarrow();\n const ref = React.useRef<HTMLButtonElement>(null);\n // Inside a sentence (text beside it) the term keeps its line height; on its own it gets the 48 px touch area.\n const [inline, setInline] = React.useState(false);\n React.useLayoutEffect(() => {\n const par = ref.current?.parentNode;\n const txt = !!par && Array.from(par.childNodes).some((n) => n.nodeType === 3 && !!n.textContent?.trim());\n setInline(txt);\n }, [children]);\n const heading = title || (typeof children === 'string' ? children : '');\n const trigger = (\n <button type=\"button\" ref={ref} className={cx('ui-term', inline && 'is-inline', open && 'is-open', className)}>\n {children}\n <Icon name=\"question\" size={14} className=\"ui-term-q\" />\n <span className=\"ui-visually-hidden\">{tr('(說明)')}</span>\n </button>\n );\n const body = (Title: typeof Popover.Title | typeof Dialog.Title, Close: typeof Popover.Close | typeof Dialog.Close) => (\n <>\n <div className=\"ui-term-head\">\n <Title className=\"ui-term-title\">{heading}</Title>\n <Close className=\"ui-dialog-close ui-term-close\" aria-label={tr('關閉說明')}>\n <Icon name=\"x\" />\n </Close>\n </div>\n {text ? <CodeText as=\"div\" className=\"ui-term-body\" text={text} refHref={refHref} onRef={onRef} isRef={isRef} /> : null}\n {content ? <div className=\"ui-term-body\">{content}</div> : null}\n {code ? <pre className=\"ui-term-code\">{code}</pre> : null}\n {action ? (\n <button\n type=\"button\"\n className=\"ui-link-btn ui-term-action\"\n onClick={() => {\n setOpen(false);\n action.onClick?.();\n }}\n >\n {action.label}\n </button>\n ) : null}\n </>\n );\n if (narrow)\n return (\n <Dialog.Root open={open} onOpenChange={setOpen}>\n <Dialog.Trigger render={trigger} />\n <Dialog.Portal>\n <Dialog.Backdrop className=\"ui-term-backdrop\" />\n <Dialog.Popup className=\"ui-term-sheet\">{body(Dialog.Title, Dialog.Close)}</Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n return (\n <FloatingPanel open={open} onOpenChange={setOpen} sideOffset={8} className=\"ui-term-pop\" trigger={trigger}>\n {body(Popover.Title, Popover.Close)}\n </FloatingPanel>\n );\n}\n","import { Term } from '../Term/Term';\nimport { tr } from '../../i18n';\nimport { cx } from '../../internal/util';\n\n/** <defs> with the arrowheads #ui-arrow and #ui-arrow-accent; put it first inside your diagram's <svg>. */\nexport function GraphDefs() {\n const marker = (id: string, accent: boolean) => (\n <marker id={id} viewBox=\"0 0 10 10\" refX={9} refY={5} markerWidth={7} markerHeight={7} orient=\"auto-start-reverse\">\n <path d=\"M0 0L10 5L0 10z\" className={cx('ui-graph-arrow', accent && 'is-accent')} />\n </marker>\n );\n return (\n <defs>\n {marker('ui-arrow', false)}\n {marker('ui-arrow-accent', true)}\n </defs>\n );\n}\n\nexport interface GraphLegendItem {\n /** edge: a confirmed line; inferred: a dashed line; external: a dashed box; node: a plain box; weight: thin and thick lines. */\n type: 'edge' | 'inferred' | 'external' | 'node' | 'weight';\n /** Your own words for it: 「呼叫」「推測的呼叫」「外部函式」. */\n label: string;\n /** Adds a Term with this explanation. */\n text?: string;\n}\n\nconst LEGEND_DEFAULT: GraphLegendItem[] = [\n { type: 'edge', label: '確定的關係' },\n { type: 'inferred', label: '推測的關係' },\n { type: 'external', label: '外部項目' },\n];\n\nexport interface GraphLegendProps {\n /** Default: 確定的關係, 推測的關係, 外部項目. Pass your domain's words. */\n items?: GraphLegendItem[];\n className?: string;\n}\n\nfunction Swatch({ type }: { type: GraphLegendItem['type'] }) {\n if (type === 'weight')\n return (\n <span className=\"ui-graph-legend-sw\">\n {[1.5, 6].map((w) => (\n <svg key={w} width={22} height={8} aria-hidden=\"true\">\n <line x1={0} y1={4} x2={22} y2={4} className=\"ui-graph-edge\" style={{ strokeWidth: w }} />\n </svg>\n ))}\n </span>\n );\n if (type === 'external' || type === 'node')\n return (\n <svg width={22} height={14} aria-hidden=\"true\">\n <rect x={1} y={1} width={20} height={12} rx={4} className={cx('ui-graph-node', type === 'external' && 'is-external')} />\n </svg>\n );\n return (\n <svg width={28} height={8} aria-hidden=\"true\">\n <line x1={0} y1={4} x2={28} y2={4} className={cx('ui-graph-edge', type === 'inferred' && 'is-inferred')} />\n </svg>\n );\n}\n\n/** The legend row under a diagram: what each line and box style means. */\nexport function GraphLegend({ items = LEGEND_DEFAULT, className }: GraphLegendProps) {\n return (\n <div className={cx('ui-graph-legend', className)}>\n {items.map((it, i) => (\n <span key={i} className=\"ui-graph-legend-item\">\n <Swatch type={it.type} />\n {it.text ? (\n <Term title={it.label} text={it.text}>\n {tr(it.label)}\n </Term>\n ) : (\n tr(it.label)\n )}\n </span>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport { format } from '../../format';\nimport { devWarn } from '../../internal/dev';\nimport { I18N, tr } from '../../i18n';\nimport { kpiText, smoothPath, useCountUp, useFitText, type Point } from '../../internal/chart';\nimport { cx, digits } from '../../internal/util';\n\nexport interface KpiCardProps {\n /** What is measured: 「本月營收」. */\n label: string;\n value: number;\n /** 'money' shows NT$ 1,280; 'percent' 1 decimal without the % sign: pass unit=\"%\" (same as DataTable). Default 'number'. */\n format?: 'number' | 'money' | 'percent';\n /** For money. Default: the locale's currency (TWD). */\n currency?: string;\n /** Abbreviate from 1 萬 (default true). The only place numbers are abbreviated. */\n compact?: boolean;\n /** Written after the number: 元, 人, ms, %. */\n unit?: string;\n decimals?: number;\n /** Change versus the comparison period. */\n delta?: number;\n /** '%' (default) or 'pt' for percentage points. */\n deltaUnit?: '%' | 'pt';\n /** Whether the change is good. Default: delta > 0. Set false where up is bad (error rate, cost). */\n good?: boolean;\n /** Recent values for the sparkline. */\n spark?: number[];\n /** Default 「較上週」. */\n compareLabel?: string;\n className?: string;\n}\n\n/** One figure with its change and a sparkline. It is a card: put several in a grid, not inside another Card. */\nexport function KpiCard(props: KpiCardProps) {\n const { label, value, unit, decimals = 0, delta, deltaUnit, good, spark, compareLabel, className } = props;\n devWarn(props.format === 'percent' && !unit, 'KpiCard', 'format=\\'percent\\' shows the number only; pass unit=\"%\" for the smaller % after it.');\n const t = useCountUp(value, 900);\n const valRef = React.useRef<HTMLDivElement>(null);\n useFitText(valRef, [value, props.format, unit, decimals, props.compact, props.currency, I18N.locale]);\n const hasDelta = typeof delta === 'number';\n const up = hasDelta && delta > 0;\n const isGood = good ?? up;\n const dTxt = hasDelta ? (deltaUnit === 'pt' ? tr('{n} 個百分點', { n: format.number(Math.abs(delta), 2) }) : format.percent(Math.abs(delta))) : '';\n let sparkD: string | null = null;\n if (spark && spark.length > 1) {\n const mx = Math.max(...spark);\n const mn = Math.min(...spark);\n sparkD = smoothPath(spark.map((v, i): Point => [(i * 160) / (spark.length - 1), 32 - ((v - mn) / (mx - mn || 1)) * 28]));\n }\n const showUnit = unit && props.format !== 'money';\n return (\n <section className={cx('ui-kpi', className)}>\n <div className=\"ui-kpi-label\">{label}</div>\n <div ref={valRef} className=\"ui-kpi-value\" aria-label={kpiText(value, props, decimals) + (showUnit ? ' ' + unit : '')}>\n <span className=\"ui-kpi-num\" aria-hidden=\"true\">\n <span className=\"ui-kpi-sizer\">{kpiText(value, props, decimals)}</span>\n <span className=\"ui-kpi-live\">{kpiText(value * t, props, decimals)}</span>\n </span>\n {showUnit ? (\n <span className=\"ui-kpi-unit\" aria-hidden=\"true\">\n {unit}\n </span>\n ) : null}\n </div>\n {sparkD ? (\n <svg className=\"ui-kpi-spark\" width=\"100%\" height={36} viewBox=\"0 0 160 36\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n <path d={sparkD} fill=\"none\" stroke=\"var(--chart-1)\" strokeWidth={2} strokeLinecap=\"round\" vectorEffect=\"non-scaling-stroke\" />\n </svg>\n ) : null}\n {hasDelta ? (\n <div className=\"ui-kpi-delta\">\n <span className={cx('ui-kpi-change', isGood ? 'is-good' : 'is-bad')}>\n {up ? '▲ ' : '▼ '}\n {digits(dTxt)}\n </span>\n <span className=\"ui-kpi-note\">{compareLabel || tr('較上週')}</span>\n </div>\n ) : null}\n </section>\n );\n}\n","import * as React from 'react';\nimport { GraphLegend, type GraphLegendItem } from '../Graph/Graph';\nimport { tr } from '../../i18n';\nimport { cx, monoNums } from '../../internal/util';\nimport { devWarn } from '../../internal/dev';\n\nexport interface LayerGraphNode {\n id: string;\n name?: string;\n /** 0 is the top layer. */\n layer?: number;\n /** How big it is (functions, files, endpoints): drawn as the size bar. */\n size?: number;\n /** @deprecated use size. */\n fns?: number;\n /** Used by most others: not drawn; listed under the diagram with how often it is used. */\n shared?: boolean;\n}\n\nexport interface LayerGraphEdge {\n from: string;\n to: string;\n /** How often: sets the line width. */\n count?: number;\n /** Inferred by a rule rather than known: dashed and labelled. */\n inferred?: boolean;\n /** Label of an inferred edge; `backticks` and numbers are in Geist Mono. */\n label?: string;\n}\n\nexport interface LayerGraphProps {\n nodes: LayerGraphNode[];\n edges: LayerGraphEdge[];\n selected?: string | null;\n /** Selecting a box dims everything unrelated and turns its lines accent. */\n onSelect?: (id: string | null) => void;\n /** px. Default 200. */\n nodeWidth?: number;\n /** Text under a box's size bar; {n} is the size. Default 「{n} 個項目」. */\n sizeLabel?: string;\n /** Label of a selected edge; {n} is its count. Default 「{n} 次」. */\n countLabel?: string;\n /** Heading of the shared list. Default 「共用項目」. */\n sharedLabel?: string;\n /** A shared item's line; {a} is how many items use it, {b} the total count. Default 「{a} 個項目使用,共 {b} 次」. */\n sharedMeta?: string;\n /** Label of inferred edges without their own. Default 「推測」. */\n inferredLabel?: string;\n /** Explains inferred edges in the legend (a Term). */\n inferredText?: string;\n /** false hides the legend. */\n legend?: boolean;\n legendItems?: GraphLegendItem[];\n /** Default 「架構圖」. */\n label?: string;\n className?: string;\n}\n\n// Label width before layout: text in the sans font, `code` and numbers in the mono font, as labelParts draws them.\nlet measure: CanvasRenderingContext2D | null | undefined;\nconst SPLIT = /(`[^`]+`|\\d[\\d,.]*)/;\n\nfunction labelWidth(text: string): number {\n const parts = text.split(SPLIT).filter(Boolean);\n if (measure === undefined) measure = document.createElement('canvas').getContext('2d');\n const c = measure;\n if (!c) return text.length * 9;\n const cs = getComputedStyle(document.documentElement);\n const sans = cs.getPropertyValue('--font-sans') || 'sans-serif';\n const mono = cs.getPropertyValue('--font-mono') || 'monospace';\n return parts.reduce((w, t) => {\n const code = t[0] === '`' || /^\\d/.test(t);\n c.font = '600 12px ' + (code ? mono : sans);\n return w + c.measureText(t[0] === '`' ? t.slice(1, -1) : t).width;\n }, 0);\n}\n\nfunction labelParts(text: string): React.ReactNode[] {\n return text\n .split(SPLIT)\n .filter(Boolean)\n .map((t, i) =>\n t[0] === '`' || /^\\d/.test(t) ? (\n <span key={i} className=\"ui-lg-code\">\n {t[0] === '`' ? t.slice(1, -1) : t}\n </span>\n ) : (\n t\n ),\n );\n}\n\ntype Pt = [number, number];\n\n/** Rounded orthogonal path through the points. */\nfunction route(pts: Pt[], R: number): string {\n let d = `M${pts[0][0]} ${pts[0][1]}`;\n for (let i = 1; i < pts.length - 1; i++) {\n const [a, b, c] = [pts[i - 1], pts[i], pts[i + 1]];\n const r = Math.min(R, Math.abs(b[0] - a[0] + b[1] - a[1]) / 2, Math.abs(c[0] - b[0] + c[1] - b[1]) / 2);\n const ux = Math.sign(b[0] - a[0]);\n const uy = Math.sign(b[1] - a[1]);\n const vx = Math.sign(c[0] - b[0]);\n const vy = Math.sign(c[1] - b[1]);\n d += ` L${b[0] - ux * r} ${b[1] - uy * r} Q${b[0]} ${b[1]} ${b[0] + vx * r} ${b[1] + vy * r}`;\n }\n const z = pts[pts.length - 1];\n return `${d} L${z[0]} ${z[1]}`;\n}\n\n/** Drops repeated points and points in the middle of a straight run. */\nconst clean = (pts: Pt[]): Pt[] =>\n pts\n .filter((q, i) => {\n const o = pts[i - 1];\n return !o || o[0] !== q[0] || o[1] !== q[1];\n })\n .filter((q, i, arr) => {\n const a = arr[i - 1];\n const c = arr[i + 1];\n return !a || !c || !((a[0] === q[0] && q[0] === c[0]) || (a[1] === q[1] && q[1] === c[1]));\n });\n\n/** Architecture as layers of boxes with arrows. Line width shows how often; inferred relations are dashed and labelled;\n * shared items are listed under the diagram instead of drawn. Wider than the screen: scrolls sideways. */\nexport function LayerGraph(p: LayerGraphProps) {\n const NW = p.nodeWidth || 200;\n const NH = 60;\n const GAP = 56;\n const COL = 40;\n const PAD = 16;\n const all = p.nodes;\n const sel = p.selected ?? null;\n devWarn(\n all.some((n) => n.fns != null),\n 'LayerGraph',\n 'fns is renamed size; pass size and, for the text under the bar, sizeLabel such as 「{n} 個函式」.',\n );\n const sizeOf = (n: LayerGraphNode) => n.size ?? n.fns;\n const sharedIds = new Set(all.filter((n) => n.shared).map((n) => n.id));\n const main = all.filter((n) => !n.shared);\n const shared = all.filter((n) => n.shared);\n const edges = p.edges.filter((e) => !sharedIds.has(e.from) && !sharedIds.has(e.to));\n const byLayer = new Map<number, LayerGraphNode[]>();\n for (const n of main) {\n const l = n.layer || 0;\n byLayer.set(l, [...(byLayer.get(l) ?? []), n]);\n }\n const layers = [...byLayer.keys()].sort((a, b) => a - b);\n const cols = Math.max(1, ...layers.map((l) => byLayer.get(l)?.length ?? 0));\n const W = PAD * 2 + cols * NW + (cols - 1) * COL;\n const H = PAD * 2 + layers.length * NH + Math.max(0, layers.length - 1) * GAP;\n const pos: Record<string, { x: number; y: number }> = {};\n const layerIndex: Record<string, number> = {};\n layers.forEach((l, k) => {\n const row = byLayer.get(l) ?? [];\n const off = (W - (row.length * NW + (row.length - 1) * COL)) / 2;\n row.forEach((n, i) => {\n pos[n.id] = { x: off + i * (NW + COL), y: PAD + k * (NH + GAP) };\n layerIndex[n.id] = k;\n });\n });\n const maxSize = Math.max(1, ...main.map((n) => sizeOf(n) || 0));\n const maxCount = Math.max(1, ...edges.map((e) => e.count || 0));\n const outs: Record<string, LayerGraphEdge[]> = {};\n const ins: Record<string, LayerGraphEdge[]> = {};\n for (const e of edges) {\n if (!pos[e.from] || !pos[e.to]) continue;\n (outs[e.from] ??= []).push(e);\n (ins[e.to] ??= []).push(e);\n }\n for (const k in outs) outs[k].sort((a, b) => pos[a.to].x - pos[b.to].x);\n for (const k in ins) ins[k].sort((a, b) => pos[a.from].x - pos[b.from].x);\n const related = (e: LayerGraphEdge) => !!sel && (e.from === sel || e.to === sel);\n const near = (id: string) => !sel || id === sel || edges.some((e) => related(e) && (e.from === id || e.to === id));\n\n const paths: React.ReactNode[] = [];\n const labels: React.ReactNode[] = [];\n const marks: { idx: number; text: string; tx: number; ty: number; left: boolean; r: boolean; dim: boolean }[] = [];\n const arrows: number[][] = [];\n edges.forEach((e, idx) => {\n const a = pos[e.from];\n const b = pos[e.to];\n if (!a || !b) return;\n const oi = outs[e.from].indexOf(e);\n const on = outs[e.from].length;\n const ii = ins[e.to].indexOf(e);\n const inn = ins[e.to].length;\n const sx = Math.round(a.x + (NW * (oi + 1)) / (on + 1));\n const sy = a.y + NH;\n const tx = Math.round(b.x + (NW * (ii + 1)) / (inn + 1));\n const ty = b.y;\n const off = (oi - (on - 1) / 2) * 6;\n const y1 = sy + GAP / 2 + off;\n let pts: Pt[];\n if (layerIndex[e.to] - layerIndex[e.from] > 1) {\n // Skipping a layer: go down a channel between the boxes of the next layer, the one nearest the middle.\n const next = (byLayer.get(layers[layerIndex[e.from] + 1]) ?? []).map((n) => pos[n.id]);\n const mid = (sx + tx) / 2;\n const chans = [next[0].x - COL / 2, ...next.map((q) => q.x + NW + COL / 2)].map((c) => Math.max(PAD / 2, Math.min(W - PAD / 2, c)));\n const chx = chans.reduce((best, c) => (Math.abs(c - mid) < Math.abs(best - mid) ? c : best), chans[0]) + off;\n const y2 = ty - GAP / 2 + off;\n pts = [\n [sx, sy],\n [sx, y1],\n [chx, y1],\n [chx, y2],\n [tx, y2],\n [tx, ty - 8],\n ];\n } else\n pts = [\n [sx, sy],\n [sx, y1],\n [tx, y1],\n [tx, ty - 8],\n ];\n const r = related(e);\n const dim = !!sel && !r;\n const w = e.inferred ? 1.5 : 1.5 + 5.5 * ((e.count || 0) / maxCount);\n paths.push(\n <path\n key={'p' + idx}\n className={cx('ui-lg-edge', e.inferred && 'is-inferred', r && 'is-related', dim && 'is-dim')}\n d={route(clean(pts), 10)}\n strokeWidth={w}\n />,\n );\n arrows.push([tx - 5, tx + 5, ty - 9, ty]);\n paths.push(\n <path key={'a' + idx} className={cx('ui-lg-arrow', r && 'is-related', dim && 'is-dim')} d={`M${tx - 5} ${ty - 9} L${tx + 5} ${ty - 9} L${tx} ${ty} Z`} />,\n );\n if (e.inferred || r) {\n const text = e.inferred ? e.label || p.inferredLabel || tr('推測') : (p.countLabel ?? tr('{n} 次')).replace('{n}', String(e.count ?? 0));\n // Several arrows into one box: an arrow in the left half puts its label on its left.\n marks.push({ idx, text, tx, ty, left: inn > 1 && tx < b.x + NW / 2, r, dim });\n }\n });\n // Labels sit beside their arrowheads, inside the diagram; one that would touch a placed label or an arrowhead moves up 18 px.\n // Obstacles are [left, right, top, bottom, gap].\n const placed = [...arrows];\n const hits = (x0: number, x1: number, y0: number, y1: number) =>\n placed.some((q) => x0 < q[1] + (q[4] || 0) && q[0] < x1 + (q[4] || 0) && y0 < q[3] && q[2] < y1);\n marks\n .sort((m, n) => m.ty - n.ty || m.tx - n.tx)\n .forEach((m) => {\n const w = Math.ceil(labelWidth(m.text));\n let left = m.left;\n if (left && m.tx - 8 - w < 0) left = false;\n else if (!left && m.tx + 8 + w > W) left = m.tx - 8 - w >= 0;\n const x0 = left ? m.tx - 8 - w : Math.min(m.tx + 8, W - w);\n const x1 = x0 + w;\n let top = m.ty - 16;\n for (let k = 0; k < 8 && hits(x0, x1, top - 8, top + 8); k++) top -= 18;\n placed.push([x0, x1, top - 8, top + 8, 6]);\n labels.push(\n <span key={'l' + m.idx} className={cx('ui-lg-label', m.r && 'is-related', m.dim && 'is-dim')} style={{ left: x0, top }}>\n {labelParts(m.text)}\n </span>,\n );\n });\n const sizeText = p.sizeLabel ?? tr('{n} 個項目');\n const nodes = main.map((n) => {\n const q = pos[n.id];\n const on = n.id === sel;\n const size = sizeOf(n);\n return (\n <button\n key={n.id}\n type=\"button\"\n className={cx('ui-lg-node', on && 'is-selected', !near(n.id) && 'is-dim')}\n style={{ left: q.x, top: q.y, width: NW, height: NH }}\n aria-pressed={p.onSelect ? on : undefined}\n onClick={p.onSelect ? () => p.onSelect?.(on ? null : n.id) : undefined}\n >\n <span className=\"ui-lg-name\">{n.name || n.id}</span>\n {size != null ? (\n <span className=\"ui-lg-size\">\n <span className=\"ui-lg-track\" aria-hidden=\"true\">\n <span style={{ width: Math.round((size / maxSize) * 100) + '%' }} />\n </span>\n <span className=\"ui-lg-count\">{monoNums(sizeText.replace('{n}', '\\u0001'), [size])}</span>\n </span>\n ) : null}\n </button>\n );\n });\n const sharedMeta = p.sharedMeta ?? tr('{a} 個項目使用,共 {b} 次');\n const sharedRows = shared.map((s) => {\n const callers = new Set<string>();\n let total = 0;\n for (const e of p.edges)\n if (e.to === s.id && !sharedIds.has(e.from)) {\n callers.add(e.from);\n total += e.count || 0;\n }\n return (\n <div key={s.id} className=\"ui-lg-shared-row\">\n <span className=\"ui-lg-name\">{s.name || s.id}</span>\n <span className=\"ui-lg-shared-meta\">{monoNums(sharedMeta.replace('{a}', '\\u0001').replace('{b}', '\\u0002'), [callers.size, total])}</span>\n </div>\n );\n });\n return (\n <div className={cx('ui-graph ui-lg', p.className)}>\n <div className=\"ui-lg-scroll\">\n <div className=\"ui-lg-canvas\" style={{ width: W, height: H }} role=\"group\" aria-label={p.label || tr('架構圖')}>\n <svg width={W} height={H} viewBox={`0 0 ${W} ${H}`} aria-hidden=\"true\">\n {paths}\n </svg>\n {nodes}\n {labels}\n </div>\n </div>\n {shared.length ? (\n <div className=\"ui-lg-shared\">\n <div className=\"ui-lg-shared-title\">{p.sharedLabel || tr('共用項目')}</div>\n {sharedRows}\n </div>\n ) : null}\n {p.legend === false ? null : (\n <GraphLegend\n items={\n p.legendItems || [\n { type: 'weight', label: '次數越多線越粗' },\n { type: 'inferred', label: p.inferredLabel || '推測的關係', text: p.inferredText },\n ]\n }\n />\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport { ChartTip, TICKS, tickDecimals, niceMax, seriesColor, smoothPath } from '../../internal/chart';\nimport { cx, digits } from '../../internal/util';\nimport { format } from '../../format';\n\nexport interface LineSeries {\n name: string;\n values: number[];\n}\n\nexport interface LineChartProps {\n /** Up to 3 series (chart-1 to chart-3); a legend appears for 2 or more. */\n series: LineSeries[];\n /** One label per point on the x axis. */\n labels: string[];\n /** Describes the chart for screen readers. */\n label: string;\n /** After each value in the tooltip. */\n unit?: string;\n /** Decimals of the values in the tooltip. Default 0. */\n decimals?: number;\n /** Top of the y axis. Default: a round number above the largest value. */\n max?: number;\n /** Show every nth x label when they would crowd. */\n labelEvery?: number;\n className?: string;\n}\n\nconst L = 40;\nconst R = 630;\nconst T = 10;\nconst B = 210;\n\n/** A trend over time: smooth lines, 5 grid lines, a guide and tooltip on hover. */\nexport function LineChart({ series, labels, label, unit, decimals, max, labelEvery = 1, className }: LineChartProps) {\n const [hi, setHi] = React.useState(-1);\n const top = max || niceMax(Math.max(1, ...series.flatMap((s) => s.values)));\n const n = labels.length || series[0]?.values.length || 0;\n const step = (R - L) / Math.max(1, n - 1);\n const X = (i: number) => L + i * step;\n const Y = (v: number) => B - (v / top) * (B - T);\n const ticks = TICKS.map((f) => f * top);\n const suffix = unit ? ' ' + unit : '';\n const edge = { left: ((L - step / 2) / 640) * 100 + '%', right: ((640 - R - step / 2) / 640) * 100 + '%' };\n return (\n <div className={cx('ui-chart', className)}>\n {series.length > 1 ? (\n <div className=\"ui-chart-legend\">\n {series.map((s, i) => (\n <span key={i}>\n <span className=\"ui-chart-swatch\" style={{ background: seriesColor(i) }} />\n {s.name}\n </span>\n ))}\n </div>\n ) : null}\n <div className=\"ui-chart-plot\" onMouseLeave={() => setHi(-1)}>\n <svg viewBox=\"0 0 640 240\" width=\"100%\" role=\"img\" aria-label={label}>\n {ticks.map((v, i) => (\n <g key={i}>\n <line x1={L} x2={R} y1={Y(v)} y2={Y(v)} className={i ? 'ui-chart-grid' : 'ui-chart-axis'} />\n <text x={L - 8} y={Y(v) + 4} textAnchor=\"end\" className=\"ui-chart-tick\">\n {format.number(v, tickDecimals(top))}\n </text>\n </g>\n ))}\n {series.map((s, i) => (\n <path\n key={i}\n d={smoothPath(s.values.map((v, j) => [X(j), Y(v)]))}\n pathLength={1}\n className=\"ui-chart-line\"\n style={{ stroke: seriesColor(i), animationDelay: i * 150 + 'ms' }}\n />\n ))}\n </svg>\n <div className=\"ui-chart-hit\" style={edge}>\n {labels.map((_, j) => (\n <div key={j} onMouseEnter={() => setHi(j)} className=\"ui-chart-col\">\n {hi === j ? (\n <>\n <div className=\"ui-chart-guide\" />\n {series.map((s, i) => (\n <span key={i} className=\"ui-chart-dot\" style={{ top: (Y(s.values[j]) / B) * 100 + '%', background: seriesColor(i) }} />\n ))}\n </>\n ) : null}\n </div>\n ))}\n </div>\n {hi >= 0 ? (\n <ChartTip\n title={labels[hi]}\n style={{ left: (X(hi) / 640) * 100 + '%', transform: hi > n * 0.65 ? 'translateX(calc(-100% - 12px))' : 'translateX(12px)' }}\n rows={series.map((s, i) => ({ color: seriesColor(i), name: s.name, value: format.number(s.values[hi], decimals) + suffix }))}\n />\n ) : null}\n </div>\n <div className=\"ui-chart-xlabels\" style={{ marginLeft: edge.left, marginRight: edge.right }}>\n {labels.map((lb, j) => (\n <span key={j}>{labelEvery > 1 && j % labelEvery ? '' : digits(lb)}</span>\n ))}\n </div>\n </div>\n );\n}\n","import { tr } from '../../i18n';\nimport { cx } from '../../internal/util';\n\nexport interface LoadingBarProps {\n /** Announced to screen readers. Default 「載入中」. */\n label?: string;\n className?: string;\n}\n\n/** Loading with no known end: a drop moving along a thin bar. */\nexport function LoadingBar({ label, className }: LoadingBarProps) {\n return (\n <div className={cx('ui-loading', className)} role=\"progressbar\" aria-label={label || tr('載入中')} aria-busy=\"true\">\n <div className=\"ui-loading-drop\" />\n </div>\n );\n}\n","import * as React from 'react';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { FieldLabel } from '../../internal/Field';\n\nexport interface TextFieldProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Above the field, always visible. Never only a placeholder. */\n label: string;\n /** Red asterisk after the label. */\n required?: boolean;\n /** One short line under the field. */\n hint?: string;\n /** The cause and the fix: 「日期格式不正確,請寫成 2026/11/14」. Turns the border red. */\n error?: string;\n ref?: React.Ref<HTMLInputElement>;\n}\n\n/** A labelled one-line input with a hint or an error under it. */\nexport function TextField({ label, hint, error, id, className, required, disabled, ...native }: TextFieldProps) {\n const auto = React.useId();\n const fieldId = id || auto;\n const desc = error || hint ? fieldId + '-desc' : undefined;\n return (\n <div className={cx('ui-field', error && 'has-error', disabled && 'is-disabled', className)}>\n <FieldLabel htmlFor={fieldId} required={required}>\n {label}\n </FieldLabel>\n <div className=\"ui-field-box\">\n <input\n type=\"text\"\n {...native}\n required={required}\n disabled={disabled}\n id={fieldId}\n className=\"ui-input\"\n aria-invalid={error ? true : undefined}\n aria-describedby={desc}\n />\n {error ? <Icon name=\"warning-circle\" className=\"ui-field-icon\" /> : null}\n </div>\n {desc ? (\n <div id={desc} className={error ? 'ui-field-error' : 'ui-field-hint'}>\n {error || hint}\n </div>\n ) : null}\n </div>\n );\n}\n","import * as React from 'react';\nimport { Button } from '../Button/Button';\nimport { TextField } from '../TextField/TextField';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { FieldLabel } from '../../internal/Field';\n\nexport interface LoginCardProps {\n /** Logo or product name above the title. */\n brand?: React.ReactNode;\n /** Default 「登入」. */\n title?: string;\n onSubmit: (v: { account: string; password: string }) => void;\n /** Errors from your sign-in check, shown under each field: the cause and the fix. */\n error?: { account?: string; password?: string } | null;\n /** Adds 「忘記密碼」 beside the password label. */\n forgotHref?: string;\n loading?: boolean;\n className?: string;\n}\n\n/** A centered sign-in card: account, password with show-password, 「忘記密碼」 beside the password label, errors under each\n * field. Pass error = { account, password } from your sign-in check. */\nexport function LoginCard(p: LoginCardProps) {\n const pwId = React.useId();\n const [user, setUser] = React.useState('');\n const [pass, setPass] = React.useState('');\n const [show, setShow] = React.useState(false);\n const [tried, setTried] = React.useState(false);\n const err = p.error || {};\n const uErr = tried && !user ? tr('請輸入帳號') : err.account;\n const pErr = tried && !pass ? tr('請輸入密碼') : err.password;\n function submit(e: React.FormEvent) {\n e.preventDefault();\n setTried(true);\n if (user && pass) p.onSubmit({ account: user, password: pass });\n }\n return (\n <div className={cx('ui-loginpage', p.className)}>\n <form className=\"ui-logincard\" onSubmit={submit} noValidate>\n {p.brand ? <div className=\"ui-login-brand\">{p.brand}</div> : null}\n <h1 className=\"ui-login-title\">{p.title || tr('登入')}</h1>\n <TextField\n label={tr('帳號')}\n value={user}\n onChange={(e) => setUser(e.target.value)}\n placeholder={tr('Email 或帳號')}\n autoComplete=\"username\"\n error={uErr}\n />\n <div className=\"ui-field\">\n <div className=\"ui-login-pwlabel\">\n <FieldLabel htmlFor={pwId}>{tr('密碼')}</FieldLabel>\n {p.forgotHref ? (\n <a href={p.forgotHref} className=\"ui-link\">\n {tr('忘記密碼?')}\n </a>\n ) : null}\n </div>\n <div className={cx('ui-pwfield', pErr && 'is-invalid')}>\n <input\n id={pwId}\n className=\"ui-pwfield-input\"\n type={show ? 'text' : 'password'}\n value={pass}\n autoComplete=\"current-password\"\n aria-invalid={pErr ? true : undefined}\n aria-describedby={pErr ? pwId + '-err' : undefined}\n onChange={(e) => setPass(e.target.value)}\n />\n <button\n type=\"button\"\n className=\"ui-datefield-btn\"\n aria-label={show ? tr('隱藏密碼') : tr('顯示密碼')}\n aria-pressed={show}\n onClick={() => setShow(!show)}\n >\n <Icon name={show ? 'eye-slash' : 'eye'} size={18} />\n </button>\n </div>\n {pErr ? (\n <div id={pwId + '-err'} className=\"ui-field-hint is-error\" role=\"alert\">\n {pErr}\n </div>\n ) : null}\n </div>\n <Button variant=\"primary\" type=\"submit\" loading={p.loading} className=\"ui-login-submit\">\n {tr('登入')}\n </Button>\n </form>\n </div>\n );\n}\n","import * as React from 'react';\nimport { Combobox } from '@base-ui/react/combobox';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { CheckMark, FieldLabel } from '../../internal/Field';\n\nexport interface MultiSelectOption {\n value: string;\n label: string;\n}\n\nexport interface MultiSelectProps {\n label?: string;\n options: MultiSelectOption[];\n value: string[];\n onChange: (value: string[]) => void;\n /** Allow adding values that are not in options (Enter, or the 「新增」 row). */\n creatable?: boolean;\n /** Chips shown before 「+n」. Default 2. */\n maxChips?: number;\n /** Default 「搜尋」. */\n placeholder?: string;\n /** Default 「找不到符合的選項」. */\n emptyText?: string;\n className?: string;\n}\n\nconst CREATE = '\\u0000create:';\n\n/** Pick several options: chips inside the field, type to filter, Backspace removes the last chip. */\nexport function MultiSelect({ label, options, value, onChange, creatable, maxChips = 2, placeholder, emptyText, className }: MultiSelectProps) {\n const id = React.useId();\n const [query, setQuery] = React.useState('');\n const labels = React.useMemo(() => new Map(options.map((o) => [o.value, o.label])), [options]);\n const labelOf = (v: string) => (v.startsWith(CREATE) ? tr('新增「{q}」', { q: v.slice(CREATE.length) }) : (labels.get(v) ?? v));\n const q = query.trim();\n const exists = options.some((o) => o.label === q) || value.includes(q);\n const items = [...options.map((o) => o.value), ...value.filter((v) => !labels.has(v)), ...(creatable && q && !exists ? [CREATE + q] : [])];\n const shown = value.slice(0, maxChips);\n const more = value.length - shown.length;\n return (\n <div className={cx('ui-field', className)}>\n {label ? <FieldLabel htmlFor={id}>{label}</FieldLabel> : null}\n <Combobox.Root\n multiple\n autoHighlight\n items={items}\n value={value}\n inputValue={query}\n onInputValueChange={setQuery}\n itemToStringLabel={labelOf}\n onValueChange={(next: string[]) => {\n onChange(next.map((v) => (v.startsWith(CREATE) ? v.slice(CREATE.length) : v)));\n setQuery('');\n }}\n >\n <Combobox.InputGroup className=\"ui-ms\">\n <Combobox.Chips className=\"ui-ms-chips\">\n {shown.map((v) => (\n <Combobox.Chip key={v} className=\"ui-chip\" aria-label={labelOf(v)}>\n {labelOf(v)}\n <Combobox.ChipRemove className=\"ui-chip-x\" aria-label={tr('移除 {name}', { name: labelOf(v) })}>\n <Icon name=\"x\" size={12} />\n </Combobox.ChipRemove>\n </Combobox.Chip>\n ))}\n {more > 0 ? (\n <span className=\"ui-chip-more\" title={value.slice(maxChips).map(labelOf).join('、')}>\n {'+' + more}\n </span>\n ) : null}\n <Combobox.Input\n id={id}\n className=\"ui-ms-input\"\n placeholder={value.length ? '' : placeholder || tr('搜尋')}\n onKeyDown={(e) => {\n // Hidden chips (+n) still count: Backspace removes the last value, not the last visible chip.\n if (e.key === 'Backspace' && !query && value.length) {\n e.preventBaseUIHandler();\n onChange(value.slice(0, -1));\n }\n }}\n />\n </Combobox.Chips>\n </Combobox.InputGroup>\n <Combobox.Portal>\n <Combobox.Positioner className=\"ui-float is-match\" align=\"start\" sideOffset={6}>\n <Combobox.Popup className=\"ui-select-menu ui-ms-menu\">\n <Combobox.Empty className=\"ui-select-empty\">{emptyText || tr('找不到符合的選項')}</Combobox.Empty>\n <Combobox.List>\n {(v: string) =>\n v.startsWith(CREATE) ? (\n <Combobox.Item key={v} value={v} className=\"ui-select-opt ui-ms-create\">\n {labelOf(v)}\n </Combobox.Item>\n ) : (\n <Combobox.Item key={v} value={v} className={cx('ui-select-opt', 'ui-ms-opt', value.includes(v) && 'is-on')}>\n <span className={cx('ui-check-box', value.includes(v) && 'is-on')} aria-hidden=\"true\">\n <CheckMark v={value.includes(v)} />\n </span>\n <span>{labelOf(v)}</span>\n </Combobox.Item>\n )\n }\n </Combobox.List>\n </Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n </div>\n );\n}\n","import * as React from 'react';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { FloatingPanel } from '../../internal/FloatingPanel';\n\nexport interface NotificationItem {\n id: string | number;\n title: string;\n body?: string;\n /** Relative within a week: format.relative(date). */\n time?: string;\n /** Group heading, e.g. 今天, 更早. Items must already be newest first. */\n group?: string;\n read?: boolean;\n}\n\nexport interface NotificationBellProps {\n items: NotificationItem[];\n onOpen?: (item: NotificationItem) => void;\n onReadAll?: () => void;\n /** Default 「沒有通知」. */\n emptyText?: string;\n}\n\n/** The bell in the top bar: a red count (99+ above 99) and a 360 px panel of notifications grouped by time. */\nexport function NotificationBell({ items, onOpen, onReadAll, emptyText }: NotificationBellProps) {\n const [open, setOpen] = React.useState(false);\n const unread = items.filter((it) => !it.read).length;\n const groups: { title: string; items: NotificationItem[] }[] = [];\n for (const it of items) {\n const g = it.group || '';\n const last = groups[groups.length - 1];\n if (!last || last.title !== g) groups.push({ title: g, items: [it] });\n else last.items.push(it);\n }\n return (\n <FloatingPanel\n open={open}\n onOpenChange={setOpen}\n align=\"end\"\n sideOffset={8}\n className=\"ui-noti\"\n aria-label={tr('通知')}\n trigger={\n <button\n type=\"button\"\n className={cx('ui-iconbtn', 'ui-bell', open && 'is-open')}\n aria-label={unread ? tr('通知,{n} 則未讀', { n: unread }) : tr('通知')}\n >\n <Icon name=\"bell\" />\n {unread ? (\n <span className=\"ui-badge-count\" aria-hidden=\"true\">\n {unread > 99 ? '99+' : unread}\n </span>\n ) : null}\n </button>\n }\n >\n <div className=\"ui-noti-head\">\n <div className=\"ui-noti-title\">{tr('通知')}</div>\n {unread && onReadAll ? (\n <button type=\"button\" className=\"ui-noti-readall\" onClick={onReadAll}>\n {tr('全部標為已讀')}\n </button>\n ) : null}\n </div>\n <div className=\"ui-noti-list\">\n {items.length ? (\n groups.map((g, gi) => (\n <React.Fragment key={gi}>\n {g.title ? <div className=\"ui-noti-group\">{g.title}</div> : null}\n {g.items.map((it) => (\n <button key={it.id} type=\"button\" className={cx('ui-noti-item', !it.read && 'is-unread')} onClick={() => onOpen?.(it)}>\n {!it.read ? <span className=\"ui-noti-dot\" aria-label={tr('未讀')} /> : null}\n <span className=\"ui-noti-text\">\n <span className=\"ui-noti-t\">{it.title}</span>\n {it.body ? <span className=\"ui-noti-b\">{it.body}</span> : null}\n {it.time ? <span className=\"ui-noti-time\">{it.time}</span> : null}\n </span>\n </button>\n ))}\n </React.Fragment>\n ))\n ) : (\n <div className=\"ui-noti-empty\">{emptyText || tr('沒有通知')}</div>\n )}\n </div>\n </FloatingPanel>\n );\n}\n","import * as React from 'react';\nimport { Popover as Base } from '@base-ui/react/popover';\nimport { IconOf, type IconSource } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { FloatingPanel } from '../../internal/FloatingPanel';\n\nexport interface PopoverProps {\n /** Text of the trigger button. */\n label: string;\n icon?: IconSource;\n /** A number badge on the trigger, e.g. how many filters are on. */\n count?: number | string;\n /** Heading inside the popover; also its accessible name. */\n title?: string;\n /** Default 'bottom'. */\n side?: 'top' | 'bottom';\n /** Default 'end'. */\n align?: 'end' | 'start' | 'center';\n /** Content, or a function that receives close(). */\n children?: React.ReactNode | ((close: () => void) => React.ReactNode);\n triggerClassName?: string;\n}\n\n/** A small panel with an arrow, opened from a button on hover, click or focus. For extra detail or a few controls. */\nexport function Popover({ label, icon, count, title, side = 'bottom', align = 'end', children, triggerClassName }: PopoverProps) {\n const [open, setOpen] = React.useState(false);\n return (\n <FloatingPanel\n open={open}\n onOpenChange={setOpen}\n openOnHover\n side={side}\n align={align}\n sideOffset={10}\n className=\"ui-popover\"\n aria-label={title ? undefined : label}\n trigger={\n <button type=\"button\" className={cx('ui-btn', 'ui-btn-secondary', triggerClassName)}>\n {icon ? <IconOf icon={icon} /> : null}\n {label}\n {count ? <span className=\"ui-pop-count\">{count}</span> : null}\n </button>\n }\n >\n <Base.Arrow className=\"ui-popover-arrow\" />\n {title ? <Base.Title className=\"ui-popover-title\">{title}</Base.Title> : null}\n <div className=\"ui-popover-body\">{typeof children === 'function' ? children(() => setOpen(false)) : children}</div>\n </FloatingPanel>\n );\n}\n","import { useCountUp } from '../../internal/chart';\nimport { cx } from '../../internal/util';\n\nexport interface ProgressRingProps {\n /** 0 to 100. */\n value: number;\n /** What is measured; announced to screen readers. */\n label: string;\n /** Diameter in px. Default 72. */\n size?: number;\n className?: string;\n}\n\n/** A ring that fills to a percentage, for a single figure in a card. */\nexport function ProgressRing({ value, label, size = 72, className }: ProgressRingProps) {\n const sw = 8;\n const r = (size - sw) / 2;\n const c = 2 * Math.PI * r;\n const v = Math.max(0, Math.min(100, value || 0));\n const t = useCountUp(v, 900);\n const mid = size / 2;\n return (\n <svg\n className={cx('ui-ring', className)}\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(v)}\n aria-label={label}\n >\n <circle cx={mid} cy={mid} r={r} className=\"ui-ring-track\" strokeWidth={sw} />\n <circle\n cx={mid}\n cy={mid}\n r={r}\n className=\"ui-ring-fill\"\n strokeWidth={sw}\n strokeDasharray={`${(((c * v) / 100) * t).toFixed(1)} ${c.toFixed(1)}`}\n transform={`rotate(-90 ${mid} ${mid})`}\n />\n <text x={mid} y={mid + 5} textAnchor=\"middle\" className=\"ui-ring-text\">\n {Math.round(v * t) + '%'}\n </text>\n </svg>\n );\n}\n","import type * as React from 'react';\nimport { Menu } from '@base-ui/react/menu';\nimport { tr } from '../../i18n';\nimport { CHECK, Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\n\nexport type ProjectStatus = 'live' | 'stale' | 'offline';\n\nconst PS_STATUS: Record<ProjectStatus, string> = { live: '即時', stale: '已過期', offline: '離線' };\n\nexport interface ProjectOption {\n id: string;\n label: string;\n /** A second line, e.g. the environment or the last update. */\n detail?: string;\n}\n\nexport interface ProjectSwitcherProps {\n /** The project and environment shown, e.g. 「web · production」. */\n project: string;\n /** Whether the data is live. Default 'live'. */\n status?: ProjectStatus;\n /** Replaces the status name (即時, 已過期, 離線). */\n statusLabel?: string;\n /** With onChange, a list to switch project. */\n options?: ProjectOption[];\n value?: string;\n onChange?: (id: string) => void;\n /** Under the list, e.g. a link to all projects. */\n footer?: React.ReactNode;\n className?: string;\n}\n\n/** The outlined chip in the top bar: which project is shown and whether its data is live; opens a list to switch. */\nexport function ProjectSwitcher({ project, status = 'live', statusLabel, options = [], value, onChange, footer, className }: ProjectSwitcherProps) {\n const st = PS_STATUS[status] ? status : 'live';\n const label = `${project} · ${statusLabel || tr(PS_STATUS[st])}`;\n const chip = (\n <>\n <span className=\"ui-projsw-dot\" aria-hidden=\"true\" />\n <span className=\"ui-projsw-text\">{label}</span>\n </>\n );\n if (!options.length || !onChange)\n return (\n <span className={cx('ui-projsw', 'is-' + st, 'is-static', className)} role=\"status\" aria-label={label}>\n {chip}\n </span>\n );\n return (\n <Menu.Root>\n <Menu.Trigger className={cx('ui-projsw', 'is-' + st, className)} aria-label={tr('切換專案,目前是 {name}', { name: label })}>\n {chip}\n <Icon name=\"caret-down\" size={14} className=\"ui-projsw-caret\" />\n </Menu.Trigger>\n <Menu.Portal>\n <Menu.Positioner className=\"ui-float\" side=\"bottom\" align=\"end\" sideOffset={6}>\n <Menu.Popup className=\"ui-projsw-pop\" aria-label={tr('切換專案')}>\n <div className=\"ui-projsw-title\">{tr('切換專案')}</div>\n <Menu.RadioGroup value={value} onValueChange={(id: string) => id !== value && onChange(id)}>\n {options.map((o) => (\n <Menu.RadioItem key={o.id} value={o.id} closeOnClick className={cx('ui-projsw-opt', o.id === value && 'is-on')}>\n <span className=\"ui-projsw-optlabel\">{o.label}</span>\n {o.detail ? <span className=\"ui-projsw-optdetail\">{o.detail}</span> : null}\n <Menu.RadioItemIndicator className=\"ui-projsw-check\">\n <Icon d={CHECK} size={16} />\n </Menu.RadioItemIndicator>\n </Menu.RadioItem>\n ))}\n </Menu.RadioGroup>\n {footer ? <div className=\"ui-projsw-foot\">{footer}</div> : null}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n}\n","import * as React from 'react';\nimport { cx } from '../../internal/util';\n\nexport interface RadioOption<V extends string = string> {\n value: V;\n label: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps<V extends string = string> {\n /** Shown above the options and used as the group's name. */\n label?: string;\n value?: V;\n onChange?: (value: V) => void;\n /** 2 to 5 options, all visible. Use Select for more. */\n options: RadioOption<V>[];\n disabled?: boolean;\n className?: string;\n}\n\n/** One choice out of a few visible options. Arrow keys move between them. */\nexport function RadioGroup<V extends string = string>({ label, value, onChange, options, disabled, className }: RadioGroupProps<V>) {\n const refs = React.useRef<(HTMLButtonElement | null)[]>([]);\n const enabled = options.map((o) => !(disabled || o.disabled));\n const selected = options.findIndex((o) => o.value === value);\n const tabStop = selected >= 0 ? selected : enabled.indexOf(true);\n const move = (from: number, dir: 1 | -1) => {\n for (let k = 1; k <= options.length; k++) {\n const i = (from + dir * k + options.length) % options.length;\n if (enabled[i]) {\n refs.current[i]?.focus();\n onChange?.(options[i].value);\n return;\n }\n }\n };\n return (\n <div role=\"radiogroup\" aria-label={label} className={cx('ui-radios', className)}>\n {label ? <div className=\"ui-field-label\">{label}</div> : null}\n {options.map((o, i) => {\n const on = value === o.value;\n return (\n <button\n key={o.value}\n ref={(el) => {\n refs.current[i] = el;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={on}\n tabIndex={i === tabStop ? 0 : -1}\n disabled={!enabled[i]}\n className={cx('ui-radio', on && 'is-on')}\n onClick={() => onChange?.(o.value)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowRight') {\n e.preventDefault();\n move(i, 1);\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowLeft') {\n e.preventDefault();\n move(i, -1);\n }\n }}\n >\n <span className=\"ui-radio-ring\" aria-hidden=\"true\">\n {on ? <span className=\"ui-radio-dot\" /> : null}\n </span>\n <span>{o.label}</span>\n </button>\n );\n })}\n </div>\n );\n}\n","import * as React from 'react';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport { Combobox } from '@base-ui/react/combobox';\nimport { tr } from '../../i18n';\nimport { Icon } from '../../icons/Icon';\nimport { cx } from '../../internal/util';\nimport { FieldLabel } from '../../internal/Field';\n\nexport interface SelectOption<V extends string = string> {\n value: V;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps<V extends string = string> {\n /** Shown above the trigger. Without it, pass aria-label. */\n label?: string;\n 'aria-label'?: string;\n value?: V | null;\n onChange?: (value: V) => void;\n options: SelectOption<V>[];\n /** A search box at the top of the list. Default: on when there are more than 8 options. */\n searchable?: boolean;\n /** Default 「請選擇」. */\n placeholder?: string;\n /** Default 「搜尋」. */\n searchPlaceholder?: string;\n /** Red asterisk after the label. */\n required?: boolean;\n disabled?: boolean;\n /** Form field name; the value is submitted with the form. */\n name?: string;\n className?: string;\n}\n\n/** Pick one option from a list. Use it instead of a native <select>; a search box appears above 8 options. */\nexport function Select<V extends string = string>(props: SelectProps<V>) {\n const { label, value, onChange, options, searchable = options.length > 8, placeholder, searchPlaceholder, required, disabled, name, className } = props;\n const labelId = React.useId();\n const current = options.find((o) => o.value === value) ?? null;\n const head = label ? (\n <FieldLabel id={labelId} required={required}>\n {label}\n </FieldLabel>\n ) : null;\n const trigger = (\n <>\n <span className={cx(!current && 'is-placeholder')}>{current ? current.label : placeholder || tr('請選擇')}</span>\n <Icon name=\"caret-down\" size={16} className=\"ui-select-chev\" />\n </>\n );\n const optionBody = (o: SelectOption<V>, on: boolean) => (\n <>\n <span>{o.label}</span>\n {on ? <Icon name=\"check\" size={16} /> : null}\n </>\n );\n const labelling = { 'aria-labelledby': label ? labelId : undefined, 'aria-label': label ? undefined : props['aria-label'] };\n\n if (searchable) {\n return (\n <div className={cx('ui-select', className)}>\n {head}\n <Combobox.Root\n items={options}\n value={current}\n onValueChange={(o: SelectOption<V> | null) => o && onChange?.(o.value)}\n itemToStringLabel={(o: SelectOption<V>) => o.label}\n isItemEqualToValue={(a: SelectOption<V>, b: SelectOption<V>) => a.value === b.value}\n disabled={disabled}\n required={required}\n name={name}\n >\n <Combobox.Trigger className=\"ui-select-trigger\" {...labelling}>\n {trigger}\n </Combobox.Trigger>\n <Combobox.Portal>\n <Combobox.Positioner className=\"ui-select-positioner\" align=\"start\" sideOffset={6}>\n <Combobox.Popup className=\"ui-select-menu\" aria-label={label || props['aria-label']}>\n <div className=\"ui-select-search\">\n <Icon name=\"magnifying-glass\" size={14} />\n <Combobox.Input placeholder={searchPlaceholder || tr('搜尋')} aria-label={searchPlaceholder || tr('搜尋')} />\n </div>\n <Combobox.Empty className=\"ui-select-empty\">{tr('找不到符合的選項')}</Combobox.Empty>\n <Combobox.List>\n {(o: SelectOption<V>) => (\n <Combobox.Item key={o.value} value={o} disabled={o.disabled} className={cx('ui-select-opt', o.value === value && 'is-on')}>\n {optionBody(o, o.value === value)}\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n </div>\n );\n }\n return (\n <div className={cx('ui-select', className)}>\n {head}\n <BaseSelect.Root\n items={options}\n value={value ?? null}\n onValueChange={(v) => v != null && onChange?.(v as V)}\n disabled={disabled}\n required={required}\n name={name}\n >\n <BaseSelect.Trigger className=\"ui-select-trigger\" {...labelling}>\n {trigger}\n </BaseSelect.Trigger>\n <BaseSelect.Portal>\n <BaseSelect.Positioner className=\"ui-select-positioner\" alignItemWithTrigger={false} align=\"start\" sideOffset={6}>\n <BaseSelect.Popup className=\"ui-select-menu\">\n <BaseSelect.List>\n {options.map((o) => (\n <BaseSelect.Item key={o.value} value={o.value} disabled={o.disabled} className={cx('ui-select-opt', o.value === value && 'is-on')}>\n {optionBody(o, o.value === value)}\n </BaseSelect.Item>\n ))}\n </BaseSelect.List>\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n </BaseSelect.Root>\n </div>\n );\n}\n","import type * as React from 'react';\nimport { Icon } from '../../icons/Icon';\n\nexport interface ToastProps {\n /** What happened, in the past tense: 「已刪除 3 筆」. */\n children?: React.ReactNode;\n /** Usually 「復原」. */\n actionLabel?: string;\n onAction?: () => void;\n}\n\n/** A short confirmation at the bottom right. The caller shows it for 3 s. */\nexport function Toast({ children, actionLabel, onAction }: ToastProps) {\n return (\n <div className=\"ui-toast\" role=\"status\">\n <Icon name=\"check\" className=\"ui-toast-icon\" />\n <span>{children}</span>\n {actionLabel ? (\n <button type=\"button\" className=\"ui-toast-action\" onClick={onAction}>\n {actionLabel}\n </button>\n ) : null}\n </div>\n );\n}\n","import * as React from 'react';\nimport { tr } from '../../i18n';\nimport { cx } from '../../internal/util';\nimport { Toast } from '../Toast/Toast';\n\nexport interface SettingsCategory {\n id: string;\n label: string;\n content: React.ReactNode;\n}\n\nexport interface SettingsLayoutProps {\n title?: string;\n categories: SettingsCategory[];\n /** Controlled category id. */\n value?: string;\n onChange?: (id: string) => void;\n /** Text of the 「已儲存」 toast; empty hides it. Changes save on their own, so there is no save button. */\n toast?: string;\n className?: string;\n}\n\n/** A settings page: categories on the left, their sections on the right. Changes save at once. */\nexport function SettingsLayout({ title, categories, value, onChange, toast, className }: SettingsLayoutProps) {\n const [own, setOwn] = React.useState(value ?? categories[0]?.id);\n const active = value ?? own;\n const item = categories.find((c) => c.id === active) ?? categories[0];\n return (\n <div className={cx('ui-settings', className)}>\n {title ? <h1 className=\"ui-settings-title\">{title}</h1> : null}\n <div className=\"ui-settings-body\">\n <nav className=\"ui-settings-nav\" aria-label={tr('設定分類')}>\n {categories.map((c) => {\n const on = c.id === active;\n return (\n <button\n key={c.id}\n type=\"button\"\n className={cx('ui-settings-cat', on && 'is-on')}\n aria-current={on ? 'page' : undefined}\n onClick={() => {\n setOwn(c.id);\n onChange?.(c.id);\n }}\n >\n {c.label}\n </button>\n );\n })}\n </nav>\n <div className=\"ui-settings-content\">{item?.content}</div>\n </div>\n {toast ? (\n <div className=\"ui-settings-toast\">\n <Toast>{toast}</Toast>\n </div>\n ) : null}\n </div>\n );\n}\n\nexport interface SettingsSectionProps {\n title?: string;\n /** One sentence under the title. */\n description?: string;\n children?: React.ReactNode;\n className?: string;\n}\n\n/** One group of settings with a heading. It is a card on its own; inside a Card it drops its shadow. */\nexport function SettingsSection({ title, description, children, className }: SettingsSectionProps) {\n return (\n <section className={cx('ui-settings-section', className)}>\n {title ? <h2 className=\"ui-settings-h\">{title}</h2> : null}\n {description ? <p className=\"ui-settings-desc\">{description}</p> : null}\n {children}\n </section>\n );\n}\n","export interface SkeletonProps {\n /** Default 100%. */\n width?: number | string;\n /** Default 16 px, one line of text. */\n height?: number | string;\n}\n\n/** A gray shimmering block that holds the place of content while it loads. Show it at once. */\nexport function Skeleton({ width = '100%', height = 16 }: SkeletonProps) {\n return <span className=\"ui-skel\" style={{ width, height }} aria-hidden=\"true\" />;\n}\n","import * as React from 'react';\nimport { tr } from '../../i18n';\nimport { CHECK } from '../../icons/Icon';\nimport { copyText, cx } from '../../internal/util';\nimport { IconButton } from '../IconButton/IconButton';\nimport { CodeText, type OnRef, type RefHref } from '../InlineCode/InlineCode';\n\nexport interface SuggestionProps {\n /** Default 「建議修正」. */\n title?: string;\n /** The current line, shown with −. Text in `backticks` is code. */\n before?: string;\n /** The proposed line, shown with +. */\n after: string;\n /** What the copy button copies. Default: after. */\n copyText?: string;\n /** Default 「複製修正」. */\n copyLabel?: string;\n onCopy?: (text: string) => void;\n onCopyError?: () => void;\n refHref?: RefHref;\n onRef?: OnRef;\n isRef?: (span: string) => boolean;\n className?: string;\n}\n\n/** A proposed fix: the old line (−) above the new one (+), with a copy button at the top right. */\nexport function Suggestion({ title, before, after, copyText: copyValue, copyLabel, onCopy, onCopyError, refHref, onRef, isRef, className }: SuggestionProps) {\n const [copied, setCopied] = React.useState(false);\n const tm = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n React.useEffect(() => () => clearTimeout(tm.current), []);\n const copy = () => {\n const text = copyValue ?? after;\n copyText(text).then(\n () => {\n setCopied(true);\n clearTimeout(tm.current);\n tm.current = setTimeout(() => setCopied(false), 2000);\n onCopy?.(text);\n },\n () => onCopyError?.(),\n );\n };\n const line = (kind: 'del' | 'add', text: string) => (\n <div className={'ui-sug-line is-' + kind}>\n <span className=\"ui-sug-mark\" aria-hidden=\"true\">\n {kind === 'del' ? '−' : '+'}\n </span>\n <span className=\"ui-visually-hidden\">{kind === 'del' ? tr('原本:') : tr('改成:')}</span>\n <CodeText className=\"ui-sug-text\" text={text} refHref={refHref} onRef={onRef} isRef={isRef} />\n </div>\n );\n return (\n <div className={cx('ui-sug', className)}>\n <div className=\"ui-sug-head\">\n <span className=\"ui-sug-title\">{title || tr('建議修正')}</span>\n <IconButton\n className={cx('ui-sug-copy', copied && 'is-copied')}\n label={copied ? tr('已複製') : copyLabel || tr('複製修正')}\n icon={copied ? CHECK : 'copy'}\n onClick={copy}\n />\n </div>\n {before != null ? line('del', before) : null}\n {line('add', after)}\n <span className=\"ui-visually-hidden\" aria-live=\"polite\">\n {copied ? tr('已複製') : ''}\n </span>\n </div>\n );\n}\n","import * as React from 'react';\nimport { dropTransition } from '../../motion';\nimport { cx } from '../../internal/util';\n\nexport interface SwitchProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n /** What it turns on; becomes aria-label. Put the visible text next to it in the row. */\n label: string;\n disabled?: boolean;\n className?: string;\n}\n\n/** An on/off setting that applies at once. The thumb stretches like a droplet while it moves. */\nexport function Switch({ checked, onChange, label, disabled, className }: SwitchProps) {\n const on = !!checked;\n const [pressing, setPressing] = React.useState(false);\n const W = 48;\n const H = 28;\n const th = pressing ? 28 : on ? 24 : 16;\n const gap = (H - th) / 2;\n const stretch = pressing ? 6 : 0;\n const left = on ? W - gap - th - stretch : gap;\n const right = on ? gap : W - gap - th - stretch;\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={on}\n aria-label={label}\n disabled={disabled}\n className={cx('ui-switch', on && 'is-on', className)}\n onClick={() => onChange?.(!on)}\n onPointerDown={() => setPressing(true)}\n onPointerUp={() => setPressing(false)}\n onPointerLeave={() => setPressing(false)}\n >\n <span\n className=\"ui-switch-thumb\"\n style={{\n left,\n right,\n height: th,\n marginTop: -th / 2,\n transition: `${dropTransition('left', 'right', on)}, height 150ms ease, margin-top 150ms ease, background-color .2s ease`,\n }}\n >\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d={on ? 'M5 12.5l4.5 4.5L19 7' : 'M7 7l10 10M17 7L7 17'} />\n </svg>\n </span>\n </button>\n );\n}\n","import type * as React from 'react';\nimport { cx } from '../../internal/util';\n\nexport interface TagProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/** What kind of thing an item is (「外部」「範本」): small gray text. Status uses Badge instead. */\nexport function Tag({ children, className }: TagProps) {\n return <span className={cx('ui-tag', className)}>{children}</span>;\n}\n","import * as React from 'react';\nimport { cx } from '../../internal/util';\nimport { FieldLabel } from '../../internal/Field';\n\nexport interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'onChange' | 'value'> {\n label?: string;\n hint?: string;\n value: string;\n onChange: (value: string) => void;\n /** Shown as a counter. Default 200. */\n maxLength?: number;\n required?: boolean;\n}\n\n/** Multi-line text that grows up to 8 lines, with a character counter. */\nexport function TextArea({ label, hint, value, onChange, maxLength = 200, className, id, required, ...native }: TextAreaProps) {\n const auto = React.useId();\n const fieldId = id || auto;\n const ref = React.useRef<HTMLTextAreaElement>(null);\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n el.style.height = 'auto';\n el.style.height = Math.min(el.scrollHeight + 2, 8 * 26 + 22) + 'px';\n }, [value]);\n return (\n <div className={cx('ui-field', className)}>\n {label ? (\n <FieldLabel htmlFor={fieldId} required={required}>\n {label}\n </FieldLabel>\n ) : null}\n <textarea\n rows={3}\n {...native}\n ref={ref}\n id={fieldId}\n className=\"ui-input ui-textarea\"\n maxLength={maxLength}\n value={value || ''}\n aria-required={required || undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n <div className=\"ui-field-foot\">\n <span className=\"ui-field-hint\">{hint || ''}</span>\n <span className=\"ui-count\">{`${(value || '').length} / ${maxLength}`}</span>\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { tr } from '../../i18n';\nimport { cx } from '../../internal/util';\nimport { setTheme, storedTheme, type ThemeSetting } from '../../theme';\n\nconst THEMES: { id: ThemeSetting; label: string }[] = [\n { id: 'auto', label: '自動' },\n { id: 'light', label: '淺色' },\n { id: 'dark', label: '深色' },\n];\n\nexport interface ThemePickerProps {\n /** Controlled value. Without it, the picker reads and sets the stored theme itself. */\n value?: ThemeSetting;\n /** Without it, picking applies the theme with setTheme. */\n onChange?: (theme: ThemeSetting) => void;\n /** Default 「主題」. */\n label?: string;\n className?: string;\n}\n\n/** Three preview cards (自動、淺色、深色) for the settings page under 外觀. */\nexport function ThemePicker({ value, onChange, label, className }: ThemePickerProps) {\n const [own, setOwn] = React.useState<ThemeSetting>(() => value ?? storedTheme());\n const cur = value ?? own;\n const pick = (id: ThemeSetting) => {\n setOwn(id);\n if (onChange) onChange(id);\n else setTheme(id);\n };\n return (\n <div role=\"radiogroup\" aria-label={label || tr('主題')} className={cx('ui-themepick', className)}>\n {THEMES.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={cur === t.id}\n className={cx('ui-themepick-opt', cur === t.id && 'is-on')}\n onClick={() => pick(t.id)}\n >\n <span className={'ui-themepick-mini is-' + t.id} aria-hidden=\"true\">\n <span />\n <span />\n </span>\n {tr(t.label)}\n </button>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport { Popover } from '@base-ui/react/popover';\nimport { CodeText } from '../InlineCode/InlineCode';\nimport { Button } from '../Button/Button';\nimport { tr } from '../../i18n';\nimport { cx, monoNums, reduced, store } from '../../internal/util';\n\nexport interface TourStep {\n /** A data-tour name ('search' matches [data-tour=\"search\"]), a CSS selector (first visible match), a ref or an element.\n * Leave it out for a step in the middle of the screen. */\n target?: string | React.RefObject<Element | null> | Element;\n /** Names the part: 「搜尋」. */\n title: string;\n /** What it does, 1 short sentence; `backticks` are code. */\n text: string;\n /** Default 'bottom'; flips when there is no room. */\n side?: 'bottom' | 'top';\n /** Space around the highlighted part in px. Default 6. */\n padding?: number;\n}\n\nexport interface TourProps {\n open: boolean;\n steps: TourStep[];\n onClose?: (reason: 'done' | 'skip') => void;\n /** 「略過」 and Esc end the tour early. Default true. */\n skippable?: boolean;\n /** Controlled step index. */\n step?: number;\n onStepChange?: (index: number) => void;\n}\n\nconst TOUR_KEY = 'ui-tour:';\n\n/** Opens the tour once per browser: { open, start, close, seen }. Pass close to Tour's onClose; start() shows it again. */\nexport function useTour(key: string) {\n const [open, setOpen] = React.useState(() => !store(TOUR_KEY + key));\n return {\n open,\n start: () => setOpen(true),\n close: () => {\n store(TOUR_KEY + key, '1');\n setOpen(false);\n },\n seen: !!store(TOUR_KEY + key),\n };\n}\n\nfunction findTarget(t: TourStep['target']): Element | null {\n if (!t) return null;\n if (typeof t === 'string') {\n const sel = /^[\\w-]+$/.test(t) && !/^(html|body|main|nav|header|footer|section|aside)$/.test(t) ? `[data-tour=\"${t}\"]` : t;\n return Array.from(document.querySelectorAll(sel)).find((e) => e.getClientRects().length > 0) ?? null;\n }\n return t instanceof Element ? t : t.current;\n}\n\ninterface Box {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\n/** The first-use walkthrough: the page goes dark except the part being introduced, with a card beside it. */\nexport function Tour({ open, steps, onClose, skippable = true, step: controlled, onStepChange }: TourProps) {\n const [inner, setInner] = React.useState(0);\n const i = Math.max(0, Math.min(steps.length - 1, controlled ?? inner));\n const step = steps[i];\n const [rect, setRect] = React.useState<Box | null>(null);\n const next = React.useRef<HTMLButtonElement>(null);\n const [wasOpen, setWasOpen] = React.useState(open);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open && controlled == null) setInner(0);\n }\n const go = (n: number) => {\n onStepChange?.(n);\n if (controlled == null) setInner(n);\n };\n const end = (why: 'done' | 'skip') => onClose?.(why);\n\n // Follow the target while it moves (scrolling, layout changes).\n // Depends on the step's fields, not the object: inline steps arrays are new on every render.\n const target = step?.target;\n const pad = step?.padding ?? 6;\n const hasStep = !!step;\n React.useEffect(() => {\n if (!open || !hasStep) return;\n // A selector is looked up again until it appears (the target may render later), then kept.\n let el = findTarget(target);\n el?.scrollIntoView?.({ block: 'center', behavior: reduced() ? 'auto' : 'smooth' });\n let raf = 0;\n let last = '';\n const tick = () => {\n if (!el?.isConnected) el = findTarget(target);\n const r = el?.getBoundingClientRect();\n let v: Box | null = null;\n if (r && r.width) {\n const l = Math.max(3, r.left - pad);\n const t = Math.max(3, r.top - pad);\n v = {\n left: l,\n top: t,\n width: Math.max(0, Math.min(window.innerWidth - 3, r.right + pad) - l),\n height: Math.max(0, Math.min(window.innerHeight - 3, r.bottom + pad) - t),\n };\n }\n const k = JSON.stringify(v);\n if (k !== last) {\n last = k;\n setRect(v);\n }\n raf = requestAnimationFrame(tick);\n };\n tick();\n return () => cancelAnimationFrame(raf);\n }, [open, hasStep, i, target, pad]);\n\n const anchor = React.useMemo(\n () => ({\n getBoundingClientRect: () =>\n rect ? new DOMRect(rect.left, rect.top, rect.width, rect.height) : new DOMRect(window.innerWidth / 2, window.innerHeight / 2, 0, 0),\n }),\n [rect],\n );\n if (!open || !step) return null;\n const lastStep = i === steps.length - 1;\n return (\n <Popover.Root\n open\n modal\n onOpenChange={(_, details) => {\n if (details.reason === 'escape-key' && skippable) end('skip');\n }}\n >\n <Popover.Portal>\n <div className=\"ui-tour-layer\">\n <div className={cx('ui-tour-block', !rect && 'is-dim')} />\n {rect ? <div className=\"ui-tour-spot\" aria-hidden=\"true\" style={rect} /> : null}\n </div>\n <Popover.Positioner\n className=\"ui-float ui-tour-float\"\n anchor={anchor}\n side={rect ? (step.side ?? 'bottom') : 'bottom'}\n align=\"center\"\n sideOffset={rect ? 12 : -100}\n >\n <Popover.Popup key={i} className=\"ui-tour-card\" initialFocus={next}>\n <div className=\"ui-tour-count\">{monoNums(tr('{n} / {total}', { n: '\\u0001', total: '\\u0002' }), [i + 1, steps.length])}</div>\n <Popover.Title className=\"ui-tour-title\">{step.title}</Popover.Title>\n <CodeText as=\"div\" className=\"ui-tour-text\" text={step.text} />\n <div className=\"ui-tour-actions\">\n {skippable && !lastStep ? (\n <button type=\"button\" className=\"ui-link-btn is-muted\" onClick={() => end('skip')}>\n {tr('略過')}\n </button>\n ) : null}\n <span className=\"ui-tour-gap\" />\n {i > 0 ? <Button onClick={() => go(i - 1)}>{tr('上一步')}</Button> : null}\n <Button ref={next} variant=\"primary\" onClick={() => (lastStep ? end('done') : go(i + 1))}>\n {lastStep ? tr('完成') : tr('下一步')}\n </Button>\n </div>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import { I18N } from '../../i18n';\nimport type { TreeNode } from './TreeList';\n\n/** File kind from the extension: picks the color of the document icon. */\nexport const FILE_KIND: Record<string, string> = {\n pdf: 'pdf',\n mp4: 'video',\n mov: 'video',\n mkv: 'video',\n webm: 'video',\n avi: 'video',\n mp3: 'audio',\n wav: 'audio',\n m4a: 'audio',\n ppt: 'slides',\n pptx: 'slides',\n key: 'slides',\n odp: 'slides',\n doc: 'doc',\n docx: 'doc',\n txt: 'doc',\n md: 'doc',\n odt: 'doc',\n xls: 'sheet',\n xlsx: 'sheet',\n csv: 'sheet',\n ods: 'sheet',\n zip: 'archive',\n rar: 'archive',\n tar: 'archive',\n gz: 'archive',\n '7z': 'archive',\n png: 'image',\n jpg: 'image',\n jpeg: 'image',\n gif: 'image',\n svg: 'image',\n webp: 'image',\n py: 'code',\n js: 'code',\n ts: 'code',\n c: 'code',\n cpp: 'code',\n java: 'code',\n ipynb: 'code',\n sh: 'code',\n};\n\n/** The document outline of the file icon (30 x 36). */\nexport const DOC_SHAPE = 'M5 1.5h15l7.5 7.5v25.5H5z';\n\nexport function fileExt(n: TreeNode): string {\n const m = /\\.([a-z0-9]+)$/i.exec(n.name || '');\n return String(n.ext || (m ? m[1] : '')).toLowerCase();\n}\n\n/** Every folder in a list, depth first. */\nexport const foldersOf = (list: TreeNode[], kids: (n: TreeNode) => TreeNode[] | null): TreeNode[] =>\n list.flatMap((n) => {\n const c = kids(n);\n return c ? [n, ...foldersOf(c, kids)] : n.hasChildren ? [n] : [];\n });\n\nexport const toDate = (d: TreeNode['date']): Date | null => (d == null ? null : d instanceof Date ? d : new Date(d));\n\n/** The newest date in a node and everything under it. */\nexport function latest(n: TreeNode): Date | null {\n let best = toDate(n.date);\n for (const c of n.children ?? []) {\n const d = latest(c);\n if (d && (!best || d > best)) best = d;\n }\n return best;\n}\n\nexport type TreeSort = 'newest' | 'oldest' | 'name' | false;\n\n/** Folders first, then by the sort; ties keep their original order. keepOrder (plain trees without a sort) keeps the list as given. */\nexport function sortNodes(list: TreeNode[], sort: TreeSort, keepOrder = false): TreeNode[] {\n if (keepOrder) return [...list];\n return list\n .map((n, i) => [n, i] as const)\n .sort(([a, ia], [b, ib]) => {\n const fa = !!a.children;\n const fb = !!b.children;\n if (fa !== fb) return fa ? -1 : 1;\n if (!sort) return ia - ib;\n if (sort === 'name') return String(a.name).localeCompare(String(b.name), I18N.locale, { numeric: true }) || ia - ib;\n const da = +(latest(a) || 0);\n const db = +(latest(b) || 0);\n return (sort === 'oldest' ? da - db : db - da) || ia - ib;\n })\n .map(([n]) => n);\n}\n\nexport function findNode(id: string, list: TreeNode[], kids: (n: TreeNode) => TreeNode[] | null): TreeNode | null {\n for (const n of list) {\n if (n.id === id) return n;\n const c = kids(n);\n const r = c && findNode(id, c, kids);\n if (r) return r;\n }\n return null;\n}\n\n/** The nodes from the top down to id, or null. */\nexport function pathTo(id: string, list: TreeNode[], kids: (n: TreeNode) => TreeNode[] | null, path: TreeNode[] = []): TreeNode[] | null {\n for (const n of list) {\n const p2 = [...path, n];\n if (n.id === id) return p2;\n const c = kids(n);\n const r = c && pathTo(id, c, kids, p2);\n if (r) return r;\n }\n return null;\n}\n","import * as React from 'react';\nimport { Button } from '../Button/Button';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Skeleton } from '../Skeleton/Skeleton';\nimport { Tag } from '../Tag/Tag';\nimport { DOC_SHAPE, FILE_KIND, fileExt, findNode, foldersOf, latest, pathTo, sortNodes, toDate, type TreeSort } from './helpers';\nimport { fileSize, format } from '../../format';\nimport { tr } from '../../i18n';\nimport { Icon, IconOf, type IconSource } from '../../icons/Icon';\nimport { cx, digits, reduced } from '../../internal/util';\nimport { devWarn } from '../../internal/dev';\nimport { CheckMark } from '../../internal/Field';\n\nexport interface TreeNode {\n id: string;\n name: string;\n /** A folder (files kind) or an expandable item (plain kind). */\n children?: TreeNode[];\n /** Overrides the extension taken from the name. */\n ext?: string;\n date?: Date | number | string;\n /** Bytes. */\n size?: number;\n /** New to this person: the date turns accent and bold; folders say 「2 個新」. */\n unseen?: boolean;\n /** kind=\"plain\": location shown under the name, shortened with format.path. */\n path?: string;\n /** kind=\"plain\": text under the name instead of path; its numbers are in Geist Mono. */\n meta?: string;\n /** kind=\"plain\": category tags after the name. Tag only what differs from most items. */\n tags?: React.ReactNode[];\n /** Expandable before its children are loaded (with loadChildren). */\n hasChildren?: boolean;\n /** kind=\"plain\": name in the secondary color. */\n muted?: boolean;\n /** kind=\"plain\": icon before the name. */\n icon?: IconSource;\n}\n\nexport interface TreeListProps {\n items: TreeNode[];\n /** 'files' (default): folders and files with date and size. 'plain': any other tree, such as a call tree. */\n kind?: 'files' | 'plain';\n /** kind=\"plain\": the selected row. */\n selectedId?: string;\n onSelect?: (node: TreeNode) => void;\n /** kind=\"plain\": IconButtons at the row's right end. */\n rowActions?: (node: TreeNode) => React.ReactNode;\n /** kind=\"plain\": show 「全部展開」. */\n toggleAll?: boolean;\n title?: React.ReactNode;\n /** Accessible name when there is no title. */\n label?: string;\n /** Buttons at the top right. */\n actions?: React.ReactNode;\n /** Default 'newest' for files, false (as given) for plain. */\n sort?: TreeSort;\n /** 'single' keeps one folder open per level; choose it when folders are many and messy. Default 'multi'. */\n expand?: 'multi' | 'single';\n defaultOpen?: string[];\n /** Second line under the title, e.g. 「17 個檔案」. */\n subtitle?: React.ReactNode;\n /** Fixed height (px or a CSS length such as '100%'): the header stays and the list scrolls inside. Needed inside a fixed-height panel. */\n height?: number | string;\n /** No card background, shadow or radius, for a tree inside a panel that is not a Card. Inside a Card this happens by itself. */\n bare?: boolean;\n /** Controlled open ids; update them in onToggle. */\n open?: string[];\n onToggle?: (node: TreeNode, isOpen: boolean, openIds: string[]) => void;\n /** Controlled mode: 「全部展開/全部收合」 reports every open id here. */\n onToggleAll?: (isOpen: boolean, openIds: string[]) => void;\n /** Loads the children of a node with hasChildren the first time it opens. */\n loadChildren?: (node: TreeNode) => TreeNode[] | Promise<TreeNode[]>;\n /** Files kind: checkboxes on hover; a folder's checkbox selects every file inside. */\n selectable?: boolean;\n selected?: string[];\n onSelectChange?: (ids: string[]) => void;\n bulkActions?: (files: TreeNode[], clear: () => void) => React.ReactNode;\n /** Adds 「下載」 to each file and to the bulk bar. */\n onDownload?: (files: TreeNode[]) => void;\n onOpen?: (file: TreeNode) => void;\n emptyText?: string;\n className?: string;\n}\n\ntype Load = { status: 'loading' } | { status: 'done'; children: TreeNode[] } | { status: 'error'; error: string };\n\ninterface NodeRow {\n x?: undefined;\n n: TreeNode;\n depth: number;\n guides: number[];\n fresh: boolean;\n isF: boolean;\n open: boolean;\n pos: number;\n size: number;\n}\ninterface ExtraRow {\n x: 'loading' | 'error';\n n: TreeNode;\n depth: number;\n guides: number[];\n error?: string;\n}\n\nconst vars = (v: Record<string, number>) => v as React.CSSProperties;\n\nfunction Guides({ guides }: { guides: number[] }) {\n return (\n <>\n {guides.map((d) => (\n <span key={d} className={cx('ui-tree-guide', d >= 3 && 'is-deep')} aria-hidden=\"true\" style={vars({ '--g': d })} />\n ))}\n </>\n );\n}\n\n/** Folders and files (or any tree) that expand in place, with guide lines, keyboard navigation and lazy children. It is a card on its own. */\nexport function TreeList(p: TreeListProps) {\n const { items } = p;\n const single = p.expand === 'single';\n const plain = p.kind === 'plain';\n const sort: TreeSort = p.sort === undefined ? (plain ? false : 'newest') : p.sort;\n const selectable = !!p.selectable && !plain;\n devWarn(plain && p.selectable, 'TreeList', 'selectable works with kind=\"files\" only; for plain trees use selectedId and onSelect.');\n const [ownOpen, setOwnOpen] = React.useState<Record<string, boolean>>(() => Object.fromEntries((p.defaultOpen ?? []).map((k) => [k, true])));\n const open: Record<string, boolean> = p.open ? Object.fromEntries(p.open.map((k) => [k, true])) : ownOpen;\n const [loaded, setLoaded] = React.useState<Record<string, Load>>({});\n const kids = (n: TreeNode): TreeNode[] | null => {\n const l = loaded[n.id];\n return n.children ?? (l?.status === 'done' ? l.children : null);\n };\n const expandable = (n: TreeNode) => {\n const c = kids(n);\n return c ? c.length > 0 : !!n.hasChildren;\n };\n const load = (n: TreeNode) => {\n const loader = p.loadChildren;\n if (!loader || kids(n) || loaded[n.id]?.status === 'loading') return;\n setLoaded((m) => ({ ...m, [n.id]: { status: 'loading' } }));\n Promise.resolve()\n .then(() => loader(n))\n .then(\n (c) => setLoaded((m) => ({ ...m, [n.id]: { status: 'done', children: c || [] } })),\n (err: unknown) => setLoaded((m) => ({ ...m, [n.id]: { status: 'error', error: err instanceof Error ? err.message : String(err ?? '') } })),\n );\n };\n const openKey = p.open?.join('\\u0000');\n React.useEffect(() => {\n for (const k of Object.keys(open)) {\n const n = open[k] ? findNode(k, items, kids) : null;\n // eslint-disable-next-line react-hooks/set-state-in-effect -- starts loading children for ids opened from outside\n if (n) load(n);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- load the children of ids opened from outside\n }, [openKey]);\n // Folders just opened: their rows slide in.\n const [fresh, setFresh] = React.useState<Record<string, boolean>>({});\n // The slide-in runs once: forget the folders after the animation so rows mounted later do not replay it.\n React.useEffect(() => {\n if (!Object.keys(fresh).length) return;\n const t = setTimeout(() => setFresh({}), 400);\n return () => clearTimeout(t);\n }, [fresh]);\n const [ownSel, setOwnSel] = React.useState<string[]>([]);\n const sel = p.selected ?? ownSel;\n const setSel = (v: string[]) => {\n if (!p.selected) setOwnSel(v);\n p.onSelectChange?.(v);\n };\n const [focusId, setFocusId] = React.useState<string | null>(null);\n const refs = React.useRef<Record<string, HTMLDivElement | null>>({});\n const want = React.useRef<string | null>(null);\n React.useEffect(() => {\n if (want.current) {\n refs.current[want.current]?.focus();\n want.current = null;\n }\n });\n const selSet = new Set(sel);\n // Files under a node, loaded children included; an unloaded folder has no known files yet.\n const filesUnder = (n: TreeNode): TreeNode[] => {\n const c = kids(n);\n return c ? c.flatMap(filesUnder) : n.hasChildren ? [] : [n];\n };\n const allFiles = items.flatMap(filesUnder);\n\n const toggle = (n: TreeNode) => {\n const o = { ...open };\n const will = !o[n.id];\n if (single && will) {\n const path = pathTo(n.id, items, kids);\n const siblings = (path && path.length > 1 ? kids(path[path.length - 2]) : items) ?? [];\n for (const s of siblings) if (s.id !== n.id) o[s.id] = false;\n }\n o[n.id] = will;\n setFresh(will && !reduced() ? { [n.id]: true } : {});\n if (will) load(n);\n p.onToggle?.(\n n,\n will,\n Object.keys(o).filter((k) => o[k]),\n );\n if (!p.open) setOwnOpen(o);\n };\n const checkState = (n: TreeNode): boolean | 'mixed' => {\n const fl = filesUnder(n);\n const k = fl.filter((f) => selSet.has(f.id)).length;\n return k === 0 ? false : k === fl.length ? true : 'mixed';\n };\n const checkToggle = (n: TreeNode) => {\n const on = checkState(n) !== true;\n const m = new Set(selSet);\n for (const f of filesUnder(n)) {\n if (on) m.add(f.id);\n else m.delete(f.id);\n }\n setSel(allFiles.filter((f) => m.has(f.id)).map((f) => f.id));\n };\n const openFile = (n: TreeNode) => (p.onOpen ? p.onOpen(n) : p.onDownload?.([n]));\n\n const every: (NodeRow | ExtraRow)[] = [];\n const walk = (list: TreeNode[], depth: number, guides: number[], isFresh: boolean) => {\n const sorted = sortNodes(list, sort, plain && !sort);\n sorted.forEach((n, i) => {\n const isF = plain ? expandable(n) : !!(n.children || n.hasChildren);\n const isOpen = isF && !!open[n.id];\n every.push({ n, depth, guides, fresh: isFresh, isF, open: isOpen, pos: i + 1, size: sorted.length });\n if (!isOpen) return;\n const c = kids(n);\n const st = loaded[n.id];\n const g = [...guides, depth];\n if (c) walk(c, depth + 1, g, isFresh || !!fresh[n.id]);\n else if (st?.status === 'error') every.push({ x: 'error', n, depth: depth + 1, guides: g, error: st.error });\n else if (p.loadChildren) every.push({ x: 'loading', n, depth: depth + 1, guides: g });\n });\n };\n walk(items, 0, [], false);\n const rows = every.filter((r): r is NodeRow => !r.x);\n const cur = Math.max(\n 0,\n rows.findIndex((r) => r.n.id === focusId),\n );\n\n const go = (j: number) => {\n if (!rows[j]) return;\n want.current = rows[j].n.id;\n setFocusId(rows[j].n.id);\n };\n const onKey = (e: React.KeyboardEvent) => {\n if ((e.target as HTMLElement).getAttribute('role') !== 'treeitem' || !rows.length) return;\n const r = rows[cur];\n const k = e.key;\n const handled = ['ArrowDown', 'ArrowUp', 'Home', 'End', 'ArrowRight', 'ArrowLeft', 'Enter'].includes(k) || (k === ' ' && selectable);\n if (!handled) return;\n e.preventDefault();\n if (k === 'ArrowDown') go(cur + 1);\n else if (k === 'ArrowUp') go(cur - 1);\n else if (k === 'Home') go(0);\n else if (k === 'End') go(rows.length - 1);\n else if (k === 'ArrowRight') {\n if (r.isF && !r.open) toggle(r.n);\n else if (r.isF) go(cur + 1);\n } else if (k === 'ArrowLeft') {\n if (r.isF && r.open) toggle(r.n);\n else\n for (let j = cur - 1; j >= 0; j--)\n if (rows[j].depth < r.depth) {\n go(j);\n break;\n }\n } else if (k === 'Enter') {\n if (plain) p.onSelect?.(r.n);\n else if (r.isF) toggle(r.n);\n else openFile(r.n);\n } else checkToggle(r.n);\n };\n\n const itemProps = (r: NodeRow, idx: number) => ({\n ref: (el: HTMLDivElement | null) => {\n refs.current[r.n.id] = el;\n },\n role: 'treeitem',\n tabIndex: idx === cur ? 0 : -1,\n 'aria-level': r.depth + 1,\n 'aria-posinset': r.pos,\n 'aria-setsize': r.size,\n 'aria-expanded': r.isF ? r.open : undefined,\n style: vars({ '--d': r.depth }),\n onFocus: () => focusId !== r.n.id && setFocusId(r.n.id),\n });\n\n const plainRow = (r: NodeRow, idx: number) => {\n const { n, isF } = r;\n const on = p.selectedId != null && p.selectedId === n.id;\n const meta = n.meta ?? (n.path ? format.path(n.path) : '');\n return (\n <div\n key={n.id}\n {...itemProps(r, idx)}\n aria-selected={p.onSelect ? on : undefined}\n className={cx('ui-tree-row', 'is-plain', on && 'is-current', n.muted && 'is-muted', r.fresh && 'ui-tree-in')}\n onClick={() => {\n setFocusId(n.id);\n if (p.onSelect) p.onSelect(n);\n else if (isF) toggle(n);\n }}\n >\n <Guides guides={r.guides} />\n <button\n type=\"button\"\n tabIndex={-1}\n className={cx('ui-tree-caret', 'ui-tree-caretbtn', r.open && 'is-open', !isF && 'is-leaf')}\n aria-label={`${r.open ? tr('收合') : tr('展開')} ${n.name}`}\n onClick={(e) => {\n e.stopPropagation();\n if (isF) toggle(n);\n }}\n >\n <Icon name=\"caret-right\" size={16} />\n </button>\n {n.icon ? (\n <span className=\"ui-tree-picon\" aria-hidden=\"true\">\n <IconOf icon={n.icon} size={20} />\n </span>\n ) : null}\n <div className=\"ui-tree-main\">\n <div className=\"ui-tree-name\">\n {r.depth > 3 ? (\n <span className=\"ui-tree-depth\" aria-hidden=\"true\">\n {'L' + (r.depth + 1)}\n </span>\n ) : null}\n <span className=\"ui-tree-label is-one\">{n.name}</span>\n {(n.tags ?? []).map((t, i) => (\n <Tag key={i}>{t}</Tag>\n ))}\n </div>\n {meta ? <div className={cx('ui-tree-pmeta', n.meta == null && 'is-path')}>{n.meta != null ? digits(meta, /(\\d[\\d,.]*)/) : meta}</div> : null}\n </div>\n {p.rowActions ? (\n <span className=\"ui-tree-act\" onClick={(e) => e.stopPropagation()}>\n {p.rowActions(n)}\n </span>\n ) : null}\n </div>\n );\n };\n\n const extraRow = (r: ExtraRow) => (\n <div key={`${r.n.id}:${r.x}`} className={cx('ui-tree-row is-plain is-extra', r.x === 'error' && 'is-error')} style={vars({ '--d': r.depth })} role=\"none\">\n <Guides guides={r.guides} />\n <span className=\"ui-tree-caret is-leaf\" aria-hidden=\"true\" />\n {r.x === 'loading' ? (\n <>\n <div className=\"ui-tree-main\">\n <Skeleton width=\"55%\" height={14} />\n </div>\n <span className=\"ui-visually-hidden\" role=\"status\">\n {tr('載入中')}\n </span>\n </>\n ) : (\n <>\n <div className=\"ui-tree-main\" role=\"alert\">\n {tr('無法載入 {name} 的子項目', { name: r.n.name })}\n {r.error ? ':' + r.error : ''}。\n </div>\n <button\n type=\"button\"\n className=\"ui-link-btn\"\n onClick={() => {\n setLoaded(({ [r.n.id]: _, ...m }) => m);\n setTimeout(() => load(r.n), 0);\n }}\n >\n {tr('重試')}\n </button>\n </>\n )}\n </div>\n );\n\n const fileRow = (r: NodeRow, idx: number) => {\n const { n, isF } = r;\n const ck = selectable ? checkState(n) : false;\n const ext = isF ? '' : fileExt(n);\n const kind = FILE_KIND[ext] || 'other';\n const fl = isF ? filesUnder(n) : [];\n const when = isF ? latest(n) : toDate(n.date);\n const dateTxt = when ? format.relative(when) : '';\n const sizeTxt = !isF ? fileSize(n.size) : '';\n const nNew = fl.filter((f) => f.unseen).length;\n const isNew = !isF && !!n.unseen;\n const bits = (isF ? [fl.length ? tr('{n} 個檔案', { n: fl.length }) : '', dateTxt] : [dateTxt, sizeTxt]).filter(Boolean);\n return (\n <div\n key={n.id}\n {...itemProps(r, idx)}\n aria-selected={selectable ? ck === true : undefined}\n className={cx('ui-tree-row', isF && 'is-folder', ck === true && 'is-selected', r.fresh && 'ui-tree-in')}\n onClick={() => {\n setFocusId(n.id);\n if (isF) toggle(n);\n else openFile(n);\n }}\n >\n <Guides guides={r.guides} />\n {selectable ? (\n <span className=\"ui-tree-sel\">\n <button\n type=\"button\"\n role=\"checkbox\"\n tabIndex={-1}\n aria-checked={ck}\n aria-label={tr('選取 {name}', { name: n.name })}\n className={cx('ui-check', ck && 'is-on')}\n onClick={(e) => {\n e.stopPropagation();\n checkToggle(n);\n }}\n >\n <span className=\"ui-check-box\" aria-hidden=\"true\">\n <CheckMark v={ck} />\n </span>\n </button>\n </span>\n ) : null}\n {isF ? (\n <>\n <span className={cx('ui-tree-caret', r.open && 'is-open')} aria-hidden=\"true\">\n <Icon name=\"caret-right\" size={16} />\n </span>\n <span className=\"ui-tree-ficon\" aria-hidden=\"true\">\n <Icon name={r.open ? 'folder-open' : 'folder'} size={24} />\n </span>\n </>\n ) : (\n <span className={cx('ui-tree-doc', 'is-' + kind)} aria-hidden=\"true\">\n <svg width={30} height={36} viewBox=\"0 0 30 36\">\n <path d={DOC_SHAPE} />\n <path d=\"M20 1.5V9h7.5\" fill=\"none\" />\n </svg>\n <span className=\"ui-tree-ext\">{(ext || '?').slice(0, 4).toUpperCase()}</span>\n </span>\n )}\n <div className=\"ui-tree-main\">\n <div className=\"ui-tree-name\">\n <span className=\"ui-tree-label\">{n.name}</span>\n {nNew ? <span className=\"ui-tree-newcount\">{tr('{n} 個新', { n: nNew })}</span> : null}\n {isF && fl.length ? <span className=\"ui-tree-count ui-tree-mc\">{tr('{n} 個檔案', { n: fl.length })}</span> : null}\n </div>\n {bits.length ? (\n <div className=\"ui-tree-meta ui-tree-mb\">\n {bits.map((t, i) => (\n <span key={i} className={cx(!isF && t === dateTxt && isNew && 'is-new')}>\n {(i ? '· ' : '') + t}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n <span className={cx('ui-tree-col', 'ui-tree-date', 'ui-tree-mc', isNew && 'is-new')}>{dateTxt}</span>\n <span className=\"ui-tree-col ui-tree-size ui-tree-mc\">{sizeTxt}</span>\n {p.onDownload ? (\n isF ? (\n <span className=\"ui-tree-actsp\" aria-hidden=\"true\" />\n ) : (\n <span className=\"ui-tree-act\">\n <IconButton\n label={tr('下載 {name}', { name: n.name })}\n icon=\"download-simple\"\n tabIndex={-1}\n onClick={(e) => {\n e.stopPropagation();\n p.onDownload?.([n]);\n }}\n />\n </span>\n )\n ) : null}\n </div>\n );\n };\n\n // Every folder whose children are known, loaded ones included.\n const folders = foldersOf(items, kids);\n const anyClosed = folders.some((f) => !open[f.id]);\n const selFiles = allFiles.filter((f) => selSet.has(f.id));\n const total = selFiles.reduce((a, f) => a + (f.size || 0), 0);\n const showToggleAll = !single && folders.length > 0 && (!plain || !!p.toggleAll) && (!p.open || !!p.onToggleAll);\n devWarn(\n p.open && (!plain || p.toggleAll) && !single && !p.onToggleAll,\n 'TreeList',\n 'with controlled open ids, 「全部展開」 needs onToggleAll to report the new ids; it is hidden until you pass it.',\n );\n const head =\n selectable && selFiles.length ? (\n <div className=\"ui-tree-head ui-tree-bulk\">\n <span className=\"ui-tree-bulk-count\">\n {tr('已選 {n} 個檔案', { n: selFiles.length })}\n {total ? <span className=\"ui-tree-bulk-size\">{tr('共 {size}', { size: fileSize(total) })}</span> : null}\n </span>\n <span className=\"ui-tree-head-actions\">\n <Button onClick={() => setSel([])}>{tr('清除選取')}</Button>\n {p.onDownload ? (\n <Button\n variant=\"primary\"\n icon=\"download-simple\"\n onClick={() => {\n p.onDownload?.(selFiles);\n setSel([]);\n }}\n >\n {tr('下載')}\n </Button>\n ) : null}\n {p.bulkActions?.(selFiles, () => setSel([]))}\n </span>\n </div>\n ) : p.title || p.actions || showToggleAll ? (\n <div className=\"ui-tree-head\">\n {p.title ? (\n <div className=\"ui-tree-titles\">\n <h2 className=\"ui-tree-title\">{p.title}</h2>\n {p.subtitle ? <div className=\"ui-tree-subtitle\">{p.subtitle}</div> : null}\n </div>\n ) : (\n <span />\n )}\n <span className=\"ui-tree-head-actions\">\n {showToggleAll ? (\n <Button\n onClick={() => {\n const o = Object.fromEntries(folders.map((f) => [f.id, anyClosed]));\n setFresh(anyClosed && !reduced() ? Object.fromEntries(folders.filter((f) => !open[f.id]).map((f) => [f.id, true])) : {});\n if (p.open) p.onToggleAll?.(anyClosed, anyClosed ? [...new Set([...p.open, ...folders.map((f) => f.id)])] : []);\n else setOwnOpen(o);\n }}\n >\n {anyClosed ? tr('全部展開') : tr('全部收合')}\n </Button>\n ) : null}\n {p.actions ?? null}\n </span>\n </div>\n ) : null;\n return (\n <section\n className={cx(\n 'ui-tree',\n plain && 'is-plain',\n selectable && 'is-selectable',\n selFiles.length && 'has-sel',\n p.bare && 'is-bare',\n p.height != null && 'has-height',\n p.className,\n )}\n aria-label={p.title ? undefined : p.label}\n style={p.height != null ? { height: typeof p.height === 'number' ? p.height + 'px' : p.height } : undefined}\n >\n {head}\n {rows.length ? (\n <div\n role=\"tree\"\n aria-label={p.label || (typeof p.title === 'string' ? p.title : undefined)}\n aria-multiselectable={selectable || undefined}\n className=\"ui-tree-list\"\n onKeyDown={onKey}\n >\n {every.map((r) => (r.x ? extraRow(r) : plain ? plainRow(r, rows.indexOf(r)) : fileRow(r, rows.indexOf(r))))}\n </div>\n ) : (\n <p className=\"ui-tree-empty\">{p.emptyText || (plain ? tr('沒有項目') : tr('這裡還沒有檔案'))}</p>\n )}\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;AAGA,MAAa,KAAK;CAChB,SACE;CACF,cACE;CACF,cACE;CACF,eACE;CACF,oBACE;CACF,mBACE;CACF,oBACE;CACF,YACE;CACF,oBACE;CACF,MAAM;CACN,kBACE;CACF,cAAc;CACd,cAAc;CACd,eAAe;CACf,YACE;CACF,aACE;CACF,cACE;CACF,aACE;CACF,iBACE;CACF,OAAO;CACP,gBACE;CACF,gBACE;CACF,OACE;CACF,OACE;CACF,MAAM;CACN,KAAK;CACL,UACE;CACF,cACE;CACF,uBACE;CACF,mBACE;CACF,mBACE;CACF,KAAK;CACL,aACE;CACF,MAAM;CACN,aACE;CACF,eACE;CACF,QACE;CACF,eACE;CACF,QACE;CACF,OACE;CACF,MAAM;CACN,OACE;CACF,eACE;CACF,OACE;CACF,OACE;CACF,OACE;CACF,MAAM;CACN,KAAK;CACL,QACE;CACF,MAAM;CACN,MAAM;CACN,gBACE;CACF,MAAM;CACN,oBACE;CACF,OAAO;CACP,SACE;CACF,MAAM;CACN,oBACE;CACF,iBACE;CACF,MAAM;CACN,SACE;CACF,OACE;CACF,UACE;CACF,iBACE;CACF,QACE;CACF,kBACE;CACF,WACE;CACF,YACE;CACF,sBACE;CACF,gBACE;CACF,MAAM;CACN,KAAK;CACL,OACE;CACF,iBACE;CACF,MAAM;CACN,OACE;CACF,SACE;CACF,kBACE;CACF,GAAG;CACH,YACE;CACF,SACE;CACF,QAAQ;CACR,gBACE;CACF,kBACE;CACF,UACE;CACF,OACE;CACF,mBACE;CACF,aACE;CACF,MAAM;CACN,SACE;AACJ;AAEA,MAAa,UAA2C;CACtD,SACE;CACF,cAAc;CACd,cAAc;CACd,eAAe;CACf,oBACE;CACF,mBACE;CACF,oBACE;CACF,YACE;CACF,oBACE;CACF,MAAM;CACN,kBACE;CACF,cAAc;CACd,cAAc;CACd,eAAe;CACf,YAAY;CACZ,aACE;CACF,cACE;CACF,aACE;CACF,iBACE;CACF,OACE;CACF,gBACE;CACF,gBACE;CACF,OAAO;CACP,OACE;CACF,MAAM;CACN,KAAK;CACL,UACE;CACF,cACE;CACF,uBACE;CACF,mBACE;CACF,mBACE;CACF,KAAK;CACL,aACE;CACF,MAAM;CACN,aACE;CACF,eACE;CACF,QACE;CACF,eACE;CACF,QACE;CACF,OACE;CACF,MAAM;CACN,OACE;CACF,eACE;CACF,OACE;CACF,OACE;CACF,OACE;CACF,MAAM;CACN,KAAK;CACL,QACE;CACF,MAAM;CACN,MAAM;CACN,gBACE;CACF,MAAM;CACN,oBACE;CACF,OACE;CACF,SACE;CACF,MAAM;CACN,oBACE;CACF,iBACE;CACF,MAAM;CACN,SACE;CACF,OACE;CACF,UACE;CACF,iBACE;CACF,QACE;CACF,kBAAkB;CAClB,WACE;CACF,YACE;CACF,sBACE;CACF,gBACE;CACF,MAAM;CACN,KAAK;CACL,OACE;CACF,iBACE;CACF,MAAM;CACN,OACE;CACF,SACE;CACF,kBACE;CACF,GAAG;CACH,YACE;CACF,SACE;CACF,QAAQ;CACR,gBACE;CACF,kBACE;CACF,UACE;CACF,OACE;CACF,mBACE;CACF,aACE;CACF,MAAM;CACN,SACE;AACJ;;AAGA,MAAa,WAAW;CACtB,gBAAgB;CAChB,UAAU;CACV,QAAQ;CACR,QAAQ;CACR,WAAW;CACX,UAAU;CACV,QAAQ;CACR,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB,gBAAgB;CAChB,cAAc;CACd,UAAU;CACV,qBAAqB;CACrB,UAAU;CACV,WAAW;CACX,UAAU;CACV,WAAW;CACX,gBAAgB;CAChB,kBAAkB;CAClB,gBAAgB;CAChB,YAAY;CACZ,iBAAiB;CACjB,oBAAoB;CACpB,mBAAmB;CACnB,iBAAiB;CACjB,MAAM;CACN,WAAW;CACX,MAAM;CACN,MAAM;CACN,UAAU;CACV,UAAU;CACV,MAAM;CACN,eAAe;CACf,oBAAoB;CACpB,QAAQ;CACR,MAAM;CACN,UAAU;CACV,eAAe;CACf,kBAAkB;AACpB;;;ACpWA,SAAgB,GAAG,GAAG,OAA0B;CA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"}