@firecms/core 3.1.0 → 3.2.0-canary.4c3b8f2

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 (191) hide show
  1. package/dist/components/EntityCollectionView/CollectionDataErrorBanner.d.ts +4 -0
  2. package/dist/components/ErrorBoundary.d.ts +3 -1
  3. package/dist/components/HomePage/DefaultHomePage.d.ts +0 -1
  4. package/dist/components/LanguageToggle.d.ts +1 -0
  5. package/dist/components/UnsavedChangesDialog.d.ts +1 -0
  6. package/dist/components/index.d.ts +1 -0
  7. package/dist/core/DrawerNavigationGroup.d.ts +2 -2
  8. package/dist/editor/components/SlashCommandMenu.d.ts +6 -0
  9. package/dist/editor/components/editor-bubble-item.d.ts +8 -0
  10. package/dist/editor/components/editor-bubble.d.ts +8 -0
  11. package/dist/editor/components/image-bubble.d.ts +5 -0
  12. package/dist/editor/components/index.d.ts +16 -0
  13. package/dist/editor/components/table-bubble.d.ts +5 -0
  14. package/dist/editor/editor.d.ts +30 -0
  15. package/dist/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
  16. package/dist/editor/extensions/Image/index.d.ts +6 -0
  17. package/dist/editor/extensions/Image.d.ts +6 -0
  18. package/dist/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
  19. package/dist/editor/extensions/clipboard.d.ts +7 -0
  20. package/dist/editor/extensions/custom-keymap.d.ts +1 -0
  21. package/dist/editor/extensions/drag-and-drop.d.ts +9 -0
  22. package/dist/editor/hooks/useProseMirror.d.ts +13 -0
  23. package/dist/editor/hooks/useProseMirrorContext.d.ts +9 -0
  24. package/dist/editor/index.d.ts +2 -0
  25. package/dist/editor/markdown.d.ts +5 -0
  26. package/dist/editor/nodeViews/ImageComponent.d.ts +3 -0
  27. package/dist/editor/nodeViews/ReactNodeView.d.ts +29 -0
  28. package/dist/editor/nodeViews/TaskItemComponent.d.ts +3 -0
  29. package/dist/editor/nodeViews/index.d.ts +6 -0
  30. package/dist/editor/plugins/index.d.ts +2 -0
  31. package/dist/editor/plugins/inputrules.d.ts +6 -0
  32. package/dist/editor/plugins/placeholderPlugin.d.ts +3 -0
  33. package/dist/editor/plugins/slashCommandPlugin.d.ts +12 -0
  34. package/dist/editor/schema.d.ts +2 -0
  35. package/dist/editor/selectors/ai-selector.d.ts +0 -0
  36. package/dist/editor/selectors/color-selector.d.ts +10 -0
  37. package/dist/editor/selectors/link-selector.d.ts +8 -0
  38. package/dist/editor/selectors/node-selector.d.ts +15 -0
  39. package/dist/editor/selectors/text-buttons.d.ts +1 -0
  40. package/dist/editor/types.d.ts +5 -0
  41. package/dist/editor/useProseMirror.d.ts +16 -0
  42. package/dist/editor/utils/prosemirror-utils.d.ts +6 -0
  43. package/dist/editor/utils/remove_classes.d.ts +1 -0
  44. package/dist/editor/utils/useDebouncedCallback.d.ts +1 -0
  45. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +1 -1
  46. package/dist/hooks/index.d.ts +1 -0
  47. package/dist/hooks/useBuildNavigationController.d.ts +0 -1
  48. package/dist/hooks/useCollapsedGroups.d.ts +3 -3
  49. package/dist/hooks/useTranslation.d.ts +17 -0
  50. package/dist/i18n/FireCMSi18nProvider.d.ts +33 -0
  51. package/dist/index.d.ts +4 -0
  52. package/dist/index.es.js +12898 -2265
  53. package/dist/index.es.js.map +1 -1
  54. package/dist/index.umd.js +12877 -2264
  55. package/dist/index.umd.js.map +1 -1
  56. package/dist/locales/de.d.ts +2 -0
  57. package/dist/locales/en.d.ts +10 -0
  58. package/dist/locales/es.d.ts +10 -0
  59. package/dist/locales/fr.d.ts +2 -0
  60. package/dist/locales/hi.d.ts +2 -0
  61. package/dist/locales/it.d.ts +2 -0
  62. package/dist/locales/pt.d.ts +7 -0
  63. package/dist/types/customization_controller.d.ts +2 -1
  64. package/dist/types/firecms.d.ts +2 -1
  65. package/dist/types/index.d.ts +1 -0
  66. package/dist/types/navigation.d.ts +2 -2
  67. package/dist/types/plugins.d.ts +7 -0
  68. package/dist/types/storage.d.ts +1 -0
  69. package/dist/types/translations.d.ts +646 -0
  70. package/dist/util/useStorageUploadController.d.ts +10 -1
  71. package/package.json +45 -9
  72. package/src/app/Scaffold.tsx +7 -5
  73. package/src/components/AIIcon.tsx +3 -1
  74. package/src/components/ArrayContainer.tsx +6 -4
  75. package/src/components/ClearFilterSortButton.tsx +6 -3
  76. package/src/components/ConfirmationDialog.tsx +4 -2
  77. package/src/components/DeleteEntityDialog.tsx +10 -7
  78. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +6 -3
  79. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +3 -1
  80. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +3 -2
  81. package/src/components/EntityCollectionView/BoardSortableList.tsx +3 -1
  82. package/src/components/EntityCollectionView/CollectionDataErrorBanner.tsx +43 -0
  83. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +16 -43
  84. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +17 -25
  85. package/src/components/EntityCollectionView/EntityCollectionView.tsx +26 -18
  86. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -3
  87. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +4 -2
  88. package/src/components/EntityCollectionView/FiltersDialog.tsx +8 -5
  89. package/src/components/EntityCollectionView/ViewModeToggle.tsx +11 -8
  90. package/src/components/EntityView.tsx +3 -2
  91. package/src/components/ErrorBoundary.tsx +27 -15
  92. package/src/components/HomePage/DefaultHomePage.tsx +19 -13
  93. package/src/components/HomePage/HomePageDnD.tsx +3 -1
  94. package/src/components/HomePage/NavigationGroup.tsx +3 -1
  95. package/src/components/HomePage/RenameGroupDialog.tsx +15 -13
  96. package/src/components/LanguageToggle.tsx +66 -0
  97. package/src/components/NotFoundPage.tsx +5 -3
  98. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +9 -7
  99. package/src/components/ReferenceWidget.tsx +3 -2
  100. package/src/components/SearchIconsView.tsx +3 -1
  101. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +11 -0
  102. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +15 -2
  103. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +11 -0
  104. package/src/components/UnsavedChangesDialog.tsx +6 -4
  105. package/src/components/VirtualTable/VirtualTable.performance.test.tsx +1 -0
  106. package/src/components/VirtualTable/VirtualTableHeader.tsx +12 -10
  107. package/src/components/common/default_entity_actions.tsx +4 -0
  108. package/src/components/common/useDataSourceTableController.tsx +12 -4
  109. package/src/components/index.tsx +1 -0
  110. package/src/core/DefaultAppBar.tsx +14 -10
  111. package/src/core/DefaultDrawer.tsx +8 -2
  112. package/src/core/DrawerNavigationGroup.tsx +5 -3
  113. package/src/core/EntityEditView.tsx +4 -3
  114. package/src/core/EntityEditViewFormActions.tsx +24 -17
  115. package/src/core/EntitySidePanel.tsx +6 -5
  116. package/src/core/FireCMS.tsx +33 -6
  117. package/src/editor/components/SlashCommandMenu.tsx +516 -0
  118. package/src/editor/components/editor-bubble-item.tsx +32 -0
  119. package/src/editor/components/editor-bubble.tsx +118 -0
  120. package/src/editor/components/image-bubble.tsx +156 -0
  121. package/src/editor/components/index.ts +14 -0
  122. package/src/editor/components/table-bubble.tsx +165 -0
  123. package/src/editor/editor.tsx +455 -0
  124. package/src/editor/extensions/HighlightDecorationExtension.ts +114 -0
  125. package/src/editor/extensions/Image/index.ts +133 -0
  126. package/src/editor/extensions/Image.ts +159 -0
  127. package/src/editor/extensions/TextLoadingDecorationExtension.tsx +107 -0
  128. package/src/editor/extensions/clipboard.ts +72 -0
  129. package/src/editor/extensions/custom-keymap.ts +24 -0
  130. package/src/editor/extensions/drag-and-drop.tsx +480 -0
  131. package/src/editor/hooks/useProseMirror.ts +124 -0
  132. package/src/editor/hooks/useProseMirrorContext.ts +15 -0
  133. package/src/editor/index.ts +2 -0
  134. package/src/editor/markdown.ts +172 -0
  135. package/src/editor/nodeViews/ImageComponent.tsx +20 -0
  136. package/src/editor/nodeViews/ReactNodeView.tsx +89 -0
  137. package/src/editor/nodeViews/TaskItemComponent.tsx +29 -0
  138. package/src/editor/nodeViews/index.ts +35 -0
  139. package/src/editor/plugins/index.ts +58 -0
  140. package/src/editor/plugins/inputrules.ts +82 -0
  141. package/src/editor/plugins/placeholderPlugin.ts +55 -0
  142. package/src/editor/plugins/slashCommandPlugin.ts +61 -0
  143. package/src/editor/schema.ts +240 -0
  144. package/src/editor/selectors/ai-selector.tsx +111 -0
  145. package/src/editor/selectors/color-selector.tsx +200 -0
  146. package/src/editor/selectors/link-selector.tsx +118 -0
  147. package/src/editor/selectors/node-selector.tsx +157 -0
  148. package/src/editor/selectors/text-buttons.tsx +86 -0
  149. package/src/editor/types.ts +6 -0
  150. package/src/editor/useProseMirror.ts +126 -0
  151. package/src/editor/utils/prosemirror-utils.ts +108 -0
  152. package/src/editor/utils/remove_classes.ts +17 -0
  153. package/src/editor/utils/useDebouncedCallback.ts +25 -0
  154. package/src/form/EntityForm.tsx +16 -3
  155. package/src/form/EntityFormActions.tsx +19 -12
  156. package/src/form/PropertyFieldBinding.tsx +3 -2
  157. package/src/form/components/LocalChangesMenu.tsx +13 -13
  158. package/src/form/components/StorageItemPreview.tsx +3 -2
  159. package/src/form/components/StorageUploadProgress.tsx +18 -3
  160. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +4 -4
  161. package/src/form/field_bindings/BlockFieldBinding.tsx +5 -2
  162. package/src/form/field_bindings/KeyValueFieldBinding.tsx +23 -18
  163. package/src/form/field_bindings/MapFieldBinding.tsx +4 -3
  164. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +33 -19
  165. package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -1
  166. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +4 -3
  167. package/src/hooks/index.tsx +1 -0
  168. package/src/hooks/useBuildNavigationController.tsx +45 -18
  169. package/src/hooks/useCollapsedGroups.ts +7 -6
  170. package/src/hooks/useTranslation.ts +31 -0
  171. package/src/i18n/FireCMSi18nProvider.tsx +160 -0
  172. package/src/index.ts +4 -0
  173. package/src/internal/useBuildSideEntityController.tsx +22 -20
  174. package/src/locales/de.ts +691 -0
  175. package/src/locales/en.ts +703 -0
  176. package/src/locales/es.ts +703 -0
  177. package/src/locales/fr.ts +691 -0
  178. package/src/locales/hi.ts +691 -0
  179. package/src/locales/it.ts +691 -0
  180. package/src/locales/pt.ts +700 -0
  181. package/src/preview/components/UrlComponentPreview.tsx +4 -2
  182. package/src/preview/components/UserPreview.tsx +3 -1
  183. package/src/types/customization_controller.tsx +2 -1
  184. package/src/types/firecms.tsx +2 -1
  185. package/src/types/index.ts +1 -0
  186. package/src/types/navigation.ts +2 -2
  187. package/src/types/plugins.tsx +8 -0
  188. package/src/types/properties.ts +1 -0
  189. package/src/types/storage.ts +2 -1
  190. package/src/types/translations.ts +725 -0
  191. package/src/util/useStorageUploadController.tsx +23 -29
