@rebasepro/admin 0.12.1-canary.gf5f1d39 → 0.13.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 +1 -1
- package/dist/{CollectionEditorDialog-Dpc75wIZ.js → CollectionEditorDialog-CjXkWZ64.js} +75 -62
- package/dist/{CollectionEditorDialog-Dpc75wIZ.js.map → CollectionEditorDialog-CjXkWZ64.js.map} +1 -1
- package/dist/{PropertyEditView-DH3XZC2x.js → PropertyEditView-W8I3YV89.js} +36 -16
- package/dist/{PropertyEditView-DH3XZC2x.js.map → PropertyEditView-W8I3YV89.js.map} +1 -1
- package/dist/{RouterCollectionsStudioView-BZLq4MGp.js → RouterCollectionsStudioView-BsLTNoqX.js} +5 -5
- package/dist/{RouterCollectionsStudioView-BZLq4MGp.js.map → RouterCollectionsStudioView-BsLTNoqX.js.map} +1 -1
- package/dist/collection_editor/serializable_types.d.ts +4 -1
- package/dist/collection_editor/ui/collection_editor/CollectionRelationsTab.d.ts +1 -0
- package/dist/collection_editor/useLocalCollectionsConfigController.d.ts +8 -0
- package/dist/collection_editor_ui.js +5 -5
- package/dist/collection_editor_ui.js.map +1 -1
- package/dist/components/CollectionTableBinding/column_utils.d.ts +17 -0
- package/dist/components/CollectionViewBinding/CollectionViewStartActions.d.ts +7 -2
- package/dist/components/CollectionViewBinding/SortButton.d.ts +24 -0
- package/dist/components/CollectionViewBinding/SplitListCloseButton.d.ts +10 -0
- package/dist/components/CollectionViewBinding/SplitViewContext.d.ts +23 -0
- package/dist/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.d.ts +26 -0
- package/dist/components/DetailViewBinding.d.ts +5 -0
- package/dist/components/EditFormActions.d.ts +12 -1
- package/dist/components/EditViewBinding.d.ts +6 -1
- package/dist/components/EntityIdentityBar.d.ts +53 -0
- package/dist/components/EntityInspector.d.ts +35 -0
- package/dist/components/EntityPreviewNesting.d.ts +25 -0
- package/dist/components/EntityViewBinding.d.ts +9 -0
- package/dist/components/InlineEntityPreview.d.ts +47 -0
- package/dist/components/history/EntityHistoryView.d.ts +4 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/editor.js +18 -10
- package/dist/editor.js.map +1 -1
- package/dist/{export-BzIpUdSK.js → export-J79rMoNj.js} +2 -2
- package/dist/{export-BzIpUdSK.js.map → export-J79rMoNj.js.map} +1 -1
- package/dist/form/EntityForm.d.ts +1 -1
- package/dist/form/EntityFormActions.d.ts +11 -1
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/FieldBlock.d.ts +30 -0
- package/dist/form/components/FormRail.d.ts +18 -0
- package/dist/form/components/FormSections.d.ts +16 -0
- package/dist/form/components/index.d.ts +3 -2
- package/dist/form/components/useRailVisible.d.ts +24 -0
- package/dist/form/field_bindings/BinaryFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/GeopointFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/VectorFieldBinding.d.ts +1 -1
- package/dist/{history-g9688IaK.js → history-D7L_JlLO.js} +35 -33
- package/dist/history-D7L_JlLO.js.map +1 -0
- package/dist/hooks/navigation/utils.d.ts +16 -0
- package/dist/hooks/useBuildSidePanel.d.ts +14 -0
- package/dist/hooks/useEntityDisplayTitle.d.ts +18 -0
- package/dist/hooks/useHistory.d.ts +7 -0
- package/dist/hooks/useRecordActions.d.ts +17 -0
- package/dist/{import-BjUG-cIY.js → import-BvYl--U4.js} +2 -2
- package/dist/{import-BjUG-cIY.js.map → import-BvYl--U4.js.map} +1 -1
- package/dist/index.js +106 -35
- package/dist/index.js.map +1 -1
- package/dist/markdown-CklalUUk.js.map +1 -1
- package/dist/preview/components/InlineEntityListPreview.d.ts +15 -0
- package/dist/preview/index.d.ts +1 -0
- package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +1 -1
- package/dist/types/components/EntityFormActionsProps.d.ts +0 -1
- package/dist/types/components/EntityFormProps.d.ts +0 -5
- package/dist/types/fields.d.ts +24 -0
- package/dist/{util-B5fJm1FA.js → util-GiwPgxnL.js} +2106 -1117
- package/dist/util-GiwPgxnL.js.map +1 -0
- package/package.json +32 -34
- package/src/collection_editor/ConfigControllerProvider.tsx +1 -1
- package/src/collection_editor/serializable_types.ts +4 -3
- package/src/collection_editor/serializable_utils.ts +51 -17
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +65 -22
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +38 -30
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +3 -1
- package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/RouterCollectionsStudioView.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +16 -0
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +127 -15
- package/src/collection_editor/validateCollectionJson.ts +3 -3
- package/src/components/AdminModeSyncer.tsx +1 -1
- package/src/components/CollectionTableBinding/PropertyTableCell.tsx +10 -2
- package/src/components/CollectionTableBinding/column_utils.tsx +59 -2
- package/src/components/CollectionTableBinding/table_bindings.tsx +2 -1
- package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +23 -16
- package/src/components/CollectionViewBinding/CollectionViewActions.tsx +7 -1
- package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +9 -2
- package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +47 -12
- package/src/components/CollectionViewBinding/SortButton.tsx +189 -0
- package/src/components/CollectionViewBinding/SplitListCloseButton.tsx +33 -0
- package/src/components/CollectionViewBinding/SplitListView.tsx +18 -3
- package/src/components/CollectionViewBinding/SplitViewContext.tsx +34 -0
- package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +48 -9
- package/src/components/CollectionViewBinding/useBoardDataController.tsx +80 -25
- package/src/components/CollectionViewBinding/usePreviewSlots.ts +18 -6
- package/src/components/DefaultAppBar.tsx +1 -1
- package/src/components/DefaultDrawer.tsx +1 -1
- package/src/components/DetailViewBinding.tsx +112 -148
- package/src/components/DrawerNavigationItem.tsx +1 -1
- package/src/components/EditFormActions.tsx +54 -129
- package/src/components/EditViewBinding.tsx +202 -99
- package/src/components/EntityIdentityBar.tsx +288 -0
- package/src/components/EntityInspector.tsx +137 -0
- package/src/components/EntityPreviewBinding.tsx +6 -2
- package/src/components/EntityPreviewNesting.tsx +50 -0
- package/src/components/EntityViewBinding.tsx +35 -32
- package/src/components/HomePage/FavouritesView.tsx +1 -1
- package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
- package/src/components/HomePage/SmallNavigationCard.tsx +1 -1
- package/src/components/InlineEntityPreview.tsx +149 -0
- package/src/components/RebaseLayout.tsx +1 -1
- package/src/components/RebaseNavigation.tsx +45 -5
- package/src/components/RebaseRouteDefs.tsx +1 -1
- package/src/components/SelectableTable/SelectableTable.tsx +2 -2
- package/src/components/SidePanelBinding.tsx +19 -13
- package/src/components/UserSelector.tsx +12 -6
- package/src/components/common/default_entity_actions.tsx +4 -3
- package/src/components/history/EntityHistoryEntry.tsx +28 -7
- package/src/components/history/EntityHistoryView.tsx +29 -24
- package/src/components/history/LastEditedByIndicator.tsx +4 -3
- package/src/components/index.ts +2 -0
- package/src/data_import/utils/get_import_inference_type.ts +6 -0
- package/src/form/EntityForm.tsx +267 -179
- package/src/form/EntityFormActions.tsx +50 -99
- package/src/form/EntityFormBinding.tsx +4 -2
- package/src/form/PropertyFieldBinding.tsx +4 -0
- package/src/form/components/FieldBlock.tsx +119 -0
- package/src/form/components/FormRail.tsx +125 -0
- package/src/form/components/FormSections.tsx +118 -0
- package/src/form/components/index.tsx +3 -2
- package/src/form/components/useRailVisible.tsx +46 -0
- package/src/form/field_bindings/BinaryFieldBinding.tsx +3 -2
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +3 -2
- package/src/form/field_bindings/GeopointFieldBinding.tsx +3 -2
- package/src/form/field_bindings/MapFieldBinding.tsx +1 -2
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +3 -2
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +2 -1
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +2 -1
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +2 -1
- package/src/form/field_bindings/RelationFieldBinding.tsx +6 -4
- package/src/form/field_bindings/RepeatFieldBinding.tsx +4 -1
- package/src/form/field_bindings/SelectFieldBinding.tsx +3 -2
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +31 -8
- package/src/form/field_bindings/SwitchFieldBinding.tsx +7 -3
- package/src/form/field_bindings/TextFieldBinding.tsx +18 -16
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +3 -2
- package/src/form/field_bindings/VectorFieldBinding.tsx +2 -1
- package/src/hooks/navigation/useBuildUrlController.tsx +1 -1
- package/src/hooks/navigation/useTopLevelNavigation.ts +18 -7
- package/src/hooks/navigation/utils.ts +20 -0
- package/src/hooks/useBuildSideDialogsController.tsx +2 -2
- package/src/hooks/useBuildSidePanel.tsx +22 -61
- package/src/hooks/useEntityDisplayTitle.tsx +60 -0
- package/src/hooks/useHistory.ts +20 -10
- package/src/hooks/useRecordActions.tsx +69 -0
- package/src/hooks/useResolvedUsers.ts +10 -5
- package/src/preview/PropertyPreview.tsx +48 -22
- package/src/preview/components/InlineEntityListPreview.tsx +42 -0
- package/src/preview/components/ReferencePreview.tsx +34 -14
- package/src/preview/components/RelationPreview.tsx +34 -14
- package/src/preview/index.ts +1 -0
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +24 -1
- package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +25 -1
- package/src/routes/RebaseRoute.tsx +2 -2
- package/src/types/components/EntityFormActionsProps.tsx +0 -1
- package/src/types/components/EntityFormProps.tsx +0 -6
- package/src/types/fields.tsx +27 -0
- package/dist/form/components/FormEntry.d.ts +0 -6
- package/dist/form/components/FormLayout.d.ts +0 -5
- package/dist/history-g9688IaK.js.map +0 -1
- package/dist/util-B5fJm1FA.js.map +0 -1
- package/src/form/components/FormEntry.tsx +0 -22
- package/src/form/components/FormLayout.tsx +0 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-CklalUUk.js","names":[],"sources":["../src/editor/schema.ts","../src/editor/markdown.ts"],"sourcesContent":["import { Schema, NodeSpec, MarkSpec } from \"prosemirror-model\";\nimport { tableNodes } from \"prosemirror-tables\";\n\nconst marks: { [key: string]: MarkSpec } = {\n link: {\n attrs: {\n href: {},\n title: { default: null },\n target: { default: \"_blank\" }\n },\n inclusive: false,\n parseDOM: [\n {\n tag: \"a[href]\",\n getAttrs(dom: HTMLElement | string) {\n if (typeof dom === \"string\") return false;\n return {\n href: dom.getAttribute(\"href\"),\n title: dom.getAttribute(\"title\"),\n target: dom.getAttribute(\"target\") || \"_blank\"\n };\n }\n }\n ],\n toDOM(node) {\n const {\n href,\n title,\n target\n } = node.attrs;\n return [\"a\", {\n href,\n title,\n target,\n class: \"text-surface-700 dark:text-surface-accent-200 underline underline-offset-[3px] hover:text-primary transition-colors cursor-pointer\"\n }, 0];\n }\n },\n bold: {\n parseDOM: [\n { tag: \"strong\" },\n {\n tag: \"b\",\n getAttrs: (node: HTMLElement | string) => typeof node !== \"string\" && node.style.fontWeight !== \"normal\" && null\n },\n {\n style: \"font-weight=400\",\n clearMark: m => m.type.name === \"bold\"\n },\n {\n style: \"font-weight\",\n getAttrs: (value: string | HTMLElement) => typeof value === \"string\" && /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null\n }\n ],\n toDOM() {\n return [\"strong\", 0];\n }\n },\n italic: {\n parseDOM: [{ tag: \"i\" }, { tag: \"em\" }, { style: \"font-style=italic\" }],\n toDOM() {\n return [\"em\", 0];\n }\n },\n strike: {\n parseDOM: [{ tag: \"s\" }, { tag: \"del\" }, { tag: \"strike\" }, { style: \"text-decoration=line-through\" }],\n toDOM() {\n return [\"s\", 0];\n }\n },\n underline: {\n parseDOM: [{ tag: \"u\" }, { style: \"text-decoration=underline\" }],\n toDOM() {\n return [\"u\", 0];\n }\n },\n code: {\n parseDOM: [{ tag: \"code\" }],\n toDOM() {\n return [\"code\", {\n class: \"rounded-md bg-surface-accent-50 dark:bg-surface-700 px-1.5 py-1 font-mono font-medium\",\n spellcheck: \"false\"\n }, 0];\n }\n },\n textStyle: {\n attrs: { color: { default: null } },\n parseDOM: [\n {\n style: \"color\",\n getAttrs: (value: string | HTMLElement) => {\n if (typeof value === \"string\") return { color: value };\n return false;\n }\n }\n ],\n toDOM(mark) {\n let style = \"\";\n if (mark.attrs.color) style += `color: ${mark.attrs.color};`;\n return [\"span\", { style }, 0];\n }\n },\n highlight: {\n attrs: { color: { default: null } },\n parseDOM: [\n {\n tag: \"mark\",\n getAttrs: (dom: HTMLElement | string) => {\n if (typeof dom === \"string\") return false;\n return { color: dom.style.backgroundColor || dom.getAttribute(\"data-color\") };\n }\n }\n ],\n toDOM(mark) {\n return [\"mark\", mark.attrs.color ? {\n style: `background-color: ${mark.attrs.color}; color: inherit;`,\n \"data-color\": mark.attrs.color\n } : {}, 0];\n }\n }\n};\n\nconst nodes: { [key: string]: NodeSpec } = {\n doc: {\n content: \"block+\"\n },\n paragraph: {\n content: \"inline*\",\n group: \"block\",\n parseDOM: [{ tag: \"p\" }],\n toDOM() {\n return [\"p\", 0];\n }\n },\n text: {\n group: \"inline\"\n },\n blockquote: {\n content: \"block+\",\n group: \"block\",\n defining: true,\n parseDOM: [{ tag: \"blockquote\" }],\n toDOM() {\n return [\"blockquote\", { class: \"border-l-4 border-primary\" }, 0];\n }\n },\n heading: {\n attrs: { level: { default: 1 } },\n content: \"inline*\",\n group: \"block\",\n defining: true,\n parseDOM: [\n {\n tag: \"h1\",\n attrs: { level: 1 }\n },\n {\n tag: \"h2\",\n attrs: { level: 2 }\n },\n {\n tag: \"h3\",\n attrs: { level: 3 }\n },\n {\n tag: \"h4\",\n attrs: { level: 4 }\n },\n {\n tag: \"h5\",\n attrs: { level: 5 }\n },\n {\n tag: \"h6\",\n attrs: { level: 6 }\n }\n ],\n toDOM(node) {\n return [\"h\" + node.attrs.level, 0];\n }\n },\n horizontal_rule: {\n group: \"block\",\n parseDOM: [{ tag: \"hr\" }],\n toDOM() {\n return [\"hr\", { class: \"mt-4 mb-6 border-t border-solid border-gray-200 dark:border-gray-800\" }];\n }\n },\n code_block: {\n content: \"text*\",\n marks: \"\",\n group: \"block\",\n code: true,\n defining: true,\n attrs: { language: { default: null } },\n parseDOM: [\n {\n tag: \"pre\",\n preserveWhitespace: \"full\"\n }\n ],\n toDOM(node) {\n return [\"pre\", { class: \"rounded bg-blue-50 dark:bg-surface-700 border border-solid border-gray-200 dark:border-gray-800 p-5 font-mono font-medium text-gray-800 dark:text-gray-200\" }, [\"code\", 0]];\n }\n },\n image: {\n inline: false,\n group: \"block\",\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null }\n },\n draggable: true,\n parseDOM: [\n {\n tag: \"img[src]\",\n getAttrs(dom: HTMLElement | string) {\n if (typeof dom === \"string\") return false;\n return {\n src: dom.getAttribute(\"src\"),\n title: dom.getAttribute(\"title\"),\n alt: dom.getAttribute(\"alt\")\n };\n }\n }\n ],\n toDOM(node) {\n const {\n src,\n alt,\n title\n } = node.attrs;\n return [\"img\", {\n src,\n alt,\n title,\n class: \"rounded-lg max-w-full !m-0\"\n }];\n }\n },\n bullet_list: {\n content: \"list_item+\",\n group: \"block\",\n parseDOM: [{ tag: \"ul\" }],\n toDOM() {\n return [\"ul\", { class: \"list-disc list-outside leading-3 -mt-2\" }, 0];\n }\n },\n ordered_list: {\n content: \"list_item+\",\n group: \"block\",\n attrs: { order: { default: 1 } },\n parseDOM: [\n {\n tag: \"ol\",\n getAttrs(dom: HTMLElement | string) {\n if (typeof dom === \"string\") return false;\n return { order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\")! : 1 };\n }\n }\n ],\n toDOM(node) {\n return node.attrs.order === 1 ? [\"ol\", { class: \"list-decimal list-outside leading-3 -mt-2\" }, 0] : [\"ol\", {\n start: node.attrs.order,\n class: \"list-decimal list-outside leading-3 -mt-2\"\n }, 0];\n }\n },\n list_item: {\n content: \"paragraph block*\",\n parseDOM: [{ tag: \"li\" }],\n toDOM() {\n return [\"li\", { class: \"leading-normal -mb-2\" }, 0];\n },\n defining: true\n },\n task_list: {\n group: \"block\",\n content: \"task_item+\",\n parseDOM: [{ tag: \"ul[data-type=\\\"taskList\\\"]\" }],\n toDOM() {\n return [\"ul\", {\n \"data-type\": \"taskList\",\n class: \"not-prose\"\n }, 0];\n }\n },\n task_item: {\n content: \"paragraph block*\",\n defining: true,\n attrs: { checked: { default: false } },\n parseDOM: [\n {\n tag: \"li[data-type=\\\"taskItem\\\"]\",\n getAttrs(dom: HTMLElement | string) {\n if (typeof dom === \"string\") return false;\n return { checked: dom.getAttribute(\"data-checked\") === \"true\" };\n }\n }\n ],\n toDOM(node) {\n return [\"li\", {\n \"data-type\": \"taskItem\",\n \"data-checked\": node.attrs.checked ? \"true\" : \"false\",\n class: \"flex items-start my-4\"\n }, 0];\n }\n },\n hard_break: {\n inline: true,\n group: \"inline\",\n selectable: false,\n parseDOM: [{ tag: \"br\" }],\n toDOM() {\n return [\"br\"];\n }\n },\n ...tableNodes({\n tableGroup: \"block\",\n cellContent: \"block+\",\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom: HTMLElement) {\n return dom.style.backgroundColor || null\n },\n setDOMAttr(value: unknown, attrs: any) {\n if (value && typeof value === \"string\") attrs.style = (attrs.style || \"\") + `background-color: ${value};`\n }\n }\n }\n })\n};\n\nexport const schema = new Schema({\n nodes,\n marks\n});\n","/* eslint-disable @typescript-eslint/triple-slash-reference */\n/// <reference path=\"./markdown-it-plugins.d.ts\" />\nimport {\n MarkdownParser,\n MarkdownSerializer,\n defaultMarkdownParser,\n defaultMarkdownSerializer\n} from \"prosemirror-markdown\";\nimport markdownIt from \"markdown-it\";\nimport markdownItTaskLists from \"markdown-it-task-lists\";\nimport markdownItMark from \"markdown-it-mark\";\nimport markdownItIns from \"markdown-it-ins\";\n\nimport { schema } from \"./schema\";\n\n/**\n * ProseMirror's MarkdownSerializerState exposes an `out` string property\n * that accumulates the serialised output. The published typings do not\n * include it, so we extend the type locally to avoid `as any` casts.\n */\ninterface MarkdownSerializerStateWithOutput {\n out: string;\n}\n\nconst parserTokens: any = {\n ...defaultMarkdownParser.tokens,\n em: { mark: \"italic\" },\n strong: { mark: \"bold\" },\n html_inline: { ignore: true,\nnoCloseToken: true },\n html_block: { ignore: true,\nnoCloseToken: true },\n s: {\n mark: \"strike\"\n },\n task_list: {\n block: \"task_list\"\n },\n task_item: {\n block: \"task_item\",\n getAttrs: (tok: any) => ({ checked: tok.attrGet(\"checked\") === \"true\" })\n },\n mark: {\n mark: \"highlight\"\n },\n ins: {\n mark: \"underline\"\n },\n table: { block: \"table\" },\n thead: { ignore: true },\n tbody: { ignore: true },\n tr: { block: \"table_row\" },\n th: { block: \"table_header\" },\n td: { block: \"table_cell\" }\n};\n\nconst md = markdownIt({ html: false })\n .use(markdownItTaskLists)\n .use(markdownItMark)\n .use(markdownItIns);\n\n// Unwrap images from paragraphs so they can be parsed as block nodes by ProseMirror\nmd.core.ruler.after(\"inline\", \"image-to-block\", (state: any) => {\n const tokens = state.tokens;\n for (let i = tokens.length - 2; i >= 1; i--) {\n if (\n tokens[i - 1] && tokens[i - 1].type === \"paragraph_open\" &&\n tokens[i] && tokens[i].type === \"inline\" &&\n tokens[i + 1] && tokens[i + 1].type === \"paragraph_close\"\n ) {\n const inlineTokens = tokens[i].children || [];\n if (inlineTokens.length === 1 && inlineTokens[0].type === \"image\") {\n state.tokens.splice(i - 1, 3, inlineTokens[0]);\n // No need to adjust index when looping backward!\n }\n }\n }\n});\n\n// Wrap inline tokens inside table cells into paragraphs to satisfy ProseMirror table cell schema (block+)\nmd.core.ruler.after(\"inline\", \"tables-wrap-paragraphs\", (state: any) => {\n const tokens = state.tokens;\n for (let i = tokens.length - 1; i >= 0; i--) {\n if (tokens[i].type === \"td_open\" || tokens[i].type === \"th_open\") {\n let closeIndex = i + 1;\n while (closeIndex < tokens.length && tokens[closeIndex].type !== \"td_close\" && tokens[closeIndex].type !== \"th_close\") {\n closeIndex++;\n }\n if (closeIndex < tokens.length) {\n const pOpen = new state.Token(\"paragraph_open\", \"p\", 1);\n pOpen.block = true;\n const pClose = new state.Token(\"paragraph_close\", \"p\", -1);\n pClose.block = true;\n\n state.tokens.splice(closeIndex, 0, pClose);\n state.tokens.splice(i + 1, 0, pOpen);\n }\n }\n }\n});\n\nexport const markdownParser = new MarkdownParser(schema, md, parserTokens);\n\n\nexport const markdownSerializer = new MarkdownSerializer(\n {\n ...defaultMarkdownSerializer.nodes,\n // Use \"-\" as bullet character to match markdown-it output and prevent\n // serialization round-trip from changing \"- \" to \"* \" and dirtying the form.\n bullet_list(state, node) {\n state.renderList(node, \" \", () => \"- \");\n },\n // Add custom serialization for task lists\n task_list(state, node) {\n state.renderList(node, \" \", () => \"- \");\n },\n task_item(state, node) {\n state.write(`[${node.attrs.checked ? \"x\" : \" \"}] `);\n state.renderContent(node);\n },\n horizontal_rule(state, node) {\n state.write(node.attrs.markup || \"---\");\n state.closeBlock(node);\n },\n image(state, node) {\n const rawSrc = node.attrs.src || \"\";\n const src = rawSrc.replace(/ /g, \"%20\");\n state.write(\"]/g, \"\\\\$&\") +\n (node.attrs.title ? ' \"' + node.attrs.title.replace(/\"/g, '\\\\\"') + '\"' : \"\") + \")\");\n state.closeBlock(node);\n },\n table(state, node) {\n // Access the internal `.out` accumulator with a typed cast (see MarkdownSerializerStateWithOutput).\n const stateInternal = state as unknown as MarkdownSerializerStateWithOutput;\n node.forEach((row, _, i) => {\n row.forEach((cell, _, j) => {\n if (j === 0) state.write(\"| \");\n else state.write(\" \");\n\n // Capture cell content by tracking state.out length.\n // This avoids monkey-patching state.write which loses\n // flushClose/delim handling and can produce \"undefined\" text.\n const startLen = stateInternal.out.length;\n let first = true;\n cell.forEach((block) => {\n if (!first) stateInternal.out += \"<br>\";\n state.renderInline(block);\n first = false;\n });\n const cellContent = stateInternal.out.slice(startLen);\n // Remove the rendered content from state.out; we'll re-add it escaped\n stateInternal.out = stateInternal.out.slice(0, startLen);\n state.write(cellContent.replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \" \"));\n state.write(\" |\");\n });\n state.write(\"\\n\");\n if (i === 0) {\n row.forEach((cell, _, j) => {\n state.write(j === 0 ? \"|---|\" : \"---|\");\n });\n state.write(\"\\n\");\n }\n });\n state.closeBlock(node);\n },\n table_row() {},\n table_cell() {},\n table_header() {}\n },\n {\n ...defaultMarkdownSerializer.marks,\n bold: defaultMarkdownSerializer.marks.strong,\n italic: defaultMarkdownSerializer.marks.em,\n strike: { open: \"~~\",\nclose: \"~~\",\nmixable: true,\nexpelEnclosingWhitespace: true },\n highlight: { open: \"==\",\nclose: \"==\",\nmixable: true,\nexpelEnclosingWhitespace: true },\n underline: { open: \"++\",\nclose: \"++\",\nmixable: true,\nexpelEnclosingWhitespace: true },\n link: {\n ...defaultMarkdownSerializer.marks.link,\n close(state: any, mark, parent, index) {\n const inAutolink = state.inAutolink;\n state.inAutolink = undefined;\n const href = mark.attrs.href.replace(/ /g, \"%20\");\n return inAutolink ? \">\"\n : \"](\" + href.replace(/[\\(\\)\"]/g, \"\\\\$&\") + (mark.attrs.title ? ` \"${mark.attrs.title.replace(/\"/g, '\\\\\"')}\"` : \"\") + \")\";\n }\n },\n // textStyle (colored text from HTML) has no markdown equivalent — emit content as-is\n textStyle: { open: \"\",\nclose: \"\",\nmixable: true,\nexpelEnclosingWhitespace: true }\n }\n);\nexport const parser = markdownParser;\nexport const serializer = markdownSerializer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"markdown-CklalUUk.js","names":[],"sources":["../src/editor/schema.ts","../src/editor/markdown.ts"],"sourcesContent":["import { Schema, NodeSpec, MarkSpec } from \"prosemirror-model\";\nimport { tableNodes } from \"prosemirror-tables\";\n\nconst marks: { [key: string]: MarkSpec } = {\n link: {\n attrs: {\n href: {},\n title: { default: null },\n target: { default: \"_blank\" }\n },\n inclusive: false,\n parseDOM: [\n {\n tag: \"a[href]\",\n getAttrs(dom: HTMLElement | string) {\n if (typeof dom === \"string\") return false;\n return {\n href: dom.getAttribute(\"href\"),\n title: dom.getAttribute(\"title\"),\n target: dom.getAttribute(\"target\") || \"_blank\"\n };\n }\n }\n ],\n toDOM(node) {\n const {\n href,\n title,\n target\n } = node.attrs;\n return [\"a\", {\n href,\n title,\n target,\n class: \"text-surface-700 dark:text-surface-accent-200 underline underline-offset-[3px] hover:text-primary transition-colors cursor-pointer\"\n }, 0];\n }\n },\n bold: {\n parseDOM: [\n { tag: \"strong\" },\n {\n tag: \"b\",\n getAttrs: (node: HTMLElement | string) => typeof node !== \"string\" && node.style.fontWeight !== \"normal\" && null\n },\n {\n style: \"font-weight=400\",\n clearMark: m => m.type.name === \"bold\"\n },\n {\n style: \"font-weight\",\n getAttrs: (value: string | HTMLElement) => typeof value === \"string\" && /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null\n }\n ],\n toDOM() {\n return [\"strong\", 0];\n }\n },\n italic: {\n parseDOM: [{ tag: \"i\" }, { tag: \"em\" }, { style: \"font-style=italic\" }],\n toDOM() {\n return [\"em\", 0];\n }\n },\n strike: {\n parseDOM: [{ tag: \"s\" }, { tag: \"del\" }, { tag: \"strike\" }, { style: \"text-decoration=line-through\" }],\n toDOM() {\n return [\"s\", 0];\n }\n },\n underline: {\n parseDOM: [{ tag: \"u\" }, { style: \"text-decoration=underline\" }],\n toDOM() {\n return [\"u\", 0];\n }\n },\n code: {\n parseDOM: [{ tag: \"code\" }],\n toDOM() {\n return [\"code\", {\n class: \"rounded-md bg-surface-accent-50 dark:bg-surface-700 px-1.5 py-1 font-mono font-medium\",\n spellcheck: \"false\"\n }, 0];\n }\n },\n textStyle: {\n attrs: { color: { default: null } },\n parseDOM: [\n {\n style: \"color\",\n getAttrs: (value: string | HTMLElement) => {\n if (typeof value === \"string\") return { color: value };\n return false;\n }\n }\n ],\n toDOM(mark) {\n let style = \"\";\n if (mark.attrs.color) style += `color: ${mark.attrs.color};`;\n return [\"span\", { style }, 0];\n }\n },\n highlight: {\n attrs: { color: { default: null } },\n parseDOM: [\n {\n tag: \"mark\",\n getAttrs: (dom: HTMLElement | string) => {\n if (typeof dom === \"string\") return false;\n return { color: dom.style.backgroundColor || dom.getAttribute(\"data-color\") };\n }\n }\n ],\n toDOM(mark) {\n return [\"mark\", mark.attrs.color ? {\n style: `background-color: ${mark.attrs.color}; color: inherit;`,\n \"data-color\": mark.attrs.color\n } : {}, 0];\n }\n }\n};\n\nconst nodes: { [key: string]: NodeSpec } = {\n doc: {\n content: \"block+\"\n },\n paragraph: {\n content: \"inline*\",\n group: \"block\",\n parseDOM: [{ tag: \"p\" }],\n toDOM() {\n return [\"p\", 0];\n }\n },\n text: {\n group: \"inline\"\n },\n blockquote: {\n content: \"block+\",\n group: \"block\",\n defining: true,\n parseDOM: [{ tag: \"blockquote\" }],\n toDOM() {\n return [\"blockquote\", { class: \"border-l-4 border-primary\" }, 0];\n }\n },\n heading: {\n attrs: { level: { default: 1 } },\n content: \"inline*\",\n group: \"block\",\n defining: true,\n parseDOM: [\n {\n tag: \"h1\",\n attrs: { level: 1 }\n },\n {\n tag: \"h2\",\n attrs: { level: 2 }\n },\n {\n tag: \"h3\",\n attrs: { level: 3 }\n },\n {\n tag: \"h4\",\n attrs: { level: 4 }\n },\n {\n tag: \"h5\",\n attrs: { level: 5 }\n },\n {\n tag: \"h6\",\n attrs: { level: 6 }\n }\n ],\n toDOM(node) {\n return [\"h\" + node.attrs.level, 0];\n }\n },\n horizontal_rule: {\n group: \"block\",\n parseDOM: [{ tag: \"hr\" }],\n toDOM() {\n return [\"hr\", { class: \"mt-4 mb-6 border-t border-solid border-gray-200 dark:border-gray-800\" }];\n }\n },\n code_block: {\n content: \"text*\",\n marks: \"\",\n group: \"block\",\n code: true,\n defining: true,\n attrs: { language: { default: null } },\n parseDOM: [\n {\n tag: \"pre\",\n preserveWhitespace: \"full\"\n }\n ],\n toDOM(node) {\n return [\"pre\", { class: \"rounded bg-blue-50 dark:bg-surface-700 border border-solid border-gray-200 dark:border-gray-800 p-5 font-mono font-medium text-gray-800 dark:text-gray-200\" }, [\"code\", 0]];\n }\n },\n image: {\n inline: false,\n group: \"block\",\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null }\n },\n draggable: true,\n parseDOM: [\n {\n tag: \"img[src]\",\n getAttrs(dom: HTMLElement | string) {\n if (typeof dom === \"string\") return false;\n return {\n src: dom.getAttribute(\"src\"),\n title: dom.getAttribute(\"title\"),\n alt: dom.getAttribute(\"alt\")\n };\n }\n }\n ],\n toDOM(node) {\n const {\n src,\n alt,\n title\n } = node.attrs;\n return [\"img\", {\n src,\n alt,\n title,\n class: \"rounded-lg max-w-full !m-0\"\n }];\n }\n },\n bullet_list: {\n content: \"list_item+\",\n group: \"block\",\n parseDOM: [{ tag: \"ul\" }],\n toDOM() {\n return [\"ul\", { class: \"list-disc list-outside leading-3 -mt-2\" }, 0];\n }\n },\n ordered_list: {\n content: \"list_item+\",\n group: \"block\",\n attrs: { order: { default: 1 } },\n parseDOM: [\n {\n tag: \"ol\",\n getAttrs(dom: HTMLElement | string) {\n if (typeof dom === \"string\") return false;\n return { order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\")! : 1 };\n }\n }\n ],\n toDOM(node) {\n return node.attrs.order === 1 ? [\"ol\", { class: \"list-decimal list-outside leading-3 -mt-2\" }, 0] : [\"ol\", {\n start: node.attrs.order,\n class: \"list-decimal list-outside leading-3 -mt-2\"\n }, 0];\n }\n },\n list_item: {\n content: \"paragraph block*\",\n parseDOM: [{ tag: \"li\" }],\n toDOM() {\n return [\"li\", { class: \"leading-normal -mb-2\" }, 0];\n },\n defining: true\n },\n task_list: {\n group: \"block\",\n content: \"task_item+\",\n parseDOM: [{ tag: \"ul[data-type=\\\"taskList\\\"]\" }],\n toDOM() {\n return [\"ul\", {\n \"data-type\": \"taskList\",\n class: \"not-prose\"\n }, 0];\n }\n },\n task_item: {\n content: \"paragraph block*\",\n defining: true,\n attrs: { checked: { default: false } },\n parseDOM: [\n {\n tag: \"li[data-type=\\\"taskItem\\\"]\",\n getAttrs(dom: HTMLElement | string) {\n if (typeof dom === \"string\") return false;\n return { checked: dom.getAttribute(\"data-checked\") === \"true\" };\n }\n }\n ],\n toDOM(node) {\n return [\"li\", {\n \"data-type\": \"taskItem\",\n \"data-checked\": node.attrs.checked ? \"true\" : \"false\",\n class: \"flex items-start my-4\"\n }, 0];\n }\n },\n hard_break: {\n inline: true,\n group: \"inline\",\n selectable: false,\n parseDOM: [{ tag: \"br\" }],\n toDOM() {\n return [\"br\"];\n }\n },\n ...tableNodes({\n tableGroup: \"block\",\n cellContent: \"block+\",\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom: HTMLElement) {\n return dom.style.backgroundColor || null\n },\n setDOMAttr(value: unknown, attrs: any) {\n if (value && typeof value === \"string\") attrs.style = (attrs.style || \"\") + `background-color: ${value};`\n }\n }\n }\n })\n};\n\nexport const schema = new Schema({\n nodes,\n marks\n});\n","/* eslint-disable @typescript-eslint/triple-slash-reference */\n/// <reference path=\"./markdown-it-plugins.d.ts\" />\nimport {\n MarkdownParser,\n MarkdownSerializer,\n defaultMarkdownParser,\n defaultMarkdownSerializer\n} from \"prosemirror-markdown\";\nimport markdownIt from \"markdown-it\";\nimport markdownItTaskLists from \"markdown-it-task-lists\";\nimport markdownItMark from \"markdown-it-mark\";\nimport markdownItIns from \"markdown-it-ins\";\n\nimport { schema } from \"./schema\";\n\n/**\n * ProseMirror's MarkdownSerializerState exposes an `out` string property\n * that accumulates the serialised output. The published typings do not\n * include it, so we extend the type locally to avoid `as any` casts.\n */\ninterface MarkdownSerializerStateWithOutput {\n out: string;\n}\n\nconst parserTokens: any = {\n ...defaultMarkdownParser.tokens,\n em: { mark: \"italic\" },\n strong: { mark: \"bold\" },\n html_inline: { ignore: true,\nnoCloseToken: true },\n html_block: { ignore: true,\nnoCloseToken: true },\n s: {\n mark: \"strike\"\n },\n task_list: {\n block: \"task_list\"\n },\n task_item: {\n block: \"task_item\",\n getAttrs: (tok: any) => ({ checked: tok.attrGet(\"checked\") === \"true\" })\n },\n mark: {\n mark: \"highlight\"\n },\n ins: {\n mark: \"underline\"\n },\n table: { block: \"table\" },\n thead: { ignore: true },\n tbody: { ignore: true },\n tr: { block: \"table_row\" },\n th: { block: \"table_header\" },\n td: { block: \"table_cell\" }\n};\n\nconst md = markdownIt({ html: false })\n .use(markdownItTaskLists)\n .use(markdownItMark)\n .use(markdownItIns);\n\n// Unwrap images from paragraphs so they can be parsed as block nodes by ProseMirror\nmd.core.ruler.after(\"inline\", \"image-to-block\", (state: any) => {\n const tokens = state.tokens;\n for (let i = tokens.length - 2; i >= 1; i--) {\n if (\n tokens[i - 1] && tokens[i - 1].type === \"paragraph_open\" &&\n tokens[i] && tokens[i].type === \"inline\" &&\n tokens[i + 1] && tokens[i + 1].type === \"paragraph_close\"\n ) {\n const inlineTokens = tokens[i].children || [];\n if (inlineTokens.length === 1 && inlineTokens[0].type === \"image\") {\n state.tokens.splice(i - 1, 3, inlineTokens[0]);\n // No need to adjust index when looping backward!\n }\n }\n }\n});\n\n// Wrap inline tokens inside table cells into paragraphs to satisfy ProseMirror table cell schema (block+)\nmd.core.ruler.after(\"inline\", \"tables-wrap-paragraphs\", (state: any) => {\n const tokens = state.tokens;\n for (let i = tokens.length - 1; i >= 0; i--) {\n if (tokens[i].type === \"td_open\" || tokens[i].type === \"th_open\") {\n let closeIndex = i + 1;\n while (closeIndex < tokens.length && tokens[closeIndex].type !== \"td_close\" && tokens[closeIndex].type !== \"th_close\") {\n closeIndex++;\n }\n if (closeIndex < tokens.length) {\n const pOpen = new state.Token(\"paragraph_open\", \"p\", 1);\n pOpen.block = true;\n const pClose = new state.Token(\"paragraph_close\", \"p\", -1);\n pClose.block = true;\n\n state.tokens.splice(closeIndex, 0, pClose);\n state.tokens.splice(i + 1, 0, pOpen);\n }\n }\n }\n});\n\nexport const markdownParser = new MarkdownParser(schema, md, parserTokens);\n\n\nexport const markdownSerializer = new MarkdownSerializer(\n {\n ...defaultMarkdownSerializer.nodes,\n // Use \"-\" as bullet character to match markdown-it output and prevent\n // serialization round-trip from changing \"- \" to \"* \" and dirtying the form.\n bullet_list(state, node) {\n state.renderList(node, \" \", () => \"- \");\n },\n // Add custom serialization for task lists\n task_list(state, node) {\n state.renderList(node, \" \", () => \"- \");\n },\n task_item(state, node) {\n state.write(`[${node.attrs.checked ? \"x\" : \" \"}] `);\n state.renderContent(node);\n },\n horizontal_rule(state, node) {\n state.write(node.attrs.markup || \"---\");\n state.closeBlock(node);\n },\n image(state, node) {\n const rawSrc = node.attrs.src || \"\";\n const src = rawSrc.replace(/ /g, \"%20\");\n state.write(\"]/g, \"\\\\$&\") +\n (node.attrs.title ? ' \"' + node.attrs.title.replace(/\"/g, '\\\\\"') + '\"' : \"\") + \")\");\n state.closeBlock(node);\n },\n table(state, node) {\n // Access the internal `.out` accumulator with a typed cast (see MarkdownSerializerStateWithOutput).\n const stateInternal = state as unknown as MarkdownSerializerStateWithOutput;\n node.forEach((row, _, i) => {\n row.forEach((cell, _, j) => {\n if (j === 0) state.write(\"| \");\n else state.write(\" \");\n\n // Capture cell content by tracking state.out length.\n // This avoids monkey-patching state.write which loses\n // flushClose/delim handling and can produce \"undefined\" text.\n const startLen = stateInternal.out.length;\n let first = true;\n cell.forEach((block) => {\n if (!first) stateInternal.out += \"<br>\";\n state.renderInline(block);\n first = false;\n });\n const cellContent = stateInternal.out.slice(startLen);\n // Remove the rendered content from state.out; we'll re-add it escaped\n stateInternal.out = stateInternal.out.slice(0, startLen);\n state.write(cellContent.replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \" \"));\n state.write(\" |\");\n });\n state.write(\"\\n\");\n if (i === 0) {\n row.forEach((cell, _, j) => {\n state.write(j === 0 ? \"|---|\" : \"---|\");\n });\n state.write(\"\\n\");\n }\n });\n state.closeBlock(node);\n },\n table_row() {},\n table_cell() {},\n table_header() {}\n },\n {\n ...defaultMarkdownSerializer.marks,\n bold: defaultMarkdownSerializer.marks.strong,\n italic: defaultMarkdownSerializer.marks.em,\n strike: { open: \"~~\",\nclose: \"~~\",\nmixable: true,\nexpelEnclosingWhitespace: true },\n highlight: { open: \"==\",\nclose: \"==\",\nmixable: true,\nexpelEnclosingWhitespace: true },\n underline: { open: \"++\",\nclose: \"++\",\nmixable: true,\nexpelEnclosingWhitespace: true },\n link: {\n ...defaultMarkdownSerializer.marks.link,\n close(state: any, mark, parent, index) {\n const inAutolink = state.inAutolink;\n state.inAutolink = undefined;\n const href = mark.attrs.href.replace(/ /g, \"%20\");\n return inAutolink ? \">\"\n : \"](\" + href.replace(/[\\(\\)\"]/g, \"\\\\$&\") + (mark.attrs.title ? ` \"${mark.attrs.title.replace(/\"/g, '\\\\\"')}\"` : \"\") + \")\";\n }\n },\n // textStyle (colored text from HTML) has no markdown equivalent — emit content as-is\n textStyle: { open: \"\",\nclose: \"\",\nmixable: true,\nexpelEnclosingWhitespace: true }\n }\n);\nexport const parser = markdownParser;\nexport const serializer = markdownSerializer;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type InlineEntityListPreviewProps<T> = {
|
|
3
|
+
items: T[];
|
|
4
|
+
renderItem: (item: T, index: number) => React.ReactNode;
|
|
5
|
+
max?: number;
|
|
6
|
+
className?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* One wrapping line of inline entity links, with the overflow collapsed into a
|
|
10
|
+
* `+N`. Used for arrays of references or relations that are nested inside
|
|
11
|
+
* another preview, where stacking full-width cards turns a card into a wall.
|
|
12
|
+
*
|
|
13
|
+
* @group Preview components
|
|
14
|
+
*/
|
|
15
|
+
export declare function InlineEntityListPreview<T>({ items, renderItem, max, className }: InlineEntityListPreviewProps<T>): React.JSX.Element | null;
|
package/dist/preview/index.d.ts
CHANGED
|
@@ -20,4 +20,5 @@ export * from "./components/EmptyValue";
|
|
|
20
20
|
export * from "./components/ImagePreview";
|
|
21
21
|
export * from "./components/ReferencePreview";
|
|
22
22
|
export * from "./components/RelationPreview";
|
|
23
|
+
export * from "./components/InlineEntityListPreview";
|
|
23
24
|
export * from "./components/UserPreview";
|
|
@@ -3,4 +3,4 @@ import type { PropertyPreviewProps } from "../../types/components/PropertyPrevie
|
|
|
3
3
|
/**
|
|
4
4
|
* @group Preview components
|
|
5
5
|
*/
|
|
6
|
-
export declare function ArrayOfReferencesPreview({ propertyKey, value, property: property, size }: PropertyPreviewProps<ArrayProperty>): import("react").JSX.Element;
|
|
6
|
+
export declare function ArrayOfReferencesPreview({ propertyKey, value, property: property, size, textOnly }: PropertyPreviewProps<ArrayProperty>): import("react").JSX.Element;
|
|
@@ -3,4 +3,4 @@ import type { PropertyPreviewProps } from "../../types/components/PropertyPrevie
|
|
|
3
3
|
/**
|
|
4
4
|
* @group Preview components
|
|
5
5
|
*/
|
|
6
|
-
export declare function ArrayOfRelationsPreview({ propertyKey, value, property, size }: PropertyPreviewProps<ArrayProperty>): import("react").JSX.Element;
|
|
6
|
+
export declare function ArrayOfRelationsPreview({ propertyKey, value, property, size, textOnly }: PropertyPreviewProps<ArrayProperty>): import("react").JSX.Element;
|
|
@@ -20,7 +20,6 @@ export type EntityFormProps<M extends Record<string, unknown>> = {
|
|
|
20
20
|
onSaved?: (params: OnUpdateParams) => void;
|
|
21
21
|
initialDirtyValues?: Partial<M>;
|
|
22
22
|
onFormContextReady?: (formContext: FormContext<M>) => void;
|
|
23
|
-
forceActionsAtTheBottom?: boolean;
|
|
24
23
|
className?: string;
|
|
25
24
|
initialStatus: EntityStatus;
|
|
26
25
|
onStatusChange?: (status: EntityStatus) => void;
|
|
@@ -35,10 +34,6 @@ export type EntityFormProps<M extends Record<string, unknown>> = {
|
|
|
35
34
|
* Include the copy and delete actions in the form
|
|
36
35
|
*/
|
|
37
36
|
showDefaultActions?: boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Display the entity path in the form
|
|
40
|
-
*/
|
|
41
|
-
showEntityPath?: boolean;
|
|
42
37
|
EntityFormActionsComponent?: React.FC<EntityFormActionsProps>;
|
|
43
38
|
navigateBack?: () => void;
|
|
44
39
|
Builder?: React.ComponentType<EntityCustomViewParams<M>>;
|
package/dist/types/fields.d.ts
CHANGED
|
@@ -57,6 +57,20 @@ export interface FieldProps<P extends Property | Property = Property, CustomProp
|
|
|
57
57
|
* Should this field include a description
|
|
58
58
|
*/
|
|
59
59
|
includeDescription?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* The container is rendering the label and the description itself, so this
|
|
62
|
+
* field should render only its control.
|
|
63
|
+
*
|
|
64
|
+
* This is what the generated form sets. Field types used to disagree about
|
|
65
|
+
* where a label goes — text and number put it inside the input, select,
|
|
66
|
+
* array, storage and read-only put it above — which read as two design
|
|
67
|
+
* systems in one column. The label now belongs to the form, and the binding
|
|
68
|
+
* to the control.
|
|
69
|
+
*
|
|
70
|
+
* A custom field that ignores this still renders its own label, so it
|
|
71
|
+
* degrades to the old look rather than losing its label.
|
|
72
|
+
*/
|
|
73
|
+
hideLabel?: boolean;
|
|
60
74
|
/**
|
|
61
75
|
* Flag to indicate that the underlying value has been updated in the
|
|
62
76
|
* driver
|
|
@@ -155,6 +169,11 @@ export interface FormContext<M extends Record<string, unknown> = Record<string,
|
|
|
155
169
|
*/
|
|
156
170
|
formex: FormexController<M>;
|
|
157
171
|
disabled: boolean;
|
|
172
|
+
/**
|
|
173
|
+
* A save is in flight, including the autosave debounce, which `formex`
|
|
174
|
+
* cannot report because it never goes through `handleSubmit`.
|
|
175
|
+
*/
|
|
176
|
+
isSaving?: boolean;
|
|
158
177
|
/**
|
|
159
178
|
* Whether the form context is in read-only detail view mode.
|
|
160
179
|
* Custom entity views can use this to adjust their rendering.
|
|
@@ -185,6 +204,11 @@ export interface PropertyFieldBindingProps<M extends Record<string, unknown> = R
|
|
|
185
204
|
* Should the description be included in this field
|
|
186
205
|
*/
|
|
187
206
|
includeDescription?: boolean;
|
|
207
|
+
/**
|
|
208
|
+
* The container renders the label and description; render only the control.
|
|
209
|
+
* See the note on {@link FieldProps.hideLabel}.
|
|
210
|
+
*/
|
|
211
|
+
hideLabel?: boolean;
|
|
188
212
|
/**
|
|
189
213
|
* Has the value of this property been updated in the database while this
|
|
190
214
|
* field is being edited
|