@ketvietlab/design-system 0.1.8 → 0.1.12

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 (361) hide show
  1. package/README.md +42 -3
  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 +554 -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 +9743 -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 +127 -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 +1146 -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 +62 -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/tokens.css +31 -4
  96. package/dist/index.d.ts +76 -35
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +42 -19
  99. package/dist/index.js.map +1 -1
  100. package/dist/interactions/dialog/index.d.ts +25 -0
  101. package/dist/interactions/dialog/index.d.ts.map +1 -0
  102. package/dist/interactions/dialog/index.js +10 -0
  103. package/dist/interactions/dialog/index.js.map +1 -0
  104. package/dist/interactions/dialog/styles.css +11 -0
  105. package/dist/interactions/menu/index.d.ts +27 -0
  106. package/dist/interactions/menu/index.d.ts.map +1 -0
  107. package/dist/interactions/menu/index.js +13 -0
  108. package/dist/interactions/menu/index.js.map +1 -0
  109. package/dist/interactions/menu/styles.css +82 -0
  110. package/dist/interactions/popover/index.d.ts +15 -0
  111. package/dist/interactions/popover/index.d.ts.map +1 -0
  112. package/dist/interactions/popover/index.js +4 -0
  113. package/dist/interactions/popover/index.js.map +1 -0
  114. package/dist/interactions/popover/styles.css +47 -0
  115. package/dist/interactions/skeleton/index.d.ts +7 -0
  116. package/dist/interactions/skeleton/index.d.ts.map +1 -0
  117. package/dist/interactions/skeleton/index.js +5 -0
  118. package/dist/interactions/skeleton/index.js.map +1 -0
  119. package/dist/interactions/skeleton/styles.css +32 -0
  120. package/dist/interactions/spinner/index.d.ts +7 -0
  121. package/dist/interactions/spinner/index.d.ts.map +1 -0
  122. package/dist/interactions/spinner/index.js +4 -0
  123. package/dist/interactions/spinner/index.js.map +1 -0
  124. package/dist/interactions/spinner/styles.css +38 -0
  125. package/dist/interactions/toast/index.d.ts +16 -0
  126. package/dist/interactions/toast/index.d.ts.map +1 -0
  127. package/dist/interactions/toast/index.js +13 -0
  128. package/dist/interactions/toast/index.js.map +1 -0
  129. package/dist/interactions/toast/styles.css +64 -0
  130. package/dist/interactions/tooltip/index.d.ts +9 -0
  131. package/dist/interactions/tooltip/index.d.ts.map +1 -0
  132. package/dist/interactions/tooltip/index.js +4 -0
  133. package/dist/interactions/tooltip/index.js.map +1 -0
  134. package/dist/interactions/tooltip/styles.css +65 -0
  135. package/dist/layouts/flat/styles.css +74 -0
  136. package/dist/layouts/flat.css +1 -74
  137. package/dist/layouts/grouped/styles.css +126 -0
  138. package/dist/layouts/grouped.css +1 -126
  139. package/dist/layouts/index.d.ts +1 -69
  140. package/dist/layouts/index.d.ts.map +1 -1
  141. package/dist/layouts/index.js +1 -68
  142. package/dist/layouts/index.js.map +1 -1
  143. package/dist/layouts/layout/index.d.ts +70 -0
  144. package/dist/layouts/layout/index.d.ts.map +1 -0
  145. package/dist/layouts/layout/index.js +71 -0
  146. package/dist/layouts/layout/index.js.map +1 -0
  147. package/dist/layouts/layout/styles.css +369 -0
  148. package/dist/layouts/layouts.css +1 -369
  149. package/dist/layouts/shell/index.d.ts +27 -0
  150. package/dist/layouts/shell/index.d.ts.map +1 -0
  151. package/dist/layouts/shell/index.js +24 -0
  152. package/dist/layouts/shell/index.js.map +1 -0
  153. package/dist/layouts/shell/styles.css +168 -0
  154. package/dist/layouts/shell.css +1 -168
  155. package/dist/layouts/shell.d.ts +1 -26
  156. package/dist/layouts/shell.d.ts.map +1 -1
  157. package/dist/layouts/shell.js +1 -23
  158. package/dist/layouts/shell.js.map +1 -1
  159. package/dist/patterns/board-page/index.d.ts +16 -0
  160. package/dist/patterns/board-page/index.d.ts.map +1 -0
  161. package/dist/patterns/board-page/index.js +30 -0
  162. package/dist/patterns/board-page/index.js.map +1 -0
  163. package/dist/patterns/board-page/styles.css +164 -0
  164. package/dist/patterns/board-page.d.ts +1 -13
  165. package/dist/patterns/board-page.d.ts.map +1 -1
  166. package/dist/patterns/board-page.js +1 -27
  167. package/dist/patterns/board-page.js.map +1 -1
  168. package/dist/patterns/dashboard-page/index.d.ts +15 -0
  169. package/dist/patterns/dashboard-page/index.d.ts.map +1 -0
  170. package/dist/patterns/dashboard-page/index.js +27 -0
  171. package/dist/patterns/dashboard-page/index.js.map +1 -0
  172. package/dist/patterns/dashboard-page/styles.css +169 -0
  173. package/dist/patterns/dashboard-page.d.ts +1 -12
  174. package/dist/patterns/dashboard-page.d.ts.map +1 -1
  175. package/dist/patterns/dashboard-page.js +1 -24
  176. package/dist/patterns/dashboard-page.js.map +1 -1
  177. package/dist/patterns/data-table/index.d.ts +74 -0
  178. package/dist/patterns/data-table/index.d.ts.map +1 -0
  179. package/dist/patterns/data-table/index.js +60 -0
  180. package/dist/patterns/data-table/index.js.map +1 -0
  181. package/dist/patterns/data-table/styles.css +269 -0
  182. package/dist/patterns/data-table.d.ts +1 -73
  183. package/dist/patterns/data-table.d.ts.map +1 -1
  184. package/dist/patterns/data-table.js +1 -59
  185. package/dist/patterns/data-table.js.map +1 -1
  186. package/dist/patterns/form-page/index.d.ts +8 -0
  187. package/dist/patterns/form-page/index.d.ts.map +1 -0
  188. package/dist/patterns/form-page/index.js +22 -0
  189. package/dist/patterns/form-page/index.js.map +1 -0
  190. package/dist/patterns/form-page/styles.css +237 -0
  191. package/dist/patterns/form-page.d.ts +1 -7
  192. package/dist/patterns/form-page.d.ts.map +1 -1
  193. package/dist/patterns/form-page.js +1 -21
  194. package/dist/patterns/form-page.js.map +1 -1
  195. package/dist/patterns/list-chrome/index.d.ts +80 -0
  196. package/dist/patterns/list-chrome/index.d.ts.map +1 -0
  197. package/dist/patterns/list-chrome/index.js +45 -0
  198. package/dist/patterns/list-chrome/index.js.map +1 -0
  199. package/dist/patterns/list-chrome/styles.css +245 -0
  200. package/dist/patterns/list-chrome.d.ts +1 -79
  201. package/dist/patterns/list-chrome.d.ts.map +1 -1
  202. package/dist/patterns/list-chrome.js +1 -44
  203. package/dist/patterns/list-chrome.js.map +1 -1
  204. package/dist/patterns/list-page/index.d.ts +31 -0
  205. package/dist/patterns/list-page/index.d.ts.map +1 -0
  206. package/dist/patterns/list-page/index.js +41 -0
  207. package/dist/patterns/list-page/index.js.map +1 -0
  208. package/dist/patterns/list-page/responsive.css +140 -0
  209. package/dist/patterns/list-page/styles.css +228 -0
  210. package/dist/patterns/list-page.d.ts +1 -30
  211. package/dist/patterns/list-page.d.ts.map +1 -1
  212. package/dist/patterns/list-page.js +1 -40
  213. package/dist/patterns/list-page.js.map +1 -1
  214. package/dist/patterns/modal-sheet/index.d.ts +16 -0
  215. package/dist/patterns/modal-sheet/index.d.ts.map +1 -0
  216. package/dist/patterns/modal-sheet/index.js +15 -0
  217. package/dist/patterns/modal-sheet/index.js.map +1 -0
  218. package/dist/patterns/modal-sheet/styles.css +219 -0
  219. package/dist/patterns/modal-sheet.d.ts +1 -15
  220. package/dist/patterns/modal-sheet.d.ts.map +1 -1
  221. package/dist/patterns/modal-sheet.js +1 -14
  222. package/dist/patterns/modal-sheet.js.map +1 -1
  223. package/dist/patterns/page-shell/index.d.ts +24 -0
  224. package/dist/patterns/page-shell/index.d.ts.map +1 -0
  225. package/dist/patterns/page-shell/index.js +11 -0
  226. package/dist/patterns/page-shell/index.js.map +1 -0
  227. package/dist/patterns/page-shell.d.ts +1 -23
  228. package/dist/patterns/page-shell.d.ts.map +1 -1
  229. package/dist/patterns/page-shell.js +1 -10
  230. package/dist/patterns/page-shell.js.map +1 -1
  231. package/dist/patterns/patterns.css +12 -2247
  232. package/dist/patterns/pipeline/index.d.ts +29 -0
  233. package/dist/patterns/pipeline/index.d.ts.map +1 -0
  234. package/dist/patterns/pipeline/index.js +26 -0
  235. package/dist/patterns/pipeline/index.js.map +1 -0
  236. package/dist/patterns/pipeline/styles.css +168 -0
  237. package/dist/patterns/pipeline.d.ts +1 -28
  238. package/dist/patterns/pipeline.d.ts.map +1 -1
  239. package/dist/patterns/pipeline.js +1 -25
  240. package/dist/patterns/pipeline.js.map +1 -1
  241. package/dist/patterns/record-form/index.d.ts +18 -0
  242. package/dist/patterns/record-form/index.d.ts.map +1 -0
  243. package/dist/patterns/record-form/index.js +14 -0
  244. package/dist/patterns/record-form/index.js.map +1 -0
  245. package/dist/patterns/record-form/styles.css +175 -0
  246. package/dist/patterns/record-form.d.ts +1 -17
  247. package/dist/patterns/record-form.d.ts.map +1 -1
  248. package/dist/patterns/record-form.js +1 -13
  249. package/dist/patterns/record-form.js.map +1 -1
  250. package/dist/patterns/record-page/index.d.ts +31 -0
  251. package/dist/patterns/record-page/index.d.ts.map +1 -0
  252. package/dist/patterns/record-page/index.js +29 -0
  253. package/dist/patterns/record-page/index.js.map +1 -0
  254. package/dist/patterns/record-page/styles.css +228 -0
  255. package/dist/patterns/record-page.d.ts +1 -30
  256. package/dist/patterns/record-page.d.ts.map +1 -1
  257. package/dist/patterns/record-page.js +1 -28
  258. package/dist/patterns/record-page.js.map +1 -1
  259. package/dist/patterns/workspace-page/index.d.ts +23 -0
  260. package/dist/patterns/workspace-page/index.d.ts.map +1 -0
  261. package/dist/patterns/workspace-page/index.js +26 -0
  262. package/dist/patterns/workspace-page/index.js.map +1 -0
  263. package/dist/patterns/workspace-page/styles.css +9 -0
  264. package/dist/patterns/workspace-page.d.ts +1 -22
  265. package/dist/patterns/workspace-page.d.ts.map +1 -1
  266. package/dist/patterns/workspace-page.js +1 -25
  267. package/dist/patterns/workspace-page.js.map +1 -1
  268. package/dist/primitives/actions/index.d.ts +36 -0
  269. package/dist/primitives/actions/index.d.ts.map +1 -0
  270. package/dist/primitives/actions/index.js +10 -0
  271. package/dist/primitives/actions/index.js.map +1 -0
  272. package/dist/primitives/actions/styles.css +149 -0
  273. package/dist/primitives/actions.d.ts +1 -35
  274. package/dist/primitives/actions.d.ts.map +1 -1
  275. package/dist/primitives/actions.js +1 -9
  276. package/dist/primitives/actions.js.map +1 -1
  277. package/dist/primitives/feedback/index.d.ts +19 -0
  278. package/dist/primitives/feedback/index.d.ts.map +1 -0
  279. package/dist/primitives/feedback/index.js +21 -0
  280. package/dist/primitives/feedback/index.js.map +1 -0
  281. package/dist/primitives/feedback/styles.css +117 -0
  282. package/dist/primitives/feedback.d.ts +1 -18
  283. package/dist/primitives/feedback.d.ts.map +1 -1
  284. package/dist/primitives/feedback.js +1 -22
  285. package/dist/primitives/feedback.js.map +1 -1
  286. package/dist/primitives/field/index.d.ts +35 -0
  287. package/dist/primitives/field/index.d.ts.map +1 -0
  288. package/dist/primitives/field/index.js +34 -0
  289. package/dist/primitives/field/index.js.map +1 -0
  290. package/dist/primitives/field/native-control.d.ts +4 -0
  291. package/dist/primitives/field/native-control.d.ts.map +1 -0
  292. package/dist/primitives/field/native-control.js +12 -0
  293. package/dist/primitives/field/native-control.js.map +1 -0
  294. package/dist/primitives/field/styles.css +160 -0
  295. package/dist/primitives/field.d.ts +1 -34
  296. package/dist/primitives/field.d.ts.map +1 -1
  297. package/dist/primitives/field.js +1 -41
  298. package/dist/primitives/field.js.map +1 -1
  299. package/dist/primitives/navigation/index.d.ts +26 -0
  300. package/dist/primitives/navigation/index.d.ts.map +1 -0
  301. package/dist/primitives/navigation/index.js +16 -0
  302. package/dist/primitives/navigation/index.js.map +1 -0
  303. package/dist/primitives/navigation.d.ts +1 -25
  304. package/dist/primitives/navigation.d.ts.map +1 -1
  305. package/dist/primitives/navigation.js +1 -15
  306. package/dist/primitives/navigation.js.map +1 -1
  307. package/dist/primitives/primitives.css +4 -570
  308. package/dist/primitives/progress/index.d.ts +10 -0
  309. package/dist/primitives/progress/index.d.ts.map +1 -0
  310. package/dist/primitives/progress/index.js +13 -0
  311. package/dist/primitives/progress/index.js.map +1 -0
  312. package/dist/primitives/progress.d.ts +1 -9
  313. package/dist/primitives/progress.d.ts.map +1 -1
  314. package/dist/primitives/progress.js +1 -12
  315. package/dist/primitives/progress.js.map +1 -1
  316. package/dist/primitives/status/index.d.ts +27 -0
  317. package/dist/primitives/status/index.d.ts.map +1 -0
  318. package/dist/primitives/status/index.js +16 -0
  319. package/dist/primitives/status/index.js.map +1 -0
  320. package/dist/primitives/status/styles.css +114 -0
  321. package/dist/primitives/status.d.ts +1 -26
  322. package/dist/primitives/status.d.ts.map +1 -1
  323. package/dist/primitives/status.js +1 -15
  324. package/dist/primitives/status.js.map +1 -1
  325. package/dist/record/activity/index.d.ts +26 -0
  326. package/dist/record/activity/index.d.ts.map +1 -0
  327. package/dist/record/activity/index.js +33 -0
  328. package/dist/record/activity/index.js.map +1 -0
  329. package/dist/record/activity/styles.css +38 -0
  330. package/dist/record/composition/index.d.ts +33 -0
  331. package/dist/record/composition/index.d.ts.map +1 -0
  332. package/dist/record/composition/index.js +10 -0
  333. package/dist/record/composition/index.js.map +1 -0
  334. package/dist/record/composition/styles.css +30 -0
  335. package/dist/record/display/index.d.ts +37 -0
  336. package/dist/record/display/index.d.ts.map +1 -0
  337. package/dist/record/display/index.js +23 -0
  338. package/dist/record/display/index.js.map +1 -0
  339. package/dist/record/display/styles.css +63 -0
  340. package/dist/record/formatted-values/index.d.ts +19 -0
  341. package/dist/record/formatted-values/index.d.ts.map +1 -0
  342. package/dist/record/formatted-values/index.js +21 -0
  343. package/dist/record/formatted-values/index.js.map +1 -0
  344. package/dist/record/formatted-values/styles.css +8 -0
  345. package/dist/record/media/index.d.ts +31 -0
  346. package/dist/record/media/index.d.ts.map +1 -0
  347. package/dist/record/media/index.js +19 -0
  348. package/dist/record/media/index.js.map +1 -0
  349. package/dist/record/media/styles.css +38 -0
  350. package/dist/runtime/auto.d.ts +2 -0
  351. package/dist/runtime/auto.d.ts.map +1 -0
  352. package/dist/runtime/auto.js +5 -0
  353. package/dist/runtime/auto.js.map +1 -0
  354. package/dist/runtime/index.d.ts +9 -0
  355. package/dist/runtime/index.d.ts.map +1 -0
  356. package/dist/runtime/index.js +205 -0
  357. package/dist/runtime/index.js.map +1 -0
  358. package/dist/styles.css +46 -8
  359. package/package.json +8 -2
  360. /package/dist/primitives/{navigation.css → navigation/styles.css} +0 -0
  361. /package/dist/primitives/{progress.css → progress/styles.css} +0 -0