@@ -0,0 +1,4 @@
1
+ export declare function CollectionDataErrorBanner({ error, onRetry }: {
2
+ error?: Error;
3
+ onRetry?: () => void;
4
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -1,9 +1,11 @@
1
1
  import React, { ErrorInfo, PropsWithChildren } from "react";
2
2
  export declare class ErrorBoundary extends React.Component<PropsWithChildren<Record<string, unknown>>, {
3
- error: Error | null;
3
+ hasError: boolean;
4
+ error?: Error;
4
5
  }> {
5
6
  constructor(props: any);
6
7
  static getDerivedStateFromError(error: Error): {
8
+ hasError: boolean;
7
9
  error: Error;
8
10
  };
9
11
  componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
@@ -1,5 +1,4 @@
1
1
  import React from "react";
2
- export declare const DEFAULT_GROUP_NAME = "Views";
3
2
  export declare const ADMIN_GROUP_NAME = "Admin";
4
3
  export declare function DefaultHomePage({ additionalActions, additionalChildrenStart, additionalChildrenEnd }: {
5
4
  additionalActions?: React.ReactNode;
@@ -0,0 +1 @@
1
+ export declare function LanguageToggle(): import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  export interface UnsavedChangesDialogProps {
2
3
  open: boolean;
3
4
  body?: React.ReactNode;
@@ -29,3 +29,4 @@ export * from "./SearchIconsView";
29
29
  export * from "./FieldCaption";
30
30
  export * from "./EntityPreview";
31
31
  export * from "./AIIcon";
32
+ export * from "./LanguageToggle";
@@ -2,9 +2,9 @@ import React from "react";
2
2
  import { NavigationEntry } from "../types";
3
3
  export interface DrawerNavigationGroupProps {
4
4
  /**
5
- * Group name to display in header
5
+ * Group name to display in header. When null, uses the translated default group name.
6
6
  */
7
- group: string;
7
+ group: string | null;
8
8
  /**
9
9
  * Navigation entries in this group
10
10
  */
@@ -0,0 +1,6 @@
1
+ import { EditorAIController } from "../types";
2
+ import { UploadFn } from "../extensions/Image";
3
+ export declare const SlashCommandMenu: ({ upload, aiController }: {
4
+ upload: UploadFn;
5
+ aiController?: EditorAIController;
6
+ }) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,8 @@
1
+ import { type ReactNode } from "react";
2
+ interface EditorBubbleItemProps {
3
+ children: ReactNode;
4
+ asChild?: boolean;
5
+ onSelect?: () => void;
6
+ }
7
+ export declare const EditorBubbleItem: import("react").ForwardRefExoticComponent<EditorBubbleItemProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">, "onSelect"> & import("react").RefAttributes<HTMLDivElement>>;
8
+ export default EditorBubbleItem;
@@ -0,0 +1,8 @@
1
+ import { type ReactNode } from "react";
2
+ export interface EditorBubbleProps {
3
+ children: ReactNode;
4
+ options?: any;
5
+ className?: string;
6
+ }
7
+ export declare const EditorBubble: import("react").ForwardRefExoticComponent<EditorBubbleProps & import("react").RefAttributes<HTMLDivElement>>;
8
+ export default EditorBubble;
@@ -0,0 +1,5 @@
1
+ export interface ImageBubbleProps {
2
+ options?: any;
3
+ className?: string;
4
+ }
5
+ export declare const ImageBubble: import("react").ForwardRefExoticComponent<ImageBubbleProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,16 @@
1
+ export { EditorBubble } from "./editor-bubble";
2
+ export { EditorBubbleItem } from "./editor-bubble-item";
3
+ export { SlashCommandMenu } from "./SlashCommandMenu";
4
+ export { ImageBubble } from "./image-bubble";
5
+ export { TableBubble } from "./table-bubble";
6
+ export type JSONContent = {
7
+ type?: string;
8
+ attrs?: Record<string, any>;
9
+ content?: JSONContent[];
10
+ marks?: {
11
+ type: string;
12
+ attrs?: Record<string, any>;
13
+ }[];
14
+ text?: string;
15
+ [key: string]: any;
16
+ };
@@ -0,0 +1,5 @@
1
+ export interface TableBubbleProps {
2
+ options?: any;
3
+ className?: string;
4
+ }
5
+ export declare const TableBubble: import("react").ForwardRefExoticComponent<TableBubbleProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,30 @@
1
+ import React from "react";
2
+ import { type JSONContent } from "./components";
3
+ import { EditorAIController } from "./types";
4
+ export type CustomEditorComponent = {
5
+ name: string;
6
+ component: React.FC;
7
+ };
8
+ export interface MarkdownEditorConfig {
9
+ html?: boolean;
10
+ transformPastedText?: boolean;
11
+ }
12
+ export type FireCMSEditorTextSize = "sm" | "base" | "lg";
13
+ export type FireCMSEditorProps = {
14
+ content?: JSONContent | string;
15
+ onMarkdownContentChange?: (content: string) => void;
16
+ onJsonContentChange?: (content: JSONContent | null) => void;
17
+ onHtmlContentChange?: (content: string) => void;
18
+ handleImageUpload: (file: File) => Promise<string>;
19
+ version?: number;
20
+ textSize?: FireCMSEditorTextSize;
21
+ highlight?: {
22
+ from: number;
23
+ to: number;
24
+ };
25
+ aiController?: EditorAIController;
26
+ customComponents?: CustomEditorComponent[];
27
+ disabled?: boolean;
28
+ markdownConfig?: MarkdownEditorConfig;
29
+ };
30
+ export declare const FireCMSEditor: ({ content, onJsonContentChange, onHtmlContentChange, onMarkdownContentChange, version, textSize, highlight, handleImageUpload, aiController, disabled, markdownConfig }: FireCMSEditorProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { Plugin, PluginKey, Transaction, EditorState } from "prosemirror-state";
2
+ import { DecorationSet } from "prosemirror-view";
3
+ export interface HighlightRange {
4
+ from: number;
5
+ to: number;
6
+ }
7
+ interface AutocompleteHighlightState {
8
+ highlight?: HighlightRange;
9
+ decorationSet?: DecorationSet;
10
+ }
11
+ export declare const highlightDecorationKey: PluginKey<AutocompleteHighlightState>;
12
+ /**
13
+ * Commands to toggle the highlight
14
+ */
15
+ export declare const highlightCommands: {
16
+ toggleAutocompleteHighlight: (range?: HighlightRange) => (state: EditorState, dispatch?: (tr: Transaction) => void) => boolean;
17
+ removeAutocompleteHighlight: () => (state: EditorState, dispatch?: (tr: Transaction) => void) => boolean;
18
+ };
19
+ /**
20
+ * This plugin is used to highlight the current autocomplete suggestion.
21
+ * It allows to set a range and remove it.
22
+ */
23
+ export declare const highlightDecorationPlugin: (initialHighlight?: HighlightRange) => Plugin<AutocompleteHighlightState>;
24
+ export {};
@@ -0,0 +1,6 @@
1
+ import { EditorView } from "prosemirror-view";
2
+ import { Plugin, PluginKey } from "prosemirror-state";
3
+ export type UploadFn = (image: File) => Promise<string>;
4
+ export declare function onFileRead(view: EditorView, readerEvent: ProgressEvent<FileReader>, pos: number, upload: UploadFn, image: File): Promise<void>;
5
+ export declare const ImagePluginKey: PluginKey<any>;
6
+ export declare const createDropImagePlugin: (upload: UploadFn) => Plugin;
@@ -0,0 +1,6 @@
1
+ import { EditorView } from "prosemirror-view";
2
+ import { Plugin, PluginKey } from "prosemirror-state";
3
+ export type UploadFn = (image: File) => Promise<string>;
4
+ export declare function onFileRead(view: EditorView, readerEvent: ProgressEvent<FileReader>, pos: number, upload: UploadFn, image: File): Promise<void>;
5
+ export declare const ImagePluginKey: PluginKey<any>;
6
+ export declare const createDropImagePlugin: (upload: UploadFn) => Plugin;
@@ -0,0 +1,16 @@
1
+ import { Plugin, PluginKey, Transaction, EditorState } from "prosemirror-state";
2
+ import { DecorationSet } from "prosemirror-view";
3
+ export declare const loadingDecorationKey: PluginKey<LoadingDecorationState>;
4
+ interface LoadingDecorationState {
5
+ decorationSet: DecorationSet;
6
+ hasDecoration: boolean;
7
+ }
8
+ export declare const textLoadingCommands: {
9
+ toggleLoadingDecoration: (state: EditorState, dispatch: ((tr: Transaction) => void) | undefined, loadingHtml?: string) => boolean;
10
+ removeLoadingDecoration: (state: EditorState, dispatch: ((tr: Transaction) => void) | undefined) => boolean;
11
+ };
12
+ /**
13
+ * This plugin is used to display streaming content from an LLM.
14
+ */
15
+ export declare const textLoadingDecorationPlugin: () => Plugin<LoadingDecorationState>;
16
+ export {};
@@ -0,0 +1,7 @@
1
+ import { Slice } from "prosemirror-model";
2
+ import { EditorView } from "prosemirror-view";
3
+ export declare function serializeForClipboard(view: EditorView, slice: Slice): {
4
+ dom: HTMLDivElement;
5
+ text: string;
6
+ slice: Slice;
7
+ };
@@ -0,0 +1 @@
1
+ export declare const customKeymapPlugin: () => import("prosemirror-state").Plugin<any>;
@@ -0,0 +1,9 @@
1
+ import { Plugin } from "prosemirror-state";
2
+ export interface DragHandleOptions {
3
+ /**
4
+ * The width of the drag handle
5
+ */
6
+ dragHandleWidth: number;
7
+ }
8
+ export declare function dragHandlePlugin(options?: DragHandleOptions): Plugin<any>;
9
+ export declare function globalDragDropPlugin(): Plugin<any>;
@@ -0,0 +1,13 @@
1
+ import { EditorState } from "prosemirror-state";
2
+ import { EditorView } from "prosemirror-view";
3
+ interface UseProseMirrorProps {
4
+ initialContent?: string | any;
5
+ editable?: boolean;
6
+ handleImageUpload?: (file: File) => Promise<string>;
7
+ }
8
+ export declare function useProseMirror({ initialContent, editable, handleImageUpload }: UseProseMirrorProps): {
9
+ state: EditorState;
10
+ view: EditorView | null;
11
+ editorRef: import("react").RefObject<HTMLDivElement | null>;
12
+ };
13
+ export {};
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { EditorState } from "prosemirror-state";
3
+ import { EditorView } from "prosemirror-view";
4
+ export interface ProseMirrorContextType {
5
+ state: EditorState | null;
6
+ view: EditorView | null;
7
+ }
8
+ export declare const ProseMirrorContext: React.Context<ProseMirrorContextType>;
9
+ export declare const useProseMirrorContext: () => ProseMirrorContextType;
@@ -0,0 +1,2 @@
1
+ export * from "./editor";
2
+ export * from "./types";
@@ -0,0 +1,5 @@
1
+ import { MarkdownParser, MarkdownSerializer } from "prosemirror-markdown";
2
+ export declare const markdownParser: MarkdownParser;
3
+ export declare const markdownSerializer: MarkdownSerializer;
4
+ export declare const parser: MarkdownParser;
5
+ export declare const serializer: MarkdownSerializer;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { ReactNodeViewProps } from "./ReactNodeView";
3
+ export declare const ImageComponent: React.FC<ReactNodeViewProps>;
@@ -0,0 +1,29 @@
1
+ import React from "react";
2
+ import { Node as ProseMirrorNode } from "prosemirror-model";
3
+ import { EditorView, NodeView } from "prosemirror-view";
4
+ export interface ReactNodeViewProps {
5
+ node: ProseMirrorNode;
6
+ view: EditorView;
7
+ getPos: () => number | undefined;
8
+ }
9
+ export type ReactNodeViewComponent = React.FC<ReactNodeViewProps>;
10
+ /**
11
+ * A utility class that implements the ProseMirror NodeView interface but delegates rendering
12
+ * to a React component.
13
+ * Note: This uses createRoot, so it does not automatically inherit React Contexts.
14
+ * If contexts are needed, wrap them manually or use a portal-based approach instead.
15
+ */
16
+ export declare class ReactNodeView implements NodeView {
17
+ node: ProseMirrorNode;
18
+ view: EditorView;
19
+ getPos: () => number | undefined;
20
+ dom: HTMLElement;
21
+ contentDOM?: HTMLElement;
22
+ private root;
23
+ private Component;
24
+ constructor(node: ProseMirrorNode, view: EditorView, getPos: () => number | undefined, Component: ReactNodeViewComponent, as?: string, className?: string, contentDOMElement?: HTMLElement);
25
+ private render;
26
+ update(node: ProseMirrorNode): boolean;
27
+ destroy(): void;
28
+ ignoreMutation(mutation: any): boolean;
29
+ }
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import { ReactNodeViewProps } from "./ReactNodeView";
3
+ export declare const TaskItemComponent: React.FC<ReactNodeViewProps>;
@@ -0,0 +1,6 @@
1
+ import { Node as ProseMirrorNode } from "prosemirror-model";
2
+ import { EditorView, NodeView } from "prosemirror-view";
3
+ export declare const nodeViews: {
4
+ task_item: (node: ProseMirrorNode, view: EditorView, getPos: () => number | undefined) => NodeView;
5
+ image: (node: ProseMirrorNode, view: EditorView, getPos: () => number | undefined) => NodeView;
6
+ };
@@ -0,0 +1,2 @@
1
+ import { Plugin } from "prosemirror-state";
2
+ export declare const corePlugins: Plugin[];
@@ -0,0 +1,6 @@
1
+ export declare const markdownInputRules: import("prosemirror-state").Plugin<{
2
+ transform: import("prosemirror-state").Transaction;
3
+ from: number;
4
+ to: number;
5
+ text: string;
6
+ } | null>;
@@ -0,0 +1,3 @@
1
+ import { Plugin, PluginKey } from "prosemirror-state";
2
+ export declare const placeholderPluginKey: PluginKey<any>;
3
+ export declare function placeholderPlugin(text: string): Plugin<any>;
@@ -0,0 +1,12 @@
1
+ import { Plugin, PluginKey } from "prosemirror-state";
2
+ export declare const SlashCommandPluginKey: PluginKey<any>;
3
+ export interface SlashCommandState {
4
+ active: boolean;
5
+ range?: {
6
+ from: number;
7
+ to: number;
8
+ };
9
+ query?: string;
10
+ dismissed?: boolean;
11
+ }
12
+ export declare function slashCommandPlugin(): Plugin<SlashCommandState>;
@@ -0,0 +1,2 @@
1
+ import { Schema } from "prosemirror-model";
2
+ export declare const schema: Schema<string, string>;
File without changes
@@ -0,0 +1,10 @@
1
+ export interface BubbleColorMenuItem {
2
+ name: string;
3
+ color: string;
4
+ }
5
+ interface ColorSelectorProps {
6
+ open: boolean;
7
+ onOpenChange: (open: boolean) => void;
8
+ }
9
+ export declare const ColorSelector: ({ open, onOpenChange }: ColorSelectorProps) => import("react/jsx-runtime").JSX.Element | null;
10
+ export {};
@@ -0,0 +1,8 @@
1
+ export declare function isValidUrl(url: string): boolean;
2
+ export declare function getUrlFromString(str: string): string | null;
3
+ interface LinkSelectorProps {
4
+ open: boolean;
5
+ onOpenChange: (open: boolean) => void;
6
+ }
7
+ export declare const LinkSelector: ({ open, onOpenChange }: LinkSelectorProps) => import("react/jsx-runtime").JSX.Element | null;
8
+ export {};
@@ -0,0 +1,15 @@
1
+ import { EditorState, Transaction } from "prosemirror-state";
2
+ export type SelectorItem = {
3
+ name: string;
4
+ labelKey: string;
5
+ icon: React.ElementType;
6
+ command: (state: EditorState, dispatch: (tr: Transaction) => void) => void;
7
+ isActive: (state: EditorState) => boolean;
8
+ };
9
+ interface NodeSelectorProps {
10
+ open: boolean;
11
+ onOpenChange: (open: boolean) => void;
12
+ portalContainer: HTMLElement | null;
13
+ }
14
+ export declare const NodeSelector: ({ open, onOpenChange, portalContainer }: NodeSelectorProps) => import("react/jsx-runtime").JSX.Element | null;
15
+ export {};
@@ -0,0 +1 @@
1
+ export declare const TextButtons: () => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,5 @@
1
+ import { JSONContent } from "./components";
2
+ export type { JSONContent };
3
+ export type EditorAIController = {
4
+ autocomplete: (textBefore: string, textAfter: string, onUpdate: (delta: string) => void) => Promise<string>;
5
+ };
@@ -0,0 +1,16 @@
1
+ import { EditorState, Plugin } from "prosemirror-state";
2
+ import { EditorView } from "prosemirror-view";
3
+ export interface UseProseMirrorOptions {
4
+ content?: any;
5
+ plugins?: Plugin[];
6
+ editable?: boolean;
7
+ onMarkdownContentChange?: (content: string) => void;
8
+ onJsonContentChange?: (content: any | null) => void;
9
+ onHtmlContentChange?: (content: string) => void;
10
+ version?: number;
11
+ }
12
+ export declare function useProseMirror(options: UseProseMirrorOptions): {
13
+ mountRef: import("react").RefObject<HTMLDivElement | null>;
14
+ view: EditorView | null;
15
+ editorState: EditorState | null;
16
+ };
@@ -0,0 +1,6 @@
1
+ import { EditorState } from "prosemirror-state";
2
+ export declare function isMarkActive(state: EditorState, type: any): boolean;
3
+ export declare function isNodeActive(state: EditorState, type: any, attrs?: any): boolean;
4
+ export declare function getMarkAttributes(state: EditorState, type: any): any;
5
+ export declare function setMark(type: any, attrs?: any): (state: EditorState, dispatch?: (tr: any) => void) => boolean;
6
+ export declare function unsetMark(type: any): (state: EditorState, dispatch?: (tr: any) => void) => boolean;
@@ -0,0 +1 @@
1
+ export declare function removeClassesFromJson(jsonObj: any): any;
@@ -0,0 +1 @@
1
+ export declare function useDebouncedCallback<T>(value: T, callback: () => void, immediate: boolean, timeoutMs?: number): void;
@@ -1,5 +1,5 @@
1
1
  import { FieldProps } from "../../index";
2
- import { FireCMSEditorProps } from "@firecms/editor";
2
+ import { FireCMSEditorProps } from "../../editor";
3
3
  interface MarkdownEditorFieldProps {
4
4
  highlight?: {
5
5
  from: number;
@@ -24,3 +24,4 @@ export * from "./useBuildNavigationController";
24
24
  export * from "./useBuildLocalConfigurationPersistence";
25
25
  export * from "./useBuildModeController";
26
26
  export * from "./useValidateAuthenticator";
27
+ export * from "./useTranslation";
@@ -1,5 +1,4 @@
1
1
  import { AuthController, CMSView, CMSViewsBuilder, DataSourceDelegate, EntityCollection, EntityCollectionsBuilder, FireCMSPlugin, NavigationController, NavigationGroupMapping, PermissionsBuilder, User, UserConfigurationPersistence } from "../types";
2
- export declare const NAVIGATION_DEFAULT_GROUP_NAME = "Views";
3
2
  export declare const NAVIGATION_ADMIN_GROUP_NAME = "Admin";
4
3
  export type BuildNavigationContextProps<EC extends EntityCollection, USER extends User> = {
5
4
  /**
@@ -6,7 +6,7 @@
6
6
  * @param groupNames - Array of group names to track
7
7
  * @param namespace - Namespace for localStorage key (e.g., "home", "drawer") to allow independent state
8
8
  */
9
- export declare function useCollapsedGroups(groupNames: string[], namespace?: string): {
10
- isGroupCollapsed: (name: string) => boolean;
11
- toggleGroupCollapsed: (name: string) => void;
9
+ export declare function useCollapsedGroups(groupNames: (string | null)[], namespace?: string): {
10
+ isGroupCollapsed: (name?: string | null) => boolean;
11
+ toggleGroupCollapsed: (name?: string | null) => void;
12
12
  };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Internal hook for translating FireCMS UI strings.
3
+ *
4
+ * Uses the `firecms_core` i18next namespace that is initialised by
5
+ * `FireCMSi18nProvider`. Do NOT use `react-i18next` directly in internal
6
+ * components — always go through this hook so the namespace is consistent.
7
+ *
8
+ * @example
9
+ * const { t } = useTranslation();
10
+ * <Button>{t("save")}</Button>
11
+ *
12
+ * @internal
13
+ */
14
+ export declare function useTranslation(): {
15
+ t: (key: string, vars?: Record<string, string>) => string;
16
+ i18n: import("i18next").i18n;
17
+ };
@@ -0,0 +1,33 @@
1
+ import { PropsWithChildren } from "react";
2
+ import { FireCMSTranslations } from "../types/translations";
3
+ export declare const FIRECMS_LOCALE_STORAGE_KEY = "firecms_locale";
4
+ /** DeepPartial helper — allows partial overrides at any nesting level */
5
+ type DeepPartial<T> = T extends object ? {
6
+ [K in keyof T]?: DeepPartial<T[K]>;
7
+ } : T;
8
+ export interface FireCMSi18nProviderProps {
9
+ /** BCP-47 locale tag, e.g. "en", "es", "fr". Defaults to "en". */
10
+ locale?: string;
11
+ /**
12
+ * Override or extend any FireCMS UI string, keyed by locale.
13
+ *
14
+ * @example
15
+ * translations={{
16
+ * en: { save: "Publish" },
17
+ * es: { save: "Publicar", discard: "Descartar" }
18
+ * }}
19
+ */
20
+ translations?: {
21
+ [locale: string]: DeepPartial<FireCMSTranslations>;
22
+ };
23
+ }
24
+ /**
25
+ * Initialises a dedicated i18next instance for FireCMS's internal UI strings.
26
+ *
27
+ * This instance is isolated from any app-level i18next configuration the
28
+ * consumer may have. Mount this at the top of the FireCMS component tree.
29
+ *
30
+ * @internal
31
+ */
32
+ export declare function FireCMSi18nProvider({ locale, translations, children }: PropsWithChildren<FireCMSi18nProviderProps>): import("react/jsx-runtime").JSX.Element | null;
33
+ export {};
package/dist/index.d.ts CHANGED
@@ -7,3 +7,7 @@ export * from "./hooks";
7
7
  export * from "./components";
8
8
  export * from "./util";
9
9
  export * from "./contexts";
10
+ export * from "./i18n/FireCMSi18nProvider";
11
+ export * from "./locales/en";
12
+ export * from "./locales/es";
13
+ export * from "./editor";