@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
package/README.md CHANGED
@@ -41,15 +41,64 @@ transparent scrolling viewport inside; never wrap it in another `Surface`.
41
41
  The title is retained in its empty state, with optional `emptyActions` for recovery.
42
42
  Omitting `title` preserves the existing unheaded form surface or standalone table.
43
43
 
44
- The app structure is demonstrated as four practical layouts inside `AppShell`:
44
+ The app structure is demonstrated with `AppNavigation` and four practical layouts inside `AppShell`:
45
45
  collection (`ListPage`), record (`RecordPage`), flow workspace (`WorkspacePage`
46
46
  with `layout="flow"`), and canvas workspace (`WorkspacePage` with
47
47
  `layout="canvas"`). Compatibility adapters remain available for migrated
48
48
  screens, but new catalogue examples should show one of those practical surfaces
49
49
  inside the shell.
50
50
 
51
+ `AppNavigation` is the canonical dashboard menu. Supply one grouped item model and
52
+ place it in `AppShell.sidebar`; it is a persistent sidebar above 768px and a native
53
+ `details` drawer below that breakpoint. The markup remains usable without JavaScript.
54
+ Items may contain recursive `children`; a parent expands its submenu directly below
55
+ the parent row, and an active descendant opens the complete path on first render.
56
+ Only leaf links expose the active state. Top-level branches form one accordion across
57
+ the complete sidebar, and the interaction adapter keeps the open branch from being
58
+ collapsed without choosing another branch. Use `expanded` when a branch should start
59
+ open without an active descendant.
60
+ The optional interaction adapter adds mobile dialog semantics, Escape/backdrop/link
61
+ closing, focus trapping and restoration, background inertness, and scroll locking.
62
+
63
+ ```tsx
64
+ // File: src/ui/workspace.tsx
65
+ <AppShell
66
+ sidebar={
67
+ <AppNavigation
68
+ id="main-navigation"
69
+ label="Main navigation"
70
+ identity="KétSuite"
71
+ context="Operations workspace"
72
+ groups={[
73
+ {
74
+ id: 'sales',
75
+ label: 'Sales',
76
+ items: [
77
+ { id: 'orders', label: 'Orders', href: '/orders', active: true, count: 7 },
78
+ { id: 'customers', label: 'Customers', href: '/customers' },
79
+ {
80
+ id: 'reports',
81
+ label: 'Reports',
82
+ children: [
83
+ { id: 'sales-report', label: 'Sales report', href: '/reports/sales' },
84
+ { id: 'stock-report', label: 'Inventory report', href: '/reports/inventory' },
85
+ ],
86
+ },
87
+ ],
88
+ },
89
+ ]}
90
+ />
91
+ }
92
+ main={<ListPage title="Orders" body={orders} />}
93
+ />
94
+ ```
95
+
51
96
  The catalogue is isolated behind `@ketvietlab/design-system/catalogue`, so the
52
97
  production entry point does not load its specimen data or catalogue chrome.
98
+ Its registry connects every public component to an owner, maturity, supported
99
+ states and a rendered specimen. Component implementation and selector-bearing CSS
100
+ live below per-component-family directories; consumers still import only from the
101
+ package root.
53
102
 
54
103
  Run the component catalogue from the repository root:
55
104
 
@@ -60,6 +109,20 @@ npm run design:system
60
109
 
61
110
  Then open `http://127.0.0.1:4100`.
62
111
 
112
+ Open `http://127.0.0.1:4100/inventory` for the documentation-style governance
113
+ registry. It lists current public exports, the KetSuite compatibility kit, and
114
+ the planned component catalog with ownership, maturity, Wave, evidence posture,
115
+ and promotion decisions. Filters are URL-owned and work without client JavaScript.
116
+
117
+ Regenerate and verify its source snapshot with:
118
+
119
+ ```bash
120
+ # Run from: ketjs/
121
+ npm run design:inventory
122
+ npm run design:inventory:check
123
+ npm run design:governance:check
124
+ ```
125
+
63
126
  ### Operational demo
