@kelpie/ui 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/index.d.ts +4 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/pages/account/SecurityPage.js +2 -2
  6. package/dist/pages/account/SecurityPage.js.map +1 -1
  7. package/dist/pages/auth/AuthForm.d.ts +18 -0
  8. package/dist/pages/auth/AuthForm.d.ts.map +1 -1
  9. package/dist/pages/auth/AuthForm.js +17 -0
  10. package/dist/pages/auth/AuthForm.js.map +1 -1
  11. package/dist/pages/auth/AuthMethods.d.ts +12 -0
  12. package/dist/pages/auth/AuthMethods.d.ts.map +1 -0
  13. package/dist/pages/auth/AuthMethods.js +20 -0
  14. package/dist/pages/auth/AuthMethods.js.map +1 -0
  15. package/dist/pages/auth/SignInPage.d.ts +7 -0
  16. package/dist/pages/auth/SignInPage.d.ts.map +1 -1
  17. package/dist/pages/auth/SignInPage.js +3 -8
  18. package/dist/pages/auth/SignInPage.js.map +1 -1
  19. package/dist/pages/auth/SignUpPage.d.ts.map +1 -1
  20. package/dist/pages/auth/SignUpPage.js +2 -1
  21. package/dist/pages/auth/SignUpPage.js.map +1 -1
  22. package/dist/pages/auth/nextPath.d.ts +15 -0
  23. package/dist/pages/auth/nextPath.d.ts.map +1 -0
  24. package/dist/pages/auth/nextPath.js +17 -0
  25. package/dist/pages/auth/nextPath.js.map +1 -0
  26. package/dist/registry/context.d.ts +3 -1
  27. package/dist/registry/context.d.ts.map +1 -1
  28. package/dist/registry/context.js +4 -0
  29. package/dist/registry/context.js.map +1 -1
  30. package/dist/registry/contributions.d.ts +24 -0
  31. package/dist/registry/contributions.d.ts.map +1 -1
  32. package/dist/registry/contributions.js.map +1 -1
  33. package/dist/registry/registry.d.ts +4 -1
  34. package/dist/registry/registry.d.ts.map +1 -1
  35. package/dist/registry/registry.js +6 -0
  36. package/dist/registry/registry.js.map +1 -1
  37. package/package.json +2 -2
  38. package/src/index.ts +7 -0
  39. package/src/pages/account/SecurityPage.tsx +6 -1
  40. package/src/pages/auth/AuthForm.tsx +38 -0
  41. package/src/pages/auth/AuthMethods.tsx +29 -0
  42. package/src/pages/auth/SignInPage.tsx +3 -8
  43. package/src/pages/auth/SignUpPage.tsx +7 -0
  44. package/src/pages/auth/nextPath.ts +17 -0
  45. package/src/registry/context.ts +6 -0
  46. package/src/registry/contributions.ts +26 -0
  47. package/src/registry/registry.ts +12 -0
package/dist/index.d.ts CHANGED
@@ -70,6 +70,8 @@ export { DecisionsPage } from './pages/DecisionsPage.tsx';
70
70
  export { PeoplePage } from './pages/PeoplePage.tsx';
71
71
  export { PersonDetail } from './pages/PersonDetail.tsx';
72
72
  export { PlanningPage } from './pages/PlanningPage.tsx';
73
+ export { AuthDivider, AuthLinkButton } from './pages/auth/AuthForm.tsx';
74
+ export { safeNext } from './pages/auth/nextPath.ts';
73
75
  export { ForgotPasswordPage } from './pages/auth/ForgotPasswordPage.tsx';
74
76
  export { JoinPage } from './pages/auth/JoinPage.tsx';
75
77
  export { ResetPasswordPage } from './pages/auth/ResetPasswordPage.tsx';
@@ -85,12 +87,12 @@ export type { ListViewController } from './lib/listView.ts';
85
87
  export { applyTheme, getStoredTheme, resolveTheme, setStoredTheme, watchSystemTheme } from './lib/theme.ts';
86
88
  export type { ThemePreference } from './lib/theme.ts';
87
89
  export { EXTENSIBLE_RECORD_TYPES, NAV_SLOTS } from './registry/contributions.ts';
88
- export type { DashboardCard, ExtensibleRecordType, NavItem, NavSlot, RecordContext, RecordSidebarCard, RecordTab, RouteContribution, } from './registry/contributions.ts';
90
+ export type { AuthMethod, AuthMethodContext, DashboardCard, ExtensibleRecordType, NavItem, NavSlot, RecordContext, RecordSidebarCard, RecordTab, RouteContribution, } from './registry/contributions.ts';
89
91
  export { defineOverridable } from './registry/overridable.ts';
90
92
  export type { Overridable } from './registry/overridable.ts';
91
93
  export { NO_UI_MODULES, UiModuleError, inSlotOrder, registerUiModules } from './registry/registry.ts';
92
94
  export type { UiExtensions, UiModule, UiModuleContext } from './registry/registry.ts';
93
- export { useDashboardCards, useModuleRoutes, useNavItems, useOverridable, useRecordSidebarCards, useRecordTabs, useUiExtensions, } from './registry/context.ts';
95
+ export { useAuthMethods, useDashboardCards, useModuleRoutes, useNavItems, useOverridable, useRecordSidebarCards, useRecordTabs, useUiExtensions, } from './registry/context.ts';
94
96
  export { UiExtensionProvider } from './registry/UiExtensionProvider.tsx';
95
97
  export type { UiExtensionProviderProps } from './registry/UiExtensionProvider.tsx';
96
98
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -39,6 +39,10 @@ export { DecisionsPage } from './pages/DecisionsPage.js';
39
39
  export { PeoplePage } from './pages/PeoplePage.js';
40
40
  export { PersonDetail } from './pages/PersonDetail.js';
41
41
  export { PlanningPage } from './pages/PlanningPage.js';
42
+ // The controls a module contributing a sign-in method builds its button from,
43
+ // so it matches the form beside it without copying class names.
44
+ export { AuthDivider, AuthLinkButton } from './pages/auth/AuthForm.js';
45
+ export { safeNext } from './pages/auth/nextPath.js';
42
46
  export { ForgotPasswordPage } from './pages/auth/ForgotPasswordPage.js';
43
47
  export { JoinPage } from './pages/auth/JoinPage.js';
44
48
  export { ResetPasswordPage } from './pages/auth/ResetPasswordPage.js';
@@ -53,6 +57,6 @@ export { applyTheme, getStoredTheme, resolveTheme, setStoredTheme, watchSystemTh
53
57
  export { EXTENSIBLE_RECORD_TYPES, NAV_SLOTS } from './registry/contributions.js';
54
58
  export { defineOverridable } from './registry/overridable.js';
55
59
  export { NO_UI_MODULES, UiModuleError, inSlotOrder, registerUiModules } from './registry/registry.js';
56
- export { useDashboardCards, useModuleRoutes, useNavItems, useOverridable, useRecordSidebarCards, useRecordTabs, useUiExtensions, } from './registry/context.js';
60
+ export { useAuthMethods, useDashboardCards, useModuleRoutes, useNavItems, useOverridable, useRecordSidebarCards, useRecordTabs, useUiExtensions, } from './registry/context.js';
57
61
  export { UiExtensionProvider } from './registry/UiExtensionProvider.js';
58
62
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -57,7 +57,7 @@ function ChangePasswordForm() {
57
57
  })
58
58
  .catch(() => undefined);
59
59
  }
