@godxjp/ui 6.0.0 → 6.0.1

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/dist/types-mvzYGrma.d.ts +37 -0
  182. package/dist/use-toast-Dol5bdY3.d.ts +34 -0
  183. package/package.json +233 -67
  184. package/src/app/__tests__/app-provider.test.tsx +0 -232
  185. package/src/app/__tests__/date-format-labels.test.ts +0 -36
  186. package/src/app/__tests__/date-formats.test.ts +0 -44
  187. package/src/app/__tests__/timezones.test.ts +0 -65
  188. package/src/app/app-provider.tsx +0 -227
  189. package/src/app/date-format-labels.ts +0 -21
  190. package/src/app/date-formats.ts +0 -30
  191. package/src/app/index.ts +0 -40
  192. package/src/app/locales.ts +0 -32
  193. package/src/app/request-headers.ts +0 -31
  194. package/src/app/storage.ts +0 -44
  195. package/src/app/time-format-labels.ts +0 -19
  196. package/src/app/time-formats.ts +0 -15
  197. package/src/app/timezones.ts +0 -208
  198. package/src/app/types.ts +0 -39
  199. package/src/app/use-formatting.ts +0 -47
  200. package/src/components/__tests__/accessibility-primitives.test.tsx +0 -65
  201. package/src/components/__tests__/docs-parity.test.ts +0 -41
  202. package/src/components/__tests__/shadcn-release-guardrails.test.ts +0 -71
  203. package/src/components/__tests__/theme-axes-integration.test.tsx +0 -242
  204. package/src/components/admin/index.ts +0 -76
  205. package/src/components/data-display/__tests__/card-table.test.tsx +0 -328
  206. package/src/components/data-display/__tests__/data-display.test.tsx +0 -73
  207. package/src/components/data-display/__tests__/data-table.test.tsx +0 -84
  208. package/src/components/data-display/__tests__/popover.test.tsx +0 -92
  209. package/src/components/data-display/__tests__/scroll-area-collapsible.test.tsx +0 -66
  210. package/src/components/data-display/badge.tsx +0 -27
  211. package/src/components/data-display/card.tsx +0 -194
  212. package/src/components/data-display/code-badge.tsx +0 -28
  213. package/src/components/data-display/collapsible.tsx +0 -5
  214. package/src/components/data-display/data-table.tsx +0 -476
  215. package/src/components/data-display/empty-state.tsx +0 -22
  216. package/src/components/data-display/index.ts +0 -41
  217. package/src/components/data-display/key-value-grid.tsx +0 -46
  218. package/src/components/data-display/popover.tsx +0 -62
  219. package/src/components/data-display/progress-meter.tsx +0 -20
  220. package/src/components/data-display/scan-panel.tsx +0 -16
  221. package/src/components/data-display/scroll-area.tsx +0 -42
  222. package/src/components/data-display/status-badge.tsx +0 -83
  223. package/src/components/data-display/table.tsx +0 -59
  224. package/src/components/data-display/timeline.tsx +0 -42
  225. package/src/components/data-display/tree-list.tsx +0 -42
  226. package/src/components/data-entry/__fixtures__/tree-options.ts +0 -80
  227. package/src/components/data-entry/__tests__/cascader-tree-transfer.test.tsx +0 -417
  228. package/src/components/data-entry/__tests__/checkbox-group.test.tsx +0 -40
  229. package/src/components/data-entry/__tests__/checkbox.test.tsx +0 -20
  230. package/src/components/data-entry/__tests__/date-autocomplete.test.tsx +0 -94
  231. package/src/components/data-entry/__tests__/form-field.test.tsx +0 -49
  232. package/src/components/data-entry/__tests__/input-textarea.test.tsx +0 -38
  233. package/src/components/data-entry/__tests__/label-select.test.tsx +0 -62
  234. package/src/components/data-entry/__tests__/pickers.test.tsx +0 -74
  235. package/src/components/data-entry/__tests__/radio.test.tsx +0 -46
  236. package/src/components/data-entry/__tests__/search-input.test.tsx +0 -32
  237. package/src/components/data-entry/__tests__/switch-field.test.tsx +0 -52
  238. package/src/components/data-entry/__tests__/upload.test.tsx +0 -125
  239. package/src/components/data-entry/autocomplete.tsx +0 -91
  240. package/src/components/data-entry/cascader.tsx +0 -305
  241. package/src/components/data-entry/checkbox-group.tsx +0 -90
  242. package/src/components/data-entry/checkbox.tsx +0 -30
  243. package/src/components/data-entry/choice-field.tsx +0 -27
  244. package/src/components/data-entry/choice-option.ts +0 -20
  245. package/src/components/data-entry/color-picker.tsx +0 -75
  246. package/src/components/data-entry/command.tsx +0 -56
  247. package/src/components/data-entry/country-select.tsx +0 -88
  248. package/src/components/data-entry/date-picker.tsx +0 -69
  249. package/src/components/data-entry/date-range-picker.tsx +0 -75
  250. package/src/components/data-entry/form-field.tsx +0 -59
  251. package/src/components/data-entry/index.ts +0 -62
  252. package/src/components/data-entry/label.tsx +0 -25
  253. package/src/components/data-entry/radio.tsx +0 -109
  254. package/src/components/data-entry/search-input.tsx +0 -103
  255. package/src/components/data-entry/select.tsx +0 -149
  256. package/src/components/data-entry/slider.tsx +0 -38
  257. package/src/components/data-entry/switch-field.tsx +0 -91
  258. package/src/components/data-entry/switch.tsx +0 -24
  259. package/src/components/data-entry/textarea.tsx +0 -12
  260. package/src/components/data-entry/time-picker.tsx +0 -214
  261. package/src/components/data-entry/transfer.tsx +0 -231
  262. package/src/components/data-entry/tree-select-strategy.ts +0 -6
  263. package/src/components/data-entry/tree-select.tsx +0 -279
  264. package/src/components/data-entry/tree-utils.ts +0 -221
  265. package/src/components/data-entry/upload-crop-dialog.tsx +0 -109
  266. package/src/components/data-entry/upload-types.ts +0 -86
  267. package/src/components/data-entry/upload.tsx +0 -498
  268. package/src/components/data-entry/use-upload-draft.ts +0 -93
  269. package/src/components/feedback/__tests__/alert.test.tsx +0 -127
  270. package/src/components/feedback/__tests__/dialog.test.tsx +0 -290
  271. package/src/components/feedback/__tests__/sheet.test.tsx +0 -94
  272. package/src/components/feedback/__tests__/skeleton.test.tsx +0 -25
  273. package/src/components/feedback/__tests__/toast.test.tsx +0 -52
  274. package/src/components/feedback/alert.tsx +0 -167
  275. package/src/components/feedback/dialog.tsx +0 -325
  276. package/src/components/feedback/index.ts +0 -53
  277. package/src/components/feedback/sheet.tsx +0 -130
  278. package/src/components/feedback/skeleton.tsx +0 -95
  279. package/src/components/feedback/sonner.tsx +0 -54
  280. package/src/components/feedback/toaster.tsx +0 -1
  281. package/src/components/feedback/use-toast.ts +0 -62
  282. package/src/components/general/__tests__/button.test.tsx +0 -71
  283. package/src/components/general/button.tsx +0 -61
  284. package/src/components/general/index.ts +0 -2
  285. package/src/components/layout/__tests__/page-container.test.tsx +0 -69
  286. package/src/components/layout/__tests__/page-inset.test.tsx +0 -14
  287. package/src/components/layout/__tests__/stack-inline.test.tsx +0 -39
  288. package/src/components/layout/app-shell.tsx +0 -42
  289. package/src/components/layout/breadcrumb.tsx +0 -35
  290. package/src/components/layout/index.ts +0 -31
  291. package/src/components/layout/inline.tsx +0 -13
  292. package/src/components/layout/menu.tsx +0 -34
  293. package/src/components/layout/mobile-frame.tsx +0 -57
  294. package/src/components/layout/page-container.tsx +0 -81
  295. package/src/components/layout/page-inset.tsx +0 -16
  296. package/src/components/layout/responsive-grid.tsx +0 -14
  297. package/src/components/layout/shell-app.tsx +0 -30
  298. package/src/components/layout/sidebar.tsx +0 -98
  299. package/src/components/layout/split-pane.tsx +0 -16
  300. package/src/components/layout/stack.tsx +0 -13
  301. package/src/components/layout/topbar.tsx +0 -108
  302. package/src/components/navigation/__tests__/app-pickers.test.tsx +0 -118
  303. package/src/components/navigation/__tests__/dropdown-menu.test.tsx +0 -104
  304. package/src/components/navigation/__tests__/navigation.test.tsx +0 -61
  305. package/src/components/navigation/__tests__/pagination-steps-tabs.test.tsx +0 -76
  306. package/src/components/navigation/date-format-picker.tsx +0 -55
  307. package/src/components/navigation/dropdown-menu.tsx +0 -190
  308. package/src/components/navigation/filter-bar.tsx +0 -38
  309. package/src/components/navigation/index.ts +0 -28
  310. package/src/components/navigation/locale-picker.tsx +0 -49
  311. package/src/components/navigation/page-header.tsx +0 -50
  312. package/src/components/navigation/pagination-utils.ts +0 -35
  313. package/src/components/navigation/pagination.tsx +0 -168
  314. package/src/components/navigation/steps.tsx +0 -163
  315. package/src/components/navigation/tabs-items.tsx +0 -69
  316. package/src/components/navigation/time-format-picker.tsx +0 -55
  317. package/src/components/navigation/timezone-picker.tsx +0 -63
  318. package/src/components/query/__tests__/data-state.test.tsx +0 -214
  319. package/src/components/query/__tests__/infinite-prefetch.test.tsx +0 -105
  320. package/src/components/query/__tests__/query-helpers.test.tsx +0 -61
  321. package/src/components/query/data-state.tsx +0 -58
  322. package/src/components/query/index.ts +0 -10
  323. package/src/components/query/infinite-query-state.tsx +0 -99
  324. package/src/components/query/mutation-feedback.tsx +0 -31
  325. package/src/components/query/prefetch-link.tsx +0 -45
  326. package/src/components/query/query-refetch-button.tsx +0 -41
  327. package/src/components/ui/alert-dialog.tsx +0 -1
  328. package/src/components/ui/alert.tsx +0 -1
  329. package/src/components/ui/autocomplete.tsx +0 -1
  330. package/src/components/ui/badge.tsx +0 -1
  331. package/src/components/ui/button.tsx +0 -1
  332. package/src/components/ui/calendar.tsx +0 -1
  333. package/src/components/ui/card.tsx +0 -1
  334. package/src/components/ui/checkbox.tsx +0 -1
  335. package/src/components/ui/color-picker.tsx +0 -1
  336. package/src/components/ui/command.tsx +0 -1
  337. package/src/components/ui/date-picker.tsx +0 -1
  338. package/src/components/ui/date-range-picker.tsx +0 -1
  339. package/src/components/ui/dialog.tsx +0 -1
  340. package/src/components/ui/dropdown-menu.tsx +0 -1
  341. package/src/components/ui/index.tsx +0 -31
  342. package/src/components/ui/input.tsx +0 -1
  343. package/src/components/ui/label.tsx +0 -1
  344. package/src/components/ui/pagination.tsx +0 -1
  345. package/src/components/ui/popover.tsx +0 -1
  346. package/src/components/ui/radio.tsx +0 -1
  347. package/src/components/ui/scroll-area.tsx +0 -1
  348. package/src/components/ui/select.tsx +0 -1
  349. package/src/components/ui/sheet.tsx +0 -1
  350. package/src/components/ui/slider.tsx +0 -1
  351. package/src/components/ui/sonner.tsx +0 -1
  352. package/src/components/ui/switch.tsx +0 -1
  353. package/src/components/ui/table.tsx +0 -1
  354. package/src/components/ui/tabs-items.tsx +0 -1
  355. package/src/components/ui/tabs.tsx +0 -1
  356. package/src/components/ui/textarea.tsx +0 -1
  357. package/src/components/ui/time-picker.tsx +0 -1
  358. package/src/components/ui/upload.tsx +0 -1
  359. package/src/form/__tests__/use-zod-form.test.tsx +0 -97
  360. package/src/form/form-field-control.tsx +0 -44
  361. package/src/form/form-root.tsx +0 -29
  362. package/src/form/index.ts +0 -7
  363. package/src/form/use-zod-form.ts +0 -29
  364. package/src/i18n/__tests__/translate.test.ts +0 -23
  365. package/src/i18n/index.ts +0 -9
  366. package/src/i18n/messages/en.json +0 -171
  367. package/src/i18n/messages/ja.json +0 -171
  368. package/src/i18n/messages/vi.json +0 -171
  369. package/src/i18n/translate.ts +0 -74
  370. package/src/i18n/use-translation.ts +0 -53
  371. package/src/index.ts +0 -3
  372. package/src/lib/__tests__/control-styles.test.ts +0 -78
  373. package/src/lib/__tests__/datetime.test.ts +0 -77
  374. package/src/lib/__tests__/format-date.test.ts +0 -97
  375. package/src/lib/__tests__/format.test.ts +0 -62
  376. package/src/lib/__tests__/theme-tokens-audit.test.ts +0 -176
  377. package/src/lib/__tests__/theme-tokens-css.test.ts +0 -118
  378. package/src/lib/__tests__/token-governance.test.ts +0 -191
  379. package/src/lib/__tests__/variants.test.ts +0 -18
  380. package/src/lib/control-styles.ts +0 -33
  381. package/src/lib/datetime/detect.ts +0 -25
  382. package/src/lib/datetime/format-date.ts +0 -100
  383. package/src/lib/datetime/format.ts +0 -140
  384. package/src/lib/datetime/index.ts +0 -25
  385. package/src/lib/datetime/parse.ts +0 -51
  386. package/src/lib/datetime/sync.ts +0 -48
  387. package/src/lib/format.ts +0 -114
  388. package/src/lib/hooks.ts +0 -54
  389. package/src/lib/utils.ts +0 -6
  390. package/src/lib/variants.ts +0 -40
  391. package/src/props/components/app.prop.ts +0 -99
  392. package/src/props/components/data-display.prop.ts +0 -73
  393. package/src/props/components/data-entry.prop.ts +0 -334
  394. package/src/props/components/feedback.prop.ts +0 -80
  395. package/src/props/components/form.prop.ts +0 -46
  396. package/src/props/components/general.prop.ts +0 -18
  397. package/src/props/components/index.ts +0 -99
  398. package/src/props/components/layout.prop.ts +0 -130
  399. package/src/props/components/navigation.prop.ts +0 -88
  400. package/src/props/components/query.prop.ts +0 -94
  401. package/src/props/index.ts +0 -17
  402. package/src/props/vocabulary/data.prop.ts +0 -46
  403. package/src/props/vocabulary/index.ts +0 -73
  404. package/src/props/vocabulary/interaction.prop.ts +0 -42
  405. package/src/props/vocabulary/navigation.prop.ts +0 -19
  406. package/src/props/vocabulary/shared.prop.ts +0 -59
  407. package/src/test/__tests__/render-loop-guard.test.tsx +0 -38
  408. package/src/test/jest-dom.d.ts +0 -4
  409. package/src/test/render-loop-guard.tsx +0 -50
  410. package/src/test/render.tsx +0 -29
  411. package/src/test/theme-globals.test.ts +0 -77
  412. package/src/test/theme-globals.ts +0 -134
  413. package/src/test/theme-test-utils.tsx +0 -67
  414. /package/{src → dist}/styles/alert-layout.css +0 -0
  415. /package/{src → dist}/styles/badge-layout.css +0 -0
  416. /package/{src → dist}/styles/card-layout.css +0 -0
  417. /package/{src → dist}/styles/control.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
- }