@lo-tek/interfaces 0.0.0 → 0.37.0

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 (456) hide show
  1. package/CHANGELOG.md +3254 -0
  2. package/LICENSE +21 -0
  3. package/README.md +128 -1
  4. package/agent/astro.md +400 -0
  5. package/agent/bundles.md +429 -0
  6. package/agent/datastar.md +409 -0
  7. package/agent/html.md +388 -0
  8. package/agent/react.md +440 -0
  9. package/agent/templates.md +472 -0
  10. package/core/lotek-core.wasm +0 -0
  11. package/core/lotek.wasm +0 -0
  12. package/dist/cli.d.ts +12 -0
  13. package/dist/cli.d.ts.map +1 -0
  14. package/dist/cli.js +14 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/components/css/accordion/accordion.d.ts +37 -0
  17. package/dist/components/css/accordion/accordion.d.ts.map +1 -0
  18. package/dist/components/css/accordion/accordion.js +31 -0
  19. package/dist/components/css/accordion/accordion.js.map +1 -0
  20. package/dist/components/css/alert/alert.d.ts +35 -0
  21. package/dist/components/css/alert/alert.d.ts.map +1 -0
  22. package/dist/components/css/alert/alert.js +29 -0
  23. package/dist/components/css/alert/alert.js.map +1 -0
  24. package/dist/components/css/avatar/avatar.d.ts +40 -0
  25. package/dist/components/css/avatar/avatar.d.ts.map +1 -0
  26. package/dist/components/css/avatar/avatar.js +30 -0
  27. package/dist/components/css/avatar/avatar.js.map +1 -0
  28. package/dist/components/css/badge/badge.d.ts +24 -0
  29. package/dist/components/css/badge/badge.d.ts.map +1 -0
  30. package/dist/components/css/badge/badge.js +24 -0
  31. package/dist/components/css/badge/badge.js.map +1 -0
  32. package/dist/components/css/breadcrumbs/breadcrumbs.d.ts +26 -0
  33. package/dist/components/css/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  34. package/dist/components/css/breadcrumbs/breadcrumbs.js +24 -0
  35. package/dist/components/css/breadcrumbs/breadcrumbs.js.map +1 -0
  36. package/dist/components/css/button/button.d.ts +26 -0
  37. package/dist/components/css/button/button.d.ts.map +1 -0
  38. package/dist/components/css/button/button.js +25 -0
  39. package/dist/components/css/button/button.js.map +1 -0
  40. package/dist/components/css/card/card.d.ts +36 -0
  41. package/dist/components/css/card/card.d.ts.map +1 -0
  42. package/dist/components/css/card/card.js +28 -0
  43. package/dist/components/css/card/card.js.map +1 -0
  44. package/dist/components/css/checkbox/checkbox.d.ts +32 -0
  45. package/dist/components/css/checkbox/checkbox.d.ts.map +1 -0
  46. package/dist/components/css/checkbox/checkbox.js +27 -0
  47. package/dist/components/css/checkbox/checkbox.js.map +1 -0
  48. package/dist/components/css/divider/divider.d.ts +29 -0
  49. package/dist/components/css/divider/divider.d.ts.map +1 -0
  50. package/dist/components/css/divider/divider.js +23 -0
  51. package/dist/components/css/divider/divider.js.map +1 -0
  52. package/dist/components/css/error-text/error-text.d.ts +24 -0
  53. package/dist/components/css/error-text/error-text.d.ts.map +1 -0
  54. package/dist/components/css/error-text/error-text.js +18 -0
  55. package/dist/components/css/error-text/error-text.js.map +1 -0
  56. package/dist/components/css/fieldset/fieldset.d.ts +55 -0
  57. package/dist/components/css/fieldset/fieldset.d.ts.map +1 -0
  58. package/dist/components/css/fieldset/fieldset.js +39 -0
  59. package/dist/components/css/fieldset/fieldset.js.map +1 -0
  60. package/dist/components/css/file-upload/file-upload.d.ts +41 -0
  61. package/dist/components/css/file-upload/file-upload.d.ts.map +1 -0
  62. package/dist/components/css/file-upload/file-upload.js +32 -0
  63. package/dist/components/css/file-upload/file-upload.js.map +1 -0
  64. package/dist/components/css/heading/heading.d.ts +29 -0
  65. package/dist/components/css/heading/heading.d.ts.map +1 -0
  66. package/dist/components/css/heading/heading.js +23 -0
  67. package/dist/components/css/heading/heading.js.map +1 -0
  68. package/dist/components/css/help-text/help-text.d.ts +24 -0
  69. package/dist/components/css/help-text/help-text.d.ts.map +1 -0
  70. package/dist/components/css/help-text/help-text.js +23 -0
  71. package/dist/components/css/help-text/help-text.js.map +1 -0
  72. package/dist/components/css/icon/icon.d.ts +34 -0
  73. package/dist/components/css/icon/icon.d.ts.map +1 -0
  74. package/dist/components/css/icon/icon.js +25 -0
  75. package/dist/components/css/icon/icon.js.map +1 -0
  76. package/dist/components/css/input/input.d.ts +40 -0
  77. package/dist/components/css/input/input.d.ts.map +1 -0
  78. package/dist/components/css/input/input.js +45 -0
  79. package/dist/components/css/input/input.js.map +1 -0
  80. package/dist/components/css/label/label.d.ts +33 -0
  81. package/dist/components/css/label/label.d.ts.map +1 -0
  82. package/dist/components/css/label/label.js +23 -0
  83. package/dist/components/css/label/label.js.map +1 -0
  84. package/dist/components/css/link/link.d.ts +28 -0
  85. package/dist/components/css/link/link.d.ts.map +1 -0
  86. package/dist/components/css/link/link.js +20 -0
  87. package/dist/components/css/link/link.js.map +1 -0
  88. package/dist/components/css/list/list.d.ts +31 -0
  89. package/dist/components/css/list/list.d.ts.map +1 -0
  90. package/dist/components/css/list/list.js +25 -0
  91. package/dist/components/css/list/list.js.map +1 -0
  92. package/dist/components/css/pagination/pagination.d.ts +27 -0
  93. package/dist/components/css/pagination/pagination.d.ts.map +1 -0
  94. package/dist/components/css/pagination/pagination.js +25 -0
  95. package/dist/components/css/pagination/pagination.js.map +1 -0
  96. package/dist/components/css/paragraph/paragraph.d.ts +36 -0
  97. package/dist/components/css/paragraph/paragraph.d.ts.map +1 -0
  98. package/dist/components/css/paragraph/paragraph.js +26 -0
  99. package/dist/components/css/paragraph/paragraph.js.map +1 -0
  100. package/dist/components/css/progress/progress.d.ts +53 -0
  101. package/dist/components/css/progress/progress.d.ts.map +1 -0
  102. package/dist/components/css/progress/progress.js +38 -0
  103. package/dist/components/css/progress/progress.js.map +1 -0
  104. package/dist/components/css/radio/radio.d.ts +32 -0
  105. package/dist/components/css/radio/radio.d.ts.map +1 -0
  106. package/dist/components/css/radio/radio.js +27 -0
  107. package/dist/components/css/radio/radio.js.map +1 -0
  108. package/dist/components/css/search/search.d.ts +34 -0
  109. package/dist/components/css/search/search.d.ts.map +1 -0
  110. package/dist/components/css/search/search.js +32 -0
  111. package/dist/components/css/search/search.js.map +1 -0
  112. package/dist/components/css/select/select.d.ts +40 -0
  113. package/dist/components/css/select/select.d.ts.map +1 -0
  114. package/dist/components/css/select/select.js +31 -0
  115. package/dist/components/css/select/select.js.map +1 -0
  116. package/dist/components/css/shared.d.ts +90 -0
  117. package/dist/components/css/shared.d.ts.map +1 -0
  118. package/dist/components/css/shared.js +167 -0
  119. package/dist/components/css/shared.js.map +1 -0
  120. package/dist/components/css/skeleton/skeleton.d.ts +29 -0
  121. package/dist/components/css/skeleton/skeleton.d.ts.map +1 -0
  122. package/dist/components/css/skeleton/skeleton.js +23 -0
  123. package/dist/components/css/skeleton/skeleton.js.map +1 -0
  124. package/dist/components/css/skip-link/skip-link.d.ts +18 -0
  125. package/dist/components/css/skip-link/skip-link.d.ts.map +1 -0
  126. package/dist/components/css/skip-link/skip-link.js +16 -0
  127. package/dist/components/css/skip-link/skip-link.js.map +1 -0
  128. package/dist/components/css/spinner/spinner.d.ts +33 -0
  129. package/dist/components/css/spinner/spinner.d.ts.map +1 -0
  130. package/dist/components/css/spinner/spinner.js +25 -0
  131. package/dist/components/css/spinner/spinner.js.map +1 -0
  132. package/dist/components/css/sr-only/sr-only.d.ts +17 -0
  133. package/dist/components/css/sr-only/sr-only.d.ts.map +1 -0
  134. package/dist/components/css/sr-only/sr-only.js +15 -0
  135. package/dist/components/css/sr-only/sr-only.js.map +1 -0
  136. package/dist/components/css/switch/switch.d.ts +37 -0
  137. package/dist/components/css/switch/switch.d.ts.map +1 -0
  138. package/dist/components/css/switch/switch.js +29 -0
  139. package/dist/components/css/switch/switch.js.map +1 -0
  140. package/dist/components/css/table/table.d.ts +76 -0
  141. package/dist/components/css/table/table.d.ts.map +1 -0
  142. package/dist/components/css/table/table.js +59 -0
  143. package/dist/components/css/table/table.js.map +1 -0
  144. package/dist/components/css/tag/tag.d.ts +35 -0
  145. package/dist/components/css/tag/tag.d.ts.map +1 -0
  146. package/dist/components/css/tag/tag.js +27 -0
  147. package/dist/components/css/tag/tag.js.map +1 -0
  148. package/dist/components/css/textarea/textarea.d.ts +23 -0
  149. package/dist/components/css/textarea/textarea.d.ts.map +1 -0
  150. package/dist/components/css/textarea/textarea.js +18 -0
  151. package/dist/components/css/textarea/textarea.js.map +1 -0
  152. package/dist/components/css/toggle-group/toggle-group.d.ts +31 -0
  153. package/dist/components/css/toggle-group/toggle-group.d.ts.map +1 -0
  154. package/dist/components/css/toggle-group/toggle-group.js +29 -0
  155. package/dist/components/css/toggle-group/toggle-group.js.map +1 -0
  156. package/dist/components/css/tooltip/tooltip.d.ts +31 -0
  157. package/dist/components/css/tooltip/tooltip.d.ts.map +1 -0
  158. package/dist/components/css/tooltip/tooltip.js +29 -0
  159. package/dist/components/css/tooltip/tooltip.js.map +1 -0
  160. package/dist/components/default-texts.d.ts +35 -0
  161. package/dist/components/default-texts.d.ts.map +1 -0
  162. package/dist/components/default-texts.js +35 -0
  163. package/dist/components/default-texts.js.map +1 -0
  164. package/dist/components/events.d.ts +77 -0
  165. package/dist/components/events.d.ts.map +1 -0
  166. package/dist/components/events.js +3 -0
  167. package/dist/components/events.js.map +1 -0
  168. package/dist/components/frame/dialog/dialog.d.ts +122 -0
  169. package/dist/components/frame/dialog/dialog.d.ts.map +1 -0
  170. package/dist/components/frame/dialog/dialog.js +112 -0
  171. package/dist/components/frame/dialog/dialog.js.map +1 -0
  172. package/dist/components/frame/dialog/lt-dialog.d.ts +104 -0
  173. package/dist/components/frame/dialog/lt-dialog.d.ts.map +1 -0
  174. package/dist/components/frame/dialog/lt-dialog.js +431 -0
  175. package/dist/components/frame/dialog/lt-dialog.js.map +1 -0
  176. package/dist/components/frame/error-summary/error-summary.d.ts +40 -0
  177. package/dist/components/frame/error-summary/error-summary.d.ts.map +1 -0
  178. package/dist/components/frame/error-summary/error-summary.js +32 -0
  179. package/dist/components/frame/error-summary/error-summary.js.map +1 -0
  180. package/dist/components/frame/error-summary/lt-error-summary.d.ts +82 -0
  181. package/dist/components/frame/error-summary/lt-error-summary.d.ts.map +1 -0
  182. package/dist/components/frame/error-summary/lt-error-summary.js +302 -0
  183. package/dist/components/frame/error-summary/lt-error-summary.js.map +1 -0
  184. package/dist/components/frame/field/field-core.d.ts +92 -0
  185. package/dist/components/frame/field/field-core.d.ts.map +1 -0
  186. package/dist/components/frame/field/field-core.js +63 -0
  187. package/dist/components/frame/field/field-core.js.map +1 -0
  188. package/dist/components/frame/field/lt-field.d.ts +173 -0
  189. package/dist/components/frame/field/lt-field.d.ts.map +1 -0
  190. package/dist/components/frame/field/lt-field.js +580 -0
  191. package/dist/components/frame/field/lt-field.js.map +1 -0
  192. package/dist/components/frame/popover/lt-popover.d.ts +132 -0
  193. package/dist/components/frame/popover/lt-popover.d.ts.map +1 -0
  194. package/dist/components/frame/popover/lt-popover.js +490 -0
  195. package/dist/components/frame/popover/lt-popover.js.map +1 -0
  196. package/dist/components/frame/popover/popover.d.ts +49 -0
  197. package/dist/components/frame/popover/popover.d.ts.map +1 -0
  198. package/dist/components/frame/popover/popover.js +64 -0
  199. package/dist/components/frame/popover/popover.js.map +1 -0
  200. package/dist/components/frame/session-timeout/lt-session-timeout.d.ts +198 -0
  201. package/dist/components/frame/session-timeout/lt-session-timeout.d.ts.map +1 -0
  202. package/dist/components/frame/session-timeout/lt-session-timeout.js +573 -0
  203. package/dist/components/frame/session-timeout/lt-session-timeout.js.map +1 -0
  204. package/dist/components/frame/session-timeout/session-timeout.d.ts +113 -0
  205. package/dist/components/frame/session-timeout/session-timeout.d.ts.map +1 -0
  206. package/dist/components/frame/session-timeout/session-timeout.js +101 -0
  207. package/dist/components/frame/session-timeout/session-timeout.js.map +1 -0
  208. package/dist/components/frame/suggestion/lt-suggestion.d.ts +361 -0
  209. package/dist/components/frame/suggestion/lt-suggestion.d.ts.map +1 -0
  210. package/dist/components/frame/suggestion/lt-suggestion.js +1152 -0
  211. package/dist/components/frame/suggestion/lt-suggestion.js.map +1 -0
  212. package/dist/components/frame/suggestion/suggestion.d.ts +143 -0
  213. package/dist/components/frame/suggestion/suggestion.d.ts.map +1 -0
  214. package/dist/components/frame/suggestion/suggestion.js +127 -0
  215. package/dist/components/frame/suggestion/suggestion.js.map +1 -0
  216. package/dist/components/frame/tabs/lt-tabs.d.ts +404 -0
  217. package/dist/components/frame/tabs/lt-tabs.d.ts.map +1 -0
  218. package/dist/components/frame/tabs/lt-tabs.js +1201 -0
  219. package/dist/components/frame/tabs/lt-tabs.js.map +1 -0
  220. package/dist/components/frame/tabs/tabs.d.ts +112 -0
  221. package/dist/components/frame/tabs/tabs.d.ts.map +1 -0
  222. package/dist/components/frame/tabs/tabs.js +107 -0
  223. package/dist/components/frame/tabs/tabs.js.map +1 -0
  224. package/dist/components/host-element.d.ts +135 -0
  225. package/dist/components/host-element.d.ts.map +1 -0
  226. package/dist/components/host-element.js +366 -0
  227. package/dist/components/host-element.js.map +1 -0
  228. package/dist/components/standalone/connection-status/connection-status.d.ts +28 -0
  229. package/dist/components/standalone/connection-status/connection-status.d.ts.map +1 -0
  230. package/dist/components/standalone/connection-status/connection-status.js +22 -0
  231. package/dist/components/standalone/connection-status/connection-status.js.map +1 -0
  232. package/dist/components/standalone/connection-status/lt-connection-status.d.ts +81 -0
  233. package/dist/components/standalone/connection-status/lt-connection-status.d.ts.map +1 -0
  234. package/dist/components/standalone/connection-status/lt-connection-status.js +216 -0
  235. package/dist/components/standalone/connection-status/lt-connection-status.js.map +1 -0
  236. package/dist/components/standalone/toast/lt-toast.d.ts +109 -0
  237. package/dist/components/standalone/toast/lt-toast.d.ts.map +1 -0
  238. package/dist/components/standalone/toast/lt-toast.js +256 -0
  239. package/dist/components/standalone/toast/lt-toast.js.map +1 -0
  240. package/dist/components/standalone/toast/toast.d.ts +52 -0
  241. package/dist/components/standalone/toast/toast.d.ts.map +1 -0
  242. package/dist/components/standalone/toast/toast.js +42 -0
  243. package/dist/components/standalone/toast/toast.js.map +1 -0
  244. package/dist/diagnostics/core.d.ts +137 -0
  245. package/dist/diagnostics/core.d.ts.map +1 -0
  246. package/dist/diagnostics/core.js +72 -0
  247. package/dist/diagnostics/core.js.map +1 -0
  248. package/dist/diagnostics/default-core.d.ts +10 -0
  249. package/dist/diagnostics/default-core.d.ts.map +1 -0
  250. package/dist/diagnostics/default-core.js +72 -0
  251. package/dist/diagnostics/default-core.js.map +1 -0
  252. package/dist/diagnostics/index.d.ts +84 -0
  253. package/dist/diagnostics/index.d.ts.map +1 -0
  254. package/dist/diagnostics/index.js +106 -0
  255. package/dist/diagnostics/index.js.map +1 -0
  256. package/dist/dom.d.ts +55 -0
  257. package/dist/dom.d.ts.map +1 -0
  258. package/dist/dom.js +162 -0
  259. package/dist/dom.js.map +1 -0
  260. package/dist/index.d.ts +97 -0
  261. package/dist/index.d.ts.map +1 -0
  262. package/dist/index.js +58 -0
  263. package/dist/index.js.map +1 -0
  264. package/dist/jsx/react.d.ts +180 -0
  265. package/dist/jsx/react.d.ts.map +1 -0
  266. package/dist/jsx/react.js +2 -0
  267. package/dist/jsx/react.js.map +1 -0
  268. package/dist/lotek.css +3617 -0
  269. package/dist/lt.d.ts +325 -0
  270. package/dist/lt.d.ts.map +1 -0
  271. package/dist/lt.js +183 -0
  272. package/dist/lt.js.map +1 -0
  273. package/dist/react.d.ts +492 -0
  274. package/dist/react.d.ts.map +1 -0
  275. package/dist/react.js +296 -0
  276. package/dist/react.js.map +1 -0
  277. package/dist/register.d.ts +17 -0
  278. package/dist/register.d.ts.map +1 -0
  279. package/dist/register.js +35 -0
  280. package/dist/register.js.map +1 -0
  281. package/dist/tokens/color.d.ts +43 -0
  282. package/dist/tokens/color.d.ts.map +1 -0
  283. package/dist/tokens/color.js +123 -0
  284. package/dist/tokens/color.js.map +1 -0
  285. package/dist/tokens/contract.d.ts +18 -0
  286. package/dist/tokens/contract.d.ts.map +1 -0
  287. package/dist/tokens/contract.js +18 -0
  288. package/dist/tokens/contract.js.map +1 -0
  289. package/dist/tokens/matrix-cells.d.ts +30 -0
  290. package/dist/tokens/matrix-cells.d.ts.map +1 -0
  291. package/dist/tokens/matrix-cells.js +273 -0
  292. package/dist/tokens/matrix-cells.js.map +1 -0
  293. package/dist/tokens/matrix.d.ts +18 -0
  294. package/dist/tokens/matrix.d.ts.map +1 -0
  295. package/dist/tokens/matrix.js +21 -0
  296. package/dist/tokens/matrix.js.map +1 -0
  297. package/dist/tokens/theme-check.d.ts +42 -0
  298. package/dist/tokens/theme-check.d.ts.map +1 -0
  299. package/dist/tokens/theme-check.js +10 -0
  300. package/dist/tokens/theme-check.js.map +1 -0
  301. package/dist/tokens/theme.d.ts +94 -0
  302. package/dist/tokens/theme.d.ts.map +1 -0
  303. package/dist/tokens/theme.js +14 -0
  304. package/dist/tokens/theme.js.map +1 -0
  305. package/dist/tokens/tokens.d.ts +122 -0
  306. package/dist/tokens/tokens.d.ts.map +1 -0
  307. package/dist/tokens/tokens.js +158 -0
  308. package/dist/tokens/tokens.js.map +1 -0
  309. package/dist/vocabulary/classes.d.ts +3 -0
  310. package/dist/vocabulary/classes.d.ts.map +1 -0
  311. package/dist/vocabulary/classes.js +1320 -0
  312. package/dist/vocabulary/classes.js.map +1 -0
  313. package/dist/vocabulary/elements.d.ts +3 -0
  314. package/dist/vocabulary/elements.d.ts.map +1 -0
  315. package/dist/vocabulary/elements.js +410 -0
  316. package/dist/vocabulary/elements.js.map +1 -0
  317. package/dist/vocabulary/types.d.ts +175 -0
  318. package/dist/vocabulary/types.d.ts.map +1 -0
  319. package/dist/vocabulary/types.js +11 -0
  320. package/dist/vocabulary/types.js.map +1 -0
  321. package/dist/wasi-host.d.ts +24 -0
  322. package/dist/wasi-host.d.ts.map +1 -0
  323. package/dist/wasi-host.js +140 -0
  324. package/dist/wasi-host.js.map +1 -0
  325. package/live-templates.xml +62 -0
  326. package/manifest/files.json +373 -0
  327. package/manifest/manifest.json +4965 -0
  328. package/manifest/manifest.schema.json +513 -0
  329. package/package.json +398 -5
  330. package/src/cli.ts +21 -0
  331. package/src/components/css/accordion/accordion.css +102 -0
  332. package/src/components/css/accordion/accordion.ts +50 -0
  333. package/src/components/css/alert/alert.css +53 -0
  334. package/src/components/css/alert/alert.ts +48 -0
  335. package/src/components/css/avatar/avatar.css +96 -0
  336. package/src/components/css/avatar/avatar.ts +57 -0
  337. package/src/components/css/badge/badge.css +42 -0
  338. package/src/components/css/badge/badge.ts +43 -0
  339. package/src/components/css/breadcrumbs/breadcrumbs.css +62 -0
  340. package/src/components/css/breadcrumbs/breadcrumbs.ts +30 -0
  341. package/src/components/css/button/button.css +128 -0
  342. package/src/components/css/button/button.ts +44 -0
  343. package/src/components/css/card/card.css +65 -0
  344. package/src/components/css/card/card.ts +50 -0
  345. package/src/components/css/checkbox/checkbox.css +114 -0
  346. package/src/components/css/checkbox/checkbox.ts +50 -0
  347. package/src/components/css/divider/divider.css +38 -0
  348. package/src/components/css/divider/divider.ts +42 -0
  349. package/src/components/css/error-text/error-text.css +21 -0
  350. package/src/components/css/error-text/error-text.ts +37 -0
  351. package/src/components/css/fieldset/fieldset.css +72 -0
  352. package/src/components/css/fieldset/fieldset.ts +87 -0
  353. package/src/components/css/file-upload/file-upload.css +102 -0
  354. package/src/components/css/file-upload/file-upload.ts +65 -0
  355. package/src/components/css/heading/heading.css +33 -0
  356. package/src/components/css/heading/heading.ts +42 -0
  357. package/src/components/css/help-text/help-text.css +24 -0
  358. package/src/components/css/help-text/help-text.ts +42 -0
  359. package/src/components/css/icon/icon.css +20 -0
  360. package/src/components/css/icon/icon.ts +44 -0
  361. package/src/components/css/input/input.css +145 -0
  362. package/src/components/css/input/input.ts +77 -0
  363. package/src/components/css/label/label.css +42 -0
  364. package/src/components/css/label/label.ts +51 -0
  365. package/src/components/css/link/link.css +38 -0
  366. package/src/components/css/link/link.ts +38 -0
  367. package/src/components/css/list/list.css +53 -0
  368. package/src/components/css/list/list.ts +44 -0
  369. package/src/components/css/pagination/pagination.css +95 -0
  370. package/src/components/css/pagination/pagination.ts +33 -0
  371. package/src/components/css/paragraph/paragraph.css +31 -0
  372. package/src/components/css/paragraph/paragraph.ts +53 -0
  373. package/src/components/css/progress/progress.css +161 -0
  374. package/src/components/css/progress/progress.ts +78 -0
  375. package/src/components/css/radio/radio.css +94 -0
  376. package/src/components/css/radio/radio.ts +50 -0
  377. package/src/components/css/search/search.css +50 -0
  378. package/src/components/css/search/search.ts +56 -0
  379. package/src/components/css/select/select.css +321 -0
  380. package/src/components/css/select/select.ts +63 -0
  381. package/src/components/css/shared.ts +199 -0
  382. package/src/components/css/skeleton/skeleton.css +62 -0
  383. package/src/components/css/skeleton/skeleton.ts +43 -0
  384. package/src/components/css/skip-link/skip-link.css +41 -0
  385. package/src/components/css/skip-link/skip-link.ts +22 -0
  386. package/src/components/css/spinner/spinner.css +48 -0
  387. package/src/components/css/spinner/spinner.ts +48 -0
  388. package/src/components/css/sr-only/sr-only.css +16 -0
  389. package/src/components/css/sr-only/sr-only.ts +21 -0
  390. package/src/components/css/switch/switch.css +105 -0
  391. package/src/components/css/switch/switch.ts +50 -0
  392. package/src/components/css/table/table.css +159 -0
  393. package/src/components/css/table/table.ts +107 -0
  394. package/src/components/css/tag/tag.css +58 -0
  395. package/src/components/css/tag/tag.ts +49 -0
  396. package/src/components/css/textarea/textarea.css +83 -0
  397. package/src/components/css/textarea/textarea.ts +40 -0
  398. package/src/components/css/toggle-group/toggle-group.css +92 -0
  399. package/src/components/css/toggle-group/toggle-group.ts +37 -0
  400. package/src/components/css/tooltip/tooltip.css +89 -0
  401. package/src/components/css/tooltip/tooltip.ts +37 -0
  402. package/src/components/default-texts.ts +34 -0
  403. package/src/components/events.ts +68 -0
  404. package/src/components/frame/dialog/dialog.css +306 -0
  405. package/src/components/frame/dialog/dialog.ts +166 -0
  406. package/src/components/frame/dialog/lt-dialog.ts +510 -0
  407. package/src/components/frame/error-summary/error-summary.css +47 -0
  408. package/src/components/frame/error-summary/error-summary.ts +56 -0
  409. package/src/components/frame/error-summary/lt-error-summary.ts +344 -0
  410. package/src/components/frame/field/field-core.ts +152 -0
  411. package/src/components/frame/field/field.css +17 -0
  412. package/src/components/frame/field/lt-field.ts +753 -0
  413. package/src/components/frame/popover/lt-popover.ts +555 -0
  414. package/src/components/frame/popover/popover.css +50 -0
  415. package/src/components/frame/popover/popover.ts +102 -0
  416. package/src/components/frame/session-timeout/lt-session-timeout.ts +681 -0
  417. package/src/components/frame/session-timeout/session-timeout.css +50 -0
  418. package/src/components/frame/session-timeout/session-timeout.ts +156 -0
  419. package/src/components/frame/suggestion/lt-suggestion.ts +1358 -0
  420. package/src/components/frame/suggestion/suggestion.css +132 -0
  421. package/src/components/frame/suggestion/suggestion.ts +172 -0
  422. package/src/components/frame/tabs/lt-tabs.ts +1319 -0
  423. package/src/components/frame/tabs/tabs.css +128 -0
  424. package/src/components/frame/tabs/tabs.ts +188 -0
  425. package/src/components/host-element.ts +400 -0
  426. package/src/components/standalone/connection-status/connection-status.css +41 -0
  427. package/src/components/standalone/connection-status/connection-status.ts +41 -0
  428. package/src/components/standalone/connection-status/lt-connection-status.ts +242 -0
  429. package/src/components/standalone/toast/lt-toast.ts +300 -0
  430. package/src/components/standalone/toast/toast.css +78 -0
  431. package/src/components/standalone/toast/toast.ts +70 -0
  432. package/src/diagnostics/core.ts +210 -0
  433. package/src/diagnostics/default-core.ts +81 -0
  434. package/src/diagnostics/index.ts +150 -0
  435. package/src/dom.ts +185 -0
  436. package/src/index.ts +218 -0
  437. package/src/jsx/react.ts +212 -0
  438. package/src/lt.ts +192 -0
  439. package/src/react.ts +411 -0
  440. package/src/register.ts +43 -0
  441. package/src/tailwind/tailwind.css +169 -0
  442. package/src/tokens/boundary.css +104 -0
  443. package/src/tokens/color-contract.json +231 -0
  444. package/src/tokens/color.ts +150 -0
  445. package/src/tokens/contract.ts +24 -0
  446. package/src/tokens/matrix-cells.ts +375 -0
  447. package/src/tokens/matrix.ts +32 -0
  448. package/src/tokens/theme-check.ts +51 -0
  449. package/src/tokens/theme.ts +104 -0
  450. package/src/tokens/tokens.css +569 -0
  451. package/src/tokens/tokens.ts +223 -0
  452. package/src/vocabulary/classes.ts +1322 -0
  453. package/src/vocabulary/elements.ts +412 -0
  454. package/src/vocabulary/types.ts +178 -0
  455. package/src/wasi-host.ts +155 -0
  456. package/web-types.json +800 -0
