@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.
- package/README.md +510 -143
- package/THIRD-PARTY-NOTICES.txt +24 -0
- package/agent-meta/manifest.json +163 -4
- package/agent-meta/skills/web-panel/SKILL.md +136 -83
- package/agent-meta/skills/web-panel/parts/consent.md +114 -0
- package/agent-meta/skills/web-panel/parts/editor.md +47 -0
- package/agent-meta/skills/web-panel/parts/forms.md +85 -0
- package/agent-meta/skills/web-panel/parts/navigation.md +203 -0
- package/agent-meta/skills/web-panel/parts/picker.md +164 -0
- package/agent-meta/skills/web-panel/parts/reload.md +46 -0
- package/agent-meta/skills/web-panel/parts/sign-in.md +65 -0
- package/agent-meta/skills/web-panel/parts/theme.md +74 -0
- package/build/@/components/ui/alert-dialog.d.ts +15 -0
- package/build/@/components/ui/alert-dialog.d.ts.map +1 -0
- package/build/@/components/ui/alert-dialog.js +39 -0
- package/build/@/components/ui/alert-dialog.js.map +1 -0
- package/build/@/components/ui/alert.js +1 -1
- package/build/@/components/ui/alert.js.map +1 -1
- package/build/@/components/ui/button.js +1 -1
- package/build/@/components/ui/button.js.map +1 -1
- package/build/@/components/ui/card.js +1 -1
- package/build/@/components/ui/card.js.map +1 -1
- package/build/@/components/ui/input.js +1 -1
- package/build/@/components/ui/input.js.map +1 -1
- package/build/@/components/ui/label.js +1 -1
- package/build/@/components/ui/label.js.map +1 -1
- package/build/@/components/ui/navigation-menu.js +1 -1
- package/build/@/components/ui/navigation-menu.js.map +1 -1
- package/build/@/components/ui/popover.d.ts +8 -0
- package/build/@/components/ui/popover.d.ts.map +1 -0
- package/build/@/components/ui/popover.js +17 -0
- package/build/@/components/ui/popover.js.map +1 -0
- package/build/@/components/ui/progress.js +1 -1
- package/build/@/components/ui/progress.js.map +1 -1
- package/build/@/components/ui/separator.js +1 -1
- package/build/@/components/ui/separator.js.map +1 -1
- package/build/@/components/ui/sheet.d.ts +15 -0
- package/build/@/components/ui/sheet.d.ts.map +1 -0
- package/build/@/components/ui/sheet.js +40 -0
- package/build/@/components/ui/sheet.js.map +1 -0
- package/build/auth/context.d.ts.map +1 -1
- package/build/auth/context.js +0 -1
- package/build/auth/context.js.map +1 -1
- package/build/auth/entrypoints.d.ts +10 -0
- package/build/auth/entrypoints.d.ts.map +1 -0
- package/build/auth/entrypoints.js +4 -0
- package/build/auth/entrypoints.js.map +1 -0
- package/build/auth/exports.d.ts +4 -4
- package/build/auth/exports.d.ts.map +1 -1
- package/build/auth/exports.js +3 -3
- package/build/auth/exports.js.map +1 -1
- package/build/auth/modules.d.ts +1 -1
- package/build/auth/modules.d.ts.map +1 -1
- package/build/auth/plugins/basic-ed25519.js +4 -4
- package/build/auth/plugins/basic-ed25519.js.map +1 -1
- package/build/auth/plugins/re-captcha.js +3 -3
- package/build/auth/plugins/re-captcha.js.map +1 -1
- package/build/auth/plugins/tunnel-consumer.js +1 -1
- package/build/auth/plugins/tunnel-consumer.js.map +1 -1
- package/build/components/block.js +2 -2
- package/build/components/block.js.map +1 -1
- package/build/components/consts.local.d.ts +14 -0
- package/build/components/consts.local.d.ts.map +1 -0
- package/build/components/consts.local.js +26 -0
- package/build/components/consts.local.js.map +1 -0
- package/build/components/footer/component.d.ts +19 -1
- package/build/components/footer/component.d.ts.map +1 -1
- package/build/components/footer/component.js +38 -11
- package/build/components/footer/component.js.map +1 -1
- package/build/components/footer/credit.d.ts +27 -0
- package/build/components/footer/credit.d.ts.map +1 -0
- package/build/components/footer/credit.js +42 -0
- package/build/components/footer/credit.js.map +1 -0
- package/build/components/footer/index.d.ts +1 -0
- package/build/components/footer/index.d.ts.map +1 -1
- package/build/components/footer/index.js +1 -0
- package/build/components/footer/index.js.map +1 -1
- package/build/components/footer/types.d.ts +22 -1
- package/build/components/footer/types.d.ts.map +1 -1
- package/build/components/form/button/component.d.ts.map +1 -1
- package/build/components/form/button/component.js +5 -3
- package/build/components/form/button/component.js.map +1 -1
- package/build/components/form/component.js +2 -2
- package/build/components/form/component.js.map +1 -1
- package/build/components/form/text/component.js +2 -2
- package/build/components/form/text/component.js.map +1 -1
- package/build/components/helper.d.ts.map +1 -1
- package/build/components/helper.js +1 -12
- package/build/components/helper.js.map +1 -1
- package/build/components/index.d.ts +4 -0
- package/build/components/index.d.ts.map +1 -1
- package/build/components/index.js +4 -0
- package/build/components/index.js.map +1 -1
- package/build/components/link.js +3 -3
- package/build/components/link.js.map +1 -1
- package/build/components/login/append.d.ts +15 -0
- package/build/components/login/append.d.ts.map +1 -0
- package/build/components/login/append.js +26 -0
- package/build/components/login/append.js.map +1 -0
- package/build/components/login/consts.d.ts +3 -0
- package/build/components/login/consts.d.ts.map +1 -0
- package/build/components/login/consts.js +3 -0
- package/build/components/login/consts.js.map +1 -0
- package/build/components/login/consts.local.d.ts +4 -0
- package/build/components/login/consts.local.d.ts.map +1 -0
- package/build/components/login/consts.local.js +8 -0
- package/build/components/login/consts.local.js.map +1 -0
- package/build/components/login/credit.d.ts +12 -0
- package/build/components/login/credit.d.ts.map +1 -0
- package/build/components/login/credit.js +18 -0
- package/build/components/login/credit.js.map +1 -0
- package/build/components/login/i18n/be.json +10 -0
- package/build/components/login/i18n/de.json +10 -0
- package/build/components/login/i18n/en.json +10 -0
- package/build/components/login/i18n/es.json +10 -0
- package/build/components/login/i18n/fr.json +10 -0
- package/build/components/login/i18n/pl.json +10 -0
- package/build/components/login/i18n/ru.json +10 -0
- package/build/components/login/i18n/uk.json +10 -0
- package/build/components/login/i18n.d.ts +2 -0
- package/build/components/login/i18n.d.ts.map +1 -0
- package/build/components/login/i18n.js +28 -0
- package/build/components/login/i18n.js.map +1 -0
- package/build/components/login/icons.d.ts +14 -0
- package/build/components/login/icons.d.ts.map +1 -0
- package/build/components/login/icons.js +29 -0
- package/build/components/login/icons.js.map +1 -0
- package/build/components/login/index.d.ts +11 -0
- package/build/components/login/index.d.ts.map +1 -0
- package/build/components/login/index.js +10 -0
- package/build/components/login/index.js.map +1 -0
- package/build/components/login/notify.d.ts +18 -0
- package/build/components/login/notify.d.ts.map +1 -0
- package/build/components/login/notify.js +41 -0
- package/build/components/login/notify.js.map +1 -0
- package/build/components/login/provider.d.ts +20 -0
- package/build/components/login/provider.d.ts.map +1 -0
- package/build/components/login/provider.js +31 -0
- package/build/components/login/provider.js.map +1 -0
- package/build/components/login/screen.d.ts +24 -0
- package/build/components/login/screen.d.ts.map +1 -0
- package/build/components/login/screen.js +92 -0
- package/build/components/login/screen.js.map +1 -0
- package/build/components/login/terms.d.ts +19 -0
- package/build/components/login/terms.d.ts.map +1 -0
- package/build/components/login/terms.js +32 -0
- package/build/components/login/terms.js.map +1 -0
- package/build/components/login/types.d.ts +28 -0
- package/build/components/login/types.d.ts.map +1 -0
- package/build/components/login/types.js +2 -0
- package/build/components/login/types.js.map +1 -0
- package/build/components/nav/consts.local.d.ts +41 -0
- package/build/components/nav/consts.local.d.ts.map +1 -0
- package/build/components/nav/consts.local.js +60 -0
- package/build/components/nav/consts.local.js.map +1 -0
- package/build/components/nav/index.d.ts +1 -0
- package/build/components/nav/index.d.ts.map +1 -1
- package/build/components/nav/index.js +1 -0
- package/build/components/nav/index.js.map +1 -1
- package/build/components/nav/layout.d.ts +9 -2
- package/build/components/nav/layout.d.ts.map +1 -1
- package/build/components/nav/layout.js +48 -7
- package/build/components/nav/layout.js.map +1 -1
- package/build/components/nav/mobile.d.ts +21 -0
- package/build/components/nav/mobile.d.ts.map +1 -0
- package/build/components/nav/mobile.js +55 -0
- package/build/components/nav/mobile.js.map +1 -0
- package/build/components/nav/side.d.ts.map +1 -1
- package/build/components/nav/side.js +10 -10
- package/build/components/nav/side.js.map +1 -1
- package/build/components/nav/top.d.ts.map +1 -1
- package/build/components/nav/top.js +12 -8
- package/build/components/nav/top.js.map +1 -1
- package/build/components/nav/types.d.ts +64 -1
- package/build/components/nav/types.d.ts.map +1 -1
- package/build/components/nav/viewport.d.ts +3 -0
- package/build/components/nav/viewport.d.ts.map +1 -0
- package/build/components/nav/viewport.js +14 -0
- package/build/components/nav/viewport.js.map +1 -0
- package/build/components/panel-app/component.d.ts.map +1 -1
- package/build/components/panel-app/component.js +4 -3
- package/build/components/panel-app/component.js.map +1 -1
- package/build/components/picker/color-picker.d.ts +9 -0
- package/build/components/picker/color-picker.d.ts.map +1 -0
- package/build/components/picker/color-picker.js +9 -0
- package/build/components/picker/color-picker.js.map +1 -0
- package/build/components/picker/consts.local.d.ts +76 -0
- package/build/components/picker/consts.local.d.ts.map +1 -0
- package/build/components/picker/consts.local.js +214 -0
- package/build/components/picker/consts.local.js.map +1 -0
- package/build/components/picker/dot.d.ts +8 -0
- package/build/components/picker/dot.d.ts.map +1 -0
- package/build/components/picker/dot.js +10 -0
- package/build/components/picker/dot.js.map +1 -0
- package/build/components/picker/grid.d.ts +17 -0
- package/build/components/picker/grid.d.ts.map +1 -0
- package/build/components/picker/grid.js +73 -0
- package/build/components/picker/grid.js.map +1 -0
- package/build/components/picker/i18n/be.json +60 -0
- package/build/components/picker/i18n/de.json +60 -0
- package/build/components/picker/i18n/en.json +60 -0
- package/build/components/picker/i18n/es.json +60 -0
- package/build/components/picker/i18n/fr.json +60 -0
- package/build/components/picker/i18n/pl.json +60 -0
- package/build/components/picker/i18n/ru.json +60 -0
- package/build/components/picker/i18n/uk.json +60 -0
- package/build/components/picker/i18n.d.ts +2 -0
- package/build/components/picker/i18n.d.ts.map +1 -0
- package/build/components/picker/i18n.js +18 -0
- package/build/components/picker/i18n.js.map +1 -0
- package/build/components/picker/icon-color-picker.d.ts +14 -0
- package/build/components/picker/icon-color-picker.d.ts.map +1 -0
- package/build/components/picker/icon-color-picker.js +15 -0
- package/build/components/picker/icon-color-picker.js.map +1 -0
- package/build/components/picker/icon-picker.d.ts +8 -0
- package/build/components/picker/icon-picker.d.ts.map +1 -0
- package/build/components/picker/icon-picker.js +8 -0
- package/build/components/picker/icon-picker.js.map +1 -0
- package/build/components/picker/index.d.ts +11 -0
- package/build/components/picker/index.d.ts.map +1 -0
- package/build/components/picker/index.js +10 -0
- package/build/components/picker/index.js.map +1 -0
- package/build/components/picker/panel.d.ts +9 -0
- package/build/components/picker/panel.d.ts.map +1 -0
- package/build/components/picker/panel.js +23 -0
- package/build/components/picker/panel.js.map +1 -0
- package/build/components/picker/root.d.ts +13 -0
- package/build/components/picker/root.d.ts.map +1 -0
- package/build/components/picker/root.js +55 -0
- package/build/components/picker/root.js.map +1 -0
- package/build/components/picker/roving.d.ts +8 -0
- package/build/components/picker/roving.d.ts.map +1 -0
- package/build/components/picker/roving.js +62 -0
- package/build/components/picker/roving.js.map +1 -0
- package/build/components/picker/surface.d.ts +18 -0
- package/build/components/picker/surface.d.ts.map +1 -0
- package/build/components/picker/surface.js +36 -0
- package/build/components/picker/surface.js.map +1 -0
- package/build/components/picker/swatches/custom.d.ts +10 -0
- package/build/components/picker/swatches/custom.d.ts.map +1 -0
- package/build/components/picker/swatches/custom.js +65 -0
- package/build/components/picker/swatches/custom.js.map +1 -0
- package/build/components/picker/swatches.d.ts +16 -0
- package/build/components/picker/swatches.d.ts.map +1 -0
- package/build/components/picker/swatches.js +35 -0
- package/build/components/picker/swatches.js.map +1 -0
- package/build/components/picker/text.d.ts +5 -0
- package/build/components/picker/text.d.ts.map +1 -0
- package/build/components/picker/text.js +29 -0
- package/build/components/picker/text.js.map +1 -0
- package/build/components/picker/tile.d.ts +11 -0
- package/build/components/picker/tile.d.ts.map +1 -0
- package/build/components/picker/tile.js +19 -0
- package/build/components/picker/tile.js.map +1 -0
- package/build/components/picker/translate.d.ts +9 -0
- package/build/components/picker/translate.d.ts.map +1 -0
- package/build/components/picker/translate.js +13 -0
- package/build/components/picker/translate.js.map +1 -0
- package/build/components/picker/trigger.d.ts +12 -0
- package/build/components/picker/trigger.d.ts.map +1 -0
- package/build/components/picker/trigger.js +29 -0
- package/build/components/picker/trigger.js.map +1 -0
- package/build/components/picker/types.d.ts +114 -0
- package/build/components/picker/types.d.ts.map +1 -0
- package/build/components/picker/types.js +2 -0
- package/build/components/picker/types.js.map +1 -0
- package/build/components/picker/types.local.d.ts +143 -0
- package/build/components/picker/types.local.d.ts.map +1 -0
- package/build/components/picker/types.local.js +2 -0
- package/build/components/picker/types.local.js.map +1 -0
- package/build/components/scheme/consts.local.d.ts +8 -0
- package/build/components/scheme/consts.local.d.ts.map +1 -0
- package/build/components/scheme/consts.local.js +13 -0
- package/build/components/scheme/consts.local.js.map +1 -0
- package/build/components/scheme/hook.d.ts +16 -0
- package/build/components/scheme/hook.d.ts.map +1 -0
- package/build/components/scheme/hook.js +52 -0
- package/build/components/scheme/hook.js.map +1 -0
- package/build/components/scheme/index.d.ts +4 -0
- package/build/components/scheme/index.d.ts.map +1 -0
- package/build/components/scheme/index.js +3 -0
- package/build/components/scheme/index.js.map +1 -0
- package/build/components/scheme/toggle.d.ts +14 -0
- package/build/components/scheme/toggle.d.ts.map +1 -0
- package/build/components/scheme/toggle.js +24 -0
- package/build/components/scheme/toggle.js.map +1 -0
- package/build/components/scheme/types.d.ts +21 -0
- package/build/components/scheme/types.d.ts.map +1 -0
- package/build/components/scheme/types.js +2 -0
- package/build/components/scheme/types.js.map +1 -0
- package/build/components/socket/i18n/be.json +9 -0
- package/build/components/socket/i18n/de.json +9 -0
- package/build/components/socket/i18n/en.json +9 -0
- package/build/components/socket/i18n/es.json +9 -0
- package/build/components/socket/i18n/fr.json +9 -0
- package/build/components/socket/i18n/pl.json +9 -0
- package/build/components/socket/i18n/ru.json +9 -0
- package/build/components/socket/i18n/uk.json +9 -0
- package/build/components/socket/i18n.d.ts +2 -0
- package/build/components/socket/i18n.d.ts.map +1 -0
- package/build/components/socket/i18n.js +18 -0
- package/build/components/socket/i18n.js.map +1 -0
- package/build/components/socket/index.d.ts +3 -0
- package/build/components/socket/index.d.ts.map +1 -0
- package/build/components/socket/index.js +3 -0
- package/build/components/socket/index.js.map +1 -0
- package/build/components/socket/reload-dialog.d.ts +22 -0
- package/build/components/socket/reload-dialog.d.ts.map +1 -0
- package/build/components/socket/reload-dialog.js +34 -0
- package/build/components/socket/reload-dialog.js.map +1 -0
- package/build/components/status.js +1 -1
- package/build/components/status.js.map +1 -1
- package/build/components/text.d.ts.map +1 -1
- package/build/components/text.js +2 -13
- package/build/components/text.js.map +1 -1
- package/build/components/toaster.d.ts +16 -0
- package/build/components/toaster.d.ts.map +1 -0
- package/build/components/toaster.js +52 -0
- package/build/components/toaster.js.map +1 -0
- package/build/components/uploader/consts.local.d.ts +4 -0
- package/build/components/uploader/consts.local.d.ts.map +1 -0
- package/build/components/uploader/consts.local.js +6 -0
- package/build/components/uploader/consts.local.js.map +1 -0
- package/build/components/uploader/image.d.ts.map +1 -1
- package/build/components/uploader/image.js +2 -6
- package/build/components/uploader/image.js.map +1 -1
- package/build/consent/component.d.ts +27 -0
- package/build/consent/component.d.ts.map +1 -0
- package/build/consent/component.js +60 -0
- package/build/consent/component.js.map +1 -0
- package/build/consent/consts.d.ts +2 -0
- package/build/consent/consts.d.ts.map +1 -0
- package/build/consent/consts.js +2 -0
- package/build/consent/consts.js.map +1 -0
- package/build/consent/consts.local.d.ts +9 -0
- package/build/consent/consts.local.d.ts.map +1 -0
- package/build/consent/consts.local.js +9 -0
- package/build/consent/consts.local.js.map +1 -0
- package/build/consent/geo.d.ts +17 -0
- package/build/consent/geo.d.ts.map +1 -0
- package/build/consent/geo.js +19 -0
- package/build/consent/geo.js.map +1 -0
- package/build/consent/index.d.ts +11 -0
- package/build/consent/index.d.ts.map +1 -0
- package/build/consent/index.js +9 -0
- package/build/consent/index.js.map +1 -0
- package/build/consent/language.d.ts +12 -0
- package/build/consent/language.d.ts.map +1 -0
- package/build/consent/language.js +11 -0
- package/build/consent/language.js.map +1 -0
- package/build/consent/menu-widget.d.ts +13 -0
- package/build/consent/menu-widget.d.ts.map +1 -0
- package/build/consent/menu-widget.js +20 -0
- package/build/consent/menu-widget.js.map +1 -0
- package/build/consent/presence.d.ts +30 -0
- package/build/consent/presence.d.ts.map +1 -0
- package/build/consent/presence.js +40 -0
- package/build/consent/presence.js.map +1 -0
- package/build/consent/service.d.ts +18 -0
- package/build/consent/service.d.ts.map +1 -0
- package/build/consent/service.js +53 -0
- package/build/consent/service.js.map +1 -0
- package/build/consent/translate.d.ts +14 -0
- package/build/consent/translate.d.ts.map +1 -0
- package/build/consent/translate.js +28 -0
- package/build/consent/translate.js.map +1 -0
- package/build/consent/types.d.ts +39 -0
- package/build/consent/types.d.ts.map +1 -0
- package/build/consent/types.js +2 -0
- package/build/consent/types.js.map +1 -0
- package/build/consent/types.local.d.ts +6 -0
- package/build/consent/types.local.d.ts.map +1 -0
- package/build/consent/types.local.js +2 -0
- package/build/consent/types.local.js.map +1 -0
- package/build/context.d.ts.map +1 -1
- package/build/context.js +10 -0
- package/build/context.js.map +1 -1
- package/build/editor/component.d.ts +4 -0
- package/build/editor/component.d.ts.map +1 -0
- package/build/editor/component.js +103 -0
- package/build/editor/component.js.map +1 -0
- package/build/editor/consts.local.d.ts +6 -0
- package/build/editor/consts.local.d.ts.map +1 -0
- package/build/editor/consts.local.js +58 -0
- package/build/editor/consts.local.js.map +1 -0
- package/build/editor/index.d.ts +3 -0
- package/build/editor/index.d.ts.map +1 -0
- package/build/editor/index.js +2 -0
- package/build/editor/index.js.map +1 -0
- package/build/editor/types.d.ts +24 -0
- package/build/editor/types.d.ts.map +1 -0
- package/build/editor/types.js +2 -0
- package/build/editor/types.js.map +1 -0
- package/build/entrypoints.d.ts +8 -0
- package/build/entrypoints.d.ts.map +1 -0
- package/build/entrypoints.js +4 -0
- package/build/entrypoints.js.map +1 -0
- package/build/exports.d.ts +6 -5
- package/build/exports.d.ts.map +1 -1
- package/build/exports.js +5 -5
- package/build/exports.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/main.d.ts +1 -4
- package/build/main.d.ts.map +1 -1
- package/build/main.js.map +1 -1
- package/build/modules.d.ts +1 -1
- package/build/modules.d.ts.map +1 -1
- package/build/permission/i18n/be.json +13 -0
- package/build/permission/i18n/de.json +13 -0
- package/build/permission/i18n/en.json +13 -0
- package/build/permission/i18n/es.json +13 -0
- package/build/permission/i18n/fr.json +13 -0
- package/build/permission/i18n/pl.json +13 -0
- package/build/permission/i18n/ru.json +13 -0
- package/build/permission/i18n/uk.json +13 -0
- package/build/permission/i18n.d.ts +2 -0
- package/build/permission/i18n.d.ts.map +1 -0
- package/build/permission/i18n.js +13 -0
- package/build/permission/i18n.js.map +1 -0
- package/build/permission/index.d.ts +6 -0
- package/build/permission/index.d.ts.map +1 -0
- package/build/permission/index.js +27 -0
- package/build/permission/index.js.map +1 -0
- package/build/permission/toast.d.ts +5 -0
- package/build/permission/toast.d.ts.map +1 -0
- package/build/permission/toast.js +8 -0
- package/build/permission/toast.js.map +1 -0
- package/build/permission/types.d.ts +6 -0
- package/build/permission/types.d.ts.map +1 -0
- package/build/permission/types.js +2 -0
- package/build/permission/types.js.map +1 -0
- package/build/picker/icons/consts.d.ts +9 -0
- package/build/picker/icons/consts.d.ts.map +1 -0
- package/build/picker/icons/consts.js +264 -0
- package/build/picker/icons/consts.js.map +1 -0
- package/build/picker/icons/types.d.ts +18 -0
- package/build/picker/icons/types.d.ts.map +1 -0
- package/build/picker/icons/types.js +2 -0
- package/build/picker/icons/types.js.map +1 -0
- package/build/picker/icons.d.ts +4 -0
- package/build/picker/icons.d.ts.map +1 -0
- package/build/picker/icons.js +54 -0
- package/build/picker/icons.js.map +1 -0
- package/build/picker/index.d.ts +11 -0
- package/build/picker/index.d.ts.map +1 -0
- package/build/picker/index.js +10 -0
- package/build/picker/index.js.map +1 -0
- package/build/picker/utils/color/types.d.ts +35 -0
- package/build/picker/utils/color/types.d.ts.map +1 -0
- package/build/picker/utils/color/types.js +2 -0
- package/build/picker/utils/color/types.js.map +1 -0
- package/build/picker/utils/color.d.ts +4 -0
- package/build/picker/utils/color.d.ts.map +1 -0
- package/build/picker/utils/color.js +96 -0
- package/build/picker/utils/color.js.map +1 -0
- package/build/picker/vocabulary/consts.d.ts +26 -0
- package/build/picker/vocabulary/consts.d.ts.map +1 -0
- package/build/picker/vocabulary/consts.js +336 -0
- package/build/picker/vocabulary/consts.js.map +1 -0
- package/build/picker/vocabulary/types.d.ts +67 -0
- package/build/picker/vocabulary/types.d.ts.map +1 -0
- package/build/picker/vocabulary/types.js +2 -0
- package/build/picker/vocabulary/types.js.map +1 -0
- package/build/picker/vocabulary.d.ts +11 -0
- package/build/picker/vocabulary.d.ts.map +1 -0
- package/build/picker/vocabulary.js +83 -0
- package/build/picker/vocabulary.js.map +1 -0
- package/build/scheme/consts.d.ts +8 -0
- package/build/scheme/consts.d.ts.map +1 -0
- package/build/scheme/consts.js +8 -0
- package/build/scheme/consts.js.map +1 -0
- package/build/scheme/index.d.ts +4 -0
- package/build/scheme/index.d.ts.map +1 -0
- package/build/scheme/index.js +3 -0
- package/build/scheme/index.js.map +1 -0
- package/build/scheme/scheme.d.ts +16 -0
- package/build/scheme/scheme.d.ts.map +1 -0
- package/build/scheme/scheme.js +58 -0
- package/build/scheme/scheme.js.map +1 -0
- package/build/scheme/types.d.ts +30 -0
- package/build/scheme/types.d.ts.map +1 -0
- package/build/scheme/types.js +2 -0
- package/build/scheme/types.js.map +1 -0
- package/build/types.d.ts +18 -2
- package/build/types.d.ts.map +1 -1
- package/package.json +107 -52
- package/src/@/components/ui/alert-dialog.tsx +156 -0
- package/src/@/components/ui/alert.tsx +1 -1
- package/src/@/components/ui/button.tsx +1 -1
- package/src/@/components/ui/card.tsx +1 -1
- package/src/@/components/ui/input.tsx +1 -1
- package/src/@/components/ui/label.tsx +1 -1
- package/src/@/components/ui/navigation-menu.tsx +1 -1
- package/src/@/components/ui/popover.tsx +47 -0
- package/src/@/components/ui/progress.tsx +1 -1
- package/src/@/components/ui/separator.tsx +1 -1
- package/src/@/components/ui/sheet.tsx +142 -0
- package/src/auth/context.ts +0 -2
- package/src/auth/entrypoints.ts +5 -0
- package/src/auth/exports.ts +4 -4
- package/src/auth/plugins/basic-ed25519.tsx +4 -4
- package/src/auth/plugins/re-captcha.tsx +3 -3
- package/src/auth/plugins/tunnel-consumer.tsx +1 -1
- package/src/components/block.tsx +2 -2
- package/src/components/consts.local.ts +29 -0
- package/src/components/footer/component.tsx +58 -16
- package/src/components/footer/credit.tsx +61 -0
- package/src/components/footer/index.ts +1 -0
- package/src/components/footer/types.ts +22 -1
- package/src/components/form/button/component.tsx +7 -4
- package/src/components/form/component.tsx +2 -2
- package/src/components/form/text/component.tsx +2 -2
- package/src/components/helper.ts +1 -13
- package/src/components/index.ts +4 -0
- package/src/components/link.tsx +3 -3
- package/src/components/login/append.ts +34 -0
- package/src/components/login/consts.local.ts +10 -0
- package/src/components/login/consts.ts +2 -0
- package/src/components/login/credit.tsx +33 -0
- package/src/components/login/i18n/be.json +10 -0
- package/src/components/login/i18n/de.json +10 -0
- package/src/components/login/i18n/en.json +10 -0
- package/src/components/login/i18n/es.json +10 -0
- package/src/components/login/i18n/fr.json +10 -0
- package/src/components/login/i18n/pl.json +10 -0
- package/src/components/login/i18n/ru.json +10 -0
- package/src/components/login/i18n/uk.json +10 -0
- package/src/components/login/i18n.ts +29 -0
- package/src/components/login/icons.tsx +39 -0
- package/src/components/login/index.ts +11 -0
- package/src/components/login/notify.ts +48 -0
- package/src/components/login/provider.tsx +57 -0
- package/src/components/login/screen.tsx +178 -0
- package/src/components/login/terms.tsx +75 -0
- package/src/components/login/types.ts +30 -0
- package/src/components/nav/consts.local.ts +64 -0
- package/src/components/nav/index.ts +1 -0
- package/src/components/nav/layout.tsx +184 -26
- package/src/components/nav/mobile.tsx +165 -0
- package/src/components/nav/side.tsx +43 -27
- package/src/components/nav/top.tsx +44 -22
- package/src/components/nav/types.ts +65 -2
- package/src/components/nav/viewport.ts +16 -0
- package/src/components/panel-app/component.tsx +9 -1
- package/src/components/picker/color-picker.tsx +15 -0
- package/src/components/picker/consts.local.ts +267 -0
- package/src/components/picker/dot.tsx +21 -0
- package/src/components/picker/grid.tsx +138 -0
- package/src/components/picker/i18n/be.json +60 -0
- package/src/components/picker/i18n/de.json +60 -0
- package/src/components/picker/i18n/en.json +60 -0
- package/src/components/picker/i18n/es.json +60 -0
- package/src/components/picker/i18n/fr.json +60 -0
- package/src/components/picker/i18n/pl.json +60 -0
- package/src/components/picker/i18n/ru.json +60 -0
- package/src/components/picker/i18n/uk.json +60 -0
- package/src/components/picker/i18n.ts +19 -0
- package/src/components/picker/icon-color-picker.tsx +25 -0
- package/src/components/picker/icon-picker.tsx +13 -0
- package/src/components/picker/index.ts +11 -0
- package/src/components/picker/panel.tsx +61 -0
- package/src/components/picker/root.tsx +81 -0
- package/src/components/picker/roving.ts +70 -0
- package/src/components/picker/surface.tsx +62 -0
- package/src/components/picker/swatches/custom.tsx +110 -0
- package/src/components/picker/swatches.tsx +67 -0
- package/src/components/picker/text.ts +46 -0
- package/src/components/picker/tile.tsx +35 -0
- package/src/components/picker/translate.ts +15 -0
- package/src/components/picker/trigger.tsx +54 -0
- package/src/components/picker/types.local.ts +154 -0
- package/src/components/picker/types.ts +125 -0
- package/src/components/scheme/consts.local.ts +13 -0
- package/src/components/scheme/hook.ts +62 -0
- package/src/components/scheme/index.ts +4 -0
- package/src/components/scheme/toggle.tsx +32 -0
- package/src/components/scheme/types.ts +23 -0
- package/src/components/socket/i18n/be.json +9 -0
- package/src/components/socket/i18n/de.json +9 -0
- package/src/components/socket/i18n/en.json +9 -0
- package/src/components/socket/i18n/es.json +9 -0
- package/src/components/socket/i18n/fr.json +9 -0
- package/src/components/socket/i18n/pl.json +9 -0
- package/src/components/socket/i18n/ru.json +9 -0
- package/src/components/socket/i18n/uk.json +9 -0
- package/src/components/socket/i18n.ts +19 -0
- package/src/components/socket/index.ts +2 -0
- package/src/components/socket/reload-dialog.tsx +61 -0
- package/src/components/status.tsx +1 -1
- package/src/components/text.tsx +2 -14
- package/src/components/toaster.tsx +65 -0
- package/src/components/uploader/consts.local.ts +7 -0
- package/src/components/uploader/image.tsx +2 -6
- package/src/consent/component.tsx +84 -0
- package/src/consent/consts.local.ts +10 -0
- package/src/consent/consts.ts +1 -0
- package/src/consent/geo.ts +26 -0
- package/src/consent/index.ts +24 -0
- package/src/consent/language.ts +12 -0
- package/src/consent/menu-widget.tsx +22 -0
- package/src/consent/presence.ts +45 -0
- package/src/consent/service.ts +75 -0
- package/src/consent/translate.ts +31 -0
- package/src/consent/types.local.ts +6 -0
- package/src/consent/types.ts +43 -0
- package/src/context.ts +12 -0
- package/src/editor/component.tsx +172 -0
- package/src/editor/consts.local.ts +62 -0
- package/src/editor/index.ts +2 -0
- package/src/editor/types.ts +24 -0
- package/src/entrypoints.ts +5 -0
- package/src/exports.ts +6 -5
- package/src/index.ts +1 -1
- package/src/main.tsx +2 -6
- package/src/permission/i18n/be.json +13 -0
- package/src/permission/i18n/de.json +13 -0
- package/src/permission/i18n/en.json +13 -0
- package/src/permission/i18n/es.json +13 -0
- package/src/permission/i18n/fr.json +13 -0
- package/src/permission/i18n/pl.json +13 -0
- package/src/permission/i18n/ru.json +13 -0
- package/src/permission/i18n/uk.json +13 -0
- package/src/permission/i18n.ts +13 -0
- package/src/permission/index.ts +27 -0
- package/src/permission/toast.tsx +20 -0
- package/src/permission/types.ts +5 -0
- package/src/picker/icons/consts.ts +309 -0
- package/src/picker/icons/types.ts +18 -0
- package/src/picker/icons.ts +70 -0
- package/src/picker/index.ts +11 -0
- package/src/picker/utils/color/types.ts +37 -0
- package/src/picker/utils/color.ts +119 -0
- package/src/picker/vocabulary/consts.ts +347 -0
- package/src/picker/vocabulary/types.ts +72 -0
- package/src/picker/vocabulary.ts +111 -0
- package/src/scheme/consts.ts +8 -0
- package/src/scheme/index.ts +3 -0
- package/src/scheme/scheme.ts +66 -0
- package/src/scheme/types.ts +30 -0
- package/src/types.ts +19 -2
- package/tests/consent-language.spec.ts +31 -0
- package/tests/consent.spec.ts +112 -0
- package/tests/context.ts +4 -0
- package/tests/editor.spec.ts +58 -0
- package/tests/harness/editor.tsx +32 -0
- package/tests/harness/index.html +1 -0
- package/tests/harness/lazy-screen.tsx +9 -0
- package/tests/harness/mount.tsx +370 -29
- package/tests/harness/picker.tsx +110 -0
- package/tests/lazy.spec.ts +104 -0
- package/tests/login-provider.spec.ts +114 -0
- package/tests/login.spec.ts +447 -0
- package/tests/nav.spec.ts +449 -3
- package/tests/package-boundary.spec.ts +19 -0
- package/tests/picker-shots.spec.ts +174 -0
- package/tests/picker-vocabulary.spec.ts +217 -0
- package/tests/picker.spec.ts +333 -0
- package/tests/scheme.spec.ts +149 -0
- package/tests/smoke.spec.ts +2 -2
- package/tests/socket-dialog.spec.ts +154 -0
- package/tests/toaster.spec.ts +59 -0
- package/zz-tw.d.mts +2 -0
- package/zz-tw.d.mts.map +1 -0
- package/build/.gitkeep +0 -0
- package/src/auth/modules.ts +0 -5
- 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
|
+
}
|
package/src/auth/context.ts
CHANGED
|
@@ -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
|
|
package/src/auth/exports.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
|
|
2
|
-
export { handler,
|
|
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 {
|
|
6
|
+
export { EntrypointOutcome } from '@owlmeans/entrypoint'
|
|
7
7
|
export type { AbstractRequest } from '@owlmeans/entrypoint'
|
|
8
8
|
export { addWebService } from '@owlmeans/client-config'
|
|
9
|
-
export {
|
|
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 '
|
|
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
|
-
|
|
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
|
|
50
|
-
.
|
|
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 '
|
|
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
|
|
57
|
-
.
|
|
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 '
|
|
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
|
package/src/components/block.tsx
CHANGED
|
@@ -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 '
|
|
6
|
-
import { cn } from '
|
|
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 {
|
|
3
|
-
import { cn } from '
|
|
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 —
|
|
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> = ({
|
|
17
|
-
|
|
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
|
|
22
|
-
<div className=
|
|
23
|
-
{
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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,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 '
|
|
11
|
-
import { cn } from '
|
|
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 ?? (() => {
|
|
86
|
-
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 '
|
|
16
|
-
import { cn } from '
|
|
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 '
|
|
6
|
-
import { Label } from '
|
|
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()
|
package/src/components/helper.ts
CHANGED
|
@@ -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) {
|
package/src/components/index.ts
CHANGED
|
@@ -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'
|
package/src/components/link.tsx
CHANGED
|
@@ -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 '
|
|
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.
|
|
19
|
-
const
|
|
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
|
+
}
|