60
- return (_jsxs("form", { onSubmit: submit, className: "space-y-3", children: [_jsx("h2", { className: "text-[14px] font-semibold text-ink", children: "Change password" }), _jsx("p", { className: "max-w-md text-[12px] text-ink-muted", children: "Changing your password signs you out everywhere except this browser." }), _jsxs("label", { className: "block max-w-md", children: [_jsx("span", { className: "mb-1.5 block text-[12px] font-medium text-ink", children: "Current password" }), _jsx("input", { type: "password", value: currentPassword, onChange: (event) => {
60
+ return (_jsxs("form", { onSubmit: submit, className: "space-y-3", children: [_jsx("h2", { className: "text-[14px] font-semibold text-ink", children: "Change password" }), _jsxs("p", { className: "max-w-md text-[12px] text-ink-muted", children: ["Changing your password signs you out everywhere except this browser. If you have never set one, use ", _jsx("span", { className: "font-medium text-ink", children: "Forgot password" }), " on the sign-in page."] }), _jsxs("label", { className: "block max-w-md", children: [_jsx("span", { className: "mb-1.5 block text-[12px] font-medium text-ink", children: "Current password" }), _jsx("input", { type: "password", value: currentPassword, onChange: (event) => {
61
61
  setCurrentPassword(event.target.value);
62
62
  }, autoComplete: "current-password", className: inputClass })] }), _jsxs("label", { className: "block max-w-md", children: [_jsx("span", { className: "mb-1.5 block text-[12px] font-medium text-ink", children: "New password" }), _jsx("input", { type: "password", value: newPassword, onChange: (event) => {
63
63
  setNewPassword(event.target.value);
@@ -74,6 +74,6 @@ function SessionList() {
74
74
  }
75
75
  function SessionRow({ session, onRevoke, isRevoking, }) {
76
76
  const timezone = useTimezone();
77
- return (_jsxs("tr", { className: "border-b border-border last:border-0", children: [_jsxs("td", { className: "px-4 py-3", children: [_jsx("div", { className: "font-medium break-all text-ink", children: session.device ?? 'Unknown device' }), session.current && _jsx("span", { className: "text-[11px] font-medium text-success", children: "This device" })] }), _jsx("td", { className: "px-4 py-3 text-ink-muted", children: session.location ?? 'Unknown' }), _jsx("td", { className: "px-4 py-3 text-ink-muted", children: formatDateTime(session.lastActiveAt, timezone) }), _jsx("td", { className: "px-4 py-3 text-right", children: !session.current && (_jsx("button", { type: "button", onClick: onRevoke, disabled: isRevoking, className: "text-[12px] font-medium text-danger hover:underline disabled:opacity-50", children: "Revoke" })) })] }));
77
+ return (_jsxs("tr", { className: "border-b border-border last:border-0", children: [_jsxs("td", { className: "px-4 py-3", children: [_jsx("div", { className: "font-medium break-all text-ink", children: session.device ?? 'Unknown device' }), session.current && _jsx("span", { className: "text-[11px] font-medium text-success", children: "This device" }), session.signedInVia !== null && (_jsxs("div", { className: "text-[11px] text-ink-faint", children: ["via ", session.signedInVia] }))] }), _jsx("td", { className: "px-4 py-3 text-ink-muted", children: session.location ?? 'Unknown' }), _jsx("td", { className: "px-4 py-3 text-ink-muted", children: formatDateTime(session.lastActiveAt, timezone) }), _jsx("td", { className: "px-4 py-3 text-right", children: !session.current && (_jsx("button", { type: "button", onClick: onRevoke, disabled: isRevoking, className: "text-[12px] font-medium text-danger hover:underline disabled:opacity-50", children: "Revoke" })) })] }));
78
78
  }
79
79
  //# sourceMappingURL=SecurityPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SecurityPage.js","sourceRoot":"","sources":["../../../src/pages/account/SecurityPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SecurityPage.js","sourceRoot":"","sources":["../../../src/pages/account/SecurityPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGhC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,WAAW,GACZ,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gCAAiC,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;GAQG;AAEH,MAAM,UAAU,YAAY;IAC1B,OAAO,CACL,eAAK,SAAS,EAAC,4BAA4B,aACzC,KAAC,UAAU,IAAC,KAAK,EAAC,UAAU,EAAC,WAAW,EAAC,4CAA4C,GAAG,EACxF,KAAC,kBAAkB,KAAG,EACtB,KAAC,WAAW,KAAG,IACX,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,GACd,mJAAmJ,CAAA;AAErJ,SAAS,kBAAkB;IACzB,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAA;IAClC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC1D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAClD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACjE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C;;;;OAIG;IACH,SAAS,YAAY;QACnB,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,sCAAsC,CAAA;QAC/C,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;YACjD,OAAO,iCAAiC,MAAM,CAAC,uBAAuB,CAAC,cAAc,CAAA;QACvF,CAAC;QAED,OAAO,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,6CAA6C,CAAA;IAC5F,CAAC;IAED,SAAS,MAAM,CAAC,KAAgB;QAC9B,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,UAAU,CAAC,KAAK,CAAC,CAAA;QAEjB,MAAM,OAAO,GAAG,YAAY,EAAE,CAAA;QAE9B,aAAa,CAAC,OAAO,CAAC,CAAA;QAEtB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAM;QACR,CAAC;QAED,MAAM;aACH,QAAQ,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;aAC1C,IAAI,CAAC,GAAG,EAAE;YACT,kBAAkB,CAAC,EAAE,CAAC,CAAA;YACtB,cAAc,CAAC,EAAE,CAAC,CAAA;YAClB,eAAe,CAAC,EAAE,CAAC,CAAA;YACnB,UAAU,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,CACL,gBAAM,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAC,WAAW,aAC3C,aAAI,SAAS,EAAC,oCAAoC,gCAAqB,EACvE,aAAG,SAAS,EAAC,qCAAqC,qHAEvC,eAAM,SAAS,EAAC,sBAAsB,gCAAuB,6BACpE,EAEJ,iBAAO,SAAS,EAAC,gBAAgB,aAC/B,eAAM,SAAS,EAAC,+CAA+C,iCAAwB,EACvF,gBACE,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;wBACxC,CAAC,EACD,YAAY,EAAC,kBAAkB,EAC/B,SAAS,EAAE,UAAU,GACrB,IACI,EAER,iBAAO,SAAS,EAAC,gBAAgB,aAC/B,eAAM,SAAS,EAAC,+CAA+C,6BAAoB,EACnF,gBACE,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;wBACpC,CAAC,EACD,YAAY,EAAC,cAAc,EAC3B,SAAS,EAAE,UAAU,GACrB,EACF,gBAAM,SAAS,EAAC,uCAAuC,0BAC3C,uBAAuB,oBAC5B,IACD,EAER,iBAAO,SAAS,EAAC,gBAAgB,aAC/B,eAAM,SAAS,EAAC,+CAA+C,qCAA4B,EAC3F,gBACE,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;wBACrC,CAAC,EACD,YAAY,EAAC,cAAc,EAC3B,SAAS,EAAE,UAAU,GACrB,IACI,EAEP,UAAU,KAAK,IAAI,IAAI,YAAG,SAAS,EAAC,yBAAyB,YAAE,UAAU,GAAK,EAC9E,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CACxB,cAAK,SAAS,EAAC,UAAU,YACvB,KAAC,UAAU,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAI,GAC/B,CACP,EAED,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,MAAM,CAAC,SAAS,EAC1B,SAAS,EAAC,gIAAgI,YAEzI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,GAC3E,IACJ,CACR,CAAA;AACH,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAC3D,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAA;IAExC,OAAO,CACL,8BACE,aAAI,SAAS,EAAC,yCAAyC,yBAAc,EAEpE,KAAK,KAAK,IAAI,IAAI,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,GAAI,EAC9C,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAC,YAAY,IAAC,KAAK,EAAC,wBAAmB,GAAG,EAIzE,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,CAC/B,cAAK,SAAS,EAAC,iDAAiD,YAC9D,iBAAO,SAAS,EAAC,8BAA8B,aAC7C,0BACE,cAAI,SAAS,EAAC,oGAAoG,aAChH,aAAI,SAAS,EAAC,aAAa,uBAAY,EACvC,aAAI,SAAS,EAAC,aAAa,yBAAc,EACzC,aAAI,SAAS,EAAC,aAAa,4BAAiB,EAC5C,aAAI,SAAS,EAAC,wBAAwB,wBAAa,IAChD,GACC,EACR,0BACG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,KAAC,UAAU,IAET,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,GAAG,EAAE;oCACb,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;gCACxB,CAAC,EACD,UAAU,EAAE,MAAM,CAAC,SAAS,IALvB,OAAO,CAAC,EAAE,CAMf,CACH,CAAC,GACI,IACF,GACJ,CACP,EAEA,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CACxB,cAAK,SAAS,EAAC,eAAe,YAC5B,KAAC,UAAU,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAI,GAC/B,CACP,IACO,CACX,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,OAAO,EACP,QAAQ,EACR,UAAU,GAKX;IACC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,OAAO,CACL,cAAI,SAAS,EAAC,sCAAsC,aAClD,cAAI,SAAS,EAAC,WAAW,aACvB,cAAK,SAAS,EAAC,gCAAgC,YAAE,OAAO,CAAC,MAAM,IAAI,gBAAgB,GAAO,EACzF,OAAO,CAAC,OAAO,IAAI,eAAM,SAAS,EAAC,sCAAsC,4BAAmB,EAE5F,OAAO,CAAC,WAAW,KAAK,IAAI,IAAI,CAC/B,eAAK,SAAS,EAAC,4BAA4B,qBAAM,OAAO,CAAC,WAAW,IAAO,CAC5E,IACE,EAKL,aAAI,SAAS,EAAC,0BAA0B,YAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,GAAM,EAC7E,aAAI,SAAS,EAAC,0BAA0B,YAAE,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAM,EAC9F,aAAI,SAAS,EAAC,sBAAsB,YACjC,CAAC,OAAO,CAAC,OAAO,IAAI,CACnB,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAC,yEAAyE,uBAG5E,CACV,GACE,IACF,CACN,CAAA;AACH,CAAC"}
@@ -43,4 +43,22 @@ export declare function SecondaryButton({ label, onClick, disabled, }: {
43
43
  readonly onClick: () => void;
44
44
  readonly disabled?: boolean;
45
45
  }): React.JSX.Element;
46
+ /**
47
+ * A labelled rule, for a module separating its own buttons from the password
48
+ * form above them. Core never renders one itself; see `AuthMethods`.
49
+ */
50
+ export declare function AuthDivider({ label }: {
51
+ readonly label?: string;
52
+ }): React.JSX.Element;
53
+ /**
54
+ * The secondary button as a link.
55
+ *
56
+ * A plain anchor, not a router link: a sign-in method leaves the app for its
57
+ * provider, and the destination is a server route the SPA router knows nothing
58
+ * about.
59
+ */
60
+ export declare function AuthLinkButton({ label, href, }: {
61
+ readonly label: string;
62
+ readonly href: string;
63
+ }): React.JSX.Element;
46
64
  //# sourceMappingURL=AuthForm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthForm.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/AuthForm.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,+IACiH,CAAA;AAE9I,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,uFAAuF;IACvF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAa,EACb,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,QAAgB,EAChB,IAAY,GACb,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkBpC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,kFAAkF;IAClF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAKD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,YAAY,EACZ,SAAS,GACV,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAMvC;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,GACR,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAC7B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAMpB;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,QAAgB,GACjB,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAWpB"}
1
+ {"version":3,"file":"AuthForm.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/AuthForm.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,+IACiH,CAAA;AAE9I,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,uFAAuF;IACvF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAa,EACb,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,QAAgB,EAChB,IAAY,GACb,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkBpC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,kFAAkF;IAClF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAKD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,YAAY,EACZ,SAAS,GACV,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAMvC;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,GACR,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAC7B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAMpB;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,QAAgB,GACjB,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAWpB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAY,EAAE,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAQ5F;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,GACL,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CASpB"}
@@ -29,4 +29,21 @@ export function PrimaryButton({ label, onClick, }) {
29
29
  export function SecondaryButton({ label, onClick, disabled = false, }) {
30
30
  return (_jsx("button", { type: "button", onClick: onClick, disabled: disabled, className: "w-full rounded-md border border-border bg-surface px-3.5 py-2 text-[12px] font-medium text-ink-muted transition hover:bg-surface-raised disabled:opacity-50", children: label }));
31
31
  }
32
+ /**
33
+ * A labelled rule, for a module separating its own buttons from the password
34
+ * form above them. Core never renders one itself; see `AuthMethods`.
35
+ */
36
+ export function AuthDivider({ label = 'or' }) {
37
+ return (_jsxs("div", { className: "flex items-center gap-3 py-1", children: [_jsx("span", { className: "h-px flex-1 bg-border" }), _jsx("span", { className: "text-[11px] text-ink-faint", children: label }), _jsx("span", { className: "h-px flex-1 bg-border" })] }));
38
+ }
39
+ /**
40
+ * The secondary button as a link.
41
+ *
42
+ * A plain anchor, not a router link: a sign-in method leaves the app for its
43
+ * provider, and the destination is a server route the SPA router knows nothing
44
+ * about.
45
+ */
46
+ export function AuthLinkButton({ label, href, }) {
47
+ return (_jsx("a", { href: href, className: "block w-full rounded-md border border-border bg-surface px-3.5 py-2 text-center text-[12px] font-medium text-ink-muted transition hover:bg-surface-raised", children: label }));
48
+ }
32
49
  //# sourceMappingURL=AuthForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthForm.js","sourceRoot":"","sources":["../../../src/pages/auth/AuthForm.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,4IAA4I,CAAA;AAgB9I,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,GAAG,MAAM,EACb,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,IAAI,GAAG,KAAK,GACG;IACf,OAAO,CACL,iBAAO,SAAS,EAAC,OAAO,aACtB,eAAM,SAAS,EAAC,+CAA+C,YAAE,KAAK,GAAQ,EAC9E,gBACE,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC9B,CAAC,EACD,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,gBAAgB,YAAY,CAAC,CAAC,CAAC,gBAAgB,GACpE,EACD,IAAI,KAAK,SAAS,IAAI,eAAM,SAAS,EAAC,uCAAuC,YAAE,IAAI,GAAQ,IACtF,CACT,CAAA;AACH,CAAC;AASD,MAAM,aAAa,GACjB,uIAAuI,CAAA;AAEzI,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,YAAY,EACZ,SAAS,GACS;IAClB,OAAO,CACL,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,YAChE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,GAC1B,CACV,CAAA;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,GAIR;IACC,OAAO,CACL,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,YAC7D,KAAK,GACC,CACV,CAAA;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,QAAQ,GAAG,KAAK,GAKjB;IACC,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,6JAA6J,YAEtK,KAAK,GACC,CACV,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"AuthForm.js","sourceRoot":"","sources":["../../../src/pages/auth/AuthForm.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,4IAA4I,CAAA;AAgB9I,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,GAAG,MAAM,EACb,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,IAAI,GAAG,KAAK,GACG;IACf,OAAO,CACL,iBAAO,SAAS,EAAC,OAAO,aACtB,eAAM,SAAS,EAAC,+CAA+C,YAAE,KAAK,GAAQ,EAC9E,gBACE,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC9B,CAAC,EACD,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,gBAAgB,YAAY,CAAC,CAAC,CAAC,gBAAgB,GACpE,EACD,IAAI,KAAK,SAAS,IAAI,eAAM,SAAS,EAAC,uCAAuC,YAAE,IAAI,GAAQ,IACtF,CACT,CAAA;AACH,CAAC;AASD,MAAM,aAAa,GACjB,uIAAuI,CAAA;AAEzI,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,YAAY,EACZ,SAAS,GACS;IAClB,OAAO,CACL,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,YAChE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,GAC1B,CACV,CAAA;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,GAIR;IACC,OAAO,CACL,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,YAC7D,KAAK,GACC,CACV,CAAA;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,QAAQ,GAAG,KAAK,GAKjB;IACC,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,6JAA6J,YAEtK,KAAK,GACC,CACV,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,GAAG,IAAI,EAA+B;IACvE,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAM,SAAS,EAAC,uBAAuB,GAAG,EAC1C,eAAM,SAAS,EAAC,4BAA4B,YAAE,KAAK,GAAQ,EAC3D,eAAM,SAAS,EAAC,uBAAuB,GAAG,IACtC,CACP,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,GAIL;IACC,OAAO,CACL,YACE,IAAI,EAAE,IAAI,EACV,SAAS,EAAC,2JAA2J,YAEpK,KAAK,GACJ,CACL,CAAA;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { AuthMethodContext } from '../../registry/contributions.ts';
2
+ /**
3
+ * The `auth.methods` slot, rendered by the signed-out pages beside their form.
4
+ *
5
+ * Nothing is drawn around the contributions: no divider, no "or" rule. Whether
6
+ * a module has anything to show is decided at run time (a sign-in module with
7
+ * no provider configured renders nothing), so core framing would leave a
8
+ * heading over an empty space. A module that draws buttons draws its own
9
+ * divider with `AuthDivider`.
10
+ */
11
+ export declare function AuthMethods({ intent, next }: AuthMethodContext): React.JSX.Element | null;
12
+ //# sourceMappingURL=AuthMethods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthMethods.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/AuthMethods.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAExE;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAczF"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Fragment } from 'react';
3
+ import { useAuthMethods } from '../../registry/context.js';
4
+ /**
5
+ * The `auth.methods` slot, rendered by the signed-out pages beside their form.
6
+ *
7
+ * Nothing is drawn around the contributions: no divider, no "or" rule. Whether
8
+ * a module has anything to show is decided at run time (a sign-in module with
9
+ * no provider configured renders nothing), so core framing would leave a
10
+ * heading over an empty space. A module that draws buttons draws its own
11
+ * divider with `AuthDivider`.
12
+ */
13
+ export function AuthMethods({ intent, next }) {
14
+ const methods = useAuthMethods();
15
+ if (methods.length === 0) {
16
+ return null;
17
+ }
18
+ return (_jsx("div", { className: "mt-4 space-y-2", children: methods.map((method) => (_jsx(Fragment, { children: method.render({ intent, next }) }, method.id))) }));
19
+ }
20
+ //# sourceMappingURL=AuthMethods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthMethods.js","sourceRoot":"","sources":["../../../src/pages/auth/AuthMethods.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,EAAqB;IAC7D,MAAM,OAAO,GAAG,cAAc,EAAE,CAAA;IAEhC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAC,gBAAgB,YAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,QAAQ,cAAkB,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAA3C,MAAM,CAAC,EAAE,CAA8C,CACvE,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
@@ -1,2 +1,9 @@
1
+ /**
2
+ * Sign in, against `POST /v1/auth/login`.
3
+ *
4
+ * Where the browser goes afterwards is not always the app. An invitation link
5
+ * sends its token through `?next=`, and dropping it would land the invitee on
6
+ * People with the invitation still unaccepted.
7
+ */
1
8
  export declare function SignInPage(): React.JSX.Element;
2
9
  //# sourceMappingURL=SignInPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignInPage.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/SignInPage.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAyD9C"}
1
+ {"version":3,"file":"SignInPage.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/SignInPage.tsx"],"names":[],"mappings":"AAWA;;;;;;GAMG;AAEH,wBAAgB,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CA0D9C"}
@@ -5,6 +5,8 @@ import { useLogIn } from '../../api/resources/session.js';
5
5
  import { ErrorPanel } from '../../components/QueryState.js';
6
6
  import { SubmitButton, TextField } from './AuthForm.js';
7
7
  import { AuthLayout } from './AuthLayout.js';
8
+ import { AuthMethods } from './AuthMethods.js';
9
+ import { safeNext } from './nextPath.js';
8
10
  /**
9
11
  * Sign in, against `POST /v1/auth/login`.
10
12
  *
@@ -12,13 +14,6 @@ import { AuthLayout } from './AuthLayout.js';
12
14
  * sends its token through `?next=`, and dropping it would land the invitee on
13
15
  * People with the invitation still unaccepted.
14
16
  */
15
- /**
16
- * Only a path within this app. An absolute URL in `?next=` would turn the
17
- * sign-in form into an open redirect.
18
- */
19
- function safeNext(value) {
20
- return value !== null && value.startsWith('/') && !value.startsWith('//') ? value : '/dashboard';
21
- }
22
17
  export function SignInPage() {
23
18
  const navigate = useNavigate();
24
19
  const [searchParameters] = useSearchParams();
@@ -33,6 +28,6 @@ export function SignInPage() {
33
28
  .then(() => navigate(next, { replace: true }))
34
29
  .catch(() => undefined);
35
30
  }
36
- return (_jsx(AuthLayout, { title: "Sign in", footer: _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Link, { to: "/forgot-password", className: "font-medium text-accent hover:underline", children: "Forgot password?" }), _jsxs("span", { className: "text-ink-muted", children: ["No account?", ' ', _jsx(Link, { to: "/signup", className: "font-medium text-accent hover:underline", children: "Sign up" })] })] }), children: _jsxs("form", { onSubmit: submit, className: "mt-5 space-y-3", children: [_jsx(TextField, { label: "Email", type: "email", value: email, onChange: setEmail, autoComplete: "email", required: true }), _jsx(TextField, { label: "Password", type: "password", value: password, onChange: setPassword, autoComplete: "current-password", required: true }), logIn.error !== null && _jsx(ErrorPanel, { error: logIn.error }), _jsx(SubmitButton, { label: "Sign in", pendingLabel: "Signing in\u2026", isPending: logIn.isPending })] }) }));
31
+ return (_jsxs(AuthLayout, { title: "Sign in", footer: _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Link, { to: "/forgot-password", className: "font-medium text-accent hover:underline", children: "Forgot password?" }), _jsxs("span", { className: "text-ink-muted", children: ["No account?", ' ', _jsx(Link, { to: "/signup", className: "font-medium text-accent hover:underline", children: "Sign up" })] })] }), children: [_jsxs("form", { onSubmit: submit, className: "mt-5 space-y-3", children: [_jsx(TextField, { label: "Email", type: "email", value: email, onChange: setEmail, autoComplete: "email", required: true }), _jsx(TextField, { label: "Password", type: "password", value: password, onChange: setPassword, autoComplete: "current-password", required: true }), logIn.error !== null && _jsx(ErrorPanel, { error: logIn.error }), _jsx(SubmitButton, { label: "Sign in", pendingLabel: "Signing in\u2026", isPending: logIn.isPending })] }), _jsx(AuthMethods, { intent: "login", next: next })] }));
37
32
  }
38
33
  //# sourceMappingURL=SignInPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignInPage.js","sourceRoot":"","sources":["../../../src/pages/auth/SignInPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAgB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAE7C;;;;;;GAMG;AAEH;;;GAGG;AACH,SAAS,QAAQ,CAAC,KAAoB;IACpC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;AAClG,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,CAAC,gBAAgB,CAAC,GAAG,eAAe,EAAE,CAAA;IAC5C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE5C,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAEnD,SAAS,MAAM,CAAC,KAAgB;QAC9B,KAAK,CAAC,cAAc,EAAE,CAAA;QAEtB,KAAK;aACF,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;aAC3C,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAC7C,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,CACL,KAAC,UAAU,IACT,KAAK,EAAC,SAAS,EACf,MAAM,EACJ,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,IAAI,IAAC,EAAE,EAAC,kBAAkB,EAAC,SAAS,EAAC,yCAAyC,iCAExE,EACP,gBAAM,SAAS,EAAC,gBAAgB,4BAClB,GAAG,EACf,KAAC,IAAI,IAAC,EAAE,EAAC,SAAS,EAAC,SAAS,EAAC,yCAAyC,wBAE/D,IACF,IACH,YAGR,gBAAM,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAC,gBAAgB,aAChD,KAAC,SAAS,IACR,KAAK,EAAC,OAAO,EACb,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAC,OAAO,EACpB,QAAQ,SACR,EACF,KAAC,SAAS,IACR,KAAK,EAAC,UAAU,EAChB,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,WAAW,EACrB,YAAY,EAAC,kBAAkB,EAC/B,QAAQ,SACR,EACD,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,EAC3D,KAAC,YAAY,IAAC,KAAK,EAAC,SAAS,EAAC,YAAY,EAAC,kBAAa,EAAC,SAAS,EAAE,KAAK,CAAC,SAAS,GAAI,IAClF,GACI,CACd,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"SignInPage.js","sourceRoot":"","sources":["../../../src/pages/auth/SignInPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAgB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;;;;GAMG;AAEH,MAAM,UAAU,UAAU;IACxB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,CAAC,gBAAgB,CAAC,GAAG,eAAe,EAAE,CAAA;IAC5C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE5C,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAEnD,SAAS,MAAM,CAAC,KAAgB;QAC9B,KAAK,CAAC,cAAc,EAAE,CAAA;QAEtB,KAAK;aACF,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;aAC3C,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAC7C,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,CACL,MAAC,UAAU,IACT,KAAK,EAAC,SAAS,EACf,MAAM,EACJ,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,IAAI,IAAC,EAAE,EAAC,kBAAkB,EAAC,SAAS,EAAC,yCAAyC,iCAExE,EACP,gBAAM,SAAS,EAAC,gBAAgB,4BAClB,GAAG,EACf,KAAC,IAAI,IAAC,EAAE,EAAC,SAAS,EAAC,SAAS,EAAC,yCAAyC,wBAE/D,IACF,IACH,aAGR,gBAAM,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAC,gBAAgB,aAChD,KAAC,SAAS,IACR,KAAK,EAAC,OAAO,EACb,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAC,OAAO,EACpB,QAAQ,SACR,EACF,KAAC,SAAS,IACR,KAAK,EAAC,UAAU,EAChB,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,WAAW,EACrB,YAAY,EAAC,kBAAkB,EAC/B,QAAQ,SACR,EACD,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,EAC3D,KAAC,YAAY,IAAC,KAAK,EAAC,SAAS,EAAC,YAAY,EAAC,kBAAa,EAAC,SAAS,EAAE,KAAK,CAAC,SAAS,GAAI,IAClF,EACP,KAAC,WAAW,IAAC,MAAM,EAAC,OAAO,EAAC,IAAI,EAAE,IAAI,GAAI,IAC/B,CACd,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SignUpPage.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/SignUpPage.tsx"],"names":[],"mappings":"AAUA;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CA2E9C"}
1
+ {"version":3,"file":"SignUpPage.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/SignUpPage.tsx"],"names":[],"mappings":"AAWA;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAiF9C"}
@@ -6,6 +6,7 @@ import { useSignUp } from '../../api/resources/session.js';
6
6
  import { ErrorPanel } from '../../components/QueryState.js';
7
7
  import { SubmitButton, TextField } from './AuthForm.js';
8
8
  import { AuthLayout } from './AuthLayout.js';
9
+ import { AuthMethods } from './AuthMethods.js';
9
10
  /**
10
11
  * Creating an account, against `POST /v1/auth/signup`.
11
12
  *
@@ -44,6 +45,6 @@ export function SignUpPage() {
44
45
  .then(() => navigate('/verify-email/pending', { replace: true }))
45
46
  .catch(() => undefined);
46
47
  }
47
- return (_jsx(AuthLayout, { title: "Create account", description: "Next you will verify your email, then create a workspace for your company.", footer: _jsxs("span", { className: "text-ink-muted", children: ["Already have an account?", ' ', _jsx(Link, { to: "/login", className: "font-medium text-accent hover:underline", children: "Sign in" })] }), children: _jsxs("form", { onSubmit: submit, className: "mt-5 space-y-3", children: [_jsx(TextField, { label: "Your name", value: name, onChange: setName, autoComplete: "name", required: true }), _jsx(TextField, { label: "Email", type: "email", value: email, onChange: setEmail, autoComplete: "email", required: true }), _jsx(TextField, { label: "Password", type: "password", value: password, onChange: setPassword, autoComplete: "new-password", hint: `At least ${String(MINIMUM_PASSWORD_LENGTH)} characters.`, required: true }), localError !== null && _jsx("p", { className: "text-[12px] text-danger", children: localError }), signUp.error !== null && _jsx(ErrorPanel, { error: signUp.error }), _jsx(SubmitButton, { label: "Continue", pendingLabel: "Creating\u2026", isPending: signUp.isPending })] }) }));
48
+ return (_jsxs(AuthLayout, { title: "Create account", description: "Next you will verify your email, then create a workspace for your company.", footer: _jsxs("span", { className: "text-ink-muted", children: ["Already have an account?", ' ', _jsx(Link, { to: "/login", className: "font-medium text-accent hover:underline", children: "Sign in" })] }), children: [_jsxs("form", { onSubmit: submit, className: "mt-5 space-y-3", children: [_jsx(TextField, { label: "Your name", value: name, onChange: setName, autoComplete: "name", required: true }), _jsx(TextField, { label: "Email", type: "email", value: email, onChange: setEmail, autoComplete: "email", required: true }), _jsx(TextField, { label: "Password", type: "password", value: password, onChange: setPassword, autoComplete: "new-password", hint: `At least ${String(MINIMUM_PASSWORD_LENGTH)} characters.`, required: true }), localError !== null && _jsx("p", { className: "text-[12px] text-danger", children: localError }), signUp.error !== null && _jsx(ErrorPanel, { error: signUp.error }), _jsx(SubmitButton, { label: "Continue", pendingLabel: "Creating\u2026", isPending: signUp.isPending })] }), _jsx(AuthMethods, { intent: "signup", next: "/dashboard" })] }));
48
49
  }
49
50
  //# sourceMappingURL=SignUpPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignUpPage.js","sourceRoot":"","sources":["../../../src/pages/auth/SignUpPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAiC,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAgB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAE7C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEjE,SAAS,MAAM,CAAC,KAAgB;QAC9B,KAAK,CAAC,cAAc,EAAE,CAAA;QAEtB,wEAAwE;QACxE,oDAAoD;QACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;YAC9C,aAAa,CAAC,6BAA6B,MAAM,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAA;YAEzF,OAAM;QACR,CAAC;QAED,aAAa,CAAC,IAAI,CAAC,CAAA;QAEnB,MAAM;aACH,QAAQ,CAAC;YACR,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;YACnB,QAAQ;SACT,CAAC;aACD,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAChE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,CACL,KAAC,UAAU,IACT,KAAK,EAAC,gBAAgB,EACtB,WAAW,EAAC,4EAA4E,EACxF,MAAM,EACJ,gBAAM,SAAS,EAAC,gBAAgB,yCACL,GAAG,EAC5B,KAAC,IAAI,IAAC,EAAE,EAAC,QAAQ,EAAC,SAAS,EAAC,yCAAyC,wBAE9D,IACF,YAGT,gBAAM,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAC,gBAAgB,aAChD,KAAC,SAAS,IACR,KAAK,EAAC,WAAW,EACjB,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAC,MAAM,EACnB,QAAQ,SACR,EACF,KAAC,SAAS,IACR,KAAK,EAAC,OAAO,EACb,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAC,OAAO,EACpB,QAAQ,SACR,EACF,KAAC,SAAS,IACR,KAAK,EAAC,UAAU,EAChB,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,WAAW,EACrB,YAAY,EAAC,cAAc,EAC3B,IAAI,EAAE,YAAY,MAAM,CAAC,uBAAuB,CAAC,cAAc,EAC/D,QAAQ,SACR,EACD,UAAU,KAAK,IAAI,IAAI,YAAG,SAAS,EAAC,yBAAyB,YAAE,UAAU,GAAK,EAC9E,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,KAAC,UAAU,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAI,EAC7D,KAAC,YAAY,IAAC,KAAK,EAAC,UAAU,EAAC,YAAY,EAAC,gBAAW,EAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAI,IAClF,GACI,CACd,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"SignUpPage.js","sourceRoot":"","sources":["../../../src/pages/auth/SignUpPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Where a signed-out page sends the browser once it is signed in.
3
+ *
4
+ * Its own file rather than beside the form controls: a module exporting a
5
+ * component and a function from one file loses Fast Refresh, and this is
6
+ * exported to modules, which is the reason it is not page-local. A module
7
+ * contributing a sign-in method is handed the result and has to be able to
8
+ * rely on what it means.
9
+ */
10
+ /**
11
+ * Only a path within this app. An absolute URL in `?next=` would turn a
12
+ * sign-in page into an open redirect.
13
+ */
14
+ export declare function safeNext(value: string | null): string;
15
+ //# sourceMappingURL=nextPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextPath.d.ts","sourceRoot":"","sources":["../../../src/pages/auth/nextPath.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAErD"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Where a signed-out page sends the browser once it is signed in.
3
+ *
4
+ * Its own file rather than beside the form controls: a module exporting a
5
+ * component and a function from one file loses Fast Refresh, and this is
6
+ * exported to modules, which is the reason it is not page-local. A module
7
+ * contributing a sign-in method is handed the result and has to be able to
8
+ * rely on what it means.
9
+ */
10
+ /**
11
+ * Only a path within this app. An absolute URL in `?next=` would turn a
12
+ * sign-in page into an open redirect.
13
+ */
14
+ export function safeNext(value) {
15
+ return value !== null && value.startsWith('/') && !value.startsWith('//') ? value : '/dashboard';
16
+ }
17
+ //# sourceMappingURL=nextPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextPath.js","sourceRoot":"","sources":["../../../src/pages/auth/nextPath.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;AAClG,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { ComponentType } from 'react';
2
- import type { DashboardCard, ExtensibleRecordType, NavItem, NavSlot, RecordSidebarCard, RecordTab, RouteContribution } from './contributions.ts';
2
+ import type { AuthMethod, DashboardCard, ExtensibleRecordType, NavItem, NavSlot, RecordSidebarCard, RecordTab, RouteContribution } from './contributions.ts';
3
3
  import type { Overridable } from './overridable.ts';
4
4
  import type { UiExtensions } from './registry.ts';
5
5
  /**
@@ -22,6 +22,8 @@ export declare function useModuleRoutes(): readonly RouteContribution[];
22
22
  export declare function useRecordTabs(objectType: ExtensibleRecordType): readonly RecordTab[];
23
23
  export declare function useRecordSidebarCards(objectType: ExtensibleRecordType): readonly RecordSidebarCard[];
24
24
  export declare function useDashboardCards(): readonly DashboardCard[];
25
+ /** Extra ways to sign in, for the signed-out pages to render beside their form. */
26
+ export declare function useAuthMethods(): readonly AuthMethod[];
25
27
  /**
26
28
  * The component to render for an overridable: a module's replacement, or core's
27
29
  * own. Core calls this instead of rendering its component directly.
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/registry/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,uCAA6C,CAAA;AAE5E,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAE7D;AAED,wEAAwE;AACxE,wBAAgB,eAAe,IAAI,SAAS,iBAAiB,EAAE,CAE9D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,SAAS,EAAE,CAEpF;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,iBAAiB,EAAE,CAEpG;AAED,wBAAgB,iBAAiB,IAAI,SAAS,aAAa,EAAE,CAE5D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAErF"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/registry/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,uCAA6C,CAAA;AAE5E,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAE7D;AAED,wEAAwE;AACxE,wBAAgB,eAAe,IAAI,SAAS,iBAAiB,EAAE,CAE9D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,SAAS,EAAE,CAEpF;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,iBAAiB,EAAE,CAEpG;AAED,wBAAgB,iBAAiB,IAAI,SAAS,aAAa,EAAE,CAE5D;AAED,mFAAmF;AACnF,wBAAgB,cAAc,IAAI,SAAS,UAAU,EAAE,CAEtD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAErF"}
@@ -32,6 +32,10 @@ export function useRecordSidebarCards(objectType) {
32
32
  export function useDashboardCards() {
33
33
  return useUiExtensions().dashboardCards();
34
34
  }
35
+ /** Extra ways to sign in, for the signed-out pages to render beside their form. */
36
+ export function useAuthMethods() {
37
+ return useUiExtensions().authMethods();
38
+ }
35
39
  /**
36
40
  * The component to render for an overridable: a module's replacement, or core's
37
41
  * own. Core calls this instead of rendering its component directly.
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/registry/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAajD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG7C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAe,aAAa,CAAC,CAAA;AAE5E,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAA;AACvC,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,eAAe,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AACzC,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,eAAe;IAC7B,OAAO,eAAe,EAAE,CAAC,MAAM,EAAE,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAgC;IAC5D,OAAO,eAAe,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAgC;IACpE,OAAO,eAAe,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAe,EAAE,CAAC,cAAc,EAAE,CAAA;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAQ,KAAyB;IAC7D,OAAO,eAAe,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/registry/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAcjD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG7C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAe,aAAa,CAAC,CAAA;AAE5E,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAA;AACvC,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,eAAe,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AACzC,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,eAAe;IAC7B,OAAO,eAAe,EAAE,CAAC,MAAM,EAAE,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAgC;IAC5D,OAAO,eAAe,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAgC;IACpE,OAAO,eAAe,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAe,EAAE,CAAC,cAAc,EAAE,CAAA;AAC3C,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,cAAc;IAC5B,OAAO,eAAe,EAAE,CAAC,WAAW,EAAE,CAAA;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAQ,KAAyB;IAC7D,OAAO,eAAe,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC"}
@@ -20,6 +20,30 @@ export interface NavItem {
20
20
  readonly order?: number;
21
21
  readonly icon?: ReactNode;
22
22
  }
23
+ /**
24
+ * What a sign-in method is rendering against.
25
+ *
26
+ * `intent` because the same button reads differently on the two pages, and
27
+ * `next` because where the browser lands afterwards is the page's to decide,
28
+ * not the module's. The page has already checked it is a path within the app.
29
+ */
30
+ export interface AuthMethodContext {
31
+ readonly intent: 'login' | 'signup';
32
+ readonly next: string;
33
+ }
34
+ /**
35
+ * Another way to sign in, offered beside the password form.
36
+ *
37
+ * Core renders whatever a module returns and nothing around it: no divider, no
38
+ * heading. A module cannot always tell at build time whether it has anything to
39
+ * offer (an unconfigured provider renders nothing at all), and core framing
40
+ * would then decorate an empty space.
41
+ */
42
+ export interface AuthMethod {
43
+ readonly id: string;
44
+ readonly order?: number;
45
+ readonly render: (context: AuthMethodContext) => ReactNode;
46
+ }
23
47
  /** A whole page, mounted under the shell's chrome. */
24
48
  export interface RouteContribution {
25
49
  readonly path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"contributions.d.ts","sourceRoot":"","sources":["../../src/registry/contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC;;;;;GAKG;AAEH,eAAO,MAAM,SAAS,YAAI,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAEjE,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAC1B;AAED,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAC5B;AAED;;;;;;;;GAQG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,YAAY,EAAE,oBAAoB,EAAE,CAAA;AAEpC,uGAAuG;AACvG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAA;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,SAAS,CAAA;CACvD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,SAAS,CAAA;CACvD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAA;CACjC"}
1
+ {"version":3,"file":"contributions.d.ts","sourceRoot":"","sources":["../../src/registry/contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC;;;;;GAKG;AAEH,eAAO,MAAM,SAAS,YAAI,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAEjE,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,SAAS,CAAA;CAC3D;AAED,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAC5B;AAED;;;;;;;;GAQG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,YAAY,EAAE,oBAAoB,EAAE,CAAA;AAEpC,uGAAuG;AACvG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAA;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,SAAS,CAAA;CACvD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,SAAS,CAAA;CACvD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,SAAS,CAAA;CACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"contributions.js","sourceRoot":"","sources":["../../src/registry/contributions.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAuBjE;;;;;;;;GAQG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"contributions.js","sourceRoot":"","sources":["../../src/registry/contributions.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAU,CAAA;AAiDjE;;;;;;;;GAQG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { ComponentType } from 'react';
2
- import type { DashboardCard, ExtensibleRecordType, NavItem, NavSlot, RecordSidebarCard, RecordTab, RouteContribution } from './contributions.ts';
2
+ import type { AuthMethod, DashboardCard, ExtensibleRecordType, NavItem, NavSlot, RecordSidebarCard, RecordTab, RouteContribution } from './contributions.ts';
3
3
  import type { Overridable } from './overridable.ts';
4
4
  /**
5
5
  * The build-time UI extension registry from `modules.md`.
@@ -19,6 +19,8 @@ export interface UiModuleContext {
19
19
  recordTab(objectType: ExtensibleRecordType, tab: RecordTab): void;
20
20
  recordSidebarCard(objectType: ExtensibleRecordType, card: RecordSidebarCard): void;
21
21
  dashboardCard(card: DashboardCard): void;
22
+ /** Another way to sign in, rendered beside the password form on `/login` and `/signup`. */
23
+ authMethod(method: AuthMethod): void;
22
24
  /** Replaces a core component. Prefer a slot; see `modules.md`. */
23
25
  override<Props>(token: Overridable<Props>, component: ComponentType<Props>): void;
24
26
  }
@@ -33,6 +35,7 @@ export interface UiExtensions {
33
35
  recordTabs(objectType: ExtensibleRecordType): readonly RecordTab[];
34
36
  recordSidebarCards(objectType: ExtensibleRecordType): readonly RecordSidebarCard[];
35
37
  dashboardCards(): readonly DashboardCard[];
38
+ authMethods(): readonly AuthMethod[];
36
39
  componentFor<Props>(token: Overridable<Props>): ComponentType<Props>;
37
40
  }
38
41
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAA;AAElE;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACvC,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACrC,SAAS,CAAC,UAAU,EAAE,oBAAoB,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAAA;IACjE,iBAAiB,CAAC,UAAU,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAClF,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAA;IACxC,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;CAClF;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;CACzC;AAED,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAAA;IAC3C,MAAM,IAAI,SAAS,iBAAiB,EAAE,CAAA;IACtC,UAAU,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,SAAS,EAAE,CAAA;IAClE,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,iBAAiB,EAAE,CAAA;IAClF,cAAc,IAAI,SAAS,aAAa,EAAE,CAAA;IAC1C,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;CACrE;AAKD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAEpG;AAWD,gHAAgH;AAChH,qBAAa,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAmED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,GAAG,YAAY,CA8B5E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,YAAoC,CAAA"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EAClB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAA;AAElE;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACvC,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACrC,SAAS,CAAC,UAAU,EAAE,oBAAoB,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAAA;IACjE,iBAAiB,CAAC,UAAU,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAClF,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAA;IACxC,2FAA2F;IAC3F,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;CAClF;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;CACzC;AAED,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAAA;IAC3C,MAAM,IAAI,SAAS,iBAAiB,EAAE,CAAA;IACtC,UAAU,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,SAAS,EAAE,CAAA;IAClE,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,iBAAiB,EAAE,CAAA;IAClF,cAAc,IAAI,SAAS,aAAa,EAAE,CAAA;IAC1C,WAAW,IAAI,SAAS,UAAU,EAAE,CAAA;IACpC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;CACrE;AAKD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAEpG;AAYD,gHAAgH;AAChH,qBAAa,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAwED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,GAAG,YAAY,CAgC5E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,YAAoC,CAAA"}
@@ -55,6 +55,10 @@ function createModuleContext(module, accumulator, taken) {
55
55
  claim(taken, module.id, 'dashboard.cards', card.id);
56
56
  accumulator.dashboardCards.push(card);
57
57
  },
58
+ authMethod(method) {
59
+ claim(taken, module.id, 'auth.methods', method.id);
60
+ accumulator.authMethods.push(method);
61
+ },
58
62
  override(token, component) {
59
63
  if (accumulator.overrides.has(token.key)) {
60
64
  throw new UiModuleError(`module "${module.id}" overrides "${token.key}", which another module already replaced`);
@@ -75,6 +79,7 @@ export function registerUiModules(modules) {
75
79
  recordTabs: new Map(),
76
80
  recordSidebarCards: new Map(),
77
81
  dashboardCards: [],
82
+ authMethods: [],
78
83
  overrides: createOverrideStore(),
79
84
  };
80
85
  const taken = new Set();
@@ -92,6 +97,7 @@ export function registerUiModules(modules) {
92
97
  recordTabs: (objectType) => inSlotOrder(accumulator.recordTabs.get(objectType) ?? []),
93
98
  recordSidebarCards: (objectType) => inSlotOrder(accumulator.recordSidebarCards.get(objectType) ?? []),
94
99
  dashboardCards: () => inSlotOrder(accumulator.dashboardCards),
100
+ authMethods: () => inSlotOrder(accumulator.authMethods),
95
101
  componentFor: (token) => accumulator.overrides.get(token),
96
102
  };
97
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kelpie/ui",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "React UI for Kelpie: components, pages, API client, and the extension registry an assembly composes modules through.",
5
5
  "keywords": [
6
6
  "kelpie",
@@ -48,7 +48,7 @@
48
48
  "@dnd-kit/core": "^6.3.1",
49
49
  "@dnd-kit/sortable": "^10.0.0",
50
50
  "@dnd-kit/utilities": "^3.2.2",
51
- "@kelpie/schemas": "^0.11.0",
51
+ "@kelpie/schemas": "^0.12.0",
52
52
  "@tanstack/react-query": "^5.101.4",
53
53
  "react-markdown": "^10.1.0",
54
54
  "react-router": "^8.3.0",
package/src/index.ts CHANGED
@@ -132,6 +132,10 @@ export { DecisionsPage } from './pages/DecisionsPage.tsx'
132
132
  export { PeoplePage } from './pages/PeoplePage.tsx'
133
133
  export { PersonDetail } from './pages/PersonDetail.tsx'
134
134
  export { PlanningPage } from './pages/PlanningPage.tsx'
135
+ // The controls a module contributing a sign-in method builds its button from,
136
+ // so it matches the form beside it without copying class names.
137
+ export { AuthDivider, AuthLinkButton } from './pages/auth/AuthForm.tsx'
138
+ export { safeNext } from './pages/auth/nextPath.ts'
135
139
  export { ForgotPasswordPage } from './pages/auth/ForgotPasswordPage.tsx'
136
140
  export { JoinPage } from './pages/auth/JoinPage.tsx'
137
141
  export { ResetPasswordPage } from './pages/auth/ResetPasswordPage.tsx'
@@ -165,6 +169,8 @@ export type { ThemePreference } from './lib/theme.ts'
165
169
 
166
170
  export { EXTENSIBLE_RECORD_TYPES, NAV_SLOTS } from './registry/contributions.ts'
167
171
  export type {
172
+ AuthMethod,
173
+ AuthMethodContext,
168
174
  DashboardCard,
169
175
  ExtensibleRecordType,
170
176
  NavItem,
@@ -182,6 +188,7 @@ export { NO_UI_MODULES, UiModuleError, inSlotOrder, registerUiModules } from './
182
188
  export type { UiExtensions, UiModule, UiModuleContext } from './registry/registry.ts'
183
189
 
184
190
  export {
191
+ useAuthMethods,
185
192
  useDashboardCards,
186
193
  useModuleRoutes,
187
194
  useNavItems,
@@ -88,7 +88,8 @@ function ChangePasswordForm(): React.JSX.Element {
88
88
  <form onSubmit={submit} className="space-y-3">
89
89
  <h2 className="text-[14px] font-semibold text-ink">Change password</h2>
90
90
  <p className="max-w-md text-[12px] text-ink-muted">
91
- Changing your password signs you out everywhere except this browser.
91
+ Changing your password signs you out everywhere except this browser. If you have never set
92
+ one, use <span className="font-medium text-ink">Forgot password</span> on the sign-in page.
92
93
  </p>
93
94
 
94
95
  <label className="block max-w-md">
@@ -216,6 +217,10 @@ function SessionRow({
216
217
  <td className="px-4 py-3">
217
218
  <div className="font-medium break-all text-ink">{session.device ?? 'Unknown device'}</div>
218
219
  {session.current && <span className="text-[11px] font-medium text-success">This device</span>}
220
+ {/* Null for a password sign-in, which is the ordinary case and needs no label. */}
221
+ {session.signedInVia !== null && (
222
+ <div className="text-[11px] text-ink-faint">via {session.signedInVia}</div>
223
+ )}
219
224
  </td>
220
225
  {/* Always unknown today: the service records the User-Agent and nothing
221
226
  derives a location from the request. The column stays because the field
@@ -116,3 +116,41 @@ export function SecondaryButton({
116
116
  </button>
117
117
  )
118
118
  }
119
+
120
+ /**
121
+ * A labelled rule, for a module separating its own buttons from the password
122
+ * form above them. Core never renders one itself; see `AuthMethods`.
123
+ */
124
+ export function AuthDivider({ label = 'or' }: { readonly label?: string }): React.JSX.Element {
125
+ return (
126
+ <div className="flex items-center gap-3 py-1">
127
+ <span className="h-px flex-1 bg-border" />
128
+ <span className="text-[11px] text-ink-faint">{label}</span>
129
+ <span className="h-px flex-1 bg-border" />
130
+ </div>
131
+ )
132
+ }
133
+
134
+ /**
135
+ * The secondary button as a link.
136
+ *
137
+ * A plain anchor, not a router link: a sign-in method leaves the app for its
138
+ * provider, and the destination is a server route the SPA router knows nothing
139
+ * about.
140
+ */
141
+ export function AuthLinkButton({
142
+ label,
143
+ href,
144
+ }: {
145
+ readonly label: string
146
+ readonly href: string
147
+ }): React.JSX.Element {
148
+ return (
149
+ <a
150
+ href={href}
151
+ className="block w-full rounded-md border border-border bg-surface px-3.5 py-2 text-center text-[12px] font-medium text-ink-muted transition hover:bg-surface-raised"
152
+ >
153
+ {label}
154
+ </a>
155
+ )
156
+ }
@@ -0,0 +1,29 @@
1
+ import { Fragment } from 'react'
2
+
3
+ import { useAuthMethods } from '../../registry/context.ts'
4
+ import type { AuthMethodContext } from '../../registry/contributions.ts'
5
+
6
+ /**
7
+ * The `auth.methods` slot, rendered by the signed-out pages beside their form.
8
+ *
9
+ * Nothing is drawn around the contributions: no divider, no "or" rule. Whether
10
+ * a module has anything to show is decided at run time (a sign-in module with
11
+ * no provider configured renders nothing), so core framing would leave a
12
+ * heading over an empty space. A module that draws buttons draws its own
13
+ * divider with `AuthDivider`.
14
+ */
15
+ export function AuthMethods({ intent, next }: AuthMethodContext): React.JSX.Element | null {
16
+ const methods = useAuthMethods()
17
+
18
+ if (methods.length === 0) {
19
+ return null
20
+ }
21
+
22
+ return (
23
+ <div className="mt-4 space-y-2">
24
+ {methods.map((method) => (
25
+ <Fragment key={method.id}>{method.render({ intent, next })}</Fragment>
26
+ ))}
27
+ </div>
28
+ )
29
+ }
@@ -6,6 +6,8 @@ import { useLogIn } from '../../api/resources/session.ts'
6
6
  import { ErrorPanel } from '../../components/QueryState.tsx'
7
7
  import { SubmitButton, TextField } from './AuthForm.tsx'
8
8
  import { AuthLayout } from './AuthLayout.tsx'
9
+ import { AuthMethods } from './AuthMethods.tsx'
10
+ import { safeNext } from './nextPath.ts'
9
11
 
10
12
  /**
11
13
  * Sign in, against `POST /v1/auth/login`.
@@ -15,14 +17,6 @@ import { AuthLayout } from './AuthLayout.tsx'
15
17
  * People with the invitation still unaccepted.
16
18
  */
17
19
 
18
- /**
19
- * Only a path within this app. An absolute URL in `?next=` would turn the
20
- * sign-in form into an open redirect.
21
- */
22
- function safeNext(value: string | null): string {
23
- return value !== null && value.startsWith('/') && !value.startsWith('//') ? value : '/dashboard'
24
- }
25
-
26
20
  export function SignInPage(): React.JSX.Element {
27
21
  const navigate = useNavigate()
28
22
  const [searchParameters] = useSearchParams()
@@ -78,6 +72,7 @@ export function SignInPage(): React.JSX.Element {
78
72
  {logIn.error !== null && <ErrorPanel error={logIn.error} />}
79
73
  <SubmitButton label="Sign in" pendingLabel="Signing in…" isPending={logIn.isPending} />
80
74
  </form>
75
+ <AuthMethods intent="login" next={next} />
81
76
  </AuthLayout>
82
77
  )
83
78
  }
@@ -7,6 +7,7 @@ import { useSignUp } from '../../api/resources/session.ts'
7
7
  import { ErrorPanel } from '../../components/QueryState.tsx'
8
8
  import { SubmitButton, TextField } from './AuthForm.tsx'
9
9
  import { AuthLayout } from './AuthLayout.tsx'
10
+ import { AuthMethods } from './AuthMethods.tsx'
10
11
 
11
12
  /**
12
13
  * Creating an account, against `POST /v1/auth/signup`.
@@ -94,6 +95,12 @@ export function SignUpPage(): React.JSX.Element {
94
95
  {signUp.error !== null && <ErrorPanel error={signUp.error} />}
95
96
  <SubmitButton label="Continue" pendingLabel="Creating…" isPending={signUp.isPending} />
96
97
  </form>
98
+ {/*
99
+ `/dashboard` rather than the verification screen a password signup goes
100
+ to: an account a module provisions is verified already, and having no
101
+ workspace, `SessionGate` sends it on to the workspace step itself.
102
+ */}
103
+ <AuthMethods intent="signup" next="/dashboard" />
97
104
  </AuthLayout>
98
105
  )
99
106
  }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Where a signed-out page sends the browser once it is signed in.
3
+ *
4
+ * Its own file rather than beside the form controls: a module exporting a
5
+ * component and a function from one file loses Fast Refresh, and this is
6
+ * exported to modules, which is the reason it is not page-local. A module
7
+ * contributing a sign-in method is handed the result and has to be able to
8
+ * rely on what it means.
9
+ */
10
+
11
+ /**
12
+ * Only a path within this app. An absolute URL in `?next=` would turn a
13
+ * sign-in page into an open redirect.
14
+ */
15
+ export function safeNext(value: string | null): string {
16
+ return value !== null && value.startsWith('/') && !value.startsWith('//') ? value : '/dashboard'
17
+ }
@@ -2,6 +2,7 @@ import { createContext, useContext } from 'react'
2
2
  import type { ComponentType } from 'react'
3
3
 
4
4
  import type {
5
+ AuthMethod,
5
6
  DashboardCard,
6
7
  ExtensibleRecordType,
7
8
  NavItem,
@@ -53,6 +54,11 @@ export function useDashboardCards(): readonly DashboardCard[] {
53
54
  return useUiExtensions().dashboardCards()
54
55
  }
55
56
 
57
+ /** Extra ways to sign in, for the signed-out pages to render beside their form. */
58
+ export function useAuthMethods(): readonly AuthMethod[] {
59
+ return useUiExtensions().authMethods()
60
+ }
61
+
56
62
  /**
57
63
  * The component to render for an overridable: a module's replacement, or core's
58
64
  * own. Core calls this instead of rendering its component directly.
@@ -25,6 +25,32 @@ export interface NavItem {
25
25
  readonly icon?: ReactNode
26
26
  }
27
27
 
28
+ /**
29
+ * What a sign-in method is rendering against.
30
+ *
31
+ * `intent` because the same button reads differently on the two pages, and
32
+ * `next` because where the browser lands afterwards is the page's to decide,
33
+ * not the module's. The page has already checked it is a path within the app.
34
+ */
35
+ export interface AuthMethodContext {
36
+ readonly intent: 'login' | 'signup'
37
+ readonly next: string
38
+ }
39
+
40
+ /**
41
+ * Another way to sign in, offered beside the password form.
42
+ *
43
+ * Core renders whatever a module returns and nothing around it: no divider, no
44
+ * heading. A module cannot always tell at build time whether it has anything to
45
+ * offer (an unconfigured provider renders nothing at all), and core framing
46
+ * would then decorate an empty space.
47
+ */
48
+ export interface AuthMethod {
49
+ readonly id: string
50
+ readonly order?: number
51
+ readonly render: (context: AuthMethodContext) => ReactNode
52
+ }
53
+
28
54
  /** A whole page, mounted under the shell's chrome. */
29
55
  export interface RouteContribution {
30
56
  readonly path: string
@@ -1,6 +1,7 @@
1
1
  import type { ComponentType } from 'react'
2
2
 
3
3
  import type {
4
+ AuthMethod,
4
5
  DashboardCard,
5
6
  ExtensibleRecordType,
6
7
  NavItem,
@@ -31,6 +32,8 @@ export interface UiModuleContext {
31
32
  recordTab(objectType: ExtensibleRecordType, tab: RecordTab): void
32
33
  recordSidebarCard(objectType: ExtensibleRecordType, card: RecordSidebarCard): void
33
34
  dashboardCard(card: DashboardCard): void
35
+ /** Another way to sign in, rendered beside the password form on `/login` and `/signup`. */
36
+ authMethod(method: AuthMethod): void
34
37
  /** Replaces a core component. Prefer a slot; see `modules.md`. */
35
38
  override<Props>(token: Overridable<Props>, component: ComponentType<Props>): void
36
39
  }
@@ -47,6 +50,7 @@ export interface UiExtensions {
47
50
  recordTabs(objectType: ExtensibleRecordType): readonly RecordTab[]
48
51
  recordSidebarCards(objectType: ExtensibleRecordType): readonly RecordSidebarCard[]
49
52
  dashboardCards(): readonly DashboardCard[]
53
+ authMethods(): readonly AuthMethod[]
50
54
  componentFor<Props>(token: Overridable<Props>): ComponentType<Props>
51
55
  }
52
56
 
@@ -70,6 +74,7 @@ interface Accumulator {
70
74
  readonly recordTabs: Map<ExtensibleRecordType, RecordTab[]>
71
75
  readonly recordSidebarCards: Map<ExtensibleRecordType, RecordSidebarCard[]>
72
76
  readonly dashboardCards: DashboardCard[]
77
+ readonly authMethods: AuthMethod[]
73
78
  readonly overrides: OverrideStore
74
79
  }
75
80
 
@@ -134,6 +139,11 @@ function createModuleContext(
134
139
  accumulator.dashboardCards.push(card)
135
140
  },
136
141
 
142
+ authMethod(method) {
143
+ claim(taken, module.id, 'auth.methods', method.id)
144
+ accumulator.authMethods.push(method)
145
+ },
146
+
137
147
  override(token, component) {
138
148
  if (accumulator.overrides.has(token.key)) {
139
149
  throw new UiModuleError(
@@ -158,6 +168,7 @@ export function registerUiModules(modules: readonly UiModule[]): UiExtensions {
158
168
  recordTabs: new Map(),
159
169
  recordSidebarCards: new Map(),
160
170
  dashboardCards: [],
171
+ authMethods: [],
161
172
  overrides: createOverrideStore(),
162
173
  }
163
174
  const taken = new Set<string>()
@@ -179,6 +190,7 @@ export function registerUiModules(modules: readonly UiModule[]): UiExtensions {
179
190
  recordSidebarCards: (objectType) =>
180
191
  inSlotOrder(accumulator.recordSidebarCards.get(objectType) ?? []),
181
192
  dashboardCards: () => inSlotOrder(accumulator.dashboardCards),
193
+ authMethods: () => inSlotOrder(accumulator.authMethods),
182
194
  componentFor: (token) => accumulator.overrides.get(token),
183
195
  }
184
196
  }