@carlonicora/nextjs-jsonapi 1.3.1 → 1.4.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.
Files changed (39) hide show
  1. package/dist/{BlockNoteEditor-7WYPN34K.js → BlockNoteEditor-QV6ESIQA.js} +5 -5
  2. package/dist/{BlockNoteEditor-7WYPN34K.js.map → BlockNoteEditor-QV6ESIQA.js.map} +1 -1
  3. package/dist/{BlockNoteEditor-V625C23O.mjs → BlockNoteEditor-U2IHUVUF.mjs} +3 -3
  4. package/dist/chunk-3UELCPIN.js +46 -0
  5. package/dist/chunk-3UELCPIN.js.map +1 -0
  6. package/dist/{chunk-K2ANOT66.js → chunk-E2HRC2OG.js} +37 -35
  7. package/dist/chunk-E2HRC2OG.js.map +1 -0
  8. package/dist/{chunk-5QC7A6BL.mjs → chunk-R2ONK22M.mjs} +20 -18
  9. package/dist/chunk-R2ONK22M.mjs.map +1 -0
  10. package/dist/chunk-SZZYEG3P.mjs +46 -0
  11. package/dist/chunk-SZZYEG3P.mjs.map +1 -0
  12. package/dist/client/index.js +3 -3
  13. package/dist/client/index.mjs +2 -2
  14. package/dist/components/index.js +3 -3
  15. package/dist/components/index.mjs +2 -2
  16. package/dist/contexts/index.js +3 -3
  17. package/dist/contexts/index.mjs +2 -2
  18. package/dist/features/index.js +1 -1
  19. package/dist/features/index.mjs +1 -1
  20. package/dist/hooks/index.js +3 -3
  21. package/dist/hooks/index.mjs +2 -2
  22. package/dist/index.js +2 -2
  23. package/dist/index.mjs +1 -1
  24. package/dist/roles/index.d.mts +7 -1
  25. package/dist/roles/index.d.ts +7 -1
  26. package/dist/roles/index.js +8 -2
  27. package/dist/roles/index.js.map +1 -1
  28. package/dist/roles/index.mjs +7 -1
  29. package/package.json +1 -1
  30. package/src/features/auth/components/details/LandingComponent.tsx +27 -29
  31. package/src/roles/config.ts +15 -0
  32. package/src/roles/index.ts +9 -1
  33. package/dist/chunk-4HCRAOS5.js +0 -28
  34. package/dist/chunk-4HCRAOS5.js.map +0 -1
  35. package/dist/chunk-5QC7A6BL.mjs.map +0 -1
  36. package/dist/chunk-BLWVZK6J.mjs +0 -28
  37. package/dist/chunk-BLWVZK6J.mjs.map +0 -1
  38. package/dist/chunk-K2ANOT66.js.map +0 -1
  39. /package/dist/{BlockNoteEditor-V625C23O.mjs.map → BlockNoteEditor-U2IHUVUF.mjs.map} +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkK2ANOT66js = require('./chunk-K2ANOT66.js');
5
+ var _chunkE2HRC2OGjs = require('./chunk-E2HRC2OG.js');
6
6
  require('./chunk-IBS6NI7D.js');
7
7
 
8
8
 
@@ -18,7 +18,7 @@ var _chunkPO5Q3H5Ijs = require('./chunk-PO5Q3H5I.js');
18
18
  require('./chunk-LXKSUWAV.js');
19
19
  require('./chunk-AYHKQWHH.js');
20
20
  require('./chunk-PMXG5WBC.js');
21
- require('./chunk-4HCRAOS5.js');
21
+ require('./chunk-3UELCPIN.js');
22
22
  require('./chunk-3FBCC4G3.js');
23
23
  require('./chunk-Q4FXESVT.js');
24
24
  require('./chunk-AGAJMJ4T.js');
