@rebasepro/admin 0.12.0 → 0.12.1-canary.gdfba2a1
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/dist/{CollectionEditorDialog-Dpc75wIZ.js → CollectionEditorDialog-B8j6HArJ.js} +19 -11
- package/dist/{CollectionEditorDialog-Dpc75wIZ.js.map → CollectionEditorDialog-B8j6HArJ.js.map} +1 -1
- package/dist/{PropertyEditView-DH3XZC2x.js → PropertyEditView-D2b9_nbC.js} +12 -9
- package/dist/{PropertyEditView-DH3XZC2x.js.map → PropertyEditView-D2b9_nbC.js.map} +1 -1
- package/dist/{RouterCollectionsStudioView-BZLq4MGp.js → RouterCollectionsStudioView-CXUtYIc1.js} +4 -4
- package/dist/{RouterCollectionsStudioView-BZLq4MGp.js.map → RouterCollectionsStudioView-CXUtYIc1.js.map} +1 -1
- package/dist/collection_editor_ui.js +4 -4
- package/dist/editor.js +18 -10
- package/dist/editor.js.map +1 -1
- package/dist/{export-BzIpUdSK.js → export-CrDJOGKn.js} +2 -2
- package/dist/{export-BzIpUdSK.js.map → export-CrDJOGKn.js.map} +1 -1
- package/dist/{history-g9688IaK.js → history-s6Nzt7RF.js} +2 -2
- package/dist/{history-g9688IaK.js.map → history-s6Nzt7RF.js.map} +1 -1
- package/dist/{import-BjUG-cIY.js → import-Ci32nU0G.js} +2 -2
- package/dist/{import-BjUG-cIY.js.map → import-Ci32nU0G.js.map} +1 -1
- package/dist/index.js +17 -12
- package/dist/index.js.map +1 -1
- package/dist/markdown-CklalUUk.js.map +1 -1
- package/dist/{util-B5fJm1FA.js → util-BwZuV81o.js} +87 -50
- package/dist/{util-B5fJm1FA.js.map → util-BwZuV81o.js.map} +1 -1
- package/package.json +24 -24
|
@@ -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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"}
|
|
@@ -2265,8 +2265,10 @@ function VirtualTableSelect(props) {
|
|
|
2265
2265
|
if (ref.current && focused) ref.current?.focus({ preventScroll: true });
|
|
2266
2266
|
}, [focused, ref]);
|
|
2267
2267
|
const onChange = useCallback((updatedValue) => {
|
|
2268
|
-
if (valueType === "number") if (multiple)
|
|
2269
|
-
|
|
2268
|
+
if (valueType === "number") if (multiple) {
|
|
2269
|
+
const newValue = updatedValue.map((v) => parseFloat(v));
|
|
2270
|
+
updateValue(newValue);
|
|
2271
|
+
} else updateValue(parseFloat(updatedValue));
|
|
2270
2272
|
else if (valueType === "string") if (!updatedValue) updateValue(null);
|
|
2271
2273
|
else updateValue(updatedValue);
|
|
2272
2274
|
else throw Error("Missing mapping in TableSelect");
|
|
@@ -4974,7 +4976,8 @@ function StringNumberFilterField({ name, value, setValue, type, isArray, enumVal
|
|
|
4974
4976
|
disabled: isNullOperation,
|
|
4975
4977
|
placeholder: isNullOperation ? "null" : void 0,
|
|
4976
4978
|
onChange: (evt) => {
|
|
4977
|
-
|
|
4979
|
+
const val = type === "number" ? parseFloat(evt.target.value) : evt.target.value;
|
|
4980
|
+
updateFilter(operation, val);
|
|
4978
4981
|
},
|
|
4979
4982
|
endAdornment: internalValue !== void 0 && internalValue != null && /* @__PURE__ */ jsx(IconButton, {
|
|
4980
4983
|
onClick: (e) => updateFilter(operation, void 0),
|
|
@@ -5842,6 +5845,13 @@ var CollectionTableBinding = function CollectionTableBinding({ className, style,
|
|
|
5842
5845
|
}), {}) : entity;
|
|
5843
5846
|
const Builder = additionalField.Builder;
|
|
5844
5847
|
if (!Builder && !additionalField.value) throw new Error("When using additional fields you need to provide a Builder or a value");
|
|
5848
|
+
const child = Builder ? /* @__PURE__ */ jsx(Builder, {
|
|
5849
|
+
entity,
|
|
5850
|
+
context
|
|
5851
|
+
}) : /* @__PURE__ */ jsx(Fragment, { children: additionalField.value?.({
|
|
5852
|
+
entity,
|
|
5853
|
+
context
|
|
5854
|
+
})?.toString() });
|
|
5845
5855
|
return /* @__PURE__ */ jsx(EntityTableCell, {
|
|
5846
5856
|
width,
|
|
5847
5857
|
size,
|
|
@@ -5858,13 +5868,7 @@ var CollectionTableBinding = function CollectionTableBinding({ className, style,
|
|
|
5858
5868
|
isDragging,
|
|
5859
5869
|
isDraggable,
|
|
5860
5870
|
frozen,
|
|
5861
|
-
children: /* @__PURE__ */ jsx(ErrorBoundary, { children:
|
|
5862
|
-
entity,
|
|
5863
|
-
context
|
|
5864
|
-
}) : /* @__PURE__ */ jsx(Fragment, { children: additionalField.value?.({
|
|
5865
|
-
entity,
|
|
5866
|
-
context
|
|
5867
|
-
})?.toString() }) })
|
|
5871
|
+
children: /* @__PURE__ */ jsx(ErrorBoundary, { children: child })
|
|
5868
5872
|
}, `additional_table_cell_${entity.id}_${column.key}`);
|
|
5869
5873
|
}, [size]);
|
|
5870
5874
|
const engine = useCollectionScope()?.engine;
|
|
@@ -6315,7 +6319,10 @@ function SearchIconsView({ selectedIcon = "", onIconSelected }) {
|
|
|
6315
6319
|
const [query, setQuery] = React.useState("");
|
|
6316
6320
|
const updateSearchResults = React.useMemo(() => debounce((value) => {
|
|
6317
6321
|
if (!value || value === "") setKeys(null);
|
|
6318
|
-
else
|
|
6322
|
+
else {
|
|
6323
|
+
const limited = iconsSearch.search(value).slice(0, 50);
|
|
6324
|
+
setKeys(limited.map((e) => e.item.key));
|
|
6325
|
+
}
|
|
6319
6326
|
}, UPDATE_SEARCH_INDEX_WAIT_MS), []);
|
|
6320
6327
|
React.useEffect(() => {
|
|
6321
6328
|
updateSearchResults(query);
|
|
@@ -6516,15 +6523,18 @@ function ArrayContainer({ droppableId, addLabel, value, disabled = false, buildE
|
|
|
6516
6523
|
}, []);
|
|
6517
6524
|
const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }), useSensor(KeyboardSensor, {}));
|
|
6518
6525
|
useEffect(() => {
|
|
6519
|
-
if (hasValue && value && value.length !== internalIds.length)
|
|
6520
|
-
const
|
|
6521
|
-
|
|
6522
|
-
|
|
6523
|
-
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
|
|
6526
|
+
if (hasValue && value && value.length !== internalIds.length) {
|
|
6527
|
+
const newInternalIds = value.map((v, index) => {
|
|
6528
|
+
const hashValue = (getHashValue(v) ?? String(index)) + index;
|
|
6529
|
+
if (hashValue in internalIdsRef.current) return internalIdsRef.current[hashValue];
|
|
6530
|
+
else {
|
|
6531
|
+
const newInternalId = getRandomId$1();
|
|
6532
|
+
internalIdsRef.current[hashValue] = newInternalId;
|
|
6533
|
+
return newInternalId;
|
|
6534
|
+
}
|
|
6535
|
+
});
|
|
6536
|
+
setInternalIds(newInternalIds);
|
|
6537
|
+
}
|
|
6528
6538
|
}, [
|
|
6529
6539
|
hasValue,
|
|
6530
6540
|
internalIds.length,
|
|
@@ -6585,7 +6595,8 @@ function ArrayContainer({ droppableId, addLabel, value, disabled = false, buildE
|
|
|
6585
6595
|
const oldIndex = internalIds.indexOf(active.id);
|
|
6586
6596
|
const newIndex = internalIds.indexOf(over.id);
|
|
6587
6597
|
if (oldIndex === -1 || newIndex === -1) return;
|
|
6588
|
-
|
|
6598
|
+
const newIds = arrayMove$1(internalIds, oldIndex, newIndex);
|
|
6599
|
+
setInternalIds(newIds);
|
|
6589
6600
|
onValueChange(arrayMove$1(value ?? [], oldIndex, newIndex));
|
|
6590
6601
|
};
|
|
6591
6602
|
return sortable ? /* @__PURE__ */ jsx(DndContext, {
|
|
@@ -7308,8 +7319,9 @@ var ConfigControllerProvider = React.memo(function ConfigControllerProvider({ ch
|
|
|
7308
7319
|
editedCollectionId
|
|
7309
7320
|
});
|
|
7310
7321
|
const namespace = propertyKey && propertyKey.includes(".") ? propertyKey.substring(0, propertyKey.lastIndexOf(".")) : void 0;
|
|
7322
|
+
const propertyKeyWithoutNamespace = propertyKey && propertyKey.includes(".") ? propertyKey.substring(propertyKey.lastIndexOf(".") + 1) : propertyKey;
|
|
7311
7323
|
setCurrentPropertyDialog({
|
|
7312
|
-
propertyKey:
|
|
7324
|
+
propertyKey: propertyKeyWithoutNamespace,
|
|
7313
7325
|
property,
|
|
7314
7326
|
namespace,
|
|
7315
7327
|
currentPropertiesOrder,
|
|
@@ -7365,7 +7377,10 @@ var ConfigControllerProvider = React.memo(function ConfigControllerProvider({ ch
|
|
|
7365
7377
|
onFetchTableMetadata,
|
|
7366
7378
|
handleClose: (collection) => {
|
|
7367
7379
|
if (currentDialog?.redirect) {
|
|
7368
|
-
if (collection && currentDialog?.isNewCollection && !currentDialog.parentCollectionSlugs.length)
|
|
7380
|
+
if (collection && currentDialog?.isNewCollection && !currentDialog.parentCollectionSlugs.length) {
|
|
7381
|
+
const url = urlController.buildUrlCollectionPath(collection.slug);
|
|
7382
|
+
navigate(url);
|
|
7383
|
+
}
|
|
7369
7384
|
}
|
|
7370
7385
|
setCurrentDialog(void 0);
|
|
7371
7386
|
}
|
|
@@ -7532,8 +7547,8 @@ function EditorCollectionAction({ path, parentCollectionSlugs, parentEntityIds,
|
|
|
7532
7547
|
}
|
|
7533
7548
|
//#endregion
|
|
7534
7549
|
//#region src/components/CollectionViewBinding/CollectionViewActions.tsx
|
|
7535
|
-
var ImportCollectionAction = lazy(() => import("./import-
|
|
7536
|
-
var ExportCollectionAction = lazy(() => import("./export-
|
|
7550
|
+
var ImportCollectionAction = lazy(() => import("./import-Ci32nU0G.js").then((n) => n.t).then((m) => ({ default: m.ImportCollectionAction })));
|
|
7551
|
+
var ExportCollectionAction = lazy(() => import("./export-CrDJOGKn.js").then((n) => n.t).then((m) => ({ default: m.ExportCollectionAction })));
|
|
7537
7552
|
function CollectionViewActions({ collection, relativePath, parentCollectionSlugs, parentEntityIds, onNewClick, onAddExistingClick, onMultipleDeleteClick, selectionEnabled, path, selectionController, tableController, collectionEntitiesCount, compact, children, openNewDocument }) {
|
|
7538
7553
|
const context = useAdminContext();
|
|
7539
7554
|
const { canCreate, canDelete } = usePermissions();
|
|
@@ -7723,7 +7738,7 @@ function resolveCollectionSlotKeys(collection, authController, propertyConfigs)
|
|
|
7723
7738
|
if (!hasExplicitOrder) {
|
|
7724
7739
|
for (const [key, prop] of Object.entries(collection.properties)) if (prop.type === "relation") relationKeys.push(key);
|
|
7725
7740
|
}
|
|
7726
|
-
const excludeKeys = new Set([
|
|
7741
|
+
const excludeKeys = /* @__PURE__ */ new Set([
|
|
7727
7742
|
titleKey,
|
|
7728
7743
|
imageKey,
|
|
7729
7744
|
statusKey,
|
|
@@ -8356,7 +8371,7 @@ function CollectionListViewBinding({ collection, tableController, onEntityClick,
|
|
|
8356
8371
|
const showStatus = statusPropertyKey && size !== "xs" && size !== "s";
|
|
8357
8372
|
const subtitleKey = previewKeys.length > 0 ? previewKeys[0] : void 0;
|
|
8358
8373
|
const allKeys = resolvedCollection.propertiesOrder || Object.keys(resolvedCollection.properties);
|
|
8359
|
-
const usedKeys = new Set([
|
|
8374
|
+
const usedKeys = /* @__PURE__ */ new Set([
|
|
8360
8375
|
titlePropertyKey,
|
|
8361
8376
|
imagePropertyKey,
|
|
8362
8377
|
statusPropertyKey,
|
|
@@ -9026,7 +9041,7 @@ var MAIN_TAB_VALUE = "__main_##Q$SC^#S6";
|
|
|
9026
9041
|
var JSON_TAB_VALUE = "__json";
|
|
9027
9042
|
//#endregion
|
|
9028
9043
|
//#region src/components/DetailViewBinding.tsx
|
|
9029
|
-
var EntityHistoryView$1 = lazy(() => import("./history-
|
|
9044
|
+
var EntityHistoryView$1 = lazy(() => import("./history-s6Nzt7RF.js").then((m) => ({ default: m.EntityHistoryView })));
|
|
9030
9045
|
function DetailViewBinding({ entityId, ...props }) {
|
|
9031
9046
|
const { entity, dataLoading, dataLoadingError } = useFetch({
|
|
9032
9047
|
path: props.path,
|
|
@@ -9096,7 +9111,7 @@ function DetailViewBindingInner({ path, entityId, selectedTab: selectedTabProp,
|
|
|
9096
9111
|
const hasAdditionalViews = customViewsCount > 0 || subcollectionsCount > 0 || includeJsonView || includeHistoryView;
|
|
9097
9112
|
const { resolvedEntityViews } = resolvedSelectedEntityView(customViews, customizationController, void 0, canEdit);
|
|
9098
9113
|
const activeTab = useMemo(() => {
|
|
9099
|
-
return new Set([
|
|
9114
|
+
return /* @__PURE__ */ new Set([
|
|
9100
9115
|
"__main_##Q$SC^#S6",
|
|
9101
9116
|
...includeJsonView ? ["__json"] : [],
|
|
9102
9117
|
...includeHistoryView ? ["__rebase_history"] : [],
|
|
@@ -9321,7 +9336,8 @@ function DetailViewBindingInner({ path, entityId, selectedTab: selectedTabProp,
|
|
|
9321
9336
|
children: /* @__PURE__ */ jsx(IconButton, {
|
|
9322
9337
|
size: "small",
|
|
9323
9338
|
onClick: () => {
|
|
9324
|
-
|
|
9339
|
+
const entityUrl = urlController.buildUrlCollectionPath(`${path}/${entityId}`);
|
|
9340
|
+
navigate(`${entityUrl}#full`);
|
|
9325
9341
|
},
|
|
9326
9342
|
children: /* @__PURE__ */ jsx(Maximize2Icon, { size: iconSize.smallest })
|
|
9327
9343
|
})
|
|
@@ -10203,7 +10219,8 @@ function useBoardDataController({ fullPath, collection, columnProperty, columns,
|
|
|
10203
10219
|
const timeoutId = setTimeout(() => {
|
|
10204
10220
|
if (isCleaningUpRef.current) return;
|
|
10205
10221
|
currentColumns.forEach((column) => {
|
|
10206
|
-
|
|
10222
|
+
const itemCount = currentColumnItemCounts[column] ?? pageSize;
|
|
10223
|
+
subscribeToColumn(column, itemCount);
|
|
10207
10224
|
if (isColumnExcludedByFilter(column, currentFilterValues, currentColumnProperty)) return;
|
|
10208
10225
|
const accessor = currentDataClient.collection(currentResolvedPath);
|
|
10209
10226
|
if (accessor.count) {
|
|
@@ -11786,7 +11803,8 @@ function PopupFormFieldInternal({ tableKey, entityId, customFieldValidator, prop
|
|
|
11786
11803
|
const updatePopupLocation = useCallback((newPositionCandidate) => {
|
|
11787
11804
|
const draggableBoundingRect = draggableRef.current?.getBoundingClientRect();
|
|
11788
11805
|
if (!cellRect || !draggableBoundingRect || draggableBoundingRect.width === 0 || draggableBoundingRect.height === 0) return;
|
|
11789
|
-
const
|
|
11806
|
+
const basePosition = newPositionCandidate ?? getInitialLocation();
|
|
11807
|
+
const newNormalizedPosition = normalizePosition(basePosition, draggableBoundingRect, windowSize);
|
|
11790
11808
|
if (!popupLocation || newNormalizedPosition.x !== popupLocation.x || newNormalizedPosition.y !== popupLocation.y) setPopupLocation(newNormalizedPosition);
|
|
11791
11809
|
}, [
|
|
11792
11810
|
cellRect,
|
|
@@ -12587,7 +12605,10 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
12587
12605
|
}, [defaultViewMode, setSearchParams]);
|
|
12588
12606
|
useEffect(() => {
|
|
12589
12607
|
if (urlView) setViewModeState(urlView);
|
|
12590
|
-
else
|
|
12608
|
+
else {
|
|
12609
|
+
const savedView = getSavedView();
|
|
12610
|
+
setViewModeState(savedView ?? defaultViewMode);
|
|
12611
|
+
}
|
|
12591
12612
|
}, [
|
|
12592
12613
|
urlView,
|
|
12593
12614
|
getSavedView,
|
|
@@ -12619,9 +12640,10 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
12619
12640
|
entityId: clickedEntity.id
|
|
12620
12641
|
});
|
|
12621
12642
|
if (collection) addRecentId(collection.slug, clickedEntity.id);
|
|
12643
|
+
const entityPath = path ?? clickedEntity.path;
|
|
12622
12644
|
navigateToEntity({
|
|
12623
12645
|
navigation: urlController,
|
|
12624
|
-
path:
|
|
12646
|
+
path: entityPath,
|
|
12625
12647
|
sidePanelController,
|
|
12626
12648
|
openEntityMode,
|
|
12627
12649
|
collection,
|
|
@@ -12765,7 +12787,8 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
12765
12787
|
const onColumnResize = useCallback(({ width, key }) => {
|
|
12766
12788
|
const collection = collectionRef.current;
|
|
12767
12789
|
if (!getPropertyInPath(collection.properties, key)) return;
|
|
12768
|
-
|
|
12790
|
+
const localCollection = buildPropertyWidthOverwrite(key, width);
|
|
12791
|
+
onCollectionModifiedForUser(path, localCollection);
|
|
12769
12792
|
}, [onCollectionModifiedForUser, path]);
|
|
12770
12793
|
const onListSizeChanged = useCallback((size) => {
|
|
12771
12794
|
setListSize(size);
|
|
@@ -12947,21 +12970,24 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
12947
12970
|
return (largeLayout ? 80 + actionsWidth : 70 + actionsWidth) + (collapsedActions.length > 0 ? largeLayout ? 40 : 30 : 0);
|
|
12948
12971
|
}, [getActionsForEntity, largeLayout]);
|
|
12949
12972
|
const tableRowActionsBuilder = useCallback(({ entity, size, width, frozen }) => {
|
|
12973
|
+
const isSelected = Boolean(usedSelectionController.selectedEntities.find((e) => e.id == entity.id && e.path == entity.path));
|
|
12974
|
+
const customEntityActions = (collection.entityActions ?? EMPTY_ARRAY).map((action) => resolveEntityAction(action, customizationController.entityActions)).filter(Boolean);
|
|
12975
|
+
const actions = getActionsForEntity({
|
|
12976
|
+
entity,
|
|
12977
|
+
customEntityActions
|
|
12978
|
+
});
|
|
12950
12979
|
return /* @__PURE__ */ jsx(CollectionRowActions, {
|
|
12951
12980
|
entity,
|
|
12952
12981
|
width,
|
|
12953
12982
|
frozen,
|
|
12954
|
-
isSelected
|
|
12983
|
+
isSelected,
|
|
12955
12984
|
selectionEnabled: activeSelectionEnabled,
|
|
12956
12985
|
size,
|
|
12957
12986
|
highlightEntity: setHighlightedEntity,
|
|
12958
12987
|
unhighlightEntity: unselectNavigatedEntity,
|
|
12959
12988
|
collection,
|
|
12960
12989
|
path,
|
|
12961
|
-
actions
|
|
12962
|
-
entity,
|
|
12963
|
-
customEntityActions: (collection.entityActions ?? EMPTY_ARRAY).map((action) => resolveEntityAction(action, customizationController.entityActions)).filter(Boolean)
|
|
12964
|
-
}),
|
|
12990
|
+
actions,
|
|
12965
12991
|
hideId: collection?.hideIdFromCollection,
|
|
12966
12992
|
onCollectionChange: updateLastDeleteTimestamp,
|
|
12967
12993
|
selectionController: usedSelectionController,
|
|
@@ -12983,12 +13009,13 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
12983
13009
|
const { resolvedSlots } = customizationController;
|
|
12984
13010
|
const headerActionContributions = useMemo(() => resolvedSlots.filter((s) => s.slot === "collection.header.action").sort((a, b) => (a.order ?? 50) - (b.order ?? 50)), [resolvedSlots]);
|
|
12985
13011
|
const buildAdditionalHeaderWidget = useCallback(({ property, propertyKey, onHover }) => {
|
|
13012
|
+
const collection = collectionRef.current;
|
|
12986
13013
|
const headerSlotProps = {
|
|
12987
13014
|
property,
|
|
12988
13015
|
propertyKey,
|
|
12989
13016
|
onHover,
|
|
12990
13017
|
path,
|
|
12991
|
-
collection
|
|
13018
|
+
collection,
|
|
12992
13019
|
tableController,
|
|
12993
13020
|
parentCollectionSlugs: parentCollectionSlugs ?? EMPTY_ARRAY,
|
|
12994
13021
|
parentEntityIds: parentEntityIds ?? EMPTY_ARRAY
|
|
@@ -13729,7 +13756,7 @@ function EntityActionButton({ action, enabled, props }) {
|
|
|
13729
13756
|
}
|
|
13730
13757
|
//#endregion
|
|
13731
13758
|
//#region src/components/EditViewBinding.tsx
|
|
13732
|
-
var EntityHistoryView = lazy(() => import("./history-
|
|
13759
|
+
var EntityHistoryView = lazy(() => import("./history-s6Nzt7RF.js").then((m) => ({ default: m.EntityHistoryView })));
|
|
13733
13760
|
/**
|
|
13734
13761
|
* This is the default view that is used as the content of a side panel when
|
|
13735
13762
|
* a record is opened.
|
|
@@ -13843,7 +13870,7 @@ function EditViewBindingInner({ path, entityId, selectedTab: selectedTabProp, co
|
|
|
13843
13870
|
const hasAdditionalViews = customViewsCount > 0 || subcollectionsCount > 0 || includeJsonView || includeHistoryView;
|
|
13844
13871
|
const { resolvedEntityViews } = resolvedSelectedEntityView(customViews, customizationController, void 0, canEdit);
|
|
13845
13872
|
const activeTab = useMemo(() => {
|
|
13846
|
-
return new Set([
|
|
13873
|
+
return /* @__PURE__ */ new Set([
|
|
13847
13874
|
"__main_##Q$SC^#S6",
|
|
13848
13875
|
...includeJsonView ? ["__json"] : [],
|
|
13849
13876
|
...includeHistoryView ? ["__rebase_history"] : [],
|
|
@@ -14107,7 +14134,8 @@ function EditViewBindingInner({ path, entityId, selectedTab: selectedTabProp, co
|
|
|
14107
14134
|
size: "small",
|
|
14108
14135
|
onClick: () => {
|
|
14109
14136
|
const editSuffix = collection.defaultEntityAction === "view" ? "/edit" : "";
|
|
14110
|
-
|
|
14137
|
+
const entityUrl = urlController.buildUrlCollectionPath(`${path}/${entityId}${editSuffix}`);
|
|
14138
|
+
navigate(`${entityUrl}#full`);
|
|
14111
14139
|
},
|
|
14112
14140
|
children: /* @__PURE__ */ jsx(Maximize2Icon, { size: iconSize.smallest })
|
|
14113
14141
|
})
|
|
@@ -14408,7 +14436,10 @@ function SidePanelBinding(props) {
|
|
|
14408
14436
|
className: "self-center",
|
|
14409
14437
|
size: "small",
|
|
14410
14438
|
onClick: () => {
|
|
14411
|
-
if (entityId)
|
|
14439
|
+
if (entityId) {
|
|
14440
|
+
const fullScreenUrl = urlController.buildUrlCollectionPath(`${path}/${entityId}`);
|
|
14441
|
+
navigate(fullScreenUrl, { state: null });
|
|
14442
|
+
}
|
|
14412
14443
|
},
|
|
14413
14444
|
children: /* @__PURE__ */ jsx(Maximize2Icon, {})
|
|
14414
14445
|
})]
|
|
@@ -14446,8 +14477,13 @@ function SidePanelBinding(props) {
|
|
|
14446
14477
|
saveEntityToMemoryCache(status === "new" || status === "copy" ? path + "#new" : path + "/" + entityId, values);
|
|
14447
14478
|
setBlocked(false);
|
|
14448
14479
|
setBlockedNavigationMessage(void 0);
|
|
14449
|
-
if (entityId)
|
|
14450
|
-
|
|
14480
|
+
if (entityId) {
|
|
14481
|
+
const fullScreenUrl = urlController.buildUrlCollectionPath(`${path}/${entityId}`);
|
|
14482
|
+
navigate(fullScreenUrl, { state: null });
|
|
14483
|
+
} else {
|
|
14484
|
+
const fullScreenUrl = urlController.buildUrlCollectionPath(path);
|
|
14485
|
+
navigate(fullScreenUrl + "#new", { state: null });
|
|
14486
|
+
}
|
|
14451
14487
|
},
|
|
14452
14488
|
children: /* @__PURE__ */ jsx(Maximize2Icon, {})
|
|
14453
14489
|
})]
|
|
@@ -17143,11 +17179,12 @@ function MultiSelectFieldBinding({ propertyKey, value, setValue, error, showErro
|
|
|
17143
17179
|
});
|
|
17144
17180
|
const validValue = !!value && Array.isArray(value);
|
|
17145
17181
|
const renderValue = useCallback((enumKey, list) => {
|
|
17182
|
+
const enumValue = enumKey !== void 0 ? getLabelOrConfigFrom(enumValues, enumKey) : void 0;
|
|
17146
17183
|
return /* @__PURE__ */ jsxs(EnumValuesChip, {
|
|
17147
17184
|
enumKey,
|
|
17148
17185
|
enumValues,
|
|
17149
17186
|
size: "medium",
|
|
17150
|
-
children: [
|
|
17187
|
+
children: [enumValue?.label ?? enumKey, !list && /* @__PURE__ */ jsx("button", {
|
|
17151
17188
|
className: "ml-1 ring-offset-background rounded-full outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
17152
17189
|
onMouseDown: (e) => {
|
|
17153
17190
|
e.preventDefault();
|
|
@@ -19520,7 +19557,7 @@ function getChanges(source, comparison) {
|
|
|
19520
19557
|
const changes = {};
|
|
19521
19558
|
if (!source) return {};
|
|
19522
19559
|
if (!comparison) return source;
|
|
19523
|
-
const allKeys = Array.from(new Set([...Object.keys(source), ...Object.keys(comparison)]));
|
|
19560
|
+
const allKeys = Array.from(/* @__PURE__ */ new Set([...Object.keys(source), ...Object.keys(comparison)]));
|
|
19524
19561
|
for (const key of allKeys) {
|
|
19525
19562
|
const sourceValue = source[key];
|
|
19526
19563
|
const comparisonValue = comparison[key];
|
|
@@ -21100,4 +21137,4 @@ function getFullIdPath(propertyKey, propertyNamespace) {
|
|
|
21100
21137
|
//#endregion
|
|
21101
21138
|
export { useBuildCollectionRegistryController as $, StorageThumbnailInternal as $n, CollectionTableBinding as $t, getFieldId as A, ArrayOfReferencesPreview as An, convertFileToJson as At, MapFieldBinding as B, getBracketNotation as Bn, getCollectionBySlugWithin as Bt, removeEmptyContainers as C, MapPropertyPreview as Cn, convertDataToEntity as Ct, getDefaultFieldConfig as D, ArrayEnumPreview as Dn, useImportConfig as Dt, DEFAULT_FIELD_CONFIGS as E, ArrayPropertyEnumPreview as En, getInferenceType as Et, SelectFieldBinding as F, CollectionRegistryContext as Fn, FieldCaption as Ft, useSelectionDialog as G, getPropertyInPath as Gn, removeTrailingSlash$1 as Gt, DateTimeFieldBinding as H, getIconForProperty as Hn, getLastSegment$1 as Ht, RepeatFieldBinding as I, useCollectionRegistryController as In, useBreadcrumbsController as It, useBuildUrlController as J, isRelationProperty as Jn, resolveViewMode as Jt, SelectionTableBinding as K, getResolvedPropertyInPath as Kn, resolveCollectionPathIds$1 as Kt, ReferenceFieldBinding as L, getEntityPreviewKeys as Ln, BreadcrumbsProvider as Lt, TextFieldBinding as M, EntityPreviewBinding as Mn, ArrayContainer as Mt, SwitchFieldBinding as N, SidePanelControllerContext as Nn, PropertyConfigBadge as Nt, getDefaultFieldId as O, ArrayOfStorageComponentsPreview as On, ImportSaveInProgress as Ot, StorageUploadFieldBinding as P, useSidePanel as Pn, SearchIconsView as Pt, useResolvedCollections as Q, StorageThumbnail as Qn, VirtualTableInput$1 as Qt, MultiSelectFieldBinding as R, getEntityTitlePropertyKey as Rn, mergeEntityActions as Rt, getInitialEntityValues as S, KeyValuePreview as Sn, DataNewPropertiesMapping as St, PropertyFieldBinding as T, ArrayOfStringsPreview as Tn, processValueMapping as Tt, BlockFieldBinding as U, getIconForWidget as Un, removeInitialAndTrailingSlashes$1 as Ut, KeyValueFieldBinding as V, getDefaultPropertiesOrder as Vn, getCollectionPathsCombinations as Vt, ArrayOfReferencesFieldBinding as W, getPropertiesWithPropertiesOrder as Wn, removeInitialSlash as Wt, useTopLevelNavigation as X, StringPropertyPreview as Xn, resolveEntityView as Xt, useBuildNavigationStateController as Y, ArrayPropertyPreview as Yn, resolveEntityAction as Yt, useResolvedViews as Z, EnumValuesChip as Zn, useSelectionController as Zt, useCollectionsConfigController as _, getUserLabel as _n, CollectionViewActions as _t, namespaceToPropertiesPath as a, NavigationStateContext as an, UrlComponentPreview as ar, useBuildSidePanel as at, extractTouchedValues as b, BooleanPreview as bn, useCollectionEditorDialogsState as bt, buildCollectionGenerationCallback as c, SideDialogsControllerContext as cn, EmptyValue as cr, copyEntityAction as ct, fromSerializableCollectionConfigs as d, useClearRestoreValue as dn, LabelWithIcon as dr, resetPasswordAction as dt, SelectableTable as en, SkeletonPropertyComponent as er, useHistory as et, fromSerializableProperties as f, ReadOnlyFieldBinding as fn, FormLayout as fr, CreationResultDialog as ft, toSerializableProperty as g, UserPreview as gn, EntityCardBinding as gt, toSerializableProperties as h, PropertyPreview as hn, CollectionCardViewBinding as ht, namespaceToPropertiesOrderPath as i, useUrlController as in, renderSkeletonText as ir, getEntityViewWidth as it, VectorFieldBinding as j, ReferencePreview as jn, unflattenObject as jt, getFieldConfig as k, RelationPreview as kn, ImportFileUpload as kt, validateCollectionJson as l, SelectableTableContext as ln, LabelWithIconAndTooltip as lr, deleteEntityAction as lt, toSerializableCollectionConfig as m, ArrayOfMapsPreview as mn, EntityViewBinding as mt, getFullIdPath as n, useAdminContext as nn, renderSkeletonIcon as nr, useResolvedNavigationFrom as nt, CollectionGenerationApiError as o, useNavigationStateController as on, ImagePreview as or, EditViewBinding as ot, fromSerializableProperty as p, FieldHelperText as pn, FormEntry as pr, DetailViewBinding as pt, SideDialogs as q, isReferenceProperty as qn, resolveOpenEntityMode as qt, idToPropertiesPath as r, UrlContext as rn, renderSkeletonImageThumbnail as rr, buildSidePanelsFromUrl as rt, DEFAULT_COLLECTION_GENERATION_ENDPOINT as s, useSideDialogsController as sn, sanitizeUrl as sr, CollectionViewBinding as st, getFullId as t, CollectionRowActions as tn, renderSkeletonCaptionText as tr, resolveNavigationFrom as tt, fromSerializableCollectionConfig as u, ArrayCustomShapedFieldBinding as un, PropertyIdCopyTooltip as ur, editEntityAction as ut, EntityFormBinding as v, useResolvedUser as vn, useCollectionEditorController as vt, zodToFormErrors as w, ArrayOneOfPreview as wn, flattenEntry as wt, getChanges as x, DatePreview as xn, ImportNewPropertyFieldPreview as xt, EntityForm as y, NumberPropertyPreview as yn, ConfigControllerProvider as yt, MarkdownEditorFieldBinding as z, getEntityTitlePropertyKeyForEntity as zn, addInitialSlash as zt };
|
|
21102
21139
|
|
|
21103
|
-
//# sourceMappingURL=util-
|
|
21140
|
+
//# sourceMappingURL=util-BwZuV81o.js.map
|