@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/lt.ts ADDED
@@ -0,0 +1,192 @@
1
+ import { accordion } from "./components/css/accordion/accordion.js"
2
+ import { alert } from "./components/css/alert/alert.js"
3
+ import { avatar } from "./components/css/avatar/avatar.js"
4
+ import { badge } from "./components/css/badge/badge.js"
5
+ import { breadcrumbs } from "./components/css/breadcrumbs/breadcrumbs.js"
6
+ import { button } from "./components/css/button/button.js"
7
+ import { card } from "./components/css/card/card.js"
8
+ import { checkbox } from "./components/css/checkbox/checkbox.js"
9
+ import { divider } from "./components/css/divider/divider.js"
10
+ import { errorText } from "./components/css/error-text/error-text.js"
11
+ import { fieldset, legend } from "./components/css/fieldset/fieldset.js"
12
+ import { fileUpload } from "./components/css/file-upload/file-upload.js"
13
+ import { heading } from "./components/css/heading/heading.js"
14
+ import { helpText } from "./components/css/help-text/help-text.js"
15
+ import { icon } from "./components/css/icon/icon.js"
16
+ import { input } from "./components/css/input/input.js"
17
+ import { label } from "./components/css/label/label.js"
18
+ import { link } from "./components/css/link/link.js"
19
+ import { list } from "./components/css/list/list.js"
20
+ import { pagination } from "./components/css/pagination/pagination.js"
21
+ import { paragraph } from "./components/css/paragraph/paragraph.js"
22
+ import { progress } from "./components/css/progress/progress.js"
23
+ import { radio } from "./components/css/radio/radio.js"
24
+ import { search } from "./components/css/search/search.js"
25
+ import { select } from "./components/css/select/select.js"
26
+ import {
27
+ fieldStates,
28
+ isFieldState,
29
+ isRequiredMarker,
30
+ requiredMarkers,
31
+ } from "./components/css/shared.js"
32
+ import { skeleton } from "./components/css/skeleton/skeleton.js"
33
+ import { skipLink } from "./components/css/skip-link/skip-link.js"
34
+ import { spinner } from "./components/css/spinner/spinner.js"
35
+ import { srOnly } from "./components/css/sr-only/sr-only.js"
36
+ import { switchControl } from "./components/css/switch/switch.js"
37
+ import { table, tableSort } from "./components/css/table/table.js"
38
+ import { tag } from "./components/css/tag/tag.js"
39
+ import { textarea } from "./components/css/textarea/textarea.js"
40
+ import { toggleGroup } from "./components/css/toggle-group/toggle-group.js"
41
+ import { tooltip } from "./components/css/tooltip/tooltip.js"
42
+ import { dialog } from "./components/frame/dialog/dialog.js"
43
+ import { errorSummary } from "./components/frame/error-summary/error-summary.js"
44
+ import { computeFieldAttributes } from "./components/frame/field/field-core.js"
45
+ import { popover } from "./components/frame/popover/popover.js"
46
+ import { sessionTimeout } from "./components/frame/session-timeout/session-timeout.js"
47
+ import { suggestion } from "./components/frame/suggestion/suggestion.js"
48
+ import { tabs } from "./components/frame/tabs/tabs.js"
49
+ import { connectionStatus } from "./components/standalone/connection-status/connection-status.js"
50
+ import { toast } from "./components/standalone/toast/toast.js"
51
+ import { setAttributes } from "./dom.js"
52
+
53
+ /**
54
+ * The whole component API in one place.
55
+ *
56
+ * Each component is a function that takes an object of options and returns
57
+ * the attributes you spread onto the element:
58
+ *
59
+ * ```ts
60
+ * import { lt } from "@lo-tek/interfaces"
61
+ *
62
+ * <button {...lt.button({ variant: "secondary" })}>Save draft</button>
63
+ * <input {...lt.input({ type: "email", state: "invalid" })} />
64
+ * <span {...lt.badge({ color: "success" })}>Approved</span>
65
+ * ```
66
+ *
67
+ * The shape is the same for all of them, so you learn it once. Type `lt.` in
68
+ * the editor to see what exists; type `lt.button.` to see the allowed
69
+ * variants and the guard that validates values from outside.
70
+ *
71
+ * The return values are plain objects. That is why the same API works in
72
+ * React, Astro, Datastar and plain HTML.
73
+ */
74
+ export const lt = {
75
+ accordion,
76
+ alert,
77
+ avatar,
78
+ badge,
79
+ breadcrumbs,
80
+ button,
81
+ card,
82
+ checkbox,
83
+ /**
84
+ * The bar that says the connection to the server is lost. The server
85
+ * cannot report that itself, so `<lt-connection-status>` creates the
86
+ * content.
87
+ */
88
+ connectionStatus,
89
+ dialog,
90
+ divider,
91
+ errorText,
92
+ /**
93
+ * The error summary above a form. The server writes the whole box, heading
94
+ * included, and `<lt-error-summary>` only moves focus.
95
+ */
96
+ errorSummary,
97
+ /**
98
+ * Connects the label, field, help text and error text.
99
+ *
100
+ * ```ts
101
+ * const field = lt.field({ id: "email", required: "text", help: true, error: true, invalid })
102
+ *
103
+ * <label {...field.label}>Email address</label>
104
+ * <input {...lt.input({ type: "email", state: field.state })} {...field.control} />
105
+ * <p {...lt.helpText()} {...field.help}>We send the receipt here.</p>
106
+ * <p {...lt.errorText()} {...field.error}>Enter a valid address.</p>
107
+ * ```
108
+ *
109
+ * The same calculation `<lt-field>` does, but as data, for markup created
110
+ * with JavaScript. Then no web component is needed.
111
+ */
112
+ field: computeFieldAttributes,
113
+ /** A group of controls that belong together. Its label is `lt.legend`. */
114
+ fieldset,
115
+ heading,
116
+ fileUpload,
117
+ helpText,
118
+ icon,
119
+ input,
120
+ label,
121
+ legend,
122
+ link,
123
+ list,
124
+ pagination,
125
+ paragraph,
126
+ /**
127
+ * The button and panel of a popover. `<lt-popover>` calculates the
128
+ * position, the server writes the wiring.
129
+ */
130
+ popover,
131
+ radio,
132
+ search,
133
+ select,
134
+ /**
135
+ * The warning that a signed-in session is about to expire. The countdown
136
+ * runs on the client's clock, so `<lt-session-timeout>` is responsible for
137
+ * the content.
138
+ */
139
+ sessionTimeout,
140
+ skeleton,
141
+ skipLink,
142
+ progress,
143
+ spinner,
144
+ /** Text only screen readers get. Requires `sr-only.css`. */
145
+ srOnly,
146
+ /**
147
+ * The field and the suggestion list. `<lt-suggestion>` handles the
148
+ * keyboard and the filtering, the server writes the markup.
149
+ */
150
+ suggestion,
151
+ /** On and off. Named `switchControl` when you import it directly. */
152
+ switch: switchControl,
153
+ /**
154
+ * A tab list with panels. The server writes the links, ids and classes;
155
+ * `<lt-tabs>` adds the roles, the selection and the arrow keys.
156
+ */
157
+ tabs,
158
+ /**
159
+ * The toast region. Sets `data-ignore-morph`, because `<lt-toast>` creates
160
+ * and removes its messages inside it.
161
+ */
162
+ toast,
163
+ toggleGroup,
164
+ tooltip,
165
+ table,
166
+ /**
167
+ * The header and button in a sortable column. `aria-sort` on the `<th>` is
168
+ * the state, and the arrow is drawn from it. The sorting is up to the app.
169
+ */
170
+ tableSort,
171
+ tag,
172
+ textarea,
173
+
174
+ /**
175
+ * Applies an attribute set to an element in the plain DOM.
176
+ *
177
+ * In JSX you spread the object. Without JSX this function does the job,
178
+ * and cleans up what the builder function manages from the previous state.
179
+ * Several sets are passed separately:
180
+ * `lt.setAttributes(field, lt.input(), wiring.control)`.
181
+ */
182
+ setAttributes,
183
+
184
+ /** The validation states shared by input, textarea and select. */
185
+ states: fieldStates,
186
+ isState: isFieldState,
187
+ /** The ways a required field can be marked. */
188
+ markers: requiredMarkers,
189
+ isMarker: isRequiredMarker,
190
+ } as const
191
+
192
+ export type Lt = typeof lt
package/src/react.ts ADDED
@@ -0,0 +1,411 @@
1
+ import { accordion } from "./components/css/accordion/accordion.js"
2
+ import { alert } from "./components/css/alert/alert.js"
3
+ import { avatar } from "./components/css/avatar/avatar.js"
4
+ import { badge } from "./components/css/badge/badge.js"
5
+ import { breadcrumbs } from "./components/css/breadcrumbs/breadcrumbs.js"
6
+ import { button } from "./components/css/button/button.js"
7
+ import { card } from "./components/css/card/card.js"
8
+ import { checkbox } from "./components/css/checkbox/checkbox.js"
9
+ import { divider } from "./components/css/divider/divider.js"
10
+ import { errorText } from "./components/css/error-text/error-text.js"
11
+ import { fieldset, legend } from "./components/css/fieldset/fieldset.js"
12
+ import { fileUpload } from "./components/css/file-upload/file-upload.js"
13
+ import { heading } from "./components/css/heading/heading.js"
14
+ import { helpText } from "./components/css/help-text/help-text.js"
15
+ import { icon } from "./components/css/icon/icon.js"
16
+ import { input } from "./components/css/input/input.js"
17
+ import { label } from "./components/css/label/label.js"
18
+ import { link } from "./components/css/link/link.js"
19
+ import { list } from "./components/css/list/list.js"
20
+ import { pagination } from "./components/css/pagination/pagination.js"
21
+ import { paragraph } from "./components/css/paragraph/paragraph.js"
22
+ import { progress } from "./components/css/progress/progress.js"
23
+ import { radio } from "./components/css/radio/radio.js"
24
+ import { search } from "./components/css/search/search.js"
25
+ import { select } from "./components/css/select/select.js"
26
+ import {
27
+ fieldStates,
28
+ isFieldState,
29
+ isRequiredMarker,
30
+ managedNames,
31
+ rememberManaged,
32
+ requiredMarkers,
33
+ } from "./components/css/shared.js"
34
+ import { skeleton } from "./components/css/skeleton/skeleton.js"
35
+ import { skipLink } from "./components/css/skip-link/skip-link.js"
36
+ import { spinner } from "./components/css/spinner/spinner.js"
37
+ import { srOnly } from "./components/css/sr-only/sr-only.js"
38
+ import { switchControl } from "./components/css/switch/switch.js"
39
+ import { table, tableSort } from "./components/css/table/table.js"
40
+ import { tag } from "./components/css/tag/tag.js"
41
+ import { textarea } from "./components/css/textarea/textarea.js"
42
+ import { toggleGroup } from "./components/css/toggle-group/toggle-group.js"
43
+ import { tooltip } from "./components/css/tooltip/tooltip.js"
44
+ import { dialog } from "./components/frame/dialog/dialog.js"
45
+ import { errorSummary } from "./components/frame/error-summary/error-summary.js"
46
+ import {
47
+ computeFieldAttributes,
48
+ createFieldId,
49
+ type FieldOptions,
50
+ } from "./components/frame/field/field-core.js"
51
+ import { popover } from "./components/frame/popover/popover.js"
52
+ import { sessionTimeout } from "./components/frame/session-timeout/session-timeout.js"
53
+ import { suggestion } from "./components/frame/suggestion/suggestion.js"
54
+ import {
55
+ type TabsWithStateOptions,
56
+ tabsWithState,
57
+ } from "./components/frame/tabs/tabs.js"
58
+ import { connectionStatus } from "./components/standalone/connection-status/connection-status.js"
59
+ import { toast } from "./components/standalone/toast/toast.js"
60
+ import { type Attributes, setAttributes as setHtmlAttributes } from "./dom.js"
61
+
62
+ // The types of the events, so `addEventListener` is typed also for someone
63
+ // who only imports this entry point. Without the line the import disappeared
64
+ // from the `.d.ts` file, and `HTMLElementEventMap` was never extended.
65
+ export type { LtEventMap } from "./components/events.js"
66
+
67
+ /**
68
+ * The same API as `lt`, but with `className` and `htmlFor`.
69
+ *
70
+ * The rest of the system returns `class` and `for`, as the attributes are
71
+ * actually named in HTML. React accepts them, and they end up correctly in
72
+ * the DOM, but the development build writes "Invalid DOM property `class`.
73
+ * Did you mean `className`?" to the console, once for each attribute name. It
74
+ * is noise in every app that uses the components, and it teaches the reader
75
+ * to ignore the console.
76
+ *
77
+ * ```ts
78
+ * import { lt } from "@lo-tek/interfaces/react"
79
+ *
80
+ * <button {...lt.button({ variant: "secondary" })}>Save draft</button>
81
+ * ```
82
+ *
83
+ * The call sites are identical to the rest of the system; only the import
84
+ * path differs. This is a plain renaming of keys, so the package gets no
85
+ * dependency on React from it.
86
+ *
87
+ * Astro and plain HTML take `class` and `for` as they are. There you use
88
+ * `@lo-tek/interfaces` directly.
89
+ */
90
+
91
+ /**
92
+ * Gives the keys the names React expects, and the values the types React
93
+ * expects.
94
+ *
95
+ * `tabindex` is not only a different name: in HTML the value is a string, and
96
+ * in React `tabIndex` is a number. When we left the string, `lt.tabs()` came
97
+ * out with `tabIndex: "0"`, and TypeScript rejected it in every React app. It
98
+ * worked in the browser, since React converts the value itself, so the bug
99
+ * only showed up as a type error for the consumer.
100
+ */
101
+ export type ReactAttributes<T> = {
102
+ [K in keyof T as K extends "class"
103
+ ? "className"
104
+ : K extends "for"
105
+ ? "htmlFor"
106
+ : K extends "tabindex"
107
+ ? "tabIndex"
108
+ : K extends "autocomplete"
109
+ ? "autoComplete"
110
+ : K]: K extends "tabindex" ? number : T[K]
111
+ }
112
+
113
+ /**
114
+ * The attributes that have another name in React.
115
+ *
116
+ * `tabindex` came with the compound builder functions, and `autocomplete`
117
+ * with the suggestion field. Without the renaming React warns about every
118
+ * one of them.
119
+ *
120
+ * `aria-*` and `data-*`, on the other hand, stay as they are. React passes
121
+ * them on unchanged, and renaming them would give invalid attributes.
122
+ *
123
+ * `react.browser.test.ts` calls every builder function here with every
124
+ * allowed value it declares, collects all attribute names in the result,
125
+ * including those in lists and nested levels, and rejects every name React
126
+ * spells differently. The list there is React's and is longer than the four
127
+ * we rename, so a builder function that one day outputs `readonly` or
128
+ * `maxlength` stops there and not in a consumer's console.
129
+ */
130
+ const REACT_NAMES: Record<string, string> = {
131
+ class: "className",
132
+ for: "htmlFor",
133
+ tabindex: "tabIndex",
134
+ autocomplete: "autoComplete",
135
+ }
136
+
137
+ export function toReactAttributes<T extends Record<string, unknown>>(
138
+ attributes: T,
139
+ ): ReactAttributes<T> {
140
+ const result: Record<string, unknown> = {}
141
+ for (const [name, value] of Object.entries(attributes)) {
142
+ // `tabindex` is a string in HTML and a number in React. Everything else
143
+ // passes straight through: it is the names that differ, not the values.
144
+ result[REACT_NAMES[name] ?? name] =
145
+ name === "tabindex" ? Number(value) : value
146
+ }
147
+ // The new object manages the same as the old one, under the new names, so
148
+ // `setAttributes` below can clean up as much as the main entry point.
149
+ const names = managedNames(attributes)
150
+ if (names)
151
+ rememberManaged(
152
+ result,
153
+ names.map((name) => REACT_NAMES[name] ?? name),
154
+ )
155
+ return result as ReactAttributes<T>
156
+ }
157
+
158
+ /** The names back to HTML, for `setAttributes`. */
159
+ const HTML_NAMES: Record<string, string> = Object.fromEntries(
160
+ Object.entries(REACT_NAMES).map(([html, react]) => [react, html]),
161
+ )
162
+
163
+ /**
164
+ * A set as the builder functions here return it, with `className`,
165
+ * `htmlFor` and `tabIndex` as a number.
166
+ */
167
+ export type ReactSet = Record<string, string | number | boolean | undefined>
168
+
169
+ /**
170
+ * Writes a set from this entry point back to the HTML names.
171
+ *
172
+ * `setAttribute` writes the name as given, and in an HTML document it becomes
173
+ * lower case: `className` became the attribute `classname`, and `htmlFor`
174
+ * became `htmlfor`. The new object manages the same as the set it came from,
175
+ * so what is gone in the next call is cleaned up.
176
+ */
177
+ function toHtmlAttributes(set: ReactSet): Attributes {
178
+ const result: Attributes = {}
179
+ for (const [name, value] of Object.entries(set)) {
180
+ result[HTML_NAMES[name] ?? name] =
181
+ typeof value === "number" ? String(value) : value
182
+ }
183
+ const names = managedNames(set)
184
+ if (names)
185
+ rememberManaged(
186
+ result,
187
+ names.map((name) => HTML_NAMES[name] ?? name),
188
+ )
189
+ return result
190
+ }
191
+
192
+ /**
193
+ * Like `lt.setAttributes` in the main entry point, for the sets from here.
194
+ *
195
+ * A React app reaches the DOM through a `ref`, and then naturally uses `lt`
196
+ * from this entry point. Passed straight to the main entry point's
197
+ * `setAttributes`, `className` became the attribute `classname`, and the
198
+ * cleanup did not find the builder function behind the set. Here the names
199
+ * are translated back first.
200
+ */
201
+ export function setAttributes(
202
+ element: Element | null | undefined,
203
+ ...sets: ReactSet[]
204
+ ): void {
205
+ setHtmlAttributes(element, ...sets.map((set) => toHtmlAttributes(set)))
206
+ }
207
+
208
+ /**
209
+ * Wraps a builder function so the return value gets the React names.
210
+ *
211
+ * The signature is written as an intersection type so TypeScript can infer
212
+ * both the options type and the extra fields attached to the function, that
213
+ * is `variants`, `isVariant` and the others, in one go.
214
+ */
215
+ function forReact<Options, Result extends Record<string, unknown>, Extra>(
216
+ fn: ((options?: Options) => Result) & Extra,
217
+ ): ((options?: Options) => ReactAttributes<Result>) & Extra {
218
+ const wrapped = (options?: Options) => toReactAttributes(fn(options))
219
+ return Object.assign(wrapped, fn)
220
+ }
221
+
222
+ /**
223
+ * Re-exported from the main entry point.
224
+ *
225
+ * `field.mdx` points to it in a section that tells the reader to import from
226
+ * `@lo-tek/interfaces/react`, and without this a React consumer who follows
227
+ * the advice gets "createFieldId is not exported". It is safe only when the
228
+ * markup is rendered once; in a React component `useId()` is the answer,
229
+ * also in an app without a server.
230
+ */
231
+ export { createFieldId }
232
+
233
+ export const lt = {
234
+ accordion: forReact(accordion),
235
+ alert: forReact(alert),
236
+ avatar: forReact(avatar),
237
+ badge: forReact(badge),
238
+ breadcrumbs: forReact(breadcrumbs),
239
+ button: forReact(button),
240
+ card: forReact(card),
241
+ checkbox: forReact(checkbox),
242
+ divider: forReact(divider),
243
+ errorText: forReact(errorText),
244
+ fieldset: forReact(fieldset),
245
+ heading: forReact(heading),
246
+ fileUpload: forReact(fileUpload),
247
+ helpText: forReact(helpText),
248
+ icon: forReact(icon),
249
+ input: forReact(input),
250
+ label: forReact(label),
251
+ legend: forReact(legend),
252
+ link: forReact(link),
253
+ list: forReact(list),
254
+ pagination: forReact(pagination),
255
+ paragraph: forReact(paragraph),
256
+ radio: forReact(radio),
257
+ search: forReact(search),
258
+ select: forReact(select),
259
+ skeleton: forReact(skeleton),
260
+ skipLink: forReact(skipLink),
261
+ progress: forReact(progress),
262
+ spinner: forReact(spinner),
263
+ srOnly: forReact(srOnly),
264
+ switch: forReact(switchControl),
265
+ toggleGroup: forReact(toggleGroup),
266
+ tooltip: forReact(tooltip),
267
+ table: forReact(table),
268
+ tableSort: Object.assign(
269
+ (options?: Parameters<typeof tableSort>[0]) => {
270
+ const built = tableSort(options)
271
+ return {
272
+ header: built.header,
273
+ button: toReactAttributes(built.button),
274
+ }
275
+ },
276
+ { isDirection: tableSort.isDirection },
277
+ ),
278
+ tag: forReact(tag),
279
+ textarea: forReact(textarea),
280
+
281
+ /**
282
+ * Wires a whole field, with `className` and `htmlFor` on the label.
283
+ *
284
+ * `control`, `help` and `error` have no keys that need renaming, and are
285
+ * therefore the same in both entry points.
286
+ */
287
+ field: (options: FieldOptions) => {
288
+ const field = computeFieldAttributes(options)
289
+ return { ...field, label: toReactAttributes(field.label) }
290
+ },
291
+
292
+ /**
293
+ * The compound builder functions return one attribute set per element,
294
+ * and each set must be renamed on its own. `host` has `tabindex`, and the
295
+ * panels in `lt.tabs()` have both `tabindex` and `class`.
296
+ */
297
+ errorSummary: (options: Parameters<typeof errorSummary>[0] = {}) => {
298
+ const built = errorSummary(options)
299
+ return {
300
+ host: toReactAttributes(built.host),
301
+ title: toReactAttributes(built.title),
302
+ }
303
+ },
304
+
305
+ dialog: Object.assign(
306
+ (options: Parameters<typeof dialog>[0]) => {
307
+ const built = dialog(options)
308
+ return {
309
+ host: built.host,
310
+ dialog: toReactAttributes(built.dialog),
311
+ header: toReactAttributes(built.header),
312
+ title: toReactAttributes(built.title),
313
+ subtitle: toReactAttributes(built.subtitle),
314
+ body: toReactAttributes(built.body),
315
+ footer: toReactAttributes(built.footer),
316
+ }
317
+ },
318
+ {
319
+ dialog: dialog.dialog,
320
+ header: dialog.header,
321
+ title: dialog.title,
322
+ subtitle: dialog.subtitle,
323
+ body: dialog.body,
324
+ footer: dialog.footer,
325
+ colors: dialog.colors,
326
+ isColor: dialog.isColor,
327
+ },
328
+ ),
329
+
330
+ popover: Object.assign(
331
+ (options: Parameters<typeof popover>[0]) => {
332
+ const built = popover(options)
333
+ return {
334
+ host: built.host,
335
+ trigger: toReactAttributes(built.trigger),
336
+ panel: toReactAttributes(built.panel),
337
+ }
338
+ },
339
+ { isPlacement: popover.isPlacement },
340
+ ),
341
+
342
+ /**
343
+ * The whole state, not just the links: React reports a mismatch for every
344
+ * attribute the component writes on an element React has rendered. See
345
+ * `tabsWithState`.
346
+ */
347
+ tabs: (options: TabsWithStateOptions) => {
348
+ const built = tabsWithState(options)
349
+ return {
350
+ list: toReactAttributes(built.list),
351
+ item: toReactAttributes(built.item),
352
+ tabs: built.tabs.map(toReactAttributes),
353
+ panels: built.panels.map(toReactAttributes),
354
+ }
355
+ },
356
+
357
+ suggestion: (options: Parameters<typeof suggestion>[0]) => {
358
+ const built = suggestion(options)
359
+ return {
360
+ ...built,
361
+ label: toReactAttributes(built.label),
362
+ control: toReactAttributes(built.control),
363
+ list: toReactAttributes(built.list),
364
+ options: built.options.map(toReactAttributes),
365
+ empty: toReactAttributes(built.empty),
366
+ status: toReactAttributes(built.status),
367
+ value: toReactAttributes(built.value),
368
+ }
369
+ },
370
+
371
+ toast: (options: Parameters<typeof toast>[0] = {}) => {
372
+ const built = toast(options)
373
+ return {
374
+ host: toReactAttributes(built.host),
375
+ message: toReactAttributes(built.message),
376
+ close: toReactAttributes(built.close),
377
+ }
378
+ },
379
+
380
+ sessionTimeout: Object.assign(
381
+ (options: Parameters<typeof sessionTimeout>[0]) => {
382
+ const built = sessionTimeout(options)
383
+ return {
384
+ host: toReactAttributes(built.host),
385
+ dialog: toReactAttributes(built.dialog),
386
+ title: toReactAttributes(built.title),
387
+ text: toReactAttributes(built.text),
388
+ count: toReactAttributes(built.count),
389
+ live: toReactAttributes(built.live),
390
+ actions: toReactAttributes(built.actions),
391
+ extend: toReactAttributes(built.extend),
392
+ logout: toReactAttributes(built.logout),
393
+ }
394
+ },
395
+ {
396
+ dialog: sessionTimeout.dialog,
397
+ title: sessionTimeout.title,
398
+ text: sessionTimeout.text,
399
+ count: sessionTimeout.count,
400
+ actions: sessionTimeout.actions,
401
+ },
402
+ ),
403
+ connectionStatus: forReact(connectionStatus),
404
+
405
+ setAttributes,
406
+
407
+ states: fieldStates,
408
+ isState: isFieldState,
409
+ markers: requiredMarkers,
410
+ isMarker: isRequiredMarker,
411
+ } as const
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Registers all the web components in one call.
3
+ *
4
+ * Each component has its own `defineLt*`, and an app that only uses the field
5
+ * can settle for `defineLtField()` and keep the rest out of its bundle. But
6
+ * most apps use several, and a demo app had seven calls in a `useEffect`,
7
+ * that is, after the first paint. Then the elements in the markup are plain
8
+ * `HTMLElement`s when React paints them, and the first call to
9
+ * `reportSuccess()` came before the effect. One call, at import, closes the
10
+ * gap.
11
+ *
12
+ * Like the individual functions, it does nothing on a server, so it can sit
13
+ * at the top of a module that runs in both places.
14
+ */
15
+
16
+ import { defineLtDialog } from "./components/frame/dialog/lt-dialog.js"
17
+ import { defineLtErrorSummary } from "./components/frame/error-summary/lt-error-summary.js"
18
+ import { defineLtField } from "./components/frame/field/lt-field.js"
19
+ import { defineLtPopover } from "./components/frame/popover/lt-popover.js"
20
+ import { defineLtSessionTimeout } from "./components/frame/session-timeout/lt-session-timeout.js"
21
+ import { defineLtSuggestion } from "./components/frame/suggestion/lt-suggestion.js"
22
+ import { defineLtTabs } from "./components/frame/tabs/lt-tabs.js"
23
+ import { defineLtConnectionStatus } from "./components/standalone/connection-status/lt-connection-status.js"
24
+ import { defineLtToast } from "./components/standalone/toast/lt-toast.js"
25
+
26
+ // The types of the events and tag names, so `querySelector("lt-dialog")` and
27
+ // `addEventListener` are typed also for someone who only imports this entry
28
+ // point. Without the line the imports above disappeared from the `.d.ts`
29
+ // file, and neither `HTMLElementEventMap` nor `HTMLElementTagNameMap` was
30
+ // extended.
31
+ export type { LtEventMap } from "./components/events.js"
32
+
33
+ export function defineLt(): void {
34
+ defineLtField()
35
+ defineLtTabs()
36
+ defineLtErrorSummary()
37
+ defineLtPopover()
38
+ defineLtSuggestion()
39
+ defineLtDialog()
40
+ defineLtToast()
41
+ defineLtSessionTimeout()
42
+ defineLtConnectionStatus()
43
+ }