@@ -130,7 +130,7 @@ function BlockNoteEditor({
130
130
  bordered
131
131
  }) {
132
132
  const t = _nextintl.useTranslations.call(void 0, );
133
- const { company } = _chunkK2ANOT66js.useCurrentUserContext.call(void 0, );
133
+ const { company } = _chunkE2HRC2OGjs.useCurrentUserContext.call(void 0, );
134
134
  const [acceptedChanges, setAcceptedChanges] = _react3.useState.call(void 0, /* @__PURE__ */ new Set());
135
135
  const [rejectedChanges, setRejectedChanges] = _react3.useState.call(void 0, /* @__PURE__ */ new Set());
136
136
  const editorRef = _react3.useRef.call(void 0, null);
@@ -166,7 +166,7 @@ function BlockNoteEditor({
166
166
  const uploadImage = _react3.useCallback.call(void 0,
167
167
  async (file) => {
168
168
  if (!company) {
169
- _chunkK2ANOT66js.errorToast.call(void 0, {
169
+ _chunkE2HRC2OGjs.errorToast.call(void 0, {
170
170
  title: t(`generic.errors.upload`),
171
171
  error: t(`generic.errors.upload_description`)
172
172
  });
@@ -389,4 +389,4 @@ _chunk7QVYU63Ejs.__name.call(void 0, BlockNoteEditor, "BlockNoteEditor");
389
389
 
390
390
 
391
391
  exports.default = BlockNoteEditor;
392
- //# sourceMappingURL=BlockNoteEditor-7WYPN34K.js.map
392
+ //# sourceMappingURL=BlockNoteEditor-QV6ESIQA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/BlockNoteEditor-7WYPN34K.js","../src/components/editors/BlockNoteEditor.tsx","../src/components/editors/BlockNoteEditorFormattingToolbar.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/BlockNoteEditor-7WYPN34K.js","sourcesContent":[null,"\"use client\";\n\nimport { BlockNoteSchema, defaultInlineContentSpecs, PartialBlock } from \"@blocknote/core\";\nimport { createReactInlineContentSpec, useCreateBlockNote } from \"@blocknote/react\";\nimport { BlockNoteView } from \"@blocknote/shadcn\";\nimport \"@blocknote/shadcn/style.css\";\nimport { CheckIcon, XIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { S3Interface, S3Service, UserInterface } from \"../../features\";\nimport { Button } from \"../../shadcnui\";\nimport { BlockNoteDiffUtil, BlockNoteWordDiffRendererUtil, cn } from \"../../utils\";\nimport { errorToast } from \"../errors\";\nimport { BlockNoteEditorFormattingToolbar } from \"./BlockNoteEditorFormattingToolbar\";\n\nexport type BlockNoteEditorProps = {\n id: string;\n type: string;\n initialContent?: PartialBlock[];\n onChange?: (content: any, isEmpty: boolean, hasUnresolvedDiff: boolean) => void;\n size?: \"sm\" | \"md\";\n className?: string;\n markdownContent?: string;\n diffContent?: PartialBlock[];\n placeholder?: string;\n bordered?: boolean;\n};\n\nconst createDiffActionsInlineContentSpec = (\n handleAcceptChange: (diffId: string) => void,\n handleRejectChange: (diffId: string) => void,\n) => {\n return createReactInlineContentSpec(\n {\n type: \"diffActions\",\n propSchema: {\n diffIds: {\n default: \"\",\n },\n },\n content: \"none\",\n },\n {\n render: (props) => {\n const diffIds = props.inlineContent.props.diffIds;\n\n return (\n <span className=\"diff-actions-container mx-2 inline-flex items-center gap-1 align-middle\">\n <Button\n title=\"Accept change\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n diffIds.split(\",\").forEach((id: string) => handleAcceptChange(id.trim()));\n }}\n >\n <CheckIcon className=\"h-3 w-3 text-green-600\" />\n </Button>\n <Button\n title=\"Reject change\"\n className=\"mx-2 p-0\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n diffIds.split(\",\").forEach((id: string) => handleRejectChange(id.trim()));\n }}\n >\n <XIcon className=\"h-3 w-3 text-red-600\" />\n </Button>\n </span>\n );\n },\n },\n );\n};\n\nexport default function BlockNoteEditor({\n id,\n type,\n initialContent,\n onChange,\n size,\n className,\n markdownContent,\n diffContent,\n placeholder,\n bordered,\n}: BlockNoteEditorProps): React.JSX.Element {\n const t = useTranslations();\n const { company } = useCurrentUserContext<UserInterface>();\n\n const [acceptedChanges, setAcceptedChanges] = useState<Set<string>>(new Set());\n const [rejectedChanges, setRejectedChanges] = useState<Set<string>>(new Set());\n\n const editorRef = useRef<HTMLDivElement>(null);\n\n const handleAcceptChange = useCallback((diffId: string) => {\n setAcceptedChanges((prev) => new Set([...prev, diffId]));\n setRejectedChanges((prev) => {\n const newSet = new Set(prev);\n newSet.delete(diffId);\n return newSet;\n });\n }, []);\n\n const handleRejectChange = useCallback((diffId: string) => {\n setRejectedChanges((prev) => new Set([...prev, diffId]));\n setAcceptedChanges((prev) => {\n const newSet = new Set(prev);\n newSet.delete(diffId);\n return newSet;\n });\n }, []);\n\n const DiffActionsInlineContent = useMemo(\n () => createDiffActionsInlineContentSpec(handleAcceptChange, handleRejectChange),\n [handleAcceptChange, handleRejectChange],\n );\n\n const schema = useMemo(\n () =>\n BlockNoteSchema.create({\n inlineContentSpecs: {\n ...defaultInlineContentSpecs,\n diffActions: DiffActionsInlineContent,\n },\n } as any),\n [DiffActionsInlineContent],\n );\n\n const uploadImage = useCallback(\n async (file: File): Promise<string> => {\n if (!company) {\n errorToast({\n title: t(`generic.errors.upload`),\n error: t(`generic.errors.upload_description`),\n });\n throw new Error(t(`generic.errors.upload`));\n }\n\n const fileType = file.type;\n const key = `companies/${company.id}/${type}/${id}/${file.name}`;\n\n const s3: S3Interface = await S3Service.getPreSignedUrl({\n key: key,\n contentType: fileType,\n isPublic: true,\n });\n\n await fetch(s3.url, {\n method: \"PUT\",\n headers: s3.headers,\n body: file,\n });\n\n const signedImage: S3Interface = await S3Service.getSignedUrl({\n key: key,\n isPublic: true,\n });\n\n return signedImage.url;\n },\n [company, id, t],\n );\n\n // Utility: Remove trailing empty blocks for read-only display\n const removeTrailingEmptyBlocks = useCallback(\n (blocks: PartialBlock[]): PartialBlock[] => {\n if (!blocks || blocks.length === 0) return blocks;\n\n // Only remove trailing empty blocks in read-only mode\n if (onChange !== undefined) return blocks;\n\n const result = [...blocks];\n\n // Remove trailing empty paragraph blocks, but keep at least one block\n while (result.length > 1) {\n const lastBlock = result[result.length - 1];\n\n // Check if it's an empty paragraph\n const isEmptyParagraph =\n lastBlock.type === \"paragraph\" &&\n (!lastBlock.content ||\n lastBlock.content.length === 0 ||\n (Array.isArray(lastBlock.content) && lastBlock.content.every((c: any) => !c.text || c.text.trim() === \"\")));\n\n if (isEmptyParagraph) {\n result.pop();\n } else {\n break;\n }\n }\n\n return result;\n },\n [onChange],\n );\n\n const processedContent = useMemo(() => {\n if (diffContent && initialContent) {\n try {\n const diffResult = BlockNoteDiffUtil.diff(initialContent, diffContent);\n const renderedDiff = BlockNoteWordDiffRendererUtil.renderWordDiffs(\n diffResult.blocks,\n handleAcceptChange,\n handleRejectChange,\n acceptedChanges,\n rejectedChanges,\n );\n return removeTrailingEmptyBlocks(renderedDiff);\n } catch (error) {\n return initialContent && Array.isArray(initialContent) && initialContent.length > 0\n ? removeTrailingEmptyBlocks(initialContent)\n : [];\n }\n }\n\n if (!initialContent) {\n return [];\n }\n\n if (!Array.isArray(initialContent)) {\n return [];\n }\n\n return initialContent.length > 0 ? removeTrailingEmptyBlocks(initialContent) : [];\n }, [\n initialContent,\n diffContent,\n handleAcceptChange,\n handleRejectChange,\n acceptedChanges,\n rejectedChanges,\n removeTrailingEmptyBlocks,\n ]);\n\n const validatedInitialContent = useMemo(() => {\n if (processedContent && Array.isArray(processedContent) && processedContent.length > 0) {\n const validatedContent = processedContent.filter((block) => {\n if (!block || typeof block !== \"object\") return false;\n if (!(block as any).type) return false;\n return true;\n });\n return validatedContent.length > 0 ? (validatedContent as PartialBlock[]) : undefined;\n }\n return undefined;\n }, [processedContent]);\n\n const editor = useCreateBlockNote(\n useMemo(\n () => ({\n placeholders: {\n emptyDocument: placeholder || t(`generic.blocknote.placeholder`),\n },\n schema,\n initialContent: validatedInitialContent,\n uploadFile: uploadImage,\n }),\n [placeholder, t, schema, validatedInitialContent, uploadImage],\n ),\n );\n\n const handleChange = useCallback(async () => {\n if (!onChange) return;\n const newBlocks = editor.document;\n\n const markdownFromBlocks = (await editor.blocksToMarkdownLossy(editor.document)).trim();\n\n function hasUnresolvedDiffsRecursive(block: any): boolean {\n if (!block || typeof block !== \"object\") return false;\n let diffId = undefined;\n if (block.props && block.props.diffId) diffId = block.props.diffId;\n if (!diffId && block.attrs && block.attrs.diffId) diffId = block.attrs.diffId;\n if (diffId && !acceptedChanges.has(diffId) && !rejectedChanges.has(diffId)) {\n return true;\n }\n\n if (block.content) {\n const contentArr = Array.isArray(block.content) ? block.content : [block.content];\n for (const inline of contentArr) {\n if (inline && typeof inline === \"object\") {\n if (inline.type === \"diffActions\" && inline.props && inline.props.diffIds) {\n const ids =\n typeof inline.props.diffIds === \"string\" ? inline.props.diffIds.split(\",\") : inline.props.diffIds;\n for (const id of ids) {\n const trimmed = (id || \"\").toString().trim();\n if (trimmed && !acceptedChanges.has(trimmed) && !rejectedChanges.has(trimmed)) {\n return true;\n }\n }\n }\n if (inline.props && inline.props.diffId) {\n const diffIdInline = inline.props.diffId;\n if (diffIdInline && !acceptedChanges.has(diffIdInline) && !rejectedChanges.has(diffIdInline)) {\n return true;\n }\n }\n if (inline.children && Array.isArray(inline.children)) {\n for (const child of inline.children) {\n if (hasUnresolvedDiffsRecursive(child)) return true;\n }\n }\n }\n }\n }\n if (Array.isArray(block.children)) {\n for (const child of block.children) {\n if (hasUnresolvedDiffsRecursive(child)) return true;\n }\n }\n return false;\n }\n\n let hasUnresolvedDiff = false;\n if (Array.isArray(newBlocks)) {\n hasUnresolvedDiff = newBlocks.some((block: any) => hasUnresolvedDiffsRecursive(block));\n }\n\n onChange(newBlocks, !markdownFromBlocks.length, hasUnresolvedDiff);\n }, [editor, onChange, id, acceptedChanges, rejectedChanges]);\n\n // Utility: deep equality for arrays of blocks\n const areBlocksEqual = (a: any[], b: any[]): boolean => {\n return JSON.stringify(a) === JSON.stringify(b);\n };\n\n // Only initialize from markdownContent once per value, and only if different\n const hasInitializedFromMarkdown = useRef<string | null>(null);\n useEffect(() => {\n const updateContent = async (markdown: string) => {\n const blocks = await editor.tryParseMarkdownToBlocks(markdown);\n if (!areBlocksEqual(blocks, editor.document)) {\n editor.replaceBlocks(editor.document, blocks);\n }\n };\n\n if (markdownContent && hasInitializedFromMarkdown.current !== markdownContent) {\n hasInitializedFromMarkdown.current = markdownContent;\n updateContent(markdownContent).then(() => handleChange());\n }\n }, [markdownContent, editor]);\n\n // Update editor content when diff content changes, but only if different\n // Prevent unnecessary replaceBlocks calls that reset scroll/cursor.\n const previousContentHashRef = useRef<string | null>(null);\n useEffect(() => {\n if (!processedContent || !editor) return;\n const hash = JSON.stringify(processedContent);\n if (previousContentHashRef.current === hash) return; // no changes\n const currentHash = JSON.stringify(editor.document);\n if (currentHash === hash) {\n previousContentHashRef.current = hash;\n return; // already in sync\n }\n editor.replaceBlocks(editor.document, processedContent as PartialBlock[]);\n previousContentHashRef.current = hash;\n }, [processedContent, editor]);\n\n // Handle audio received from whisper transcription\n const handleAudioReceived = useCallback(\n (message: string) => {\n try {\n // Ensure the editor has focus\n const editorElement = editorRef.current?.querySelector('[contenteditable=\"true\"]') as HTMLElement;\n if (editorElement && document.activeElement !== editorElement) {\n editorElement.focus();\n }\n\n // Insert the transcribed text at the current cursor position\n editor.insertInlineContent(message);\n } catch (error) {\n console.error(\"Error inserting transcribed text:\", error);\n // Fallback: try to insert at the end of the document\n try {\n const blocks = editor.document;\n if (blocks.length > 0) {\n const lastBlock = blocks[blocks.length - 1];\n editor.setTextCursorPosition(lastBlock.id, \"end\");\n editor.insertInlineContent(message);\n }\n } catch (fallbackError) {\n console.error(\"Fallback insertion also failed:\", fallbackError);\n }\n }\n },\n [editor],\n );\n\n return (\n <div ref={editorRef} className={cn(bordered ? \"rounded-md border\" : \"\", \"w-full\")}>\n <BlockNoteView\n editor={editor}\n onChange={handleChange}\n editable={onChange !== undefined}\n formattingToolbar={false}\n theme=\"light\"\n className={cn(`BlockNoteView ${onChange ? \"min-h-96 p-4\" : \"\"}`, className, size === \"sm\" && \"small\")}\n >\n <BlockNoteEditorFormattingToolbar />\n </BlockNoteView>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n BasicTextStyleButton,\n BlockTypeSelect,\n CreateLinkButton,\n FileCaptionButton,\n FileReplaceButton,\n FormattingToolbar,\n FormattingToolbarController,\n TextAlignButton,\n} from \"@blocknote/react\";\n\nexport function BlockNoteEditorFormattingToolbar() {\n return (\n <FormattingToolbarController\n formattingToolbar={() => (\n <FormattingToolbar>\n <BlockTypeSelect key={\"blockTypeSelect\"} />\n\n <FileCaptionButton key={\"fileCaptionButton\"} />\n <FileReplaceButton key={\"replaceFileButton\"} />\n\n <BasicTextStyleButton basicTextStyle={\"bold\"} key={\"boldStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"italic\"} key={\"italicStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"underline\"} key={\"underlineStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"strike\"} key={\"strikeStyleButton\"} />\n\n <TextAlignButton textAlignment={\"left\"} key={\"textAlignLeftButton\"} />\n <TextAlignButton textAlignment={\"center\"} key={\"textAlignCenterButton\"} />\n <TextAlignButton textAlignment={\"right\"} key={\"textAlignRightButton\"} />\n\n <CreateLinkButton key={\"createLinkButton\"} />\n </FormattingToolbar>\n )}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/BlockNoteEditor-QV6ESIQA.js","../src/components/editors/BlockNoteEditor.tsx","../src/components/editors/BlockNoteEditorFormattingToolbar.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/BlockNoteEditor-QV6ESIQA.js","sourcesContent":[null,"\"use client\";\n\nimport { BlockNoteSchema, defaultInlineContentSpecs, PartialBlock } from \"@blocknote/core\";\nimport { createReactInlineContentSpec, useCreateBlockNote } from \"@blocknote/react\";\nimport { BlockNoteView } from \"@blocknote/shadcn\";\nimport \"@blocknote/shadcn/style.css\";\nimport { CheckIcon, XIcon } from \"lucide-react\";\nimport { useTranslations } from \"next-intl\";\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useCurrentUserContext } from \"../../contexts\";\nimport { S3Interface, S3Service, UserInterface } from \"../../features\";\nimport { Button } from \"../../shadcnui\";\nimport { BlockNoteDiffUtil, BlockNoteWordDiffRendererUtil, cn } from \"../../utils\";\nimport { errorToast } from \"../errors\";\nimport { BlockNoteEditorFormattingToolbar } from \"./BlockNoteEditorFormattingToolbar\";\n\nexport type BlockNoteEditorProps = {\n id: string;\n type: string;\n initialContent?: PartialBlock[];\n onChange?: (content: any, isEmpty: boolean, hasUnresolvedDiff: boolean) => void;\n size?: \"sm\" | \"md\";\n className?: string;\n markdownContent?: string;\n diffContent?: PartialBlock[];\n placeholder?: string;\n bordered?: boolean;\n};\n\nconst createDiffActionsInlineContentSpec = (\n handleAcceptChange: (diffId: string) => void,\n handleRejectChange: (diffId: string) => void,\n) => {\n return createReactInlineContentSpec(\n {\n type: \"diffActions\",\n propSchema: {\n diffIds: {\n default: \"\",\n },\n },\n content: \"none\",\n },\n {\n render: (props) => {\n const diffIds = props.inlineContent.props.diffIds;\n\n return (\n <span className=\"diff-actions-container mx-2 inline-flex items-center gap-1 align-middle\">\n <Button\n title=\"Accept change\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n diffIds.split(\",\").forEach((id: string) => handleAcceptChange(id.trim()));\n }}\n >\n <CheckIcon className=\"h-3 w-3 text-green-600\" />\n </Button>\n <Button\n title=\"Reject change\"\n className=\"mx-2 p-0\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n diffIds.split(\",\").forEach((id: string) => handleRejectChange(id.trim()));\n }}\n >\n <XIcon className=\"h-3 w-3 text-red-600\" />\n </Button>\n </span>\n );\n },\n },\n );\n};\n\nexport default function BlockNoteEditor({\n id,\n type,\n initialContent,\n onChange,\n size,\n className,\n markdownContent,\n diffContent,\n placeholder,\n bordered,\n}: BlockNoteEditorProps): React.JSX.Element {\n const t = useTranslations();\n const { company } = useCurrentUserContext<UserInterface>();\n\n const [acceptedChanges, setAcceptedChanges] = useState<Set<string>>(new Set());\n const [rejectedChanges, setRejectedChanges] = useState<Set<string>>(new Set());\n\n const editorRef = useRef<HTMLDivElement>(null);\n\n const handleAcceptChange = useCallback((diffId: string) => {\n setAcceptedChanges((prev) => new Set([...prev, diffId]));\n setRejectedChanges((prev) => {\n const newSet = new Set(prev);\n newSet.delete(diffId);\n return newSet;\n });\n }, []);\n\n const handleRejectChange = useCallback((diffId: string) => {\n setRejectedChanges((prev) => new Set([...prev, diffId]));\n setAcceptedChanges((prev) => {\n const newSet = new Set(prev);\n newSet.delete(diffId);\n return newSet;\n });\n }, []);\n\n const DiffActionsInlineContent = useMemo(\n () => createDiffActionsInlineContentSpec(handleAcceptChange, handleRejectChange),\n [handleAcceptChange, handleRejectChange],\n );\n\n const schema = useMemo(\n () =>\n BlockNoteSchema.create({\n inlineContentSpecs: {\n ...defaultInlineContentSpecs,\n diffActions: DiffActionsInlineContent,\n },\n } as any),\n [DiffActionsInlineContent],\n );\n\n const uploadImage = useCallback(\n async (file: File): Promise<string> => {\n if (!company) {\n errorToast({\n title: t(`generic.errors.upload`),\n error: t(`generic.errors.upload_description`),\n });\n throw new Error(t(`generic.errors.upload`));\n }\n\n const fileType = file.type;\n const key = `companies/${company.id}/${type}/${id}/${file.name}`;\n\n const s3: S3Interface = await S3Service.getPreSignedUrl({\n key: key,\n contentType: fileType,\n isPublic: true,\n });\n\n await fetch(s3.url, {\n method: \"PUT\",\n headers: s3.headers,\n body: file,\n });\n\n const signedImage: S3Interface = await S3Service.getSignedUrl({\n key: key,\n isPublic: true,\n });\n\n return signedImage.url;\n },\n [company, id, t],\n );\n\n // Utility: Remove trailing empty blocks for read-only display\n const removeTrailingEmptyBlocks = useCallback(\n (blocks: PartialBlock[]): PartialBlock[] => {\n if (!blocks || blocks.length === 0) return blocks;\n\n // Only remove trailing empty blocks in read-only mode\n if (onChange !== undefined) return blocks;\n\n const result = [...blocks];\n\n // Remove trailing empty paragraph blocks, but keep at least one block\n while (result.length > 1) {\n const lastBlock = result[result.length - 1];\n\n // Check if it's an empty paragraph\n const isEmptyParagraph =\n lastBlock.type === \"paragraph\" &&\n (!lastBlock.content ||\n lastBlock.content.length === 0 ||\n (Array.isArray(lastBlock.content) && lastBlock.content.every((c: any) => !c.text || c.text.trim() === \"\")));\n\n if (isEmptyParagraph) {\n result.pop();\n } else {\n break;\n }\n }\n\n return result;\n },\n [onChange],\n );\n\n const processedContent = useMemo(() => {\n if (diffContent && initialContent) {\n try {\n const diffResult = BlockNoteDiffUtil.diff(initialContent, diffContent);\n const renderedDiff = BlockNoteWordDiffRendererUtil.renderWordDiffs(\n diffResult.blocks,\n handleAcceptChange,\n handleRejectChange,\n acceptedChanges,\n rejectedChanges,\n );\n return removeTrailingEmptyBlocks(renderedDiff);\n } catch (error) {\n return initialContent && Array.isArray(initialContent) && initialContent.length > 0\n ? removeTrailingEmptyBlocks(initialContent)\n : [];\n }\n }\n\n if (!initialContent) {\n return [];\n }\n\n if (!Array.isArray(initialContent)) {\n return [];\n }\n\n return initialContent.length > 0 ? removeTrailingEmptyBlocks(initialContent) : [];\n }, [\n initialContent,\n diffContent,\n handleAcceptChange,\n handleRejectChange,\n acceptedChanges,\n rejectedChanges,\n removeTrailingEmptyBlocks,\n ]);\n\n const validatedInitialContent = useMemo(() => {\n if (processedContent && Array.isArray(processedContent) && processedContent.length > 0) {\n const validatedContent = processedContent.filter((block) => {\n if (!block || typeof block !== \"object\") return false;\n if (!(block as any).type) return false;\n return true;\n });\n return validatedContent.length > 0 ? (validatedContent as PartialBlock[]) : undefined;\n }\n return undefined;\n }, [processedContent]);\n\n const editor = useCreateBlockNote(\n useMemo(\n () => ({\n placeholders: {\n emptyDocument: placeholder || t(`generic.blocknote.placeholder`),\n },\n schema,\n initialContent: validatedInitialContent,\n uploadFile: uploadImage,\n }),\n [placeholder, t, schema, validatedInitialContent, uploadImage],\n ),\n );\n\n const handleChange = useCallback(async () => {\n if (!onChange) return;\n const newBlocks = editor.document;\n\n const markdownFromBlocks = (await editor.blocksToMarkdownLossy(editor.document)).trim();\n\n function hasUnresolvedDiffsRecursive(block: any): boolean {\n if (!block || typeof block !== \"object\") return false;\n let diffId = undefined;\n if (block.props && block.props.diffId) diffId = block.props.diffId;\n if (!diffId && block.attrs && block.attrs.diffId) diffId = block.attrs.diffId;\n if (diffId && !acceptedChanges.has(diffId) && !rejectedChanges.has(diffId)) {\n return true;\n }\n\n if (block.content) {\n const contentArr = Array.isArray(block.content) ? block.content : [block.content];\n for (const inline of contentArr) {\n if (inline && typeof inline === \"object\") {\n if (inline.type === \"diffActions\" && inline.props && inline.props.diffIds) {\n const ids =\n typeof inline.props.diffIds === \"string\" ? inline.props.diffIds.split(\",\") : inline.props.diffIds;\n for (const id of ids) {\n const trimmed = (id || \"\").toString().trim();\n if (trimmed && !acceptedChanges.has(trimmed) && !rejectedChanges.has(trimmed)) {\n return true;\n }\n }\n }\n if (inline.props && inline.props.diffId) {\n const diffIdInline = inline.props.diffId;\n if (diffIdInline && !acceptedChanges.has(diffIdInline) && !rejectedChanges.has(diffIdInline)) {\n return true;\n }\n }\n if (inline.children && Array.isArray(inline.children)) {\n for (const child of inline.children) {\n if (hasUnresolvedDiffsRecursive(child)) return true;\n }\n }\n }\n }\n }\n if (Array.isArray(block.children)) {\n for (const child of block.children) {\n if (hasUnresolvedDiffsRecursive(child)) return true;\n }\n }\n return false;\n }\n\n let hasUnresolvedDiff = false;\n if (Array.isArray(newBlocks)) {\n hasUnresolvedDiff = newBlocks.some((block: any) => hasUnresolvedDiffsRecursive(block));\n }\n\n onChange(newBlocks, !markdownFromBlocks.length, hasUnresolvedDiff);\n }, [editor, onChange, id, acceptedChanges, rejectedChanges]);\n\n // Utility: deep equality for arrays of blocks\n const areBlocksEqual = (a: any[], b: any[]): boolean => {\n return JSON.stringify(a) === JSON.stringify(b);\n };\n\n // Only initialize from markdownContent once per value, and only if different\n const hasInitializedFromMarkdown = useRef<string | null>(null);\n useEffect(() => {\n const updateContent = async (markdown: string) => {\n const blocks = await editor.tryParseMarkdownToBlocks(markdown);\n if (!areBlocksEqual(blocks, editor.document)) {\n editor.replaceBlocks(editor.document, blocks);\n }\n };\n\n if (markdownContent && hasInitializedFromMarkdown.current !== markdownContent) {\n hasInitializedFromMarkdown.current = markdownContent;\n updateContent(markdownContent).then(() => handleChange());\n }\n }, [markdownContent, editor]);\n\n // Update editor content when diff content changes, but only if different\n // Prevent unnecessary replaceBlocks calls that reset scroll/cursor.\n const previousContentHashRef = useRef<string | null>(null);\n useEffect(() => {\n if (!processedContent || !editor) return;\n const hash = JSON.stringify(processedContent);\n if (previousContentHashRef.current === hash) return; // no changes\n const currentHash = JSON.stringify(editor.document);\n if (currentHash === hash) {\n previousContentHashRef.current = hash;\n return; // already in sync\n }\n editor.replaceBlocks(editor.document, processedContent as PartialBlock[]);\n previousContentHashRef.current = hash;\n }, [processedContent, editor]);\n\n // Handle audio received from whisper transcription\n const handleAudioReceived = useCallback(\n (message: string) => {\n try {\n // Ensure the editor has focus\n const editorElement = editorRef.current?.querySelector('[contenteditable=\"true\"]') as HTMLElement;\n if (editorElement && document.activeElement !== editorElement) {\n editorElement.focus();\n }\n\n // Insert the transcribed text at the current cursor position\n editor.insertInlineContent(message);\n } catch (error) {\n console.error(\"Error inserting transcribed text:\", error);\n // Fallback: try to insert at the end of the document\n try {\n const blocks = editor.document;\n if (blocks.length > 0) {\n const lastBlock = blocks[blocks.length - 1];\n editor.setTextCursorPosition(lastBlock.id, \"end\");\n editor.insertInlineContent(message);\n }\n } catch (fallbackError) {\n console.error(\"Fallback insertion also failed:\", fallbackError);\n }\n }\n },\n [editor],\n );\n\n return (\n <div ref={editorRef} className={cn(bordered ? \"rounded-md border\" : \"\", \"w-full\")}>\n <BlockNoteView\n editor={editor}\n onChange={handleChange}\n editable={onChange !== undefined}\n formattingToolbar={false}\n theme=\"light\"\n className={cn(`BlockNoteView ${onChange ? \"min-h-96 p-4\" : \"\"}`, className, size === \"sm\" && \"small\")}\n >\n <BlockNoteEditorFormattingToolbar />\n </BlockNoteView>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n BasicTextStyleButton,\n BlockTypeSelect,\n CreateLinkButton,\n FileCaptionButton,\n FileReplaceButton,\n FormattingToolbar,\n FormattingToolbarController,\n TextAlignButton,\n} from \"@blocknote/react\";\n\nexport function BlockNoteEditorFormattingToolbar() {\n return (\n <FormattingToolbarController\n formattingToolbar={() => (\n <FormattingToolbar>\n <BlockTypeSelect key={\"blockTypeSelect\"} />\n\n <FileCaptionButton key={\"fileCaptionButton\"} />\n <FileReplaceButton key={\"replaceFileButton\"} />\n\n <BasicTextStyleButton basicTextStyle={\"bold\"} key={\"boldStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"italic\"} key={\"italicStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"underline\"} key={\"underlineStyleButton\"} />\n <BasicTextStyleButton basicTextStyle={\"strike\"} key={\"strikeStyleButton\"} />\n\n <TextAlignButton textAlignment={\"left\"} key={\"textAlignLeftButton\"} />\n <TextAlignButton textAlignment={\"center\"} key={\"textAlignCenterButton\"} />\n <TextAlignButton textAlignment={\"right\"} key={\"textAlignRightButton\"} />\n\n <CreateLinkButton key={\"createLinkButton\"} />\n </FormattingToolbar>\n )}\n />\n );\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  errorToast,
4
4
  useCurrentUserContext
5
- } from "./chunk-5QC7A6BL.mjs";
5
+ } from "./chunk-R2ONK22M.mjs";
6
6
  import "./chunk-C7C7VY4F.mjs";
7
7
  import {
8
8
  Button
@@ -18,7 +18,7 @@ import {
18
18
  import "./chunk-AUXK7QSA.mjs";
19
19
  import "./chunk-SM63SZCP.mjs";
20
20
  import "./chunk-IKBA4AHN.mjs";
21
- import "./chunk-BLWVZK6J.mjs";
21
+ import "./chunk-SZZYEG3P.mjs";
22
22
  import "./chunk-Q2N6SQYW.mjs";
23
23
  import "./chunk-FMBQZAIP.mjs";
24
24
  import "./chunk-RBIVEH2K.mjs";
@@ -389,4 +389,4 @@ __name(BlockNoteEditor, "BlockNoteEditor");
389
389
  export {
390
390
  BlockNoteEditor as default
391
391
  };
392
- //# sourceMappingURL=BlockNoteEditor-V625C23O.mjs.map
392
+ //# sourceMappingURL=BlockNoteEditor-U2IHUVUF.mjs.map
@@ -0,0 +1,46 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunk7QVYU63Ejs = require('./chunk-7QVYU63E.js');
4
+
5
+ // src/roles/config.ts
6
+ var _roleId = null;
7
+ var _useDiscord = false;
8
+ var _useInternalAuth = true;
9
+ function configureRoles(roleId) {
10
+ _roleId = roleId;
11
+ }
12
+ _chunk7QVYU63Ejs.__name.call(void 0, configureRoles, "configureRoles");
13
+ function configureDiscord(params) {
14
+ _useDiscord = params.useDiscord;
15
+ _useInternalAuth = params.useInternalAuth;
16
+ }
17
+ _chunk7QVYU63Ejs.__name.call(void 0, configureDiscord, "configureDiscord");
18
+ function getRoleId() {
19
+ if (!_roleId) {
20
+ throw new Error("Roles not configured. Call configureRoles() at app startup.");
21
+ }
22
+ return _roleId;
23
+ }
24
+ _chunk7QVYU63Ejs.__name.call(void 0, getRoleId, "getRoleId");
25
+ function isRolesConfigured() {
26
+ return _roleId !== null;
27
+ }
28
+ _chunk7QVYU63Ejs.__name.call(void 0, isRolesConfigured, "isRolesConfigured");
29
+ function isDiscordConfigured() {
30
+ return _useDiscord;
31
+ }
32
+ _chunk7QVYU63Ejs.__name.call(void 0, isDiscordConfigured, "isDiscordConfigured");
33
+ function isInternalAuthConfigured() {
34
+ return _useInternalAuth;
35
+ }
36
+ _chunk7QVYU63Ejs.__name.call(void 0, isInternalAuthConfigured, "isInternalAuthConfigured");
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+ exports.configureRoles = configureRoles; exports.configureDiscord = configureDiscord; exports.getRoleId = getRoleId; exports.isRolesConfigured = isRolesConfigured; exports.isDiscordConfigured = isDiscordConfigured; exports.isInternalAuthConfigured = isInternalAuthConfigured;
46
+ //# sourceMappingURL=chunk-3UELCPIN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-3UELCPIN.js","../src/roles/config.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACA;ACOA,IAAI,QAAA,EAA+B,IAAA;AACnC,IAAI,YAAA,EAAuB,KAAA;AAC3B,IAAI,iBAAA,EAA4B,IAAA;AAczB,SAAS,cAAA,CAAe,MAAA,EAA4B;AACzD,EAAA,QAAA,EAAU,MAAA;AACZ;AAFgB,qCAAA,cAAA,EAAA,gBAAA,CAAA;AAIT,SAAS,gBAAA,CAAiB,MAAA,EAAiE;AAChG,EAAA,YAAA,EAAc,MAAA,CAAO,UAAA;AACrB,EAAA,iBAAA,EAAmB,MAAA,CAAO,eAAA;AAC5B;AAHgB,qCAAA,gBAAA,EAAA,kBAAA,CAAA;AAST,SAAS,SAAA,CAAA,EAA0B;AACxC,EAAA,GAAA,CAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,KAAA,CAAM,6DAA6D,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,OAAA;AACT;AALgB,qCAAA,SAAA,EAAA,WAAA,CAAA;AAUT,SAAS,iBAAA,CAAA,EAA6B;AAC3C,EAAA,OAAO,QAAA,IAAY,IAAA;AACrB;AAFgB,qCAAA,iBAAA,EAAA,mBAAA,CAAA;AAIT,SAAS,mBAAA,CAAA,EAA+B;AAC7C,EAAA,OAAO,WAAA;AACT;AAFgB,qCAAA,mBAAA,EAAA,qBAAA,CAAA;AAIT,SAAS,wBAAA,CAAA,EAAoC;AAClD,EAAA,OAAO,gBAAA;AACT;AAFgB,qCAAA,wBAAA,EAAA,0BAAA,CAAA;ADtBhB;AACA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,mRAAC","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-3UELCPIN.js","sourcesContent":[null,"/**\n * Role ID configuration interface\n * Apps provide their role IDs via configureRoles()\n */\nexport interface RoleIdConfig {\n Administrator: string;\n CompanyAdministrator: string;\n [key: string]: string; // Allow additional roles\n}\n\n// Private storage for the injected role IDs\nlet _roleId: RoleIdConfig | null = null;\nlet _useDiscord: boolean = false;\nlet _useInternalAuth: boolean = true;\n\n/**\n * Configure role IDs for the library\n * Call this at app startup to provide role ID constants\n *\n * @example\n * ```typescript\n * import { configureRoles } from \"@carlonicora/nextjs-jsonapi\";\n * import { RoleId } from \"@phlow/shared\";\n *\n * configureRoles(RoleId);\n * ```\n */\nexport function configureRoles(roleId: RoleIdConfig): void {\n _roleId = roleId;\n}\n\nexport function configureDiscord(params: { useDiscord: boolean; useInternalAuth: boolean }): void {\n _useDiscord = params.useDiscord;\n _useInternalAuth = params.useInternalAuth;\n}\n\n/**\n * Get configured role IDs\n * @throws Error if roles not configured\n */\nexport function getRoleId(): RoleIdConfig {\n if (!_roleId) {\n throw new Error(\"Roles not configured. Call configureRoles() at app startup.\");\n }\n return _roleId;\n}\n\n/**\n * Check if roles have been configured\n */\nexport function isRolesConfigured(): boolean {\n return _roleId !== null;\n}\n\nexport function isDiscordConfigured(): boolean {\n return _useDiscord;\n}\n\nexport function isInternalAuthConfigured(): boolean {\n return _useInternalAuth;\n}\n"]}
@@ -124,7 +124,9 @@ var _chunkAYHKQWHHjs = require('./chunk-AYHKQWHH.js');
124
124
  var _chunkPMXG5WBCjs = require('./chunk-PMXG5WBC.js');
125
125
 
126
126
 
127
- var _chunk4HCRAOS5js = require('./chunk-4HCRAOS5.js');
127
+
128
+
129
+ var _chunk3UELCPINjs = require('./chunk-3UELCPIN.js');
128
130
 
129
131
 
130
132
  var _chunk3FBCC4G3js = require('./chunk-3FBCC4G3.js');
@@ -1049,7 +1051,7 @@ function usePushNotifications() {
1049
1051
  }
1050
1052
  }
1051
1053
  }, "register");
1052
- if (currentUser && !hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator)) register();
1054
+ if (currentUser && !hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator)) register();
1053
1055
  }, [currentUser]);
1054
1056
  }
