@drawnagency/primitives 0.1.104 → 0.1.106
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/dist/auth/cookies.d.ts +21 -1
- package/dist/auth/cookies.d.ts.map +1 -1
- package/dist/auth/index.d.ts +2 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +3 -1
- package/dist/auth/types.d.ts +28 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/{chunk-PTOLUMGV.js → chunk-4RNF2DRG.js} +1 -0
- package/dist/{chunk-MUTHF2GT.js → chunk-5IZ2KTMU.js} +2 -2
- package/dist/{chunk-LZKVV4K2.js → chunk-6P4CJCXB.js} +7 -1
- package/dist/{chunk-CZLYECHC.js → chunk-AB3XVXI3.js} +4 -4
- package/dist/chunk-B7VBSE5X.js +12 -0
- package/dist/{chunk-BGHWUJFV.js → chunk-BOZUEKWL.js} +107 -171
- package/dist/{chunk-TGNS7D4F.js → chunk-CPTFFLK2.js} +1 -1
- package/dist/{chunk-26ALJO4K.js → chunk-D6TLUVOP.js} +1 -1
- package/dist/{chunk-EM5DFHDZ.js → chunk-GEENI3OC.js} +13 -4
- package/dist/chunk-GGXZZ77Z.js +70 -0
- package/dist/{chunk-EWNDBKYK.js → chunk-LUAI5DWR.js} +1 -1
- package/dist/chunk-NLQ5F3RQ.js +43 -0
- package/dist/{chunk-X4PRBGB3.js → chunk-QLBHERK6.js} +9 -9
- package/dist/{chunk-3COSXTOY.js → chunk-XBYJQ5RS.js} +1 -1
- package/dist/{chunk-CXQWLG6X.js → chunk-Z7VXESB6.js} +18 -18
- package/dist/{chunk-WA6QPDJI.js → chunk-ZHHJVKU7.js} +6 -6
- package/dist/collab/rebase.js +2 -1
- package/dist/components/chat/ChatPanel.d.ts.map +1 -1
- package/dist/components/chat/ChatWidget.d.ts.map +1 -1
- package/dist/components/docfile/DocFileOverlay.d.ts.map +1 -1
- package/dist/components/docfile/DocFilePane.d.ts +4 -3
- package/dist/components/docfile/DocFilePane.d.ts.map +1 -1
- package/dist/components/editor/SectionOrderingModal.d.ts.map +1 -1
- package/dist/components/editor/index.js +8 -7
- package/dist/components/primitives/index.js +7 -6
- package/dist/components/sections/brand-guide.js +8 -7
- package/dist/components/sections/register-schemas.js +13 -12
- package/dist/components/sections/register.js +13 -12
- package/dist/components/shared/Navigation.d.ts +16 -1
- package/dist/components/shared/Navigation.d.ts.map +1 -1
- package/dist/components/shared/SectionSummaryRow.d.ts +24 -0
- package/dist/components/shared/SectionSummaryRow.d.ts.map +1 -0
- package/dist/components/shell/AudienceAddForm.d.ts +4 -1
- package/dist/components/shell/AudienceAddForm.d.ts.map +1 -1
- package/dist/components/shell/AudienceDetailsPanel.d.ts +28 -0
- package/dist/components/shell/AudienceDetailsPanel.d.ts.map +1 -0
- package/dist/components/shell/AudienceRow.d.ts +15 -1
- package/dist/components/shell/AudienceRow.d.ts.map +1 -1
- package/dist/components/shell/CredentialList.d.ts +18 -0
- package/dist/components/shell/CredentialList.d.ts.map +1 -0
- package/dist/components/shell/EditorShell.d.ts.map +1 -1
- package/dist/components/shell/SiteSettingsViewerAccess.d.ts.map +1 -1
- package/dist/components/shell/ViewerLoginForm.d.ts +5 -1
- package/dist/components/shell/ViewerLoginForm.d.ts.map +1 -1
- package/dist/index.js +47 -29
- package/dist/lib/audience-overview.d.ts +53 -0
- package/dist/lib/audience-overview.d.ts.map +1 -0
- package/dist/lib/audience-secret.d.ts +11 -0
- package/dist/lib/audience-secret.d.ts.map +1 -0
- package/dist/lib/audience-secret.js +70 -0
- package/dist/lib/events.d.ts +3 -0
- package/dist/lib/events.d.ts.map +1 -1
- package/dist/lib/index-ops.js +3 -2
- package/dist/lib/index.js +13 -12
- package/dist/lib/nav.d.ts.map +1 -1
- package/dist/lib/thumb-views.d.ts +17 -0
- package/dist/lib/thumb-views.d.ts.map +1 -0
- package/dist/media/index.js +4 -3
- package/dist/schemas/audience.d.ts +29 -0
- package/dist/schemas/audience.d.ts.map +1 -1
- package/dist/schemas/audience.js +24 -0
- package/dist/schemas/auth.d.ts +1 -0
- package/dist/schemas/auth.d.ts.map +1 -1
- package/dist/schemas/auth.js +1 -1
- package/dist/schemas/index.js +28 -12
- package/dist/schemas/site-config.d.ts +1 -1
- package/dist/schemas/site-config.d.ts.map +1 -1
- package/dist/types/database.d.ts +59 -5
- package/dist/types/database.d.ts.map +1 -1
- package/package.json +9 -1
- package/src/auth/cookies.ts +37 -4
- package/src/auth/index.ts +2 -1
- package/src/auth/types.ts +32 -0
- package/src/components/chat/ChatPanel.tsx +4 -2
- package/src/components/chat/ChatWidget.tsx +4 -1
- package/src/components/docfile/DocFileOverlay.tsx +28 -2
- package/src/components/docfile/DocFilePane.tsx +4 -3
- package/src/components/editor/SectionOrderingModal.tsx +8 -73
- package/src/components/shared/Navigation.tsx +113 -7
- package/src/components/shared/SectionSummaryRow.tsx +73 -0
- package/src/components/shell/AudienceAddForm.tsx +18 -9
- package/src/components/shell/AudienceDetailsPanel.tsx +263 -0
- package/src/components/shell/AudienceRow.tsx +55 -13
- package/src/components/shell/CredentialList.tsx +285 -0
- package/src/components/shell/EditorShell.tsx +94 -4
- package/src/components/shell/SiteSettingsViewerAccess.tsx +57 -6
- package/src/components/shell/ViewerLoginForm.tsx +35 -15
- package/src/lib/audience-overview.ts +110 -0
- package/src/lib/audience-secret.ts +99 -0
- package/src/lib/events.ts +3 -0
- package/src/lib/nav.ts +6 -2
- package/src/lib/thumb-views.ts +28 -0
- package/src/schemas/audience.ts +52 -0
- package/src/schemas/auth.ts +6 -0
- package/src/schemas/site-config.ts +1 -1
- package/src/types/database.ts +59 -5
- package/dist/chunk-ZDQ3TT47.js +0 -30
|
@@ -5,7 +5,10 @@ interface Props {
|
|
|
5
5
|
password: string;
|
|
6
6
|
}) => Promise<void>;
|
|
7
7
|
onCancel: () => void;
|
|
8
|
+
/** Credential mode: an audience has no password of its own — access comes from
|
|
9
|
+
* the named sign-ins added to it afterwards, so the field is hidden. */
|
|
10
|
+
requirePassword?: boolean;
|
|
8
11
|
}
|
|
9
|
-
export declare function AudienceAddForm({ onSubmit, onCancel }: Props): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare function AudienceAddForm({ onSubmit, onCancel, requirePassword }: Props): import("react/jsx-runtime").JSX.Element;
|
|
10
13
|
export {};
|
|
11
14
|
//# sourceMappingURL=AudienceAddForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudienceAddForm.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AudienceAddForm.tsx"],"names":[],"mappings":"AAOA,UAAU,KAAK;IACb,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnG,QAAQ,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"AudienceAddForm.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AudienceAddForm.tsx"],"names":[],"mappings":"AAOA,UAAU,KAAK;IACb,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnG,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;6EACyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAID,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAsB,EAAE,EAAE,KAAK,2CAqFpF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AudienceOverview } from "../../lib/audience-overview";
|
|
2
|
+
/** One audience plus its resolved availability. Built server-side. */
|
|
3
|
+
export interface AudienceDetail {
|
|
4
|
+
name: string;
|
|
5
|
+
displayName: string;
|
|
6
|
+
color: string | null;
|
|
7
|
+
isDefault: boolean;
|
|
8
|
+
hasPassword: boolean;
|
|
9
|
+
/** Named sign-ins that grant this audience. Empty in `.env`/audience mode. */
|
|
10
|
+
credentials: Array<{
|
|
11
|
+
username: string;
|
|
12
|
+
label: string | null;
|
|
13
|
+
}>;
|
|
14
|
+
overview: AudienceOverview;
|
|
15
|
+
}
|
|
16
|
+
interface Props {
|
|
17
|
+
audiences: AudienceDetail[];
|
|
18
|
+
/** False when the auth provider cannot store a reversible password at all. */
|
|
19
|
+
revealSupported: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The Audience Details page body: who can see what, and what password to share.
|
|
23
|
+
* Reachable by editors and the site's default audience (the client), so the
|
|
24
|
+
* client can hand a new partner access without going through us.
|
|
25
|
+
*/
|
|
26
|
+
export declare function AudienceDetailsPanel({ audiences, revealSupported }: Props): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export default AudienceDetailsPanel;
|
|
28
|
+
//# sourceMappingURL=AudienceDetailsPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudienceDetailsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AudienceDetailsPanel.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,6BAA6B,CAAC;AAElF,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,8EAA8E;IAC9E,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC/D,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,UAAU,KAAK;IACb,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,8EAA8E;IAC9E,eAAe,EAAE,OAAO,CAAC;CAC1B;AAwND;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,KAAK,2CAgBzE;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Audience } from "../../auth/types";
|
|
2
|
+
import type { ViewerCredential } from "../../schemas/audience";
|
|
2
3
|
interface Props {
|
|
3
4
|
audience: Audience;
|
|
4
5
|
isDefault: boolean;
|
|
@@ -9,7 +10,20 @@ interface Props {
|
|
|
9
10
|
password?: string;
|
|
10
11
|
}) => Promise<void>;
|
|
11
12
|
onDelete: () => Promise<void>;
|
|
13
|
+
/** Named sign-ins for this audience. Undefined in `.env`/audience mode, where
|
|
14
|
+
* the row keeps its single audience-level password field. */
|
|
15
|
+
credentials?: ViewerCredential[];
|
|
16
|
+
credentialActions?: {
|
|
17
|
+
create: (data: {
|
|
18
|
+
username: string;
|
|
19
|
+
label: string | null;
|
|
20
|
+
password: string;
|
|
21
|
+
}) => Promise<void>;
|
|
22
|
+
setPassword: (username: string, password: string) => Promise<void>;
|
|
23
|
+
setLabel: (username: string, label: string | null) => Promise<void>;
|
|
24
|
+
delete: (username: string) => Promise<void>;
|
|
25
|
+
};
|
|
12
26
|
}
|
|
13
|
-
export declare function AudienceRow({ audience, isDefault, canMutate, onSave, onDelete, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare function AudienceRow({ audience, isDefault, canMutate, onSave, onDelete, credentials, credentialActions, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
14
28
|
export {};
|
|
15
29
|
//# sourceMappingURL=AudienceRow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudienceRow.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AudienceRow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMjD,UAAU,KAAK;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrG,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"AudienceRow.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AudienceRow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,UAAU,KAAK;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrG,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B;kEAC8D;IAC9D,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,iBAAiB,CAAC,EAAE;QAClB,MAAM,EAAE,CAAC,IAAI,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9F,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACnE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7C,CAAC;CACH;AAID,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,SAAS,EACT,MAAM,EACN,QAAQ,EACR,WAAW,EACX,iBAAiB,GAClB,EAAE,KAAK,2CAgLP"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ViewerCredential } from "../../schemas/audience";
|
|
2
|
+
interface Props {
|
|
3
|
+
audienceName: string;
|
|
4
|
+
credentials: ViewerCredential[];
|
|
5
|
+
canMutate: boolean;
|
|
6
|
+
onCreate: (data: {
|
|
7
|
+
username: string;
|
|
8
|
+
label: string | null;
|
|
9
|
+
password: string;
|
|
10
|
+
}) => Promise<void>;
|
|
11
|
+
onSetPassword: (username: string, password: string) => Promise<void>;
|
|
12
|
+
onSetLabel: (username: string, label: string | null) => Promise<void>;
|
|
13
|
+
onDelete: (username: string) => Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
/** The named sign-ins for one audience, inside its Site Settings row. */
|
|
16
|
+
export declare function CredentialList({ audienceName, credentials, canMutate, onCreate, onSetPassword, onSetLabel, onDelete, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=CredentialList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CredentialList.d.ts","sourceRoot":"","sources":["../../../src/components/shell/CredentialList.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,UAAU,KAAK;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAuOD,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,EAC7B,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,GACpF,EAAE,KAAK,2CA6BP"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorShell.d.ts","sourceRoot":"","sources":["../../../src/components/shell/EditorShell.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAejD,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAyDtF,OAAO,KAAK,EAAE,eAAe,EAA2D,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"EditorShell.d.ts","sourceRoot":"","sources":["../../../src/components/shell/EditorShell.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAejD,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAyDtF,OAAO,KAAK,EAAE,eAAe,EAA2D,MAAM,oBAAoB,CAAC;AA+CnH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA2BxD,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAC;IAIhB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,YAAY,EAAE;QACZ,KAAK,EAAE,OAAO,CAAC;QACf,aAAa,EAAE,OAAO,CAAC;QACvB,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,EAAE,OAAO,CAAC;QACxB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;KAAE,GAAG,IAAI,CAAC;IAIhE,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAKjC,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,OAAO,EACP,YAAY,EACZ,MAAM,EACN,SAAS,EAAE,gBAAgB,EAC3B,YAAY,EACZ,WAAW,EACX,sBAA8B,EAC9B,eAAe,GAChB,EAAE,KAAK,2CAs8DP;AAwED;6EAC6E;AAC7E,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,EACvC,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,eAAe,EAAE,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SiteSettingsViewerAccess.d.ts","sourceRoot":"","sources":["../../../src/components/shell/SiteSettingsViewerAccess.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"SiteSettingsViewerAccess.d.ts","sourceRoot":"","sources":["../../../src/components/shell/SiteSettingsViewerAccess.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQjD,UAAU,KAAK;IACb,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;CACpD;AAQD,wBAAgB,wBAAwB,CAAC,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,EAAE,KAAK,2CAwMxG"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
interface Props {
|
|
2
|
+
/** Audience mode only. Empty (and unused) in credential mode — the page must
|
|
3
|
+
* not ship an audience list to a login form that doesn't offer the choice. */
|
|
2
4
|
audiences: Array<{
|
|
3
5
|
name: string;
|
|
4
6
|
displayName: string;
|
|
5
7
|
hasPassword?: boolean;
|
|
6
8
|
}>;
|
|
9
|
+
/** Set by the page from the auth provider's capability, never by the client. */
|
|
10
|
+
mode?: "audience" | "credentials";
|
|
7
11
|
next?: string | null;
|
|
8
12
|
}
|
|
9
|
-
export declare function ViewerLoginForm({ audiences, next }: Props): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function ViewerLoginForm({ audiences, mode, next }: Props): import("react/jsx-runtime").JSX.Element;
|
|
10
14
|
export {};
|
|
11
15
|
//# sourceMappingURL=ViewerLoginForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewerLoginForm.d.ts","sourceRoot":"","sources":["../../../src/components/shell/ViewerLoginForm.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ViewerLoginForm.d.ts","sourceRoot":"","sources":["../../../src/components/shell/ViewerLoginForm.tsx"],"names":[],"mappings":"AAOA,UAAU,KAAK;IACb;mFAC+E;IAC/E,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC/E,gFAAgF;IAChF,IAAI,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,IAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,2CAsG5E"}
|
package/dist/index.js
CHANGED
|
@@ -9,9 +9,10 @@ import {
|
|
|
9
9
|
setSessionCookie,
|
|
10
10
|
signAudienceToken,
|
|
11
11
|
signSessionToken,
|
|
12
|
+
verifyAudienceClaims,
|
|
12
13
|
verifyAudienceToken,
|
|
13
14
|
verifySessionToken
|
|
14
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-GEENI3OC.js";
|
|
15
16
|
import {
|
|
16
17
|
ASSET_CACHE_CONTROL,
|
|
17
18
|
DOCUMENT_CACHE_CONTROL,
|
|
@@ -54,19 +55,27 @@ import {
|
|
|
54
55
|
resolveMedia,
|
|
55
56
|
sanitizeMediaName,
|
|
56
57
|
setMediaProvider
|
|
57
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-XBYJQ5RS.js";
|
|
58
59
|
import {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
MediaGridOptionsSchema,
|
|
62
|
-
slugifyAudienceName
|
|
63
|
-
} from "./chunk-ZDQ3TT47.js";
|
|
60
|
+
MediaGridOptionsSchema
|
|
61
|
+
} from "./chunk-B7VBSE5X.js";
|
|
64
62
|
import {
|
|
65
63
|
AudienceSchema,
|
|
66
64
|
RoleSchema,
|
|
67
65
|
SessionSchema,
|
|
68
66
|
SiteUserSchema
|
|
69
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-6P4CJCXB.js";
|
|
68
|
+
import {
|
|
69
|
+
AudienceColorSchema,
|
|
70
|
+
AudienceNameSchema,
|
|
71
|
+
NormalizedUsernameSchema,
|
|
72
|
+
VIEWER_PASSWORD_MIN_LENGTH,
|
|
73
|
+
ViewerCredentialSchema,
|
|
74
|
+
ViewerPasswordSchema,
|
|
75
|
+
ViewerUsernameSchema,
|
|
76
|
+
normalizeUsername,
|
|
77
|
+
slugifyAudienceName
|
|
78
|
+
} from "./chunk-NLQ5F3RQ.js";
|
|
70
79
|
import {
|
|
71
80
|
DEFAULT_LINK,
|
|
72
81
|
LinkTargetSchema,
|
|
@@ -105,18 +114,8 @@ import {
|
|
|
105
114
|
safeRedirect,
|
|
106
115
|
suggestAccessibleOn,
|
|
107
116
|
wcagLevel
|
|
108
|
-
} from "./chunk-
|
|
109
|
-
import
|
|
110
|
-
isSameOriginRequest,
|
|
111
|
-
requireSessionSecret,
|
|
112
|
-
safeNextPath
|
|
113
|
-
} from "./chunk-S2L3BPLS.js";
|
|
114
|
-
import {
|
|
115
|
-
ensureSanitizer,
|
|
116
|
-
generateNavLinks,
|
|
117
|
-
sanitizeHtml,
|
|
118
|
-
toSectionId
|
|
119
|
-
} from "./chunk-72CG6AA2.js";
|
|
117
|
+
} from "./chunk-AB3XVXI3.js";
|
|
118
|
+
import "./chunk-5BM2Y3NJ.js";
|
|
120
119
|
import {
|
|
121
120
|
curatedIcons,
|
|
122
121
|
getIcon
|
|
@@ -126,10 +125,21 @@ import {
|
|
|
126
125
|
darkModeEvent,
|
|
127
126
|
editModeEvent,
|
|
128
127
|
navChangeEvent
|
|
129
|
-
} from "./chunk-
|
|
128
|
+
} from "./chunk-4RNF2DRG.js";
|
|
129
|
+
import {
|
|
130
|
+
ensureSanitizer,
|
|
131
|
+
generateNavLinks,
|
|
132
|
+
sanitizeHtml,
|
|
133
|
+
toSectionId
|
|
134
|
+
} from "./chunk-72CG6AA2.js";
|
|
130
135
|
import {
|
|
131
136
|
cn
|
|
132
137
|
} from "./chunk-7EOSDFS3.js";
|
|
138
|
+
import {
|
|
139
|
+
isSameOriginRequest,
|
|
140
|
+
requireSessionSecret,
|
|
141
|
+
safeNextPath
|
|
142
|
+
} from "./chunk-S2L3BPLS.js";
|
|
133
143
|
import {
|
|
134
144
|
env
|
|
135
145
|
} from "./chunk-WKZ7OENC.js";
|
|
@@ -140,8 +150,7 @@ import {
|
|
|
140
150
|
navEntries,
|
|
141
151
|
pagesInNavOrder,
|
|
142
152
|
reconcileNav
|
|
143
|
-
} from "./chunk-
|
|
144
|
-
import "./chunk-5BM2Y3NJ.js";
|
|
153
|
+
} from "./chunk-CPTFFLK2.js";
|
|
145
154
|
import {
|
|
146
155
|
NavEntrySchema,
|
|
147
156
|
NavFileSchema
|
|
@@ -164,27 +173,29 @@ import {
|
|
|
164
173
|
import {
|
|
165
174
|
ChatbotConfigSchema,
|
|
166
175
|
ChatbotTaskSchema,
|
|
167
|
-
FontNameSchema,
|
|
168
|
-
HexColorSchema,
|
|
169
176
|
ImageManifestSchema,
|
|
170
177
|
IndexSchema,
|
|
171
178
|
MediaConfigSchema,
|
|
172
179
|
MediaFolderSchema,
|
|
173
180
|
MediaItemSchema,
|
|
174
|
-
MediaReferenceSchema,
|
|
175
181
|
PageSchema,
|
|
176
182
|
PageStatusSchema,
|
|
177
183
|
RESERVED_SLUGS,
|
|
178
184
|
SLUG_RE,
|
|
179
185
|
SectionMetaSchema,
|
|
180
|
-
SingleMediaReferenceSchema,
|
|
181
186
|
SiteConfigSchema,
|
|
182
187
|
StatusSchema,
|
|
183
|
-
TextLineSchema,
|
|
184
188
|
VariantSchema,
|
|
185
189
|
normalizeSiteIndex
|
|
186
|
-
} from "./chunk-
|
|
190
|
+
} from "./chunk-BOZUEKWL.js";
|
|
187
191
|
import "./chunk-FM4M4Q2W.js";
|
|
192
|
+
import {
|
|
193
|
+
FontNameSchema,
|
|
194
|
+
HexColorSchema,
|
|
195
|
+
MediaReferenceSchema,
|
|
196
|
+
SingleMediaReferenceSchema,
|
|
197
|
+
TextLineSchema
|
|
198
|
+
} from "./chunk-GGXZZ77Z.js";
|
|
188
199
|
import "./chunk-NSCT3AMV.js";
|
|
189
200
|
import "./chunk-JSBRDJBE.js";
|
|
190
201
|
export {
|
|
@@ -230,6 +241,7 @@ export {
|
|
|
230
241
|
MediaReferenceSchema,
|
|
231
242
|
NavEntrySchema,
|
|
232
243
|
NavFileSchema,
|
|
244
|
+
NormalizedUsernameSchema,
|
|
233
245
|
PageSchema,
|
|
234
246
|
PageStatusSchema,
|
|
235
247
|
ProcessingQueue,
|
|
@@ -250,7 +262,11 @@ export {
|
|
|
250
262
|
StorageConflictError,
|
|
251
263
|
TakeoverMessageSchema,
|
|
252
264
|
TextLineSchema,
|
|
265
|
+
VIEWER_PASSWORD_MIN_LENGTH,
|
|
253
266
|
VariantSchema,
|
|
267
|
+
ViewerCredentialSchema,
|
|
268
|
+
ViewerPasswordSchema,
|
|
269
|
+
ViewerUsernameSchema,
|
|
254
270
|
accentVarValue,
|
|
255
271
|
audiencePasses,
|
|
256
272
|
buildGoogleFontsUrl,
|
|
@@ -301,6 +317,7 @@ export {
|
|
|
301
317
|
navChangeEvent,
|
|
302
318
|
navEntries,
|
|
303
319
|
normalizeSiteIndex,
|
|
320
|
+
normalizeUsername,
|
|
304
321
|
onPrimaryVarValue,
|
|
305
322
|
pagesInNavOrder,
|
|
306
323
|
primaryVarValue,
|
|
@@ -327,6 +344,7 @@ export {
|
|
|
327
344
|
slugifyAudienceName,
|
|
328
345
|
suggestAccessibleOn,
|
|
329
346
|
toSectionId,
|
|
347
|
+
verifyAudienceClaims,
|
|
330
348
|
verifyAudienceToken,
|
|
331
349
|
verifySessionToken,
|
|
332
350
|
wcagLevel,
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What each audience can actually see. Powers the Audience Details page, which
|
|
3
|
+
* answers "if I give a partner this password, what do they get?".
|
|
4
|
+
*
|
|
5
|
+
* Pure and view-agnostic: section labels/thumbnails are resolved by the caller
|
|
6
|
+
* (they need the section registry and the media provider) and passed in, so this
|
|
7
|
+
* stays trivially testable and ships no registry into viewer JS.
|
|
8
|
+
*/
|
|
9
|
+
import type { SiteIndex } from "../schemas/site-config";
|
|
10
|
+
import type { ThumbView } from "./thumb-views";
|
|
11
|
+
/** Caller-resolved presentation for one section. */
|
|
12
|
+
export interface SectionDisplay {
|
|
13
|
+
label: string;
|
|
14
|
+
typeLabel: string;
|
|
15
|
+
thumbnails: ThumbView[];
|
|
16
|
+
}
|
|
17
|
+
export interface OverviewSection extends SectionDisplay {
|
|
18
|
+
id: string;
|
|
19
|
+
available: boolean;
|
|
20
|
+
/** Live-but-draft sections are invisible to EVERY audience, not just this one. */
|
|
21
|
+
draft: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface OverviewPage {
|
|
24
|
+
id: string;
|
|
25
|
+
title: string;
|
|
26
|
+
slug: string;
|
|
27
|
+
href: string;
|
|
28
|
+
/** Live but off the sidebar — reachable by URL, so it counts as available. */
|
|
29
|
+
hiddenFromNav: boolean;
|
|
30
|
+
/** none = the page itself is gated away; partial = page in, some sections out. */
|
|
31
|
+
availability: "full" | "partial" | "none";
|
|
32
|
+
sections: OverviewSection[];
|
|
33
|
+
}
|
|
34
|
+
export interface AudienceOverview {
|
|
35
|
+
audience: string;
|
|
36
|
+
pages: OverviewPage[];
|
|
37
|
+
pagesAvailable: number;
|
|
38
|
+
pagesTotal: number;
|
|
39
|
+
sectionsAvailable: number;
|
|
40
|
+
sectionsTotal: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Availability for one audience across the whole site.
|
|
44
|
+
*
|
|
45
|
+
* Archived pages are excluded outright (nobody can reach them). Draft sections
|
|
46
|
+
* are listed as unavailable but flagged, so a page reading "3 of 8" is not
|
|
47
|
+
* mistaken for an access problem.
|
|
48
|
+
*
|
|
49
|
+
* The cascade matters: a section whose own access allows this audience is still
|
|
50
|
+
* unavailable inside a page that gates them out. Page access wins.
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildAudienceOverview(index: SiteIndex, display: (sectionId: string) => SectionDisplay, audience: string): AudienceOverview;
|
|
53
|
+
//# sourceMappingURL=audience-overview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audience-overview.d.ts","sourceRoot":"","sources":["../../src/lib/audience-overview.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,kFAAkF;IAClF,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,aAAa,EAAE,OAAO,CAAC;IACvB,kFAAkF;IAClF,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IAC1C,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,cAAc,EAC9C,QAAQ,EAAE,MAAM,GACf,gBAAgB,CAgDlB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Seal a plaintext password into `v1.<iv>.<ciphertext>` (base64url parts). */
|
|
2
|
+
export declare function sealAudiencePassword(password: string): Promise<string>;
|
|
3
|
+
/**
|
|
4
|
+
* Open a sealed password, or null when it cannot be trusted — unknown version,
|
|
5
|
+
* malformed parts, tampered ciphertext (GCM auth failure), or a rotated
|
|
6
|
+
* SESSION_SECRET. Callers treat null as "not revealable" and never as an error;
|
|
7
|
+
* they must ALSO verify the result against the bcrypt hash, since a valid seal
|
|
8
|
+
* can still be stale (a password changed by a writer that skipped the cipher).
|
|
9
|
+
*/
|
|
10
|
+
export declare function openAudiencePassword(sealed: string | null | undefined): Promise<string | null>;
|
|
11
|
+
//# sourceMappingURL=audience-secret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audience-secret.d.ts","sourceRoot":"","sources":["../../src/lib/audience-secret.ts"],"names":[],"mappings":"AAgEA,+EAA+E;AAC/E,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ5E;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBpG"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import {
|
|
2
|
+
requireSessionSecret
|
|
3
|
+
} from "../chunk-S2L3BPLS.js";
|
|
4
|
+
import "../chunk-WKZ7OENC.js";
|
|
5
|
+
import "../chunk-JSBRDJBE.js";
|
|
6
|
+
|
|
7
|
+
// src/lib/audience-secret.ts
|
|
8
|
+
var INFO = "drawnagency:audience-password:v1";
|
|
9
|
+
var VERSION = "v1";
|
|
10
|
+
var IV_BYTES = 12;
|
|
11
|
+
var enc = new TextEncoder();
|
|
12
|
+
var dec = new TextDecoder();
|
|
13
|
+
function toBase64Url(bytes) {
|
|
14
|
+
let binary = "";
|
|
15
|
+
for (const b of bytes) binary += String.fromCharCode(b);
|
|
16
|
+
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
17
|
+
}
|
|
18
|
+
function fromBase64Url(value) {
|
|
19
|
+
const padded = value.replace(/-/g, "+").replace(/_/g, "/");
|
|
20
|
+
const binary = atob(padded + "=".repeat((4 - padded.length % 4) % 4));
|
|
21
|
+
const bytes = new Uint8Array(binary.length);
|
|
22
|
+
for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
|
|
23
|
+
return bytes;
|
|
24
|
+
}
|
|
25
|
+
async function deriveKey() {
|
|
26
|
+
const base = await crypto.subtle.importKey(
|
|
27
|
+
"raw",
|
|
28
|
+
requireSessionSecret(),
|
|
29
|
+
"HKDF",
|
|
30
|
+
false,
|
|
31
|
+
["deriveKey"]
|
|
32
|
+
);
|
|
33
|
+
return crypto.subtle.deriveKey(
|
|
34
|
+
{ name: "HKDF", hash: "SHA-256", salt: new Uint8Array(0), info: enc.encode(INFO) },
|
|
35
|
+
base,
|
|
36
|
+
{ name: "AES-GCM", length: 256 },
|
|
37
|
+
false,
|
|
38
|
+
["encrypt", "decrypt"]
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
async function sealAudiencePassword(password) {
|
|
42
|
+
const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));
|
|
43
|
+
const ciphertext = await crypto.subtle.encrypt(
|
|
44
|
+
{ name: "AES-GCM", iv },
|
|
45
|
+
await deriveKey(),
|
|
46
|
+
enc.encode(password)
|
|
47
|
+
);
|
|
48
|
+
return `${VERSION}.${toBase64Url(iv)}.${toBase64Url(new Uint8Array(ciphertext))}`;
|
|
49
|
+
}
|
|
50
|
+
async function openAudiencePassword(sealed) {
|
|
51
|
+
if (!sealed) return null;
|
|
52
|
+
const parts = sealed.split(".");
|
|
53
|
+
if (parts.length !== 3 || parts[0] !== VERSION) return null;
|
|
54
|
+
try {
|
|
55
|
+
const iv = fromBase64Url(parts[1]);
|
|
56
|
+
if (iv.byteLength !== IV_BYTES) return null;
|
|
57
|
+
const plain = await crypto.subtle.decrypt(
|
|
58
|
+
{ name: "AES-GCM", iv },
|
|
59
|
+
await deriveKey(),
|
|
60
|
+
fromBase64Url(parts[2])
|
|
61
|
+
);
|
|
62
|
+
return dec.decode(plain);
|
|
63
|
+
} catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export {
|
|
68
|
+
openAudiencePassword,
|
|
69
|
+
sealAudiencePassword
|
|
70
|
+
};
|
package/dist/lib/events.d.ts
CHANGED
|
@@ -34,4 +34,7 @@ export declare const editorDirtyEvent: TypedEvent<{
|
|
|
34
34
|
}>;
|
|
35
35
|
export declare const siteNavChangeEvent: TypedEvent<SiteNav>;
|
|
36
36
|
export declare const pageSelectEvent: TypedEvent<string>;
|
|
37
|
+
/** Nav → EditorShell: open the Audience Details surface inside the editor, so
|
|
38
|
+
* editors keep the toolbar instead of navigating out to the /audiences route. */
|
|
39
|
+
export declare const audienceDetailsEvent: TypedEvent<void>;
|
|
37
40
|
//# sourceMappingURL=events.d.ts.map
|
package/dist/lib/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/lib/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE9C,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACnD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAW1D;AAED,eAAO,MAAM,aAAa;gBAA6B,OAAO;EAAqB,CAAC;AACpF,eAAO,MAAM,cAAc,uBAA0C,CAAC;AACtE,eAAO,MAAM,aAAa,oBAAsC,CAAC;AACjE,eAAO,MAAM,mBAAmB,oBAAwC,CAAC;AACzE,eAAO,MAAM,kBAAkB;SAAsB,MAAM;UAAQ,MAAM;EAAqB,CAAC;AAC/F;;2EAE2E;AAC3E,eAAO,MAAM,mBAAmB;SAAsB,MAAM;UAAQ,MAAM;EAAsB,CAAC;AACjG;;4BAE4B;AAC5B,eAAO,MAAM,yBAAyB;aAA0B,MAAM;EAA6B,CAAC;AACpG;8EAC8E;AAC9E,eAAO,MAAM,gBAAgB;uBAAoC,OAAO;EAAmB,CAAC;AAC5F,eAAO,MAAM,kBAAkB,qBAA2C,CAAC;AAC3E,eAAO,MAAM,eAAe,oBAAoC,CAAC"}
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/lib/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE9C,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACnD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAW1D;AAED,eAAO,MAAM,aAAa;gBAA6B,OAAO;EAAqB,CAAC;AACpF,eAAO,MAAM,cAAc,uBAA0C,CAAC;AACtE,eAAO,MAAM,aAAa,oBAAsC,CAAC;AACjE,eAAO,MAAM,mBAAmB,oBAAwC,CAAC;AACzE,eAAO,MAAM,kBAAkB;SAAsB,MAAM;UAAQ,MAAM;EAAqB,CAAC;AAC/F;;2EAE2E;AAC3E,eAAO,MAAM,mBAAmB;SAAsB,MAAM;UAAQ,MAAM;EAAsB,CAAC;AACjG;;4BAE4B;AAC5B,eAAO,MAAM,yBAAyB;aAA0B,MAAM;EAA6B,CAAC;AACpG;8EAC8E;AAC9E,eAAO,MAAM,gBAAgB;uBAAoC,OAAO;EAAmB,CAAC;AAC5F,eAAO,MAAM,kBAAkB,qBAA2C,CAAC;AAC3E,eAAO,MAAM,eAAe,oBAAoC,CAAC;AACjE;kFACkF;AAClF,eAAO,MAAM,oBAAoB,kBAA2C,CAAC"}
|
package/dist/lib/index-ops.js
CHANGED
|
@@ -11,14 +11,15 @@ import {
|
|
|
11
11
|
setGroupStartCollapsed,
|
|
12
12
|
slugifyPageSlug,
|
|
13
13
|
uniquePageSlug
|
|
14
|
-
} from "../chunk-
|
|
14
|
+
} from "../chunk-CPTFFLK2.js";
|
|
15
15
|
import {
|
|
16
16
|
IndexSchema,
|
|
17
17
|
PageStatusSchema,
|
|
18
18
|
RESERVED_SLUGS,
|
|
19
19
|
SLUG_RE
|
|
20
|
-
} from "../chunk-
|
|
20
|
+
} from "../chunk-BOZUEKWL.js";
|
|
21
21
|
import "../chunk-FM4M4Q2W.js";
|
|
22
|
+
import "../chunk-GGXZZ77Z.js";
|
|
22
23
|
import "../chunk-JSBRDJBE.js";
|
|
23
24
|
|
|
24
25
|
// src/lib/index-ops.ts
|
package/dist/lib/index.js
CHANGED
|
@@ -18,14 +18,8 @@ import {
|
|
|
18
18
|
safeRedirect,
|
|
19
19
|
suggestAccessibleOn,
|
|
20
20
|
wcagLevel
|
|
21
|
-
} from "../chunk-
|
|
22
|
-
import "../chunk-
|
|
23
|
-
import {
|
|
24
|
-
ensureSanitizer,
|
|
25
|
-
generateNavLinks,
|
|
26
|
-
sanitizeHtml,
|
|
27
|
-
toSectionId
|
|
28
|
-
} from "../chunk-72CG6AA2.js";
|
|
21
|
+
} from "../chunk-AB3XVXI3.js";
|
|
22
|
+
import "../chunk-5BM2Y3NJ.js";
|
|
29
23
|
import {
|
|
30
24
|
curatedIcons,
|
|
31
25
|
getIcon
|
|
@@ -35,10 +29,17 @@ import {
|
|
|
35
29
|
darkModeEvent,
|
|
36
30
|
editModeEvent,
|
|
37
31
|
navChangeEvent
|
|
38
|
-
} from "../chunk-
|
|
32
|
+
} from "../chunk-4RNF2DRG.js";
|
|
33
|
+
import {
|
|
34
|
+
ensureSanitizer,
|
|
35
|
+
generateNavLinks,
|
|
36
|
+
sanitizeHtml,
|
|
37
|
+
toSectionId
|
|
38
|
+
} from "../chunk-72CG6AA2.js";
|
|
39
39
|
import {
|
|
40
40
|
cn
|
|
41
41
|
} from "../chunk-7EOSDFS3.js";
|
|
42
|
+
import "../chunk-S2L3BPLS.js";
|
|
42
43
|
import {
|
|
43
44
|
env
|
|
44
45
|
} from "../chunk-WKZ7OENC.js";
|
|
@@ -49,8 +50,7 @@ import {
|
|
|
49
50
|
navEntries,
|
|
50
51
|
pagesInNavOrder,
|
|
51
52
|
reconcileNav
|
|
52
|
-
} from "../chunk-
|
|
53
|
-
import "../chunk-5BM2Y3NJ.js";
|
|
53
|
+
} from "../chunk-CPTFFLK2.js";
|
|
54
54
|
import "../chunk-REDDTTGJ.js";
|
|
55
55
|
import "../chunk-TZQPOR5A.js";
|
|
56
56
|
import {
|
|
@@ -64,8 +64,9 @@ import {
|
|
|
64
64
|
registerSchema,
|
|
65
65
|
registerSection
|
|
66
66
|
} from "../chunk-VKAGMEKE.js";
|
|
67
|
-
import "../chunk-
|
|
67
|
+
import "../chunk-BOZUEKWL.js";
|
|
68
68
|
import "../chunk-FM4M4Q2W.js";
|
|
69
|
+
import "../chunk-GGXZZ77Z.js";
|
|
69
70
|
import "../chunk-NSCT3AMV.js";
|
|
70
71
|
import "../chunk-JSBRDJBE.js";
|
|
71
72
|
export {
|
package/dist/lib/nav.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../src/lib/nav.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAchD;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,CAAC,EAAE,eAAe,GACzB,OAAO,EAAE,CAqDX;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED;;qBAEqB;AACrB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;iFACiF;AACjF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,EAAE,CAAC;CACpB;AAED;2CAC2C;AAC3C,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAAC,GAAG,YAAY,GAAG,eAAe,CAAC;AAE7F,MAAM,WAAW,OAAO;IACtB,+DAA+D;IAC/D,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,iFAAiF;IACjF,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAMD,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;;;2BAKuB;IACvB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../../src/lib/nav.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAchD;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,CAAC,EAAE,eAAe,GACzB,OAAO,EAAE,CAqDX;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED;;qBAEqB;AACrB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;iFACiF;AACjF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,EAAE,CAAC;CACpB;AAED;2CAC2C;AAC3C,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAAC,GAAG,YAAY,GAAG,eAAe,CAAC;AAE7F,MAAM,WAAW,OAAO;IACtB,+DAA+D;IAC/D,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,iFAAiF;IACjF,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAMD,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;;;2BAKuB;IACvB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B,GAAG,OAAO,CAkEV"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Thumbnail } from "./registry";
|
|
2
|
+
import type { MediaManifest } from "../media/types";
|
|
3
|
+
/**
|
|
4
|
+
* A section thumbnail with its media reference already resolved to a URL, so the
|
|
5
|
+
* component rendering it needs neither the registry nor the media provider. The
|
|
6
|
+
* Audience Details page resolves these server-side for exactly that reason.
|
|
7
|
+
*/
|
|
8
|
+
export type ThumbView = {
|
|
9
|
+
kind: "color";
|
|
10
|
+
value: string;
|
|
11
|
+
} | {
|
|
12
|
+
kind: "image";
|
|
13
|
+
src: string | null;
|
|
14
|
+
alt: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function toThumbViews(thumbnails: Thumbnail[], manifest: MediaManifest): ThumbView[];
|
|
17
|
+
//# sourceMappingURL=thumb-views.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thumb-views.d.ts","sourceRoot":"","sources":["../../src/lib/thumb-views.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAUvD,wBAAgB,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,aAAa,GAAG,SAAS,EAAE,CAM1F"}
|
package/dist/media/index.js
CHANGED
|
@@ -18,16 +18,17 @@ import {
|
|
|
18
18
|
resolveMedia,
|
|
19
19
|
sanitizeMediaName,
|
|
20
20
|
setMediaProvider
|
|
21
|
-
} from "../chunk-
|
|
22
|
-
import "../chunk-
|
|
21
|
+
} from "../chunk-XBYJQ5RS.js";
|
|
22
|
+
import "../chunk-CPTFFLK2.js";
|
|
23
23
|
import {
|
|
24
24
|
ImageManifestSchema,
|
|
25
25
|
MediaConfigSchema,
|
|
26
26
|
MediaFolderSchema,
|
|
27
27
|
MediaItemSchema,
|
|
28
28
|
VariantSchema
|
|
29
|
-
} from "../chunk-
|
|
29
|
+
} from "../chunk-BOZUEKWL.js";
|
|
30
30
|
import "../chunk-FM4M4Q2W.js";
|
|
31
|
+
import "../chunk-GGXZZ77Z.js";
|
|
31
32
|
import "../chunk-JSBRDJBE.js";
|
|
32
33
|
export {
|
|
33
34
|
BAKED_MEDIA_KEYS,
|
|
@@ -3,6 +3,35 @@ export declare const AudienceNameSchema: z.ZodString;
|
|
|
3
3
|
export declare const AudienceColorSchema: z.ZodNullable<z.ZodString>;
|
|
4
4
|
export type AudienceName = z.infer<typeof AudienceNameSchema>;
|
|
5
5
|
export type AudienceColor = z.infer<typeof AudienceColorSchema>;
|
|
6
|
+
/**
|
|
7
|
+
* A viewer sign-in name. Looser than an audience slug — dots are allowed, so
|
|
8
|
+
* `agency.jane` works — but still constrained enough to be typed correctly over
|
|
9
|
+
* the phone. Always lowercased before storage and lookup, so `Agency2` and
|
|
10
|
+
* `agency2` are the same login.
|
|
11
|
+
*/
|
|
12
|
+
export declare const ViewerUsernameSchema: z.ZodString;
|
|
13
|
+
/** Normalize a typed username for storage and lookup. */
|
|
14
|
+
export declare function normalizeUsername(input: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Wire-facing username: lowercased and trimmed BEFORE validation, so `Agency4`
|
|
17
|
+
* is accepted and stored as `agency4` rather than 400-ing on a case difference.
|
|
18
|
+
* Everything else the base schema rejects still fails.
|
|
19
|
+
*/
|
|
20
|
+
export declare const NormalizedUsernameSchema: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
|
|
21
|
+
/** Minimum for a NEW credential password. Deliberately stricter than the
|
|
22
|
+
* audience passwords it replaces (which allowed a single character). */
|
|
23
|
+
export declare const VIEWER_PASSWORD_MIN_LENGTH = 8;
|
|
24
|
+
export declare const ViewerPasswordSchema: z.ZodString;
|
|
25
|
+
/** A credential as it travels to the editor and the Audience Details page.
|
|
26
|
+
* Never carries the hash or the sealed copy. */
|
|
27
|
+
export declare const ViewerCredentialSchema: z.ZodObject<{
|
|
28
|
+
username: z.ZodString;
|
|
29
|
+
label: z.ZodNullable<z.ZodString>;
|
|
30
|
+
audienceName: z.ZodString;
|
|
31
|
+
createdAt: z.ZodString;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
export type ViewerUsername = z.infer<typeof ViewerUsernameSchema>;
|
|
34
|
+
export type ViewerCredential = z.infer<typeof ViewerCredentialSchema>;
|
|
6
35
|
/**
|
|
7
36
|
* Convert a friendly display string into an audience slug.
|
|
8
37
|
* Lowercases, replaces non-alphanumeric runs with single dashes,
|