package/README.md CHANGED
@@ -50,6 +50,10 @@ inside the shell.
50
50
 
51
51
  The catalogue is isolated behind `@ketvietlab/design-system/catalogue`, so the
52
52
  production entry point does not load its specimen data or catalogue chrome.
53
+ Its registry connects every public component to an owner, maturity, supported
54
+ states and a rendered specimen. Component implementation and selector-bearing CSS
55
+ live below per-component-family directories; consumers still import only from the
56
+ package root.
53
57
 
54
58
  Run the component catalogue from the repository root:
55
59
 
@@ -60,6 +64,20 @@ npm run design:system
60
64
 
61
65
  Then open `http://127.0.0.1:4100`.
62
66
 
67
+ Open `http://127.0.0.1:4100/inventory` for the documentation-style governance
68
+ registry. It lists current public exports, the KetSuite compatibility kit, and
69
+ the planned component catalog with ownership, maturity, Wave, evidence posture,
70
+ and promotion decisions. Filters are URL-owned and work without client JavaScript.
71
+
72
+ Regenerate and verify its source snapshot with:
73
+
74
+ ```bash
75
+ # Run from: ketjs/
76
+ npm run design:inventory
77
+ npm run design:inventory:check
78
+ npm run design:governance:check
79
+ ```
80
+
63
81
  ### Operational demo