1055
1057
  _chunk7QVYU63Ejs.__name.call(void 0, usePushNotifications, "usePushNotifications");
@@ -1239,7 +1241,7 @@ var CurrentUserProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (
1239
1241
  return !!_optionalChain([currentUser, 'access', _44 => _44.roles, 'optionalAccess', _45 => _45.some, 'call', _46 => _46((userRole) => userRole.id === roleId)]);
1240
1242
  }, "hasRole");
1241
1243
  const hasAccesToFeature = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (featureIdentifier) => {
1242
- if (hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator)) return true;
1244
+ if (hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator)) return true;
1243
1245
  if (!company) return false;
1244
1246
  return company.features.some((feature) => feature.id === featureIdentifier);
1245
1247
  }, "hasAccesToFeature");
@@ -1985,7 +1987,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, AllowedUsersDetails, "AllowedUsersDetails")
1985
1987
  var _dynamic = require('next/dynamic'); var _dynamic2 = _interopRequireDefault(_dynamic);
1986
1988
 
1987
1989
 
1988
- var BlockNoteEditor = _dynamic2.default.call(void 0, () => Promise.resolve().then(() => _interopRequireWildcard(require("./BlockNoteEditor-7WYPN34K.js"))), {
1990
+ var BlockNoteEditor = _dynamic2.default.call(void 0, () => Promise.resolve().then(() => _interopRequireWildcard(require("./BlockNoteEditor-QV6ESIQA.js"))), {
1989
1991
  ssr: false
1990
1992
  });
1991
1993
  var BlockNoteEditorContainer = React4.default.memo(/* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, function EditorContainer(props) {
@@ -4218,7 +4220,7 @@ var useCompanyTableStructure = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void
4218
4220
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4219
4221
  _chunk5IET37O4js.Link,
4220
4222
  {
4221
- href: hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator) ? generateUrl({
4223
+ href: hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator) ? generateUrl({
4222
4224
  page: "/administration",
4223
4225
  id: _optionalChain([_chunkQ4FXESVTjs.Modules, 'access', _113 => _113.Company, 'access', _114 => _114.pageUrl, 'optionalAccess', _115 => _115.substring, 'call', _116 => _116(1)]),
4224
4226
  childPage: company.id
@@ -4940,20 +4942,20 @@ function LandingComponent() {
4940
4942
  ] }),
4941
4943
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.CardDescription, { className: "flex w-full justify-center text-center text-sm", children: t(`generic.description`) })
4942
4944
  ] }),
4943
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk5IET37O4js.CardFooter, { className: "mt-4 flex w-full flex-col justify-between", children: [
4944
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.Link, { href: "#", className: "flex w-full justify-start", onClick: () => setComponentType(5 /* Register */), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.Button, { className: "mt-4 w-full", variant: `default`, children: t(`foundations.auth.buttons.register`) }) }),
4945
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.Link, { href: "#", className: "flex w-full justify-end", onClick: () => setComponentType(0 /* Login */), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.Button, { className: "mt-4 w-full", variant: `outline`, "data-testid": "page-login-button-initial-login", children: t(`foundations.auth.buttons.login`) }) }),
4946
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4947
- _chunk5IET37O4js.Button,
4948
- {
4949
- onClick: (e) => {
4950
- e.preventDefault();
4951
- window.location.href = `${_chunkPMXG5WBCjs.getApiUrl.call(void 0, )}auth/discord`;
4952
- },
4953
- className: `flex w-full justify-end`,
4954
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-sm font-medium leading-normal", children: "Discord" })
4955
- }
4956
- )
4945
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk5IET37O4js.CardFooter, { className: "mt-4 flex w-full flex-col justify-between gap-y-4", children: [
4946
+ _chunk3UELCPINjs.isInternalAuthConfigured.call(void 0, ) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
4947
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
4948
+ _chunk5IET37O4js.Link,
4949
+ {
4950
+ href: "#",
4951
+ className: "flex w-full justify-start",
4952
+ onClick: () => setComponentType(5 /* Register */),
4953
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.Button, { className: "w-full", variant: `default`, children: t(`foundations.auth.buttons.register`) })
4954
+ }
4955
+ ),
4956
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.Link, { href: "#", className: "flex w-full justify-end", onClick: () => setComponentType(0 /* Login */), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.Button, { className: "w-full", variant: `outline`, "data-testid": "page-login-button-initial-login", children: t(`foundations.auth.buttons.login`) }) })
4957
+ ] }),
4958
+ _chunk3UELCPINjs.isDiscordConfigured.call(void 0, ) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.Link, { href: `${_chunkPMXG5WBCjs.getApiUrl.call(void 0, )}auth/discord`, className: "flex w-full justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.Button, { className: "w-full", variant: `outline`, "data-testid": "page-login-button-initial-login", children: "Login with Discord" }) })
4957
4959
  ] })