@@ -0,0 +1,412 @@
1
+ // Generated by interfaces/scripts/generate-vocabulary.ts. Do not edit.
2
+ import type { Elements } from "./types.js"
3
+
4
+ export const elements: Elements = {
5
+ "lt-field": {
6
+ "link": "https://lo-tek.sobernetics.no/components/field/",
7
+ "description": "Wires label, field, help text and error text together: sets `aria-describedby` and `aria-invalid` on the control and an id on the help text and the error text. Never writes an id on the control: the template writes `for` and `id`, or wraps the field in the label. The field is invalid when the error text is there without `hidden`. Exists for markup produced without JavaScript. When the markup is produced with JavaScript, use `lt.field()` instead.",
8
+ "attributes": {
9
+ "disabled": {
10
+ "type": "flag",
11
+ "description": "The control is disabled."
12
+ },
13
+ "optional": {
14
+ "type": "flag",
15
+ "description": "The field is optional, and the label says so."
16
+ },
17
+ "described-by": {
18
+ "type": "text",
19
+ "description": "Extra ids to include in `aria-describedby`, separated by spaces."
20
+ }
21
+ },
22
+ "parts": {
23
+ "label": {
24
+ "selector": "label",
25
+ "description": "The label. When it is outside the element, it is wired with `for` to the control's id.",
26
+ "content": "text"
27
+ },
28
+ "control": {
29
+ "selector": "input:not([type='hidden']), textarea, select",
30
+ "description": "The control the field wires: an `<input>`, `<textarea>` or `<select>` with its `<option>`s. `type=\"hidden\"` does not count, and only the first one is wired. The template writes `for` on the label and `id` on the control, or wraps the control in the label.",
31
+ "content": "none",
32
+ "unique": true,
33
+ "stableId": true
34
+ },
35
+ "help": {
36
+ "selector": ".lt-help-text",
37
+ "description": "The help text, which is read out together with the control.",
38
+ "content": "text",
39
+ "unique": true,
40
+ "optional": true
41
+ },
42
+ "error": {
43
+ "selector": ".lt-error-text",
44
+ "description": "The error text, which is shown and read out when the field is invalid.",
45
+ "content": "text",
46
+ "unique": true,
47
+ "optional": true
48
+ }
49
+ },
50
+ "removed": {
51
+ "invalid": "The field is invalid when the error text, `.lt-error-text`, is visible, or when the server has written `aria-invalid` on the control. In Datastar: `data-attr:hidden=\"!$invalid\"` on the error text.",
52
+ "required-marker": "The required marker is `data-required` on `<label>`, and then shows without JavaScript too.",
53
+ "control-id": "Write `id` on the control and `for` on the label in the template. The component never writes an id on the control."
54
+ }
55
+ },
56
+ "lt-tabs": {
57
+ "link": "https://lo-tek.sobernetics.no/components/tabs/",
58
+ "description": "Tab list. The tabs are links to the panels in an `.lt-tabs__list`, so without JavaScript the list is a table of contents; `role=\"tab\"` on anything other than a link is not a tab. The component adds keyboard and focus handling, sets roles and wiring, gives each panel its tab's name, makes only the selected panel a tab stop, and hides the rest with `hidden=\"until-found\"`, so find in page and links into a panel reach them. Each selection is written to the URL. It never writes an id on a tab or a panel. When the page loads, the selected tab is the one with `aria-selected` from the server, otherwise the one the URL points to, otherwise the first one not hidden with `hidden`. Under `server-controlled` the URL never selects.",
59
+ "attributes": {
60
+ "server-controlled": {
61
+ "type": "flag",
62
+ "description": "The server decides which tab is selected. The component does not put the user's selection back after an update from the server, and the URL selects no tab. A click and find in page select the tab until the server responds."
63
+ },
64
+ "activation": {
65
+ "type": "values",
66
+ "values": [
67
+ "manual",
68
+ "automatic"
69
+ ],
70
+ "description": "What the arrow keys do. By default they select the tab at once."
71
+ }
72
+ },
73
+ "parts": {
74
+ "list": {
75
+ "selector": "[role='tablist'], .lt-tabs__list",
76
+ "description": "The tab list, a `<ul>` where each `<li>` gets `role=\"presentation\"`. It needs a name, such as `aria-label`. When the server has written `role=\"tab\"` on the links, the list can also hold other links.",
77
+ "content": "free",
78
+ "unique": true
79
+ },
80
+ "tab": {
81
+ "selector": "a[role='tab'][href^='#'], .lt-tabs__list a[href^='#']:not([role])",
82
+ "description": "A tab: a link to its panel, `<a href=\"#attachments\">`. The component writes `aria-controls` from `href`. `role=\"tab\"` on something that is not a link is not a tab.",
83
+ "content": "text",
84
+ "multiple": true
85
+ },
86
+ "panel": {
87
+ "selector": "[role='tabpanel'], .lt-tabs__panel:not([role])",
88
+ "description": "The content of one tab, with the id the link points to. The panel has the same name as the tab: the heading at the top of the panel is the name when it says the same as the tab.",
89
+ "content": "free",
90
+ "multiple": true
91
+ }
92
+ },
93
+ "events": {
94
+ "tab-select": {
95
+ "detail": {
96
+ "index": "number"
97
+ }
98
+ }
99
+ }
100
+ },
101
+ "lt-error-summary": {
102
+ "link": "https://lo-tek.sobernetics.no/components/error-summary/",
103
+ "description": "Error summary. Moves focus to the box when it appears, and to the control when a link in the list is followed.",
104
+ "attributes": {
105
+ "data-autofocus": {
106
+ "type": "values",
107
+ "values": [
108
+ "false",
109
+ "true"
110
+ ],
111
+ "description": "Whether focus moves to the box when it appears. On by default."
112
+ },
113
+ "hidden": {
114
+ "type": "flag",
115
+ "description": "The box is hidden. The server removes the attribute when the form fails, and the component then moves focus."
116
+ }
117
+ },
118
+ "parts": {
119
+ "title": {
120
+ "selector": "h1, h2, h3, h4, h5, h6",
121
+ "description": "The heading in the box. The component gives it the title class.",
122
+ "content": "text"
123
+ },
124
+ "link": {
125
+ "selector": "li a[href^='#']",
126
+ "description": "A link to a field with an error, in a list item. `href` is `#` and the field's id.",
127
+ "content": "text",
128
+ "multiple": true
129
+ }
130
+ }
131
+ },
132
+ "lt-popover": {
133
+ "link": "https://lo-tek.sobernetics.no/components/popover/",
134
+ "description": "A panel that hangs from a button and closes itself. A button and a panel with the class `lt-popover` and an id from the template; the component sets `popover` and `aria-controls` where the markup came without them, but never the id.",
135
+ "attributes": {
136
+ "open": {
137
+ "type": "flag",
138
+ "description": "The panel is open. The server can send the attribute to open the panel."
139
+ },
140
+ "placement": {
141
+ "type": "values",
142
+ "values": [
143
+ "bottom-start",
144
+ "bottom-end",
145
+ "top-start",
146
+ "top-end"
147
+ ],
148
+ "description": "Which edge of the button the panel hangs from."
149
+ },
150
+ "server-controlled": {
151
+ "type": "flag",
152
+ "description": "The server decides whether the panel is open. The component does not put `open` back when an update from the server removes it."
153
+ }
154
+ },
155
+ "parts": {
156
+ "trigger": {
157
+ "selector": "button, [role='button']",
158
+ "description": "The button that opens and closes the panel: the one with `aria-controls` pointing at the panel's id, otherwise the first button outside the panel.",
159
+ "content": "text"
160
+ },
161
+ "panel": {
162
+ "selector": "[popover], .lt-popover",
163
+ "description": "The panel that opens: the element with `popover`, or the class. It needs an id from the server, which `aria-controls` on the button points to. The component never creates one, and without it the button cannot be wired to the panel.",
164
+ "content": "free",
165
+ "stableId": true
166
+ }
167
+ },
168
+ "events": {
169
+ "popover-toggle": {
170
+ "detail": {
171
+ "open": "boolean"
172
+ }
173
+ }
174
+ }
175
+ },
176
+ "lt-suggestion": {
177
+ "link": "https://lo-tek.sobernetics.no/components/suggestion/",
178
+ "description": "Field with a suggestion list. A `<label for>`, an `<input id>`, an `.lt-suggestion__list` with `<li>` items and a `[role=status]` are enough; the component sets the roles and the wiring where the markup came without them, and gives the list and the options ids. The field never gets an id from the component. Filters as the user types, moves the highlight with the arrow keys and announces the number of matches.",
179
+ "attributes": {
180
+ "prefiltered": {
181
+ "type": "flag",
182
+ "description": "The app has already filtered the list, so the component leaves it as it is. Needed when the app's filter is something other than \"the text contains the search term\"."
183
+ },
184
+ "count-none": {
185
+ "type": "text",
186
+ "description": "The announcement for no matches. The default is \"No matches\"."
187
+ },
188
+ "count-zero": {
189
+ "type": "text",
190
+ "description": "The announcement in the plural form `zero`, for languages that have it. `{n}` is the number."
191
+ },
192
+ "count-one": {
193
+ "type": "text",
194
+ "description": "The announcement for one match. `{n}` is the number."
195
+ },
196
+ "count-two": {
197
+ "type": "text",
198
+ "description": "The announcement in the plural form `two`, for languages that have it. `{n}` is the number."
199
+ },
200
+ "count-few": {
201
+ "type": "text",
202
+ "description": "The announcement in the plural form `few`, for languages that have it. `{n}` is the number."
203
+ },
204
+ "count-many": {
205
+ "type": "text",
206
+ "description": "The announcement in the plural form `many`, for languages that have it. `{n}` is the number."
207
+ },
208
+ "count-other": {
209
+ "type": "text",
210
+ "description": "The announcement for every other count, and the fallback when a form is missing. `{n}` is the number."
211
+ },
212
+ "server-controlled": {
213
+ "type": "flag",
214
+ "description": "The server decides whether the list is expanded and which option is highlighted. The component does not put them back after an update from the server."
215
+ }
216
+ },
217
+ "parts": {
218
+ "control": {
219
+ "selector": "[role='combobox'], input:not([type='hidden'])",
220
+ "description": "The field the user types in: `role=\"combobox\"`, otherwise the first `<input>`. The template writes `for` on the label and `id` on the field, or wraps the field in the label.",
221
+ "content": "none",
222
+ "unique": true,
223
+ "stableId": true
224
+ },
225
+ "list": {
226
+ "selector": "[role='listbox'], .lt-suggestion__list",
227
+ "description": "The list of suggestions. It sits in the top layer when it is open, `popover=\"manual\"`, and has the label as its name.",
228
+ "content": "parts",
229
+ "unique": true
230
+ },
231
+ "option": {
232
+ "selector": "[role='option'], .lt-suggestion__list > li:not([role])",
233
+ "description": "One suggestion in the list: `role=\"option\"`, or an `<li>` without a role.",
234
+ "content": "text",
235
+ "multiple": true
236
+ },
237
+ "empty": {
238
+ "selector": ".lt-suggestion__empty",
239
+ "description": "The message shown when nothing matches.",
240
+ "content": "text",
241
+ "unique": true,
242
+ "optional": true
243
+ },
244
+ "status": {
245
+ "selector": "[role='status']",
246
+ "description": "The announcement of the number of matches. The element is left empty, and the component fills it.",
247
+ "content": "none"
248
+ },
249
+ "value": {
250
+ "selector": "input.lt-suggestion__value",
251
+ "description": "A hidden `<input>` that gets the `data-value` of the option the user chose. Without it, only the text in the field is submitted.",
252
+ "content": "none",
253
+ "unique": true,
254
+ "optional": true
255
+ }
256
+ },
257
+ "events": {
258
+ "suggestion-select": {
259
+ "detail": {
260
+ "value": "string",
261
+ "label": "string"
262
+ }
263
+ }
264
+ }
265
+ },
266
+ "lt-dialog": {
267
+ "link": "https://lo-tek.sobernetics.no/components/dialog/",
268
+ "description": "Makes a `<dialog class=\"lt-dialog\">` modal with `showModal()`, for servers that cannot call it themselves. The host around the dialog. Gives the dialog its name from the first heading outside `lt-dialog__body` when neither `aria-labelledby` nor `aria-label` is there.",
269
+ "attributes": {
270
+ "open": {
271
+ "type": "flag",
272
+ "description": "The dialog is open. For the server to show it, `open` must be on `<dialog>` too."
273
+ },
274
+ "server-controlled": {
275
+ "type": "flag",
276
+ "description": "When an update from the server removes `open` from `<dialog>` while the dialog is open, the component closes it and dispatches `dialog-toggle`, instead of putting `open` back."
277
+ }
278
+ },
279
+ "parts": {
280
+ "dialog": {
281
+ "selector": ":scope > dialog",
282
+ "description": "The `<dialog>` element, as a direct child of the host.",
283
+ "content": "free",
284
+ "unique": true
285
+ },
286
+ "title": {
287
+ "selector": "h1, h2, h3, h4, h5, h6",
288
+ "description": "The title: what `aria-labelledby` points to, otherwise the first heading outside the body. With `aria-label` on `<dialog>` it is not needed.",
289
+ "content": "text",
290
+ "optional": true
291
+ },
292
+ "body": {
293
+ "selector": ".lt-dialog__body",
294
+ "description": "The body, which scrolls when the dialog gets too tall. A heading here does not become the title.",
295
+ "content": "free",
296
+ "unique": true,
297
+ "optional": true
298
+ }
299
+ },
300
+ "events": {
301
+ "dialog-toggle": {
302
+ "detail": {
303
+ "open": "boolean",
304
+ "returnValue": "string"
305
+ }
306
+ }
307
+ }
308
+ },
309
+ "lt-toast": {
310
+ "link": "https://lo-tek.sobernetics.no/components/toast/",
311
+ "description": "A queue of short messages in the corner of the screen. The messages are created from script with `show(text, { color, duration })`.",
312
+ "attributes": {
313
+ "duration": {
314
+ "type": "number",
315
+ "description": "Milliseconds before a message disappears. The default is 6000, and 0 keeps the messages."
316
+ },
317
+ "label": {
318
+ "type": "text",
319
+ "description": "Text that tells screen readers what the region is for."
320
+ },
321
+ "close-label": {
322
+ "type": "text",
323
+ "description": "What the close button in each message is called for screen readers. The default is \"Close message\"."
324
+ }
325
+ },
326
+ "parts": {},
327
+ "events": {
328
+ "toast-dismiss": {}
329
+ }
330
+ },
331
+ "lt-session-timeout": {
332
+ "link": "https://lo-tek.sobernetics.no/components/session-timeout/",
333
+ "description": "Warns before a signed-in session expires, and counts down. The renderer writes the dialog and the text inside the element: a `<dialog>` with `.lt-session-timeout__count` for the number, `[role=status]` for the announcement and the buttons in a `<form method=\"dialog\">`. Dispatches `session-warn` when the dialog opens, `session-extend` when the user wants to continue, `session-logout` when the user logs out, `session-expired` when time is up, and `session-activity` at most once per `activity-interval` while the user is active, so the app can keep the server session alive.",
334
+ "attributes": {
335
+ "warn-at": {
336
+ "type": "number",
337
+ "description": "Seconds without activity before the warning appears."
338
+ },
339
+ "expires-at": {
340
+ "type": "number",
341
+ "description": "Seconds without activity before the session expires."
342
+ },
343
+ "activity-interval": {
344
+ "type": "number",
345
+ "description": "Seconds between each `session-activity` while the user is active. Default 60."
346
+ }
347
+ },
348
+ "parts": {
349
+ "dialog": {
350
+ "selector": "dialog",
351
+ "description": "The `<dialog>` element with the warning.",
352
+ "content": "free",
353
+ "unique": true
354
+ },
355
+ "title": {
356
+ "selector": "h1, h2, h3, h4, h5, h6",
357
+ "description": "The heading in the dialog, which becomes its name when neither `aria-labelledby` nor `aria-label` is on `<dialog>`.",
358
+ "content": "text",
359
+ "optional": true
360
+ },
361
+ "text": {
362
+ "selector": ".lt-session-timeout__text",
363
+ "description": "The paragraph with the time remaining. The announcement is this paragraph with the number replaced.",
364
+ "content": "text",
365
+ "unique": true
366
+ },
367
+ "count": {
368
+ "selector": ".lt-session-timeout__count",
369
+ "description": "The number that counts down, inside the paragraph. The component fills it.",
370
+ "content": "none",
371
+ "unique": true
372
+ },
373
+ "status": {
374
+ "selector": "[role='status']",
375
+ "description": "The announcement. The element is left empty, and the component fills it.",
376
+ "content": "none"
377
+ },
378
+ "button": {
379
+ "selector": "form[method=\"dialog\" i] button",
380
+ "description": "The buttons in `<form method=\"dialog\">`, which extend the session or log out.",
381
+ "content": "text",
382
+ "multiple": true
383
+ }
384
+ },
385
+ "events": {
386
+ "session-warn": {},
387
+ "session-extend": {},
388
+ "session-logout": {},
389
+ "session-expired": {},
390
+ "session-activity": {}
391
+ }
392
+ },
393
+ "lt-connection-status": {
394
+ "link": "https://lo-tek.sobernetics.no/components/connection-status/",
395
+ "description": "Tells the user when the connection to the server is lost. The app reports with `reportFailure()` and `reportSuccess()`.",
396
+ "attributes": {
397
+ "offline-text": {
398
+ "type": "text",
399
+ "description": "The text when the connection is lost."
400
+ },
401
+ "online-text": {
402
+ "type": "text",
403
+ "description": "The text when it comes back."
404
+ }
405
+ },
406
+ "parts": {},
407
+ "events": {
408
+ "connection-lost": {},
409
+ "connection-restored": {}
410
+ }
411
+ }
412
+ }
@@ -0,0 +1,178 @@
1
+ /**
2
+ * The shape of the vocabulary: the elements and classes LO-TEK has.
3
+ *
4
+ * `elements.ts` and `classes.ts` next to this file are generated by
5
+ * `scripts/generate-vocabulary.ts`, and are the source the manifest is
6
+ * written from (`scripts/generate-manifest.ts`). The core and all the tools
7
+ * read the manifest, not these files, so they are not part of the package's
8
+ * API.
9
+ */
10
+
11
+ export type Attribute = (
12
+ | { type: "flag" | "text" | "number" }
13
+ | { type: "values"; values: readonly string[] }
14
+ ) & { description?: string }
15
+
16
+ /**
17
+ * A part of an element, such as the control in `<lt-field>`. `selector` is
18
+ * the one the component finds the part with, relative to the element.
19
+ * `content` is what the part takes: `text` is text and phrasing without
20
+ * interactive elements, `free` free content, `parts` only the other parts,
21
+ * and `none` no text: the part is a control, such as a `<select>` with its
22
+ * `<option>` elements, or an element the component fills. Without `multiple`
23
+ * the first one applies, and with `unique` another part of the same kind is
24
+ * an error, not ordinary content. Without `optional` the element needs the
25
+ * part.
26
+ */
27
+ export type Part = {
28
+ selector: string
29
+ description: string
30
+ content: "text" | "free" | "parts" | "none"
31
+ multiple?: true
32
+ /** Another part of the same kind is an error, not ordinary content. */
33
+ unique?: true
34
+ optional?: true
35
+ /** The part must have an id from the server; the component never writes one. */
36
+ stableId?: true
37
+ }
38
+
39
+ /**
40
+ * An event an element dispatches, such as `dialog-toggle`. `detail` is the
41
+ * fields in `event.detail` with their types, and is absent when the event
42
+ * has none.
43
+ */
44
+ export type ElementEvent = {
45
+ detail?: Record<string, "boolean" | "string" | "number">
46
+ }
47
+
48
+ export type Element = {
49
+ link: string
50
+ description?: string
51
+ attributes: Record<string, Attribute>
52
+ /** Empty for the elements that create all of their content themselves. */
53
+ parts?: Record<string, Part>
54
+ events?: Record<string, ElementEvent>
55
+ /** Attributes that have been removed, with what applies instead. */
56
+ removed?: Record<string, string>
57
+ }
58
+
59
+ /** The content of `elements.ts`: tag to element. */
60
+ export type Elements = Record<string, Element>
61
+
62
+ /**
63
+ * An attribute a class takes, such as `data-variant` on `lt-button`.
64
+ *
65
+ * `flag` is an attribute that works by being present, such as
66
+ * `data-interactive` on `lt-card`. The stylesheet only asks whether it
67
+ * exists, so it has no values.
68
+ */
69
+ export type ClassAttribute = {
70
+ values: readonly string[]
71
+ default?: string
72
+ flag?: true
73
+ }
74
+
75
+ export type ClassInfo = {
76
+ /** The path of the component page, such as `button`. */
77
+ component: string
78
+ title: string
79
+ description: string
80
+ link: string
81
+ /** What the element with the class takes as content, in the same words as the parts. */
82
+ content: Part["content"]
83
+ /**
84
+ * The class this one is part of, when it is only part of another
85
+ * component's markup, such as `lt-card__title` in `lt-card`. The parent has
86
+ * a part that matches it.
87
+ */
88
+ partOf?: string
89
+ /** The parts the markup consists of, for the classes with a fixed structure. */
90
+ parts?: Record<string, Part>
91
+ attributes: Record<string, ClassAttribute>
92
+ }
93
+
94
+ /** The content of `classes.ts`: class name to class. */
95
+ export type Classes = Record<string, ClassInfo>
96
+
97
+ /**
98
+ * The tokens in the manifest: what a stylesheet outside the package can
99
+ * build on. The colours are listed as axes with what they are for, not as
100
+ * values, since a theme can have values other than LO-TEK's defaults.
101
+ * `components` is the component variables per component, with the fallback
102
+ * in the stylesheet as the value.
103
+ */
104
+ export type ManifestTokens = {
105
+ /** The spacing scale, name to value. */
106
+ spacing: Record<string, string>
107
+ breakpoints: Record<string, string>
108
+ containers: Record<string, string>
109
+ colors: {
110
+ /** The families, with what each is for. */
111
+ families: Record<string, string>
112
+ /** The roles as they are written in CSS, with what each is for. */
113
+ roles: Record<string, string>
114
+ /** The layers only the neutral family has. */
115
+ layers: Record<string, string>
116
+ /** Every `--lt-color-*` name the package ships. */
117
+ tokens: readonly string[]
118
+ }
119
+ /** Component to variable name to default value. */
120
+ components: Record<string, Record<string, string>>
121
+ }
122
+
123
+ /** What an option of a builder function takes. */
124
+ export type BuilderOptionType =
125
+ | { kind: "values"; values: readonly string[] }
126
+ | { kind: "flag" | "text" | "number" | "textList" }
127
+
128
+ /** The shape of what a builder function returns. */
129
+ export type BuilderReturns = { optional?: boolean } & (
130
+ | { kind: "attributes" | "text" }
131
+ | { kind: "values"; values: readonly string[] }
132
+ | { kind: "list"; of: BuilderReturns }
133
+ | { kind: "group"; fields: Record<string, BuilderReturns> }
134
+ )
135
+
136
+ /**
137
+ * A builder function in `lt`, such as `button`, with its options and the
138
+ * shape of its result. `table`, which the generator behind the Kotlin
139
+ * version uses, is left out here.
140
+ */
141
+ export type Builder = {
142
+ name: string
143
+ options: {
144
+ name: string
145
+ required: boolean
146
+ type: BuilderOptionType
147
+ description?: string
148
+ }[]
149
+ returns: BuilderReturns
150
+ }
151
+
152
+ /**
153
+ * The shape of `manifest.json`, as `manifest.schema.json` describes it. The
154
+ * elements are the same as in `elements.ts`. A class attribute in the
155
+ * manifest is either a list of values or a flag, and a flag has no values,
156
+ * unlike `classes.ts`, where the flag has an empty list.
157
+ */
158
+ export type Manifest = {
159
+ schemaVersion: number
160
+ version: string
161
+ elements: Elements
162
+ tokens: ManifestTokens
163
+ builders: Builder[]
164
+ classes: Record<
165
+ string,
166
+ Omit<ClassInfo, "attributes"> & {
167
+ attributes: Record<
168
+ string,
169
+ {
170
+ values?: readonly string[]
171
+ default?: string
172
+ flag?: true
173
+ description?: string
174
+ }
175
+ >
176
+ }
177
+ >
178
+ }