@kirill.konshin/mui 0.0.5 → 0.0.7

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 (46) hide show
  1. package/README.md +3 -19
  2. package/dist/admin/appProvider.d.ts +11 -9
  3. package/dist/admin/appProvider.d.ts.map +1 -1
  4. package/dist/admin/appProvider.js +2 -2
  5. package/dist/admin/appProvider.js.map +1 -1
  6. package/dist/admin/dashboardLayout.d.ts +6 -4
  7. package/dist/admin/dashboardLayout.d.ts.map +1 -1
  8. package/dist/admin/dashboardLayout.js +1 -1
  9. package/dist/admin/dashboardLayout.js.map +1 -1
  10. package/dist/admin/index.d.ts +4 -4
  11. package/dist/admin/signInPage.d.ts +16 -13
  12. package/dist/admin/signInPage.d.ts.map +1 -1
  13. package/dist/admin/signInPage.js +23 -7
  14. package/dist/admin/signInPage.js.map +1 -1
  15. package/dist/appBarOffset.d.ts +4 -2
  16. package/dist/appBarOffset.d.ts.map +1 -1
  17. package/dist/appBarOffset.js +1 -1
  18. package/dist/appBarOffset.js.map +1 -1
  19. package/dist/formControlFieldset.d.ts +4 -2
  20. package/dist/formControlFieldset.d.ts.map +1 -1
  21. package/dist/formControlFieldset.js +2 -5
  22. package/dist/formControlFieldset.js.map +1 -1
  23. package/dist/formLabelLegend.d.ts +4 -2
  24. package/dist/formLabelLegend.d.ts.map +1 -1
  25. package/dist/formLabelLegend.js +1 -1
  26. package/dist/formLabelLegend.js.map +1 -1
  27. package/dist/genericControl.d.ts +5 -3
  28. package/dist/genericControl.d.ts.map +1 -1
  29. package/dist/genericControl.js +2 -5
  30. package/dist/genericControl.js.map +1 -1
  31. package/dist/index.d.ts +10 -7
  32. package/dist/readOnly.d.ts +5 -3
  33. package/dist/readOnly.d.ts.map +1 -1
  34. package/dist/readOnly.js +1 -1
  35. package/dist/readOnly.js.map +1 -1
  36. package/package.json +4 -4
  37. package/dist/admin/index.d.ts.map +0 -1
  38. package/dist/formControlFieldset.stories.d.ts +0 -7
  39. package/dist/formControlFieldset.stories.d.ts.map +0 -1
  40. package/dist/formLabelLegend.stories.d.ts +0 -13
  41. package/dist/formLabelLegend.stories.d.ts.map +0 -1
  42. package/dist/genericControl.stories.d.ts +0 -12
  43. package/dist/genericControl.stories.d.ts.map +0 -1
  44. package/dist/index.d.ts.map +0 -1
  45. package/dist/readOnly.stories.d.ts +0 -12
  46. package/dist/readOnly.stories.d.ts.map +0 -1
package/README.md CHANGED
@@ -41,19 +41,9 @@ import DashboardIcon from '@mui/icons-material/Dashboard';
41
41
 
42
42
  const NAVIGATION = [{ segment: 'admin', title: 'Dashboard', icon: <DashboardIcon /> }];
43
43
 