4958
4960
  ] });
4959
4961
  }
@@ -5467,7 +5469,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, CompanyDetails, "CompanyDetails");
5467
5469
  function AdminCompanyContainerInternal() {
5468
5470
  const { company } = useCompanyContext();
5469
5471
  const { hasRole } = useCurrentUserContext();
5470
- if (!company || !hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator)) return null;
5472
+ if (!company || !hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator)) return null;
5471
5473
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
5472
5474
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CompanyDetails, {}),
5473
5475
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AdminUsersList, {})
@@ -5649,7 +5651,7 @@ function CompanyConfigurationEditorInternal({ company }) {
5649
5651
  _chunk7QVYU63Ejs.__name.call(void 0, CompanyConfigurationEditorInternal, "CompanyConfigurationEditorInternal");
5650
5652
  function CompanyConfigurationEditor(props) {
5651
5653
  const { hasRole } = useCurrentUserContext();
5652
- if (hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator)) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CompanyConfigurationEditorInternal, { ...props });
5654
+ if (hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator)) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CompanyConfigurationEditorInternal, { ...props });
5653
5655
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CompanyConfigurationEditorInternal, { ...props });
5654
5656
  }
5655
5657
  _chunk7QVYU63Ejs.__name.call(void 0, CompanyConfigurationEditor, "CompanyConfigurationEditor");