64
127
 
65
128
  Run the same app on a separate port to inspect a connected sales workflow:
@@ -115,7 +178,8 @@ The contract is intentionally strict:
115
178
  - component CSS consumes semantic/component roles, not numbered palette swatches.
116
179
 
117
180
  The public entry exports actions, status and feedback objects, fields, navigation,
118
- tabs, progress, layout primitives, the three-region app shell, page/record layouts,
181
+ tabs, progress, layout primitives, the responsive application navigation, the
182
+ three-region app shell, page/record layouts,
119
183
  `ListChrome` with `BulkActions` and `PagerBar`, the canonical list and record page
120
184
  compositions, data tables, forms, and modal sheets. Use `ListPage` for operational
121
185
  collections: applications provide translated identity, URL-driven controls and
@@ -142,7 +206,29 @@ pairs per row without stacking labels above inputs. Native inputs support `readO
142
206
  open automatically. Give repeated search/sort controls unique IDs. Loading links
143
207
  are disabled, and empty query rows do not occupy space.
144
208
 
145
- 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.
209
+ Route-modal and mobile-navigation focus trapping, background inertness, Escape,
210
+ focus restoration, scroll locking, and anchored positioning are provided by the
211
+ optional `attachDesignSystemInteractions` adapter. Route state, unsaved-change
212
+ decisions and submit outcomes remain application
213
+ responsibilities. Menu, popover, tooltip, dialog, toast, spinner and skeleton renderers
214
+ retain native links/forms and useful no-script behavior. See the backend development
215
+ guide for the full composition and integration contract.
216
+
217
+ Typed form exports cover scalar and selection fields, controlled combobox/tag pickers,
218
+ civil date and local-time values, native file inputs, and a generic relation renderer.
219
+ Applications retain validation, query, permission, timezone, upload, and persistence
220
+ ownership; renderers preserve submitted text and expose native fallbacks.
221
+
222
+ Data-operation exports compose URL-owned search/filter/sort/view state, one-link
223
+ resource rows, bounded grids, hierarchy, and inline native forms. The package renders
224
+ state and carries version tokens; application adapters own persistence, conflicts,
225
+ permissions, cross-page selection, and dataset queries.
226
+
227
+ Record composition exports cover facts, people, formatted values, one identity summary,
228
+ one neutral rail, activity/audit, attachments, and media. Applications pass authorized,
229
+ redacted results and retain storage and mutation ownership. Catalogue recipes vary slots
230
+ within `ListPage`, `RecordPage`, and `WorkspacePage`; they do not add a fourth page pattern.
231
+
232
+ Before release, run `npm run design:release:check` from the repository root. It
233
+ requires zero planned components, current migration/rollback notes, and locked
234
+ 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":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEpG,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAC/D,MAAM,eAAe,GAAG;IACtB,OAAO,CAAC,eAAe,EAAE,iBAAiB,CAAC;IAC3C,OAAO,CAAC,eAAe,EAAE,iDAAiD,CAAC;CAC5E,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAA;AAC5C,IAAI,CAAC,eAAe;IAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;AAC7F,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAInE,CAAA;AACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,CAW3F,CAAA;AACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAC1B,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,oCAAoC,CAAC,EAAE,MAAM,CAAC,CACjC,CAAA;AAElD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;AAC9G,MAAM,OAAO,GAAG;IACd,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;CACd,CAAA;AAEV,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1G,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAA;IACvF,OAAO,KAAK,CAAC,IAAI,CAAA;AACnB,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC5F,MAAM,oBAAoB,GAAG,CAAC,KAAyB,EAAiB,EAAE,CACxE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,IAAI,CAAA;AAE9D,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,SAAS,GAAsB,EAAE,EAAU,EAAE;IAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,GAAG,SAAS,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAChG,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,qCAAqC,EAAE,CAAC,UAAU,EAAE,OAAe,EAAE,EAAE;QAC3F,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,OAAO,EAAE,CAAC,CAAA;QACtG,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAA;QACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACvE,OAAO,eAAe,KAAK,QAAQ,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAA;IAC9F,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,GAAW,EAAE;IACnC,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE,cAAc,CAClB,QAAQ,CAAC;YACP,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,aAAa;SACvB,CAAC,CACH;QACD,MAAM,EAAE,cAAc,CACpB,UAAU,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,aAAa;SACvB,CAAC,CACH;QACD,aAAa,EAAE,cAAc,CAC3B,UAAU,CAAC;YACT,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,aAAa;SACvB,CAAC,CACH;QACD,IAAI,EAAE,cAAc,CAClB,aAAa,CAAC;YACZ,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,aAAa;SACvB,CAAC,CACH;QACD,MAAM,EAAE,cAAc,CACpB,aAAa,CAAC;YACZ,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,aAAa;SACvB,CAAC,CACH;QACD,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACnG,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,cAAc,CACrB,OAAO,CAAC;YACN,IAAI,EAAE,OAAO,CAAC;gBACZ,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;SACH,CAAC,CACH;QACD,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;KACvG,CAAA;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,WAAW,CAAC,OAAO,CAAA;IAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAA;IACtE,OAAO,mBAAmB,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,KAAK,QAAQ,8BAA8B,MAAM,cAAc,MAAM,oBAAoB,MAAM,KAAK,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAA;AACpN,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,GAAW,EAAE;IACjC,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC,CAAA;IACpF,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CACxC,6CAA6C,EAC7C,sCAAsC,CACvC,CAAA;IACD,IAAI,aAAa,KAAK,YAAY,IAAI,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAA;IAClG,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;IACnE,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,cAAc,MAAM,cAAc,MAAM,oBAAoB,MAAM,KAAK,QAAQ,2OAA2O,CAAA;AAC7V,CAAC,CAAA;AAID,MAAM,uBAAuB,GAAG,GAAgD,EAAE;IAChF,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAA;IAC3E,MAAM,SAAS,GAAG,eAAe,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG;QACZ,EAAE,IAAI,EAAE,SAAS,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;QAChE,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE;QAC9D,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;KAC3D,CAAA;IACD,MAAM,IAAI,GAAG;QACX,aAAa,EAAE,gCAAgC;QAC/C,oBAAoB,EAAE,OAAO,CAAC,aAAa;QAC3C,OAAO,EAAE,OAAO,CAAC,EAAE;QACnB,MAAM,EAAE,WAAW,CAAC,IAAI;QACxB,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,WAAW,CAAC,OAAO;QACvE,UAAU,EAAE,oBAAoB,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC;QAC7D,eAAe,EACb,2FAA2F;QAC7F,oBAAoB,EAAE,SAAS,CAAC,OAAO,CAAC,oBAAoB;QAC5D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;KAChF,CAAA;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;AAC9D,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAU,EAAE;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,CAAA;IAC9E,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,SAAiB,EACjB,IAAI,GAA4B,aAAa,EACvC,EAAE;IACR,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAA;IAC1C,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAClG,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACtC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,OAAO,CAAA;QAClF,CAAC,CAAC,CAAA;QACF,IAAI,KAAK,CAAC,MAAM;YACd,MAAM,IAAI,KAAK,CACb,oDAAoD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChG,CAAA;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,WAAW,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,YAAY,CACvF,CAAA;QACD,OAAM;IACR,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACtC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACpD,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,SAAS,MAAM,KAAK,CAAC,CAAA;AACnG,CAAC,CAAA;AAED,MAAM,IAAI,GAAG;;;;CAIZ,CAAA;AAED,MAAM,IAAI,GAAG,GAAS,EAAE;IACtB,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,GAAG,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAA;IACtD,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAM;IACR,CAAC;IACD,IAAI,CAAC,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACR,CAAC;IACD,4BAA4B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAClD,CAAC,CAAA;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;IAAE,IAAI,EAAE,CAAA"}