@godxjp/ui 6.0.0 → 6.0.2

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 (434) hide show
  1. package/dist/app/index.d.ts +140 -0
  2. package/dist/app/index.js +38 -0
  3. package/dist/app.prop-IobwLwaM.d.ts +90 -0
  4. package/dist/checkbox-NkFkqsQ8.d.ts +13 -0
  5. package/dist/chunk-2XW7J3EI.js +226 -0
  6. package/dist/chunk-3F2AKYRD.js +416 -0
  7. package/dist/chunk-3KPEZ5CF.js +37 -0
  8. package/dist/chunk-3UGU5TYP.js +89 -0
  9. package/{src/props/registry.ts → dist/chunk-6RA3KSVK.js} +118 -133
  10. package/dist/chunk-7NZFVD24.js +122 -0
  11. package/dist/chunk-7PWBC4BY.js +25 -0
  12. package/dist/chunk-7S7MYFXE.js +61 -0
  13. package/dist/chunk-7WRZG2IG.js +71 -0
  14. package/dist/chunk-B775Y6BE.js +1 -0
  15. package/dist/chunk-BHV2FUOA.js +111 -0
  16. package/dist/chunk-BI3HERR7.js +70 -0
  17. package/dist/chunk-BPSKQUL2.js +68 -0
  18. package/dist/chunk-CDWPQ5RP.js +187 -0
  19. package/dist/chunk-CP2LET6N.js +244 -0
  20. package/dist/chunk-CQBADMFG.js +20 -0
  21. package/dist/chunk-CRERCLIZ.js +33 -0
  22. package/dist/chunk-DU6ZYZRP.js +238 -0
  23. package/dist/chunk-DY5C44UP.js +55 -0
  24. package/dist/chunk-E4HJNQ62.js +117 -0
  25. package/dist/chunk-E76QIYSY.js +93 -0
  26. package/dist/chunk-F7PG4OEV.js +37 -0
  27. package/dist/chunk-GDSVW62T.js +171 -0
  28. package/dist/chunk-H2FHJOLU.js +178 -0
  29. package/dist/chunk-HJEBRCXL.js +55 -0
  30. package/dist/chunk-ICM6XBST.js +16 -0
  31. package/{src/components/data-entry/calendar.tsx → dist/chunk-IK7I3ABN.js} +33 -35
  32. package/dist/chunk-L6J44O74.js +144 -0
  33. package/dist/chunk-LDSLS6HE.js +1 -0
  34. package/dist/chunk-LVNUHUEZ.js +191 -0
  35. package/dist/chunk-M64MVRLS.js +92 -0
  36. package/dist/chunk-NGQW3KEM.js +402 -0
  37. package/dist/chunk-NZ4FOC5N.js +559 -0
  38. package/dist/chunk-PIIRNAXA.js +26 -0
  39. package/dist/chunk-S66TJXJU.js +33 -0
  40. package/dist/chunk-SMLKNECP.js +133 -0
  41. package/dist/chunk-TAHBM3F2.js +66 -0
  42. package/dist/chunk-TO33OY4L.js +150 -0
  43. package/dist/chunk-TO7URV7U.js +51 -0
  44. package/dist/chunk-TOO5AEKL.js +81 -0
  45. package/dist/chunk-U3GHAOIJ.js +299 -0
  46. package/dist/chunk-U7N2A7A3.js +9 -0
  47. package/dist/chunk-UX634MYF.js +123 -0
  48. package/dist/chunk-V6UWJKZF.js +28 -0
  49. package/{src/components/data-entry/input.tsx → dist/chunk-VOHTRR5X.js} +18 -16
  50. package/dist/chunk-WRFKVUPW.js +332 -0
  51. package/dist/chunk-WXW43RK5.js +24 -0
  52. package/{src/components/navigation/tabs.tsx → dist/chunk-XG7XDYIM.js} +46 -53
  53. package/dist/chunk-YFCQKO3B.js +842 -0
  54. package/dist/chunk-ZDWXGWLY.js +73 -0
  55. package/dist/chunk-ZLK5SPT6.js +11 -0
  56. package/dist/chunk-ZS6DTAM2.js +31 -0
  57. package/dist/chunk-ZT5UEUBO.js +1 -0
  58. package/dist/components/admin/index.d.ts +80 -0
  59. package/dist/components/admin/index.js +38 -0
  60. package/dist/components/data-display/badge.d.ts +12 -0
  61. package/dist/components/data-display/badge.js +3 -0
  62. package/dist/components/data-display/card.d.ts +87 -0
  63. package/dist/components/data-display/card.js +2 -0
  64. package/dist/components/data-display/index.d.ts +72 -0
  65. package/dist/components/data-display/index.js +89 -0
  66. package/dist/components/data-display/popover.d.ts +13 -0
  67. package/dist/components/data-display/popover.js +2 -0
  68. package/dist/components/data-display/scroll-area.d.ts +7 -0
  69. package/dist/components/data-display/scroll-area.js +2 -0
  70. package/dist/components/data-display/table.d.ts +10 -0
  71. package/dist/components/data-display/table.js +3 -0
  72. package/dist/components/data-entry/autocomplete.d.ts +16 -0
  73. package/dist/components/data-entry/autocomplete.js +8 -0
  74. package/dist/components/data-entry/calendar.d.ts +16 -0
  75. package/dist/components/data-entry/calendar.js +4 -0
  76. package/dist/components/data-entry/cascader.d.ts +32 -0
  77. package/dist/components/data-entry/cascader.js +13 -0
  78. package/dist/components/data-entry/checkbox.d.ts +13 -0
  79. package/dist/components/data-entry/checkbox.js +4 -0
  80. package/dist/components/data-entry/color-picker.d.ts +16 -0
  81. package/dist/components/data-entry/color-picker.js +6 -0
  82. package/dist/components/data-entry/command.d.ts +69 -0
  83. package/dist/components/data-entry/command.js +3 -0
  84. package/dist/components/data-entry/date-picker.d.ts +16 -0
  85. package/dist/components/data-entry/date-picker.js +8 -0
  86. package/dist/components/data-entry/date-range-picker.d.ts +16 -0
  87. package/dist/components/data-entry/date-range-picker.js +8 -0
  88. package/dist/components/data-entry/index.d.ts +53 -0
  89. package/dist/components/data-entry/index.js +152 -0
  90. package/dist/components/data-entry/input.d.ts +6 -0
  91. package/dist/components/data-entry/input.js +2 -0
  92. package/dist/components/data-entry/label.d.ts +8 -0
  93. package/dist/components/data-entry/label.js +2 -0
  94. package/dist/components/data-entry/radio.d.ts +24 -0
  95. package/dist/components/data-entry/radio.js +4 -0
  96. package/dist/components/data-entry/select.d.ts +18 -0
  97. package/dist/components/data-entry/select.js +3 -0
  98. package/dist/components/data-entry/slider.d.ts +16 -0
  99. package/dist/components/data-entry/slider.js +2 -0
  100. package/dist/components/data-entry/switch.d.ts +17 -0
  101. package/dist/components/data-entry/switch.js +2 -0
  102. package/dist/components/data-entry/textarea.d.ts +6 -0
  103. package/dist/components/data-entry/textarea.js +3 -0
  104. package/dist/components/data-entry/time-picker.d.ts +16 -0
  105. package/dist/components/data-entry/time-picker.js +7 -0
  106. package/dist/components/data-entry/transfer.d.ts +17 -0
  107. package/dist/components/data-entry/transfer.js +11 -0
  108. package/dist/components/data-entry/tree-select.d.ts +26 -0
  109. package/dist/components/data-entry/tree-select.js +13 -0
  110. package/dist/components/data-entry/upload.d.ts +42 -0
  111. package/dist/components/data-entry/upload.js +11 -0
  112. package/dist/components/feedback/alert.d.ts +60 -0
  113. package/dist/components/feedback/alert.js +7 -0
  114. package/dist/components/feedback/dialog.d.ts +64 -0
  115. package/dist/components/feedback/dialog.js +7 -0
  116. package/dist/components/feedback/index.d.ts +16 -0
  117. package/dist/components/feedback/index.js +14 -0
  118. package/dist/components/feedback/sheet.d.ts +24 -0
  119. package/dist/components/feedback/sheet.js +2 -0
  120. package/dist/components/feedback/sonner.d.ts +6 -0
  121. package/dist/components/feedback/sonner.js +1 -0
  122. package/dist/components/general/button.d.ts +20 -0
  123. package/dist/components/general/button.js +2 -0
  124. package/dist/components/general/index.d.ts +6 -0
  125. package/dist/components/general/index.js +2 -0
  126. package/dist/components/layout/index.d.ts +71 -0
  127. package/dist/components/layout/index.js +5 -0
  128. package/dist/components/navigation/dropdown-menu.d.ts +28 -0
  129. package/dist/components/navigation/dropdown-menu.js +2 -0
  130. package/dist/components/navigation/index.d.ts +32 -0
  131. package/dist/components/navigation/index.js +12 -0
  132. package/dist/components/navigation/pagination.d.ts +11 -0
  133. package/dist/components/navigation/pagination.js +7 -0
  134. package/dist/components/navigation/steps.d.ts +12 -0
  135. package/dist/components/navigation/steps.js +3 -0
  136. package/dist/components/navigation/tabs-items.d.ts +12 -0
  137. package/dist/components/navigation/tabs-items.js +3 -0
  138. package/dist/components/navigation/tabs.d.ts +12 -0
  139. package/dist/components/navigation/tabs.js +2 -0
  140. package/dist/components/query/index.d.ts +43 -0
  141. package/dist/components/query/index.js +8 -0
  142. package/dist/components/ui/index.d.ts +57 -0
  143. package/dist/components/ui/index.js +37 -0
  144. package/{src/props/vocabulary/content.prop.ts → dist/content.prop-D1Dd3TAc.d.ts} +16 -20
  145. package/dist/data-display.prop-DNTAzmDy.d.ts +58 -0
  146. package/dist/data-entry.prop-BEGA1lTq.d.ts +323 -0
  147. package/dist/data-table-D1u_rKLK.d.ts +83 -0
  148. package/dist/data.prop-BVvfKC_g.d.ts +41 -0
  149. package/dist/feedback.prop-BmxUlpAW.d.ts +64 -0
  150. package/dist/filter-bar-B7OGFO9S.d.ts +10 -0
  151. package/dist/form/index.d.ts +21 -0
  152. package/dist/form/index.js +4 -0
  153. package/dist/form.prop-BHgpuFFm.d.ts +41 -0
  154. package/dist/format-date-ByyZoqI5.d.ts +51 -0
  155. package/dist/general.prop-D7brMPNL.d.ts +16 -0
  156. package/dist/i18n/index.d.ts +217 -0
  157. package/dist/i18n/index.js +2 -0
  158. package/dist/index.d.ts +53 -0
  159. package/dist/index.js +39 -0
  160. package/dist/inline-C5u6ptJV.d.ts +10 -0
  161. package/dist/interaction.prop-Cdn7wOtq.d.ts +25 -0
  162. package/{src/props/vocabulary/layout.prop.ts → dist/layout.prop-4TCNvyQZ.d.ts} +9 -14
  163. package/dist/layout.prop-C795F0qg.d.ts +112 -0
  164. package/dist/lib/datetime/index.d.ts +31 -0
  165. package/dist/lib/datetime/index.js +1 -0
  166. package/dist/lib/utils.d.ts +5 -0
  167. package/dist/lib/utils.js +1 -0
  168. package/dist/navigation.prop-DpZqcXey.d.ts +78 -0
  169. package/dist/navigation.prop-DxBiClEH.d.ts +20 -0
  170. package/dist/props/components/index.d.ts +27 -0
  171. package/dist/props/components/index.js +1 -0
  172. package/dist/props/index.d.ts +28 -0
  173. package/dist/props/index.js +3 -0
  174. package/dist/props/registry.d.ts +649 -0
  175. package/dist/props/registry.js +1 -0
  176. package/dist/props/vocabulary/index.d.ts +7 -0
  177. package/dist/props/vocabulary/index.js +1 -0
  178. package/dist/query.prop-hIPrk2zI.d.ts +71 -0
  179. package/dist/search-input-uP01rY1L.d.ts +22 -0
  180. package/dist/shared.prop-BNRJc9K0.d.ts +45 -0
  181. package/{src → dist}/styles/control.css +1 -1
  182. package/dist/types-mvzYGrma.d.ts +37 -0
  183. package/dist/use-toast-Dol5bdY3.d.ts +34 -0
  184. package/package.json +234 -68
  185. package/src/app/__tests__/app-provider.test.tsx +0 -232
  186. package/src/app/__tests__/date-format-labels.test.ts +0 -36
  187. package/src/app/__tests__/date-formats.test.ts +0 -44
  188. package/src/app/__tests__/timezones.test.ts +0 -65
  189. package/src/app/app-provider.tsx +0 -227
  190. package/src/app/date-format-labels.ts +0 -21
  191. package/src/app/date-formats.ts +0 -30
  192. package/src/app/index.ts +0 -40
  193. package/src/app/locales.ts +0 -32
  194. package/src/app/request-headers.ts +0 -31
  195. package/src/app/storage.ts +0 -44
  196. package/src/app/time-format-labels.ts +0 -19
  197. package/src/app/time-formats.ts +0 -15
  198. package/src/app/timezones.ts +0 -208
  199. package/src/app/types.ts +0 -39
  200. package/src/app/use-formatting.ts +0 -47
  201. package/src/components/__tests__/accessibility-primitives.test.tsx +0 -65
  202. package/src/components/__tests__/docs-parity.test.ts +0 -41
  203. package/src/components/__tests__/shadcn-release-guardrails.test.ts +0 -71
  204. package/src/components/__tests__/theme-axes-integration.test.tsx +0 -242
  205. package/src/components/admin/index.ts +0 -76
  206. package/src/components/data-display/__tests__/card-table.test.tsx +0 -328
  207. package/src/components/data-display/__tests__/data-display.test.tsx +0 -73
  208. package/src/components/data-display/__tests__/data-table.test.tsx +0 -84
  209. package/src/components/data-display/__tests__/popover.test.tsx +0 -92
  210. package/src/components/data-display/__tests__/scroll-area-collapsible.test.tsx +0 -66
  211. package/src/components/data-display/badge.tsx +0 -27
  212. package/src/components/data-display/card.tsx +0 -194
  213. package/src/components/data-display/code-badge.tsx +0 -28
  214. package/src/components/data-display/collapsible.tsx +0 -5
  215. package/src/components/data-display/data-table.tsx +0 -476
  216. package/src/components/data-display/empty-state.tsx +0 -22
  217. package/src/components/data-display/index.ts +0 -41
  218. package/src/components/data-display/key-value-grid.tsx +0 -46
  219. package/src/components/data-display/popover.tsx +0 -62
  220. package/src/components/data-display/progress-meter.tsx +0 -20
  221. package/src/components/data-display/scan-panel.tsx +0 -16
  222. package/src/components/data-display/scroll-area.tsx +0 -42
  223. package/src/components/data-display/status-badge.tsx +0 -83
  224. package/src/components/data-display/table.tsx +0 -59
  225. package/src/components/data-display/timeline.tsx +0 -42
  226. package/src/components/data-display/tree-list.tsx +0 -42
  227. package/src/components/data-entry/__fixtures__/tree-options.ts +0 -80
  228. package/src/components/data-entry/__tests__/cascader-tree-transfer.test.tsx +0 -417
  229. package/src/components/data-entry/__tests__/checkbox-group.test.tsx +0 -40
  230. package/src/components/data-entry/__tests__/checkbox.test.tsx +0 -20
  231. package/src/components/data-entry/__tests__/date-autocomplete.test.tsx +0 -94
  232. package/src/components/data-entry/__tests__/form-field.test.tsx +0 -49
  233. package/src/components/data-entry/__tests__/input-textarea.test.tsx +0 -38
  234. package/src/components/data-entry/__tests__/label-select.test.tsx +0 -62
  235. package/src/components/data-entry/__tests__/pickers.test.tsx +0 -74
  236. package/src/components/data-entry/__tests__/radio.test.tsx +0 -46
  237. package/src/components/data-entry/__tests__/search-input.test.tsx +0 -32
  238. package/src/components/data-entry/__tests__/switch-field.test.tsx +0 -52
  239. package/src/components/data-entry/__tests__/upload.test.tsx +0 -125
  240. package/src/components/data-entry/autocomplete.tsx +0 -91
  241. package/src/components/data-entry/cascader.tsx +0 -305
  242. package/src/components/data-entry/checkbox-group.tsx +0 -90
  243. package/src/components/data-entry/checkbox.tsx +0 -30
  244. package/src/components/data-entry/choice-field.tsx +0 -27
  245. package/src/components/data-entry/choice-option.ts +0 -20
  246. package/src/components/data-entry/color-picker.tsx +0 -75
  247. package/src/components/data-entry/command.tsx +0 -56
  248. package/src/components/data-entry/country-select.tsx +0 -88
  249. package/src/components/data-entry/date-picker.tsx +0 -69
  250. package/src/components/data-entry/date-range-picker.tsx +0 -75
  251. package/src/components/data-entry/form-field.tsx +0 -59
  252. package/src/components/data-entry/index.ts +0 -62
  253. package/src/components/data-entry/label.tsx +0 -25
  254. package/src/components/data-entry/radio.tsx +0 -109
  255. package/src/components/data-entry/search-input.tsx +0 -103
  256. package/src/components/data-entry/select.tsx +0 -149
  257. package/src/components/data-entry/slider.tsx +0 -38
  258. package/src/components/data-entry/switch-field.tsx +0 -91
  259. package/src/components/data-entry/switch.tsx +0 -24
  260. package/src/components/data-entry/textarea.tsx +0 -12
  261. package/src/components/data-entry/time-picker.tsx +0 -214
  262. package/src/components/data-entry/transfer.tsx +0 -231
  263. package/src/components/data-entry/tree-select-strategy.ts +0 -6
  264. package/src/components/data-entry/tree-select.tsx +0 -279
  265. package/src/components/data-entry/tree-utils.ts +0 -221
  266. package/src/components/data-entry/upload-crop-dialog.tsx +0 -109
  267. package/src/components/data-entry/upload-types.ts +0 -86
  268. package/src/components/data-entry/upload.tsx +0 -498
  269. package/src/components/data-entry/use-upload-draft.ts +0 -93
  270. package/src/components/feedback/__tests__/alert.test.tsx +0 -127
  271. package/src/components/feedback/__tests__/dialog.test.tsx +0 -290
  272. package/src/components/feedback/__tests__/sheet.test.tsx +0 -94
  273. package/src/components/feedback/__tests__/skeleton.test.tsx +0 -25
  274. package/src/components/feedback/__tests__/toast.test.tsx +0 -52
  275. package/src/components/feedback/alert.tsx +0 -167
  276. package/src/components/feedback/dialog.tsx +0 -325
  277. package/src/components/feedback/index.ts +0 -53
  278. package/src/components/feedback/sheet.tsx +0 -130
  279. package/src/components/feedback/skeleton.tsx +0 -95
  280. package/src/components/feedback/sonner.tsx +0 -54
  281. package/src/components/feedback/toaster.tsx +0 -1
  282. package/src/components/feedback/use-toast.ts +0 -62
  283. package/src/components/general/__tests__/button.test.tsx +0 -71
  284. package/src/components/general/button.tsx +0 -61
  285. package/src/components/general/index.ts +0 -2
  286. package/src/components/layout/__tests__/page-container.test.tsx +0 -69
  287. package/src/components/layout/__tests__/page-inset.test.tsx +0 -14
  288. package/src/components/layout/__tests__/stack-inline.test.tsx +0 -39
  289. package/src/components/layout/app-shell.tsx +0 -42
  290. package/src/components/layout/breadcrumb.tsx +0 -35
  291. package/src/components/layout/index.ts +0 -31
  292. package/src/components/layout/inline.tsx +0 -13
  293. package/src/components/layout/menu.tsx +0 -34
  294. package/src/components/layout/mobile-frame.tsx +0 -57
  295. package/src/components/layout/page-container.tsx +0 -81
  296. package/src/components/layout/page-inset.tsx +0 -16
  297. package/src/components/layout/responsive-grid.tsx +0 -14
  298. package/src/components/layout/shell-app.tsx +0 -30
  299. package/src/components/layout/sidebar.tsx +0 -98
  300. package/src/components/layout/split-pane.tsx +0 -16
  301. package/src/components/layout/stack.tsx +0 -13
  302. package/src/components/layout/topbar.tsx +0 -108
  303. package/src/components/navigation/__tests__/app-pickers.test.tsx +0 -118
  304. package/src/components/navigation/__tests__/dropdown-menu.test.tsx +0 -104
  305. package/src/components/navigation/__tests__/navigation.test.tsx +0 -61
  306. package/src/components/navigation/__tests__/pagination-steps-tabs.test.tsx +0 -76
  307. package/src/components/navigation/date-format-picker.tsx +0 -55
  308. package/src/components/navigation/dropdown-menu.tsx +0 -190
  309. package/src/components/navigation/filter-bar.tsx +0 -38
  310. package/src/components/navigation/index.ts +0 -28
  311. package/src/components/navigation/locale-picker.tsx +0 -49
  312. package/src/components/navigation/page-header.tsx +0 -50
  313. package/src/components/navigation/pagination-utils.ts +0 -35
  314. package/src/components/navigation/pagination.tsx +0 -168
  315. package/src/components/navigation/steps.tsx +0 -163
  316. package/src/components/navigation/tabs-items.tsx +0 -69
  317. package/src/components/navigation/time-format-picker.tsx +0 -55
  318. package/src/components/navigation/timezone-picker.tsx +0 -63
  319. package/src/components/query/__tests__/data-state.test.tsx +0 -214
  320. package/src/components/query/__tests__/infinite-prefetch.test.tsx +0 -105
  321. package/src/components/query/__tests__/query-helpers.test.tsx +0 -61
  322. package/src/components/query/data-state.tsx +0 -58
  323. package/src/components/query/index.ts +0 -10
  324. package/src/components/query/infinite-query-state.tsx +0 -99
  325. package/src/components/query/mutation-feedback.tsx +0 -31
  326. package/src/components/query/prefetch-link.tsx +0 -45
  327. package/src/components/query/query-refetch-button.tsx +0 -41
  328. package/src/components/ui/alert-dialog.tsx +0 -1
  329. package/src/components/ui/alert.tsx +0 -1
  330. package/src/components/ui/autocomplete.tsx +0 -1
  331. package/src/components/ui/badge.tsx +0 -1
  332. package/src/components/ui/button.tsx +0 -1
  333. package/src/components/ui/calendar.tsx +0 -1
  334. package/src/components/ui/card.tsx +0 -1
  335. package/src/components/ui/checkbox.tsx +0 -1
  336. package/src/components/ui/color-picker.tsx +0 -1
  337. package/src/components/ui/command.tsx +0 -1
  338. package/src/components/ui/date-picker.tsx +0 -1
  339. package/src/components/ui/date-range-picker.tsx +0 -1
  340. package/src/components/ui/dialog.tsx +0 -1
  341. package/src/components/ui/dropdown-menu.tsx +0 -1
  342. package/src/components/ui/index.tsx +0 -31
  343. package/src/components/ui/input.tsx +0 -1
  344. package/src/components/ui/label.tsx +0 -1
  345. package/src/components/ui/pagination.tsx +0 -1
  346. package/src/components/ui/popover.tsx +0 -1
  347. package/src/components/ui/radio.tsx +0 -1
  348. package/src/components/ui/scroll-area.tsx +0 -1
  349. package/src/components/ui/select.tsx +0 -1
  350. package/src/components/ui/sheet.tsx +0 -1
  351. package/src/components/ui/slider.tsx +0 -1
  352. package/src/components/ui/sonner.tsx +0 -1
  353. package/src/components/ui/switch.tsx +0 -1
  354. package/src/components/ui/table.tsx +0 -1
  355. package/src/components/ui/tabs-items.tsx +0 -1
  356. package/src/components/ui/tabs.tsx +0 -1
  357. package/src/components/ui/textarea.tsx +0 -1
  358. package/src/components/ui/time-picker.tsx +0 -1
  359. package/src/components/ui/upload.tsx +0 -1
  360. package/src/form/__tests__/use-zod-form.test.tsx +0 -97
  361. package/src/form/form-field-control.tsx +0 -44
  362. package/src/form/form-root.tsx +0 -29
  363. package/src/form/index.ts +0 -7
  364. package/src/form/use-zod-form.ts +0 -29
  365. package/src/i18n/__tests__/translate.test.ts +0 -23
  366. package/src/i18n/index.ts +0 -9
  367. package/src/i18n/messages/en.json +0 -171
  368. package/src/i18n/messages/ja.json +0 -171
  369. package/src/i18n/messages/vi.json +0 -171
  370. package/src/i18n/translate.ts +0 -74
  371. package/src/i18n/use-translation.ts +0 -53
  372. package/src/index.ts +0 -3
  373. package/src/lib/__tests__/control-styles.test.ts +0 -78
  374. package/src/lib/__tests__/datetime.test.ts +0 -77
  375. package/src/lib/__tests__/format-date.test.ts +0 -97
  376. package/src/lib/__tests__/format.test.ts +0 -62
  377. package/src/lib/__tests__/theme-tokens-audit.test.ts +0 -176
  378. package/src/lib/__tests__/theme-tokens-css.test.ts +0 -118
  379. package/src/lib/__tests__/token-governance.test.ts +0 -191
  380. package/src/lib/__tests__/variants.test.ts +0 -18
  381. package/src/lib/control-styles.ts +0 -33
  382. package/src/lib/datetime/detect.ts +0 -25
  383. package/src/lib/datetime/format-date.ts +0 -100
  384. package/src/lib/datetime/format.ts +0 -140
  385. package/src/lib/datetime/index.ts +0 -25
  386. package/src/lib/datetime/parse.ts +0 -51
  387. package/src/lib/datetime/sync.ts +0 -48
  388. package/src/lib/format.ts +0 -114
  389. package/src/lib/hooks.ts +0 -54
  390. package/src/lib/utils.ts +0 -6
  391. package/src/lib/variants.ts +0 -40
  392. package/src/props/components/app.prop.ts +0 -99
  393. package/src/props/components/data-display.prop.ts +0 -73
  394. package/src/props/components/data-entry.prop.ts +0 -334
  395. package/src/props/components/feedback.prop.ts +0 -80
  396. package/src/props/components/form.prop.ts +0 -46
  397. package/src/props/components/general.prop.ts +0 -18
  398. package/src/props/components/index.ts +0 -99
  399. package/src/props/components/layout.prop.ts +0 -130
  400. package/src/props/components/navigation.prop.ts +0 -88
  401. package/src/props/components/query.prop.ts +0 -94
  402. package/src/props/index.ts +0 -17
  403. package/src/props/vocabulary/data.prop.ts +0 -46
  404. package/src/props/vocabulary/index.ts +0 -73
  405. package/src/props/vocabulary/interaction.prop.ts +0 -42
  406. package/src/props/vocabulary/navigation.prop.ts +0 -19
  407. package/src/props/vocabulary/shared.prop.ts +0 -59
  408. package/src/test/__tests__/render-loop-guard.test.tsx +0 -38
  409. package/src/test/jest-dom.d.ts +0 -4
  410. package/src/test/render-loop-guard.tsx +0 -50
  411. package/src/test/render.tsx +0 -29
  412. package/src/test/theme-globals.test.ts +0 -77
  413. package/src/test/theme-globals.ts +0 -134
  414. package/src/test/theme-test-utils.tsx +0 -67
  415. /package/{src → dist}/styles/alert-layout.css +0 -0
  416. /package/{src → dist}/styles/badge-layout.css +0 -0
  417. /package/{src → dist}/styles/card-layout.css +0 -0
  418. /package/{src → dist}/styles/data-display-layout.css +0 -0
  419. /package/{src → dist}/styles/density.css +0 -0
  420. /package/{src → dist}/styles/dialog-layout.css +0 -0
  421. /package/{src → dist}/styles/index.css +0 -0
  422. /package/{src → dist}/styles/layout.css +0 -0
  423. /package/{src → dist}/styles/shell-layout.css +0 -0
  424. /package/{src → dist}/styles/table-layout.css +0 -0
  425. /package/{src → dist}/theme/example.service.css +0 -0
  426. /package/{src → dist}/tokens/base.css +0 -0
  427. /package/{src → dist}/tokens/foundation.css +0 -0
  428. /package/{src → dist}/tokens/primitives/badge.css +0 -0
  429. /package/{src → dist}/tokens/primitives/card.css +0 -0
  430. /package/{src → dist}/tokens/primitives/control.css +0 -0
  431. /package/{src → dist}/tokens/primitives/feedback.css +0 -0
  432. /package/{src → dist}/tokens/primitives/layout.css +0 -0
  433. /package/{src → dist}/tokens/primitives/navigation.css +0 -0
  434. /package/{src → dist}/tokens/primitives/table.css +0 -0
