@owlmeans/web-panel 0.1.18-rc.9 → 0.1.18

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 (669) hide show
  1. package/README.md +510 -143
  2. package/THIRD-PARTY-NOTICES.txt +24 -0
  3. package/agent-meta/manifest.json +163 -4
  4. package/agent-meta/skills/web-panel/SKILL.md +136 -83
  5. package/agent-meta/skills/web-panel/parts/consent.md +114 -0
  6. package/agent-meta/skills/web-panel/parts/editor.md +47 -0
  7. package/agent-meta/skills/web-panel/parts/forms.md +85 -0
  8. package/agent-meta/skills/web-panel/parts/navigation.md +203 -0
  9. package/agent-meta/skills/web-panel/parts/picker.md +164 -0
  10. package/agent-meta/skills/web-panel/parts/reload.md +46 -0
  11. package/agent-meta/skills/web-panel/parts/sign-in.md +65 -0
  12. package/agent-meta/skills/web-panel/parts/theme.md +74 -0
  13. package/build/@/components/ui/alert-dialog.d.ts +15 -0
  14. package/build/@/components/ui/alert-dialog.d.ts.map +1 -0
  15. package/build/@/components/ui/alert-dialog.js +39 -0
  16. package/build/@/components/ui/alert-dialog.js.map +1 -0
  17. package/build/@/components/ui/alert.js +1 -1
  18. package/build/@/components/ui/alert.js.map +1 -1
  19. package/build/@/components/ui/button.js +1 -1
  20. package/build/@/components/ui/button.js.map +1 -1
  21. package/build/@/components/ui/card.js +1 -1
  22. package/build/@/components/ui/card.js.map +1 -1
  23. package/build/@/components/ui/input.js +1 -1
  24. package/build/@/components/ui/input.js.map +1 -1
  25. package/build/@/components/ui/label.js +1 -1
  26. package/build/@/components/ui/label.js.map +1 -1
  27. package/build/@/components/ui/navigation-menu.js +1 -1
  28. package/build/@/components/ui/navigation-menu.js.map +1 -1
  29. package/build/@/components/ui/popover.d.ts +8 -0
  30. package/build/@/components/ui/popover.d.ts.map +1 -0
  31. package/build/@/components/ui/popover.js +17 -0
  32. package/build/@/components/ui/popover.js.map +1 -0
  33. package/build/@/components/ui/progress.js +1 -1
  34. package/build/@/components/ui/progress.js.map +1 -1
  35. package/build/@/components/ui/separator.js +1 -1
  36. package/build/@/components/ui/separator.js.map +1 -1
  37. package/build/@/components/ui/sheet.d.ts +15 -0
  38. package/build/@/components/ui/sheet.d.ts.map +1 -0
  39. package/build/@/components/ui/sheet.js +40 -0
  40. package/build/@/components/ui/sheet.js.map +1 -0
  41. package/build/auth/context.d.ts.map +1 -1
  42. package/build/auth/context.js +0 -1
  43. package/build/auth/context.js.map +1 -1
  44. package/build/auth/entrypoints.d.ts +10 -0
  45. package/build/auth/entrypoints.d.ts.map +1 -0
  46. package/build/auth/entrypoints.js +4 -0
  47. package/build/auth/entrypoints.js.map +1 -0
  48. package/build/auth/exports.d.ts +4 -4
  49. package/build/auth/exports.d.ts.map +1 -1
  50. package/build/auth/exports.js +3 -3
  51. package/build/auth/exports.js.map +1 -1
  52. package/build/auth/modules.d.ts +1 -1
  53. package/build/auth/modules.d.ts.map +1 -1
  54. package/build/auth/plugins/basic-ed25519.js +4 -4
  55. package/build/auth/plugins/basic-ed25519.js.map +1 -1
  56. package/build/auth/plugins/re-captcha.js +3 -3
  57. package/build/auth/plugins/re-captcha.js.map +1 -1
  58. package/build/auth/plugins/tunnel-consumer.js +1 -1
  59. package/build/auth/plugins/tunnel-consumer.js.map +1 -1
  60. package/build/components/block.js +2 -2
  61. package/build/components/block.js.map +1 -1
  62. package/build/components/consts.local.d.ts +14 -0
  63. package/build/components/consts.local.d.ts.map +1 -0
  64. package/build/components/consts.local.js +26 -0
  65. package/build/components/consts.local.js.map +1 -0
  66. package/build/components/footer/component.d.ts +19 -1
  67. package/build/components/footer/component.d.ts.map +1 -1
  68. package/build/components/footer/component.js +38 -11
  69. package/build/components/footer/component.js.map +1 -1
  70. package/build/components/footer/credit.d.ts +27 -0
  71. package/build/components/footer/credit.d.ts.map +1 -0
  72. package/build/components/footer/credit.js +42 -0
  73. package/build/components/footer/credit.js.map +1 -0
  74. package/build/components/footer/index.d.ts +1 -0
  75. package/build/components/footer/index.d.ts.map +1 -1
  76. package/build/components/footer/index.js +1 -0
  77. package/build/components/footer/index.js.map +1 -1
  78. package/build/components/footer/types.d.ts +22 -1
  79. package/build/components/footer/types.d.ts.map +1 -1
  80. package/build/components/form/button/component.d.ts.map +1 -1
  81. package/build/components/form/button/component.js +5 -3
  82. package/build/components/form/button/component.js.map +1 -1
  83. package/build/components/form/component.js +2 -2
  84. package/build/components/form/component.js.map +1 -1
  85. package/build/components/form/text/component.js +2 -2
  86. package/build/components/form/text/component.js.map +1 -1
  87. package/build/components/helper.d.ts.map +1 -1
  88. package/build/components/helper.js +1 -12
  89. package/build/components/helper.js.map +1 -1
  90. package/build/components/index.d.ts +4 -0
  91. package/build/components/index.d.ts.map +1 -1
  92. package/build/components/index.js +4 -0
  93. package/build/components/index.js.map +1 -1
  94. package/build/components/link.js +3 -3
  95. package/build/components/link.js.map +1 -1
  96. package/build/components/login/append.d.ts +15 -0
  97. package/build/components/login/append.d.ts.map +1 -0
  98. package/build/components/login/append.js +26 -0
  99. package/build/components/login/append.js.map +1 -0
  100. package/build/components/login/consts.d.ts +3 -0
  101. package/build/components/login/consts.d.ts.map +1 -0
  102. package/build/components/login/consts.js +3 -0
  103. package/build/components/login/consts.js.map +1 -0
  104. package/build/components/login/consts.local.d.ts +4 -0
  105. package/build/components/login/consts.local.d.ts.map +1 -0
  106. package/build/components/login/consts.local.js +8 -0
  107. package/build/components/login/consts.local.js.map +1 -0
  108. package/build/components/login/credit.d.ts +12 -0
  109. package/build/components/login/credit.d.ts.map +1 -0
  110. package/build/components/login/credit.js +18 -0
  111. package/build/components/login/credit.js.map +1 -0
  112. package/build/components/login/i18n/be.json +10 -0
  113. package/build/components/login/i18n/de.json +10 -0
  114. package/build/components/login/i18n/en.json +10 -0
  115. package/build/components/login/i18n/es.json +10 -0
  116. package/build/components/login/i18n/fr.json +10 -0
  117. package/build/components/login/i18n/pl.json +10 -0
  118. package/build/components/login/i18n/ru.json +10 -0
  119. package/build/components/login/i18n/uk.json +10 -0
  120. package/build/components/login/i18n.d.ts +2 -0
  121. package/build/components/login/i18n.d.ts.map +1 -0
  122. package/build/components/login/i18n.js +28 -0
  123. package/build/components/login/i18n.js.map +1 -0
  124. package/build/components/login/icons.d.ts +14 -0
  125. package/build/components/login/icons.d.ts.map +1 -0
  126. package/build/components/login/icons.js +29 -0
  127. package/build/components/login/icons.js.map +1 -0
  128. package/build/components/login/index.d.ts +11 -0
  129. package/build/components/login/index.d.ts.map +1 -0
  130. package/build/components/login/index.js +10 -0
  131. package/build/components/login/index.js.map +1 -0
  132. package/build/components/login/notify.d.ts +18 -0
  133. package/build/components/login/notify.d.ts.map +1 -0
  134. package/build/components/login/notify.js +41 -0
  135. package/build/components/login/notify.js.map +1 -0
  136. package/build/components/login/provider.d.ts +20 -0
  137. package/build/components/login/provider.d.ts.map +1 -0
  138. package/build/components/login/provider.js +31 -0
  139. package/build/components/login/provider.js.map +1 -0
  140. package/build/components/login/screen.d.ts +24 -0
  141. package/build/components/login/screen.d.ts.map +1 -0
  142. package/build/components/login/screen.js +92 -0
  143. package/build/components/login/screen.js.map +1 -0
  144. package/build/components/login/terms.d.ts +19 -0
  145. package/build/components/login/terms.d.ts.map +1 -0
  146. package/build/components/login/terms.js +32 -0
  147. package/build/components/login/terms.js.map +1 -0
  148. package/build/components/login/types.d.ts +28 -0
  149. package/build/components/login/types.d.ts.map +1 -0
  150. package/build/components/login/types.js +2 -0
  151. package/build/components/login/types.js.map +1 -0
  152. package/build/components/nav/consts.local.d.ts +41 -0
  153. package/build/components/nav/consts.local.d.ts.map +1 -0
  154. package/build/components/nav/consts.local.js +60 -0
  155. package/build/components/nav/consts.local.js.map +1 -0
  156. package/build/components/nav/index.d.ts +1 -0
  157. package/build/components/nav/index.d.ts.map +1 -1
  158. package/build/components/nav/index.js +1 -0
  159. package/build/components/nav/index.js.map +1 -1
  160. package/build/components/nav/layout.d.ts +9 -2
  161. package/build/components/nav/layout.d.ts.map +1 -1
  162. package/build/components/nav/layout.js +48 -7
  163. package/build/components/nav/layout.js.map +1 -1
  164. package/build/components/nav/mobile.d.ts +21 -0
  165. package/build/components/nav/mobile.d.ts.map +1 -0
  166. package/build/components/nav/mobile.js +55 -0
  167. package/build/components/nav/mobile.js.map +1 -0
  168. package/build/components/nav/side.d.ts.map +1 -1
  169. package/build/components/nav/side.js +10 -10
  170. package/build/components/nav/side.js.map +1 -1
  171. package/build/components/nav/top.d.ts.map +1 -1
  172. package/build/components/nav/top.js +12 -8
  173. package/build/components/nav/top.js.map +1 -1
  174. package/build/components/nav/types.d.ts +64 -1
  175. package/build/components/nav/types.d.ts.map +1 -1
  176. package/build/components/nav/viewport.d.ts +3 -0
  177. package/build/components/nav/viewport.d.ts.map +1 -0
  178. package/build/components/nav/viewport.js +14 -0
  179. package/build/components/nav/viewport.js.map +1 -0
  180. package/build/components/panel-app/component.d.ts.map +1 -1
  181. package/build/components/panel-app/component.js +4 -3
  182. package/build/components/panel-app/component.js.map +1 -1
  183. package/build/components/picker/color-picker.d.ts +9 -0
  184. package/build/components/picker/color-picker.d.ts.map +1 -0
  185. package/build/components/picker/color-picker.js +9 -0
  186. package/build/components/picker/color-picker.js.map +1 -0
  187. package/build/components/picker/consts.local.d.ts +76 -0
  188. package/build/components/picker/consts.local.d.ts.map +1 -0
  189. package/build/components/picker/consts.local.js +214 -0
  190. package/build/components/picker/consts.local.js.map +1 -0
  191. package/build/components/picker/dot.d.ts +8 -0
  192. package/build/components/picker/dot.d.ts.map +1 -0
  193. package/build/components/picker/dot.js +10 -0
  194. package/build/components/picker/dot.js.map +1 -0
  195. package/build/components/picker/grid.d.ts +17 -0
  196. package/build/components/picker/grid.d.ts.map +1 -0
  197. package/build/components/picker/grid.js +73 -0
  198. package/build/components/picker/grid.js.map +1 -0
  199. package/build/components/picker/i18n/be.json +60 -0
  200. package/build/components/picker/i18n/de.json +60 -0
  201. package/build/components/picker/i18n/en.json +60 -0
  202. package/build/components/picker/i18n/es.json +60 -0
  203. package/build/components/picker/i18n/fr.json +60 -0
  204. package/build/components/picker/i18n/pl.json +60 -0
  205. package/build/components/picker/i18n/ru.json +60 -0
  206. package/build/components/picker/i18n/uk.json +60 -0
  207. package/build/components/picker/i18n.d.ts +2 -0
  208. package/build/components/picker/i18n.d.ts.map +1 -0
  209. package/build/components/picker/i18n.js +18 -0
  210. package/build/components/picker/i18n.js.map +1 -0
  211. package/build/components/picker/icon-color-picker.d.ts +14 -0
  212. package/build/components/picker/icon-color-picker.d.ts.map +1 -0
  213. package/build/components/picker/icon-color-picker.js +15 -0
  214. package/build/components/picker/icon-color-picker.js.map +1 -0
  215. package/build/components/picker/icon-picker.d.ts +8 -0
  216. package/build/components/picker/icon-picker.d.ts.map +1 -0
  217. package/build/components/picker/icon-picker.js +8 -0
  218. package/build/components/picker/icon-picker.js.map +1 -0
  219. package/build/components/picker/index.d.ts +11 -0
  220. package/build/components/picker/index.d.ts.map +1 -0
  221. package/build/components/picker/index.js +10 -0
  222. package/build/components/picker/index.js.map +1 -0
  223. package/build/components/picker/panel.d.ts +9 -0
  224. package/build/components/picker/panel.d.ts.map +1 -0
  225. package/build/components/picker/panel.js +23 -0
  226. package/build/components/picker/panel.js.map +1 -0
  227. package/build/components/picker/root.d.ts +13 -0
  228. package/build/components/picker/root.d.ts.map +1 -0
  229. package/build/components/picker/root.js +55 -0
  230. package/build/components/picker/root.js.map +1 -0
  231. package/build/components/picker/roving.d.ts +8 -0
  232. package/build/components/picker/roving.d.ts.map +1 -0
  233. package/build/components/picker/roving.js +62 -0
  234. package/build/components/picker/roving.js.map +1 -0
  235. package/build/components/picker/surface.d.ts +18 -0
  236. package/build/components/picker/surface.d.ts.map +1 -0
  237. package/build/components/picker/surface.js +36 -0
  238. package/build/components/picker/surface.js.map +1 -0
  239. package/build/components/picker/swatches/custom.d.ts +10 -0
  240. package/build/components/picker/swatches/custom.d.ts.map +1 -0
  241. package/build/components/picker/swatches/custom.js +65 -0
  242. package/build/components/picker/swatches/custom.js.map +1 -0
  243. package/build/components/picker/swatches.d.ts +16 -0
  244. package/build/components/picker/swatches.d.ts.map +1 -0
  245. package/build/components/picker/swatches.js +35 -0
  246. package/build/components/picker/swatches.js.map +1 -0
  247. package/build/components/picker/text.d.ts +5 -0
  248. package/build/components/picker/text.d.ts.map +1 -0
  249. package/build/components/picker/text.js +29 -0
  250. package/build/components/picker/text.js.map +1 -0
  251. package/build/components/picker/tile.d.ts +11 -0
  252. package/build/components/picker/tile.d.ts.map +1 -0
  253. package/build/components/picker/tile.js +19 -0
  254. package/build/components/picker/tile.js.map +1 -0
  255. package/build/components/picker/translate.d.ts +9 -0
  256. package/build/components/picker/translate.d.ts.map +1 -0
  257. package/build/components/picker/translate.js +13 -0
  258. package/build/components/picker/translate.js.map +1 -0
  259. package/build/components/picker/trigger.d.ts +12 -0
  260. package/build/components/picker/trigger.d.ts.map +1 -0
  261. package/build/components/picker/trigger.js +29 -0
  262. package/build/components/picker/trigger.js.map +1 -0
  263. package/build/components/picker/types.d.ts +114 -0
  264. package/build/components/picker/types.d.ts.map +1 -0
  265. package/build/components/picker/types.js +2 -0
  266. package/build/components/picker/types.js.map +1 -0
  267. package/build/components/picker/types.local.d.ts +143 -0
  268. package/build/components/picker/types.local.d.ts.map +1 -0
  269. package/build/components/picker/types.local.js +2 -0
  270. package/build/components/picker/types.local.js.map +1 -0
  271. package/build/components/scheme/consts.local.d.ts +8 -0
  272. package/build/components/scheme/consts.local.d.ts.map +1 -0
  273. package/build/components/scheme/consts.local.js +13 -0
  274. package/build/components/scheme/consts.local.js.map +1 -0
  275. package/build/components/scheme/hook.d.ts +16 -0
  276. package/build/components/scheme/hook.d.ts.map +1 -0
  277. package/build/components/scheme/hook.js +52 -0
  278. package/build/components/scheme/hook.js.map +1 -0
  279. package/build/components/scheme/index.d.ts +4 -0
  280. package/build/components/scheme/index.d.ts.map +1 -0
  281. package/build/components/scheme/index.js +3 -0
  282. package/build/components/scheme/index.js.map +1 -0
  283. package/build/components/scheme/toggle.d.ts +14 -0
  284. package/build/components/scheme/toggle.d.ts.map +1 -0
  285. package/build/components/scheme/toggle.js +24 -0
  286. package/build/components/scheme/toggle.js.map +1 -0
  287. package/build/components/scheme/types.d.ts +21 -0
  288. package/build/components/scheme/types.d.ts.map +1 -0
  289. package/build/components/scheme/types.js +2 -0
  290. package/build/components/scheme/types.js.map +1 -0
  291. package/build/components/socket/i18n/be.json +9 -0
  292. package/build/components/socket/i18n/de.json +9 -0
  293. package/build/components/socket/i18n/en.json +9 -0
  294. package/build/components/socket/i18n/es.json +9 -0
  295. package/build/components/socket/i18n/fr.json +9 -0
  296. package/build/components/socket/i18n/pl.json +9 -0
  297. package/build/components/socket/i18n/ru.json +9 -0
  298. package/build/components/socket/i18n/uk.json +9 -0
  299. package/build/components/socket/i18n.d.ts +2 -0
  300. package/build/components/socket/i18n.d.ts.map +1 -0
  301. package/build/components/socket/i18n.js +18 -0
  302. package/build/components/socket/i18n.js.map +1 -0
  303. package/build/components/socket/index.d.ts +3 -0
  304. package/build/components/socket/index.d.ts.map +1 -0
  305. package/build/components/socket/index.js +3 -0
  306. package/build/components/socket/index.js.map +1 -0
  307. package/build/components/socket/reload-dialog.d.ts +22 -0
  308. package/build/components/socket/reload-dialog.d.ts.map +1 -0
  309. package/build/components/socket/reload-dialog.js +34 -0
  310. package/build/components/socket/reload-dialog.js.map +1 -0
  311. package/build/components/status.js +1 -1
  312. package/build/components/status.js.map +1 -1
  313. package/build/components/text.d.ts.map +1 -1
  314. package/build/components/text.js +2 -13
  315. package/build/components/text.js.map +1 -1
  316. package/build/components/toaster.d.ts +16 -0
  317. package/build/components/toaster.d.ts.map +1 -0
  318. package/build/components/toaster.js +52 -0
  319. package/build/components/toaster.js.map +1 -0
  320. package/build/components/uploader/consts.local.d.ts +4 -0
  321. package/build/components/uploader/consts.local.d.ts.map +1 -0
  322. package/build/components/uploader/consts.local.js +6 -0
  323. package/build/components/uploader/consts.local.js.map +1 -0
  324. package/build/components/uploader/image.d.ts.map +1 -1
  325. package/build/components/uploader/image.js +2 -6
  326. package/build/components/uploader/image.js.map +1 -1
  327. package/build/consent/component.d.ts +27 -0
  328. package/build/consent/component.d.ts.map +1 -0
  329. package/build/consent/component.js +60 -0
  330. package/build/consent/component.js.map +1 -0
  331. package/build/consent/consts.d.ts +2 -0
  332. package/build/consent/consts.d.ts.map +1 -0
  333. package/build/consent/consts.js +2 -0
  334. package/build/consent/consts.js.map +1 -0
  335. package/build/consent/consts.local.d.ts +9 -0
  336. package/build/consent/consts.local.d.ts.map +1 -0
  337. package/build/consent/consts.local.js +9 -0
  338. package/build/consent/consts.local.js.map +1 -0
  339. package/build/consent/geo.d.ts +17 -0
  340. package/build/consent/geo.d.ts.map +1 -0
  341. package/build/consent/geo.js +19 -0
  342. package/build/consent/geo.js.map +1 -0
  343. package/build/consent/index.d.ts +11 -0
  344. package/build/consent/index.d.ts.map +1 -0
  345. package/build/consent/index.js +9 -0
  346. package/build/consent/index.js.map +1 -0
  347. package/build/consent/language.d.ts +12 -0
  348. package/build/consent/language.d.ts.map +1 -0
  349. package/build/consent/language.js +11 -0
  350. package/build/consent/language.js.map +1 -0
  351. package/build/consent/menu-widget.d.ts +13 -0
  352. package/build/consent/menu-widget.d.ts.map +1 -0
  353. package/build/consent/menu-widget.js +20 -0
  354. package/build/consent/menu-widget.js.map +1 -0
  355. package/build/consent/presence.d.ts +30 -0
  356. package/build/consent/presence.d.ts.map +1 -0
  357. package/build/consent/presence.js +40 -0
  358. package/build/consent/presence.js.map +1 -0
  359. package/build/consent/service.d.ts +18 -0
  360. package/build/consent/service.d.ts.map +1 -0
  361. package/build/consent/service.js +53 -0
  362. package/build/consent/service.js.map +1 -0
  363. package/build/consent/translate.d.ts +14 -0
  364. package/build/consent/translate.d.ts.map +1 -0
  365. package/build/consent/translate.js +28 -0
  366. package/build/consent/translate.js.map +1 -0
  367. package/build/consent/types.d.ts +39 -0
  368. package/build/consent/types.d.ts.map +1 -0
  369. package/build/consent/types.js +2 -0
  370. package/build/consent/types.js.map +1 -0
  371. package/build/consent/types.local.d.ts +6 -0
  372. package/build/consent/types.local.d.ts.map +1 -0
  373. package/build/consent/types.local.js +2 -0
  374. package/build/consent/types.local.js.map +1 -0
  375. package/build/context.d.ts.map +1 -1
  376. package/build/context.js +10 -0
  377. package/build/context.js.map +1 -1
  378. package/build/editor/component.d.ts +4 -0
  379. package/build/editor/component.d.ts.map +1 -0
  380. package/build/editor/component.js +103 -0
  381. package/build/editor/component.js.map +1 -0
  382. package/build/editor/consts.local.d.ts +6 -0
  383. package/build/editor/consts.local.d.ts.map +1 -0
  384. package/build/editor/consts.local.js +58 -0
  385. package/build/editor/consts.local.js.map +1 -0
  386. package/build/editor/index.d.ts +3 -0
  387. package/build/editor/index.d.ts.map +1 -0
  388. package/build/editor/index.js +2 -0
  389. package/build/editor/index.js.map +1 -0
  390. package/build/editor/types.d.ts +24 -0
  391. package/build/editor/types.d.ts.map +1 -0
  392. package/build/editor/types.js +2 -0
  393. package/build/editor/types.js.map +1 -0
  394. package/build/entrypoints.d.ts +8 -0
  395. package/build/entrypoints.d.ts.map +1 -0
  396. package/build/entrypoints.js +4 -0
  397. package/build/entrypoints.js.map +1 -0
  398. package/build/exports.d.ts +6 -5
  399. package/build/exports.d.ts.map +1 -1
  400. package/build/exports.js +5 -5
  401. package/build/exports.js.map +1 -1
  402. package/build/index.d.ts +1 -1
  403. package/build/index.d.ts.map +1 -1
  404. package/build/index.js +1 -1
  405. package/build/index.js.map +1 -1
  406. package/build/main.d.ts +1 -4
  407. package/build/main.d.ts.map +1 -1
  408. package/build/main.js.map +1 -1
  409. package/build/modules.d.ts +1 -1
  410. package/build/modules.d.ts.map +1 -1
  411. package/build/permission/i18n/be.json +13 -0
  412. package/build/permission/i18n/de.json +13 -0
  413. package/build/permission/i18n/en.json +13 -0
  414. package/build/permission/i18n/es.json +13 -0
  415. package/build/permission/i18n/fr.json +13 -0
  416. package/build/permission/i18n/pl.json +13 -0
  417. package/build/permission/i18n/ru.json +13 -0
  418. package/build/permission/i18n/uk.json +13 -0
  419. package/build/permission/i18n.d.ts +2 -0
  420. package/build/permission/i18n.d.ts.map +1 -0
  421. package/build/permission/i18n.js +13 -0
  422. package/build/permission/i18n.js.map +1 -0
  423. package/build/permission/index.d.ts +6 -0
  424. package/build/permission/index.d.ts.map +1 -0
  425. package/build/permission/index.js +27 -0
  426. package/build/permission/index.js.map +1 -0
  427. package/build/permission/toast.d.ts +5 -0
  428. package/build/permission/toast.d.ts.map +1 -0
  429. package/build/permission/toast.js +8 -0
  430. package/build/permission/toast.js.map +1 -0
  431. package/build/permission/types.d.ts +6 -0
  432. package/build/permission/types.d.ts.map +1 -0
  433. package/build/permission/types.js +2 -0
  434. package/build/permission/types.js.map +1 -0
  435. package/build/picker/icons/consts.d.ts +9 -0
  436. package/build/picker/icons/consts.d.ts.map +1 -0
  437. package/build/picker/icons/consts.js +264 -0
  438. package/build/picker/icons/consts.js.map +1 -0
  439. package/build/picker/icons/types.d.ts +18 -0
  440. package/build/picker/icons/types.d.ts.map +1 -0
  441. package/build/picker/icons/types.js +2 -0
  442. package/build/picker/icons/types.js.map +1 -0
  443. package/build/picker/icons.d.ts +4 -0
  444. package/build/picker/icons.d.ts.map +1 -0
  445. package/build/picker/icons.js +54 -0
  446. package/build/picker/icons.js.map +1 -0
  447. package/build/picker/index.d.ts +11 -0
  448. package/build/picker/index.d.ts.map +1 -0
  449. package/build/picker/index.js +10 -0
  450. package/build/picker/index.js.map +1 -0
  451. package/build/picker/utils/color/types.d.ts +35 -0
  452. package/build/picker/utils/color/types.d.ts.map +1 -0
  453. package/build/picker/utils/color/types.js +2 -0
  454. package/build/picker/utils/color/types.js.map +1 -0
  455. package/build/picker/utils/color.d.ts +4 -0
  456. package/build/picker/utils/color.d.ts.map +1 -0
  457. package/build/picker/utils/color.js +96 -0
  458. package/build/picker/utils/color.js.map +1 -0
  459. package/build/picker/vocabulary/consts.d.ts +26 -0
  460. package/build/picker/vocabulary/consts.d.ts.map +1 -0
  461. package/build/picker/vocabulary/consts.js +336 -0
  462. package/build/picker/vocabulary/consts.js.map +1 -0
  463. package/build/picker/vocabulary/types.d.ts +67 -0
  464. package/build/picker/vocabulary/types.d.ts.map +1 -0
  465. package/build/picker/vocabulary/types.js +2 -0
  466. package/build/picker/vocabulary/types.js.map +1 -0
  467. package/build/picker/vocabulary.d.ts +11 -0
  468. package/build/picker/vocabulary.d.ts.map +1 -0
  469. package/build/picker/vocabulary.js +83 -0
  470. package/build/picker/vocabulary.js.map +1 -0
  471. package/build/scheme/consts.d.ts +8 -0
  472. package/build/scheme/consts.d.ts.map +1 -0
  473. package/build/scheme/consts.js +8 -0
  474. package/build/scheme/consts.js.map +1 -0
  475. package/build/scheme/index.d.ts +4 -0
  476. package/build/scheme/index.d.ts.map +1 -0
  477. package/build/scheme/index.js +3 -0
  478. package/build/scheme/index.js.map +1 -0
  479. package/build/scheme/scheme.d.ts +16 -0
  480. package/build/scheme/scheme.d.ts.map +1 -0
  481. package/build/scheme/scheme.js +58 -0
  482. package/build/scheme/scheme.js.map +1 -0
  483. package/build/scheme/types.d.ts +30 -0
  484. package/build/scheme/types.d.ts.map +1 -0
  485. package/build/scheme/types.js +2 -0
  486. package/build/scheme/types.js.map +1 -0
  487. package/build/types.d.ts +18 -2
  488. package/build/types.d.ts.map +1 -1
  489. package/package.json +107 -52
  490. package/src/@/components/ui/alert-dialog.tsx +156 -0
  491. package/src/@/components/ui/alert.tsx +1 -1
  492. package/src/@/components/ui/button.tsx +1 -1
  493. package/src/@/components/ui/card.tsx +1 -1
  494. package/src/@/components/ui/input.tsx +1 -1
  495. package/src/@/components/ui/label.tsx +1 -1
  496. package/src/@/components/ui/navigation-menu.tsx +1 -1
  497. package/src/@/components/ui/popover.tsx +47 -0
  498. package/src/@/components/ui/progress.tsx +1 -1
  499. package/src/@/components/ui/separator.tsx +1 -1
  500. package/src/@/components/ui/sheet.tsx +142 -0
  501. package/src/auth/context.ts +0 -2
  502. package/src/auth/entrypoints.ts +5 -0
  503. package/src/auth/exports.ts +4 -4
  504. package/src/auth/plugins/basic-ed25519.tsx +4 -4
  505. package/src/auth/plugins/re-captcha.tsx +3 -3
  506. package/src/auth/plugins/tunnel-consumer.tsx +1 -1
  507. package/src/components/block.tsx +2 -2
  508. package/src/components/consts.local.ts +29 -0
  509. package/src/components/footer/component.tsx +58 -16
  510. package/src/components/footer/credit.tsx +61 -0
  511. package/src/components/footer/index.ts +1 -0
  512. package/src/components/footer/types.ts +22 -1
  513. package/src/components/form/button/component.tsx +7 -4
  514. package/src/components/form/component.tsx +2 -2
  515. package/src/components/form/text/component.tsx +2 -2
  516. package/src/components/helper.ts +1 -13
  517. package/src/components/index.ts +4 -0
  518. package/src/components/link.tsx +3 -3
  519. package/src/components/login/append.ts +34 -0
  520. package/src/components/login/consts.local.ts +10 -0
  521. package/src/components/login/consts.ts +2 -0
  522. package/src/components/login/credit.tsx +33 -0
  523. package/src/components/login/i18n/be.json +10 -0
  524. package/src/components/login/i18n/de.json +10 -0
  525. package/src/components/login/i18n/en.json +10 -0
  526. package/src/components/login/i18n/es.json +10 -0
  527. package/src/components/login/i18n/fr.json +10 -0
  528. package/src/components/login/i18n/pl.json +10 -0
  529. package/src/components/login/i18n/ru.json +10 -0
  530. package/src/components/login/i18n/uk.json +10 -0
  531. package/src/components/login/i18n.ts +29 -0
  532. package/src/components/login/icons.tsx +39 -0
  533. package/src/components/login/index.ts +11 -0
  534. package/src/components/login/notify.ts +48 -0
  535. package/src/components/login/provider.tsx +57 -0
  536. package/src/components/login/screen.tsx +178 -0
  537. package/src/components/login/terms.tsx +75 -0
  538. package/src/components/login/types.ts +30 -0
  539. package/src/components/nav/consts.local.ts +64 -0
  540. package/src/components/nav/index.ts +1 -0
  541. package/src/components/nav/layout.tsx +184 -26
  542. package/src/components/nav/mobile.tsx +165 -0
  543. package/src/components/nav/side.tsx +43 -27
  544. package/src/components/nav/top.tsx +44 -22
  545. package/src/components/nav/types.ts +65 -2
  546. package/src/components/nav/viewport.ts +16 -0
  547. package/src/components/panel-app/component.tsx +9 -1
  548. package/src/components/picker/color-picker.tsx +15 -0
  549. package/src/components/picker/consts.local.ts +267 -0
  550. package/src/components/picker/dot.tsx +21 -0
  551. package/src/components/picker/grid.tsx +138 -0
  552. package/src/components/picker/i18n/be.json +60 -0
  553. package/src/components/picker/i18n/de.json +60 -0
  554. package/src/components/picker/i18n/en.json +60 -0
  555. package/src/components/picker/i18n/es.json +60 -0
  556. package/src/components/picker/i18n/fr.json +60 -0
  557. package/src/components/picker/i18n/pl.json +60 -0
  558. package/src/components/picker/i18n/ru.json +60 -0
  559. package/src/components/picker/i18n/uk.json +60 -0
  560. package/src/components/picker/i18n.ts +19 -0
  561. package/src/components/picker/icon-color-picker.tsx +25 -0
  562. package/src/components/picker/icon-picker.tsx +13 -0
  563. package/src/components/picker/index.ts +11 -0
  564. package/src/components/picker/panel.tsx +61 -0
  565. package/src/components/picker/root.tsx +81 -0
  566. package/src/components/picker/roving.ts +70 -0
  567. package/src/components/picker/surface.tsx +62 -0
  568. package/src/components/picker/swatches/custom.tsx +110 -0
  569. package/src/components/picker/swatches.tsx +67 -0
  570. package/src/components/picker/text.ts +46 -0
  571. package/src/components/picker/tile.tsx +35 -0
  572. package/src/components/picker/translate.ts +15 -0
  573. package/src/components/picker/trigger.tsx +54 -0
  574. package/src/components/picker/types.local.ts +154 -0
  575. package/src/components/picker/types.ts +125 -0
  576. package/src/components/scheme/consts.local.ts +13 -0
  577. package/src/components/scheme/hook.ts +62 -0
  578. package/src/components/scheme/index.ts +4 -0
  579. package/src/components/scheme/toggle.tsx +32 -0
  580. package/src/components/scheme/types.ts +23 -0
  581. package/src/components/socket/i18n/be.json +9 -0
  582. package/src/components/socket/i18n/de.json +9 -0
  583. package/src/components/socket/i18n/en.json +9 -0
  584. package/src/components/socket/i18n/es.json +9 -0
  585. package/src/components/socket/i18n/fr.json +9 -0
  586. package/src/components/socket/i18n/pl.json +9 -0
  587. package/src/components/socket/i18n/ru.json +9 -0
  588. package/src/components/socket/i18n/uk.json +9 -0
  589. package/src/components/socket/i18n.ts +19 -0
  590. package/src/components/socket/index.ts +2 -0
  591. package/src/components/socket/reload-dialog.tsx +61 -0
  592. package/src/components/status.tsx +1 -1
  593. package/src/components/text.tsx +2 -14
  594. package/src/components/toaster.tsx +65 -0
  595. package/src/components/uploader/consts.local.ts +7 -0
  596. package/src/components/uploader/image.tsx +2 -6
  597. package/src/consent/component.tsx +84 -0
  598. package/src/consent/consts.local.ts +10 -0
  599. package/src/consent/consts.ts +1 -0
  600. package/src/consent/geo.ts +26 -0
  601. package/src/consent/index.ts +24 -0
  602. package/src/consent/language.ts +12 -0
  603. package/src/consent/menu-widget.tsx +22 -0
  604. package/src/consent/presence.ts +45 -0
  605. package/src/consent/service.ts +75 -0
  606. package/src/consent/translate.ts +31 -0
  607. package/src/consent/types.local.ts +6 -0
  608. package/src/consent/types.ts +43 -0
  609. package/src/context.ts +12 -0
  610. package/src/editor/component.tsx +172 -0
  611. package/src/editor/consts.local.ts +62 -0
  612. package/src/editor/index.ts +2 -0
  613. package/src/editor/types.ts +24 -0
  614. package/src/entrypoints.ts +5 -0
  615. package/src/exports.ts +6 -5
  616. package/src/index.ts +1 -1
  617. package/src/main.tsx +2 -6
  618. package/src/permission/i18n/be.json +13 -0
  619. package/src/permission/i18n/de.json +13 -0
  620. package/src/permission/i18n/en.json +13 -0
  621. package/src/permission/i18n/es.json +13 -0
  622. package/src/permission/i18n/fr.json +13 -0
  623. package/src/permission/i18n/pl.json +13 -0
  624. package/src/permission/i18n/ru.json +13 -0
  625. package/src/permission/i18n/uk.json +13 -0
  626. package/src/permission/i18n.ts +13 -0
  627. package/src/permission/index.ts +27 -0
  628. package/src/permission/toast.tsx +20 -0
  629. package/src/permission/types.ts +5 -0
  630. package/src/picker/icons/consts.ts +309 -0
  631. package/src/picker/icons/types.ts +18 -0
  632. package/src/picker/icons.ts +70 -0
  633. package/src/picker/index.ts +11 -0
  634. package/src/picker/utils/color/types.ts +37 -0
  635. package/src/picker/utils/color.ts +119 -0
  636. package/src/picker/vocabulary/consts.ts +347 -0
  637. package/src/picker/vocabulary/types.ts +72 -0
  638. package/src/picker/vocabulary.ts +111 -0
  639. package/src/scheme/consts.ts +8 -0
  640. package/src/scheme/index.ts +3 -0
  641. package/src/scheme/scheme.ts +66 -0
  642. package/src/scheme/types.ts +30 -0
  643. package/src/types.ts +19 -2
  644. package/tests/consent-language.spec.ts +31 -0
  645. package/tests/consent.spec.ts +112 -0
  646. package/tests/context.ts +4 -0
  647. package/tests/editor.spec.ts +58 -0
  648. package/tests/harness/editor.tsx +32 -0
  649. package/tests/harness/index.html +1 -0
  650. package/tests/harness/lazy-screen.tsx +9 -0
  651. package/tests/harness/mount.tsx +370 -29
  652. package/tests/harness/picker.tsx +110 -0
  653. package/tests/lazy.spec.ts +104 -0
  654. package/tests/login-provider.spec.ts +114 -0
  655. package/tests/login.spec.ts +447 -0
  656. package/tests/nav.spec.ts +449 -3
  657. package/tests/package-boundary.spec.ts +19 -0
  658. package/tests/picker-shots.spec.ts +174 -0
  659. package/tests/picker-vocabulary.spec.ts +217 -0
  660. package/tests/picker.spec.ts +333 -0
  661. package/tests/scheme.spec.ts +149 -0
  662. package/tests/smoke.spec.ts +2 -2
  663. package/tests/socket-dialog.spec.ts +154 -0
  664. package/tests/toaster.spec.ts +59 -0
  665. package/zz-tw.d.mts +2 -0
  666. package/zz-tw.d.mts.map +1 -0
  667. package/build/.gitkeep +0 -0
  668. package/src/auth/modules.ts +0 -5
  669. package/src/modules.ts +0 -5