@@ -5738,7 +5740,7 @@ function CompanyDeleterInternal({ company }) {
5738
5740
  _chunk7QVYU63Ejs.__name.call(void 0, CompanyDeleterInternal, "CompanyDeleterInternal");
5739
5741
  function CompanyDeleter({ company }) {
5740
5742
  const { hasPermissionToModule, hasRole } = useCurrentUserContext();
5741
- if (!hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator) && !hasPermissionToModule({ module: _chunkQ4FXESVTjs.Modules.Company, action: "delete" /* Delete */ }))
5743
+ if (!hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator) && !hasPermissionToModule({ module: _chunkQ4FXESVTjs.Modules.Company, action: "delete" /* Delete */ }))
5742
5744
  return null;
5743
5745
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CompanyDeleterInternal, { company });
5744
5746
  }
@@ -5826,14 +5828,14 @@ function CompanyEditorInternal({ company, propagateChanges, onRevalidate }) {
5826
5828
  _react.useEffect.call(void 0, () => {
5827
5829
  async function fetchFeatures() {
5828
5830
  const allfeatures = await _chunkPO5Q3H5Ijs.FeatureService.findMany({});
5829
- if (hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator)) {
5831
+ if (hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator)) {
5830
5832
  setFeatures(allfeatures);
5831
5833
  } else {
5832
5834
  setFeatures(allfeatures.filter((feature) => feature.isProduction));
5833
5835
  }
5834
5836
  }
5835
5837
  _chunk7QVYU63Ejs.__name.call(void 0, fetchFeatures, "fetchFeatures");
5836
- if (open && features.length === 0 && (hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator) || hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).CompanyAdministrator) && _optionalChain([process, 'access', _170 => _170.env, 'access', _171 => _171.NEXT_PUBLIC_PRIVATE_INSTALLATION, 'optionalAccess', _172 => _172.toLowerCase, 'call', _173 => _173()]) === "true"))
5838
+ if (open && features.length === 0 && (hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator) || hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).CompanyAdministrator) && _optionalChain([process, 'access', _170 => _170.env, 'access', _171 => _171.NEXT_PUBLIC_PRIVATE_INSTALLATION, 'optionalAccess', _172 => _172.toLowerCase, 'call', _173 => _173()]) === "true"))
5837
5839
  fetchFeatures();
