even-toolkit 0.5.2 → 1.0.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 (592) hide show
  1. package/README.md +113 -71
  2. package/dist/glasses/action-bar.d.ts.map +1 -0
  3. package/dist/glasses/action-bar.js.map +1 -0
  4. package/dist/glasses/action-map.d.ts.map +1 -0
  5. package/dist/glasses/action-map.js.map +1 -0
  6. package/dist/glasses/bridge.d.ts.map +1 -0
  7. package/dist/glasses/bridge.js.map +1 -0
  8. package/dist/glasses/canvas-renderer.d.ts.map +1 -0
  9. package/dist/glasses/canvas-renderer.js.map +1 -0
  10. package/dist/glasses/composer.d.ts.map +1 -0
  11. package/dist/glasses/composer.js.map +1 -0
  12. package/dist/glasses/gestures.d.ts.map +1 -0
  13. package/dist/glasses/gestures.js.map +1 -0
  14. package/dist/glasses/index.d.ts.map +1 -0
  15. package/dist/glasses/index.js.map +1 -0
  16. package/dist/glasses/keep-alive.d.ts.map +1 -0
  17. package/dist/glasses/keep-alive.js.map +1 -0
  18. package/dist/glasses/keyboard.d.ts.map +1 -0
  19. package/dist/glasses/keyboard.js.map +1 -0
  20. package/dist/glasses/layout.d.ts.map +1 -0
  21. package/dist/glasses/layout.js.map +1 -0
  22. package/dist/glasses/paginate-text.d.ts.map +1 -0
  23. package/dist/glasses/paginate-text.js.map +1 -0
  24. package/dist/glasses/png-utils.d.ts.map +1 -0
  25. package/dist/glasses/png-utils.js.map +1 -0
  26. package/dist/glasses/splash.d.ts.map +1 -0
  27. package/dist/glasses/splash.js.map +1 -0
  28. package/dist/glasses/text-clean.d.ts.map +1 -0
  29. package/dist/glasses/text-clean.js.map +1 -0
  30. package/dist/glasses/text-utils.d.ts.map +1 -0
  31. package/dist/glasses/text-utils.js.map +1 -0
  32. package/dist/glasses/timer-display.d.ts.map +1 -0
  33. package/dist/glasses/timer-display.js.map +1 -0
  34. package/dist/glasses/types.d.ts.map +1 -0
  35. package/dist/glasses/types.js.map +1 -0
  36. package/dist/glasses/useFlashPhase.d.ts.map +1 -0
  37. package/dist/glasses/useFlashPhase.js.map +1 -0
  38. package/dist/glasses/useGlasses.d.ts.map +1 -0
  39. package/dist/glasses/useGlasses.js.map +1 -0
  40. package/dist/web/components/app-shell.d.ts +15 -0
  41. package/dist/web/components/app-shell.d.ts.map +1 -0
  42. package/dist/web/components/app-shell.js +11 -0
  43. package/dist/web/components/app-shell.js.map +1 -0
  44. package/dist/web/components/audio-player.d.ts +9 -0
  45. package/dist/web/components/audio-player.d.ts.map +1 -0
  46. package/dist/web/components/audio-player.js +54 -0
  47. package/dist/web/components/audio-player.js.map +1 -0
  48. package/dist/web/components/badge.d.ts +11 -0
  49. package/dist/web/components/badge.d.ts.map +1 -0
  50. package/dist/web/components/badge.js +21 -0
  51. package/dist/web/components/badge.js.map +1 -0
  52. package/dist/web/components/bottom-sheet.d.ts +11 -0
  53. package/dist/web/components/bottom-sheet.d.ts.map +1 -0
  54. package/dist/web/components/bottom-sheet.js +33 -0
  55. package/dist/web/components/bottom-sheet.js.map +1 -0
  56. package/dist/web/components/button.d.ts +12 -0
  57. package/dist/web/components/button.d.ts.map +1 -0
  58. package/dist/web/components/button.js +29 -0
  59. package/dist/web/components/button.js.map +1 -0
  60. package/dist/web/components/calendar.d.ts +48 -0
  61. package/dist/web/components/calendar.d.ts.map +1 -0
  62. package/dist/web/components/calendar.js +86 -0
  63. package/dist/web/components/calendar.js.map +1 -0
  64. package/dist/web/components/card.d.ts +12 -0
  65. package/dist/web/components/card.d.ts.map +1 -0
  66. package/dist/web/components/card.js +27 -0
  67. package/dist/web/components/card.js.map +1 -0
  68. package/dist/web/components/category-filter.d.ts +10 -0
  69. package/dist/web/components/category-filter.d.ts.map +1 -0
  70. package/dist/web/components/category-filter.js +9 -0
  71. package/dist/web/components/category-filter.js.map +1 -0
  72. package/dist/web/components/chart.d.ts +65 -0
  73. package/dist/web/components/chart.d.ts.map +1 -0
  74. package/dist/web/components/chart.js +62 -0
  75. package/dist/web/components/chart.js.map +1 -0
  76. package/dist/web/components/chat.d.ts +79 -0
  77. package/dist/web/components/chat.d.ts.map +1 -0
  78. package/dist/web/components/chat.js +166 -0
  79. package/dist/web/components/chat.js.map +1 -0
  80. package/dist/web/components/checkbox.d.ts +11 -0
  81. package/dist/web/components/checkbox.d.ts.map +1 -0
  82. package/dist/web/components/checkbox.js +7 -0
  83. package/dist/web/components/checkbox.js.map +1 -0
  84. package/dist/web/components/confirm-dialog.d.ts +14 -0
  85. package/dist/web/components/confirm-dialog.d.ts.map +1 -0
  86. package/dist/web/components/confirm-dialog.js +37 -0
  87. package/dist/web/components/confirm-dialog.js.map +1 -0
  88. package/dist/web/components/cta-group.d.ts +16 -0
  89. package/dist/web/components/cta-group.d.ts.map +1 -0
  90. package/dist/web/components/cta-group.js +22 -0
  91. package/dist/web/components/cta-group.js.map +1 -0
  92. package/dist/web/components/dialog.d.ts +19 -0
  93. package/dist/web/components/dialog.d.ts.map +1 -0
  94. package/dist/web/components/dialog.js +35 -0
  95. package/dist/web/components/dialog.js.map +1 -0
  96. package/dist/web/components/divider.d.ts +11 -0
  97. package/dist/web/components/divider.d.ts.map +1 -0
  98. package/dist/web/components/divider.js +19 -0
  99. package/dist/web/components/divider.js.map +1 -0
  100. package/dist/web/components/empty-state.d.ts +15 -0
  101. package/dist/web/components/empty-state.d.ts.map +1 -0
  102. package/dist/web/components/empty-state.js +7 -0
  103. package/dist/web/components/empty-state.js.map +1 -0
  104. package/dist/web/components/file-upload.d.ts +12 -0
  105. package/dist/web/components/file-upload.d.ts.map +1 -0
  106. package/dist/web/components/file-upload.js +38 -0
  107. package/dist/web/components/file-upload.js.map +1 -0
  108. package/dist/web/components/image-viewer.d.ts +23 -0
  109. package/dist/web/components/image-viewer.d.ts.map +1 -0
  110. package/dist/web/components/image-viewer.js +29 -0
  111. package/dist/web/components/image-viewer.js.map +1 -0
  112. package/dist/web/components/indicator.d.ts +15 -0
  113. package/dist/web/components/indicator.d.ts.map +1 -0
  114. package/dist/web/components/indicator.js +12 -0
  115. package/dist/web/components/indicator.js.map +1 -0
  116. package/dist/web/components/input-group.d.ts +9 -0
  117. package/dist/web/components/input-group.d.ts.map +1 -0
  118. package/dist/web/components/input-group.js +27 -0
  119. package/dist/web/components/input-group.js.map +1 -0
  120. package/dist/web/components/input.d.ts +7 -0
  121. package/dist/web/components/input.d.ts.map +1 -0
  122. package/dist/web/components/input.js +7 -0
  123. package/dist/web/components/input.js.map +1 -0
  124. package/dist/web/components/kbd.d.ts +9 -0
  125. package/dist/web/components/kbd.d.ts.map +1 -0
  126. package/dist/web/components/kbd.js +7 -0
  127. package/dist/web/components/kbd.js.map +1 -0
  128. package/dist/web/components/list-item.d.ts +14 -0
  129. package/dist/web/components/list-item.d.ts.map +1 -0
  130. package/dist/web/components/list-item.js +57 -0
  131. package/dist/web/components/list-item.js.map +1 -0
  132. package/dist/web/components/loading.d.ts +8 -0
  133. package/dist/web/components/loading.d.ts.map +1 -0
  134. package/dist/web/components/loading.js +41 -0
  135. package/dist/web/components/loading.js.map +1 -0
  136. package/dist/web/components/nav-bar.d.ts +14 -0
  137. package/dist/web/components/nav-bar.d.ts.map +1 -0
  138. package/dist/web/components/nav-bar.js +9 -0
  139. package/dist/web/components/nav-bar.js.map +1 -0
  140. package/dist/web/components/nav-header.d.ts +11 -0
  141. package/dist/web/components/nav-header.d.ts.map +1 -0
  142. package/dist/web/components/nav-header.js +7 -0
  143. package/dist/web/components/nav-header.js.map +1 -0
  144. package/dist/web/components/page.d.ts +9 -0
  145. package/dist/web/components/page.d.ts.map +1 -0
  146. package/dist/web/components/page.js +7 -0
  147. package/dist/web/components/page.js.map +1 -0
  148. package/dist/web/components/pill.d.ts +9 -0
  149. package/dist/web/components/pill.d.ts.map +1 -0
  150. package/dist/web/components/pill.js +7 -0
  151. package/dist/web/components/pill.js.map +1 -0
  152. package/dist/web/components/progress.d.ts +8 -0
  153. package/dist/web/components/progress.d.ts.map +1 -0
  154. package/dist/web/components/progress.js +7 -0
  155. package/dist/web/components/progress.js.map +1 -0
  156. package/dist/web/components/radio-group.d.ts +16 -0
  157. package/dist/web/components/radio-group.d.ts.map +1 -0
  158. package/dist/web/components/radio-group.js +10 -0
  159. package/dist/web/components/radio-group.js.map +1 -0
  160. package/dist/web/components/screen-header.d.ts +11 -0
  161. package/dist/web/components/screen-header.d.ts.map +1 -0
  162. package/dist/web/components/screen-header.js +7 -0
  163. package/dist/web/components/screen-header.js.map +1 -0
  164. package/dist/web/components/scroll-picker.d.ts +66 -0
  165. package/dist/web/components/scroll-picker.d.ts.map +1 -0
  166. package/dist/web/components/scroll-picker.js +243 -0
  167. package/dist/web/components/scroll-picker.js.map +1 -0
  168. package/dist/web/components/search-bar.d.ts +9 -0
  169. package/dist/web/components/search-bar.d.ts.map +1 -0
  170. package/dist/web/components/search-bar.js +8 -0
  171. package/dist/web/components/search-bar.js.map +1 -0
  172. package/dist/web/components/section-header.d.ts +10 -0
  173. package/dist/web/components/section-header.d.ts.map +1 -0
  174. package/dist/web/components/section-header.js +7 -0
  175. package/dist/web/components/section-header.js.map +1 -0
  176. package/dist/web/components/segmented-control.d.ts +15 -0
  177. package/dist/web/components/segmented-control.d.ts.map +1 -0
  178. package/dist/web/components/segmented-control.js +9 -0
  179. package/dist/web/components/segmented-control.js.map +1 -0
  180. package/dist/web/components/select.d.ts +13 -0
  181. package/dist/web/components/select.d.ts.map +1 -0
  182. package/dist/web/components/select.js +7 -0
  183. package/dist/web/components/select.js.map +1 -0
  184. package/dist/web/components/settings-group.d.ts +10 -0
  185. package/dist/web/components/settings-group.d.ts.map +1 -0
  186. package/dist/web/components/settings-group.js +7 -0
  187. package/dist/web/components/settings-group.js.map +1 -0
  188. package/dist/web/components/skeleton.d.ts +13 -0
  189. package/dist/web/components/skeleton.d.ts.map +1 -0
  190. package/dist/web/components/skeleton.js +23 -0
  191. package/dist/web/components/skeleton.js.map +1 -0
  192. package/dist/web/components/slider.d.ts +16 -0
  193. package/dist/web/components/slider.d.ts.map +1 -0
  194. package/dist/web/components/slider.js +8 -0
  195. package/dist/web/components/slider.js.map +1 -0
  196. package/dist/web/components/stat-grid.d.ts +14 -0
  197. package/dist/web/components/stat-grid.d.ts.map +1 -0
  198. package/dist/web/components/stat-grid.js +7 -0
  199. package/dist/web/components/stat-grid.js.map +1 -0
  200. package/dist/web/components/status-dot.d.ts +8 -0
  201. package/dist/web/components/status-dot.d.ts.map +1 -0
  202. package/dist/web/components/status-dot.js +7 -0
  203. package/dist/web/components/status-dot.js.map +1 -0
  204. package/dist/web/components/status-progress.d.ts +13 -0
  205. package/dist/web/components/status-progress.d.ts.map +1 -0
  206. package/dist/web/components/status-progress.js +7 -0
  207. package/dist/web/components/status-progress.js.map +1 -0
  208. package/dist/web/components/step-indicator.d.ts +13 -0
  209. package/dist/web/components/step-indicator.d.ts.map +1 -0
  210. package/dist/web/components/step-indicator.js +10 -0
  211. package/dist/web/components/step-indicator.js.map +1 -0
  212. package/dist/web/components/table.d.ts +9 -0
  213. package/dist/web/components/table.d.ts.map +1 -0
  214. package/dist/web/components/table.js +17 -0
  215. package/dist/web/components/table.js.map +1 -0
  216. package/dist/web/components/tag.d.ts +25 -0
  217. package/dist/web/components/tag.d.ts.map +1 -0
  218. package/dist/web/components/tag.js +15 -0
  219. package/dist/web/components/tag.js.map +1 -0
  220. package/dist/web/components/textarea.d.ts +7 -0
  221. package/dist/web/components/textarea.d.ts.map +1 -0
  222. package/dist/web/components/textarea.js +7 -0
  223. package/dist/web/components/textarea.js.map +1 -0
  224. package/dist/web/components/timeline.d.ts +17 -0
  225. package/dist/web/components/timeline.d.ts.map +1 -0
  226. package/dist/web/components/timeline.js +7 -0
  227. package/dist/web/components/timeline.js.map +1 -0
  228. package/dist/web/components/timer-ring.d.ts +12 -0
  229. package/dist/web/components/timer-ring.d.ts.map +1 -0
  230. package/dist/web/components/timer-ring.js +15 -0
  231. package/dist/web/components/timer-ring.js.map +1 -0
  232. package/dist/web/components/toast.d.ts +14 -0
  233. package/dist/web/components/toast.d.ts.map +1 -0
  234. package/dist/web/components/toast.js +21 -0
  235. package/dist/web/components/toast.js.map +1 -0
  236. package/dist/web/components/toggle.d.ts +10 -0
  237. package/dist/web/components/toggle.d.ts.map +1 -0
  238. package/dist/web/components/toggle.js +21 -0
  239. package/dist/web/components/toggle.js.map +1 -0
  240. package/dist/web/components/voice-input.d.ts +17 -0
  241. package/dist/web/components/voice-input.d.ts.map +1 -0
  242. package/dist/web/components/voice-input.js +60 -0
  243. package/dist/web/components/voice-input.js.map +1 -0
  244. package/dist/web/icons/index.d.ts +29 -0
  245. package/dist/web/icons/index.d.ts.map +1 -0
  246. package/dist/web/icons/index.js +47 -0
  247. package/dist/web/icons/index.js.map +1 -0
  248. package/dist/web/icons/svg-catalog.d.ts +7 -0
  249. package/dist/web/icons/svg-catalog.d.ts.map +1 -0
  250. package/dist/web/icons/svg-catalog.js +1389 -0
  251. package/dist/web/icons/svg-catalog.js.map +1 -0
  252. package/dist/web/icons/svg-icons.d.ts +207 -0
  253. package/dist/web/icons/svg-icons.d.ts.map +1 -0
  254. package/dist/web/icons/svg-icons.js +398 -0
  255. package/dist/web/icons/svg-icons.js.map +1 -0
  256. package/dist/web/index.d.ts +107 -0
  257. package/dist/web/index.d.ts.map +1 -0
  258. package/dist/web/index.js +69 -0
  259. package/dist/web/index.js.map +1 -0
  260. package/dist/web/utils/cn.d.ts +3 -0
  261. package/dist/web/utils/cn.d.ts.map +1 -0
  262. package/dist/web/utils/cn.js +6 -0
  263. package/dist/web/utils/cn.js.map +1 -0
  264. package/package.json +289 -46
  265. package/web/components/app-shell.tsx +29 -0
  266. package/web/components/audio-player.tsx +117 -0
  267. package/web/components/badge.tsx +39 -0
  268. package/web/components/bottom-sheet.tsx +61 -0
  269. package/web/components/button.tsx +48 -0
  270. package/web/components/calendar.tsx +333 -0
  271. package/web/components/card.tsx +42 -0
  272. package/web/components/category-filter.tsx +33 -0
  273. package/web/components/chart.tsx +411 -0
  274. package/web/components/chat.tsx +494 -0
  275. package/web/components/checkbox.tsx +52 -0
  276. package/web/components/confirm-dialog.tsx +100 -0
  277. package/web/components/cta-group.tsx +85 -0
  278. package/web/components/dialog.tsx +94 -0
  279. package/web/components/divider.tsx +25 -0
  280. package/web/components/empty-state.tsx +32 -0
  281. package/web/components/file-upload.tsx +100 -0
  282. package/web/components/image-viewer.tsx +131 -0
  283. package/web/components/indicator.tsx +50 -0
  284. package/web/components/input-group.tsx +39 -0
  285. package/web/components/input.tsx +23 -0
  286. package/web/components/kbd.tsx +22 -0
  287. package/web/components/list-item.tsx +106 -0
  288. package/web/components/loading.tsx +79 -0
  289. package/web/components/nav-bar.tsx +43 -0
  290. package/web/components/nav-header.tsx +24 -0
  291. package/web/components/page.tsx +14 -0
  292. package/web/components/pill.tsx +32 -0
  293. package/web/components/progress.tsx +26 -0
  294. package/web/components/radio-group.tsx +59 -0
  295. package/web/components/screen-header.tsx +26 -0
  296. package/web/components/scroll-picker.tsx +508 -0
  297. package/web/components/search-bar.tsx +28 -0
  298. package/web/components/section-header.tsx +20 -0
  299. package/web/components/segmented-control.tsx +50 -0
  300. package/web/components/select.tsx +37 -0
  301. package/web/components/settings-group.tsx +22 -0
  302. package/web/components/skeleton.tsx +36 -0
  303. package/web/components/slider.tsx +69 -0
  304. package/web/components/stat-grid.tsx +40 -0
  305. package/web/components/status-dot.tsx +21 -0
  306. package/web/components/status-progress.tsx +56 -0
  307. package/web/components/step-indicator.tsx +52 -0
  308. package/web/components/table.tsx +70 -0
  309. package/web/components/tag.tsx +72 -0
  310. package/web/components/textarea.tsx +23 -0
  311. package/web/components/timeline.tsx +52 -0
  312. package/web/components/timer-ring.tsx +69 -0
  313. package/web/components/toast.tsx +38 -0
  314. package/web/components/toggle.tsx +58 -0
  315. package/web/components/voice-input.tsx +165 -0
  316. package/web/icons/README.md +38 -0
  317. package/web/icons/index.ts +61 -0
  318. package/web/icons/svg/edit-add.svg +13 -0
  319. package/web/icons/svg/edit-checklist.svg +3 -0
  320. package/web/icons/svg/edit-copy.svg +12 -0
  321. package/web/icons/svg/edit-cross-small.svg +10 -0
  322. package/web/icons/svg/edit-cross.svg +10 -0
  323. package/web/icons/svg/edit-cut.svg +10 -0
  324. package/web/icons/svg/edit-display-adj.svg +3 -0
  325. package/web/icons/svg/edit-dist-adj.svg +3 -0
  326. package/web/icons/svg/edit-dot-lists.svg +3 -0
  327. package/web/icons/svg/edit-edit.svg +3 -0
  328. package/web/icons/svg/edit-hight-adj.svg +3 -0
  329. package/web/icons/svg/edit-import.svg +10 -0
  330. package/web/icons/svg/edit-layout-settings.svg +10 -0
  331. package/web/icons/svg/edit-multi-selection.svg +10 -0
  332. package/web/icons/svg/edit-new.svg +3 -0
  333. package/web/icons/svg/edit-number-list.svg +3 -0
  334. package/web/icons/svg/edit-options.svg +10 -0
  335. package/web/icons/svg/edit-paste.svg +10 -0
  336. package/web/icons/svg/edit-pause.svg +10 -0
  337. package/web/icons/svg/edit-pin.svg +10 -0
  338. package/web/icons/svg/edit-play.svg +10 -0
  339. package/web/icons/svg/edit-redo.svg +10 -0
  340. package/web/icons/svg/edit-restore.svg +10 -0
  341. package/web/icons/svg/edit-settings.svg +3 -0
  342. package/web/icons/svg/edit-share.svg +3 -0
  343. package/web/icons/svg/edit-sweep.svg +10 -0
  344. package/web/icons/svg/edit-switch.svg +3 -0
  345. package/web/icons/svg/edit-trash.svg +10 -0
  346. package/web/icons/svg/edit-undo.svg +10 -0
  347. package/web/icons/svg/edit-unpin.svg +3 -0
  348. package/web/icons/svg/edit-upload-to-cloud.svg +3 -0
  349. package/web/icons/svg/edit-width.svg +3 -0
  350. package/web/icons/svg/feat-access-control.svg +10 -0
  351. package/web/icons/svg/feat-account.svg +10 -0
  352. package/web/icons/svg/feat-calendar.svg +3 -0
  353. package/web/icons/svg/feat-camera.svg +3 -0
  354. package/web/icons/svg/feat-direct-push.svg +3 -0
  355. package/web/icons/svg/feat-eis.svg +10 -0
  356. package/web/icons/svg/feat-email.svg +10 -0
  357. package/web/icons/svg/feat-even-ai.svg +3 -0
  358. package/web/icons/svg/feat-facial-scan.svg +3 -0
  359. package/web/icons/svg/feat-feedback.svg +3 -0
  360. package/web/icons/svg/feat-headup-angle.svg +10 -0
  361. package/web/icons/svg/feat-inbox.svg +10 -0
  362. package/web/icons/svg/feat-interface-settings.svg +3 -0
  363. package/web/icons/svg/feat-languages.svg +10 -0
  364. package/web/icons/svg/feat-learn-explore.svg +3 -0
  365. package/web/icons/svg/feat-menu.svg +3 -0
  366. package/web/icons/svg/feat-message.svg +10 -0
  367. package/web/icons/svg/feat-navigate.svg +10 -0
  368. package/web/icons/svg/feat-news.svg +10 -0
  369. package/web/icons/svg/feat-notification.svg +10 -0
  370. package/web/icons/svg/feat-personal-info.svg +10 -0
  371. package/web/icons/svg/feat-phone-call.svg +10 -0
  372. package/web/icons/svg/feat-phone-voice-input.svg +3 -0
  373. package/web/icons/svg/feat-privacy.svg +3 -0
  374. package/web/icons/svg/feat-qr-code.svg +3 -0
  375. package/web/icons/svg/feat-quick-note.svg +3 -0
  376. package/web/icons/svg/feat-scan.svg +3 -0
  377. package/web/icons/svg/feat-screen-off.svg +16 -0
  378. package/web/icons/svg/feat-services.svg +3 -0
  379. package/web/icons/svg/feat-stocks.svg +10 -0
  380. package/web/icons/svg/feat-study.svg +10 -0
  381. package/web/icons/svg/feat-teleprompt.svg +3 -0
  382. package/web/icons/svg/feat-theme.svg +10 -0
  383. package/web/icons/svg/feat-time-counting.svg +10 -0
  384. package/web/icons/svg/feat-transcribe.svg +3 -0
  385. package/web/icons/svg/feat-translate.svg +3 -0
  386. package/web/icons/svg/feat-voice-print.svg +10 -0
  387. package/web/icons/svg/feat-wear-detect.svg +3 -0
  388. package/web/icons/svg/feat-weather.svg +10 -0
  389. package/web/icons/svg/feat-wiki.svg +3 -0
  390. package/web/icons/svg/guide-back.svg +10 -0
  391. package/web/icons/svg/guide-chevron-drill-back.svg +10 -0
  392. package/web/icons/svg/guide-chevron-drill-down.svg +10 -0
  393. package/web/icons/svg/guide-chevron-drill-up.svg +10 -0
  394. package/web/icons/svg/guide-chevron-small-back.svg +10 -0
  395. package/web/icons/svg/guide-chevron-small-drill-back.svg +3 -0
  396. package/web/icons/svg/guide-chevron-small-drill-down.svg +10 -0
  397. package/web/icons/svg/guide-chevron-small-drill-in.svg +3 -0
  398. package/web/icons/svg/guide-chevron-small-drill-up.svg +10 -0
  399. package/web/icons/svg/guide-double-tap.svg +3 -0
  400. package/web/icons/svg/guide-go.svg +10 -0
  401. package/web/icons/svg/guide-long-press.svg +3 -0
  402. package/web/icons/svg/guide-maximize-card.svg +10 -0
  403. package/web/icons/svg/guide-maximize.svg +10 -0
  404. package/web/icons/svg/guide-minimize-card.svg +10 -0
  405. package/web/icons/svg/guide-minimize.svg +3 -0
  406. package/web/icons/svg/guide-search.svg +3 -0
  407. package/web/icons/svg/guide-shift-to-top.svg +10 -0
  408. package/web/icons/svg/guide-single-tap.svg +3 -0
  409. package/web/icons/svg/guide-swip.svg +3 -0
  410. package/web/icons/svg/health-HRV.svg +3 -0
  411. package/web/icons/svg/health-heart-rate.svg +3 -0
  412. package/web/icons/svg/health-lift-2.svg +3 -0
  413. package/web/icons/svg/health-lift-3.svg +3 -0
  414. package/web/icons/svg/health-lift.svg +3 -0
  415. package/web/icons/svg/health-run.svg +3 -0
  416. package/web/icons/svg/health-sleep.svg +10 -0
  417. package/web/icons/svg/health-spo2.svg +7 -0
  418. package/web/icons/svg/health-stand.svg +3 -0
  419. package/web/icons/svg/health-steps.svg +10 -0
  420. package/web/icons/svg/health-temperature.svg +3 -0
  421. package/web/icons/svg/health-walk.svg +3 -0
  422. package/web/icons/svg/menu-even-hub-highlighted.svg +10 -0
  423. package/web/icons/svg/menu-even-hub.svg +10 -0
  424. package/web/icons/svg/menu-gear-highlighted.svg +10 -0
  425. package/web/icons/svg/menu-gear.svg +10 -0
  426. package/web/icons/svg/menu-healt-highlighted.svg +10 -0
  427. package/web/icons/svg/menu-healt.svg +10 -0
  428. package/web/icons/svg/menu-home-highlighted.svg +10 -0
  429. package/web/icons/svg/menu-home.svg +10 -0
  430. package/web/icons/svg/nav-bicycle.svg +10 -0
  431. package/web/icons/svg/nav-bus.svg +10 -0
  432. package/web/icons/svg/nav-business.svg +10 -0
  433. package/web/icons/svg/nav-cloth-shop.svg +10 -0
  434. package/web/icons/svg/nav-coffee-shop.svg +10 -0
  435. package/web/icons/svg/nav-compass.svg +3 -0
  436. package/web/icons/svg/nav-crown.svg +3 -0
  437. package/web/icons/svg/nav-direction.svg +10 -0
  438. package/web/icons/svg/nav-end-location.svg +3 -0
  439. package/web/icons/svg/nav-flag.svg +3 -0
  440. package/web/icons/svg/nav-gift.svg +3 -0
  441. package/web/icons/svg/nav-groceries.svg +10 -0
  442. package/web/icons/svg/nav-home-address.svg +10 -0
  443. package/web/icons/svg/nav-hotel.svg +10 -0
  444. package/web/icons/svg/nav-location.svg +3 -0
  445. package/web/icons/svg/nav-office-address.svg +10 -0
  446. package/web/icons/svg/nav-relocate.svg +10 -0
  447. package/web/icons/svg/nav-restaurant.svg +10 -0
  448. package/web/icons/svg/nav-shopping.svg +3 -0
  449. package/web/icons/svg/nav-train.svg +10 -0
  450. package/web/icons/svg/nav-walk.svg +3 -0
  451. package/web/icons/svg/nav-zoom-in.svg +3 -0
  452. package/web/icons/svg/nav-zoom-out.svg +3 -0
  453. package/web/icons/svg/status-alert.svg +5 -0
  454. package/web/icons/svg/status-archived-file.svg +3 -0
  455. package/web/icons/svg/status-bad-pressed.svg +23 -0
  456. package/web/icons/svg/status-bad.svg +20 -0
  457. package/web/icons/svg/status-battery-50.svg +10 -0
  458. package/web/icons/svg/status-battery-75.svg +10 -0
  459. package/web/icons/svg/status-battery-dying.svg +15 -0
  460. package/web/icons/svg/status-battery-full.svg +10 -0
  461. package/web/icons/svg/status-battery-low.svg +10 -0
  462. package/web/icons/svg/status-bluetooth-disconnected.svg +3 -0
  463. package/web/icons/svg/status-bluetooth.svg +10 -0
  464. package/web/icons/svg/status-brightness-auto.svg +3 -0
  465. package/web/icons/svg/status-brightness.svg +3 -0
  466. package/web/icons/svg/status-case-battery.svg +3 -0
  467. package/web/icons/svg/status-case-charging.svg +14 -0
  468. package/web/icons/svg/status-case.svg +3 -0
  469. package/web/icons/svg/status-checkbox.svg +3 -0
  470. package/web/icons/svg/status-checkmark.svg +3 -0
  471. package/web/icons/svg/status-clickbox.svg +3 -0
  472. package/web/icons/svg/status-complete.svg +10 -0
  473. package/web/icons/svg/status-disconnected.svg +10 -0
  474. package/web/icons/svg/status-display-adj-off.svg +11 -0
  475. package/web/icons/svg/status-dot.svg +10 -0
  476. package/web/icons/svg/status-eye-closed.svg +3 -0
  477. package/web/icons/svg/status-eye-open.svg +3 -0
  478. package/web/icons/svg/status-faqs.svg +10 -0
  479. package/web/icons/svg/status-fast.svg +3 -0
  480. package/web/icons/svg/status-fav.svg +29 -0
  481. package/web/icons/svg/status-file.svg +10 -0
  482. package/web/icons/svg/status-first-floor.svg +3 -0
  483. package/web/icons/svg/status-glasses-battery.svg +3 -0
  484. package/web/icons/svg/status-glasses-charging.svg +17 -0
  485. package/web/icons/svg/status-glasses.svg +3 -0
  486. package/web/icons/svg/status-good-pressed.svg +29 -0
  487. package/web/icons/svg/status-good.svg +20 -0
  488. package/web/icons/svg/status-grabber.svg +10 -0
  489. package/web/icons/svg/status-head-up.svg +3 -0
  490. package/web/icons/svg/status-hint.svg +14 -0
  491. package/web/icons/svg/status-info.svg +10 -0
  492. package/web/icons/svg/status-login.svg +10 -0
  493. package/web/icons/svg/status-logout.svg +10 -0
  494. package/web/icons/svg/status-more.svg +3 -0
  495. package/web/icons/svg/status-network-error.svg +3 -0
  496. package/web/icons/svg/status-reset.svg +3 -0
  497. package/web/icons/svg/status-saved.svg +10 -0
  498. package/web/icons/svg/status-second-floor.svg +3 -0
  499. package/web/icons/svg/status-sele.svg +3 -0
  500. package/web/icons/svg/status-selected-box.svg +3 -0
  501. package/web/icons/svg/status-selected.svg +3 -0
  502. package/web/icons/svg/status-slow.svg +3 -0
  503. package/web/icons/svg/status-speaker-off.svg +3 -0
  504. package/web/icons/svg/status-speaker-on.svg +3 -0
  505. package/web/icons/svg/status-text-sizing.svg +3 -0
  506. package/web/icons/svg/status-unbind.svg +10 -0
  507. package/web/icons/svg/status-undisturb.svg +10 -0
  508. package/web/icons/svg/status-unfav.svg +3 -0
  509. package/web/icons/svg-catalog.ts +1390 -0
  510. package/web/icons/svg-icons.tsx +2166 -0
  511. package/web/index.ts +172 -0
  512. package/web/theme/tokens-dark.css +46 -0
  513. package/web/theme/tokens-light.css +46 -0
  514. package/web/theme/typography.css +57 -0
  515. package/web/theme/utilities.css +46 -0
  516. package/web/utils/cn.ts +6 -0
  517. package/dist/action-bar.d.ts.map +0 -1
  518. package/dist/action-bar.js.map +0 -1
  519. package/dist/action-map.d.ts.map +0 -1
  520. package/dist/action-map.js.map +0 -1
  521. package/dist/bridge.d.ts.map +0 -1
  522. package/dist/bridge.js.map +0 -1
  523. package/dist/canvas-renderer.d.ts.map +0 -1
  524. package/dist/canvas-renderer.js.map +0 -1
  525. package/dist/composer.d.ts.map +0 -1
  526. package/dist/composer.js.map +0 -1
  527. package/dist/gestures.d.ts.map +0 -1
  528. package/dist/gestures.js.map +0 -1
  529. package/dist/index.d.ts.map +0 -1
  530. package/dist/index.js.map +0 -1
  531. package/dist/keep-alive.d.ts.map +0 -1
  532. package/dist/keep-alive.js.map +0 -1
  533. package/dist/keyboard.d.ts.map +0 -1
  534. package/dist/keyboard.js.map +0 -1
  535. package/dist/layout.d.ts.map +0 -1
  536. package/dist/layout.js.map +0 -1
  537. package/dist/paginate-text.d.ts.map +0 -1
  538. package/dist/paginate-text.js.map +0 -1
  539. package/dist/png-utils.d.ts.map +0 -1
  540. package/dist/png-utils.js.map +0 -1
  541. package/dist/splash.d.ts.map +0 -1
  542. package/dist/splash.js.map +0 -1
  543. package/dist/text-clean.d.ts.map +0 -1
  544. package/dist/text-clean.js.map +0 -1
  545. package/dist/text-utils.d.ts.map +0 -1
  546. package/dist/text-utils.js.map +0 -1
  547. package/dist/timer-display.d.ts.map +0 -1
  548. package/dist/timer-display.js.map +0 -1
  549. package/dist/types.d.ts.map +0 -1
  550. package/dist/types.js.map +0 -1
  551. package/dist/useFlashPhase.d.ts.map +0 -1
  552. package/dist/useFlashPhase.js.map +0 -1
  553. package/dist/useGlasses.d.ts.map +0 -1
  554. package/dist/useGlasses.js.map +0 -1
  555. /package/dist/{action-bar.d.ts → glasses/action-bar.d.ts} +0 -0
  556. /package/dist/{action-bar.js → glasses/action-bar.js} +0 -0
  557. /package/dist/{action-map.d.ts → glasses/action-map.d.ts} +0 -0
  558. /package/dist/{action-map.js → glasses/action-map.js} +0 -0
  559. /package/dist/{bridge.d.ts → glasses/bridge.d.ts} +0 -0
  560. /package/dist/{bridge.js → glasses/bridge.js} +0 -0
  561. /package/dist/{canvas-renderer.d.ts → glasses/canvas-renderer.d.ts} +0 -0
  562. /package/dist/{canvas-renderer.js → glasses/canvas-renderer.js} +0 -0
  563. /package/dist/{composer.d.ts → glasses/composer.d.ts} +0 -0
  564. /package/dist/{composer.js → glasses/composer.js} +0 -0
  565. /package/dist/{gestures.d.ts → glasses/gestures.d.ts} +0 -0
  566. /package/dist/{gestures.js → glasses/gestures.js} +0 -0
  567. /package/dist/{index.d.ts → glasses/index.d.ts} +0 -0
  568. /package/dist/{index.js → glasses/index.js} +0 -0
  569. /package/dist/{keep-alive.d.ts → glasses/keep-alive.d.ts} +0 -0
  570. /package/dist/{keep-alive.js → glasses/keep-alive.js} +0 -0
  571. /package/dist/{keyboard.d.ts → glasses/keyboard.d.ts} +0 -0
  572. /package/dist/{keyboard.js → glasses/keyboard.js} +0 -0
  573. /package/dist/{layout.d.ts → glasses/layout.d.ts} +0 -0
  574. /package/dist/{layout.js → glasses/layout.js} +0 -0
  575. /package/dist/{paginate-text.d.ts → glasses/paginate-text.d.ts} +0 -0
  576. /package/dist/{paginate-text.js → glasses/paginate-text.js} +0 -0
  577. /package/dist/{png-utils.d.ts → glasses/png-utils.d.ts} +0 -0
  578. /package/dist/{png-utils.js → glasses/png-utils.js} +0 -0
  579. /package/dist/{splash.d.ts → glasses/splash.d.ts} +0 -0
  580. /package/dist/{splash.js → glasses/splash.js} +0 -0
  581. /package/dist/{text-clean.d.ts → glasses/text-clean.d.ts} +0 -0
  582. /package/dist/{text-clean.js → glasses/text-clean.js} +0 -0
  583. /package/dist/{text-utils.d.ts → glasses/text-utils.d.ts} +0 -0
  584. /package/dist/{text-utils.js → glasses/text-utils.js} +0 -0
  585. /package/dist/{timer-display.d.ts → glasses/timer-display.d.ts} +0 -0
  586. /package/dist/{timer-display.js → glasses/timer-display.js} +0 -0
  587. /package/dist/{types.d.ts → glasses/types.d.ts} +0 -0
  588. /package/dist/{types.js → glasses/types.js} +0 -0
  589. /package/dist/{useFlashPhase.d.ts → glasses/useFlashPhase.d.ts} +0 -0
  590. /package/dist/{useFlashPhase.js → glasses/useFlashPhase.js} +0 -0
  591. /package/dist/{useGlasses.d.ts → glasses/useGlasses.d.ts} +0 -0
  592. /package/dist/{useGlasses.js → glasses/useGlasses.js} +0 -0
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ declare const badgeVariants: (props?: ({
4
+ variant?: "positive" | "negative" | "accent" | "neutral" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {
7
+ }
8
+ declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
9
+ export { Badge, badgeVariants };
10
+ export type { BadgeProps };
11
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../web/components/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,aAAa;;8EAelB,CAAC;AAEF,UAAU,UACR,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAC3C,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAEzC,QAAA,MAAM,KAAK,oFAQV,CAAC;AAIF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { cn } from '../utils/cn';
5
+ const badgeVariants = cva('inline-flex items-center rounded-[6px] px-2 py-0.5 text-[11px] tracking-[-0.11px] font-normal', {
6
+ variants: {
7
+ variant: {
8
+ positive: 'bg-positive-alpha text-positive',
9
+ negative: 'bg-negative-alpha text-negative',
10
+ accent: 'bg-accent-alpha text-accent',
11
+ neutral: 'bg-surface-light text-text-dim',
12
+ },
13
+ },
14
+ defaultVariants: {
15
+ variant: 'neutral',
16
+ },
17
+ });
18
+ const Badge = React.forwardRef(({ className, variant, ...props }, ref) => (_jsx("span", { ref: ref, className: cn(badgeVariants({ variant, className })), ...props })));
19
+ Badge.displayName = 'Badge';
20
+ export { Badge, badgeVariants };
21
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.js","sourceRoot":"","sources":["../../../web/components/badge.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,aAAa,GAAG,GAAG,CACvB,+FAA+F,EAC/F;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,QAAQ,EAAE,iCAAiC;YAC3C,QAAQ,EAAE,iCAAiC;YAC3C,MAAM,EAAE,6BAA6B;YACrC,OAAO,EAAE,gCAAgC;SAC1C;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;KACnB;CACF,CACF,CAAC;AAMF,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAC5B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CACzC,eACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,KAChD,KAAK,GACT,CACH,CACF,CAAC;AAEF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAE5B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from 'react';
2
+ interface BottomSheetProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ children: ReactNode;
6
+ className?: string;
7
+ }
8
+ declare function BottomSheet({ open, onClose, children, className }: BottomSheetProps): import("react/jsx-runtime").JSX.Element | null;
9
+ export { BottomSheet };
10
+ export type { BottomSheetProps };
11
+ //# sourceMappingURL=bottom-sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom-sheet.d.ts","sourceRoot":"","sources":["../../../web/components/bottom-sheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,gBAAgB;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,gBAAgB,kDA8C5E;AAED,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { cn } from '../utils/cn';
4
+ function BottomSheet({ open, onClose, children, className }) {
5
+ const [visible, setVisible] = React.useState(false);
6
+ const [closing, setClosing] = React.useState(false);
7
+ React.useEffect(() => {
8
+ if (open) {
9
+ setVisible(true);
10
+ setClosing(false);
11
+ }
12
+ else if (visible) {
13
+ setClosing(true);
14
+ const timer = setTimeout(() => { setVisible(false); setClosing(false); }, 200);
15
+ return () => clearTimeout(timer);
16
+ }
17
+ }, [open]);
18
+ React.useEffect(() => {
19
+ if (!visible)
20
+ return;
21
+ const handler = (e) => {
22
+ if (e.key === 'Escape')
23
+ onClose();
24
+ };
25
+ document.addEventListener('keydown', handler);
26
+ return () => document.removeEventListener('keydown', handler);
27
+ }, [visible, onClose]);
28
+ if (!visible)
29
+ return null;
30
+ return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-end justify-center", style: { animation: closing ? 'fadeOut 200ms ease forwards' : 'fadeIn 200ms ease' }, children: [_jsx("div", { className: "absolute inset-0 bg-overlay", onClick: onClose }), _jsxs("div", { className: cn('relative z-10 w-full max-w-[393px] bg-bg rounded-t-[6px] shadow-[0px_-4px_12px_0px_rgba(0,0,0,0.12)] pt-3', className), style: { animation: closing ? 'slideDown 200ms ease forwards' : 'slideUp 250ms ease' }, children: [children, _jsx("div", { className: "flex items-center justify-center h-[42px]", children: _jsx("div", { className: "w-[139px] h-[5px] rounded-full bg-text" }) })] })] }));
31
+ }
32
+ export { BottomSheet };
33
+ //# sourceMappingURL=bottom-sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom-sheet.js","sourceRoot":"","sources":["../../../web/components/bottom-sheet.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAUjC,SAAS,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB;IAC3E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/E,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;QACpC,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvB,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CACL,eACE,SAAS,EAAC,kDAAkD,EAC5D,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,mBAAmB,EAAE,aAEnF,cAAK,SAAS,EAAC,6BAA6B,EAAC,OAAO,EAAE,OAAO,GAAI,EACjE,eACE,SAAS,EAAE,EAAE,CACX,2GAA2G,EAC3G,SAAS,CACV,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,oBAAoB,EAAE,aAErF,QAAQ,EACT,cAAK,SAAS,EAAC,2CAA2C,YACxD,cAAK,SAAS,EAAC,wCAAwC,GAAG,GACtD,IACF,IACF,CACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "highlight" | "default" | "ghost" | "danger" | "secondary" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
8
+ }
9
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
10
+ export { Button, buttonVariants };
11
+ export type { ButtonProps };
12
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../web/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,cAAc;;;8EAuBnB,CAAC;AAEF,UAAU,WACR,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,cAAc,CAAC;CAAG;AAE1C,QAAA,MAAM,MAAM,uFASX,CAAC;AAIF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { cn } from '../utils/cn';
5
+ const buttonVariants = cva('inline-flex items-center justify-center gap-4 rounded-[6px] font-normal transition-colors cursor-pointer disabled:opacity-50 disabled:pointer-events-none text-[17px] tracking-[-0.17px]', {
6
+ variants: {
7
+ variant: {
8
+ highlight: 'bg-accent text-text-highlight hover:opacity-90',
9
+ default: 'bg-surface text-text hover:bg-surface-light',
10
+ ghost: 'text-text-dim hover:text-text hover:bg-surface-light',
11
+ danger: 'bg-surface text-negative hover:bg-surface-light',
12
+ secondary: 'bg-surface-light text-text-dim hover:text-text hover:bg-surface-lighter',
13
+ },
14
+ size: {
15
+ sm: 'h-9 px-4 text-[15px] tracking-[-0.15px]',
16
+ default: 'h-12 px-4',
17
+ lg: 'h-12 px-6',
18
+ icon: 'h-9 w-9 text-[15px]',
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ variant: 'highlight',
23
+ size: 'default',
24
+ },
25
+ });
26
+ const Button = React.forwardRef(({ className, variant, size, type = 'button', ...props }, ref) => (_jsx("button", { ref: ref, type: type, className: cn(buttonVariants({ variant, size, className })), ...props })));
27
+ Button.displayName = 'Button';
28
+ export { Button, buttonVariants };
29
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../../web/components/button.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,cAAc,GAAG,GAAG,CACxB,0LAA0L,EAC1L;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,SAAS,EAAE,gDAAgD;YAC3D,OAAO,EAAE,6CAA6C;YACtD,KAAK,EAAE,sDAAsD;YAC7D,MAAM,EAAE,iDAAiD;YACzD,SAAS,EAAE,yEAAyE;SACrF;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,yCAAyC;YAC7C,OAAO,EAAE,WAAW;YACpB,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,qBAAqB;SAC5B;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC;AAMF,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAC7B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAChE,iBACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,KACvD,KAAK,GACT,CACH,CACF,CAAC;AAEF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ export interface CalendarEvent {
2
+ id: string;
3
+ title: string;
4
+ start: Date;
5
+ end: Date;
6
+ color?: string;
7
+ location?: string;
8
+ description?: string;
9
+ }
10
+ type CalendarView = 'month' | 'week' | 'day';
11
+ interface CalendarHeaderProps {
12
+ date: Date;
13
+ view: CalendarView;
14
+ onViewChange: (v: CalendarView) => void;
15
+ onPrev: () => void;
16
+ onNext: () => void;
17
+ onToday: () => void;
18
+ }
19
+ declare function CalendarHeader({ date, view, onViewChange, onPrev, onNext, onToday }: CalendarHeaderProps): import("react/jsx-runtime").JSX.Element;
20
+ declare function MonthView({ date, events, onDateClick, onEventClick }: {
21
+ date: Date;
22
+ events: CalendarEvent[];
23
+ onDateClick?: (d: Date) => void;
24
+ onEventClick?: (e: CalendarEvent) => void;
25
+ }): import("react/jsx-runtime").JSX.Element;
26
+ declare function WeekView({ date, events, onEventClick }: {
27
+ date: Date;
28
+ events: CalendarEvent[];
29
+ onEventClick?: (e: CalendarEvent) => void;
30
+ }): import("react/jsx-runtime").JSX.Element;
31
+ declare function DayView({ date, events, onEventClick }: {
32
+ date: Date;
33
+ events: CalendarEvent[];
34
+ onEventClick?: (e: CalendarEvent) => void;
35
+ }): import("react/jsx-runtime").JSX.Element;
36
+ interface CalendarProps {
37
+ events?: CalendarEvent[];
38
+ view?: CalendarView;
39
+ onViewChange?: (v: CalendarView) => void;
40
+ selectedDate?: Date;
41
+ onDateChange?: (d: Date) => void;
42
+ onEventClick?: (e: CalendarEvent) => void;
43
+ className?: string;
44
+ }
45
+ declare function Calendar({ events, view: controlledView, onViewChange, selectedDate: controlledDate, onDateChange, onEventClick, className, }: CalendarProps): import("react/jsx-runtime").JSX.Element;
46
+ export { Calendar, CalendarHeader, MonthView, WeekView, DayView };
47
+ export type { CalendarProps, CalendarView };
48
+ //# sourceMappingURL=calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../web/components/calendar.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,IAAI,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAqC7C,UAAU,mBAAmB;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,iBAAS,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,mBAAmB,2CAoCjG;AAID,iBAAS,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE;IAC9D,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C,2CAuDA;AAID,iBAAS,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;IAChD,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C,2CAmDA;AAID,iBAAS,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;IAC/C,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C,2CAyCA;AAID,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,QAAQ,CAAC,EAChB,MAAW,EACX,IAAI,EAAE,cAAc,EACpB,YAAY,EACZ,YAAY,EAAE,cAAc,EAC5B,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,EAAE,aAAa,2CAsCf;AAED,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { cn } from '../utils/cn';
4
+ // ─── Date helpers ───────────────────────────────────────────────
5
+ function startOfDay(d) { const r = new Date(d); r.setHours(0, 0, 0, 0); return r; }
6
+ function isSameDay(a, b) { return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate(); }
7
+ function isToday(d) { return isSameDay(d, new Date()); }
8
+ function addDays(d, n) { const r = new Date(d); r.setDate(r.getDate() + n); return r; }
9
+ function getMonthGrid(year, month) {
10
+ const first = new Date(year, month, 1);
11
+ const startDay = first.getDay(); // 0=Sun
12
+ const start = addDays(first, -startDay);
13
+ const days = [];
14
+ for (let i = 0; i < 42; i++)
15
+ days.push(addDays(start, i));
16
+ return days;
17
+ }
18
+ function getWeekDays(date) {
19
+ const day = date.getDay();
20
+ const start = addDays(date, -day);
21
+ return Array.from({ length: 7 }, (_, i) => addDays(start, i));
22
+ }
23
+ function formatMonth(d) {
24
+ return d.toLocaleDateString(undefined, { month: 'long', year: 'numeric' });
25
+ }
26
+ function formatTime(d) {
27
+ return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
28
+ }
29
+ const DAY_LABELS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
30
+ const HOURS = Array.from({ length: 24 }, (_, i) => i);
31
+ function CalendarHeader({ date, view, onViewChange, onPrev, onNext, onToday }) {
32
+ return (_jsxs("div", { className: "flex flex-col gap-2 mb-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { type: "button", onClick: onPrev, className: "w-8 h-8 rounded-[6px] bg-surface-light flex items-center justify-center cursor-pointer text-text-dim hover:text-text transition-colors shrink-0", children: _jsxs("svg", { viewBox: "0 0 24 24", className: "w-4 h-4", children: [_jsx("rect", { x: 14, y: 4, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 12, y: 6, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 10, y: 8, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 8, y: 10, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 10, y: 12, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 12, y: 14, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 14, y: 16, width: 2, height: 2, fill: "currentColor" })] }) }), _jsx("button", { type: "button", onClick: onNext, className: "w-8 h-8 rounded-[6px] bg-surface-light flex items-center justify-center cursor-pointer text-text-dim hover:text-text transition-colors shrink-0", children: _jsxs("svg", { viewBox: "0 0 24 24", className: "w-4 h-4", children: [_jsx("rect", { x: 8, y: 4, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 10, y: 6, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 12, y: 8, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 14, y: 10, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 12, y: 12, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 10, y: 14, width: 2, height: 2, fill: "currentColor" }), _jsx("rect", { x: 8, y: 16, width: 2, height: 2, fill: "currentColor" })] }) }), _jsx("span", { className: "text-[15px] tracking-[-0.15px] font-normal ml-1 truncate", children: formatMonth(date) })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { type: "button", onClick: onToday, className: "h-8 px-3 rounded-[6px] bg-surface-light text-[13px] tracking-[-0.13px] text-text-dim hover:text-text cursor-pointer transition-colors shrink-0", children: "Today" }), _jsx("div", { className: "inline-flex rounded-[6px] bg-surface-lighter overflow-visible h-8", children: ['month', 'week', 'day'].map((v) => (_jsx("button", { type: "button", onClick: () => onViewChange(v), className: cn('px-3 text-[13px] tracking-[-0.13px] cursor-pointer rounded-[6px] transition-colors capitalize', view === v ? 'bg-surface text-text shadow-sm' : 'text-text-dim hover:text-text'), children: v }, v))) })] })] }));
33
+ }
34
+ // ─── MonthView ──────────────────────────────────────────────────
35
+ function MonthView({ date, events, onDateClick, onEventClick }) {
36
+ const grid = getMonthGrid(date.getFullYear(), date.getMonth());
37
+ const currentMonth = date.getMonth();
38
+ const eventsOnDay = (d) => events.filter((e) => isSameDay(new Date(e.start), d));
39
+ return (_jsxs("div", { children: [_jsx("div", { className: "grid grid-cols-7 mb-1", children: DAY_LABELS.map((l) => (_jsx("div", { className: "text-center text-[11px] tracking-[-0.11px] text-text-muted py-1", children: l }, l))) }), _jsx("div", { className: "grid grid-cols-7", children: grid.map((d, i) => {
40
+ const dayEvents = eventsOnDay(d);
41
+ const inMonth = d.getMonth() === currentMonth;
42
+ const today = isToday(d);
43
+ return (_jsxs("button", { type: "button", onClick: () => onDateClick?.(d), className: cn('flex flex-col items-center py-1.5 cursor-pointer rounded-[6px] transition-colors hover:bg-surface-light min-h-[48px]', !inMonth && 'opacity-40'), children: [_jsx("span", { className: cn('w-7 h-7 flex items-center justify-center rounded-full text-[13px] tracking-[-0.13px]', today && 'bg-accent text-text-highlight'), children: d.getDate() }), dayEvents.length > 0 && (_jsxs("div", { className: "flex gap-0.5 mt-0.5", children: [dayEvents.slice(0, 3).map((e) => (_jsx("span", { className: "w-1 h-1 rounded-full", style: { backgroundColor: e.color ?? 'var(--color-accent)' }, onClick: (ev) => { ev.stopPropagation(); onEventClick?.(e); } }, e.id))), dayEvents.length > 3 && (_jsxs("span", { className: "text-[9px] text-text-muted", children: ["+", dayEvents.length - 3] }))] }))] }, i));
44
+ }) })] }));
45
+ }
46
+ // ─── WeekView ───────────────────────────────────────────────────
47
+ function WeekView({ date, events, onEventClick }) {
48
+ const weekDays = getWeekDays(date);
49
+ return (_jsxs("div", { className: "overflow-y-auto max-h-[500px]", children: [_jsxs("div", { className: "grid grid-cols-[48px_repeat(7,1fr)] sticky top-0 bg-bg z-10", children: [_jsx("div", {}), weekDays.map((d, i) => (_jsxs("div", { className: "text-center py-2", children: [_jsx("div", { className: "text-[11px] tracking-[-0.11px] text-text-muted", children: DAY_LABELS[i] }), _jsx("div", { className: cn('w-7 h-7 mx-auto flex items-center justify-center rounded-full text-[13px] tracking-[-0.13px]', isToday(d) && 'bg-accent text-text-highlight'), children: d.getDate() })] }, i)))] }), HOURS.map((h) => (_jsxs("div", { className: "grid grid-cols-[48px_repeat(7,1fr)] border-t border-border/30 min-h-[40px]", children: [_jsx("div", { className: "text-[11px] tracking-[-0.11px] text-text-muted pr-2 text-right py-1", children: h === 0 ? '12 AM' : h < 12 ? `${h} AM` : h === 12 ? '12 PM' : `${h - 12} PM` }), weekDays.map((d, di) => {
50
+ const cellEvents = events.filter((e) => {
51
+ const s = new Date(e.start);
52
+ return isSameDay(s, d) && s.getHours() === h;
53
+ });
54
+ return (_jsx("div", { className: "border-l border-border/20 px-0.5 py-0.5", children: cellEvents.map((e) => (_jsx("button", { type: "button", onClick: () => onEventClick?.(e), className: "w-full text-left rounded-[4px] px-1 py-0.5 text-[11px] tracking-[-0.11px] truncate cursor-pointer", style: { backgroundColor: (e.color ?? 'var(--color-accent)') + '20', color: e.color ?? 'var(--color-accent)' }, children: e.title }, e.id))) }, di));
55
+ })] }, h)))] }));
56
+ }
57
+ // ─── DayView ────────────────────────────────────────────────────
58
+ function DayView({ date, events, onEventClick }) {
59
+ const dayEvents = events.filter((e) => isSameDay(new Date(e.start), date));
60
+ const now = new Date();
61
+ const isCurrentDay = isToday(date);
62
+ return (_jsxs("div", { className: "overflow-y-auto max-h-[500px]", children: [_jsx("div", { className: "text-[15px] tracking-[-0.15px] font-normal mb-3", children: date.toLocaleDateString(undefined, { weekday: 'long', month: 'long', day: 'numeric' }) }), HOURS.map((h) => {
63
+ const hourEvents = dayEvents.filter((e) => new Date(e.start).getHours() === h);
64
+ const isNow = isCurrentDay && now.getHours() === h;
65
+ return (_jsxs("div", { className: "flex border-t border-border/30 min-h-[48px] relative", children: [isNow && _jsx("div", { className: "absolute inset-x-0 top-0 border-t-2 border-negative z-10" }), _jsx("div", { className: "w-12 shrink-0 text-[11px] tracking-[-0.11px] text-text-muted text-right pr-2 py-1", children: h === 0 ? '12 AM' : h < 12 ? `${h} AM` : h === 12 ? '12 PM' : `${h - 12} PM` }), _jsx("div", { className: "flex-1 px-1 py-0.5", children: hourEvents.map((e) => (_jsxs("button", { type: "button", onClick: () => onEventClick?.(e), className: "w-full text-left rounded-[6px] px-3 py-2 mb-1 cursor-pointer transition-colors", style: { backgroundColor: (e.color ?? 'var(--color-accent)') + '20' }, children: [_jsx("div", { className: "text-[15px] tracking-[-0.15px]", style: { color: e.color ?? 'var(--color-accent)' }, children: e.title }), _jsxs("div", { className: "text-[11px] tracking-[-0.11px] text-text-dim", children: [formatTime(new Date(e.start)), " \u2013 ", formatTime(new Date(e.end)), e.location && ` · ${e.location}`] })] }, e.id))) })] }, h));
66
+ })] }));
67
+ }
68
+ function Calendar({ events = [], view: controlledView, onViewChange, selectedDate: controlledDate, onDateChange, onEventClick, className, }) {
69
+ const [internalView, setInternalView] = React.useState('month');
70
+ const [internalDate, setInternalDate] = React.useState(new Date());
71
+ const view = controlledView ?? internalView;
72
+ const date = controlledDate ?? internalDate;
73
+ const setView = (v) => { onViewChange ? onViewChange(v) : setInternalView(v); };
74
+ const setDate = (d) => { onDateChange ? onDateChange(d) : setInternalDate(d); };
75
+ const navigate = (dir) => {
76
+ if (view === 'month')
77
+ setDate(new Date(date.getFullYear(), date.getMonth() + dir, 1));
78
+ else if (view === 'week')
79
+ setDate(addDays(date, dir * 7));
80
+ else
81
+ setDate(addDays(date, dir));
82
+ };
83
+ return (_jsxs("div", { className: cn('', className), children: [_jsx(CalendarHeader, { date: date, view: view, onViewChange: setView, onPrev: () => navigate(-1), onNext: () => navigate(1), onToday: () => setDate(new Date()) }), view === 'month' && (_jsx(MonthView, { date: date, events: events, onDateClick: (d) => { setDate(d); setView('day'); }, onEventClick: onEventClick })), view === 'week' && _jsx(WeekView, { date: date, events: events, onEventClick: onEventClick }), view === 'day' && _jsx(DayView, { date: date, events: events, onEventClick: onEventClick })] }));
84
+ }
85
+ export { Calendar, CalendarHeader, MonthView, WeekView, DayView };
86
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../web/components/calendar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import { type VariantProps } from 'class-variance-authority';
3
+ declare const cardVariants: (props?: ({
4
+ variant?: "default" | "elevated" | "interactive" | null | undefined;
5
+ padding?: "none" | "default" | "sm" | "lg" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ interface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {
8
+ }
9
+ declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
10
+ export { Card, cardVariants };
11
+ export type { CardProps };
12
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../web/components/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,YAAY;;;8EAkBhB,CAAC;AAEH,UAAU,SACR,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,OAAO,YAAY,CAAC;CAAG;AAExC,QAAA,MAAM,IAAI,kFAQT,CAAC;AAIF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { cva } from 'class-variance-authority';
4
+ import { cn } from '../utils/cn';
5
+ const cardVariants = cva('rounded-[6px] bg-surface', {
6
+ variants: {
7
+ variant: {
8
+ default: '',
9
+ elevated: 'shadow-lg shadow-black/12',
10
+ interactive: 'transition-colors hover:bg-surface-light cursor-pointer',
11
+ },
12
+ padding: {
13
+ none: 'p-0',
14
+ sm: 'p-3',
15
+ default: 'p-4',
16
+ lg: 'p-6',
17
+ },
18
+ },
19
+ defaultVariants: {
20
+ variant: 'default',
21
+ padding: 'default',
22
+ },
23
+ });
24
+ const Card = React.forwardRef(({ className, variant, padding, ...props }, ref) => (_jsx("div", { ref: ref, className: cn(cardVariants({ variant, padding, className })), ...props })));
25
+ Card.displayName = 'Card';
26
+ export { Card, cardVariants };
27
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../../web/components/card.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,YAAY,GAAG,GAAG,CAAC,0BAA0B,EAAE;IACnD,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,2BAA2B;YACrC,WAAW,EAAE,yDAAyD;SACvE;QACD,OAAO,EAAE;YACP,IAAI,EAAE,KAAK;YACX,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,KAAK;SACV;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,SAAS;KACnB;CACF,CAAC,CAAC;AAMH,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAC3B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClD,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,KACxD,KAAK,GACT,CACH,CACF,CAAC;AAEF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ interface CategoryFilterProps {
2
+ categories: string[];
3
+ selected: string;
4
+ onSelect: (category: string) => void;
5
+ className?: string;
6
+ }
7
+ declare function CategoryFilter({ categories, selected, onSelect, className }: CategoryFilterProps): import("react/jsx-runtime").JSX.Element;
8
+ export { CategoryFilter };
9
+ export type { CategoryFilterProps };
10
+ //# sourceMappingURL=category-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category-filter.d.ts","sourceRoot":"","sources":["../../../web/components/category-filter.tsx"],"names":[],"mappings":"AAEA,UAAU,mBAAmB;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,mBAAmB,2CAoBzF;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,YAAY,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from '../utils/cn';
3
+ function CategoryFilter({ categories, selected, onSelect, className }) {
4
+ return (_jsx("div", { className: cn('flex items-center gap-2 overflow-x-auto pb-2 scrollbar-hide', className), children: categories.map((cat) => (_jsx("button", { type: "button", onClick: () => onSelect(cat), className: cn('shrink-0 rounded-[6px] px-4 py-2 text-[15px] tracking-[-0.15px] font-normal transition-colors cursor-pointer', selected === cat
5
+ ? 'bg-accent text-text-highlight'
6
+ : 'bg-surface-lighter text-text-dim hover:text-text'), children: cat }, cat))) }));
7
+ }
8
+ export { CategoryFilter };
9
+ //# sourceMappingURL=category-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category-filter.js","sourceRoot":"","sources":["../../../web/components/category-filter.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AASjC,SAAS,cAAc,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAuB;IACxF,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,6DAA6D,EAAE,SAAS,CAAC,YACzF,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACvB,iBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC5B,SAAS,EAAE,EAAE,CACX,8GAA8G,EAC9G,QAAQ,KAAK,GAAG;gBACd,CAAC,CAAC,+BAA+B;gBACjC,CAAC,CAAC,kDAAkD,CACvD,YAEA,GAAG,IAVC,GAAG,CAWD,CACV,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,65 @@
1
+ interface SparklineProps {
2
+ data: number[];
3
+ width?: number;
4
+ height?: number;
5
+ color?: string;
6
+ className?: string;
7
+ }
8
+ declare function Sparkline({ data, width, height, color, className }: SparklineProps): import("react/jsx-runtime").JSX.Element | null;
9
+ interface LineChartPoint {
10
+ x: number;
11
+ y: number;
12
+ label?: string;
13
+ }
14
+ interface LineChartProps {
15
+ data: LineChartPoint[];
16
+ width?: number;
17
+ height?: number;
18
+ color?: string;
19
+ showGrid?: boolean;
20
+ showLabels?: boolean;
21
+ showArea?: boolean;
22
+ animated?: boolean;
23
+ className?: string;
24
+ }
25
+ declare function LineChart({ data, width, height, color, showGrid, showLabels, showArea, animated, className, }: LineChartProps): import("react/jsx-runtime").JSX.Element | null;
26
+ interface BarChartItem {
27
+ label: string;
28
+ value: number;
29
+ color?: string;
30
+ }
31
+ interface BarChartProps {
32
+ data: BarChartItem[];
33
+ width?: number;
34
+ height?: number;
35
+ color?: string;
36
+ horizontal?: boolean;
37
+ showLabels?: boolean;
38
+ className?: string;
39
+ }
40
+ declare function BarChart({ data, width, height, color, horizontal, showLabels, className, }: BarChartProps): import("react/jsx-runtime").JSX.Element | null;
41
+ interface PieChartItem {
42
+ label: string;
43
+ value: number;
44
+ color?: string;
45
+ }
46
+ interface PieChartProps {
47
+ data: PieChartItem[];
48
+ size?: number;
49
+ donut?: boolean;
50
+ centerLabel?: string;
51
+ className?: string;
52
+ }
53
+ declare function PieChart({ data, size, donut, centerLabel, className }: PieChartProps): import("react/jsx-runtime").JSX.Element;
54
+ interface StatCardProps {
55
+ label: string;
56
+ value: string | number;
57
+ change?: string;
58
+ trend?: 'up' | 'down' | 'neutral';
59
+ sparklineData?: number[];
60
+ className?: string;
61
+ }
62
+ declare function StatCard({ label, value, change, trend, sparklineData, className }: StatCardProps): import("react/jsx-runtime").JSX.Element;
63
+ export { Sparkline, LineChart, BarChart, PieChart, StatCard };
64
+ export type { SparklineProps, LineChartProps, LineChartPoint, BarChartProps, BarChartItem, PieChartProps, PieChartItem, StatCardProps };
65
+ //# sourceMappingURL=chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../web/components/chart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { cn } from '../utils/cn';
4
+ import { ResponsiveContainer, LineChart as RLineChart, Line, BarChart as RBarChart, Bar, PieChart as RPieChart, Pie, Cell, Tooltip, XAxis, YAxis, CartesianGrid, Area, AreaChart, } from 'recharts';
5
+ // ─── Colors ─────────────────────────────────────────────────────
6
+ const COLORS = ['#232323', '#4BB956', '#FF453A', '#FEF991', '#7B7B7B', '#E4E4E4'];
7
+ // ─── Custom Tooltip ─────────────────────────────────────────────
8
+ const CustomTooltip = ({ active, payload, label }) => {
9
+ if (!active || !payload?.length)
10
+ return null;
11
+ return (_jsxs("div", { className: "bg-surface rounded-[6px] shadow-[0_2px_8px_rgba(0,0,0,0.12)] px-3 py-2 text-[13px] tracking-[-0.13px]", children: [label != null && _jsx("div", { className: "text-text-dim mb-1", children: label }), payload.map((entry, i) => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-2 h-2 rounded-full shrink-0", style: { backgroundColor: entry.color } }), _jsx("span", { className: "text-text tabular-nums", children: entry.value })] }, i)))] }));
12
+ };
13
+ function Sparkline({ data, width = 80, height = 24, color, className }) {
14
+ if (data.length < 2)
15
+ return null;
16
+ const chartData = data.map((value, index) => ({ index, value }));
17
+ return (_jsx("div", { className: className, style: { width, height }, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsx(RLineChart, { data: chartData, margin: { top: 2, right: 2, bottom: 2, left: 2 }, children: _jsx(Line, { type: "monotone", dataKey: "value", stroke: color ?? 'var(--color-accent)', strokeWidth: 1.5, dot: false, isAnimationActive: false }) }) }) }));
18
+ }
19
+ function LineChart({ data, width = 300, height = 200, color, showGrid = true, showLabels = true, showArea = false, animated = false, className, }) {
20
+ if (data.length < 2)
21
+ return null;
22
+ const accentColor = color ?? 'var(--color-accent)';
23
+ const gradientId = React.useId();
24
+ const chartData = data.map((d) => ({
25
+ x: d.x,
26
+ y: d.y,
27
+ label: d.label ?? d.x,
28
+ }));
29
+ if (showArea) {
30
+ return (_jsx("div", { className: cn('w-full', className), style: { width, height }, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(AreaChart, { data: chartData, margin: { top: 10, right: 10, bottom: showLabels ? 0 : 10, left: showLabels ? 0 : 10 }, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: accentColor, stopOpacity: 0.2 }), _jsx("stop", { offset: "100%", stopColor: accentColor, stopOpacity: 0 })] }) }), showGrid && (_jsx(CartesianGrid, { strokeDasharray: "4 4", stroke: "var(--color-border)", strokeWidth: 0.5, vertical: false })), showLabels && (_jsx(XAxis, { dataKey: "label", tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false })), showLabels && (_jsx(YAxis, { tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false, width: 36 })), !showLabels && _jsx(XAxis, { hide: true }), !showLabels && _jsx(YAxis, { hide: true }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) }), _jsx(Area, { type: "monotone", dataKey: "y", stroke: accentColor, strokeWidth: 2, fill: `url(#${gradientId})`, dot: { r: 3, fill: accentColor, strokeWidth: 0 }, isAnimationActive: animated })] }) }) }));
31
+ }
32
+ return (_jsx("div", { className: cn('w-full', className), style: { width, height }, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RLineChart, { data: chartData, margin: { top: 10, right: 10, bottom: showLabels ? 0 : 10, left: showLabels ? 0 : 10 }, children: [showGrid && (_jsx(CartesianGrid, { strokeDasharray: "4 4", stroke: "var(--color-border)", strokeWidth: 0.5, vertical: false })), showLabels && (_jsx(XAxis, { dataKey: "label", tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false })), showLabels && (_jsx(YAxis, { tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false, width: 36 })), !showLabels && _jsx(XAxis, { hide: true }), !showLabels && _jsx(YAxis, { hide: true }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) }), _jsx(Line, { type: "monotone", dataKey: "y", stroke: accentColor, strokeWidth: 2, dot: { r: 3, fill: accentColor, strokeWidth: 0 }, isAnimationActive: animated })] }) }) }));
33
+ }
34
+ function BarChart({ data, width = 300, height = 200, color, horizontal = false, showLabels = true, className, }) {
35
+ if (data.length === 0)
36
+ return null;
37
+ const defaultColor = color ?? 'var(--color-accent)';
38
+ const hasCustomColors = data.some((d) => d.color);
39
+ const chartData = data.map((d) => ({
40
+ label: d.label,
41
+ value: d.value,
42
+ fill: d.color ?? defaultColor,
43
+ }));
44
+ if (horizontal) {
45
+ return (_jsx("div", { className: cn('w-full', className), style: { width, height }, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RBarChart, { data: chartData, layout: "vertical", margin: { top: 10, right: 10, bottom: 10, left: showLabels ? 40 : 10 }, children: [showLabels && (_jsx(YAxis, { dataKey: "label", type: "category", tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false, width: 36 })), !showLabels && _jsx(YAxis, { type: "category", hide: true }), showLabels && (_jsx(XAxis, { type: "number", tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false })), !showLabels && _jsx(XAxis, { type: "number", hide: true }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) }), _jsx(Bar, { dataKey: "value", radius: [0, 4, 4, 0], isAnimationActive: false, children: hasCustomColors && chartData.map((entry, i) => (_jsx(Cell, { fill: entry.fill }, i))) })] }) }) }));
46
+ }
47
+ return (_jsx("div", { className: cn('w-full', className), style: { width, height }, children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RBarChart, { data: chartData, margin: { top: 10, right: 10, bottom: showLabels ? 0 : 10, left: showLabels ? 0 : 10 }, children: [showLabels && (_jsx(XAxis, { dataKey: "label", tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false })), !showLabels && _jsx(XAxis, { hide: true }), showLabels && (_jsx(YAxis, { tick: { fontSize: 11, fill: 'var(--color-text-dim)' }, axisLine: false, tickLine: false, width: 36 })), !showLabels && _jsx(YAxis, { hide: true }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) }), _jsx(Bar, { dataKey: "value", fill: defaultColor, radius: [4, 4, 0, 0], isAnimationActive: false, children: hasCustomColors && chartData.map((entry, i) => (_jsx(Cell, { fill: entry.fill }, i))) })] }) }) }));
48
+ }
49
+ function PieChart({ data, size = 160, donut = false, centerLabel, className }) {
50
+ const total = data.reduce((s, d) => s + d.value, 0) || 1;
51
+ const chartData = data.map((d, i) => ({
52
+ name: d.label,
53
+ value: d.value,
54
+ fill: d.color ?? COLORS[i % COLORS.length],
55
+ }));
56
+ return (_jsxs("div", { className: cn('flex flex-col items-center gap-4', className), children: [_jsxs("div", { className: "relative", style: { width: size, height: size, maxWidth: '100%' }, children: [_jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsxs(RPieChart, { children: [_jsx(Pie, { data: chartData, cx: "50%", cy: "50%", innerRadius: donut ? '55%' : 0, outerRadius: "90%", paddingAngle: 0, dataKey: "value", strokeWidth: 0, isAnimationActive: false, children: chartData.map((entry, i) => (_jsx(Cell, { fill: entry.fill }, i))) }), _jsx(Tooltip, { content: _jsx(CustomTooltip, {}) })] }) }), donut && centerLabel && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: _jsx("span", { className: "text-[17px] tracking-[-0.17px] font-normal", children: centerLabel }) }))] }), _jsx("div", { className: "flex flex-col gap-1.5 w-full max-w-xs", children: data.map((item, i) => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-2 h-2 rounded-full shrink-0", style: { backgroundColor: item.color ?? COLORS[i % COLORS.length] } }), _jsx("span", { className: "text-[13px] tracking-[-0.13px] text-text", children: item.label }), _jsx("span", { className: "text-[11px] tracking-[-0.11px] text-text-dim ml-auto tabular-nums", children: item.value })] }, i))) })] }));
57
+ }
58
+ function StatCard({ label, value, change, trend, sparklineData, className }) {
59
+ return (_jsxs("div", { className: cn('bg-surface rounded-[6px] p-4', className), children: [_jsx("div", { className: "text-[13px] tracking-[-0.13px] text-text-dim mb-1", children: label }), _jsxs("div", { className: "flex items-end justify-between gap-2", children: [_jsxs("div", { children: [_jsx("div", { className: "text-[24px] tracking-[-0.72px] font-normal tabular-nums", children: value }), change && (_jsxs("span", { className: cn('text-[13px] tracking-[-0.13px]', trend === 'up' && 'text-positive', trend === 'down' && 'text-negative', trend === 'neutral' && 'text-text-dim'), children: [trend === 'up' && '↑', trend === 'down' && '↓', " ", change] }))] }), sparklineData && sparklineData.length > 1 && (_jsx(Sparkline, { data: sparklineData, width: 64, height: 24, color: trend === 'up' ? 'var(--color-positive)' : trend === 'down' ? 'var(--color-negative)' : undefined }))] })] }));
60
+ }
61
+ export { Sparkline, LineChart, BarChart, PieChart, StatCard };
62
+ //# sourceMappingURL=chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../../web/components/chart.tsx"],"names":[],"mappings":"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"}