@owlmeans/web-panel 0.1.18-rc.47 → 0.1.18-rc.48
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/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/web-panel/SKILL.md +1 -1
- package/build/components/footer/credit.d.ts.map +1 -1
- package/build/components/footer/credit.js +2 -1
- package/build/components/footer/credit.js.map +1 -1
- package/build/components/login/credit.d.ts +2 -0
- package/build/components/login/credit.d.ts.map +1 -1
- package/build/components/login/credit.js +3 -1
- package/build/components/login/credit.js.map +1 -1
- package/package.json +1 -1
- package/src/components/footer/credit.tsx +7 -2
- package/src/components/login/credit.tsx +9 -2
- package/tests/login.spec.ts +2 -0
- package/tests/nav.spec.ts +5 -2
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@owlmeans/web-panel",
|
|
4
|
-
"version": "0.1.18-rc.
|
|
5
|
-
"generatedAt": "2026-09-
|
|
4
|
+
"version": "0.1.18-rc.48",
|
|
5
|
+
"generatedAt": "2026-09-15T19:14:43.314Z",
|
|
6
6
|
"canonicalRepo": "https://github.com/owlmeans/common",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credit.d.ts","sourceRoot":"","sources":["../../../src/components/footer/credit.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAI/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"credit.d.ts","sourceRoot":"","sources":["../../../src/components/footer/credit.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAI/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAKjE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,QAAO,cAMjC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAsB5C,CAAA"}
|
|
@@ -3,6 +3,7 @@ import { useContext } from '@owlmeans/client';
|
|
|
3
3
|
import { useI18nLib } from '@owlmeans/client-i18n';
|
|
4
4
|
import { resolveCredit } from '@owlmeans/client-auth/login';
|
|
5
5
|
import { cn } from '../../@/lib/utils.js';
|
|
6
|
+
import { OWLMEANS_URL } from '../login/credit.js';
|
|
6
7
|
/**
|
|
7
8
|
* The platform credit and the owner's own copyright notice, resolved from the same
|
|
8
9
|
* `security.auth.login.credit` configuration the sign-in screen reads (`resolveCredit`,
|
|
@@ -36,6 +37,6 @@ export const ShellCredit = ({ className }) => {
|
|
|
36
37
|
if (!poweredBy && line == null) {
|
|
37
38
|
return null;
|
|
38
39
|
}
|
|
39
|
-
return _jsxs("p", { "data-shell-credit": true, className: cn('text-center text-xs text-muted-foreground', className), children: [line != null && _jsx("span", { children: line }), poweredBy && line != null && _jsx("span", { "aria-hidden": "true", children: " \u00B7 " }), poweredBy && _jsx("
|
|
40
|
+
return _jsxs("p", { "data-shell-credit": true, className: cn('text-center text-xs text-muted-foreground', className), children: [line != null && _jsx("span", { children: line }), poweredBy && line != null && _jsx("span", { "aria-hidden": "true", children: " \u00B7 " }), poweredBy && _jsx("a", { "data-login-powered": true, href: OWLMEANS_URL, target: "_blank", rel: "noopener noreferrer", className: "underline-offset-4 hover:text-foreground hover:underline", children: t('login.credit.powered', { defaultValue: 'Powered by OwlMeans' }) })] });
|
|
40
41
|
};
|
|
41
42
|
//# sourceMappingURL=credit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credit.js","sourceRoot":"","sources":["../../../src/components/footer/credit.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAG3D,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"credit.js","sourceRoot":"","sources":["../../../src/components/footer/credit.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAG3D,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAMjD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAmB,EAAE;IACjD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,GAAG,GAAI,OAAO,CAAC,GAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAA;IACvE,MAAM,KAAK,GAAI,OAAO,CAAC,GAAoB,CAAC,KAAK,CAAA;IAEjD,OAAO,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACvD,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,WAAW,GAAyB,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;IACjE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,CAAA;IAC5C,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAE5B,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,wCAEL,SAAS,EAAE,EAAE,CAAC,2CAA2C,EAAE,SAAS,CAAC,aAEpE,IAAI,IAAI,IAAI,IAAI,yBAAO,IAAI,GAAQ,EACnC,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,8BAAkB,MAAM,yBAAW,EAChE,SAAS,IAAI,wCAEZ,IAAI,EAAE,YAAY,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAC7D,SAAS,EAAC,0DAA0D,YAEnE,CAAC,CAAC,sBAAsB,EAAE,EAAE,YAAY,EAAE,qBAAqB,EAAE,CAAC,GACjE,IACF,CAAA;AACN,CAAC,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { FC } from 'react';
|
|
2
2
|
import type { LoginCreditModel } from '@owlmeans/client-panel/auth';
|
|
3
|
+
/** Where "Powered by OwlMeans" leads, on the sign-in screen and in every shell footer alike. */
|
|
4
|
+
export declare const OWLMEANS_URL = "https://owlmeans.com";
|
|
3
5
|
export interface LoginCreditProps {
|
|
4
6
|
model: LoginCreditModel;
|
|
5
7
|
translate: (key: string, defaultValue: string) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credit.d.ts","sourceRoot":"","sources":["../../../src/components/login/credit.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,gBAAgB,CAAA;IACvB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAA;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"credit.d.ts","sourceRoot":"","sources":["../../../src/components/login/credit.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE,gGAAgG;AAChG,eAAO,MAAM,YAAY,yBAAyB,CAAA;AAElD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,gBAAgB,CAAA;IACvB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAA;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAmB5C,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from '../../@/lib/utils.js';
|
|
3
|
+
/** Where "Powered by OwlMeans" leads, on the sign-in screen and in every shell footer alike. */
|
|
4
|
+
export const OWLMEANS_URL = 'https://owlmeans.com';
|
|
3
5
|
/**
|
|
4
6
|
* The line at the bottom of a sign-in screen.
|
|
5
7
|
*
|
|
@@ -12,6 +14,6 @@ export const LoginCredit = ({ model, translate, className }) => {
|
|
|
12
14
|
if (!model.poweredBy && model.line == null) {
|
|
13
15
|
return null;
|
|
14
16
|
}
|
|
15
|
-
return _jsxs("p", { "data-login-credit": true, className: cn('text-center text-xs text-muted-foreground', className), children: [model.poweredBy && _jsx("
|
|
17
|
+
return _jsxs("p", { "data-login-credit": true, className: cn('text-center text-xs text-muted-foreground', className), children: [model.poweredBy && _jsx("a", { "data-login-powered": true, href: OWLMEANS_URL, target: "_blank", rel: "noopener noreferrer", className: "underline-offset-4 hover:text-foreground hover:underline", children: translate('login.credit.powered', 'Powered by OwlMeans') }), model.poweredBy && model.line != null && _jsx("span", { "aria-hidden": "true", children: " \u00B7 " }), model.line != null && _jsx("span", { children: model.line })] });
|
|
16
18
|
};
|
|
17
19
|
//# sourceMappingURL=credit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credit.js","sourceRoot":"","sources":["../../../src/components/login/credit.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"credit.js","sourceRoot":"","sources":["../../../src/components/login/credit.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAA;AAGzC,gGAAgG;AAChG,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAA;AAQlD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAyB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;IACnF,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,wCAEL,SAAS,EAAE,EAAE,CAAC,2CAA2C,EAAE,SAAS,CAAC,aAEpE,KAAK,CAAC,SAAS,IAAI,wCAElB,IAAI,EAAE,YAAY,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAC7D,SAAS,EAAC,0DAA0D,YAEnE,SAAS,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,GACvD,EACH,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,8BAAkB,MAAM,yBAAW,EAC5E,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,yBAAO,KAAK,CAAC,IAAI,GAAQ,IAC9C,CAAA;AACN,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -5,6 +5,7 @@ import { resolveCredit } from '@owlmeans/client-auth/login'
|
|
|
5
5
|
import type { ResolvedCredit } from '@owlmeans/client-auth/login'
|
|
6
6
|
import type { CommonConfig } from '@owlmeans/config'
|
|
7
7
|
import { cn } from '../../@/lib/utils.js'
|
|
8
|
+
import { OWLMEANS_URL } from '../login/credit.js'
|
|
8
9
|
|
|
9
10
|
export interface ShellCreditProps {
|
|
10
11
|
className?: string
|
|
@@ -53,8 +54,12 @@ export const ShellCredit: FC<ShellCreditProps> = ({ className }) => {
|
|
|
53
54
|
>
|
|
54
55
|
{line != null && <span>{line}</span>}
|
|
55
56
|
{poweredBy && line != null && <span aria-hidden="true"> · </span>}
|
|
56
|
-
{poweredBy && <
|
|
57
|
+
{poweredBy && <a
|
|
58
|
+
data-login-powered
|
|
59
|
+
href={OWLMEANS_URL} target="_blank" rel="noopener noreferrer"
|
|
60
|
+
className="underline-offset-4 hover:text-foreground hover:underline"
|
|
61
|
+
>
|
|
57
62
|
{t('login.credit.powered', { defaultValue: 'Powered by OwlMeans' })}
|
|
58
|
-
</
|
|
63
|
+
</a>}
|
|
59
64
|
</p>
|
|
60
65
|
}
|
|
@@ -2,6 +2,9 @@ import type { FC } from 'react'
|
|
|
2
2
|
import { cn } from '../../@/lib/utils.js'
|
|
3
3
|
import type { LoginCreditModel } from '@owlmeans/client-panel/auth'
|
|
4
4
|
|
|
5
|
+
/** Where "Powered by OwlMeans" leads, on the sign-in screen and in every shell footer alike. */
|
|
6
|
+
export const OWLMEANS_URL = 'https://owlmeans.com'
|
|
7
|
+
|
|
5
8
|
export interface LoginCreditProps {
|
|
6
9
|
model: LoginCreditModel
|
|
7
10
|
translate: (key: string, defaultValue: string) => string
|
|
@@ -25,9 +28,13 @@ export const LoginCredit: FC<LoginCreditProps> = ({ model, translate, className
|
|
|
25
28
|
data-login-credit
|
|
26
29
|
className={cn('text-center text-xs text-muted-foreground', className)}
|
|
27
30
|
>
|
|
28
|
-
{model.poweredBy && <
|
|
31
|
+
{model.poweredBy && <a
|
|
32
|
+
data-login-powered
|
|
33
|
+
href={OWLMEANS_URL} target="_blank" rel="noopener noreferrer"
|
|
34
|
+
className="underline-offset-4 hover:text-foreground hover:underline"
|
|
35
|
+
>
|
|
29
36
|
{translate('login.credit.powered', 'Powered by OwlMeans')}
|
|
30
|
-
</
|
|
37
|
+
</a>}
|
|
31
38
|
{model.poweredBy && model.line != null && <span aria-hidden="true"> · </span>}
|
|
32
39
|
{model.line != null && <span>{model.line}</span>}
|
|
33
40
|
</p>
|
package/tests/login.spec.ts
CHANGED
|
@@ -43,6 +43,8 @@ describe('@owlmeans/web-panel — the sign-in screen', () => {
|
|
|
43
43
|
expect(await page.locator('#login-logo').count()).toBe(1)
|
|
44
44
|
const credit = await page.locator('[data-login-credit]').textContent()
|
|
45
45
|
expect(credit).toContain('Powered by OwlMeans')
|
|
46
|
+
expect(await page.locator('[data-login-credit] a[data-login-powered]').getAttribute('href'))
|
|
47
|
+
.toBe('https://owlmeans.com')
|
|
46
48
|
expect(credit).toContain('Harness')
|
|
47
49
|
// A copyright NOTICE, not a name: the mark and the year are what make it one.
|
|
48
50
|
expect(credit).toContain(`© ${new Date().getFullYear()} Acme`)
|
package/tests/nav.spec.ts
CHANGED
|
@@ -84,7 +84,7 @@ describe('@owlmeans/web-panel — two-layer navigation', () => {
|
|
|
84
84
|
const { page, close } = await open('/dash')
|
|
85
85
|
try {
|
|
86
86
|
await page.waitForSelector('#dash')
|
|
87
|
-
const links = page.locator('footer a')
|
|
87
|
+
const links = page.locator('footer a:not([data-login-powered])')
|
|
88
88
|
expect(await links.count()).toBe(2)
|
|
89
89
|
expect(await links.nth(0).getAttribute('href')).toBe('/dash')
|
|
90
90
|
expect(await links.nth(1).getAttribute('href')).toBe('https://owlmeans.com')
|
|
@@ -228,6 +228,9 @@ describe('@owlmeans/web-panel — the shell footer credit', () => {
|
|
|
228
228
|
expect(text).toContain('Acme')
|
|
229
229
|
expect(text).toContain('Powered by OwlMeans')
|
|
230
230
|
expect(text?.indexOf('Acme')).toBeLessThan(text!.indexOf('Powered by OwlMeans'))
|
|
231
|
+
const powered = page.locator('footer [data-shell-credit] a[data-login-powered]')
|
|
232
|
+
expect(await powered.getAttribute('href')).toBe('https://owlmeans.com')
|
|
233
|
+
expect(await powered.getAttribute('target')).toBe('_blank')
|
|
231
234
|
} finally {
|
|
232
235
|
await close()
|
|
233
236
|
}
|
|
@@ -252,7 +255,7 @@ describe('@owlmeans/web-panel — the shell footer credit', () => {
|
|
|
252
255
|
const { page, close } = await open('/dash?footer=none')
|
|
253
256
|
try {
|
|
254
257
|
await page.waitForSelector('#dash')
|
|
255
|
-
expect(await page.locator('footer a').count()).toBe(0)
|
|
258
|
+
expect(await page.locator('footer a:not([data-login-powered])').count()).toBe(0)
|
|
256
259
|
expect(await page.locator('footer [data-shell-credit]').count()).toBe(1)
|
|
257
260
|
} finally {
|
|
258
261
|
await close()
|