5838
5840
  }, [open, features]);
5839
5841
  _react.useEffect.call(void 0, () => {
@@ -5867,8 +5869,8 @@ function CompanyEditorInternal({ company, propagateChanges, onRevalidate }) {
5867
5869
  "application/images": [".jpg", ".jpeg", ".png", ".gif", ".webp", ".svg"]
5868
5870
  }
5869
5871
  };
5870
- const canAccessFeatures = hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator) || hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).CompanyAdministrator) && _optionalChain([process, 'access', _174 => _174.env, 'access', _175 => _175.NEXT_PUBLIC_PRIVATE_INSTALLATION, 'optionalAccess', _176 => _176.toLowerCase, 'call', _177 => _177()]) === "true";
5871
- const isAdministrator = hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator);
5872
+ const canAccessFeatures = hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator) || hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).CompanyAdministrator) && _optionalChain([process, 'access', _174 => _174.env, 'access', _175 => _175.NEXT_PUBLIC_PRIVATE_INSTALLATION, 'optionalAccess', _176 => _176.toLowerCase, 'call', _177 => _177()]) === "true";
5873
+ const isAdministrator = hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator);
5872
5874
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk5IET37O4js.Dialog, { open, onOpenChange: setOpen, children: [
5873
5875
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CommonEditorTrigger, { isEdit: !!company }),
5874
5876
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -6642,7 +6644,7 @@ function RemoveUserFromRole({ role, user, refresh }) {
6642
6644
  if (roleUsers.length > 1) setCanRemove(true);
6643
6645
  }
6644
6646
  _chunk7QVYU63Ejs.__name.call(void 0, checkCompanyAdminDeletability, "checkCompanyAdminDeletability");
6645
- if (role.id !== _chunk4HCRAOS5js.getRoleId.call(void 0, ).CompanyAdministrator) {
6647
+ if (role.id !== _chunk3UELCPINjs.getRoleId.call(void 0, ).CompanyAdministrator) {
6646
6648
  setCanRemove(true);
6647
6649
  return;
6648
6650
  }
@@ -6986,7 +6988,7 @@ function UserDeleterInternal({ user, onDeleted, companyId }) {
6986
6988
  const router = _chunkAYHKQWHHjs.useI18nRouter.call(void 0, );
6987
6989
  const t = _nextintl.useTranslations.call(void 0, );
6988
6990
  let cId;
6989
- if (_optionalChain([currentUser, 'optionalAccess', _194 => _194.roles, 'access', _195 => _195.find, 'call', _196 => _196((role) => role.id === _chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator)]) && companyId) {
6991
+ if (_optionalChain([currentUser, 'optionalAccess', _194 => _194.roles, 'access', _195 => _195.find, 'call', _196 => _196((role) => role.id === _chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator)]) && companyId) {
6990
6992
  cId = companyId;
6991
6993
  } else {
6992
6994
  if (!company) return;
@@ -7127,12 +7129,12 @@ function UserEditorInternal({ user, propagateChanges, adminCreated, trigger, onR
7127
7129
  async function fetchRoles() {
7128
7130
  const roles2 = await _chunkPO5Q3H5Ijs.RoleService.findAllRoles({});
7129
7131
  const availableRoles = roles2.filter(
7130
- (role) => role.id !== _chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator && (role.requiredFeature === void 0 || _optionalChain([company, 'optionalAccess', _208 => _208.features, 'access', _209 => _209.some, 'call', _210 => _210((feature) => feature.id === _optionalChain([role, 'access', _211 => _211.requiredFeature, 'optionalAccess', _212 => _212.id]))]))
7132
+ (role) => role.id !== _chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator && (role.requiredFeature === void 0 || _optionalChain([company, 'optionalAccess', _208 => _208.features, 'access', _209 => _209.some, 'call', _210 => _210((feature) => feature.id === _optionalChain([role, 'access', _211 => _211.requiredFeature, 'optionalAccess', _212 => _212.id]))]))
7131
7133
  );
7132
7134
  setRoles(availableRoles);
7133
7135
  }
7134
7136
  _chunk7QVYU63Ejs.__name.call(void 0, fetchRoles, "fetchRoles");
7135
- if (open && (company || _optionalChain([currentUser, 'optionalAccess', _213 => _213.roles, 'access', _214 => _214.find, 'call', _215 => _215((role) => role.id === _chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator)])) && roles.length === 0)
7137
+ if (open && (company || _optionalChain([currentUser, 'optionalAccess', _213 => _213.roles, 'access', _214 => _214.find, 'call', _215 => _215((role) => role.id === _chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator)])) && roles.length === 0)
7136
7138
  fetchRoles();
7137
7139
  }, [company, open]);
7138
7140
  _react.useEffect.call(void 0, () => {
@@ -7153,7 +7155,7 @@ function UserEditorInternal({ user, propagateChanges, adminCreated, trigger, onR
7153
7155
  setContentType(null);
7154
7156
  }
7155
7157
  }, [file]);
7156
- const canChangeRoles = !(_optionalChain([currentUser, 'optionalAccess', _216 => _216.id]) === _optionalChain([user, 'optionalAccess', _217 => _217.id]) && hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator)) && (hasPermissionToModule({ module: _chunkQ4FXESVTjs.Modules.User, action: "update" /* Update */ }) || hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator));
7158
+ const canChangeRoles = !(_optionalChain([currentUser, 'optionalAccess', _216 => _216.id]) === _optionalChain([user, 'optionalAccess', _217 => _217.id]) && hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator)) && (hasPermissionToModule({ module: _chunkQ4FXESVTjs.Modules.User, action: "update" /* Update */ }) || hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator));
7157
7159
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk5IET37O4js.Dialog, { open, onOpenChange: setOpen, children: [
7158
7160
  trigger ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5IET37O4js.DialogTrigger, { asChild: true, children: trigger }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CommonEditorTrigger, { isEdit: !!user }),
7159
7161
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -7247,7 +7249,7 @@ function UserEditorInternal({ user, propagateChanges, adminCreated, trigger, onR
7247
7249
  ] })
7248
7250
  ] }),
