@lo-tek/interfaces 0.0.0 → 0.38.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 +3389 -0
  2. package/LICENSE +21 -0
  3. package/README.md +129 -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 +41 -0
  161. package/dist/components/default-texts.d.ts.map +1 -0
  162. package/dist/components/default-texts.js +41 -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 +434 -0
  175. package/dist/components/frame/dialog/lt-dialog.js.map +1 -0
  176. package/dist/components/frame/error-summary/error-summary.d.ts +53 -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 +54 -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 +93 -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 +408 -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 +600 -0
  191. package/dist/components/frame/field/lt-field.js.map +1 -0
  192. package/dist/components/frame/popover/lt-popover.d.ts +136 -0
  193. package/dist/components/frame/popover/lt-popover.d.ts.map +1 -0
  194. package/dist/components/frame/popover/lt-popover.js +520 -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 +610 -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 +367 -0
  209. package/dist/components/frame/suggestion/lt-suggestion.d.ts.map +1 -0
  210. package/dist/components/frame/suggestion/lt-suggestion.js +1171 -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 +426 -0
  217. package/dist/components/frame/tabs/lt-tabs.d.ts.map +1 -0
  218. package/dist/components/frame/tabs/lt-tabs.js +1265 -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 +184 -0
  225. package/dist/components/host-element.d.ts.map +1 -0
  226. package/dist/components/host-element.js +440 -0
  227. package/dist/components/host-element.js.map +1 -0
  228. package/dist/components/standalone/connection-status/connection-status.d.ts +32 -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 +26 -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 +86 -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 +240 -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 +171 -0
  245. package/dist/diagnostics/core.d.ts.map +1 -0
  246. package/dist/diagnostics/core.js +84 -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 +494 -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 +1354 -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 +490 -0
  316. package/dist/vocabulary/elements.js.map +1 -0
  317. package/dist/vocabulary/types.d.ts +229 -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 +63 -0
  326. package/manifest/files.json +373 -0
  327. package/manifest/manifest.json +5090 -0
  328. package/manifest/manifest.schema.json +586 -0
  329. package/package.json +399 -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 +41 -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 +513 -0
  407. package/src/components/frame/error-summary/error-summary.css +47 -0
  408. package/src/components/frame/error-summary/error-summary.ts +90 -0
  409. package/src/components/frame/error-summary/lt-error-summary.ts +458 -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 +790 -0
  413. package/src/components/frame/popover/lt-popover.ts +586 -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 +715 -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 +1379 -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 +1395 -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 +493 -0
  426. package/src/components/standalone/connection-status/connection-status.css +41 -0
  427. package/src/components/standalone/connection-status/connection-status.ts +47 -0
  428. package/src/components/standalone/connection-status/lt-connection-status.ts +268 -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 +227 -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 +1356 -0
  453. package/src/vocabulary/elements.ts +492 -0
  454. package/src/vocabulary/types.ts +228 -0
  455. package/src/wasi-host.ts +155 -0
  456. package/web-types.json +800 -0