@@ -0,0 +1,142 @@
1
+ // shadcn sheet — sourced from shadcn (new-york) 2026-09-21
2
+ import * as React from 'react'
3
+ import * as SheetPrimitive from '@radix-ui/react-dialog'
4
+ import { XIcon } from 'lucide-react'
5
+
6
+ import { cn } from '../../lib/utils.js'
7
+
8
+ function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {
9
+ return <SheetPrimitive.Root data-slot="sheet" {...props} />
10
+ }
11
+
12
+ function SheetTrigger({
13
+ ...props
14
+ }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {
15
+ return <SheetPrimitive.Trigger data-slot="sheet-trigger" {...props} />
16
+ }
17
+
18
+ function SheetClose({
19
+ ...props
20
+ }: React.ComponentProps<typeof SheetPrimitive.Close>) {
21
+ return <SheetPrimitive.Close data-slot="sheet-close" {...props} />
22
+ }
23
+
24
+ function SheetPortal({
25
+ ...props
26
+ }: React.ComponentProps<typeof SheetPrimitive.Portal>) {
27
+ return <SheetPrimitive.Portal data-slot="sheet-portal" {...props} />
28
+ }
29
+
30
+ function SheetOverlay({
31
+ className,
32
+ ...props
33
+ }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {
34
+ return (
35
+ <SheetPrimitive.Overlay
36
+ data-slot="sheet-overlay"
37
+ className={cn(
38
+ 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',
39
+ className
40
+ )}
41
+ {...props}
42
+ />
43
+ )
44
+ }
45
+
46
+ function SheetContent({
47
+ className,
48
+ children,
49
+ side = 'right',
50
+ showCloseButton = true,
51
+ ...props
52
+ }: React.ComponentProps<typeof SheetPrimitive.Content> & {
53
+ side?: 'top' | 'right' | 'bottom' | 'left'
54
+ showCloseButton?: boolean
55
+ }) {
56
+ return (
57
+ <SheetPortal>
58
+ <SheetOverlay />
59
+ <SheetPrimitive.Content
60
+ data-slot="sheet-content"
61
+ className={cn(
62
+ 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500',
63
+ side === 'right' &&
64
+ 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm',
65
+ side === 'left' &&
66
+ 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',
67
+ side === 'top' &&
68
+ 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b',
69
+ side === 'bottom' &&
70
+ 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t',
71
+ className
72
+ )}
73
+ {...props}
74
+ >
75
+ {children}
76
+ {showCloseButton && (
77
+ <SheetPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none">
78
+ <XIcon className="size-4" />
79
+ <span className="sr-only">Close</span>
80
+ </SheetPrimitive.Close>
81
+ )}
82
+ </SheetPrimitive.Content>
83
+ </SheetPortal>
84
+ )
85
+ }
86
+
87
+ function SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {
88
+ return (
89
+ <div
90
+ data-slot="sheet-header"
91
+ className={cn('flex flex-col gap-1.5 p-4', className)}
92
+ {...props}
93
+ />
94
+ )
95
+ }
96
+
97
+ function SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {
98
+ return (
99
+ <div
100
+ data-slot="sheet-footer"
101
+ className={cn('mt-auto flex flex-col gap-2 p-4', className)}
102
+ {...props}
103
+ />
104
+ )
105
+ }
106
+
107
+ function SheetTitle({
108
+ className,
109
+ ...props
110
+ }: React.ComponentProps<typeof SheetPrimitive.Title>) {
111
+ return (
112
+ <SheetPrimitive.Title
113
+ data-slot="sheet-title"
114
+ className={cn('text-foreground font-semibold', className)}
115
+ {...props}
116
+ />
117
+ )
118
+ }
119
+
120
+ function SheetDescription({
121
+ className,
122
+ ...props
123
+ }: React.ComponentProps<typeof SheetPrimitive.Description>) {
124
+ return (
125
+ <SheetPrimitive.Description
126
+ data-slot="sheet-description"
127
+ className={cn('text-muted-foreground text-sm', className)}
128
+ {...props}
129
+ />
130
+ )
131
+ }
132
+
133
+ export {
134
+ Sheet,
135
+ SheetTrigger,
136
+ SheetClose,
137
+ SheetContent,
138
+ SheetHeader,
139
+ SheetFooter,
140
+ SheetTitle,
141
+ SheetDescription,
142
+ }
@@ -18,8 +18,6 @@ export const makeContext = <C extends Config, T extends Context<C>>(cfg: C): T =
18
18
  appendFlowService<C, T>(context);
19
19
  (context as unknown as AppContext<AppConfig>).flow = () => context.service('flow')
20
20
 
21
- context.makeContext = makeContext as typeof context.makeContext
22
-
23
21
  return context
24
22
  }
25
23
 
@@ -0,0 +1,5 @@
1
+
2
+ import { entrypoints as authBindings } from '@owlmeans/client-auth/manager/entrypoints'
3
+ import { entrypoints as configBindings } from '@owlmeans/api-config-client'
4
+
5
+ export const entrypoints = [...authBindings, ...configBindings]
@@ -1,12 +1,12 @@
1
1
 
2
- export { handler, useModule, useValue, useNavigate } from '@owlmeans/client'
3
- export type { Navigator } from '@owlmeans/client'
2
+ export { handler, lazyHandler, lazyComponent, useEntrypoint, useValue, useNavigate } from '@owlmeans/client'
3
+ export type { Navigator, LazyComponent, LazyComponentOptions, LazyHandler } from '@owlmeans/client'
4
4
  export { config } from '@owlmeans/client-context'
5
5
  export { service } from '@owlmeans/config'
6
- export { guard, parent, EntrypointOutcome, clone } from '@owlmeans/entrypoint'
6
+ export { EntrypointOutcome } from '@owlmeans/entrypoint'
7
7
  export type { AbstractRequest } from '@owlmeans/entrypoint'
8
8
  export { addWebService } from '@owlmeans/client-config'
9
- export { entrypoint, elevate, provideRequest, stab } from '@owlmeans/client-entrypoint'
9
+ export { bind, bindAll, bindScreen, clientRequestHelper, provideRequest, stab } from '@owlmeans/client-entrypoint'
10
10
  export type { ClientEntrypoint as Module, ClientRequest as Request } from '@owlmeans/client-entrypoint'
11
11
  export { route as croute } from '@owlmeans/client-route'
12
12
  export { route, frontend, RouteMethod } from '@owlmeans/route'
@@ -9,7 +9,7 @@ import { AuthenticationStage, DISPATCHER } from '@owlmeans/auth'
9
9
  import { Form } from '../../components/form/index.js'
10
10
  import { TextInput } from '../../components/form/text/index.js'
11
11
  import { useCallback } from 'react'
12
- import { Progress } from '@/components/ui/progress'
12
+ import { Progress } from '../../@/components/ui/progress.js'
13
13
  import { BlockScaling } from '@owlmeans/client-panel'
14
14
  import { useContext } from '@owlmeans/web-client'
15
15
 
@@ -37,7 +37,7 @@ export const Ed22519BasicAuthUIPlugin: AuthenticationRenderer = ({ type, stage,
37
37
 
38
38
  const createSubmit = (context: AppContext, control: AuthenticationControl) => async (data: FormData) => {
39
39
  const token = await control.authenticate({
40
- entityId: data.entityId,
40
+ entitySlug: data.entityId,
41
41
  userId: data.address,
42
42
  credential: data.privateKey
43
43
  })
@@ -46,8 +46,8 @@ const createSubmit = (context: AppContext, control: AuthenticationControl) => as
46
46
  return
47
47
  }
48
48
 
49
- const [url] = await context.module<ClientEntrypoint<string, AuthRequest>>(DISPATCHER)
50
- .call({ query: token })
49
+ const url = await context.entrypoint<ClientEntrypoint<string, AuthRequest>>(DISPATCHER)
50
+ .url({ query: token })
51
51
 
52
52
  control.setStage?.(control.stage = AuthenticationStage.Authenticated)
53
53
  // Give some time - that is really not cenessary - actually we need
@@ -7,7 +7,7 @@ import ReCAPTCHA from 'react-google-recaptcha'
7
7
  import { useCallback, useState } from 'react'
8
8
  import { PanelContext } from '@owlmeans/client-panel'
9
9
  import { Text } from '../../components/text.js'
10
- import { Progress } from '@/components/ui/progress'
10
+ import { Progress } from '../../@/components/ui/progress.js'
11
11
  import type { AppContext, Module } from '@owlmeans/web-client'
12
12
  import { useContext } from '@owlmeans/web-client'
13
13
  import type { AuthRequest } from '@owlmeans/auth-common'
@@ -53,8 +53,8 @@ const createFinish = (context: AppContext, control: AuthenticationControl) => as
53
53
  console.timeLog('empty token')
54
54
  return
55
55
  }
56
- const [url] = await context.module<Module<string, AuthRequest>>(DISPATCHER)
57
- .call({ query: authToken })
56
+ const url = await context.entrypoint<Module<string, AuthRequest>>(DISPATCHER)
57
+ .url({ query: authToken })
58
58
 
59
59
  control.setStage?.(control.stage = AuthenticationStage.Authenticated)
60
60
 
@@ -11,7 +11,7 @@ import { BlockScaling } from '@owlmeans/client-panel'
11
11
  import { Status } from '../../components/status.js'
12
12
  import { Button } from '../../components/form/button/component.js'
13
13
  import { QRCodeCanvas } from 'qrcode.react'
14
- import { Progress } from '@/components/ui/progress'
14
+ import { Progress } from '../../@/components/ui/progress.js'
15
15
 
16
16
  /**
17
17
  * Read a CSS variable from `:root` (consumer-owned theme). Falls back to
@@ -2,8 +2,8 @@ import { useMemo } from 'react'
2
2
  import type { FC } from 'react'
3
3
  import type { BlockProps } from './types.js'
4
4
  import { PanelContext, usePanelHelper } from '@owlmeans/client-panel'
5
- import { Card, CardContent, CardFooter } from '@/components/ui/card'
6
- import { cn } from '@/lib/utils'
5
+ import { Card, CardContent, CardFooter } from '../@/components/ui/card.js'
6
+ import { cn } from '../@/lib/utils.js'
7
7
  import { scalingToStyles } from './helper.js'
8
8
 
9
9
  export const Block: FC<BlockProps> = ({ children, horizontal, vertical, Actions, i18n, className, style }) => {
@@ -0,0 +1,29 @@
1
+ import type { TextVariant } from './types.js'
2
+
3
+ /**
4
+ * Tailwind default breakpoints — kept stable across consumers. If a consumer
5
+ * has customised Tailwind breakpoints in their app config, override this
6
+ * via a wrapping hook in the app.
7
+ */
8
+ export const BREAKPOINTS: Array<{ name: string, min: number, max: number }> = [
9
+ { name: 'xs', min: 0, max: 639 },
10
+ { name: 'sm', min: 640, max: 767 },
11
+ { name: 'md', min: 768, max: 1023 },
12
+ { name: 'lg', min: 1024, max: 1279 },
13
+ { name: 'xl', min: 1280, max: Number.POSITIVE_INFINITY },
14
+ ]
15
+
16
+ export const variantClasses: Record<TextVariant, string> = {
17
+ h1: 'scroll-m-20 text-4xl font-extrabold tracking-tight',
18
+ h2: 'scroll-m-20 text-3xl font-semibold tracking-tight',
19
+ h3: 'scroll-m-20 text-2xl font-semibold tracking-tight',
20
+ h4: 'scroll-m-20 text-xl font-semibold tracking-tight',
21
+ p: 'leading-7',
22
+ lead: 'text-xl text-muted-foreground',
23
+ large: 'text-lg font-semibold',
24
+ small: 'text-sm font-medium leading-none',
25
+ muted: 'text-sm text-muted-foreground',
26
+ blockquote: 'mt-6 border-l-2 pl-6 italic',
27
+ }
28
+
29
+ export const DARK_CLASS = 'dark'
@@ -1,35 +1,77 @@
1
1
  import type { FC } from 'react'
2
- import { defaultNavTranslate, resolveNavLabel } from '@owlmeans/client-panel'
3
- import { cn } from '@/lib/utils'
2
+ import { navLabelHelper } from '@owlmeans/client-panel'
3
+ import { cn } from '../../@/lib/utils.js'
4
4
  import { Link } from '../link.js'
5
+ import { ThemeToggle } from '../scheme/toggle.js'
6
+ import { ShellCredit, useShellCredit } from './credit.js'
5
7
 
6
8
  import type { FooterProps } from './types.js'
7
9
 
8
10
  /**
9
- * The standard footer — a row of links plus whatever the app adds as children.
11
+ * The standard footer — an optional full-width `content` block, a centred row of links plus
12
+ * whatever the app adds as children, and the platform/owner credit line, last.
13
+ *
14
+ * `content` is a block of the container, not an entry of the link row. The container centres its
15
+ * children (`items-center`), which is right for a row of links and a credit line and wrong for an
16
+ * application's own footer layout: centred, a block shrink-wraps to its content and its columns
17
+ * collapse towards the middle. `self-stretch` takes that one child back to the container's full
18
+ * width, and `text-start` undoes the container's centred text, so an application lays its own
19
+ * footer out from the natural edge — while the container keeps `items-center` for everything else.
10
20
  *
11
21
  * Labels are resolved HERE and handed to `Link` as children: `Link`'s own default label
12
22
  * looks up `modules.<alias>` with no fallback, so an app without i18n would print the raw
13
23
  * key. Resolving first means a literal label, a translation, or a humanized alias — never
14
24
  * a key.
25
+ *
26
+ * The credit is rendered unconditionally — never behind a prop, so a restyle cannot delete it.
27
+ * `useShellCredit` decides emptiness here (rather than letting `ShellCredit` render null inside
28
+ * an otherwise-empty bordered strip): the footer as a whole returns `null` only when content,
29
+ * links, children, the theme switcher AND the resolved credit are all absent.
30
+ *
31
+ * `themeToggle` puts the light/dark `ThemeToggle` in the bottom row beside the credit. It is the
32
+ * footer's own row rather than something an application adds through `content`, so every area of
33
+ * an application offers it in the same place and the credit keeps its position whatever the
34
+ * application's own footer layout does.
15
35
  */
16
- export const Footer: FC<FooterProps> = ({ links, translate = defaultNavTranslate, children, className, style }) => {
17
- if ((links == null || links.length < 1) && children == null) {
36
+ export const Footer: FC<FooterProps> = ({
37
+ links, translate = navLabelHelper.defaultNavTranslate, children, content, className, style, containerClassName,
38
+ themeToggle
39
+ }) => {
40
+ const credit = useShellCredit()
41
+ const hasLinks = (links != null && links.length > 0) || children != null
42
+ const toggle = themeToggle == null || themeToggle === false
43
+ ? null
44
+ : themeToggle === true ? {} : themeToggle
45
+ if (content == null && !hasLinks && toggle == null && !credit.poweredBy && credit.line == null) {
18
46
  return null
19
47
  }
20
48
 
21
- return <footer className={cn('border-t px-4 py-4', className)} style={style}>
22
- <div className="flex flex-wrap items-center gap-4 text-sm">
23
- {links?.map((link, idx) => {
24
- const label = resolveNavLabel(
25
- translate, link.label, `modules.${link.alias ?? link.href ?? ''}`, link.alias ?? link.href
26
- )
49
+ return <footer className={cn('border-t py-6', className)} style={style}>
50
+ <div className={cn('flex flex-col items-center gap-3 text-center', containerClassName)}>
51
+ {content != null && <div data-footer-content className="w-full self-stretch text-start">{content}</div>}
52
+ {hasLinks && <div className="flex flex-wrap items-center justify-center gap-4 text-sm">
53
+ {links?.map((link, idx) => {
54
+ const label = navLabelHelper.resolveNavLabel(
55
+ translate, link.label, `modules.${link.alias ?? link.href ?? ''}`, link.alias ?? link.href
56
+ )
27
57
 
28
- return link.href != null
29
- ? <Link key={`${link.href}:${idx}`} src={link.href} open={link.open}>{label}</Link>
30
- : <Link key={`${link.alias}:${idx}`} module={link.alias} open={link.open}>{label}</Link>
31
- })}
32
- {children}
58
+ return link.href != null
59
+ ? <Link key={`${link.href}:${idx}`} src={link.href} open={link.open}>{label}</Link>
60
+ : <Link key={`${link.alias}:${idx}`} module={link.alias} open={link.open}>{label}</Link>
61
+ })}
62
+ {children}
63
+ </div>}
64
+ {/*
65
+ * With a switcher, the credit and the switcher share the bottom row — the credit first, so
66
+ * it is still what the footer ends on in reading order. Without one the credit stays the
67
+ * container's own last child, exactly as it always was.
68
+ */}
69
+ {toggle != null
70
+ ? <div data-footer-bottom className="flex flex-wrap items-center justify-center gap-2">
71
+ <ShellCredit />
72
+ <ThemeToggle {...(toggle.labels != null ? { labels: toggle.labels } : {})} />
73
+ </div>
74
+ : <ShellCredit />}
33
75
  </div>
34
76
  </footer>
35
77
  }
@@ -0,0 +1,61 @@
1
+ import type { FC } from 'react'
2
+ import { useContext } from '@owlmeans/client'
3
+ import { useI18nLib } from '@owlmeans/client-i18n'
4
+ import { resolveCredit, type ResolvedCredit } from '@owlmeans/client-auth/login'
5
+ import type { CommonConfig } from '@owlmeans/config'
6
+ import { cn } from '../../@/lib/utils.js'
7
+ import { OWLMEANS_URL } from '../login/consts.js'
8
+ import type { ShellCreditProps } from './types.js'
9
+
10
+ /**
11
+ * The platform credit and the owner's own copyright notice, resolved from the same
12
+ * `security.auth.login.credit` configuration the sign-in screen reads (`resolveCredit`,
13
+ * `@owlmeans/client-auth/login`) — one source, so an owner who pays to drop the platform credit
14
+ * drops it everywhere it can appear, not only on a screen a signed-in visitor may never see
15
+ * again.
16
+ *
17
+ * Exported separately from {@link ShellCredit} so `Footer` can decide, WITHOUT rendering
18
+ * anything, whether it has nothing at all to show — an empty bordered strip is worse than no
19
+ * footer, and only the resolved credit knows it is empty.
20
+ */
21
+ export const useShellCredit = (): ResolvedCredit => {
22
+ const context = useContext()
23
+ const cfg = (context.cfg as CommonConfig).security?.auth?.login?.credit
24
+ const brand = (context.cfg as CommonConfig).brand
25
+
26
+ return resolveCredit(cfg, brand, context.cfg.service)
27
+ }
28
+
29
+ /**
30
+ * The platform credit and the owner's own copyright notice, in every area's footer.
31
+ *
32
+ * There is deliberately no prop to hide this component: the only way to remove the platform
33
+ * half is the config `poweredBy: false` the entitlement gate sets, and the owner's own notice is
34
+ * never something a restyle should be able to delete.
35
+ *
36
+ * Order is the opposite of the sign-in screen's `LoginCredit`: a footer is read as "whose page is
37
+ * this, and who built it", so the owner's own copyright leads and the platform credit follows.
38
+ */
39
+ export const ShellCredit: FC<ShellCreditProps> = ({ className }) => {
40
+ const { poweredBy, line } = useShellCredit()
41
+ const t = useI18nLib('auth')
42
+
43
+ if (!poweredBy && line == null) {
44
+ return null
45
+ }
46
+
47
+ return <p
48
+ data-shell-credit
49
+ className={cn('text-center text-xs text-muted-foreground', className)}
50
+ >
51
+ {line != null && <span>{line}</span>}
52
+ {poweredBy && line != null && <span aria-hidden="true"> · </span>}
53
+ {poweredBy && <a
54
+ data-login-powered
55
+ href={OWLMEANS_URL} target="_blank" rel="noopener noreferrer"
56
+ className="underline-offset-4 hover:text-foreground hover:underline"
57
+ >
58
+ {t('login.credit.powered', { defaultValue: 'Powered by OwlMeans' })}
59
+ </a>}
60
+ </p>
61
+ }
@@ -1,3 +1,4 @@
1
1
  export type * from './types.js'
2
2
 
3
3
  export * from './component.js'
4
+ export * from './credit.js'
@@ -1,9 +1,30 @@
1
- import type { PropsWithChildren } from 'react'
1
+ import type { PropsWithChildren, ReactNode } from 'react'
2
2
  import type { NavTranslate, PanelNavLink } from '@owlmeans/client-panel'
3
+ import type { ThemeToggleLabels } from '../scheme/types.js'
3
4
  import type { StyledProps } from '../types.js'
4
5
 
6
+ /** `true` for the English labels; an object to pass the application's own. */
7
+ export type FooterThemeToggle = boolean | { labels?: ThemeToggleLabels }
8
+
5
9
  export interface FooterProps extends PropsWithChildren<StyledProps> {
6
10
  links?: PanelNavLink[]
11
+ /**
12
+ * The application's own footer layout — a brand, a one-line description, link columns — as a
13
+ * full-width block (`w-full self-stretch`, start-aligned text) on the container's rhythm, above
14
+ * the link row and the credit line. `children`, by contrast, join the centred link row.
15
+ */
16
+ content?: ReactNode
17
+ /**
18
+ * Render the light/dark `ThemeToggle` in the bottom row, beside the credit line. Absent or
19
+ * `false`, the footer is exactly what it is without a switcher.
20
+ */
21
+ themeToggle?: FooterThemeToggle
22
+ /** The shell's horizontal rhythm, so the footer row lines up with the header and the content. */
23
+ containerClassName?: string
7
24
  /** See {@link NavTranslate} — omitted, literal labels and humanized aliases are used. */
8
25
  translate?: NavTranslate
9
26
  }
27
+
28
+ export interface ShellCreditProps {
29
+ className?: string
30
+ }
@@ -7,8 +7,11 @@ import { Loader2 } from 'lucide-react'
7
7
  import { I18nProps, useI18nApp, useI18nLib } from '@owlmeans/client-i18n'
8
8
  import { useContext } from '@owlmeans/client'
9
9
  import { useFormI18n, usePanelI18n } from '@owlmeans/client-panel'
10
- import { Button as UIButton } from '@/components/ui/button'
11
- import { cn } from '@/lib/utils'
10
+ import { Button as UIButton } from '../../../@/components/ui/button.js'
11
+ import { cn } from '../../../@/lib/utils.js'
12
+ import { logger } from '@owlmeans/log'
13
+
14
+ const log = logger('web-panel:form')
12
15
 
13
16
  /**
14
17
  * MUI → shadcn variant mapping:
@@ -82,7 +85,7 @@ export const SubmitButton: FC<SubmitProps> = memo((props) => {
82
85
 
83
86
  return <Button {...props} label={t(label)} i18n={_i18n}
84
87
  onClick={handleSubmit(
85
- props.onSubmit ?? props.onClick ?? (() => { console.info('Empty submit') }),
86
- problem => console.error('Failed to submit form with error: ', problem)
88
+ props.onSubmit ?? props.onClick ?? (() => { log.debug('Empty submit') }),
89
+ problem => log.debug('Form submit refused by validation', { fields: Object.keys(problem) })
87
90
  )} />
88
91
  })
@@ -12,8 +12,8 @@ import { scalingToStyles } from '../helper.js'
12
12
  import { ResilientError } from '@owlmeans/error'
13
13
  import { Status } from '../status.js'
14
14
  import type { WebFormProps } from './types.js'
15
- import { Card, CardContent, CardFooter } from '@/components/ui/card'
16
- import { cn } from '@/lib/utils'
15
+ import { Card, CardContent, CardFooter } from '../../@/components/ui/card.js'
16
+ import { cn } from '../../@/lib/utils.js'
17
17
 
18
18
  const ajv = new Ajv({ coerceTypes: true })
19
19
  formatsPlugin(ajv)
@@ -2,8 +2,8 @@ import type { FC } from 'react'
2
2
  import { useFormContext, Controller } from 'react-hook-form'
3
3
  import type { TextInputProps } from './types.js'
4
4
  import { useFormError, useFormI18n, useClientFormContext } from '@owlmeans/client-panel'
5
- import { Input } from '@/components/ui/input'
6
- import { Label } from '@/components/ui/label'
5
+ import { Input } from '../../../@/components/ui/input.js'
6
+ import { Label } from '../../../@/components/ui/label.js'
7
7
 
8
8
  export const TextInput: FC<TextInputProps> = ({ name, label, placeholder, hint, type, def, disableAutocomplete }) => {
9
9
  const { control } = useFormContext()
@@ -1,5 +1,6 @@
1
1
  import { useEffect, useState } from 'react'
2
2
  import { BlockScaling } from '@owlmeans/client-panel'
3
+ import { BREAKPOINTS } from './consts.local.js'
3
4
 
4
5
  /**
5
6
  * Map MUI's previous `scalingToStyles(horizontal, vertical, theme): SxProps`
@@ -44,19 +45,6 @@ export const scalingToStyles = (
44
45
  return parts.join(' ')
45
46
  }
46
47
 
47
- /**
48
- * Tailwind default breakpoints — kept stable across consumers. If a consumer
49
- * has customised Tailwind breakpoints in their app config, override this
50
- * via a wrapping hook in the app.
51
- */
52
- const BREAKPOINTS: Array<{ name: string, min: number, max: number }> = [
53
- { name: 'xs', min: 0, max: 639 },
54
- { name: 'sm', min: 640, max: 767 },
55
- { name: 'md', min: 768, max: 1023 },
56
- { name: 'lg', min: 1024, max: 1279 },
57
- { name: 'xl', min: 1280, max: Number.POSITIVE_INFINITY },
58
- ]
59
-
60
48
  const matchBreakpoint = (width: number): string => {
61
49
  for (const bp of BREAKPOINTS) {
62
50
  if (width >= bp.min && width <= bp.max) {
@@ -4,6 +4,7 @@ export * from './panel-app/index.js'
4
4
  export * from './layout/index.js'
5
5
  export * from './nav/index.js'
6
6
  export * from './footer/index.js'
7
+ export * from './login/index.js'
7
8
 
8
9
  export * from './form/index.js'
9
10
  export * from './form/text/index.js'
@@ -17,3 +18,6 @@ export * from './text.js'
17
18
  export * from './link.js'
18
19
  export * from './helper.js'
19
20
  export * from './status.js'
21
+ export * from './toaster.js'
22
+ export * from './socket/index.js'
23
+ export * from './scheme/index.js'
@@ -4,7 +4,7 @@ import type { LinkProps } from './types.js'
4
4
  import { useValue } from '@owlmeans/client'
5
5
  import { useContext } from '@owlmeans/web-client'
6
6
  import type { ClientEntrypoint } from '@owlmeans/client-entrypoint'
7
- import { cn } from '@/lib/utils'
7
+ import { cn } from '../@/lib/utils.js'
8
8
 
9
9
  export const Link: FC<LinkProps> = ({ src, module, name, children, center, open, className, style }) => {
10
10
  const t = usePanelI18n()
@@ -15,8 +15,8 @@ export const Link: FC<LinkProps> = ({ src, module, name, children, center, open,
15
15
  return src
16
16
  }
17
17
  if (module != null) {
18
- module = typeof module === 'string' ? context.module<ClientEntrypoint<string>>(module) : module
19
- const [url] = await module.call<string>()
18
+ module = typeof module === 'string' ? context.entrypoint<ClientEntrypoint<string>>(module) : module
19
+ const url = await module.url()
20
20
  return url
21
21
  }
22
22
  return null
@@ -0,0 +1,34 @@
1
+ import { ensureLoginService } from '@owlmeans/client-auth/login'
2
+ import type { BasicConfig, BasicContext } from '@owlmeans/context'
3
+ import type { ClientConfig } from '@owlmeans/client-context'
4
+ import { LocalizedLoginScreen } from './screen.js'
5
+ import { notifyPopupBlocked } from './notify.js'
6
+ import type { LoginScreenSetup } from './types.js'
7
+
8
+ /**
9
+ * Give this context the shadcn sign-in screen, with the application's own logo and copy on it.
10
+ *
11
+ * Registered on the login SERVICE rather than imported by a dispatcher, because a relying party
12
+ * (`web-oidc-rp`, `mui-oidc-rp`) must never depend on a UI family — that edge would make every
13
+ * relying party pick one, and there are two. The dispatcher asks `login().screen()` and falls back
14
+ * to the plain screen `@owlmeans/client-auth` ships, so an app that never calls this still gets a
15
+ * chooser rather than an auto-redirect.
16
+ *
17
+ * Idempotent: called by `makeContext` with defaults, and again by the app with its own logo.
18
+ */
19
+ export const appendLoginScreen = <C extends BasicConfig, T extends BasicContext<C>>(
20
+ ctx: T, setup?: LoginScreenSetup
21
+ ): T => {
22
+ const service = ensureLoginService(ctx)
23
+ service.registerScreen(
24
+ setup == null || Object.keys(setup).length < 1
25
+ ? LocalizedLoginScreen
26
+ : props => LocalizedLoginScreen({ ...setup, ...props })
27
+ )
28
+ // A header "Log in"/"Log out" control has no screen to show `loginAttemptError` on, so it gets
29
+ // a toast instead — registered here so an app that already calls this for the screen needs no
30
+ // second call to get it.
31
+ service.registerNotifier(notifyPopupBlocked(ctx.cfg as unknown as ClientConfig))
32
+
33
+ return ctx
34
+ }
@@ -0,0 +1,10 @@
1
+ export const AUTH_RESOURCE = 'auth'
2
+
3
+ export const POPUP_BLOCKED_FALLBACK =
4
+ "The sign-in window was blocked. Click the blocked pop-up icon in your browser's address bar to open it."
5
+
6
+ export const VARIANT: Record<string, 'default' | 'outline' | 'link'> = {
7
+ primary: 'default',
8
+ secondary: 'outline',
9
+ link: 'link',
10
+ }
@@ -0,0 +1,2 @@
1
+ /** Where "Powered by OwlMeans" leads, on the sign-in screen and in every shell footer alike. */
2
+ export const OWLMEANS_URL = 'https://owlmeans.com'