7249
7251
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-end gap-x-4", children: [
7250
- user && _optionalChain([currentUser, 'optionalAccess', _219 => _219.roles, 'access', _220 => _220.find, 'call', _221 => _221((role) => role.id === _chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator)]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
7252
+ user && _optionalChain([currentUser, 'optionalAccess', _219 => _219.roles, 'access', _220 => _220.find, 'call', _221 => _221((role) => role.id === _chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator)]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
7251
7253
  UserDeleter,
7252
7254
  {
7253
7255
  companyId: _optionalChain([user, 'access', _222 => _222.company, 'optionalAccess', _223 => _223.id]),
@@ -7732,9 +7734,9 @@ var CompanyProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, ({ ch
7732
7734
  };
7733
7735
  if (company) response.element = company.name;
7734
7736
  const functions = [];
7735
- if (company && hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator) && hasPermissionToModule({ module: _chunkQ4FXESVTjs.Modules.Company, action: "delete" /* Delete */ }))
7737
+ if (company && hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator) && hasPermissionToModule({ module: _chunkQ4FXESVTjs.Modules.Company, action: "delete" /* Delete */ }))
7736
7738
  functions.push(/* @__PURE__ */ _jsxruntime.jsx.call(void 0, CompanyDeleter, { company }, "companyDeleter"));
7737
- if (hasRole(_chunk4HCRAOS5js.getRoleId.call(void 0, ).Administrator) || hasPermissionToModule({ module: _chunkQ4FXESVTjs.Modules.Company, action: "update" /* Update */ })) {
7739
+ if (hasRole(_chunk3UELCPINjs.getRoleId.call(void 0, ).Administrator) || hasPermissionToModule({ module: _chunkQ4FXESVTjs.Modules.Company, action: "update" /* Update */ })) {
7738
7740
  if (company) functions.push(/* @__PURE__ */ _jsxruntime.jsx.call(void 0, CompanyConfigurationEditor, { company }, "companyConfigurationEditor"));
7739
7741
  functions.push(/* @__PURE__ */ _jsxruntime.jsx.call(void 0, CompanyEditor, { company, propagateChanges: setCompany }, "companyEditor"));
7740
7742
  }
@@ -7980,4 +7982,4 @@ var useSocketContext = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () =
7980
7982
 
7981
7983
 
7982
7984
  exports.TableGeneratorRegistry = TableGeneratorRegistry; exports.tableGeneratorRegistry = tableGeneratorRegistry; exports.usePageUrlGenerator = usePageUrlGenerator; exports.useUrlRewriter = useUrlRewriter; exports.useDataListRetriever = useDataListRetriever; exports.useDebounce = useDebounce; exports.registerTableGenerator = registerTableGenerator; exports.useTableGenerator = useTableGenerator; exports.useCustomD3Graph = useCustomD3Graph; exports.CurrentUserProvider = CurrentUserProvider; exports.useCurrentUserContext = useCurrentUserContext; exports.AddUserToRole = AddUserToRole; exports.UserAvatarEditor = UserAvatarEditor; exports.UserDeleter = UserDeleter; exports.UserEditor = UserEditor; exports.UserMultiSelect = UserMultiSelect; exports.UserReactivator = UserReactivator; exports.UserResentInvitationEmail = UserResentInvitationEmail; exports.UserAvatar = UserAvatar; exports.UserSelector = UserSelector; exports.UserProvider = UserProvider; exports.useUserContext = useUserContext; exports.UserDetails = UserDetails; exports.UserIndexDetails = UserIndexDetails; exports.UserContainer = UserContainer; exports.UserIndexContainer = UserIndexContainer; exports.UsersListContainer = UsersListContainer; exports.AdminUsersList = AdminUsersList; exports.CompanyUsersList = CompanyUsersList; exports.ContributorsList = ContributorsList; exports.RelevantUsersList = RelevantUsersList; exports.RoleUsersList = RoleUsersList; exports.UserListInAdd = UserListInAdd; exports.UsersList = UsersList; exports.UsersListByContentIds = UsersListByContentIds; exports.CompanyDetails = CompanyDetails; exports.AdminCompanyContainer = AdminCompanyContainer; exports.CompanyContainer = CompanyContainer; exports.CompanyConfigurationSecurityForm = CompanyConfigurationSecurityForm; exports.CompanyConfigurationEditor = CompanyConfigurationEditor; exports.CompanyDeleter = CompanyDeleter; exports.CompanyEditor = CompanyEditor; exports.CompaniesList = CompaniesList; exports.CompanyProvider = CompanyProvider; exports.useCompanyContext = useCompanyContext; exports.generateNotificationData = generateNotificationData; exports.NotificationToast = NotificationToast; exports.NotificationMenuItem = NotificationMenuItem; exports.NotificationContextProvider = NotificationContextProvider; exports.useNotificationContext = useNotificationContext; exports.RoleProvider = RoleProvider; exports.useRoleContext = useRoleContext; exports.SharedProvider = SharedProvider; exports.useSharedContext = useSharedContext; exports.CommonProvider = CommonProvider; exports.useCommonContext = useCommonContext; exports.SocketContext = SocketContext; exports.SocketProvider = SocketProvider; exports.useSocketContext = useSocketContext; exports.useNotificationSync = useNotificationSync; exports.usePageTracker = usePageTracker; exports.useSocket = useSocket; exports.Breadcrumb = Breadcrumb2; exports.ContentTitle = ContentTitle; exports.Header = Header; exports.ModeToggleSwitch = ModeToggleSwitch; exports.PageSection = PageSection; exports.RecentPagesNavigator = RecentPagesNavigator; exports.PageContainer = PageContainer; exports.ReactMarkdownContainer = ReactMarkdownContainer; exports.TabsContainer = TabsContainer; exports.AttributeElement = AttributeElement; exports.AllowedUsersDetails = AllowedUsersDetails; exports.ErrorDetails = ErrorDetails; exports.errorToast = errorToast; exports.BlockNoteEditorContainer = BlockNoteEditorContainer; exports.CommonAssociationTrigger = CommonAssociationTrigger; exports.CommonAssociationCommandDialog = CommonAssociationCommandDialog; exports.triggerAssociationToast = triggerAssociationToast; exports.CommonDeleter = CommonDeleter; exports.CommonEditorButtons = CommonEditorButtons; exports.CommonEditorHeader = CommonEditorHeader; exports.CommonEditorTrigger = CommonEditorTrigger; exports.DatePickerPopover = DatePickerPopover; exports.DateRangeSelector = DateRangeSelector; exports.useFileUpload = useFileUpload; exports.FileUploader = FileUploader; exports.FileUploaderContent = FileUploaderContent; exports.FileUploaderItem = FileUploaderItem; exports.FileInput = FileInput; exports.FormCheckbox = FormCheckbox; exports.FormContainerGeneric = FormContainerGeneric; exports.FormDate = FormDate; exports.FormDateTime = FormDateTime; exports.FormInput = FormInput; exports.PasswordInput = PasswordInput; exports.FormPassword = FormPassword; exports.FormPlaceAutocomplete = FormPlaceAutocomplete; exports.FormSelect = FormSelect; exports.FormSlider = FormSlider; exports.FormSwitch = FormSwitch; exports.FormTextarea = FormTextarea; exports.FormFeatures = FormFeatures; exports.PageContainerContentDetails = PageContainerContentDetails; exports.PageContentContainer = PageContentContainer; exports.cellComponent = cellComponent; exports.cellDate = cellDate; exports.cellId = cellId; exports.cellLink = cellLink; exports.cellUrl = cellUrl; exports.JsonApiContext = JsonApiContext; exports.useJsonApiConfig = useJsonApiConfig; exports.useJsonApiConfigOptional = useJsonApiConfigOptional; exports.JsonApiProvider = JsonApiProvider; exports.useJsonApiGet = useJsonApiGet; exports.useJsonApiMutation = useJsonApiMutation; exports.useRehydration = useRehydration; exports.useRehydrationList = useRehydrationList; exports.useRoleTableStructure = useRoleTableStructure; exports.useUserSearch = useUserSearch; exports.useUserTableStructure = useUserTableStructure; exports.useContentTableStructure = useContentTableStructure; exports.ContentTableSearch = ContentTableSearch; exports.ContentListTable = ContentListTable; exports.AuthContainer = AuthContainer; exports.LandingComponent = LandingComponent; exports.AcceptInvitation = AcceptInvitation; exports.ActivateAccount = ActivateAccount; exports.Cookies = Cookies; exports.ForgotPassword = ForgotPassword; exports.Login = Login; exports.Logout = Logout; exports.RefreshUser = RefreshUser; exports.ResetPassword = ResetPassword; exports.ContentsList = ContentsList; exports.ContentsListById = ContentsListById; exports.RelevantContentsList = RelevantContentsList; exports.NotificationErrorBoundary = NotificationErrorBoundary; exports.NotificationsList = NotificationsList; exports.NotificationsListContainer = NotificationsListContainer; exports.NotificationModal = NotificationModal; exports.PushNotificationProvider = PushNotificationProvider; exports.RoleDetails = RoleDetails; exports.RoleContainer = RoleContainer; exports.FormRoles = FormRoles; exports.RemoveUserFromRole = RemoveUserFromRole; exports.UserRoleAdd = UserRoleAdd; exports.RolesList = RolesList; exports.UserRolesList = UserRolesList;
7983
- //# sourceMappingURL=chunk-K2ANOT66.js.map
7985
+ //# sourceMappingURL=chunk-E2HRC2OG.js.map