64
82
 
65
83
  Run the same app on a separate port to inspect a connected sales workflow:
@@ -143,6 +161,27 @@ open automatically. Give repeated search/sort controls unique IDs. Loading links
143
161
  are disabled, and empty query rows do not occupy space.
144
162
 
145
163
  Route-modal focus trapping, background inertness, Escape, focus restoration and
146
- unsaved-change confirmation belong to the route runtime. ARIA metadata alone
147
- does not implement those interactions. See the backend development guide for the
148
- full composition and integration contract.
164
+ anchored positioning are provided by the optional `attachDesignSystemInteractions`
165
+ adapter. Route state, unsaved-change decisions and submit outcomes remain application
166
+ responsibilities. Menu, popover, tooltip, dialog, toast, spinner and skeleton renderers
167
+ retain native links/forms and useful no-script behavior. See the backend development
168
+ guide for the full composition and integration contract.
169
+
170
+ Typed form exports cover scalar and selection fields, controlled combobox/tag pickers,
171
+ civil date and local-time values, native file inputs, and a generic relation renderer.
172
+ Applications retain validation, query, permission, timezone, upload, and persistence
173
+ ownership; renderers preserve submitted text and expose native fallbacks.
174
+
175
+ Data-operation exports compose URL-owned search/filter/sort/view state, one-link
176
+ resource rows, bounded grids, hierarchy, and inline native forms. The package renders
177
+ state and carries version tokens; application adapters own persistence, conflicts,
178
+ permissions, cross-page selection, and dataset queries.
179
+
180
+ Record composition exports cover facts, people, formatted values, one identity summary,
181
+ one neutral rail, activity/audit, attachments, and media. Applications pass authorized,
182
+ redacted results and retain storage and mutation ownership. Catalogue recipes vary slots
183
+ within `ListPage`, `RecordPage`, and `WorkspacePage`; they do not add a fourth page pattern.
184
+
185
+ Before release, run `npm run design:release:check` from the repository root. It
186
+ requires zero planned components, current migration/rollback notes, and locked
187
+ deprecation admission. Publishing remains a post-merge operation from `master`.
@@ -0,0 +1,35 @@
1
+ # KetAtlas design-system adapter
2
+
3
+ KetAtlas is not coupled to Két. A design system can expose a generic
4
+ `ketatlas.design-system-adapter.v1` descriptor. Only its identity and assets are required. A descriptor
5
+ may additionally declare a materializer and verification lock, document-root requirements, a composition
6
+ API, or state ownership. This lets a CSS-only library, Web Components package, server renderer or
7
+ JavaScript component system implement the same protocol without pretending to expose Két's runtime.
8
+ The JSON Schema in this folder is the portable contract; `profile.json` is one Két implementation.
9
+
10
+ Without a materializer, asset paths resolve relative to the descriptor (and may be absolute URLs). With
11
+ a materializer, they resolve relative to the target atlas after the declared command runs. KetAtlas must
12
+ only consume optional capabilities that are actually declared.
13
+
14
+ KetAtlas screens run as self-contained HTML documents in an opaque iframe. This adapter therefore ships
15
+ a materializer instead of requiring module imports inside each screen.
16
+
17
+ From a built KetJS checkout or an installed package, run:
18
+
19
+ ```sh
20
+ ket-design-system-atlas materialize path/to/ui-mockups
21
+ ket-design-system-atlas check path/to/ui-mockups
22
+ ```
23
+
24
+ The command requires `atlas.json` in the target directory and manages four files:
25
+
26
+ - `assets/ket-design-system.css`: the public stylesheet with local imports inlined;
27
+ - `assets/ket-design-system-contracts.js`: canonical SSR page and layout templates;
28
+ - `assets/ket-design-system-runtime.js`: the classic-script keyboard, overlay and focus runtime;
29
+ - `design-system.lock.json`: package version, component count and SHA-256 hashes.
30
+
31
+ Consumers must read `profile.json` instead of assuming these Két-specific filenames or attributes. For
32
+ this adapter, link the declared CSS and classic scripts, add `data-kv-design-system` to the document root,
33
+ and compose page slots through `window.ATLAS_DESIGN_SYSTEM.templates` using the
34
+ `__ATLAS_SLOT_{NAME}__` pattern. Atlas-specific CSS may describe business content, but must not copy
35
+ component markup or override semantic design tokens.
@@ -0,0 +1,78 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ketatlas.dev/schemas/design-system-adapter.v1.json",
4
+ "title": "KetAtlas design-system adapter",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schemaVersion", "id", "assets"],
8
+ "properties": {
9
+ "$schema": { "type": "string" },
10
+ "schemaVersion": { "const": "ketatlas.design-system-adapter.v1" },
11
+ "id": { "type": "string", "minLength": 1 },
12
+ "materializer": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "required": ["command", "writeArguments", "checkArguments", "lockFile"],
16
+ "properties": {
17
+ "command": { "type": "string", "minLength": 1 },
18
+ "writeArguments": { "$ref": "#/$defs/arguments" },
19
+ "checkArguments": { "$ref": "#/$defs/arguments" },
20
+ "lockFile": { "type": "string", "minLength": 1 }
21
+ }
22
+ },
23
+ "document": {
24
+ "type": "object",
25
+ "additionalProperties": false,
26
+ "minProperties": 1,
27
+ "properties": {
28
+ "rootAttribute": {
29
+ "type": "object",
30
+ "additionalProperties": false,
31
+ "required": ["name"],
32
+ "properties": {
33
+ "name": { "type": "string", "minLength": 1 },
34
+ "value": { "type": "string" }
35
+ }
36
+ },
37
+ "scriptMode": { "enum": ["classic", "module", "none"] }
38
+ }
39
+ },
40
+ "assets": {
41
+ "type": "array",
42
+ "minItems": 1,
43
+ "items": {
44
+ "type": "object",
45
+ "additionalProperties": false,
46
+ "required": ["kind", "path", "load"],
47
+ "properties": {
48
+ "kind": { "enum": ["stylesheet", "script", "font", "image", "other"] },
49
+ "path": { "type": "string", "minLength": 1 },
50
+ "load": { "enum": ["head", "body-start", "body-end", "manual"] }
51
+ }
52
+ }
53
+ },
54
+ "composition": {
55
+ "type": "object",
56
+ "additionalProperties": false,
57
+ "minProperties": 1,
58
+ "properties": {
59
+ "global": { "type": "string", "minLength": 1 },
60
+ "templatesProperty": { "type": "string", "minLength": 1 },
61
+ "attachProperty": { "type": "string", "minLength": 1 },
62
+ "slotPattern": { "type": "string", "pattern": "\\{NAME\\}" },
63
+ "hookAttribute": { "type": "string", "minLength": 1 }
64
+ }
65
+ },
66
+ "inventory": { "type": "string" },
67
+ "stateOwnership": { "enum": ["url", "memory", "storage", "host"] },
68
+ "rules": { "type": "array", "items": { "type": "string" } }
69
+ },
70
+ "$defs": {
71
+ "arguments": {
72
+ "type": "array",
73
+ "minItems": 1,
74
+ "items": { "type": "string" },
75
+ "contains": { "const": "{atlasDirectory}" }
76
+ }
77
+ }
78
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "$schema": "./adapter.schema.json",
3
+ "schemaVersion": "ketatlas.design-system-adapter.v1",
4
+ "id": "@ketvietlab/design-system",
5
+ "materializer": {
6
+ "command": "ket-design-system-atlas",
7
+ "writeArguments": ["materialize", "{atlasDirectory}"],
8
+ "checkArguments": ["check", "{atlasDirectory}"],
9
+ "lockFile": "design-system.lock.json"
10
+ },
11
+ "document": {
12
+ "rootAttribute": { "name": "data-kv-design-system" },
13
+ "scriptMode": "classic"
14
+ },
15
+ "assets": [
16
+ { "kind": "stylesheet", "path": "assets/ket-design-system.css", "load": "head" },
17
+ {
18
+ "kind": "script",
19
+ "path": "assets/ket-design-system-contracts.js",
20
+ "load": "body-end"
21
+ },
22
+ {
23
+ "kind": "script",
24
+ "path": "assets/ket-design-system-runtime.js",
25
+ "load": "body-end"
26
+ }
27
+ ],
28
+ "composition": {
29
+ "global": "ATLAS_DESIGN_SYSTEM",
30
+ "templatesProperty": "templates",
31
+ "attachProperty": "attach",
32
+ "slotPattern": "__ATLAS_SLOT_{NAME}__",
33
+ "hookAttribute": "data-ui"
34
+ },
35
+ "inventory": "@ketvietlab/design-system/catalogue/inventory.json",
36
+ "stateOwnership": "url",
37
+ "rules": [
38
+ "Compose screens from generated page contracts and public hooks.",
39
+ "Keep business copy and domain-specific layout in the atlas.",
40
+ "Do not copy upstream component markup or override semantic design tokens.",
41
+ "Commit the generated lock and verify it before review."
42
+ ]
43
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export declare const materializeAtlasDesignSystem: (directory: string, mode?: 'materialize' | 'check') => void;
3
+ //# sourceMappingURL=atlas-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atlas-cli.d.ts","sourceRoot":"","sources":["../../../../packages/design-system/src/atlas-cli.ts"],"names":[],"mappings":";AAuNA,eAAO,MAAM,4BAA4B,cAC5B,MAAM,SACX,aAAa,GAAG,OAAO,KAC5B,IAwBF,CAAA"}
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env node
2
+ import { createHash } from 'node:crypto';
3
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import { dirname, join, relative, resolve } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { renderToString } from '@ketvietlab/ketjs-view';
7
+ import { AppShell, ListPage, Metric, RecordPage, Section, Surface, WorkspacePage } from './index.js';
8
+ const sourceDirectory = dirname(fileURLToPath(import.meta.url));
9
+ const packageJsonPath = [
10
+ resolve(sourceDirectory, '../package.json'),
11
+ resolve(sourceDirectory, '../../../../packages/design-system/package.json'),
12
+ ].find((candidate) => existsSync(candidate));
13
+ if (!packageJsonPath)
14
+ throw new Error('Cannot locate @ketvietlab/design-system package.json');
15
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
16
+ const profile = JSON.parse(readFileSync(join(sourceDirectory, 'atlas/profile.json'), 'utf8'));
17
+ const inventory = JSON.parse(readFileSync(join(sourceDirectory, 'catalogue/inventory.generated.json'), 'utf8'));
18
+ const marker = (name) => profile.composition.slotPattern.replace('{NAME}', name.toUpperCase());
19
+ const markers = {
20
+ actions: marker('actions'),
21
+ aside: marker('aside'),
22
+ asideLabel: marker('aside_label'),
23
+ body: marker('body'),
24
+ context: marker('context'),
25
+ controls: marker('controls'),
26
+ description: marker('description'),
27
+ detail: marker('detail'),
28
+ label: marker('label'),
29
+ main: marker('main'),
30
+ meta: marker('meta'),
31
+ navigation: marker('navigation'),
32
+ sidebar: marker('sidebar'),
33
+ status: marker('status'),
34
+ title: marker('title'),
35
+ value: marker('value'),
36
+ };
37
+ const assetPath = (kind, name) => {
38
+ const asset = profile.assets.find((candidate) => candidate.kind === kind && candidate.path.includes(name));
39
+ if (!asset)
40
+ throw new Error(`Két adapter profile is missing its ${name} ${kind} asset`);
41
+ return asset.path;
42
+ };
43
+ const sha256 = (source) => createHash('sha256').update(source).digest('hex');
44
+ const normalizedRepository = (value) => value?.replace(/^git\+/u, '').replace(/\.git$/u, '') ?? null;
45
+ const bundleCss = (path, ancestors = []) => {
46
+ const absolute = resolve(path);
47
+ if (ancestors.includes(absolute))
48
+ throw new Error(`Circular design-system CSS import: ${[...ancestors, absolute].join(' -> ')}`);
49
+ const source = readFileSync(absolute, 'utf8');
50
+ return source.replace(/^@import\s+["']([^"']+)["'];\s*$/gmu, (_statement, request) => {
51
+ if (!request.startsWith('.'))
52
+ throw new Error(`External CSS import is not materializable: ${request}`);
53
+ const imported = resolve(dirname(absolute), request);
54
+ const label = relative(sourceDirectory, imported).replaceAll('\\', '/');
55
+ return `/* inlined: ${label} */\n${bundleCss(imported, [...ancestors, absolute]).trimEnd()}`;
56
+ });
57
+ };
58
+ const renderContracts = () => {
59
+ const templates = {
60
+ list: renderToString(ListPage({
61
+ title: markers.title,
62
+ context: markers.context,
63
+ description: markers.description,
64
+ actions: markers.actions,
65
+ controls: markers.controls,
66
+ status: markers.status,
67
+ body: markers.body,
68
+ variant: 'operational',
69
+ })),
70
+ record: renderToString(RecordPage({
71
+ title: markers.title,
72
+ context: markers.context,
73
+ description: markers.description,
74
+ status: markers.status,
75
+ actions: markers.actions,
76
+ meta: markers.meta,
77
+ navigation: markers.navigation,
78
+ body: markers.body,
79
+ aside: markers.aside,
80
+ asideLabel: markers.asideLabel,
81
+ variant: 'operational',
82
+ })),
83
+ 'record-solo': renderToString(RecordPage({
84
+ title: markers.title,
85
+ context: markers.context,
86
+ description: markers.description,
87
+ status: markers.status,
88
+ actions: markers.actions,
89
+ meta: markers.meta,
90
+ navigation: markers.navigation,
91
+ body: markers.body,
92
+ variant: 'operational',
93
+ })),
94
+ flow: renderToString(WorkspacePage({
95
+ title: markers.title,
96
+ context: markers.context,
97
+ description: markers.description,
98
+ status: markers.status,
99
+ actions: markers.actions,
100
+ controls: markers.controls,
101
+ body: markers.body,
102
+ layout: 'flow',
103
+ variant: 'operational',
104
+ })),
105
+ canvas: renderToString(WorkspacePage({
106
+ title: markers.title,
107
+ context: markers.context,
108
+ description: markers.description,
109
+ status: markers.status,
110
+ actions: markers.actions,
111
+ controls: markers.controls,
112
+ body: markers.body,
113
+ layout: 'canvas',
114
+ variant: 'operational',
115
+ })),
116
+ shell: renderToString(AppShell({ sidebar: markers.sidebar, main: markers.main, mode: 'viewport' })),
117
+ surface: renderToString(Surface({ body: markers.body })),
118
+ 'surface-none': renderToString(Surface({ body: markers.body, padding: 'none' })),
119
+ section: renderToString(Surface({
120
+ body: Section({
121
+ title: markers.title,
122
+ description: markers.description,
123
+ actions: markers.actions,
124
+ body: markers.body,
125
+ }),
126
+ })),
127
+ metric: renderToString(Metric({ label: markers.label, value: markers.value, detail: markers.detail })),
128
+ };
129
+ const revision = process.env.KET_DESIGN_SYSTEM_REVISION ?? packageJson.version;
130
+ const global = JSON.stringify(profile.composition.global);
131
+ const property = JSON.stringify(profile.composition.templatesProperty);
132
+ return `/* Generated by ${packageJson.name}@${packageJson.version} (${revision}). Do not edit. */\nwindow[${global}] = window[${global}] || {};\nwindow[${global}][${property}] = ${JSON.stringify(templates)};\n`;
133
+ };
134
+ const renderRuntime = () => {
135
+ const moduleSource = readFileSync(join(sourceDirectory, 'runtime/index.js'), 'utf8');
136
+ const classicSource = moduleSource.replace('export const attachDesignSystemInteractions', 'const attachDesignSystemInteractions');
137
+ if (classicSource === moduleSource || /\bexport\s/u.test(classicSource))
138
+ throw new Error('Design-system runtime can no longer be converted to a classic KetAtlas script');
139
+ const global = JSON.stringify(profile.composition.global);
140
+ const property = JSON.stringify(profile.composition.attachProperty);
141
+ return `${classicSource.trimEnd()}\n\nwindow[${global}] = window[${global}] || {};\nwindow[${global}][${property}] = attachDesignSystemInteractions;\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => attachDesignSystemInteractions(), { once: true })\n} else {\n attachDesignSystemInteractions()\n}\n`;
142
+ };
143
+ const expectedMaterialization = () => {
144
+ const css = `${bundleCss(join(sourceDirectory, 'styles.css')).trimEnd()}\n`;
145
+ const contracts = renderContracts();
146
+ const runtime = renderRuntime();
147
+ const files = [
148
+ { path: assetPath('stylesheet', 'design-system'), content: css },
149
+ { path: assetPath('script', 'contracts'), content: contracts },
150
+ { path: assetPath('script', 'runtime'), content: runtime },
151
+ ];
152
+ const lock = {
153
+ schemaVersion: 'ketatlas.design-system-lock.v1',
154
+ adapterSchemaVersion: profile.schemaVersion,
155
+ adapter: profile.id,
156
+ source: packageJson.name,
157
+ version: packageJson.version,
158
+ revision: process.env.KET_DESIGN_SYSTEM_REVISION ?? packageJson.version,
159
+ repository: normalizedRepository(packageJson.repository?.url),
160
+ materialization: 'Exact public CSS with local imports inlined; canonical SSR contracts; no token overrides.',
161
+ registeredComponents: inventory.summary.registeredComponents,
162
+ files: files.map((file) => ({ path: file.path, sha256: sha256(file.content) })),
163
+ };
164
+ return { files, lock: `${JSON.stringify(lock, null, 2)}\n` };
165
+ };
166
+ const requireAtlas = (directory) => {
167
+ const target = resolve(directory);
168
+ if (!existsSync(join(target, 'atlas.json')))
169
+ throw new Error(`KetAtlas project not found: ${join(target, 'atlas.json')}`);
170
+ return target;
171
+ };
172
+ export const materializeAtlasDesignSystem = (directory, mode = 'materialize') => {
173
+ const target = requireAtlas(directory);
174
+ const expected = expectedMaterialization();
175
+ const files = [...expected.files, { path: profile.materializer.lockFile, content: expected.lock }];
176
+ if (mode === 'check') {
177
+ const stale = files.filter(({ path, content }) => {
178
+ const destination = join(target, path);
179
+ return !existsSync(destination) || readFileSync(destination, 'utf8') !== content;
180
+ });
181
+ if (stale.length)
182
+ throw new Error(`KetAtlas design-system materialization is stale: ${stale.map((file) => file.path).join(', ')}`);
183
+ process.stdout.write(`KetAtlas design system is current (${packageJson.version}, ${files.length} files).\n`);
184
+ return;
185
+ }
186
+ for (const { path, content } of files) {
187
+ const destination = join(target, path);
188
+ mkdirSync(dirname(destination), { recursive: true });
189
+ writeFileSync(destination, content);
190
+ }
191
+ process.stdout.write(`Materialized ${packageJson.name}@${packageJson.version} into ${target}.\n`);
192
+ };
193
+ const help = `ket-design-system-atlas — materialize the Két design system for self-contained HTML mockups
194
+
195
+ ket-design-system-atlas materialize <atlas-directory>
196
+ ket-design-system-atlas check <atlas-directory>
197
+ `;
198
+ const main = () => {
199
+ const [, , command = 'help', directory] = process.argv;
200
+ if (command === 'help' || command === '--help' || command === '-h') {
201
+ process.stdout.write(help);
202
+ return;
203
+ }
204
+ if ((command !== 'materialize' && command !== 'check') || !directory) {
205
+ process.stderr.write(help);
206
+ process.exitCode = 1;
207
+ return;
208
+ }
209
+ materializeAtlasDesignSystem(directory, command);
210
+ };
211
+ if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url))
212
+ main();
213
+ //# sourceMappingURL=atlas-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atlas-cli.js","sourceRoot":"","sources":["../../../../../packages/design-system/src/atlas-cli.ts"],"names":[],"mappings":"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"}