@@ -1,476 +0,0 @@
1
- // DataTable — compound component for admin lists.
2
- //
3
- // Encapsulates: sticky header, density toggle, per-row click navigation, bulk
4
- // selection, empty/loading states, cursor pagination. Use this everywhere
5
- // instead of raw <Table> markup.
6
- //
7
- // Compound API (drop these as children of <DataTable>):
8
- // <DataTable.Toolbar> — left-aligned status / right-aligned controls
9
- // <DataTable.SelectAll> — header checkbox bound to selection state
10
- // <DataTable.BulkActions> — only rendered when count > 0; sits in the toolbar
11
- // <DataTable.DensityToggle> — compact ↔ comfortable
12
- // <DataTable.Content> — the actual table body (auto-included when omitted)
13
- // <DataTable.Pagination> — cursor pagination footer
14
- import * as React from "react";
15
- import { ArrowDown, ArrowUp, ChevronsUpDown, Layers, Layers2, MoreHorizontal } from "lucide-react";
16
-
17
- import { useTranslation } from "../../i18n/use-translation";
18
- import { Inline } from "../layout/inline";
19
- import { Button } from "../general/button";
20
- import {
21
- Table,
22
- TableBody,
23
- TableCell,
24
- TableHead,
25
- TableHeader,
26
- TableRow,
27
- } from "../data-display/table";
28
- import { cn } from "../../lib/utils";
29
- import { densityClass } from "../../lib/variants";
30
- import {
31
- controlIconSmClass,
32
- tableCellPaddingClass,
33
- tableRowHeightClass,
34
- } from "../../lib/control-styles";
35
- import type { ColumnDefProp, TableDensityProp, SortStateProp } from "../../props/vocabulary";
36
-
37
- export type Density = TableDensityProp;
38
- export type ColumnDef<T> = ColumnDefProp<T>;
39
-
40
- interface DataTableContextValue<T = unknown> {
41
- data: T[];
42
- columns: ColumnDef<T>[];
43
- density: Density;
44
- setDensity: (d: Density) => void;
45
- selected: Set<string>;
46
- toggleSelect: (id: string) => void;
47
- toggleSelectAll: () => void;
48
- allSelected: boolean;
49
- someSelected: boolean;
50
- selectable: boolean;
51
- getRowId: (row: T) => string;
52
- onRowClick?: (row: T) => void;
53
- sort?: SortStateProp;
54
- onSortChange?: (sort: SortStateProp | undefined) => void;
55
- }
56
-
57
- const DataTableContext = React.createContext<DataTableContextValue | null>(null);
58
-
59
- function useDataTableContext<T>() {
60
- const ctx = React.useContext(DataTableContext);
61
- if (!ctx) throw new Error("DataTable subcomponents must be used inside <DataTable>");
62
- return ctx as unknown as DataTableContextValue<T>;
63
- }
64
-
65
- function useOptionalDataTableContext<T>() {
66
- return React.useContext(DataTableContext) as unknown as DataTableContextValue<T> | null;
67
- }
68
-
69
- interface DataTableProps<T> {
70
- data: T[];
71
- columns: ColumnDef<T>[];
72
- /** Required when `selectable` is true. Default: assume row.id (typed as any). */
73
- getRowId?: (row: T) => string;
74
- selectable?: boolean;
75
- selected?: Set<string>;
76
- onSelectChange?: (next: Set<string>) => void;
77
- onRowClick?: (row: T) => void;
78
- density?: Density;
79
- onDensityChange?: (d: Density) => void;
80
- sort?: SortStateProp;
81
- onSortChange?: (sort: SortStateProp | undefined) => void;
82
- className?: string;
83
- children?: React.ReactNode;
84
- }
85
-
86
- const noopGetRowId = <T,>(row: T): string => {
87
- const id = (row as { id?: unknown }).id;
88
- if (typeof id === "string") return id;
89
- if (typeof id === "number") return String(id);
90
- return "";
91
- };
92
-
93
- export function DataTable<T>({
94
- data,
95
- columns,
96
- getRowId = noopGetRowId,
97
- selectable = false,
98
- selected: controlledSelected,
99
- onSelectChange,
100
- onRowClick,
101
- density: controlledDensity,
102
- onDensityChange,
103
- sort,
104
- onSortChange,
105
- className,
106
- children,
107
- }: DataTableProps<T>) {
108
- const [internalDensity, setInternalDensity] = React.useState<Density>("compact");
109
- const density = controlledDensity ?? internalDensity;
110
- const setDensity = (d: Density) => {
111
- setInternalDensity(d);
112
- onDensityChange?.(d);
113
- };
114
-
115
- const [internalSelected, setInternalSelected] = React.useState<Set<string>>(new Set());
116
- const selected = controlledSelected ?? internalSelected;
117
- const setSelected = (next: Set<string>) => {
118
- setInternalSelected(next);
119
- onSelectChange?.(next);
120
- };
121
-
122
- const toggleSelect = (id: string) => {
123
- const next = new Set(selected);
124
- if (next.has(id)) next.delete(id);
125
- else next.add(id);
126
- setSelected(next);
127
- };
128
- const allSelected = data.length > 0 && data.every((r) => selected.has(getRowId(r)));
129
- const someSelected = !allSelected && data.some((r) => selected.has(getRowId(r)));
130
- const toggleSelectAll = () => {
131
- if (allSelected) setSelected(new Set());
132
- else setSelected(new Set(data.map(getRowId)));
133
- };
134
-
135
- const ctx: DataTableContextValue<T> = {
136
- data,
137
- columns,
138
- density,
139
- setDensity,
140
- selected,
141
- toggleSelect,
142
- toggleSelectAll,
143
- allSelected,
144
- someSelected,
145
- selectable,
146
- getRowId,
147
- onRowClick,
148
- sort,
149
- onSortChange,
150
- };
151
-
152
- // Determine if children include a Content slot — if not, render default.
153
- const hasContent = React.Children.toArray(children).some(
154
- (c) =>
155
- React.isValidElement(c) &&
156
- (c.type as { displayName?: string }).displayName === "DataTable.Content",
157
- );
158
-
159
- return (
160
- <DataTableContext.Provider value={ctx as DataTableContextValue}>
161
- <div
162
- className={cn(
163
- "ui-data-table-root",
164
- densityClass[density === "compact" ? "compact" : "comfortable"],
165
- className,
166
- )}
167
- >
168
- {children}
169
- {!hasContent && <DataTable.Content />}
170
- </div>
171
- </DataTableContext.Provider>
172
- );
173
- }
174
-
175
- // ── Toolbar ────────────────────────────────────────────────────────────
176
-
177
- DataTable.Toolbar = function DataTableToolbar({
178
- children,
179
- className,
180
- }: {
181
- children?: React.ReactNode;
182
- className?: string;
183
- }) {
184
- return <div className={cn("ui-data-table-toolbar", className)}>{children}</div>;
185
- };
186
- (DataTable.Toolbar as React.FC).displayName = "DataTable.Toolbar";
187
-
188
- // ── SelectAll header checkbox ──────────────────────────────────────────
189
-
190
- DataTable.SelectAll = function DataTableSelectAll() {
191
- const { allSelected, someSelected, toggleSelectAll, selectable } = useDataTableContext();
192
- const { t } = useTranslation();
193
- if (!selectable) return null;
194
- return (
195
- <input
196
- type="checkbox"
197
- checked={allSelected}
198
- ref={(el) => {
199
- if (el) el.indeterminate = someSelected;
200
- }}
201
- onChange={toggleSelectAll}
202
- aria-label={t("dataTable.selectAll")}
203
- />
204
- );
205
- };
206
- (DataTable.SelectAll as React.FC).displayName = "DataTable.SelectAll";
207
-
208
- // ── BulkActions — visible when selection > 0 ───────────────────────────
209
-
210
- interface BulkActionsProps {
211
- count?: number;
212
- children?: React.ReactNode;
213
- className?: string;
214
- }
215
-
216
- DataTable.BulkActions = function DataTableBulkActions({
217
- count,
218
- children,
219
- className,
220
- }: BulkActionsProps) {
221
- const ctx = useOptionalDataTableContext();
222
- const { t } = useTranslation();
223
- const c = count ?? ctx?.selected.size ?? 0;
224
- if (c === 0) return null;
225
- return (
226
- <div
227
- role="region"
228
- aria-label={t("dataTable.bulkActions")}
229
- className={cn("ui-data-table-bulk", className)}
230
- >
231
- <span className="text-muted-foreground">
232
- <strong className="text-foreground">{t("common.selectedCount", { count: c })}</strong>
233
- </span>
234
- <div className="ui-data-table-bulk-actions">{children}</div>
235
- </div>
236
- );
237
- };
238
- (DataTable.BulkActions as React.FC).displayName = "DataTable.BulkActions";
239
-
240
- // ── Density toggle ────────────────────────────────────────────────────
241
-
242
- DataTable.DensityToggle = function DataTableDensityToggle() {
243
- const { density, setDensity } = useDataTableContext();
244
- const { t } = useTranslation();
245
- const next: Density = density === "compact" ? "comfortable" : "compact";
246
- const Icon = density === "compact" ? Layers : Layers2;
247
- const nextLabel =
248
- next === "compact" ? t("dataTable.densityCompact") : t("dataTable.densityComfortable");
249
- return (
250
- <Button
251
- variant="ghost"
252
- size="sm"
253
- onClick={() => {
254
- setDensity(next);
255
- }}
256
- aria-label={t("dataTable.densitySwitch", { density: nextLabel })}
257
- >
258
- <Inline gap="xs">
259
- <Icon className="size-4" aria-hidden="true" />
260
- {density === "compact" ? t("dataTable.densityCompact") : t("dataTable.densityComfortable")}
261
- </Inline>
262
- </Button>
263
- );
264
- };
265
- (DataTable.DensityToggle as React.FC).displayName = "DataTable.DensityToggle";
266
-
267
- // ── Content (the actual table) ─────────────────────────────────────────
268
-
269
- DataTable.Content = function DataTableContent() {
270
- const {
271
- data,
272
- columns,
273
- density: _density,
274
- selectable,
275
- selected,
276
- toggleSelect,
277
- getRowId,
278
- onRowClick,
279
- sort,
280
- onSortChange,
281
- } = useDataTableContext();
282
- const { t } = useTranslation();
283
-
284
- const rowPadding = tableRowHeightClass;
285
- const cellPadding = tableCellPaddingClass;
286
-
287
- const onHeaderClick = (col: ColumnDef<unknown>) => {
288
- if (!col.sortable || !onSortChange) return;
289
- if (sort?.key !== col.key) {
290
- onSortChange({ key: col.key, direction: "asc" });
291
- } else if (sort.direction === "asc") {
292
- onSortChange({ key: col.key, direction: "desc" });
293
- } else {
294
- onSortChange(undefined);
295
- }
296
- };
297
-
298
- return (
299
- <div className="ui-data-table-scroll">
300
- <div className="ui-data-table-surface min-w-[640px] sm:min-w-0">
301
- <Table>
302
- <TableHeader className="bg-secondary sticky top-0 z-10">
303
- <TableRow>
304
- {selectable && (
305
- <TableHead className="w-10">
306
- <DataTable.SelectAll />
307
- </TableHead>
308
- )}
309
- {columns.map((col) => (
310
- <TableHead
311
- key={col.key}
312
- className={cn(
313
- col.width,
314
- col.align === "right" && "text-right",
315
- col.align === "center" && "text-center",
316
- col.sortable && onSortChange && "cursor-pointer select-none",
317
- )}
318
- onClick={() => {
319
- onHeaderClick(col);
320
- }}
321
- >
322
- <span className="ui-data-table-sort-label">
323
- {col.header}
324
- {col.sortable &&
325
- onSortChange &&
326
- (sort?.key === col.key ? (
327
- sort.direction === "asc" ? (
328
- <ArrowUp className="size-3" aria-hidden="true" />
329
- ) : (
330
- <ArrowDown className="size-3" aria-hidden="true" />
331
- )
332
- ) : (
333
- <ChevronsUpDown
334
- className="text-muted-foreground size-3"
335
- aria-hidden="true"
336
- />
337
- ))}
338
- </span>
339
- </TableHead>
340
- ))}
341
- </TableRow>
342
- </TableHeader>
343
- <TableBody>
344
- {data.map((row) => {
345
- const id = getRowId(row);
346
- const isSelected = selected.has(id);
347
- return (
348
- <TableRow
349
- key={id}
350
- data-state={isSelected ? "selected" : undefined}
351
- onClick={(e) => {
352
- // Don't trigger row click if user clicked on an interactive child.
353
- const target = e.target as HTMLElement;
354
- if (target.closest("button, a, input, select, textarea, [role=menuitem]"))
355
- return;
356
- onRowClick?.(row);
357
- }}
358
- className={cn(
359
- rowPadding,
360
- onRowClick && "hover:bg-muted/50 cursor-pointer",
361
- isSelected && "bg-muted/30",
362
- )}
363
- >
364
- {selectable && (
365
- <TableCell className={cellPadding}>
366
- <input
367
- type="checkbox"
368
- checked={isSelected}
369
- onChange={() => {
370
- toggleSelect(id);
371
- }}
372
- aria-label={t("dataTable.selectRow", { id })}
373
- onClick={(e) => {
374
- e.stopPropagation();
375
- }}
376
- />
377
- </TableCell>
378
- )}
379
- {columns.map((col) => (
380
- <TableCell
381
- key={col.key}
382
- className={cn(
383
- cellPadding,
384
- col.width,
385
- col.align === "right" && "text-right",
386
- col.align === "center" && "text-center",
387
- )}
388
- >
389
- {col.render
390
- ? col.render(row)
391
- : (() => {
392
- const v = (row as Record<string, unknown>)[col.key];
393
- if (v == null) return "—";
394
- if (typeof v === "string" || typeof v === "number") return String(v);
395
- return "—";
396
- })()}
397
- </TableCell>
398
- ))}
399
- </TableRow>
400
- );
401
- })}
402
- </TableBody>
403
- </Table>
404
- </div>
405
- </div>
406
- );
407
- };
408
- (DataTable.Content as React.FC).displayName = "DataTable.Content";
409
-
410
- // ── Pagination ─────────────────────────────────────────────────────────
411
-
412
- interface PaginationProps {
413
- cursor?: string;
414
- hasMore: boolean;
415
- onChange: (cursor: string | undefined) => void;
416
- className?: string;
417
- }
418
-
419
- DataTable.Pagination = function DataTablePagination({
420
- cursor,
421
- hasMore,
422
- onChange,
423
- className,
424
- }: PaginationProps) {
425
- const { t } = useTranslation();
426
- return (
427
- <div className={cn("ui-data-table-pagination", className)}>
428
- <Button
429
- variant="outline"
430
- size="sm"
431
- disabled={!cursor}
432
- onClick={() => {
433
- onChange(undefined);
434
- }}
435
- >
436
- {t("common.first")}
437
- </Button>
438
- <Button
439
- variant="outline"
440
- size="sm"
441
- disabled={!hasMore}
442
- onClick={() => {
443
- onChange(cursor);
444
- }}
445
- >
446
- {t("common.next")}
447
- </Button>
448
- </div>
449
- );
450
- };
451
- (DataTable.Pagination as React.FC).displayName = "DataTable.Pagination";
452
-
453
- // ── More-actions dropdown trigger (kebab) ──────────────────────────────
454
-
455
- interface RowActionsProps {
456
- ariaLabel?: string;
457
- children: React.ReactNode;
458
- }
459
-
460
- /** Kebab menu trigger for per-row actions. Wrap children in a DropdownMenu in
461
- * the consumer — this is just the trigger button shape. */
462
- DataTable.RowActions = function DataTableRowActions({ ariaLabel, children }: RowActionsProps) {
463
- const { t } = useTranslation();
464
- return (
465
- <Button
466
- variant="ghost"
467
- size="icon"
468
- aria-label={ariaLabel ?? t("dataTable.rowActions")}
469
- className={controlIconSmClass}
470
- >
471
- <MoreHorizontal className="size-4" aria-hidden="true" />
472
- {children}
473
- </Button>
474
- );
475
- };
476
- (DataTable.RowActions as React.FC).displayName = "DataTable.RowActions";
@@ -1,22 +0,0 @@
1
- import { cn } from "../../lib/utils";
2
- import type { EmptyStateProp } from "../../props/components/data-display.prop";
3
-
4
- export type {
5
- EmptyStateProp,
6
- EmptyStateProp as EmptyStateProps,
7
- } from "../../props/components/data-display.prop";
8
-
9
- export function EmptyState({ icon: Icon, title, description, action, className }: EmptyStateProp) {
10
- return (
11
- <div data-slot="empty-state" className={cn("ui-empty-state", className)}>
12
- {Icon && (
13
- <div className="ui-empty-state-icon">
14
- <Icon className="text-muted-foreground size-6" aria-hidden="true" />
15
- </div>
16
- )}
17
- <h3 className="ui-empty-state-title">{title}</h3>
18
- {description && <p className="ui-empty-state-description">{description}</p>}
19
- {action && <div>{action}</div>}
20
- </div>
21
- );
22
- }
@@ -1,41 +0,0 @@
1
- export { Badge } from "./badge";
2
- export type { BadgeProps } from "./badge";
3
- export {
4
- Card,
5
- CardContent,
6
- CardCover,
7
- CardDescription,
8
- CardFooter,
9
- CardHeader,
10
- CardTitle,
11
- CardAction,
12
- CardStat,
13
- } from "./card";
14
- export type { CardStatProps } from "./card";
15
- export { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "./table";
16
- export { KeyValueGrid } from "./key-value-grid";
17
- export { StatusBadge } from "./status-badge";
18
- export { DataTable } from "./data-table";
19
- export type { ColumnDef, Density as TableDensity } from "./data-table";
20
- export { EmptyState } from "./empty-state";
21
- export { CodeBadge } from "./code-badge";
22
- export type { CodeBadgeKind, CodeBadgeProps } from "./code-badge";
23
- export { ProgressMeter } from "./progress-meter";
24
- export type { ProgressMeterProps, ProgressMeterTone } from "./progress-meter";
25
- export { TreeList } from "./tree-list";
26
- export type { TreeListItem, TreeListProps } from "./tree-list";
27
- export { Timeline } from "./timeline";
28
- export type { TimelineItem, TimelineProps } from "./timeline";
29
- export { ScanPanel } from "./scan-panel";
30
- export type { ScanPanelProps } from "./scan-panel";
31
- export {
32
- Popover,
33
- PopoverAnchor,
34
- PopoverContent,
35
- PopoverDescription,
36
- PopoverHeader,
37
- PopoverTitle,
38
- PopoverTrigger,
39
- } from "./popover";
40
- export { ScrollArea, ScrollBar } from "./scroll-area";
41
- export { Collapsible, CollapsibleTrigger, CollapsibleContent } from "./collapsible";
@@ -1,46 +0,0 @@
1
- // KeyValueGrid — for detail-page metadata. Replaces hand-rolled <dl><dt><dd> layouts.
2
- import * as React from "react";
3
-
4
- import { cn } from "../../lib/utils";
5
-
6
- interface KeyValueGridProps {
7
- columns?: 1 | 2 | 3;
8
- className?: string;
9
- children: React.ReactNode;
10
- }
11
-
12
- export function KeyValueGrid({ columns = 2, className, children }: KeyValueGridProps) {
13
- const colsClass =
14
- columns === 1
15
- ? "grid-cols-1"
16
- : columns === 3
17
- ? "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3"
18
- : "grid-cols-1 sm:grid-cols-2";
19
- return <dl className={cn("grid gap-x-6 gap-y-3", colsClass, className)}>{children}</dl>;
20
- }
21
-
22
- interface KeyValueGridItemProps {
23
- label: React.ReactNode;
24
- /** Use mono spacing for IDs, paths, JSON. */
25
- mono?: boolean;
26
- /** Span full row(s) when value is long. */
27
- span?: 2 | 3;
28
- className?: string;
29
- children: React.ReactNode;
30
- }
31
-
32
- KeyValueGrid.Item = function KeyValueGridItem({
33
- label,
34
- mono,
35
- span,
36
- className,
37
- children,
38
- }: KeyValueGridItemProps) {
39
- const spanClass = span === 2 ? "sm:col-span-2" : span === 3 ? "sm:col-span-2 lg:col-span-3" : "";
40
- return (
41
- <div className={cn(spanClass, className)}>
42
- <dt className="text-muted-foreground text-xs">{label}</dt>
43
- <dd className={cn("text-sm break-all", mono && "font-mono")}>{children}</dd>
44
- </div>
45
- );
46
- };
@@ -1,62 +0,0 @@
1
- import * as React from "react";
2
- import * as PopoverPrimitive from "@radix-ui/react-popover";
3
- import { cn } from "../../lib/utils";
4
-
5
- export function Popover(props: React.ComponentProps<typeof PopoverPrimitive.Root>) {
6
- return <PopoverPrimitive.Root data-slot="popover" {...props} />;
7
- }
8
-
9
- export function PopoverTrigger(props: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {
10
- return <PopoverPrimitive.Trigger data-slot="popover-trigger" {...props} />;
11
- }
12
-
13
- export function PopoverAnchor(props: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {
14
- return <PopoverPrimitive.Anchor data-slot="popover-anchor" {...props} />;
15
- }
16
-
17
- export const PopoverContent = React.forwardRef<
18
- React.ComponentRef<typeof PopoverPrimitive.Content>,
19
- React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>
20
- >(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
21
- <PopoverPrimitive.Portal>
22
- <PopoverPrimitive.Content
23
- ref={ref}
24
- data-slot="popover-content"
25
- align={align}
26
- sideOffset={sideOffset}
27
- className={cn(
28
- "bg-popover text-popover-foreground z-50 w-72 origin-[var(--radix-popover-content-transform-origin)] rounded-md border p-4 shadow-md outline-none",
29
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
30
- "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
31
- "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
32
- "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
33
- className,
34
- )}
35
- {...props}
36
- />
37
- </PopoverPrimitive.Portal>
38
- ));
39
- PopoverContent.displayName = PopoverPrimitive.Content.displayName;
40
-
41
- export const PopoverHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
42
- <div
43
- data-slot="popover-header"
44
- className={cn("flex flex-col gap-1 text-sm", className)}
45
- {...props}
46
- />
47
- );
48
-
49
- export const PopoverTitle = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
50
- <div data-slot="popover-title" className={cn("font-medium", className)} {...props} />
51
- );
52
-
53
- export const PopoverDescription = ({
54
- className,
55
- ...props
56
- }: React.HTMLAttributes<HTMLParagraphElement>) => (
57
- <p
58
- data-slot="popover-description"
59
- className={cn("text-muted-foreground", className)}
60
- {...props}
61
- />
62
- );
@@ -1,20 +0,0 @@
1
- export type ProgressMeterTone = "success" | "warning";
2
-
3
- export type ProgressMeterProps = {
4
- value: number;
5
- label?: string;
6
- tone?: ProgressMeterTone;
7
- };
8
-
9
- export function ProgressMeter({ value, label, tone = "success" }: ProgressMeterProps) {
10
- const boundedValue = Math.max(0, Math.min(100, value));
11
-
12
- return (
13
- <div className="ui-progress-meter" data-tone={tone}>
14
- <div className="ui-progress-track">
15
- <div className="ui-progress-bar" style={{ width: `${boundedValue}%` }} />
16
- </div>
17
- {label ? <div className="ui-progress-label">{label}</div> : null}
18
- </div>
19
- );
20
- }
@@ -1,16 +0,0 @@
1
- import { ScanLine } from "lucide-react";
2
-
3
- export type ScanPanelProps = {
4
- title: string;
5
- description?: string;
6
- };
7
-
8
- export function ScanPanel({ title, description }: ScanPanelProps) {
9
- return (
10
- <div className="ui-scan-panel">
11
- <ScanLine aria-hidden="true" />
12
- <div className="ui-scan-title">{title}</div>
13
- {description ? <div className="ui-scan-description">{description}</div> : null}
14
- </div>
15
- );
16
- }