@ketvietlab/design-system 0.1.9 → 0.1.13

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 (371) hide show
  1. package/README.md +92 -6
  2. package/dist/atlas/README.md +35 -0
  3. package/dist/atlas/adapter.schema.json +78 -0
  4. package/dist/atlas/profile.json +43 -0
  5. package/dist/atlas-cli.d.ts +3 -0
  6. package/dist/atlas-cli.d.ts.map +1 -0
  7. package/dist/atlas-cli.js +213 -0
  8. package/dist/atlas-cli.js.map +1 -0
  9. package/dist/catalogue/catalogue.css +198 -5
  10. package/dist/catalogue/groups.d.ts +11 -0
  11. package/dist/catalogue/groups.d.ts.map +1 -0
  12. package/dist/catalogue/groups.js +47 -0
  13. package/dist/catalogue/groups.js.map +1 -0
  14. package/dist/catalogue/index.d.ts +16 -17
  15. package/dist/catalogue/index.d.ts.map +1 -1
  16. package/dist/catalogue/index.js +39 -751
  17. package/dist/catalogue/index.js.map +1 -1
  18. package/dist/catalogue/inventory-policy.json +560 -0
  19. package/dist/catalogue/inventory.css +574 -0
  20. package/dist/catalogue/inventory.d.ts +16 -0
  21. package/dist/catalogue/inventory.d.ts.map +1 -0
  22. package/dist/catalogue/inventory.generated.d.ts +42 -0
  23. package/dist/catalogue/inventory.generated.d.ts.map +1 -0
  24. package/dist/catalogue/inventory.generated.js +3 -0
  25. package/dist/catalogue/inventory.generated.js.map +1 -0
  26. package/dist/catalogue/inventory.generated.json +9993 -0
  27. package/dist/catalogue/inventory.js +48 -0
  28. package/dist/catalogue/inventory.js.map +1 -0
  29. package/dist/catalogue/registry.d.ts +12 -0
  30. package/dist/catalogue/registry.d.ts.map +1 -0
  31. package/dist/catalogue/registry.js +134 -0
  32. package/dist/catalogue/registry.js.map +1 -0
  33. package/dist/catalogue/specimens.d.ts +15 -0
  34. package/dist/catalogue/specimens.d.ts.map +1 -0
  35. package/dist/catalogue/specimens.js +1186 -0
  36. package/dist/catalogue/specimens.js.map +1 -0
  37. package/dist/catalogue/styles.css +1 -0
  38. package/dist/contract/index.d.ts.map +1 -1
  39. package/dist/contract/index.js +64 -18
  40. package/dist/contract/index.js.map +1 -1
  41. package/dist/data-display/data-grid/index.d.ts +22 -0
  42. package/dist/data-display/data-grid/index.d.ts.map +1 -0
  43. package/dist/data-display/data-grid/index.js +15 -0
  44. package/dist/data-display/data-grid/index.js.map +1 -0
  45. package/dist/data-display/data-grid/styles.css +49 -0
  46. package/dist/data-display/resource-list/index.d.ts +22 -0
  47. package/dist/data-display/resource-list/index.d.ts.map +1 -0
  48. package/dist/data-display/resource-list/index.js +21 -0
  49. package/dist/data-display/resource-list/index.js.map +1 -0
  50. package/dist/data-display/resource-list/styles.css +39 -0
  51. package/dist/data-display/tree/index.d.ts +33 -0
  52. package/dist/data-display/tree/index.d.ts.map +1 -0
  53. package/dist/data-display/tree/index.js +21 -0
  54. package/dist/data-display/tree/index.js.map +1 -0
  55. package/dist/data-display/tree/styles.css +45 -0
  56. package/dist/data-operations/inline-edit/index.d.ts +19 -0
  57. package/dist/data-operations/inline-edit/index.d.ts.map +1 -0
  58. package/dist/data-operations/inline-edit/index.js +5 -0
  59. package/dist/data-operations/inline-edit/index.js.map +1 -0
  60. package/dist/data-operations/inline-edit/styles.css +34 -0
  61. package/dist/data-operations/list-controls/index.d.ts +67 -0
  62. package/dist/data-operations/list-controls/index.d.ts.map +1 -0
  63. package/dist/data-operations/list-controls/index.js +35 -0
  64. package/dist/data-operations/list-controls/index.js.map +1 -0
  65. package/dist/data-operations/list-controls/styles.css +82 -0
  66. package/dist/forms/combobox/index.d.ts +39 -0
  67. package/dist/forms/combobox/index.d.ts.map +1 -0
  68. package/dist/forms/combobox/index.js +23 -0
  69. package/dist/forms/combobox/index.js.map +1 -0
  70. package/dist/forms/combobox/styles.css +76 -0
  71. package/dist/forms/date-time/index.d.ts +25 -0
  72. package/dist/forms/date-time/index.d.ts.map +1 -0
  73. package/dist/forms/date-time/index.js +15 -0
  74. package/dist/forms/date-time/index.js.map +1 -0
  75. package/dist/forms/date-time/styles.css +25 -0
  76. package/dist/forms/relation-picker/index.d.ts +12 -0
  77. package/dist/forms/relation-picker/index.d.ts.map +1 -0
  78. package/dist/forms/relation-picker/index.js +13 -0
  79. package/dist/forms/relation-picker/index.js.map +1 -0
  80. package/dist/forms/relation-picker/styles.css +5 -0
  81. package/dist/forms/scalar-fields/index.d.ts +24 -0
  82. package/dist/forms/scalar-fields/index.d.ts.map +1 -0
  83. package/dist/forms/scalar-fields/index.js +23 -0
  84. package/dist/forms/scalar-fields/index.js.map +1 -0
  85. package/dist/forms/scalar-fields/styles.css +52 -0
  86. package/dist/forms/shared.d.ts +19 -0
  87. package/dist/forms/shared.d.ts.map +1 -0
  88. package/dist/forms/shared.js +9 -0
  89. package/dist/forms/shared.js.map +1 -0
  90. package/dist/forms/upload/index.d.ts +20 -0
  91. package/dist/forms/upload/index.d.ts.map +1 -0
  92. package/dist/forms/upload/index.js +11 -0
  93. package/dist/forms/upload/index.js.map +1 -0
  94. package/dist/forms/upload/styles.css +21 -0
  95. package/dist/foundations/reset.css +4 -0
  96. package/dist/foundations/tokens.css +31 -4
  97. package/dist/index.d.ts +78 -35
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +43 -19
  100. package/dist/index.js.map +1 -1
  101. package/dist/interactions/dialog/index.d.ts +25 -0
  102. package/dist/interactions/dialog/index.d.ts.map +1 -0
  103. package/dist/interactions/dialog/index.js +10 -0
  104. package/dist/interactions/dialog/index.js.map +1 -0
  105. package/dist/interactions/dialog/styles.css +11 -0
  106. package/dist/interactions/menu/index.d.ts +27 -0
  107. package/dist/interactions/menu/index.d.ts.map +1 -0
  108. package/dist/interactions/menu/index.js +13 -0
  109. package/dist/interactions/menu/index.js.map +1 -0
  110. package/dist/interactions/menu/styles.css +85 -0
  111. package/dist/interactions/popover/index.d.ts +15 -0
  112. package/dist/interactions/popover/index.d.ts.map +1 -0
  113. package/dist/interactions/popover/index.js +4 -0
  114. package/dist/interactions/popover/index.js.map +1 -0
  115. package/dist/interactions/popover/styles.css +47 -0
  116. package/dist/interactions/skeleton/index.d.ts +7 -0
  117. package/dist/interactions/skeleton/index.d.ts.map +1 -0
  118. package/dist/interactions/skeleton/index.js +5 -0
  119. package/dist/interactions/skeleton/index.js.map +1 -0
  120. package/dist/interactions/skeleton/styles.css +32 -0
  121. package/dist/interactions/spinner/index.d.ts +7 -0
  122. package/dist/interactions/spinner/index.d.ts.map +1 -0
  123. package/dist/interactions/spinner/index.js +4 -0
  124. package/dist/interactions/spinner/index.js.map +1 -0
  125. package/dist/interactions/spinner/styles.css +38 -0
  126. package/dist/interactions/toast/index.d.ts +16 -0
  127. package/dist/interactions/toast/index.d.ts.map +1 -0
  128. package/dist/interactions/toast/index.js +13 -0
  129. package/dist/interactions/toast/index.js.map +1 -0
  130. package/dist/interactions/toast/styles.css +64 -0
  131. package/dist/interactions/tooltip/index.d.ts +9 -0
  132. package/dist/interactions/tooltip/index.d.ts.map +1 -0
  133. package/dist/interactions/tooltip/index.js +4 -0
  134. package/dist/interactions/tooltip/index.js.map +1 -0
  135. package/dist/interactions/tooltip/styles.css +65 -0
  136. package/dist/layouts/app-navigation/index.d.ts +63 -0
  137. package/dist/layouts/app-navigation/index.d.ts.map +1 -0
  138. package/dist/layouts/app-navigation/index.js +50 -0
  139. package/dist/layouts/app-navigation/index.js.map +1 -0
  140. package/dist/layouts/app-navigation/styles.css +331 -0
  141. package/dist/layouts/app-navigation.d.ts +2 -0
  142. package/dist/layouts/app-navigation.d.ts.map +1 -0
  143. package/dist/layouts/app-navigation.js +2 -0
  144. package/dist/layouts/app-navigation.js.map +1 -0
  145. package/dist/layouts/flat/styles.css +74 -0
  146. package/dist/layouts/flat.css +1 -74
  147. package/dist/layouts/grouped/styles.css +131 -0
  148. package/dist/layouts/grouped.css +1 -126
  149. package/dist/layouts/index.d.ts +1 -69
  150. package/dist/layouts/index.d.ts.map +1 -1
  151. package/dist/layouts/index.js +1 -68
  152. package/dist/layouts/index.js.map +1 -1
  153. package/dist/layouts/layout/index.d.ts +70 -0
  154. package/dist/layouts/layout/index.d.ts.map +1 -0
  155. package/dist/layouts/layout/index.js +71 -0
  156. package/dist/layouts/layout/index.js.map +1 -0
  157. package/dist/layouts/layout/styles.css +369 -0
  158. package/dist/layouts/layouts.css +1 -369
  159. package/dist/layouts/shell/index.d.ts +27 -0
  160. package/dist/layouts/shell/index.d.ts.map +1 -0
  161. package/dist/layouts/shell/index.js +24 -0
  162. package/dist/layouts/shell/index.js.map +1 -0
  163. package/dist/layouts/shell/styles.css +168 -0
  164. package/dist/layouts/shell.css +1 -168
  165. package/dist/layouts/shell.d.ts +1 -26
  166. package/dist/layouts/shell.d.ts.map +1 -1
  167. package/dist/layouts/shell.js +1 -23
  168. package/dist/layouts/shell.js.map +1 -1
  169. package/dist/patterns/board-page/index.d.ts +16 -0
  170. package/dist/patterns/board-page/index.d.ts.map +1 -0
  171. package/dist/patterns/board-page/index.js +30 -0
  172. package/dist/patterns/board-page/index.js.map +1 -0
  173. package/dist/patterns/board-page/styles.css +164 -0
  174. package/dist/patterns/board-page.d.ts +1 -13
  175. package/dist/patterns/board-page.d.ts.map +1 -1
  176. package/dist/patterns/board-page.js +1 -27
  177. package/dist/patterns/board-page.js.map +1 -1
  178. package/dist/patterns/dashboard-page/index.d.ts +15 -0
  179. package/dist/patterns/dashboard-page/index.d.ts.map +1 -0
  180. package/dist/patterns/dashboard-page/index.js +27 -0
  181. package/dist/patterns/dashboard-page/index.js.map +1 -0
  182. package/dist/patterns/dashboard-page/styles.css +169 -0
  183. package/dist/patterns/dashboard-page.d.ts +1 -12
  184. package/dist/patterns/dashboard-page.d.ts.map +1 -1
  185. package/dist/patterns/dashboard-page.js +1 -24
  186. package/dist/patterns/dashboard-page.js.map +1 -1
  187. package/dist/patterns/data-table/index.d.ts +74 -0
  188. package/dist/patterns/data-table/index.d.ts.map +1 -0
  189. package/dist/patterns/data-table/index.js +60 -0
  190. package/dist/patterns/data-table/index.js.map +1 -0
  191. package/dist/patterns/data-table/styles.css +269 -0
  192. package/dist/patterns/data-table.d.ts +1 -73
  193. package/dist/patterns/data-table.d.ts.map +1 -1
  194. package/dist/patterns/data-table.js +1 -59
  195. package/dist/patterns/data-table.js.map +1 -1
  196. package/dist/patterns/form-page/index.d.ts +8 -0
  197. package/dist/patterns/form-page/index.d.ts.map +1 -0
  198. package/dist/patterns/form-page/index.js +22 -0
  199. package/dist/patterns/form-page/index.js.map +1 -0
  200. package/dist/patterns/form-page/styles.css +237 -0
  201. package/dist/patterns/form-page.d.ts +1 -7
  202. package/dist/patterns/form-page.d.ts.map +1 -1
  203. package/dist/patterns/form-page.js +1 -21
  204. package/dist/patterns/form-page.js.map +1 -1
  205. package/dist/patterns/list-chrome/index.d.ts +80 -0
  206. package/dist/patterns/list-chrome/index.d.ts.map +1 -0
  207. package/dist/patterns/list-chrome/index.js +45 -0
  208. package/dist/patterns/list-chrome/index.js.map +1 -0
  209. package/dist/patterns/list-chrome/styles.css +245 -0
  210. package/dist/patterns/list-chrome.d.ts +1 -79
  211. package/dist/patterns/list-chrome.d.ts.map +1 -1
  212. package/dist/patterns/list-chrome.js +1 -44
  213. package/dist/patterns/list-chrome.js.map +1 -1
  214. package/dist/patterns/list-page/index.d.ts +31 -0
  215. package/dist/patterns/list-page/index.d.ts.map +1 -0
  216. package/dist/patterns/list-page/index.js +41 -0
  217. package/dist/patterns/list-page/index.js.map +1 -0
  218. package/dist/patterns/list-page/responsive.css +140 -0
  219. package/dist/patterns/list-page/styles.css +228 -0
  220. package/dist/patterns/list-page.d.ts +1 -30
  221. package/dist/patterns/list-page.d.ts.map +1 -1
  222. package/dist/patterns/list-page.js +1 -40
  223. package/dist/patterns/list-page.js.map +1 -1
  224. package/dist/patterns/modal-sheet/index.d.ts +16 -0
  225. package/dist/patterns/modal-sheet/index.d.ts.map +1 -0
  226. package/dist/patterns/modal-sheet/index.js +15 -0
  227. package/dist/patterns/modal-sheet/index.js.map +1 -0
  228. package/dist/patterns/modal-sheet/styles.css +219 -0
  229. package/dist/patterns/modal-sheet.d.ts +1 -15
  230. package/dist/patterns/modal-sheet.d.ts.map +1 -1
  231. package/dist/patterns/modal-sheet.js +1 -14
  232. package/dist/patterns/modal-sheet.js.map +1 -1
  233. package/dist/patterns/page-shell/index.d.ts +24 -0
  234. package/dist/patterns/page-shell/index.d.ts.map +1 -0
  235. package/dist/patterns/page-shell/index.js +11 -0
  236. package/dist/patterns/page-shell/index.js.map +1 -0
  237. package/dist/patterns/page-shell.d.ts +1 -23
  238. package/dist/patterns/page-shell.d.ts.map +1 -1
  239. package/dist/patterns/page-shell.js +1 -10
  240. package/dist/patterns/page-shell.js.map +1 -1
  241. package/dist/patterns/patterns.css +12 -2247
  242. package/dist/patterns/pipeline/index.d.ts +29 -0
  243. package/dist/patterns/pipeline/index.d.ts.map +1 -0
  244. package/dist/patterns/pipeline/index.js +26 -0
  245. package/dist/patterns/pipeline/index.js.map +1 -0
  246. package/dist/patterns/pipeline/styles.css +168 -0
  247. package/dist/patterns/pipeline.d.ts +1 -28
  248. package/dist/patterns/pipeline.d.ts.map +1 -1
  249. package/dist/patterns/pipeline.js +1 -25
  250. package/dist/patterns/pipeline.js.map +1 -1
  251. package/dist/patterns/record-form/index.d.ts +18 -0
  252. package/dist/patterns/record-form/index.d.ts.map +1 -0
  253. package/dist/patterns/record-form/index.js +14 -0
  254. package/dist/patterns/record-form/index.js.map +1 -0
  255. package/dist/patterns/record-form/styles.css +175 -0
  256. package/dist/patterns/record-form.d.ts +1 -17
  257. package/dist/patterns/record-form.d.ts.map +1 -1
  258. package/dist/patterns/record-form.js +1 -13
  259. package/dist/patterns/record-form.js.map +1 -1
  260. package/dist/patterns/record-page/index.d.ts +31 -0
  261. package/dist/patterns/record-page/index.d.ts.map +1 -0
  262. package/dist/patterns/record-page/index.js +29 -0
  263. package/dist/patterns/record-page/index.js.map +1 -0
  264. package/dist/patterns/record-page/styles.css +228 -0
  265. package/dist/patterns/record-page.d.ts +1 -30
  266. package/dist/patterns/record-page.d.ts.map +1 -1
  267. package/dist/patterns/record-page.js +1 -28
  268. package/dist/patterns/record-page.js.map +1 -1
  269. package/dist/patterns/workspace-page/index.d.ts +23 -0
  270. package/dist/patterns/workspace-page/index.d.ts.map +1 -0
  271. package/dist/patterns/workspace-page/index.js +26 -0
  272. package/dist/patterns/workspace-page/index.js.map +1 -0
  273. package/dist/patterns/workspace-page/styles.css +9 -0
  274. package/dist/patterns/workspace-page.d.ts +1 -22
  275. package/dist/patterns/workspace-page.d.ts.map +1 -1
  276. package/dist/patterns/workspace-page.js +1 -25
  277. package/dist/patterns/workspace-page.js.map +1 -1
  278. package/dist/primitives/actions/index.d.ts +36 -0
  279. package/dist/primitives/actions/index.d.ts.map +1 -0
  280. package/dist/primitives/actions/index.js +10 -0
  281. package/dist/primitives/actions/index.js.map +1 -0
  282. package/dist/primitives/actions/styles.css +149 -0
  283. package/dist/primitives/actions.d.ts +1 -35
  284. package/dist/primitives/actions.d.ts.map +1 -1
  285. package/dist/primitives/actions.js +1 -9
  286. package/dist/primitives/actions.js.map +1 -1
  287. package/dist/primitives/feedback/index.d.ts +19 -0
  288. package/dist/primitives/feedback/index.d.ts.map +1 -0
  289. package/dist/primitives/feedback/index.js +21 -0
  290. package/dist/primitives/feedback/index.js.map +1 -0
  291. package/dist/primitives/feedback/styles.css +117 -0
  292. package/dist/primitives/feedback.d.ts +1 -18
  293. package/dist/primitives/feedback.d.ts.map +1 -1
  294. package/dist/primitives/feedback.js +1 -22
  295. package/dist/primitives/feedback.js.map +1 -1
  296. package/dist/primitives/field/index.d.ts +35 -0
  297. package/dist/primitives/field/index.d.ts.map +1 -0
  298. package/dist/primitives/field/index.js +34 -0
  299. package/dist/primitives/field/index.js.map +1 -0
  300. package/dist/primitives/field/native-control.d.ts +4 -0
  301. package/dist/primitives/field/native-control.d.ts.map +1 -0
  302. package/dist/primitives/field/native-control.js +12 -0
  303. package/dist/primitives/field/native-control.js.map +1 -0
  304. package/dist/primitives/field/styles.css +160 -0
  305. package/dist/primitives/field.d.ts +1 -34
  306. package/dist/primitives/field.d.ts.map +1 -1
  307. package/dist/primitives/field.js +1 -41
  308. package/dist/primitives/field.js.map +1 -1
  309. package/dist/primitives/navigation/index.d.ts +36 -0
  310. package/dist/primitives/navigation/index.d.ts.map +1 -0
  311. package/dist/primitives/navigation/index.js +19 -0
  312. package/dist/primitives/navigation/index.js.map +1 -0
  313. package/dist/primitives/{navigation.css → navigation/styles.css} +51 -0
  314. package/dist/primitives/navigation.d.ts +1 -25
  315. package/dist/primitives/navigation.d.ts.map +1 -1
  316. package/dist/primitives/navigation.js +1 -15
  317. package/dist/primitives/navigation.js.map +1 -1
  318. package/dist/primitives/primitives.css +4 -570
  319. package/dist/primitives/progress/index.d.ts +10 -0
  320. package/dist/primitives/progress/index.d.ts.map +1 -0
  321. package/dist/primitives/progress/index.js +13 -0
  322. package/dist/primitives/progress/index.js.map +1 -0
  323. package/dist/primitives/progress.d.ts +1 -9
  324. package/dist/primitives/progress.d.ts.map +1 -1
  325. package/dist/primitives/progress.js +1 -12
  326. package/dist/primitives/progress.js.map +1 -1
  327. package/dist/primitives/status/index.d.ts +27 -0
  328. package/dist/primitives/status/index.d.ts.map +1 -0
  329. package/dist/primitives/status/index.js +16 -0
  330. package/dist/primitives/status/index.js.map +1 -0
  331. package/dist/primitives/status/styles.css +114 -0
  332. package/dist/primitives/status.d.ts +1 -26
  333. package/dist/primitives/status.d.ts.map +1 -1
  334. package/dist/primitives/status.js +1 -15
  335. package/dist/primitives/status.js.map +1 -1
  336. package/dist/record/activity/index.d.ts +26 -0
  337. package/dist/record/activity/index.d.ts.map +1 -0
  338. package/dist/record/activity/index.js +33 -0
  339. package/dist/record/activity/index.js.map +1 -0
  340. package/dist/record/activity/styles.css +38 -0
  341. package/dist/record/composition/index.d.ts +33 -0
  342. package/dist/record/composition/index.d.ts.map +1 -0
  343. package/dist/record/composition/index.js +10 -0
  344. package/dist/record/composition/index.js.map +1 -0
  345. package/dist/record/composition/styles.css +30 -0
  346. package/dist/record/display/index.d.ts +37 -0
  347. package/dist/record/display/index.d.ts.map +1 -0
  348. package/dist/record/display/index.js +23 -0
  349. package/dist/record/display/index.js.map +1 -0
  350. package/dist/record/display/styles.css +63 -0
  351. package/dist/record/formatted-values/index.d.ts +19 -0
  352. package/dist/record/formatted-values/index.d.ts.map +1 -0
  353. package/dist/record/formatted-values/index.js +21 -0
  354. package/dist/record/formatted-values/index.js.map +1 -0
  355. package/dist/record/formatted-values/styles.css +8 -0
  356. package/dist/record/media/index.d.ts +31 -0
  357. package/dist/record/media/index.d.ts.map +1 -0
  358. package/dist/record/media/index.js +19 -0
  359. package/dist/record/media/index.js.map +1 -0
  360. package/dist/record/media/styles.css +38 -0
  361. package/dist/runtime/auto.d.ts +2 -0
  362. package/dist/runtime/auto.d.ts.map +1 -0
  363. package/dist/runtime/auto.js +5 -0
  364. package/dist/runtime/auto.js.map +1 -0
  365. package/dist/runtime/index.d.ts +9 -0
  366. package/dist/runtime/index.d.ts.map +1 -0
  367. package/dist/runtime/index.js +369 -0
  368. package/dist/runtime/index.js.map +1 -0
  369. package/dist/styles.css +47 -8
  370. package/package.json +9 -2
  371. /package/dist/primitives/{progress.css → progress/styles.css} +0 -0
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ export const HOOKS = ['badge', 'tag', 'tag-remove', 'count-badge', 'avatar', 'code'];
3
+ export const Badge = (props) => (_jsx("span", { "data-ui": "badge", "data-tone": props.tone ?? 'neutral', "data-value": props.value ?? '', children: props.label }));
4
+ export const Tag = (props) => (_jsxs("span", { "data-ui": "tag", children: [props.label, !!props.removeHref && (_jsx("a", { "data-ui": "tag-remove", href: props.removeHref, "aria-label": props.removeLabel ?? `Remove ${props.label}`, children: "\u00D7" }))] }));
5
+ export const CountBadge = (props) => (_jsx("span", { "data-ui": "count-badge", role: "status", "aria-label": props.label, children: String(props.count) }));
6
+ export const initials = (name) => {
7
+ const parts = name.trim().split(/\s+/).filter(Boolean);
8
+ if (!parts.length)
9
+ return '?';
10
+ const first = parts.length > 1 ? parts[parts.length - 1] : parts[0];
11
+ const second = parts.length > 2 ? parts[parts.length - 2] : '';
12
+ return (second.slice(0, 1) + first.slice(0, 1)).toLocaleUpperCase('vi');
13
+ };
14
+ export const Avatar = (props) => (_jsx("span", { "data-ui": "avatar", "data-size": props.size ?? 'default', title: props.name, "aria-hidden": "true", children: initials(props.name) }));
15
+ export const Code = (props) => (_jsx("code", { "data-ui": "code", "data-context": props.context ?? null, children: props.value }));
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/primitives/status/index.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAA;AAI7F,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAqD,EAAkB,EAAE,CAAC,CAC9F,0BAAc,OAAO,eAAY,KAAK,CAAC,IAAI,IAAI,SAAS,gBAAc,KAAK,CAAC,KAAK,IAAI,EAAE,YACpF,KAAK,CAAC,KAAK,GACP,CACR,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,KAInB,EAAkB,EAAE,CAAC,CACpB,2BAAc,KAAK,aAChB,KAAK,CAAC,KAAK,EACX,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CACrB,uBACU,YAAY,EACpB,IAAI,EAAE,KAAK,CAAC,UAAU,gBACV,KAAK,CAAC,WAAW,IAAI,UAAU,KAAK,CAAC,KAAK,EAAE,uBAGtD,CACL,IACI,CACR,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAuC,EAAkB,EAAE,CAAC,CACrF,0BAAc,aAAa,EAAC,IAAI,EAAC,QAAQ,gBAAa,KAAK,CAAC,KAAK,YAC9D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GACf,CACR,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtD,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,GAAG,CAAA;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAA;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACzE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAA6D,EAAkB,EAAE,CAAC,CACvG,0BAAc,QAAQ,eAAY,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,iBAAc,MAAM,YAC7F,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAChB,CACR,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAiD,EAAkB,EAAE,CAAC,CACzF,0BAAc,MAAM,kBAAe,KAAK,CAAC,OAAO,IAAI,IAAI,YACrD,KAAK,CAAC,KAAK,GACP,CACR,CAAA"}
@@ -0,0 +1,114 @@
1
+ @layer ket.app {
2
+ :where([data-kv-design-system]) [data-ui="badge"] {
3
+ display: inline-flex;
4
+ min-height: 1.4rem;
5
+ align-items: center;
6
+ gap: 0.3125rem;
7
+ padding: 0.125rem 0.4375rem;
8
+ border: 1px solid transparent;
9
+ border-radius: var(--kv-radius-sm);
10
+ background: color-mix(in srgb, var(--kv-text-main) 7%, transparent);
11
+ color: var(--kv-text-secondary);
12
+ font-size: var(--kv-text-xs);
13
+ font-weight: var(--kv-weight-medium);
14
+ max-width: 100%;
15
+ white-space: normal;
16
+ overflow-wrap: anywhere;
17
+ }
18
+
19
+ :where([data-kv-design-system]) [data-ui="badge"][data-tone="info"] {
20
+ background: var(--kv-color-info-soft);
21
+ color: var(--kv-color-info);
22
+ }
23
+
24
+ :where([data-kv-design-system]) [data-ui="badge"][data-tone="positive"] {
25
+ background: var(--kv-color-positive-soft);
26
+ color: var(--kv-color-positive);
27
+ }
28
+
29
+ :where([data-kv-design-system]) [data-ui="badge"][data-tone="warning"] {
30
+ background: var(--kv-color-warning-soft);
31
+ color: var(--kv-color-warning);
32
+ }
33
+
34
+ :where([data-kv-design-system]) [data-ui="badge"][data-tone="danger"] {
35
+ background: var(--kv-color-danger-soft);
36
+ color: var(--kv-color-danger);
37
+ }
38
+
39
+ :where([data-kv-design-system]) [data-ui="tag"] {
40
+ display: inline-flex;
41
+ min-height: 1.6rem;
42
+ align-items: center;
43
+ gap: var(--kv-space-1);
44
+ padding-inline: var(--kv-space-2);
45
+ border: 1px solid var(--kv-color-line);
46
+ border-radius: var(--kv-radius-sm);
47
+ background: var(--kv-color-surface);
48
+ font-size: var(--kv-text-xs);
49
+ font-weight: 650;
50
+ }
51
+
52
+ :where([data-kv-design-system]) [data-ui="tag-remove"] {
53
+ display: grid;
54
+ width: 1rem;
55
+ height: 1rem;
56
+ place-items: center;
57
+ border-radius: var(--kv-radius-xs);
58
+ color: var(--kv-color-ink-muted);
59
+ text-decoration: none;
60
+ }
61
+
62
+ :where([data-kv-design-system]) [data-ui="tag-remove"]:hover {
63
+ background: var(--kv-color-danger-soft);
64
+ color: var(--kv-color-danger);
65
+ }
66
+
67
+ :where([data-kv-design-system]) [data-ui="count-badge"] {
68
+ display: inline-grid;
69
+ min-width: 1.4rem;
70
+ height: 1.4rem;
71
+ place-items: center;
72
+ padding-inline: var(--kv-space-1);
73
+ border-radius: var(--kv-radius-full);
74
+ background: var(--kv-color-accent-soft);
75
+ color: var(--kv-color-accent);
76
+ font-family: var(--kv-font-mono);
77
+ font-size: var(--kv-text-xs);
78
+ font-weight: 800;
79
+ }
80
+
81
+ :where([data-kv-design-system]) [data-ui="avatar"] {
82
+ display: inline-grid;
83
+ width: 2rem;
84
+ height: 2rem;
85
+ place-items: center;
86
+ border: 1px solid var(--kv-color-line-strong);
87
+ border-radius: 50%;
88
+ background: var(--kv-color-accent-soft);
89
+ color: var(--kv-color-accent);
90
+ font-size: var(--kv-text-xs);
91
+ font-weight: 800;
92
+ }
93
+
94
+ :where([data-kv-design-system]) [data-ui="avatar"][data-size="small"] {
95
+ width: 1.5rem;
96
+ height: 1.5rem;
97
+ }
98
+
99
+ :where([data-kv-design-system]) [data-ui="avatar"][data-size="large"] {
100
+ width: 3rem;
101
+ height: 3rem;
102
+ font-size: var(--kv-text-sm);
103
+ }
104
+
105
+ :where([data-kv-design-system]) [data-ui="code"] {
106
+ padding: 0.15rem 0.35rem;
107
+ border-radius: var(--kv-radius-xs);
108
+ background: var(--kv-color-surface-subtle);
109
+ color: var(--kv-color-ink-secondary);
110
+ font-family: var(--kv-font-mono);
111
+ font-size: 0.85em;
112
+ overflow-wrap: anywhere;
113
+ }
114
+ }
@@ -1,27 +1,2 @@
1
- import type { TemplateResult } from '@ketvietlab/ketjs-view';
2
- export declare const HOOKS: readonly ['badge', 'tag', 'tag-remove', 'count-badge', 'avatar', 'code'];
3
- export type Tone = 'neutral' | 'info' | 'positive' | 'warning' | 'danger';
4
- export declare const Badge: (props: {
5
- label: string;
6
- tone?: Tone;
7
- value?: string;
8
- }) => TemplateResult;
9
- export declare const Tag: (props: {
10
- label: string;
11
- removeHref?: string | null;
12
- removeLabel?: string | null;
13
- }) => TemplateResult;
14
- export declare const CountBadge: (props: {
15
- count: number;
16
- label: string;
17
- }) => TemplateResult;
18
- export declare const initials: (name: string) => string;
19
- export declare const Avatar: (props: {
20
- name: string;
21
- size?: 'small' | 'default' | 'large';
22
- }) => TemplateResult;
23
- export declare const Code: (props: {
24
- value: string;
25
- context?: string | null;
26
- }) => TemplateResult;
1
+ export * from './status/index.tsx';
27
2
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/primitives/status.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,eAAO,MAAM,KAAK,YAAI,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAA;AAE7F,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEzE,eAAO,MAAM,KAAK,UAAW;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,cAI7E,CAAA;AAED,eAAO,MAAM,GAAG,UAAW;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B,KAAG,cAaH,CAAA;AAED,eAAO,MAAM,UAAU,UAAW;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,cAIpE,CAAA;AAED,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,MAMvC,CAAA;AAED,eAAO,MAAM,MAAM,UAAW;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;CAAE,KAAG,cAItF,CAAA;AAED,eAAO,MAAM,IAAI,UAAW;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,KAAG,cAIxE,CAAA"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../../packages/design-system/src/primitives/status.tsx"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
@@ -1,16 +1,2 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
- export const HOOKS = ['badge', 'tag', 'tag-remove', 'count-badge', 'avatar', 'code'];
3
- export const Badge = (props) => (_jsx("span", { "data-ui": "badge", "data-tone": props.tone ?? 'neutral', "data-value": props.value ?? '', children: props.label }));
4
- export const Tag = (props) => (_jsxs("span", { "data-ui": "tag", children: [props.label, !!props.removeHref && (_jsx("a", { "data-ui": "tag-remove", href: props.removeHref, "aria-label": props.removeLabel ?? `Remove ${props.label}`, children: "\u00D7" }))] }));
5
- export const CountBadge = (props) => (_jsx("span", { "data-ui": "count-badge", role: "status", "aria-label": props.label, children: String(props.count) }));
6
- export const initials = (name) => {
7
- const parts = name.trim().split(/\s+/).filter(Boolean);
8
- if (!parts.length)
9
- return '?';
10
- const first = parts.length > 1 ? parts[parts.length - 1] : parts[0];
11
- const second = parts.length > 2 ? parts[parts.length - 2] : '';
12
- return (second.slice(0, 1) + first.slice(0, 1)).toLocaleUpperCase('vi');
13
- };
14
- export const Avatar = (props) => (_jsx("span", { "data-ui": "avatar", "data-size": props.size ?? 'default', title: props.name, "aria-hidden": "true", children: initials(props.name) }));
15
- export const Code = (props) => (_jsx("code", { "data-ui": "code", "data-context": props.context ?? null, children: props.value }));
1
+ export * from './status/index.js';
16
2
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/primitives/status.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAA;AAI7F,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAqD,EAAkB,EAAE,CAAC,CAC9F,0BAAc,OAAO,eAAY,KAAK,CAAC,IAAI,IAAI,SAAS,gBAAc,KAAK,CAAC,KAAK,IAAI,EAAE,YACpF,KAAK,CAAC,KAAK,GACP,CACR,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,KAInB,EAAkB,EAAE,CAAC,CACpB,2BAAc,KAAK,aAChB,KAAK,CAAC,KAAK,EACX,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CACrB,uBACU,YAAY,EACpB,IAAI,EAAE,KAAK,CAAC,UAAU,gBACV,KAAK,CAAC,WAAW,IAAI,UAAU,KAAK,CAAC,KAAK,EAAE,uBAGtD,CACL,IACI,CACR,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAuC,EAAkB,EAAE,CAAC,CACrF,0BAAc,aAAa,EAAC,IAAI,EAAC,QAAQ,gBAAa,KAAK,CAAC,KAAK,YAC9D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GACf,CACR,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtD,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,GAAG,CAAA;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAA;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACzE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAA6D,EAAkB,EAAE,CAAC,CACvG,0BAAc,QAAQ,eAAY,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,iBAAc,MAAM,YAC7F,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAChB,CACR,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAiD,EAAkB,EAAE,CAAC,CACzF,0BAAc,MAAM,kBAAe,KAAK,CAAC,OAAO,IAAI,IAAI,YACrD,KAAK,CAAC,KAAK,GACP,CACR,CAAA"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../../../packages/design-system/src/primitives/status.tsx"],"names":[],"mappings":"AAAA,cAAc,mBAAoB,CAAA"}
@@ -0,0 +1,26 @@
1
+ import type { JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
2
+ export declare const HOOKS: readonly ['activity-timeline', 'activity-item', 'activity-marker', 'audit-log', 'audit-item'];
3
+ export type ActivityItem = {
4
+ id: string;
5
+ actor: string;
6
+ actorDetail?: string;
7
+ action: JSXChild;
8
+ datetime: string;
9
+ timeLabel: string;
10
+ detail?: JSXChild;
11
+ redacted?: boolean;
12
+ };
13
+ type FeedProps = {
14
+ label: string;
15
+ items: readonly ActivityItem[];
16
+ loading?: boolean;
17
+ loadingLabel?: string;
18
+ emptyTitle?: string;
19
+ emptyMessage?: string;
20
+ error?: string | null;
21
+ redactedLabel?: string;
22
+ };
23
+ export declare const ActivityTimeline: (props: FeedProps) => TemplateResult;
24
+ export declare const AuditLog: (props: FeedProps) => TemplateResult;
25
+ export {};
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/record/activity/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAItE,eAAO,MAAM,KAAK,YAChB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,CACJ,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,SAAS,YAAY,EAAE,CAAA;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAeD,eAAO,MAAM,gBAAgB,UAAW,SAAS,KAAG,cAsBnD,CAAA;AAED,eAAO,MAAM,QAAQ,UAAW,SAAS,KAAG,cAkB3C,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ import { each } from '@ketvietlab/ketjs-view';
3
+ import { EmptyState, LoadingState, Notice } from '../../primitives/feedback/index.js';
4
+ import { Person } from '../display/index.js';
5
+ export const HOOKS = [
6
+ 'activity-timeline',
7
+ 'activity-item',
8
+ 'activity-marker',
9
+ 'audit-log',
10
+ 'audit-item',
11
+ ];
12
+ const state = (props) => {
13
+ if (props.loading)
14
+ return _jsx(LoadingState, { label: props.loadingLabel ?? 'Loading activity' });
15
+ if (props.error)
16
+ return _jsx(Notice, { title: "Activity unavailable", message: props.error, tone: "danger" });
17
+ if (!props.items.length)
18
+ return (_jsx(EmptyState, { title: props.emptyTitle ?? 'No activity', message: props.emptyMessage ?? 'Nothing has happened yet.' }));
19
+ return null;
20
+ };
21
+ export const ActivityTimeline = (props) => {
22
+ const placeholder = state(props);
23
+ if (placeholder)
24
+ return placeholder;
25
+ return (_jsx("ol", { "data-ui": "activity-timeline", "aria-label": props.label, children: each(props.items, (item) => item.id, (item) => (_jsxs("li", { "data-ui": "activity-item", children: [_jsx("span", { "data-ui": "activity-marker", "aria-hidden": "true" }), _jsxs("div", { children: [_jsx(Person, { name: item.actor, detail: item.actorDetail, size: "small" }), _jsx("p", { children: item.redacted ? (props.redactedLabel ?? 'Details redacted') : item.action }), item.detail !== undefined && !item.redacted && _jsx("div", { children: item.detail }), _jsx("time", { datetime: item.datetime, children: item.timeLabel })] })] }))) }));
26
+ };
27
+ export const AuditLog = (props) => {
28
+ const placeholder = state(props);
29
+ if (placeholder)
30
+ return placeholder;
31
+ return (_jsx("ol", { "data-ui": "audit-log", "aria-label": props.label, children: each(props.items, (item) => item.id, (item) => (_jsxs("li", { "data-ui": "audit-item", children: [_jsx("time", { datetime: item.datetime, children: item.timeLabel }), _jsx("strong", { children: item.actor }), _jsx("span", { children: item.redacted ? (props.redactedLabel ?? 'Change redacted') : item.action })] }))) }));
32
+ };
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/record/activity/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oCAAqC,CAAA;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAsB,CAAA;AAE7C,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,mBAAmB;IACnB,eAAe;IACf,iBAAiB;IACjB,WAAW;IACX,YAAY;CACJ,CAAA;AAwBV,MAAM,KAAK,GAAG,CAAC,KAAgB,EAAyB,EAAE;IACxD,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,KAAC,YAAY,IAAC,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,kBAAkB,GAAI,CAAA;IAC3F,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,KAAC,MAAM,IAAC,KAAK,EAAC,sBAAsB,EAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAC,QAAQ,GAAG,CAAA;IACnG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;QACrB,OAAO,CACL,KAAC,UAAU,IACT,KAAK,EAAE,KAAK,CAAC,UAAU,IAAI,aAAa,EACxC,OAAO,EAAE,KAAK,CAAC,YAAY,IAAI,2BAA2B,GAC1D,CACH,CAAA;IACH,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAgB,EAAkB,EAAE;IACnE,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IAChC,IAAI,WAAW;QAAE,OAAO,WAAW,CAAA;IACnC,OAAO,CACL,wBAAY,mBAAmB,gBAAa,KAAK,CAAC,KAAK,YACpD,IAAI,CACH,KAAK,CAAC,KAAK,EACX,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EACjB,CAAC,IAAI,EAAE,EAAE,CAAC,CACR,yBAAY,eAAe,aACzB,0BAAc,iBAAiB,iBAAa,MAAM,GAAG,EACrD,0BACE,KAAC,MAAM,IAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAC,OAAO,GAAG,EACnE,sBAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAK,EACjF,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,wBAAM,IAAI,CAAC,MAAM,GAAO,EACxE,eAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ,YAAG,IAAI,CAAC,SAAS,GAAQ,IAClD,IACH,CACN,CACF,GACE,CACN,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAgB,EAAkB,EAAE;IAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IAChC,IAAI,WAAW;QAAE,OAAO,WAAW,CAAA;IACnC,OAAO,CACL,wBAAY,WAAW,gBAAa,KAAK,CAAC,KAAK,YAC5C,IAAI,CACH,KAAK,CAAC,KAAK,EACX,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EACjB,CAAC,IAAI,EAAE,EAAE,CAAC,CACR,yBAAY,YAAY,aACtB,eAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ,YAAG,IAAI,CAAC,SAAS,GAAQ,EACtD,2BAAS,IAAI,CAAC,KAAK,GAAU,EAC7B,yBAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAQ,IACpF,CACN,CACF,GACE,CACN,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,38 @@
1
+ @layer ket.app {
2
+ :where([data-kv-design-system]) [data-ui="activity-timeline"],
3
+ :where([data-kv-design-system]) [data-ui="audit-log"] {
4
+ display: grid;
5
+ gap: var(--kv-space-3);
6
+ margin: 0;
7
+ padding: 0;
8
+ list-style: none;
9
+ }
10
+
11
+ :where([data-kv-design-system]) [data-ui="activity-item"] {
12
+ display: grid;
13
+ grid-template-columns: auto minmax(0, 1fr);
14
+ gap: var(--kv-space-3);
15
+ }
16
+
17
+ :where([data-kv-design-system]) [data-ui="activity-marker"] {
18
+ width: 0.625rem;
19
+ height: 0.625rem;
20
+ margin-top: var(--kv-space-2);
21
+ border-radius: 50%;
22
+ background: var(--kv-color-accent);
23
+ }
24
+
25
+ :where([data-kv-design-system]) [data-ui="activity-item"] :is(p, time),
26
+ :where([data-kv-design-system]) [data-ui="audit-item"] :is(time, span) {
27
+ color: var(--kv-text-secondary);
28
+ font-size: var(--kv-text-sm);
29
+ }
30
+
31
+ :where([data-kv-design-system]) [data-ui="audit-item"] {
32
+ display: grid;
33
+ grid-template-columns: minmax(8rem, auto) minmax(8rem, auto) minmax(0, 1fr);
34
+ gap: var(--kv-space-3);
35
+ padding-block: var(--kv-space-2);
36
+ border-bottom: 1px solid var(--kv-panel-border);
37
+ }
38
+ }
@@ -0,0 +1,33 @@
1
+ import type { JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
2
+ import type { KeyValueProps, PersonProps } from '../display/index.tsx';
3
+ import type { Tone } from '../../primitives/status/index.tsx';
4
+ export declare const HOOKS: readonly ['record-summary', 'record-summary-main', 'record-actions', 'record-rail'];
5
+ export type RecordSummaryProps = {
6
+ title: JSXChild;
7
+ subtitle?: JSXChild;
8
+ person?: PersonProps;
9
+ status?: {
10
+ label: string;
11
+ tone?: Tone;
12
+ detail?: string;
13
+ };
14
+ facts?: readonly (KeyValueProps & {
15
+ id: string;
16
+ })[];
17
+ };
18
+ export declare const RecordSummary: (props: RecordSummaryProps) => TemplateResult;
19
+ export declare const RecordActions: (props: {
20
+ label?: string;
21
+ actions: readonly JSXChild[];
22
+ }) => TemplateResult;
23
+ export type RecordRailSection = {
24
+ id: string;
25
+ title: string;
26
+ body: JSXChild;
27
+ actions?: JSXChild;
28
+ };
29
+ export declare const RecordRail: (props: {
30
+ label?: string;
31
+ sections: readonly RecordRailSection[];
32
+ }) => TemplateResult;
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/record/composition/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAItE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAA;AAE7D,eAAO,MAAM,KAAK,YAAI,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,aAAa,CAAU,CAAA;AAExG,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,QAAQ,CAAA;IACf,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACxD,KAAK,CAAC,EAAE,SAAS,CAAC,aAAa,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAA;CACpD,CAAA;AAED,eAAO,MAAM,aAAa,UAAW,kBAAkB,KAAG,cAUzD,CAAA;AAED,eAAO,MAAM,aAAa,UAAW;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAA;CAAE,KAAG,cAIvF,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAA;AACjG,eAAO,MAAM,UAAU,UAAW;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACvC,KAAG,cAUH,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ import { each } from '@ketvietlab/ketjs-view';
3
+ import { ActionGroup } from '../../primitives/actions/index.js';
4
+ import { Section } from '../../layouts/layout/index.js';
5
+ import { DescriptionList, Person, Status } from '../display/index.js';
6
+ export const HOOKS = ['record-summary', 'record-summary-main', 'record-actions', 'record-rail'];
7
+ export const RecordSummary = (props) => (_jsxs("header", { "data-ui": "record-summary", children: [_jsxs("div", { "data-ui": "record-summary-main", children: [_jsx("h2", { children: props.title }), props.subtitle !== undefined && _jsx("p", { children: props.subtitle }), props.person && _jsx(Person, { ...props.person })] }), props.status && _jsx(Status, { ...props.status }), props.facts && _jsx(DescriptionList, { items: props.facts, columns: 3 })] }));
8
+ export const RecordActions = (props) => (_jsx("nav", { "data-ui": "record-actions", "aria-label": props.label ?? 'Record actions', children: _jsx(ActionGroup, { actions: props.actions }) }));
9
+ export const RecordRail = (props) => (_jsx("aside", { "data-ui": "record-rail", "aria-label": props.label ?? 'Record context', children: each(props.sections, (section) => section.id, (section) => (_jsx(Section, { title: section.title, body: section.body, actions: section.actions }))) }));
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/record/composition/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAoC,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAAgC,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAsB,CAAA;AAItE,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,aAAa,CAAU,CAAA;AAUxG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAkB,EAAE,CAAC,CAC1E,6BAAgB,gBAAgB,aAC9B,0BAAa,qBAAqB,aAChC,uBAAK,KAAK,CAAC,KAAK,GAAM,EACrB,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,sBAAI,KAAK,CAAC,QAAQ,GAAK,EACvD,KAAK,CAAC,MAAM,IAAI,KAAC,MAAM,OAAK,KAAK,CAAC,MAAM,GAAI,IACzC,EACL,KAAK,CAAC,MAAM,IAAI,KAAC,MAAM,OAAK,KAAK,CAAC,MAAM,GAAI,EAC5C,KAAK,CAAC,KAAK,IAAI,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,GAAI,IAC5D,CACV,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAuD,EAAkB,EAAE,CAAC,CACxG,yBAAa,gBAAgB,gBAAa,KAAK,CAAC,KAAK,IAAI,gBAAgB,YACvE,KAAC,WAAW,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,GACnC,CACP,CAAA;AAGD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAG1B,EAAkB,EAAE,CAAC,CACpB,2BAAe,aAAa,gBAAa,KAAK,CAAC,KAAK,IAAI,gBAAgB,YACrE,IAAI,CACH,KAAK,CAAC,QAAQ,EACd,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EACvB,CAAC,OAAO,EAAE,EAAE,CAAC,CACX,KAAC,OAAO,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,GAAI,CAChF,CACF,GACK,CACT,CAAA"}
@@ -0,0 +1,30 @@
1
+ @layer ket.app {
2
+ :where([data-kv-design-system]) [data-ui="record-summary"] {
3
+ display: grid;
4
+ grid-template-columns: minmax(0, 1fr) auto;
5
+ align-items: start;
6
+ gap: var(--kv-space-4);
7
+ }
8
+
9
+ :where([data-kv-design-system]) [data-ui="record-summary-main"] {
10
+ display: grid;
11
+ gap: var(--kv-space-1);
12
+ }
13
+
14
+ :where([data-kv-design-system]) [data-ui="record-summary-main"] :is(h2, p) {
15
+ margin: 0;
16
+ }
17
+
18
+ :where([data-kv-design-system]) [data-ui="record-summary"] > [data-ui="description-list"] {
19
+ grid-column: 1 / -1;
20
+ }
21
+
22
+ :where([data-kv-design-system]) [data-ui="record-actions"] {
23
+ display: flex;
24
+ justify-content: flex-end;
25
+ }
26
+
27
+ :where([data-kv-design-system]) [data-ui="record-rail"] {
28
+ min-width: 0;
29
+ }
30
+ }
@@ -0,0 +1,37 @@
1
+ import type { JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
2
+ import type { Tone } from '../../primitives/status/index.tsx';
3
+ export declare const HOOKS: readonly ['description-list', 'key-value', 'key-value-label', 'key-value-value', 'person', 'person-body', 'avatar-group', 'status'];
4
+ export type KeyValueProps = {
5
+ label: JSXChild;
6
+ value: JSXChild;
7
+ emptyLabel?: string;
8
+ };
9
+ export declare const KeyValue: (props: KeyValueProps) => TemplateResult;
10
+ export declare const DescriptionList: (props: {
11
+ label?: string;
12
+ items: readonly (KeyValueProps & {
13
+ id: string;
14
+ })[];
15
+ columns?: 1 | 2 | 3;
16
+ }) => TemplateResult;
17
+ export type PersonProps = {
18
+ name: string;
19
+ detail?: JSXChild;
20
+ href?: string;
21
+ size?: 'small' | 'default' | 'large';
22
+ };
23
+ export declare const Person: (props: PersonProps) => TemplateResult;
24
+ export declare const AvatarGroup: (props: {
25
+ label: string;
26
+ people: readonly {
27
+ id: string;
28
+ name: string;
29
+ }[];
30
+ max?: number;
31
+ }) => TemplateResult;
32
+ export declare const Status: (props: {
33
+ label: string;
34
+ tone?: Tone;
35
+ detail?: string;
36
+ }) => TemplateResult;
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/record/display/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAA;AAE7D,eAAO,MAAM,KAAK,YAChB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,cAAc,EACd,QAAQ,CACA,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AACrF,eAAO,MAAM,QAAQ,UAAW,aAAa,KAAG,cAK/C,CAAA;AAED,eAAO,MAAM,eAAe,UAAW;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,SAAS,CAAC,aAAa,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAA;IAClD,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CACpB,KAAG,cAUH,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAA;CACrC,CAAA;AACD,eAAO,MAAM,MAAM,UAAW,WAAW,KAAG,cAQ3C,CAAA;AAED,eAAO,MAAM,WAAW,UAAW;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,KAAG,cAmBH,CAAA;AAED,eAAO,MAAM,MAAM,UAAW;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,cAI/E,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ import { each } from '@ketvietlab/ketjs-view';
3
+ import { Avatar, Badge } from '../../primitives/status/index.js';
4
+ export const HOOKS = [
5
+ 'description-list',
6
+ 'key-value',
7
+ 'key-value-label',
8
+ 'key-value-value',
9
+ 'person',
10
+ 'person-body',
11
+ 'avatar-group',
12
+ 'status',
13
+ ];
14
+ export const KeyValue = (props) => (_jsxs("div", { "data-ui": "key-value", children: [_jsx("dt", { "data-ui": "key-value-label", children: props.label }), _jsx("dd", { "data-ui": "key-value-value", children: props.value ?? props.emptyLabel ?? '—' })] }));
15
+ export const DescriptionList = (props) => (_jsx("dl", { "data-ui": "description-list", "aria-label": props.label, "data-columns": String(props.columns ?? 2), children: each(props.items, (item) => item.id, (item) => (_jsx(KeyValue, { ...item }))) }));
16
+ export const Person = (props) => (_jsxs("span", { "data-ui": "person", children: [_jsx(Avatar, { name: props.name, size: props.size }), _jsxs("span", { "data-ui": "person-body", children: [props.href ? _jsx("a", { href: props.href, children: props.name }) : _jsx("strong", { children: props.name }), props.detail !== undefined && _jsx("small", { children: props.detail })] })] }));
17
+ export const AvatarGroup = (props) => {
18
+ const visible = props.people.slice(0, props.max ?? 4);
19
+ const remaining = props.people.length - visible.length;
20
+ return (_jsxs("span", { "data-ui": "avatar-group", role: "group", "aria-label": props.label, children: [each(visible, (person) => person.id, (person) => (_jsx(Avatar, { name: person.name }))), remaining > 0 && (_jsxs("span", { role: "img", "aria-label": `${remaining} more people`, title: `${remaining} more people`, children: ["+", String(remaining)] }))] }));
21
+ };
22
+ export const Status = (props) => (_jsx("span", { "data-ui": "status", title: props.detail, children: _jsx(Badge, { label: props.label, tone: props.tone }) }));
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/record/display/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAE7C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kCAAmC,CAAA;AAGjE,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,kBAAkB;IAClB,WAAW;IACX,iBAAiB;IACjB,iBAAiB;IACjB,QAAQ;IACR,aAAa;IACb,cAAc;IACd,QAAQ;CACA,CAAA;AAGV,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAkB,EAAE,CAAC,CAChE,0BAAa,WAAW,aACtB,wBAAY,iBAAiB,YAAE,KAAK,CAAC,KAAK,GAAM,EAChD,wBAAY,iBAAiB,YAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,IAAI,GAAG,GAAM,IACvE,CACP,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAI/B,EAAkB,EAAE,CAAC,CACpB,wBAAY,kBAAkB,gBAAa,KAAK,CAAC,KAAK,kBAAgB,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,YAC7F,IAAI,CACH,KAAK,CAAC,KAAK,EACX,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EACjB,CAAC,IAAI,EAAE,EAAE,CAAC,CACR,KAAC,QAAQ,OAAK,IAAI,GAAI,CACvB,CACF,GACE,CACN,CAAA;AAQD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAkB,EAAkB,EAAE,CAAC,CAC5D,2BAAc,QAAQ,aACpB,KAAC,MAAM,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI,EAC9C,2BAAc,aAAa,aACxB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAG,IAAI,EAAE,KAAK,CAAC,IAAI,YAAG,KAAK,CAAC,IAAI,GAAK,CAAC,CAAC,CAAC,2BAAS,KAAK,CAAC,IAAI,GAAU,EAClF,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,0BAAQ,KAAK,CAAC,MAAM,GAAS,IACvD,IACF,CACR,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAI3B,EAAkB,EAAE;IACnB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IACtD,OAAO,CACL,2BAAc,cAAc,EAAC,IAAI,EAAC,OAAO,gBAAa,KAAK,CAAC,KAAK,aAC9D,IAAI,CACH,OAAO,EACP,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EACrB,CAAC,MAAM,EAAE,EAAE,CAAC,CACV,KAAC,MAAM,IAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAI,CAC9B,CACF,EACA,SAAS,GAAG,CAAC,IAAI,CAChB,gBAAM,IAAI,EAAC,KAAK,gBAAa,GAAG,SAAS,cAAc,EAAE,KAAK,EAAE,GAAG,SAAS,cAAc,kBACtF,MAAM,CAAC,SAAS,CAAC,IACd,CACR,IACI,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAsD,EAAkB,EAAE,CAAC,CAChG,0BAAc,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,MAAM,YACxC,KAAC,KAAK,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI,GAC1C,CACR,CAAA"}
@@ -0,0 +1,63 @@
1
+ @layer ket.app {
2
+ :where([data-kv-design-system]) [data-ui="description-list"] {
3
+ display: grid;
4
+ grid-template-columns: repeat(var(--kv-description-columns, 2), minmax(0, 1fr));
5
+ gap: var(--kv-space-3) var(--kv-space-5);
6
+ margin: 0;
7
+ }
8
+
9
+ :where([data-kv-design-system]) [data-ui="description-list"][data-columns="1"] {
10
+ --kv-description-columns: 1;
11
+ }
12
+ :where([data-kv-design-system]) [data-ui="description-list"][data-columns="3"] {
13
+ --kv-description-columns: 3;
14
+ }
15
+
16
+ :where([data-kv-design-system]) [data-ui="key-value"] {
17
+ display: grid;
18
+ min-width: 0;
19
+ gap: var(--kv-space-1);
20
+ }
21
+
22
+ :where([data-kv-design-system]) [data-ui="key-value-label"] {
23
+ color: var(--kv-text-muted);
24
+ font-size: var(--kv-text-xs);
25
+ font-weight: var(--kv-weight-medium);
26
+ }
27
+
28
+ :where([data-kv-design-system]) [data-ui="key-value-value"] {
29
+ min-width: 0;
30
+ margin: 0;
31
+ overflow-wrap: anywhere;
32
+ }
33
+
34
+ :where([data-kv-design-system]) [data-ui="person"] {
35
+ display: inline-flex;
36
+ align-items: center;
37
+ gap: var(--kv-space-2);
38
+ }
39
+
40
+ :where([data-kv-design-system]) [data-ui="person-body"] {
41
+ display: grid;
42
+ gap: 1px;
43
+ }
44
+
45
+ :where([data-kv-design-system]) [data-ui="avatar-group"] {
46
+ display: inline-flex;
47
+ align-items: center;
48
+ }
49
+
50
+ :where([data-kv-design-system]) [data-ui="avatar-group"] > * + * {
51
+ margin-left: calc(var(--kv-space-2) * -1);
52
+ }
53
+
54
+ :where([data-kv-design-system]) [data-ui="status"] {
55
+ display: inline-flex;
56
+ }
57
+
58
+ @container (max-width: 34rem) {
59
+ :where([data-kv-design-system]) [data-ui="description-list"] {
60
+ --kv-description-columns: 1;
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,19 @@
1
+ import type { TemplateResult } from '@ketvietlab/ketjs-view';
2
+ export declare const HOOKS: readonly ['formatted-date', 'formatted-number', 'formatted-money'];
3
+ export declare const FormattedDate: (props: {
4
+ value: string;
5
+ locale?: string;
6
+ emptyLabel?: string;
7
+ }) => TemplateResult;
8
+ export declare const FormattedNumber: (props: {
9
+ value: number;
10
+ locale?: string;
11
+ minimumFractionDigits?: number;
12
+ maximumFractionDigits?: number;
13
+ }) => TemplateResult;
14
+ export declare const FormattedMoney: (props: {
15
+ value: number;
16
+ currency: string;
17
+ locale?: string;
18
+ }) => TemplateResult;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/design-system/src/record/formatted-values/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,eAAO,MAAM,KAAK,YAAI,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,CAAU,CAAA;AAEvF,eAAO,MAAM,aAAa,UAAW;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,KAAG,cAiBH,CAAA;AAED,eAAO,MAAM,eAAe,UAAW;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B,KAAG,cAOH,CAAA;AAED,eAAO,MAAM,cAAc,UAAW;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KAAG,cAMH,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "@ketvietlab/ketjs-view/jsx-runtime";
2
+ export const HOOKS = ['formatted-date', 'formatted-number', 'formatted-money'];
3
+ export const FormattedDate = (props) => {
4
+ const match = /^(\d{4})-(\d{2})-(\d{2})$/u.exec(props.value);
5
+ const date = match ? new Date(Date.UTC(Number(match[1]), Number(match[2]) - 1, Number(match[3]))) : null;
6
+ const valid = !!match &&
7
+ !!date &&
8
+ date.getUTCFullYear() === Number(match[1]) &&
9
+ date.getUTCMonth() === Number(match[2]) - 1 &&
10
+ date.getUTCDate() === Number(match[3]);
11
+ const formatted = valid
12
+ ? new Intl.DateTimeFormat(props.locale ?? 'vi-VN', { dateStyle: 'medium', timeZone: 'UTC' }).format(date)
13
+ : (props.emptyLabel ?? '—');
14
+ return (_jsx("time", { "data-ui": "formatted-date", datetime: valid ? props.value : null, children: formatted }));
15
+ };
16
+ export const FormattedNumber = (props) => (_jsx("data", { "data-ui": "formatted-number", value: String(props.value), children: new Intl.NumberFormat(props.locale ?? 'vi-VN', {
17
+ minimumFractionDigits: props.minimumFractionDigits,
18
+ maximumFractionDigits: props.maximumFractionDigits,
19
+ }).format(props.value) }));
20
+ export const FormattedMoney = (props) => (_jsx("data", { "data-ui": "formatted-money", value: String(props.value), "data-currency": props.currency, children: new Intl.NumberFormat(props.locale ?? 'vi-VN', { style: 'currency', currency: props.currency }).format(props.value) }));
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/design-system/src/record/formatted-values/index.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,CAAU,CAAA;AAEvF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAI7B,EAAkB,EAAE;IACnB,MAAM,KAAK,GAAG,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACxG,MAAM,KAAK,GACT,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI;QACN,IAAI,CAAC,cAAc,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,KAAK;QACrB,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACzG,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,CAAA;IAC7B,OAAO,CACL,0BAAc,gBAAgB,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,YAChE,SAAS,GACL,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAK/B,EAAkB,EAAE,CAAC,CACpB,0BAAc,kBAAkB,EAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YACxD,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,EAAE;QAC9C,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;QAClD,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;KACnD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GACjB,CACR,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAI9B,EAAkB,EAAE,CAAC,CACpB,0BAAc,iBAAiB,EAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAiB,KAAK,CAAC,QAAQ,YACtF,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CACrG,KAAK,CAAC,KAAK,CACZ,GACI,CACR,CAAA"}
@@ -0,0 +1,8 @@
1
+ @layer ket.app {
2
+ :where([data-kv-design-system]) [data-ui="formatted-date"],
3
+ :where([data-kv-design-system]) [data-ui="formatted-number"],
4
+ :where([data-kv-design-system]) [data-ui="formatted-money"] {
5
+ font-variant-numeric: tabular-nums;
6
+ white-space: nowrap;
7
+ }
8
+ }
@@ -0,0 +1,31 @@
1
+ import type { JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
2
+ export declare const HOOKS: readonly ['attachments', 'attachment', 'media-gallery', 'media-item'];
3
+ export type AttachmentItem = {
4
+ id: string;
5
+ name: string;
6
+ href?: string;
7
+ meta?: JSXChild;
8
+ redacted?: boolean;
9
+ };
10
+ export declare const Attachments: (props: {
11
+ label: string;
12
+ items: readonly AttachmentItem[];
13
+ loading?: boolean;
14
+ error?: string | null;
15
+ redactedLabel?: string;
16
+ }) => TemplateResult;
17
+ export type MediaItem = {
18
+ id: string;
19
+ src?: string;
20
+ alt: string;
21
+ caption?: JSXChild;
22
+ href?: string;
23
+ redacted?: boolean;
24
+ };
25
+ export declare const MediaGallery: (props: {
26
+ label: string;
27
+ items: readonly MediaItem[];
28
+ emptyTitle?: string;
29
+ redactedLabel?: string;
30
+ }) => TemplateResult;
31
+ //# sourceMappingURL=index.d.ts.map