package/src/dom.ts ADDED
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Applying the attributes to an element in the plain DOM.
3
+ *
4
+ * In JSX you spread the object straight onto the element. Without JSX you
5
+ * would have to loop through it yourself, and take care to remove attributes
6
+ * from the previous state. When a field goes from invalid to valid, the
7
+ * builder function leaves out `data-state`, and a `setAttribute` alone would
8
+ * have left the old value in place.
9
+ */
10
+
11
+ import { managedNames } from "./components/css/shared.js"
12
+
13
+ /**
14
+ * What gets cleaned up for a set without a builder function behind it.
15
+ *
16
+ * A handwritten or spread set is not in the map of what it manages, and then
17
+ * the `data-*` names are the only ones the function can safely remove: they
18
+ * belong to the system. A set straight from a builder function does not use
19
+ * this list. It cleans up exactly what the builder function manages, so
20
+ * `lt.popover().trigger` on a secondary button leaves `data-variant` alone.
21
+ */
22
+ const SAFE_FOR_UNKNOWN = [
23
+ "data-variant",
24
+ "data-state",
25
+ "data-color",
26
+ "data-size",
27
+ "data-picker",
28
+ "data-required",
29
+ "data-optional",
30
+ "data-interactive",
31
+ "data-hoverable",
32
+ "data-selectable",
33
+ "data-autofocus",
34
+ ] as const
35
+
36
+ /**
37
+ * Names that are never removed, not even when the builder function manages
38
+ * them.
39
+ *
40
+ * `id` and `for` are connections other elements point to. `lt.errorSummary()`
41
+ * takes an optional `id`, and a call without it removed the id the consumer
42
+ * had written on the box: every link and every `aria-*` pointing there broke.
43
+ */
44
+ const NEVER_REMOVED: readonly string[] = ["id", "for"]
45
+
46
+ let warnedAboutUnknownSet = false
47
+
48
+ /** The classes that belong to the system. The consumer's classes are kept. */
49
+ const IS_SYSTEM_CLASS = /^lt-/
50
+
51
+ /**
52
+ * The values a builder function can output.
53
+ *
54
+ * `true` and `false` are included because several of them are boolean HTML
55
+ * attributes: `disabled` on a switch, `multiple` on a file field, `hidden` on
56
+ * an error text. In HTML such an attribute is true as long as it exists,
57
+ * whatever its value, so `true` is set as the empty string and `false`
58
+ * removes it.
59
+ */
60
+ export type Attributes = Record<string, string | boolean | undefined>
61
+
62
+ /**
63
+ * Sets the attributes from an `lt` function on an element.
64
+ *
65
+ * ```ts
66
+ * import { lt } from "@lo-tek/interfaces"
67
+ *
68
+ * const field = document.querySelector("input")
69
+ * lt.setAttributes(field, lt.input({ type: "email", state: "invalid" }))
70
+ * ```
71
+ *
72
+ * Call it again to change state. What the builder function manages and is
73
+ * not in the new set is removed, and the `lt-` classes are replaced. A
74
+ * builder function manages the attributes it has an option for:
75
+ * `lt.spinner()` has `label`, and so manages `role` and `aria-label`. What it
76
+ * has no option for stays as it is: `lt.button()` has never written
77
+ * `disabled`, so a disabled button is still disabled afterwards. `id` and
78
+ * `for` are never removed.
79
+ *
80
+ * When two sets go on the same element, pass them separately, not spread
81
+ * together:
82
+ *
83
+ * ```ts
84
+ * lt.setAttributes(field, lt.input({ type: "email" }), wiring.control)
85
+ * ```
86
+ *
87
+ * A spread object is a new object, and then the function does not know which
88
+ * builder function it came from. It is set correctly, but only `data-*` is
89
+ * cleaned up. An explicit `false` in a handwritten set removes the attribute.
90
+ *
91
+ * It accepts `null`, and then does nothing. `document.querySelector()`
92
+ * returns `Element | null`, so without that every call site in a `strict` app
93
+ * would need a guard or an exclamation mark around a lookup that almost
94
+ * always succeeds. It is the same trade-off as `element?.classList`.
95
+ */
96
+ export function setAttributes(
97
+ element: Element | null | undefined,
98
+ ...sets: Attributes[]
99
+ ): void {
100
+ if (!element || sets.length === 0) return
101
+
102
+ const merged: Attributes = {}
103
+ const removable = new Set<string>()
104
+ const classes: string[] = []
105
+
106
+ for (const set of sets) {
107
+ const names = managedNames(set)
108
+ if (names) {
109
+ for (const name of names) removable.add(name)
110
+ } else {
111
+ for (const name of SAFE_FOR_UNKNOWN) removable.add(name)
112
+ warnAboutUnknownSet(set)
113
+ }
114
+ for (const [name, value] of Object.entries(set)) {
115
+ if (name === "class") {
116
+ if (typeof value === "string") classes.push(...value.split(/\s+/))
117
+ } else if (value === false) {
118
+ // An explicit `false` in a handwritten set is a request.
119
+ merged[name] = false
120
+ removable.add(name)
121
+ } else if (value !== undefined) {
122
+ // `undefined` does not override an earlier set: the builder functions
123
+ // drop such keys themselves, and a handwritten set must not be able to
124
+ // take `aria-invalid` from `lt.input()` by naming it without a value.
125
+ merged[name] = value
126
+ }
127
+ }
128
+ }
129
+ for (const name of NEVER_REMOVED) removable.delete(name)
130
+
131
+ if (classes.length > 0) {
132
+ const ownClasses = [...element.classList].filter(
133
+ (token) => !IS_SYSTEM_CLASS.test(token),
134
+ )
135
+ // `setAttribute` and not `className`: on an `<svg>`, `className` is a
136
+ // read-only `SVGAnimatedString`, and `lt.icon()` belongs on an svg.
137
+ element.setAttribute(
138
+ "class",
139
+ [...new Set([...classes, ...ownClasses])].filter(Boolean).join(" "),
140
+ )
141
+ }
142
+
143
+ for (const name of removable) {
144
+ if (name === "class") continue
145
+ setOrRemove(element, name, merged[name])
146
+ }
147
+
148
+ for (const [name, value] of Object.entries(merged)) {
149
+ if (removable.has(name)) continue
150
+ if (value === undefined || value === false) continue
151
+ element.setAttribute(name, value === true ? "" : value)
152
+ }
153
+ }
154
+
155
+ /**
156
+ * Warns, once, about a set that looks like two spread together.
157
+ *
158
+ * `{ ...lt.input(), ...field.control }` is set correctly, but is a new object
159
+ * without a builder function behind it. The next call then does not remove
160
+ * `aria-invalid` when the field becomes valid, and nothing else would have
161
+ * said so.
162
+ */
163
+ function warnAboutUnknownSet(set: Attributes): void {
164
+ if (warnedAboutUnknownSet) return
165
+ if (typeof set.class !== "string" || !/(^|\s)lt-/.test(set.class)) return
166
+ warnedAboutUnknownSet = true
167
+ console.warn(
168
+ "lt.setAttributes(): the set does not come straight from a builder " +
169
+ "function, so only the data attributes are cleaned up. Pass the sets " +
170
+ "separately instead of spreading them: " +
171
+ "lt.setAttributes(element, lt.input(), field.control).",
172
+ )
173
+ }
174
+
175
+ function setOrRemove(
176
+ element: Element,
177
+ name: string,
178
+ value: string | boolean | undefined,
179
+ ): void {
180
+ if (value === undefined || value === false) {
181
+ element.removeAttribute(name)
182
+ } else {
183
+ element.setAttribute(name, value === true ? "" : value)
184
+ }
185
+ }
package/src/index.ts ADDED
@@ -0,0 +1,218 @@
1
+ export type {
2
+ AccordionAttributes,
3
+ AccordionOptions,
4
+ AccordionVariant,
5
+ } from "./components/css/accordion/accordion.js"
6
+ export { accordion } from "./components/css/accordion/accordion.js"
7
+ export type {
8
+ AlertAttributes,
9
+ AlertColor,
10
+ AlertOptions,
11
+ } from "./components/css/alert/alert.js"
12
+ export { alert } from "./components/css/alert/alert.js"
13
+ export type {
14
+ AvatarAttributes,
15
+ AvatarOptions,
16
+ AvatarSize,
17
+ AvatarVariant,
18
+ } from "./components/css/avatar/avatar.js"
19
+ export { avatar } from "./components/css/avatar/avatar.js"
20
+ export type {
21
+ BadgeAttributes,
22
+ BadgeColor,
23
+ BadgeOptions,
24
+ } from "./components/css/badge/badge.js"
25
+ export { badge } from "./components/css/badge/badge.js"
26
+ export type { BreadcrumbsAttributes } from "./components/css/breadcrumbs/breadcrumbs.js"
27
+ export { breadcrumbs } from "./components/css/breadcrumbs/breadcrumbs.js"
28
+ export type {
29
+ ButtonAttributes,
30
+ ButtonOptions,
31
+ ButtonVariant,
32
+ } from "./components/css/button/button.js"
33
+ export { button } from "./components/css/button/button.js"
34
+ export type {
35
+ CardAttributes,
36
+ CardOptions,
37
+ CardVariant,
38
+ } from "./components/css/card/card.js"
39
+ export { card } from "./components/css/card/card.js"
40
+ export type {
41
+ CheckboxAttributes,
42
+ CheckboxOptions,
43
+ } from "./components/css/checkbox/checkbox.js"
44
+ export { checkbox } from "./components/css/checkbox/checkbox.js"
45
+ export type {
46
+ DividerAttributes,
47
+ DividerOptions,
48
+ DividerVariant,
49
+ } from "./components/css/divider/divider.js"
50
+ export { divider } from "./components/css/divider/divider.js"
51
+ export type {
52
+ ErrorTextAttributes,
53
+ ErrorTextOptions,
54
+ ErrorTextVariant,
55
+ } from "./components/css/error-text/error-text.js"
56
+ export { errorText } from "./components/css/error-text/error-text.js"
57
+ export type {
58
+ FieldsetAttributes,
59
+ FieldsetOptions,
60
+ LegendAttributes,
61
+ LegendOptions,
62
+ } from "./components/css/fieldset/fieldset.js"
63
+ export { fieldset, legend } from "./components/css/fieldset/fieldset.js"
64
+ export type {
65
+ FileUploadAttributes,
66
+ FileUploadOptions,
67
+ } from "./components/css/file-upload/file-upload.js"
68
+ export { fileUpload } from "./components/css/file-upload/file-upload.js"
69
+ export type {
70
+ HeadingAttributes,
71
+ HeadingOptions,
72
+ HeadingSize,
73
+ } from "./components/css/heading/heading.js"
74
+ export { heading } from "./components/css/heading/heading.js"
75
+ export type {
76
+ HelpTextAttributes,
77
+ HelpTextOptions,
78
+ HelpTextVariant,
79
+ } from "./components/css/help-text/help-text.js"
80
+ export { helpText } from "./components/css/help-text/help-text.js"
81
+ export type {
82
+ IconAttributes,
83
+ IconOptions,
84
+ } from "./components/css/icon/icon.js"
85
+ export { icon } from "./components/css/icon/icon.js"
86
+ export type {
87
+ InputAttributes,
88
+ InputOptions,
89
+ InputType,
90
+ } from "./components/css/input/input.js"
91
+ export { input } from "./components/css/input/input.js"
92
+ export type {
93
+ LabelAttributes,
94
+ LabelOptions,
95
+ } from "./components/css/label/label.js"
96
+ export { label } from "./components/css/label/label.js"
97
+ export type { LinkAttributes, LinkOptions } from "./components/css/link/link.js"
98
+ export { link } from "./components/css/link/link.js"
99
+ export type {
100
+ ListAttributes,
101
+ ListOptions,
102
+ ListVariant,
103
+ } from "./components/css/list/list.js"
104
+ export { list } from "./components/css/list/list.js"
105
+ export type { PaginationAttributes } from "./components/css/pagination/pagination.js"
106
+ export { pagination } from "./components/css/pagination/pagination.js"
107
+ export type {
108
+ ParagraphAttributes,
109
+ ParagraphOptions,
110
+ ParagraphSize,
111
+ ParagraphVariant,
112
+ } from "./components/css/paragraph/paragraph.js"
113
+ export { paragraph } from "./components/css/paragraph/paragraph.js"
114
+ export type {
115
+ ProgressAttributes,
116
+ ProgressColor,
117
+ ProgressOptions,
118
+ } from "./components/css/progress/progress.js"
119
+ export { progress } from "./components/css/progress/progress.js"
120
+ export type {
121
+ RadioAttributes,
122
+ RadioOptions,
123
+ } from "./components/css/radio/radio.js"
124
+ export { radio } from "./components/css/radio/radio.js"
125
+ export type {
126
+ SearchAttributes,
127
+ SearchOptions,
128
+ } from "./components/css/search/search.js"
129
+ export { search } from "./components/css/search/search.js"
130
+ export type {
131
+ NonDefaultSelectPicker,
132
+ SelectAttributes,
133
+ SelectOptions,
134
+ SelectPicker,
135
+ } from "./components/css/select/select.js"
136
+ export {
137
+ isSelectPicker,
138
+ select,
139
+ selectPickers,
140
+ } from "./components/css/select/select.js"
141
+ export * from "./components/css/shared.js"
142
+ export type {
143
+ SkeletonAttributes,
144
+ SkeletonOptions,
145
+ SkeletonVariant,
146
+ } from "./components/css/skeleton/skeleton.js"
147
+ export { skeleton } from "./components/css/skeleton/skeleton.js"
148
+ export type { SkipLinkAttributes } from "./components/css/skip-link/skip-link.js"
149
+ export { skipLink } from "./components/css/skip-link/skip-link.js"
150
+ export type {
151
+ SpinnerAttributes,
152
+ SpinnerOptions,
153
+ SpinnerSize,
154
+ } from "./components/css/spinner/spinner.js"
155
+ export { spinner } from "./components/css/spinner/spinner.js"
156
+ export type { SrOnlyAttributes } from "./components/css/sr-only/sr-only.js"
157
+ export { srOnly } from "./components/css/sr-only/sr-only.js"
158
+ export type {
159
+ SwitchAttributes,
160
+ SwitchOptions,
161
+ } from "./components/css/switch/switch.js"
162
+ export { switchControl } from "./components/css/switch/switch.js"
163
+ export type {
164
+ TableAttributes,
165
+ TableOptions,
166
+ TableSortAttributes,
167
+ TableSortDirection,
168
+ TableSortOptions,
169
+ TableVariant,
170
+ } from "./components/css/table/table.js"
171
+ export {
172
+ table,
173
+ tableSort,
174
+ tableSortDirections,
175
+ } from "./components/css/table/table.js"
176
+ export type {
177
+ TagAttributes,
178
+ TagOptions,
179
+ TagVariant,
180
+ } from "./components/css/tag/tag.js"
181
+ export { tag } from "./components/css/tag/tag.js"
182
+ export type {
183
+ TextareaAttributes,
184
+ TextareaOptions,
185
+ } from "./components/css/textarea/textarea.js"
186
+ export { textarea } from "./components/css/textarea/textarea.js"
187
+ export type { ToggleGroupAttributes } from "./components/css/toggle-group/toggle-group.js"
188
+ export { toggleGroup } from "./components/css/toggle-group/toggle-group.js"
189
+ export type { TooltipAttributes } from "./components/css/tooltip/tooltip.js"
190
+ export { tooltip } from "./components/css/tooltip/tooltip.js"
191
+ export type { LtEventMap } from "./components/events.js"
192
+ export type {
193
+ DialogAttributes,
194
+ DialogOptions,
195
+ } from "./components/frame/dialog/dialog.js"
196
+ export { dialog } from "./components/frame/dialog/dialog.js"
197
+ export * from "./components/frame/dialog/lt-dialog.js"
198
+ export * from "./components/frame/error-summary/error-summary.js"
199
+ export * from "./components/frame/error-summary/lt-error-summary.js"
200
+ export * from "./components/frame/field/field-core.js"
201
+ export * from "./components/frame/field/lt-field.js"
202
+ export * from "./components/frame/popover/lt-popover.js"
203
+ export * from "./components/frame/popover/popover.js"
204
+ export * from "./components/frame/session-timeout/lt-session-timeout.js"
205
+ export * from "./components/frame/session-timeout/session-timeout.js"
206
+ export * from "./components/frame/suggestion/lt-suggestion.js"
207
+ export * from "./components/frame/suggestion/suggestion.js"
208
+ export * from "./components/frame/tabs/lt-tabs.js"
209
+ export * from "./components/frame/tabs/tabs.js"
210
+ export * from "./components/standalone/connection-status/connection-status.js"
211
+ export * from "./components/standalone/connection-status/lt-connection-status.js"
212
+ export * from "./components/standalone/toast/lt-toast.js"
213
+ export * from "./components/standalone/toast/toast.js"
214
+ export type { Attributes } from "./dom.js"
215
+ export { setAttributes } from "./dom.js"
216
+ export type { Lt } from "./lt.js"
217
+ export { lt } from "./lt.js"
218
+ export * from "./tokens/tokens.js"
@@ -0,0 +1,212 @@
1
+ import type { HTMLAttributes, RefAttributes } from "react"
2
+
3
+ // The types of the events and tag names, so `querySelector("lt-dialog")` and
4
+ // `addEventListener` are typed also for someone who only imports this entry
5
+ // point. The file has no other import from the components, so without the
6
+ // line neither `HTMLElementEventMap` nor `HTMLElementTagNameMap` was extended.
7
+ export type { LtEventMap } from "../components/events.js"
8
+
9
+ /**
10
+ * Types for the LO-TEK web components in JSX.
11
+ *
12
+ * Without them TypeScript does not know `<lt-field>` at all, and says
13
+ * "Property 'lt-field' does not exist on type JSX.IntrinsicElements". And the
14
+ * attributes are hyphenated strings without completion, so `described-by`
15
+ * and `server-controlled` are exactly where a typo is easy to make and hard
16
+ * to spot.
17
+ *
18
+ * Import once in the project, preferably from a `.d.ts` file so it does not
19
+ * end up in the bundle:
20
+ *
21
+ * ```ts
22
+ * // src/lotek.d.ts
23
+ * import "@lo-tek/interfaces/react-jsx"
24
+ * ```
25
+ *
26
+ * Astro does not need this: there `<lt-field>` is plain HTML, and no type
27
+ * check looks at the element name.
28
+ */
29
+
30
+ /**
31
+ * Boolean attributes on web components.
32
+ *
33
+ * The type is `true | undefined`, not `boolean` and not `""`, and that is
34
+ * deliberate. React treats web components differently between versions, and
35
+ * only one pattern is right in both:
36
+ *
37
+ * React 18 sets attributes React 19 sets properties
38
+ * open="" works never open
39
+ * open={true} works works
40
+ * open={false} ALWAYS open works
41
+ * open={undefined} works works
42
+ *
43
+ * React 18 stringifies to `open="false"`. The attribute then exists, and is
44
+ * therefore true. React 19 sets the property to `""`, which is falsy, and
45
+ * the setter in the component removes the attribute again.
46
+ *
47
+ * That is why the builder functions send `true` for a boolean attribute on a
48
+ * host, not the empty string. `data-*` is different: React passes those on
49
+ * as attributes in both versions, and there `""` is the canonical form.
50
+ *
51
+ * When you write it by hand, write `open={isOpen || undefined}`. The type
52
+ * here makes the two other variants compile errors instead of something you
53
+ * have to remember.
54
+ */
55
+ type Flag = true | undefined
56
+
57
+ /**
58
+ * The server decides the state in this element.
59
+ *
60
+ * The components set back what the user has done when a patch tears it away:
61
+ * the selected tab, the open popover, the expanded suggestion list. With this
62
+ * they do not, and each patch decides. Use it when the server should be able
63
+ * to move the tab itself, as in "go on to step 2".
64
+ */
65
+ type ServerControlled = {
66
+ "server-controlled"?: Flag
67
+ }
68
+
69
+ /**
70
+ * The base shape of a web component in JSX.
71
+ *
72
+ * `HTMLAttributes` alone has no `ref`. It is in `RefAttributes`, and without
73
+ * it `<lt-toast ref={queue} />` was a type error, which is exactly the
74
+ * pattern the documentation recommends for calling `.show()` and `.hide()`.
75
+ * `key` comes the same way.
76
+ */
77
+ type Host = HTMLAttributes<HTMLElement> & RefAttributes<HTMLElement>
78
+
79
+ type LtFieldAttributes = Host & {
80
+ disabled?: Flag
81
+ optional?: Flag
82
+ "described-by"?: string
83
+ }
84
+
85
+ /**
86
+ * `<lt-tabs>` has `server-controlled` and `activation`, and no `selected`.
87
+ *
88
+ * Which tab is selected is in the markup the server sent, as `aria-selected`
89
+ * on the tab and `hidden` on the panels. The component reads it from there
90
+ * instead of keeping a `selected` of its own, so the two can never disagree.
91
+ */
92
+ type LtTabsAttributes = Host &
93
+ ServerControlled & {
94
+ /**
95
+ * `manual`: the arrow keys only move focus, and Enter or Space selects.
96
+ * Default: the arrow keys select straight away.
97
+ */
98
+ activation?: "manual" | "automatic"
99
+ }
100
+
101
+ type LtErrorSummaryAttributes = Host & {
102
+ /**
103
+ * The box is hidden until there are errors to show.
104
+ *
105
+ * `HTMLAttributes` already has `hidden` as `boolean`, but on a web
106
+ * component the rule for `open` applies: React 18 writes `hidden={false}`
107
+ * as the attribute `hidden="false"`, and the box is then always hidden. So
108
+ * the type is `Flag` here too, and `hidden={hasErrors ? undefined : true}`
109
+ * is what compiles. `lt.errorSummary().host` sends it that way.
110
+ */
111
+ hidden?: Flag
112
+ /**
113
+ * Move focus here when the box appears. Default: on.
114
+ * Set `"false"` to turn it off.
115
+ */
116
+ "data-autofocus"?: "false" | "true"
117
+ }
118
+
119
+ type LtSuggestionAttributes = Host & {
120
+ /**
121
+ * Someone else has already filtered, so the component should not.
122
+ *
123
+ * The component hides an option when its text does not contain what is in
124
+ * the field. If you filter on something else, the two disagree, and then
125
+ * your filter should win. A React app that renders only the matches of a
126
+ * search that ignores diacritics is the most common case, alongside a
127
+ * Datastar app where the server sends the list again.
128
+ *
129
+ * The number of matches is announced whoever did the filtering.
130
+ */
131
+ prefiltered?: Flag
132
+ /** The announcement for zero matches, such as "No matches". */
133
+ "count-none"?: string
134
+ /** The announcement in the form `Intl.PluralRules` calls `zero`. `{n}` is the number. */
135
+ "count-zero"?: string
136
+ /** The announcement for one match, such as "{n} match". `{n}` is the number. */
137
+ "count-one"?: string
138
+ /** The announcement in the form `two`. `{n}` is the number. */
139
+ "count-two"?: string
140
+ /** The announcement in the form `few`. `{n}` is the number. */
141
+ "count-few"?: string
142
+ /** The announcement in the form `many`. `{n}` is the number. */
143
+ "count-many"?: string
144
+ /** The announcement for every other count, and the fallback. `{n}` is the number. */
145
+ "count-other"?: string
146
+ } & ServerControlled
147
+
148
+ type LtDialogAttributes = Host &
149
+ ServerControlled & {
150
+ /** The dialog is open. The component calls `showModal()`. */
151
+ open?: Flag
152
+ }
153
+
154
+ type LtPopoverAttributes = Host &
155
+ ServerControlled & {
156
+ open?: Flag
157
+ /** Which edge the panel hangs from. */
158
+ placement?: "bottom-start" | "bottom-end" | "top-start" | "top-end"
159
+ }
160
+
161
+ type LtSessionTimeoutAttributes = Host & {
162
+ /** Seconds without activity before the warning appears. */
163
+ "warn-at"?: number | string
164
+ /** Seconds without activity before the session expires. */
165
+ "expires-at"?: number | string
166
+ /** Seconds between each `session-activity` while the user is active. */
167
+ "activity-interval"?: number | string
168
+ }
169
+
170
+ type LtConnectionStatusAttributes = Host & {
171
+ /** The text when the connection is lost. */
172
+ "offline-text"?: string
173
+ /** The text when it comes back. */
174
+ "online-text"?: string
175
+ }
176
+
177
+ type LtToastAttributes = Host & {
178
+ /** Milliseconds before the messages disappear. */
179
+ duration?: number
180
+ /** Text that says what the region is. */
181
+ label?: string
182
+ /** The screen reader name of the close button in each message. */
183
+ "close-label"?: string
184
+ }
185
+
186
+ declare module "react" {
187
+ namespace JSX {
188
+ interface IntrinsicElements {
189
+ "lt-dialog": LtDialogAttributes
190
+ "lt-error-summary": LtErrorSummaryAttributes
191
+ "lt-field": LtFieldAttributes
192
+ "lt-popover": LtPopoverAttributes
193
+ "lt-suggestion": LtSuggestionAttributes
194
+ "lt-tabs": LtTabsAttributes
195
+ "lt-session-timeout": LtSessionTimeoutAttributes
196
+ "lt-connection-status": LtConnectionStatusAttributes
197
+ "lt-toast": LtToastAttributes
198
+ }
199
+ }
200
+ }
201
+
202
+ export type {
203
+ LtConnectionStatusAttributes,
204
+ LtDialogAttributes,
205
+ LtErrorSummaryAttributes,
206
+ LtFieldAttributes,
207
+ LtPopoverAttributes,
208
+ LtSessionTimeoutAttributes,
209
+ LtSuggestionAttributes,
210
+ LtTabsAttributes,
211
+ LtToastAttributes,
212
+ }