@ixo/editor 1.1.1 → 1.1.3
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/{chunk-MXVDN3FO.mjs → chunk-2UJGZZWQ.mjs} +26 -15
- package/dist/chunk-2UJGZZWQ.mjs.map +1 -0
- package/dist/{chunk-57TP5N42.mjs → chunk-GSKWOGSU.mjs} +198 -371
- package/dist/chunk-GSKWOGSU.mjs.map +1 -0
- package/dist/{graphql-client-BmODcqPE.d.mts → graphql-client-BIr8uzKX.d.mts} +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +2 -2
- package/dist/mantine/index.d.mts +2 -2
- package/dist/mantine/index.mjs +94 -86
- package/dist/mantine/index.mjs.map +1 -1
- package/dist/shadcn/index.d.mts +1 -1
- package/dist/shadcn/index.mjs +2 -2
- package/package.json +13 -9
- package/dist/chunk-57TP5N42.mjs.map +0 -1
- package/dist/chunk-MXVDN3FO.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shadcn/blocks/list/ListBlock.tsx","../src/shadcn/blocks/list/ListBlockToolbar.tsx","../src/shadcn/blocks/list/ListSettings.tsx","../src/shadcn/components/SettingsModal/SettingsModal.tsx","../src/shadcn/components/ui/button.tsx","../src/shadcn/lib/utils.ts","../src/shadcn/components/ui/dialog.tsx","../src/shadcn/components/PenIcon.tsx","../src/shadcn/components/SettingsModal/SettingsNavigation.tsx","../src/shadcn/blocks/list/ListGeneralTab.tsx","../src/shadcn/components/ui/input.tsx","../src/shadcn/components/ui/label.tsx","../src/shadcn/components/ui/tabs.tsx","../src/shadcn/components/SettingsModal/DomainPreview.tsx","../src/shadcn/components/ui/card.tsx","../src/shadcn/blocks/list/ListPreviewTab.tsx","../src/shadcn/blocks/list/ListItem.tsx","../src/core/lib/getMediaTypeIcon.tsx","../src/shadcn/components/icons/DocumentIcon.tsx","../src/shadcn/components/icons/ImageIcon.tsx","../src/shadcn/components/icons/VideoIcon.tsx","../src/shadcn/components/icons/AudioIcon.tsx","../src/shadcn/components/icons/PdfIcon.tsx","../src/shadcn/components/icons/JsonIcon.tsx","../src/shadcn/components/icons/XmlIcon.tsx","../src/shadcn/components/icons/ArchiveIcon.tsx","../src/shadcn/components/icons/DefaultIcon.tsx","../src/shadcn/components/SwitchOption.tsx","../src/shadcn/components/ui/switch.tsx","../src/shadcn/blocks/list/ListSettingsTab.tsx","../src/shadcn/blocks/list/useList.tsx","../src/shadcn/blocks/list/ListContainer.tsx","../src/shadcn/blocks/overview/OverviewBlock.tsx","../src/shadcn/blocks/overview/OverviewBlockToolbar.tsx","../src/shadcn/components/GlobeIcon.tsx","../src/shadcn/blocks/overview/OverviewSettings.tsx","../src/shadcn/blocks/overview/OverviewGeneralTab.tsx","../src/shadcn/blocks/overview/OverviewPreviewTab.tsx","../src/shadcn/blocks/index.ts","../src/shadcn/hooks/useCreateIxoEditor.ts","../src/shadcn/hooks/useCollaborativeIxoEditor.ts","../src/shadcn/IxoEditor.tsx"],"sourcesContent":["import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport ListBlockToolbar from './ListBlockToolbar';\nimport ListItem from './ListItem';\nimport useList from './useList';\nimport ListContainer from './ListContainer';\n\nexport interface ListBlockSettings {\n did: string;\n fragmentIdentifier: string;\n}\n\nexport interface ListBlockProps {\n block: any;\n editor: any;\n}\n\nconst ListBlockContent: React.FC<ListBlockProps> = ({ block, editor }) => {\n const { list, setList } = useList();\n\n return (\n <div\n style={{\n width: '100%',\n borderRadius: '6px',\n padding: '16px',\n backgroundColor: '#FFFFFF',\n fontFamily: 'Inter, Helvetica, Arial, sans-serif',\n }}\n >\n <ListBlockToolbar block={block} editor={editor} setList={setList} />\n\n <div style={{ minHeight: '40px' }}>\n <ListContainer>\n {list?.map((item: any, index: number) => (\n <ListItem key={index} item={item} index={index} />\n ))}\n </ListContainer>\n </div>\n </div>\n );\n};\n\nexport const ListBlock = createReactBlockSpec(\n {\n type: 'list' as const,\n propSchema: {\n title: {\n default: '',\n },\n did: {\n default: '',\n },\n fragmentIdentifier: {\n default: '',\n },\n listItemType: {\n default: 'keyvalue',\n },\n showLinkedResources: {\n default: false,\n },\n showAssetsInCollection: {\n default: false,\n },\n },\n content: 'none' as const,\n },\n {\n render: ListBlockContent,\n }\n);\n","import React from 'react';\nimport { ListSettings } from './ListSettings';\nimport { Input } from '../../components/ui/input';\n\ninterface ListBlockToolbarProps {\n block: any;\n editor: any;\n setList: (list: any[]) => void;\n}\n\nexport default function ListBlockToolbar({ block, editor, setList }: ListBlockToolbarProps) {\n return (\n <div className=\"flex justify-between items-center mb-3 pb-2 border-b border-gray-100 dark:border-gray-700\">\n <Input\n value={block.props.title}\n placeholder=\"New list\"\n className=\"font-semibold flex-1 border-0 bg-transparent px-2 py-1 focus-visible:ring-0 focus-visible:ring-offset-0 hover:bg-gray-50 dark:hover:bg-gray-700 focus:bg-gray-50 dark:focus:bg-gray-700 notion-list-title-input\"\n style={{\n color: '#2F2F2F',\n fontFamily: 'Inter, Helvetica, Arial, sans-serif',\n fontSize: '14px',\n fontWeight: 600,\n }}\n onChange={(e) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n title: e.target.value,\n },\n });\n }}\n />\n <ListSettings block={block} editor={editor} setList={setList} />\n </div>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { SettingsModal } from '../../components/SettingsModal/SettingsModal';\nimport { ListGeneralTab } from './ListGeneralTab';\nimport ListPreviewTab from './ListPreviewTab';\nimport { getEntity } from '../../../core/lib/graphql-queries';\nimport ListSettingsTab from './ListSettingsTab';\n\nexport function ListSettings({ block, editor, setList }: any) {\n const [domainValue, setDomainValue] = useState(block.props.did);\n const [loading, setLoading] = useState(false);\n const [domainProfile, setDomainProfile] = useState<any>(null);\n const [modalOpen, setModalOpen] = useState(false);\n const [domain, setDomain] = useState<any>(null);\n\n useEffect(() => {\n if (!domainValue) {\n setDomainProfile(null);\n return;\n }\n\n setLoading(true);\n setDomainProfile(null); // Clear previous profile\n\n const fetchEntity = async () => {\n try {\n const entity = await getEntity(domainValue);\n setDomain(entity);\n\n const profileResource = entity.settings.Profile;\n\n if (profileResource?.serviceEndpoint) {\n const fetchedProfile = await fetch(profileResource.serviceEndpoint).then((res) =>\n res.json()\n );\n setDomainProfile(fetchedProfile);\n } else {\n setDomainProfile(null);\n }\n\n setLoading(false);\n } catch (err) {\n setDomainProfile(null); // Clear profile on error\n setLoading(false);\n }\n };\n\n fetchEntity();\n }, [domainValue]);\n\n const handleDidChange = (did: string) => {\n setDomainValue(did);\n };\n\n const handleAddToPage = () => {\n // Handle add to page logic here\n editor.updateBlock(block.id, {\n props: {\n did: domainValue,\n },\n });\n console.log('Adding to page with DID:', domainValue);\n\n // Set the list data if showLinkedResources is enabled and domain has linkedResource\n if (block.props.showLinkedResources && domain?.linkedResource) {\n setList(domain.linkedResource);\n }\n\n // Close the modal after updating blocks\n setModalOpen(false);\n };\n\n return (\n <SettingsModal\n onAddToPage={handleAddToPage}\n loading={loading}\n open={modalOpen}\n onOpenChange={setModalOpen}\n tabs={[\n {\n id: 'general',\n label: 'General',\n content: (\n <ListGeneralTab\n block={block}\n editor={editor}\n domainValue={domainValue}\n onDomainChange={handleDidChange}\n domainProfile={domainProfile}\n />\n ),\n },\n {\n id: 'settings',\n label: 'Settings',\n content: <ListSettingsTab block={block} editor={editor} domain={domain} />,\n },\n {\n id: 'preview',\n label: 'Preview',\n content: <ListPreviewTab block={block} domain={domain} />,\n },\n ]}\n />\n );\n}\n","import React, { useState } from 'react';\nimport { Button } from '../ui/button';\nimport { Dialog, DialogContent, DialogTrigger } from '../ui/dialog';\nimport PenIcon from '../PenIcon';\nimport { SettingsNavigation } from './SettingsNavigation';\n\nexport interface TabConfig {\n id: string;\n label: string;\n content: React.ReactNode;\n}\n\ninterface SettingsModalProps {\n tabs: TabConfig[];\n onAddToPage: () => void;\n loading?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function SettingsModal({\n tabs,\n onAddToPage,\n loading = false,\n open,\n onOpenChange,\n}: SettingsModalProps) {\n const [activeTab, setActiveTab] = useState(tabs[0]?.id || 'general');\n\n const navigationItems = tabs.map((tab) => ({\n id: tab.id,\n label: tab.label,\n }));\n\n const activeTabContent = tabs.find((tab) => tab.id === activeTab)?.content;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogTrigger asChild>\n <Button variant=\"secondary\" className=\"font-semibold\">\n <PenIcon /> Edit\n </Button>\n </DialogTrigger>\n <DialogContent className=\"max-w-4xl h-[600px] p-0 rounded-2xl\">\n <div className=\"flex h-full overflow-hidden\">\n <SettingsNavigation\n activeTab={activeTab}\n onTabChange={setActiveTab}\n onAddToPage={onAddToPage}\n navigationItems={navigationItems}\n loading={loading}\n />\n\n {/* Right Content Area */}\n <div className=\"flex-1 p-6 overflow-y-auto\">{activeTabContent}</div>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/shadcn/lib/utils';\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline:\n 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\n\nimport { cn } from '@/shadcn/lib/utils';\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn('text-lg leading-none font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import React from 'react';\n\ninterface PenIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function PenIcon({ size = 16, className = '', color = 'secondary' }: PenIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 hover:stroke-[#1976D2] ${className}`}\n style={{\n cursor: 'pointer',\n }}\n >\n <path d=\"M13 21h8\" />\n <path d=\"m15 5 4 4\" />\n <path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\" />\n </svg>\n );\n}\n","import React from 'react';\nimport { Button } from '../ui/button';\nimport { CheckIcon } from 'lucide-react';\n\ninterface NavigationItem {\n id: string;\n label: string;\n}\n\ninterface SettingsNavigationProps {\n activeTab: string;\n onTabChange: (tabId: string) => void;\n onAddToPage: () => void;\n navigationItems: NavigationItem[];\n loading?: boolean;\n}\n\nexport function SettingsNavigation({\n activeTab,\n onTabChange,\n onAddToPage,\n navigationItems,\n loading = false,\n}: SettingsNavigationProps) {\n return (\n <div className=\"w-56 border-r bg-muted/50 p-6 flex flex-col\">\n <nav className=\"space-y-2 flex-1\">\n {navigationItems.map((item) => (\n <button\n key={item.id}\n onClick={() => !loading && onTabChange(item.id)}\n disabled={loading}\n className={`w-full text-left px-3 py-2 rounded-md text-sm font-medium transition-colors ${\n activeTab === item.id\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted'\n } ${loading ? 'opacity-50 cursor-not-allowed' : ''}`}\n >\n {item.label}\n {loading && item.id !== activeTab && (\n <div className=\"inline-block ml-2 animate-spin rounded-full h-3 w-3 border-b border-current opacity-50\"></div>\n )}\n </button>\n ))}\n </nav>\n\n {/* Add to page button at bottom of left column */}\n <div className=\"mt-auto pt-4\">\n <Button\n onClick={onAddToPage}\n disabled={loading}\n className=\"w-full bg-black hover:bg-black/90 text-white rounded-md justify-start px-3 py-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <CheckIcon className=\"mr-2 h-4 w-4\" />\n Add to page\n </Button>\n </div>\n </div>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Input } from '../../components/ui/input';\nimport { Label } from '../../components/ui/label';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../../components/ui/tabs';\nimport { CheckIcon } from 'lucide-react';\nimport { DomainPreview } from '../../components/SettingsModal/DomainPreview';\n\ninterface GeneralTabProps {\n block: any;\n editor: any;\n domainValue: string;\n onDomainChange: (did: string) => void;\n domainProfile: any;\n}\n\nexport function ListGeneralTab({\n block: _block,\n editor: _editor,\n domainValue,\n onDomainChange,\n domainProfile,\n}: GeneralTabProps) {\n const [domainType, setDomainType] = useState('this-domain');\n const [isValidDomain, setIsValidDomain] = useState(true);\n const [isLoading, setIsLoading] = useState(false);\n const [customDomainValue, setCustomDomainValue] = useState('');\n\n // Known domain value for \"this-domain\" tab\n const thisDomainValue = 'did:ixo:entity:example123';\n\n // Synchronize local state with parent domainValue when component mounts or domainValue changes\n useEffect(() => {\n if (domainValue) {\n if (domainValue === thisDomainValue) {\n setDomainType('this-domain');\n setIsValidDomain(true);\n } else {\n setDomainType('custom-domain');\n setCustomDomainValue(domainValue);\n setIsValidDomain(true);\n }\n } else {\n // Reset to default if no domain value\n setDomainType('this-domain');\n setCustomDomainValue('');\n setIsValidDomain(true);\n }\n }, [domainValue, thisDomainValue]);\n\n const handleCustomDomainChange = async (did: string) => {\n setCustomDomainValue(did);\n\n if (!did) {\n setIsValidDomain(false);\n return;\n }\n\n // Basic validation for DID format\n const isValid = did.startsWith('did:') && did.length > 10;\n\n if (isValid) {\n setIsLoading(true);\n try {\n // Simulate async fetch request\n await new Promise((resolve) => setTimeout(resolve, 1000));\n setIsValidDomain(true);\n onDomainChange(did);\n } catch (error) {\n setIsValidDomain(false);\n } finally {\n setIsLoading(false);\n }\n } else {\n setIsValidDomain(false);\n }\n };\n\n const handleTabChange = (value: string) => {\n setDomainType(value);\n\n if (value === 'this-domain') {\n // Use known domain value\n setIsValidDomain(true);\n onDomainChange(thisDomainValue);\n } else {\n // Reset for custom domain\n setIsValidDomain(false);\n onDomainChange('');\n }\n };\n\n return (\n <div className=\"space-y-6\">\n {/* List Header */}\n <div>\n <h2 className=\"text-2xl font-semibold\">List</h2>\n <p className=\"text-muted-foreground mt-1\">Add a domain list to your page</p>\n </div>\n\n {/* Domain Type Tabs */}\n <Tabs defaultValue=\"this-domain\" value={domainType} onValueChange={handleTabChange}>\n <TabsList className=\"px-1\">\n <TabsTrigger value=\"this-domain\">This domain</TabsTrigger>\n <TabsTrigger value=\"custom-domain\">Custom domain</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"this-domain\" className=\"space-y-4\">\n {/* Domain Input - Disabled for this domain */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"this-domain-input\">Domain</Label>\n <div className=\"relative\">\n <Input\n id=\"this-domain-input\"\n value={thisDomainValue}\n disabled\n className=\"pr-10\"\n placeholder=\"Enter domain DID\"\n />\n {isValidDomain && (\n <CheckIcon className=\"absolute right-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-green-500\" />\n )}\n </div>\n </div>\n\n {/* Domain Preview Card - Always available for this domain */}\n <DomainPreview key={thisDomainValue} domainProfile={domainProfile} />\n </TabsContent>\n\n <TabsContent value=\"custom-domain\" className=\"space-y-4\">\n {/* Domain Input - Enabled for custom domain */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"custom-domain-input\">Domain</Label>\n <div className=\"relative\">\n <Input\n id=\"custom-domain-input\"\n value={customDomainValue}\n onChange={(e) => handleCustomDomainChange(e.target.value)}\n className=\"pr-10\"\n placeholder=\"Enter domain DID\"\n disabled={isLoading}\n />\n {isLoading ? (\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2\">\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-gray-900\"></div>\n </div>\n ) : (\n isValidDomain &&\n customDomainValue && (\n <CheckIcon className=\"absolute right-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-green-500\" />\n )\n )}\n </div>\n </div>\n\n {/* Domain Preview Card - Only available after validation */}\n {isValidDomain && customDomainValue && !isLoading && (\n <DomainPreview key={customDomainValue} domainProfile={domainProfile} />\n )}\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '../../lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\n\nimport { cn } from '@/shadcn/lib/utils';\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","import * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\n\nimport { cn } from '../../lib/utils';\n\nfunction Tabs({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn('flex flex-col gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n 'bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('flex-1 outline-none', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import React from 'react';\nimport { Card, CardContent } from '../ui/card';\n\ninterface DomainPreviewProps {\n domainProfile: any;\n}\n\nexport function DomainPreview({ domainProfile }: DomainPreviewProps) {\n if (!domainProfile) {\n return null;\n }\n\n return (\n <Card className=\"border-0 shadow-sm rounded-xl\">\n <CardContent className=\"p-4\">\n <div className=\"flex items-start space-x-4\">\n <div className=\"w-16 h-16 bg-muted rounded-lg flex items-center justify-center shrink-0\">\n <img\n src={domainProfile.image ?? 'https://studio.ixo.earth/domain-profile-default.jpg'}\n alt={domainProfile.name}\n className=\"w-full h-full object-cover rounded-lg border-2 border-gray-200\"\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"font-semibold text-lg\">{domainProfile.name}</h3>\n <p className=\"text-muted-foreground text-sm\">{domainProfile.description}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '@/shadcn/lib/utils';\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-lg border bg-card text-card-foreground shadow-sm', className)}\n {...props}\n />\n )\n);\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn('text-2xl font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n));\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n )\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n )\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","import { Domain } from '../../../core/types/Domain';\nimport React, { useState, useEffect } from 'react';\nimport ListItem from './ListItem';\n\ninterface ListPreviewTabProps {\n block: any;\n domain: Domain;\n}\n\nexport default function ListPreviewTab({ block, domain }: ListPreviewTabProps) {\n const [items, setItems] = useState<any[]>([]);\n const showResources = block.props.showLinkedResources;\n\n useEffect(() => {\n if (showResources) {\n setItems(domain.linkedResource);\n }\n }, []);\n\n return (\n <div className=\"flex flex-col gap-4 mt-[30px]\">\n {items.map((item) => (\n <ListItem item={item} />\n ))}\n </div>\n );\n}\n","import React from 'react';\nimport { getMediaTypeIcon } from '../../../core/lib/getMediaTypeIcon';\n\ninterface ListItemProps {\n item: any;\n index?: number;\n}\n\nexport default function ListItem({ item, index = 0 }: ListItemProps) {\n const title =\n typeof item === 'string'\n ? item\n : item.description || item.title || item.name || `Item ${index + 1}`;\n\n // Get media type from item (fallback to empty string if not available)\n const mediaType = typeof item === 'object' ? item.mediaType || '' : '';\n\n return (\n <div className=\"group w-full bg-white rounded-lg p-4 border border-gray-100 hover:bg-gray-50 transition-colors duration-150 ease-in-out cursor-pointer\">\n <div className=\"flex items-center justify-between space-x-4\">\n {/* Left side: Icon and Title */}\n <div className=\"flex items-center space-x-3 flex-1 min-w-0\">\n {/* Icon container */}\n <div className=\"flex-shrink-0 w-8 h-8 bg-gray-100 rounded-md flex items-center justify-center\">\n {getMediaTypeIcon(mediaType, {\n size: 16,\n className: 'text-gray-500',\n color: 'secondary',\n })}\n </div>\n\n {/* Title */}\n <span className=\"font-semibold text-gray-800 truncate flex-1\">{title}</span>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport DocumentIcon from '../../shadcn/components/icons/DocumentIcon';\nimport ImageIcon from '../../shadcn/components/icons/ImageIcon';\nimport VideoIcon from '../../shadcn/components/icons/VideoIcon';\nimport AudioIcon from '../../shadcn/components/icons/AudioIcon';\nimport PdfIcon from '../../shadcn/components/icons/PdfIcon';\nimport JsonIcon from '../../shadcn/components/icons/JsonIcon';\nimport XmlIcon from '../../shadcn/components/icons/XmlIcon';\nimport ArchiveIcon from '../../shadcn/components/icons/ArchiveIcon';\nimport DefaultIcon from '../../shadcn/components/icons/DefaultIcon';\n\ninterface IconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\n/**\n * Returns the appropriate icon component based on media type\n * @param mediaType - The MIME type or media type string\n * @param props - Icon props (size, className, color)\n * @returns React component for the appropriate icon\n */\nexport function getMediaTypeIcon(mediaType: string, props: IconProps = {}) {\n const normalizedType = mediaType?.toLowerCase() || '';\n\n // Image types\n if (normalizedType.startsWith('image/')) {\n return <ImageIcon {...props} />;\n }\n\n // Video types\n if (normalizedType.startsWith('video/')) {\n return <VideoIcon {...props} />;\n }\n\n // Audio types\n if (normalizedType.startsWith('audio/')) {\n return <AudioIcon {...props} />;\n }\n\n // PDF\n if (normalizedType.includes('pdf') || normalizedType === 'application/pdf') {\n return <PdfIcon {...props} />;\n }\n\n // JSON\n if (\n normalizedType.includes('json') ||\n normalizedType === 'application/json' ||\n normalizedType === 'text/json'\n ) {\n return <JsonIcon {...props} />;\n }\n\n // XML\n if (\n normalizedType.includes('xml') ||\n normalizedType === 'application/xml' ||\n normalizedType === 'text/xml' ||\n normalizedType === 'application/rss+xml' ||\n normalizedType === 'application/atom+xml'\n ) {\n return <XmlIcon {...props} />;\n }\n\n // Archive types\n if (\n normalizedType.includes('zip') ||\n normalizedType.includes('rar') ||\n normalizedType.includes('tar') ||\n normalizedType.includes('gzip') ||\n normalizedType.includes('7z') ||\n normalizedType === 'application/x-compressed' ||\n normalizedType === 'application/x-zip-compressed' ||\n normalizedType === 'multipart/x-zip'\n ) {\n return <ArchiveIcon {...props} />;\n }\n\n // Text documents\n if (\n normalizedType.startsWith('text/') ||\n normalizedType.includes('document') ||\n normalizedType.includes('word') ||\n normalizedType.includes('excel') ||\n normalizedType.includes('powerpoint') ||\n normalizedType.includes('spreadsheet') ||\n normalizedType.includes('presentation')\n ) {\n return <DocumentIcon {...props} />;\n }\n\n // Default fallback\n return <DefaultIcon {...props} />;\n}\n\n/**\n * Get a list of all supported media type categories\n * @returns Array of supported media type categories\n */\nexport function getSupportedMediaTypes(): string[] {\n return ['image', 'video', 'audio', 'pdf', 'json', 'xml', 'archive', 'document', 'default'];\n}\n","import React from 'react';\n\ninterface DocumentIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function DocumentIcon({\n size = 16,\n className = '',\n color = 'secondary',\n}: DocumentIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 ${className}`}\n >\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14,2 14,8 20,8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10,9 9,9 8,9\" />\n </svg>\n );\n}\n","import React from 'react';\n\ninterface ImageIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function ImageIcon({\n size = 16,\n className = '',\n color = 'secondary',\n}: ImageIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 ${className}`}\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </svg>\n );\n}\n","import React from 'react';\n\ninterface VideoIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function VideoIcon({\n size = 16,\n className = '',\n color = 'secondary',\n}: VideoIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 ${className}`}\n >\n <path d=\"m22 8-6 4 6 4V8Z\" />\n <rect width=\"14\" height=\"12\" x=\"2\" y=\"6\" rx=\"2\" ry=\"2\" />\n </svg>\n );\n}\n","import React from 'react';\n\ninterface AudioIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function AudioIcon({\n size = 16,\n className = '',\n color = 'secondary',\n}: AudioIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 ${className}`}\n >\n <polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\" />\n <path d=\"m19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\" />\n </svg>\n );\n}\n","import React from 'react';\n\ninterface PdfIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function PdfIcon({ size = 16, className = '', color = 'secondary' }: PdfIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 ${className}`}\n >\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14,2 14,8 20,8\" />\n <path d=\"M10 12h4\" />\n <path d=\"M10 16h2\" />\n <path d=\"M8 12v4\" />\n </svg>\n );\n}\n","import React from 'react';\n\ninterface JsonIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function JsonIcon({\n size = 16,\n className = '',\n color = 'secondary',\n}: JsonIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 ${className}`}\n >\n <path d=\"M5 12s2.545-5 7-5c4.454 0 7 5 7 5s-2.546 5-7 5c-4.455 0-7-5-7-5z\" />\n <path d=\"M12 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\" />\n <path d=\"M21 17v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2\" />\n <path d=\"M21 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2\" />\n </svg>\n );\n}\n","import React from 'react';\n\ninterface XmlIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function XmlIcon({ size = 16, className = '', color = 'secondary' }: XmlIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 ${className}`}\n >\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14,2 14,8 20,8\" />\n <path d=\"m9 13 2 2-2 2\" />\n <path d=\"m15 13-2 2 2 2\" />\n </svg>\n );\n}\n","import React from 'react';\n\ninterface ArchiveIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function ArchiveIcon({\n size = 16,\n className = '',\n color = 'secondary',\n}: ArchiveIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 ${className}`}\n >\n <rect width=\"20\" height=\"5\" x=\"2\" y=\"3\" rx=\"1\" />\n <path d=\"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8\" />\n <path d=\"M10 12h4\" />\n </svg>\n );\n}\n","import React from 'react';\n\ninterface DefaultIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function DefaultIcon({\n size = 16,\n className = '',\n color = 'secondary',\n}: DefaultIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 ${className}`}\n >\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14,2 14,8 20,8\" />\n </svg>\n );\n}\n","import * as React from 'react';\nimport { Switch } from './ui/switch';\n\nexport interface SwitchOptionProps {\n label: string;\n description: string;\n checked: boolean;\n onChange: (checked: boolean) => void;\n}\n\nexport default function SwitchOption({ label, description, checked, onChange }: SwitchOptionProps) {\n return (\n <div className=\"flex w-full max-w-md items-start justify-between gap-4 py-2\">\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium leading-none\">{label}</span>\n <span className=\"mt-1 text-sm text-muted-foreground\">{description}</span>\n </div>\n\n <Switch id={label} aria-label={label} checked={checked} onCheckedChange={onChange} />\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\n\nimport { cn } from '../../lib/utils';\n\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import SwitchOption from '../../components/SwitchOption';\nimport React, { useMemo } from 'react';\nimport { Domain } from '../../../core/types/Domain';\n\ninterface ListSettingsTabProps {\n block: any;\n editor: any;\n domain: Domain;\n}\n\nexport default function ListSettingsTab({ block, editor, domain }: ListSettingsTabProps) {\n const linkedResources = {\n count: domain?.linkedResource?.length ?? 0,\n };\n\n const isCollection = useMemo(() => {\n return domain?.type === 'asset/collection';\n }, [domain]);\n\n return (\n <div>\n <SwitchOption\n label={`Linked Resources ${linkedResources.count}`}\n description=\"Resources linked to this list\"\n checked={block.props.showLinkedResources}\n onChange={(checked) => {\n editor.updateBlock(block.id, {\n props: {\n showLinkedResources: checked,\n },\n });\n }}\n />\n {isCollection && (\n <SwitchOption\n label=\"Display assets in collection\"\n description=\"Display assets in collection\"\n checked={block.props.showAssetsInCollection}\n onChange={(checked) => {\n editor.updateBlock(block.id, {\n props: {\n showAssetsInCollection: checked,\n },\n });\n }}\n />\n )}\n </div>\n );\n}\n","import { useState } from 'react';\n\nexport default function useList() {\n const [list, setList] = useState<any[]>([]);\n\n return {\n list,\n setList,\n };\n}\n","import React from 'react';\n\nexport default function ListContainer({ children }: { children: React.ReactNode }) {\n return <div className=\"flex flex-col gap-2\">{children}</div>;\n}\n","// OverviewBlock.tsx\nimport React, { FC } from 'react';\nimport { createReactBlockSpec, ReactCustomBlockRenderProps } from '@blocknote/react';\nimport {\n BlockFromConfig,\n BlockNoteEditor,\n InlineContentSchema,\n StyleSchema,\n BlockSchemaWithBlock,\n} from '@blocknote/core';\nimport OverviewBlockToolbar from './OverviewBlockToolbar';\n\n/**\n * Block props schema for OverviewBlock\n */\nexport interface OverviewBlockSettings {\n did: string;\n}\n\ntype OverviewBlockConfig = {\n type: 'overview';\n propSchema: {\n did: { default: string };\n };\n content: 'inline'; // allow nested editable blocks\n};\n\n/**\n * Props passed into OverviewBlock's React renderer\n */\nexport type OverviewBlockProps = ReactCustomBlockRenderProps<\n OverviewBlockConfig,\n InlineContentSchema,\n StyleSchema\n> & {\n block: BlockFromConfig<OverviewBlockConfig, InlineContentSchema, StyleSchema>;\n editor: BlockNoteEditor<\n BlockSchemaWithBlock<'overview', OverviewBlockConfig>,\n InlineContentSchema,\n StyleSchema\n >;\n};\n\n/**\n * React renderer for OverviewBlock\n */\nconst OverviewBlockContent: FC<OverviewBlockProps> = ({ block, editor, contentRef }) => {\n return (\n <div\n style={{\n width: '100%',\n backgroundColor: '#FFFFFF',\n borderRadius: '8px',\n }}\n >\n {/* Toolbar at the top */}\n <OverviewBlockToolbar block={block} editor={editor} />\n\n {/* The actual editable content area */}\n <div ref={contentRef} />\n </div>\n );\n};\n\n/**\n * BlockSpec: OverviewBlock groups other blocks inside it\n */\nexport const OverviewBlock = createReactBlockSpec(\n {\n type: 'overview' as const,\n propSchema: {\n did: { default: '' },\n },\n content: 'inline' as const, // <– KEY: makes this block host nested editable content\n },\n {\n render: OverviewBlockContent,\n }\n);\n","import React from 'react';\nimport GlobeIcon from '../../components/GlobeIcon';\nimport { OverviewSettings } from './OverviewSettings';\n\ninterface OverviewBlockToolbarProps {\n block: any;\n editor: any;\n}\n\nexport default function OverviewBlockToolbar({ block, editor }: OverviewBlockToolbarProps) {\n return (\n <div className=\"flex justify-between items-center mb-3 pb-2 border-b border-gray-100 dark:border-gray-700\">\n <div className=\"flex gap-2 items-center font-semibold\">\n <GlobeIcon size={16} /> Overview\n </div>\n <OverviewSettings block={block} editor={editor} />\n </div>\n );\n}\n","import React from 'react';\n\ninterface GlobeIconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\nexport default function GlobeIcon({\n size = 16,\n className = '',\n color = 'secondary',\n}: GlobeIconProps) {\n const colors = {\n primary: '#2F2F2F',\n secondary: '#9B9B9B',\n accent: '#1976D2',\n };\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={colors[color]}\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={`transition-colors duration-200 hover:stroke-[#1976D2] ${className}`}\n style={{\n cursor: 'pointer',\n }}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { SettingsModal } from '../../components/SettingsModal/SettingsModal';\nimport { OverviewGeneralTab } from './OverviewGeneralTab';\nimport OverviewPreviewTab from './OverviewPreviewTab';\nimport { getEntity } from '../../../core/lib/graphql-queries';\nimport { Block } from '@blocknote/core';\n\nexport function OverviewSettings({ block, editor }: any) {\n const [domainValue, setDomainValue] = useState(block.props.did);\n const [pageBlocks, setPageBlocks] = useState<Block[] | null>(block.props.blocks || null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [domainProfile, setDomainProfile] = useState<any>(null);\n const [modalOpen, setModalOpen] = useState(false);\n\n useEffect(() => {\n if (!domainValue) {\n setPageBlocks(block.props.blocks || null);\n return;\n }\n\n setLoading(true);\n setError(null);\n\n const fetchPageBlocks = async () => {\n try {\n const entity = await getEntity(domainValue);\n\n // Get the Page setting like in useOverview.tsx\n const overviewResource = entity.settings.Page;\n const profileResource = entity.settings.Profile;\n\n if (overviewResource?.serviceEndpoint) {\n const fetchedPageBlocks = await fetch(overviewResource.serviceEndpoint).then((res) =>\n res.json()\n );\n\n console.log({ fetchedPageBlocks });\n\n setPageBlocks(fetchedPageBlocks.blocks || block.props.blocks || null);\n } else {\n setPageBlocks(block.props.blocks || null);\n }\n\n if (profileResource?.serviceEndpoint) {\n const fetchedProfile = await fetch(profileResource.serviceEndpoint).then((res) =>\n res.json()\n );\n setDomainProfile(fetchedProfile);\n }\n\n setLoading(false);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch page blocks');\n setPageBlocks(block.props.blocks || null);\n setLoading(false);\n }\n };\n\n fetchPageBlocks();\n }, [domainValue, block.props.blocks]);\n\n const handleDidChange = (did: string) => {\n setDomainValue(did);\n };\n\n const handleAddToPage = () => {\n // Handle add to page logic here\n editor.updateBlock(block.id, {\n props: {\n did: domainValue,\n },\n children: pageBlocks,\n });\n console.log('Adding to page with DID:', domainValue);\n\n // Close the modal after updating blocks\n setModalOpen(false);\n };\n\n return (\n <SettingsModal\n onAddToPage={handleAddToPage}\n loading={loading}\n open={modalOpen}\n onOpenChange={setModalOpen}\n tabs={[\n {\n id: 'general',\n label: 'General',\n content: (\n <OverviewGeneralTab\n block={block}\n editor={editor}\n domainValue={domainValue}\n onDomainChange={handleDidChange}\n domainProfile={domainProfile}\n />\n ),\n },\n {\n id: 'preview',\n label: 'Preview',\n content: (\n <OverviewPreviewTab blocks={pageBlocks ?? null} loading={loading} error={error} />\n ),\n },\n ]}\n />\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Input } from '../../components/ui/input';\nimport { Label } from '../../components/ui/label';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../../components/ui/tabs';\nimport { CheckIcon } from 'lucide-react';\nimport { DomainPreview } from '../../components/SettingsModal/DomainPreview';\n\ninterface GeneralTabProps {\n block: any;\n editor: any;\n domainValue: string;\n onDomainChange: (did: string) => void;\n domainProfile: any;\n}\n\nexport function OverviewGeneralTab({\n block: _block,\n editor: _editor,\n domainValue,\n onDomainChange,\n domainProfile,\n}: GeneralTabProps) {\n const [domainType, setDomainType] = useState('this-domain');\n const [isValidDomain, setIsValidDomain] = useState(true);\n const [isLoading, setIsLoading] = useState(false);\n const [customDomainValue, setCustomDomainValue] = useState('');\n\n // Known domain value for \"this-domain\" tab\n const thisDomainValue = 'did:ixo:entity:example123';\n\n // Synchronize local state with parent domainValue when component mounts or domainValue changes\n useEffect(() => {\n if (domainValue) {\n if (domainValue === thisDomainValue) {\n setDomainType('this-domain');\n setIsValidDomain(true);\n } else {\n setDomainType('custom-domain');\n setCustomDomainValue(domainValue);\n setIsValidDomain(true);\n }\n } else {\n // Reset to default if no domain value\n setDomainType('this-domain');\n setCustomDomainValue('');\n setIsValidDomain(true);\n }\n }, [domainValue, thisDomainValue]);\n\n const handleCustomDomainChange = async (did: string) => {\n setCustomDomainValue(did);\n\n if (!did) {\n setIsValidDomain(false);\n return;\n }\n\n // Basic validation for DID format\n const isValid = did.startsWith('did:') && did.length > 10;\n\n if (isValid) {\n setIsLoading(true);\n try {\n // Simulate async fetch request\n await new Promise((resolve) => setTimeout(resolve, 1000));\n setIsValidDomain(true);\n onDomainChange(did);\n } catch (error) {\n setIsValidDomain(false);\n } finally {\n setIsLoading(false);\n }\n } else {\n setIsValidDomain(false);\n }\n };\n\n const handleTabChange = (value: string) => {\n setDomainType(value);\n\n if (value === 'this-domain') {\n // Use known domain value\n setIsValidDomain(true);\n onDomainChange(thisDomainValue);\n } else {\n // Reset for custom domain\n setIsValidDomain(false);\n onDomainChange('');\n }\n };\n\n return (\n <div className=\"space-y-6\">\n {/* Overview Header */}\n <div>\n <h2 className=\"text-2xl font-semibold\">Overview</h2>\n <p className=\"text-muted-foreground mt-1\">Add a domain overview to your page</p>\n </div>\n\n {/* Domain Type Tabs */}\n <Tabs defaultValue=\"this-domain\" value={domainType} onValueChange={handleTabChange}>\n <TabsList className=\"px-1\">\n <TabsTrigger value=\"this-domain\">This domain</TabsTrigger>\n <TabsTrigger value=\"custom-domain\">Custom domain</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"this-domain\" className=\"space-y-4\">\n {/* Domain Input - Disabled for this domain */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"this-domain-input\">Domain</Label>\n <div className=\"relative\">\n <Input\n id=\"this-domain-input\"\n value={thisDomainValue}\n disabled\n className=\"pr-10\"\n placeholder=\"Enter domain DID\"\n />\n {isValidDomain && (\n <CheckIcon className=\"absolute right-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-green-500\" />\n )}\n </div>\n </div>\n\n {/* Domain Preview Card - Always available for this domain */}\n <DomainPreview domainProfile={domainProfile} />\n </TabsContent>\n\n <TabsContent value=\"custom-domain\" className=\"space-y-4\">\n {/* Domain Input - Enabled for custom domain */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"custom-domain-input\">Domain</Label>\n <div className=\"relative\">\n <Input\n id=\"custom-domain-input\"\n value={customDomainValue}\n onChange={(e) => handleCustomDomainChange(e.target.value)}\n className=\"pr-10\"\n placeholder=\"Enter domain DID\"\n disabled={isLoading}\n />\n {isLoading ? (\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2\">\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-gray-900\"></div>\n </div>\n ) : (\n isValidDomain &&\n customDomainValue && (\n <CheckIcon className=\"absolute right-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-green-500\" />\n )\n )}\n </div>\n </div>\n\n {/* Domain Preview Card - Only available after validation */}\n {isValidDomain && customDomainValue && !isLoading && (\n <DomainPreview domainProfile={domainProfile} />\n )}\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n","import React from 'react';\nimport { BlockNoteView } from '@blocknote/shadcn';\nimport { useCreateBlockNote } from '@blocknote/react';\nimport { Block } from '@blocknote/core';\n\ninterface OverviewPreviewTabProps {\n blocks: Block[] | null;\n loading?: boolean;\n error?: string | null;\n}\n\nexport default function OverviewPreviewTab({\n blocks,\n loading = false,\n error = null,\n}: OverviewPreviewTabProps) {\n const editor = useCreateBlockNote({\n ...(blocks ? { initialContent: blocks } : {}),\n });\n\n console.log({ blocks });\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center p-8\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900\"></div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center p-8 text-red-500\">\n <p>Error loading preview: {error}</p>\n </div>\n );\n }\n\n if (blocks === null) {\n return (\n <div className=\"flex items-center justify-center p-8 text-gray-500\">\n <p>No content available</p>\n </div>\n );\n }\n\n return <BlockNoteView editor={editor} editable={false} />;\n}\n","import { ListBlock } from './list';\nimport { OverviewBlock } from './overview';\nexport { ListBlock, OverviewBlock };\nexport type { ListBlockSettings, ListBlockProps } from './list';\nexport type { OverviewBlockSettings, OverviewBlockProps } from './overview';\n\n// Block configuration for easy import\nexport const blockSpecs = {\n list: ListBlock,\n overview: OverviewBlock,\n};\n\n// Slash menu items configuration\nexport const getExtraSlashMenuItems = (editor: any) => [\n {\n title: 'List',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'list',\n props: {\n title: '',\n did: '',\n fragmentIdentifier: '',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['list', 'data', 'dynamic'],\n group: 'Domains',\n subtext: 'Create a dynamic list from DID data',\n },\n {\n title: 'Overview',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'overview',\n props: {\n did: '',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['overview', 'overview-block', 'data-overview'],\n group: 'Domains',\n subtext: 'Create an overview from DID data',\n },\n];\n","import { useCreateBlockNote } from '@blocknote/react';\nimport {\n BlockNoteSchema,\n defaultBlockSpecs,\n defaultInlineContentSpecs,\n defaultStyleSpecs,\n} from '@blocknote/core';\nimport { IxoEditorOptions } from '../../core/types';\nimport { blockSpecs } from '../blocks';\n\n/**\n * Custom hook that wraps useCreateBlockNote with IXO-specific configurations\n * @param options - Configuration options for the IxoEditor\n * @returns A configured BlockNote editor instance\n */\nexport function useCreateIxoEditor(options?: IxoEditorOptions) {\n // Extract IXO-specific options and BlockNote options\n const {\n theme = 'light',\n uploadFile,\n initialContent,\n editable = true,\n sideMenu = true,\n slashMenu = true,\n formattingToolbar = true,\n linkToolbar = true,\n filePanel = true,\n tableHandles = true,\n } = options || {};\n\n // Create default upload handler if not provided\n const defaultUploadFile =\n uploadFile ||\n (async (file: File) => {\n // Default implementation - convert to data URL\n // In production, you'd want to upload to a server\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n const dataUrl = reader.result as string;\n resolve(dataUrl);\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n });\n\n // Create custom schema with IXO blocks\n const schema = BlockNoteSchema.create({\n blockSpecs: {\n ...defaultBlockSpecs,\n ...blockSpecs,\n },\n inlineContentSpecs: {\n ...defaultInlineContentSpecs,\n },\n styleSpecs: {\n ...defaultStyleSpecs,\n },\n });\n\n // Create the BlockNote editor with basic configurations\n const editor = useCreateBlockNote({\n schema,\n initialContent,\n uploadFile: defaultUploadFile,\n });\n\n // Store configuration in editor for components to access\n if (editor) {\n (editor as any)._ixoConfig = {\n theme,\n editable,\n sideMenu,\n slashMenu,\n formattingToolbar,\n linkToolbar,\n filePanel,\n tableHandles,\n };\n }\n\n return editor;\n}\n","import { useCreateBlockNote } from '@blocknote/react';\nimport {\n BlockNoteSchema,\n defaultBlockSpecs,\n defaultInlineContentSpecs,\n defaultStyleSpecs,\n} from '@blocknote/core';\nimport { IxoCollaborativeEditorOptions } from '../../core/types';\nimport { blockSpecs } from '../blocks';\nimport { useMatrixProvider } from '../../core/hooks/useMatrixProvider';\nimport * as Y from 'yjs';\nimport { useMemo } from 'react';\n\n/**\n * Custom hook that wraps useCreateBlockNote with IXO-specific configurations\n * @param options - Configuration options for the IxoEditor\n * @returns A configured BlockNote editor instance\n */\nexport function useCreateCollaborativeIxoEditor(options: IxoCollaborativeEditorOptions) {\n // Extract IXO-specific options and BlockNote options\n // Memoize Y.Doc to prevent recreation on every render\n const yDoc = useMemo(() => new Y.Doc(), []);\n const {\n theme = 'light',\n uploadFile,\n initialContent,\n editable = true,\n sideMenu = true,\n slashMenu = true,\n formattingToolbar = true,\n linkToolbar = true,\n filePanel = true,\n tableHandles = true,\n user,\n matrixClient,\n } = options || {};\n\n // Memoize user data to prevent recreation\n const memoizedUser = useMemo(\n () => ({\n id: user?.id || '',\n name: user?.name || '',\n color: user?.color || '',\n accessToken: user?.accessToken || '',\n }),\n [user?.id, user?.name, user?.color, user?.accessToken]\n );\n\n const { matrixProvider, connectionStatus } = useMatrixProvider({\n yDoc,\n matrixClient,\n roomId: options.roomId,\n });\n\n // Memoize default upload handler to prevent recreation\n const defaultUploadFile = useMemo(\n () =>\n uploadFile ||\n (async (file: File) => {\n // Default implementation - convert to data URL\n // In production, you'd want to upload to a server\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n const dataUrl = reader.result as string;\n resolve(dataUrl);\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n }),\n [uploadFile]\n );\n\n // Memoize schema to prevent recreation\n const schema = useMemo(\n () =>\n BlockNoteSchema.create({\n blockSpecs: {\n ...defaultBlockSpecs,\n ...blockSpecs,\n },\n inlineContentSpecs: {\n ...defaultInlineContentSpecs,\n },\n styleSpecs: {\n ...defaultStyleSpecs,\n },\n }),\n []\n );\n\n // Memoize collaboration config to prevent recreation\n const collaborationConfig = useMemo(\n () => ({\n provider: matrixProvider,\n fragment: yDoc.getXmlFragment('document'),\n user: {\n name: memoizedUser.name,\n color: memoizedUser.color,\n },\n }),\n [matrixProvider, yDoc, memoizedUser.name, memoizedUser.color]\n );\n\n // Memoize IXO config to prevent recreation\n const ixoConfig = useMemo(\n () => ({\n theme,\n editable,\n sideMenu,\n slashMenu,\n formattingToolbar,\n linkToolbar,\n filePanel,\n tableHandles,\n }),\n [theme, editable, sideMenu, slashMenu, formattingToolbar, linkToolbar, filePanel, tableHandles]\n );\n\n // Create the BlockNote editor with basic configurations\n const editor = useCreateBlockNote({\n schema,\n initialContent,\n uploadFile: defaultUploadFile,\n collaboration: collaborationConfig,\n });\n\n // Store configuration in editor for components to access\n if (editor) {\n (editor as any)._ixoConfig = ixoConfig;\n }\n\n return { editor, connectionStatus: connectionStatus };\n}\n","import React from 'react';\nimport { getDefaultReactSlashMenuItems, SuggestionMenuController } from '@blocknote/react';\nimport { BlockNoteView } from '@blocknote/shadcn';\nimport { filterSuggestionItems } from '@blocknote/core';\nimport type { BlockNoteEditor } from '@blocknote/core';\nimport { IxoEditorConfig } from '../core/types';\nimport { getExtraSlashMenuItems } from './blocks';\n\nexport interface IxoEditorProps {\n editor: BlockNoteEditor<any, any, any> | undefined;\n className?: string;\n onChange?: () => void;\n onSelectionChange?: () => void;\n children?: React.ReactNode;\n}\n\n/**\n * IxoEditor component - A customized BlockNote editor for IXO\n */\nexport function IxoEditor({\n editor,\n className = '',\n onChange,\n onSelectionChange,\n children,\n}: IxoEditorProps) {\n if (!editor) {\n return null;\n }\n\n // Get IXO configuration from editor\n const config: IxoEditorConfig = (editor as any)._ixoConfig || {\n theme: 'light',\n editable: true,\n sideMenu: true,\n slashMenu: true,\n formattingToolbar: true,\n linkToolbar: true,\n filePanel: true,\n tableHandles: true,\n };\n\n return (\n <div className={`ixo-editor ixo-editor--theme-${config.theme} ${className}`}>\n <BlockNoteView\n editor={editor}\n editable={config.editable}\n sideMenu={config.sideMenu}\n slashMenu={false}\n formattingToolbar={config.formattingToolbar}\n linkToolbar={config.linkToolbar}\n filePanel={config.filePanel}\n tableHandles={config.tableHandles}\n theme={config.theme}\n onChange={onChange}\n onSelectionChange={onSelectionChange}\n >\n {config.slashMenu && (\n <SuggestionMenuController\n triggerCharacter={'/'}\n getItems={async (query) => {\n // Get default slash menu items for the current editor\n const defaultItems = getDefaultReactSlashMenuItems(editor);\n // Add our custom items\n const customItems = getExtraSlashMenuItems(editor);\n // Combine and filter based on query\n return filterSuggestionItems([...defaultItems, ...customItems], query);\n }}\n />\n )}\n {children}\n </BlockNoteView>\n </div>\n );\n}\n"],"mappings":"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","names":["React","React","React","useState","useEffect","React","React","React","React","React","React","React","useState","React","React","React","CheckIcon","React","React","React","useState","React","CheckIcon","React","useState","useEffect","React","React","React","React","React","React","React","React","React","React","React","React","React","useState","useEffect","React","React","React","React","useState","useEffect","React","React","useState","React","React","React","createReactBlockSpec","React","React","React","useState","useEffect","React","useState","useEffect","CheckIcon","useState","useEffect","React","CheckIcon","React","useState","useEffect","React","React","React","createReactBlockSpec","useCreateBlockNote","useCreateBlockNote","useCreateBlockNote","BlockNoteSchema","defaultBlockSpecs","defaultInlineContentSpecs","defaultStyleSpecs","useMemo","BlockNoteSchema","defaultBlockSpecs","defaultInlineContentSpecs","defaultStyleSpecs","useCreateBlockNote","React","BlockNoteView","React","BlockNoteView"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { I as IxoEditorOptions, a as IxoCollaborativeEditorOptions } from './graphql-client-
|
|
2
|
-
export { E as Entity, e as EntityResponse, f as EntityVariables, G as GraphQLClient, j as GraphQLRequest, h as GraphQLResponse, d as IxoCollaborativeUser, c as IxoEditorConfig, b as IxoEditorTheme, g as getEntity, i as ixoGraphQLClient } from './graphql-client-
|
|
1
|
+
import { I as IxoEditorOptions, a as IxoCollaborativeEditorOptions } from './graphql-client-BIr8uzKX.mjs';
|
|
2
|
+
export { E as Entity, e as EntityResponse, f as EntityVariables, G as GraphQLClient, j as GraphQLRequest, h as GraphQLResponse, d as IxoCollaborativeUser, c as IxoEditorConfig, b as IxoEditorTheme, g as getEntity, i as ixoGraphQLClient } from './graphql-client-BIr8uzKX.mjs';
|
|
3
3
|
import * as _blocknote_core from '@blocknote/core';
|
|
4
4
|
import { BlockNoteEditor, InlineContentSchema, StyleSchema, BlockFromConfig, BlockSchemaWithBlock } from '@blocknote/core';
|
|
5
5
|
export { Block, BlockNoteEditor, BlockNoteSchema, DefaultBlockSchema, DefaultInlineContentSchema, DefaultStyleSchema, PartialBlock } from '@blocknote/core';
|
|
@@ -1222,20 +1222,20 @@ interface OverviewBlockSettings {
|
|
|
1222
1222
|
did: string;
|
|
1223
1223
|
}
|
|
1224
1224
|
type OverviewBlockConfig = {
|
|
1225
|
-
type:
|
|
1225
|
+
type: 'overview';
|
|
1226
1226
|
propSchema: {
|
|
1227
1227
|
did: {
|
|
1228
1228
|
default: string;
|
|
1229
1229
|
};
|
|
1230
1230
|
};
|
|
1231
|
-
content:
|
|
1231
|
+
content: 'inline';
|
|
1232
1232
|
};
|
|
1233
1233
|
/**
|
|
1234
1234
|
* Props passed into OverviewBlock's React renderer
|
|
1235
1235
|
*/
|
|
1236
1236
|
type OverviewBlockProps = ReactCustomBlockRenderProps<OverviewBlockConfig, InlineContentSchema, StyleSchema> & {
|
|
1237
1237
|
block: BlockFromConfig<OverviewBlockConfig, InlineContentSchema, StyleSchema>;
|
|
1238
|
-
editor: BlockNoteEditor<BlockSchemaWithBlock<
|
|
1238
|
+
editor: BlockNoteEditor<BlockSchemaWithBlock<'overview', OverviewBlockConfig>, InlineContentSchema, StyleSchema>;
|
|
1239
1239
|
};
|
|
1240
1240
|
/**
|
|
1241
1241
|
* BlockSpec: OverviewBlock groups other blocks inside it
|
package/dist/index.mjs
CHANGED
|
@@ -6,12 +6,12 @@ import {
|
|
|
6
6
|
getExtraSlashMenuItems,
|
|
7
7
|
useCreateCollaborativeIxoEditor,
|
|
8
8
|
useCreateIxoEditor
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GSKWOGSU.mjs";
|
|
10
10
|
import {
|
|
11
11
|
GraphQLClient,
|
|
12
12
|
getEntity,
|
|
13
13
|
ixoGraphQLClient
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2UJGZZWQ.mjs";
|
|
15
15
|
export {
|
|
16
16
|
GraphQLClient,
|
|
17
17
|
IxoEditor,
|
package/dist/mantine/index.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as _blocknote_core from '@blocknote/core';
|
|
2
2
|
import { BlockNoteEditor } from '@blocknote/core';
|
|
3
3
|
export { Block, BlockNoteEditor, BlockNoteSchema, DefaultBlockSchema, DefaultInlineContentSchema, DefaultStyleSchema, PartialBlock } from '@blocknote/core';
|
|
4
|
-
import { I as IxoEditorOptions, a as IxoCollaborativeEditorOptions } from '../graphql-client-
|
|
5
|
-
export { E as Entity, e as EntityResponse, f as EntityVariables, G as GraphQLClient, j as GraphQLRequest, h as GraphQLResponse, d as IxoCollaborativeUser, c as IxoEditorConfig, b as IxoEditorTheme, g as getEntity, i as ixoGraphQLClient } from '../graphql-client-
|
|
4
|
+
import { I as IxoEditorOptions, a as IxoCollaborativeEditorOptions } from '../graphql-client-BIr8uzKX.mjs';
|
|
5
|
+
export { E as Entity, e as EntityResponse, f as EntityVariables, G as GraphQLClient, j as GraphQLRequest, h as GraphQLResponse, d as IxoCollaborativeUser, c as IxoEditorConfig, b as IxoEditorTheme, g as getEntity, i as ixoGraphQLClient } from '../graphql-client-BIr8uzKX.mjs';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import 'matrix-js-sdk';
|
|
8
8
|
|
package/dist/mantine/index.mjs
CHANGED
|
@@ -3,11 +3,16 @@ import {
|
|
|
3
3
|
getEntity,
|
|
4
4
|
ixoGraphQLClient,
|
|
5
5
|
useMatrixProvider
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-2UJGZZWQ.mjs";
|
|
7
7
|
|
|
8
8
|
// src/mantine/hooks/useCreateIxoEditor.ts
|
|
9
9
|
import { useCreateBlockNote } from "@blocknote/react";
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
BlockNoteSchema,
|
|
12
|
+
defaultBlockSpecs,
|
|
13
|
+
defaultInlineContentSpecs,
|
|
14
|
+
defaultStyleSpecs
|
|
15
|
+
} from "@blocknote/core";
|
|
11
16
|
|
|
12
17
|
// src/mantine/blocks/list/ListBlock.tsx
|
|
13
18
|
import React from "react";
|
|
@@ -268,58 +273,73 @@ function useCreateCollaborativeIxoEditor(options) {
|
|
|
268
273
|
user,
|
|
269
274
|
matrixClient
|
|
270
275
|
} = options || {};
|
|
271
|
-
const memoizedUser = useMemo(
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
276
|
+
const memoizedUser = useMemo(
|
|
277
|
+
() => ({
|
|
278
|
+
id: user?.id || "",
|
|
279
|
+
name: user?.name || "",
|
|
280
|
+
color: user?.color || "",
|
|
281
|
+
accessToken: user?.accessToken || ""
|
|
282
|
+
}),
|
|
283
|
+
[user?.id, user?.name, user?.color, user?.accessToken]
|
|
284
|
+
);
|
|
277
285
|
const { matrixProvider, connectionStatus } = useMatrixProvider({
|
|
278
286
|
yDoc,
|
|
279
287
|
matrixClient,
|
|
280
288
|
roomId: options.roomId
|
|
281
289
|
});
|
|
282
|
-
const defaultUploadFile = useMemo(
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
290
|
+
const defaultUploadFile = useMemo(
|
|
291
|
+
() => uploadFile || (async (file) => {
|
|
292
|
+
return new Promise((resolve, reject) => {
|
|
293
|
+
const reader = new FileReader();
|
|
294
|
+
reader.onloadend = () => {
|
|
295
|
+
const dataUrl = reader.result;
|
|
296
|
+
resolve(dataUrl);
|
|
297
|
+
};
|
|
298
|
+
reader.onerror = reject;
|
|
299
|
+
reader.readAsDataURL(file);
|
|
300
|
+
});
|
|
301
|
+
}),
|
|
302
|
+
[uploadFile]
|
|
303
|
+
);
|
|
304
|
+
const schema = useMemo(
|
|
305
|
+
() => BlockNoteSchema2.create({
|
|
306
|
+
blockSpecs: {
|
|
307
|
+
...defaultBlockSpecs2,
|
|
308
|
+
...blockSpecs
|
|
309
|
+
},
|
|
310
|
+
inlineContentSpecs: {
|
|
311
|
+
...defaultInlineContentSpecs2
|
|
312
|
+
},
|
|
313
|
+
styleSpecs: {
|
|
314
|
+
...defaultStyleSpecs2
|
|
315
|
+
}
|
|
316
|
+
}),
|
|
317
|
+
[]
|
|
318
|
+
);
|
|
319
|
+
const collaborationConfig = useMemo(
|
|
320
|
+
() => ({
|
|
321
|
+
provider: matrixProvider,
|
|
322
|
+
fragment: yDoc.getXmlFragment("document"),
|
|
323
|
+
user: {
|
|
324
|
+
name: memoizedUser.name,
|
|
325
|
+
color: memoizedUser.color
|
|
326
|
+
}
|
|
327
|
+
}),
|
|
328
|
+
[matrixProvider, yDoc, memoizedUser.name, memoizedUser.color]
|
|
329
|
+
);
|
|
330
|
+
const ixoConfig = useMemo(
|
|
331
|
+
() => ({
|
|
332
|
+
theme,
|
|
333
|
+
editable,
|
|
334
|
+
sideMenu,
|
|
335
|
+
slashMenu,
|
|
336
|
+
formattingToolbar,
|
|
337
|
+
linkToolbar,
|
|
338
|
+
filePanel,
|
|
339
|
+
tableHandles
|
|
340
|
+
}),
|
|
341
|
+
[theme, editable, sideMenu, slashMenu, formattingToolbar, linkToolbar, filePanel, tableHandles]
|
|
342
|
+
);
|
|
323
343
|
const editor = useCreateBlockNote2({
|
|
324
344
|
schema,
|
|
325
345
|
initialContent,
|
|
@@ -334,10 +354,7 @@ function useCreateCollaborativeIxoEditor(options) {
|
|
|
334
354
|
|
|
335
355
|
// src/mantine/IxoEditor.tsx
|
|
336
356
|
import React3 from "react";
|
|
337
|
-
import {
|
|
338
|
-
getDefaultReactSlashMenuItems,
|
|
339
|
-
SuggestionMenuController
|
|
340
|
-
} from "@blocknote/react";
|
|
357
|
+
import { getDefaultReactSlashMenuItems, SuggestionMenuController } from "@blocknote/react";
|
|
341
358
|
import { BlockNoteView } from "@blocknote/mantine";
|
|
342
359
|
import { filterSuggestionItems } from "@blocknote/core";
|
|
343
360
|
function IxoEditor({
|
|
@@ -360,43 +377,34 @@ function IxoEditor({
|
|
|
360
377
|
filePanel: true,
|
|
361
378
|
tableHandles: true
|
|
362
379
|
};
|
|
363
|
-
return /* @__PURE__ */ React3.createElement(
|
|
364
|
-
|
|
380
|
+
return /* @__PURE__ */ React3.createElement("div", { className: `ixo-editor ixo-editor--theme-${config.theme} ${className}` }, /* @__PURE__ */ React3.createElement(
|
|
381
|
+
BlockNoteView,
|
|
365
382
|
{
|
|
366
|
-
|
|
383
|
+
editor,
|
|
384
|
+
editable: config.editable,
|
|
385
|
+
sideMenu: config.sideMenu,
|
|
386
|
+
slashMenu: false,
|
|
387
|
+
formattingToolbar: config.formattingToolbar,
|
|
388
|
+
linkToolbar: config.linkToolbar,
|
|
389
|
+
filePanel: config.filePanel,
|
|
390
|
+
tableHandles: config.tableHandles,
|
|
391
|
+
theme: config.theme,
|
|
392
|
+
onChange,
|
|
393
|
+
onSelectionChange
|
|
367
394
|
},
|
|
368
|
-
/* @__PURE__ */ React3.createElement(
|
|
369
|
-
|
|
395
|
+
config.slashMenu && /* @__PURE__ */ React3.createElement(
|
|
396
|
+
SuggestionMenuController,
|
|
370
397
|
{
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
linkToolbar: config.linkToolbar,
|
|
377
|
-
filePanel: config.filePanel,
|
|
378
|
-
tableHandles: config.tableHandles,
|
|
379
|
-
theme: config.theme,
|
|
380
|
-
onChange,
|
|
381
|
-
onSelectionChange
|
|
382
|
-
},
|
|
383
|
-
config.slashMenu && /* @__PURE__ */ React3.createElement(
|
|
384
|
-
SuggestionMenuController,
|
|
385
|
-
{
|
|
386
|
-
triggerCharacter: "/",
|
|
387
|
-
getItems: async (query) => {
|
|
388
|
-
const defaultItems = getDefaultReactSlashMenuItems(editor);
|
|
389
|
-
const customItems = getExtraSlashMenuItems(editor);
|
|
390
|
-
return filterSuggestionItems(
|
|
391
|
-
[...defaultItems, ...customItems],
|
|
392
|
-
query
|
|
393
|
-
);
|
|
394
|
-
}
|
|
398
|
+
triggerCharacter: "/",
|
|
399
|
+
getItems: async (query) => {
|
|
400
|
+
const defaultItems = getDefaultReactSlashMenuItems(editor);
|
|
401
|
+
const customItems = getExtraSlashMenuItems(editor);
|
|
402
|
+
return filterSuggestionItems([...defaultItems, ...customItems], query);
|
|
395
403
|
}
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
);
|
|
404
|
+
}
|
|
405
|
+
),
|
|
406
|
+
children
|
|
407
|
+
));
|
|
400
408
|
}
|
|
401
409
|
export {
|
|
402
410
|
GraphQLClient,
|