@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,1322 @@
1
+ // Generated by interfaces/scripts/generate-vocabulary.ts. Do not edit.
2
+ import type { Classes } from "./types.js"
3
+
4
+ export const classes: Classes = {
5
+ "lt-accordion": {
6
+ "component": "accordion",
7
+ "title": "Accordion",
8
+ "description": "A panel that can be expanded, built on details and summary. CSS component with two classes and no JavaScript.",
9
+ "link": "https://lo-tek.sobernetics.no/components/accordion/",
10
+ "content": "parts",
11
+ "parts": {
12
+ "summary": {
13
+ "selector": "summary",
14
+ "description": "The heading the user presses to open and close. An `<h2>` to `<h6>` inside gives it a level in the document.",
15
+ "content": "free"
16
+ },
17
+ "content": {
18
+ "selector": ".lt-accordion__content",
19
+ "description": "The content shown when the panel is open.",
20
+ "content": "free"
21
+ }
22
+ },
23
+ "attributes": {
24
+ "data-variant": {
25
+ "values": [
26
+ "plain"
27
+ ],
28
+ "default": "default"
29
+ }
30
+ }
31
+ },
32
+ "lt-accordion__content": {
33
+ "component": "accordion",
34
+ "title": "Accordion",
35
+ "description": "A panel that can be expanded, built on details and summary. CSS component with two classes and no JavaScript.",
36
+ "link": "https://lo-tek.sobernetics.no/components/accordion/",
37
+ "content": "free",
38
+ "partOf": "lt-accordion",
39
+ "attributes": {}
40
+ },
41
+ "lt-alert": {
42
+ "component": "alert",
43
+ "title": "Alert",
44
+ "description": "A message about the whole page or the whole form. CSS component with two classes and no JavaScript.",
45
+ "link": "https://lo-tek.sobernetics.no/components/alert/",
46
+ "content": "free",
47
+ "parts": {
48
+ "title": {
49
+ "selector": ".lt-alert__title",
50
+ "description": "The heading in the message.",
51
+ "content": "text",
52
+ "optional": true
53
+ }
54
+ },
55
+ "attributes": {
56
+ "data-color": {
57
+ "values": [
58
+ "info",
59
+ "success",
60
+ "warning",
61
+ "danger"
62
+ ]
63
+ }
64
+ }
65
+ },
66
+ "lt-alert__title": {
67
+ "component": "alert",
68
+ "title": "Alert",
69
+ "description": "A message about the whole page or the whole form. CSS component with two classes and no JavaScript.",
70
+ "link": "https://lo-tek.sobernetics.no/components/alert/",
71
+ "content": "text",
72
+ "partOf": "lt-alert",
73
+ "attributes": {}
74
+ },
75
+ "lt-avatar": {
76
+ "component": "avatar",
77
+ "title": "Avatar",
78
+ "description": "Profile picture or initials. A CSS component with two classes and no JavaScript.",
79
+ "link": "https://lo-tek.sobernetics.no/components/avatar/",
80
+ "content": "free",
81
+ "parts": {
82
+ "image": {
83
+ "selector": "img",
84
+ "description": "The image, with the name in `alt`. Without an image the initials are text, and the element has `aria-hidden` when the name is next to it.",
85
+ "content": "none",
86
+ "optional": true
87
+ }
88
+ },
89
+ "attributes": {
90
+ "data-variant": {
91
+ "values": [
92
+ "square"
93
+ ],
94
+ "default": "circle"
95
+ },
96
+ "data-size": {
97
+ "values": [
98
+ "small",
99
+ "large"
100
+ ],
101
+ "default": "medium"
102
+ }
103
+ }
104
+ },
105
+ "lt-avatar-stack": {
106
+ "component": "avatar",
107
+ "title": "Avatar",
108
+ "description": "Profile picture or initials. A CSS component with two classes and no JavaScript.",
109
+ "link": "https://lo-tek.sobernetics.no/components/avatar/",
110
+ "content": "parts",
111
+ "parts": {
112
+ "item": {
113
+ "selector": "li",
114
+ "description": "One list item per person.",
115
+ "content": "parts",
116
+ "multiple": true
117
+ },
118
+ "avatar": {
119
+ "selector": "li > .lt-avatar",
120
+ "description": "The avatar in each list item.",
121
+ "content": "free",
122
+ "multiple": true
123
+ }
124
+ },
125
+ "attributes": {}
126
+ },
127
+ "lt-badge": {
128
+ "component": "badge",
129
+ "title": "Badge",
130
+ "description": "Compact status badge. A CSS component with one class and no JavaScript.",
131
+ "link": "https://lo-tek.sobernetics.no/components/badge/",
132
+ "content": "text",
133
+ "attributes": {
134
+ "data-color": {
135
+ "values": [
136
+ "success",
137
+ "warning",
138
+ "danger",
139
+ "neutral"
140
+ ],
141
+ "default": "info"
142
+ }
143
+ }
144
+ },
145
+ "lt-breadcrumbs": {
146
+ "component": "breadcrumbs",
147
+ "title": "Breadcrumbs",
148
+ "description": "A breadcrumb trail that shows where on the site the user is. A CSS component with one class and no JavaScript.",
149
+ "link": "https://lo-tek.sobernetics.no/components/breadcrumbs/",
150
+ "content": "parts",
151
+ "parts": {
152
+ "item": {
153
+ "selector": "li",
154
+ "description": "One step in the trail.",
155
+ "content": "parts",
156
+ "multiple": true
157
+ },
158
+ "link": {
159
+ "selector": "li > a",
160
+ "description": "The link to the step. The last one, the page the reader is on, has `aria-current=\"page\"`.",
161
+ "content": "text",
162
+ "multiple": true
163
+ }
164
+ },
165
+ "attributes": {}
166
+ },
167
+ "lt-button": {
168
+ "component": "button",
169
+ "title": "Button",
170
+ "description": "A button for actions. CSS component with one class and no JavaScript.",
171
+ "link": "https://lo-tek.sobernetics.no/components/button/",
172
+ "content": "text",
173
+ "attributes": {
174
+ "data-variant": {
175
+ "values": [
176
+ "secondary",
177
+ "ghost",
178
+ "danger"
179
+ ],
180
+ "default": "primary"
181
+ }
182
+ }
183
+ },
184
+ "lt-card": {
185
+ "component": "card",
186
+ "title": "Card",
187
+ "description": "A box that groups content that belongs together. A CSS component with two classes and no JavaScript.",
188
+ "link": "https://lo-tek.sobernetics.no/components/card/",
189
+ "content": "free",
190
+ "parts": {
191
+ "title": {
192
+ "selector": ".lt-card__title",
193
+ "description": "The heading in the card.",
194
+ "content": "text",
195
+ "optional": true
196
+ }
197
+ },
198
+ "attributes": {
199
+ "data-variant": {
200
+ "values": [
201
+ "filled"
202
+ ],
203
+ "default": "outline"
204
+ },
205
+ "data-interactive": {
206
+ "values": [],
207
+ "flag": true
208
+ }
209
+ }
210
+ },
211
+ "lt-card__title": {
212
+ "component": "card",
213
+ "title": "Card",
214
+ "description": "A box that groups content that belongs together. A CSS component with two classes and no JavaScript.",
215
+ "link": "https://lo-tek.sobernetics.no/components/card/",
216
+ "content": "text",
217
+ "partOf": "lt-card",
218
+ "attributes": {}
219
+ },
220
+ "lt-checkbox": {
221
+ "component": "checkbox",
222
+ "title": "Checkbox",
223
+ "description": "A checkbox for a choice that stands on its own. CSS component with two classes and no JavaScript.",
224
+ "link": "https://lo-tek.sobernetics.no/components/checkbox/",
225
+ "content": "none",
226
+ "attributes": {
227
+ "data-state": {
228
+ "values": [
229
+ "invalid",
230
+ "success"
231
+ ],
232
+ "default": "default"
233
+ }
234
+ }
235
+ },
236
+ "lt-checkbox-row": {
237
+ "component": "checkbox",
238
+ "title": "Checkbox",
239
+ "description": "A checkbox for a choice that stands on its own. CSS component with two classes and no JavaScript.",
240
+ "link": "https://lo-tek.sobernetics.no/components/checkbox/",
241
+ "content": "parts",
242
+ "parts": {
243
+ "control": {
244
+ "selector": "input[type='checkbox']",
245
+ "description": "The checkbox, with its class.",
246
+ "content": "none",
247
+ "unique": true
248
+ },
249
+ "label": {
250
+ "selector": "label",
251
+ "description": "The label, wired to the control with `for`.",
252
+ "content": "text"
253
+ }
254
+ },
255
+ "attributes": {}
256
+ },
257
+ "lt-divider": {
258
+ "component": "divider",
259
+ "title": "Divider",
260
+ "description": "A line between parts of the content. A CSS component with one class and no JavaScript.",
261
+ "link": "https://lo-tek.sobernetics.no/components/divider/",
262
+ "content": "none",
263
+ "attributes": {
264
+ "data-variant": {
265
+ "values": [
266
+ "subtle",
267
+ "strong"
268
+ ],
269
+ "default": "default"
270
+ }
271
+ }
272
+ },
273
+ "lt-error-text": {
274
+ "component": "error-text",
275
+ "title": "Error Text",
276
+ "description": "Error message below a form field. A CSS component with one class and no JavaScript.",
277
+ "link": "https://lo-tek.sobernetics.no/components/error-text/",
278
+ "content": "text",
279
+ "attributes": {
280
+ "data-variant": {
281
+ "values": [
282
+ "warning"
283
+ ],
284
+ "default": "error"
285
+ }
286
+ }
287
+ },
288
+ "lt-fieldset": {
289
+ "component": "fieldset",
290
+ "title": "Fieldset",
291
+ "description": "A group of controls with a shared label. CSS component with two classes and no JavaScript.",
292
+ "link": "https://lo-tek.sobernetics.no/components/fieldset/",
293
+ "content": "free",
294
+ "parts": {
295
+ "legend": {
296
+ "selector": "> .lt-legend",
297
+ "description": "The label of the group, a `<legend>` with the class.",
298
+ "content": "text",
299
+ "unique": true
300
+ },
301
+ "help": {
302
+ "selector": ".lt-help-text",
303
+ "description": "The help text of the group, wired with `aria-describedby` on the fieldset.",
304
+ "content": "text",
305
+ "optional": true
306
+ },
307
+ "error": {
308
+ "selector": ".lt-error-text",
309
+ "description": "The error text of the group, wired with `aria-describedby` on the fieldset.",
310
+ "content": "text",
311
+ "optional": true
312
+ }
313
+ },
314
+ "attributes": {
315
+ "data-state": {
316
+ "values": [
317
+ "invalid",
318
+ "success"
319
+ ],
320
+ "default": "default"
321
+ }
322
+ }
323
+ },
324
+ "lt-legend": {
325
+ "component": "fieldset",
326
+ "title": "Fieldset",
327
+ "description": "A group of controls with a shared label. CSS component with two classes and no JavaScript.",
328
+ "link": "https://lo-tek.sobernetics.no/components/fieldset/",
329
+ "content": "text",
330
+ "partOf": "lt-fieldset",
331
+ "attributes": {
332
+ "data-required": {
333
+ "values": [
334
+ "symbol",
335
+ "text"
336
+ ]
337
+ },
338
+ "data-optional": {
339
+ "values": [],
340
+ "flag": true
341
+ }
342
+ }
343
+ },
344
+ "lt-file-upload": {
345
+ "component": "file-upload",
346
+ "title": "File Upload",
347
+ "description": "A field for uploading files. A CSS component with two classes and no JavaScript.",
348
+ "link": "https://lo-tek.sobernetics.no/components/file-upload/",
349
+ "content": "none",
350
+ "attributes": {
351
+ "data-state": {
352
+ "values": [
353
+ "invalid",
354
+ "success"
355
+ ],
356
+ "default": "default"
357
+ }
358
+ }
359
+ },
360
+ "lt-file-upload-list": {
361
+ "component": "file-upload",
362
+ "title": "File Upload",
363
+ "description": "A field for uploading files. A CSS component with two classes and no JavaScript.",
364
+ "link": "https://lo-tek.sobernetics.no/components/file-upload/",
365
+ "content": "parts",
366
+ "parts": {
367
+ "item": {
368
+ "selector": "li",
369
+ "description": "One chosen file, with its name.",
370
+ "content": "free",
371
+ "multiple": true
372
+ },
373
+ "remove": {
374
+ "selector": "li > button",
375
+ "description": "The button that removes the file, with the file name in its text.",
376
+ "content": "text",
377
+ "multiple": true,
378
+ "optional": true
379
+ }
380
+ },
381
+ "attributes": {}
382
+ },
383
+ "lt-heading": {
384
+ "component": "heading",
385
+ "title": "Heading",
386
+ "description": "Headings in six sizes, independent of level. A CSS component with one class and no JavaScript.",
387
+ "link": "https://lo-tek.sobernetics.no/components/heading/",
388
+ "content": "text",
389
+ "attributes": {
390
+ "data-size": {
391
+ "values": [
392
+ "xs",
393
+ "s",
394
+ "m",
395
+ "xl",
396
+ "mega"
397
+ ],
398
+ "default": "l"
399
+ }
400
+ }
401
+ },
402
+ "lt-help-text": {
403
+ "component": "help-text",
404
+ "title": "Help Text",
405
+ "description": "Explanatory text below a form field. A CSS component with one class and no JavaScript.",
406
+ "link": "https://lo-tek.sobernetics.no/components/help-text/",
407
+ "content": "text",
408
+ "attributes": {
409
+ "data-variant": {
410
+ "values": [
411
+ "strong",
412
+ "success",
413
+ "warning"
414
+ ],
415
+ "default": "muted"
416
+ }
417
+ }
418
+ },
419
+ "lt-icon": {
420
+ "component": "icon",
421
+ "title": "Icon",
422
+ "description": "An icon from the app's own set, as large as the text around it. A CSS component with one class and no JavaScript.",
423
+ "link": "https://lo-tek.sobernetics.no/components/icon/",
424
+ "content": "none",
425
+ "attributes": {}
426
+ },
427
+ "lt-input": {
428
+ "component": "input",
429
+ "title": "Input",
430
+ "description": "A text field for forms, with states for valid and invalid. CSS component.",
431
+ "link": "https://lo-tek.sobernetics.no/components/input/",
432
+ "content": "none",
433
+ "attributes": {
434
+ "data-state": {
435
+ "values": [
436
+ "invalid",
437
+ "success"
438
+ ],
439
+ "default": "default"
440
+ },
441
+ "data-variant": {
442
+ "values": [
443
+ "date",
444
+ "datetime-local",
445
+ "time"
446
+ ]
447
+ }
448
+ }
449
+ },
450
+ "lt-label": {
451
+ "component": "label",
452
+ "title": "Label",
453
+ "description": "A label for form fields, with marking of required and optional. A CSS component.",
454
+ "link": "https://lo-tek.sobernetics.no/components/label/",
455
+ "content": "text",
456
+ "attributes": {
457
+ "data-required": {
458
+ "values": [
459
+ "symbol",
460
+ "text"
461
+ ]
462
+ },
463
+ "data-optional": {
464
+ "values": [],
465
+ "flag": true
466
+ }
467
+ }
468
+ },
469
+ "lt-link": {
470
+ "component": "link",
471
+ "title": "Link",
472
+ "description": "Link style for navigation in running text. A CSS component with one class and no JavaScript.",
473
+ "link": "https://lo-tek.sobernetics.no/components/link/",
474
+ "content": "text",
475
+ "attributes": {}
476
+ },
477
+ "lt-list": {
478
+ "component": "list",
479
+ "title": "List",
480
+ "description": "Bulleted lists, numbered lists and lists without bullets. A CSS component with one class and no JavaScript.",
481
+ "link": "https://lo-tek.sobernetics.no/components/list/",
482
+ "content": "parts",
483
+ "parts": {
484
+ "item": {
485
+ "selector": "li",
486
+ "description": "One item in the list.",
487
+ "content": "free",
488
+ "multiple": true
489
+ }
490
+ },
491
+ "attributes": {
492
+ "data-variant": {
493
+ "values": [
494
+ "plain",
495
+ "divided"
496
+ ],
497
+ "default": "default"
498
+ }
499
+ }
500
+ },
501
+ "lt-pagination": {
502
+ "component": "pagination",
503
+ "title": "Pagination",
504
+ "description": "Page navigation for long lists. A CSS component with two classes and no JavaScript.",
505
+ "link": "https://lo-tek.sobernetics.no/components/pagination/",
506
+ "content": "parts",
507
+ "parts": {
508
+ "item": {
509
+ "selector": "li",
510
+ "description": "One list item per page, arrow and gap.",
511
+ "content": "parts",
512
+ "multiple": true
513
+ },
514
+ "link": {
515
+ "selector": "li > a, li > button",
516
+ "description": "The link or button to a page, with the page number as text and an `aria-label` that says what it is. The current one has `aria-current=\"page\"`.",
517
+ "content": "text",
518
+ "multiple": true
519
+ },
520
+ "gap": {
521
+ "selector": ".lt-pagination__gap",
522
+ "description": "The gap where pages are left out.",
523
+ "content": "text",
524
+ "multiple": true,
525
+ "optional": true
526
+ }
527
+ },
528
+ "attributes": {}
529
+ },
530
+ "lt-pagination__gap": {
531
+ "component": "pagination",
532
+ "title": "Pagination",
533
+ "description": "Page navigation for long lists. A CSS component with two classes and no JavaScript.",
534
+ "link": "https://lo-tek.sobernetics.no/components/pagination/",
535
+ "content": "text",
536
+ "partOf": "lt-pagination",
537
+ "attributes": {}
538
+ },
539
+ "lt-paragraph": {
540
+ "component": "paragraph",
541
+ "title": "Paragraph",
542
+ "description": "Body text and lead paragraphs with a limited line length. A CSS component with one class and no JavaScript.",
543
+ "link": "https://lo-tek.sobernetics.no/components/paragraph/",
544
+ "content": "text",
545
+ "attributes": {
546
+ "data-variant": {
547
+ "values": [
548
+ "lead"
549
+ ],
550
+ "default": "default"
551
+ },
552
+ "data-size": {
553
+ "values": [
554
+ "small",
555
+ "large"
556
+ ],
557
+ "default": "medium"
558
+ }
559
+ }
560
+ },
561
+ "lt-progress": {
562
+ "component": "progress",
563
+ "title": "Progress",
564
+ "description": "A progress bar for something that has an end. CSS component with one class and no JavaScript.",
565
+ "link": "https://lo-tek.sobernetics.no/components/progress/",
566
+ "content": "none",
567
+ "attributes": {
568
+ "data-color": {
569
+ "values": [
570
+ "success",
571
+ "warning",
572
+ "danger"
573
+ ]
574
+ }
575
+ }
576
+ },
577
+ "lt-radio": {
578
+ "component": "radio",
579
+ "title": "Radio",
580
+ "description": "Radio buttons for one choice among several. A CSS component with two classes and no JavaScript.",
581
+ "link": "https://lo-tek.sobernetics.no/components/radio/",
582
+ "content": "none",
583
+ "attributes": {
584
+ "data-state": {
585
+ "values": [
586
+ "invalid",
587
+ "success"
588
+ ],
589
+ "default": "default"
590
+ }
591
+ }
592
+ },
593
+ "lt-radio-row": {
594
+ "component": "radio",
595
+ "title": "Radio",
596
+ "description": "Radio buttons for one choice among several. A CSS component with two classes and no JavaScript.",
597
+ "link": "https://lo-tek.sobernetics.no/components/radio/",
598
+ "content": "parts",
599
+ "parts": {
600
+ "control": {
601
+ "selector": "input[type='radio']",
602
+ "description": "The radio button, with its class.",
603
+ "content": "none",
604
+ "unique": true
605
+ },
606
+ "label": {
607
+ "selector": "label",
608
+ "description": "The label, wired to the control with `for`.",
609
+ "content": "text"
610
+ }
611
+ },
612
+ "attributes": {}
613
+ },
614
+ "lt-search": {
615
+ "component": "search",
616
+ "title": "Search",
617
+ "description": "A search field with a magnifying glass. A CSS component with two classes and no JavaScript.",
618
+ "link": "https://lo-tek.sobernetics.no/components/search/",
619
+ "content": "none",
620
+ "attributes": {
621
+ "data-state": {
622
+ "values": [
623
+ "invalid",
624
+ "success"
625
+ ],
626
+ "default": "default"
627
+ }
628
+ }
629
+ },
630
+ "lt-search-row": {
631
+ "component": "search",
632
+ "title": "Search",
633
+ "description": "A search field with a magnifying glass. A CSS component with two classes and no JavaScript.",
634
+ "link": "https://lo-tek.sobernetics.no/components/search/",
635
+ "content": "parts",
636
+ "parts": {
637
+ "label": {
638
+ "selector": "label",
639
+ "description": "The label, wired with `for`. Often hidden with `lt-sr-only`.",
640
+ "content": "text"
641
+ },
642
+ "control": {
643
+ "selector": "input[type='search']",
644
+ "description": "The search field, with the classes `lt-input lt-search`.",
645
+ "content": "none",
646
+ "unique": true
647
+ },
648
+ "button": {
649
+ "selector": "button",
650
+ "description": "The search button.",
651
+ "content": "text",
652
+ "optional": true
653
+ }
654
+ },
655
+ "attributes": {}
656
+ },
657
+ "lt-select": {
658
+ "component": "select",
659
+ "title": "Select",
660
+ "description": "A dropdown list. CSS component with one class and no JavaScript.",
661
+ "link": "https://lo-tek.sobernetics.no/components/select/",
662
+ "content": "none",
663
+ "attributes": {
664
+ "data-state": {
665
+ "values": [
666
+ "invalid",
667
+ "success"
668
+ ],
669
+ "default": "default"
670
+ },
671
+ "data-picker": {
672
+ "values": [
673
+ "styled"
674
+ ],
675
+ "default": "auto"
676
+ }
677
+ }
678
+ },
679
+ "lt-skeleton": {
680
+ "component": "skeleton",
681
+ "title": "Skeleton",
682
+ "description": "A placeholder that shows the shape of content being loaded. A CSS component with one class and no JavaScript.",
683
+ "link": "https://lo-tek.sobernetics.no/components/skeleton/",
684
+ "content": "none",
685
+ "attributes": {
686
+ "data-variant": {
687
+ "values": [
688
+ "text",
689
+ "circle"
690
+ ],
691
+ "default": "block"
692
+ }
693
+ }
694
+ },
695
+ "lt-skip-link": {
696
+ "component": "skip-link",
697
+ "title": "Skip Link",
698
+ "description": "A link that skips past the menu to the main content. A CSS component with one class and no JavaScript.",
699
+ "link": "https://lo-tek.sobernetics.no/components/skip-link/",
700
+ "content": "text",
701
+ "attributes": {}
702
+ },
703
+ "lt-spinner": {
704
+ "component": "spinner",
705
+ "title": "Spinner",
706
+ "description": "A wait indicator for something in progress. CSS component with one class and no JavaScript.",
707
+ "link": "https://lo-tek.sobernetics.no/components/spinner/",
708
+ "content": "none",
709
+ "attributes": {
710
+ "data-size": {
711
+ "values": [
712
+ "small",
713
+ "large"
714
+ ],
715
+ "default": "medium"
716
+ }
717
+ }
718
+ },
719
+ "lt-sr-only": {
720
+ "component": "sr-only",
721
+ "title": "Sr Only",
722
+ "description": "Text only screen readers get. A CSS component with one class and no JavaScript.",
723
+ "link": "https://lo-tek.sobernetics.no/components/sr-only/",
724
+ "content": "text",
725
+ "attributes": {}
726
+ },
727
+ "lt-switch": {
728
+ "component": "switch",
729
+ "title": "Switch",
730
+ "description": "A switch for a setting that takes effect immediately. CSS component with two classes and no JavaScript.",
731
+ "link": "https://lo-tek.sobernetics.no/components/switch/",
732
+ "content": "none",
733
+ "attributes": {}
734
+ },
735
+ "lt-switch-row": {
736
+ "component": "switch",
737
+ "title": "Switch",
738
+ "description": "A switch for a setting that takes effect immediately. CSS component with two classes and no JavaScript.",
739
+ "link": "https://lo-tek.sobernetics.no/components/switch/",
740
+ "content": "parts",
741
+ "parts": {
742
+ "control": {
743
+ "selector": "input[role='switch']",
744
+ "description": "The switch, with its class.",
745
+ "content": "none",
746
+ "unique": true
747
+ },
748
+ "label": {
749
+ "selector": "label",
750
+ "description": "The label, wired to the control with `for`.",
751
+ "content": "text"
752
+ }
753
+ },
754
+ "attributes": {}
755
+ },
756
+ "lt-table": {
757
+ "component": "table",
758
+ "title": "Table",
759
+ "description": "A table for data in rows and columns. CSS component with two classes and no JavaScript.",
760
+ "link": "https://lo-tek.sobernetics.no/components/table/",
761
+ "content": "parts",
762
+ "parts": {
763
+ "caption": {
764
+ "selector": "> caption",
765
+ "description": "The name of the table.",
766
+ "content": "text",
767
+ "unique": true,
768
+ "optional": true
769
+ },
770
+ "head": {
771
+ "selector": "> thead",
772
+ "description": "The header row, with a `<th scope=\"col\">` per column.",
773
+ "content": "free",
774
+ "unique": true
775
+ },
776
+ "body": {
777
+ "selector": "tbody",
778
+ "description": "The rows, in one or more groups. A `<th scope=\"row\">` first in the row gives the row a name.",
779
+ "content": "free",
780
+ "multiple": true
781
+ },
782
+ "sort": {
783
+ "selector": "th > .lt-table__sort",
784
+ "description": "The button in a sortable header. `aria-sort` on the cell says which way.",
785
+ "content": "text",
786
+ "multiple": true,
787
+ "optional": true
788
+ }
789
+ },
790
+ "attributes": {
791
+ "data-variant": {
792
+ "values": [
793
+ "striped"
794
+ ],
795
+ "default": "default"
796
+ },
797
+ "data-hoverable": {
798
+ "values": [],
799
+ "flag": true
800
+ }
801
+ }
802
+ },
803
+ "lt-table__sort": {
804
+ "component": "table",
805
+ "title": "Table",
806
+ "description": "A table for data in rows and columns. CSS component with two classes and no JavaScript.",
807
+ "link": "https://lo-tek.sobernetics.no/components/table/",
808
+ "content": "text",
809
+ "partOf": "lt-table",
810
+ "attributes": {}
811
+ },
812
+ "lt-table-scroll": {
813
+ "component": "table",
814
+ "title": "Table",
815
+ "description": "A table for data in rows and columns. CSS component with two classes and no JavaScript.",
816
+ "link": "https://lo-tek.sobernetics.no/components/table/",
817
+ "content": "parts",
818
+ "parts": {
819
+ "table": {
820
+ "selector": ".lt-table",
821
+ "description": "The table that can be scrolled sideways.",
822
+ "content": "free"
823
+ }
824
+ },
825
+ "attributes": {}
826
+ },
827
+ "lt-tag": {
828
+ "component": "tag",
829
+ "title": "Tag",
830
+ "description": "A tag for topics and filters. A CSS component with one class and no JavaScript.",
831
+ "link": "https://lo-tek.sobernetics.no/components/tag/",
832
+ "content": "text",
833
+ "attributes": {
834
+ "data-variant": {
835
+ "values": [
836
+ "filled"
837
+ ],
838
+ "default": "outline"
839
+ },
840
+ "data-selectable": {
841
+ "values": [],
842
+ "flag": true
843
+ }
844
+ }
845
+ },
846
+ "lt-textarea": {
847
+ "component": "textarea",
848
+ "title": "Textarea",
849
+ "description": "A multi-line text field. A CSS component with one class and no JavaScript.",
850
+ "link": "https://lo-tek.sobernetics.no/components/textarea/",
851
+ "content": "none",
852
+ "attributes": {
853
+ "data-state": {
854
+ "values": [
855
+ "invalid",
856
+ "success"
857
+ ],
858
+ "default": "default"
859
+ }
860
+ }
861
+ },
862
+ "lt-toggle-group": {
863
+ "component": "toggle-group",
864
+ "title": "Toggle Group",
865
+ "description": "A group where one option is selected at a time. A CSS component with two classes and no JavaScript.",
866
+ "link": "https://lo-tek.sobernetics.no/components/toggle-group/",
867
+ "content": "parts",
868
+ "parts": {
869
+ "legend": {
870
+ "selector": "> legend",
871
+ "description": "What the options choose between. Can be hidden with `lt-sr-only`, but must be there.",
872
+ "content": "text",
873
+ "unique": true
874
+ },
875
+ "option": {
876
+ "selector": ".lt-toggle-group__option",
877
+ "description": "One option: a `<label>` with the radio button and the text.",
878
+ "content": "free",
879
+ "multiple": true
880
+ },
881
+ "radio": {
882
+ "selector": ".lt-toggle-group__option > input[type='radio']",
883
+ "description": "The radio button in each option, with the same `name`.",
884
+ "content": "none",
885
+ "multiple": true
886
+ }
887
+ },
888
+ "attributes": {}
889
+ },
890
+ "lt-toggle-group__option": {
891
+ "component": "toggle-group",
892
+ "title": "Toggle Group",
893
+ "description": "A group where one option is selected at a time. A CSS component with two classes and no JavaScript.",
894
+ "link": "https://lo-tek.sobernetics.no/components/toggle-group/",
895
+ "content": "free",
896
+ "partOf": "lt-toggle-group",
897
+ "attributes": {}
898
+ },
899
+ "lt-tooltip": {
900
+ "component": "tooltip",
901
+ "title": "Tooltip",
902
+ "description": "A small help text shown on hover and focus. CSS component with two classes and no JavaScript.",
903
+ "link": "https://lo-tek.sobernetics.no/components/tooltip/",
904
+ "content": "parts",
905
+ "parts": {
906
+ "trigger": {
907
+ "selector": "[aria-describedby]",
908
+ "description": "The element the bubble describes, with `aria-describedby` pointing at the bubble's id.",
909
+ "content": "text"
910
+ },
911
+ "bubble": {
912
+ "selector": ".lt-tooltip__bubble",
913
+ "description": "The bubble, with `role=\"tooltip\"` and the id.",
914
+ "content": "text"
915
+ }
916
+ },
917
+ "attributes": {}
918
+ },
919
+ "lt-tooltip__bubble": {
920
+ "component": "tooltip",
921
+ "title": "Tooltip",
922
+ "description": "A small help text shown on hover and focus. CSS component with two classes and no JavaScript.",
923
+ "link": "https://lo-tek.sobernetics.no/components/tooltip/",
924
+ "content": "text",
925
+ "partOf": "lt-tooltip",
926
+ "attributes": {}
927
+ },
928
+ "lt-dialog": {
929
+ "component": "dialog",
930
+ "title": "Dialog",
931
+ "description": "Modal dialog built on the native dialog element. Six classes and no JavaScript, with an optional component for servers that cannot call showModal().",
932
+ "link": "https://lo-tek.sobernetics.no/components/dialog/",
933
+ "content": "free",
934
+ "parts": {
935
+ "header": {
936
+ "selector": ".lt-dialog__header",
937
+ "description": "The header, with the heading and the subtitle. `data-color` on the dialog colours it.",
938
+ "content": "parts",
939
+ "optional": true
940
+ },
941
+ "title": {
942
+ "selector": ".lt-dialog__title",
943
+ "description": "The heading, which `aria-labelledby` points to.",
944
+ "content": "text",
945
+ "optional": true
946
+ },
947
+ "subtitle": {
948
+ "selector": ".lt-dialog__subtitle",
949
+ "description": "The line below the heading, inside the header.",
950
+ "content": "text",
951
+ "optional": true
952
+ },
953
+ "body": {
954
+ "selector": ".lt-dialog__body",
955
+ "description": "The content, which scrolls when the dialog gets too tall. Must be a direct child.",
956
+ "content": "free",
957
+ "optional": true
958
+ },
959
+ "footer": {
960
+ "selector": ".lt-dialog__footer",
961
+ "description": "The row of buttons at the bottom, often a `<form method=\"dialog\">`.",
962
+ "content": "free",
963
+ "optional": true
964
+ }
965
+ },
966
+ "attributes": {
967
+ "data-color": {
968
+ "values": [
969
+ "brand",
970
+ "info",
971
+ "success",
972
+ "warning",
973
+ "danger"
974
+ ],
975
+ "default": "neutral"
976
+ }
977
+ }
978
+ },
979
+ "lt-dialog__body": {
980
+ "component": "dialog",
981
+ "title": "Dialog",
982
+ "description": "Modal dialog built on the native dialog element. Six classes and no JavaScript, with an optional component for servers that cannot call showModal().",
983
+ "link": "https://lo-tek.sobernetics.no/components/dialog/",
984
+ "content": "free",
985
+ "partOf": "lt-dialog",
986
+ "attributes": {}
987
+ },
988
+ "lt-dialog__title": {
989
+ "component": "dialog",
990
+ "title": "Dialog",
991
+ "description": "Modal dialog built on the native dialog element. Six classes and no JavaScript, with an optional component for servers that cannot call showModal().",
992
+ "link": "https://lo-tek.sobernetics.no/components/dialog/",
993
+ "content": "text",
994
+ "partOf": "lt-dialog",
995
+ "attributes": {}
996
+ },
997
+ "lt-dialog__footer": {
998
+ "component": "dialog",
999
+ "title": "Dialog",
1000
+ "description": "Modal dialog built on the native dialog element. Six classes and no JavaScript, with an optional component for servers that cannot call showModal().",
1001
+ "link": "https://lo-tek.sobernetics.no/components/dialog/",
1002
+ "content": "free",
1003
+ "partOf": "lt-dialog",
1004
+ "attributes": {}
1005
+ },
1006
+ "lt-dialog__header": {
1007
+ "component": "dialog",
1008
+ "title": "Dialog",
1009
+ "description": "Modal dialog built on the native dialog element. Six classes and no JavaScript, with an optional component for servers that cannot call showModal().",
1010
+ "link": "https://lo-tek.sobernetics.no/components/dialog/",
1011
+ "content": "parts",
1012
+ "partOf": "lt-dialog",
1013
+ "parts": {
1014
+ "title": {
1015
+ "selector": ".lt-dialog__title",
1016
+ "description": "The heading.",
1017
+ "content": "text"
1018
+ },
1019
+ "subtitle": {
1020
+ "selector": ".lt-dialog__subtitle",
1021
+ "description": "The line below the heading.",
1022
+ "content": "text",
1023
+ "optional": true
1024
+ }
1025
+ },
1026
+ "attributes": {}
1027
+ },
1028
+ "lt-dialog__subtitle": {
1029
+ "component": "dialog",
1030
+ "title": "Dialog",
1031
+ "description": "Modal dialog built on the native dialog element. Six classes and no JavaScript, with an optional component for servers that cannot call showModal().",
1032
+ "link": "https://lo-tek.sobernetics.no/components/dialog/",
1033
+ "content": "text",
1034
+ "partOf": "lt-dialog",
1035
+ "attributes": {}
1036
+ },
1037
+ "lt-error-summary": {
1038
+ "component": "error-summary",
1039
+ "title": "Error Summary",
1040
+ "description": "Collects the errors in a form and takes the user to the field that failed. Frame component.",
1041
+ "link": "https://lo-tek.sobernetics.no/components/error-summary/",
1042
+ "content": "parts",
1043
+ "parts": {
1044
+ "title": {
1045
+ "selector": ".lt-error-summary__title",
1046
+ "description": "The heading, which says how many errors the form has.",
1047
+ "content": "text"
1048
+ },
1049
+ "list": {
1050
+ "selector": "ul",
1051
+ "description": "The list with one link per error.",
1052
+ "content": "parts"
1053
+ },
1054
+ "link": {
1055
+ "selector": "li a[href^='#']",
1056
+ "description": "The link to a field with an error, with the error message as text and the field's id after `#`.",
1057
+ "content": "text",
1058
+ "multiple": true
1059
+ }
1060
+ },
1061
+ "attributes": {}
1062
+ },
1063
+ "lt-error-summary__title": {
1064
+ "component": "error-summary",
1065
+ "title": "Error Summary",
1066
+ "description": "Collects the errors in a form and takes the user to the field that failed. Frame component.",
1067
+ "link": "https://lo-tek.sobernetics.no/components/error-summary/",
1068
+ "content": "text",
1069
+ "partOf": "lt-error-summary",
1070
+ "attributes": {}
1071
+ },
1072
+ "lt-popover": {
1073
+ "component": "popover",
1074
+ "title": "Popover",
1075
+ "description": "Panel that hangs below a button and closes itself. Frame component.",
1076
+ "link": "https://lo-tek.sobernetics.no/components/popover/",
1077
+ "content": "free",
1078
+ "attributes": {}
1079
+ },
1080
+ "lt-session-timeout": {
1081
+ "component": "session-timeout",
1082
+ "title": "Session Timeout",
1083
+ "description": "Warns before a logged-in session expires, and counts down. You write the dialog, the component keeps the time.",
1084
+ "link": "https://lo-tek.sobernetics.no/components/session-timeout/",
1085
+ "content": "parts",
1086
+ "parts": {
1087
+ "dialog": {
1088
+ "selector": ".lt-session-timeout__dialog",
1089
+ "description": "The dialog with the warning, with `role=\"alertdialog\"`.",
1090
+ "content": "parts"
1091
+ },
1092
+ "title": {
1093
+ "selector": ".lt-session-timeout__title",
1094
+ "description": "The heading in the dialog.",
1095
+ "content": "text",
1096
+ "optional": true
1097
+ },
1098
+ "text": {
1099
+ "selector": ".lt-session-timeout__text",
1100
+ "description": "The paragraph with the time remaining.",
1101
+ "content": "text"
1102
+ },
1103
+ "count": {
1104
+ "selector": ".lt-session-timeout__count",
1105
+ "description": "The number that counts down, inside the paragraph. The component fills it.",
1106
+ "content": "none"
1107
+ },
1108
+ "status": {
1109
+ "selector": "[role='status']",
1110
+ "description": "The announcement. Left empty, and the component fills it.",
1111
+ "content": "none"
1112
+ },
1113
+ "actions": {
1114
+ "selector": ".lt-session-timeout__actions",
1115
+ "description": "The button row, a `<form method=\"dialog\">`.",
1116
+ "content": "parts"
1117
+ },
1118
+ "button": {
1119
+ "selector": ".lt-session-timeout__actions button",
1120
+ "description": "The buttons that extend the session or log out.",
1121
+ "content": "text",
1122
+ "multiple": true
1123
+ }
1124
+ },
1125
+ "attributes": {}
1126
+ },
1127
+ "lt-session-timeout__dialog": {
1128
+ "component": "session-timeout",
1129
+ "title": "Session Timeout",
1130
+ "description": "Warns before a logged-in session expires, and counts down. You write the dialog, the component keeps the time.",
1131
+ "link": "https://lo-tek.sobernetics.no/components/session-timeout/",
1132
+ "content": "parts",
1133
+ "partOf": "lt-session-timeout",
1134
+ "parts": {
1135
+ "title": {
1136
+ "selector": ".lt-session-timeout__title",
1137
+ "description": "The heading.",
1138
+ "content": "text",
1139
+ "optional": true
1140
+ },
1141
+ "text": {
1142
+ "selector": ".lt-session-timeout__text",
1143
+ "description": "The paragraph with the time remaining.",
1144
+ "content": "text"
1145
+ },
1146
+ "count": {
1147
+ "selector": ".lt-session-timeout__count",
1148
+ "description": "The number that counts down, inside the paragraph.",
1149
+ "content": "none"
1150
+ },
1151
+ "status": {
1152
+ "selector": "[role='status']",
1153
+ "description": "The announcement, which the component fills.",
1154
+ "content": "none"
1155
+ },
1156
+ "actions": {
1157
+ "selector": ".lt-session-timeout__actions",
1158
+ "description": "The button row, a `<form method=\"dialog\">`.",
1159
+ "content": "parts"
1160
+ }
1161
+ },
1162
+ "attributes": {}
1163
+ },
1164
+ "lt-session-timeout__title": {
1165
+ "component": "session-timeout",
1166
+ "title": "Session Timeout",
1167
+ "description": "Warns before a logged-in session expires, and counts down. You write the dialog, the component keeps the time.",
1168
+ "link": "https://lo-tek.sobernetics.no/components/session-timeout/",
1169
+ "content": "text",
1170
+ "partOf": "lt-session-timeout",
1171
+ "attributes": {}
1172
+ },
1173
+ "lt-session-timeout__text": {
1174
+ "component": "session-timeout",
1175
+ "title": "Session Timeout",
1176
+ "description": "Warns before a logged-in session expires, and counts down. You write the dialog, the component keeps the time.",
1177
+ "link": "https://lo-tek.sobernetics.no/components/session-timeout/",
1178
+ "content": "text",
1179
+ "partOf": "lt-session-timeout",
1180
+ "attributes": {}
1181
+ },
1182
+ "lt-session-timeout__count": {
1183
+ "component": "session-timeout",
1184
+ "title": "Session Timeout",
1185
+ "description": "Warns before a logged-in session expires, and counts down. You write the dialog, the component keeps the time.",
1186
+ "link": "https://lo-tek.sobernetics.no/components/session-timeout/",
1187
+ "content": "none",
1188
+ "partOf": "lt-session-timeout",
1189
+ "attributes": {}
1190
+ },
1191
+ "lt-session-timeout__actions": {
1192
+ "component": "session-timeout",
1193
+ "title": "Session Timeout",
1194
+ "description": "Warns before a logged-in session expires, and counts down. You write the dialog, the component keeps the time.",
1195
+ "link": "https://lo-tek.sobernetics.no/components/session-timeout/",
1196
+ "content": "parts",
1197
+ "partOf": "lt-session-timeout",
1198
+ "parts": {
1199
+ "button": {
1200
+ "selector": "button",
1201
+ "description": "The buttons that extend the session or log out.",
1202
+ "content": "text",
1203
+ "multiple": true
1204
+ }
1205
+ },
1206
+ "attributes": {}
1207
+ },
1208
+ "lt-suggestion__list": {
1209
+ "component": "suggestion",
1210
+ "title": "Suggestion",
1211
+ "description": "Field with a suggestion list that narrows as the user types. Frame component.",
1212
+ "link": "https://lo-tek.sobernetics.no/components/suggestion/",
1213
+ "content": "parts",
1214
+ "parts": {
1215
+ "option": {
1216
+ "selector": "[role='option'], .lt-suggestion__option, > li:not([role])",
1217
+ "description": "One suggestion: the role or the class when they are there, otherwise an `<li>` without a role, which the component gives the class and the role. The list can be empty until the server fills it.",
1218
+ "content": "text",
1219
+ "multiple": true,
1220
+ "optional": true
1221
+ }
1222
+ },
1223
+ "attributes": {}
1224
+ },
1225
+ "lt-suggestion__option": {
1226
+ "component": "suggestion",
1227
+ "title": "Suggestion",
1228
+ "description": "Field with a suggestion list that narrows as the user types. Frame component.",
1229
+ "link": "https://lo-tek.sobernetics.no/components/suggestion/",
1230
+ "content": "text",
1231
+ "partOf": "lt-suggestion__list",
1232
+ "attributes": {}
1233
+ },
1234
+ "lt-suggestion__value": {
1235
+ "component": "suggestion",
1236
+ "title": "Suggestion",
1237
+ "description": "Field with a suggestion list that narrows as the user types. Frame component.",
1238
+ "link": "https://lo-tek.sobernetics.no/components/suggestion/",
1239
+ "content": "none",
1240
+ "attributes": {}
1241
+ },
1242
+ "lt-suggestion__empty": {
1243
+ "component": "suggestion",
1244
+ "title": "Suggestion",
1245
+ "description": "Field with a suggestion list that narrows as the user types. Frame component.",
1246
+ "link": "https://lo-tek.sobernetics.no/components/suggestion/",
1247
+ "content": "text",
1248
+ "attributes": {}
1249
+ },
1250
+ "lt-tabs__list": {
1251
+ "component": "tabs",
1252
+ "title": "Tabs",
1253
+ "description": "Tab list of links to their panels. Frame component.",
1254
+ "link": "https://lo-tek.sobernetics.no/components/tabs/",
1255
+ "content": "free",
1256
+ "parts": {
1257
+ "tab": {
1258
+ "selector": "a[role='tab'][href^='#'], a[href^='#']:not([role])",
1259
+ "description": "A tab: a link to its panel, such as `<a href=\"#attachments\">`. When the server has written `role=\"tab\"`, only the links with the role are tabs, and the list can hold other links. `role=\"tab\"` on something that is not a link is not a tab.",
1260
+ "content": "text",
1261
+ "multiple": true
1262
+ }
1263
+ },
1264
+ "attributes": {}
1265
+ },
1266
+ "lt-tabs__panel": {
1267
+ "component": "tabs",
1268
+ "title": "Tabs",
1269
+ "description": "Tab list of links to their panels. Frame component.",
1270
+ "link": "https://lo-tek.sobernetics.no/components/tabs/",
1271
+ "content": "free",
1272
+ "attributes": {}
1273
+ },
1274
+ "lt-connection-status": {
1275
+ "component": "connection-status",
1276
+ "title": "Connection Status",
1277
+ "description": "Tells the user when the connection to the server is gone. Standalone component.",
1278
+ "link": "https://lo-tek.sobernetics.no/components/connection-status/",
1279
+ "content": "none",
1280
+ "attributes": {}
1281
+ },
1282
+ "lt-connection-status__bar": {
1283
+ "component": "connection-status",
1284
+ "title": "Connection Status",
1285
+ "description": "Tells the user when the connection to the server is gone. Standalone component.",
1286
+ "link": "https://lo-tek.sobernetics.no/components/connection-status/",
1287
+ "content": "text",
1288
+ "attributes": {}
1289
+ },
1290
+ "lt-toast": {
1291
+ "component": "toast",
1292
+ "title": "Toast",
1293
+ "description": "A queue of short messages in the corner of the screen. Standalone component.",
1294
+ "link": "https://lo-tek.sobernetics.no/components/toast/",
1295
+ "content": "none",
1296
+ "attributes": {}
1297
+ },
1298
+ "lt-toast__message": {
1299
+ "component": "toast",
1300
+ "title": "Toast",
1301
+ "description": "A queue of short messages in the corner of the screen. Standalone component.",
1302
+ "link": "https://lo-tek.sobernetics.no/components/toast/",
1303
+ "content": "free",
1304
+ "attributes": {}
1305
+ },
1306
+ "lt-toast__close": {
1307
+ "component": "toast",
1308
+ "title": "Toast",
1309
+ "description": "A queue of short messages in the corner of the screen. Standalone component.",
1310
+ "link": "https://lo-tek.sobernetics.no/components/toast/",
1311
+ "content": "text",
1312
+ "attributes": {}
1313
+ },
1314
+ "lt-theme-control": {
1315
+ "component": "customising",
1316
+ "title": "Customising",
1317
+ "description": "Change colours, shape and size in LO-TEK without losing the changes on the next upgrade.",
1318
+ "link": "https://lo-tek.sobernetics.no/customising/",
1319
+ "content": "none",
1320
+ "attributes": {}
1321
+ }
1322
+ }