litecms 0.1.1 → 0.2.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.
- package/README.md +746 -7
- package/dist/admin/CmsAdminLanding.d.ts +89 -0
- package/dist/admin/CmsAdminLanding.d.ts.map +1 -0
- package/dist/admin/CmsAdminLayout.d.ts +26 -3
- package/dist/admin/CmsAdminLayout.d.ts.map +1 -1
- package/dist/admin/CmsAdminPage.d.ts.map +1 -1
- package/dist/admin/CmsBlogAdmin.d.ts +37 -0
- package/dist/admin/CmsBlogAdmin.d.ts.map +1 -0
- package/dist/admin/config.d.ts +32 -0
- package/dist/admin/config.d.ts.map +1 -1
- package/dist/admin/config.js +16 -0
- package/dist/admin/exports.d.ts +5 -2
- package/dist/admin/exports.d.ts.map +1 -1
- package/dist/admin/exports.js +1467 -30
- package/dist/admin/language.d.ts +53 -0
- package/dist/admin/language.d.ts.map +1 -0
- package/dist/components/CmsAutoForm.d.ts.map +1 -1
- package/dist/components/CmsForm.d.ts.map +1 -1
- package/dist/components/CmsImageField.d.ts +2 -1
- package/dist/components/CmsImageField.d.ts.map +1 -1
- package/dist/components/CmsImagePickerModal.d.ts +21 -0
- package/dist/components/CmsImagePickerModal.d.ts.map +1 -0
- package/dist/components/CmsSimpleForm.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +51 -190
- package/dist/index-c9btr14k.js +4422 -0
- package/dist/index-szreq4v9.js +12 -0
- package/dist/index-wmd953zf.js +11423 -0
- package/dist/index.js +6 -2
- package/dist/schema/index.js +2 -0
- package/dist/server/index.d.ts +301 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2585 -1
- package/dist/storage/index.js +2 -0
- package/package.json +13 -3
- package/dist/domain/index.d.ts +0 -1
- package/dist/domain/index.d.ts.map +0 -1
- package/dist/stores/index.d.ts +0 -1
- package/dist/stores/index.d.ts.map +0 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Supported languages for the CMS admin panel
|
|
4
|
+
*/
|
|
5
|
+
export type CmsLanguage = 'en' | 'de';
|
|
6
|
+
/**
|
|
7
|
+
* Detect the preferred language from browser settings.
|
|
8
|
+
* Returns 'de' if browser language starts with 'de', otherwise 'en'.
|
|
9
|
+
*/
|
|
10
|
+
export declare function detectBrowserLanguage(): CmsLanguage;
|
|
11
|
+
/**
|
|
12
|
+
* Get a translated string for the given key
|
|
13
|
+
*/
|
|
14
|
+
export declare function translate(language: CmsLanguage, key: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Language context value
|
|
17
|
+
*/
|
|
18
|
+
type LanguageContextValue = {
|
|
19
|
+
language: CmsLanguage;
|
|
20
|
+
setLanguage: (lang: CmsLanguage) => void;
|
|
21
|
+
t: (key: string) => string;
|
|
22
|
+
isLoading: boolean;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Props for the language provider
|
|
26
|
+
*/
|
|
27
|
+
export type CmsLanguageProviderProps = {
|
|
28
|
+
/** API endpoint to fetch/save language preference */
|
|
29
|
+
languageEndpoint?: string;
|
|
30
|
+
/** Children */
|
|
31
|
+
children: React.ReactNode;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Language provider component.
|
|
35
|
+
* Wraps admin components and provides language context.
|
|
36
|
+
*/
|
|
37
|
+
export declare function CmsLanguageProvider({ languageEndpoint, children, }: CmsLanguageProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
/**
|
|
39
|
+
* Hook to access language context.
|
|
40
|
+
* Must be used within a CmsLanguageProvider.
|
|
41
|
+
*/
|
|
42
|
+
export declare function useCmsLanguage(): LanguageContextValue;
|
|
43
|
+
/**
|
|
44
|
+
* Hook to access language context if available.
|
|
45
|
+
* Returns null if not within a CmsLanguageProvider (for backwards compatibility).
|
|
46
|
+
*/
|
|
47
|
+
export declare function useCmsLanguageOptional(): LanguageContextValue | null;
|
|
48
|
+
/**
|
|
49
|
+
* Language selector component for the admin sidebar
|
|
50
|
+
*/
|
|
51
|
+
export declare function CmsLanguageSelector(): import("react/jsx-runtime").JSX.Element;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=language.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../src/admin/language.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;AAgLtC;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CAOnD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,KAAK,oBAAoB,GAAG;IACxB,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACtB,CAAC;AAIF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACnC,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,gBAAwC,EACxC,QAAQ,GACX,EAAE,wBAAwB,2CA2E1B;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,oBAAoB,CAQrD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,oBAAoB,GAAG,IAAI,CAEpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,4CAkBlC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmsAutoForm.d.ts","sourceRoot":"","sources":["../../src/components/CmsAutoForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,WAAW,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"CmsAutoForm.d.ts","sourceRoot":"","sources":["../../src/components/CmsAutoForm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,WAAW,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,SAAS,CAAC;AAc5D;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC5B,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,IAAI;IACpD,4CAA4C;IAC5C,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAChC,sCAAsC;IACtC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,sCAAsC;IACtC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EACjD,UAAU,EACV,MAAM,EACN,MAAM,EACN,MAAW,EACX,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,SAAS,GACZ,EAAE,gBAAgB,CAAC,CAAC,CAAC,2CAiFrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmsForm.d.ts","sourceRoot":"","sources":["../../src/components/CmsForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAGH,KAAK,WAAW,EAChB,KAAK,aAAa,EAErB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"CmsForm.d.ts","sourceRoot":"","sources":["../../src/components/CmsForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAGH,KAAK,WAAW,EAChB,KAAK,aAAa,EAErB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGjE,MAAM,MAAM,YAAY,CAAC,WAAW,SAAS,WAAW,IAAI;IACxD,gCAAgC;IAChC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/B,sCAAsC;IACtC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAClC,kCAAkC;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC3C,2CAA2C;IAC3C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,wCAAwC;IACxC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAClD,oBAAoB;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAIF;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,WAAW,SAAS,WAAW,EAAE,EACrD,MAAM,EACN,MAAM,EACN,aAAa,EACb,SAAS,EACT,OAAO,EACP,QAAQ,EACR,SAAS,EACT,cAAsB,GACzB,EAAE,YAAY,CAAC,WAAW,CAAC,2CAiF3B;AAED;;GAEG;AACH,wBAAgB,UAAU,wBAMzB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAC5B,QAAQ,EACR,SAAS,EACT,WAAW,GACd,EAAE;IACC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,2CAuBA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,kDAUjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAC3B,QAAQ,EACR,SAAS,GACZ,EAAE;IACC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,kDAuBA"}
|
|
@@ -27,7 +27,8 @@ export type CmsImageFieldProps<TFieldValues extends FieldValues = FieldValues> =
|
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
29
|
/**
|
|
30
|
-
* Image Field component.
|
|
30
|
+
* Image Field component for use within CmsForm.
|
|
31
|
+
* Provides image selection with upload and library browsing.
|
|
31
32
|
*/
|
|
32
33
|
export declare function CmsImageField<TFieldValues extends FieldValues = FieldValues>({ name, label, helpText, required, disabled, accept, className, labelClassName, errorClassName, helpClassName, storage, }: CmsImageFieldProps<TFieldValues>): import("react/jsx-runtime").JSX.Element;
|
|
33
34
|
//# sourceMappingURL=CmsImageField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmsImageField.d.ts","sourceRoot":"","sources":["../../src/components/CmsImageField.tsx"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,SAAS,EACd,KAAK,WAAW,EACnB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"CmsImageField.d.ts","sourceRoot":"","sources":["../../src/components/CmsImageField.tsx"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,SAAS,EACd,KAAK,WAAW,EACnB,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,kBAAkB,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,IACzE;IACI,yCAAyC;IACzC,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IAC9B,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,OAAO,CAAC,EAAE;QACN,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACL,CAAC;AAUN;;;GAGG;AACH,wBAAgB,aAAa,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW,EAAE,EAC1E,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,QAAgB,EAChB,MAAkB,EAClB,SAAuB,EACvB,cAAc,EACd,cAAc,EACd,aAAa,EACb,OAAO,GACV,EAAE,kBAAkB,CAAC,YAAY,CAAC,2CA+IlC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type CmsImagePickerModalProps = {
|
|
2
|
+
/** Storage configuration for image uploads */
|
|
3
|
+
storage?: {
|
|
4
|
+
uploadEndpoint: string;
|
|
5
|
+
listEndpoint?: string;
|
|
6
|
+
};
|
|
7
|
+
/** Accepted file types (default: 'image/*') */
|
|
8
|
+
accept?: string;
|
|
9
|
+
/** Callback when an image is selected */
|
|
10
|
+
onSelect: (url: string) => void;
|
|
11
|
+
/** Callback to close the modal */
|
|
12
|
+
onClose: () => void;
|
|
13
|
+
/** Currently selected image URL */
|
|
14
|
+
currentValue?: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Standalone Image Picker Modal - can be used without form context.
|
|
18
|
+
* Supports drag-and-drop upload, bulk upload, and browsing image library.
|
|
19
|
+
*/
|
|
20
|
+
export declare function CmsImagePickerModal({ storage, accept, onSelect, onClose, currentValue, }: CmsImagePickerModalProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=CmsImagePickerModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CmsImagePickerModal.d.ts","sourceRoot":"","sources":["../../src/components/CmsImagePickerModal.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,wBAAwB,GAAG;IACnC,8CAA8C;IAC9C,OAAO,CAAC,EAAE;QACN,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kCAAkC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,OAAO,EACP,MAAkB,EAClB,QAAQ,EACR,OAAO,EACP,YAAY,GACf,EAAE,wBAAwB,2CAgY1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CmsSimpleForm.d.ts","sourceRoot":"","sources":["../../src/components/CmsSimpleForm.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAkB,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"CmsSimpleForm.d.ts","sourceRoot":"","sources":["../../src/components/CmsSimpleForm.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAkB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAU/E,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,+BAA+B;IAC/B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,sCAAsC;IACtC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9C,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,oBAAoB;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEhE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,EAC1B,MAAM,EACN,MAAM,EACN,MAAW,EACX,MAAW,EACX,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,OAAO,GACV,EAAE,kBAAkB,2CA+LpB"}
|
|
@@ -3,6 +3,7 @@ import type { FieldInfo } from '../schema';
|
|
|
3
3
|
export { CmsForm, useCmsForm, CmsSubmitButton, CmsFormError, CmsFormSuccess, type CmsFormProps, } from './CmsForm';
|
|
4
4
|
export { CmsField, CmsHiddenField, CmsCheckbox, type CmsFieldProps, } from './CmsField';
|
|
5
5
|
export { CmsImageField, type CmsImageFieldProps, } from './CmsImageField';
|
|
6
|
+
export { CmsImagePickerModal, type CmsImagePickerModalProps, } from './CmsImagePickerModal';
|
|
6
7
|
export { CmsAutoForm, type CmsAutoFormProps, type CmsAutoFormStyles } from './CmsAutoForm';
|
|
7
8
|
export type ServerAction<T> = (prevState: ActionState<T>, formData: FormData) => Promise<ActionState<T>>;
|
|
8
9
|
export type FieldGroupData = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EACH,OAAO,EACP,UAAU,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,KAAK,YAAY,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACH,QAAQ,EACR,cAAc,EACd,WAAW,EACX,KAAK,aAAa,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,aAAa,EACb,KAAK,kBAAkB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE3F,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAC1B,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,EACzB,QAAQ,EAAE,QAAQ,KACjB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7B,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC5B,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EACH,OAAO,EACP,UAAU,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,KAAK,YAAY,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACH,QAAQ,EACR,cAAc,EACd,WAAW,EACX,KAAK,aAAa,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,aAAa,EACb,KAAK,kBAAkB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACH,mBAAmB,EACnB,KAAK,wBAAwB,GAChC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE3F,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAC1B,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,EACzB,QAAQ,EAAE,QAAQ,KACjB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7B,MAAM,MAAM,cAAc,GAAG;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC5B,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC"}
|
package/dist/components/index.js
CHANGED
|
@@ -4,16 +4,24 @@ import {
|
|
|
4
4
|
CmsField,
|
|
5
5
|
CmsHiddenField,
|
|
6
6
|
CmsImageField,
|
|
7
|
+
CmsImagePickerModal,
|
|
7
8
|
FormProvider,
|
|
8
9
|
appendErrors,
|
|
9
10
|
get,
|
|
10
11
|
groupFields,
|
|
11
12
|
set,
|
|
13
|
+
useCmsLanguageOptional,
|
|
12
14
|
useForm
|
|
13
|
-
} from "../index-
|
|
15
|
+
} from "../index-c9btr14k.js";
|
|
16
|
+
import {
|
|
17
|
+
$ZodError,
|
|
18
|
+
parse,
|
|
19
|
+
parseAsync
|
|
20
|
+
} from "../index-wmd953zf.js";
|
|
14
21
|
import {
|
|
15
22
|
getEditableFields
|
|
16
23
|
} from "../schema/index.js";
|
|
24
|
+
import"../index-szreq4v9.js";
|
|
17
25
|
|
|
18
26
|
// src/components/CmsForm.tsx
|
|
19
27
|
import * as React from "react";
|
|
@@ -52,184 +60,6 @@ function n(e) {
|
|
|
52
60
|
return e.replace(/\]|\[/g, "");
|
|
53
61
|
}
|
|
54
62
|
|
|
55
|
-
// node_modules/zod/v4/core/core.js
|
|
56
|
-
var NEVER = Object.freeze({
|
|
57
|
-
status: "aborted"
|
|
58
|
-
});
|
|
59
|
-
function $constructor(name, initializer, params) {
|
|
60
|
-
function init(inst, def) {
|
|
61
|
-
if (!inst._zod) {
|
|
62
|
-
Object.defineProperty(inst, "_zod", {
|
|
63
|
-
value: {
|
|
64
|
-
def,
|
|
65
|
-
constr: _,
|
|
66
|
-
traits: new Set
|
|
67
|
-
},
|
|
68
|
-
enumerable: false
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
if (inst._zod.traits.has(name)) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
inst._zod.traits.add(name);
|
|
75
|
-
initializer(inst, def);
|
|
76
|
-
const proto = _.prototype;
|
|
77
|
-
const keys = Object.keys(proto);
|
|
78
|
-
for (let i2 = 0;i2 < keys.length; i2++) {
|
|
79
|
-
const k = keys[i2];
|
|
80
|
-
if (!(k in inst)) {
|
|
81
|
-
inst[k] = proto[k].bind(inst);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
const Parent = params?.Parent ?? Object;
|
|
86
|
-
|
|
87
|
-
class Definition extends Parent {
|
|
88
|
-
}
|
|
89
|
-
Object.defineProperty(Definition, "name", { value: name });
|
|
90
|
-
function _(def) {
|
|
91
|
-
var _a;
|
|
92
|
-
const inst = params?.Parent ? new Definition : this;
|
|
93
|
-
init(inst, def);
|
|
94
|
-
(_a = inst._zod).deferred ?? (_a.deferred = []);
|
|
95
|
-
for (const fn of inst._zod.deferred) {
|
|
96
|
-
fn();
|
|
97
|
-
}
|
|
98
|
-
return inst;
|
|
99
|
-
}
|
|
100
|
-
Object.defineProperty(_, "init", { value: init });
|
|
101
|
-
Object.defineProperty(_, Symbol.hasInstance, {
|
|
102
|
-
value: (inst) => {
|
|
103
|
-
if (params?.Parent && inst instanceof params.Parent)
|
|
104
|
-
return true;
|
|
105
|
-
return inst?._zod?.traits?.has(name);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
Object.defineProperty(_, "name", { value: name });
|
|
109
|
-
return _;
|
|
110
|
-
}
|
|
111
|
-
var $brand = Symbol("zod_brand");
|
|
112
|
-
|
|
113
|
-
class $ZodAsyncError extends Error {
|
|
114
|
-
constructor() {
|
|
115
|
-
super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
var globalConfig = {};
|
|
119
|
-
function config(newConfig) {
|
|
120
|
-
if (newConfig)
|
|
121
|
-
Object.assign(globalConfig, newConfig);
|
|
122
|
-
return globalConfig;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// node_modules/zod/v4/core/util.js
|
|
126
|
-
function jsonStringifyReplacer(_, value) {
|
|
127
|
-
if (typeof value === "bigint")
|
|
128
|
-
return value.toString();
|
|
129
|
-
return value;
|
|
130
|
-
}
|
|
131
|
-
function cached(getter) {
|
|
132
|
-
const set2 = false;
|
|
133
|
-
return {
|
|
134
|
-
get value() {
|
|
135
|
-
if (!set2) {
|
|
136
|
-
const value = getter();
|
|
137
|
-
Object.defineProperty(this, "value", { value });
|
|
138
|
-
return value;
|
|
139
|
-
}
|
|
140
|
-
throw new Error("cached value already set");
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
var EVALUATING = Symbol("evaluating");
|
|
145
|
-
var captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => {};
|
|
146
|
-
var allowsEval = cached(() => {
|
|
147
|
-
if (typeof navigator !== "undefined" && navigator?.userAgent?.includes("Cloudflare")) {
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
try {
|
|
151
|
-
const F = Function;
|
|
152
|
-
new F("");
|
|
153
|
-
return true;
|
|
154
|
-
} catch (_) {
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
var propertyKeyTypes = new Set(["string", "number", "symbol"]);
|
|
159
|
-
var primitiveTypes = new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]);
|
|
160
|
-
var NUMBER_FORMAT_RANGES = {
|
|
161
|
-
safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],
|
|
162
|
-
int32: [-2147483648, 2147483647],
|
|
163
|
-
uint32: [0, 4294967295],
|
|
164
|
-
float32: [-340282346638528860000000000000000000000, 340282346638528860000000000000000000000],
|
|
165
|
-
float64: [-Number.MAX_VALUE, Number.MAX_VALUE]
|
|
166
|
-
};
|
|
167
|
-
function unwrapMessage(message) {
|
|
168
|
-
return typeof message === "string" ? message : message?.message;
|
|
169
|
-
}
|
|
170
|
-
function finalizeIssue(iss, ctx, config2) {
|
|
171
|
-
const full = { ...iss, path: iss.path ?? [] };
|
|
172
|
-
if (!iss.message) {
|
|
173
|
-
const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config2.customError?.(iss)) ?? unwrapMessage(config2.localeError?.(iss)) ?? "Invalid input";
|
|
174
|
-
full.message = message;
|
|
175
|
-
}
|
|
176
|
-
delete full.inst;
|
|
177
|
-
delete full.continue;
|
|
178
|
-
if (!ctx?.reportInput) {
|
|
179
|
-
delete full.input;
|
|
180
|
-
}
|
|
181
|
-
return full;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// node_modules/zod/v4/core/errors.js
|
|
185
|
-
var initializer = (inst, def) => {
|
|
186
|
-
inst.name = "$ZodError";
|
|
187
|
-
Object.defineProperty(inst, "_zod", {
|
|
188
|
-
value: inst._zod,
|
|
189
|
-
enumerable: false
|
|
190
|
-
});
|
|
191
|
-
Object.defineProperty(inst, "issues", {
|
|
192
|
-
value: def,
|
|
193
|
-
enumerable: false
|
|
194
|
-
});
|
|
195
|
-
inst.message = JSON.stringify(def, jsonStringifyReplacer, 2);
|
|
196
|
-
Object.defineProperty(inst, "toString", {
|
|
197
|
-
value: () => inst.message,
|
|
198
|
-
enumerable: false
|
|
199
|
-
});
|
|
200
|
-
};
|
|
201
|
-
var $ZodError = $constructor("$ZodError", initializer);
|
|
202
|
-
var $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error });
|
|
203
|
-
|
|
204
|
-
// node_modules/zod/v4/core/parse.js
|
|
205
|
-
var _parse = (_Err) => (schema, value, _ctx, _params) => {
|
|
206
|
-
const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
|
|
207
|
-
const result = schema._zod.run({ value, issues: [] }, ctx);
|
|
208
|
-
if (result instanceof Promise) {
|
|
209
|
-
throw new $ZodAsyncError;
|
|
210
|
-
}
|
|
211
|
-
if (result.issues.length) {
|
|
212
|
-
const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())));
|
|
213
|
-
captureStackTrace(e, _params?.callee);
|
|
214
|
-
throw e;
|
|
215
|
-
}
|
|
216
|
-
return result.value;
|
|
217
|
-
};
|
|
218
|
-
var parse = /* @__PURE__ */ _parse($ZodRealError);
|
|
219
|
-
var _parseAsync = (_Err) => async (schema, value, _ctx, params) => {
|
|
220
|
-
const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };
|
|
221
|
-
let result = schema._zod.run({ value, issues: [] }, ctx);
|
|
222
|
-
if (result instanceof Promise)
|
|
223
|
-
result = await result;
|
|
224
|
-
if (result.issues.length) {
|
|
225
|
-
const e = new (params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())));
|
|
226
|
-
captureStackTrace(e, params?.callee);
|
|
227
|
-
throw e;
|
|
228
|
-
}
|
|
229
|
-
return result.value;
|
|
230
|
-
};
|
|
231
|
-
var parseAsync = /* @__PURE__ */ _parseAsync($ZodRealError);
|
|
232
|
-
|
|
233
63
|
// node_modules/@hookform/resolvers/zod/dist/zod.mjs
|
|
234
64
|
function t(r2, e) {
|
|
235
65
|
try {
|
|
@@ -413,16 +243,26 @@ function useCmsForm() {
|
|
|
413
243
|
return context;
|
|
414
244
|
}
|
|
415
245
|
function CmsSubmitButton({
|
|
416
|
-
children
|
|
246
|
+
children,
|
|
417
247
|
className,
|
|
418
|
-
pendingText
|
|
248
|
+
pendingText
|
|
419
249
|
}) {
|
|
420
250
|
const { isPending } = useCmsForm();
|
|
251
|
+
const langContext = useCmsLanguageOptional();
|
|
252
|
+
const t2 = langContext?.t ?? ((key) => {
|
|
253
|
+
const fallback = {
|
|
254
|
+
save: "Save",
|
|
255
|
+
saving: "Saving..."
|
|
256
|
+
};
|
|
257
|
+
return fallback[key] ?? key;
|
|
258
|
+
});
|
|
259
|
+
const resolvedChildren = children ?? t2("save");
|
|
260
|
+
const resolvedPendingText = pendingText ?? t2("saving");
|
|
421
261
|
return /* @__PURE__ */ jsxDEV("button", {
|
|
422
262
|
type: "submit",
|
|
423
263
|
disabled: isPending,
|
|
424
264
|
className,
|
|
425
|
-
children: isPending ?
|
|
265
|
+
children: isPending ? resolvedPendingText : resolvedChildren
|
|
426
266
|
}, undefined, false, undefined, this);
|
|
427
267
|
}
|
|
428
268
|
function CmsFormError({ className }) {
|
|
@@ -436,16 +276,24 @@ function CmsFormError({ className }) {
|
|
|
436
276
|
}, undefined, false, undefined, this);
|
|
437
277
|
}
|
|
438
278
|
function CmsFormSuccess({
|
|
439
|
-
children
|
|
279
|
+
children,
|
|
440
280
|
className
|
|
441
281
|
}) {
|
|
442
282
|
const { showSuccess } = useCmsForm();
|
|
283
|
+
const langContext = useCmsLanguageOptional();
|
|
284
|
+
const t2 = langContext?.t ?? ((key) => {
|
|
285
|
+
const fallback = {
|
|
286
|
+
savedSuccessfully: "Saved successfully!"
|
|
287
|
+
};
|
|
288
|
+
return fallback[key] ?? key;
|
|
289
|
+
});
|
|
290
|
+
const resolvedChildren = children ?? t2("savedSuccessfully");
|
|
443
291
|
if (!showSuccess)
|
|
444
292
|
return null;
|
|
445
293
|
return /* @__PURE__ */ jsxDEV("div", {
|
|
446
294
|
role: "status",
|
|
447
295
|
className,
|
|
448
|
-
children
|
|
296
|
+
children: resolvedChildren
|
|
449
297
|
}, undefined, false, undefined, this);
|
|
450
298
|
}
|
|
451
299
|
// src/components/CmsAutoForm.tsx
|
|
@@ -455,11 +303,23 @@ function CmsAutoForm({
|
|
|
455
303
|
action,
|
|
456
304
|
values,
|
|
457
305
|
styles = {},
|
|
458
|
-
submitText
|
|
459
|
-
submitPendingText
|
|
460
|
-
successMessage
|
|
306
|
+
submitText,
|
|
307
|
+
submitPendingText,
|
|
308
|
+
successMessage,
|
|
461
309
|
onSuccess
|
|
462
310
|
}) {
|
|
311
|
+
const langContext = useCmsLanguageOptional();
|
|
312
|
+
const t2 = langContext?.t ?? ((key) => {
|
|
313
|
+
const fallback = {
|
|
314
|
+
saveChanges: "Save changes",
|
|
315
|
+
saving: "Saving...",
|
|
316
|
+
changesSaved: "Changes saved successfully"
|
|
317
|
+
};
|
|
318
|
+
return fallback[key] ?? key;
|
|
319
|
+
});
|
|
320
|
+
const resolvedSubmitText = submitText ?? t2("saveChanges");
|
|
321
|
+
const resolvedSubmitPendingText = submitPendingText ?? t2("saving");
|
|
322
|
+
const resolvedSuccessMessage = successMessage ?? t2("changesSaved");
|
|
463
323
|
const editableFields = getEditableFields(definition);
|
|
464
324
|
const defaultValues = { ...definition.defaults, ...values };
|
|
465
325
|
const groupedFields = groupFields(editableFields);
|
|
@@ -483,7 +343,7 @@ function CmsAutoForm({
|
|
|
483
343
|
}, undefined, false, undefined, this),
|
|
484
344
|
/* @__PURE__ */ jsxDEV2(CmsFormSuccess, {
|
|
485
345
|
className: styles.formSuccess ?? "flex items-center gap-3 rounded-lg px-4 py-3 text-sm",
|
|
486
|
-
children:
|
|
346
|
+
children: resolvedSuccessMessage
|
|
487
347
|
}, undefined, false, undefined, this)
|
|
488
348
|
]
|
|
489
349
|
}, undefined, true, undefined, this),
|
|
@@ -494,8 +354,8 @@ function CmsAutoForm({
|
|
|
494
354
|
},
|
|
495
355
|
children: /* @__PURE__ */ jsxDEV2(CmsSubmitButton, {
|
|
496
356
|
className: styles.submitButton ?? "inline-flex h-9 items-center justify-center gap-2 rounded-lg px-6 py-2 text-sm font-medium text-white transition-all duration-180 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
|
|
497
|
-
pendingText:
|
|
498
|
-
children:
|
|
357
|
+
pendingText: resolvedSubmitPendingText,
|
|
358
|
+
children: resolvedSubmitText
|
|
499
359
|
}, undefined, false, undefined, this)
|
|
500
360
|
}, undefined, false, undefined, this)
|
|
501
361
|
]
|
|
@@ -608,6 +468,7 @@ function AutoField({
|
|
|
608
468
|
export {
|
|
609
469
|
useCmsForm,
|
|
610
470
|
CmsSubmitButton,
|
|
471
|
+
CmsImagePickerModal,
|
|
611
472
|
CmsImageField,
|
|
612
473
|
CmsHiddenField,
|
|
613
474
|
CmsFormSuccess,
|