44
- export function AdminShell({
45
- children,
46
- logoutAction,
47
- }: {
48
- children: React.ReactNode;
49
- logoutAction: PasswordAuth['logout'];
50
- }) {
44
+ export function AdminShell({ children, logoutAction }: { children: React.ReactNode; logoutAction: PasswordAuth['logout'] }) {
51
45
  return (
52
- <AdminAppProvider
53
- branding={{ title: 'Admin', homeUrl: '/admin' }}
54
- navigation={NAVIGATION}
55
- logoutAction={logoutAction}
56
- >
46
+ <AdminAppProvider branding={{ title: 'Admin', homeUrl: '/admin' }} navigation={NAVIGATION} logoutAction={logoutAction}>
57
47
  <AdminDashboardLayout>{children}</AdminDashboardLayout>
58
48
  </AdminAppProvider>
59
49
  );
@@ -67,13 +57,7 @@ export function AdminShell({
67
57
  import type { PasswordAuth } from '@kirill.konshin/auth';
68
58
  import { AdminAppProvider, AdminSignInPage } from '@kirill.konshin/mui/admin';
69
59
 
70
- export function AdminSignIn({
71
- loginAction,
72
- isConfigured,
73
- }: {
74
- loginAction: PasswordAuth['loginFormAction'];
75
- isConfigured: boolean;
76
- }) {
60
+ export function AdminSignIn({ loginAction, isConfigured }: { loginAction: PasswordAuth['loginFormAction']; isConfigured: boolean }) {
77
61
  return (
78
62
  <AdminAppProvider branding={{ title: 'Admin' }}>
79
63
  <AdminSignInPage loginAction={loginAction} isConfigured={isConfigured} />
@@ -1,13 +1,14 @@
1
- import { ComponentProps, FC } from 'react';
2
- import { NextAppProvider } from '@toolpad/core/nextjs';
1
+ import { ComponentProps, FC } from "react";
2
+ import { NextAppProvider } from "@toolpad/core/nextjs";
3
+ //#region src/admin/appProvider.d.ts
3
4
  export type AdminAppProviderProps = ComponentProps<typeof NextAppProvider> & {
4
- /** Server action that destroys the session, wired into Toolpad `authentication.signOut` */
5
- logoutAction?: () => Promise<void>;
6
- /**
7
- * Login page (`auth.urls.login`) — Toolpad calls `authentication.signIn` from the account menu
8
- * when no session is present, and the sign-in UI is `AdminSignInPage` living there. Default `/login`
9
- */
10
- loginUrl?: string;
5
+ /** Server action that destroys the session, wired into Toolpad `authentication.signOut` */
6
+ logoutAction?: () => Promise<void>;
7
+ /**
8
+ * Login page (`auth.urls.login`) — Toolpad calls `authentication.signIn` from the account menu
9
+ * when no session is present, and the sign-in UI is `AdminSignInPage` living there. Default `/login`
10
+ */
11
+ loginUrl?: string;
11
12
  };
12
13
  /**
13
14
  * `NextAppProvider` preconfigured for password-protected admin apps: pass `logoutAction` (e.g.
@@ -15,4 +16,5 @@ export type AdminAppProviderProps = ComponentProps<typeof NextAppProvider> & {
15
16
  * `Admin` session; `authentication`/`session` props still win when provided.
16
17
  */
17
18
  export declare const AdminAppProvider: FC<AdminAppProviderProps>;
19
+ //#endregion
18
20
  //# sourceMappingURL=appProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"appProvider.d.ts","sourceRoot":"","sources":["../../src/admin/appProvider.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,KAAK,cAAc,EAAE,KAAK,EAAE,EAAiB,MAAM,OAAO,CAAC;AAG3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,eAAe,CAAC,GAAG;IACzE,2FAA2F;IAC3F,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAyBrD,CAAC"}
1
+ {"version":3,"file":"appProvider.d.ts","names":[],"sources":["../../src/admin/appProvider.tsx"],"mappings":";;;YAQY,wBAAwB,sBAAsB;;EAEtD,qBAAqB;;;;;EAKrB;;;;;;;qBAUS,kBAAkB,GAAG"}
@@ -4,13 +4,13 @@ import { jsx } from "react/jsx-runtime";
4
4
  import { NextAppProvider } from "@toolpad/core/nextjs";
5
5
  import { useRouter } from "next/navigation";
6
6
  //#region src/admin/appProvider.tsx
7
- var DEFAULT_SESSION = { user: { name: "Admin" } };
7
+ const DEFAULT_SESSION = { user: { name: "Admin" } };
8
8
  /**
9
9
  * `NextAppProvider` preconfigured for password-protected admin apps: pass `logoutAction` (e.g.
10
10
  * `auth.logout` re-exported from a `'use server'` file) to get a sign-out button with a default
11
11
  * `Admin` session; `authentication`/`session` props still win when provided.
12
12
  */
13
- var AdminAppProvider = memo(function AdminAppProvider({ logoutAction, loginUrl = "/login", authentication, session, ...props }) {
13
+ const AdminAppProvider = memo(function AdminAppProvider({ logoutAction, loginUrl = "/login", authentication, session, ...props }) {
14
14
  const router = useRouter();
15
15
  const defaultAuthentication = useMemo(() => logoutAction && {
16
16
  signIn: () => router.push(loginUrl),
@@ -1 +1 @@
1
- {"version":3,"file":"appProvider.js","names":[],"sources":["../../src/admin/appProvider.tsx"],"sourcesContent":["'use client';\n\nimport React, { type ComponentProps, type FC, memo, useMemo } from 'react';\n\nimport { type Authentication, type Session } from '@toolpad/core/AppProvider';\nimport { NextAppProvider } from '@toolpad/core/nextjs';\nimport { useRouter } from 'next/navigation';\n\nexport type AdminAppProviderProps = ComponentProps<typeof NextAppProvider> & {\n /** Server action that destroys the session, wired into Toolpad `authentication.signOut` */\n logoutAction?: () => Promise<void>;\n /**\n * Login page (`auth.urls.login`) — Toolpad calls `authentication.signIn` from the account menu\n * when no session is present, and the sign-in UI is `AdminSignInPage` living there. Default `/login`\n */\n loginUrl?: string;\n};\n\nconst DEFAULT_SESSION: Session = { user: { name: 'Admin' } };\n\n/**\n * `NextAppProvider` preconfigured for password-protected admin apps: pass `logoutAction` (e.g.\n * `auth.logout` re-exported from a `'use server'` file) to get a sign-out button with a default\n * `Admin` session; `authentication`/`session` props still win when provided.\n */\nexport const AdminAppProvider: FC<AdminAppProviderProps> = memo(function AdminAppProvider({\n logoutAction,\n loginUrl = '/login',\n authentication,\n session,\n ...props\n}) {\n const router = useRouter();\n\n const defaultAuthentication = useMemo<Authentication | undefined>(\n () =>\n logoutAction && {\n signIn: () => router.push(loginUrl), // the login page renders AdminSignInPage\n signOut: () => void logoutAction(),\n },\n [logoutAction, loginUrl, router],\n );\n\n return (\n <NextAppProvider\n authentication={authentication ?? defaultAuthentication}\n session={session ?? (logoutAction ? DEFAULT_SESSION : undefined)}\n {...props}\n />\n );\n});\n"],"mappings":";;;;;;AAkBA,IAAM,kBAA2B,EAAE,MAAM,EAAE,MAAM,QAAQ,EAAE;;;;;;AAO3D,IAAa,mBAA8C,KAAK,SAAS,iBAAiB,EACtF,cACA,WAAW,UACX,gBACA,SACA,GAAG,SACJ;CACC,MAAM,SAAS,UAAU;CAEzB,MAAM,wBAAwB,cAEtB,gBAAgB;EACZ,cAAc,OAAO,KAAK,QAAQ;EAClC,eAAe,KAAK,aAAa;CACrC,GACJ;EAAC;EAAc;EAAU;CAAM,CACnC;CAEA,OACI,oBAAC,iBAAD;EACI,gBAAgB,kBAAkB;EAClC,SAAS,YAAY,eAAe,kBAAkB,KAAA;EACtD,GAAI;CACP,CAAA;AAET,CAAC"}
1
+ {"version":3,"file":"appProvider.js","names":[],"sources":["../../src/admin/appProvider.tsx"],"sourcesContent":["'use client';\n\nimport React, { type ComponentProps, type FC, memo, useMemo } from 'react';\n\nimport { type Authentication, type Session } from '@toolpad/core/AppProvider';\nimport { NextAppProvider } from '@toolpad/core/nextjs';\nimport { useRouter } from 'next/navigation';\n\nexport type AdminAppProviderProps = ComponentProps<typeof NextAppProvider> & {\n /** Server action that destroys the session, wired into Toolpad `authentication.signOut` */\n logoutAction?: () => Promise<void>;\n /**\n * Login page (`auth.urls.login`) — Toolpad calls `authentication.signIn` from the account menu\n * when no session is present, and the sign-in UI is `AdminSignInPage` living there. Default `/login`\n */\n loginUrl?: string;\n};\n\nconst DEFAULT_SESSION: Session = { user: { name: 'Admin' } };\n\n/**\n * `NextAppProvider` preconfigured for password-protected admin apps: pass `logoutAction` (e.g.\n * `auth.logout` re-exported from a `'use server'` file) to get a sign-out button with a default\n * `Admin` session; `authentication`/`session` props still win when provided.\n */\nexport const AdminAppProvider: FC<AdminAppProviderProps> = memo(function AdminAppProvider({\n logoutAction,\n loginUrl = '/login',\n authentication,\n session,\n ...props\n}) {\n const router = useRouter();\n\n const defaultAuthentication = useMemo<Authentication | undefined>(\n () =>\n logoutAction && {\n signIn: () => router.push(loginUrl), // the login page renders AdminSignInPage\n signOut: () => void logoutAction(),\n },\n [logoutAction, loginUrl, router],\n );\n\n return (\n <NextAppProvider\n authentication={authentication ?? defaultAuthentication}\n session={session ?? (logoutAction ? DEFAULT_SESSION : undefined)}\n {...props}\n />\n );\n});\n"],"mappings":";;;;;;AAkBA,MAAM,kBAA2B,EAAE,MAAM,EAAE,MAAM,QAAQ,EAAE;;;;;;AAO3D,MAAa,mBAA8C,KAAK,SAAS,iBAAiB,EACtF,cACA,WAAW,UACX,gBACA,SACA,GAAG,SACJ;CACC,MAAM,SAAS,UAAU;CAEzB,MAAM,wBAAwB,cAEtB,gBAAgB;EACZ,cAAc,OAAO,KAAK,QAAQ;EAClC,eAAe,KAAK,aAAa;CACrC,GACJ;EAAC;EAAc;EAAU;CAAM,CACnC;CAEA,OACI,oBAAC,iBAAD;EACI,gBAAgB,kBAAkB;EAClC,SAAS,YAAY,eAAe,kBAAkB,KAAA;EACtD,GAAI;CACP,CAAA;AAET,CAAC"}
@@ -1,8 +1,10 @@
1
- import { ComponentProps, FC } from 'react';
2
- import { DashboardLayout } from '@toolpad/core/DashboardLayout';
1
+ import { ComponentProps, FC } from "react";
2
+ import { DashboardLayout } from "@toolpad/core/DashboardLayout";
3
+ //#region src/admin/dashboardLayout.d.ts
3
4
  export type AdminDashboardLayoutProps = ComponentProps<typeof DashboardLayout> & {
4
- /** Wrap children in Toolpad `PageContainer`, default true */
5
- pageContainer?: boolean;
5
+ /** Wrap children in Toolpad `PageContainer`, default true */
6
+ pageContainer?: boolean;
6
7
  };
7
8
  export declare const AdminDashboardLayout: FC<AdminDashboardLayoutProps>;
9
+ //#endregion
8
10
  //# sourceMappingURL=dashboardLayout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboardLayout.d.ts","sourceRoot":"","sources":["../../src/admin/dashboardLayout.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,KAAK,cAAc,EAAE,KAAK,EAAE,EAAQ,MAAM,OAAO,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC,OAAO,eAAe,CAAC,GAAG;IAC7E,6DAA6D;IAC7D,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAKF,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CAU7D,CAAC"}
1
+ {"version":3,"file":"dashboardLayout.d.ts","names":[],"sources":["../../src/admin/dashboardLayout.tsx"],"mappings":";;;YAOY,4BAA4B,sBAAsB;;EAE1D;;qBAMS,sBAAsB,GAAG"}
@@ -4,7 +4,7 @@ import { jsx } from "react/jsx-runtime";
4
4
  import { DashboardLayout } from "@toolpad/core/DashboardLayout";
5
5
  import { PageContainer } from "@toolpad/core/PageContainer";
6
6
  //#region src/admin/dashboardLayout.tsx
7
- var AdminDashboardLayout = memo(function AdminDashboardLayout({ children, pageContainer = true, ...props }) {
7
+ const AdminDashboardLayout = memo(function AdminDashboardLayout({ children, pageContainer = true, ...props }) {
8
8
  return /* @__PURE__ */ jsx(DashboardLayout, {
9
9
  defaultSidebarCollapsed: true,
10
10
  ...props,
@@ -1 +1 @@
1
- {"version":3,"file":"dashboardLayout.js","names":[],"sources":["../../src/admin/dashboardLayout.tsx"],"sourcesContent":["'use client';\n\nimport React, { type ComponentProps, type FC, memo } from 'react';\n\nimport { DashboardLayout } from '@toolpad/core/DashboardLayout';\nimport { PageContainer } from '@toolpad/core/PageContainer';\n\nexport type AdminDashboardLayoutProps = ComponentProps<typeof DashboardLayout> & {\n /** Wrap children in Toolpad `PageContainer`, default true */\n pageContainer?: boolean;\n};\n\n// Client wrapper is mandatory: @toolpad/core ships some DashboardLayout modules without\n// 'use client' banners (AppTitle, DashboardHeader — verified still missing in 0.16), which crash\n// when evaluated in the server graph. Re-check on Toolpad upgrades.\nexport const AdminDashboardLayout: FC<AdminDashboardLayoutProps> = memo(function AdminDashboardLayout({\n children,\n pageContainer = true,\n ...props\n}) {\n return (\n <DashboardLayout defaultSidebarCollapsed {...props}>\n {pageContainer ? <PageContainer>{children}</PageContainer> : children}\n </DashboardLayout>\n );\n});\n"],"mappings":";;;;;;AAeA,IAAa,uBAAsD,KAAK,SAAS,qBAAqB,EAClG,UACA,gBAAgB,MAChB,GAAG,SACJ;CACC,OACI,oBAAC,iBAAD;EAAiB,yBAAA;EAAwB,GAAI;EACxC,UAAA,gBAAgB,oBAAC,eAAD,EAAgB,SAAwB,CAAA,IAAI;CAChD,CAAA;AAEzB,CAAC"}
1
+ {"version":3,"file":"dashboardLayout.js","names":[],"sources":["../../src/admin/dashboardLayout.tsx"],"sourcesContent":["'use client';\n\nimport React, { type ComponentProps, type FC, memo } from 'react';\n\nimport { DashboardLayout } from '@toolpad/core/DashboardLayout';\nimport { PageContainer } from '@toolpad/core/PageContainer';\n\nexport type AdminDashboardLayoutProps = ComponentProps<typeof DashboardLayout> & {\n /** Wrap children in Toolpad `PageContainer`, default true */\n pageContainer?: boolean;\n};\n\n// Client wrapper is mandatory: @toolpad/core ships some DashboardLayout modules without\n// 'use client' banners (AppTitle, DashboardHeader — verified still missing in 0.16), which crash\n// when evaluated in the server graph. Re-check on Toolpad upgrades.\nexport const AdminDashboardLayout: FC<AdminDashboardLayoutProps> = memo(function AdminDashboardLayout({\n children,\n pageContainer = true,\n ...props\n}) {\n return (\n <DashboardLayout defaultSidebarCollapsed {...props}>\n {pageContainer ? <PageContainer>{children}</PageContainer> : children}\n </DashboardLayout>\n );\n});\n"],"mappings":";;;;;;AAeA,MAAa,uBAAsD,KAAK,SAAS,qBAAqB,EAClG,UACA,gBAAgB,MAChB,GAAG,SACJ;CACC,OACI,oBAAC,iBAAD;EAAiB,yBAAA;EAAwB,GAAI;EACxC,UAAA,gBAAgB,oBAAC,eAAD,EAAgB,SAAwB,CAAA,IAAI;CAChD,CAAA;AAEzB,CAAC"}
@@ -1,4 +1,4 @@
1
- export * from './appProvider.js';
2
- export * from './dashboardLayout.js';
3
- export * from './signInPage.js';
4
- //# sourceMappingURL=index.d.ts.map
1
+ import { AdminAppProvider, AdminAppProviderProps } from "./appProvider.js";
2
+ import { AdminDashboardLayout, AdminDashboardLayoutProps } from "./dashboardLayout.js";
3
+ import { AdminSignInPage, AdminSignInPageProps } from "./signInPage.js";
4
+ export { AdminAppProvider, AdminAppProviderProps, AdminDashboardLayout, AdminDashboardLayoutProps, AdminSignInPage, AdminSignInPageProps };
@@ -1,22 +1,25 @@
1
- import { ComponentProps, FC } from 'react';
2
- import { PasswordAuth } from '@kirill.konshin/auth';
3
- import { SignInPage } from '@toolpad/core/SignInPage';
1
+ import { ComponentProps, FC } from "react";
2
+ import { SignInPage } from "@toolpad/core/SignInPage";
3
+ import { PasswordAuth } from "@kirill.konshin/auth";
4
+ //#region src/admin/signInPage.d.ts
4
5
  type SignInPageProps = ComponentProps<typeof SignInPage>;
5
- export type AdminSignInPageProps = Omit<SignInPageProps, 'signIn'> & {
6
- /** `auth.loginFormAction` from `@kirill.konshin/auth`, re-exported from a `'use server'` file */
7
- loginAction: PasswordAuth['loginFormAction'];
8
- /** Pass `auth.isConfigured()` to render setup instructions instead of the form, default true */
9
- isConfigured?: boolean;
10
- /** Subtitle shown when not configured */
11
- notConfiguredSubtitle?: string;
12
- /** Sanitized return URL (`auth.getState(await searchParams)`), threaded into the login form */
13
- state?: string;
6
+ export type AdminSignInPageProps = Omit<SignInPageProps, "signIn"> & {
7
+ /** `auth.loginFormAction` from `@kirill.konshin/auth`, re-exported from a `'use server'` file */
8
+ loginAction: PasswordAuth["loginFormAction"];
9
+ /** Pass `auth.isConfigured()` to render setup instructions instead of the form, default true */
10
+ isConfigured?: boolean;
11
+ /** Subtitle shown when not configured */
12
+ notConfiguredSubtitle?: string;
13
+ /** Sanitized return URL (`auth.getState(await searchParams)`), threaded into the login form */
14
+ state?: string;
14
15
  };
15
16
  /**
16
17
  * Toolpad `SignInPage` preconfigured for the password-only login of `@kirill.konshin/auth`: single
17
18
  * credentials provider, no email/rememberMe fields, errors surfaced through the form. On success
18
- * `loginAction` redirects (handled by Next.js), on failure its message is shown.
19
+ * `loginAction` redirects (handled by Next.js) and the form stays busy until the next page replaces it,
20
+ * on failure its message is shown.
19
21
  */
20
22
  export declare const AdminSignInPage: FC<AdminSignInPageProps>;
23
+ //#endregion
21
24
  export {};
22
25
  //# sourceMappingURL=signInPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signInPage.d.ts","sourceRoot":"","sources":["../../src/admin/signInPage.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,KAAK,cAAc,EAAE,KAAK,EAAE,EAAqB,MAAM,OAAO,CAAC;AAE/E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,KAAK,eAAe,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC;AAEzD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;IACjE,iGAAiG;IACjG,WAAW,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC7C,gGAAgG;IAChG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+FAA+F;IAC/F,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAcF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CA2DnD,CAAC"}
1
+ {"version":3,"file":"signInPage.d.ts","names":[],"sources":["../../src/admin/signInPage.tsx"],"mappings":";;;;KAUK,kBAAkB,sBAAsB;YAEjC,uBAAuB,KAAK;;EAEpC,aAAa;;EAEb;;EAEA;;EAEA;;;;;;;;qBA+BS,iBAAiB,GAAG"}
@@ -1,26 +1,42 @@
1
1
  "use client";
2
2
  import { memo, useCallback } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
+ import { unstable_rethrow } from "next/navigation";
4
5
  import { formLabelClasses } from "@mui/material/FormLabel";
5
6
  import { SignInPage } from "@toolpad/core/SignInPage";
6
7
  //#region src/admin/signInPage.tsx
7
- var STATE_PARAM = "state";
8
- var DEFAULT_PROVIDERS = [{
8
+ const STATE_PARAM = "state";
9
+ const DEFAULT_PROVIDERS = [{
9
10
  id: "credentials",
10
11
  name: "password"
11
12
  }];
12
- var NOT_CONFIGURED_SUBTITLE = "Set ADMIN_PASSWORD and a SESSION_SECRET of at least 32 characters, then restart.";
13
+ const NOT_CONFIGURED_SUBTITLE = "Set ADMIN_PASSWORD and a SESSION_SECRET of at least 32 characters, then restart.";
14
+ /** Whether Next.js handles `error` itself, like the redirect it rejects a redirecting Server Action call with. */
15
+ const isNextNavigation = (error) => {
16
+ try {
17
+ unstable_rethrow(error);
18
+ return false;
19
+ } catch {
20
+ return true;
21
+ }
22
+ };
13
23
  /**
14
24
  * Toolpad `SignInPage` preconfigured for the password-only login of `@kirill.konshin/auth`: single
15
25
  * credentials provider, no email/rememberMe fields, errors surfaced through the form. On success
16
- * `loginAction` redirects (handled by Next.js), on failure its message is shown.
26
+ * `loginAction` redirects (handled by Next.js) and the form stays busy until the next page replaces it,
27
+ * on failure its message is shown.
17
28
  */
18
- var AdminSignInPage = memo(function AdminSignInPage({ loginAction, isConfigured = true, notConfiguredSubtitle = NOT_CONFIGURED_SUBTITLE, providers = DEFAULT_PROVIDERS, state, localeText, slots, slotProps, ...props }) {
29
+ const AdminSignInPage = memo(function AdminSignInPage({ loginAction, isConfigured = true, notConfiguredSubtitle = NOT_CONFIGURED_SUBTITLE, providers = DEFAULT_PROVIDERS, state, localeText, slots, slotProps, ...props }) {
19
30
  const signIn = useCallback(async (_provider, formData) => {
20
31
  if (!(formData instanceof FormData)) return { error: "Password is required" };
21
32
  if (state) formData.set(STATE_PARAM, state);
22
- const error = await loginAction(null, formData);
23
- return error ? { error } : {};
33
+ try {
34
+ const error = await loginAction(null, formData);
35
+ return error ? { error } : {};
36
+ } catch (error) {
37
+ if (isNextNavigation(error)) return new Promise(() => {});
38
+ throw error;
39
+ }
24
40
  }, [loginAction, state]);
25
41
  return /* @__PURE__ */ jsx(SignInPage, {
26
42
  signIn,
@@ -1 +1 @@
1
- {"version":3,"file":"signInPage.js","names":[],"sources":["../../src/admin/signInPage.tsx"],"sourcesContent":["'use client';\n\nimport React, { type ComponentProps, type FC, memo, useCallback } from 'react';\n\nimport { type PasswordAuth } from '@kirill.konshin/auth';\nimport type { STATE_PARAM as StateParam } from '@kirill.konshin/auth/client';\nimport { formLabelClasses } from '@mui/material/FormLabel';\nimport { SignInPage } from '@toolpad/core/SignInPage';\n\ntype SignInPageProps = ComponentProps<typeof SignInPage>;\n\nexport type AdminSignInPageProps = Omit<SignInPageProps, 'signIn'> & {\n /** `auth.loginFormAction` from `@kirill.konshin/auth`, re-exported from a `'use server'` file */\n loginAction: PasswordAuth['loginFormAction'];\n /** Pass `auth.isConfigured()` to render setup instructions instead of the form, default true */\n isConfigured?: boolean;\n /** Subtitle shown when not configured */\n notConfiguredSubtitle?: string;\n /** Sanitized return URL (`auth.getState(await searchParams)`), threaded into the login form */\n state?: string;\n};\n\n/*\n * Inlined, NOT imported at runtime: `@kirill.konshin/auth` is an OPTIONAL peer, so importing\n * `@kirill.konshin/auth/client` here would make the whole `/admin` entry unresolvable in apps that\n * only use `AdminAppProvider`/`AdminDashboardLayout` (the barrel re-exports this module). The\n * annotation is a compile-time guard: it stops resolving the day auth renames the param.\n */\nconst STATE_PARAM: typeof StateParam = 'state';\n\nconst DEFAULT_PROVIDERS: SignInPageProps['providers'] = [{ id: 'credentials', name: 'password' }];\n\nconst NOT_CONFIGURED_SUBTITLE = 'Set ADMIN_PASSWORD and a SESSION_SECRET of at least 32 characters, then restart.';\n\n/**\n * Toolpad `SignInPage` preconfigured for the password-only login of `@kirill.konshin/auth`: single\n * credentials provider, no email/rememberMe fields, errors surfaced through the form. On success\n * `loginAction` redirects (handled by Next.js), on failure its message is shown.\n */\nexport const AdminSignInPage: FC<AdminSignInPageProps> = memo(function AdminSignInPage({\n loginAction,\n isConfigured = true,\n notConfiguredSubtitle = NOT_CONFIGURED_SUBTITLE,\n providers = DEFAULT_PROVIDERS,\n state,\n localeText,\n slots,\n slotProps,\n ...props\n}) {\n const signIn = useCallback<NonNullable<SignInPageProps['signIn']>>(\n async (_provider, formData) => {\n if (!(formData instanceof FormData)) return { error: 'Password is required' };\n // thread the return URL through the form only — never store it in the session,\n // multiple tabs logging in concurrently would clash\n if (state) formData.set(STATE_PARAM, state);\n const error = await loginAction(null, formData);\n return error ? { error } : {};\n },\n [loginAction, state],\n );\n\n return (\n <SignInPage\n signIn={signIn}\n providers={isConfigured ? providers : []}\n localeText={\n isConfigured\n ? localeText\n : {\n signInTitle: 'Authentication needs configuration',\n signInSubtitle: notConfiguredSubtitle,\n ...localeText,\n }\n }\n slots={{\n emailField: () => null,\n rememberMe: () => null,\n subtitle: () => null,\n ...slots,\n }}\n slotProps={{\n ...slotProps,\n // FIXME https://github.com/mui/toolpad/issues/4572 — still relevant in 0.16:\n // browser validation popups fight the server-side errors (noValidate is settable\n // declaratively through the form slot) and the password label renders misaligned;\n // re-check on Toolpad upgrades\n form: { noValidate: true, ...slotProps?.form },\n passwordField: {\n autoFocus: true,\n sx: { [`& .${formLabelClasses.root}`]: { top: '-2px' } },\n ...slotProps?.passwordField,\n },\n submitButton: { variant: 'contained', ...slotProps?.submitButton },\n }}\n {...props}\n />\n );\n});\n"],"mappings":";;;;;;AA4BA,IAAM,cAAiC;AAEvC,IAAM,oBAAkD,CAAC;CAAE,IAAI;CAAe,MAAM;AAAW,CAAC;AAEhG,IAAM,0BAA0B;;;;;;AAOhC,IAAa,kBAA4C,KAAK,SAAS,gBAAgB,EACnF,aACA,eAAe,MACf,wBAAwB,yBACxB,YAAY,mBACZ,OACA,YACA,OACA,WACA,GAAG,SACJ;CACC,MAAM,SAAS,YACX,OAAO,WAAW,aAAa;EAC3B,IAAI,EAAE,oBAAoB,WAAW,OAAO,EAAE,OAAO,uBAAuB;EAG5E,IAAI,OAAO,SAAS,IAAI,aAAa,KAAK;EAC1C,MAAM,QAAQ,MAAM,YAAY,MAAM,QAAQ;EAC9C,OAAO,QAAQ,EAAE,MAAM,IAAI,CAAC;CAChC,GACA,CAAC,aAAa,KAAK,CACvB;CAEA,OACI,oBAAC,YAAD;EACY;EACR,WAAW,eAAe,YAAY,CAAC;EACvC,YACI,eACM,aACA;GACI,aAAa;GACb,gBAAgB;GAChB,GAAG;EACP;EAEV,OAAO;GACH,kBAAkB;GAClB,kBAAkB;GAClB,gBAAgB;GAChB,GAAG;EACP;EACA,WAAW;GACP,GAAG;GAKH,MAAM;IAAE,YAAY;IAAM,GAAG,WAAW;GAAK;GAC7C,eAAe;IACX,WAAW;IACX,IAAI,GAAG,MAAM,iBAAiB,SAAS,EAAE,KAAK,OAAO,EAAE;IACvD,GAAG,WAAW;GAClB;GACA,cAAc;IAAE,SAAS;IAAa,GAAG,WAAW;GAAa;EACrE;EACA,GAAI;CACP,CAAA;AAET,CAAC"}
1
+ {"version":3,"file":"signInPage.js","names":[],"sources":["../../src/admin/signInPage.tsx"],"sourcesContent":["'use client';\n\nimport React, { type ComponentProps, type FC, memo, useCallback } from 'react';\n\nimport { type PasswordAuth } from '@kirill.konshin/auth';\nimport type { STATE_PARAM as StateParam } from '@kirill.konshin/auth/client';\nimport { formLabelClasses } from '@mui/material/FormLabel';\nimport { SignInPage } from '@toolpad/core/SignInPage';\nimport { unstable_rethrow } from 'next/navigation';\n\ntype SignInPageProps = ComponentProps<typeof SignInPage>;\n\nexport type AdminSignInPageProps = Omit<SignInPageProps, 'signIn'> & {\n /** `auth.loginFormAction` from `@kirill.konshin/auth`, re-exported from a `'use server'` file */\n loginAction: PasswordAuth['loginFormAction'];\n /** Pass `auth.isConfigured()` to render setup instructions instead of the form, default true */\n isConfigured?: boolean;\n /** Subtitle shown when not configured */\n notConfiguredSubtitle?: string;\n /** Sanitized return URL (`auth.getState(await searchParams)`), threaded into the login form */\n state?: string;\n};\n\n/*\n * Inlined, NOT imported at runtime: `@kirill.konshin/auth` is an OPTIONAL peer, so importing\n * `@kirill.konshin/auth/client` here would make the whole `/admin` entry unresolvable in apps that\n * only use `AdminAppProvider`/`AdminDashboardLayout` (the barrel re-exports this module). The\n * annotation is a compile-time guard: it stops resolving the day auth renames the param.\n */\nconst STATE_PARAM: typeof StateParam = 'state';\n\nconst DEFAULT_PROVIDERS: SignInPageProps['providers'] = [{ id: 'credentials', name: 'password' }];\n\nconst NOT_CONFIGURED_SUBTITLE = 'Set ADMIN_PASSWORD and a SESSION_SECRET of at least 32 characters, then restart.';\n\n/** Whether Next.js handles `error` itself, like the redirect it rejects a redirecting Server Action call with. */\nconst isNextNavigation = (error: unknown): boolean => {\n try {\n unstable_rethrow(error);\n return false;\n } catch {\n return true;\n }\n};\n\n/**\n * Toolpad `SignInPage` preconfigured for the password-only login of `@kirill.konshin/auth`: single\n * credentials provider, no email/rememberMe fields, errors surfaced through the form. On success\n * `loginAction` redirects (handled by Next.js) and the form stays busy until the next page replaces it,\n * on failure its message is shown.\n */\nexport const AdminSignInPage: FC<AdminSignInPageProps> = memo(function AdminSignInPage({\n loginAction,\n isConfigured = true,\n notConfiguredSubtitle = NOT_CONFIGURED_SUBTITLE,\n providers = DEFAULT_PROVIDERS,\n state,\n localeText,\n slots,\n slotProps,\n ...props\n}) {\n const signIn = useCallback<NonNullable<SignInPageProps['signIn']>>(\n async (_provider, formData) => {\n if (!(formData instanceof FormData)) return { error: 'Password is required' };\n // thread the return URL through the form only — never store it in the session,\n // multiple tabs logging in concurrently would clash\n if (state) formData.set(STATE_PARAM, state);\n try {\n const error = await loginAction(null, formData);\n return error ? { error } : {};\n } catch (error) {\n // Next.js rejects the call with its redirect error while it navigates; Toolpad's submit\n // handler has no catch, so stay pending instead of leaving an unhandled rejection\n if (isNextNavigation(error)) return new Promise<never>(() => {});\n throw error;\n }\n },\n [loginAction, state],\n );\n\n return (\n <SignInPage\n signIn={signIn}\n providers={isConfigured ? providers : []}\n localeText={\n isConfigured\n ? localeText\n : {\n signInTitle: 'Authentication needs configuration',\n signInSubtitle: notConfiguredSubtitle,\n ...localeText,\n }\n }\n slots={{\n emailField: () => null,\n rememberMe: () => null,\n subtitle: () => null,\n ...slots,\n }}\n slotProps={{\n ...slotProps,\n // FIXME https://github.com/mui/toolpad/issues/4572 — still relevant in 0.16:\n // browser validation popups fight the server-side errors (noValidate is settable\n // declaratively through the form slot) and the password label renders misaligned;\n // re-check on Toolpad upgrades\n form: { noValidate: true, ...slotProps?.form },\n passwordField: {\n autoFocus: true,\n sx: { [`& .${formLabelClasses.root}`]: { top: '-2px' } },\n ...slotProps?.passwordField,\n },\n submitButton: { variant: 'contained', ...slotProps?.submitButton },\n }}\n {...props}\n />\n );\n});\n"],"mappings":";;;;;;;AA6BA,MAAM,cAAiC;AAEvC,MAAM,oBAAkD,CAAC;CAAE,IAAI;CAAe,MAAM;AAAW,CAAC;AAEhG,MAAM,0BAA0B;;AAGhC,MAAM,oBAAoB,UAA4B;CAClD,IAAI;EACA,iBAAiB,KAAK;EACtB,OAAO;CACX,QAAQ;EACJ,OAAO;CACX;AACJ;;;;;;;AAQA,MAAa,kBAA4C,KAAK,SAAS,gBAAgB,EACnF,aACA,eAAe,MACf,wBAAwB,yBACxB,YAAY,mBACZ,OACA,YACA,OACA,WACA,GAAG,SACJ;CACC,MAAM,SAAS,YACX,OAAO,WAAW,aAAa;EAC3B,IAAI,EAAE,oBAAoB,WAAW,OAAO,EAAE,OAAO,uBAAuB;EAG5E,IAAI,OAAO,SAAS,IAAI,aAAa,KAAK;EAC1C,IAAI;GACA,MAAM,QAAQ,MAAM,YAAY,MAAM,QAAQ;GAC9C,OAAO,QAAQ,EAAE,MAAM,IAAI,CAAC;EAChC,SAAS,OAAO;GAGZ,IAAI,iBAAiB,KAAK,GAAG,OAAO,IAAI,cAAqB,CAAC,CAAC;GAC/D,MAAM;EACV;CACJ,GACA,CAAC,aAAa,KAAK,CACvB;CAEA,OACI,oBAAC,YAAD;EACY;EACR,WAAW,eAAe,YAAY,CAAC;EACvC,YACI,eACM,aACA;GACI,aAAa;GACb,gBAAgB;GAChB,GAAG;EACP;EAEV,OAAO;GACH,kBAAkB;GAClB,kBAAkB;GAClB,gBAAgB;GAChB,GAAG;EACP;EACA,WAAW;GACP,GAAG;GAKH,MAAM;IAAE,YAAY;IAAM,GAAG,WAAW;GAAK;GAC7C,eAAe;IACX,WAAW;IACX,IAAI,GAAG,MAAM,iBAAiB,SAAS,EAAE,KAAK,OAAO,EAAE;IACvD,GAAG,WAAW;GAClB;GACA,cAAc;IAAE,SAAS;IAAa,GAAG,WAAW;GAAa;EACrE;EACA,GAAI;CACP,CAAA;AAET,CAAC"}
@@ -1,5 +1,7 @@
1
- import { FC } from 'react';
2
- import { BoxProps } from '@mui/material/Box';
1
+ import { FC } from "react";
2
+ import { BoxProps } from "@mui/material/Box";
3
+ //#region src/appBarOffset.d.ts
3
4
  export type AppBarOffsetProps = BoxProps;
4
5
  export declare const AppBarOffset: FC<AppBarOffsetProps>;
6
+ //#endregion
5
7
  //# sourceMappingURL=appBarOffset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"appBarOffset.d.ts","sourceRoot":"","sources":["../src/appBarOffset.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAQ,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,mBAAmB,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEzC,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAE7C,CAAC"}
1
+ {"version":3,"file":"appBarOffset.d.ts","names":[],"sources":["../src/appBarOffset.tsx"],"mappings":";;;YAIY,oBAAoB;qBAEnB,cAAc,GAAG"}
@@ -2,7 +2,7 @@ import { memo } from "react";
2
2
  import Box from "@mui/material/Box";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/appBarOffset.tsx
5
- var AppBarOffset = memo(function AppBarOffset({ sx, ...props }) {
5
+ const AppBarOffset = memo(function AppBarOffset({ sx, ...props }) {
6
6
  return /* @__PURE__ */ jsx(Box, {
7
7
  ...props,
8
8
  sx: [({ mixins }) => mixins.toolbar, ...Array.isArray(sx) ? sx : [sx]]
@@ -1 +1 @@
1
- {"version":3,"file":"appBarOffset.js","names":[],"sources":["../src/appBarOffset.tsx"],"sourcesContent":["import React, { type FC, memo } from 'react';\n\nimport { type BoxProps, default as Box } from '@mui/material/Box';\n\nexport type AppBarOffsetProps = BoxProps;\n\nexport const AppBarOffset: FC<AppBarOffsetProps> = memo(function AppBarOffset({ sx, ...props }) {\n return <Box {...props} sx={[({ mixins }) => mixins.toolbar, ...(Array.isArray(sx) ? sx : [sx])]} />;\n});\n"],"mappings":";;;;AAMA,IAAa,eAAsC,KAAK,SAAS,aAAa,EAAE,IAAI,GAAG,SAAS;CAC5F,OAAO,oBAAC,KAAD;EAAK,GAAI;EAAO,IAAI,EAAE,EAAE,aAAa,OAAO,SAAS,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE,CAAE;CAAI,CAAA;AACtG,CAAC"}
1
+ {"version":3,"file":"appBarOffset.js","names":[],"sources":["../src/appBarOffset.tsx"],"sourcesContent":["import React, { type FC, memo } from 'react';\n\nimport { type BoxProps, default as Box } from '@mui/material/Box';\n\nexport type AppBarOffsetProps = BoxProps;\n\nexport const AppBarOffset: FC<AppBarOffsetProps> = memo(function AppBarOffset({ sx, ...props }) {\n return <Box {...props} sx={[({ mixins }) => mixins.toolbar, ...(Array.isArray(sx) ? sx : [sx])]} />;\n});\n"],"mappings":";;;;AAMA,MAAa,eAAsC,KAAK,SAAS,aAAa,EAAE,IAAI,GAAG,SAAS;CAC5F,OAAO,oBAAC,KAAD;EAAK,GAAI;EAAO,IAAI,EAAE,EAAE,aAAa,OAAO,SAAS,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE,CAAE;CAAI,CAAA;AACtG,CAAC"}
@@ -1,5 +1,7 @@
1
- import { FC } from 'react';
2
- import { GenericControlProps } from './genericControl.js';
1
+ import { GenericControlProps } from "./genericControl.js";
2
+ import { FC } from "react";
3
+ //#region src/formControlFieldset.d.ts
3
4
  export type FormControlFieldsetProps = GenericControlProps;
4
5
  export declare const FormControlFieldset: FC<FormControlFieldsetProps>;
6
+ //#endregion
5
7
  //# sourceMappingURL=formControlFieldset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formControlFieldset.d.ts","sourceRoot":"","sources":["../src/formControlFieldset.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAQ,MAAM,OAAO,CAAC;AAI7C,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AAE3D,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CAmB3D,CAAC"}
1
+ {"version":3,"file":"formControlFieldset.d.ts","names":[],"sources":["../src/formControlFieldset.tsx"],"mappings":";;;YAMY,2BAA2B;qBAE1B,qBAAqB,GAAG"}
@@ -3,14 +3,11 @@ import { memo } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { inputClasses } from "@mui/material/Input";
5
5
  //#region src/formControlFieldset.tsx
6
- var FormControlFieldset = memo(function FormControlFieldset({ children, sx, ...props }) {
6
+ const FormControlFieldset = memo(function FormControlFieldset({ children, sx, ...props }) {
7
7
  return /* @__PURE__ */ jsx(GenericControl, {
8
8
  ...props,
9
9
  component: "fieldset",
10
- sx: {
11
- ...sx,
12
- [`legend + .${inputClasses.root}`]: { marginTop: 2 }
13
- },
10
+ sx: [...Array.isArray(sx) ? sx : [sx], { [`legend + .${inputClasses.root}`]: { marginTop: 2 } }],
14
11
  children
15
12
  });
16
13
  });
@@ -1 +1 @@
1
- {"version":3,"file":"formControlFieldset.js","names":[],"sources":["../src/formControlFieldset.tsx"],"sourcesContent":["import React, { type FC, memo } from 'react';\n\nimport { inputClasses } from '@mui/material/Input';\n\nimport { GenericControl, type GenericControlProps } from './genericControl';\n\nexport type FormControlFieldsetProps = GenericControlProps;\n\nexport const FormControlFieldset: FC<FormControlFieldsetProps> = memo(function FormControlFieldset({\n children,\n sx,\n ...props\n}) {\n return (\n <GenericControl\n {...props}\n component=\"fieldset\"\n sx={{\n ...sx,\n [`legend + .${inputClasses.root}`]: {\n marginTop: 2, //FIXME 16px, hardcoded from @mui/material/Input/Input.js @ 59\n },\n }}\n >\n {children}\n </GenericControl>\n );\n});\n"],"mappings":";;;;;AAQA,IAAa,sBAAoD,KAAK,SAAS,oBAAoB,EAC/F,UACA,IACA,GAAG,SACJ;CACC,OACI,oBAAC,gBAAD;EACI,GAAI;EACJ,WAAU;EACV,IAAI;GACA,GAAG;IACF,aAAa,aAAa,SAAS,EAChC,WAAW,EACf;EACJ;EAEC;CACW,CAAA;AAExB,CAAC"}
1
+ {"version":3,"file":"formControlFieldset.js","names":[],"sources":["../src/formControlFieldset.tsx"],"sourcesContent":["import React, { type FC, memo } from 'react';\n\nimport { inputClasses } from '@mui/material/Input';\n\nimport { GenericControl, type GenericControlProps } from './genericControl';\n\nexport type FormControlFieldsetProps = GenericControlProps;\n\nexport const FormControlFieldset: FC<FormControlFieldsetProps> = memo(function FormControlFieldset({\n children,\n sx,\n ...props\n}) {\n return (\n <GenericControl\n {...props}\n component=\"fieldset\"\n // `sx` may be an object, a function or an array - MUI merges the array form, later entries win\n sx={[\n ...(Array.isArray(sx) ? sx : [sx]),\n {\n [`legend + .${inputClasses.root}`]: {\n marginTop: 2, //FIXME 16px, hardcoded from @mui/material/Input/Input.js @ 59\n },\n },\n ]}\n >\n {children}\n </GenericControl>\n );\n});\n"],"mappings":";;;;;AAQA,MAAa,sBAAoD,KAAK,SAAS,oBAAoB,EAC/F,UACA,IACA,GAAG,SACJ;CACC,OACI,oBAAC,gBAAD;EACI,GAAI;EACJ,WAAU;EAEV,IAAI,CACA,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE,GAChC,GACK,aAAa,aAAa,SAAS,EAChC,WAAW,EACf,EACJ,CACJ;EAEC;CACW,CAAA;AAExB,CAAC"}
@@ -1,5 +1,7 @@
1
- import { FC } from 'react';
2
- import { InputLabelProps } from '@mui/material/InputLabel';
1
+ import { FC } from "react";
2
+ import { InputLabelProps } from "@mui/material/InputLabel";
3
+ //#region src/formLabelLegend.d.ts
3
4
  export type FormLabelLegendProps = InputLabelProps;
4
5
  export declare const FormLabelLegend: FC<FormLabelLegendProps>;
6
+ //#endregion
5
7
  //# sourceMappingURL=formLabelLegend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formLabelLegend.d.ts","sourceRoot":"","sources":["../src/formLabelLegend.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAQ,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEvF,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAEnD,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAOnD,CAAC"}
1
+ {"version":3,"file":"formLabelLegend.d.ts","names":[],"sources":["../src/formLabelLegend.tsx"],"mappings":";;;YAIY,uBAAuB;qBAEtB,iBAAiB,GAAG"}
@@ -2,7 +2,7 @@ import { memo } from "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import InputLabel from "@mui/material/InputLabel";
4
4
  //#region src/formLabelLegend.tsx
5
- var FormLabelLegend = memo(function FormLabelLegend({ children, ...props }) {
5
+ const FormLabelLegend = memo(function FormLabelLegend({ children, ...props }) {
6
6
  return /* @__PURE__ */ jsx(InputLabel, {
7
7
  ...props,
8
8
  shrink: true,
@@ -1 +1 @@
1
- {"version":3,"file":"formLabelLegend.js","names":[],"sources":["../src/formLabelLegend.tsx"],"sourcesContent":["import React, { type FC, memo } from 'react';\n\nimport { default as InputLabel, type InputLabelProps } from '@mui/material/InputLabel';\n\nexport type FormLabelLegendProps = InputLabelProps;\n\nexport const FormLabelLegend: FC<FormLabelLegendProps> = memo(function FormLabelLegend({ children, ...props }) {\n return (\n // sx={(theme) => theme.typography.caption}\n <InputLabel {...props} shrink={true} component={'legend' as any}>\n {children}\n </InputLabel>\n );\n});\n"],"mappings":";;;;AAMA,IAAa,kBAA4C,KAAK,SAAS,gBAAgB,EAAE,UAAU,GAAG,SAAS;CAC3G,OAEI,oBAAC,YAAD;EAAY,GAAI;EAAO,QAAQ;EAAM,WAAW;EAC3C;CACO,CAAA;AAEpB,CAAC"}
1
+ {"version":3,"file":"formLabelLegend.js","names":[],"sources":["../src/formLabelLegend.tsx"],"sourcesContent":["import React, { type FC, memo } from 'react';\n\nimport { default as InputLabel, type InputLabelProps } from '@mui/material/InputLabel';\n\nexport type FormLabelLegendProps = InputLabelProps;\n\nexport const FormLabelLegend: FC<FormLabelLegendProps> = memo(function FormLabelLegend({ children, ...props }) {\n return (\n // sx={(theme) => theme.typography.caption}\n <InputLabel {...props} shrink={true} component={'legend' as any}>\n {children}\n </InputLabel>\n );\n});\n"],"mappings":";;;;AAMA,MAAa,kBAA4C,KAAK,SAAS,gBAAgB,EAAE,UAAU,GAAG,SAAS;CAC3G,OAEI,oBAAC,YAAD;EAAY,GAAI;EAAO,QAAQ;EAAM,WAAW;EAC3C;CACO,CAAA;AAEpB,CAAC"}
@@ -1,7 +1,9 @@
1
- import { FC } from 'react';
2
- import { FormControlProps } from '@mui/material/FormControl';
1
+ import { FC } from "react";
2
+ import { FormControlProps } from "@mui/material/FormControl";
3
+ //#region src/genericControl.d.ts
3
4
  export type GenericControlProps = FormControlProps & {
4
- children: any;
5
+ children: any;
5
6
  };
6
7
  export declare const GenericControl: FC<GenericControlProps>;
8
+ //#endregion
7
9
  //# sourceMappingURL=genericControl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"genericControl.d.ts","sourceRoot":"","sources":["../src/genericControl.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAQ,MAAM,OAAO,CAAC;AAE7C,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG1F,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG;IAAE,QAAQ,EAAE,GAAG,CAAA;CAAE,CAAC;AAEvE,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CAejD,CAAC"}
1
+ {"version":3,"file":"genericControl.d.ts","names":[],"sources":["../src/genericControl.tsx"],"mappings":";;;YAKY,sBAAsB;EAAqB;;qBAE1C,gBAAgB,GAAG"}
@@ -3,13 +3,10 @@ import { jsx } from "react/jsx-runtime";
3
3
  import { inputClasses } from "@mui/material/Input";
4
4
  import FormControl from "@mui/material/FormControl";
5
5
  //#region src/genericControl.tsx
6
- var GenericControl = memo(function GenericControl({ children, sx, ...props }) {
6
+ const GenericControl = memo(function GenericControl({ children, sx, ...props }) {
7
7
  return /* @__PURE__ */ jsx(FormControl, {
8
8
  variant: "standard",
9
- sx: {
10
- ...sx,
11
- [`& .${inputClasses.root}`]: { "&:before, &:after": { display: "none" } }
12
- },
9
+ sx: [...Array.isArray(sx) ? sx : [sx], { [`& .${inputClasses.root}`]: { "&:before, &:after": { display: "none" } } }],
13
10
  ...props,
14
11
  children
15
12
  });
@@ -1 +1 @@
1
- {"version":3,"file":"genericControl.js","names":[],"sources":["../src/genericControl.tsx"],"sourcesContent":["import React, { type FC, memo } from 'react';\n\nimport { default as FormControl, type FormControlProps } from '@mui/material/FormControl';\nimport { inputClasses } from '@mui/material/Input';\n\nexport type GenericControlProps = FormControlProps & { children: any };\n\nexport const GenericControl: FC<GenericControlProps> = memo(function GenericControl({ children, sx, ...props }) {\n return (\n <FormControl\n variant=\"standard\"\n sx={{\n ...sx,\n [`& .${inputClasses.root}`]: {\n '&:before, &:after': { display: 'none' },\n },\n }}\n {...props}\n >\n {children}\n </FormControl>\n );\n});\n"],"mappings":";;;;;AAOA,IAAa,iBAA0C,KAAK,SAAS,eAAe,EAAE,UAAU,IAAI,GAAG,SAAS;CAC5G,OACI,oBAAC,aAAD;EACI,SAAQ;EACR,IAAI;GACA,GAAG;IACF,MAAM,aAAa,SAAS,EACzB,qBAAqB,EAAE,SAAS,OAAO,EAC3C;EACJ;EACA,GAAI;EAEH;CACQ,CAAA;AAErB,CAAC"}
1
+ {"version":3,"file":"genericControl.js","names":[],"sources":["../src/genericControl.tsx"],"sourcesContent":["import React, { type FC, memo } from 'react';\n\nimport { default as FormControl, type FormControlProps } from '@mui/material/FormControl';\nimport { inputClasses } from '@mui/material/Input';\n\nexport type GenericControlProps = FormControlProps & { children: any };\n\nexport const GenericControl: FC<GenericControlProps> = memo(function GenericControl({ children, sx, ...props }) {\n return (\n <FormControl\n variant=\"standard\"\n // `sx` may be an object, a function or an array - MUI merges the array form, later entries win\n sx={[\n ...(Array.isArray(sx) ? sx : [sx]),\n {\n [`& .${inputClasses.root}`]: {\n '&:before, &:after': { display: 'none' },\n },\n },\n ]}\n {...props}\n >\n {children}\n </FormControl>\n );\n});\n"],"mappings":";;;;;AAOA,MAAa,iBAA0C,KAAK,SAAS,eAAe,EAAE,UAAU,IAAI,GAAG,SAAS;CAC5G,OACI,oBAAC,aAAD;EACI,SAAQ;EAER,IAAI,CACA,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE,GAChC,GACK,MAAM,aAAa,SAAS,EACzB,qBAAqB,EAAE,SAAS,OAAO,EAC3C,EACJ,CACJ;EACA,GAAI;EAEH;CACQ,CAAA;AAErB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,10 @@
1
- export * from './appBarOffset.js';
2
- export * from './formControlFieldset.js';
3
- export * from './formLabelLegend.js';
4
- export * from './genericControl.js';
5
- export * from './readOnly.js';
6
- export * from './admin/index.js';
7
- //# sourceMappingURL=index.d.ts.map
1
+ import { AdminAppProvider, AdminAppProviderProps } from "./admin/appProvider.js";
2
+ import { AdminDashboardLayout, AdminDashboardLayoutProps } from "./admin/dashboardLayout.js";
3
+ import { AdminSignInPage, AdminSignInPageProps } from "./admin/signInPage.js";
4
+ import "./admin/index.js";
5
+ import { AppBarOffset, AppBarOffsetProps } from "./appBarOffset.js";
6
+ import { GenericControl, GenericControlProps } from "./genericControl.js";
7
+ import { FormControlFieldset, FormControlFieldsetProps } from "./formControlFieldset.js";
8
+ import { FormLabelLegend, FormLabelLegendProps } from "./formLabelLegend.js";
9
+ import { ReadOnly, ReadOnlyProps } from "./readOnly.js";
10
+ export { AdminAppProvider, AdminAppProviderProps, AdminDashboardLayout, AdminDashboardLayoutProps, AdminSignInPage, AdminSignInPageProps, AppBarOffset, AppBarOffsetProps, FormControlFieldset, FormControlFieldsetProps, FormLabelLegend, FormLabelLegendProps, GenericControl, GenericControlProps, ReadOnly, ReadOnlyProps };
@@ -1,7 +1,9 @@
1
- import { FC } from 'react';
2
- import { InputProps } from '@mui/material/Input';
1
+ import { FC } from "react";
2
+ import { InputProps } from "@mui/material/Input";
3
+ //#region src/readOnly.d.ts
3
4
  export type ReadOnlyProps = InputProps & {
4
- children: any;
5
+ children: any;
5
6
  };
6
7
  export declare const ReadOnly: FC<ReadOnlyProps>;
8
+ //#endregion
7
9
  //# sourceMappingURL=readOnly.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"readOnly.d.ts","sourceRoot":"","sources":["../src/readOnly.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAQ,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAExE,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG;IAAE,QAAQ,EAAE,GAAG,CAAA;CAAE,CAAC;AAE3D,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAErC,CAAC"}
1
+ {"version":3,"file":"readOnly.d.ts","names":[],"sources":["../src/readOnly.tsx"],"mappings":";;;YAIY,gBAAgB;EAAe;;qBAE9B,UAAU,GAAG"}
package/dist/readOnly.js CHANGED
@@ -2,7 +2,7 @@ import { memo } from "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import Input from "@mui/material/Input";
4
4
  //#region src/readOnly.tsx
5
- var ReadOnly = memo(function ReadOnly({ children, inputProps, ...props }) {
5
+ const ReadOnly = memo(function ReadOnly({ children, inputProps, ...props }) {
6
6
  return /* @__PURE__ */ jsx(Input, {
7
7
  ...props,
8
8
  inputComponent: "div",
@@ -1 +1 @@
1
- {"version":3,"file":"readOnly.js","names":[],"sources":["../src/readOnly.tsx"],"sourcesContent":["import React, { type FC, memo } from 'react';\n\nimport { default as Input, type InputProps } from '@mui/material/Input';\n\nexport type ReadOnlyProps = InputProps & { children: any };\n\nexport const ReadOnly: FC<ReadOnlyProps> = memo(function ReadOnly({ children, inputProps, ...props }) {\n return <Input {...props} inputComponent={'div' as any} inputProps={{ ...inputProps, children }}></Input>;\n});\n"],"mappings":";;;;AAMA,IAAa,WAA8B,KAAK,SAAS,SAAS,EAAE,UAAU,YAAY,GAAG,SAAS;CAClG,OAAO,oBAAC,OAAD;EAAO,GAAI;EAAO,gBAAgB;EAAc,YAAY;GAAE,GAAG;GAAY;EAAS;CAAU,CAAA;AAC3G,CAAC"}
1
+ {"version":3,"file":"readOnly.js","names":[],"sources":["../src/readOnly.tsx"],"sourcesContent":["import React, { type FC, memo } from 'react';\n\nimport { default as Input, type InputProps } from '@mui/material/Input';\n\nexport type ReadOnlyProps = InputProps & { children: any };\n\nexport const ReadOnly: FC<ReadOnlyProps> = memo(function ReadOnly({ children, inputProps, ...props }) {\n return <Input {...props} inputComponent={'div' as any} inputProps={{ ...inputProps, children }}></Input>;\n});\n"],"mappings":";;;;AAMA,MAAa,WAA8B,KAAK,SAAS,SAAS,EAAE,UAAU,YAAY,GAAG,SAAS;CAClG,OAAO,oBAAC,OAAD;EAAO,GAAI;EAAO,gBAAgB;EAAc,YAAY;GAAE,GAAG;GAAY;EAAS;CAAU,CAAA;AAC3G,CAAC"}
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@kirill.konshin/mui",
3
3
  "description": "Utilities",
4
- "version": "0.0.5",
4
+ "version": "0.0.7",
5
5
  "type": "module",
6
6
  "hasStorybook": true,
7
7
  "scripts": {
8
8
  "----- BUILD -----": "",
9
9
  "clean": "rm -rf dist .tscache tsconfig.tsbuildinfo",
10
- "build": "vite build",
10
+ "build": "vp pack",
11
11
  "start": "yarn build --watch",
12
12
  "wait": "wait-on ./dist/index.js",
13
13
  "----- TEST -----": "",
14
- "test": "vitest run --coverage",
15
- "test:watch": "vitest watch --coverage",
14
+ "test": "vp test run --coverage",
15
+ "test:watch": "vp test watch --coverage",
16
16
  "----- STORYBOOK -----": "",
17
17
  "storybook:start": "storybook dev -p 6006",
18
18
  "storybook:build": "storybook build"
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC"}
@@ -1,7 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react-vite';
2
- import { GenericControl } from './genericControl.js';
3
- declare const meta: Meta<typeof GenericControl>;
4
- export default meta;
5
- type Story = StoryObj<typeof meta>;
6
- export declare const Default: Story;
7
- //# sourceMappingURL=formControlFieldset.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formControlFieldset.stories.d.ts","sourceRoot":"","sources":["../src/formControlFieldset.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CA6CC,CAAC;AAExC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAQnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC"}
@@ -1,13 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react-vite';
2
- import { FormLabelLegend } from './formLabelLegend.js';
3
- declare const meta: Meta<typeof FormLabelLegend>;
4
- export default meta;
5
- type Story = StoryObj<typeof meta>;
6
- export declare const Default: Story;
7
- export declare const WithRadioGroup: Story;
8
- export declare const Required: Story;
9
- export declare const WithError: Story;
10
- export declare const Disabled: Story;
11
- export declare const ComparisonWithInputLabel: Story;
12
- export declare const MultipleFieldsets: Story;
13
- //# sourceMappingURL=formLabelLegend.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formLabelLegend.stories.d.ts","sourceRoot":"","sources":["../src/formLabelLegend.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAatC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAa5B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAWtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAWvB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAWtB,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,KAqBtC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAoB/B,CAAC"}
@@ -1,12 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react-vite';
2
- import { GenericControl } from './genericControl.js';
3
- declare const meta: Meta<typeof GenericControl>;
4
- export default meta;
5
- type Story = StoryObj<typeof meta>;
6
- export declare const Default: Story;
7
- export declare const WithCustomContent: Story;
8
- export declare const Disabled: Story;
9
- export declare const WithError: Story;
10
- export declare const FullWidth: Story;
11
- export declare const ComparisonWithTextField: Story;
12
- //# sourceMappingURL=genericControl.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"genericControl.stories.d.ts","sourceRoot":"","sources":["../src/genericControl.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CAarC,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAS/B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAiBvB,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAkBrC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
@@ -1,12 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react-vite';
2
- import { ReadOnly } from './readOnly.js';
3
- declare const meta: Meta<typeof ReadOnly>;
4
- export default meta;
5
- type Story = StoryObj<typeof meta>;
6
- export declare const Default: Story;
7
- export declare const WithLabel: Story;
8
- export declare const WithHTMLContent: Story;
9
- export declare const MultipleFields: Story;
10
- export declare const ComparisonWithTextField: Story;
11
- export declare const FullWidth: Story;
12
- //# sourceMappingURL=readOnly.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readOnly.stories.d.ts","sourceRoot":"","sources":["../src/readOnly.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,QAAQ,CAY/B,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAS7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAqB5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAyBrC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAevB,CAAC"}