@ixo/editor 2.11.0 → 2.12.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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mantine/hooks/usePanel.ts","../src/mantine/context/BlocknoteContext.tsx","../src/mantine/blocks/checkbox/CheckboxBlockSpec.tsx","../src/mantine/blocks/checkbox/CheckboxBlock.tsx","../src/mantine/blocks/checkbox/template/TemplateView.tsx","../src/mantine/blocks/checkbox/template/TemplateConfig.tsx","../src/mantine/components/ReusablePanel.tsx","../src/mantine/components/ConditionsTab.tsx","../src/mantine/blocks/utils/conditionUtils.ts","../src/mantine/blocks/components/ConditionBuilder/ConditionBuilderTab.tsx","../src/mantine/blocks/components/ConditionBuilder/ConditionRow.tsx","../src/mantine/blocks/apiRequest/types.ts","../src/mantine/blocks/registry/conditionableProperties.ts","../src/mantine/blocks/components/ConditionBuilder/PropertyValueInput.tsx","../src/mantine/components/Base/BaseTextInput.tsx","../src/mantine/components/Base/BaseSelect.tsx","../src/mantine/components/Base/BaseNumberInput.tsx","../src/mantine/components/Base/BaseContainer.tsx","../src/mantine/components/Base/BaseButton.tsx","../src/mantine/blocks/checkbox/template/GeneralTab.tsx","../src/mantine/components/Base/BaseTextArea.tsx","../src/mantine/components/Layouts/BaseRightPanelLayout.tsx","../src/mantine/utils/iconMap.tsx","../src/mantine/blocks/checkbox/flow/FlowView.tsx","../src/mantine/blocks/hooks/useBlockConditions.ts","../src/mantine/blocks/utils/conditionNormalizer.ts","../src/mantine/blocks/utils/conditionEvaluator.ts","../src/mantine/context/types.ts","../src/mantine/context/hooks/useSharedProposal.ts","../src/mantine/blocks/list/ui/ListBlocksUIContext.tsx","../src/mantine/blocks/list/ListBlockSpec.tsx","../src/mantine/blocks/list/ListBlock.tsx","../src/mantine/blocks/list/template/TemplateView.tsx","../src/mantine/blocks/list/template/TemplateConfig.tsx","../src/mantine/blocks/list/template/GeneralTab.tsx","../src/mantine/blocks/list/linked_resources/config.ts","../src/mantine/blocks/list/assets/config.ts","../src/mantine/blocks/list/transactions/config.ts","../src/mantine/blocks/list/collections/config.ts","../src/mantine/blocks/list/investments/config.ts","../src/mantine/blocks/list/oracles/config.ts","../src/mantine/blocks/list/pods/config.ts","../src/mantine/blocks/list/proposals/config.ts","../src/mantine/blocks/list/requests/config.ts","../src/mantine/blocks/list/members/config.ts","../src/mantine/blocks/list/validators/config.ts","../src/mantine/blocks/list/dao_members/config.ts","../src/mantine/blocks/list/projects/config.ts","../src/mantine/blocks/list/daos/config.ts","../src/mantine/blocks/list/balances/config.ts","../src/mantine/blocks/list/registry.ts","../src/mantine/blocks/list/flow/ListFlowView.tsx","../src/mantine/blocks/list/linked_resources/ResourcesList.tsx","../src/mantine/blocks/list/ListItemContainer.tsx","../src/mantine/blocks/list/ListItemCheckbox.tsx","../src/mantine/blocks/list/assets/AssetsList.tsx","../src/core/lib/formatters.ts","../src/mantine/blocks/list/transactions/TransactionsList.tsx","../src/mantine/blocks/list/collections/CollectionsList.tsx","../src/mantine/blocks/list/balances/BalancesList.tsx","../src/core/utils/numbers.ts","../src/mantine/blocks/list/investments/InvestmentsList.tsx","../src/mantine/blocks/list/oracles/OraclesList.tsx","../src/mantine/blocks/list/pods/PODsList.tsx","../src/mantine/blocks/list/proposals/ProposalsList.tsx","../src/mantine/blocks/list/requests/RequestsList.tsx","../src/mantine/blocks/list/members/MembersList.tsx","../src/mantine/blocks/list/validators/ValidatorsList.tsx","../src/core/lib/validators.ts","../src/mantine/blocks/list/ListActionsMenu.tsx","../src/core/lib/sortListItems.ts","../src/mantine/blocks/list/FilterTab.tsx","../src/core/lib/filterListItems.ts","../src/mantine/blocks/list/ListPagination.tsx","../src/core/constants.ts","../src/mantine/blocks/list/dao_members/MembersList.tsx","../src/mantine/blocks/list/ListSelectionPanel.tsx","../src/mantine/blocks/list/components/SelectionPanelContent.tsx","../src/mantine/blocks/list/projects/ProjectsList.tsx","../src/mantine/blocks/list/daos/DaosList.tsx","../src/core/utils/files.ts","../src/core/utils/links.ts","../src/core/lib/getFullServiceEndpoint.ts","../src/core/lib/categorizeResources.ts","../src/mantine/components/Base/BaseAlert.tsx","../src/mantine/blocks/overview/OverviewBlock.tsx","../src/mantine/blocks/proposal/ProposalBlockSpec.tsx","../src/mantine/blocks/proposal/ProposalBlock.tsx","../src/mantine/blocks/proposal/template/TemplateView.tsx","../src/mantine/blocks/proposal/template/TemplateConfig.tsx","../src/mantine/blocks/proposal/template/GeneralTab.tsx","../src/mantine/components/Base/BaseSection.tsx","../src/mantine/blocks/proposal/template/ActionsTab.tsx","../src/mantine/blocks/proposal/actions-components/ActionsCard.tsx","../src/mantine/blocks/proposal/ActionsPanel.tsx","../src/mantine/blocks/proposal/actions-components/SpendActionForm.tsx","../src/mantine/blocks/proposal/actions-components/UpdateMembersActionForm.tsx","../src/mantine/blocks/proposal/actions-components/StakeActionForm.tsx","../src/mantine/blocks/proposal/actions-components/JoinActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/MintActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/ExecuteActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/CustomActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/AuthzExecActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/AuthzGrantActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/BurnNftActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/TransferNftActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/ManageCw721ActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/InstantiateActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/MigrateActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/UpdateAdminActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/ManageCw20ActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/ManageSubDaosActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/UpdateInfoActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/ManageStorageItemsActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/DaoAdminExecActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/AcceptToMarketplaceActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/CreateEntityActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/UpdateVotingConfigActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/UpdatePreProposeConfigActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/GovernanceVoteActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/WithdrawTokenSwapActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/PerformTokenSwapActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/StakeToGroupActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/SendGroupTokenActionForm.tsx","../src/mantine/blocks/proposal/actions-components/forms/ValidatorActionsActionForm.tsx","../src/mantine/blocks/proposal/registry/actionRegistry.ts","../src/mantine/blocks/proposal/registry/categories.ts","../src/mantine/blocks/proposal/template/VoteTab.tsx","../src/mantine/blocks/proposal/flow/FlowView.tsx","../src/mantine/blocks/proposal/components/OnChainProposalCard.tsx","../src/mantine/blocks/proposal/flow/FlowConfig.tsx","../src/mantine/blocks/proposal/flow/useFlowBusinessLogic.ts","../src/mantine/blocks/proposal/flow/useVoteBusinessLogic.ts","../src/mantine/blocks/proposal/flow/VoteGeneralTab.tsx","../src/mantine/blocks/proposal/flow/ActionsTab.tsx","../src/mantine/components/AuthorizationTab.tsx","../src/mantine/components/GrantPermissionPanel.tsx","../src/mantine/components/EvaluationTab.tsx","../src/mantine/blocks/apiRequest/ApiRequestBlockSpec.tsx","../src/mantine/blocks/apiRequest/ApiRequestBlock.tsx","../src/mantine/blocks/apiRequest/template/TemplateView.tsx","../src/mantine/blocks/apiRequest/template/TemplateConfig.tsx","../src/mantine/blocks/apiRequest/template/GeneralTab.tsx","../src/mantine/components/DataInput/DataInput.tsx","../src/mantine/components/DataInput/BlockPropSelector.tsx","../src/mantine/utils/referenceResolver.ts","../src/mantine/blocks/apiRequest/template/ResponseSchemaTab.tsx","../src/mantine/blocks/apiRequest/flow/FlowView.tsx","../src/core/lib/flowEngine/utils.ts","../src/core/lib/flowEngine/runtime.ts","../src/core/lib/flowEngine/activation.ts","../src/core/lib/flowEngine/capabilityValidation.ts","../src/core/lib/flowEngine/authorization.ts","../src/core/lib/flowEngine/executor.ts","../src/core/lib/delegationStore.ts","../src/core/services/ucanManager.ts","../src/mantine/blocks/dynamicList/DynamicListBlockSpec.tsx","../src/mantine/blocks/dynamicList/DynamicListBlock.tsx","../src/mantine/blocks/dynamicList/DynamicListSelectionPanel.tsx","../src/mantine/blocks/enumChecklist/EnumChecklistBlock.tsx","../src/mantine/blocks/enumChecklist/oracle_personalities/index.tsx","../src/mantine/blocks/enumChecklist/EnumChecklistConfigModal.tsx","../src/mantine/blocks/list/modal/ModalNavigation.tsx","../src/mantine/blocks/enumChecklist/EnumChecklistTypeSelection.tsx","../src/mantine/blocks/enumChecklist/oracle_personalities/config.ts","../src/mantine/blocks/enumChecklist/registry.ts","../src/mantine/blocks/enumChecklist/EnumChecklistPreviewStep.tsx","../src/mantine/blocks/enumChecklist/EnumChecklistConfigurationStep.tsx","../src/mantine/blocks/notify/NotifyBlockSpec.tsx","../src/mantine/blocks/notify/NotifyBlock.tsx","../src/mantine/blocks/notify/template/TemplateView.tsx","../src/mantine/blocks/notify/template/TemplateConfig.tsx","../src/mantine/blocks/notify/template/GeneralTab.tsx","../src/mantine/blocks/notify/flow/FlowView.tsx","../src/mantine/blocks/claim/ClaimBlockSpec.tsx","../src/mantine/blocks/claim/ClaimBlock.tsx","../src/mantine/blocks/claim/template/TemplateView.tsx","../src/mantine/blocks/claim/template/TemplateConfig.tsx","../src/mantine/blocks/claim/template/GeneralTab.tsx","../src/mantine/components/CollectionSelector.tsx","../src/mantine/blocks/claim/flow/FlowView.tsx","../src/mantine/hooks/useCurrentUser.ts","../src/mantine/hooks/useCollections.ts","../src/mantine/blocks/claim/flow/ClaimCollectionsList.tsx","../src/mantine/hooks/useUserRoles.ts","../src/mantine/hooks/utils.ts","../src/mantine/blocks/claim/flow/ClaimsListSheet.tsx","../src/mantine/blocks/claim/flow/theme.ts","../src/mantine/blocks/bid/BidBlockSpec.tsx","../src/mantine/blocks/bid/BidBlock.tsx","../src/mantine/blocks/bid/template/TemplateView.tsx","../src/mantine/blocks/bid/template/TemplateConfig.tsx","../src/mantine/blocks/bid/template/GeneralTab.tsx","../src/mantine/blocks/bid/template/CollectionsTab.tsx","../src/mantine/blocks/bid/flow/components/FlowView.tsx","../src/mantine/blocks/bid/flow/components/ClaimCollectionsList.tsx","../src/mantine/blocks/bid/flow/components/CollectionItem.tsx","../src/mantine/hooks/useBlockAuthorization.ts","../src/mantine/blocks/bid/flow/components/BidSurveyPanel.tsx","../src/mantine/blocks/bid/flow/hooks/useBidSurvey.ts","../src/mantine/blocks/bid/flow/constants.ts","../src/mantine/blocks/bid/flow/components/BidsList.tsx","../src/mantine/blocks/bid/flow/components/BidItem.tsx","../src/mantine/blocks/bid/flow/components/BidViewPanel.tsx","../src/mantine/blocks/bid/flow/hooks/useBidView.ts","../src/mantine/blocks/bid/flow/utils.ts","../src/mantine/blocks/bid/flow/hooks/useBidActions.ts","../src/mantine/hooks/useUserProfile.ts","../src/mantine/blocks/bid/flow/hooks/useBids.ts","../src/icons/UserCheck.tsx","../src/icons/UserPlus.tsx","../src/mantine/blocks/evaluator/EvaluatorBlock.tsx","../src/mantine/blocks/evaluator/template/TemplateView.tsx","../src/mantine/blocks/evaluator/template/TemplateConfig.tsx","../src/mantine/blocks/evaluator/template/GeneralTab.tsx","../src/mantine/blocks/evaluator/flow/FlowView.tsx","../src/mantine/blocks/evaluator/flow/ClaimCollectionsList.tsx","../src/mantine/blocks/evaluator/flow/ClaimsList.tsx","../src/mantine/blocks/evaluator/flow/theme.ts","../src/mantine/blocks/evaluator/EvaluatorBlockSpec.tsx","../src/mantine/blocks/visualization/VisualizationBlockSpec.tsx","../src/mantine/blocks/visualization/VisualizationBlock.tsx","../src/mantine/blocks/domainCreator/DomainCreatorBlockSpec.tsx","../src/mantine/blocks/domainCreator/DomainCreatorBlock.tsx","../src/mantine/blocks/domainCreator/template/TemplateView.tsx","../src/mantine/blocks/domainCreator/template/TemplateConfig.tsx","../src/mantine/blocks/domainCreator/template/GeneralTab.tsx","../src/mantine/blocks/domainCreator/flow/FlowView.tsx","../src/mantine/blocks/domainCreator/flow/DomainCreatorSurveyPanel.tsx","../src/mantine/blocks/domainCreator/flow/tempDomainCreatorSurvey.ts","../src/mantine/blocks/domainCreator/utils/transformSurveyToCredentialSubject.ts","../src/mantine/blocks/domainCreator/utils/buildVerifiableCredential.ts","../src/mantine/blocks/domainCreator/utils/extractSurveyAnswersTemplate.ts","../src/mantine/blocks/registry/blockRegistry.ts","../src/mantine/blocks/hooks/useBlockDependencies.ts","../src/mantine/blocks/hooks/useDependsOn.ts","../src/mantine/blocks/index.ts","../src/mantine/hooks/useCreateIxoEditor.ts","../src/mantine/hooks/useCollaborativeIxoEditor.ts","../src/core/hooks/useMatrixProvider.ts","../src/mantine/hooks/useCollaborativeYDoc.ts","../src/core/lib/matrixMetadata.ts","../src/mantine/components/CoverImage.tsx","../src/core/lib/imageTransform.ts","../src/mantine/components/PageHeader.tsx","../src/mantine/components/ExternalDropZone.tsx","../src/mantine/IxoEditor.tsx","../src/mantine/components/PanelContent.tsx","../src/mantine/components/EntitySigningSetup.tsx","../src/mantine/components/FlowPermissionsPanel.tsx","../src/mantine/components/GrantPermissionModal.tsx","../src/core/lib/graphql-client.ts","../src/core/lib/graphql-queries.ts"],"sourcesContent":["import { useCallback, useMemo, useEffect, useRef } from 'react';\nimport { create } from 'zustand';\n\ninterface PanelState {\n activePanel: string | null;\n registeredPanels: Map<string, React.ReactNode>;\n setActivePanel: (panelId: string | null) => void;\n closePanel: () => void;\n registerPanel: (id: string, content: React.ReactNode) => void;\n unregisterPanel: (id: string) => void;\n}\n\nexport const usePanelStore = create<PanelState>((set) => ({\n activePanel: null,\n registeredPanels: new Map(),\n setActivePanel: (panelId) => set({ activePanel: panelId }),\n closePanel: () => set({ activePanel: null }),\n registerPanel: (id, content) =>\n set((state) => {\n const newPanels = new Map(state.registeredPanels);\n newPanels.set(id, content);\n return { registeredPanels: newPanels };\n }),\n unregisterPanel: (id) =>\n set((state) => {\n const newPanels = new Map(state.registeredPanels);\n newPanels.delete(id);\n return { registeredPanels: newPanels };\n }),\n}));\n\nexport const usePanel = (panelId: string, content: React.ReactNode) => {\n const activePanel = usePanelStore((state) => state.activePanel);\n const setActivePanel = usePanelStore((state) => state.setActivePanel);\n const closePanel = usePanelStore((state) => state.closePanel);\n\n const isOpen = useMemo(() => activePanel === panelId, [activePanel, panelId]);\n\n // Use ref to always have latest content without triggering re-registration\n const contentRef = useRef(content);\n useEffect(() => {\n contentRef.current = content;\n });\n\n // Register panel on mount, unregister on unmount\n useEffect(() => {\n const { registerPanel, unregisterPanel } = usePanelStore.getState();\n registerPanel(panelId, contentRef.current);\n return () => {\n unregisterPanel(panelId);\n };\n }, [panelId]);\n\n // Update content when it changes - defer to avoid state updates during render\n useEffect(() => {\n // Use queueMicrotask to defer the store update outside of React's render cycle\n // This prevents \"Cannot update a component while rendering\" warnings\n queueMicrotask(() => {\n const { registerPanel } = usePanelStore.getState();\n registerPanel(panelId, content);\n });\n }, [content, panelId]);\n\n const open = useCallback(() => {\n setActivePanel(panelId);\n }, [panelId, setActivePanel]);\n\n const close = useCallback(() => {\n closePanel();\n }, [closePanel]);\n\n return { opened: isOpen, open, close };\n};\n","import React, { createContext, useContext, useState, useCallback, useRef, useEffect } from 'react';\nimport type { IxoEditorType } from '../../core/types';\nimport { ProposalAction, SharedProposalData } from './types';\nimport { SelectionActionSection } from '../blocks/list/types';\nimport { IResourceSet } from '@/core/lib/categorizeResources';\n\nexport type Addr = string;\nexport type Uint128 = string;\nexport type Timestamp = string;\n\nexport interface Coin {\n denom: string;\n amount: string;\n}\n\nexport type Expiration = { at_height: number } | { at_time: Timestamp } | { never: {} };\n\nexport type Status = 'open' | 'rejected' | 'passed' | 'executed' | 'closed' | 'execution_failed' | 'veto_timelock';\n\nexport interface Threshold {\n absolute_count?: { weight: Uint128 };\n absolute_percentage?: { percentage: string };\n threshold_quorum?: { threshold: string; quorum: string };\n}\nexport interface Votes {\n yes: Uint128;\n no: Uint128;\n abstain: Uint128;\n}\nexport interface CosmosMsgForEmpty {\n [key: string]: any;\n}\nexport interface SingleChoiceProposal {\n allow_revoting: boolean;\n description: string;\n expiration: Expiration;\n min_voting_period?: Expiration | null;\n msgs: CosmosMsgForEmpty[];\n proposer: Addr;\n start_height: number;\n status: Status;\n threshold: Threshold;\n title: string;\n total_power: Uint128;\n votes: Votes;\n}\nexport interface ProposalResponse {\n id: number;\n proposal: SingleChoiceProposal;\n}\nexport type Vote = 'yes' | 'no' | 'abstain' | 'no_with_veto';\nexport interface VoteInfo {\n power: Uint128;\n rationale?: string | null;\n vote: Vote;\n voter: Addr;\n}\nexport interface VoteResponse {\n vote?: VoteInfo | null;\n}\nexport interface User {\n address: string;\n}\n\nexport type IUserMatrixProfile = {\n walletAddress: string;\n displayname: string;\n avatarUrl: string | null;\n did: string;\n verified?: boolean;\n};\n\n// Entity and list data types\nexport interface LinkedResource {\n id: string;\n type: string;\n proof: string;\n right: string;\n encrypted: string;\n mediaType: string;\n description: string;\n serviceEndpoint: string;\n}\n\nexport interface FormattedResource {\n format: keyof IResourceSet | undefined;\n id: string;\n link: string;\n type: string;\n description: string;\n access?: boolean;\n}\n\nexport interface Service {\n id: string;\n type: string;\n serviceEndpoint: string;\n}\nexport interface GQLLinkedResource {\n id: string;\n type: string;\n description: string;\n mediaType: string;\n serviceEndpoint: string;\n proof: string;\n encrypted: string;\n right: string;\n}\nexport interface EntityNode {\n id: string;\n type: string;\n startDate?: string;\n endDate?: string;\n status: number;\n relayerNode: string;\n credentials?: string[];\n entityVerified: boolean;\n metadata: any;\n accounts: any;\n externalId?: string;\n owner?: string;\n context: any;\n controller: string[];\n verificationMethod: any;\n service: Service[];\n authentication: string[];\n assertionMethod: string[];\n keyAgreement: string[];\n capabilityInvocation: string[];\n capabilityDelegation: string[];\n linkedResource: LinkedResource[];\n linkedClaim: any;\n accordedRight: any;\n linkedEntity: any;\n alsoKnownAs: string;\n settings: any;\n profile?: {\n name?: string;\n [key: string]: any;\n };\n iidById: {\n id: string;\n linkedResource: GQLLinkedResource[];\n };\n}\nexport interface EntityResponse {\n id: string;\n context: string;\n relayerNode: string;\n controller: string;\n type: string;\n startDate: string;\n endDate: string;\n metadata: string;\n linkedResource: LinkedResource[];\n settings: Record<string, LinkedResource>;\n service: Service[];\n externalId: string;\n}\nexport interface Asset {\n did: string;\n alsoKnownAs: string;\n name: string;\n icon: string;\n issuer: string;\n owned: boolean;\n price: number;\n available: boolean;\n currency: string;\n description?: string;\n}\n// Converted example object shapes into proper interfaces\nexport interface POD {\n did: string;\n name: string;\n icon: string;\n members: number;\n isMember: boolean;\n totalProposals: number;\n startDate: string;\n endDate: string;\n description?: string;\n}\nexport interface Request {\n did: string;\n name: string;\n icon: string;\n budget: number;\n isMember: boolean;\n currency: string;\n brand: string;\n totalApplications: number;\n description?: string;\n}\nexport interface Project {\n did: string;\n name: string;\n icon: string;\n description?: string;\n}\nexport interface Dao {\n did: string;\n name: string;\n icon: string;\n description?: string;\n}\n\nexport interface Balance {\n denom: string;\n tokenName: string;\n chainCount: number;\n tokenImage: string;\n amount: number;\n usdAmount: number;\n isCoin: boolean;\n isShare: boolean;\n isCredit: boolean;\n}\nexport interface Oracle {\n did: string;\n name: string;\n icon: string;\n isActive: boolean;\n isInvited: boolean;\n minPoints: number;\n maxPoints: number;\n currency: string;\n brand: string;\n flowsAmount: number;\n description?: string;\n}\nexport interface Proposal {\n did: string;\n name: string;\n icon: string;\n description: string;\n isVotedOn: boolean;\n vote: string | null;\n status: string;\n}\nexport interface Member {\n did: string;\n username: string;\n address: string;\n icon: string;\n percentage: string;\n role: string;\n description?: string;\n}\nexport interface Validator {\n did: string;\n name: string;\n description: string;\n icon: string;\n amount: number;\n currency: string;\n commission: number;\n isStaked: boolean;\n isBonding: boolean;\n isActive: boolean;\n}\nexport interface Investment {\n did: string;\n name: string;\n icon: string;\n brand: string;\n isSubscribed: boolean;\n isOpen: boolean;\n currency: string;\n currentAmount: number;\n maxAmount: number;\n status: string;\n price: number;\n description?: string;\n}\nexport interface Collection {\n did: string;\n name: string;\n brand: string;\n icon: string;\n price: number;\n currency: string;\n totalAssets: number;\n description?: string;\n}\nexport interface Transaction {\n transactionHash: string;\n typeUrl: string;\n memo: string;\n time: string;\n description?: string;\n}\n\nexport interface Bid {\n id: string;\n did: string;\n collection: string;\n type: 'bid';\n address: string;\n data: string;\n role: string;\n created: string;\n}\n\nexport interface SubmitBidParams {\n collectionId: string;\n role: EAAgentRoles;\n surveyAnswers: any;\n}\n\nexport interface QueryBidsParams {\n collectionId: string;\n pagination?: {\n nextPageToken?: string;\n };\n}\n\nexport interface QueryBidsByDidParams {\n collectionId: string;\n did: string;\n}\n\nexport interface ApproveBidParams {\n bidId: string;\n collectionId: string;\n did: string;\n}\n\nexport interface RejectBidParams {\n bidId: string;\n collectionId: string;\n did: string;\n reason: string;\n}\n\nexport interface BidResponse {\n success: boolean;\n bidId: string;\n}\n\nexport interface QueryBidsResponse {\n data: Bid[];\n nextPageToken?: string;\n}\n\nexport type CollectionRole = 'owner' | 'service_agent' | 'evaluation_agent' | null;\n\nexport enum EAAgentRoles {\n owners = 'PO',\n evaluators = 'EA',\n serviceProviders = 'SA',\n investors = 'IA',\n}\n\nexport enum AgentRole {\n Owner = 'PO', // Collection Controller\n Evaluator = 'EA', // Evaluator\n ServiceProvider = 'SA', // Contributor/Service Agent\n Investor = 'IA', // Investor\n}\n\nexport type CheckUserRoleParams = {\n /** Address to check role for */\n userAddress: string;\n /** Admin account address of the entity */\n adminAddress: string;\n /** Deed DID */\n deedDid: string;\n /** Claim collection IDs to check roles for */\n collectionIds: string[];\n};\n\nexport type ClaimCollectionRole = {\n collectionId: string;\n role: AgentRole;\n};\n\nexport type ClaimCollection = {\n id: string;\n name: string;\n description: string;\n entity: string;\n protocol: EntityNode | null;\n admin: string;\n};\n\nexport type ClaimCollectionResponse = {\n adminAddress: string;\n collections: ClaimCollection[];\n};\n\nexport type Claim = {\n claimId: string;\n collectionId: string;\n agentDid: string;\n agentAddress: string;\n submissionDate: string;\n paymentsStatus: {\n approval: string;\n rejection: string;\n evaluation: string;\n submission: string;\n };\n schemaType: string | null;\n};\n\nexport interface GetClaimsPerCollectionIdParams {\n collectionId: string;\n}\n\nexport interface GetClaimsPerUserAddressParams {\n collectionId: string;\n userAddress: string;\n}\n\n// Domain Card types\nexport interface FAQItem {\n question: string;\n answer: string;\n}\n\nexport interface ContactInfo {\n email: string;\n location: string;\n socialLinks: string[];\n website: string;\n}\n\nexport interface Relationships {\n funders?: string[];\n memberOf?: string[];\n partners?: string[];\n}\n\nexport interface LogoUrl {\n alt: string;\n url: string;\n}\n\nexport interface AdditionalProperties {\n content_hashes?: Record<string, string>;\n content_summaries?: Record<string, string>;\n fetch_errors?: Array<{ error: string; url: string }>;\n last_fetch_date?: string;\n}\n\nexport interface Coordinates {\n type: string;\n coordinates: [number, number];\n}\n\nexport interface DomainCard {\n additional_properties?: AdditionalProperties;\n address?: string;\n alternate_names?: string[];\n area_served?: string;\n categories?: string[];\n contact?: ContactInfo;\n coordinates?: Coordinates;\n credential_type?: string[];\n description?: string;\n entity_type?: string[];\n faq?: FAQItem[];\n id: string;\n image_urls?: Array<Record<string, any>>;\n indexed_at?: string;\n issuer?: string;\n keywords?: string[];\n knows_about?: string[];\n location?: string;\n logo_url?: LogoUrl;\n name: string;\n overview?: string;\n relationships?: Relationships;\n same_as?: string[];\n schema_id?: string;\n summary?: string;\n updated_at?: string;\n url?: string;\n valid_from?: string;\n}\n\n// Extended detail interfaces with actionSections for selection panel\nexport interface AssetDetails extends Asset {\n actionSections: SelectionActionSection[];\n}\n\nexport interface CollectionDetails extends Collection {\n actionSections: SelectionActionSection[];\n}\n\nexport interface TransactionDetails extends Transaction {\n actionSections: SelectionActionSection[];\n}\n\nexport interface InvestmentDetails extends Investment {\n actionSections: SelectionActionSection[];\n}\n\nexport interface OracleDetails extends Oracle {\n actionSections: SelectionActionSection[];\n}\n\nexport interface PODDetails extends POD {\n actionSections: SelectionActionSection[];\n}\n\nexport interface ProposalDetails extends Proposal {\n actionSections: SelectionActionSection[];\n}\n\nexport interface RequestDetails extends Request {\n actionSections: SelectionActionSection[];\n}\n\nexport interface MemberDetails extends Member {\n actionSections: SelectionActionSection[];\n}\n\nexport interface ValidatorDetails extends Validator {\n actionSections: SelectionActionSection[];\n}\n\nexport interface LinkedResourceDetails extends LinkedResource {\n actionSections: SelectionActionSection[];\n}\n\nexport interface DAOGroup {\n id: string;\n name: string;\n coreAddress: string;\n}\n\nexport interface BlockRequirements {\n proposal?: {\n coreAddress: string;\n };\n}\nexport interface VoteParams {\n proposalId: number;\n rationale?: string;\n vote: Vote;\n proposalContractAddress: string;\n}\nexport interface CreateProposalParams {\n preProposalContractAddress: string;\n title: string;\n description: string;\n actions?: ProposalAction[];\n coreAddress?: string;\n groupContractAddress?: string;\n}\n\n// Bird notification types\nexport type NotificationChannel = 'email' | 'sms' | 'whatsapp' | 'rcs';\n\nexport interface EmailNotificationParams {\n channel: 'email';\n to: string[];\n cc?: string[];\n bcc?: string[];\n subject: string;\n body: string;\n bodyType?: 'text' | 'html';\n from?: string;\n replyTo?: string;\n}\n\nexport interface SmsNotificationParams {\n channel: 'sms';\n to: string[];\n body: string;\n}\n\nexport interface WhatsAppNotificationParams {\n channel: 'whatsapp';\n to: string[];\n body: string;\n templateId?: string;\n templateVariables?: Record<string, string>;\n}\n\nexport type NotificationParams = EmailNotificationParams | SmsNotificationParams | WhatsAppNotificationParams;\n\nexport interface NotificationResponse {\n messageId: string;\n status: 'accepted' | 'rejected';\n timestamp: string;\n}\n\nexport interface BlocknoteHandlers {\n getVote: (proposalContractAddress: string, proposalId: string, userAddress: string) => Promise<VoteResponse>;\n getProposal: (proposalContractAddress: string, proposalId: string) => Promise<ProposalResponse>;\n getCurrentUser: () => User;\n getMatrixInfoPerDid: (did: string) => Promise<IUserMatrixProfile>;\n getDaoGroupsIds: () => Promise<string[] | undefined>;\n getDAOGroups: () => Promise<DAOGroup[]>;\n getRelayerDid: () => string | undefined;\n getEntityDid: () => string | undefined;\n vote: ({ proposalId, rationale, vote, proposalContractAddress }: VoteParams) => Promise<void>;\n createProposal: (params: CreateProposalParams) => Promise<string>;\n // Entity handlers\n getEntity: (did: string) => Promise<EntityResponse>;\n getDomainCard: () => Promise<DomainCard>;\n // AI handlers\n askCompanion: (prompt: string) => Promise<void>;\n // Lists data handlers\n getAssets: (collectionDid: string, page: number, ownerAddress?: string) => Promise<{ data: Asset[]; totalCount: number }>;\n getCollections: (relayerDid: string, page: number) => Promise<{ data: Collection[]; totalCount: number }>;\n getTransactions: (address: string, page: number) => Promise<{ data: Transaction[]; totalCount: number }>;\n getInvestments: (relayerDid: string, page: number) => Promise<{ data: Investment[]; totalCount: number }>;\n getOracles: (relayerDid: string, page: number) => Promise<{ data: Oracle[]; totalCount: number }>;\n getPODs: (relayerDid: string, page: number) => Promise<{ data: POD[]; totalCount: number }>;\n getProposals: (relayerDid: string, page: number) => Promise<{ data: Proposal[]; totalCount: number }>;\n getRequests: (relayerDid: string, page: number) => Promise<{ data: Request[]; totalCount: number }>;\n getDaos: (relayerDid: string, page: number) => Promise<{ data: Dao[]; totalCount: number }>;\n getProjects: (relayerDid: string, page: number) => Promise<{ data: Project[]; totalCount: number }>;\n getMembers: (address: string, groupCoreAddress: string, withBalance: boolean, page: number) => Promise<{ data: Member[]; totalCount: number }>;\n getDaoMembers: (address: string, groupIds: string[], withBalance: boolean, page: number) => Promise<{ data: Member[]; totalCount: number }>;\n getValidators: (relayerDid: string, page: number) => Promise<{ data: Validator[]; totalCount: number }>;\n executeProposal: (params: { proposalId: number; proposalContractAddress: string }) => Promise<void>;\n getProposalContractAddress: (params: { coreAddress: string }) => Promise<{ proposalContractAddress: string }>;\n getPreProposalContractAddress: (params: { coreAddress: string }) => Promise<{ preProposalContractAddress: string }>;\n getGroupContractAddress: (params: { coreAddress: string }) => Promise<{ groupContractAddress: string }>;\n getBalances: (address: string) => Promise<{ data: Balance[] }>;\n // Bird notification handler\n sendNotification: (params: NotificationParams) => Promise<NotificationResponse>;\n // Detail handlers for selection panel\n getAssetDetails?: (id: string) => Promise<AssetDetails>;\n getCollectionDetails?: (id: string) => Promise<CollectionDetails>;\n getTransactionDetails?: (id: string) => Promise<TransactionDetails>;\n getInvestmentDetails?: (id: string) => Promise<InvestmentDetails>;\n getOracleDetails?: (id: string) => Promise<OracleDetails>;\n getPODDetails?: (id: string) => Promise<PODDetails>;\n getProposalDetails?: (id: string) => Promise<ProposalDetails>;\n getRequestDetails?: (id: string) => Promise<RequestDetails>;\n getMemberDetails?: (id: string) => Promise<MemberDetails>;\n getValidatorDetails?: (id: string) => Promise<ValidatorDetails>;\n getLinkedResourceDetails?: (id: string) => Promise<LinkedResourceDetails>;\n getDaoMemberDetails?: (id: string) => Promise<MemberDetails>;\n // Claim handlers\n getDeedSurveyTemplate: (deedDid: string) => Promise<{ surveyTemplate: any; claimCollectionId: string } | null>;\n submitClaim: (params: { surveyData: any; deedDid: string; collectionId: string; adminAddress: string; pin: string }) => Promise<{\n transactionHash: string;\n claimId: string;\n }>;\n requestPin: (config?: { title?: string; description?: string; submitText?: string }) => Promise<string>;\n getClaimCollections: (params: { deedDid: string }) => Promise<ClaimCollectionResponse>;\n getClaimsPerCollectionId: (params: GetClaimsPerCollectionIdParams) => Promise<Claim[]>;\n getClaimsPerUserAddress: (params: GetClaimsPerUserAddressParams) => Promise<Claim[]>;\n getClaimData: (collectionId: string, claimId: string) => Promise<any>;\n evaluateClaim: (\n granteeAddress: string,\n did: string,\n payload: {\n claimId: string;\n collectionId: string;\n adminAddress: string;\n status?: number;\n verificationProof: string;\n amount?: Coin;\n }\n ) => Promise<void>;\n // Bid handlers\n submitBid: (params: SubmitBidParams) => Promise<BidResponse>;\n queryBids: (params: QueryBidsParams) => Promise<QueryBidsResponse>;\n queryBidsByDid: (params: QueryBidsByDidParams) => Promise<{ data: Bid[] }>;\n approveBid: (params: ApproveBidParams) => Promise<BidResponse>;\n rejectBid: (params: RejectBidParams) => Promise<BidResponse>;\n getUserRoles: (params: CheckUserRoleParams) => Promise<ClaimCollectionRole[]>;\n getBidContributorSurveyTemplate: (deedId: string) => Promise<{ surveyTemplate: any } | null>;\n getBidEvaluatorSurveyTemplate: (deedId: string) => Promise<{ surveyTemplate: any } | null>;\n approveServiceAgentApplication: (params: { adminAddress: string; collectionId: string; agentQuota: number; deedDid: string; currentUserAddress: string }) => Promise<void>;\n approveEvaluatorApplication: (params: {\n adminAddress: string;\n collectionId: string;\n deedDid: string;\n evaluatorAddress: string;\n agentQuota?: number;\n claimIds?: string[];\n maxAmounts?: Coin[];\n }) => Promise<void>;\n publicFileUpload: (file: File) => Promise<{\n encrypted: string;\n cid: string;\n proof: string;\n serviceEndpoint: string;\n url: string;\n mxc: string;\n }>;\n\n // === ENTITY SIGNING HANDLERS ===\n\n /**\n * Check if entity has signing key set up\n */\n checkEntitySigningSetup?: (entityDid: string) => Promise<{\n hasSigningKey: boolean;\n keyId?: string;\n }>;\n\n /**\n * Set up entity signing (generates mnemonic, adds verification method)\n * Requires wallet signature\n */\n setupEntitySigning?: (params: { entityDid: string; entityRoomId: string; pin: string }) => Promise<{\n transactionHash: string;\n keyId: string;\n }>;\n\n /**\n * Check if current user has signing key set up\n */\n checkUserSigningSetup?: () => Promise<{\n hasSigningKey: boolean;\n keyId?: string;\n }>;\n\n // === CAPABILITY SIGNING HANDLERS ===\n\n /**\n * Sign a capability delegation\n */\n signCapability?: (params: {\n /** DID of issuer (entity or user) */\n issuerDid: string;\n /** Whether signing as entity or user */\n issuerType: 'entity' | 'user';\n /** Entity room ID (required if issuerType is 'entity') */\n entityRoomId?: string;\n /** DID of recipient */\n audience: string;\n /** Capabilities to grant */\n capabilities: Array<{\n can: string;\n with: string;\n nb?: Record<string, any>;\n }>;\n /** IDs of parent capabilities (proofs) */\n proofs?: string[];\n /** Expiration timestamp */\n expiration?: number;\n /** PIN to decrypt signing mnemonic */\n pin: string;\n }) => Promise<{\n id: string;\n raw: string;\n signature: string;\n }>;\n\n /**\n * Verify a capability signature against issuer's DID document\n */\n verifyCapabilitySignature?: (params: {\n /** Raw capability JSON */\n capabilityRaw: string;\n /** Expected issuer DID */\n issuerDid: string;\n }) => Promise<{\n valid: boolean;\n error?: string;\n }>;\n\n // === USER/ORACLE LOOKUP HANDLERS ===\n\n /**\n * Search for users by name or DID\n */\n searchUsers?: (query: string) => Promise<\n Array<{\n did: string;\n displayName: string;\n avatarUrl?: string;\n address?: string;\n }>\n >;\n\n /**\n * Get registered oracles for an entity\n */\n getRegisteredOracles?: (entityDid: string) => Promise<\n Array<{\n did: string;\n name: string;\n description?: string;\n capabilities?: string[];\n }>\n >;\n\n /**\n * Get entity info including room ID\n */\n getEntityInfo?: (entityDid: string) => Promise<{\n did: string;\n name: string;\n roomId: string;\n adminAddress: string;\n controllerDid: string;\n }>;\n\n // === DOMAIN CREATION HANDLERS ===\n\n /**\n * Sign a Verifiable Credential using entity or user key.\n * Creates a DataIntegrityProof using eddsa-rdfc-2022 cryptosuite.\n */\n signCredential?: (params: {\n /** DID of issuer (entity or user) */\n issuerDid: string;\n /** Whether signing as entity or user */\n issuerType: 'entity' | 'user';\n /** Entity room ID (required if issuerType is 'entity') */\n entityRoomId?: string;\n /** The unsigned credential to sign */\n credential: {\n '@context': any;\n id: string;\n type: string[];\n issuer: { id: string };\n validFrom: string;\n validUntil: string;\n credentialSchema: { id: string; type: string };\n credentialSubject: any;\n };\n /** PIN to decrypt signing mnemonic */\n pin: string;\n }) => Promise<{\n /** The signed credential with proof attached */\n signedCredential: {\n '@context': any;\n id: string;\n type: string[];\n issuer: { id: string };\n validFrom: string;\n validUntil: string;\n credentialSchema: { id: string; type: string };\n credentialSubject: any;\n proof: {\n type: 'DataIntegrityProof';\n created: string;\n verificationMethod: string;\n cryptosuite: 'eddsa-rdfc-2022';\n proofPurpose: 'assertionMethod';\n proofValue: string;\n };\n };\n }>;\n\n /**\n * Redirect to entity overview page\n */\n redirectToEntityOverview?: (did: string, type: string) => void;\n\n /**\n * Create a new domain entity with the provided linked resources.\n * This is called after the domain card credential has been uploaded.\n */\n createDomain?: (params: {\n /** Entity type from survey (e.g., 'dao', 'protocol') */\n entityType: string;\n /** Linked resources to attach to the entity (includes domain card) */\n linkedResource: Array<{\n id: string;\n type: string;\n proof: string;\n right: string;\n encrypted: string;\n mediaType: string;\n description: string;\n serviceEndpoint: string;\n }>;\n /** Start date for the entity (from validFrom) */\n startDate?: string;\n /** End date for the entity (from validUntil) */\n endDate?: string;\n }) => Promise<{\n /** The DID of the newly created entity */\n entityDid: string;\n /** Transaction hash */\n transactionHash: string;\n }>;\n}\nexport type DocType = 'template' | 'page' | 'flow';\n\n/**\n * Visualization renderer type for AG-UI integration.\n * This function is called by visualization blocks to render the actual AG-UI component.\n * @param vizType - The type of visualization (e.g., 'lineChart', 'barChart', 'dataTable', etc.)\n * @param config - The configuration object for the visualization\n * @param preferences - Optional user customizations (e.g., { pageSize: 25 }) persisted to the block\n * @param onPreferencesChange - Optional callback to update preferences (persists via CRDT)\n * @returns React node with the rendered visualization, or null if type is not supported\n */\nexport type VisualizationRenderer = (vizType: string, config: object, preferences?: object, onPreferencesChange?: (prefs: object) => void) => React.ReactNode | null;\n\n/**\n * Dynamic list data returned by the data provider\n */\nexport interface DynamicListData {\n items: any[] | null;\n loading: boolean;\n error: string | null;\n}\n\n/**\n * Function type for getting dynamic list data from context\n */\nexport type DynamicListDataProvider = (listId: string) => DynamicListData;\n\n/**\n * Dynamic list column definition (imported from types for context)\n */\nexport interface DynamicListColumn {\n key: string;\n label: string;\n position?: 'topLeft' | 'bottomLeft' | 'topRight' | 'bottomRight';\n type?: 'string' | 'number' | 'date';\n color?: string;\n}\n\n/**\n * DataSource for dynamic lists\n */\nexport interface DataSource {\n oracleDid: string;\n oracleName?: string;\n query: string;\n toolName?: string;\n params?: Record<string, any>;\n description?: string;\n}\n\n/**\n * Action that can be performed on a dynamic list item\n */\nexport interface DynamicListAction {\n id: string;\n label: string;\n color?: string;\n}\n\n/**\n * Panel renderer type for dynamic list selection panel.\n * This function is called when an item is selected in a dynamic list.\n * If provided, renders custom content. If not provided, shows default key-value view.\n * @param item - The selected item data\n * @param columns - Column definitions from the dynamic list\n * @param dataSource - Data source info (oracle, query, etc.)\n * @returns React node with custom panel content, or null to use default\n */\nexport type DynamicListPanelRenderer = (\n item: any,\n columns: DynamicListColumn[],\n dataSource: DataSource | null,\n panelDescription?: string,\n actions?: DynamicListAction[],\n onClose?: () => void\n) => React.ReactNode | null;\n\nexport interface BlocknoteContextValue {\n editor?: IxoEditorType;\n handlers?: BlocknoteHandlers;\n blockRequirements?: BlockRequirements;\n editable?: boolean;\n docType: DocType;\n sharedProposals: SharedProposalData;\n fetchSharedProposal: (proposalId: string, contractAddress: string, force?: boolean) => Promise<ProposalResponse>;\n invalidateProposal: (proposalId: string) => void;\n subscribeToProposal: (proposalId: string) => ProposalResponse | undefined;\n activeDrawerId: string | null;\n drawerContent: React.ReactNode | null;\n openDrawer: (id: string, content: React.ReactNode) => void;\n closeDrawer: () => void;\n visualizationRenderer?: VisualizationRenderer;\n getDynamicListData?: DynamicListDataProvider;\n dynamicListPanelRenderer?: DynamicListPanelRenderer;\n}\n\nconst BlocknoteContext = createContext<BlocknoteContextValue>({\n docType: 'flow',\n sharedProposals: {},\n fetchSharedProposal: async () => {\n throw new Error('BlocknoteContext not initialized');\n },\n invalidateProposal: () => {\n throw new Error('BlocknoteContext not initialized');\n },\n subscribeToProposal: () => undefined,\n activeDrawerId: null,\n drawerContent: null,\n openDrawer: () => {\n throw new Error('BlocknoteContext not initialized');\n },\n closeDrawer: () => {\n throw new Error('BlocknoteContext not initialized');\n },\n});\n\nexport const BlocknoteProvider: React.FC<{\n children: React.ReactNode;\n editor?: IxoEditorType;\n handlers?: BlocknoteHandlers;\n blockRequirements?: BlockRequirements;\n editable?: boolean;\n visualizationRenderer?: VisualizationRenderer;\n getDynamicListData?: DynamicListDataProvider;\n dynamicListPanelRenderer?: DynamicListPanelRenderer;\n}> = ({ children, editor, handlers, blockRequirements, editable, visualizationRenderer, getDynamicListData, dynamicListPanelRenderer }) => {\n const [sharedProposals, setSharedProposals] = useState<SharedProposalData>({});\n const sharedProposalsRef = useRef<SharedProposalData>({});\n const [activeDrawerId, setActiveDrawerId] = useState<string | null>(null);\n const [drawerContent, setDrawerContent] = useState<React.ReactNode | null>(null);\n\n // Get document type directly from editor prop (not from CRDT)\n const docType = (editor?.docType as DocType) || 'flow';\n\n // Keep ref in sync with state\n useEffect(() => {\n sharedProposalsRef.current = sharedProposals;\n }, [sharedProposals]);\n\n const fetchSharedProposal = useCallback(\n async (proposalId: string, contractAddress: string, force = false): Promise<ProposalResponse> => {\n const cacheKey = `${contractAddress}:${proposalId}`;\n\n // Check cache using ref to get current value\n const cached = sharedProposalsRef.current[cacheKey];\n if (!force && cached && Date.now() - cached.lastFetched < 30000 && !cached.error) {\n return cached.proposal as ProposalResponse;\n }\n\n // Set loading state\n setSharedProposals((prev) => ({\n ...prev,\n [cacheKey]: { ...prev[cacheKey], loading: true },\n }));\n\n try {\n if (!handlers) {\n throw new Error('BlocknoteHandlers not provided');\n }\n\n const proposal = await handlers.getProposal(contractAddress, proposalId);\n\n setSharedProposals((prev) => ({\n ...prev,\n [cacheKey]: {\n proposal,\n lastFetched: Date.now(),\n loading: false,\n },\n }));\n\n return proposal;\n } catch (error) {\n setSharedProposals((prev) => ({\n ...prev,\n [cacheKey]: {\n ...prev[cacheKey],\n loading: false,\n error: error as Error,\n },\n }));\n throw error;\n }\n },\n [handlers]\n ); // Removed sharedProposals from deps to prevent infinite loop\n\n const invalidateProposal = useCallback((proposalId: string) => {\n // Invalidate all entries that match this proposalId (across all contract addresses)\n setSharedProposals((prev) => {\n const updated = { ...prev };\n Object.keys(updated).forEach((key) => {\n if (key.endsWith(`:${proposalId}`)) {\n updated[key] = {\n ...updated[key],\n lastFetched: 0, // Mark as stale\n };\n }\n });\n return updated;\n });\n }, []);\n\n const subscribeToProposal = useCallback(\n (cacheKey: string): ProposalResponse | undefined => {\n return sharedProposals[cacheKey]?.proposal as ProposalResponse | undefined;\n },\n [sharedProposals]\n );\n\n const openDrawer = useCallback((id: string, content: React.ReactNode) => {\n setActiveDrawerId(id);\n setDrawerContent(content);\n }, []);\n\n const closeDrawer = useCallback(() => {\n setActiveDrawerId(null);\n setDrawerContent(null);\n }, []);\n\n return (\n <BlocknoteContext.Provider\n value={{\n editor,\n handlers,\n blockRequirements,\n editable,\n docType,\n sharedProposals,\n fetchSharedProposal,\n invalidateProposal,\n subscribeToProposal,\n activeDrawerId,\n drawerContent,\n openDrawer,\n closeDrawer,\n visualizationRenderer,\n getDynamicListData,\n dynamicListPanelRenderer,\n }}\n >\n {children}\n </BlocknoteContext.Provider>\n );\n};\n\nexport const useBlocknoteContext = () => {\n const context = useContext(BlocknoteContext);\n if (!context) {\n throw new Error('useBlocknoteContext must be used within a BlocknoteProvider');\n }\n return context;\n};\nexport const useBlocknoteHandlers = () => {\n const { handlers } = useBlocknoteContext();\n if (!handlers) {\n throw new Error('BlocknoteHandlers not provided to BlocknoteContext');\n }\n return handlers;\n};\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { CheckboxBlock } from './CheckboxBlock';\nimport type { IxoBlockProps } from '../../../core/types';\n\nexport const CheckboxBlockSpec = createReactBlockSpec(\n {\n type: 'checkbox' as const,\n propSchema: {\n checked: {\n default: false,\n },\n allowedCheckers: {\n default: 'all',\n },\n initialChecked: {\n default: false,\n },\n title: {\n default: '',\n },\n description: {\n default: '',\n },\n icon: {\n default: 'square-check',\n },\n conditions: {\n default: '',\n },\n },\n content: 'inline' as const,\n },\n {\n render: (props) => {\n // Re-map props to use IxoEditorType\n const ixoProps = props as unknown as IxoBlockProps;\n return <CheckboxBlock {...ixoProps} />;\n },\n }\n);\n","import React from 'react';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { CheckboxTemplateView } from './template/TemplateView';\nimport { CheckboxFlowView } from './flow/FlowView';\nimport { useBlockConditions } from '../hooks/useBlockConditions';\nimport { parseConditionConfig, hasVisibilityConditions, hasEnableConditions } from '../utils/conditionUtils';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\n\nexport type CheckboxBlockProps = IxoBlockProps;\n\n// Temporary export for missing type (will be implemented properly later)\nexport type CheckboxAllowedMode = 'all' | 'specific';\n\nexport function CheckboxBlock({ editor, block }: CheckboxBlockProps) {\n const { docType } = useBlocknoteContext();\n const { actions } = useBlockConditions(block, editor);\n\n // Template mode - always show\n if (docType === 'template') {\n return <CheckboxTemplateView editor={editor} block={block} />;\n }\n\n // Flow mode - interpret normalized actions\n // After normalization, all actions are in positive canonical form (enable/show)\n // The `actions` array contains ONLY conditions that evaluated to TRUE\n //\n // Logic for normalized conditions:\n // - If visibility conditions exist and NONE passed → hide the block\n // - If enable conditions exist and NONE passed → disable the block\n // - Otherwise, show and enable the block\n\n const conditionConfig = parseConditionConfig(block.props.conditions);\n\n // Check if we have visibility conditions\n const hasVisibility = hasVisibilityConditions(conditionConfig);\n const showActionExists = actions.some((a) => a.action === 'show');\n\n // Hide block if visibility conditions exist but none passed\n const shouldHide = hasVisibility && !showActionExists;\n\n if (shouldHide) {\n return null;\n }\n\n // Check if we have enable conditions\n const hasEnable = hasEnableConditions(conditionConfig);\n const enableActionExists = actions.some((a) => a.action === 'enable');\n\n // Disable block if enable conditions exist but none passed\n const shouldDisable = hasEnable && !enableActionExists;\n\n return (\n <CheckboxFlowView\n block={block}\n editor={editor}\n isDisabled={\n shouldDisable\n ? {\n isDisabled: 'disable',\n message: 'This checkbox is currently disabled by conditions',\n }\n : undefined\n }\n />\n );\n}\n\n// Export as default for backwards compatibility\nexport default CheckboxBlock;\n","import React, { useMemo } from 'react';\nimport { TemplateConfig } from './TemplateConfig';\nimport { Checkbox, Group, Stack, Text } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\nconst CHECKBOX_TEMPLATE_PANEL_ID = 'checkbox-template-panel';\n\nexport const CheckboxTemplateView = ({ editor, block }: IxoBlockProps) => {\n const panelId = `${CHECKBOX_TEMPLATE_PANEL_ID}-${block.id}`;\n\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n\n const { open } = usePanel(panelId, panelContent);\n\n return (\n <BaseContainer onClick={open}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n {getIcon('square-check', block.props.icon)}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {block.props.title || 'Checkbox Title'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.description || 'Checkbox description'}\n </Text>\n </Stack>\n </Group>\n\n <Checkbox contentEditable={false} disabled checked={false} style={{ flexShrink: 0 }} onClick={(e) => e.stopPropagation()} />\n </Group>\n </BaseContainer>\n );\n};\n","import React, { useCallback } from 'react';\nimport { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { GeneralTab } from './GeneralTab';\nimport { CheckboxAllowedMode } from '../CheckboxBlock';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\nexport const TemplateConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n\n const updateProp = useCallback(\n (key: string, value: any) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n [key]: value,\n },\n });\n },\n [editor, block]\n );\n\n const handleAllowedChange = useCallback(\n (mode: CheckboxAllowedMode, values: string[]) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n allowedMode: mode,\n allowedValues: values,\n },\n });\n },\n [editor, block]\n );\n\n return (\n <BaseRightPanelLayout title=\"Checkbox Settings\" onClose={closePanel}>\n <ReusablePanel\n extraTabs={[\n {\n label: 'General',\n value: 'general',\n content: (\n <GeneralTab\n title={block.props.title || ''}\n description={block.props.description || ''}\n initialChecked={block.props.initialChecked || false}\n allowedMode={block.props.allowedMode || 'all'}\n allowedValues={block.props.allowedValues || []}\n onTitleChange={(value) => updateProp('title', value)}\n onDescriptionChange={(value) => updateProp('description', value)}\n onInitialCheckedChange={(value) => updateProp('initialChecked', value)}\n onAllowedChange={handleAllowedChange}\n />\n ),\n },\n ]}\n context={{ editor, block }}\n />\n </BaseRightPanelLayout>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, Tabs } from '@mantine/core';\nimport { ConditionsTab } from './ConditionsTab';\nimport { IxoBlockProps } from '@/core/types';\nimport BaseSelect from './Base/BaseSelect';\n\ninterface TabConfig {\n label: string;\n value: string;\n content: React.ReactNode;\n}\n\ntype ReusablePanelContext = IxoBlockProps & {\n [key: string]: unknown;\n};\n\ninterface ReusablePanelProps {\n extraTabs: TabConfig[];\n context: ReusablePanelContext;\n}\n\nexport function ReusablePanel({ extraTabs, context }: ReusablePanelProps) {\n // Combine extra tabs with conditions tab (conditions always last)\n const tabs: TabConfig[] = [\n ...extraTabs,\n {\n label: 'Conditions',\n value: 'conditions',\n content: <ConditionsTab editor={context.editor} block={context.block} />,\n },\n ];\n\n // Default to first tab (usually General)\n const defaultValue = tabs.length > 0 ? tabs[0].value : 'conditions';\n const [activeTab, setActiveTab] = useState(defaultValue);\n\n // Use dropdown if more than 3 tabs\n const useDropdown = tabs.length > 3;\n\n // Get the active tab content\n const activeTabContent = tabs.find((tab) => tab.value === activeTab)?.content;\n\n if (useDropdown) {\n return (\n <Stack gap=\"md\">\n <BaseSelect value={activeTab} onChange={(value) => setActiveTab(value || defaultValue)} data={tabs.map((tab) => ({ value: tab.value, label: tab.label }))} />\n {activeTabContent}\n </Stack>\n );\n }\n\n return (\n <Tabs\n variant=\"pills\"\n radius=\"md\"\n styles={{\n tab: {\n '&[data-active]': {\n backgroundColor: '#282828',\n },\n },\n }}\n value={activeTab}\n onChange={(value) => setActiveTab(value || defaultValue)}\n >\n <Tabs.List>\n {tabs.map((tab) => (\n <Tabs.Tab key={tab.value} value={tab.value}>\n {tab.label}\n </Tabs.Tab>\n ))}\n </Tabs.List>\n\n {tabs.map((tab) => (\n <Tabs.Panel key={tab.value} value={tab.value} mt={10}>\n {tab.content}\n </Tabs.Panel>\n ))}\n </Tabs>\n );\n}\n","import React, { useCallback } from 'react';\nimport { Stack, SegmentedControl, Text, Alert } from '@mantine/core';\nimport type { IxoBlockProps } from '@/core/types';\nimport type { ConditionConfig, BlockCondition } from '../blocks/types/conditions';\nimport { parseConditionConfig, stringifyConditionConfig, createDefaultCondition, getAvailableBlocks } from '../blocks/utils/conditionUtils';\nimport { ConditionRow } from '../blocks/components/ConditionBuilder';\nimport BaseButton from './Base/BaseButton';\n\n/**\n * Self-contained conditions builder component\n * Manages conditional visibility/enablement logic for blocks\n *\n * @param block - The block to configure conditions for\n * @param editor - The IXO editor instance\n */\nexport function ConditionsTab({ block, editor }: IxoBlockProps) {\n // Parse current conditions from block props\n const currentConditions = parseConditionConfig(block.props.conditions);\n\n // Get available blocks from the current editor document\n const availableBlocks = getAvailableBlocks(editor?.document || [], block.id);\n\n /**\n * Update conditions by directly modifying the block in the editor\n */\n const updateConditions = useCallback(\n (newConfig: ConditionConfig) => {\n const conditionsString = stringifyConditionConfig(newConfig);\n\n // Update block props directly in editor\n editor.updateBlock(block, {\n props: {\n ...block.props,\n conditions: conditionsString,\n },\n });\n },\n [editor, block]\n );\n\n const handleModeChange = useCallback(\n (mode: string) => {\n updateConditions({\n ...currentConditions,\n mode: mode as 'all_must_pass' | 'any_can_pass',\n });\n },\n [currentConditions, updateConditions]\n );\n\n const handleAddCondition = useCallback(() => {\n const newCondition = createDefaultCondition();\n\n const newConfig = {\n ...currentConditions,\n enabled: true, // Auto-enable when adding first condition\n conditions: [...currentConditions.conditions, newCondition],\n };\n\n updateConditions(newConfig);\n }, [currentConditions, updateConditions]);\n\n const handleUpdateCondition = useCallback(\n (index: number, updatedCondition: BlockCondition) => {\n const newConditions = [...currentConditions.conditions];\n newConditions[index] = updatedCondition;\n const newConfig = {\n ...currentConditions,\n conditions: newConditions,\n };\n\n updateConditions(newConfig);\n },\n [currentConditions, updateConditions]\n );\n\n const handleDeleteCondition = useCallback(\n (index: number) => {\n const newConditions = currentConditions.conditions.filter((_, i) => i !== index);\n updateConditions({\n ...currentConditions,\n enabled: newConditions.length > 0, // Auto-disable when no conditions remain\n conditions: newConditions,\n });\n },\n [currentConditions, updateConditions]\n );\n\n return (\n <Stack gap=\"md\">\n {/* Header */}\n <Text size=\"sm\" c=\"dimmed\">\n Configure conditions that control when this block is enabled, disabled, or hidden based on other blocks in the editor.\n </Text>\n\n {/* Show condition mode only if conditions exist */}\n {currentConditions.conditions.length > 1 && (\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Evaluation mode\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n How multiple conditions should be evaluated\n </Text>\n <SegmentedControl\n data={[\n {\n value: 'all_must_pass',\n label: 'All must pass',\n },\n {\n value: 'any_can_pass',\n label: 'Any can pass',\n },\n ]}\n value={currentConditions.mode}\n onChange={handleModeChange}\n fullWidth\n />\n </Stack>\n )}\n\n {/* Condition List */}\n <Stack gap=\"sm\">\n {currentConditions.conditions.map((condition, index) => {\n return (\n <ConditionRow\n key={condition.id}\n condition={condition}\n availableBlocks={availableBlocks}\n onUpdate={(updated) => handleUpdateCondition(index, updated)}\n onDelete={() => handleDeleteCondition(index)}\n />\n );\n })}\n </Stack>\n\n {/* Add Condition Button - always show, but disabled if no blocks available */}\n <BaseButton onClick={handleAddCondition} disabled={availableBlocks.length === 0} fullWidth>\n Add Condition\n </BaseButton>\n\n {/* No available blocks warning - show after button */}\n {availableBlocks.length === 0 && (\n <Alert color=\"blue\" title=\"No blocks available for conditions\">\n Add other blocks to the editor (checkbox, proposal, etc.) to create conditions that depend on them. The \"Add Condition\" button will become enabled once other blocks are\n available.\n </Alert>\n )}\n </Stack>\n );\n}\n","import type { ConditionConfig, BlockCondition } from '../types/conditions';\n\nexport function parseConditionConfig(conditionsString?: string | ConditionConfig): ConditionConfig {\n if (!conditionsString) {\n return {\n enabled: false,\n mode: 'all_must_pass',\n conditions: [],\n };\n }\n\n if (typeof conditionsString === 'string') {\n try {\n return JSON.parse(conditionsString) as ConditionConfig;\n } catch (error) {\n return {\n enabled: false,\n mode: 'all_must_pass',\n conditions: [],\n };\n }\n }\n\n return conditionsString;\n}\n\nexport function stringifyConditionConfig(config: ConditionConfig): string {\n try {\n return JSON.stringify(config);\n } catch (error) {\n return JSON.stringify({\n enabled: false,\n mode: 'all_must_pass',\n conditions: [],\n });\n }\n}\n\nexport function generateConditionId(): string {\n return `condition_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function createDefaultCondition(): BlockCondition {\n return {\n id: generateConditionId(),\n name: '',\n sourceBlockId: '',\n sourceBlockType: '',\n rule: {\n type: 'property_value',\n property: '',\n operator: 'equals',\n value: '',\n },\n effect: {\n action: 'disable',\n message: '',\n },\n };\n}\n\nexport function getAvailableBlocks(editorDocument: any[], currentBlockId: string) {\n if (!editorDocument) return [];\n\n return editorDocument.filter((block) => block.id !== currentBlockId);\n}\n\nexport function getBlockDisplayName(block: any): string {\n // Try to get a meaningful display name from block properties\n if (block.props?.title) return block.props.title;\n if (block.props?.name) return block.props.name;\n if (block.props?.did) return `DID: ${block.props.did.slice(0, 20)}...`;\n\n // Fallback to block type and ID\n return `${block.type} (${block.id.slice(0, 8)}...)`;\n}\n\n/**\n * Checks if a condition config contains any show/hide conditions\n */\nexport function hasVisibilityConditions(conditionConfig: ConditionConfig): boolean {\n return conditionConfig.conditions.some((c) => c.effect.action === 'show' || c.effect.action === 'hide');\n}\n\n/**\n * Checks if a condition config contains any enable/disable conditions\n */\nexport function hasEnableConditions(conditionConfig: ConditionConfig): boolean {\n return conditionConfig.conditions.some((c) => c.effect.action === 'enable' || c.effect.action === 'disable');\n}\n","import React, { useCallback } from 'react';\nimport { Stack, SegmentedControl, Text, Alert } from '@mantine/core';\nimport type { ConditionConfig, BlockCondition } from '../../types/conditions';\nimport { parseConditionConfig, stringifyConditionConfig, createDefaultCondition, getAvailableBlocks } from '../../utils/conditionUtils';\nimport { ConditionRow } from './ConditionRow';\nimport BaseButton from '@/mantine/components/Base/BaseButton';\n\ninterface ConditionBuilderTabProps {\n block: any;\n editor: any;\n onConditionsChange: (conditionsString: string) => void;\n}\n\nexport function ConditionBuilderTab({ block, editor, onConditionsChange }: ConditionBuilderTabProps) {\n // Parse current conditions from block props\n const currentConditions = parseConditionConfig(block.props.conditions);\n\n // Get available blocks from the current editor document\n const availableBlocks = getAvailableBlocks(editor?.document || [], block.id);\n\n const updateConditions = useCallback(\n (newConfig: ConditionConfig) => {\n const conditionsString = stringifyConditionConfig(newConfig);\n onConditionsChange(conditionsString);\n },\n [onConditionsChange]\n );\n\n const handleModeChange = useCallback(\n (mode: string) => {\n updateConditions({\n ...currentConditions,\n mode: mode as 'all_must_pass' | 'any_can_pass',\n });\n },\n [currentConditions, updateConditions]\n );\n\n const handleAddCondition = useCallback(() => {\n const newCondition = createDefaultCondition();\n\n const newConfig = {\n ...currentConditions,\n enabled: true, // Auto-enable when adding first condition\n conditions: [...currentConditions.conditions, newCondition],\n };\n\n updateConditions(newConfig);\n }, [currentConditions, updateConditions]);\n\n const handleUpdateCondition = useCallback(\n (index: number, updatedCondition: BlockCondition) => {\n const newConditions = [...currentConditions.conditions];\n newConditions[index] = updatedCondition;\n const newConfig = {\n ...currentConditions,\n conditions: newConditions,\n };\n\n updateConditions(newConfig);\n },\n [currentConditions, updateConditions]\n );\n\n const handleDeleteCondition = useCallback(\n (index: number) => {\n const newConditions = currentConditions.conditions.filter((_, i) => i !== index);\n updateConditions({\n ...currentConditions,\n enabled: newConditions.length > 0, // Auto-disable when no conditions remain\n conditions: newConditions,\n });\n },\n [currentConditions, updateConditions]\n );\n\n return (\n <Stack gap=\"md\">\n {/* Header */}\n <Text size=\"sm\" c=\"dimmed\">\n Configure conditions that control when this block is enabled, disabled, or hidden based on other blocks in the editor.\n </Text>\n\n {/* Show condition mode only if conditions exist */}\n {currentConditions.conditions.length > 1 && (\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Evaluation mode\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n How multiple conditions should be evaluated\n </Text>\n <SegmentedControl\n data={[\n {\n value: 'all_must_pass',\n label: 'All must pass',\n },\n {\n value: 'any_can_pass',\n label: 'Any can pass',\n },\n ]}\n value={currentConditions.mode}\n onChange={handleModeChange}\n fullWidth\n />\n </Stack>\n )}\n\n {/* Condition List */}\n <Stack gap=\"sm\">\n {currentConditions.conditions.map((condition, index) => {\n return (\n <ConditionRow\n key={condition.id}\n condition={condition}\n availableBlocks={availableBlocks}\n onUpdate={(updated) => handleUpdateCondition(index, updated)}\n onDelete={() => handleDeleteCondition(index)}\n />\n );\n })}\n </Stack>\n\n {/* Add Condition Button - always show, but disabled if no blocks available */}\n <BaseButton onClick={handleAddCondition} disabled={availableBlocks.length === 0} fullWidth>\n Add Condition\n </BaseButton>\n\n {/* No available blocks warning - show after button */}\n {availableBlocks.length === 0 && (\n <Alert color=\"blue\" title=\"No blocks available for conditions\">\n Add other blocks to the editor (checkbox, proposal, etc.) to create conditions that depend on them. The \"Add Condition\" button will become enabled once other blocks are\n available.\n </Alert>\n )}\n </Stack>\n );\n}\n","import React, { useCallback, useMemo } from 'react';\nimport { Stack, Group, Button } from '@mantine/core';\nimport type { BlockCondition } from '../../types/conditions';\nimport { getConditionableProperties, getPropertyByName } from '../../registry/conditionableProperties';\nimport { getBlockDisplayName } from '../../utils/conditionUtils';\nimport { PropertyValueInput } from './PropertyValueInput';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\n\ninterface ConditionRowProps {\n condition: BlockCondition;\n availableBlocks: any[];\n onUpdate: (condition: BlockCondition) => void;\n onDelete: () => void;\n}\n\nexport function ConditionRow({ condition, availableBlocks, onUpdate, onDelete }: ConditionRowProps) {\n // Get properties for the selected block type\n const availableProperties = useMemo(() => {\n if (!condition.sourceBlockType) return [];\n return getConditionableProperties(condition.sourceBlockType);\n }, [condition.sourceBlockType]);\n\n // Get selected property details\n const selectedProperty = useMemo(() => {\n if (!condition.sourceBlockType || !condition.rule.property) return null;\n return getPropertyByName(condition.sourceBlockType, condition.rule.property);\n }, [condition.sourceBlockType, condition.rule.property]);\n\n // Get available operators based on property type\n const availableOperators = useMemo(() => {\n if (!selectedProperty) return [];\n\n const baseOperators = [\n { value: 'equals', label: 'equals' },\n { value: 'not_equals', label: 'does not equal' },\n ];\n\n if (selectedProperty.type === 'string') {\n baseOperators.push(\n { value: 'contains', label: 'contains' },\n { value: 'not_contains', label: 'does not contain' },\n { value: 'is_empty', label: 'is empty' },\n { value: 'is_not_empty', label: 'is not empty' }\n );\n }\n\n if (selectedProperty.type === 'number') {\n baseOperators.push({ value: 'greater_than', label: 'greater than' }, { value: 'less_than', label: 'less than' });\n }\n\n return baseOperators;\n }, [selectedProperty]);\n\n const handleNameChange = useCallback(\n (name: string) => {\n onUpdate({ ...condition, name });\n },\n [condition, onUpdate]\n );\n\n const handleSourceBlockChange = useCallback(\n (value: string | null) => {\n if (!value) {\n const updatedCondition = {\n ...condition,\n sourceBlockId: '',\n sourceBlockType: '',\n rule: { ...condition.rule, property: '', value: '' },\n };\n onUpdate(updatedCondition);\n return;\n }\n\n const [blockType, blockId] = value.split(':');\n const updatedCondition = {\n ...condition,\n sourceBlockId: blockId,\n sourceBlockType: blockType,\n rule: { ...condition.rule, property: '', value: '' },\n };\n onUpdate(updatedCondition);\n },\n [condition, onUpdate]\n );\n\n const handlePropertyChange = useCallback(\n (property: string | null) => {\n if (!property) return;\n\n onUpdate({\n ...condition,\n rule: {\n ...condition.rule,\n property,\n value: '', // Reset value when property changes\n },\n });\n },\n [condition, onUpdate]\n );\n\n const handleOperatorChange = useCallback(\n (operator: string | null) => {\n if (!operator) return;\n\n onUpdate({\n ...condition,\n rule: {\n ...condition.rule,\n operator: operator as BlockCondition['rule']['operator'],\n },\n });\n },\n [condition, onUpdate]\n );\n\n const handleValueChange = useCallback(\n (value: string | number | boolean) => {\n onUpdate({\n ...condition,\n rule: {\n ...condition.rule,\n value,\n },\n });\n },\n [condition, onUpdate]\n );\n\n const handleActionChange = useCallback(\n (action: string | null) => {\n if (!action) return;\n\n onUpdate({\n ...condition,\n effect: {\n ...condition.effect,\n action: action as BlockCondition['effect']['action'],\n },\n });\n },\n [condition, onUpdate]\n );\n\n const handleMessageChange = useCallback(\n (message: string) => {\n onUpdate({\n ...condition,\n effect: {\n ...condition.effect,\n message,\n },\n });\n },\n [condition, onUpdate]\n );\n\n const blockSelectData = availableBlocks.map((block) => ({\n value: `${block.type}:${block.id}`,\n label: `${getBlockDisplayName(block)} (${block.type})`,\n }));\n\n const propertySelectData = availableProperties.map((prop) => ({\n value: prop.name,\n label: prop.displayName,\n }));\n\n const actionSelectData = [\n { value: 'enable', label: 'Enable block' },\n { value: 'disable', label: 'Disable block' },\n { value: 'hide', label: 'Hide block' },\n { value: 'show', label: 'Show block' },\n ];\n\n const currentBlockValue = condition.sourceBlockId && condition.sourceBlockType ? `${condition.sourceBlockType}:${condition.sourceBlockId}` : '';\n\n return (\n <BaseContainer>\n <Stack gap=\"sm\">\n {/* Condition Name */}\n <BaseTextInput label=\"Condition name\" placeholder=\"e.g., User must acknowledge terms\" value={condition.name} onChange={(e) => handleNameChange(e.currentTarget.value)} />\n\n {/* Source Block Selection */}\n <BaseSelect\n label=\"Check this block\"\n placeholder=\"Select a block...\"\n data={blockSelectData}\n value={currentBlockValue}\n onChange={handleSourceBlockChange}\n searchable\n clearable\n />\n\n {/* Property, Operator, and Value Row */}\n {condition.sourceBlockType && (\n <>\n <Group grow>\n {/* Property Selection */}\n <BaseSelect label=\"Property\" placeholder=\"Select property...\" data={propertySelectData} value={condition.rule.property} onChange={handlePropertyChange} />\n\n {/* Operator Selection */}\n <BaseSelect\n label=\"Operator\"\n placeholder=\"Select operator...\"\n data={availableOperators}\n value={condition.rule.operator}\n onChange={handleOperatorChange}\n disabled={!condition.rule.property}\n />\n\n {/* Value Input - hide for is_empty and is_not_empty operators */}\n {condition.rule.operator !== 'is_empty' && condition.rule.operator !== 'is_not_empty' && (\n <PropertyValueInput\n property={selectedProperty}\n value={condition.rule.value}\n onChange={handleValueChange}\n disabled={!condition.rule.property || !condition.rule.operator}\n />\n )}\n </Group>\n </>\n )}\n\n {/* Action and Message */}\n <Group grow>\n <BaseSelect label=\"Action\" placeholder=\"Select action...\" data={actionSelectData} value={condition.effect.action} onChange={handleActionChange} />\n </Group>\n\n {/* Message */}\n <BaseTextInput\n label=\"Message (optional)\"\n placeholder=\"Message to show when condition fails\"\n value={condition.effect.message || ''}\n onChange={(e) => handleMessageChange(e.currentTarget.value)}\n />\n\n {/* Delete Button */}\n <Group justify=\"flex-end\">\n <Button color=\"red\" variant=\"light\" size=\"sm\" onClick={onDelete}>\n Delete Condition\n </Button>\n </Group>\n </Stack>\n </BaseContainer>\n );\n}\n","/**\n * Type definitions for API Request block response schema\n */\n\nexport interface ResponseSchemaField {\n /** Dot-notation path to the field in the response (e.g., \"data.user.email\") */\n path: string;\n /** Human-readable display name for the field */\n displayName: string;\n /** Data type of the field */\n type: 'string' | 'number' | 'boolean' | 'object' | 'array';\n /** Optional description of what this field represents */\n description?: string;\n}\n\nexport interface ResponseSchema {\n /** Array of schema field definitions */\n fields: ResponseSchemaField[];\n}\n\n/**\n * Parse response schema from JSON string stored in block props\n */\nexport function parseResponseSchema(schemaString: string | undefined): ResponseSchema | null {\n if (!schemaString) return null;\n\n try {\n return JSON.parse(schemaString) as ResponseSchema;\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Validate a response object against a schema\n * Returns an array of validation error messages\n */\nexport function validateResponseAgainstSchema(response: any, schema: ResponseSchema): string[] {\n const errors: string[] = [];\n\n schema.fields.forEach((field) => {\n // Navigate to the field value using dot notation\n const value = getNestedValueForValidation(response, field.path);\n\n if (value === undefined) {\n errors.push(`Missing field: ${field.path}`);\n } else {\n // Type checking\n const actualType = Array.isArray(value) ? 'array' : typeof value;\n\n // Allow some flexibility in type matching\n if (field.type === 'object' && actualType !== 'object') {\n errors.push(`Type mismatch for ${field.path}: expected object, got ${actualType}`);\n } else if (field.type === 'array' && !Array.isArray(value)) {\n errors.push(`Type mismatch for ${field.path}: expected array, got ${actualType}`);\n } else if (field.type !== 'object' && field.type !== 'array' && actualType !== field.type) {\n errors.push(`Type mismatch for ${field.path}: expected ${field.type}, got ${actualType}`);\n }\n }\n });\n\n return errors;\n}\n\n/**\n * Helper to get nested value from object using dot notation\n * Separate from referenceResolver to avoid circular dependencies\n */\nfunction getNestedValueForValidation(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current?.[key];\n }, obj);\n}\n","import type { BlockTypeProperties, ConditionableProperty } from '../types/conditions';\nimport { parseResponseSchema } from '../apiRequest/types';\n\nexport const CONDITIONABLE_PROPERTIES: BlockTypeProperties = {\n checkbox: [\n {\n name: 'checked',\n displayName: 'Is checked',\n type: 'boolean',\n description: 'Whether the checkbox is currently checked',\n },\n {\n name: 'title',\n displayName: 'Title',\n type: 'string',\n description: 'The title text of the checkbox',\n },\n {\n name: 'description',\n displayName: 'Description',\n type: 'string',\n description: 'The description text of the checkbox',\n },\n {\n name: 'allowedCheckers',\n displayName: 'Allowed checkers',\n type: 'string',\n description: 'Who can check this checkbox',\n },\n ],\n proposal: [\n {\n name: 'status',\n displayName: 'Status',\n type: 'select',\n selectOptions: [\n { value: 'draft', label: 'Draft' },\n { value: 'created', label: 'Created' },\n ],\n description: 'The current status of the proposal',\n },\n {\n name: 'title',\n displayName: 'Title',\n type: 'string',\n description: 'The title of the proposal',\n },\n {\n name: 'description',\n displayName: 'Description',\n type: 'string',\n description: 'The description of the proposal',\n },\n {\n name: 'proposalId',\n displayName: 'Proposal ID',\n type: 'string',\n description: 'The unique identifier of the proposal',\n },\n ],\n proposalVote: [\n {\n name: 'status',\n displayName: 'Status',\n type: 'select',\n selectOptions: [\n { value: 'open', label: 'Open' },\n { value: 'passed', label: 'Passed' },\n { value: 'rejected', label: 'Rejected' },\n { value: 'executed', label: 'Executed' },\n { value: 'closed', label: 'Closed' },\n ],\n description: 'The current status of the proposal vote',\n },\n {\n name: 'title',\n displayName: 'Title',\n type: 'string',\n description: 'The title of the proposal vote',\n },\n {\n name: 'subtitle',\n displayName: 'Subtitle',\n type: 'string',\n description: 'The subtitle of the proposal vote',\n },\n {\n name: 'daysLeft',\n displayName: 'Days left',\n type: 'number',\n description: 'Number of days remaining for voting',\n },\n {\n name: 'proposalId',\n displayName: 'Proposal ID',\n type: 'string',\n description: 'The unique identifier of the proposal',\n },\n ],\n list: [\n {\n name: 'title',\n displayName: 'Title',\n type: 'string',\n description: 'The title of the list',\n },\n {\n name: 'did',\n displayName: 'DID',\n type: 'string',\n description: 'The DID associated with the list',\n },\n {\n name: 'fragmentIdentifier',\n displayName: 'Fragment identifier',\n type: 'string',\n description: 'The fragment identifier for the list',\n },\n ],\n overview: [\n {\n name: 'did',\n displayName: 'DID',\n type: 'string',\n description: 'The DID associated with the overview',\n },\n ],\n proposalActions: [\n {\n name: 'proposalBlockId',\n displayName: 'Proposal block ID',\n type: 'string',\n description: 'The ID of the associated proposal block',\n },\n {\n name: 'actions',\n displayName: 'Actions',\n type: 'string',\n description: 'The JSON string of actions',\n },\n ],\n apiRequest: [\n {\n name: 'endpoint',\n displayName: 'Endpoint',\n type: 'string',\n description: 'The API endpoint URL',\n },\n {\n name: 'method',\n displayName: 'HTTP Method',\n type: 'select',\n selectOptions: [\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'PUT', label: 'PUT' },\n { value: 'DELETE', label: 'DELETE' },\n { value: 'PATCH', label: 'PATCH' },\n ],\n description: 'The HTTP method for the request',\n },\n {\n name: 'response',\n displayName: 'Response',\n type: 'string',\n description: 'The response data from the API request',\n },\n {\n name: 'status',\n displayName: 'Status',\n type: 'select',\n selectOptions: [\n { value: 'idle', label: 'Idle' },\n { value: 'loading', label: 'Loading' },\n { value: 'success', label: 'Success' },\n { value: 'error', label: 'Error' },\n ],\n description: 'The current status of the API request',\n },\n {\n name: 'title',\n displayName: 'Title',\n type: 'string',\n description: 'The title of the API request block',\n },\n {\n name: 'description',\n displayName: 'Description',\n type: 'string',\n description: 'The description of the API request block',\n },\n ],\n domainCreator: [\n {\n name: 'title',\n displayName: 'Title',\n type: 'string',\n description: 'The title of the domain creator block',\n },\n {\n name: 'description',\n displayName: 'Description',\n type: 'string',\n description: 'Supporting description text for the domain creator block',\n },\n {\n name: 'surveySchema',\n displayName: 'Survey schema',\n type: 'string',\n description: 'JSON string containing the full survey definition with field types, titles, and structure',\n },\n {\n name: 'answers',\n displayName: 'Survey answers',\n type: 'string',\n description: 'JSON string containing current survey answers (can be updated by AI agents)',\n },\n {\n name: 'lastSubmission',\n displayName: 'Last submission data',\n type: 'string',\n description: 'JSON string from the last completed survey response',\n },\n ],\n};\n\n/**\n * Get conditionable properties for a block type\n * For API Request blocks with a response schema, returns dynamic properties based on the schema\n *\n * @param blockType - The type of block\n * @param block - Optional: The actual block instance for dynamic property generation\n */\nexport function getConditionableProperties(blockType: string, block?: any): ConditionableProperty[] {\n const baseProperties = CONDITIONABLE_PROPERTIES[blockType] || [];\n\n // Special handling for API Request blocks with response schema\n if (blockType === 'apiRequest' && block?.props?.responseSchema) {\n const schema = parseResponseSchema(block.props.responseSchema);\n\n if (schema && schema.fields.length > 0) {\n // Generate dynamic properties from schema\n const schemaProperties: ConditionableProperty[] = schema.fields.map((field) => ({\n name: `response.${field.path}`,\n displayName: field.displayName,\n type: field.type,\n description: field.description || `Response field: ${field.displayName}`,\n }));\n\n // Remove the generic \"response\" property and replace with schema-specific properties\n const filteredBase = baseProperties.filter((prop) => prop.name !== 'response');\n return [...filteredBase, ...schemaProperties];\n }\n }\n\n return baseProperties;\n}\n\nexport function getPropertyByName(blockType: string, propertyName: string): ConditionableProperty | null {\n const properties = getConditionableProperties(blockType);\n return properties.find((prop) => prop.name === propertyName) || null;\n}\n","import React, { useCallback } from 'react';\nimport { Switch, Stack } from '@mantine/core';\nimport type { ConditionableProperty } from '../../types/conditions';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\nimport BaseNumberInput from '@/mantine/components/Base/BaseNumberInput';\n\ninterface PropertyValueInputProps {\n property: ConditionableProperty | null;\n value: string | number | boolean;\n onChange: (value: string | number | boolean) => void;\n disabled?: boolean;\n}\n\nexport function PropertyValueInput({ property, value, onChange, disabled = false }: PropertyValueInputProps) {\n const handleStringChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange(event.currentTarget.value);\n },\n [onChange]\n );\n\n const handleNumberChange = useCallback(\n (val: string | number) => {\n onChange(typeof val === 'number' ? val : parseFloat(val) || 0);\n },\n [onChange]\n );\n\n const handleBooleanChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange(event.currentTarget.checked);\n },\n [onChange]\n );\n\n const handleSelectChange = useCallback(\n (val: string | null) => {\n if (val === null) return;\n\n // Try to parse the value to its correct type\n if (val === 'true') onChange(true);\n else if (val === 'false') onChange(false);\n else if (!isNaN(Number(val))) onChange(Number(val));\n else onChange(val);\n },\n [onChange]\n );\n\n if (!property) {\n return <BaseTextInput label=\"Value\" placeholder=\"Select property first\" disabled />;\n }\n\n switch (property.type) {\n case 'boolean':\n return (\n <Stack gap={4}>\n <Switch label=\"Value\" checked={Boolean(value)} onChange={handleBooleanChange} disabled={disabled} />\n </Stack>\n );\n\n case 'number':\n return <BaseNumberInput label=\"Value\" placeholder=\"Enter number...\" value={typeof value === 'number' ? value : 0} onChange={handleNumberChange} disabled={disabled} />;\n\n case 'select':\n if (!property.selectOptions) {\n return <BaseTextInput label=\"Value\" placeholder=\"No options available\" disabled />;\n }\n\n const selectData = property.selectOptions.map((option) => ({\n value: String(option.value),\n label: option.label,\n }));\n\n return <BaseSelect label=\"Value\" placeholder=\"Select value...\" data={selectData} value={String(value)} onChange={handleSelectChange} disabled={disabled} />;\n\n case 'string':\n default:\n return <BaseTextInput label=\"Value\" placeholder=\"Enter text...\" value={String(value)} onChange={handleStringChange} disabled={disabled} />;\n }\n}\n","import { TextInput, TextInputProps } from '@mantine/core';\nimport React from 'react';\n\nexport default function BaseTextInput({ ...props }: TextInputProps) {\n return (\n <TextInput\n radius=\"md\"\n styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: 'rgba(0, 255, 157, 1)',\n },\n },\n label: { color: '#adb5bd' },\n }}\n {...props}\n />\n );\n}\n","import { Select, SelectProps } from '@mantine/core';\nimport React from 'react';\n\nconst selectStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: 'rgba(0, 255, 157, 1)',\n },\n },\n dropdown: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n },\n option: {\n color: '#f1f3f5',\n '&[data-selected]': {\n backgroundColor: 'rgba(0, 255, 157, 1)',\n },\n '&:hover': {\n backgroundColor: '#333',\n },\n },\n};\n\nexport default function BaseSelect({ ...props }: SelectProps) {\n return <Select radius=\"md\" styles={selectStyles} {...props} />;\n}\n","import { NumberInput, NumberInputProps } from '@mantine/core';\nimport React from 'react';\n\nexport default function BaseNumberInput({ ...props }: NumberInputProps) {\n return (\n <NumberInput\n radius=\"md\"\n styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: 'rgba(0, 255, 157, 1)',\n },\n },\n label: { color: '#adb5bd' },\n }}\n {...props}\n />\n );\n}\n","import { Card } from '@mantine/core';\nimport React, { PropsWithChildren } from 'react';\n\ntype Props = PropsWithChildren<{\n onClick?: () => void;\n}>;\nexport default function BaseContainer({ children, onClick }: Props) {\n return (\n <Card withBorder radius=\"lg\" style={{ width: '100%', cursor: onClick ? 'pointer' : 'default', position: 'relative' }} onClick={onClick}>\n {children}\n </Card>\n );\n}\n","import { Button, ButtonProps } from '@mantine/core';\nimport React from 'react';\n\ntype Props = {\n onClick: () => void;\n};\nexport default function BaseButton({ disabled, onClick, ...props }: ButtonProps & Props) {\n return (\n <Button\n onClick={onClick}\n disabled={disabled}\n variant=\"filled\"\n color=\"white\"\n radius=\"md\"\n size=\"sm\"\n style={{\n minWidth: 110,\n color: disabled ? '#333' : 'black',\n opacity: disabled ? 0.6 : 1,\n cursor: disabled ? 'default' : 'pointer',\n pointerEvents: disabled ? 'none' : 'auto',\n transition: 'opacity 0.15s',\n }}\n styles={{\n root: {\n color: '#fff',\n '&:hover': {\n backgroundColor: disabled ? undefined : 'white',\n },\n transition: 'background-color 0.15s',\n },\n }}\n {...props}\n />\n );\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Divider, SegmentedControl, Stack, Switch, Text, PillsInput, Pill } from '@mantine/core';\nimport { CheckboxAllowedMode } from '../CheckboxBlock';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\ninterface GeneralTabProps {\n title: string;\n description: string;\n initialChecked: boolean;\n allowedMode: CheckboxAllowedMode;\n allowedValues: string[];\n onTitleChange: (value: string) => void;\n onDescriptionChange: (value: string) => void;\n onInitialCheckedChange: (value: boolean) => void;\n onAllowedChange: (mode: CheckboxAllowedMode, values: string[]) => void;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({\n title,\n description,\n initialChecked,\n allowedMode,\n allowedValues,\n onTitleChange,\n onDescriptionChange,\n onInitialCheckedChange,\n onAllowedChange,\n}) => {\n // Use local state for real-time updates, but sync with block props\n const [localTitle, setLocalTitle] = useState(title || '');\n const [localDescription, setLocalDescription] = useState(description || '');\n const [localInitialChecked, setLocalInitialChecked] = useState(initialChecked);\n const [localMode, setLocalMode] = useState<CheckboxAllowedMode>(allowedMode);\n const [localValues, setLocalValues] = useState<string[]>(allowedValues);\n const [inputValue, setInputValue] = useState<string>('');\n\n // Sync local state with props when they change\n useEffect(() => {\n setLocalTitle(title || '');\n }, [title]);\n\n useEffect(() => {\n setLocalDescription(description || '');\n }, [description]);\n\n useEffect(() => {\n setLocalInitialChecked(initialChecked);\n }, [initialChecked]);\n\n useEffect(() => {\n setLocalMode(allowedMode);\n }, [allowedMode]);\n\n useEffect(() => {\n setLocalValues(allowedValues);\n }, [allowedValues]);\n\n const handleModeChange = (value: string) => {\n const nextMode = (value as CheckboxAllowedMode) || 'all';\n setLocalMode(nextMode);\n\n if (nextMode === 'all') {\n onAllowedChange('all', []);\n setLocalValues([]);\n } else {\n onAllowedChange(nextMode, localValues);\n }\n };\n\n const handleAddUser = () => {\n const trimmed = inputValue.trim();\n if (trimmed && !localValues.includes(trimmed)) {\n const newValues = [...localValues, trimmed];\n setLocalValues(newValues);\n if (localMode !== 'all') {\n onAllowedChange(localMode, newValues);\n }\n setInputValue('');\n }\n };\n\n const handleRemoveUser = (userToRemove: string) => {\n const newValues = localValues.filter((user) => user !== userToRemove);\n setLocalValues(newValues);\n if (localMode !== 'all') {\n onAllowedChange(localMode, newValues);\n }\n };\n\n const allowedHint = useMemo(() => {\n if (localMode === 'all') {\n return 'Everyone in the flow can toggle this checkbox.';\n }\n return 'Comma-separated user IDs allowed to toggle this checkbox (e.g. user-123, user-456).';\n }, [localMode]);\n\n return (\n <Stack gap=\"lg\">\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Title\n </Text>\n <BaseTextInput\n placeholder=\"e.g. Compliance Check\"\n value={localTitle}\n onChange={(event) => {\n const newTitle = event.currentTarget.value;\n setLocalTitle(newTitle);\n onTitleChange(newTitle);\n }}\n />\n </Stack>\n\n <Stack gap=\"xs\">\n <BaseTextArea\n label=\"Description\"\n placeholder=\"Describe what this checkbox controls\"\n minRows={3}\n value={localDescription}\n onChange={(event) => {\n const newDescription = event.currentTarget.value;\n setLocalDescription(newDescription);\n onDescriptionChange(newDescription);\n }}\n />\n </Stack>\n\n <Divider variant=\"dashed\" />\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Default State\n </Text>\n <Text size=\"xs\">Choose whether newly created flows start with this checkbox checked.</Text>\n <Switch\n label=\"Checked by default\"\n checked={localInitialChecked}\n onChange={(event) => {\n const newChecked = event.currentTarget.checked;\n setLocalInitialChecked(newChecked);\n onInitialCheckedChange(newChecked);\n }}\n />\n </Stack>\n\n <Divider variant=\"dashed\" />\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Allowed Checkers\n </Text>\n <Text size=\"xs\">Decide who can toggle this checkbox during a flow.</Text>\n <SegmentedControl\n value={localMode}\n onChange={handleModeChange}\n data={[\n { label: 'Everyone', value: 'all' },\n { label: 'Specific users', value: 'specific' },\n ]}\n />\n {localMode !== 'all' && (\n <Stack gap={4}>\n <Text size=\"xs\">{allowedHint}</Text>\n <PillsInput>\n <Pill.Group>\n {localValues.map((user) => (\n <Pill key={user} withRemoveButton onRemove={() => handleRemoveUser(user)}>\n {user}\n </Pill>\n ))}\n <PillsInput.Field\n placeholder={localValues.length === 0 ? 'Enter user ID and press Enter' : ''}\n value={inputValue}\n onChange={(event) => setInputValue(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n handleAddUser();\n }\n }}\n />\n </Pill.Group>\n </PillsInput>\n </Stack>\n )}\n </Stack>\n </Stack>\n );\n};\n","import { Textarea, TextareaProps } from '@mantine/core';\nimport React from 'react';\n\nexport default function BaseTextArea({ ...props }: TextareaProps) {\n return (\n <Textarea\n minRows={2}\n radius=\"md\"\n styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: 'rgba(0, 255, 157, 1)',\n },\n },\n label: {\n color: '#adb5bd',\n },\n }}\n {...props}\n />\n );\n}\n","import { Box, Center, CloseButton, Flex, Paper, Title } from '@mantine/core';\nimport { IconSettings } from '@tabler/icons-react';\nimport React, { PropsWithChildren, ReactNode } from 'react';\n\ntype Props = PropsWithChildren<{\n title: string;\n captionContent?: ReactNode;\n onClose: () => void;\n isTemplate?: boolean;\n}>;\nexport default function BaseRightPanelLayout({ title, isTemplate = true, captionContent, onClose, children }: Props) {\n return (\n <Paper\n py=\"md\"\n shadow=\"sm\"\n h=\"100%\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }}\n >\n <Flex align=\"center\" px=\"md\" justify={isTemplate ? 'space-between' : 'end'} mb=\"40px\">\n {isTemplate && (\n <Center style={{ borderRadius: 4 }} h={32} w={32} bg=\"#282828\">\n <IconSettings size=\"20px\" color=\"white\" />\n </Center>\n )}\n <CloseButton\n color=\"white\"\n onClick={onClose}\n style={{ backgroundColor: '#282828' }}\n styles={{\n root: {\n '&:hover': {\n backgroundColor: '#383838',\n },\n },\n }}\n />\n </Flex>\n <Title px={40} mb=\"md\" order={3}>\n {title}\n </Title>\n {captionContent}\n <Box\n px={40}\n style={{\n flex: 1,\n overflow: 'auto',\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n }}\n >\n {children}\n </Box>\n </Paper>\n );\n}\n","import React from 'react';\nimport { IconSquareCheck, IconPlus, IconUserDollar, IconFileText, IconCheckbox, IconNote, IconChecklist, IconThumbUp, IconBell, type IconProps } from '@tabler/icons-react';\n\nexport type IconKey = 'square-check' | 'file-text' | 'plus' | 'checklist' | 'checkbox' | 'note' | 'thumb-up' | 'bell' | 'dollar-sign';\n\nexport const ICON_MAP: Record<IconKey, React.ComponentType<IconProps>> = {\n 'square-check': IconSquareCheck,\n 'file-text': IconFileText,\n checklist: IconChecklist,\n checkbox: IconCheckbox,\n note: IconNote,\n 'thumb-up': IconThumbUp,\n bell: IconBell,\n plus: IconPlus,\n 'dollar-sign': IconUserDollar,\n};\n\nexport const getIcon = (fallback: IconKey = 'square-check', key: string | IconKey, color: string = 'white', size: number = 26, stroke: number = 1.5) => {\n // If key is not a valid IconKey, use fallback\n const validKey = (key in ICON_MAP ? key : fallback) as IconKey;\n const IconComponent = ICON_MAP[validKey];\n\n if (!IconComponent) {\n return null;\n }\n return <IconComponent color={color} size={size} stroke={stroke} />;\n};\n","import React from 'react';\nimport { Checkbox, Group, Stack, Text, Tooltip } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\ninterface FlowViewProps extends IxoBlockProps {\n isDisabled?: {\n isDisabled: 'disable';\n message?: string;\n };\n}\n\nexport const CheckboxFlowView = ({ editor, block, isDisabled }: FlowViewProps) => {\n const disabled = isDisabled?.isDisabled === 'disable';\n\n const handleCheckboxChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.stopPropagation();\n editor.updateBlock(block, {\n props: { checked: event.currentTarget.checked },\n });\n };\n\n const checkboxElement = (\n <Checkbox\n contentEditable={false}\n disabled={disabled}\n checked={block.props.checked || false}\n onChange={handleCheckboxChange}\n style={{ flexShrink: 0 }}\n onClick={(e) => e.stopPropagation()}\n />\n );\n\n return (\n <>\n <BaseContainer>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n {getIcon('square-check', block.props.icon)}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {block.props.title || 'Checkbox Title'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.description || 'Checkbox description'}\n </Text>\n </Stack>\n </Group>\n\n {disabled && isDisabled?.message ? (\n <Tooltip label={isDisabled.message} position=\"left\" withArrow>\n {checkboxElement}\n </Tooltip>\n ) : (\n checkboxElement\n )}\n </Group>\n </BaseContainer>\n </>\n );\n};\n","import { useMemo, useEffect, useState } from 'react';\nimport type { BlockConditionsResult } from '../types/conditions';\nimport { parseConditionConfig } from '../utils/conditionUtils';\nimport { evaluateBlockConditions } from '../utils/conditionEvaluator';\n\n/**\n * Hook for evaluating block conditions in runtime\n *\n * @param block The block instance\n * @param editor The editor instance\n * @param currentUser The current user (optional)\n * @returns Object containing all triggered actions from conditions that evaluated to true\n */\nexport function useBlockConditions(block: any, editor: any, currentUser?: any): BlockConditionsResult {\n // Extract stable reference to document\n const editorDocument = editor?.document;\n\n // Parse condition configuration from block props\n const conditionConfig = useMemo(() => {\n return parseConditionConfig(block?.props?.conditions);\n }, [block?.props?.conditions]);\n\n // Track when source blocks change\n const [sourceBlockVersion, setSourceBlockVersion] = useState(0);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n // Get all source block IDs from conditions\n const sourceBlockIds = new Set(conditionConfig.conditions.map((c) => c.sourceBlockId));\n\n if (sourceBlockIds.size === 0) {\n return;\n }\n\n const cleanup = editor.onChange(() => {\n // BlockNote's onChange doesn't provide changeInfo in this version/implementation\n // So we trigger re-evaluation on any document change\n // The useMemo below will handle the actual condition evaluation\n setSourceBlockVersion((prev) => prev + 1);\n });\n\n return cleanup;\n }, [editor, conditionConfig]);\n\n // Evaluate conditions\n const result = useMemo(() => {\n // If no document or block, return no actions\n if (!editorDocument || !block) {\n return {\n actions: [],\n };\n }\n\n return evaluateBlockConditions(conditionConfig, editorDocument, currentUser);\n }, [conditionConfig, editorDocument, currentUser, block?.id, sourceBlockVersion]);\n\n return result;\n}\n","import type { BlockCondition } from '../types/conditions';\n\n/**\n * Operator inversion map for normalizing conditions.\n * Maps each operator to its logical inverse.\n */\nconst OPERATOR_INVERSIONS: Record<BlockCondition['rule']['operator'], BlockCondition['rule']['operator']> = {\n equals: 'not_equals',\n not_equals: 'equals',\n contains: 'not_contains',\n not_contains: 'contains',\n is_empty: 'is_not_empty',\n is_not_empty: 'is_empty',\n greater_than: 'less_than',\n less_than: 'greater_than',\n};\n\n/**\n * Action inversion map for normalizing conditions.\n * Defines which actions should be normalized to their canonical positive form.\n */\nconst ACTION_INVERSIONS: Record<BlockCondition['effect']['action'], BlockCondition['effect']['action'] | null> = {\n disable: 'enable',\n hide: 'show',\n enable: null, // Already canonical\n show: null, // Already canonical\n};\n\n/**\n * Normalizes a condition into its canonical form.\n *\n * Normalization rules:\n * - \"disable\" actions are converted to \"enable\" with inverted operators/values\n * - \"hide\" actions are converted to \"show\" with inverted operators/values\n * - \"enable\" and \"show\" actions are left as-is\n *\n * This ensures logically equivalent conditions have the same representation.\n * For example:\n * - \"disable if property=true\" → \"enable if property=false\"\n * - \"hide if value contains 'foo'\" → \"show if value not_contains 'foo'\"\n *\n * @param condition The condition to normalize\n * @returns A new normalized BlockCondition object\n */\nexport function normalizeCondition(condition: BlockCondition): BlockCondition {\n const canonicalAction = ACTION_INVERSIONS[condition.effect.action];\n\n // If action is already canonical (enable or show), return as-is\n if (canonicalAction === null) {\n return condition;\n }\n\n // Invert the operator\n const invertedOperator = OPERATOR_INVERSIONS[condition.rule.operator];\n\n // Invert boolean values when using equals/not_equals operators\n let invertedValue = condition.rule.value;\n if ((condition.rule.operator === 'equals' || condition.rule.operator === 'not_equals') && typeof condition.rule.value === 'boolean') {\n invertedValue = !condition.rule.value;\n }\n\n const normalized: BlockCondition = {\n ...condition,\n rule: {\n ...condition.rule,\n operator: invertedOperator,\n value: invertedValue,\n },\n effect: {\n ...condition.effect,\n action: canonicalAction,\n },\n };\n\n return normalized;\n}\n\n/**\n * Normalizes an array of conditions.\n *\n * @param conditions Array of conditions to normalize\n * @returns Array of normalized conditions\n */\nexport function normalizeConditions(conditions: BlockCondition[]): BlockCondition[] {\n return conditions.map(normalizeCondition);\n}\n","import type { BlockCondition, ConditionEvaluationResult, BlockConditionsResult, ConditionConfig } from '../types/conditions';\nimport { normalizeConditions } from './conditionNormalizer';\n\nexport function evaluateCondition(condition: BlockCondition, sourceBlock: any, _currentUser?: any): ConditionEvaluationResult {\n // If source block doesn't exist, condition fails\n if (!sourceBlock) {\n return {\n passes: false,\n message: `Required block not found: ${condition.name || condition.sourceBlockType}`,\n };\n }\n\n const { rule } = condition;\n const sourceValue = sourceBlock.props?.[rule.property];\n\n // Handle different operators\n let passes = false;\n\n switch (rule.operator) {\n case 'equals':\n passes = sourceValue === rule.value;\n break;\n case 'not_equals':\n passes = sourceValue !== rule.value;\n break;\n case 'greater_than':\n passes = typeof sourceValue === 'number' && typeof rule.value === 'number' && sourceValue > rule.value;\n break;\n case 'less_than':\n passes = typeof sourceValue === 'number' && typeof rule.value === 'number' && sourceValue < rule.value;\n break;\n case 'contains':\n passes = typeof sourceValue === 'string' && typeof rule.value === 'string' && sourceValue.toLowerCase().includes(rule.value.toLowerCase());\n break;\n case 'not_contains':\n passes = typeof sourceValue === 'string' && typeof rule.value === 'string' && !sourceValue.toLowerCase().includes(rule.value.toLowerCase());\n break;\n case 'is_empty':\n passes = sourceValue === '' || sourceValue === null || sourceValue === undefined;\n break;\n case 'is_not_empty':\n passes = sourceValue !== '' && sourceValue !== null && sourceValue !== undefined;\n break;\n default:\n passes = false;\n }\n\n return {\n passes,\n message: passes ? undefined : condition.effect.message,\n };\n}\n\nexport function evaluateBlockConditions(conditionConfig: ConditionConfig, editorDocument: any[], currentUser?: any): BlockConditionsResult {\n // If conditions are disabled, return no actions\n if (!conditionConfig.enabled || conditionConfig.conditions.length === 0) {\n return {\n actions: [],\n };\n }\n\n // Step 1: Normalize all conditions to canonical form\n const normalizedConditions = normalizeConditions(conditionConfig.conditions);\n\n // Step 2: Evaluate ALL normalized conditions\n const evaluationResults = normalizedConditions.map((condition) => {\n const sourceBlock = editorDocument.find((block) => block.id === condition.sourceBlockId && block.type === condition.sourceBlockType);\n\n const result = evaluateCondition(condition, sourceBlock, currentUser);\n return {\n condition,\n result,\n };\n });\n\n // Step 3: Apply mode-based aggregation\n const { mode } = conditionConfig;\n let actions: BlockConditionsResult['actions'] = [];\n\n if (mode === 'all_must_pass') {\n // ALL conditions must pass for any actions to be returned\n const allPassed = evaluationResults.every(({ result }) => result.passes);\n\n if (allPassed) {\n // Return actions from all conditions (they should all have the same canonical action)\n actions = evaluationResults.map(({ condition }) => ({\n action: condition.effect.action,\n message: condition.effect.message,\n conditionName: condition.name,\n }));\n }\n } else {\n // any_can_pass mode: collect actions from ALL conditions that passed\n const passedResults = evaluationResults.filter(({ result }) => result.passes);\n\n actions = passedResults.map(({ condition }) => ({\n action: condition.effect.action,\n message: condition.effect.message,\n conditionName: condition.name,\n }));\n }\n\n return {\n actions,\n };\n}\n","type ProposalActionType =\n | 'Spend'\n | 'UpdateMembers'\n | 'Stake'\n | 'Join'\n | 'AuthzExec'\n | 'AuthzGrant'\n | 'AuthzRevoke'\n | 'BurnNft'\n | 'Mint'\n | 'Execute'\n | 'Instantiate'\n | 'ManageSubDaos'\n | 'ManageCw721'\n | 'ManageCw20'\n | 'Migrate'\n | 'TransferNft'\n | 'UpdateAdmin'\n | 'UpdatePreProposeConfig'\n | 'UpdateVotingConfig'\n | 'GovernanceVote'\n | 'WithdrawTokenSwap'\n | 'UpdateInfo'\n | 'Custom'\n | 'ManageStorageItems'\n | 'ValidatorActions'\n | 'PerformTokenSwap'\n | 'DaoAdminExec'\n | 'StakeToGroup'\n | 'SendGroupToken'\n | 'AcceptToMarketplace'\n | 'CreateEntity';\n\ninterface Member {\n addr: string;\n weight: number;\n}\n\ninterface BaseProposalAction {\n type: ProposalActionType;\n}\n\nexport interface SpendData {\n to: string;\n denom: string;\n amount: string;\n}\n\nexport interface ManageMembersData {\n add: Member[];\n remove: { addr: string }[];\n}\n\nexport interface SpendAction extends BaseProposalAction {\n type: 'Spend';\n data: SpendData;\n}\n\nexport interface UpdateMembersAction extends BaseProposalAction {\n type: 'UpdateMembers';\n data: ManageMembersData;\n}\n\nexport const StakeType = {\n Delegate: 'delegate' as const,\n Undelegate: 'undelegate' as const,\n Redelegate: 'redelegate' as const,\n WithdrawDelegatorReward: 'withdraw_delegator_reward' as const,\n} as const;\n\nexport type StakeType = (typeof StakeType)[keyof typeof StakeType];\n\nexport interface StakeData {\n stakeType: StakeType;\n validator: string;\n toValidator: string;\n amount: string;\n denom: string;\n}\n\nexport interface JoinData {\n id: string;\n coreAddress: string;\n address: string;\n}\n\nexport interface StakeAction extends BaseProposalAction {\n type: 'Stake';\n data: StakeData;\n}\n\nexport interface JoinAction extends BaseProposalAction {\n type: 'Join';\n data: JoinData;\n}\n\n// Common utility types\nexport interface Coin {\n denom: string;\n amount: string;\n}\n\nexport interface Binary {\n [k: string]: unknown;\n}\n\nexport interface Empty {\n [k: string]: unknown;\n}\n\nexport interface GenericToken {\n [k: string]: unknown;\n}\n\nexport interface SubDao {\n addr: string;\n charter?: string | null;\n [k: string]: unknown;\n}\n\nexport interface Counterparty {\n address: string;\n [k: string]: unknown;\n}\n\nexport type DepositRefundPolicy = string;\nexport type VoteOption = number;\nexport type TProposalActionModel = any;\n\n// Message types\nexport interface MsgDelegate {\n [k: string]: unknown;\n}\n\nexport interface MsgUndelegate {\n [k: string]: unknown;\n}\n\nexport interface MsgBeginRedelegate {\n [k: string]: unknown;\n}\n\nexport interface MsgWithdrawDelegatorReward {\n [k: string]: unknown;\n}\n\n// Complex message types\nexport type BankMsg =\n | {\n send: {\n amount: Coin[];\n to_address: string;\n };\n }\n | {\n burn: {\n amount: Coin[];\n };\n };\n\nexport type StakingMsg =\n | {\n delegate: {\n amount: Coin;\n validator: string;\n };\n }\n | {\n undelegate: {\n amount: Coin;\n validator: string;\n };\n }\n | {\n redelegate: {\n amount: Coin;\n dst_validator: string;\n src_validator: string;\n };\n };\n\nexport type DistributionMsg =\n | {\n set_withdraw_address: {\n address: string;\n };\n }\n | {\n withdraw_delegator_reward: {\n validator: string;\n };\n };\n\nexport interface IbcTimeout {\n [k: string]: unknown;\n}\n\nexport type IbcMsg =\n | {\n transfer: {\n amount: Coin;\n channel_id: string;\n timeout: IbcTimeout;\n to_address: string;\n };\n }\n | {\n send_packet: {\n channel_id: string;\n data: Binary;\n timeout: IbcTimeout;\n };\n }\n | {\n close_channel: {\n channel_id: string;\n };\n };\n\nexport type WasmMsg =\n | {\n execute: {\n contract_addr: string;\n funds: Coin[];\n msg: Binary;\n };\n }\n | {\n instantiate: {\n admin?: string | null;\n code_id: number;\n funds: Coin[];\n label: string;\n msg: Binary;\n };\n }\n | {\n migrate: {\n contract_addr: string;\n msg: Binary;\n new_code_id: number;\n };\n }\n | {\n update_admin: {\n admin: string;\n contract_addr: string;\n };\n }\n | {\n clear_admin: {\n contract_addr: string;\n };\n };\n\nexport type GovMsg = {\n vote: {\n proposal_id: number;\n vote: VoteOption;\n };\n};\n\nexport type StargateMsg = {\n stargate: {\n type_url: string;\n value: Binary;\n };\n};\n\nexport type CosmosMsgFor_Empty =\n | {\n bank: BankMsg;\n }\n | {\n custom: Empty;\n }\n | {\n staking: StakingMsg;\n }\n | {\n distribution: DistributionMsg;\n }\n | {\n ibc: IbcMsg;\n }\n | {\n wasm: WasmMsg;\n }\n | {\n gov: GovMsg;\n }\n | StargateMsg;\n\n// AuthzExec action types\nexport const AuthzExecActionTypes = {\n Delegate: '/cosmos.staking.v1beta1.MsgDelegate' as const,\n Undelegate: '/cosmos.staking.v1beta1.MsgUndelegate' as const,\n Redelegate: '/cosmos.staking.v1beta1.MsgBeginRedelegate' as const,\n ClaimRewards: '/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward' as const,\n Custom: 'custom' as const,\n} as const;\n\nexport type AuthzExecActionType = (typeof AuthzExecActionTypes)[keyof typeof AuthzExecActionTypes];\n\n// Data interfaces\nexport interface AuthzExecData {\n authzExecActionType: AuthzExecActionType;\n delegate: MsgDelegate;\n undelegate: MsgUndelegate;\n redelegate: MsgBeginRedelegate;\n claimRewards: MsgWithdrawDelegatorReward;\n custom: string;\n}\n\nexport interface AuthzData {\n custom?: boolean;\n typeUrl: string;\n value: {\n grantee: string;\n msgTypeUrl: string;\n };\n}\n\nexport interface BurnNftData {\n collection: string;\n tokenId: string;\n}\n\nexport interface ExecuteData {\n address: string;\n message: string;\n funds: Coin[];\n}\n\nexport interface InstantiateData {\n admin: string;\n codeId: number;\n label: string;\n message: string;\n funds: Coin[];\n}\n\nexport interface ManageSubDaosData {\n toAdd: SubDao[];\n toRemove: { address: string }[];\n}\n\nexport interface ManageCw721Data {\n adding: boolean;\n address: string;\n}\n\nexport interface ManageCw20Data {\n adding: boolean;\n address: string;\n}\n\nexport interface MigrateData {\n contract: string;\n codeId: number;\n msg: string;\n}\n\nexport interface MintData {\n to: string;\n amount: number;\n}\n\nexport interface TransferNftData {\n collection: string;\n tokenId: string;\n recipient: string;\n executeSmartContract: boolean;\n smartContractMsg: string;\n}\n\nexport interface UpdateAdminData {\n contract: string;\n newAdmin: string;\n}\n\nexport interface UpdatePreProposeConfigData {\n depositRequired: boolean;\n depositInfo: {\n amount: string;\n type: 'native' | 'cw20' | 'voting_module_token';\n denomOrAddress: string;\n token?: GenericToken;\n refundPolicy: DepositRefundPolicy;\n };\n anyoneCanPropose: boolean;\n}\n\nexport interface UpdateProposalConfigData {\n onlyMembersExecute: boolean;\n thresholdType: '%' | 'majority';\n thresholdPercentage?: number;\n quorumEnabled: boolean;\n quorumType: '%' | 'majority';\n quorumPercentage?: number;\n proposalDuration: number;\n proposalDurationUnits: 'weeks' | 'days' | 'hours' | 'minutes' | 'seconds';\n allowRevoting: boolean;\n}\n\nexport interface GovernanceVoteData {\n proposalId: string;\n vote: VoteOption;\n}\n\nexport interface WithdrawTokenSwapData {\n contractChosen: boolean;\n tokenSwapContractAddress?: string;\n}\n\nexport interface UpdateInfoData {\n automatically_add_cw20s: boolean;\n automatically_add_cw721s: boolean;\n dao_uri?: string | null;\n description: string;\n image_url?: string | null;\n name: string;\n [k: string]: unknown;\n}\n\nexport interface CustomData {\n message: string;\n}\n\nexport interface ManageStorageItemsData {\n setting: boolean;\n key: string;\n value: string;\n}\n\nexport enum ValidatorActionType {\n CreateValidator = '/cosmos.staking.v1beta1.MsgCreateValidator',\n EditValidator = '/cosmos.staking.v1beta1.MsgEditValidator',\n UnjailValidator = '/cosmos.slashing.v1beta1.MsgUnjail',\n WithdrawValidatorCommission = '/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission',\n}\n\nexport interface ValidatorActionsData {\n validatorActionType: ValidatorActionType;\n createMsg: string;\n editMsg: string;\n}\n\nexport interface PerformTokenSwapData {\n contractChosen: boolean;\n tokenSwapContractAddress?: string;\n selfParty?: Omit<Counterparty, 'address'>;\n counterparty?: Counterparty;\n}\n\nexport type DaoAdminExecData = {\n coreAddress: string;\n msgs: CosmosMsgFor_Empty[];\n _actions?: TProposalActionModel[];\n};\n\nexport interface StakeToGroupData {\n amount: string;\n tokenContract: string;\n stakingContract: string;\n}\n\nexport interface SendGroupTokenData {\n amount: string;\n contract: string;\n toAddress: string;\n}\n\nexport interface AcceptToMarketplaceData {\n did: string;\n relayerNodeDid: string;\n relayerNodeAddress: string;\n}\n\n// Proposal Action interfaces\nexport interface AuthzExecAction extends BaseProposalAction {\n type: 'AuthzExec';\n data: AuthzExecData;\n}\n\nexport interface AuthzGrantAction extends BaseProposalAction {\n type: 'AuthzGrant';\n data: AuthzData;\n}\n\nexport interface AuthzRevokeAction extends BaseProposalAction {\n type: 'AuthzRevoke';\n data: AuthzData;\n}\n\nexport interface BurnNftAction extends BaseProposalAction {\n type: 'BurnNft';\n data: BurnNftData;\n}\n\nexport interface MintAction extends BaseProposalAction {\n type: 'Mint';\n data: MintData;\n}\n\nexport interface ExecuteAction extends BaseProposalAction {\n type: 'Execute';\n data: ExecuteData;\n}\n\nexport interface InstantiateAction extends BaseProposalAction {\n type: 'Instantiate';\n data: InstantiateData;\n}\n\nexport interface ManageSubDaosAction extends BaseProposalAction {\n type: 'ManageSubDaos';\n data: ManageSubDaosData;\n}\n\nexport interface ManageCw721Action extends BaseProposalAction {\n type: 'ManageCw721';\n data: ManageCw721Data;\n}\n\nexport interface ManageCw20Action extends BaseProposalAction {\n type: 'ManageCw20';\n data: ManageCw20Data;\n}\n\nexport interface MigrateAction extends BaseProposalAction {\n type: 'Migrate';\n data: MigrateData;\n}\n\nexport interface TransferNftAction extends BaseProposalAction {\n type: 'TransferNft';\n data: TransferNftData;\n}\n\nexport interface UpdateAdminAction extends BaseProposalAction {\n type: 'UpdateAdmin';\n data: UpdateAdminData;\n}\n\nexport interface UpdatePreProposeConfigAction extends BaseProposalAction {\n type: 'UpdatePreProposeConfig';\n data: UpdatePreProposeConfigData;\n}\n\nexport interface UpdateVotingConfigAction extends BaseProposalAction {\n type: 'UpdateVotingConfig';\n data: UpdateProposalConfigData;\n}\n\nexport interface GovernanceVoteAction extends BaseProposalAction {\n type: 'GovernanceVote';\n data: GovernanceVoteData;\n}\n\nexport interface WithdrawTokenSwapAction extends BaseProposalAction {\n type: 'WithdrawTokenSwap';\n data: WithdrawTokenSwapData;\n}\n\nexport interface UpdateInfoAction extends BaseProposalAction {\n type: 'UpdateInfo';\n data: UpdateInfoData;\n}\n\nexport interface CustomAction extends BaseProposalAction {\n type: 'Custom';\n data: CustomData;\n}\n\nexport interface ManageStorageItemsAction extends BaseProposalAction {\n type: 'ManageStorageItems';\n data: ManageStorageItemsData;\n}\n\nexport interface ValidatorActionsAction extends BaseProposalAction {\n type: 'ValidatorActions';\n data: ValidatorActionsData;\n}\n\nexport interface PerformTokenSwapAction extends BaseProposalAction {\n type: 'PerformTokenSwap';\n data: PerformTokenSwapData;\n}\n\nexport interface DaoAdminExecAction extends BaseProposalAction {\n type: 'DaoAdminExec';\n data: DaoAdminExecData;\n}\n\nexport interface StakeToGroupAction extends BaseProposalAction {\n type: 'StakeToGroup';\n data: StakeToGroupData;\n}\n\nexport interface SendGroupTokenAction extends BaseProposalAction {\n type: 'SendGroupToken';\n data: SendGroupTokenData;\n}\n\nexport interface AcceptToMarketplaceAction extends BaseProposalAction {\n type: 'AcceptToMarketplace';\n data: AcceptToMarketplaceData;\n}\n\nexport interface CreateEntityAction extends BaseProposalAction {\n type: 'CreateEntity';\n data: any;\n}\n\nexport type ProposalAction =\n | SpendAction\n | UpdateMembersAction\n | StakeAction\n | JoinAction\n | AuthzExecAction\n | AuthzGrantAction\n | AuthzRevokeAction\n | BurnNftAction\n | MintAction\n | ExecuteAction\n | InstantiateAction\n | ManageSubDaosAction\n | ManageCw721Action\n | ManageCw20Action\n | MigrateAction\n | TransferNftAction\n | UpdateAdminAction\n | UpdatePreProposeConfigAction\n | UpdateVotingConfigAction\n | GovernanceVoteAction\n | WithdrawTokenSwapAction\n | UpdateInfoAction\n | CustomAction\n | ManageStorageItemsAction\n | ValidatorActionsAction\n | PerformTokenSwapAction\n | DaoAdminExecAction\n | StakeToGroupAction\n | SendGroupTokenAction\n | AcceptToMarketplaceAction\n | CreateEntityAction;\n\nexport interface SharedProposalData {\n [proposalId: string]: {\n proposal: any;\n lastFetched: number;\n loading: boolean;\n error?: Error;\n };\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useBlocknoteContext } from '../BlocknoteContext';\nimport type { ProposalResponse } from '../BlocknoteContext';\n\ninterface UseSharedProposalOptions {\n proposalId: string;\n contractAddress: string;\n autoFetch?: boolean;\n}\n\nexport const useSharedProposal = ({ proposalId, contractAddress, autoFetch = true }: UseSharedProposalOptions) => {\n const { sharedProposals, fetchSharedProposal, invalidateProposal, subscribeToProposal } = useBlocknoteContext();\n\n const [localProposal, setLocalProposal] = useState<ProposalResponse | null>(null);\n const cacheKey = `${contractAddress}:${proposalId}`;\n\n useEffect(() => {\n if (!proposalId || !contractAddress || !autoFetch) return;\n\n // Initial fetch or get from cache\n fetchSharedProposal(proposalId, contractAddress)\n .then(setLocalProposal)\n .catch(() => {\n // Error handled silently\n });\n }, [proposalId, contractAddress, fetchSharedProposal, autoFetch]);\n\n // Subscribe to updates from shared state\n useEffect(() => {\n const proposal = subscribeToProposal(cacheKey);\n if (proposal) {\n setLocalProposal(proposal);\n }\n }, [subscribeToProposal, cacheKey]);\n\n const refetch = useCallback(() => fetchSharedProposal(proposalId, contractAddress, true), [fetchSharedProposal, proposalId, contractAddress]);\n\n const invalidate = useCallback(() => invalidateProposal(proposalId), [invalidateProposal, proposalId]);\n\n return {\n proposal: localProposal,\n loading: sharedProposals[cacheKey]?.loading ?? false,\n error: sharedProposals[cacheKey]?.error,\n refetch,\n invalidate,\n };\n};\n","import { create } from 'zustand';\n\nexport type CollapseEvent = 'collapse' | 'expand' | 'toggle';\nexport type Listener = (event: CollapseEvent) => void;\n\nexport interface ListBlocksUIContextValue {\n broadcastCollapse: (event: CollapseEvent) => void;\n subscribe: (listener: Listener) => () => void;\n}\n\ninterface ListBlocksUIState {\n listeners: Set<Listener>;\n broadcastCollapse: (event: CollapseEvent) => void;\n subscribe: (listener: Listener) => () => void;\n}\n\n/**\n * Zustand store for managing list blocks UI state (collapse/expand)\n * Works across multiple React instances (no React Context needed)\n */\nexport const useListBlocksUIStore = create<ListBlocksUIState>((set, get) => ({\n listeners: new Set<Listener>(),\n\n broadcastCollapse: (event: CollapseEvent) => {\n get().listeners.forEach((listener) => listener(event));\n },\n\n subscribe: (listener: Listener) => {\n set((state) => {\n const newListeners = new Set(state.listeners);\n newListeners.add(listener);\n return { listeners: newListeners };\n });\n\n return () => {\n set((state) => {\n const newListeners = new Set(state.listeners);\n newListeners.delete(listener);\n return { listeners: newListeners };\n });\n };\n },\n}));\n\n/**\n * Hook to access list blocks UI functionality\n * No provider needed - uses Zustand store directly\n */\nexport const useListBlocksUI = (): ListBlocksUIContextValue => {\n const broadcastCollapse = useListBlocksUIStore((state) => state.broadcastCollapse);\n const subscribe = useListBlocksUIStore((state) => state.subscribe);\n\n return { broadcastCollapse, subscribe };\n};\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { ListBlock } from './ListBlock';\nimport type { IxoBlockProps } from '../../../core/types';\n\nexport const ListBlockSpec = createReactBlockSpec(\n {\n type: 'list' as const,\n propSchema: {\n listType: {\n default: '',\n },\n sort: {\n default: '{}',\n },\n filter: {\n default: '{}',\n },\n filterOptions: {\n default: '{}',\n },\n sortOptions: {\n default: '{}',\n },\n listConfig: {\n default: '{}',\n },\n icon: {\n default: '📋',\n },\n },\n content: 'none',\n },\n {\n render: (props) => {\n // Re-map props to use IxoEditorType\n const ixoProps = props as unknown as IxoBlockProps;\n return <ListBlock {...ixoProps} />;\n },\n }\n);\n","import React from 'react';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { ListTemplateView } from './template/TemplateView';\nimport { ListFlowView } from './flow/ListFlowView';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\n\nexport interface ListBlockSettings {\n listType: string | null;\n listConfig: string;\n}\n\nexport interface ListBlockProps extends IxoBlockProps {}\n\nexport function ListBlock({ editor, block }: ListBlockProps) {\n const { editable } = useBlocknoteContext();\n\n // Check if the list is configured\n const listType = block.props.listType && block.props.listType !== '';\n const isConfigured = listType;\n\n // Template mode - show placeholder card only if not configured\n if (editable && !isConfigured) {\n return <ListTemplateView editor={editor} block={block} />;\n }\n\n // If configured (regardless of mode), show the actual list\n return <ListFlowView block={block} editor={editor} />;\n}\n\n// Export as default for backwards compatibility\nexport default ListBlock;\n","import React, { useMemo } from 'react';\nimport { TemplateConfig } from './TemplateConfig';\nimport { Group, Stack, Text } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport { getListNameByType } from '../registry';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\nconst LIST_TEMPLATE_PANEL_ID = 'list-template-panel';\n\nexport const ListTemplateView = ({ editor, block }: IxoBlockProps) => {\n const panelId = `${LIST_TEMPLATE_PANEL_ID}-${block.id}`;\n\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n\n const { open } = usePanel(panelId, panelContent);\n\n const listType = block.props.listType && block.props.listType !== '' ? block.props.listType : null;\n const listName = listType ? getListNameByType(listType) : 'Unconfigured List';\n\n return (\n <BaseContainer onClick={open}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n {getIcon('checklist', block.props.icon)}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {listName}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {listType ? `List of ${listName.toLowerCase()}` : 'Click to configure list type and settings'}\n </Text>\n </Stack>\n </Group>\n </Group>\n </BaseContainer>\n );\n};\n","import React, { useCallback } from 'react';\nimport { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { GeneralTab } from './GeneralTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { ListType, BaseListConfig, SortOption, FilterOption } from '../types';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\nexport const TemplateConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n\n const handleConfigSave = useCallback(\n (config: BaseListConfig<ListType>) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n listType: config.type,\n listConfig: JSON.stringify(config.config),\n sortOptions: JSON.stringify(config.sortOptions),\n sort: JSON.stringify(config.sort),\n filterOptions: JSON.stringify(config.filterOptions),\n filter: JSON.stringify(config.filter),\n },\n });\n closePanel();\n },\n [editor, closePanel, block]\n );\n\n // Parse existing config\n const listType = block.props.listType && block.props.listType !== '' ? (block.props.listType as ListType) : null;\n\n let listConfig = {};\n try {\n if (block.props.listConfig && block.props.listConfig !== '{}') {\n listConfig = JSON.parse(block.props.listConfig);\n }\n } catch (error) {\n // Error handled silently\n }\n\n let sortOptions = {};\n try {\n if (block.props.sortOptions && block.props.sortOptions !== '{}') {\n sortOptions = JSON.parse(block.props.sortOptions);\n }\n } catch (error) {\n // Error handled silently\n }\n\n let filterOptions = {};\n try {\n if (block.props.filterOptions && block.props.filterOptions !== '{}') {\n filterOptions = JSON.parse(block.props.filterOptions);\n }\n } catch (error) {\n // Error handled silently\n }\n\n const initialConfig: BaseListConfig<ListType> | null =\n listType && listConfig\n ? {\n type: listType,\n config: listConfig as any,\n sort: null,\n filter: null,\n filterOptions: filterOptions as FilterOption[],\n sortOptions: sortOptions as SortOption[],\n }\n : null;\n\n return (\n <BaseRightPanelLayout title=\"List Settings\" onClose={closePanel}>\n <ReusablePanel\n extraTabs={[\n {\n label: 'General',\n value: 'general',\n content: <GeneralTab initialConfig={initialConfig} onSave={handleConfigSave} />,\n },\n ]}\n context={{ editor, block }}\n />\n </BaseRightPanelLayout>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, Card, Group, Text, Box, Button, Switch, Accordion } from '@mantine/core';\nimport { ListType, BaseListConfig, ListTypeMetadata, ConfigField } from '../types';\nimport { getAllListTypes, getListTypeConfig, listTypesWithAddresses } from '../registry';\nimport { useBlocknoteHandlers } from '../../../context/BlocknoteContext';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseButton from '@/mantine/components/Base/BaseButton';\n\ninterface GeneralTabProps {\n initialConfig: BaseListConfig<ListType> | null;\n onSave: (config: BaseListConfig<ListType>) => void;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({ initialConfig, onSave }) => {\n const [selectedType, setSelectedType] = useState<ListType | null>(initialConfig?.type || null);\n const [config, setConfig] = useState<Record<string, any>>(initialConfig?.config || {});\n const [sortConfig, setSortConfig] = useState<Record<string, any>>(initialConfig?.sortOptions || {});\n const [filterConfig, setFilterConfig] = useState<Record<string, any>>(initialConfig?.filterOptions || {});\n const [accordionValue, setAccordionValue] = useState<string | null>(initialConfig ? 'configure' : 'type');\n\n const handlers = useBlocknoteHandlers();\n const listTypes = getAllListTypes();\n\n const handleTypeSelect = (type: ListType) => {\n setSelectedType(type);\n\n // Initialize config with default values\n const typeConfig = getListTypeConfig(type);\n const defaultConfig: Record<string, any> = {};\n typeConfig.configFields.forEach((field) => {\n if (field.defaultValue !== undefined) {\n defaultConfig[field.key] = field.defaultValue;\n }\n });\n\n setSortConfig(typeConfig.sortFields);\n setFilterConfig(typeConfig.filterFields);\n setConfig(defaultConfig);\n setAccordionValue('configure');\n };\n\n const handleConfigChange = (key: string, value: any) => {\n setConfig((prev) => ({ ...prev, [key]: value }));\n };\n\n const handleAutoFill = async () => {\n if (selectedType && listTypesWithAddresses.includes(selectedType) && handlers?.getCurrentUser) {\n try {\n const user = handlers.getCurrentUser();\n handleConfigChange('address', user.address);\n } catch (error) {\n // Error handled silently\n }\n }\n };\n\n const isConfigValid = (): boolean => {\n if (!selectedType) return false;\n const typeConfig = getListTypeConfig(selectedType);\n return typeConfig.configFields.every((field) => !field.required || (config[field.key] && config[field.key].trim() !== ''));\n };\n\n const handleSaveConfig = () => {\n if (selectedType && isConfigValid()) {\n onSave({\n type: selectedType,\n config: config as any,\n sortOptions: sortConfig as any,\n filterOptions: filterConfig as any,\n filter: null,\n sort: null,\n });\n }\n };\n\n const renderConfigField = (field: ConfigField) => {\n switch (field.type) {\n case 'text':\n return (\n <Stack gap=\"xs\" key={field.key}>\n <BaseTextInput\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n value={config[field.key] || ''}\n onChange={(e) => handleConfigChange(field.key, e.target.value)}\n required={field.required}\n />\n {field.key === 'address' && selectedType && listTypesWithAddresses.includes(selectedType) && (\n <Button size=\"xs\" variant=\"subtle\" onClick={handleAutoFill}>\n Use Current User Address\n </Button>\n )}\n </Stack>\n );\n case 'switch':\n return (\n <Switch\n key={field.key}\n label={field.label}\n description={field.description}\n checked={config[field.key] !== undefined ? config[field.key] : field.defaultValue || false}\n onChange={(event) => handleConfigChange(field.key, event.currentTarget.checked)}\n styles={{\n track: {\n backgroundColor: config[field.key] ? 'rgba(0, 255, 157, 1)' : '#333',\n },\n label: {\n color: '#adb5bd',\n },\n }}\n />\n );\n default:\n return (\n <BaseTextInput\n key={field.key}\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n value={config[field.key] || ''}\n onChange={(e) => handleConfigChange(field.key, e.target.value)}\n required={field.required}\n />\n );\n }\n };\n\n const typeConfig = selectedType ? getListTypeConfig(selectedType) : null;\n\n return (\n <Stack gap=\"lg\">\n <Accordion value={accordionValue} onChange={setAccordionValue}>\n {/* Type Selection */}\n <Accordion.Item value=\"type\">\n <Accordion.Control\n styles={{\n control: {\n '&:hover': {\n backgroundColor: 'var(--mantine-color-dark-7) !important',\n },\n },\n chevron: {\n color: 'var(--mantine-color-dark-1)',\n },\n }}\n >\n <Text fw={600}>Choose List Type</Text>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack gap=\"sm\" mt=\"md\">\n {listTypes.map((listType: ListTypeMetadata) => (\n <Card\n key={listType.id}\n padding=\"md\"\n radius=\"md\"\n withBorder\n bg={selectedType === listType.id ? 'var(--mantine-color-gray-8)' : 'transparent'}\n style={{\n cursor: 'pointer',\n }}\n styles={{\n root: {\n border: '1px solid var(--mantine-color-gray-8)',\n },\n }}\n onClick={() => handleTypeSelect(listType.id)}\n >\n <Group gap=\"md\" align=\"flex-start\">\n <Box\n style={{\n width: 48,\n height: 48,\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '20px',\n backgroundColor: 'var(--mantine-color-gray-1)',\n border: '1px solid var(--mantine-color-gray-3)',\n }}\n >\n {listType.icon}\n </Box>\n\n <Stack gap={2} style={{ flex: 1 }}>\n <Text size=\"md\" fw={600}>\n {listType.name}\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n {listType.description}\n </Text>\n </Stack>\n </Group>\n </Card>\n ))}\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n\n {/* Configuration */}\n {selectedType && typeConfig && (\n <Accordion.Item value=\"configure\">\n <Accordion.Control\n styles={{\n control: {\n '&:hover': {\n backgroundColor: 'var(--mantine-color-dark-7)',\n },\n },\n chevron: {\n color: 'var(--mantine-color-dark-1)',\n },\n }}\n >\n <Text fw={600}>Configure {typeConfig.metadata.name}</Text>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack gap=\"md\" mt=\"md\">\n <Text size=\"sm\" c=\"dimmed\">\n {typeConfig.metadata.description}\n </Text>\n\n <Stack gap=\"sm\">{typeConfig.configFields.map((field: ConfigField) => renderConfigField(field))}</Stack>\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n )}\n </Accordion>\n\n {/* Save Button */}\n {selectedType && (\n <BaseButton onClick={handleSaveConfig} disabled={!isConfigValid()} fullWidth>\n Save Configuration\n </BaseButton>\n )}\n </Stack>\n );\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { LinkedResourcesListType } from './types';\n\nexport const linkedResourcesMetadata: ListTypeMetadata = {\n id: 'linked_resources' as LinkedResourcesListType,\n name: 'Linked Resources',\n description: 'Display resources linked to a DID document',\n icon: '🔗',\n};\n\nexport const linkedResourcesConfigFields: ConfigField[] = [\n {\n key: 'did',\n label: 'DID',\n description: 'The DID identifier to fetch linked resources from',\n type: 'text',\n placeholder: 'did:ixo:entity:example123',\n required: false,\n },\n];\n\nexport const linkedResourcesHandlerKey = 'getEntity' as const;\n\nexport const linkedResourcesFilterFields: FilterOption[] = [\n { key: 'access', label: 'Private', type: false },\n { key: 'access', label: 'Public', type: true },\n];\n\nexport const linkedResourcesSortFields: SortOption[] = [\n { key: 'description', label: 'Description', type: 'string' },\n { key: 'type', label: 'Type', type: 'string' },\n];\n\nexport const linkedResourcesSelectionPanelConfig: SelectionPanelConfig = {\n image: (item) => item.image,\n title: (item) => item.title || 'Linked Resource',\n description: (item) => item.description || 'No description',\n prompts: (item) => [\n { text: `What kind of resource is ${item.title}?` },\n { text: `How can I access resource ${item.title}?` },\n { text: `Is ${item.title} resource public or private?` },\n { text: `What information does ${item.title} resource provide?` },\n ],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getLinkedResourceDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { AssetsListType } from './types';\n\nexport const assetsMetadata: ListTypeMetadata = {\n id: 'assets' as AssetsListType,\n name: 'Assets',\n description: 'Display assets from a collection',\n icon: '🎨',\n};\n\nexport const assetsConfigFields: ConfigField[] = [\n {\n key: 'collectionDid',\n label: 'Collection DID',\n description: 'The DID of the collection to fetch assets from',\n type: 'text',\n placeholder: 'did:ixo:entity:collection123',\n required: false,\n },\n {\n key: 'ownerBased',\n label: 'Owner-based',\n description: 'Fetch assets based on the owner address',\n type: 'switch',\n required: false,\n defaultValue: false,\n },\n // {\n // key: 'showTableHeaders',\n // label: 'Show Table Headers',\n // description: 'Display column headers in the assets table',\n // type: 'switch',\n // required: false,\n // defaultValue: true,\n // },\n];\n\nexport const assetsHandlerKey = 'getAssets' as const;\n\nexport const assetsSortFields: SortOption[] = [\n { key: 'price', label: 'Price', type: 'number' },\n { key: 'issuer', label: 'Issuer', type: 'string' },\n { key: 'name', label: 'Name', type: 'string' },\n { key: 'alsoKnownAs', label: 'Also Known As', type: 'string' },\n];\n\nexport const assetsFilterFields: FilterOption[] = [\n { key: 'available', label: 'Available', type: true },\n { key: 'available', label: 'Unavailable', type: false },\n { key: 'owned', label: 'Owned', type: true },\n { key: 'owned', label: 'Not Owned', type: false },\n];\n\nexport const assetsSelectionPanelConfig: SelectionPanelConfig = {\n image: (item) => item.image,\n title: (item) => item.name || 'Unnamed Asset',\n description: (item) => item.description || 'No description',\n prompts: () => [{ text: `How many assets are available?` }, { text: `What are carbon credits?` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getAssetDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, SelectionPanelConfig } from '../types';\nimport { TransactionsListType } from './types';\n\nexport const transactionsMetadata: ListTypeMetadata = {\n id: 'transactions' as TransactionsListType,\n name: 'Transactions',\n description: 'Display transaction history for an address',\n icon: '💳',\n};\n\nexport const transactionsConfigFields: ConfigField[] = [\n {\n key: 'address',\n label: 'Address',\n description: 'The wallet address to fetch transactions for',\n type: 'text',\n placeholder: 'ixo1abc123...',\n required: true,\n },\n];\n\nexport const transactionsHandlerKey = 'getTransactions' as const;\n\nexport const transactionsSortFields: SortOption[] = [\n { key: 'time', label: 'Time', type: 'date' },\n { key: 'typeUrl', label: 'Type', type: 'string' },\n { key: 'transactionHash', label: 'Transaction Hash', type: 'string' },\n { key: 'memo', label: 'Memo', type: 'string' },\n];\n\nexport const transactionsSelectionPanelConfig: SelectionPanelConfig = {\n title: (item) => item.typeUrl || 'Transaction',\n description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `What is the purpose of ${item.transactionHash}?` }, { text: `Explain the transaction of type ${item.typeUrl}.` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getTransactionDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, SelectionPanelConfig } from '../types';\nimport { CollectionsListType } from './types';\n\nexport const collectionsMetadata: ListTypeMetadata = {\n id: 'collections' as CollectionsListType,\n name: 'Collections',\n description: 'Display collections from a registry',\n icon: '💾',\n};\n\nexport const collectionsConfigFields: ConfigField[] = [\n {\n key: 'relayedNodeDid',\n label: 'Relayed Node DID',\n description: 'The DID of the relayed node to fetch collections from',\n type: 'text',\n required: false,\n },\n];\n\nexport const collectionsSortFields: SortOption[] = [\n {\n key: 'price',\n label: 'Price',\n type: 'number',\n },\n {\n key: 'totalAssets',\n label: 'Total Assets',\n type: 'number',\n },\n];\n\nexport const collectionsHandlerKey = 'getCollections' as const;\n\nexport const collectionsSelectionPanelConfig: SelectionPanelConfig = {\n image: (item) => item.image,\n title: (item) => item.name || 'Unnamed Collection',\n description: (item) => item.description || 'No description',\n prompts: () => [{ text: `What is the purpose of this collection?` }, { text: `How is this collection different from others in the registry?` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getCollectionDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { InvestmentsListType } from './types';\n\nexport const investmentsMetadata: ListTypeMetadata = {\n id: 'investments' as InvestmentsListType,\n name: 'Investments',\n description: 'Display investment opportunities from a registry',\n icon: '💰',\n};\n\nexport const investmentsConfigFields: ConfigField[] = [\n {\n key: 'relayedNodeDid',\n label: 'Relayed Node DID',\n description: 'The DID of the relayed node to fetch investments from',\n type: 'text',\n required: false,\n },\n];\n\nexport const investmentsSortFields: SortOption[] = [\n { key: 'currentAmount', label: 'Current Amount', type: 'number' },\n { key: 'maxAmount', label: 'Max Amount', type: 'number' },\n { key: 'price', label: 'Price', type: 'number' },\n { key: 'status', label: 'Status', type: 'string' },\n { key: 'name', label: 'Name', type: 'string' },\n];\n\nexport const investmentsFilterFields: FilterOption[] = [\n { key: 'isSubscribed', label: 'Subscribed', type: true },\n { key: 'isSubscribed', label: 'Not Subscribed', type: false },\n { key: 'isOpen', label: 'Open', type: true },\n { key: 'isOpen', label: 'Closed', type: false },\n];\n\nexport const investmentsHandlerKey = 'getInvestments' as const;\n\nexport const investmentsSelectionPanelConfig: SelectionPanelConfig = {\n title: (item) => item.name || 'Investment Opportunity',\n image: (item) => item.image,\n description: (item) => item.description || 'No description',\n prompts: () => [\n { text: `What is the purpose of this investment opportunity?` },\n { text: `How is this investment opportunity different from others in the registry?` },\n { text: `What is the current amount of this investment opportunity?` },\n { text: `What is the max amount of this investment opportunity?` },\n { text: `What is the status of this investment opportunity?` },\n { text: `What is the name of this investment opportunity?` },\n ],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getInvestmentDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { OraclesListType } from './types';\n\nexport const oraclesMetadata: ListTypeMetadata = {\n id: 'oracles' as OraclesListType,\n name: 'Oracles',\n description: 'Display oracles available in the registry',\n icon: '🧙',\n};\n\nexport const oraclesConfigFields: ConfigField[] = [\n {\n key: 'relayedNodeDid',\n label: 'Relayed Node DID',\n description: 'The DID of the relayed node to fetch oracles from',\n type: 'text',\n required: false,\n },\n];\n\nexport const oraclesSortFields: SortOption[] = [\n { key: 'minPoints', label: 'Min Points', type: 'number' },\n { key: 'maxPoints', label: 'Max Points', type: 'number' },\n { key: 'flowsAmount', label: 'Flows Amount', type: 'number' },\n { key: 'name', label: 'Name', type: 'string' },\n { key: 'brand', label: 'Brand', type: 'string' },\n];\n\nexport const oraclesFilterFields: FilterOption[] = [\n { key: 'isActive', label: 'Active', type: true },\n { key: 'isActive', label: 'Inactive', type: false },\n { key: 'isInvited', label: 'Invited', type: true },\n { key: 'isInvited', label: 'Not Invited', type: false },\n];\n\nexport const oraclesHandlerKey = 'getOracles' as const;\n\nexport const oraclesSelectionPanelConfig: SelectionPanelConfig = {\n title: (item) => item.name || 'Oracle',\n image: (item) => item.image,\n description: (item) => item.description || 'No description',\n prompts: () => [\n { text: `What tasks can this oracle assist with?` },\n { text: `How is this oracle different from others in the registry?` },\n { text: `What kinds of data or knowledge does this oracle specialize in?` },\n ],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getOracleDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { PodsListType } from './types';\n\nexport const podsMetadata: ListTypeMetadata = {\n id: 'pods' as PodsListType,\n name: 'PODs',\n description: 'Display PODs from a registry',\n icon: '👥',\n};\n\nexport const podsConfigFields: ConfigField[] = [\n {\n key: 'relayedNodeDid',\n label: 'Relayed Node DID',\n description: 'The DID of the relayed node to fetch PODs from',\n type: 'text',\n required: true,\n },\n];\n\nexport const podsSortFields: SortOption[] = [\n { key: 'members', label: 'Members', type: 'number' },\n { key: 'totalProposals', label: 'Total Proposals', type: 'number' },\n { key: 'startDate', label: 'Start Date', type: 'date' },\n { key: 'endDate', label: 'End Date', type: 'date' },\n { key: 'name', label: 'Name', type: 'string' },\n];\n\nexport const podsFilterFields: FilterOption[] = [\n { key: 'isMember', label: 'Member', type: true },\n { key: 'isMember', label: 'Other', type: false },\n];\n\nexport const podsHandlerKey = 'getPODs' as const;\n\nexport const podsSelectionPanelConfig: SelectionPanelConfig = {\n image: (item) => item.image,\n title: (item) => item.name || 'POD',\n description: (item) => item.description || 'No description',\n prompts: () => [{ text: `What are the pods?` }, { text: `How to join a pod?` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getPODDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { ProposalsListType } from './types';\n\nexport const proposalsMetadata: ListTypeMetadata = {\n id: 'proposals' as ProposalsListType,\n name: 'Proposals',\n description: 'Display proposals from a group',\n icon: '📜',\n};\n\nexport const proposalsConfigFields: ConfigField[] = [\n {\n key: 'groupCoreAddress',\n label: 'Group Core Address',\n description: 'The Core Address of the group to fetch proposals from',\n type: 'text',\n required: true,\n },\n];\n\nexport const proposalsFilterFields: FilterOption[] = [\n { key: 'isVotedOn', label: 'Is Voted', type: true },\n { key: 'isVotedOn', label: 'Not Voted', type: false },\n];\n\nexport const proposalsSortFields: SortOption[] = [\n { key: 'status', label: 'Status', type: 'string' },\n { key: 'name', label: 'Name', type: 'string' },\n];\n\nexport const proposalsHandlerKey = 'getProposals' as const;\n\nexport const proposalsSelectionPanelConfig: SelectionPanelConfig = {\n image: (item) => item.image,\n title: (item) => item.name || 'Proposal',\n description: (item) => item.description || 'No description',\n prompts: () => [{ text: `What is the purpose of this proposal?` }, { text: `How is this proposal different from others in the registry?` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getProposalDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { RequestsListType } from './types';\n\nexport const requestsMetadata: ListTypeMetadata = {\n id: 'requests' as RequestsListType,\n name: 'Requests',\n description: 'Display open requests from a registry',\n icon: '📩',\n};\n\nexport const requestsConfigFields: ConfigField[] = [\n {\n key: 'relayedNodeDid',\n label: 'Relayed Node DID',\n description: 'The DID of the relayed node to fetch requests from',\n type: 'text',\n required: false,\n },\n];\n\nexport const requestsSortFields: SortOption[] = [\n { key: 'budget', label: 'Budget', type: 'number' },\n { key: 'totalApplications', label: 'Total Applications', type: 'number' },\n { key: 'name', label: 'Name', type: 'string' },\n { key: 'brand', label: 'Brand', type: 'string' },\n];\n\nexport const requestsFilterFields: FilterOption[] = [\n { key: 'isMember', label: 'Member', type: true },\n { key: 'isMember', label: 'Other', type: false },\n];\n\nexport const requestsHandlerKey = 'getRequests' as const;\n\nexport const requestsSelectionPanelConfig: SelectionPanelConfig = {\n image: (item) => item.image,\n title: (item) => item.name || 'Request',\n description: (item) => item.description || 'No description',\n prompts: () => [{ text: `What is the purpose of this request?` }, { text: `How is this request different from others in the registry?` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getRequestDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, SelectionPanelConfig } from '../types';\nimport { GroupMembersListType } from './types';\n\nexport const groupMembersMetadata: ListTypeMetadata = {\n id: 'group_members' as GroupMembersListType,\n name: 'Group Members',\n description: 'Display Group members',\n icon: '👤',\n};\n\nexport const groupMembersConfigFields: ConfigField[] = [\n {\n key: 'address',\n label: 'Wallet Address',\n description: 'Your wallet address to determine your membership',\n type: 'text',\n required: true,\n },\n {\n key: 'groupCoreAddress',\n label: 'Group Core Address',\n description: 'The Core Address of the group to fetch members from',\n type: 'text',\n required: true,\n },\n {\n key: 'withBalance',\n label: 'With Balance',\n description: 'Whether to include the balance of the members',\n type: 'switch',\n required: false,\n },\n];\n\nexport const groupMembersSortFields: SortOption[] = [\n { key: 'username', label: 'Username', type: 'string' },\n { key: 'percentage', label: 'Share %', type: 'string' },\n { key: 'role', label: 'Role', type: 'string' },\n];\n\nexport const groupMembersHandlerKey = 'getGroupMembers' as const;\n\nexport const groupMembersSelectionPanelConfig: SelectionPanelConfig = {\n image: (item) => item.image,\n title: (item) => item.username || 'Unknown Member',\n description: (item) => item.description || 'No description',\n prompts: () => [{ text: `What are the dao dao groups?` }, { text: `How to join a dao group?` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getMemberDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { ValidatorsListType } from './types';\n\nexport const validatorsMetadata: ListTypeMetadata = {\n id: 'validators' as ValidatorsListType,\n name: 'Validators',\n description: 'Display staking validators',\n icon: '✅',\n};\n\nexport const validatorsConfigFields: ConfigField[] = [\n {\n key: 'relayedNodeDid',\n label: 'Relayed Node DID',\n description: 'The DID of the relayed node to fetch validators from',\n type: 'text',\n required: true,\n },\n];\n\nexport const validatorsSortFields: SortOption[] = [\n { key: 'name', label: 'Name', type: 'string' },\n { key: 'amount', label: 'Amount', type: 'number' },\n { key: 'commission', label: 'Commission', type: 'number' },\n];\n\nexport const validatorsFilterFields: FilterOption[] = [\n { key: 'isActive', label: 'Active', type: true },\n { key: 'isStaked', label: 'Staked', type: true },\n { key: 'isBonding', label: 'Bonding', type: true },\n];\n\nexport const validatorsHandlerKey = 'getValidators' as const;\n\nexport const validatorsSelectionPanelConfig: SelectionPanelConfig = {\n title: (item) => item.name || 'Unknown Validator',\n description: (item) => item.description || 'No description',\n prompts: () => [\n { text: `What is the status of this validator?` },\n { text: `What is the staked amount of this validator?` },\n { text: `What is the bonding amount of this validator?` },\n ],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getValidatorDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, SelectionPanelConfig } from '../types';\nimport { DaoMembersListType } from './types';\n\nexport const daoMembersMetadata: ListTypeMetadata = {\n id: 'dao_members' as DaoMembersListType,\n name: 'Dao Members',\n description: 'Display Dao members',\n icon: '👤',\n};\n\nexport const daoMembersConfigFields: ConfigField[] = [\n {\n key: 'address',\n label: 'Wallet Address',\n description: 'Your wallet address to determine your membership',\n type: 'text',\n required: false,\n },\n {\n key: 'groupIds',\n label: 'Group IDs',\n description: 'The IDs of the DAO groups to fetch members from',\n type: 'select',\n required: false,\n },\n {\n key: 'withBalance',\n label: 'With Balance',\n description: 'Whether to include the balance of the members',\n type: 'switch',\n required: false,\n },\n];\n\nexport const daoMembersSortFields: SortOption[] = [\n { key: 'username', label: 'Username', type: 'string' },\n { key: 'percentage', label: 'Share %', type: 'string' },\n { key: 'role', label: 'Role', type: 'string' },\n];\n\nexport const daoMembersHandlerKey = 'getDaoMembers' as const;\n\nexport const daoMembersSelectionPanelConfig: SelectionPanelConfig = {\n image: (item) => item.image,\n title: (item) => item.username || 'Unknown Member',\n description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `What is the DAO member ${item.username} doing?` }, { text: `What is the role of dao members?` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getDaoMemberDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { ProjectsListType } from './types';\n\nexport const projectsMetadata: ListTypeMetadata = {\n id: 'projects' as ProjectsListType,\n name: 'Projects',\n description: 'Display projects from a registry',\n icon: '📩',\n};\n\nexport const projectsConfigFields: ConfigField[] = [\n {\n key: 'relayedNodeDid',\n label: 'Relayed Node DID',\n description: 'The DID of the relayed node to fetch projects from',\n type: 'text',\n required: false,\n },\n];\n\nexport const projectsSortFields: SortOption[] = [{ key: 'name', label: 'Name', type: 'string' }];\n\nexport const projectsFilterFields: FilterOption[] = [];\n\nexport const projectsHandlerKey = 'getProjects' as const;\n\nexport const projectsSelectionPanelConfig: SelectionPanelConfig = {\n image: (item) => item.image,\n title: (item) => item.name || 'Project',\n description: (item) => item.description || 'No description',\n prompts: () => [{ text: `What are the projects?` }, { text: `How to join a project?` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getProjectDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { DaosListType } from './types';\n\nexport const daosMetadata: ListTypeMetadata = {\n id: 'daos' as DaosListType,\n name: 'Daos',\n description: 'Display Daos from a registry',\n icon: '📩',\n};\n\nexport const daosConfigFields: ConfigField[] = [\n {\n key: 'relayedNodeDid',\n label: 'Relayed Node DID',\n description: 'The DID of the relayed node to fetch Daos from',\n type: 'text',\n required: false,\n },\n];\n\nexport const daosSortFields: SortOption[] = [{ key: 'name', label: 'Name', type: 'string' }];\n\nexport const daosFilterFields: FilterOption[] = [];\n\nexport const daosHandlerKey = 'getDaos' as const;\n\nexport const daosSelectionPanelConfig: SelectionPanelConfig = {\n title: (item) => item.name || 'Dao',\n image: (item) => item.image,\n description: (item) => item.description || 'No description',\n prompts: () => [{ text: `What is the purpose of this DAO?` }, { text: `How is this DAO different from others in the registry?` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getDaoDetails',\n};\n","import { ListTypeMetadata, ConfigField, SortOption, FilterOption, SelectionPanelConfig } from '../types';\nimport { BalancesListType } from './types';\n\nexport const balancesMetadata: ListTypeMetadata = {\n id: 'balances' as BalancesListType,\n name: 'Balances',\n description: 'Display balances of an address',\n icon: '💲',\n};\n\nexport const balancesConfigFields: ConfigField[] = [\n {\n key: 'address',\n label: 'Address',\n description: 'The address to fetch balances from',\n type: 'text',\n required: false,\n },\n];\n\nexport const balancesSortFields: SortOption[] = [\n { key: 'amount', label: 'Amount', type: 'number' },\n { key: 'usdAmount', label: 'USD Amount', type: 'number' },\n];\n\nexport const balancesFilterFields: FilterOption[] = [\n { key: 'isCoin', label: 'Coins', type: true },\n { key: 'isShare', label: 'Shares', type: true },\n { key: 'isCredit', label: 'Credits', type: true },\n];\n\nexport const balancesHandlerKey = 'getBalances' as const;\n\nexport const balancesSelectionPanelConfig: SelectionPanelConfig = {\n title: (item) => item.tokenName || 'Unnamed Token',\n image: (item) => item.tokenImage,\n description: (item) => item.description || 'No description',\n prompts: () => [{ text: `What are the balances of this address?` }, { text: `How to get the balances of an address?` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getBalanceDetails',\n};\n","import { ListType, ListTypeMetadata, ConfigField, BaseListConfig, SortOption, FilterOption, SelectionPanelConfig } from './types';\nimport {\n linkedResourcesMetadata,\n linkedResourcesConfigFields,\n linkedResourcesHandlerKey,\n linkedResourcesSortFields,\n linkedResourcesFilterFields,\n linkedResourcesSelectionPanelConfig,\n} from './linked_resources/config';\nimport { assetsMetadata, assetsConfigFields, assetsHandlerKey, assetsSortFields, assetsFilterFields, assetsSelectionPanelConfig } from './assets/config';\nimport { transactionsMetadata, transactionsConfigFields, transactionsHandlerKey, transactionsSortFields, transactionsSelectionPanelConfig } from './transactions/config';\nimport { collectionsConfigFields, collectionsHandlerKey, collectionsMetadata, collectionsSortFields, collectionsSelectionPanelConfig } from './collections/config';\nimport {\n investmentsConfigFields,\n investmentsFilterFields,\n investmentsHandlerKey,\n investmentsMetadata,\n investmentsSortFields,\n investmentsSelectionPanelConfig,\n} from './investments/config';\nimport { oraclesConfigFields, oraclesFilterFields, oraclesHandlerKey, oraclesMetadata, oraclesSortFields, oraclesSelectionPanelConfig } from './oracles/config';\nimport { podsConfigFields, podsFilterFields, podsHandlerKey, podsMetadata, podsSortFields, podsSelectionPanelConfig } from './pods/config';\nimport { proposalsConfigFields, proposalsFilterFields, proposalsHandlerKey, proposalsMetadata, proposalsSortFields, proposalsSelectionPanelConfig } from './proposals/config';\nimport { requestsConfigFields, requestsFilterFields, requestsHandlerKey, requestsMetadata, requestsSortFields, requestsSelectionPanelConfig } from './requests/config';\nimport { groupMembersConfigFields, groupMembersHandlerKey, groupMembersMetadata, groupMembersSortFields, groupMembersSelectionPanelConfig } from './members/config';\nimport {\n validatorsConfigFields,\n validatorsFilterFields,\n validatorsHandlerKey,\n validatorsMetadata,\n validatorsSortFields,\n validatorsSelectionPanelConfig,\n} from './validators/config';\nimport { daoMembersConfigFields, daoMembersHandlerKey, daoMembersMetadata, daoMembersSortFields, daoMembersSelectionPanelConfig } from './dao_members/config';\nimport { projectsConfigFields, projectsFilterFields, projectsHandlerKey, projectsMetadata, projectsSelectionPanelConfig, projectsSortFields } from './projects/config';\nimport { daosFilterFields, daosSelectionPanelConfig, daosConfigFields, daosMetadata, daosSortFields, daosHandlerKey } from './daos/config';\nimport { balancesConfigFields, balancesFilterFields, balancesHandlerKey, balancesMetadata, balancesSelectionPanelConfig, balancesSortFields } from './balances/config';\n\nexport interface ListTypeRegistry {\n metadata: ListTypeMetadata;\n configFields: ConfigField[];\n sortFields: SortOption[];\n filterFields: FilterOption[];\n handlerKey: string;\n}\n\nexport const listTypeRegistry: Record<ListType, ListTypeRegistry> = {\n linked_resources: {\n metadata: linkedResourcesMetadata,\n configFields: linkedResourcesConfigFields,\n sortFields: linkedResourcesSortFields,\n filterFields: linkedResourcesFilterFields,\n handlerKey: linkedResourcesHandlerKey,\n },\n assets: {\n metadata: assetsMetadata,\n configFields: assetsConfigFields,\n sortFields: assetsSortFields,\n filterFields: assetsFilterFields,\n handlerKey: assetsHandlerKey,\n },\n transactions: {\n metadata: transactionsMetadata,\n configFields: transactionsConfigFields,\n sortFields: transactionsSortFields,\n filterFields: [],\n handlerKey: transactionsHandlerKey,\n },\n collections: {\n metadata: collectionsMetadata,\n configFields: collectionsConfigFields,\n sortFields: collectionsSortFields,\n filterFields: [],\n handlerKey: collectionsHandlerKey,\n },\n investments: {\n metadata: investmentsMetadata,\n configFields: investmentsConfigFields,\n sortFields: investmentsSortFields,\n filterFields: investmentsFilterFields,\n handlerKey: investmentsHandlerKey,\n },\n oracles: {\n metadata: oraclesMetadata,\n configFields: oraclesConfigFields,\n sortFields: oraclesSortFields,\n filterFields: oraclesFilterFields,\n handlerKey: oraclesHandlerKey,\n },\n pods: {\n metadata: podsMetadata,\n configFields: podsConfigFields,\n sortFields: podsSortFields,\n filterFields: podsFilterFields,\n handlerKey: podsHandlerKey,\n },\n proposals: {\n metadata: proposalsMetadata,\n configFields: proposalsConfigFields,\n sortFields: proposalsSortFields,\n filterFields: proposalsFilterFields,\n handlerKey: proposalsHandlerKey,\n },\n requests: {\n metadata: requestsMetadata,\n configFields: requestsConfigFields,\n sortFields: requestsSortFields,\n filterFields: requestsFilterFields,\n handlerKey: requestsHandlerKey,\n },\n group_members: {\n metadata: groupMembersMetadata,\n configFields: groupMembersConfigFields,\n sortFields: groupMembersSortFields,\n filterFields: [],\n handlerKey: groupMembersHandlerKey,\n },\n validators: {\n metadata: validatorsMetadata,\n configFields: validatorsConfigFields,\n sortFields: validatorsSortFields,\n filterFields: validatorsFilterFields,\n handlerKey: validatorsHandlerKey,\n },\n dao_members: {\n metadata: daoMembersMetadata,\n configFields: daoMembersConfigFields,\n sortFields: daoMembersSortFields,\n filterFields: [],\n handlerKey: daoMembersHandlerKey,\n },\n projects: {\n metadata: projectsMetadata,\n configFields: projectsConfigFields,\n sortFields: projectsSortFields,\n filterFields: projectsFilterFields,\n handlerKey: projectsHandlerKey,\n },\n daos: {\n metadata: daosMetadata,\n configFields: daosConfigFields,\n sortFields: daosSortFields,\n filterFields: daosFilterFields,\n handlerKey: daosHandlerKey,\n },\n balances: {\n metadata: balancesMetadata,\n configFields: balancesConfigFields,\n sortFields: balancesSortFields,\n filterFields: balancesFilterFields,\n handlerKey: balancesHandlerKey,\n },\n};\n\nexport const getAllListTypes = (): ListTypeMetadata[] => {\n return Object.values(listTypeRegistry).map((entry) => entry.metadata);\n};\n\nexport const getListTypeConfig = (type: ListType): ListTypeRegistry => {\n return listTypeRegistry[type];\n};\n\nexport const getListNameByType = (type: ListType): string => {\n return listTypeRegistry[type].metadata.name;\n};\n\nexport const getListSortFieldsByType = (type: ListType): BaseListConfig<ListType>['sortOptions'] => {\n return listTypeRegistry[type].sortFields;\n};\n\n// Selection panel registry\nexport const listSelectionPanelRegistry: Record<ListType, SelectionPanelConfig> = {\n linked_resources: linkedResourcesSelectionPanelConfig,\n assets: assetsSelectionPanelConfig,\n transactions: transactionsSelectionPanelConfig,\n collections: collectionsSelectionPanelConfig,\n investments: investmentsSelectionPanelConfig,\n oracles: oraclesSelectionPanelConfig,\n pods: podsSelectionPanelConfig,\n proposals: proposalsSelectionPanelConfig,\n requests: requestsSelectionPanelConfig,\n group_members: groupMembersSelectionPanelConfig,\n validators: validatorsSelectionPanelConfig,\n dao_members: daoMembersSelectionPanelConfig,\n projects: projectsSelectionPanelConfig,\n daos: daosSelectionPanelConfig,\n balances: balancesSelectionPanelConfig,\n};\n\nexport const getSelectionPanelConfig = (type: ListType): SelectionPanelConfig => {\n return listSelectionPanelRegistry[type];\n};\n\nexport const listTypesWithAddresses = ['transactions'];\n","/* eslint-disable no-case-declarations */\n/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { Stack, Text, ActionIcon, Loader, Center, Flex, Title, Collapse, Tooltip } from '@mantine/core';\nimport { ListType, BaseListConfig, ListData, FilterOption } from '../types';\nimport {\n Asset,\n Collection,\n Transaction,\n useBlocknoteHandlers,\n Investment,\n Oracle,\n POD,\n Proposal,\n Request,\n Member,\n Validator,\n useBlocknoteContext,\n Balance,\n FormattedResource,\n} from '../../../context/BlocknoteContext';\nimport { ResourcesList } from '../linked_resources/ResourcesList';\nimport { AssetsList } from '../assets/AssetsList';\nimport { TransactionsList } from '../transactions/TransactionsList';\nimport { CollectionsList } from '../collections/CollectionsList';\nimport { BalancesList } from '../balances/BalancesList';\nimport { InvestmentsList } from '../investments/InvestmentsList';\nimport { OraclesList } from '../oracles/OraclesList';\nimport { PodsList } from '../pods/PODsList';\nimport { ProposalsList } from '../proposals/ProposalsList';\nimport { RequestsList } from '../requests/RequestsList';\nimport { MembersList } from '../members/MembersList';\nimport { ValidatorsList } from '../validators/ValidatorsList';\nimport { getListNameByType } from '../registry';\nimport { ListActionsMenu } from '../ListActionsMenu';\nimport sortListItems from '@/core/lib/sortListItems';\nimport FilterTab from '../FilterTab';\nimport filterListItems from '@/core/lib/filterListItems';\nimport { IconArrowDown, IconArrowUp, IconChevronDown, IconChevronUp, IconRefresh, IconSettings } from '@tabler/icons-react';\nimport ListPagination from '../ListPagination';\nimport { DEFAULT_PAGE_SIZE } from '@/core/constants';\nimport { DaoMembersList } from '../dao_members/MembersList';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { TemplateConfig } from '../template/TemplateConfig';\nimport { ListSelectionPanel } from '../ListSelectionPanel';\nimport { ProjectsList } from '../projects/ProjectsList';\nimport { DaosList } from '../daos/DaosList';\nimport { downloadArrayAsCsv } from '@/core/utils/files';\nimport { useDisclosure } from '@mantine/hooks';\nimport { useListBlocksUI } from '../ui/ListBlocksUIContext';\nimport { categorizeResources } from '@/core/lib/categorizeResources';\nimport BaseAlert from '@/mantine/components/Base/BaseAlert';\n\nconst LIST_FLOW_PANEL_ID = 'list-flow-panel';\nconst LIST_SELECTION_FLOW_PANEL_ID = 'list-selection-flow-panel';\n\nexport const ListFlowView: React.FC<IxoBlockProps> = ({ block, editor }) => {\n const { editable } = useBlocknoteContext();\n const [data, setData] = useState<ListData[ListType] | null>(null);\n const [loading, setLoading] = useState(false);\n const [opened, { toggle, open, close }] = useDisclosure(true);\n const [error, setError] = useState<string | null>(null);\n const [page, setPage] = useState(1);\n const [isMultiSelect, setIsMultiSelect] = useState(false);\n const [totalPages, setTotalPages] = useState(0);\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n\n // Setup panel for configuration in editable mode\n const panelId = `${LIST_FLOW_PANEL_ID}-${block.id}`;\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n const { open: openPanel } = usePanel(panelId, panelContent);\n\n const handlers = useBlocknoteHandlers();\n const listType = block.props.listType && block.props.listType !== '' ? (block.props.listType as ListType) : null;\n const { subscribe } = useListBlocksUI();\n\n // Handle panel close - clear selection state\n const handlePanelClose = useCallback(() => {\n setSelectedIds(new Set());\n }, []);\n\n const selectionPanelId = `${LIST_SELECTION_FLOW_PANEL_ID}-${block.id}`;\n const selectionPanelContent = useMemo(\n () => <ListSelectionPanel listData={data} editor={editor} block={block} selectedIds={selectedIds} listType={listType} onClose={handlePanelClose} />,\n [editor, block, selectedIds, listType, handlePanelClose]\n );\n const { open: openSelectionPanel, close: closeSelectionPanel } = usePanel(selectionPanelId, selectionPanelContent);\n\n useEffect(() => {\n if (!isMultiSelect && selectedIds.size > 1) {\n const arr = Array.from(selectedIds);\n const lastSelected = arr.length > 0 ? arr[arr.length - 1] : undefined;\n setSelectedIds(new Set(lastSelected ? [lastSelected] : []));\n }\n }, [isMultiSelect, selectedIds]);\n\n const isItemChecked = useCallback(\n (id: string) => {\n return selectedIds.has(id);\n },\n [selectedIds]\n );\n\n const onItemCheck = useCallback(\n (id: string, checked: boolean) => {\n setSelectedIds((prev) => {\n const nextSelectedIds = new Set(prev);\n\n if (!isMultiSelect) {\n if (checked) {\n openSelectionPanel();\n return new Set([id]);\n }\n nextSelectedIds.delete(id);\n closeSelectionPanel();\n return nextSelectedIds;\n }\n\n if (checked) {\n openSelectionPanel();\n nextSelectedIds.add(id);\n } else {\n nextSelectedIds.delete(id);\n if (nextSelectedIds.size === 0) {\n closeSelectionPanel();\n }\n }\n\n return nextSelectedIds;\n });\n },\n [isMultiSelect]\n );\n\n // Memoize the parsed config to prevent infinite loops\n const listConfig = useMemo(() => {\n if (block.props.listConfig && block.props.listConfig !== '{}') {\n try {\n return JSON.parse(block.props.listConfig);\n } catch (error) {\n return {};\n }\n }\n return {};\n }, [block.props.listConfig]);\n\n const listSortConfigOptions = useMemo(() => {\n if (block.props.sortOptions && block.props.sortOptions !== '{}') {\n try {\n return JSON.parse(block.props.sortOptions);\n } catch (error) {\n return {};\n }\n }\n return {};\n }, [block.props.sortOptions]);\n\n const listFilterConfigOptions = useMemo(() => {\n if (block.props.filterOptions && block.props.filterOptions !== '{}') {\n try {\n return JSON.parse(block.props.filterOptions);\n } catch (error) {\n return {};\n }\n }\n return {};\n }, [block.props.filterOptions]);\n\n const listFilterConfig = useMemo(() => {\n if (block.props.filter && block.props.filter !== '{}') {\n try {\n return JSON.parse(block.props.filter);\n } catch (error) {\n return {};\n }\n }\n return {};\n }, [block.props.filter]);\n\n const listSortConfig = useMemo(() => {\n if (block.props.sort && block.props.sort !== '{}') {\n try {\n return JSON.parse(block.props.sort);\n } catch (error) {\n return {};\n }\n }\n return {};\n }, [block.props.sort]);\n\n // Subscribe to global collapse/expand events (transient UI)\n useEffect(() => {\n const unsubscribe = subscribe((event) => {\n if (event === 'collapse') close();\n else if (event === 'expand') open();\n else toggle();\n });\n return unsubscribe;\n }, [subscribe, close, open, toggle]);\n\n const updateProps = (props: Record<string, any>) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n ...props,\n },\n });\n };\n\n const fetchData = useCallback(async () => {\n if (!handlers || !listType || !listConfig) return;\n\n setLoading(true);\n setError(null);\n\n try {\n let result;\n let did;\n let relayerDid;\n let groupIds;\n let user;\n\n switch (listType) {\n case 'linked_resources':\n did = handlers.getEntityDid();\n if (!did && !listConfig.did) throw new Error('DID is required');\n const { service, linkedResource } = await handlers.getEntity(listConfig.did || did);\n\n if (!service) return;\n\n const excludedResources = ['pge', 'flw', 'dmn', 'pri', 'lgo', 'set', 'page'];\n\n const filteredResources = linkedResource.filter(({ id }) => {\n return !excludedResources.some((tag) => id.includes(`#${tag}`));\n });\n\n const resources = categorizeResources(filteredResources, service);\n\n setData({ items: resources });\n break;\n\n case 'assets':\n did = handlers.getEntityDid();\n if (!did && !listConfig.collectionDid) throw new Error('Collection DID is required');\n\n if (listConfig.ownerBased) {\n user = handlers.getCurrentUser();\n result = await handlers.getAssets(listConfig.collectionDid || did, page, user.address);\n } else {\n result = await handlers.getAssets(listConfig.collectionDid || did, page);\n }\n\n setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));\n setData({ items: result.data });\n break;\n\n case 'transactions':\n if (!listConfig.address) throw new Error('Address is required');\n result = await handlers.getTransactions(listConfig.address, page);\n setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));\n setData({ items: result.data });\n break;\n\n case 'collections':\n relayerDid = handlers.getRelayerDid();\n if (!relayerDid && !listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getCollections(listConfig.relayedNodeDid || relayerDid, page);\n setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));\n setData({ items: result.data });\n break;\n\n case 'investments':\n relayerDid = handlers.getRelayerDid();\n if (!relayerDid && !listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getInvestments(listConfig.relayedNodeDid || relayerDid, page);\n setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));\n setData({ items: result.data });\n break;\n\n case 'oracles':\n relayerDid = handlers.getRelayerDid();\n if (!relayerDid && !listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getOracles(listConfig.relayedNodeDid || relayerDid, page);\n setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));\n setData({ items: result.data });\n break;\n\n case 'pods':\n relayerDid = handlers.getRelayerDid();\n if (!relayerDid && !listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getPODs(listConfig.relayedNodeDid || relayerDid, page);\n setData({ items: result.data });\n break;\n\n case 'proposals':\n if (!listConfig.groupCoreAddress) throw new Error('GroupCoreAddress is required');\n result = await handlers.getProposals(listConfig.groupCoreAddress, page);\n setData({ items: result.data });\n break;\n\n case 'requests':\n relayerDid = handlers.getRelayerDid();\n if (!relayerDid && !listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getRequests(listConfig.relayedNodeDid || relayerDid, page);\n setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));\n setData({ items: result.data });\n break;\n case 'projects':\n relayerDid = handlers.getRelayerDid();\n if (!relayerDid && !listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getProjects(listConfig.relayedNodeDid || relayerDid, page);\n setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));\n setData({ items: result.data });\n break;\n case 'daos':\n relayerDid = handlers.getRelayerDid();\n if (!relayerDid && !listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getDaos(listConfig.relayedNodeDid || relayerDid, page);\n setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));\n setData({ items: result.data });\n break;\n case 'group_members':\n if (!listConfig.address) throw new Error('Address is required');\n if (!listConfig.groupCoreAddress) throw new Error('Group Core Address is required');\n result = await handlers.getMembers(listConfig.address, listConfig.groupCoreAddress, listConfig.withBalance, page);\n setData({ items: result.data });\n break;\n\n case 'validators':\n relayerDid = handlers.getRelayerDid();\n if (!relayerDid && !listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getValidators(listConfig.relayedNodeDid || relayerDid, page);\n setData({ items: result.data });\n break;\n\n case 'balances':\n user = handlers.getCurrentUser();\n if (!user.address && !listConfig.address) throw new Error('Address is required');\n result = await handlers.getBalances(listConfig.address || user.address);\n setData({ items: result.data });\n break;\n\n case 'dao_members':\n user = handlers.getCurrentUser();\n groupIds = await handlers.getDaoGroupsIds();\n if (!user.address && !listConfig.address) throw new Error('Address is required');\n if (!groupIds && !listConfig.groupIds) throw new Error('Group Ids are required');\n result = await handlers.getDaoMembers(listConfig.address || user.address, listConfig.groupIds || groupIds, listConfig.withBalance, page);\n setData({ items: result.data });\n break;\n\n default:\n throw new Error(`Unknown list type: ${listType}`);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch data');\n } finally {\n setLoading(false);\n }\n }, [handlers, page, listType, listConfig]);\n\n // Fetch data when configuration changes\n useEffect(() => {\n if (listType && listConfig) {\n fetchData();\n }\n }, [listType, page, listConfig]);\n\n const handleFilterChange = (filterOption: BaseListConfig<ListType>['filter']) => {\n if (filterOption?.key === listFilterConfig?.key && filterOption?.value === listFilterConfig?.value) {\n return updateProps({ filter: null });\n }\n updateProps({ filter: JSON.stringify(filterOption) });\n };\n\n const handleSortChange = (sortOption: BaseListConfig<ListType>['sort']) => {\n if (sortOption?.key === listSortConfig?.key && sortOption?.direction === listSortConfig?.direction) {\n return updateProps({ sort: null });\n }\n\n updateProps({ sort: JSON.stringify(sortOption) });\n };\n\n const sortedData = useMemo(() => {\n if (!data) return null;\n\n return sortListItems(data, listSortConfig);\n }, [data?.items, listSortConfig]);\n\n const filteredData = useMemo(() => {\n if (!listFilterConfig?.key) return sortedData;\n if (!sortedData) return null;\n\n return filterListItems(sortedData, listFilterConfig);\n }, [data?.items, sortedData, listFilterConfig]);\n\n const renderListComponent = () => {\n if (!filteredData || !listType) return null;\n\n switch (listType) {\n case 'linked_resources':\n return (\n <ResourcesList items={filteredData as FormattedResource[]} config={listConfig} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />\n );\n\n case 'assets':\n return <AssetsList items={filteredData as Asset[]} config={listConfig} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'transactions':\n return <TransactionsList items={filteredData as Transaction[]} config={listConfig} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'collections':\n return <CollectionsList items={filteredData as Collection[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'balances':\n return <BalancesList items={filteredData as Balance[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'investments':\n return <InvestmentsList items={filteredData as Investment[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'oracles':\n return <OraclesList items={filteredData as Oracle[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'pods':\n return <PodsList items={filteredData as POD[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'proposals':\n return <ProposalsList items={filteredData as Proposal[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'requests':\n return <RequestsList items={filteredData as Request[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'projects':\n return <ProjectsList items={filteredData as Request[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'daos':\n return <DaosList items={filteredData as Request[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'group_members':\n return <MembersList items={filteredData as Member[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'dao_members':\n return <DaoMembersList items={filteredData as Member[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'validators':\n return <ValidatorsList items={filteredData as Validator[]} isMultiSelect={isMultiSelect} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n default:\n return null;\n }\n };\n\n if (!listType) {\n return (\n <Center py=\"xl\">\n <Text size=\"sm\" c=\"dimmed\">\n List not configured\n </Text>\n </Center>\n );\n }\n\n return (\n <Stack w=\"100%\">\n <Flex px={5} align=\"center\" justify=\"space-between\">\n <Title order={4}>{getListNameByType(listType)}</Title>\n <Tooltip label={opened ? 'Collapse' : 'Expand'} withArrow>\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={toggle} aria-label={opened ? 'Collapse' : 'Expand'}>\n {opened ? <IconChevronUp size={18} /> : <IconChevronDown size={18} />}\n </ActionIcon>\n </Tooltip>\n </Flex>\n <Collapse pb={5} px={5} in={opened}>\n <Stack mih={totalPages !== 1 ? 500 : undefined} w=\"100%\">\n <Flex align=\"center\" gap=\"xs\">\n {listSortConfig?.key && (\n <Flex align=\"center\">\n <Text size=\"xs\">\n {listSortConfig.key\n ?.replace(/([A-Z])/g, ' $1') // insert space before capital letters\n .replace(/^./, (str: string) =>\n str.toUpperCase()\n ) // capitalize first letter\n }{' '}\n </Text>\n <Text lh={0.5}>\n {listSortConfig.direction === 'asc' && <IconArrowUp size={18} />}\n {listSortConfig.direction === 'desc' && <IconArrowDown size={18} />}\n </Text>\n </Flex>\n )}\n {isMultiSelect && <Text lh={0.5}>Multi Selection</Text>}\n </Flex>\n <Flex justify=\"space-between\">\n <Flex gap=\"xs\" align=\"center\">\n <FilterTab key=\"All\" label=\"All\" isActive={!listFilterConfig?.key} onClick={() => handleFilterChange(null)} />\n {Array.isArray(listFilterConfigOptions) &&\n listFilterConfigOptions.length > 0 &&\n (listFilterConfigOptions as FilterOption[]).map(({ key, label, type }) => (\n <FilterTab\n key={label}\n label={label}\n isActive={listFilterConfig?.key === key && listFilterConfig?.value === type}\n onClick={() => handleFilterChange({ key, value: type })}\n />\n ))}\n </Flex>\n <Flex gap=\"xs\">\n <Tooltip label=\"Refresh\" withArrow>\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={fetchData} loading={loading}>\n <IconRefresh size={18} />\n </ActionIcon>\n </Tooltip>\n\n {editable && (\n <Tooltip label=\"Settings\" withArrow>\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={openPanel}>\n <IconSettings size={18} />\n </ActionIcon>\n </Tooltip>\n )}\n\n {listConfig && listSortConfigOptions && listSortConfigOptions?.length > 0 && (\n <ListActionsMenu\n isMultiSelect={isMultiSelect}\n setIsMultiSelect={setIsMultiSelect}\n options={listSortConfigOptions}\n value={listSortConfig}\n onChange={(sortOption) => handleSortChange(sortOption)}\n onDownloadCsv={data?.items ? () => downloadArrayAsCsv(data.items) : undefined}\n />\n )}\n </Flex>\n </Flex>\n {/* Content */}\n <Flex flex={1}>\n {loading ? (\n <Center py=\"xl\" w=\"100%\">\n <Loader size=\"md\" mx=\"auto\" />\n </Center>\n ) : error ? (\n <BaseAlert onRetry={fetchData} errMsg={error} />\n ) : (\n <Stack flex={1}>\n <Stack gap=\"md\">\n {renderListComponent()}\n <ListPagination\n page={page}\n setPage={(page) => {\n setPage(page);\n }}\n totalPages={totalPages}\n />\n </Stack>\n </Stack>\n )}\n </Flex>\n </Stack>\n </Collapse>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Text, Box, Flex } from '@mantine/core';\nimport { IconPdf, IconFileTypeHtml, IconJson, IconPhoto, IconFileText, IconFile } from '@tabler/icons-react';\nimport { LinkedResourcesData, LinkedResourcesConfig } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface LinkedResourcesListProps {\n items: LinkedResourcesData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n config?: Partial<LinkedResourcesConfig>;\n}\n\nconst iconResourceFormatsDictionary = {\n pdf: IconPdf,\n html: IconFileTypeHtml,\n json: IconJson,\n jsonld: IconJson,\n imagePng: IconPhoto,\n text: IconFileText,\n};\nconst resourcesDescriptions = {\n pdf: 'PDF',\n html: 'Web',\n json: 'Structured Data',\n jsonld: 'Linked Data',\n imagePng: 'PNG',\n text: 'Text',\n};\n\nexport const ResourcesList: React.FC<LinkedResourcesListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck, config: _config }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No linked resources found\n </Text>\n );\n }\n\n const rows = items.map((item, index) => {\n const title = item.description || item.id || `Resource ${index + 1}`;\n const isChecked = isItemChecked?.(item.id);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.id, !isChecked)} key={item.id || index} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Box\n style={{\n width: 32,\n height: 32,\n borderRadius: 6,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {(() => {\n const IconComponent = item.format && iconResourceFormatsDictionary[item.format] ? iconResourceFormatsDictionary[item.format] : IconFile;\n return <IconComponent size={32} />;\n })()}\n </Box>\n <Stack gap={0}>\n <Text size=\"sm\">{title}</Text>\n {item.format && (\n <Text size=\"xs\" c=\"dimmed\">\n {resourcesDescriptions[item.format]}\n </Text>\n )}\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">{item?.access ? 'Public' : 'Private'}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {item?.access ? 'Accessible' : 'Ask for access'}\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox\n ariaLabel={`Select resource ${item.id}`}\n checked={item.id ? isItemChecked?.(item.id) : false}\n onCheck={(checked) => item.id && onItemCheck?.(item.id, checked)}\n />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import { Center, Flex, Paper, Tooltip } from '@mantine/core';\nimport { IconPlayerPlay } from '@tabler/icons-react';\nimport React, { PropsWithChildren } from 'react';\n\ninterface ListItemContainerProps {\n isChecked: boolean;\n onClick: () => void | undefined;\n withIcon?: boolean;\n disabled?: boolean;\n tooltip?: string;\n tooltipPosition?: 'top' | 'right' | 'bottom' | 'left';\n}\n\nexport default function ListItemContainer({\n children,\n withIcon = false,\n onClick,\n isChecked,\n disabled = false,\n tooltip,\n tooltipPosition = 'left',\n}: PropsWithChildren<ListItemContainerProps>) {\n const content = (\n <Flex\n onClick={disabled ? undefined : onClick}\n styles={{\n root: {\n borderRadius: 16,\n border: isChecked ? `1px solid rgb(0, 255, 157)` : `1px solid rgba(255, 255, 255, 0.06)`,\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n },\n }}\n p={20}\n bg=\"rgba(255, 255, 255, 0.02)\"\n justify=\"space-between\"\n >\n {children}\n {withIcon && (\n <Paper ml={12} w={28} h={28} radius=\"xl\" bg=\"rgb(0, 255, 157,0.2)\">\n <Center w={28} h={28}>\n <IconPlayerPlay size={20} color=\"rgb(0, 255, 157)\" />\n </Center>\n </Paper>\n )}\n </Flex>\n );\n\n if (tooltip) {\n return (\n <Tooltip label={tooltip} disabled={!disabled} position={tooltipPosition} withArrow>\n {content}\n </Tooltip>\n );\n }\n\n return content;\n}\n","import React from 'react';\nimport { Checkbox } from '@mantine/core';\n\ninterface ListItemCheckboxProps {\n checked?: boolean;\n onCheck?: (checked: boolean) => void;\n ariaLabel?: string;\n}\n\nexport default function ListItemCheckbox({ checked, onCheck, ariaLabel }: ListItemCheckboxProps) {\n return (\n <Checkbox\n aria-label={ariaLabel || 'Select row'}\n checked={checked}\n onChange={(e) => onCheck?.(e.currentTarget.checked)}\n size=\"md\"\n color=\"rgb(0, 255, 157)\"\n styles={{\n input: {\n width: 22,\n height: 22,\n },\n }}\n />\n );\n}\n","import React from 'react';\nimport { Text, Box, Stack, Flex, Image } from '@mantine/core';\nimport { AssetsData, AssetsConfig } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport { formatNumber } from '@/core/lib/formatters';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface AssetsListProps {\n items: AssetsData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n config?: Partial<AssetsConfig>;\n}\n\nexport const AssetsList: React.FC<AssetsListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No assets found\n </Text>\n );\n }\n\n const rows = items.map((asset) => {\n const isChecked = isItemChecked?.(asset.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(asset.did, !isChecked)} key={asset.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={asset.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">\n {asset.name || '-'} {asset.alsoKnownAs || '-'}\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n {asset.issuer || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">\n {asset.currency || ''}\n {formatNumber(asset.price)}\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n {asset.owned ? 'Owned' : 'Not Owned'}\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox ariaLabel={`Select asset ${asset.did}`} checked={isItemChecked?.(asset.did)} onCheck={(checked) => onItemCheck?.(asset.did, checked)} />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","export const formatNumber = (value: number | undefined | null) => (typeof value === 'number' ? value.toLocaleString() : '-');\n\n/**\n * Truncates a string if it exceeds a specified threshold length.\n * @param str - The string to be truncated.\n * @param threshold - The maximum length of the string before truncation. Default is 30.\n * @param saveSymbolsAtTheEnd - The number of symbols to save at the end of the truncated string. Default is 10.\n * @param insert - The string to insert in place of the truncated characters. Default is \"...\".\n * @returns The truncated string if it exceeds the threshold length, otherwise the original string.\n */\nexport default function shortStr(str?: string, threshold = 30, saveSymbolsAtTheEnd = 10, insert = '...'): string | undefined {\n if (!str) return str;\n\n const len = str.length;\n if (len <= threshold) return str;\n\n const ending = saveSymbolsAtTheEnd ? str.slice(-1 * saveSymbolsAtTheEnd) : '';\n const beginning = str.substring(0, threshold - saveSymbolsAtTheEnd - insert.length);\n\n return `${beginning}${insert}${ending}`;\n}\n","import React from 'react';\nimport { Text, Badge, Tooltip, Box, Flex, Stack } from '@mantine/core';\nimport { TransactionsData, TransactionsConfig } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface TransactionsListProps {\n items: TransactionsData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n config?: Partial<TransactionsConfig>;\n}\n\nconst formatTime = (timeStr: string): string => {\n try {\n const date = new Date(timeStr);\n return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();\n } catch {\n return timeStr;\n }\n};\n\nconst truncateHash = (hash?: string, length: number = 8): string => {\n if (hash && hash.length <= length * 2) return hash;\n return `${hash?.slice(0, length)}...${hash?.slice(-length)}`;\n};\n\nexport const TransactionsList: React.FC<TransactionsListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck, config: _config }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No transactions found\n </Text>\n );\n }\n\n const rows = items.map((transaction) => {\n const isChecked = isItemChecked?.(transaction.transactionHash);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(transaction.transactionHash, !isChecked)} key={transaction.transactionHash} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Stack gap={2}>\n <Tooltip label={transaction.transactionHash} position=\"top\">\n <Text size=\"sm\" style={{ fontFamily: 'monospace' }}>\n {truncateHash(transaction.transactionHash)}\n </Text>\n </Tooltip>\n <Text size=\"sm\" c=\"dimmed\">\n {transaction.memo || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={2}>\n <Badge size=\"sm\" variant=\"light\" color=\"blue\" style={{ fontFamily: 'monospace', fontSize: '10px' }}>\n {transaction.typeUrl}\n </Badge>\n <Text size=\"xs\" c=\"dimmed\">\n {formatTime(transaction.time)}\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox\n ariaLabel={`Select transaction ${transaction.transactionHash}`}\n checked={isItemChecked?.(transaction.transactionHash)}\n onCheck={(checked) => onItemCheck?.(transaction.transactionHash, checked)}\n />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex } from '@mantine/core';\nimport { CollectionsData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface CollectionsListProps {\n items: CollectionsData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const CollectionsList: React.FC<CollectionsListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No collections found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{item.name}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {item.brand}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">{item.totalAssets} Assets</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {item.currency}\n {item.price}\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox ariaLabel={`Select collection ${item.did}`} checked={isItemChecked?.(item.did)} onCheck={(checked) => onItemCheck?.(item.did, checked)} />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Text, Box, Stack, Flex, Avatar, Group } from '@mantine/core';\nimport { BalancesData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\nimport { renderNumber } from '@/core/utils/numbers';\n\ninterface BalancesListProps {\n items: BalancesData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const BalancesList: React.FC<BalancesListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No balances found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.denom);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.denom, !isChecked)} key={item.denom} isChecked={!!isChecked}>\n <Group gap={12}>\n <Avatar src={item.tokenImage} size={40} radius=\"xl\" />\n <Stack gap={4}>\n <Text size=\"sm\" fw={500}>\n {item.tokenName}\n </Text>\n {item.chainCount > 1 && (\n <Group gap={4}>\n <Text size=\"xs\" c=\"dimmed\">\n {item.chainCount} chains\n </Text>\n {/* Chain icons would go here - simplified for now */}\n <Group gap={-4}>\n <Avatar size={16} radius=\"xl\" bg=\"dimmed\" />\n <Avatar size={16} radius=\"xl\" bg=\"dimmed\" ml={-4} />\n {item.chainCount > 2 && <Avatar size={16} radius=\"xl\" bg=\"dimmed\" ml={-4} />}\n </Group>\n </Group>\n )}\n </Stack>\n </Group>\n <Flex align=\"center\" gap=\"md\">\n <Stack gap={4} align=\"flex-end\">\n <Text size=\"sm\" fw={500}>\n {renderNumber(item.amount)}\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n ${renderNumber(item.usdAmount)}\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox ariaLabel={`Select balance ${item.denom}`} checked={isItemChecked?.(item.denom)} onCheck={(checked) => onItemCheck?.(item.denom, checked)} />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","export const numberFormatter = (num: number, digits: number) => {\n const lookup = [\n { value: 1, symbol: '' },\n { value: 1e3, symbol: 'k' },\n { value: 1e6, symbol: 'M' },\n { value: 1e9, symbol: 'G' },\n { value: 1e12, symbol: 'T' },\n { value: 1e15, symbol: 'P' },\n { value: 1e18, symbol: 'E' },\n ];\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n const item = lookup\n .slice()\n .reverse()\n .find((lookupItem) => num >= lookupItem.value);\n return item ? (num / item.value).toFixed(digits).replace(rx, '$1') + item.symbol : '0';\n};\n\nexport const microAmountToAmount = (microAmount: number, microUnits: number = 6) => {\n const amount = (microAmount ?? 0) / Math.pow(10, microUnits);\n return amount;\n};\n\nexport function renderNumber(value: number | undefined): string {\n if (value === 0) return '0';\n if (!value) return '';\n\n const formattedValue = value.toLocaleString(undefined, { minimumFractionDigits: 0, maximumFractionDigits: 6 });\n\n return formattedValue;\n}\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex, Progress } from '@mantine/core';\nimport { InvestmentsData } from './types';\nimport { formatNumber } from '@/core/lib/formatters';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface InvestmentsListProps {\n items: InvestmentsData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const InvestmentsList: React.FC<InvestmentsListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No investments found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{item.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {item.brand || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Flex gap=\"5px\">\n <Text size=\"sm\">{item.currency + formatNumber(item.currentAmount)}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n / {item.currency + formatNumber(item.maxAmount)}\n </Text>\n </Flex>\n <Text size=\"xs\" c=\"dimmed\">\n <Progress color=\"rgb(0, 255, 157)\" radius=\"xl\" size=\"lg\" value={(item.currentAmount * 100) / item.maxAmount} />\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox ariaLabel={`Select investment ${item.did}`} checked={isItemChecked?.(item.did)} onCheck={(checked) => onItemCheck?.(item.did, checked)} />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex } from '@mantine/core';\nimport { OraclesData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface OraclesListProps {\n items: OraclesData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const OraclesList: React.FC<OraclesListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No oracles found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{item.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {item.brand || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">{item.currency || '-'}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {item.minPoints} - {item.maxPoints} pts\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n {item.flowsAmount} Flows\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox ariaLabel={`Select oracle ${item.did}`} checked={isItemChecked?.(item.did)} onCheck={(checked) => onItemCheck?.(item.did, checked)} />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex } from '@mantine/core';\nimport { PodsData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface PodsListProps {\n items: PodsData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const PodsList: React.FC<PodsListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No PODs found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{item.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {item.startDate} → {item.endDate}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">{item.members} Members</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {item.totalProposals} Proposals\n </Text>\n </Stack>\n {isMultiSelect && <ListItemCheckbox ariaLabel={`Select POD ${item.did}`} checked={isItemChecked?.(item.did)} onCheck={(checked) => onItemCheck?.(item.did, checked)} />}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex, Badge } from '@mantine/core';\nimport { ProposalsData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface ProposalsListProps {\n items: ProposalsData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const ProposalsList: React.FC<ProposalsListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No proposals found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{item.name || '-'}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {item.description || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" align=\"end\" gap={0}>\n <Badge size=\"sm\" variant=\"light\" color=\"blue\" style={{ fontFamily: 'monospace', fontSize: '10px' }}>\n {item.status}\n </Badge>\n <Text size=\"sm\" c=\"dimmed\">\n {item.isVotedOn ? 'Voted' : 'Not voted'}\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox ariaLabel={`Select proposal ${item.did}`} checked={isItemChecked?.(item.did)} onCheck={(checked) => onItemCheck?.(item.did, checked)} />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex } from '@mantine/core';\nimport { RequestsData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface RequestsListProps {\n items: RequestsData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const RequestsList: React.FC<RequestsListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No requests found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{item.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {item.brand || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\" c=\"dimmed\">\n {item.currency || ''}\n {item.budget ?? '-'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n {item.totalApplications ?? 0} Applications\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox ariaLabel={`Select request ${item.did}`} checked={isItemChecked?.(item.did)} onCheck={(checked) => onItemCheck?.(item.did, checked)} />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex } from '@mantine/core';\nimport { GroupMembersData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface MembersListProps {\n items: GroupMembersData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const MembersList: React.FC<MembersListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No members found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{item.username || '-'}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {item.address || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">{item.percentage}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {item.role}\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox ariaLabel={`Select member ${item.did}`} checked={isItemChecked?.(item.did)} onCheck={(checked) => onItemCheck?.(item.did, checked)} />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex } from '@mantine/core';\nimport { ValidatorsData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\nimport { getDisplayDelegatedTokensFromValidator } from '@/core/lib/validators';\nimport { numberFormatter } from '@/core/utils/numbers';\n\ninterface ValidatorsListProps {\n items: ValidatorsData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const ValidatorsList: React.FC<ValidatorsListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No validators found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{item.name || '-'}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {item.description || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">\n {numberFormatter(getDisplayDelegatedTokensFromValidator(item), 2)} {item.currency}\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n {item.commission}% fee\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n {item.isActive ? 'Active' : 'Inactive'} • {item.isStaked ? 'Staked' : 'Not staked'} • {item.isBonding ? 'Bonding' : 'Not bonding'}\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox ariaLabel={`Select validator ${item.did}`} checked={isItemChecked?.(item.did)} onCheck={(checked) => onItemCheck?.(item.did, checked)} />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import { Validator } from '@/mantine/context/BlocknoteContext';\nimport { microAmountToAmount } from '../utils/numbers';\n\nexport const getDelegatedTokensFromValidator = (validator: Validator) => Number(validator?.amount ?? 0);\n\nexport const getDisplayDelegatedTokensFromValidator = (validator: Validator) => microAmountToAmount(getDelegatedTokensFromValidator(validator), 6);\n","import React, { Dispatch, useState } from 'react';\nimport { Menu, Text, ActionIcon, Flex, Box, Collapse, Tooltip } from '@mantine/core';\nimport {\n IconArrowDown,\n IconArrowUp,\n IconAdjustments,\n IconCheckbox,\n IconAdjustmentsHorizontal,\n IconDownload,\n IconSearch,\n IconChevronRight,\n IconChevronDown,\n} from '@tabler/icons-react';\nimport { SortOption } from './types';\n\nexport type SortDirection = 'asc' | 'desc';\n\ninterface ListActionsMenuProps {\n options: SortOption[];\n value?: { key: string; direction: SortDirection } | null;\n onChange: (next: { key: string; direction: SortDirection } | null) => void;\n setIsMultiSelect: Dispatch<React.SetStateAction<boolean>>;\n isMultiSelect: boolean;\n onDownloadCsv?: () => void;\n onSearchToggle?: () => void;\n isSearchActive?: boolean;\n}\n\n// Compact sort row component\nconst SortRow: React.FC<{\n opt: SortOption;\n value: { key: string; direction: SortDirection } | null | undefined;\n onChange: (next: { key: string; direction: SortDirection } | null) => void;\n}> = ({ opt, value, onChange }) => {\n const isAscActive = value?.key === opt.key && value?.direction === 'asc';\n const isDescActive = value?.key === opt.key && value?.direction === 'desc';\n const isRowActive = isAscActive || isDescActive;\n\n return (\n <Box\n px=\"sm\"\n py={6}\n style={{\n backgroundColor: isRowActive ? 'var(--mantine-color-dark-5)' : 'transparent',\n borderRadius: 4,\n margin: '2px 4px',\n }}\n >\n <Flex align=\"center\" justify=\"space-between\" gap=\"xs\">\n <ActionIcon\n variant=\"subtle\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n if (isAscActive) {\n onChange(null); // Clear sort if clicking active\n } else {\n onChange({ key: opt.key, direction: 'asc' });\n }\n }}\n style={{\n color: isAscActive ? 'var(--mantine-color-blue-4)' : 'var(--mantine-color-dark-2)',\n }}\n >\n <IconArrowUp size={14} />\n </ActionIcon>\n <Text\n fz=\"sm\"\n style={{\n flex: 1,\n textAlign: 'center',\n }}\n >\n {opt.label}\n </Text>\n <ActionIcon\n variant=\"subtle\"\n size=\"xs\"\n onClick={(e) => {\n e.stopPropagation();\n if (isDescActive) {\n onChange(null); // Clear sort if clicking active\n } else {\n onChange({ key: opt.key, direction: 'desc' });\n }\n }}\n style={{\n color: isDescActive ? 'var(--mantine-color-blue-4)' : 'var(--mantine-color-dark-2)',\n }}\n >\n <IconArrowDown size={14} />\n </ActionIcon>\n </Flex>\n </Box>\n );\n};\n\nexport const ListActionsMenu: React.FC<ListActionsMenuProps> = ({ options, isMultiSelect, setIsMultiSelect, value, onChange, onDownloadCsv, onSearchToggle, isSearchActive }) => {\n const [orderByCollapsed, setOrderByCollapsed] = useState(true);\n\n return (\n <Menu\n shadow=\"md\"\n styles={{\n dropdown: {\n minWidth: 200,\n backgroundColor: 'var(--mantine-color-dark-7)',\n borderColor: 'var(--mantine-color-dark-4)',\n },\n item: {\n color: '#fff',\n backgroundColor: 'var(--mantine-color-dark-7)',\n '&:hover': {\n backgroundColor: 'var(--mantine-color-dark-6)',\n },\n '&[data-active=\"true\"]': {\n backgroundColor: 'var(--mantine-color-dark-5)',\n },\n },\n label: {\n color: '#fff',\n },\n divider: {\n borderColor: 'var(--mantine-color-dark-4)',\n },\n }}\n >\n <Menu.Target>\n <Tooltip label=\"Actions\" withArrow>\n <ActionIcon variant=\"subtle\" size=\"sm\" aria-label=\"List actions\" title=\"List actions\">\n <IconAdjustmentsHorizontal size={18} />\n </ActionIcon>\n </Tooltip>\n </Menu.Target>\n <Menu.Dropdown>\n <Menu.Label onClick={() => setOrderByCollapsed(!orderByCollapsed)} style={{ cursor: 'pointer' }}>\n <Flex align=\"center\" gap={10}>\n {orderByCollapsed ? <IconChevronRight size={14} /> : <IconChevronDown size={14} />}\n <Text fz=\"14\">Order By</Text>\n </Flex>\n </Menu.Label>\n <Collapse in={!orderByCollapsed}>\n {options.map((opt) => (\n <SortRow key={opt.key} opt={opt} value={value} onChange={onChange} />\n ))}\n </Collapse>\n {onSearchToggle && (\n <>\n <Menu.Divider />\n <Menu.Item onClick={onSearchToggle} leftSection={<IconSearch size={16} />} data-active={isSearchActive}>\n Search\n </Menu.Item>\n </>\n )}\n <Menu.Divider />\n <Menu.Item leftSection={<IconAdjustments size={16} />}>Smart Filter</Menu.Item>\n <Menu.Divider />\n <Menu.Item onClick={() => setIsMultiSelect(!isMultiSelect)} leftSection={<IconCheckbox size={16} />}>\n Multi Select\n </Menu.Item>\n {onDownloadCsv && (\n <>\n <Menu.Divider />\n <Menu.Item onClick={onDownloadCsv} leftSection={<IconDownload size={16} />}>\n Download CSV\n </Menu.Item>\n </>\n )}\n </Menu.Dropdown>\n </Menu>\n );\n};\n","import { BaseListConfig, ListType } from '@/mantine/blocks/list';\nimport { AssetsData } from '@/mantine/blocks/list/assets/types';\nimport { CollectionsData } from '@/mantine/blocks/list/collections/types';\nimport { LinkedResourcesData } from '@/mantine/blocks/list/linked_resources/types';\nimport { InvestmentsData } from '@/mantine/blocks/list/investments/types';\nimport { OraclesData } from '@/mantine/blocks/list/oracles/types';\nimport { ProposalsData } from '@/mantine/blocks/list/proposals/types';\nimport { RequestsData } from '@/mantine/blocks/list/requests/types';\nimport { TransactionsData } from '@/mantine/blocks/list/transactions/types';\nimport { PodsData } from '@/mantine/blocks/list/pods/types';\nimport { GroupMembersData } from '@/mantine/blocks/list/members/types';\nimport { ValidatorsData } from '@/mantine/blocks/list/validators/types';\nimport { BalancesData } from '@/mantine/blocks/list/balances/types';\nimport { DaoMembersData } from '@/mantine/blocks/list/dao_members/types';\nimport { DaosData } from '@/mantine/blocks/list/daos/types';\nimport { ProjectsData } from '@/mantine/blocks/list/projects/types';\n\nexport default function sortListItems(\n data:\n | LinkedResourcesData\n | AssetsData\n | TransactionsData\n | CollectionsData\n | InvestmentsData\n | OraclesData\n | PodsData\n | ProposalsData\n | RequestsData\n | GroupMembersData\n | ValidatorsData\n | BalancesData\n | DaoMembersData\n | ProjectsData\n | DaosData,\n sortOption: BaseListConfig<ListType>['sort']\n) {\n if (!sortOption) return data.items;\n const field = sortOption.key as keyof (typeof data.items)[number];\n const dir = sortOption.direction === 'asc' ? 1 : -1;\n\n return [...data.items].sort((a: any, b: any) => {\n const aVal = a?.[field];\n const bVal = b?.[field];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n if (typeof aVal === 'number' && typeof bVal === 'number') return (aVal - bVal) * dir;\n const aNum = Number(aVal);\n const bNum = Number(bVal);\n if (!Number.isNaN(aNum) && !Number.isNaN(bNum)) return (aNum - bNum) * dir;\n return String(aVal).localeCompare(String(bVal)) * dir;\n });\n}\n","import React from 'react';\nimport { UnstyledButton, Text } from '@mantine/core';\n\ntype Props = {\n onClick: () => void;\n label: string;\n isActive: boolean;\n};\n\nexport default function FilterTab({ onClick, label, isActive }: Props) {\n return (\n <UnstyledButton\n onClick={onClick}\n role=\"tab\"\n aria-selected={isActive}\n styles={{\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingInline: 16,\n paddingBlock: 10,\n borderRadius: 16,\n background: isActive ? 'rgba(255, 255, 255, 0.12)' : 'transparent',\n transition: 'background 120ms ease',\n },\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n }}\n onMouseEnter={(e) => {\n if (!isActive) (e.currentTarget as HTMLButtonElement).style.background = 'rgba(255, 255, 255, 0.06)';\n }}\n onMouseLeave={(e) => {\n if (!isActive) (e.currentTarget as HTMLButtonElement).style.background = 'transparent';\n }}\n >\n <Text size=\"sm\" fw={500}>\n {label}\n </Text>\n </UnstyledButton>\n );\n}\n","import { BaseListConfig, ListType } from '@/mantine/blocks/list';\nimport {\n Asset,\n Collection,\n Investment,\n Oracle,\n POD,\n Proposal,\n Transaction,\n Request,\n Member,\n Validator,\n Balance,\n Project,\n Dao,\n FormattedResource,\n} from '@/mantine/context/BlocknoteContext';\n\nexport default function filterListItems(\n items: (FormattedResource | Asset | Transaction | Collection | Investment | Oracle | POD | Proposal | Request | Member | Validator | Balance | Project | Dao | Validator)[],\n filterOption: BaseListConfig<ListType>['filter']\n) {\n if (!filterOption) return items;\n const field = filterOption.key;\n\n return [...items].filter((item: any) => {\n const raw = item?.[field];\n\n if (raw === null || raw === undefined) return false;\n\n const itemValue = typeof raw === 'string' ? (raw.trim().toLowerCase() === 'true' ? true : raw.trim().toLowerCase() === 'false' ? false : raw) : raw;\n\n return itemValue === filterOption.value;\n });\n}\n","import React from 'react';\nimport { Pagination } from '@mantine/core';\n\ntype Props = {\n page: number;\n setPage: (page: number) => void;\n totalPages: number;\n};\n\nexport default function ListPagination({ page, setPage, totalPages }: Props) {\n return (\n <Pagination\n value={page}\n onChange={setPage}\n total={totalPages}\n siblings={1}\n radius={8}\n color=\"rgba(255, 255, 255, 0.08)\"\n boundaries={0}\n mx=\"auto\"\n styles={{\n dots: { display: 'none' },\n control: {\n padding: 0,\n border: 0,\n color: '#868e96',\n },\n }}\n />\n );\n}\n","export const DEFAULT_PAGE_SIZE = 5;\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex } from '@mantine/core';\nimport { DaoMembersData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface DaoMembersLisProps {\n items: DaoMembersData['items'];\n isMultiSelect?: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const DaoMembersList: React.FC<DaoMembersLisProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No members found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\" fw={500}>\n {item.username || 'Unknown User'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" lineClamp={1}>\n {item.address || 'No address'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\" fw={500} c=\"blue\">\n {item.percentage || '0%'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" tt=\"capitalize\">\n {item.role || 'member'}\n </Text>\n </Stack>\n {isMultiSelect && (\n <ListItemCheckbox\n ariaLabel={`Select member ${item.username || item.did}`}\n checked={isItemChecked?.(item.did) || false}\n onCheck={(checked) => onItemCheck?.(item.did, checked)}\n />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack gap=\"xs\">{rows}</Stack>\n </Box>\n );\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Paper, CloseButton, Stack, Alert, Text, Loader, Center } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport { ListData, ListType } from './types';\nimport { getSelectionPanelConfig } from './registry';\nimport { SelectionPanelHeader, SelectionPrompts, SelectionActionSections, SelectionPanelEmpty } from './components/SelectionPanelContent';\n\ninterface ListSelectionPanelProps extends IxoBlockProps {\n selectedIds: Set<string>;\n listType: ListType | null;\n listData: ListData[ListType] | null;\n /** Callback when panel is closed - used to sync selection state with parent */\n onClose?: () => void;\n}\n\nexport const ListSelectionPanel = ({ selectedIds, listData, listType, onClose }: ListSelectionPanelProps) => {\n const { closePanel } = usePanelStore();\n const handlers = useBlocknoteHandlers();\n\n // Handle close - notify parent to clear selection\n const handleClose = () => {\n closePanel();\n onClose?.();\n };\n\n const [itemData, setItemData] = useState<any>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Get the last selected item ID (for single selection mode)\n const selectedItemId = useMemo(() => {\n if (selectedIds.size === 0) return null;\n const idsArray = Array.from(selectedIds);\n return idsArray[idsArray.length - 1];\n }, [selectedIds]);\n\n // Get selection panel config for the list type\n const panelConfig = useMemo(() => {\n if (!listType) return null;\n return getSelectionPanelConfig(listType);\n }, [listType]);\n\n // Fetch item details when panel opens and we have a selected item\n useEffect(() => {\n const fetchItemDetails = async () => {\n if (!selectedItemId || !listType || !handlers || !panelConfig) {\n setItemData(null);\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const handlerKey = panelConfig.detailsHandlerKey;\n const handler = handlers[handlerKey as keyof typeof handlers];\n\n if (typeof handler === 'function') {\n const listItemData = (listData?.items as any[])?.find((item: any) => item?.id === selectedItemId || item?.did === selectedItemId);\n const details = await (handler as any)(selectedItemId, listItemData);\n setItemData(details);\n } else {\n // If no detail handler is provided, use the item data from the list\n // This is a fallback for when frontend doesn't provide detail handlers\n setItemData({ id: selectedItemId });\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch item details');\n } finally {\n setLoading(false);\n }\n };\n\n fetchItemDetails();\n }, [selectedItemId, listType, handlers, panelConfig, listData?.items]);\n\n // Don't render if no list type is configured\n if (!listType || !panelConfig) {\n return (\n <Paper\n p=\"md\"\n shadow=\"sm\"\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n }}\n >\n <CloseButton\n onClick={handleClose}\n style={{\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n zIndex: 1,\n }}\n />\n <SelectionPanelEmpty message=\"List type not configured\" />\n </Paper>\n );\n }\n\n // Don't render if no item is selected\n if (!selectedItemId) {\n return (\n <Paper\n p=\"md\"\n shadow=\"sm\"\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n }}\n >\n <CloseButton\n onClick={handleClose}\n style={{\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n zIndex: 1,\n }}\n />\n <SelectionPanelEmpty message=\"No item selected\" />\n </Paper>\n );\n }\n\n return (\n <Paper\n p=\"md\"\n shadow=\"sm\"\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n }}\n >\n <CloseButton\n onClick={handleClose}\n style={{\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n zIndex: 1,\n }}\n />\n\n {loading ? (\n <Center h={200}>\n <Loader />\n </Center>\n ) : error ? (\n <Alert color=\"red\" title=\"Error\">\n <Text size=\"sm\">{error}</Text>\n </Alert>\n ) : itemData ? (\n <Stack gap=\"md\" style={{ flex: 1 }}>\n <SelectionPanelHeader title={panelConfig.title(itemData)} description={panelConfig.description(itemData)} />\n\n {panelConfig?.image && (\n <img\n src={panelConfig?.image(itemData)}\n alt=\"Selected item preview\"\n style={{\n borderRadius: 8,\n width: '100%',\n height: 240,\n objectFit: 'cover',\n }}\n />\n )}\n\n <SelectionPrompts prompts={panelConfig.prompts(itemData)} />\n\n <SelectionActionSections sections={panelConfig.actionSections(itemData)} itemId={selectedItemId} itemData={itemData} />\n </Stack>\n ) : (\n <SelectionPanelEmpty message=\"Failed to load item details\" />\n )}\n </Paper>\n );\n};\n","import React from 'react';\nimport { Stack, Text, Title, Divider, Flex, Paper, Group } from '@mantine/core';\nimport { useHover } from '@mantine/hooks';\nimport { SelectionPrompt, SelectionActionSection, SelectionActionItem } from '../types';\nimport { IconArrowRight, IconTarget } from '@tabler/icons-react';\nimport { useBlocknoteHandlers } from '@/mantine/context';\nimport shortStr from '@/core/lib/formatters';\n\ninterface SelectionPanelHeaderProps {\n title: string;\n description: string;\n}\n\nexport const SelectionPanelHeader: React.FC<SelectionPanelHeaderProps> = ({ title, description }) => {\n return (\n <Stack gap=\"xs\">\n <Title fw={400} order={3}>\n {title}\n </Title>\n <Text c=\"dimmed\">{description}</Text>\n </Stack>\n );\n};\n\ninterface SelectionPromptProps {\n prompt: SelectionPrompt;\n onClick: () => void;\n}\n\nexport const SelectionPromptItem: React.FC<SelectionPromptProps> = ({ prompt, onClick }) => {\n return (\n <>\n <Flex style={{ cursor: 'pointer' }} onClick={() => onClick()} gap={10}>\n <IconArrowRight size={24} color=\"white\" />\n <Text>{shortStr(prompt.text, 50, 0)}</Text>\n </Flex>\n <Divider c=\"dimmed\" h={1} />\n </>\n );\n};\n\ninterface SelectionPromptsProps {\n prompts: SelectionPrompt[];\n}\n\nexport const SelectionPrompts: React.FC<SelectionPromptsProps> = ({ prompts }) => {\n const handlers = useBlocknoteHandlers();\n\n if (!prompts || prompts.length === 0) return null;\n\n return (\n <Stack gap=\"xs\">\n {prompts.map((prompt, index) => (\n <SelectionPromptItem onClick={() => handlers.askCompanion(prompt.text)} key={index} prompt={prompt} />\n ))}\n </Stack>\n );\n};\n\ninterface SelectionActionButtonProps {\n action: SelectionActionItem;\n itemId: string;\n itemData: any;\n}\n\nexport const SelectionActionButton: React.FC<SelectionActionButtonProps> = ({ action, itemId, itemData }) => {\n const { hovered, ref } = useHover();\n const handleClick = () => {\n action.onClick(itemId, itemData);\n };\n\n return (\n <Paper\n ref={ref}\n p=\"md\"\n style={{\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n backgroundColor: hovered ? 'var(--mantine-color-dark-5)' : 'var(--mantine-color-dark-6)',\n border: `1px solid ${hovered ? 'var(--mantine-color-dark-3)' : 'var(--mantine-color-dark-4)'}`,\n transform: hovered ? 'translateY(-1px)' : 'translateY(0)',\n boxShadow: hovered ? '0 4px 12px rgba(0, 0, 0, 0.15)' : 'none',\n }}\n onClick={handleClick}\n >\n <Group justify=\"space-between\" align=\"center\">\n <Group gap=\"sm\">\n <IconTarget size={20} color=\"var(--mantine-color-gray-3)\" />\n <Text size=\"sm\" fw={500} c=\"white\">\n {action.label}\n </Text>\n </Group>\n <IconArrowRight size={16} color=\"var(--mantine-color-gray-4)\" />\n </Group>\n </Paper>\n );\n};\n\ninterface SelectionActionSectionProps {\n section: SelectionActionSection;\n itemId: string;\n itemData: any;\n}\n\nexport const SelectionActionSectionComponent: React.FC<SelectionActionSectionProps> = ({ section, itemId, itemData }) => {\n if (!section.actions || section.actions.length === 0) return null;\n\n return (\n <Stack gap=\"xs\">\n <Text fw={500}>{section.title}</Text>\n {section.description && (\n <Text size=\"sm\" c=\"dimmed\">\n {section.description}\n </Text>\n )}\n <Stack gap=\"xs\">\n {section.actions.map((action) => (\n <SelectionActionButton key={action.id} action={action} itemId={itemId} itemData={itemData} />\n ))}\n </Stack>\n </Stack>\n );\n};\n\ninterface SelectionActionSectionsProps {\n sections: SelectionActionSection[];\n itemId: string;\n itemData: any;\n}\n\nexport const SelectionActionSections: React.FC<SelectionActionSectionsProps> = ({ sections, itemId, itemData }) => {\n if (!sections || sections.length === 0) return null;\n\n return (\n <Stack gap=\"md\">\n {sections.map((section, index) => (\n <React.Fragment key={index}>\n <SelectionActionSectionComponent section={section} itemId={itemId} itemData={itemData} />\n {index < sections.length - 1 && <Divider />}\n </React.Fragment>\n ))}\n </Stack>\n );\n};\n\ninterface SelectionPanelEmptyProps {\n message?: string;\n}\n\nexport const SelectionPanelEmpty: React.FC<SelectionPanelEmptyProps> = ({ message = 'No item selected' }) => {\n return (\n <Stack gap=\"md\" align=\"center\" py=\"xl\">\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\">\n {message}\n </Text>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex } from '@mantine/core';\nimport { ProjectsData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\nimport shortStr from '@/core/lib/formatters';\n\ninterface ProjectListProps {\n items: ProjectsData['items'];\n isMultiSelect: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const ProjectsList: React.FC<ProjectListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No Projects found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{item.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {shortStr(item.description, 50, 0) || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n {isMultiSelect && (\n <ListItemCheckbox ariaLabel={`Select project ${item.did}`} checked={isItemChecked?.(item.did)} onCheck={(checked) => onItemCheck?.(item.did, checked)} />\n )}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { Text, Box, Image, Stack, Flex } from '@mantine/core';\nimport { DaosData } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\nimport shortStr from '@/core/lib/formatters';\n\ninterface DaoListProps {\n items: DaosData['items'];\n isMultiSelect: boolean;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const DaosList: React.FC<DaoListProps> = ({ items, isMultiSelect, isItemChecked, onItemCheck }) => {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No Daos found\n </Text>\n );\n }\n\n const rows = items.map((item) => {\n const isChecked = isItemChecked?.(item.did);\n return (\n <ListItemContainer onClick={() => onItemCheck?.(item.did, !isChecked)} key={item.did} isChecked={!!isChecked}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={item.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{item.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {shortStr(item.description, 50, 0) || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n {isMultiSelect && <ListItemCheckbox ariaLabel={`Select DAO ${item.did}`} checked={isItemChecked?.(item.did)} onCheck={(checked) => onItemCheck?.(item.did, checked)} />}\n </Flex>\n </ListItemContainer>\n );\n });\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","// Utility: download any array as a CSV file in the browser\n// - rows: array of objects or primitives\n// - options.filename: optional filename; defaults to list-export-YYYYMMDD-HHMMSS.csv\nexport function downloadArrayAsCsv(rows: any[], options?: { filename?: string }): void {\n const safeString = (value: unknown): string => {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n // For arrays/objects, serialize as JSON\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n };\n\n const csvEscape = (field: string): string => {\n const needsQuotes = /[\",\\n\\r]/.test(field) || field.includes(',');\n const out = field.replace(/\"/g, '\"\"');\n return needsQuotes ? `\"${out}\"` : out;\n };\n\n const isObjectRow = (r: unknown) => r !== null && typeof r === 'object' && !Array.isArray(r);\n\n // Determine headers (union of keys) if objects; otherwise use single column \"value\"\n let headers: string[] = [];\n if (rows.length > 0 && isObjectRow(rows[0])) {\n const keySet = new Set<string>();\n for (const r of rows) {\n if (isObjectRow(r)) {\n for (const k of Object.keys(r as Record<string, unknown>)) keySet.add(k);\n }\n }\n headers = Array.from(keySet);\n } else {\n headers = ['value'];\n }\n\n const csvLines: string[] = [];\n // Header line\n csvLines.push(headers.map((h) => csvEscape(h)).join(','));\n // Data lines\n for (const row of rows) {\n if (isObjectRow(row)) {\n const obj = row as Record<string, unknown>;\n const line = headers.map((h) => csvEscape(safeString(Object.prototype.hasOwnProperty.call(obj, h) ? obj[h] : ''))).join(',');\n csvLines.push(line);\n } else {\n csvLines.push(csvEscape(safeString(row)));\n }\n }\n\n const csvContent = csvLines.join('\\r\\n');\n const bom = '\\uFEFF'; // Ensure Excel opens UTF-8 correctly\n const blob = new Blob([bom + csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n const pad = (n: number) => String(n).padStart(2, '0');\n const d = new Date();\n const defaultName = `list-export-${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}.csv`;\n a.href = url;\n a.download = options?.filename || defaultName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n}\n","export default function cleanUrlString(url: string): string {\n const regex = /(?<!https?:)\\/\\//g;\n const cleanedUrl = url.replace(/\\s+/g, '').replace(regex, '/');\n return cleanedUrl;\n}\n\nexport const transformIpfsToCfIpfsData = (uri: string) => {\n let uriIdentifier = '';\n if (uri.startsWith('https://ipfs.gateway.ixo.world/ipfs/')) {\n return uri;\n }\n\n if (!uri || !uri.includes('ipfs')) return uri;\n if (uri.startsWith('web3:')) uriIdentifier = uri.replace('web3:', '');\n if (uri.startsWith('https://cellnode')) return uri;\n\n if (uri.startsWith('https://ipfs.io/')) uriIdentifier = uri.replace('https://ipfs.io/ipfs/', '');\n if (uri.startsWith('https://cf-ipfs.com/ipfs/')) uriIdentifier = uri.replace('https://cf-ipfs.com/ipfs/', '');\n if (\n uri.startsWith('https://blocksync') ||\n uri.startsWith('https://testnet') ||\n uri.startsWith('https://devnet') ||\n uri.endsWith('ipfs.w3s.link') ||\n uri.endsWith('ipfs.w3s.link/')\n ) {\n const uriIpfsIndex = uri.indexOf('/ipfs');\n if (uriIpfsIndex === -1) {\n const identifier = uri.split('https://')[1].split('.')[0];\n\n return `https://ipfs.gateway.ixo.world/ipfs/${identifier}`;\n }\n const uriIpfsOffset = 6;\n\n uriIdentifier = uri.substring(uriIpfsIndex + uriIpfsOffset);\n return `https://ipfs.gateway.ixo.world/ipfs/${uriIdentifier}`;\n }\n return `https://ipfs.gateway.ixo.world/ipfs/${uriIdentifier}`;\n};\n","import cleanUrlString from '@/core/utils/links';\nimport { Service } from '../types/Domain';\n\nconst getFullServiceEndpoint = (serviceEndpoint: string, services: Array<Partial<Service> & { id: string }>) => {\n // if url includes :// it means it already an https link most probably\n if (!serviceEndpoint) throw new Error('Service endpoint is not provided');\n if (serviceEndpoint.startsWith('http://') || serviceEndpoint.startsWith('https://')) return cleanUrlString(serviceEndpoint);\n\n const pos = serviceEndpoint.indexOf(':');\n if (pos === -1) return cleanUrlString(serviceEndpoint);\n\n const serviceId = serviceEndpoint.substring(0, pos);\n const endUrl = serviceEndpoint.substring(pos + 1);\n\n const neededService = services.find((s) => {\n const posHash = s.id.indexOf('#');\n const id = s.id.substring(posHash + 1);\n return id === serviceId;\n });\n let firstPartOfServiceEndpoint = '';\n\n if (neededService?.serviceEndpoint?.endsWith('/\\r\\n')) {\n firstPartOfServiceEndpoint = neededService?.serviceEndpoint.replace(/\\r?\\n$/, '').replace(/\\/$/, '');\n } else {\n firstPartOfServiceEndpoint = neededService?.serviceEndpoint || '';\n }\n\n if (!firstPartOfServiceEndpoint) return serviceEndpoint;\n\n let resultUrl = firstPartOfServiceEndpoint + endUrl;\n\n if (resultUrl.includes('ipfs.gateway') && !resultUrl.includes('/ipfs/')) {\n resultUrl = 'https://ipfs.gateway.ixo.world/ipfs/' + endUrl;\n }\n\n return cleanUrlString(resultUrl);\n};\n\nexport default getFullServiceEndpoint;\n","import getFullServiceEndpoint from '@/core/lib/getFullServiceEndpoint';\nimport { LinkedResource, Service } from '@/core/types/Domain';\nimport { transformIpfsToCfIpfsData } from '../utils/links';\n\nexport type CategorizedResource = {\n id: string;\n link: string;\n type: string;\n description: string;\n format?: string;\n access?: boolean;\n};\n\nexport type IResourceSet = {\n pdf: CategorizedResource[];\n html: CategorizedResource[];\n json: CategorizedResource[];\n jsonld: CategorizedResource[];\n imagePng: CategorizedResource[];\n text: CategorizedResource[];\n};\n\nexport const resourcesConfig = {\n pdf: 'PDF',\n html: 'Web',\n json: 'Structured Data',\n jsonld: 'Linked Data',\n imagePng: 'PNG',\n text: 'Text',\n};\n\nconst mediaTypeDictionary: Record<string, keyof IResourceSet> = {\n 'application/pdf': 'pdf',\n 'application/html': 'html',\n 'application/json': 'json',\n 'application/ld+json': 'jsonld',\n 'ld+json': 'jsonld',\n 'image/png': 'imagePng',\n 'text/plain': 'text',\n};\n\nexport function extendResourcesWithFormat(resources?: IResourceSet) {\n if (!resources) return [];\n\n return Object.values(resources)\n .flat()\n .map((resource) => ({\n ...resource,\n format: (Object.keys(resources) as (keyof IResourceSet)[]).find((key) => resources[key].some((item: CategorizedResource) => item.id === resource.id)),\n }));\n}\n\nexport function categorizeResources(\n linkedResources: LinkedResource[] | undefined,\n services: (Partial<Service> & {\n id: string;\n })[]\n) {\n const categorizedResources: IResourceSet = {\n pdf: [],\n html: [],\n json: [],\n jsonld: [],\n imagePng: [],\n text: [],\n };\n if (!linkedResources) return [];\n\n for (const resource of linkedResources) {\n const serviceEndpoint = resource.serviceEndpoint;\n\n categorizedResources[mediaTypeDictionary[resource.mediaType]]?.push({\n id: serviceEndpoint,\n link: transformIpfsToCfIpfsData(getFullServiceEndpoint(serviceEndpoint, services)),\n description: resource?.description || 'No description',\n type: resource.type,\n access: resource.type.startsWith('display'),\n });\n }\n\n return extendResourcesWithFormat(categorizedResources);\n}\n","import { Stack, Button, Text } from '@mantine/core';\nimport { IconCircleDashed } from '@tabler/icons-react';\nimport React, { useState } from 'react';\n\ntype Props = {\n errMsg: string;\n onRetry: () => void;\n};\nexport default function BaseAlert({ errMsg, onRetry }: Props) {\n const [showErrorDetails, setShowErrorDetails] = useState(false);\n\n return (\n <Stack flex={1} h={200} py=\"md\" style={{ borderRadius: 16 }} bg=\"neutralDark.5\" mx=\"auto\" align=\"center\" justify=\"center\" ta=\"center\">\n <Stack>\n <IconCircleDashed size={32} />\n </Stack>\n <Stack justify=\"center\" align=\"center\" ta=\"center\" gap=\"xs\">\n <Text c=\"dimmed\" size=\"sm\">\n {showErrorDetails ? errMsg : 'Failed to load data'}\n </Text>\n <Stack align=\"center\" gap=\"xl\">\n <Button size=\"sm\" variant=\"subtle\" c=\"white\" onClick={() => setShowErrorDetails(!showErrorDetails)}>\n {showErrorDetails ? 'Hide' : 'Show'} Details\n </Button>\n <Button c=\"accent\" size=\"sm\" variant=\"subtle\" onClick={onRetry}>\n Retry\n </Button>\n </Stack>\n </Stack>\n </Stack>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { Stack, Text, Box, Loader, Alert, Group, Accordion, Collapse } from '@mantine/core';\nimport { IconChevronRight, IconChevronDown, IconFileDescription, IconWorld, IconCalendar, IconUser, IconCircleCheck } from '@tabler/icons-react';\nimport { useDisclosure } from '@mantine/hooks';\nimport { useBlocknoteHandlers } from '../../context/BlocknoteContext';\nimport { DomainCard } from '../../context/BlocknoteContext';\n\nexport interface OverviewBlockProps {\n block: any;\n editor: any;\n}\n\nconst OverviewBlockContent: React.FC<OverviewBlockProps> = () => {\n const handlers = useBlocknoteHandlers();\n const [domainCard, setDomainCard] = useState<DomainCard | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [detailsOpened, { toggle: toggleDetails }] = useDisclosure(false);\n\n useEffect(() => {\n const fetchDomainCard = async () => {\n setLoading(true);\n setError(null);\n\n try {\n const data = await handlers.getDomainCard();\n setDomainCard(data);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load domain card');\n setDomainCard(null);\n } finally {\n setLoading(false);\n }\n };\n\n fetchDomainCard();\n }, [handlers]);\n\n // Loading state\n if (loading) {\n return (\n <Box\n style={{\n width: '100%',\n borderRadius: '6px',\n padding: '40px',\n backgroundColor: '#1a1a1a',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Loader color=\"blue\" size=\"md\" />\n </Box>\n );\n }\n\n // Error state\n if (error) {\n return (\n <Alert color=\"red\" title=\"Error loading overview\">\n {error}\n </Alert>\n );\n }\n\n // No data state\n if (!domainCard) {\n return (\n <Alert color=\"gray\" title=\"No data\">\n No domain card data available\n </Alert>\n );\n }\n\n const ChatIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8 12H8.01M12 12H12.01M16 12H16.01M21 12C21 16.4183 16.9706 20 12 20C10.4607 20 9.01172 19.6565 7.74467 19.0511L3 20L4.39499 16.28C3.51156 15.0423 3 13.5743 3 12C3 7.58172 7.02944 4 12 4C16.9706 4 21 7.58172 21 12Z\"\n stroke=\"#adb5bd\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n\n return (\n <Box\n style={{\n width: '100%',\n color: '#ffffff',\n fontFamily: 'Inter, Helvetica, Arial, sans-serif',\n padding: '24px',\n borderRadius: '8px',\n }}\n >\n <Stack gap=\"md\">\n {/* Header with entity name */}\n <Text\n fz=\"32px\"\n fw={700}\n style={{\n color: '#ffffff',\n letterSpacing: '-0.02em',\n }}\n >\n {domainCard.name}\n </Text>\n\n {/* Details collapsible section */}\n <Box\n style={{\n background: '#333',\n borderRadius: '16px',\n overflow: 'hidden',\n }}\n >\n <Box\n style={{\n padding: '12px',\n cursor: 'pointer',\n }}\n onClick={toggleDetails}\n >\n <Group gap=\"xs\">\n {detailsOpened ? <IconChevronDown size={20} color=\"#ffffff\" /> : <IconChevronRight size={20} color=\"#ffffff\" />}\n <Text size=\"sm\" fw={500} c=\"#ffffff\">\n Details\n </Text>\n </Group>\n </Box>\n\n <Collapse in={detailsOpened}>\n <Box\n style={{\n padding: '0 16px 16px 16px',\n }}\n >\n <Stack gap=\"xs\">\n {domainCard.entity_type && domainCard.entity_type.length > 0 && (\n <Group gap=\"xs\" wrap=\"nowrap\">\n <IconFileDescription size={20} color=\"#adb5bd\" style={{ flexShrink: 0 }} />\n <Text size=\"sm\" c=\"dimmed\" style={{ width: '140px', flexShrink: 0 }}>\n Type\n </Text>\n <Text size=\"sm\" style={{ color: '#ffffff' }}>\n {domainCard.entity_type[0].replace('ixo:', '')}\n </Text>\n </Group>\n )}\n {domainCard.valid_from && (\n <Group gap=\"xs\" wrap=\"nowrap\">\n <IconCalendar size={20} color=\"#adb5bd\" style={{ flexShrink: 0 }} />\n <Text size=\"sm\" c=\"dimmed\" style={{ width: '140px', flexShrink: 0 }}>\n Created\n </Text>\n <Text size=\"sm\" style={{ color: '#ffffff' }}>\n {new Date(domainCard.valid_from).toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' })}\n </Text>\n </Group>\n )}\n <Group gap=\"xs\" wrap=\"nowrap\">\n <IconCircleCheck size={20} color=\"#adb5bd\" style={{ flexShrink: 0 }} />\n <Text size=\"sm\" c=\"dimmed\" style={{ width: '140px', flexShrink: 0 }}>\n Status\n </Text>\n <Text size=\"sm\" style={{ color: '#ffffff' }}>\n Active\n </Text>\n </Group>\n {domainCard.area_served && (\n <Group gap=\"xs\" wrap=\"nowrap\">\n <IconWorld size={20} color=\"#adb5bd\" style={{ flexShrink: 0 }} />\n <Text size=\"sm\" c=\"dimmed\" style={{ width: '140px', flexShrink: 0 }}>\n Country\n </Text>\n <Text size=\"sm\" style={{ color: '#ffffff' }}>\n {domainCard.area_served}\n </Text>\n </Group>\n )}\n {domainCard.issuer && (\n <Group gap=\"xs\" wrap=\"nowrap\">\n <IconUser size={20} color=\"#adb5bd\" style={{ flexShrink: 0 }} />\n <Text size=\"sm\" c=\"dimmed\" style={{ width: '140px', flexShrink: 0 }}>\n Issuer\n </Text>\n <Text size=\"sm\" style={{ color: '#ffffff' }}>\n {domainCard.issuer}\n </Text>\n </Group>\n )}\n </Stack>\n </Box>\n </Collapse>\n </Box>\n\n {/* About the Project section */}\n <Box style={{ marginTop: '24px' }}>\n <Text size=\"lg\" fw={600} style={{ marginBottom: '12px' }}>\n About the Project\n </Text>\n <Text\n size=\"sm\"\n c=\"dimmed\"\n style={{\n lineHeight: 1.6,\n }}\n >\n {domainCard.summary || domainCard.overview || domainCard.description || 'No summary available'}\n </Text>\n </Box>\n\n {/* What are the next steps section */}\n <Box style={{ marginTop: '16px' }}>\n <Text size=\"lg\" fw={600} style={{ marginBottom: '12px' }}>\n What are the next steps\n </Text>\n <Text\n size=\"sm\"\n c=\"dimmed\"\n style={{\n lineHeight: 1.6,\n }}\n >\n {domainCard.description}\n </Text>\n </Box>\n\n {/* FAQ Section */}\n {domainCard.faq && domainCard.faq.length > 0 && (\n <Box style={{ width: '95%', margin: 'auto' }}>\n <Accordion>\n {domainCard.faq.map((faqItem, index) => (\n <Accordion.Item key={index} value={`faq-${index}`}>\n <Accordion.Control icon={<ChatIcon />}>{faqItem.question}</Accordion.Control>\n <Accordion.Panel>{faqItem.answer}</Accordion.Panel>\n </Accordion.Item>\n ))}\n </Accordion>\n </Box>\n )}\n </Stack>\n </Box>\n );\n};\n\nexport const OverviewBlock = createReactBlockSpec(\n {\n type: 'overview' as const,\n propSchema: {},\n content: 'none',\n },\n {\n render: (props) => <OverviewBlockContent {...props} />,\n }\n);\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { ProposalBlock } from './ProposalBlock';\nimport type { IxoBlockProps } from '../../../core/types';\n\nexport const ProposalBlockSpec = createReactBlockSpec(\n {\n type: 'proposal' as const,\n propSchema: {\n status: {\n default: 'draft',\n values: ['draft', 'open', 'passed', 'rejected', 'executed', 'closed', 'execution_failed', 'veto_timelock'],\n },\n title: {\n default: '',\n },\n description: {\n default: '',\n },\n icon: {\n default: 'file-text',\n },\n proposalId: {\n default: '',\n },\n // Actions configuration (from proposalActions)\n actions: {\n default: '[]',\n },\n // Vote configuration (from proposalVote)\n voteEnabled: {\n default: true,\n },\n voteTitle: {\n default: '',\n },\n voteSubtitle: {\n default: '',\n },\n voteIcon: {\n default: 'checklist',\n },\n daysLeft: {\n default: 0,\n },\n proposalContractAddress: {\n default: '',\n },\n coreAddress: {\n default: '',\n },\n conditions: {\n default: '',\n },\n },\n content: 'none',\n },\n {\n render: (props) => {\n // Re-map props to use IxoEditorType\n const ixoProps = props as unknown as IxoBlockProps;\n return <ProposalBlock {...ixoProps} />;\n },\n }\n);\n","import React from 'react';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { ProposalTemplateView } from './template/TemplateView';\nimport { ProposalFlowView } from './flow/FlowView';\nimport { useBlocknoteContext } from '@/mantine/context';\n\nexport type ProposalBlockProps = IxoBlockProps;\n\nexport function ProposalBlock({ editor, block }: ProposalBlockProps) {\n const { docType } = useBlocknoteContext();\n\n // Template mode - always show\n if (docType === 'template') {\n return <ProposalTemplateView editor={editor} block={block} />;\n }\n\n // Flow mode\n return <ProposalFlowView block={block} editor={editor} />;\n}\n\n// Export as default for backwards compatibility\nexport default ProposalBlock;\n","import React, { useMemo } from 'react';\nimport { TemplateConfig } from './TemplateConfig';\nimport { Group, Stack, Text } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\nconst PROPOSAL_TEMPLATE_PANEL_ID = 'proposal-template-panel';\n\nexport const ProposalTemplateView = ({ editor, block }: IxoBlockProps) => {\n const panelId = `${PROPOSAL_TEMPLATE_PANEL_ID}-${block.id}`;\n\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n\n const { open } = usePanel(panelId, panelContent);\n\n return (\n <BaseContainer onClick={open}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n {getIcon('file-text', block.props.icon)}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {block.props.title || 'Proposal Title'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.description || 'Proposal description'}\n </Text>\n </Stack>\n </Group>\n\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.status || 'draft'}\n </Text>\n </Group>\n </BaseContainer>\n );\n};\n","import React, { useCallback } from 'react';\nimport { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { GeneralTab } from './GeneralTab';\nimport { ActionsTab } from './ActionsTab';\nimport { VoteTab } from './VoteTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\nexport const TemplateConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n\n const updateProp = useCallback(\n (key: string, value: any) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n [key]: value,\n },\n });\n },\n [editor, block]\n );\n\n return (\n <BaseRightPanelLayout onClose={closePanel} title=\"Proposal Settings\">\n <ReusablePanel\n extraTabs={[\n {\n label: 'General',\n value: 'general',\n content: (\n <GeneralTab\n title={block.props.title || ''}\n description={block.props.description || ''}\n coreAddress={block.props.coreAddress || ''}\n onTitleChange={(value) => updateProp('title', value)}\n onDescriptionChange={(value) => updateProp('description', value)}\n onGroupChange={(coreAddress) => updateProp('coreAddress', coreAddress)}\n />\n ),\n },\n {\n label: 'Actions',\n value: 'actions',\n content: <ActionsTab actions={block.props.actions || '[]'} onActionsChange={(actions) => updateProp('actions', JSON.stringify(actions))} />,\n },\n {\n label: 'Vote',\n value: 'vote',\n content: (\n <VoteTab\n voteTitle={block.props.voteTitle || ''}\n voteSubtitle={block.props.voteSubtitle || ''}\n voteIcon={block.props.voteIcon || 'checklist'}\n onVoteTitleChange={(value) => updateProp('voteTitle', value)}\n onVoteSubtitleChange={(value) => updateProp('voteSubtitle', value)}\n onVoteIconChange={(value) => updateProp('voteIcon', value)}\n />\n ),\n },\n ]}\n context={{ editor, block }}\n />\n </BaseRightPanelLayout>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Stack, Text, Loader, SegmentedControl } from '@mantine/core';\nimport { useBlocknoteHandlers } from '@/mantine/context';\nimport type { DAOGroup } from '@/mantine/context/BlocknoteContext';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\nimport BaseSection from '@/mantine/components/Base/BaseSection';\n\ninterface GeneralTabProps {\n title: string;\n description: string;\n coreAddress?: string;\n onTitleChange: (value: string) => void;\n onDescriptionChange: (value: string) => void;\n onGroupChange: (coreAddress: string) => void;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({ title, description, coreAddress, onTitleChange, onDescriptionChange, onGroupChange }) => {\n const handlers = useBlocknoteHandlers();\n\n // Use local state for real-time updates, but sync with block props\n const [localTitle, setLocalTitle] = useState(title || '');\n const [localDescription, setLocalDescription] = useState(description || '');\n const [groups, setGroups] = useState<DAOGroup[]>([]);\n const [loadingGroups, setLoadingGroups] = useState(false);\n const [inputMode, setInputMode] = useState<'select' | 'manual'>('select');\n const [manualAddress, setManualAddress] = useState('');\n\n // Sync local state with props when they change\n useEffect(() => {\n setLocalTitle(title || '');\n }, [title]);\n\n useEffect(() => {\n setLocalDescription(description || '');\n }, [description]);\n\n // Initialize input mode and manual address based on existing coreAddress\n useEffect(() => {\n if (coreAddress) {\n // Check if the coreAddress matches any of the groups\n const matchesGroup = groups.some((g) => g.coreAddress === coreAddress);\n if (matchesGroup) {\n setInputMode('select');\n } else {\n setInputMode('manual');\n setManualAddress(coreAddress);\n }\n }\n }, [coreAddress, groups]);\n\n // Fetch groups on mount\n useEffect(() => {\n const fetchGroups = async () => {\n if (!handlers?.getDAOGroups) {\n return;\n }\n\n setLoadingGroups(true);\n try {\n const daoGroups = await handlers.getDAOGroups();\n setGroups(daoGroups);\n } catch (error) {\n // Error handled silently\n } finally {\n setLoadingGroups(false);\n }\n };\n\n fetchGroups();\n }, [handlers]);\n\n return (\n <BaseSection>\n <BaseTextInput\n label=\"Title\"\n placeholder=\"e.g. Proposal Title\"\n value={localTitle}\n onChange={(event) => {\n const newTitle = event.currentTarget.value;\n setLocalTitle(newTitle);\n onTitleChange(newTitle);\n }}\n />\n\n <BaseTextArea\n label=\"Description\"\n placeholder=\"Describe what this proposal is about\"\n minRows={3}\n value={localDescription}\n onChange={(event) => {\n const newDescription = event.currentTarget.value;\n setLocalDescription(newDescription);\n onDescriptionChange(newDescription);\n }}\n />\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Group\n </Text>\n <SegmentedControl\n value={inputMode}\n onChange={(value) => setInputMode(value as 'select' | 'manual')}\n data={[\n { label: 'Select DAO', value: 'select' },\n { label: 'Manual Entry', value: 'manual' },\n ]}\n fullWidth\n />\n {inputMode === 'select' ? (\n <BaseSelect\n placeholder={loadingGroups ? 'Loading groups...' : 'Select a DAO group'}\n value={groups.find((g) => g.coreAddress === coreAddress)?.id || null}\n onChange={(value) => {\n if (value) {\n const selectedGroup = groups.find((g) => g.id === value);\n if (selectedGroup) {\n onGroupChange(selectedGroup.coreAddress);\n }\n }\n }}\n data={groups.map((group) => ({\n value: group.id,\n label: group.name,\n }))}\n disabled={loadingGroups}\n rightSection={loadingGroups ? <Loader size=\"xs\" /> : undefined}\n searchable\n />\n ) : (\n <BaseTextInput\n placeholder=\"Enter DAO core address\"\n value={manualAddress}\n onChange={(event) => {\n const newAddress = event.currentTarget.value;\n setManualAddress(newAddress);\n onGroupChange(newAddress);\n }}\n />\n )}\n </Stack>\n </BaseSection>\n );\n};\n","import { Stack, StackProps } from '@mantine/core';\nimport React from 'react';\n\nexport default function BaseSection({ onClick, ...props }: StackProps) {\n return <Stack gap=\"md\" style={{ width: '100%', borderRadius: 16, cursor: onClick ? 'pointer' : 'default', position: 'relative' }} onClick={onClick} {...props} />;\n}\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Card, Stack } from '@mantine/core';\nimport { ProposalAction } from '../../../context/types';\nimport { ActionsCard } from '../actions-components/ActionsCard';\nimport { ActionsPanel } from '../ActionsPanel';\n\ninterface ActionsTabProps {\n actions: string;\n onActionsChange: (actions: ProposalAction[]) => void;\n}\n\nexport const ActionsTab: React.FC<ActionsTabProps> = ({ actions, onActionsChange }) => {\n const [isEditorVisible, setIsEditorVisible] = useState(false);\n const [editingIndex, setEditingIndex] = useState<number | null>(null);\n\n const parseActions = (actionsJson: string): ProposalAction[] => {\n if (!actionsJson) return [];\n try {\n return JSON.parse(actionsJson);\n } catch (error) {\n return [];\n }\n };\n\n const currentActions = parseActions(actions);\n\n useEffect(() => {\n if (currentActions.length === 0 && !isEditorVisible) {\n setEditingIndex(null);\n setIsEditorVisible(true);\n }\n }, [currentActions.length, isEditorVisible]);\n\n const handleEditAction = useCallback((index: number) => {\n setEditingIndex(index);\n setIsEditorVisible(true);\n }, []);\n\n const handleRemoveAction = useCallback(\n (index: number) => {\n const newActions = currentActions.filter((_, i) => i !== index);\n onActionsChange(newActions);\n },\n [currentActions, onActionsChange]\n );\n\n const handleSaveAction = useCallback(\n (action: ProposalAction) => {\n let newActions: ProposalAction[];\n if (editingIndex !== null) {\n // Edit existing action\n newActions = currentActions.map((a, i) => (i === editingIndex ? action : a));\n } else {\n // Add new action\n newActions = [...currentActions, action];\n }\n onActionsChange(newActions);\n setIsEditorVisible(false);\n setEditingIndex(null);\n },\n [editingIndex, currentActions, onActionsChange]\n );\n\n const handleCancelEditor = useCallback(() => {\n setIsEditorVisible(false);\n setEditingIndex(null);\n }, []);\n\n return (\n <Stack gap=\"md\">\n <ActionsCard actions={currentActions} isSelected={false} onClick={() => {}} onEditAction={handleEditAction} onRemoveAction={handleRemoveAction} />\n\n {isEditorVisible && (\n <Card\n withBorder\n padding=\"lg\"\n radius=\"md\"\n style={{\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n }}\n >\n <ActionsPanel actions={currentActions} editingIndex={editingIndex} onSave={handleSaveAction} onCancel={handleCancelEditor} isTemplateMode={true} />\n </Card>\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Card, Group, Text, Badge, Stack, ActionIcon, ScrollArea } from '@mantine/core';\nimport { ProposalAction } from '../../../context/types';\n\ninterface ActionsCardProps {\n actions: ProposalAction[];\n isSelected: boolean;\n onClick: () => void;\n onEditAction: (index: number) => void;\n onRemoveAction: (index: number) => void;\n disabled?: boolean;\n}\n\nconst getActionSummary = (action: ProposalAction): string => {\n switch (action.type) {\n case 'Spend':\n const spendData = (action as any).data;\n return `${spendData.amount} ${spendData.denom} to ${spendData.to.slice(0, 8)}...`;\n case 'UpdateMembers':\n const membersData = (action as any).data;\n return `Add ${membersData.add.length}, Remove ${membersData.remove.length} members`;\n default:\n return 'Unknown action';\n }\n};\n\nconst getActionTypeColor = (type: string) => {\n switch (type) {\n case 'Spend':\n return '#4dabf7'; // Blue\n case 'UpdateMembers':\n return '#ffd43b'; // Yellow\n default:\n return '#868e96'; // Gray\n }\n};\n\nexport const ActionsCard: React.FC<ActionsCardProps> = ({ actions, isSelected, onClick, onEditAction, onRemoveAction, disabled = false }) => {\n const handleCardClick = (e: React.MouseEvent) => {\n if ((e.target as HTMLElement).closest('.action-button')) {\n return;\n }\n onClick();\n };\n\n return (\n <Card\n shadow=\"sm\"\n padding=\"lg\"\n radius=\"md\"\n withBorder\n style={{\n width: '100%',\n cursor: 'pointer',\n backgroundColor: '#1a1a1a',\n borderColor: isSelected ? '#51cf66' : '#333',\n borderWidth: isSelected ? 2 : 1,\n transition: 'all 0.2s ease',\n }}\n onClick={handleCardClick}\n >\n <Group justify=\"space-between\" align=\"flex-start\">\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Text size=\"md\" fw={600} style={{ color: '#f1f3f5' }}>\n Proposal Actions ({actions.length})\n </Text>\n\n {actions.length === 0 ? (\n <Text size=\"sm\" style={{ color: '#868e96' }}>\n No actions added yet.\n </Text>\n ) : (\n <ScrollArea h={actions.length > 3 ? 150 : undefined} style={{ marginTop: 8 }}>\n <Stack gap=\"xs\">\n {actions.map((action, index) => (\n <Card\n key={index}\n withBorder\n padding=\"xs\"\n style={{\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n }}\n >\n <Group justify=\"space-between\" align=\"center\">\n <Group gap=\"xs\" style={{ flex: 1 }}>\n <Badge\n size=\"sm\"\n variant=\"light\"\n style={{\n backgroundColor: `${getActionTypeColor(action.type)}20`,\n color: getActionTypeColor(action.type),\n }}\n >\n {action.type}\n </Badge>\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n {getActionSummary(action)}\n </Text>\n </Group>\n {!disabled && (\n <Group gap={4}>\n <ActionIcon\n size=\"sm\"\n variant=\"subtle\"\n className=\"action-button\"\n onClick={(e) => {\n e.stopPropagation();\n onEditAction(index);\n }}\n style={{ color: 'rgba(0, 255, 157, 1)' }}\n >\n ✏️\n </ActionIcon>\n <ActionIcon\n size=\"sm\"\n variant=\"subtle\"\n className=\"action-button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemoveAction(index);\n }}\n style={{ color: '#ff6b6b' }}\n >\n 🗑️\n </ActionIcon>\n </Group>\n )}\n </Group>\n </Card>\n ))}\n </Stack>\n </ScrollArea>\n )}\n </Stack>\n </Group>\n </Card>\n );\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Stack, Button, Group, Text, Card, Badge, Divider, ScrollArea, Alert, Tabs, SimpleGrid, Paper } from '@mantine/core';\nimport { ProposalAction } from '../../context/types';\nimport { getActionConfig, getCategorizedActions } from './registry/actionRegistry';\nimport { ACTION_CATEGORIES } from './registry/categories';\nimport { ActionTypeConfig } from './registry/types';\n\ninterface ActionsPanelProps {\n actions: ProposalAction[];\n editingIndex: number | null;\n onSave: (action: ProposalAction) => void;\n onCancel: () => void;\n isTemplateMode?: boolean;\n}\n\nexport const ActionsPanel: React.FC<ActionsPanelProps> = ({ actions, editingIndex, onSave, onCancel, isTemplateMode = false }) => {\n const isEditing = editingIndex !== null;\n const editingAction = isEditing ? actions[editingIndex] : null;\n\n // Get initial action type from editing action or default to first available\n const initialActionType = editingAction?.type || 'Spend';\n const [selectedActionType, setSelectedActionType] = useState<string>(initialActionType);\n const [actionData, setActionData] = useState<any>(() => {\n if (editingAction) {\n return editingAction.data;\n }\n const config = getActionConfig(selectedActionType);\n return config?.getDefaultData() || {};\n });\n\n // Get current action config\n const currentActionConfig = getActionConfig(selectedActionType);\n\n // Categorized actions for tabbed view\n const categorizedActions = useMemo(() => getCategorizedActions(), []);\n\n // Update action data when changing action type\n useEffect(() => {\n if (!isEditing) {\n const config = getActionConfig(selectedActionType);\n if (config) {\n setActionData(config.getDefaultData());\n }\n }\n }, [selectedActionType, isEditing]);\n\n const handleSave = () => {\n if (!currentActionConfig) return;\n\n const validation = currentActionConfig.validateData(actionData);\n if (!validation.isValid) {\n // Could show validation errors here\n return;\n }\n\n const action: ProposalAction = {\n type: selectedActionType as any,\n data: actionData,\n };\n\n onSave(action);\n };\n\n const renderActionForm = () => {\n if (!currentActionConfig) {\n return (\n <Alert color=\"red\" style={{ backgroundColor: '#2a2a2a', borderColor: '#ff6b6b' }}>\n <Text size=\"sm\" style={{ color: '#ff6b6b' }}>\n Unknown action type selected\n </Text>\n </Alert>\n );\n }\n\n const FormComponent = currentActionConfig.FormComponent;\n return <FormComponent data={actionData} onChange={setActionData} isTemplateMode={isTemplateMode} />;\n };\n\n // Get badge color based on category\n const getCategoryColor = (category: string) => {\n const colors: Record<string, string> = {\n treasury: '#4dabf7',\n governance: '#ffd43b',\n staking: '#51cf66',\n dao: '#ff6b6b',\n nft: '#a78bfa',\n contract: '#f97316',\n validator: '#06b6d4',\n custom: '#6b7280',\n };\n return colors[category] || '#6b7280';\n };\n\n return (\n <Stack style={{ backgroundColor: '#1a1a1a', color: '#f1f3f5', height: '100%' }}>\n <Text fw={600} style={{ color: '#f1f3f5' }}>\n {isEditing ? 'Edit Action' : 'Add New Action'}\n </Text>\n\n {/* Action Type Selection */}\n {!isEditing ? (\n <Stack gap=\"md\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Select Action Type\n </Text>\n\n <Tabs\n defaultValue={ACTION_CATEGORIES[0].id}\n styles={{\n root: { backgroundColor: 'transparent' },\n list: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n tab: {\n color: '#adb5bd',\n '&[data-active]': {\n backgroundColor: '#333',\n color: '#f1f3f5',\n borderColor: 'rgba(0, 255, 157, 1)',\n },\n '&:hover': {\n backgroundColor: '#333',\n },\n },\n panel: { paddingTop: 'md' },\n }}\n >\n <Tabs.List>\n {ACTION_CATEGORIES.map((category) => (\n <Tabs.Tab key={category.id} value={category.id}>\n <Group gap=\"xs\">\n <span>{category.icon}</span>\n <span>{category.label}</span>\n </Group>\n </Tabs.Tab>\n ))}\n </Tabs.List>\n\n {ACTION_CATEGORIES.map((category) => (\n <Tabs.Panel key={category.id} value={category.id} mt={10}>\n <SimpleGrid cols={2} spacing=\"xs\">\n {(categorizedActions.get(category.id) || []).map((config: ActionTypeConfig) => (\n <Paper\n key={config.value}\n withBorder\n p=\"sm\"\n style={{\n backgroundColor: selectedActionType === config.value ? '#333' : '#2a2a2a',\n borderColor: selectedActionType === config.value ? 'rgba(0, 255, 157, 1)' : '#333',\n cursor: 'pointer',\n transition: 'all 0.2s',\n }}\n onClick={() => setSelectedActionType(config.value)}\n >\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Text size=\"sm\" fw={500} style={{ color: '#f1f3f5' }}>\n {config.label}\n </Text>\n {selectedActionType === config.value && (\n <Badge size=\"xs\" style={{ backgroundColor: 'rgba(0, 255, 157, 1)' }}>\n Selected\n </Badge>\n )}\n </Group>\n {config.description && (\n <Text size=\"xs\" style={{ color: '#adb5bd' }}>\n {config.description}\n </Text>\n )}\n </Stack>\n </Paper>\n ))}\n </SimpleGrid>\n </Tabs.Panel>\n ))}\n </Tabs>\n </Stack>\n ) : (\n <Card\n withBorder\n p=\"sm\"\n style={{\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n }}\n >\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n <Badge\n size=\"sm\"\n style={{\n backgroundColor: getCategoryColor(currentActionConfig?.category || 'custom') + '20',\n color: getCategoryColor(currentActionConfig?.category || 'custom'),\n }}\n >\n {currentActionConfig?.label || selectedActionType}\n </Badge>\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n (Editing)\n </Text>\n </Group>\n </Group>\n </Card>\n )}\n\n <Divider color=\"#333\" />\n\n {/* Action Form */}\n <ScrollArea style={{ flex: 1 }}>{renderActionForm()}</ScrollArea>\n\n <Divider color=\"#333\" />\n\n {/* Current Actions Summary */}\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Current Actions ({actions.length})\n </Text>\n <ScrollArea h={100}>\n <Stack gap=\"xs\">\n {actions.map((action, index) => {\n const config = getActionConfig(action.type);\n return (\n <Card\n key={index}\n withBorder\n padding=\"xs\"\n style={{\n backgroundColor: '#2a2a2a',\n borderColor: index === editingIndex ? 'rgba(0, 255, 157, 1)' : '#333',\n borderWidth: index === editingIndex ? 2 : 1,\n opacity: index === editingIndex ? 0.7 : 1,\n }}\n >\n <Group gap=\"xs\">\n <Badge\n size=\"sm\"\n style={{\n backgroundColor: getCategoryColor(config?.category || 'custom') + '20',\n color: getCategoryColor(config?.category || 'custom'),\n }}\n >\n {config?.label || action.type}\n </Badge>\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n {config?.getSummary(action.data) || 'Action'}\n </Text>\n {index === editingIndex && (\n <Badge size=\"xs\" style={{ backgroundColor: 'rgba(0, 255, 157, 1)', color: '#fff' }}>\n Editing\n </Badge>\n )}\n </Group>\n </Card>\n );\n })}\n </Stack>\n </ScrollArea>\n </Stack>\n\n {/* Action Buttons */}\n <Group justify=\"flex-end\" mt=\"md\">\n <Button\n variant=\"default\"\n onClick={onCancel}\n style={{\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#adb5bd',\n '&:hover': {\n backgroundColor: '#333',\n },\n }}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSave}\n disabled={!currentActionConfig}\n style={{\n backgroundColor: 'rgba(0, 255, 157, 0.5)',\n '&:hover': {\n backgroundColor: 'rgba(0, 255, 157, 1)',\n },\n '&:disabled': {\n backgroundColor: '#333',\n color: '#666',\n },\n }}\n >\n {isEditing ? 'Update Action' : 'Add Action'}\n </Button>\n </Group>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { SpendData } from '../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\ninterface SpendActionFormProps {\n data: SpendData;\n onChange: (data: SpendData) => void;\n}\n\nexport const SpendActionForm: React.FC<SpendActionFormProps> = ({ data, onChange }) => {\n return (\n <Stack>\n <BaseTextInput label=\"Recipient Address\" placeholder=\"ixo1...\" value={data.to} onChange={(e) => onChange({ ...data, to: e.currentTarget.value })} required />\n <BaseTextInput label=\"Denomination\" placeholder=\"uixo\" value={data.denom} onChange={(e) => onChange({ ...data, denom: e.currentTarget.value })} required />\n <BaseTextInput label=\"Amount\" placeholder=\"1000000\" value={data.amount} onChange={(e) => onChange({ ...data, amount: e.currentTarget.value })} required />\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, Button, Group, Text, Card, Badge, ActionIcon, Divider, ScrollArea } from '@mantine/core';\nimport { ManageMembersData } from '../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseNumberInput from '@/mantine/components/Base/BaseNumberInput';\n\ninterface Member {\n addr: string;\n weight: number;\n}\n\ninterface UpdateMembersActionFormProps {\n data: ManageMembersData;\n onChange: (data: ManageMembersData) => void;\n}\n\nexport const UpdateMembersActionForm: React.FC<UpdateMembersActionFormProps> = ({ data, onChange }) => {\n const [newMember, setNewMember] = useState<Member>({ addr: '', weight: 1 });\n const [newRemoveAddress, setNewRemoveAddress] = useState('');\n\n const handleAddMember = () => {\n if (!newMember.addr) return;\n onChange({\n ...data,\n add: [...(data.add || []), { ...newMember }],\n });\n setNewMember({ addr: '', weight: 1 });\n };\n\n const handleRemoveMember = (index: number) => {\n onChange({\n ...data,\n add: (data.add || []).filter((_, i) => i !== index),\n });\n };\n\n const handleAddRemoveAddress = () => {\n if (!newRemoveAddress) return;\n onChange({\n ...data,\n remove: [...(data.remove || []), { addr: newRemoveAddress }],\n });\n setNewRemoveAddress('');\n };\n\n const handleRemoveRemoveAddress = (index: number) => {\n onChange({\n ...data,\n remove: (data.remove || []).filter((_, i) => i !== index),\n });\n };\n\n return (\n <Stack>\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Members to Add\n </Text>\n <ScrollArea h={150}>\n <Stack gap=\"xs\">\n {(data.add || []).map((member, index) => (\n <Card\n key={index}\n withBorder\n padding=\"xs\"\n style={{\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n }}\n >\n <Group justify=\"space-between\">\n <div>\n <Text size=\"sm\" fw={500} style={{ color: '#f1f3f5' }}>\n {member.addr.slice(0, 20)}...\n </Text>\n <Badge\n size=\"sm\"\n style={{\n backgroundColor: '#ffd43b20',\n color: '#ffd43b',\n }}\n >\n Weight: {member.weight}\n </Badge>\n </div>\n <ActionIcon size=\"sm\" variant=\"subtle\" onClick={() => handleRemoveMember(index)} style={{ color: '#ff6b6b' }}>\n 🗑️\n </ActionIcon>\n </Group>\n </Card>\n ))}\n </Stack>\n </ScrollArea>\n <Group grow>\n <BaseTextInput placeholder=\"Member address\" value={newMember.addr} onChange={(e) => setNewMember({ ...newMember, addr: e.currentTarget.value })} />\n <BaseNumberInput placeholder=\"Weight\" value={newMember.weight} onChange={(value) => setNewMember({ ...newMember, weight: Number(value) || 1 })} min={1} />\n <Button\n size=\"sm\"\n onClick={handleAddMember}\n style={{\n backgroundColor: 'rgba(0, 255, 157, 0.5)',\n '&:hover': {\n backgroundColor: 'rgba(0, 255, 157, 1)',\n },\n }}\n >\n ➕ Add\n </Button>\n </Group>\n </Stack>\n\n <Divider color=\"#333\" />\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Members to Remove\n </Text>\n <ScrollArea h={100}>\n <Stack gap=\"xs\">\n {(data.remove || []).map((item, index) => (\n <Card\n key={index}\n withBorder\n padding=\"xs\"\n style={{\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n }}\n >\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n {item.addr.slice(0, 30)}...\n </Text>\n <ActionIcon size=\"sm\" variant=\"subtle\" onClick={() => handleRemoveRemoveAddress(index)} style={{ color: '#ff6b6b' }}>\n 🗑️\n </ActionIcon>\n </Group>\n </Card>\n ))}\n </Stack>\n </ScrollArea>\n <Group grow>\n <BaseTextInput placeholder=\"Address to remove\" value={newRemoveAddress} onChange={(e) => setNewRemoveAddress(e.currentTarget.value)} />\n <Button\n size=\"sm\"\n onClick={handleAddRemoveAddress}\n style={{\n backgroundColor: 'rgba(0, 255, 157, 0.5)',\n '&:hover': {\n backgroundColor: 'rgba(0, 255, 157, 1)',\n },\n }}\n >\n ➕ Add\n </Button>\n </Group>\n </Stack>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { StakeData, StakeType } from '../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\nimport BaseNumberInput from '@/mantine/components/Base/BaseNumberInput';\n\ninterface StakeActionFormProps {\n data: StakeData;\n onChange: (data: StakeData) => void;\n}\n\nconst stakeTypeOptions = [\n { value: StakeType.Delegate, label: 'Delegate' },\n { value: StakeType.Undelegate, label: 'Undelegate' },\n { value: StakeType.Redelegate, label: 'Redelegate' },\n { value: StakeType.WithdrawDelegatorReward, label: 'Withdraw Delegator Reward' },\n];\n\nexport const StakeActionForm: React.FC<StakeActionFormProps> = ({ data, onChange }) => {\n const isRedelegate = data.stakeType === StakeType.Redelegate;\n const needsAmount = data.stakeType !== StakeType.WithdrawDelegatorReward;\n\n return (\n <Stack gap=\"md\">\n <BaseSelect label=\"Stake Type\" value={data.stakeType} onChange={(value) => onChange({ ...data, stakeType: value as StakeType })} data={stakeTypeOptions} required />\n\n <BaseTextInput\n label=\"Validator Address\"\n placeholder={isRedelegate ? 'Source validator address' : 'Validator address'}\n value={data.validator}\n onChange={(e) => onChange({ ...data, validator: e.target.value })}\n required\n />\n\n {isRedelegate && (\n <BaseTextInput\n label=\"Destination Validator Address\"\n placeholder=\"Destination validator address\"\n value={data.toValidator}\n onChange={(e) => onChange({ ...data, toValidator: e.target.value })}\n required\n />\n )}\n\n {needsAmount && (\n <>\n <BaseNumberInput\n label=\"Amount\"\n placeholder=\"Enter amount\"\n value={data.amount}\n onChange={(value) => onChange({ ...data, amount: String(value || '') })}\n min={0}\n hideControls\n required\n />\n\n <BaseSelect\n label=\"Denomination\"\n value={data.denom}\n onChange={(value) => onChange({ ...data, denom: value || 'uixo' })}\n data={[\n { value: 'uixo', label: 'uIXO' },\n { value: 'ixo', label: 'IXO' },\n ]}\n required\n />\n </>\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { JoinData } from '../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\ninterface JoinActionFormProps {\n data: JoinData;\n onChange: (data: JoinData) => void;\n}\n\nexport const JoinActionForm: React.FC<JoinActionFormProps> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"ID\" placeholder=\"did:ixo:entity:abc123...\" value={data.id} onChange={(e) => onChange({ ...data, id: e.target.value })} required />\n <BaseTextInput label=\"Core Address\" placeholder=\"ixo1...\" value={data.coreAddress} onChange={(e) => onChange({ ...data, coreAddress: e.target.value })} required />\n <BaseTextInput label=\"Address\" placeholder=\"ixo1...\" value={data.address} onChange={(e) => onChange({ ...data, address: e.target.value })} required />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { MintData } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseNumberInput from '@/mantine/components/Base/BaseNumberInput';\n\nexport const MintActionForm: React.FC<ActionFormProps<MintData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Recipient Address\" placeholder=\"ixo1...\" value={data.to} onChange={(e) => onChange({ ...data, to: e.currentTarget.value })} required />\n\n <BaseNumberInput\n label=\"Amount\"\n placeholder=\"Enter amount to mint\"\n value={data.amount}\n onChange={(value) => onChange({ ...data, amount: Number(value) || 0 })}\n min={0}\n hideControls\n required\n />\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, Button, Group, Text, Card } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ExecuteData, Coin } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const ExecuteActionForm: React.FC<ActionFormProps<ExecuteData>> = ({ data, onChange }) => {\n const [newFund, setNewFund] = useState<Coin>({ denom: 'uixo', amount: '' });\n\n const handleAddFund = () => {\n if (newFund.amount && newFund.denom) {\n onChange({\n ...data,\n funds: [...(data.funds || []), { ...newFund }],\n });\n setNewFund({ denom: 'uixo', amount: '' });\n }\n };\n\n const handleRemoveFund = (index: number) => {\n onChange({\n ...data,\n funds: (data.funds || []).filter((_, i) => i !== index),\n });\n };\n\n const formatMessage = () => {\n try {\n const parsed = JSON.parse(data.message);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return data.message;\n }\n };\n\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Contract Address\" placeholder=\"ixo1...\" value={data.address} onChange={(e) => onChange({ ...data, address: e.currentTarget.value })} required />\n\n <BaseTextArea\n label=\"Message (JSON)\"\n placeholder='{\"method\": \"execute\", \"params\": {}}'\n value={formatMessage()}\n onChange={(e) => onChange({ ...data, message: e.currentTarget.value })}\n minRows={4}\n required\n />\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Funds (Optional)\n </Text>\n\n {(data.funds || []).map((fund, index) => (\n <Card key={index} withBorder padding=\"xs\" style={{ backgroundColor: '#2a2a2a', borderColor: '#333' }}>\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n {fund.amount} {fund.denom}\n </Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={() => handleRemoveFund(index)} style={{ color: '#ff6b6b' }}>\n Remove\n </Button>\n </Group>\n </Card>\n ))}\n\n <Group grow>\n <BaseTextInput placeholder=\"Amount\" value={newFund.amount} onChange={(e) => setNewFund({ ...newFund, amount: e.currentTarget.value })} />\n <BaseTextInput placeholder=\"Denom (e.g., uixo)\" value={newFund.denom} onChange={(e) => setNewFund({ ...newFund, denom: e.currentTarget.value })} />\n <Button\n size=\"sm\"\n onClick={handleAddFund}\n style={{\n backgroundColor: 'rgba(0, 255, 157, 0.5)',\n '&:hover': { backgroundColor: 'rgba(0, 255, 157, 1)' },\n }}\n >\n Add Fund\n </Button>\n </Group>\n </Stack>\n </Stack>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Stack, Alert, Group, Text, Badge } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { CustomData } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\n\nexport const CustomActionForm: React.FC<ActionFormProps<CustomData>> = ({ data, onChange }) => {\n const [isValid, setIsValid] = useState(true);\n const [error, setError] = useState('');\n\n useEffect(() => {\n try {\n if (data.message) {\n JSON.parse(data.message);\n setIsValid(true);\n setError('');\n }\n } catch (e) {\n setIsValid(false);\n setError((e as Error).message);\n }\n }, [data.message]);\n\n const formatMessage = () => {\n try {\n const parsed = JSON.parse(data.message);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return data.message;\n }\n };\n\n return (\n <Stack gap=\"md\">\n <Alert color=\"yellow\" style={{ backgroundColor: '#2a2a2a', borderColor: '#ffd43b' }}>\n <Text size=\"sm\" style={{ color: '#ffd43b' }}>\n ⚠️ Custom actions require valid JSON messages. Supports both Wasm and Stargate message formats.\n </Text>\n </Alert>\n\n <div>\n <Group gap=\"xs\" mb=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Custom Message (JSON)\n </Text>\n <Badge\n size=\"sm\"\n style={{\n backgroundColor: isValid ? '#51cf6620' : '#ff6b6b20',\n color: isValid ? '#51cf66' : '#ff6b6b',\n }}\n >\n {isValid ? 'Valid JSON' : 'Invalid JSON'}\n </Badge>\n </Group>\n\n <BaseTextArea\n placeholder={`Example Wasm message:\n{\n \"wasm\": {\n \"execute\": {\n \"contract_addr\": \"ixo1...\",\n \"funds\": [],\n \"msg\": { \"method\": \"value\" }\n }\n }\n}\n\nExample Stargate message:\n{\n \"stargate\": {\n \"type_url\": \"/cosmos.bank.v1beta1.MsgSend\",\n \"value\": { ... }\n }\n}`}\n value={formatMessage()}\n onChange={(e) => onChange({ ...data, message: e.currentTarget.value })}\n minRows={10}\n maxRows={20}\n required\n error={error}\n />\n </div>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { AuthzExecData, AuthzExecActionTypes } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\n\nexport const AuthzExecActionForm: React.FC<ActionFormProps<AuthzExecData>> = ({ data, onChange }) => {\n const actionTypeOptions = [\n { value: AuthzExecActionTypes.Delegate, label: 'Delegate' },\n { value: AuthzExecActionTypes.Undelegate, label: 'Undelegate' },\n { value: AuthzExecActionTypes.Redelegate, label: 'Redelegate' },\n { value: AuthzExecActionTypes.ClaimRewards, label: 'Claim Rewards' },\n { value: AuthzExecActionTypes.Custom, label: 'Custom' },\n ];\n\n const formatMessage = (message: any) => {\n try {\n return JSON.stringify(message, null, 2);\n } catch {\n return typeof message === 'string' ? message : '{}';\n }\n };\n\n const handleMessageChange = (field: string, value: string) => {\n try {\n const parsed = JSON.parse(value);\n onChange({ ...data, [field]: parsed });\n } catch {\n // Keep the string value for partial editing\n onChange({ ...data, [field]: value });\n }\n };\n\n return (\n <Stack gap=\"md\">\n <BaseSelect\n label=\"Action Type\"\n placeholder=\"Select action type\"\n value={data.authzExecActionType}\n onChange={(value) => onChange({ ...data, authzExecActionType: value as any })}\n data={actionTypeOptions}\n required\n />\n\n {data.authzExecActionType === AuthzExecActionTypes.Delegate && (\n <BaseTextArea\n label=\"Delegate Message (JSON)\"\n placeholder='{\"delegator_address\": \"\", \"validator_address\": \"\", \"amount\": {\"denom\": \"uixo\", \"amount\": \"\"}}'\n value={formatMessage(data.delegate)}\n onChange={(e) => handleMessageChange('delegate', e.currentTarget.value)}\n minRows={4}\n />\n )}\n\n {data.authzExecActionType === AuthzExecActionTypes.Undelegate && (\n <BaseTextArea\n label=\"Undelegate Message (JSON)\"\n placeholder='{\"delegator_address\": \"\", \"validator_address\": \"\", \"amount\": {\"denom\": \"uixo\", \"amount\": \"\"}}'\n value={formatMessage(data.undelegate)}\n onChange={(e) => handleMessageChange('undelegate', e.currentTarget.value)}\n minRows={4}\n />\n )}\n\n {data.authzExecActionType === AuthzExecActionTypes.Redelegate && (\n <BaseTextArea\n label=\"Redelegate Message (JSON)\"\n placeholder='{\"delegator_address\": \"\", \"validator_src_address\": \"\", \"validator_dst_address\": \"\", \"amount\": {\"denom\": \"uixo\", \"amount\": \"\"}}'\n value={formatMessage(data.redelegate)}\n onChange={(e) => handleMessageChange('redelegate', e.currentTarget.value)}\n minRows={4}\n />\n )}\n\n {data.authzExecActionType === AuthzExecActionTypes.ClaimRewards && (\n <BaseTextArea\n label=\"Claim Rewards Message (JSON)\"\n placeholder='{\"delegator_address\": \"\", \"validator_address\": \"\"}'\n value={formatMessage(data.claimRewards)}\n onChange={(e) => handleMessageChange('claimRewards', e.currentTarget.value)}\n minRows={3}\n />\n )}\n\n {data.authzExecActionType === AuthzExecActionTypes.Custom && (\n <BaseTextInput label=\"Custom Message\" placeholder=\"Enter custom message\" value={data.custom} onChange={(e) => onChange({ ...data, custom: e.currentTarget.value })} />\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { AuthzData } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const AuthzGrantActionForm: React.FC<ActionFormProps<AuthzData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput\n label=\"Type URL\"\n placeholder=\"/cosmos.authz.v1beta1.MsgGrant\"\n value={data.typeUrl}\n onChange={(e) => onChange({ ...data, typeUrl: e.currentTarget.value })}\n required\n />\n\n <BaseTextInput\n label=\"Grantee Address\"\n placeholder=\"ixo1...\"\n value={data.value?.grantee || ''}\n onChange={(e) =>\n onChange({\n ...data,\n value: { ...(data.value || {}), grantee: e.currentTarget.value },\n })\n }\n required\n />\n\n <BaseTextInput\n label=\"Message Type URL\"\n placeholder=\"/cosmos.staking.v1beta1.MsgDelegate\"\n value={data.value?.msgTypeUrl || ''}\n onChange={(e) =>\n onChange({\n ...data,\n value: { ...(data.value || {}), msgTypeUrl: e.currentTarget.value },\n })\n }\n required\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { BurnNftData } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const BurnNftActionForm: React.FC<ActionFormProps<BurnNftData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Collection Address\" placeholder=\"ixo1...\" value={data.collection} onChange={(e) => onChange({ ...data, collection: e.currentTarget.value })} required />\n\n <BaseTextInput label=\"Token ID\" placeholder=\"1\" value={data.tokenId} onChange={(e) => onChange({ ...data, tokenId: e.currentTarget.value })} required />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Checkbox } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { TransferNftData } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const TransferNftActionForm: React.FC<ActionFormProps<TransferNftData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Collection Address\" placeholder=\"ixo1...\" value={data.collection} onChange={(e) => onChange({ ...data, collection: e.currentTarget.value })} required />\n\n <BaseTextInput label=\"Token ID\" placeholder=\"1\" value={data.tokenId} onChange={(e) => onChange({ ...data, tokenId: e.currentTarget.value })} required />\n\n <BaseTextInput label=\"Recipient Address\" placeholder=\"ixo1...\" value={data.recipient} onChange={(e) => onChange({ ...data, recipient: e.currentTarget.value })} required />\n\n <Checkbox\n label=\"Execute Smart Contract\"\n checked={data.executeSmartContract}\n onChange={(e) => onChange({ ...data, executeSmartContract: e.currentTarget.checked })}\n styles={{\n label: { color: '#adb5bd' },\n input: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n\n {data.executeSmartContract && (\n <BaseTextArea\n label=\"Smart Contract Message (JSON)\"\n placeholder='{\"method\": \"execute\", \"params\": {}}'\n value={data.smartContractMsg}\n onChange={(e) => onChange({ ...data, smartContractMsg: e.currentTarget.value })}\n minRows={3}\n />\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Radio, Group } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ManageCw721Data } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const ManageCw721ActionForm: React.FC<ActionFormProps<ManageCw721Data>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <Radio.Group label=\"Action\" value={data.adding ? 'add' : 'remove'} onChange={(value) => onChange({ ...data, adding: value === 'add' })}>\n <Group mt=\"xs\">\n <Radio\n value=\"add\"\n label=\"Add CW721 Contract\"\n styles={{\n label: { color: '#adb5bd' },\n radio: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n <Radio\n value=\"remove\"\n label=\"Remove CW721 Contract\"\n styles={{\n label: { color: '#adb5bd' },\n radio: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n </Group>\n </Radio.Group>\n\n <BaseTextInput label=\"NFT Contract Address\" placeholder=\"ixo1...\" value={data.address} onChange={(e) => onChange({ ...data, address: e.currentTarget.value })} required />\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, Button, Group, Text, Card } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { InstantiateData, Coin } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseNumberInput from '@/mantine/components/Base/BaseNumberInput';\n\nexport const InstantiateActionForm: React.FC<ActionFormProps<InstantiateData>> = ({ data, onChange }) => {\n const [newFund, setNewFund] = useState<Coin>({ denom: 'uixo', amount: '' });\n\n const handleAddFund = () => {\n if (newFund.amount && newFund.denom) {\n onChange({\n ...data,\n funds: [...(data.funds || []), { ...newFund }],\n });\n setNewFund({ denom: 'uixo', amount: '' });\n }\n };\n\n const handleRemoveFund = (index: number) => {\n onChange({\n ...data,\n funds: (data.funds || []).filter((_, i) => i !== index),\n });\n };\n\n const formatMessage = () => {\n try {\n const parsed = JSON.parse(data.message);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return data.message;\n }\n };\n\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Admin Address\" placeholder=\"ixo1...\" value={data.admin} onChange={(e) => onChange({ ...data, admin: e.currentTarget.value })} required />\n\n <BaseNumberInput label=\"Code ID\" placeholder=\"123\" value={data.codeId} onChange={(value) => onChange({ ...data, codeId: Number(value) || 0 })} min={1} required />\n\n <BaseTextInput label=\"Label\" placeholder=\"My Contract\" value={data.label} onChange={(e) => onChange({ ...data, label: e.currentTarget.value })} required />\n\n <BaseTextArea\n label=\"Instantiate Message (JSON)\"\n placeholder='{\"owner\": \"ixo1...\", \"config\": {}}'\n value={formatMessage()}\n onChange={(e) => onChange({ ...data, message: e.currentTarget.value })}\n minRows={4}\n required\n />\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Funds (Optional)\n </Text>\n\n {(data.funds || []).map((fund, index) => (\n <Card key={index} withBorder padding=\"xs\" style={{ backgroundColor: '#2a2a2a', borderColor: '#333' }}>\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n {fund.amount} {fund.denom}\n </Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={() => handleRemoveFund(index)} style={{ color: '#ff6b6b' }}>\n Remove\n </Button>\n </Group>\n </Card>\n ))}\n\n <Group grow>\n <BaseTextInput placeholder=\"Amount\" value={newFund.amount} onChange={(e) => setNewFund({ ...newFund, amount: e.currentTarget.value })} />\n <BaseTextInput placeholder=\"Denom (e.g., uixo)\" value={newFund.denom} onChange={(e) => setNewFund({ ...newFund, denom: e.currentTarget.value })} />\n <Button\n size=\"sm\"\n onClick={handleAddFund}\n style={{\n backgroundColor: 'rgba(0, 255, 157, 0.5)',\n '&:hover': { backgroundColor: 'rgba(0, 255, 157, 1)' },\n }}\n >\n Add Fund\n </Button>\n </Group>\n </Stack>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { MigrateData } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseNumberInput from '@/mantine/components/Base/BaseNumberInput';\n\nexport const MigrateActionForm: React.FC<ActionFormProps<MigrateData>> = ({ data, onChange }) => {\n const formatMessage = () => {\n try {\n const parsed = JSON.parse(data.msg);\n return JSON.stringify(parsed, null, 2);\n } catch {\n return data.msg;\n }\n };\n\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Contract Address\" placeholder=\"ixo1...\" value={data.contract} onChange={(e) => onChange({ ...data, contract: e.currentTarget.value })} required />\n\n <BaseNumberInput label=\"New Code ID\" placeholder=\"456\" value={data.codeId} onChange={(value) => onChange({ ...data, codeId: Number(value) || 0 })} min={1} required />\n\n <BaseTextArea\n label=\"Migration Message (JSON)\"\n placeholder='{\"migrate\": {\"new_param\": \"value\"}}'\n value={formatMessage()}\n onChange={(e) => onChange({ ...data, msg: e.currentTarget.value })}\n minRows={4}\n required\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { UpdateAdminData } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const UpdateAdminActionForm: React.FC<ActionFormProps<UpdateAdminData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Contract Address\" placeholder=\"ixo1...\" value={data.contract} onChange={(e) => onChange({ ...data, contract: e.currentTarget.value })} required />\n\n <BaseTextInput label=\"New Admin Address\" placeholder=\"ixo1...\" value={data.newAdmin} onChange={(e) => onChange({ ...data, newAdmin: e.currentTarget.value })} required />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Radio, Group } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ManageCw20Data } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const ManageCw20ActionForm: React.FC<ActionFormProps<ManageCw20Data>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <Radio.Group label=\"Action\" value={data.adding ? 'add' : 'remove'} onChange={(value) => onChange({ ...data, adding: value === 'add' })}>\n <Group mt=\"xs\">\n <Radio\n value=\"add\"\n label=\"Add CW20 Contract\"\n styles={{\n label: { color: '#adb5bd' },\n radio: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n <Radio\n value=\"remove\"\n label=\"Remove CW20 Contract\"\n styles={{\n label: { color: '#adb5bd' },\n radio: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n </Group>\n </Radio.Group>\n\n <BaseTextInput label=\"Token Contract Address\" placeholder=\"ixo1...\" value={data.address} onChange={(e) => onChange({ ...data, address: e.currentTarget.value })} required />\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, Button, Group, Text, Card } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ManageSubDaosData, SubDao } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const ManageSubDaosActionForm: React.FC<ActionFormProps<ManageSubDaosData>> = ({ data, onChange }) => {\n const [newSubDao, setNewSubDao] = useState<SubDao>({ addr: '', charter: '' });\n const [newRemoveAddress, setNewRemoveAddress] = useState('');\n\n const handleAddSubDao = () => {\n if (newSubDao.addr) {\n onChange({\n ...data,\n toAdd: [...(data.toAdd || []), { ...newSubDao }],\n });\n setNewSubDao({ addr: '', charter: '' });\n }\n };\n\n const handleRemoveFromAddList = (index: number) => {\n onChange({\n ...data,\n toAdd: (data.toAdd || []).filter((_, i) => i !== index),\n });\n };\n\n const handleAddToRemoveList = () => {\n if (newRemoveAddress) {\n onChange({\n ...data,\n toRemove: [...(data.toRemove || []), { address: newRemoveAddress }],\n });\n setNewRemoveAddress('');\n }\n };\n\n const handleRemoveFromRemoveList = (index: number) => {\n onChange({\n ...data,\n toRemove: (data.toRemove || []).filter((_, i) => i !== index),\n });\n };\n\n return (\n <Stack gap=\"md\">\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n SubDAOs to Add\n </Text>\n\n {(data.toAdd || []).map((subDao, index) => (\n <Card key={index} withBorder padding=\"xs\" style={{ backgroundColor: '#2a2a2a', borderColor: '#333' }}>\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n {subDao.addr}\n </Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={() => handleRemoveFromAddList(index)} style={{ color: '#ff6b6b' }}>\n Remove\n </Button>\n </Group>\n {subDao.charter && (\n <Text size=\"xs\" style={{ color: '#adb5bd' }}>\n Charter: {subDao.charter}\n </Text>\n )}\n </Stack>\n </Card>\n ))}\n\n <Stack gap=\"xs\">\n <BaseTextInput placeholder=\"SubDAO Address\" value={newSubDao.addr} onChange={(e) => setNewSubDao({ ...newSubDao, addr: e.currentTarget.value })} />\n <BaseTextArea\n placeholder=\"Charter (optional)\"\n value={newSubDao.charter || ''}\n onChange={(e) => setNewSubDao({ ...newSubDao, charter: e.currentTarget.value })}\n minRows={2}\n />\n <Button\n size=\"sm\"\n onClick={handleAddSubDao}\n style={{\n backgroundColor: 'rgba(0, 255, 157, 0.5)',\n '&:hover': { backgroundColor: 'rgba(0, 255, 157, 1)' },\n }}\n >\n Add SubDAO\n </Button>\n </Stack>\n </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n SubDAOs to Remove\n </Text>\n\n {(data.toRemove || []).map((subDao, index) => (\n <Card key={index} withBorder padding=\"xs\" style={{ backgroundColor: '#2a2a2a', borderColor: '#333' }}>\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n {subDao.address}\n </Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={() => handleRemoveFromRemoveList(index)} style={{ color: '#ff6b6b' }}>\n Remove\n </Button>\n </Group>\n </Card>\n ))}\n\n <Group grow>\n <BaseTextInput placeholder=\"SubDAO Address to Remove\" value={newRemoveAddress} onChange={(e) => setNewRemoveAddress(e.currentTarget.value)} />\n <Button\n size=\"sm\"\n onClick={handleAddToRemoveList}\n style={{\n backgroundColor: '#ff6b6b',\n '&:hover': { backgroundColor: '#fa5252' },\n }}\n >\n Add to Remove List\n </Button>\n </Group>\n </Stack>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Checkbox } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { UpdateInfoData } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const UpdateInfoActionForm: React.FC<ActionFormProps<UpdateInfoData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"DAO Name\" placeholder=\"My DAO\" value={data.name} onChange={(e) => onChange({ ...data, name: e.currentTarget.value })} required />\n\n <BaseTextArea\n label=\"Description\"\n placeholder=\"Describe your DAO\"\n value={data.description}\n onChange={(e) => onChange({ ...data, description: e.currentTarget.value })}\n minRows={3}\n />\n\n <BaseTextInput\n label=\"Image URL (Optional)\"\n placeholder=\"https://example.com/image.png\"\n value={data.image_url || ''}\n onChange={(e) => onChange({ ...data, image_url: e.currentTarget.value || null })}\n />\n\n <BaseTextInput\n label=\"DAO URI (Optional)\"\n placeholder=\"https://example.com/dao-info\"\n value={data.dao_uri || ''}\n onChange={(e) => onChange({ ...data, dao_uri: e.currentTarget.value || null })}\n />\n\n <Checkbox\n label=\"Automatically add CW20 tokens\"\n checked={data.automatically_add_cw20s}\n onChange={(e) => onChange({ ...data, automatically_add_cw20s: e.currentTarget.checked })}\n styles={{\n label: { color: '#adb5bd' },\n input: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n\n <Checkbox\n label=\"Automatically add CW721 NFTs\"\n checked={data.automatically_add_cw721s}\n onChange={(e) => onChange({ ...data, automatically_add_cw721s: e.currentTarget.checked })}\n styles={{\n label: { color: '#adb5bd' },\n input: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Radio, Group } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ManageStorageItemsData } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const ManageStorageItemsActionForm: React.FC<ActionFormProps<ManageStorageItemsData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <Radio.Group label=\"Action\" value={data.setting ? 'set' : 'remove'} onChange={(value) => onChange({ ...data, setting: value === 'set' })}>\n <Group mt=\"xs\">\n <Radio\n value=\"set\"\n label=\"Set Storage Item\"\n styles={{\n label: { color: '#adb5bd' },\n radio: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n <Radio\n value=\"remove\"\n label=\"Remove Storage Item\"\n styles={{\n label: { color: '#adb5bd' },\n radio: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n </Group>\n </Radio.Group>\n\n <BaseTextInput label=\"Storage Key\" placeholder=\"config_key\" value={data.key} onChange={(e) => onChange({ ...data, key: e.currentTarget.value })} required />\n\n {data.setting && (\n <BaseTextArea\n label=\"Storage Value\"\n placeholder=\"Value to store\"\n value={data.value}\n onChange={(e) => onChange({ ...data, value: e.currentTarget.value })}\n minRows={3}\n required\n />\n )}\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, Button, Group, Text, Card } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { DaoAdminExecData } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const DaoAdminExecActionForm: React.FC<ActionFormProps<DaoAdminExecData>> = ({ data, onChange }) => {\n const [newMsg, setNewMsg] = useState('');\n\n const handleAddMessage = () => {\n if (newMsg) {\n try {\n const parsed = JSON.parse(newMsg);\n onChange({\n ...data,\n msgs: [...(data.msgs || []), parsed],\n });\n setNewMsg('');\n } catch {\n // Invalid JSON, don't add\n }\n }\n };\n\n const handleRemoveMessage = (index: number) => {\n onChange({\n ...data,\n msgs: (data.msgs || []).filter((_, i) => i !== index),\n });\n };\n\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Core Address\" placeholder=\"ixo1...\" value={data.coreAddress} onChange={(e) => onChange({ ...data, coreAddress: e.currentTarget.value })} required />\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Messages to Execute\n </Text>\n\n {(data.msgs || []).map((msg, index) => (\n <Card key={index} withBorder padding=\"xs\" style={{ backgroundColor: '#2a2a2a', borderColor: '#333' }}>\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n Message {index + 1}\n </Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={() => handleRemoveMessage(index)} style={{ color: '#ff6b6b' }}>\n Remove\n </Button>\n </Group>\n <Text size=\"xs\" style={{ color: '#adb5bd', fontFamily: 'monospace' }}>\n {JSON.stringify(msg, null, 2).substring(0, 100)}...\n </Text>\n </Card>\n ))}\n\n <BaseTextArea\n placeholder='Add cosmos message as JSON:\\n{\"bank\": {\"send\": {\"to_address\": \"ixo1...\", \"amount\": [{\"denom\": \"uixo\", \"amount\": \"1000\"}]}}}'\n value={newMsg}\n onChange={(e) => setNewMsg(e.currentTarget.value)}\n minRows={4}\n />\n <Button\n size=\"sm\"\n onClick={handleAddMessage}\n style={{\n backgroundColor: 'rgba(0, 255, 157, 0.5)',\n '&:hover': { backgroundColor: 'rgba(0, 255, 157, 1)' },\n }}\n >\n Add Message\n </Button>\n </Stack>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { AcceptToMarketplaceData } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const AcceptToMarketplaceActionForm: React.FC<ActionFormProps<AcceptToMarketplaceData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"DID\" placeholder=\"did:ixo:...\" value={data.did} onChange={(e) => onChange({ ...data, did: e.currentTarget.value })} required />\n\n <BaseTextInput\n label=\"Relayer Node DID\"\n placeholder=\"did:ixo:...\"\n value={data.relayerNodeDid}\n onChange={(e) => onChange({ ...data, relayerNodeDid: e.currentTarget.value })}\n required\n />\n\n <BaseTextInput\n label=\"Relayer Node Address\"\n placeholder=\"ixo1...\"\n value={data.relayerNodeAddress}\n onChange={(e) => onChange({ ...data, relayerNodeAddress: e.currentTarget.value })}\n required\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Alert, Text } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\n\nexport const CreateEntityActionForm: React.FC<ActionFormProps<any>> = ({ data, onChange }) => {\n const handleJsonChange = (value: string) => {\n try {\n const parsed = JSON.parse(value);\n onChange(parsed);\n } catch {\n // Invalid JSON, don't update\n }\n };\n\n return (\n <Stack gap=\"md\">\n <Alert color=\"blue\" style={{ backgroundColor: '#2a2a2a', borderColor: 'rgba(0, 255, 157, 1)' }}>\n <Text size=\"sm\" style={{ color: 'rgba(0, 255, 157, 1)' }}>\n This is a complex entity creation action. Please provide the complete entity data as JSON.\n </Text>\n </Alert>\n\n <BaseTextArea\n label=\"Entity Data (JSON)\"\n placeholder=\"Enter entity creation data as JSON\"\n value={JSON.stringify(data, null, 2)}\n onChange={(e) => handleJsonChange(e.currentTarget.value)}\n minRows={8}\n maxRows={20}\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Checkbox, Group } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { UpdateProposalConfigData } from '../../../../context/types';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\nimport BaseNumberInput from '@/mantine/components/Base/BaseNumberInput';\n\nexport const UpdateVotingConfigActionForm: React.FC<ActionFormProps<UpdateProposalConfigData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <Checkbox\n label=\"Only members can execute\"\n checked={data.onlyMembersExecute}\n onChange={(e) => onChange({ ...data, onlyMembersExecute: e.currentTarget.checked })}\n styles={{\n label: { color: '#adb5bd' },\n input: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n\n <BaseSelect\n label=\"Threshold Type\"\n value={data.thresholdType}\n onChange={(value) => onChange({ ...data, thresholdType: value as '%' | 'majority' })}\n data={[\n { value: 'majority', label: 'Majority' },\n { value: '%', label: 'Percentage' },\n ]}\n />\n\n {data.thresholdType === '%' && (\n <BaseNumberInput\n label=\"Threshold Percentage\"\n placeholder=\"51\"\n value={data.thresholdPercentage || 0}\n onChange={(value) => onChange({ ...data, thresholdPercentage: Number(value) || 0 })}\n min={0}\n max={100}\n suffix=\"%\"\n />\n )}\n\n <Checkbox\n label=\"Enable Quorum\"\n checked={data.quorumEnabled}\n onChange={(e) => onChange({ ...data, quorumEnabled: e.currentTarget.checked })}\n styles={{\n label: { color: '#adb5bd' },\n input: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n\n {data.quorumEnabled && (\n <>\n <BaseSelect\n label=\"Quorum Type\"\n value={data.quorumType}\n onChange={(value) => onChange({ ...data, quorumType: value as '%' | 'majority' })}\n data={[\n { value: 'majority', label: 'Majority' },\n { value: '%', label: 'Percentage' },\n ]}\n />\n\n {data.quorumType === '%' && (\n <BaseNumberInput\n label=\"Quorum Percentage\"\n placeholder=\"20\"\n value={data.quorumPercentage || 0}\n onChange={(value) => onChange({ ...data, quorumPercentage: Number(value) || 0 })}\n min={0}\n max={100}\n suffix=\"%\"\n />\n )}\n </>\n )}\n\n <Group grow>\n <BaseNumberInput\n label=\"Proposal Duration\"\n placeholder=\"7\"\n value={data.proposalDuration}\n onChange={(value) => onChange({ ...data, proposalDuration: Number(value) || 1 })}\n min={1}\n />\n <BaseSelect\n label=\"Duration Units\"\n value={data.proposalDurationUnits}\n onChange={(value) => onChange({ ...data, proposalDurationUnits: value as any })}\n data={[\n { value: 'minutes', label: 'Minutes' },\n { value: 'hours', label: 'Hours' },\n { value: 'days', label: 'Days' },\n { value: 'weeks', label: 'Weeks' },\n ]}\n />\n </Group>\n\n <Checkbox\n label=\"Allow revoting\"\n checked={data.allowRevoting}\n onChange={(e) => onChange({ ...data, allowRevoting: e.currentTarget.checked })}\n styles={{\n label: { color: '#adb5bd' },\n input: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Checkbox } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { UpdatePreProposeConfigData } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\n\nexport const UpdatePreProposeConfigActionForm: React.FC<ActionFormProps<UpdatePreProposeConfigData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <Checkbox\n label=\"Anyone can propose\"\n checked={data.anyoneCanPropose}\n onChange={(e) => onChange({ ...data, anyoneCanPropose: e.currentTarget.checked })}\n styles={{\n label: { color: '#adb5bd' },\n input: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n\n <Checkbox\n label=\"Deposit required\"\n checked={data.depositRequired}\n onChange={(e) => onChange({ ...data, depositRequired: e.currentTarget.checked })}\n styles={{\n label: { color: '#adb5bd' },\n input: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n\n {data.depositRequired && (\n <>\n <BaseTextInput\n label=\"Deposit Amount\"\n placeholder=\"1000\"\n value={data.depositInfo.amount}\n onChange={(e) =>\n onChange({\n ...data,\n depositInfo: { ...data.depositInfo, amount: e.currentTarget.value },\n })\n }\n required\n />\n\n <BaseSelect\n label=\"Deposit Type\"\n value={data.depositInfo.type}\n onChange={(value) =>\n onChange({\n ...data,\n depositInfo: { ...data.depositInfo, type: value as any },\n })\n }\n data={[\n { value: 'native', label: 'Native Token' },\n { value: 'cw20', label: 'CW20 Token' },\n { value: 'voting_module_token', label: 'Voting Module Token' },\n ]}\n />\n\n <BaseTextInput\n label=\"Token Denomination or Address\"\n placeholder=\"uixo\"\n value={data.depositInfo.denomOrAddress}\n onChange={(e) =>\n onChange({\n ...data,\n depositInfo: { ...data.depositInfo, denomOrAddress: e.currentTarget.value },\n })\n }\n required\n />\n\n <BaseTextInput\n label=\"Refund Policy\"\n placeholder=\"always\"\n value={data.depositInfo.refundPolicy}\n onChange={(e) =>\n onChange({\n ...data,\n depositInfo: { ...data.depositInfo, refundPolicy: e.currentTarget.value },\n })\n }\n required\n />\n\n {data.depositInfo.type !== 'native' && (\n <BaseTextArea\n label=\"Token Configuration (JSON)\"\n placeholder='{\"decimals\": 6}'\n value={JSON.stringify(data.depositInfo.token || {}, null, 2)}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.currentTarget.value);\n onChange({\n ...data,\n depositInfo: { ...data.depositInfo, token: parsed },\n });\n } catch {\n // Invalid JSON, don't update\n }\n }}\n minRows={3}\n />\n )}\n </>\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { GovernanceVoteData } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\n\nexport const GovernanceVoteActionForm: React.FC<ActionFormProps<GovernanceVoteData>> = ({ data, onChange }) => {\n const voteOptions = [\n { value: '1', label: 'Yes' },\n { value: '2', label: 'Abstain' },\n { value: '3', label: 'No' },\n { value: '4', label: 'No with Veto' },\n ];\n\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Proposal ID\" placeholder=\"123\" value={data.proposalId} onChange={(e) => onChange({ ...data, proposalId: e.currentTarget.value })} required />\n\n <BaseSelect label=\"Vote Option\" value={data.vote?.toString() || '1'} onChange={(value) => onChange({ ...data, vote: parseInt(value || '1') })} data={voteOptions} required />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Checkbox } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { WithdrawTokenSwapData } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const WithdrawTokenSwapActionForm: React.FC<ActionFormProps<WithdrawTokenSwapData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <Checkbox\n label=\"Contract chosen\"\n checked={data.contractChosen}\n onChange={(e) => onChange({ ...data, contractChosen: e.currentTarget.checked })}\n styles={{\n label: { color: '#adb5bd' },\n input: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n\n {data.contractChosen && (\n <BaseTextInput\n label=\"Token Swap Contract Address\"\n placeholder=\"ixo1...\"\n value={data.tokenSwapContractAddress || ''}\n onChange={(e) => onChange({ ...data, tokenSwapContractAddress: e.currentTarget.value })}\n required\n />\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Checkbox } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { PerformTokenSwapData } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const PerformTokenSwapActionForm: React.FC<ActionFormProps<PerformTokenSwapData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <Checkbox\n label=\"Contract chosen\"\n checked={data.contractChosen}\n onChange={(e) => onChange({ ...data, contractChosen: e.currentTarget.checked })}\n styles={{\n label: { color: '#adb5bd' },\n input: { backgroundColor: '#2a2a2a', borderColor: '#333' },\n }}\n />\n\n {data.contractChosen && (\n <>\n <BaseTextInput\n label=\"Token Swap Contract Address\"\n placeholder=\"ixo1...\"\n value={data.tokenSwapContractAddress || ''}\n onChange={(e) => onChange({ ...data, tokenSwapContractAddress: e.currentTarget.value })}\n required\n />\n\n <BaseTextArea\n label=\"Self Party Information (JSON)\"\n placeholder='{\"tokens\": [{\"denom\": \"uixo\", \"amount\": \"1000\"}]}'\n value={JSON.stringify(data.selfParty || {}, null, 2)}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.currentTarget.value);\n onChange({ ...data, selfParty: parsed });\n } catch {\n // Invalid JSON, don't update\n }\n }}\n minRows={4}\n />\n\n <BaseTextArea\n label=\"Counterparty Information (JSON)\"\n placeholder='{\"address\": \"ixo1...\", \"tokens\": [{\"denom\": \"token\", \"amount\": \"500\"}]}'\n value={JSON.stringify(data.counterparty || {}, null, 2)}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.currentTarget.value);\n onChange({ ...data, counterparty: parsed });\n } catch {\n // Invalid JSON, don't update\n }\n }}\n minRows={4}\n />\n </>\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { StakeToGroupData } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const StakeToGroupActionForm: React.FC<ActionFormProps<StakeToGroupData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput\n label=\"Token Contract Address\"\n placeholder=\"ixo1...\"\n value={data.tokenContract}\n onChange={(e) => onChange({ ...data, tokenContract: e.currentTarget.value })}\n required\n />\n\n <BaseTextInput\n label=\"Staking Contract Address\"\n placeholder=\"ixo1...\"\n value={data.stakingContract}\n onChange={(e) => onChange({ ...data, stakingContract: e.currentTarget.value })}\n required\n />\n\n <BaseTextInput label=\"Amount\" placeholder=\"1000\" value={data.amount} onChange={(e) => onChange({ ...data, amount: e.currentTarget.value })} required />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { SendGroupTokenData } from '../../../../context/types';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\nexport const SendGroupTokenActionForm: React.FC<ActionFormProps<SendGroupTokenData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Contract Address\" placeholder=\"ixo1...\" value={data.contract} onChange={(e) => onChange({ ...data, contract: e.currentTarget.value })} required />\n\n <BaseTextInput label=\"Recipient Address\" placeholder=\"ixo1...\" value={data.toAddress} onChange={(e) => onChange({ ...data, toAddress: e.currentTarget.value })} required />\n\n <BaseTextInput label=\"Amount\" placeholder=\"1000\" value={data.amount} onChange={(e) => onChange({ ...data, amount: e.currentTarget.value })} required />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ValidatorActionsData, ValidatorActionType } from '../../../../context/types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\n\nexport const ValidatorActionsActionForm: React.FC<ActionFormProps<ValidatorActionsData>> = ({ data, onChange }) => {\n const actionTypeOptions = [\n { value: ValidatorActionType.CreateValidator, label: 'Create Validator' },\n { value: ValidatorActionType.EditValidator, label: 'Edit Validator' },\n { value: ValidatorActionType.UnjailValidator, label: 'Unjail Validator' },\n { value: ValidatorActionType.WithdrawValidatorCommission, label: 'Withdraw Commission' },\n ];\n\n return (\n <Stack gap=\"md\">\n <BaseSelect\n label=\"Validator Action Type\"\n value={data.validatorActionType}\n onChange={(value) => onChange({ ...data, validatorActionType: value as ValidatorActionType })}\n data={actionTypeOptions}\n required\n />\n\n {data.validatorActionType === ValidatorActionType.CreateValidator && (\n <BaseTextArea\n label=\"Create Validator Message (JSON)\"\n placeholder='{\"description\": {\"moniker\": \"My Validator\", \"identity\": \"\", \"website\": \"\", \"security_contact\": \"\", \"details\": \"\"}, \"commission\": {\"rate\": \"0.10\", \"max_rate\": \"0.20\", \"max_change_rate\": \"0.01\"}, \"min_self_delegation\": \"1\", \"delegator_address\": \"ixo1...\", \"validator_address\": \"ixovaloper1...\", \"pubkey\": {\"@type\": \"/cosmos.crypto.ed25519.PubKey\", \"key\": \"...\"}, \"value\": {\"denom\": \"uixo\", \"amount\": \"1000000\"}}'\n value={data.createMsg}\n onChange={(e) => onChange({ ...data, createMsg: e.currentTarget.value })}\n minRows={8}\n required\n />\n )}\n\n {data.validatorActionType === ValidatorActionType.EditValidator && (\n <BaseTextArea\n label=\"Edit Validator Message (JSON)\"\n placeholder='{\"description\": {\"moniker\": \"Updated Validator\", \"identity\": \"\", \"website\": \"\", \"security_contact\": \"\", \"details\": \"\"}, \"validator_address\": \"ixovaloper1...\", \"commission_rate\": \"0.15\", \"min_self_delegation\": \"1\"}'\n value={data.editMsg}\n onChange={(e) => onChange({ ...data, editMsg: e.currentTarget.value })}\n minRows={6}\n required\n />\n )}\n </Stack>\n );\n};\n","import { ActionTypeConfig, ActionRegistry } from './types';\nimport {\n SpendData,\n ManageMembersData,\n StakeData,\n JoinData,\n StakeType,\n AuthzExecData,\n AuthzData,\n BurnNftData,\n MintData,\n ExecuteData,\n InstantiateData,\n ManageSubDaosData,\n ManageCw721Data,\n ManageCw20Data,\n MigrateData,\n TransferNftData,\n UpdateAdminData,\n UpdatePreProposeConfigData,\n UpdateProposalConfigData,\n GovernanceVoteData,\n WithdrawTokenSwapData,\n UpdateInfoData,\n CustomData,\n ManageStorageItemsData,\n ValidatorActionsData,\n ValidatorActionType,\n PerformTokenSwapData,\n DaoAdminExecData,\n StakeToGroupData,\n SendGroupTokenData,\n AcceptToMarketplaceData,\n AuthzExecActionTypes,\n} from '../../../context/types';\n\n// Import existing forms\nimport { SpendActionForm } from '../actions-components/SpendActionForm';\nimport { UpdateMembersActionForm } from '../actions-components/UpdateMembersActionForm';\nimport { StakeActionForm } from '../actions-components/StakeActionForm';\nimport { JoinActionForm } from '../actions-components/JoinActionForm';\n\n// Import all form components\nimport {\n AuthzExecActionForm,\n AuthzGrantActionForm,\n BurnNftActionForm,\n MintActionForm,\n ExecuteActionForm,\n InstantiateActionForm,\n ManageSubDaosActionForm,\n ManageCw721ActionForm,\n ManageCw20ActionForm,\n MigrateActionForm,\n TransferNftActionForm,\n UpdateAdminActionForm,\n UpdatePreProposeConfigActionForm,\n UpdateVotingConfigActionForm,\n GovernanceVoteActionForm,\n WithdrawTokenSwapActionForm,\n UpdateInfoActionForm,\n CustomActionForm,\n ManageStorageItemsActionForm,\n ValidatorActionsActionForm,\n PerformTokenSwapActionForm,\n DaoAdminExecActionForm,\n StakeToGroupActionForm,\n SendGroupTokenActionForm,\n AcceptToMarketplaceActionForm,\n CreateEntityActionForm,\n} from '../actions-components/forms';\n\n// Helper function to create action configs\nconst createActionConfig = <T>(\n label: string,\n value: string,\n category: ActionTypeConfig['category'],\n FormComponent: ActionTypeConfig['FormComponent'],\n getDefaultData: () => T,\n validateData: (data: T) => { isValid: boolean; errors?: string[] },\n getSummary: (data: T) => string,\n description?: string\n): ActionTypeConfig => ({\n label,\n value,\n category,\n description,\n FormComponent,\n getDefaultData,\n validateData,\n getSummary,\n});\n\n// Create the registry\nexport const actionRegistry: ActionRegistry = new Map([\n // Treasury Actions\n [\n 'Spend',\n createActionConfig<SpendData>(\n 'Spend',\n 'Spend',\n 'treasury',\n SpendActionForm as any,\n () => ({ to: '', denom: 'uixo', amount: '' }),\n (data) => ({\n isValid: !!data.to && !!data.amount && !!data.denom,\n errors: [!data.to && 'Recipient address is required', !data.amount && 'Amount is required', !data.denom && 'Denomination is required'].filter(Boolean) as string[],\n }),\n (data) => `Send ${data.amount} ${data.denom} to ${data.to.slice(0, 8)}...`,\n 'Send funds from treasury'\n ),\n ],\n\n [\n 'SendGroupToken',\n createActionConfig<SendGroupTokenData>(\n 'Send Group Token',\n 'SendGroupToken',\n 'treasury',\n SendGroupTokenActionForm as any,\n () => ({ contract: '', toAddress: '', amount: '' }),\n (data) => ({\n isValid: !!data.contract && !!data.toAddress && !!data.amount,\n errors: [!data.contract && 'Contract address is required', !data.toAddress && 'Recipient address is required', !data.amount && 'Amount is required'].filter(\n Boolean\n ) as string[],\n }),\n (data) => `Send ${data.amount} tokens to ${data.toAddress.slice(0, 8)}...`,\n 'Transfer group tokens'\n ),\n ],\n\n [\n 'Mint',\n createActionConfig<MintData>(\n 'Mint Tokens',\n 'Mint',\n 'treasury',\n MintActionForm as any,\n () => ({ to: '', amount: 0 }),\n (data) => ({\n isValid: !!data.to && data.amount > 0,\n errors: [!data.to && 'Recipient address is required', data.amount <= 0 && 'Amount must be greater than 0'].filter(Boolean) as string[],\n }),\n (data) => `Mint ${data.amount} tokens to ${data.to.slice(0, 8)}...`,\n 'Mint new tokens'\n ),\n ],\n\n [\n 'WithdrawTokenSwap',\n createActionConfig<WithdrawTokenSwapData>(\n 'Withdraw Token Swap',\n 'WithdrawTokenSwap',\n 'treasury',\n WithdrawTokenSwapActionForm as any,\n () => ({ contractChosen: false }),\n (data) => ({\n isValid: data.contractChosen && !!data.tokenSwapContractAddress,\n errors: [!data.contractChosen && 'Contract must be selected', !data.tokenSwapContractAddress && 'Token swap contract address is required'].filter(Boolean) as string[],\n }),\n (_data) => `Withdraw from token swap contract`,\n 'Withdraw funds from token swap'\n ),\n ],\n\n [\n 'PerformTokenSwap',\n createActionConfig<PerformTokenSwapData>(\n 'Perform Token Swap',\n 'PerformTokenSwap',\n 'treasury',\n PerformTokenSwapActionForm as any,\n () => ({ contractChosen: false }),\n (data) => ({\n isValid: data.contractChosen && !!data.tokenSwapContractAddress && !!data.selfParty,\n errors: [\n !data.contractChosen && 'Contract must be selected',\n !data.tokenSwapContractAddress && 'Token swap contract address is required',\n !data.selfParty && 'Self party details are required',\n ].filter(Boolean) as string[],\n }),\n (_data) => `Perform token swap`,\n 'Execute a token swap'\n ),\n ],\n\n // Governance Actions\n [\n 'UpdateMembers',\n createActionConfig<ManageMembersData>(\n 'Update Members',\n 'UpdateMembers',\n 'governance',\n UpdateMembersActionForm as any,\n () => ({ add: [], remove: [] }),\n (data) => ({\n isValid: data.add.length > 0 || data.remove.length > 0,\n errors: [data.add.length === 0 && data.remove.length === 0 && 'Add or remove at least one member'].filter(Boolean) as string[],\n }),\n (data) => `Add ${data.add.length}, Remove ${data.remove.length} members`,\n 'Add or remove DAO members'\n ),\n ],\n\n [\n 'GovernanceVote',\n createActionConfig<GovernanceVoteData>(\n 'Governance Vote',\n 'GovernanceVote',\n 'governance',\n GovernanceVoteActionForm as any,\n () => ({ proposalId: '', vote: 1 }),\n (data) => ({\n isValid: !!data.proposalId && data.vote >= 0,\n errors: [!data.proposalId && 'Proposal ID is required', data.vote < 0 && 'Vote option is required'].filter(Boolean) as string[],\n }),\n (data) => `Vote on proposal #${data.proposalId}`,\n 'Vote on a governance proposal'\n ),\n ],\n\n [\n 'UpdateVotingConfig',\n createActionConfig<UpdateProposalConfigData>(\n 'Update Voting Config',\n 'UpdateVotingConfig',\n 'governance',\n UpdateVotingConfigActionForm as any,\n () => ({\n onlyMembersExecute: false,\n thresholdType: 'majority' as const,\n quorumEnabled: false,\n quorumType: 'majority' as const,\n proposalDuration: 7,\n proposalDurationUnits: 'days' as const,\n allowRevoting: false,\n }),\n (_data) => ({ isValid: true }),\n (_data) => `Update voting configuration`,\n 'Modify voting parameters'\n ),\n ],\n\n [\n 'UpdatePreProposeConfig',\n createActionConfig<UpdatePreProposeConfigData>(\n 'Update Pre-Propose Config',\n 'UpdatePreProposeConfig',\n 'governance',\n UpdatePreProposeConfigActionForm as any,\n () => ({\n depositRequired: false,\n depositInfo: {\n amount: '0',\n type: 'native' as const,\n denomOrAddress: 'uixo',\n refundPolicy: 'always',\n },\n anyoneCanPropose: true,\n }),\n (_data) => ({ isValid: true }),\n (_data) => `Update proposal submission config`,\n 'Configure proposal submission rules'\n ),\n ],\n\n // Staking Actions\n [\n 'Stake',\n createActionConfig<StakeData>(\n 'Stake',\n 'Stake',\n 'staking',\n StakeActionForm as any,\n () => ({\n stakeType: StakeType.Delegate,\n validator: '',\n toValidator: '',\n amount: '',\n denom: 'uixo',\n }),\n (data) => ({\n isValid: !!data.validator && (data.stakeType === StakeType.WithdrawDelegatorReward || (!!data.amount && !!data.denom)),\n errors: [\n !data.validator && 'Validator is required',\n data.stakeType === StakeType.Redelegate && !data.toValidator && 'Destination validator is required',\n data.stakeType !== StakeType.WithdrawDelegatorReward && !data.amount && 'Amount is required',\n ].filter(Boolean) as string[],\n }),\n (data) => `${data.stakeType} ${data.stakeType !== StakeType.WithdrawDelegatorReward ? `${data.amount} ${data.denom}` : 'rewards'}`,\n 'Manage staking operations'\n ),\n ],\n\n [\n 'StakeToGroup',\n createActionConfig<StakeToGroupData>(\n 'Stake to Group',\n 'StakeToGroup',\n 'staking',\n StakeToGroupActionForm as any,\n () => ({ tokenContract: '', stakingContract: '', amount: '' }),\n (data) => ({\n isValid: !!data.tokenContract && !!data.stakingContract && !!data.amount,\n errors: [!data.tokenContract && 'Token contract is required', !data.stakingContract && 'Staking contract is required', !data.amount && 'Amount is required'].filter(\n Boolean\n ) as string[],\n }),\n (data) => `Stake ${data.amount} to group`,\n 'Stake tokens to a group'\n ),\n ],\n\n // DAO Management Actions\n [\n 'Join',\n createActionConfig<JoinData>(\n 'Join',\n 'Join',\n 'dao',\n JoinActionForm as any,\n () => ({ id: '', coreAddress: '', address: '' }),\n (data) => ({\n isValid: !!data.id && !!data.coreAddress && !!data.address,\n errors: [!data.id && 'ID is required', !data.coreAddress && 'Core address is required', !data.address && 'Address is required'].filter(Boolean) as string[],\n }),\n (data) => `Join with ID: ${data.id.slice(0, 20)}...`,\n 'Join a DAO or entity'\n ),\n ],\n\n [\n 'UpdateInfo',\n createActionConfig<UpdateInfoData>(\n 'Update DAO Info',\n 'UpdateInfo',\n 'dao',\n UpdateInfoActionForm as any,\n () => ({\n automatically_add_cw20s: false,\n automatically_add_cw721s: false,\n description: '',\n name: '',\n }),\n (data) => ({\n isValid: !!data.name,\n errors: [!data.name && 'Name is required'].filter(Boolean) as string[],\n }),\n (data) => `Update DAO info: ${data.name}`,\n 'Update DAO information'\n ),\n ],\n\n [\n 'ManageSubDaos',\n createActionConfig<ManageSubDaosData>(\n 'Manage SubDAOs',\n 'ManageSubDaos',\n 'dao',\n ManageSubDaosActionForm as any,\n () => ({ toAdd: [], toRemove: [] }),\n (data) => ({\n isValid: data.toAdd.length > 0 || data.toRemove.length > 0,\n errors: [data.toAdd.length === 0 && data.toRemove.length === 0 && 'Add or remove at least one SubDAO'].filter(Boolean) as string[],\n }),\n (data) => `Add ${data.toAdd.length}, Remove ${data.toRemove.length} SubDAOs`,\n 'Add or remove SubDAOs'\n ),\n ],\n\n [\n 'ManageStorageItems',\n createActionConfig<ManageStorageItemsData>(\n 'Manage Storage Items',\n 'ManageStorageItems',\n 'dao',\n ManageStorageItemsActionForm as any,\n () => ({ setting: true, key: '', value: '' }),\n (data) => ({\n isValid: !!data.key,\n errors: [!data.key && 'Key is required', data.setting && !data.value && 'Value is required when setting'].filter(Boolean) as string[],\n }),\n (data) => (data.setting ? `Set storage: ${data.key}` : `Remove storage: ${data.key}`),\n 'Manage DAO storage items'\n ),\n ],\n\n [\n 'DaoAdminExec',\n createActionConfig<DaoAdminExecData>(\n 'DAO Admin Execute',\n 'DaoAdminExec',\n 'dao',\n DaoAdminExecActionForm as any,\n () => ({ coreAddress: '', msgs: [] }),\n (data) => ({\n isValid: !!data.coreAddress && data.msgs.length > 0,\n errors: [!data.coreAddress && 'Core address is required', data.msgs.length === 0 && 'At least one message is required'].filter(Boolean) as string[],\n }),\n (data) => `Execute ${data.msgs.length} admin messages`,\n 'Execute admin messages'\n ),\n ],\n\n [\n 'AcceptToMarketplace',\n createActionConfig<AcceptToMarketplaceData>(\n 'Accept to Marketplace',\n 'AcceptToMarketplace',\n 'dao',\n AcceptToMarketplaceActionForm as any,\n () => ({ did: '', relayerNodeDid: '', relayerNodeAddress: '' }),\n (data) => ({\n isValid: !!data.did && !!data.relayerNodeDid && !!data.relayerNodeAddress,\n errors: [!data.did && 'DID is required', !data.relayerNodeDid && 'Relayer node DID is required', !data.relayerNodeAddress && 'Relayer node address is required'].filter(\n Boolean\n ) as string[],\n }),\n (data) => `Accept ${data.did.slice(0, 10)}... to marketplace`,\n 'Accept entity to marketplace'\n ),\n ],\n\n [\n 'CreateEntity',\n createActionConfig<any>(\n 'Create Entity',\n 'CreateEntity',\n 'dao',\n CreateEntityActionForm as any,\n () => ({}),\n (_data) => ({ isValid: true }),\n (_data) => `Create new entity`,\n 'Create a new entity'\n ),\n ],\n\n // NFT Actions\n [\n 'BurnNft',\n createActionConfig<BurnNftData>(\n 'Burn NFT',\n 'BurnNft',\n 'nft',\n BurnNftActionForm as any,\n () => ({ collection: '', tokenId: '' }),\n (data) => ({\n isValid: !!data.collection && !!data.tokenId,\n errors: [!data.collection && 'Collection address is required', !data.tokenId && 'Token ID is required'].filter(Boolean) as string[],\n }),\n (data) => `Burn NFT #${data.tokenId}`,\n 'Burn an NFT'\n ),\n ],\n\n [\n 'TransferNft',\n createActionConfig<TransferNftData>(\n 'Transfer NFT',\n 'TransferNft',\n 'nft',\n TransferNftActionForm as any,\n () => ({\n collection: '',\n tokenId: '',\n recipient: '',\n executeSmartContract: false,\n smartContractMsg: '',\n }),\n (data) => ({\n isValid: !!data.collection && !!data.tokenId && !!data.recipient,\n errors: [!data.collection && 'Collection address is required', !data.tokenId && 'Token ID is required', !data.recipient && 'Recipient address is required'].filter(\n Boolean\n ) as string[],\n }),\n (data) => `Transfer NFT #${data.tokenId} to ${data.recipient.slice(0, 8)}...`,\n 'Transfer an NFT'\n ),\n ],\n\n [\n 'ManageCw721',\n createActionConfig<ManageCw721Data>(\n 'Manage CW721',\n 'ManageCw721',\n 'nft',\n ManageCw721ActionForm as any,\n () => ({ adding: true, address: '' }),\n (data) => ({\n isValid: !!data.address,\n errors: [!data.address && 'NFT contract address is required'].filter(Boolean) as string[],\n }),\n (data) => `${data.adding ? 'Add' : 'Remove'} CW721: ${data.address.slice(0, 8)}...`,\n 'Manage CW721 NFT contracts'\n ),\n ],\n\n // Smart Contract Actions\n [\n 'Execute',\n createActionConfig<ExecuteData>(\n 'Execute Contract',\n 'Execute',\n 'contract',\n ExecuteActionForm as any,\n () => ({ address: '', message: '{}', funds: [] }),\n (data) => ({\n isValid: !!data.address && !!data.message,\n errors: [!data.address && 'Contract address is required', !data.message && 'Message is required'].filter(Boolean) as string[],\n }),\n (data) => `Execute contract: ${data.address.slice(0, 8)}...`,\n 'Execute a smart contract'\n ),\n ],\n\n [\n 'Instantiate',\n createActionConfig<InstantiateData>(\n 'Instantiate Contract',\n 'Instantiate',\n 'contract',\n InstantiateActionForm as any,\n () => ({ admin: '', codeId: 0, label: '', message: '{}', funds: [] }),\n (data) => ({\n isValid: !!data.admin && data.codeId > 0 && !!data.label && !!data.message,\n errors: [\n !data.admin && 'Admin address is required',\n data.codeId <= 0 && 'Valid code ID is required',\n !data.label && 'Label is required',\n !data.message && 'Message is required',\n ].filter(Boolean) as string[],\n }),\n (data) => `Instantiate contract from code ${data.codeId}`,\n 'Instantiate a new contract'\n ),\n ],\n\n [\n 'Migrate',\n createActionConfig<MigrateData>(\n 'Migrate Contract',\n 'Migrate',\n 'contract',\n MigrateActionForm as any,\n () => ({ contract: '', codeId: 0, msg: '{}' }),\n (data) => ({\n isValid: !!data.contract && data.codeId > 0 && !!data.msg,\n errors: [!data.contract && 'Contract address is required', data.codeId <= 0 && 'Valid code ID is required', !data.msg && 'Migration message is required'].filter(\n Boolean\n ) as string[],\n }),\n (data) => `Migrate contract to code ${data.codeId}`,\n 'Migrate a contract'\n ),\n ],\n\n [\n 'UpdateAdmin',\n createActionConfig<UpdateAdminData>(\n 'Update Contract Admin',\n 'UpdateAdmin',\n 'contract',\n UpdateAdminActionForm as any,\n () => ({ contract: '', newAdmin: '' }),\n (data) => ({\n isValid: !!data.contract && !!data.newAdmin,\n errors: [!data.contract && 'Contract address is required', !data.newAdmin && 'New admin address is required'].filter(Boolean) as string[],\n }),\n (data) => `Update admin for ${data.contract.slice(0, 8)}...`,\n 'Change contract admin'\n ),\n ],\n\n [\n 'ManageCw20',\n createActionConfig<ManageCw20Data>(\n 'Manage CW20',\n 'ManageCw20',\n 'contract',\n ManageCw20ActionForm as any,\n () => ({ adding: true, address: '' }),\n (data) => ({\n isValid: !!data.address,\n errors: [!data.address && 'Token contract address is required'].filter(Boolean) as string[],\n }),\n (data) => `${data.adding ? 'Add' : 'Remove'} CW20: ${data.address.slice(0, 8)}...`,\n 'Manage CW20 token contracts'\n ),\n ],\n\n // Authorization Actions\n [\n 'AuthzExec',\n createActionConfig<AuthzExecData>(\n 'Authz Execute',\n 'AuthzExec',\n 'governance',\n AuthzExecActionForm as any,\n () => ({\n authzExecActionType: AuthzExecActionTypes.Delegate,\n delegate: {} as any,\n undelegate: {} as any,\n redelegate: {} as any,\n claimRewards: {} as any,\n custom: '',\n }),\n (data) => ({\n isValid: !!data.authzExecActionType,\n errors: [!data.authzExecActionType ? 'Action type is required' : ''].filter(Boolean) as string[],\n }),\n (data) => `Execute authorized action: ${data.authzExecActionType}`,\n 'Execute authorized action'\n ),\n ],\n\n [\n 'AuthzGrant',\n createActionConfig<AuthzData>(\n 'Authz Grant',\n 'AuthzGrant',\n 'governance',\n AuthzGrantActionForm as any,\n () => ({ typeUrl: '', value: { grantee: '', msgTypeUrl: '' } }),\n (data) => ({\n isValid: !!data.typeUrl && !!data.value.grantee && !!data.value.msgTypeUrl,\n errors: [!data.typeUrl && 'Type URL is required', !data.value.grantee && 'Grantee address is required', !data.value.msgTypeUrl && 'Message type URL is required'].filter(\n Boolean\n ) as string[],\n }),\n (data) => `Grant authorization to ${data.value.grantee.slice(0, 8)}...`,\n 'Grant authorization'\n ),\n ],\n\n [\n 'AuthzRevoke',\n createActionConfig<AuthzData>(\n 'Authz Revoke',\n 'AuthzRevoke',\n 'governance',\n AuthzGrantActionForm as any, // Reuse same form\n () => ({ typeUrl: '', value: { grantee: '', msgTypeUrl: '' } }),\n (data) => ({\n isValid: !!data.value.grantee && !!data.value.msgTypeUrl,\n errors: [!data.value.grantee && 'Grantee address is required', !data.value.msgTypeUrl && 'Message type URL is required'].filter(Boolean) as string[],\n }),\n (data) => `Revoke authorization from ${data.value.grantee.slice(0, 8)}...`,\n 'Revoke authorization'\n ),\n ],\n\n // Validator Actions\n [\n 'ValidatorActions',\n createActionConfig<ValidatorActionsData>(\n 'Validator Actions',\n 'ValidatorActions',\n 'validator',\n ValidatorActionsActionForm as any,\n () => ({\n validatorActionType: ValidatorActionType.WithdrawValidatorCommission,\n createMsg: '',\n editMsg: '',\n }),\n (data) => ({\n isValid: !!data.validatorActionType,\n errors: [\n !data.validatorActionType && 'Action type is required',\n data.validatorActionType === ValidatorActionType.CreateValidator && !data.createMsg && 'Create message is required',\n data.validatorActionType === ValidatorActionType.EditValidator && !data.editMsg && 'Edit message is required',\n ].filter(Boolean) as string[],\n }),\n (data) => `Validator action: ${data.validatorActionType}`,\n 'Perform validator operations'\n ),\n ],\n\n // Custom Action\n [\n 'Custom',\n createActionConfig<CustomData>(\n 'Custom',\n 'Custom',\n 'custom',\n CustomActionForm as any,\n () => ({ message: '{}' }),\n (data) => {\n try {\n JSON.parse(data.message);\n return { isValid: true };\n } catch {\n return { isValid: false, errors: ['Invalid JSON message'] };\n }\n },\n (_data) => `Custom action`,\n 'Execute custom JSON message'\n ),\n ],\n]);\n\n// Helper functions\nexport const getActionConfig = (type: string): ActionTypeConfig | undefined => {\n return actionRegistry.get(type);\n};\n\nexport const getActionsByCategory = (category: string): ActionTypeConfig[] => {\n return Array.from(actionRegistry.values()).filter((config) => config.category === category);\n};\n\nexport const getAllActionTypes = (): string[] => {\n return Array.from(actionRegistry.keys());\n};\n\nexport const getCategorizedActions = () => {\n const categorized = new Map<string, ActionTypeConfig[]>();\n\n actionRegistry.forEach((config) => {\n const categoryActions = categorized.get(config.category) || [];\n categoryActions.push(config);\n categorized.set(config.category, categoryActions);\n });\n\n return categorized;\n};\n","import { ActionCategory } from './types';\n\nexport const ACTION_CATEGORIES: ActionCategory[] = [\n {\n id: 'treasury',\n label: 'Treasury',\n description: 'Manage funds and tokens',\n icon: '💰',\n },\n {\n id: 'governance',\n label: 'Governance',\n description: 'Voting and proposals',\n icon: '🗳️',\n },\n {\n id: 'staking',\n label: 'Staking',\n description: 'Delegate and manage stakes',\n icon: '🔒',\n },\n {\n id: 'dao',\n label: 'DAO Management',\n description: 'Manage DAO configuration',\n icon: '🏛️',\n },\n {\n id: 'nft',\n label: 'NFTs',\n description: 'NFT operations',\n icon: '🎨',\n },\n {\n id: 'contract',\n label: 'Smart Contracts',\n description: 'Contract interactions',\n icon: '📄',\n },\n {\n id: 'validator',\n label: 'Validator',\n description: 'Validator operations',\n icon: '⚡',\n },\n {\n id: 'custom',\n label: 'Custom',\n description: 'Custom actions',\n icon: '🔧',\n },\n];\n","import React from 'react';\nimport { Stack } from '@mantine/core';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\n\ninterface VoteTabProps {\n voteTitle: string;\n voteSubtitle: string;\n voteIcon: string;\n onVoteTitleChange: (value: string) => void;\n onVoteSubtitleChange: (value: string) => void;\n onVoteIconChange: (value: string) => void;\n}\n\nexport const VoteTab: React.FC<VoteTabProps> = ({ voteTitle, voteSubtitle, voteIcon, onVoteTitleChange, onVoteSubtitleChange, onVoteIconChange }) => {\n return (\n <Stack gap=\"md\">\n <BaseTextInput label=\"Vote Button Title\" placeholder=\"Vote on this proposal\" value={voteTitle} onChange={(event) => onVoteTitleChange(event.currentTarget.value)} />\n\n <BaseTextInput label=\"Vote Button Subtitle\" placeholder=\"Cast your vote\" value={voteSubtitle} onChange={(event) => onVoteSubtitleChange(event.currentTarget.value)} />\n\n <BaseTextInput label=\"Vote Icon\" placeholder=\"checklist\" value={voteIcon} onChange={(event) => onVoteIconChange(event.currentTarget.value)} />\n </Stack>\n );\n};\n","import React, { useMemo } from 'react';\nimport { OnChainProposalCard } from '../components/OnChainProposalCard';\nimport { usePanel } from '../../../hooks/usePanel';\nimport { FlowConfig } from './FlowConfig';\nimport { useFlowBusinessLogic } from './useFlowBusinessLogic';\nimport type { IxoBlockProps } from '@/core/types';\n\nconst PROPOSAL_FLOW_PANEL_ID = 'proposal-flow-panel';\n\nexport const ProposalFlowView = ({ block, editor }: IxoBlockProps) => {\n const panelId = `${PROPOSAL_FLOW_PANEL_ID}-${block.id}`;\n\n const { title, description, icon, proposalId, status, isFetching, isExecuting, fetchError, executionError, handleExecuteProposal, handleIconChange } = useFlowBusinessLogic({\n block,\n editor,\n });\n\n const panelContent = useMemo(() => <FlowConfig editor={editor} block={block} />, [editor, block]);\n\n const { open } = usePanel(panelId, panelContent);\n\n const handleVote = () => {\n // Open the panel with the vote tab active\n open();\n };\n\n // Only show vote button if voting is enabled AND proposal has been created (has proposalId)\n const showVoteButton = (block.props.voteEnabled || false) && proposalId;\n\n return (\n <OnChainProposalCard\n title={title}\n description={description}\n icon={icon}\n iconPlaceholder={icon}\n status={status || 'open'}\n proposalId={proposalId}\n isFetching={isFetching}\n error={fetchError || executionError}\n onClick={open}\n onIconChange={handleIconChange}\n onExecute={handleExecuteProposal}\n isExecuting={isExecuting}\n onVote={handleVote}\n voteEnabled={showVoteButton}\n />\n );\n};\n","import React from 'react';\nimport { Card, Group, Stack, Text, Skeleton, Badge, Button } from '@mantine/core';\nimport { getIcon } from '@/mantine/utils/iconMap';\n\nexport type ChainProposalStatus = 'open' | 'passed' | 'rejected' | 'executed' | 'closed' | 'execution_failed' | 'veto_timelock';\n\nexport interface OnChainProposalCardProps {\n title: string;\n description: string;\n icon: string;\n iconPlaceholder: string;\n status: ChainProposalStatus;\n proposalId: string;\n isFetching: boolean;\n error?: string | null | Error;\n onClick: () => void;\n onIconChange: (value: string) => void;\n onExecute?: () => void;\n isExecuting?: boolean;\n onVote?: () => void;\n voteEnabled?: boolean;\n}\n\nconst statusColor: Record<ChainProposalStatus, string> = {\n open: '#4dabf7',\n passed: '#51cf66',\n rejected: '#ff6b6b',\n executed: '#ffd43b',\n closed: '#868e96',\n execution_failed: '#ffa94d',\n veto_timelock: '#9775fa',\n};\n\nconst getDisplayDescription = (description: string) => {\n if (!description) {\n return 'No description available';\n }\n\n return description.length > 140 ? `${description.substring(0, 140)}...` : description;\n};\n\nexport const OnChainProposalCard: React.FC<OnChainProposalCardProps> = ({\n title,\n description,\n icon,\n status = 'open',\n isFetching,\n error,\n onClick,\n onExecute,\n isExecuting = false,\n onVote,\n voteEnabled = false,\n}) => {\n return (\n <Card\n shadow=\"sm\"\n padding=\"lg\"\n radius=\"md\"\n withBorder\n w=\"100%\"\n style={{\n cursor: 'pointer',\n }}\n onClick={onClick}\n >\n {isFetching && (\n <Stack>\n <Skeleton height={20} width=\"70%\" />\n <Skeleton height={16} />\n <Skeleton height={16} width=\"40%\" />\n </Stack>\n )}\n\n {error && (\n <Text size=\"sm\" c=\"red\">\n {typeof error === 'string' ? error : error.message || 'An error occurred while loading the proposal.'}\n </Text>\n )}\n\n {!isFetching && (\n <Group justify=\"space-between\" align=\"flex-start\">\n <Group align=\"flex-start\" gap=\"md\" style={{ flex: 1 }}>\n {getIcon('file-text', icon)}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Group gap=\"xs\">\n <Text size=\"md\" fw={600}>\n {title || 'Proposal'}\n </Text>\n <Badge color={statusColor[status]} variant=\"filled\" size=\"sm\" radius=\"sm\">\n {status.replace(/_/g, ' ').toUpperCase()}\n </Badge>\n </Group>\n\n <Text size=\"sm\" c=\"dimmed\">\n {getDisplayDescription(description)}\n </Text>\n </Stack>\n </Group>\n\n <Group gap=\"xs\">\n {voteEnabled && onVote && status === 'open' && (\n <Button\n size=\"sm\"\n variant=\"filled\"\n color=\"blue\"\n onClick={(e) => {\n e.stopPropagation();\n onVote();\n }}\n style={{ flexShrink: 0 }}\n >\n Vote\n </Button>\n )}\n {status === 'passed' && onExecute && (\n <Button\n size=\"sm\"\n variant=\"filled\"\n color=\"green\"\n loading={isExecuting}\n onClick={(e) => {\n e.stopPropagation();\n onExecute();\n }}\n style={{ flexShrink: 0 }}\n >\n Execute\n </Button>\n )}\n </Group>\n </Group>\n )}\n </Card>\n );\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport { Stack, Button, Text, Card, Loader, SegmentedControl } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { useFlowBusinessLogic } from './useFlowBusinessLogic';\nimport { useVoteBusinessLogic } from './useVoteBusinessLogic';\nimport { FlowGeneralTab as VoteTab } from './VoteGeneralTab';\nimport { ActionsTab } from './ActionsTab';\nimport { ProposalAction } from '../../../context/types';\nimport { useBlocknoteHandlers } from '@/mantine/context';\nimport type { DAOGroup } from '@/mantine/context/BlocknoteContext';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\nexport const FlowConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n const handlers = useBlocknoteHandlers();\n const coreAddress = (block.props.coreAddress as string) || '';\n\n const [errors, setErrors] = useState<{ [key: string]: string }>({});\n const [isCreating, setIsCreating] = useState(false);\n const [groups, setGroups] = useState<DAOGroup[]>([]);\n const [loadingGroups, setLoadingGroups] = useState(false);\n const [inputMode, setInputMode] = useState<'select' | 'manual'>('select');\n const [manualAddress, setManualAddress] = useState('');\n\n const { createProposal, title, description, proposalId } = useFlowBusinessLogic({\n block,\n editor,\n });\n const isProposalCreated = !!proposalId;\n\n // Vote business logic\n const voteLogic = useVoteBusinessLogic({ block });\n\n const updateProp = useCallback(\n (key: string, value: any) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n [key]: value,\n },\n });\n },\n [editor, block]\n );\n\n // Initialize input mode and manual address based on existing coreAddress\n useEffect(() => {\n if (coreAddress) {\n // Check if the coreAddress matches any of the groups\n const matchesGroup = groups.some((g) => g.coreAddress === coreAddress);\n if (matchesGroup) {\n setInputMode('select');\n } else {\n setInputMode('manual');\n setManualAddress(coreAddress);\n }\n }\n }, [coreAddress, groups]);\n\n // Fetch groups on mount\n useEffect(() => {\n const fetchGroups = async () => {\n if (!handlers?.getDAOGroups) {\n return;\n }\n\n setLoadingGroups(true);\n try {\n const daoGroups = await handlers.getDAOGroups();\n setGroups(daoGroups);\n } catch (error) {\n // Error handled silently\n } finally {\n setLoadingGroups(false);\n }\n };\n\n fetchGroups();\n }, [handlers]);\n\n const validateForm = () => {\n const newErrors: { [key: string]: string } = {};\n\n if (!title.trim()) {\n newErrors.title = 'Title is required';\n }\n\n if (!description.trim()) {\n newErrors.description = 'Description is required';\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleCreateProposal = async () => {\n if (!validateForm() || !coreAddress) {\n return;\n }\n\n setIsCreating(true);\n setErrors({});\n\n try {\n await createProposal(coreAddress, title, description);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Failed to create proposal';\n setErrors({ general: message });\n } finally {\n setIsCreating(false);\n }\n };\n\n const createProposalTab = (\n <Stack gap=\"lg\">\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n DAO Group\n </Text>\n <SegmentedControl\n value={inputMode}\n onChange={(value) => setInputMode(value as 'select' | 'manual')}\n data={[\n { label: 'Select DAO', value: 'select' },\n { label: 'Manual Entry', value: 'manual' },\n ]}\n fullWidth\n disabled={isProposalCreated}\n />\n {inputMode === 'select' ? (\n <BaseSelect\n placeholder={loadingGroups ? 'Loading groups...' : 'Select a DAO group'}\n value={groups.find((g) => g.coreAddress === coreAddress)?.id || null}\n onChange={(value) => {\n if (value) {\n const selectedGroup = groups.find((g) => g.id === value);\n if (selectedGroup) {\n updateProp('coreAddress', selectedGroup.coreAddress);\n }\n }\n }}\n data={groups.map((group) => ({\n value: group.id,\n label: group.name,\n }))}\n disabled={loadingGroups || isProposalCreated}\n rightSection={loadingGroups ? <Loader size=\"xs\" /> : undefined}\n searchable\n />\n ) : (\n <BaseTextInput\n placeholder=\"Enter DAO core address\"\n value={manualAddress}\n onChange={(event) => {\n const newAddress = event.currentTarget.value;\n setManualAddress(newAddress);\n updateProp('coreAddress', newAddress);\n }}\n disabled={isProposalCreated}\n />\n )}\n {coreAddress && (\n <Card padding=\"sm\" radius=\"md\" withBorder>\n <Text size=\"xs\" c=\"dimmed\">\n Core Address:{' '}\n <Text span ff=\"monospace\" c=\"bright\">\n {coreAddress.slice(0, 20)}...{coreAddress.slice(-10)}\n </Text>\n </Text>\n </Card>\n )}\n </Stack>\n\n <BaseTextInput\n label=\"Title\"\n value={title}\n onChange={(e) => updateProp('title', e.target.value)}\n placeholder=\"Enter proposal title\"\n error={errors.title}\n required\n disabled={isProposalCreated}\n />\n\n <BaseTextArea\n label=\"Description\"\n value={description}\n onChange={(e) => updateProp('description', e.target.value)}\n placeholder=\"Describe what this proposal will do\"\n rows={6}\n error={errors.description}\n required\n disabled={isProposalCreated}\n />\n\n {errors.general && (\n <Text size=\"sm\" c=\"red\">\n {errors.general}\n </Text>\n )}\n\n {isProposalCreated && (\n <Card padding=\"md\" radius=\"md\" withBorder style={{ borderColor: 'var(--mantine-color-green-6)' }}>\n <Text fw={500} size=\"sm\" c=\"green\">\n Proposal Created Successfully\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n Your proposal has been created and is now open for voting.\n </Text>\n </Card>\n )}\n\n <Button fullWidth onClick={handleCreateProposal} disabled={isProposalCreated} loading={isCreating}>\n {isProposalCreated ? 'Proposal Created' : 'Create Proposal'}\n </Button>\n </Stack>\n );\n\n const handleActionsChange = useCallback(\n (newActions: ProposalAction[]) => {\n updateProp('actions', JSON.stringify(newActions));\n },\n [updateProp]\n );\n\n const extraTabs = [\n {\n label: 'Create',\n value: 'create',\n content: createProposalTab,\n },\n {\n label: 'Actions',\n value: 'actions',\n content: <ActionsTab actions={block.props.actions || '[]'} onActionsChange={handleActionsChange} isProposalCreated={isProposalCreated} />,\n },\n {\n label: 'Vote',\n value: 'vote',\n content: (\n <VoteTab\n proposalId={voteLogic.proposalId}\n proposalTitle={voteLogic.title}\n proposalDescription={voteLogic.description}\n proposalStatus={voteLogic.status}\n userVote={voteLogic.userVote}\n proposalContractAddress={voteLogic.proposalContractAddress}\n onVote={voteLogic.handleVote}\n block={block}\n status={voteLogic.status}\n />\n ),\n },\n ];\n\n return (\n <BaseRightPanelLayout onClose={closePanel} title=\"Proposal Settings\" isTemplate={false}>\n <ReusablePanel extraTabs={extraTabs} context={{ editor, block }} />\n </BaseRightPanelLayout>\n );\n};\n","import { useEffect, useState } from 'react';\nimport { useBlocknoteHandlers } from '../../../context/BlocknoteContext';\nimport { useSharedProposal } from '../../../context';\nimport type { ChainProposalStatus } from '../components/OnChainProposalCard';\nimport type { IxoBlockProps } from '@/core/types';\n\nconst CHAIN_STATUSES: ChainProposalStatus[] = ['open', 'passed', 'rejected', 'executed', 'closed', 'execution_failed', 'veto_timelock'];\n\nconst isChainStatus = (value: string): value is ChainProposalStatus => {\n return CHAIN_STATUSES.includes(value as ChainProposalStatus);\n};\n\nconst parseStatus = (value: unknown): ChainProposalStatus | null => {\n if (typeof value !== 'string') return null;\n return isChainStatus(value) ? value : null;\n};\n\ninterface UseFlowBusinessLogicProps {\n block: IxoBlockProps['block'];\n editor: IxoBlockProps['editor'];\n}\n\nexport const useFlowBusinessLogic = ({ block, editor }: UseFlowBusinessLogicProps) => {\n const [proposalContractAddress, setProposalContractAddress] = useState<string | null>(null);\n const [isExecuting, setIsExecuting] = useState(false);\n const [executionError, setExecutionError] = useState<string | null>(null);\n\n // Safe hook access\n let handlers: ReturnType<typeof useBlocknoteHandlers> | null = null;\n try {\n handlers = useBlocknoteHandlers();\n } catch {\n handlers = null;\n }\n\n // Extract block props with defaults\n // Type assertion is safe here because we know this hook is only used with proposal blocks\n const props = block.props as any;\n const title = (props.title as string) || '';\n const description = (props.description as string) || '';\n const icon = (props.icon as string) || '📝';\n const proposalId = (props.proposalId as string) || '';\n const status = parseStatus(props.status);\n const coreAddress = (props.coreAddress as string) || '';\n\n // Use shared proposal state - only fetch if we have both proposalId and status\n const shouldFetch = !!proposalId && !!status && !!proposalContractAddress;\n const {\n proposal,\n loading: isFetching,\n error: fetchError,\n refetch,\n invalidate,\n } = useSharedProposal({\n proposalId,\n contractAddress: proposalContractAddress || '',\n autoFetch: shouldFetch,\n });\n\n const updateBlockProps = (nextProps: Record<string, unknown>) => {\n editor.updateBlock(block, {\n props: { ...block.props, ...nextProps },\n });\n };\n\n // Load proposal contract address when we have proposalId\n useEffect(() => {\n if (!handlers || !coreAddress || !proposalId) {\n setProposalContractAddress(null);\n return;\n }\n\n let isCancelled = false;\n\n const loadProposalContract = async () => {\n try {\n const { proposalContractAddress: resolvedAddress } = await handlers.getProposalContractAddress({ coreAddress });\n\n if (!isCancelled) {\n setProposalContractAddress(resolvedAddress);\n }\n } catch (error) {\n // Error handled silently\n }\n };\n\n void loadProposalContract();\n\n return () => {\n isCancelled = true;\n };\n }, [handlers, coreAddress, proposalId]);\n\n // Update block status when proposal data changes\n useEffect(() => {\n if (!proposal) return;\n\n const chainStatus = proposal.proposal.status;\n const parsedStatus = parseStatus(chainStatus);\n\n if (parsedStatus && parsedStatus !== status) {\n updateBlockProps({ status: parsedStatus });\n }\n }, [proposal, status]);\n\n const handleExecuteProposal = async () => {\n if (!handlers || !proposalContractAddress || !proposalId) {\n return;\n }\n\n setIsExecuting(true);\n setExecutionError(null);\n\n try {\n await handlers.executeProposal({\n proposalId: parseInt(proposalId, 10),\n proposalContractAddress,\n });\n\n invalidate();\n await refetch();\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Failed to execute proposal';\n setExecutionError(message);\n } finally {\n setIsExecuting(false);\n }\n };\n\n const handleIconChange = (newIcon: string) => {\n updateBlockProps({ icon: newIcon });\n };\n\n const createProposal = async (coreAddress: string, localTitle: string, localDescription: string): Promise<string> => {\n if (!handlers) {\n throw new Error('Handlers not available');\n }\n\n // Parse actions from block props - read directly from block.props to get latest value\n let actions: any[] = [];\n try {\n const actionsJson = block.props.actions as string;\n if (actionsJson) {\n actions = JSON.parse(actionsJson);\n }\n } catch (error) {\n // Silent error\n }\n\n // First get the pre-proposal contract address\n const { preProposalContractAddress } = await handlers.getPreProposalContractAddress({\n coreAddress,\n });\n\n const { groupContractAddress } = await handlers.getGroupContractAddress({\n coreAddress,\n });\n\n const params = {\n preProposalContractAddress,\n title: localTitle,\n description: localDescription,\n actions: actions.length > 0 ? actions : undefined,\n coreAddress,\n groupContractAddress,\n };\n\n const createdProposalId = await handlers.createProposal(params);\n\n // Update the block's proposalId and status properties\n updateBlockProps({ proposalId: createdProposalId, status: 'open' });\n\n return createdProposalId;\n };\n\n return {\n // Block props\n title,\n description,\n icon,\n proposalId,\n status,\n // Loading states\n isFetching,\n isExecuting,\n // Errors\n fetchError,\n executionError,\n // Handlers\n handleExecuteProposal,\n handleIconChange,\n createProposal,\n };\n};\n","import { useState, useEffect } from 'react';\nimport { useBlocknoteHandlers } from '../../../context/BlocknoteContext';\nimport type { IxoBlockProps } from '@/core/types';\nimport type { VoteResponse, Vote } from '../../../context/BlocknoteContext';\n\nexport interface VoteParams {\n proposalId: number;\n rationale?: string;\n vote: Vote;\n proposalContractAddress: string;\n}\n\ninterface UseVoteBusinessLogicProps {\n block: IxoBlockProps['block'];\n}\n\nexport const useVoteBusinessLogic = ({ block }: UseVoteBusinessLogicProps) => {\n const [localError, setLocalError] = useState<string | null>(null);\n const [userVote, setUserVote] = useState<VoteResponse | null>(null);\n const [proposalContractAddress, setProposalContractAddress] = useState<string | null>(null);\n\n // Safe hook access\n let handlers: ReturnType<typeof useBlocknoteHandlers> | null = null;\n try {\n handlers = useBlocknoteHandlers();\n } catch {\n handlers = null;\n }\n\n // Get proposal data from block props\n const proposalId = block.props.proposalId || '';\n const title = block.props.title || '';\n const description = block.props.description || '';\n const status = block.props.status || 'draft';\n const coreAddress = (block.props.coreAddress as string) || '';\n\n // Load proposal contract address when we have proposalId\n useEffect(() => {\n if (!handlers || !coreAddress || !proposalId) {\n setProposalContractAddress(null);\n return;\n }\n\n let isCancelled = false;\n\n const loadProposalContract = async () => {\n try {\n const { proposalContractAddress: resolvedAddress } = await handlers.getProposalContractAddress({ coreAddress });\n\n if (!isCancelled) {\n setProposalContractAddress(resolvedAddress);\n }\n } catch (error) {\n // Error handled silently\n }\n };\n\n void loadProposalContract();\n\n return () => {\n isCancelled = true;\n };\n }, [handlers, coreAddress, proposalId]);\n\n // Load user's vote when we have all required data\n useEffect(() => {\n if (!handlers || !proposalContractAddress || !proposalId) {\n return;\n }\n\n let isCancelled = false;\n\n const loadUserVote = async () => {\n try {\n const user = handlers.getCurrentUser();\n const vote = await handlers.getVote(proposalContractAddress, proposalId, user.address);\n\n if (!isCancelled) {\n setUserVote(vote);\n }\n } catch (error) {\n // Error handled silently\n }\n };\n\n void loadUserVote();\n\n return () => {\n isCancelled = true;\n };\n }, [handlers, proposalContractAddress, proposalId]);\n\n const handleVote = async (voteParams: VoteParams) => {\n if (!handlers) return;\n\n try {\n await handlers.vote(voteParams);\n // Reload user vote after voting\n const user = await handlers.getCurrentUser();\n const vote = await handlers.getVote(voteParams.proposalContractAddress, voteParams.proposalId.toString(), user.address);\n setUserVote(vote);\n } catch (err) {\n setLocalError('Failed to submit vote');\n }\n };\n\n return {\n proposalId,\n title,\n description,\n status,\n userVote,\n proposalContractAddress: proposalContractAddress || '',\n localError,\n handleVote,\n };\n};\n","import React, { useState } from 'react';\nimport { Stack, Text, Group, Card, Button, Progress, Box, Tooltip } from '@mantine/core';\nimport type { VoteResponse, Vote } from '../../../context/BlocknoteContext';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\n\nexport interface VoteParams {\n proposalId: number;\n rationale?: string;\n vote: Vote;\n proposalContractAddress: string;\n}\n\ninterface FlowGeneralTabProps {\n proposalData?: any;\n proposalId?: string;\n proposalTitle?: string;\n proposalDescription?: string;\n proposalStatus?: string;\n userVote?: VoteResponse | null;\n proposalContractAddress?: string | null;\n onVote?: (voteParams: VoteParams) => void;\n block: any;\n status: string;\n isDisabled?: {\n isDisabled: 'disable';\n message?: string;\n };\n}\n\nconst getVoteIcon = (voteType: Vote) => {\n switch (voteType) {\n case 'yes':\n return '👍';\n case 'no':\n case 'no_with_veto':\n return '👎';\n case 'abstain':\n return '🤷';\n default:\n return null;\n }\n};\n\nexport const FlowGeneralTab: React.FC<FlowGeneralTabProps> = ({\n proposalId,\n proposalTitle,\n proposalDescription,\n proposalStatus,\n userVote,\n proposalContractAddress,\n onVote,\n status,\n isDisabled,\n}) => {\n const disabled = isDisabled?.isDisabled === 'disable';\n const [selectedVote, setSelectedVote] = useState<Vote | ''>('');\n const [rationale, setRationale] = useState('');\n\n // Check if proposal has been submitted based on proposalId from dependency\n const hasSubmittedProposal = Boolean(proposalId);\n\n // Check if user has already voted\n const hasVoted = Boolean(userVote?.vote);\n\n const handleSlideToSign = () => {\n if (selectedVote && proposalId && proposalContractAddress) {\n onVote?.({\n proposalId: parseInt(proposalId),\n rationale: rationale.trim() || undefined,\n vote: selectedVote,\n proposalContractAddress,\n });\n setSelectedVote('');\n setRationale('');\n }\n };\n\n return (\n <Stack gap=\"lg\">\n {/* Alert when proposal not submitted */}\n {!hasSubmittedProposal && (\n <Card\n padding=\"md\"\n radius=\"md\"\n style={{\n backgroundColor: '#2a2a2a',\n border: '1px solid #ffd43b',\n color: '#f1f3f5',\n }}\n >\n <Group gap=\"xs\" align=\"center\">\n <Box\n style={{\n width: 8,\n height: 8,\n backgroundColor: '#ffd43b',\n borderRadius: '50%',\n }}\n />\n <Text size=\"sm\" fw={500} style={{ color: '#ffd43b' }}>\n Waiting for Proposal Submission\n </Text>\n </Group>\n <Text size=\"xs\" style={{ color: '#adb5bd', marginTop: 4 }}>\n The connected proposal needs to be submitted before voting can begin.\n </Text>\n </Card>\n )}\n\n {/* Status Section */}\n <Card\n padding=\"lg\"\n radius=\"md\"\n style={{\n backgroundColor: '#2a2a2a',\n border: '1px solid #333',\n color: '#f1f3f5',\n opacity: !hasSubmittedProposal ? 0.6 : 1,\n }}\n >\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n <Box\n w={8}\n h={8}\n style={{\n backgroundColor: hasSubmittedProposal ? '#51cf66' : '#868e96',\n borderRadius: '50%',\n }}\n />\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n Status\n </Text>\n </Group>\n <Text size=\"sm\" fw={500} style={{ color: '#f1f3f5' }}>\n {hasSubmittedProposal ? (proposalStatus === 'open' ? 'Active' : proposalStatus || 'Active') : 'Waiting'}\n </Text>\n </Group>\n\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n <Box w={8} h={8} style={{ backgroundColor: '#adb5bd', borderRadius: '50%' }} />\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n Proposal ID\n </Text>\n </Group>\n <Text size=\"sm\" fw={500} style={{ color: '#f1f3f5' }}>\n {hasSubmittedProposal ? `#${proposalId}` : 'TBD'}\n </Text>\n </Group>\n\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n <Box w={8} h={8} style={{ backgroundColor: '#adb5bd', borderRadius: '50%' }} />\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n Title\n </Text>\n </Group>\n <Text\n size=\"sm\"\n fw={500}\n style={{\n color: hasSubmittedProposal ? '#f1f3f5' : '#868e96',\n }}\n >\n {hasSubmittedProposal ? proposalTitle || 'Untitled' : 'N/A'}\n </Text>\n </Group>\n\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n <Box w={8} h={8} style={{ backgroundColor: '#adb5bd', borderRadius: '50%' }} />\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n Description\n </Text>\n </Group>\n <Text size=\"sm\" fw={500} style={{ color: '#f1f3f5' }} title={proposalDescription}>\n {hasSubmittedProposal\n ? proposalDescription\n ? proposalDescription.length > 30\n ? proposalDescription.substring(0, 30) + '...'\n : proposalDescription\n : 'No description'\n : 'N/A'}\n </Text>\n </Group>\n\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n <Box w={8} h={8} style={{ backgroundColor: '#adb5bd', borderRadius: '50%' }} />\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n My Vote\n </Text>\n </Group>\n <Text size=\"sm\" fw={500} style={{ color: '#f1f3f5' }}>\n {hasSubmittedProposal ? (userVote?.vote ? userVote.vote.vote : 'Pending') : 'N/A'}\n </Text>\n </Group>\n </Stack>\n\n {/* Voting Progress */}\n <Stack gap=\"xs\">\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n {hasSubmittedProposal ? 'Voting is open' : 'Voting pending'}\n </Text>\n <Progress\n value={hasSubmittedProposal ? 75 : 0}\n size=\"md\"\n style={{\n backgroundColor: '#333',\n '& .mantine-Progress-bar': {\n background: hasSubmittedProposal ? 'linear-gradient(90deg, #51cf66 0%, #ff6b6b 100%)' : '#868e96',\n },\n }}\n />\n </Stack>\n </Card>\n\n {/* Vote Options - only show when proposal is submitted and open and user hasn't voted */}\n {hasSubmittedProposal && !hasVoted && (status === 'open' || proposalStatus === 'open') && (\n <Stack gap=\"lg\">\n {disabled && isDisabled?.message && (\n <Card\n padding=\"md\"\n radius=\"md\"\n style={{\n backgroundColor: '#2a2a2a',\n border: '1px solid #ffd43b',\n color: '#f1f3f5',\n }}\n >\n <Group gap=\"xs\" align=\"center\">\n <Box\n style={{\n width: 8,\n height: 8,\n backgroundColor: '#ffd43b',\n borderRadius: '50%',\n }}\n />\n <Text size=\"sm\" fw={500} style={{ color: '#ffd43b' }}>\n {isDisabled.message}\n </Text>\n </Group>\n </Card>\n )}\n\n <Stack gap=\"md\">\n {(['yes', 'no', 'no_with_veto', 'abstain'] as Vote[]).map((voteType) => (\n <Tooltip key={voteType} label={disabled ? isDisabled?.message : undefined} disabled={!disabled} position=\"top\">\n <Button\n variant=\"outline\"\n leftSection={getVoteIcon(voteType)}\n onClick={() => !disabled && setSelectedVote(voteType)}\n disabled={disabled}\n size=\"md\"\n style={{\n backgroundColor: selectedVote === voteType ? '#333' : '#2a2a2a',\n borderColor: selectedVote === voteType ? '#51cf66' : '#444',\n borderWidth: selectedVote === voteType ? '2px' : '1px',\n color: disabled ? '#666' : '#f1f3f5',\n justifyContent: 'flex-start',\n padding: '12px',\n textAlign: 'left',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n <Text fw={500} tt=\"capitalize\" style={{ textAlign: 'left' }}>\n {voteType === 'no_with_veto' ? 'No with Veto' : voteType}\n </Text>\n </Button>\n </Tooltip>\n ))}\n </Stack>\n\n {/* Optional Rationale */}\n <BaseTextArea\n label=\"Rationale (optional)\"\n value={rationale}\n onChange={(e) => setRationale(e.target.value)}\n placeholder=\"Explain your vote...\"\n disabled={disabled}\n rows={3}\n />\n </Stack>\n )}\n\n {(status === 'executed' || proposalStatus === 'executed') && (\n <Card\n padding=\"md\"\n radius=\"md\"\n style={{\n backgroundColor: '#2a2a2a',\n border: '1px solid #333',\n }}\n >\n <Stack gap=\"xs\">\n <Text fw={500} size=\"sm\" style={{ color: '#f1f3f5' }}>\n Proposal Executed\n </Text>\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n This proposal has been successfully executed.\n </Text>\n </Stack>\n </Card>\n )}\n\n {/* Disabled voting options when proposal not submitted */}\n {!hasSubmittedProposal && (\n <Stack gap=\"lg\">\n <Stack gap=\"md\">\n {(['yes', 'no', 'no_with_veto', 'abstain'] as Vote[]).map((voteType) => (\n <Tooltip key={voteType} label=\"Proposal must be submitted before voting\" position=\"top\">\n <Button\n variant=\"outline\"\n leftSection={getVoteIcon(voteType)}\n size=\"md\"\n disabled\n style={{\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#666',\n justifyContent: 'flex-start',\n padding: '12px',\n textAlign: 'left',\n opacity: 0.5,\n }}\n >\n <Text fw={500} tt=\"capitalize\" style={{ textAlign: 'left' }}>\n {voteType === 'no_with_veto' ? 'No with Veto' : voteType}\n </Text>\n </Button>\n </Tooltip>\n ))}\n </Stack>\n </Stack>\n )}\n\n {/* Sign Button - Only when proposal submitted, vote chosen, and user hasn't voted */}\n {hasSubmittedProposal && !hasVoted && selectedVote && (status === 'open' || proposalStatus === 'open') && (\n <Tooltip label={disabled ? isDisabled?.message : 'Sign to vote'} position=\"top\">\n <div>\n <Button\n size=\"sm\"\n onClick={handleSlideToSign}\n disabled={!selectedVote || disabled}\n style={{\n backgroundColor: selectedVote && !disabled ? '#333' : '#1a1a1a',\n borderColor: '#333',\n color: selectedVote && !disabled ? '#f1f3f5' : '#666',\n borderRadius: '8px',\n width: '100%',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n Sign\n </Button>\n </div>\n </Tooltip>\n )}\n\n {/* Show message when user has already voted */}\n {hasVoted && hasSubmittedProposal && (\n <Card\n padding=\"md\"\n radius=\"md\"\n style={{\n backgroundColor: '#2a2a2a',\n border: '1px solid #51cf66',\n color: '#f1f3f5',\n }}\n >\n <Stack gap=\"xs\">\n <Group gap=\"xs\" align=\"center\">\n <Box\n style={{\n width: 8,\n height: 8,\n backgroundColor: '#51cf66',\n borderRadius: '50%',\n }}\n />\n <Text size=\"sm\" fw={500} style={{ color: '#51cf66' }}>\n Vote Submitted\n </Text>\n </Group>\n <Text size=\"xs\" style={{ color: '#adb5bd' }}>\n You have already voted on this proposal. Your vote:{' '}\n <Text span fw={500} tt=\"capitalize\">\n {userVote?.vote?.vote}\n </Text>\n </Text>\n </Stack>\n </Card>\n )}\n </Stack>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Alert, Button, Card, Stack, Text } from '@mantine/core';\nimport { ProposalAction } from '../../../context/types';\nimport { ActionsCard } from '../actions-components/ActionsCard';\nimport { ActionsPanel } from '../ActionsPanel';\n\ninterface ActionsTabProps {\n actions: string;\n onActionsChange: (actions: ProposalAction[]) => void;\n isProposalCreated: boolean;\n}\n\nexport const ActionsTab: React.FC<ActionsTabProps> = ({ actions, onActionsChange, isProposalCreated }) => {\n const [isEditorVisible, setIsEditorVisible] = useState(false);\n const [editingIndex, setEditingIndex] = useState<number | null>(null);\n\n const parseActions = (actionsJson: string): ProposalAction[] => {\n if (!actionsJson) return [];\n try {\n return JSON.parse(actionsJson);\n } catch (error) {\n return [];\n }\n };\n\n const currentActions = parseActions(actions);\n\n useEffect(() => {\n if (!isProposalCreated && currentActions.length === 0 && !isEditorVisible) {\n setEditingIndex(null);\n setIsEditorVisible(true);\n }\n }, [currentActions.length, isEditorVisible, isProposalCreated]);\n\n const handleAddAction = useCallback(() => {\n if (isProposalCreated) return;\n setEditingIndex(null);\n setIsEditorVisible(true);\n }, [isProposalCreated]);\n\n const handleEditAction = useCallback(\n (index: number) => {\n if (isProposalCreated) return;\n setEditingIndex(index);\n setIsEditorVisible(true);\n },\n [isProposalCreated]\n );\n\n const handleRemoveAction = useCallback(\n (index: number) => {\n if (isProposalCreated) return;\n const newActions = currentActions.filter((_, i) => i !== index);\n onActionsChange(newActions);\n },\n [currentActions, onActionsChange, isProposalCreated]\n );\n\n const handleSaveAction = useCallback(\n (action: ProposalAction) => {\n let newActions: ProposalAction[];\n if (editingIndex !== null) {\n // Edit existing action\n newActions = currentActions.map((a, i) => (i === editingIndex ? action : a));\n } else {\n // Add new action\n newActions = [...currentActions, action];\n }\n onActionsChange(newActions);\n setIsEditorVisible(false);\n setEditingIndex(null);\n },\n [editingIndex, currentActions, onActionsChange]\n );\n\n const handleCancelEditor = useCallback(() => {\n setIsEditorVisible(false);\n setEditingIndex(null);\n }, []);\n\n return (\n <Stack gap=\"md\">\n {isProposalCreated && (\n <Alert color=\"yellow\" title=\"Actions Locked\">\n <Text size=\"sm\">Actions cannot be edited after the proposal has been created. These actions are now part of the on-chain proposal.</Text>\n </Alert>\n )}\n\n <Stack gap=\"sm\">\n {!isProposalCreated && (\n <Button\n onClick={handleAddAction}\n style={{\n backgroundColor: 'rgba(0, 255, 157, 0.5)',\n '&:hover': {\n backgroundColor: 'rgba(0, 255, 157, 1)',\n },\n }}\n >\n Add Action\n </Button>\n )}\n\n <ActionsCard\n actions={currentActions}\n isSelected={false}\n onClick={() => {}}\n onEditAction={handleEditAction}\n onRemoveAction={handleRemoveAction}\n disabled={isProposalCreated}\n />\n </Stack>\n\n {!isProposalCreated && isEditorVisible && (\n <Card\n withBorder\n padding=\"lg\"\n radius=\"md\"\n style={{\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n }}\n >\n <ActionsPanel actions={currentActions} editingIndex={editingIndex} onSave={handleSaveAction} onCancel={handleCancelEditor} isTemplateMode={false} />\n </Card>\n )}\n </Stack>\n );\n};\n","import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport { Stack, TextInput, Text, Badge, Group, Switch, Select, Divider, Radio, Paper, Button, ActionIcon, Alert } from '@mantine/core';\nimport { IconPlus, IconX, IconUsers, IconShieldPlus, IconShieldCheck, IconTrash, IconUser, IconRobot, IconKey } from '@tabler/icons-react';\nimport type { IxoBlockProps } from '@/core/types';\nimport type { SignedCapability, Capability, DelegationGrant } from '@/core/types/capability';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport { GrantPermissionPanel } from './GrantPermissionPanel';\n\nexport type AuthorizationTabState = {\n parentCapability: string;\n authorisedActors: string;\n activationUpstreamNodeId: string;\n activationRequiredStatus: 'pending' | 'approved' | 'rejected' | '';\n activationRequireAuthorisedActor: boolean;\n};\n\ninterface AuthorizationTabProps extends IxoBlockProps {\n /** Flow URI for capability scoping */\n flowUri?: string;\n /** Entity DID that owns this flow */\n entityDid?: string;\n /** Flow permissions (actors with flow-level access) */\n flowActors?: Array<{ did: string; displayName: string }>;\n /** Callback to open flow permissions panel */\n onOpenFlowPermissions?: () => void;\n}\n\ntype AuthMode = 'anyone' | 'actors' | 'capability';\ntype ViewMode = 'main' | 'grant';\n\n/**\n * Helper to get available blocks for upstream selection\n */\nfunction getAvailableBlocks(document: any[], currentBlockId: string) {\n return document\n .filter((b: any) => b.id !== currentBlockId && b.type !== 'paragraph')\n .map((b: any) => ({\n id: b.id,\n type: b.type,\n name: b.props?.title || b.props?.name,\n }));\n}\n\n/**\n * Generate a unique capability ID\n */\nfunction generateCapabilityId(): string {\n return `cap_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\nexport const AuthorizationTab: React.FC<AuthorizationTabProps> = ({\n editor,\n block: initialBlock,\n flowUri = '',\n entityDid: entityDidProp = '',\n flowActors = [],\n onOpenFlowPermissions,\n}) => {\n const handlers = useBlocknoteHandlers();\n\n // Get flow owner DID from editor (the user who owns this flow)\n const flowOwnerDid = useMemo(() => {\n return editor.getFlowOwnerDid?.() || '';\n }, [editor]);\n\n // Get current user DID\n const currentUserDid = useMemo(() => {\n return editor.user?.id || '';\n }, [editor.user?.id]);\n\n // Check if current user is the flow owner\n const isFlowOwner = useMemo(() => {\n return flowOwnerDid && currentUserDid && flowOwnerDid === currentUserDid;\n }, [flowOwnerDid, currentUserDid]);\n\n // Get entity DID from prop or handler (for reference, not signing)\n const entityDid = useMemo(() => {\n if (entityDidProp) return entityDidProp;\n if (handlers.getEntityDid) return handlers.getEntityDid() || '';\n return '';\n }, [entityDidProp, handlers]);\n\n // Root capability state\n const [creatingRootCapability, setCreatingRootCapability] = useState(false);\n const [rootCapabilityError, setRootCapabilityError] = useState<string | null>(null);\n\n // Force re-render when editor document changes\n const [, forceUpdate] = useState({});\n\n // Get the current block from editor document (not the stale prop)\n const block = useMemo(() => {\n const doc = editor?.document || [];\n return doc.find((b: any) => b.id === initialBlock.id) || initialBlock;\n }, [editor?.document, initialBlock]);\n\n // Subscribe to editor changes to force re-render\n useEffect(() => {\n if (!editor) return;\n\n const handleChange = () => {\n forceUpdate({});\n };\n\n editor.onEditorContentChange(handleChange);\n\n return () => {\n // Cleanup handled by React\n };\n }, [editor]);\n\n // Read current values from block props\n const parentCapability = (block.props.parentCapability as string) || '';\n const authorisedActors = (block.props.authorisedActors as string) || '';\n const activationUpstreamNodeId = (block.props.activationUpstreamNodeId as string) || '';\n const activationRequiredStatus = (block.props.activationRequiredStatus as AuthorizationTabState['activationRequiredStatus']) || '';\n const activationRequireAuthorisedActor = Boolean(block.props.activationRequireAuthorisedActor);\n\n // Get available blocks for upstream selection\n const availableBlocks = useMemo(() => getAvailableBlocks(editor?.document || [], block.id), [editor?.document, block.id]);\n\n // Update block props helper\n const updateProps = useCallback(\n (updates: Partial<AuthorizationTabState>) => {\n const currentBlock = (editor?.document || []).find((b: any) => b.id === block.id) || block;\n editor.updateBlock(currentBlock, {\n props: {\n ...currentBlock.props,\n ...updates,\n },\n });\n },\n [editor, block.id]\n );\n\n const actorList = useMemo(() => {\n if (!authorisedActors.trim()) return [] as string[];\n try {\n const parsed = JSON.parse(authorisedActors);\n if (Array.isArray(parsed)) {\n return parsed\n .filter((item) => typeof item === 'string')\n .map((item) => item.trim())\n .filter(Boolean);\n }\n } catch {\n return authorisedActors\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n }\n return [] as string[];\n }, [authorisedActors]);\n\n const [newActorDid, setNewActorDid] = useState('');\n const [viewMode, setViewMode] = useState<ViewMode>('main');\n\n // Check if root capability exists\n const rootCapability = useMemo(() => {\n return editor.getRootCapability?.() || null;\n }, [editor, creatingRootCapability]); // Re-check after creating\n\n // Create root capability (flow owner signs)\n const createRootCapability = async (pin: string): Promise<{ success: boolean; error?: string }> => {\n if (!handlers.signCapability) {\n return { success: false, error: 'Signing capability not available.' };\n }\n\n if (!flowOwnerDid) {\n return { success: false, error: 'Flow owner DID not set.' };\n }\n\n if (!isFlowOwner) {\n return { success: false, error: 'Only the flow owner can create the root capability.' };\n }\n\n setCreatingRootCapability(true);\n setRootCapabilityError(null);\n\n try {\n const fullFlowUri = flowUri || `ixo:flow:${editor.getFlowMetadata?.()?.doc_id || 'unknown'}`;\n\n // Root capability: flow owner grants themselves full access\n const rootCapabilities: Capability[] = [{ can: 'flow/*', with: fullFlowUri }];\n\n // Sign the root capability (flow owner signs as user)\n const result = await handlers.signCapability({\n issuerDid: flowOwnerDid,\n issuerType: 'user', // Flow owner signs as user, not entity\n audience: flowOwnerDid, // Self-issued root\n capabilities: rootCapabilities,\n proofs: [], // Root has no proofs\n pin,\n });\n\n // Store the root capability\n const signedRootCap: SignedCapability = {\n id: result.id || generateCapabilityId(),\n issuer: flowOwnerDid,\n audience: flowOwnerDid,\n capabilities: rootCapabilities,\n proofs: [],\n issuedAt: new Date().toISOString(),\n signature: result.signature,\n };\n\n editor.setDelegation?.(signedRootCap);\n editor.setRootCapabilityId?.(signedRootCap.id);\n\n setCreatingRootCapability(false);\n forceUpdate({});\n return { success: true };\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'Failed to create root capability';\n setRootCapabilityError(errorMsg);\n setCreatingRootCapability(false);\n return { success: false, error: errorMsg };\n }\n };\n\n // Get capabilities for this block\n const blockCapabilities = useMemo(() => {\n if (!editor.getAllDelegations) return [];\n const allDelegations = editor.getAllDelegations();\n const blockResource = flowUri ? `${flowUri}:${block.id}` : `ixo:flow:*:${block.id}`;\n\n return allDelegations.filter((cap) =>\n cap.capabilities.some(\n (c) => c.with === blockResource || c.with.endsWith(`:${block.id}`) || c.can === 'flow/*' // Full flow access also grants block access\n )\n );\n }, [editor, flowUri, block.id]);\n\n // Derive initial auth mode from props\n const derivedAuthMode: AuthMode = useMemo(() => {\n if (parentCapability || blockCapabilities.length > 0) return 'capability';\n if (actorList.length > 0) return 'actors';\n return 'anyone';\n }, [parentCapability, actorList, blockCapabilities.length]);\n\n // Use local state for auth mode so user can switch modes before adding data\n const [authMode, setAuthMode] = useState<AuthMode>(derivedAuthMode);\n\n // Sync local state when derived mode changes (e.g., when data is loaded)\n useEffect(() => {\n setAuthMode(derivedAuthMode);\n }, [derivedAuthMode]);\n\n const handleAuthModeChange = (mode: AuthMode) => {\n setAuthMode(mode);\n if (mode === 'anyone') {\n updateProps({ authorisedActors: '', parentCapability: '' });\n } else if (mode === 'actors') {\n updateProps({ parentCapability: '' });\n } else if (mode === 'capability') {\n updateProps({ authorisedActors: '' });\n }\n };\n\n const addActor = (did: string) => {\n if (!did.trim()) return;\n const newList = [...actorList, did.trim()];\n updateProps({ authorisedActors: JSON.stringify(newList) });\n setNewActorDid('');\n };\n\n const removeActor = (did: string) => {\n const newList = actorList.filter((a) => a !== did);\n updateProps({ authorisedActors: newList.length > 0 ? JSON.stringify(newList) : '' });\n };\n\n // Handle capability grant (flow owner signs as user)\n const handleGrantCapability = async (grant: DelegationGrant, pin: string): Promise<{ success: boolean; error?: string }> => {\n if (!handlers.signCapability) {\n return { success: false, error: 'Signing capability not available. Please set up user signing first.' };\n }\n\n if (!flowOwnerDid) {\n return { success: false, error: 'Flow owner DID not set. The flow may not be properly initialized.' };\n }\n\n if (!isFlowOwner) {\n return { success: false, error: 'Only the flow owner can grant capabilities on this flow.' };\n }\n\n // Check if root capability exists\n const existingRootCap = editor.getRootCapability?.();\n if (!existingRootCap) {\n return { success: false, error: 'Root capability not found. Please ensure the flow was properly initialized with signing authority.' };\n }\n\n try {\n // Use root capability as proof for delegation chain\n const proofs = [existingRootCap.id];\n\n // Build capability for this block\n const blockResource = flowUri ? `${flowUri}:${block.id}` : `ixo:flow:*:${block.id}`;\n const capabilities: Capability[] = grant.capabilities.length > 0 ? grant.capabilities : [{ can: 'flow/block/execute', with: blockResource }];\n\n // Sign the capability (flow owner signs as user, not entity)\n const result = await handlers.signCapability({\n issuerDid: flowOwnerDid,\n issuerType: 'user', // Flow owner signs as user\n audience: grant.audience,\n capabilities,\n proofs: [...proofs, ...grant.proofs],\n expiration: grant.expiration,\n pin,\n });\n\n // Store the capability in the editor's delegation map\n const signedCap: SignedCapability = {\n id: result.id || generateCapabilityId(),\n issuer: flowOwnerDid,\n audience: grant.audience,\n capabilities,\n proofs: [...proofs, ...grant.proofs],\n expiration: grant.expiration,\n issuedAt: new Date().toISOString(),\n signature: result.signature,\n };\n\n editor.setDelegation?.(signedCap);\n\n // Also add the audience to authorisedActors for quick lookup\n if (!actorList.includes(grant.audience)) {\n const newList = [...actorList, grant.audience];\n updateProps({\n authorisedActors: JSON.stringify(newList),\n parentCapability: signedCap.id, // Reference the capability\n });\n } else {\n updateProps({ parentCapability: signedCap.id });\n }\n\n forceUpdate({});\n return { success: true };\n } catch (error) {\n return { success: false, error: error instanceof Error ? error.message : 'Failed to grant capability' };\n }\n };\n\n // Revoke capability\n const handleRevokeCapability = async (capabilityId: string) => {\n editor.removeDelegation?.(capabilityId);\n\n // If this was the parentCapability, clear it\n if (parentCapability === capabilityId) {\n updateProps({ parentCapability: '' });\n }\n\n forceUpdate({});\n };\n\n // Search users handler for modal\n const searchUsers = async (query: string) => {\n if (handlers.searchUsers) {\n return handlers.searchUsers(query);\n }\n return [];\n };\n\n // Get oracles handler for modal\n const getOracles = async () => {\n if (handlers.getRegisteredOracles && entityDid) {\n return handlers.getRegisteredOracles(entityDid);\n }\n return [];\n };\n\n const upstreamOptions = availableBlocks.map((b) => ({\n value: b.id,\n label: b.name || `${b.type} (${b.id.slice(-8)})`,\n }));\n\n const formatExpiration = (exp?: number) => {\n if (!exp) return 'Never';\n const date = new Date(exp);\n if (date < new Date()) return 'Expired';\n return date.toLocaleDateString();\n };\n\n // Show grant permission panel with slide transition\n if (viewMode === 'grant') {\n return (\n <div\n style={{\n animation: 'slideInFromRight 0.3s ease-out',\n }}\n >\n <style>{`\n @keyframes slideInFromRight {\n from { opacity: 0; transform: translateX(50px); }\n to { opacity: 1; transform: translateX(0); }\n }\n `}</style>\n <GrantPermissionPanel\n onBack={() => setViewMode('main')}\n flowUri={flowUri || `ixo:flow:${block.id}`}\n blocks={[{ id: block.id, type: block.type, name: block.props.title as string }]}\n searchUsers={searchUsers}\n getOracles={getOracles}\n onGrant={handleGrantCapability}\n />\n </div>\n );\n }\n\n return (\n <Stack gap=\"md\">\n {/* Auth Mode Selection */}\n <Stack gap=\"xs\">\n <Text fw={600} size=\"sm\">\n Who can execute this block?\n </Text>\n <Radio.Group value={authMode} onChange={(v) => handleAuthModeChange(v as AuthMode)}>\n <Stack gap=\"xs\">\n <Radio value=\"anyone\" label=\"Anyone with flow access\" description=\"All users who have been granted permission to this flow\" />\n <Radio value=\"actors\" label=\"Only specific actors (simple whitelist)\" description=\"Restrict by DID without capability signing\" />\n <Radio value=\"capability\" label=\"UCAN capability-based authorization\" description=\"Grant signed capabilities to specific users\" />\n </Stack>\n </Radio.Group>\n </Stack>\n\n {/* Actors List (when actors mode) */}\n {authMode === 'actors' && (\n <Paper p=\"sm\" withBorder>\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Text size=\"sm\" fw={500}>\n Authorized Actors\n </Text>\n {onOpenFlowPermissions && (\n <Button variant=\"subtle\" size=\"xs\" leftSection={<IconUsers size={14} />} onClick={onOpenFlowPermissions}>\n View flow permissions\n </Button>\n )}\n </Group>\n\n {actorList.length > 0 && (\n <Stack gap={4}>\n {actorList.map((actor) => {\n const flowActor = flowActors.find((f) => f.did === actor);\n return (\n <Group key={actor} justify=\"space-between\">\n <Group gap=\"xs\">\n <Badge size=\"sm\" variant=\"light\">\n {flowActor?.displayName || actor.slice(-12)}\n </Badge>\n {flowActor && (\n <Text size=\"xs\" c=\"dimmed\">\n (from flow permissions)\n </Text>\n )}\n </Group>\n <ActionIcon size=\"sm\" variant=\"subtle\" color=\"red\" onClick={() => removeActor(actor)}>\n <IconX size={14} />\n </ActionIcon>\n </Group>\n );\n })}\n </Stack>\n )}\n\n {/* Add from flow permissions */}\n {flowActors.length > 0 && (\n <Select\n placeholder=\"Add from flow permissions...\"\n data={flowActors.filter((f) => !actorList.includes(f.did)).map((f) => ({ value: f.did, label: f.displayName }))}\n onChange={(v) => v && addActor(v)}\n clearable\n />\n )}\n\n {/* Manual DID entry */}\n <Group gap=\"xs\">\n <TextInput placeholder=\"Enter DID manually...\" value={newActorDid} onChange={(e) => setNewActorDid(e.currentTarget.value)} style={{ flex: 1 }} />\n <ActionIcon onClick={() => addActor(newActorDid)} disabled={!newActorDid.trim()}>\n <IconPlus size={16} />\n </ActionIcon>\n </Group>\n </Stack>\n </Paper>\n )}\n\n {/* Capability Mode */}\n {authMode === 'capability' && (\n <Paper p=\"sm\" withBorder>\n <Stack gap=\"sm\">\n {/* Root Capability Status */}\n {rootCapability ? (\n <Alert color=\"green\" variant=\"light\" icon={<IconKey size={16} />}>\n <Group gap=\"xs\">\n <Text size=\"xs\" fw={500}>\n Root capability established\n </Text>\n <Badge size=\"xs\" variant=\"light\">\n Owner: {flowOwnerDid?.slice(-12) || 'Unknown'}\n </Badge>\n </Group>\n </Alert>\n ) : (\n <Alert color=\"orange\" variant=\"light\" icon={<IconKey size={16} />}>\n <Stack gap={4}>\n <Text size=\"xs\" fw={500}>\n Root capability not found\n </Text>\n <Text size=\"xs\">The flow's root signing authority has not been established. This should be set up when the flow is created.</Text>\n {isFlowOwner && handlers.signCapability && (\n <Button\n size=\"xs\"\n variant=\"light\"\n color=\"orange\"\n loading={creatingRootCapability}\n onClick={async () => {\n const pin = await handlers.requestPin?.({\n title: 'Create Root Capability',\n description: 'Enter your PIN to establish signing authority for this flow',\n });\n if (pin) {\n const result = await createRootCapability(pin);\n if (!result.success) {\n setRootCapabilityError(result.error || 'Failed to create root capability');\n }\n }\n }}\n leftSection={<IconKey size={14} />}\n >\n Initialize Signing Authority\n </Button>\n )}\n {rootCapabilityError && (\n <Text size=\"xs\" c=\"red\">\n {rootCapabilityError}\n </Text>\n )}\n </Stack>\n </Alert>\n )}\n\n {/* Flow Owner Check */}\n {!isFlowOwner && flowOwnerDid && (\n <Alert color=\"blue\" variant=\"light\">\n <Text size=\"xs\">You are not the flow owner. Only the flow owner ({flowOwnerDid.slice(-16)}) can grant capabilities.</Text>\n </Alert>\n )}\n\n <Group justify=\"space-between\">\n <Text size=\"sm\" fw={500}>\n Granted Capabilities\n </Text>\n <Button\n variant=\"light\"\n size=\"xs\"\n leftSection={<IconShieldPlus size={14} />}\n onClick={() => setViewMode('grant')}\n disabled={!handlers.signCapability || !rootCapability || !isFlowOwner}\n >\n Grant Permission\n </Button>\n </Group>\n\n {!handlers.signCapability && (\n <Alert color=\"yellow\" variant=\"light\">\n <Text size=\"xs\">User signing is not configured. Please set up user signing to grant capabilities.</Text>\n </Alert>\n )}\n\n {blockCapabilities.length === 0 ? (\n <Text size=\"sm\" c=\"dimmed\">\n No capabilities granted for this block yet.\n </Text>\n ) : (\n <Stack gap=\"xs\">\n {blockCapabilities.map((cap) => (\n <Paper key={cap.id} p=\"xs\" withBorder>\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n <IconShieldCheck size={16} color=\"var(--mantine-color-green-6)\" />\n <Stack gap={2}>\n <Group gap=\"xs\">\n {cap.audience.includes(':oracle:') ? <IconRobot size={14} /> : <IconUser size={14} />}\n <Text size=\"sm\" fw={500}>\n {cap.audience.slice(-16)}\n </Text>\n </Group>\n <Group gap=\"xs\">\n <Text size=\"xs\" c=\"dimmed\">\n Expires: {formatExpiration(cap.expiration)}\n </Text>\n <Badge size=\"xs\" variant=\"light\">\n {cap.capabilities.map((c) => c.can).join(', ')}\n </Badge>\n </Group>\n </Stack>\n </Group>\n <ActionIcon size=\"sm\" variant=\"subtle\" color=\"red\" onClick={() => handleRevokeCapability(cap.id)}>\n <IconTrash size={14} />\n </ActionIcon>\n </Group>\n </Paper>\n ))}\n </Stack>\n )}\n </Stack>\n </Paper>\n )}\n\n <Divider label=\"Activation Condition\" labelPosition=\"center\" />\n\n {/* Activation Condition */}\n <Stack gap=\"xs\">\n <Text size=\"sm\" c=\"dimmed\">\n This block activates when an upstream block reaches a certain status. Leave empty for immediate activation.\n </Text>\n\n <Select\n label=\"Upstream block\"\n placeholder=\"Select block...\"\n data={upstreamOptions}\n value={activationUpstreamNodeId || null}\n onChange={(v) => updateProps({ activationUpstreamNodeId: v || '' })}\n clearable\n />\n\n {activationUpstreamNodeId && (\n <>\n <Select\n label=\"Required status\"\n placeholder=\"Select status...\"\n data={[\n { value: 'pending', label: 'Pending' },\n { value: 'approved', label: 'Approved' },\n { value: 'rejected', label: 'Rejected' },\n ]}\n value={activationRequiredStatus || null}\n onChange={(v) => updateProps({ activationRequiredStatus: (v as AuthorizationTabState['activationRequiredStatus']) || '' })}\n clearable\n />\n\n <Switch\n label=\"Require upstream actor to be authorized\"\n description=\"Only activates if upstream action was by an authorized actor\"\n checked={activationRequireAuthorisedActor}\n onChange={(e) => updateProps({ activationRequireAuthorisedActor: e.currentTarget.checked })}\n />\n </>\n )}\n </Stack>\n </Stack>\n );\n};\n","import React, { useState, useCallback } from 'react';\nimport { Stack, Text, TextInput, Button, Group, Radio, Checkbox, Alert, Paper, Loader, Badge, ActionIcon, Divider, NumberInput, Title } from '@mantine/core';\nimport { IconSearch, IconUser, IconRobot, IconX, IconShieldPlus, IconArrowLeft } from '@tabler/icons-react';\nimport type { Capability, DelegationGrant } from '../../core/types/capability';\n\ninterface GrantPermissionPanelProps {\n onBack: () => void;\n flowUri: string;\n /** Blocks available for scope selection. If single block, scope UI is hidden. */\n blocks: Array<{ id: string; type: string; name?: string }>;\n /** Optional: specific block to grant permission for (hides scope selection) */\n targetBlockId?: string;\n searchUsers: (query: string) => Promise<\n Array<{\n did: string;\n displayName: string;\n avatarUrl?: string;\n }>\n >;\n getOracles?: () => Promise<\n Array<{\n did: string;\n name: string;\n }>\n >;\n onGrant: (grant: DelegationGrant, pin: string) => Promise<{ success: boolean; error?: string }>;\n}\n\ntype RecipientType = 'user' | 'oracle' | 'manual';\ntype ScopeType = 'full' | 'blocks';\n\nexport const GrantPermissionPanel: React.FC<GrantPermissionPanelProps> = ({ onBack, flowUri, blocks, targetBlockId, searchUsers, getOracles, onGrant }) => {\n // Single block mode: when targetBlockId is set or only one block is provided\n const singleBlockMode = !!targetBlockId || blocks.length === 1;\n const fixedBlockId = targetBlockId || (blocks.length === 1 ? blocks[0].id : null);\n const fixedBlock = fixedBlockId ? blocks.find((b) => b.id === fixedBlockId) || blocks[0] : null;\n const [recipientType, setRecipientType] = useState<RecipientType>('user');\n const [searchQuery, setSearchQuery] = useState('');\n const [searchResults, setSearchResults] = useState<Array<{ did: string; displayName: string }>>([]);\n const [searching, setSearching] = useState(false);\n const [selectedRecipient, setSelectedRecipient] = useState<{ did: string; displayName: string } | null>(null);\n const [manualDid, setManualDid] = useState('');\n\n const [scopeType, setScopeType] = useState<ScopeType>('full');\n const [selectedBlocks, setSelectedBlocks] = useState<string[]>([]);\n\n const [expirationEnabled, setExpirationEnabled] = useState(false);\n const [expirationDays, setExpirationDays] = useState<number | string>(30);\n\n const [canDelegate, setCanDelegate] = useState(false);\n\n const [pin, setPin] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const handleSearch = useCallback(async () => {\n if (searchQuery.length < 2) return;\n\n setSearching(true);\n try {\n if (recipientType === 'oracle' && getOracles) {\n const oracles = await getOracles();\n setSearchResults(\n oracles.filter((o) => o.name.toLowerCase().includes(searchQuery.toLowerCase()) || o.did.includes(searchQuery)).map((o) => ({ did: o.did, displayName: o.name }))\n );\n } else {\n const results = await searchUsers(searchQuery);\n setSearchResults(results);\n }\n } finally {\n setSearching(false);\n }\n }, [searchQuery, recipientType, searchUsers, getOracles]);\n\n const handleGrant = async () => {\n const audience = recipientType === 'manual' ? manualDid : selectedRecipient?.did;\n\n if (!audience) {\n setError('Please select a recipient');\n return;\n }\n\n if (pin.length < 4) {\n setError('Please enter your PIN');\n return;\n }\n\n const capabilities: Capability[] = [];\n\n // In single block mode, always use the fixed block\n if (singleBlockMode && fixedBlockId) {\n capabilities.push({ can: 'flow/block/execute', with: `${flowUri}:${fixedBlockId}` });\n } else if (scopeType === 'full') {\n capabilities.push({ can: 'flow/*', with: flowUri });\n } else {\n selectedBlocks.forEach((blockId) => {\n capabilities.push({ can: 'flow/block/execute', with: `${flowUri}:${blockId}` });\n });\n }\n\n if (capabilities.length === 0) {\n setError('Please select at least one block or use full access');\n return;\n }\n\n const expiration = expirationEnabled && expirationDays ? Date.now() + Number(expirationDays) * 24 * 60 * 60 * 1000 : undefined;\n\n const grant: DelegationGrant = {\n audience,\n audienceDisplayName: recipientType === 'manual' ? manualDid : selectedRecipient?.displayName,\n capabilities,\n proofs: [], // Will be filled by parent component\n expiration,\n canDelegate,\n };\n\n setLoading(true);\n setError(null);\n\n try {\n const result = await onGrant(grant, pin);\n if (result.success) {\n resetForm();\n onBack();\n } else {\n setError(result.error || 'Failed to grant permission');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to grant permission');\n } finally {\n setLoading(false);\n }\n };\n\n const resetForm = () => {\n setRecipientType('user');\n setSearchQuery('');\n setSearchResults([]);\n setSelectedRecipient(null);\n setManualDid('');\n setScopeType('full');\n setSelectedBlocks([]);\n setExpirationEnabled(false);\n setExpirationDays(30);\n setCanDelegate(false);\n setPin('');\n setError(null);\n };\n\n const handleBack = () => {\n if (!loading) {\n resetForm();\n onBack();\n }\n };\n\n return (\n <Stack gap=\"md\">\n {/* Header */}\n <Group gap=\"xs\">\n <ActionIcon variant=\"subtle\" onClick={handleBack} disabled={loading}>\n <IconArrowLeft size={20} />\n </ActionIcon>\n <IconShieldPlus size={20} />\n <Title order={5}>Grant Permission</Title>\n </Group>\n\n {/* Recipient Type */}\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500}>\n Recipient Type\n </Text>\n <Radio.Group\n value={recipientType}\n onChange={(v) => {\n setRecipientType(v as RecipientType);\n setSelectedRecipient(null);\n setSearchResults([]);\n }}\n >\n <Group>\n <Radio value=\"user\" label=\"User\" />\n <Radio value=\"oracle\" label=\"Oracle\" />\n <Radio value=\"manual\" label=\"Enter DID\" />\n </Group>\n </Radio.Group>\n </Stack>\n\n {/* Recipient Selection */}\n {recipientType !== 'manual' ? (\n <Stack gap=\"xs\">\n <TextInput\n placeholder={recipientType === 'oracle' ? 'Search oracles...' : 'Search users...'}\n leftSection={<IconSearch size={16} />}\n rightSection={searching ? <Loader size={14} /> : null}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.currentTarget.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleSearch()}\n />\n\n {selectedRecipient ? (\n <Paper p=\"sm\" withBorder>\n <Group justify=\"space-between\">\n <Group gap=\"xs\">\n {recipientType === 'oracle' ? <IconRobot size={16} /> : <IconUser size={16} />}\n <Text size=\"sm\">{selectedRecipient.displayName}</Text>\n <Badge size=\"xs\" variant=\"light\">\n {selectedRecipient.did.slice(-12)}\n </Badge>\n </Group>\n <ActionIcon size=\"sm\" variant=\"subtle\" onClick={() => setSelectedRecipient(null)}>\n <IconX size={14} />\n </ActionIcon>\n </Group>\n </Paper>\n ) : searchResults.length > 0 ? (\n <Paper p=\"xs\" withBorder style={{ maxHeight: 150, overflow: 'auto' }}>\n <Stack gap={4}>\n {searchResults.map((result) => (\n <Button key={result.did} variant=\"subtle\" size=\"sm\" justify=\"flex-start\" onClick={() => setSelectedRecipient(result)}>\n {result.displayName}\n </Button>\n ))}\n </Stack>\n </Paper>\n ) : null}\n </Stack>\n ) : (\n <TextInput label=\"Recipient DID\" placeholder=\"did:ixo:...\" value={manualDid} onChange={(e) => setManualDid(e.currentTarget.value)} />\n )}\n\n <Divider />\n\n {/* Permission Scope */}\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500}>\n Permission Scope\n </Text>\n\n {singleBlockMode && fixedBlock ? (\n // Single block mode: show fixed block info\n <Paper p=\"sm\" withBorder>\n <Group gap=\"xs\">\n <Badge variant=\"light\" color=\"blue\">\n {fixedBlock.type}\n </Badge>\n <Text size=\"sm\">{fixedBlock.name || `Block ${fixedBlock.id.slice(-8)}`}</Text>\n </Group>\n <Text size=\"xs\" c=\"dimmed\" mt=\"xs\">\n Permission will be granted to execute this specific block.\n </Text>\n </Paper>\n ) : (\n // Multi-block mode: show scope selection\n <>\n <Radio.Group value={scopeType} onChange={(v) => setScopeType(v as ScopeType)}>\n <Stack gap=\"xs\">\n <Radio value=\"full\" label=\"Full flow access (can execute any block)\" />\n <Radio value=\"blocks\" label=\"Specific blocks only\" />\n </Stack>\n </Radio.Group>\n\n {scopeType === 'blocks' && (\n <Paper p=\"sm\" withBorder style={{ maxHeight: 150, overflow: 'auto' }}>\n <Stack gap=\"xs\">\n {blocks.map((block) => (\n <Checkbox\n key={block.id}\n label={block.name || `${block.type} (${block.id.slice(-8)})`}\n checked={selectedBlocks.includes(block.id)}\n onChange={(e) => {\n if (e.currentTarget.checked) {\n setSelectedBlocks([...selectedBlocks, block.id]);\n } else {\n setSelectedBlocks(selectedBlocks.filter((id) => id !== block.id));\n }\n }}\n />\n ))}\n </Stack>\n </Paper>\n )}\n </>\n )}\n </Stack>\n\n <Divider />\n\n {/* Expiration */}\n <Stack gap=\"xs\">\n <Checkbox label=\"Set expiration\" checked={expirationEnabled} onChange={(e) => setExpirationEnabled(e.currentTarget.checked)} />\n {expirationEnabled && <NumberInput label=\"Expires in (days)\" placeholder=\"30\" value={expirationDays} onChange={setExpirationDays} min={1} max={365} />}\n </Stack>\n\n {/* Can Delegate */}\n <Checkbox\n label=\"Recipient can grant permissions to others\"\n description=\"Allow this recipient to delegate their permissions\"\n checked={canDelegate}\n onChange={(e) => setCanDelegate(e.currentTarget.checked)}\n />\n\n <Divider />\n\n {/* PIN Entry */}\n <TextInput label=\"Enter your PIN to sign this delegation\" type=\"password\" placeholder=\"PIN\" value={pin} onChange={(e) => setPin(e.currentTarget.value)} />\n\n {error && <Alert color=\"red\">{error}</Alert>}\n\n <Group justify=\"flex-end\">\n <Button variant=\"subtle\" onClick={handleBack} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleGrant} loading={loading}>\n Grant Permission\n </Button>\n </Group>\n </Stack>\n );\n};\n","import React, { useMemo, useState, useEffect, useCallback } from 'react';\r\nimport { Stack, TextInput, Text } from '@mantine/core';\r\nimport type { IxoBlockProps } from '@/core/types';\r\n\r\nexport type EvaluationTabState = {\r\n linkedClaimCollectionId: string;\r\n};\r\n\r\ninterface EvaluationTabProps extends IxoBlockProps {}\r\n\r\nexport const EvaluationTab: React.FC<EvaluationTabProps> = ({\r\n editor,\r\n block: initialBlock,\r\n}) => {\r\n // Force re-render when editor document changes\r\n const [, forceUpdate] = useState({});\r\n\r\n // Get the current block from editor document (not the stale prop)\r\n const block = useMemo(() => {\r\n const doc = editor?.document || [];\r\n return doc.find((b: any) => b.id === initialBlock.id) || initialBlock;\r\n }, [editor?.document, initialBlock]);\r\n\r\n // Subscribe to editor changes to force re-render\r\n useEffect(() => {\r\n if (!editor) return;\r\n\r\n const handleChange = () => {\r\n forceUpdate({});\r\n };\r\n\r\n editor.onEditorContentChange(handleChange);\r\n\r\n return () => {\r\n // Cleanup handled by React\r\n };\r\n }, [editor]);\r\n\r\n // Read current value from block props\r\n const linkedClaimCollectionId = (block.props.linkedClaimCollectionId as string) || '';\r\n\r\n // Update block props helper\r\n const updateProps = useCallback(\r\n (updates: Partial<EvaluationTabState>) => {\r\n const currentBlock = (editor?.document || []).find((b: any) => b.id === block.id) || block;\r\n editor.updateBlock(currentBlock, {\r\n props: {\r\n ...currentBlock.props,\r\n ...updates,\r\n },\r\n });\r\n },\r\n [editor, block.id]\r\n );\r\n\r\n return (\r\n <Stack gap=\"md\">\r\n <Text size=\"sm\" c=\"dimmed\">\r\n Configure evaluation settings for this block. When a linked claim collection is set,\r\n execution must yield a claim for that collection.\r\n </Text>\r\n\r\n <TextInput\r\n label=\"Linked claim collection ID\"\r\n description=\"When set, execution must yield a claim for this collection\"\r\n placeholder=\"Collection ID or DID\"\r\n value={linkedClaimCollectionId}\r\n onChange={(e) => updateProps({ linkedClaimCollectionId: e.currentTarget.value })}\r\n />\r\n </Stack>\r\n );\r\n};\r\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { ApiRequestBlock } from './ApiRequestBlock';\nimport type { IxoBlockProps } from '../../../core/types';\n\nexport const ApiRequestBlockSpec = createReactBlockSpec(\n {\n type: 'apiRequest' as const,\n propSchema: {\n title: {\n default: '',\n },\n description: {\n default: '',\n },\n icon: {\n default: 'square-check',\n },\n endpoint: {\n default: '',\n },\n method: {\n default: 'GET',\n },\n headers: {\n default: '[]',\n },\n body: {\n default: '[]',\n },\n response: {\n default: '',\n },\n status: {\n default: 'idle',\n },\n responseSchema: {\n default: '',\n },\n conditions: {\n default: '',\n },\n },\n content: 'inline' as const,\n },\n {\n render: (props) => {\n // Re-map props to use IxoEditorType\n const ixoProps = props as unknown as IxoBlockProps;\n return <ApiRequestBlock {...ixoProps} />;\n },\n }\n);\n","import React from 'react';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { ApiRequestTemplateView } from './template/TemplateView';\nimport { ApiRequestFlowView } from './flow/FlowView';\nimport { useBlockConditions } from '../hooks/useBlockConditions';\nimport { parseConditionConfig, hasVisibilityConditions, hasEnableConditions } from '../utils/conditionUtils';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\n\nexport type ApiRequestBlockProps = IxoBlockProps;\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n\nexport type KeyValuePair = {\n key: string;\n value: string;\n};\n\nexport function ApiRequestBlock({ editor, block }: ApiRequestBlockProps) {\n const { docType } = useBlocknoteContext();\n const { actions } = useBlockConditions(block, editor);\n\n // Template mode - always show\n if (docType === 'template') {\n return <ApiRequestTemplateView editor={editor} block={block} />;\n }\n\n // Flow mode - interpret normalized actions\n const conditionConfig = parseConditionConfig(block.props.conditions);\n\n // Check if we have visibility conditions\n const hasVisibility = hasVisibilityConditions(conditionConfig);\n const showActionExists = actions.some((a) => a.action === 'show');\n\n // Hide block if visibility conditions exist but none passed\n const shouldHide = hasVisibility && !showActionExists;\n\n if (shouldHide) {\n return null;\n }\n\n // Check if we have enable conditions\n const hasEnable = hasEnableConditions(conditionConfig);\n const enableActionExists = actions.some((a) => a.action === 'enable');\n\n // Disable block if enable conditions exist but none passed\n const shouldDisable = hasEnable && !enableActionExists;\n\n return (\n <ApiRequestFlowView\n block={block}\n editor={editor}\n isDisabled={\n shouldDisable\n ? {\n isDisabled: 'disable',\n message: 'This API request is currently disabled by conditions',\n }\n : undefined\n }\n />\n );\n}\n\n// Export as default for backwards compatibility\nexport default ApiRequestBlock;\n","import React, { useMemo } from 'react';\nimport { TemplateConfig } from './TemplateConfig';\nimport { Group, Stack, Text, Badge } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\nconst API_REQUEST_TEMPLATE_PANEL_ID = 'api-request-template-panel';\n\nexport const ApiRequestTemplateView = ({ editor, block }: IxoBlockProps) => {\n const panelId = `${API_REQUEST_TEMPLATE_PANEL_ID}-${block.id}`;\n\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n\n const { open } = usePanel(panelId, panelContent);\n\n const method = block.props.method || 'GET';\n const endpoint = block.props.endpoint || 'https://api.example.com/endpoint';\n\n // Method color mapping\n const getMethodColor = (method: string) => {\n switch (method) {\n case 'GET':\n return 'blue';\n case 'POST':\n return 'green';\n case 'PUT':\n return 'orange';\n case 'DELETE':\n return 'red';\n case 'PATCH':\n return 'yellow';\n default:\n return 'gray';\n }\n };\n\n return (\n <BaseContainer onClick={open}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n {getIcon('square-check', block.props.icon as any)}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Group gap=\"xs\" wrap=\"nowrap\">\n <Badge size=\"sm\" variant=\"filled\" color={getMethodColor(method)}>\n {method}\n </Badge>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {block.props.title || 'API Request'}\n </Text>\n </Group>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false} lineClamp={1}>\n {endpoint}\n </Text>\n {block.props.description && (\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.description}\n </Text>\n )}\n </Stack>\n </Group>\n </Group>\n </BaseContainer>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { GeneralTab } from './GeneralTab';\nimport { ResponseSchemaTab } from './ResponseSchemaTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { HttpMethod, KeyValuePair } from '../ApiRequestBlock';\nimport { parseResponseSchema, ResponseSchema } from '../types';\nimport { AuthorizationTab } from '@/mantine/components/AuthorizationTab';\nimport { EvaluationTab } from '@/mantine/components/EvaluationTab';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\nexport const TemplateConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n\n const updateProp = useCallback(\n (key: string, value: any) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n [key]: value,\n },\n });\n },\n [editor, block]\n );\n\n const handleHeadersChange = useCallback(\n (headers: KeyValuePair[]) => {\n updateProp('headers', JSON.stringify(headers));\n },\n [updateProp]\n );\n\n const handleBodyChange = useCallback(\n (body: KeyValuePair[]) => {\n updateProp('body', JSON.stringify(body));\n },\n [updateProp]\n );\n\n const handleSchemaChange = useCallback(\n (schema: ResponseSchema) => {\n updateProp('responseSchema', JSON.stringify(schema));\n },\n [updateProp]\n );\n\n // Parse the response schema with memoization\n const parsedResponseSchema = useMemo(() => {\n return parseResponseSchema(block.props.responseSchema);\n }, [block.props.responseSchema]);\n\n // Memoize the tabs array to prevent recreating on every render\n const tabs = useMemo(\n () => [\n {\n label: 'General',\n value: 'general',\n content: (\n <GeneralTab\n title={block.props.title || ''}\n description={block.props.description || ''}\n endpoint={block.props.endpoint || ''}\n method={(block.props.method || 'GET') as HttpMethod}\n headers={(() => {\n try {\n return typeof block.props.headers === 'string' ? JSON.parse(block.props.headers) : block.props.headers || [];\n } catch {\n return [];\n }\n })()}\n body={(() => {\n try {\n return typeof block.props.body === 'string' ? JSON.parse(block.props.body) : block.props.body || [];\n } catch {\n return [];\n }\n })()}\n onTitleChange={(value) => updateProp('title', value)}\n onDescriptionChange={(value) => updateProp('description', value)}\n onEndpointChange={(value) => updateProp('endpoint', value)}\n onMethodChange={(value) => updateProp('method', value)}\n onHeadersChange={handleHeadersChange}\n onBodyChange={handleBodyChange}\n editor={editor}\n blockId={block.id}\n />\n ),\n },\n {\n label: 'Response Schema',\n value: 'response-schema',\n content: <ResponseSchemaTab schema={parsedResponseSchema} onSchemaChange={handleSchemaChange} blockId={block.id} />,\n },\n {\n label: 'Authorization',\n value: 'authorization',\n content: <AuthorizationTab editor={editor} block={block} />,\n },\n {\n label: 'Evaluation',\n value: 'evaluation',\n content: <EvaluationTab editor={editor} block={block} />,\n },\n ],\n [\n block.props.title,\n block.props.description,\n block.props.endpoint,\n block.props.method,\n block.props.headers,\n block.props.body,\n block.id,\n parsedResponseSchema,\n updateProp,\n handleHeadersChange,\n handleBodyChange,\n handleSchemaChange,\n editor,\n ]\n );\n\n return (\n <BaseRightPanelLayout title=\"API Request Settings\" onClose={closePanel}>\n <ReusablePanel extraTabs={tabs} context={{ editor, block }} />\n </BaseRightPanelLayout>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Divider, Stack, Text, Button, Group, ActionIcon, Paper } from '@mantine/core';\nimport { IconTrash, IconPlus } from '@tabler/icons-react';\nimport { HttpMethod, KeyValuePair } from '../ApiRequestBlock';\nimport { DataInput } from '@/mantine/components/DataInput';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\n\ninterface GeneralTabProps {\n title: string;\n description: string;\n endpoint: string;\n method: HttpMethod;\n headers: KeyValuePair[];\n body: KeyValuePair[];\n onTitleChange: (value: string) => void;\n onDescriptionChange: (value: string) => void;\n onEndpointChange: (value: string) => void;\n onMethodChange: (value: HttpMethod) => void;\n onHeadersChange: (headers: KeyValuePair[]) => void;\n onBodyChange: (body: KeyValuePair[]) => void;\n editor: any;\n blockId: string;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({\n title,\n description,\n endpoint,\n method,\n headers,\n body,\n onTitleChange,\n onDescriptionChange,\n onEndpointChange,\n onMethodChange,\n onHeadersChange,\n onBodyChange,\n editor,\n blockId,\n}) => {\n // Use local state for real-time updates\n const [localTitle, setLocalTitle] = useState(title || '');\n const [localDescription, setLocalDescription] = useState(description || '');\n const [localEndpoint, setLocalEndpoint] = useState(endpoint || '');\n const [localMethod, setLocalMethod] = useState<HttpMethod>(method || 'GET');\n const [localHeaders, setLocalHeaders] = useState<KeyValuePair[]>(headers || []);\n const [localBody, setLocalBody] = useState<KeyValuePair[]>(body || []);\n\n // Sync local state with props\n useEffect(() => setLocalTitle(title || ''), [title]);\n useEffect(() => setLocalDescription(description || ''), [description]);\n useEffect(() => setLocalEndpoint(endpoint || ''), [endpoint]);\n useEffect(() => setLocalMethod(method || 'GET'), [method]);\n useEffect(() => setLocalHeaders(headers || []), [headers]);\n useEffect(() => setLocalBody(body || []), [body]);\n\n // Key-value handlers for headers\n const handleAddHeader = () => {\n const newHeaders = [...localHeaders, { key: '', value: '' }];\n setLocalHeaders(newHeaders);\n onHeadersChange(newHeaders);\n };\n\n const handleRemoveHeader = (index: number) => {\n const newHeaders = localHeaders.filter((_, i) => i !== index);\n setLocalHeaders(newHeaders);\n onHeadersChange(newHeaders);\n };\n\n const handleHeaderChange = (index: number, field: 'key' | 'value', value: string) => {\n const newHeaders = [...localHeaders];\n newHeaders[index][field] = value;\n setLocalHeaders(newHeaders);\n onHeadersChange(newHeaders);\n };\n\n // Key-value handlers for body\n const handleAddBodyField = () => {\n const newBody = [...localBody, { key: '', value: '' }];\n setLocalBody(newBody);\n onBodyChange(newBody);\n };\n\n const handleRemoveBodyField = (index: number) => {\n const newBody = localBody.filter((_, i) => i !== index);\n setLocalBody(newBody);\n onBodyChange(newBody);\n };\n\n const handleBodyFieldChange = (index: number, field: 'key' | 'value', value: string) => {\n const newBody = [...localBody];\n newBody[index][field] = value;\n setLocalBody(newBody);\n onBodyChange(newBody);\n };\n\n return (\n <Stack gap=\"lg\">\n {/* Basic Info Section */}\n <BaseTextInput\n label=\"Title\"\n placeholder=\"e.g. Submit User Data\"\n value={localTitle}\n onChange={(event) => {\n const newTitle = event.currentTarget.value;\n setLocalTitle(newTitle);\n onTitleChange(newTitle);\n }}\n />\n\n <BaseTextArea\n label=\"Description\"\n placeholder=\"Describe what this API request does\"\n minRows={3}\n value={localDescription}\n onChange={(event) => {\n const newDescription = event.currentTarget.value;\n setLocalDescription(newDescription);\n onDescriptionChange(newDescription);\n }}\n />\n\n <Divider variant=\"dashed\" />\n\n {/* API Configuration Section */}\n <BaseSelect\n label=\"HTTP Method\"\n value={localMethod}\n onChange={(value) => {\n const newMethod = (value || 'GET') as HttpMethod;\n setLocalMethod(newMethod);\n onMethodChange(newMethod);\n }}\n data={[\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'PUT', label: 'PUT' },\n { value: 'DELETE', label: 'DELETE' },\n { value: 'PATCH', label: 'PATCH' },\n ]}\n />\n\n <BaseTextInput\n label=\"Endpoint URL\"\n placeholder=\"https://api.example.com/endpoint\"\n value={localEndpoint}\n onChange={(event) => {\n const newEndpoint = event.currentTarget.value;\n setLocalEndpoint(newEndpoint);\n onEndpointChange(newEndpoint);\n }}\n />\n\n <Divider variant=\"dashed\" />\n\n {/* Headers Section */}\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Text size=\"sm\" fw={600}>\n Request Headers\n </Text>\n <Button size=\"xs\" variant=\"light\" leftSection={<IconPlus size={14} />} onClick={handleAddHeader}>\n Add Header\n </Button>\n </Group>\n <Text size=\"xs\">Add custom headers to your API request (e.g., Authorization, Content-Type)</Text>\n {localHeaders.length > 0 && (\n <Stack gap=\"xs\">\n {localHeaders.map((header, index) => (\n <Paper key={index} p=\"xs\">\n <Group gap=\"xs\" align=\"flex-start\">\n <DataInput\n placeholder=\"Header key (e.g., Authorization)\"\n value={header.key}\n onChange={(value) => handleHeaderChange(index, 'key', value)}\n editorDocument={editor?.document || []}\n currentBlockId={blockId}\n size=\"sm\"\n />\n <DataInput\n placeholder=\"Header value (e.g., Bearer token123)\"\n value={header.value}\n onChange={(value) => handleHeaderChange(index, 'value', value)}\n editorDocument={editor?.document || []}\n currentBlockId={blockId}\n size=\"sm\"\n />\n <ActionIcon color=\"red\" variant=\"subtle\" onClick={() => handleRemoveHeader(index)}>\n <IconTrash size={16} />\n </ActionIcon>\n </Group>\n </Paper>\n ))}\n </Stack>\n )}\n </Stack>\n\n <Divider variant=\"dashed\" />\n\n {/* Body Section */}\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Text size=\"sm\" fw={600}>\n Request Body (JSON)\n </Text>\n <Button size=\"xs\" variant=\"light\" leftSection={<IconPlus size={14} />} onClick={handleAddBodyField}>\n Add Field\n </Button>\n </Group>\n <Text size=\"xs\">Build your JSON request body as key-value pairs</Text>\n {localBody.length > 0 && (\n <Stack gap=\"xs\">\n {localBody.map((field, index) => (\n <Paper key={index} p=\"xs\">\n <Group gap=\"xs\" align=\"flex-start\">\n <DataInput\n placeholder=\"Field key (e.g., name)\"\n value={field.key}\n onChange={(value) => handleBodyFieldChange(index, 'key', value)}\n editorDocument={editor?.document || []}\n currentBlockId={blockId}\n size=\"sm\"\n />\n <DataInput\n placeholder=\"Field value (e.g., John Doe)\"\n value={field.value}\n onChange={(value) => handleBodyFieldChange(index, 'value', value)}\n editorDocument={editor?.document || []}\n currentBlockId={blockId}\n size=\"sm\"\n />\n <ActionIcon color=\"red\" variant=\"subtle\" onClick={() => handleRemoveBodyField(index)}>\n <IconTrash size={16} />\n </ActionIcon>\n </Group>\n </Paper>\n ))}\n </Stack>\n )}\n </Stack>\n </Stack>\n );\n};\n","import React, { useState, useCallback, useMemo } from 'react';\nimport { Input, ActionIcon, Tooltip, Badge, Group } from '@mantine/core';\nimport { IconVariable, IconX } from '@tabler/icons-react';\nimport { BlockPropSelector, type BlockPropSelection } from './BlockPropSelector';\nimport { createReference, hasReferences, parseReferences } from '../../utils/referenceResolver';\n\nexport interface DataInputProps {\n /** Current value of the input */\n value: string;\n /** Callback when value changes */\n onChange: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** The editor document (array of all blocks) */\n editorDocument: any[];\n /** Current block ID (to exclude from selector) */\n currentBlockId?: string;\n /** Left section icon or element */\n leftSection?: React.ReactNode;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Input description */\n description?: string;\n /** Input label */\n label?: string;\n /** Whether the input is required */\n required?: boolean;\n /** Input size */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\n/**\n * DataInput component - an enhanced input field that supports:\n * 1. Manual text entry\n * 2. Block property references in format {{blockId.propKey}}\n * 3. Visual indicators for references\n * 4. UI to select and insert references\n */\nexport function DataInput({\n value,\n onChange,\n placeholder,\n editorDocument,\n currentBlockId,\n leftSection,\n disabled = false,\n description,\n label,\n required,\n size = 'sm',\n}: DataInputProps) {\n const [selectorOpened, setSelectorOpened] = useState(false);\n\n // Check if the current value contains references\n const containsReferences = useMemo(() => {\n return hasReferences(value);\n }, [value]);\n\n // Parse references for display\n const references = useMemo(() => {\n return parseReferences(value || '');\n }, [value]);\n\n // Handle opening the block prop selector\n const handleOpenSelector = useCallback(() => {\n setSelectorOpened(true);\n }, []);\n\n // Handle closing the selector\n const handleCloseSelector = useCallback(() => {\n setSelectorOpened(false);\n }, []);\n\n // Handle selecting a block property from the selector\n const handleSelectProperty = useCallback(\n (selection: BlockPropSelection) => {\n const reference = createReference(selection.blockId, selection.propName);\n\n // If there's existing content, append the reference\n // Otherwise, replace the entire value\n const newValue = value ? `${value}${reference}` : reference;\n\n onChange(newValue);\n },\n [value, onChange]\n );\n\n // Handle clearing all references\n const handleClearReferences = useCallback(() => {\n // Remove all references from the value\n let newValue = value || '';\n references.forEach((ref) => {\n newValue = newValue.replace(ref.fullMatch, '');\n });\n onChange(newValue);\n }, [value, references, onChange]);\n\n return (\n <Input.Wrapper label={label} description={description} required={required} size={size} style={{ width: '100%' }}>\n <Input\n value={value || ''}\n onChange={(e) => onChange(e.currentTarget.value)}\n placeholder={placeholder}\n leftSection={leftSection}\n disabled={disabled}\n size={size}\n style={{ width: '100%' }}\n rightSectionPointerEvents=\"all\"\n rightSection={\n <Group gap={4} wrap=\"nowrap\">\n {/* Show reference count badge if references exist */}\n {containsReferences && (\n <Tooltip label=\"Click to clear all references\" position=\"left\">\n <Badge size=\"sm\" variant=\"light\" color=\"blue\" style={{ cursor: 'pointer' }} onClick={handleClearReferences} leftSection={<IconX size={10} />}>\n {references.length} ref{references.length !== 1 ? 's' : ''}\n </Badge>\n </Tooltip>\n )}\n\n {/* Button to open reference picker - wrapped in BlockPropSelector Popover */}\n <BlockPropSelector\n opened={selectorOpened}\n onClose={handleCloseSelector}\n onSelect={handleSelectProperty}\n editorDocument={editorDocument}\n currentBlockId={currentBlockId}\n >\n <Tooltip label=\"Insert reference to another block's property\" position=\"left\">\n <ActionIcon\n variant={containsReferences ? 'light' : 'subtle'}\n color={containsReferences ? 'blue' : 'gray'}\n onClick={handleOpenSelector}\n disabled={disabled}\n size={size}\n >\n <IconVariable size={16} />\n </ActionIcon>\n </Tooltip>\n </BlockPropSelector>\n </Group>\n }\n />\n </Input.Wrapper>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Popover, Text, Stack, Group, ActionIcon, Input, ScrollArea, Badge, Box, Tooltip } from '@mantine/core';\nimport { IconSearch, IconX, IconCircle, IconChevronRight, IconArrowLeft } from '@tabler/icons-react';\nimport { getConditionableProperties } from '../../blocks/registry/conditionableProperties';\nimport type { ConditionableProperty } from '../../blocks/types/conditions';\n\nexport interface BlockPropSelection {\n blockId: string;\n blockType: string;\n propName: string;\n propDisplayName: string;\n}\n\nexport interface BlockPropSelectorProps {\n children: React.ReactNode;\n opened: boolean;\n onClose: () => void;\n onSelect: (selection: BlockPropSelection) => void;\n editorDocument: any[];\n currentBlockId?: string;\n}\n\n/**\n * Represents a node in the property tree (for nested navigation)\n */\ninterface PropertyTreeNode {\n name: string;\n displayName: string;\n type: string;\n fullPath: string;\n children: PropertyTreeNode[];\n isLeaf: boolean;\n}\n\n/**\n * Build a tree structure from flat property paths\n * e.g., \"response.customer.email\" becomes: response -> customer -> email\n */\nfunction buildPropertyTree(properties: ConditionableProperty[]): PropertyTreeNode[] {\n const root: PropertyTreeNode[] = [];\n\n properties.forEach((prop) => {\n const pathParts = prop.name.split('.');\n let currentLevel = root;\n\n pathParts.forEach((part, index) => {\n const isLastPart = index === pathParts.length - 1;\n const fullPath = pathParts.slice(0, index + 1).join('.');\n\n // Check if this node already exists at current level\n let existingNode = currentLevel.find((node) => node.name === part);\n\n if (!existingNode) {\n // Create new node\n const newNode: PropertyTreeNode = {\n name: part,\n displayName: isLastPart ? prop.displayName : part,\n type: isLastPart ? prop.type : 'object',\n fullPath,\n children: [],\n isLeaf: isLastPart,\n };\n currentLevel.push(newNode);\n existingNode = newNode;\n }\n\n // Move to next level\n if (!isLastPart) {\n currentLevel = existingNode.children;\n }\n });\n });\n\n return root;\n}\n\n/**\n * Get a display name for a block based on its type and props\n */\nfunction getBlockDisplayName(block: any): string {\n // Try to get a meaningful name from common title/name properties\n const title = block.props?.title || block.props?.name || block.props?.label;\n if (title) {\n return title;\n }\n\n // Fallback to block type with ID\n return `${block.type} (${block.id.slice(0, 8)}...)`;\n}\n\n/**\n * Get a color for a block type badge\n */\nfunction getBlockTypeColor(blockType: string): string {\n const colorMap: Record<string, string> = {\n checkbox: 'blue',\n proposal: 'green',\n proposalVote: 'teal',\n list: 'orange',\n overview: 'purple',\n proposalActions: 'pink',\n apiRequest: 'cyan',\n };\n return colorMap[blockType] || 'gray';\n}\n\nexport function BlockPropSelector({ children, opened, onClose, onSelect, editorDocument, currentBlockId }: BlockPropSelectorProps) {\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedBlock, setSelectedBlock] = useState<any | null>(null);\n const [navigationPath, setNavigationPath] = useState<PropertyTreeNode[]>([]);\n\n // Filter blocks that have conditionable properties and aren't the current block\n const availableBlocks = useMemo(() => {\n if (!editorDocument) return [];\n\n return editorDocument\n .filter((block) => {\n // Exclude current block\n if (currentBlockId && block.id === currentBlockId) {\n return false;\n }\n\n // Only include blocks that have conditionable properties\n const props = getConditionableProperties(block.type);\n return props.length > 0;\n })\n .map((block) => ({\n ...block,\n displayName: getBlockDisplayName(block),\n properties: getConditionableProperties(block.type, block),\n propertyTree: buildPropertyTree(getConditionableProperties(block.type, block)),\n }));\n }, [editorDocument, currentBlockId]);\n\n // Filter blocks based on search query (only when no block is selected)\n const filteredBlocks = useMemo(() => {\n if (!searchQuery.trim()) {\n return availableBlocks;\n }\n\n const query = searchQuery.toLowerCase();\n return availableBlocks.filter((block) => {\n // Search in block display name\n if (block.displayName.toLowerCase().includes(query)) {\n return true;\n }\n\n // Search in block type\n if (block.type.toLowerCase().includes(query)) {\n return true;\n }\n\n // Search in property names\n return block.properties.some((prop: ConditionableProperty) => prop.name.toLowerCase().includes(query) || prop.displayName.toLowerCase().includes(query));\n });\n }, [availableBlocks, searchQuery]);\n\n // Get current navigation level nodes\n const currentNodes = useMemo(() => {\n if (!selectedBlock) return [];\n\n if (navigationPath.length === 0) {\n // Root level - show top-level properties\n return selectedBlock.propertyTree;\n } else {\n // Nested level - show children of last node in path\n const lastNode = navigationPath[navigationPath.length - 1];\n return lastNode.children;\n }\n }, [selectedBlock, navigationPath]);\n\n const handleBlockSelect = (block: any) => {\n setSelectedBlock(block);\n setNavigationPath([]);\n setSearchQuery('');\n };\n\n const handleNodeClick = (node: PropertyTreeNode) => {\n if (node.isLeaf) {\n // Leaf node - select this property\n onSelect({\n blockId: selectedBlock.id,\n blockType: selectedBlock.type,\n propName: node.fullPath,\n propDisplayName: node.displayName,\n });\n handleClose();\n } else {\n // Non-leaf node - navigate into it\n setNavigationPath([...navigationPath, node]);\n }\n };\n\n const handleBack = () => {\n if (navigationPath.length > 0) {\n setNavigationPath(navigationPath.slice(0, -1));\n } else {\n setSelectedBlock(null);\n }\n };\n\n const handleClose = () => {\n setSelectedBlock(null);\n setNavigationPath([]);\n setSearchQuery('');\n onClose();\n };\n\n return (\n <Popover opened={opened} onClose={handleClose} position=\"bottom-end\" width={420} shadow=\"md\" withinPortal>\n <Popover.Target>{children}</Popover.Target>\n <Popover.Dropdown p=\"md\">\n <Stack gap=\"md\">\n {/* Header */}\n <Group justify=\"space-between\" align=\"center\">\n <Group gap=\"xs\">\n {(selectedBlock || navigationPath.length > 0) && (\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={handleBack}>\n <IconArrowLeft size={16} />\n </ActionIcon>\n )}\n <Text fw={600} size=\"sm\">\n {!selectedBlock\n ? 'Select a Block'\n : navigationPath.length === 0\n ? `${selectedBlock.displayName} - Select Property`\n : `${navigationPath[navigationPath.length - 1].displayName}`}\n </Text>\n </Group>\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={handleClose}>\n <IconX size={16} />\n </ActionIcon>\n </Group>\n\n {/* Search input - only show when selecting blocks */}\n {!selectedBlock && (\n <Input\n placeholder=\"Search blocks and properties...\"\n leftSection={<IconSearch size={16} />}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.currentTarget.value)}\n size=\"xs\"\n rightSection={\n searchQuery && (\n <ActionIcon variant=\"subtle\" onClick={() => setSearchQuery('')} size=\"xs\">\n <IconX size={12} />\n </ActionIcon>\n )\n }\n />\n )}\n\n {/* Content */}\n <ScrollArea h={300} type=\"auto\">\n {!selectedBlock ? (\n // Block selection view\n filteredBlocks.length === 0 ? (\n <Text c=\"dimmed\" ta=\"center\" py=\"xl\" size=\"sm\">\n {availableBlocks.length === 0 ? 'No blocks with referenceable properties found' : 'No blocks match your search'}\n </Text>\n ) : (\n <Stack gap=\"sm\">\n {filteredBlocks.map((block) => (\n <Box\n key={block.id}\n onClick={() => handleBlockSelect(block)}\n style={{\n borderRadius: '6px',\n border: '1px solid var(--mantine-color-gray-3)',\n padding: '12px',\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--mantine-color-gray-0)';\n e.currentTarget.style.borderColor = 'var(--mantine-color-gray-4)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.borderColor = 'var(--mantine-color-gray-3)';\n }}\n >\n <Group gap=\"xs\" justify=\"space-between\">\n <Group gap=\"xs\">\n <IconCircle\n size={10}\n fill={`var(--mantine-color-${getBlockTypeColor(block.type)}-6)`}\n color={`var(--mantine-color-${getBlockTypeColor(block.type)}-6)`}\n />\n <Text fw={500} size=\"sm\">\n {block.displayName}\n </Text>\n <Badge size=\"xs\" variant=\"light\" color={getBlockTypeColor(block.type)}>\n {block.type}\n </Badge>\n </Group>\n <IconChevronRight size={16} color=\"var(--mantine-color-gray-5)\" />\n </Group>\n </Box>\n ))}\n </Stack>\n )\n ) : // Property navigation view\n currentNodes.length === 0 ? (\n <Text c=\"dimmed\" ta=\"center\" py=\"xl\" size=\"sm\">\n No properties available\n </Text>\n ) : (\n <Stack gap=\"xs\">\n {currentNodes.map((node: PropertyTreeNode, index: number) => (\n <Tooltip key={index} label={node.isLeaf ? `Select ${node.displayName}` : `Navigate into ${node.displayName}`} position=\"left\" withArrow>\n <Box\n onClick={() => handleNodeClick(node)}\n style={{\n padding: '10px 12px',\n borderRadius: '4px',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n border: '1px solid transparent',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--mantine-color-gray-0)';\n e.currentTarget.style.borderColor = 'var(--mantine-color-gray-3)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.borderColor = 'transparent';\n }}\n >\n <Group gap=\"xs\" justify=\"space-between\">\n <Group gap=\"xs\">\n <Text size=\"sm\">{node.displayName}</Text>\n <Badge size=\"xs\" variant=\"dot\" color=\"gray\">\n {node.type}\n </Badge>\n </Group>\n {!node.isLeaf && <IconChevronRight size={16} color=\"var(--mantine-color-gray-5)\" />}\n </Group>\n </Box>\n </Tooltip>\n ))}\n </Stack>\n )}\n </ScrollArea>\n </Stack>\n </Popover.Dropdown>\n </Popover>\n );\n}\n","/**\n * Reference Resolver Utility\n *\n * Handles resolution of block property references in the format:\n * {{blockId.propKey}} or {{blockId.nestedProp.key}}\n *\n * Example:\n * Input: \"User email: {{user-block-123.email}}\"\n * Output: \"User email: john@example.com\"\n */\n\n/**\n * Represents a parsed reference from a string\n */\nexport interface ParsedReference {\n /** Full reference string including delimiters: {{blockId.propKey}} */\n fullMatch: string;\n /** Block ID portion */\n blockId: string;\n /** Property path (can be nested): propKey or nested.prop.key */\n propPath: string;\n /** Start index in the original string */\n startIndex: number;\n /** End index in the original string */\n endIndex: number;\n}\n\n/**\n * Regular expression to match references in format: {{blockId.propKey}}\n * Captures: blockId and propPath (including nested paths)\n */\nconst REFERENCE_REGEX = /\\{\\{([a-zA-Z0-9_-]+)\\.([a-zA-Z0-9_.]+)\\}\\}/g;\n\n/**\n * Parse all references from a string\n *\n * @param input - String containing references\n * @returns Array of parsed references\n */\nexport function parseReferences(input: string): ParsedReference[] {\n const references: ParsedReference[] = [];\n const regex = new RegExp(REFERENCE_REGEX);\n let match;\n\n while ((match = regex.exec(input)) !== null) {\n references.push({\n fullMatch: match[0],\n blockId: match[1],\n propPath: match[2],\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n\n return references;\n}\n\n/**\n * Get a nested property value from an object using dot notation\n *\n * @param obj - Object to extract value from\n * @param path - Dot-separated path (e.g., \"props.email\" or \"props.user.name\")\n * @returns Value at the path, or undefined if not found\n */\nexport function getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current?.[key];\n }, obj);\n}\n\n/**\n * Resolve a single reference by finding the block and extracting the property value\n *\n * @param blockId - ID of the block to reference\n * @param propPath - Property path (can be nested)\n * @param editorDocument - Array of all blocks in the editor\n * @returns Resolved value, or undefined if block or property not found\n */\nexport function resolveSingleReference(blockId: string, propPath: string, editorDocument: any[]): any {\n if (!editorDocument || !Array.isArray(editorDocument)) {\n return undefined;\n }\n\n // Find the block by ID\n const block = editorDocument.find((b) => b.id === blockId);\n\n if (!block) {\n return undefined;\n }\n\n // Special handling for API Request response paths (e.g., \"response.data.user.email\")\n if (propPath.startsWith('response.')) {\n const responseData = block.props.response;\n\n if (!responseData) {\n return undefined;\n }\n\n // Parse response JSON if it's a string\n try {\n const parsedResponse = typeof responseData === 'string' ? JSON.parse(responseData) : responseData;\n\n // Extract the path after \"response.\" (e.g., \"data.user.email\")\n const innerPath = propPath.substring('response.'.length);\n\n // Navigate into the parsed response using the inner path\n const value = getNestedValue(parsedResponse, innerPath);\n\n return value;\n } catch (error) {\n return undefined;\n }\n }\n\n // Default behavior for other properties: direct prop access\n const value = getNestedValue(block.props, propPath);\n\n return value;\n}\n\n/**\n * Resolve all references in a string and return the resolved string\n *\n * @param input - String containing references (e.g., \"Hello {{user.name}}\")\n * @param editorDocument - Array of all blocks in the editor\n * @param options - Options for resolution\n * @returns String with all references resolved to their values\n */\nexport function resolveReferences(\n input: string | null | undefined,\n editorDocument: any[],\n options: {\n /** String to use when a reference cannot be resolved */\n fallback?: string;\n /** Whether to return objects as JSON strings */\n stringifyObjects?: boolean;\n } = {}\n): string {\n const { fallback = '', stringifyObjects = true } = options;\n\n // Handle null/undefined input\n if (input == null) {\n return '';\n }\n\n // Convert to string if not already\n const inputStr = String(input);\n\n // Parse all references\n const references = parseReferences(inputStr);\n\n // If no references found, return original string\n if (references.length === 0) {\n return inputStr;\n }\n\n // Resolve each reference and build the result string\n let result = inputStr;\n\n // Process in reverse order to maintain correct string indices\n for (let i = references.length - 1; i >= 0; i--) {\n const ref = references[i];\n const resolvedValue = resolveSingleReference(ref.blockId, ref.propPath, editorDocument);\n\n // Convert resolved value to string\n let replacementStr: string;\n\n if (resolvedValue === undefined || resolvedValue === null) {\n replacementStr = fallback;\n } else if (typeof resolvedValue === 'object') {\n // Handle objects/arrays\n replacementStr = stringifyObjects ? JSON.stringify(resolvedValue) : fallback;\n } else {\n replacementStr = String(resolvedValue);\n }\n\n // Replace the reference with the resolved value\n result = result.substring(0, ref.startIndex) + replacementStr + result.substring(ref.endIndex);\n }\n\n return result;\n}\n\n/**\n * Check if a string contains any references\n *\n * @param input - String to check\n * @returns True if the string contains at least one reference\n */\nexport function hasReferences(input: string | null | undefined): boolean {\n if (input == null) return false;\n return parseReferences(String(input)).length > 0;\n}\n\n/**\n * Create a reference string for a block property\n *\n * @param blockId - Block ID\n * @param propPath - Property path\n * @returns Reference string in format {{blockId.propPath}}\n */\nexport function createReference(blockId: string, propPath: string): string {\n return `{{${blockId}.${propPath}}}`;\n}\n\n/**\n * Resolve references in an object's values recursively\n * Useful for resolving references in API request bodies, headers, etc.\n *\n * @param obj - Object with potential references in its values\n * @param editorDocument - Array of all blocks in the editor\n * @param options - Resolution options\n * @returns New object with resolved values\n */\nexport function resolveObjectReferences<T extends Record<string, any>>(obj: T, editorDocument: any[], options?: Parameters<typeof resolveReferences>[2]): T {\n const result: any = {};\n\n for (const [key, value] of Object.entries(obj)) {\n if (typeof value === 'string') {\n result[key] = resolveReferences(value, editorDocument, options);\n } else if (typeof value === 'object' && value !== null) {\n result[key] = resolveObjectReferences(value, editorDocument, options);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n","import React from 'react';\nimport { Stack, Text, Button, Group, ActionIcon, Paper, Alert, Code } from '@mantine/core';\nimport { IconTrash, IconPlus, IconInfoCircle } from '@tabler/icons-react';\nimport { ResponseSchema, ResponseSchemaField } from '../types';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\n\ninterface ResponseSchemaTabProps {\n schema: ResponseSchema | null;\n onSchemaChange: (schema: ResponseSchema) => void;\n blockId: string;\n}\n\nexport const ResponseSchemaTab: React.FC<ResponseSchemaTabProps> = ({ schema, onSchemaChange, blockId }) => {\n // Use schema directly from props instead of local state\n const fields = schema?.fields || [];\n\n const handleAddField = () => {\n const newFields = [\n ...fields,\n {\n path: '',\n displayName: '',\n type: 'string' as const,\n description: '',\n },\n ];\n onSchemaChange({ fields: newFields });\n };\n\n const handleRemoveField = (index: number) => {\n const newFields = fields.filter((_, i) => i !== index);\n onSchemaChange({ fields: newFields });\n };\n\n const handleFieldChange = (index: number, key: keyof ResponseSchemaField, value: string) => {\n const newFields = [...fields];\n newFields[index] = { ...newFields[index], [key]: value };\n onSchemaChange({ fields: newFields });\n };\n\n return (\n <Stack gap=\"lg\">\n {/* Info Section */}\n <Alert icon={<IconInfoCircle size={16} />} title=\"Response Schema\" color=\"blue\">\n <Text size=\"xs\">\n Define the expected structure of your API response. This allows other blocks to reference specific fields from the response data using the DataInput component.\n </Text>\n </Alert>\n\n {/* Example Section */}\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n How it works\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n 1. Define response fields using dot notation (e.g., <Code>customer.email</Code>)\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n 2. Fields become available in DataInput selectors across other blocks\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n 3. Reference them like: <Code>{`{{${blockId}.response.customer.email}}`}</Code>\n </Text>\n </Stack>\n\n {/* Fields Section */}\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Text size=\"sm\" fw={600}>\n Response Fields\n </Text>\n <Button size=\"xs\" variant=\"light\" leftSection={<IconPlus size={14} />} onClick={handleAddField}>\n Add Field\n </Button>\n </Group>\n\n {fields.length === 0 ? (\n <Code p=\"md\">No response fields defined yet. Click &quot;Add Field&quot; to start defining your response structure.</Code>\n ) : (\n <Stack gap=\"md\">\n {fields.map((field, index) => (\n <Paper key={index} p=\"md\" withBorder>\n <Stack gap=\"sm\">\n <Group justify=\"space-between\" align=\"flex-start\">\n <Text size=\"sm\" fw={500}>\n Field {index + 1}\n </Text>\n <ActionIcon color=\"red\" variant=\"subtle\" onClick={() => handleRemoveField(index)}>\n <IconTrash size={16} />\n </ActionIcon>\n </Group>\n\n <BaseTextInput\n label=\"Field Path\"\n placeholder=\"e.g., customer.email or product.id\"\n description=\"Use dot notation to specify nested fields in the API response\"\n value={field.path}\n onChange={(e) => handleFieldChange(index, 'path', e.currentTarget.value)}\n required\n size=\"sm\"\n />\n\n <BaseTextInput\n label=\"Display Name\"\n placeholder=\"e.g., User Email\"\n description=\"Human-readable name shown in DataInput selector\"\n value={field.displayName}\n onChange={(e) => handleFieldChange(index, 'displayName', e.currentTarget.value)}\n required\n size=\"sm\"\n />\n\n <BaseSelect\n label=\"Type\"\n description=\"Expected data type of this field\"\n value={field.type}\n onChange={(value) => handleFieldChange(index, 'type', value || 'string')}\n data={[\n { value: 'string', label: 'String' },\n { value: 'number', label: 'Number' },\n { value: 'boolean', label: 'Boolean' },\n { value: 'object', label: 'Object' },\n { value: 'array', label: 'Array' },\n ]}\n size=\"sm\"\n />\n\n <BaseTextArea\n label=\"Description (optional)\"\n placeholder=\"Describe what this field represents\"\n value={field.description || ''}\n onChange={(e) => handleFieldChange(index, 'description', e.currentTarget.value)}\n minRows={2}\n size=\"sm\"\n />\n\n {/* Preview */}\n {field.path && field.displayName && (\n <Stack gap={4}>\n <Text size=\"xs\" c=\"dimmed\">\n Reference format:\n </Text>\n <Code block style={{ fontSize: '11px' }}>\n {`{{${blockId}.response.${field.path}}}`}\n </Code>\n </Stack>\n )}\n </Stack>\n </Paper>\n ))}\n </Stack>\n )}\n </Stack>\n\n {/* Example Schema */}\n {fields.length === 0 && (\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Example Schema\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n For a typical API response like:\n </Text>\n <Code block style={{ fontSize: '11px' }}>\n {`{\n \"customer\": {\n \"email\": \"user@example.com\",\n \"name\": \"John Doe\"\n },\n \"product\": {\n \"id\": \"l1v6r07b\",\n \"name\": \"Product-1\"\n }\n}`}\n </Code>\n <Text size=\"xs\" c=\"dimmed\">\n You would define fields like:\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n • Path: <Code>customer.email</Code>, Display Name: \"Customer Email\", Type: string\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n • Path: <Code>customer.name</Code>, Display Name: \"Customer Name\", Type: string\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n • Path: <Code>product.id</Code>, Display Name: \"Product ID\", Type: string\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n • Path: <Code>product.name</Code>, Display Name: \"Product Name\", Type: string\n </Text>\n </Stack>\n )}\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Group, Stack, Text, ActionIcon, Tooltip, Button, Badge, Collapse, Code, Loader, Alert } from '@mantine/core';\nimport { IconSend, IconChevronDown, IconChevronUp, IconAlertTriangle } from '@tabler/icons-react';\nimport { IxoBlockProps } from '@/core/types';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport { KeyValuePair } from '../ApiRequestBlock';\nimport { resolveReferences } from '@/mantine/utils/referenceResolver';\nimport { parseResponseSchema, validateResponseAgainstSchema } from '../types';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\ninterface FlowViewProps extends IxoBlockProps {\n isDisabled?: {\n isDisabled: 'disable';\n message?: string;\n };\n}\n\nexport const ApiRequestFlowView = ({ editor, block, isDisabled }: FlowViewProps) => {\n const disabled = isDisabled?.isDisabled === 'disable';\n const [isLoading, setIsLoading] = useState(false);\n const [showDetails, setShowDetails] = useState(false);\n const [validationWarnings, setValidationWarnings] = useState<string[]>([]);\n\n const method = block.props.method || 'GET';\n const endpoint = block.props.endpoint || '';\n\n // Parse headers and body from JSON strings\n const headers: KeyValuePair[] = (() => {\n try {\n return typeof block.props.headers === 'string' ? JSON.parse(block.props.headers) : block.props.headers || [];\n } catch {\n return [];\n }\n })();\n\n const body: KeyValuePair[] = (() => {\n try {\n return typeof block.props.body === 'string' ? JSON.parse(block.props.body) : block.props.body || [];\n } catch {\n return [];\n }\n })();\n\n const status = block.props.status || 'idle';\n const response = block.props.response || '';\n\n // Method color mapping\n const getMethodColor = (method: string) => {\n switch (method) {\n case 'GET':\n return 'blue';\n case 'POST':\n return 'green';\n case 'PUT':\n return 'orange';\n case 'DELETE':\n return 'red';\n case 'PATCH':\n return 'yellow';\n default:\n return 'gray';\n }\n };\n\n // Status color mapping\n const getStatusColor = (status: string) => {\n switch (status) {\n case 'success':\n return 'green';\n case 'error':\n return 'red';\n case 'loading':\n return 'blue';\n default:\n return 'gray';\n }\n };\n\n const handleExecuteRequest = async () => {\n if (disabled || !endpoint) return;\n\n setIsLoading(true);\n editor.updateBlock(block, {\n props: { ...block.props, status: 'loading', response: '' },\n });\n\n try {\n // Get the editor document for resolving references\n const editorDocument = editor?.document || [];\n\n // Resolve references in the endpoint URL\n const resolvedEndpoint = resolveReferences(endpoint, editorDocument);\n\n // Build headers object with resolved references\n const headersObj: Record<string, string> = {};\n headers.forEach((h) => {\n if (h.key && h.value) {\n // Resolve references in both header keys and values\n const resolvedKey = resolveReferences(h.key, editorDocument);\n const resolvedValue = resolveReferences(h.value, editorDocument);\n headersObj[resolvedKey] = resolvedValue;\n }\n });\n\n // Build body object with resolved references (only for non-GET requests)\n const bodyObj: Record<string, string> = {};\n if (method !== 'GET') {\n body.forEach((b) => {\n if (b.key && b.value) {\n // Resolve references in both body keys and values\n const resolvedKey = resolveReferences(b.key, editorDocument);\n const resolvedValue = resolveReferences(b.value, editorDocument);\n bodyObj[resolvedKey] = resolvedValue;\n }\n });\n }\n\n // Make the API request with resolved values\n const fetchOptions: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headersObj,\n },\n };\n\n if (method !== 'GET' && Object.keys(bodyObj).length > 0) {\n fetchOptions.body = JSON.stringify(bodyObj);\n }\n\n const apiResponse = await fetch(resolvedEndpoint, fetchOptions);\n const responseData = await apiResponse.json();\n\n // Validate against schema if it exists (validate the raw response data)\n const schema = parseResponseSchema(block.props.responseSchema);\n if (schema && schema.fields.length > 0) {\n const errors = validateResponseAgainstSchema(responseData, schema);\n if (errors.length > 0) {\n setValidationWarnings(errors);\n setShowDetails(true); // Auto-expand details to show warnings\n } else {\n setValidationWarnings([]);\n }\n }\n\n // Store only the actual response data (no status/statusText wrapper)\n editor.updateBlock(block, {\n props: {\n ...block.props,\n status: apiResponse.ok ? 'success' : 'error',\n response: JSON.stringify(responseData, null, 2),\n },\n });\n } catch (error) {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n status: 'error',\n response: JSON.stringify(\n {\n error: error instanceof Error ? error.message : 'Unknown error',\n },\n null,\n 2\n ),\n },\n });\n } finally {\n setIsLoading(false);\n }\n };\n\n const executeButton = (\n <Button\n size=\"sm\"\n variant=\"light\"\n color={getMethodColor(method)}\n leftSection={isLoading ? <Loader size={14} /> : <IconSend size={14} />}\n onClick={handleExecuteRequest}\n disabled={disabled || isLoading || !endpoint}\n style={{ flexShrink: 0 }}\n >\n {isLoading ? 'Sending...' : 'Execute'}\n </Button>\n );\n\n return (\n <BaseContainer>\n <Stack gap=\"md\">\n {/* Header Section */}\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"flex-start\">\n <Group wrap=\"nowrap\" align=\"flex-start\" style={{ flex: 1 }}>\n {getIcon('square-check', block.props.icon as any)}\n\n <Stack gap=\"xs\" style={{ flex: 1, minWidth: 0 }}>\n <Group gap=\"xs\" wrap=\"nowrap\">\n <Badge size=\"sm\" variant=\"filled\" color={getMethodColor(method)}>\n {method}\n </Badge>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {block.props.title || 'API Request'}\n </Text>\n {status !== 'idle' && (\n <Badge size=\"xs\" variant=\"dot\" color={getStatusColor(status)}>\n {status}\n </Badge>\n )}\n </Group>\n <Text\n size=\"xs\"\n c=\"dimmed\"\n contentEditable={false}\n style={{\n wordBreak: 'break-all',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {endpoint || 'No endpoint configured'}\n </Text>\n {block.props.description && (\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.description}\n </Text>\n )}\n </Stack>\n </Group>\n\n <Group gap=\"xs\" style={{ flexShrink: 0 }}>\n {disabled && isDisabled?.message ? (\n <Tooltip label={isDisabled.message} position=\"left\" withArrow>\n {executeButton}\n </Tooltip>\n ) : (\n executeButton\n )}\n <ActionIcon variant=\"subtle\" onClick={() => setShowDetails(!showDetails)} disabled={headers.length === 0 && body.length === 0 && !response}>\n {showDetails ? <IconChevronUp size={16} /> : <IconChevronDown size={16} />}\n </ActionIcon>\n </Group>\n </Group>\n\n {/* Details Section */}\n <Collapse in={showDetails}>\n <Stack gap=\"md\">\n {/* Validation Warnings */}\n {validationWarnings.length > 0 && (\n <Alert icon={<IconAlertTriangle size={16} />} title=\"Schema Validation Warnings\" color=\"yellow\">\n <Stack gap=\"xs\">\n <Text size=\"xs\">The API response does not match the defined schema:</Text>\n {validationWarnings.map((warning, index) => (\n <Text key={index} size=\"xs\" c=\"dimmed\">\n • {warning}\n </Text>\n ))}\n </Stack>\n </Alert>\n )}\n\n {/* Headers */}\n {headers.length > 0 && (\n <Stack gap=\"xs\">\n <Text size=\"xs\" fw={600} c=\"dimmed\">\n Headers:\n </Text>\n <Code block style={{ fontSize: '11px' }}>\n {JSON.stringify(\n headers.reduce(\n (acc, h) => {\n if (h.key && h.value) acc[h.key] = h.value;\n return acc;\n },\n {} as Record<string, string>\n ),\n null,\n 2\n )}\n </Code>\n </Stack>\n )}\n\n {/* Body */}\n {method !== 'GET' && body.length > 0 && (\n <Stack gap=\"xs\">\n <Text size=\"xs\" fw={600} c=\"dimmed\">\n Body:\n </Text>\n <Code block style={{ fontSize: '11px' }}>\n {JSON.stringify(\n body.reduce(\n (acc, b) => {\n if (b.key && b.value) acc[b.key] = b.value;\n return acc;\n },\n {} as Record<string, string>\n ),\n null,\n 2\n )}\n </Code>\n </Stack>\n )}\n\n {/* Response */}\n {response && (\n <Stack gap=\"xs\">\n <Text size=\"xs\" fw={600} c=\"dimmed\">\n Response:\n </Text>\n {status === 'error' ? (\n <Alert color=\"red\" title=\"Error\" styles={{ message: { fontSize: '11px' } }}>\n <Code block style={{ fontSize: '11px' }}>\n {response}\n </Code>\n </Alert>\n ) : (\n <Code block style={{ fontSize: '11px', maxHeight: '300px', overflow: 'auto' }}>\n {response}\n </Code>\n )}\n </Stack>\n )}\n </Stack>\n </Collapse>\n </Stack>\n </BaseContainer>\n );\n};\n","import { FlowNode, FlowNodeAuthzExtension, EvaluationStatus } from '../../types/authorization';\n\nconst parseActors = (value: unknown): string[] => {\n if (!value) return [];\n if (Array.isArray(value)) {\n return value.filter((item): item is string => typeof item === 'string').map((item) => item.trim()).filter(Boolean);\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) return [];\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed)) {\n return parsed.filter((item): item is string => typeof item === 'string').map((item) => item.trim()).filter(Boolean);\n }\n } catch {\n // fall back to comma-separated\n }\n return trimmed\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n }\n return [];\n};\n\nconst parseActivationStatus = (value: unknown): EvaluationStatus | undefined => {\n if (value === 'pending' || value === 'approved' || value === 'rejected') {\n return value;\n }\n return undefined;\n};\n\nexport const buildAuthzFromProps = (props: Record<string, any>): FlowNodeAuthzExtension => {\n const authorisedActors = parseActors(props.authorisedActors);\n const activationRequiredStatus = parseActivationStatus(props.activationRequiredStatus);\n const activationUpstreamNodeId = typeof props.activationUpstreamNodeId === 'string' ? props.activationUpstreamNodeId.trim() : '';\n const linkedClaimCollectionId = typeof props.linkedClaimCollectionId === 'string' ? props.linkedClaimCollectionId.trim() : '';\n\n const authz: FlowNodeAuthzExtension = {};\n\n if (typeof props.parentCapability === 'string' && props.parentCapability.trim()) {\n authz.parentCapability = props.parentCapability.trim();\n }\n\n if (authorisedActors.length > 0) {\n authz.authorisedActors = authorisedActors;\n }\n\n if (linkedClaimCollectionId) {\n authz.linkedClaim = { collectionId: linkedClaimCollectionId };\n }\n\n if (activationUpstreamNodeId && activationRequiredStatus) {\n authz.activationCondition = {\n upstreamNodeId: activationUpstreamNodeId,\n requiredStatus: activationRequiredStatus,\n requireAuthorisedActor: Boolean(props.activationRequireAuthorisedActor),\n };\n }\n\n return authz;\n};\n\nexport const buildFlowNodeFromBlock = (block: any): FlowNode => {\n const base: FlowNode = {\n id: block.id,\n type: block.type,\n props: block.props || {},\n } as FlowNode;\n\n const authz = buildAuthzFromProps(block.props || {});\n\n return {\n ...base,\n ...authz,\n };\n};\n","import type { Map as YMap } from 'yjs';\nimport type { FlowNodeRuntimeState } from '../../types/authorization';\nimport type { IxoEditorType } from '../../types/editor';\n\nexport interface FlowRuntimeStateManager {\n get: (nodeId: string) => FlowNodeRuntimeState;\n update: (nodeId: string, updates: Partial<FlowNodeRuntimeState>) => void;\n}\n\nconst ensureStateObject = (value: unknown): FlowNodeRuntimeState => {\n if (!value || typeof value !== 'object') {\n return {};\n }\n return { ...(value as FlowNodeRuntimeState) };\n};\n\nconst createYMapManager = (map: YMap<any>): FlowRuntimeStateManager => {\n return {\n get: (nodeId: string) => {\n const stored = map.get(nodeId);\n return ensureStateObject(stored);\n },\n update: (nodeId: string, updates: Partial<FlowNodeRuntimeState>) => {\n const current = ensureStateObject(map.get(nodeId));\n map.set(nodeId, { ...current, ...updates });\n },\n };\n};\n\nconst createMemoryManager = (): FlowRuntimeStateManager => {\n const memory = new Map<string, FlowNodeRuntimeState>();\n return {\n get: (nodeId: string) => ensureStateObject(memory.get(nodeId)),\n update: (nodeId: string, updates: Partial<FlowNodeRuntimeState>) => {\n const current = ensureStateObject(memory.get(nodeId));\n memory.set(nodeId, { ...current, ...updates });\n },\n };\n};\n\nexport const createRuntimeStateManager = (editor?: IxoEditorType | null): FlowRuntimeStateManager => {\n if (editor?._yRuntime) {\n return createYMapManager(editor._yRuntime);\n }\n return createMemoryManager();\n};\n","import { FlowNode } from '../../types/authorization';\nimport type { FlowRuntimeStateManager } from './runtime';\n\nexport interface ActivationResult {\n active: boolean;\n reason?: string;\n}\n\nexport const isNodeActive = (node: FlowNode, runtime: FlowRuntimeStateManager): ActivationResult => {\n if (!node.activationCondition) {\n return { active: true };\n }\n\n const { upstreamNodeId, requiredStatus, requireAuthorisedActor } = node.activationCondition;\n if (!upstreamNodeId) {\n return { active: true };\n }\n\n const upstreamState = runtime.get(upstreamNodeId);\n if (!upstreamState.claimId) {\n return { active: false, reason: `Upstream node ${upstreamNodeId} has no claim submission yet.` };\n }\n\n if (upstreamState.evaluationStatus !== requiredStatus) {\n return {\n active: false,\n reason: `Upstream node ${upstreamNodeId} status is ${upstreamState.evaluationStatus || 'unknown'}, requires ${requiredStatus}.`,\n };\n }\n\n if (requireAuthorisedActor) {\n const upstreamActor = upstreamState.submittedByDid;\n if (!upstreamActor) {\n return { active: false, reason: 'Upstream submission actor is unknown.' };\n }\n const upstreamAuthorised = Array.isArray(upstreamState.authorisedActorsSnapshot)\n ? (upstreamState.authorisedActorsSnapshot as string[])\n : [];\n if (upstreamAuthorised.length > 0 && !upstreamAuthorised.includes(upstreamActor)) {\n return { active: false, reason: 'Upstream claim not submitted by an authorised actor.' };\n }\n }\n\n return { active: true };\n};\n","import type { SignedCapability, Capability, CapabilityValidationResult } from '../../types/capability';\r\nimport type { DelegationStore } from '../delegationStore';\r\n\r\ninterface ValidateChainParams {\r\n /** The capability to validate */\r\n capability: SignedCapability;\r\n /** The actor DID trying to use the capability */\r\n actorDid: string;\r\n /** Required capability (what the actor wants to do) */\r\n requiredCapability: Capability;\r\n /** The delegation store */\r\n delegationStore: DelegationStore;\r\n /** Handler to verify signatures */\r\n verifySignature: (capabilityRaw: string, issuerDid: string) => Promise<{ valid: boolean; error?: string }>;\r\n /** Expected root issuer (entity DID) */\r\n rootIssuer: string;\r\n}\r\n\r\n/**\r\n * Check if a capability grants the required permission\r\n */\r\nconst capabilityCovers = (granted: Capability, required: Capability): boolean => {\r\n // Check action\r\n if (granted.can !== required.can && granted.can !== '*') {\r\n // Check for wildcard patterns\r\n if (granted.can.endsWith('/*')) {\r\n const prefix = granted.can.slice(0, -2);\r\n if (!required.can.startsWith(prefix)) return false;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // Check resource\r\n if (granted.with !== required.with && granted.with !== '*') {\r\n // Check for wildcard and prefix patterns\r\n if (granted.with.endsWith('/*')) {\r\n const prefix = granted.with.slice(0, -2);\r\n if (!required.with.startsWith(prefix)) return false;\r\n } else if (granted.with.endsWith('*')) {\r\n const prefix = granted.with.slice(0, -1);\r\n if (!required.with.startsWith(prefix)) return false;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Validate a capability chain back to the root\r\n */\r\nexport const validateCapabilityChain = async (\n params: ValidateChainParams\n): Promise<CapabilityValidationResult> => {\n const { capability, actorDid, requiredCapability, delegationStore, verifySignature, rootIssuer } = params;\n\r\n const chain: SignedCapability[] = [];\r\n const visited = new Set<string>();\r\n let current: SignedCapability | null = capability;\r\n\r\n // Walk the chain from capability back to root\r\n while (current) {\r\n // Prevent infinite loops\r\n if (visited.has(current.id)) {\r\n return { valid: false, error: 'Circular delegation detected' };\r\n }\r\n visited.add(current.id);\r\n chain.unshift(current);\r\n\r\n // Check expiration\r\n if (current.expiration && current.expiration < Date.now()) {\r\n return { valid: false, error: `Capability ${current.id} has expired` };\r\n }\r\n\r\n // Verify signature\r\n const signatureResult = await verifySignature(JSON.stringify(current), current.issuer);\r\n if (!signatureResult.valid) {\r\n return { valid: false, error: `Invalid signature on capability ${current.id}: ${signatureResult.error}` };\r\n }\r\n\r\n // If this is the root (no proofs), check issuer matches expected root authority (flow owner)\n if (current.proofs.length === 0) {\n if (current.issuer !== rootIssuer) {\n return { valid: false, error: `Root capability issuer mismatch. Expected ${rootIssuer}, got ${current.issuer}` };\n }\n break;\n }\n\r\n // Get parent capability\r\n const parentId = current.proofs[0]; // We follow the first proof\r\n const parent = delegationStore.get(parentId);\r\n if (!parent) {\r\n return { valid: false, error: `Parent capability ${parentId} not found` };\r\n }\r\n\r\n // Verify delegation chain: parent.audience must equal current.issuer\r\n if (parent.audience !== current.issuer) {\r\n return { valid: false, error: `Delegation chain broken: ${parent.audience} !== ${current.issuer}` };\r\n }\r\n\r\n current = parent;\r\n }\r\n\r\n // Verify the final capability in chain grants permission to actor\r\n const finalCap = chain[chain.length - 1];\r\n if (finalCap.audience !== actorDid) {\r\n return { valid: false, error: `Capability not granted to actor. Expected ${actorDid}, got ${finalCap.audience}` };\r\n }\r\n\r\n // Check if chain grants required capability\r\n // Each capability in chain must cover the required capability\r\n for (const cap of chain) {\r\n const hasRequiredCap = cap.capabilities.some(c => capabilityCovers(c, requiredCapability));\r\n if (!hasRequiredCap) {\r\n return { valid: false, error: `Capability ${cap.id} does not grant required permission` };\r\n }\r\n }\r\n\r\n return { valid: true, chain };\r\n};\r\n\r\n/**\r\n * Find a valid capability for an actor to perform an action\r\n */\r\nexport const findValidCapability = async (params: {\r\n actorDid: string;\r\n requiredCapability: Capability;\r\n delegationStore: DelegationStore;\r\n verifySignature: (capabilityRaw: string, issuerDid: string) => Promise<{ valid: boolean; error?: string }>;\r\n rootIssuer: string;\r\n}): Promise<{ found: boolean; capabilityId?: string; error?: string }> => {\r\n const { actorDid, requiredCapability, delegationStore, verifySignature, rootIssuer } = params;\r\n\r\n // Get all delegations and find ones granted to this actor\r\n const allDelegations = delegationStore.getAll();\r\n const actorDelegations = allDelegations.filter(d => d.audience === actorDid);\r\n\r\n for (const delegation of actorDelegations) {\r\n const result = await validateCapabilityChain({\r\n capability: delegation,\r\n actorDid,\r\n requiredCapability,\r\n delegationStore,\r\n verifySignature,\r\n rootIssuer,\r\n });\r\n\r\n if (result.valid) {\r\n return { found: true, capabilityId: delegation.id };\r\n }\r\n }\r\n\r\n // Also check if actor is the root audience (direct from entity)\r\n const root = delegationStore.getRoot();\r\n if (root && root.audience === actorDid) {\r\n const result = await validateCapabilityChain({\r\n capability: root,\r\n actorDid,\r\n requiredCapability,\r\n delegationStore,\r\n verifySignature,\r\n rootIssuer,\r\n });\r\n\r\n if (result.valid) {\r\n return { found: true, capabilityId: root.id };\r\n }\r\n }\r\n\r\n return { found: false, error: 'No valid capability found for actor' };\r\n};\r\n","import type { FlowNode } from '../../types/authorization';\nimport type { Capability } from '../../types/capability';\nimport type { DelegationStore } from '../delegationStore';\nimport type { UCANManager, DerivedCapability } from '../../services/ucanManager';\nimport { findValidCapability } from './capabilityValidation';\n\nexport interface AuthorizationResult {\n authorized: boolean;\n reason?: string;\n capabilityId?: string;\n /** @deprecated */\n derived?: DerivedCapability;\n}\n\nexport interface AuthorizationContext {\n /** @deprecated Use delegationStore instead */\n ucanManager?: UCANManager;\n delegationStore?: DelegationStore;\n verifySignature?: (capabilityRaw: string, issuerDid: string) => Promise<{ valid: boolean; error?: string }>;\n rootIssuer?: string; // Entity DID\n flowUri?: string; // Flow resource URI\n}\n\nexport const isActorAuthorized = async (\n node: FlowNode,\n actorDid: string,\n context?: AuthorizationContext\n): Promise<AuthorizationResult> => {\n // 1. Check authorisedActors whitelist\n if (node.authorisedActors && node.authorisedActors.length > 0) {\n if (!node.authorisedActors.includes(actorDid)) {\n return {\n authorized: false,\n reason: `Actor ${actorDid} is not in the authorized actors list for this block.`\n };\n }\n // If in whitelist and no capability required, authorized\n if (!node.parentCapability) {\n return { authorized: true };\n }\n }\n\n // 2. Check capability chain using NEW DelegationStore approach\n if (node.parentCapability && context?.delegationStore && context?.verifySignature && context?.rootIssuer) {\n const requiredCapability: Capability = {\n can: 'flow/block/execute',\n with: context.flowUri ? `${context.flowUri}:${node.id}` : `ixo:flow:*:${node.id}`,\n };\n\n const result = await findValidCapability({\n actorDid,\n requiredCapability,\n delegationStore: context.delegationStore,\n verifySignature: context.verifySignature,\n rootIssuer: context.rootIssuer,\n });\n\n if (!result.found) {\n return {\n authorized: false,\n reason: result.error || 'No valid capability found'\n };\n }\n\n return { authorized: true, capabilityId: result.capabilityId };\n }\n\n // 3. BACKWARD COMPATIBILITY: Check capability using OLD UCANManager approach\n if (node.parentCapability && context?.ucanManager) {\n try {\n const parent = await context.ucanManager.loadParentCapability(node.parentCapability);\n const derived = await context.ucanManager.deriveNodeCapability(parent, node.id, actorDid);\n await context.ucanManager.validateDerivedCapability(derived, node.id, actorDid);\n return { authorized: true, derived };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Capability derivation failed';\n return { authorized: false, reason: message };\n }\n }\n\n // 4. If parentCapability is set but no context available\n if (node.parentCapability && !context?.delegationStore && !context?.ucanManager) {\n return {\n authorized: false,\n reason: 'Capability validation required but neither delegation store nor UCAN manager configured.'\n };\n }\n\n // 5. No restrictions = authorized\n return { authorized: true };\n};\n","import { isNodeActive } from './activation';\nimport { isActorAuthorized, AuthorizationContext } from './authorization';\nimport type { FlowNode, FlowNodeRuntimeState, EvaluationStatus } from '../../types/authorization';\nimport type { FlowRuntimeStateManager } from './runtime';\nimport type { DelegationStore } from '../delegationStore';\nimport type { UCANManager } from '../../services/ucanManager';\n\nexport interface NodeActionResult {\n claimId?: string;\n evaluationStatus?: EvaluationStatus;\n submittedByDid?: string;\n payload?: any;\n}\n\nexport interface ExecutionContext {\n runtime: FlowRuntimeStateManager;\n /** @deprecated Use delegationStore instead */\n ucanManager?: UCANManager;\n delegationStore?: DelegationStore;\n verifySignature?: (capabilityRaw: string, issuerDid: string) => Promise<{ valid: boolean; error?: string }>;\n rootIssuer?: string;\n flowUri?: string;\n now?: () => number;\n}\n\nexport interface ExecutionOutcome {\n success: boolean;\n stage: 'activation' | 'authorization' | 'claim' | 'action' | 'complete';\n error?: string;\n result?: NodeActionResult;\n capabilityId?: string;\n}\n\nexport interface ExecuteNodeParams {\n node: FlowNode;\n actorDid: string;\n context: ExecutionContext;\n action: () => Promise<NodeActionResult>;\n}\n\nconst updateRuntimeAfterSuccess = (\n node: FlowNode,\n actorDid: string,\n runtime: FlowRuntimeStateManager,\n actionResult: NodeActionResult,\n capabilityId?: string,\n now?: () => number\n) => {\n const updates: FlowNodeRuntimeState = {\n submittedByDid: actionResult.submittedByDid || actorDid,\n evaluationStatus: actionResult.evaluationStatus || 'pending',\n executionTimestamp: now ? now() : Date.now(),\n derivedUcan: capabilityId,\n authorisedActorsSnapshot: node.authorisedActors,\n };\n\n if (actionResult.claimId) {\n updates.claimId = actionResult.claimId;\n }\n\n runtime.update(node.id, updates);\n};\n\nexport const executeNode = async ({\n node,\n actorDid,\n context,\n action\n}: ExecuteNodeParams): Promise<ExecutionOutcome> => {\n const { runtime, delegationStore, verifySignature, rootIssuer, flowUri, ucanManager, now } = context;\n\n // 1. Check activation\n const activation = isNodeActive(node, runtime);\n if (!activation.active) {\n return { success: false, stage: 'activation', error: activation.reason };\n }\n\n // 2. Check authorization\n const authContext: AuthorizationContext = {\n delegationStore,\n verifySignature,\n rootIssuer,\n flowUri,\n ucanManager,\n };\n\n const auth = await isActorAuthorized(node, actorDid, authContext);\n if (!auth.authorized) {\n return { success: false, stage: 'authorization', error: auth.reason };\n }\n\n // 3. Check linked claim requirement\n if (node.linkedClaim && !node.linkedClaim.collectionId) {\n return { success: false, stage: 'claim', error: 'Linked claim collection is required but missing.' };\n }\n\n // 4. Execute action\n try {\n const result = await action();\n\n // 5. Verify linked claim was provided if required\n if (node.linkedClaim && !result.claimId) {\n return { success: false, stage: 'claim', error: 'Execution did not return a claimId for linked claim requirement.' };\n }\n\n // 6. Update runtime state\n updateRuntimeAfterSuccess(node, actorDid, runtime, result, auth.capabilityId, now);\n\n return { success: true, stage: 'complete', result, capabilityId: auth.capabilityId };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Execution failed';\n return { success: false, stage: 'action', error: message };\n }\n};\n","import type { Map as YMap } from 'yjs';\r\nimport type { SignedCapability } from '../types/capability';\r\n\r\nconst ROOT_CAPABILITY_KEY = '__root__';\r\n\r\nexport interface DelegationStore {\r\n get: (capabilityId: string) => SignedCapability | null;\r\n set: (capability: SignedCapability) => void;\r\n remove: (capabilityId: string) => void;\r\n getRoot: () => SignedCapability | null;\r\n setRootId: (capabilityId: string) => void;\r\n getAll: () => SignedCapability[];\r\n has: (capabilityId: string) => boolean;\r\n}\r\n\r\n/**\r\n * Create a delegation store backed by Y.Map\r\n */\r\nexport const createDelegationStore = (yMap: YMap<any>): DelegationStore => {\r\n return {\r\n get: (capabilityId: string): SignedCapability | null => {\r\n const raw = yMap.get(capabilityId);\r\n if (!raw || capabilityId === ROOT_CAPABILITY_KEY) return null;\r\n try {\r\n return JSON.parse(raw);\r\n } catch {\r\n return null;\r\n }\r\n },\r\n\r\n set: (capability: SignedCapability): void => {\r\n yMap.set(capability.id, JSON.stringify(capability));\r\n },\r\n\r\n remove: (capabilityId: string): void => {\r\n yMap.delete(capabilityId);\r\n },\r\n\r\n getRoot: (): SignedCapability | null => {\r\n const rootId = yMap.get(ROOT_CAPABILITY_KEY);\r\n if (!rootId) return null;\r\n const raw = yMap.get(rootId);\r\n if (!raw) return null;\r\n try {\r\n return JSON.parse(raw);\r\n } catch {\r\n return null;\r\n }\r\n },\r\n\r\n setRootId: (capabilityId: string): void => {\r\n yMap.set(ROOT_CAPABILITY_KEY, capabilityId);\r\n },\r\n\r\n getAll: (): SignedCapability[] => {\r\n const capabilities: SignedCapability[] = [];\r\n yMap.forEach((value, key) => {\r\n if (key !== ROOT_CAPABILITY_KEY) {\r\n try {\r\n capabilities.push(JSON.parse(value));\r\n } catch {\r\n // Skip invalid entries\r\n }\r\n }\r\n });\r\n return capabilities;\r\n },\r\n\r\n has: (capabilityId: string): boolean => {\r\n return yMap.has(capabilityId);\r\n },\r\n };\r\n};\r\n\r\n/**\r\n * Create an in-memory delegation store (for testing or when Y.Map unavailable)\r\n */\r\nexport const createMemoryDelegationStore = (): DelegationStore => {\r\n const store = new Map<string, string>();\r\n\r\n return {\r\n get: (capabilityId: string): SignedCapability | null => {\r\n const raw = store.get(capabilityId);\r\n if (!raw || capabilityId === ROOT_CAPABILITY_KEY) return null;\r\n try {\r\n return JSON.parse(raw);\r\n } catch {\r\n return null;\r\n }\r\n },\r\n\r\n set: (capability: SignedCapability): void => {\r\n store.set(capability.id, JSON.stringify(capability));\r\n },\r\n\r\n remove: (capabilityId: string): void => {\r\n store.delete(capabilityId);\r\n },\r\n\r\n getRoot: (): SignedCapability | null => {\r\n const rootId = store.get(ROOT_CAPABILITY_KEY);\r\n if (!rootId) return null;\r\n const raw = store.get(rootId);\r\n if (!raw) return null;\r\n try {\r\n return JSON.parse(raw);\r\n } catch {\r\n return null;\r\n }\r\n },\r\n\r\n setRootId: (capabilityId: string): void => {\r\n store.set(ROOT_CAPABILITY_KEY, capabilityId);\r\n },\r\n\r\n getAll: (): SignedCapability[] => {\r\n const capabilities: SignedCapability[] = [];\r\n store.forEach((value, key) => {\r\n if (key !== ROOT_CAPABILITY_KEY) {\r\n try {\r\n capabilities.push(JSON.parse(value));\r\n } catch {\r\n // Skip invalid entries\r\n }\r\n }\r\n });\r\n return capabilities;\r\n },\r\n\r\n has: (capabilityId: string): boolean => {\r\n return store.has(capabilityId);\r\n },\r\n };\r\n};\r\n","export interface CapabilityGrant {\n raw: string;\n with?: string;\n audience?: string;\n expiresAt?: number;\n action?: string;\n}\n\nexport type DerivedCapability = CapabilityGrant;\n\nconst parseGrant = (value: string): CapabilityGrant => {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error('Empty capability value');\n }\n\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === 'object') {\n return {\n raw: trimmed,\n with: typeof parsed.with === 'string' ? parsed.with : undefined,\n audience: typeof parsed.aud === 'string' ? parsed.aud : undefined,\n expiresAt: typeof parsed.exp === 'number' ? parsed.exp * 1000 : undefined,\n action: typeof parsed.can === 'string' ? parsed.can : undefined,\n };\n }\n } catch {\n // treat as opaque string capability\n }\n\n return { raw: trimmed };\n};\n\nexport interface UCANManager {\n loadParentCapability: (capability: string) => Promise<CapabilityGrant>;\n deriveNodeCapability: (parent: CapabilityGrant, nodeId: string, actorDid: string) => Promise<DerivedCapability>;\n validateDerivedCapability: (derived: DerivedCapability, nodeId: string, actorDid: string) => Promise<void>;\n}\n\nexport class SimpleUCANManager implements UCANManager {\n async loadParentCapability(capability: string): Promise<CapabilityGrant> {\n return parseGrant(capability);\n }\n\n async deriveNodeCapability(parent: CapabilityGrant, nodeId: string, actorDid: string): Promise<DerivedCapability> {\n if (parent.expiresAt && parent.expiresAt < Date.now()) {\n throw new Error('Parent capability expired');\n }\n\n if (parent.audience && parent.audience !== actorDid) {\n throw new Error(`Actor ${actorDid} is not the audience for the capability`);\n }\n\n if (parent.with && !(parent.with.endsWith('*') || parent.with.includes(nodeId))) {\n throw new Error(`Capability resource ${parent.with} does not cover node ${nodeId}`);\n }\n\n return { ...parent };\n }\n\n async validateDerivedCapability(derived: DerivedCapability): Promise<void> {\n if (derived.expiresAt && derived.expiresAt < Date.now()) {\n throw new Error('Derived capability expired');\n }\n }\n}\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { DynamicListBlock } from './DynamicListBlock';\nimport type { IxoBlockProps } from '../../../core/types';\n\nexport const DynamicListBlockSpec = createReactBlockSpec(\n {\n type: 'dynamicList' as const,\n propSchema: {\n listId: {\n default: '',\n },\n title: {\n default: '',\n },\n columns: {\n default: '[]',\n },\n dataSource: {\n default: '{}',\n },\n snapshot: {\n default: '',\n },\n snapshotTimestamp: {\n default: '',\n },\n panelDescription: {\n default: '',\n },\n actions: {\n default: '[]',\n },\n },\n content: 'none',\n },\n {\n render: (props) => {\n const ixoProps = props as unknown as IxoBlockProps;\n return <DynamicListBlock {...ixoProps} />;\n },\n }\n);\n","import React, { useMemo, useState, useCallback, useEffect, useRef } from 'react';\nimport { Box, Stack, Text, Paper, Group, Button, ActionIcon, Tooltip, Code, Flex, Collapse, Title, Badge, TextInput, CloseButton, Select, Menu } from '@mantine/core';\nimport { useDisclosure } from '@mantine/hooks';\nimport {\n IconCamera,\n IconRefresh,\n IconDatabase,\n IconSparkles,\n IconChevronDown,\n IconChevronUp,\n IconChevronRight,\n IconArrowUp,\n IconArrowDown,\n IconSearch,\n IconAdjustmentsHorizontal,\n IconDownload,\n IconInfoCircle,\n IconX,\n} from '@tabler/icons-react';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\nimport type { DynamicListColumn, DataSource, DynamicListData, ColumnPosition /* DynamicListAction */ } from './types';\nimport ListItemContainer from '../list/ListItemContainer';\nimport ListItemCheckbox from '../list/ListItemCheckbox';\nimport ListPagination from '../list/ListPagination';\nimport { DEFAULT_PAGE_SIZE } from '../../../core/constants';\nimport { usePanel } from '../../hooks/usePanel';\nimport { DynamicListSelectionPanel } from './DynamicListSelectionPanel';\nimport { downloadArrayAsCsv } from '../../../core/utils/files';\nimport type { SortOption } from '../list/types';\n\nconst DYNAMIC_LIST_SELECTION_PANEL_ID = 'dynamic-list-selection-panel';\n\n// Position options for column selector\nconst POSITION_OPTIONS: { value: string; label: string }[] = [\n { value: 'none', label: 'None' },\n { value: 'topLeft', label: 'Top Left' },\n { value: 'bottomLeft', label: 'Bottom Left' },\n { value: 'topRight', label: 'Top Right' },\n { value: 'bottomRight', label: 'Bottom Right' },\n];\n\nexport interface DynamicListBlockProps extends IxoBlockProps {}\n\nexport function DynamicListBlock({ block, editor }: DynamicListBlockProps) {\n const { getDynamicListData, editable } = useBlocknoteContext();\n const { listId, title, columns, dataSource, snapshot, snapshotTimestamp, panelDescription /* actions */ } = block.props;\n // console.log({ listId, columns, dataSource });\n\n // Sort config type\n type SortConfig = { key: string; direction: 'asc' | 'desc' } | null;\n\n // Local state\n const [useLiveMode, setUseLiveMode] = useState(false);\n const [opened, { toggle }] = useDisclosure(true);\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n const [selectedItem, setSelectedItem] = useState<any | null>(null);\n const [isMultiSelect, setIsMultiSelect] = useState(false);\n const [page, setPage] = useState(1);\n const [sortConfig, setSortConfig] = useState<SortConfig>(null);\n const [showSearch, setShowSearch] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n // Collapsible menu sections\n const [orderByCollapsed, setOrderByCollapsed] = useState(true);\n const [columnsCollapsed, setColumnsCollapsed] = useState(true);\n\n // Info panel visibility\n const [showInfo, setShowInfo] = useState(false);\n\n // Parse JSON props\n const parsedColumns = useMemo<DynamicListColumn[]>(() => {\n try {\n return typeof columns === 'string' ? JSON.parse(columns) : columns;\n } catch {\n return [];\n }\n }, [columns]);\n\n const parsedDataSource = useMemo<DataSource | null>(() => {\n try {\n const parsed = typeof dataSource === 'string' ? JSON.parse(dataSource) : dataSource;\n return parsed && Object.keys(parsed).length > 0 ? parsed : null;\n } catch {\n return null;\n }\n }, [dataSource]);\n\n const parsedSnapshot = useMemo<any[] | null>(() => {\n try {\n if (!snapshot || snapshot === '') return null;\n return typeof snapshot === 'string' ? JSON.parse(snapshot) : snapshot;\n } catch {\n return null;\n }\n }, [snapshot]);\n\n // Actions commented out for now - will be more advanced later\n // const parsedActions = useMemo<DynamicListAction[]>(() => {\n // try {\n // if (!actions || actions === '' || actions === '[]') return [];\n // return typeof actions === 'string' ? JSON.parse(actions) : actions;\n // } catch {\n // return [];\n // }\n // }, [actions]);\n\n // Get live data from context\n const liveData: DynamicListData = useMemo(() => {\n if (getDynamicListData && listId) {\n return getDynamicListData(listId);\n }\n return { items: null, loading: false, error: null };\n }, [getDynamicListData, listId]);\n\n // Determine what data to display\n const hasSnapshot = parsedSnapshot && parsedSnapshot.length > 0;\n const useSnapshot = hasSnapshot && !useLiveMode;\n const rawData = useSnapshot ? parsedSnapshot : liveData.items;\n\n // Filter data based on search query (searches all columns)\n const filteredData = useMemo(() => {\n if (!rawData || !searchQuery.trim()) return rawData;\n const query = searchQuery.toLowerCase();\n return rawData.filter((row: any) =>\n Object.values(row).some((val) =>\n String(val ?? '')\n .toLowerCase()\n .includes(query)\n )\n );\n }, [rawData, searchQuery]);\n\n const hasData = filteredData && filteredData.length > 0;\n\n // Generate sort options from columns (exclude columns where all values are the same)\n const sortOptions: SortOption[] = useMemo(() => {\n return parsedColumns\n .filter((col) => {\n // Check if this column has varying values\n if (!rawData || rawData.length <= 1) return true; // Can't determine variance with 0-1 items\n const firstValue = rawData[0]?.[col.key];\n const hasVariance = rawData.some((row: any) => row[col.key] !== firstValue);\n return hasVariance;\n })\n .map((col) => ({\n key: col.key,\n label: col.label,\n type: (col.type as 'string' | 'number' | 'date') || 'string',\n }));\n }, [parsedColumns, rawData]);\n\n // Generic sort function for dynamic data\n const sortData = useCallback((data: any[], config: SortConfig): any[] => {\n if (!config) return data;\n const { key, direction } = config;\n const dir = direction === 'asc' ? 1 : -1;\n\n return [...data].sort((a, b) => {\n const aVal = a?.[key];\n const bVal = b?.[key];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n if (typeof aVal === 'number' && typeof bVal === 'number') return (aVal - bVal) * dir;\n const aNum = Number(aVal);\n const bNum = Number(bVal);\n if (!Number.isNaN(aNum) && !Number.isNaN(bNum)) return (aNum - bNum) * dir;\n return String(aVal).localeCompare(String(bVal)) * dir;\n });\n }, []);\n\n // Apply sorting to filtered data\n const allData = useMemo(() => {\n if (!filteredData) return null;\n return sortData(filteredData, sortConfig);\n }, [filteredData, sortConfig, sortData]);\n\n // Pagination\n const totalItems = allData?.length || 0;\n const totalPages = Math.ceil(totalItems / DEFAULT_PAGE_SIZE);\n const paginatedData = useMemo(() => {\n if (!allData) return null;\n const startIndex = (page - 1) * DEFAULT_PAGE_SIZE;\n const endIndex = startIndex + DEFAULT_PAGE_SIZE;\n return allData.slice(startIndex, endIndex);\n }, [allData, page]);\n\n // Reset page when data changes and current page is out of bounds\n useEffect(() => {\n if (page > totalPages && totalPages > 0) {\n setPage(1);\n }\n }, [totalPages, page]);\n\n // Handle panel close - clear selection state\n const handlePanelClose = useCallback(() => {\n setSelectedIds(new Set());\n setSelectedItem(null);\n }, []);\n\n // Handle column position change with swap logic - persists to block props\n const handlePositionChange = useCallback(\n (columnKey: string, newPosition: string | null) => {\n const targetPosition = newPosition === 'none' || !newPosition ? undefined : (newPosition as ColumnPosition);\n\n // Create new columns array with updated positions\n const newColumns = parsedColumns.map((col) => {\n if (col.key === columnKey) {\n // This is the column being changed\n const { position: _oldPos, ...rest } = col;\n return targetPosition ? { ...rest, position: targetPosition } : rest;\n }\n\n // If setting to a position, check if this column has it (need to swap)\n if (targetPosition && col.position === targetPosition) {\n // Find the current position of the column being moved\n const movingCol = parsedColumns.find((c) => c.key === columnKey);\n const swapPosition = movingCol?.position;\n const { position: _oldPos, ...rest } = col;\n return swapPosition ? { ...rest, position: swapPosition } : rest;\n }\n\n return col;\n });\n\n // Persist to block props\n editor.updateBlock(block, {\n props: {\n ...block.props,\n columns: JSON.stringify(newColumns),\n },\n });\n },\n [parsedColumns, editor, block]\n );\n\n // Setup selection panel\n const panelId = `${DYNAMIC_LIST_SELECTION_PANEL_ID}-${block.id}`;\n const panelContent = useMemo(\n () => (\n <DynamicListSelectionPanel\n selectedItem={selectedItem}\n columns={parsedColumns}\n dataSource={parsedDataSource}\n panelDescription={panelDescription || undefined}\n // Actions commented out for now - will be more advanced later\n // actions={parsedActions.length > 0 ? parsedActions : undefined}\n onClose={handlePanelClose}\n />\n ),\n [selectedItem, parsedColumns, parsedDataSource, panelDescription, handlePanelClose]\n );\n const { open: openSelectionPanel, close: closeSelectionPanel } = usePanel(panelId, panelContent);\n\n // Group columns by position\n const columnsByPosition = useMemo(() => {\n const grouped: Record<ColumnPosition, DynamicListColumn | undefined> = {\n topLeft: undefined,\n bottomLeft: undefined,\n topRight: undefined,\n bottomRight: undefined,\n };\n parsedColumns.forEach((col) => {\n if (col.position) {\n grouped[col.position] = col;\n }\n });\n return grouped;\n }, [parsedColumns]);\n\n // Get a unique ID for each row (first string field or index)\n const getRowId = useCallback(\n (row: any, index: number): string => {\n // Try to find an 'id' or 'did' field\n if (row.id) return String(row.id);\n if (row.did) return String(row.did);\n // Otherwise use the first column's value\n if (parsedColumns.length > 0) {\n const firstCol = parsedColumns[0];\n if (row[firstCol.key]) return String(row[firstCol.key]);\n }\n return `row-${index}`;\n },\n [parsedColumns]\n );\n\n // Helper to find item by ID\n const findItemById = useCallback(\n (id: string): any | null => {\n if (!allData) return null;\n return allData.find((row, index) => getRowId(row, index) === id) || null;\n },\n [allData, getRowId]\n );\n\n // Selection handlers\n const isItemChecked = useCallback((id: string) => selectedIds.has(id), [selectedIds]);\n\n const onItemCheck = useCallback(\n (id: string, checked: boolean) => {\n // Calculate new state values first, then update all states separately\n // This avoids nested state updates which cause \"Cannot update component while rendering\" warnings\n\n if (!isMultiSelect) {\n // Single select mode\n if (checked) {\n const item = findItemById(id);\n setSelectedIds(new Set([id]));\n setSelectedItem(item);\n openSelectionPanel();\n } else {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n setSelectedItem(null);\n closeSelectionPanel();\n }\n return;\n }\n\n // Multi-select mode\n if (checked) {\n const item = findItemById(id);\n setSelectedIds((prev) => {\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n setSelectedItem(item);\n openSelectionPanel();\n } else {\n // Need to check if this will be the last item removed\n const willBeEmpty = selectedIds.size === 1 && selectedIds.has(id);\n\n setSelectedIds((prev) => {\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n\n if (willBeEmpty) {\n setSelectedItem(null);\n closeSelectionPanel();\n } else {\n // Show the last remaining selected item (excluding the one being removed)\n const remainingIds = Array.from(selectedIds).filter((existingId) => existingId !== id);\n const lastId = remainingIds[remainingIds.length - 1];\n if (lastId) {\n const item = findItemById(lastId);\n setSelectedItem(item);\n }\n }\n }\n },\n [isMultiSelect, findItemById, openSelectionPanel, closeSelectionPanel, selectedIds]\n );\n\n // Save current live data as snapshot\n const handleSaveSnapshot = () => {\n if (liveData.items && liveData.items.length > 0) {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n snapshot: JSON.stringify(liveData.items),\n snapshotTimestamp: new Date().toISOString(),\n },\n });\n }\n };\n\n // Clear snapshot and use live data\n const handleUseLiveData = () => {\n setUseLiveMode(true);\n };\n\n // Go back to using snapshot\n const handleUseSnapshot = () => {\n setUseLiveMode(false);\n };\n\n // Toggle search bar\n const handleSearchToggle = useCallback(() => {\n setShowSearch((prev) => {\n const next = !prev;\n if (next) {\n // Focus the input after opening\n setTimeout(() => searchInputRef.current?.focus(), 100);\n } else {\n // Clear search when closing\n setSearchQuery('');\n }\n return next;\n });\n }, []);\n\n // Reset page when search query changes\n useEffect(() => {\n setPage(1);\n }, [searchQuery]);\n\n // Format cell value based on column type\n const formatValue = (value: any, type?: string): string => {\n if (value === null || value === undefined) return '';\n if (type === 'number' && typeof value === 'number') {\n return value.toLocaleString();\n }\n if (type === 'date') {\n try {\n return new Date(value).toLocaleDateString();\n } catch {\n return String(value);\n }\n }\n return String(value);\n };\n\n // Render a field value with styling\n const renderField = (row: any, col: DynamicListColumn | undefined, defaultText?: string) => {\n if (!col)\n return defaultText ? (\n <Text size=\"sm\" c=\"dimmed\">\n {defaultText}\n </Text>\n ) : null;\n const value = formatValue(row[col.key], col.type);\n if (!value) return null;\n return (\n <Text size=\"sm\" c={col.color || undefined} fw={col.position === 'topLeft' || col.position === 'topRight' ? 500 : undefined}>\n {value}\n </Text>\n );\n };\n\n // No listId configured - show placeholder\n if (!listId) {\n return (\n <Paper p=\"xl\" withBorder w=\"100%\" radius=\"lg\">\n <Stack align=\"center\" gap=\"sm\">\n <IconDatabase size={32} color=\"var(--mantine-color-dimmed)\" />\n <Text fz=\"18\" ta=\"center\">\n Dynamic List Block\n </Text>\n <Text fz=\"sm\" c=\"dimmed\" ta=\"center\">\n This block will display dynamic data from AG-UI.\n <br />\n Add a list from the AG-UI Canvas to populate it.\n </Text>\n </Stack>\n </Paper>\n );\n }\n\n return (\n <Stack w=\"100%\">\n {/* Header */}\n <Flex px={5} align=\"center\" justify=\"space-between\">\n <Title order={4}>{title || 'Dynamic List'}</Title>\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={toggle} aria-label={opened ? 'Collapse' : 'Expand'}>\n {opened ? <IconChevronUp size={18} /> : <IconChevronDown size={18} />}\n </ActionIcon>\n </Flex>\n\n {/* Info Panel */}\n <Collapse in={showInfo}>\n <Box\n mx={5}\n mt=\"xs\"\n p=\"sm\"\n style={{\n backgroundColor: 'var(--mantine-color-dark-6)',\n borderRadius: 8,\n border: '1px solid var(--mantine-color-dark-4)',\n }}\n >\n <Flex justify=\"space-between\" align=\"flex-start\" mb=\"xs\">\n <Group gap=\"xs\">\n <IconInfoCircle size={14} color=\"var(--mantine-color-blue-4)\" />\n <Text fz=\"xs\" fw={500} c=\"dimmed\">\n Data Source\n </Text>\n </Group>\n <ActionIcon variant=\"subtle\" size=\"xs\" onClick={() => setShowInfo(false)} aria-label=\"Close info\">\n <IconX size={14} />\n </ActionIcon>\n </Flex>\n <Stack gap={6}>\n {parsedDataSource?.oracleName && (\n <Group gap=\"xs\">\n <Text fz=\"xs\" c=\"dimmed\" w={70}>\n Oracle:\n </Text>\n <Text fz=\"xs\">{parsedDataSource.oracleName}</Text>\n </Group>\n )}\n {parsedDataSource?.oracleDid && (\n <Group gap=\"xs\">\n <Text fz=\"xs\" c=\"dimmed\" w={70}>\n DID:\n </Text>\n <Text fz=\"xs\" style={{ wordBreak: 'break-all' }}>\n {parsedDataSource.oracleDid}\n </Text>\n </Group>\n )}\n {parsedDataSource?.toolName && (\n <Group gap=\"xs\">\n <Text fz=\"xs\" c=\"dimmed\" w={70}>\n Tool:\n </Text>\n <Text fz=\"xs\">{parsedDataSource.toolName}</Text>\n </Group>\n )}\n {parsedDataSource?.query && (\n <Box>\n <Text fz=\"xs\" c=\"dimmed\" mb={4}>\n Query:\n </Text>\n <Text fz=\"xs\" style={{ whiteSpace: 'pre-wrap' }}>\n {parsedDataSource.query}\n </Text>\n </Box>\n )}\n {parsedDataSource?.description && (\n <Box>\n <Text fz=\"xs\" c=\"dimmed\" mb={4}>\n Description:\n </Text>\n <Text fz=\"xs\" fs=\"italic\">\n {parsedDataSource.description}\n </Text>\n </Box>\n )}\n {parsedDataSource?.params && Object.keys(parsedDataSource.params).length > 0 && (\n <Box>\n <Text fz=\"xs\" c=\"dimmed\" mb={4}>\n Params:\n </Text>\n <Code block style={{ fontSize: '11px', whiteSpace: 'pre-wrap' }}>\n {JSON.stringify(parsedDataSource.params, null, 2)}\n </Code>\n </Box>\n )}\n </Stack>\n </Box>\n </Collapse>\n\n <Collapse pb={5} px={5} in={opened}>\n <Stack w=\"100%\">\n {/* Search bar */}\n <Collapse in={showSearch}>\n <Flex gap=\"xs\" align=\"center\">\n <TextInput\n ref={searchInputRef}\n placeholder=\"Search all columns...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.currentTarget.value)}\n leftSection={<IconSearch size={16} />}\n rightSection={searchQuery && <CloseButton size=\"sm\" onClick={() => setSearchQuery('')} aria-label=\"Clear search\" />}\n size=\"sm\"\n style={{ flex: 1 }}\n styles={{\n input: {\n backgroundColor: 'var(--mantine-color-dark-6)',\n borderColor: 'var(--mantine-color-dark-4)',\n '&:focus': {\n borderColor: 'var(--mantine-color-blue-6)',\n },\n },\n }}\n />\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={handleSearchToggle} aria-label=\"Close search\" title=\"Close search\">\n <IconChevronUp size={16} />\n </ActionIcon>\n </Flex>\n </Collapse>\n\n {/* Sort indicator */}\n {sortConfig && (\n <Flex align=\"center\" gap=\"xs\">\n <Text fz=\"xs\" c=\"dimmed\">\n Sorted by {parsedColumns.find((c) => c.key === sortConfig.key)?.label || sortConfig.key}\n </Text>\n {sortConfig.direction === 'asc' ? <IconArrowUp size={14} /> : <IconArrowDown size={14} />}\n </Flex>\n )}\n\n {/* Filter/Status bar */}\n {hasData && (\n <Flex justify=\"space-between\" align=\"center\">\n <Group gap=\"xs\">\n <Text fz=\"sm\" c=\"dimmed\">\n {totalItems} {totalItems === 1 ? 'item' : 'items'}\n {searchQuery && rawData && ` of ${rawData.length}`}\n {selectedIds.size > 0 && ` • ${selectedIds.size} selected`}\n </Text>\n {useSnapshot && snapshotTimestamp && (\n <Tooltip label={`Snapshot from ${new Date(snapshotTimestamp).toLocaleString()}`}>\n <Text fz=\"xs\" c=\"yellow\" style={{ cursor: 'help' }}>\n (snapshot)\n </Text>\n </Tooltip>\n )}\n {useSnapshot && !snapshotTimestamp && (\n <Text fz=\"xs\" c=\"yellow\">\n (snapshot)\n </Text>\n )}\n {!useSnapshot && (\n <Text fz=\"xs\" c=\"green\">\n (live)\n </Text>\n )}\n </Group>\n <Group gap=\"xs\">\n {editable && (\n <>\n {useSnapshot && liveData.items && liveData.items.length > 0 && (\n <Button size=\"compact-xs\" variant=\"subtle\" onClick={handleUseLiveData} leftSection={<IconRefresh size={12} />}>\n Use Live\n </Button>\n )}\n {!useSnapshot && hasSnapshot && (\n <Button size=\"compact-xs\" variant=\"subtle\" onClick={handleUseSnapshot} leftSection={<IconCamera size={12} />}>\n Use Snapshot\n </Button>\n )}\n {!useSnapshot && liveData.items && liveData.items.length > 0 && (\n <Tooltip label=\"Save current data as snapshot\">\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={handleSaveSnapshot}>\n <IconCamera size={16} />\n </ActionIcon>\n </Tooltip>\n )}\n </>\n )}\n {/* Settings menu with sort options, columns, search, and CSV download */}\n <Menu\n shadow=\"md\"\n styles={{\n dropdown: {\n minWidth: 220,\n backgroundColor: 'var(--mantine-color-dark-7)',\n borderColor: 'var(--mantine-color-dark-4)',\n },\n item: {\n color: '#fff',\n backgroundColor: 'var(--mantine-color-dark-7)',\n '&:hover': {\n backgroundColor: 'var(--mantine-color-dark-6)',\n },\n '&[data-active=\"true\"]': {\n backgroundColor: 'var(--mantine-color-dark-5)',\n },\n },\n label: {\n color: '#fff',\n },\n divider: {\n borderColor: 'var(--mantine-color-dark-4)',\n },\n }}\n >\n <Menu.Target>\n <ActionIcon variant=\"subtle\" size=\"sm\" aria-label=\"List actions\" title=\"List actions\">\n <IconAdjustmentsHorizontal size={18} />\n </ActionIcon>\n </Menu.Target>\n <Menu.Dropdown>\n {/* Sort Options */}\n {sortOptions.length > 0 && (\n <>\n <Menu.Label onClick={() => setOrderByCollapsed(!orderByCollapsed)} style={{ cursor: 'pointer' }}>\n <Flex align=\"center\" gap={10}>\n {orderByCollapsed ? <IconChevronRight size={14} /> : <IconChevronDown size={14} />}\n <Text fz=\"14\">Order By</Text>\n </Flex>\n </Menu.Label>\n <Collapse in={!orderByCollapsed}>\n {sortOptions.map((opt) => {\n const isAscActive = sortConfig?.key === opt.key && sortConfig?.direction === 'asc';\n const isDescActive = sortConfig?.key === opt.key && sortConfig?.direction === 'desc';\n const isRowActive = isAscActive || isDescActive;\n\n return (\n <Box\n key={opt.key}\n px=\"sm\"\n py={6}\n style={{\n backgroundColor: isRowActive ? 'var(--mantine-color-dark-5)' : 'transparent',\n borderRadius: 4,\n margin: '2px 4px',\n }}\n >\n <Flex align=\"center\" justify=\"space-between\" gap=\"xs\">\n <ActionIcon\n variant=\"subtle\"\n size=\"xs\"\n onClick={() => {\n if (isAscActive) {\n setSortConfig(null);\n } else {\n setSortConfig({ key: opt.key, direction: 'asc' });\n }\n setPage(1);\n }}\n style={{\n color: isAscActive ? 'var(--mantine-color-blue-4)' : 'var(--mantine-color-dark-2)',\n }}\n >\n <IconArrowUp size={14} />\n </ActionIcon>\n <Text fz=\"sm\" style={{ flex: 1, textAlign: 'center' }}>\n {opt.label}\n </Text>\n <ActionIcon\n variant=\"subtle\"\n size=\"xs\"\n onClick={() => {\n if (isDescActive) {\n setSortConfig(null);\n } else {\n setSortConfig({ key: opt.key, direction: 'desc' });\n }\n setPage(1);\n }}\n style={{\n color: isDescActive ? 'var(--mantine-color-blue-4)' : 'var(--mantine-color-dark-2)',\n }}\n >\n <IconArrowDown size={14} />\n </ActionIcon>\n </Flex>\n </Box>\n );\n })}\n </Collapse>\n <Menu.Divider />\n </>\n )}\n\n {/* Columns Section */}\n {parsedColumns.length > 0 && (\n <>\n <Menu.Label onClick={() => setColumnsCollapsed(!columnsCollapsed)} style={{ cursor: 'pointer' }}>\n <Flex align=\"center\" gap={10}>\n {columnsCollapsed ? <IconChevronRight size={14} /> : <IconChevronDown size={14} />}\n <Text fz=\"14\">Columns</Text>\n </Flex>\n </Menu.Label>\n <Collapse in={!columnsCollapsed}>\n {parsedColumns.map((col) => (\n <Box key={col.key} px=\"sm\" py={4} style={{ margin: '2px 4px' }}>\n <Flex align=\"center\" justify=\"space-between\" gap=\"xs\">\n <Text fz=\"xs\" style={{ flex: 1, minWidth: 0 }} lineClamp={1}>\n {col.label}\n </Text>\n <Select\n size=\"xs\"\n value={col.position || 'none'}\n onChange={(val) => handlePositionChange(col.key, val)}\n data={POSITION_OPTIONS}\n w={110}\n withCheckIcon={false}\n comboboxProps={{\n withinPortal: true,\n styles: {\n dropdown: {\n backgroundColor: 'var(--mantine-color-dark-7)',\n borderColor: 'var(--mantine-color-dark-4)',\n },\n option: {\n backgroundColor: 'var(--mantine-color-dark-7)',\n '&[data-combobox-selected]': {\n backgroundColor: 'var(--mantine-color-dark-7)',\n },\n '&:hover': {\n backgroundColor: 'var(--mantine-color-dark-5)',\n },\n },\n },\n }}\n renderOption={({ option, checked }) => (\n <Text fz=\"xs\" c={checked ? 'blue.4' : '#fff'}>\n {option.label}\n </Text>\n )}\n styles={{\n input: {\n fontSize: '12px',\n minHeight: '24px',\n height: '24px',\n backgroundColor: 'var(--mantine-color-dark-6)',\n borderColor: 'var(--mantine-color-dark-4)',\n color: '#fff',\n },\n }}\n />\n </Flex>\n </Box>\n ))}\n </Collapse>\n <Menu.Divider />\n </>\n )}\n\n {/* Search */}\n <Menu.Item onClick={handleSearchToggle} leftSection={<IconSearch size={16} />} data-active={showSearch}>\n Search\n </Menu.Item>\n\n <Menu.Divider />\n {/* Info */}\n {parsedDataSource && (\n <Menu.Item onClick={() => setShowInfo(!showInfo)} leftSection={<IconInfoCircle size={16} />} data-active={showInfo}>\n Info\n </Menu.Item>\n )}\n <Menu.Divider />\n\n {/* Multi Select */}\n <Menu.Item\n onClick={() => {\n setIsMultiSelect(!isMultiSelect);\n if (isMultiSelect) setSelectedIds(new Set());\n }}\n >\n {isMultiSelect ? 'Done Selecting' : 'Multi Select'}\n </Menu.Item>\n\n {/* Download CSV */}\n {allData && allData.length > 0 && (\n <>\n <Menu.Divider />\n <Menu.Item onClick={() => downloadArrayAsCsv(allData)} leftSection={<IconDownload size={16} />}>\n Download CSV\n </Menu.Item>\n </>\n )}\n </Menu.Dropdown>\n </Menu>\n </Group>\n </Flex>\n )}\n\n {/* Loading state */}\n {!useSnapshot && liveData.loading && (\n <Paper p=\"lg\" bg=\"var(--mantine-color-dark-6)\" radius=\"sm\">\n <Text c=\"dimmed\" ta=\"center\">\n Loading data...\n </Text>\n </Paper>\n )}\n\n {/* Error state */}\n {!useSnapshot && liveData.error && (\n <Paper p=\"lg\" bg=\"var(--mantine-color-red-9)\" radius=\"sm\">\n <Text c=\"white\" ta=\"center\">\n Error: {liveData.error}\n </Text>\n </Paper>\n )}\n\n {/* List Items */}\n {hasData && paginatedData && (\n <Stack gap=\"xs\">\n {paginatedData.map((row, index) => {\n const rowId = getRowId(row, index);\n const isChecked = isItemChecked(rowId);\n\n return (\n <ListItemContainer key={rowId} isChecked={isChecked} onClick={() => onItemCheck(rowId, !isChecked)}>\n {/* Left side */}\n <Flex align=\"center\" gap=\"sm\">\n <Stack gap={2}>\n {renderField(row, columnsByPosition.topLeft)}\n {columnsByPosition.bottomLeft && (\n <Text size=\"xs\" c={columnsByPosition.bottomLeft.color || 'dimmed'} lineClamp={1}>\n {formatValue(row[columnsByPosition.bottomLeft.key], columnsByPosition.bottomLeft.type) || ''}\n </Text>\n )}\n </Stack>\n </Flex>\n\n {/* Right side */}\n <Flex align=\"center\" gap=\"md\">\n <Stack gap={2} align=\"flex-end\">\n {columnsByPosition.topRight && (\n <Text size=\"sm\" fw={500} c={columnsByPosition.topRight.color || undefined}>\n {formatValue(row[columnsByPosition.topRight.key], columnsByPosition.topRight.type) || ''}\n </Text>\n )}\n {columnsByPosition.bottomRight && (\n <Text size=\"xs\" c={columnsByPosition.bottomRight.color || 'dimmed'} tt=\"capitalize\">\n {formatValue(row[columnsByPosition.bottomRight.key], columnsByPosition.bottomRight.type) || ''}\n </Text>\n )}\n </Stack>\n {isMultiSelect && <ListItemCheckbox ariaLabel={`Select ${rowId}`} checked={isChecked} onCheck={(checked) => onItemCheck(rowId, checked)} />}\n </Flex>\n </ListItemContainer>\n );\n })}\n </Stack>\n )}\n\n {/* Pagination */}\n {hasData && totalPages > 1 && <ListPagination page={page} setPage={setPage} totalPages={totalPages} />}\n\n {/* No search results */}\n {!hasData && !liveData.loading && searchQuery && rawData && rawData.length > 0 && (\n <Text c=\"dimmed\" ta=\"center\" fz=\"sm\">\n No matching items for &ldquo;{searchQuery}&rdquo;\n </Text>\n )}\n\n {/* No data state - show dataSource info (only when not searching) */}\n {!hasData && !liveData.loading && !searchQuery && parsedDataSource && (\n <Paper p=\"lg\" bg=\"var(--mantine-color-dark-6)\" radius=\"sm\">\n <Stack gap=\"sm\">\n <Group gap=\"xs\">\n <IconSparkles size={16} color=\"var(--mantine-color-blue-4)\" />\n <Text fz=\"sm\" fw={500}>\n Data Source\n </Text>\n </Group>\n {parsedDataSource.oracleName && (\n <Group gap=\"xs\">\n <Text size=\"xs\" c=\"dimmed\">\n Oracle:\n </Text>\n <Badge size=\"sm\" variant=\"light\">\n {parsedDataSource.oracleName}\n </Badge>\n </Group>\n )}\n {parsedDataSource.query && (\n <Box>\n <Text size=\"xs\" c=\"dimmed\" mb={4}>\n Query:\n </Text>\n <Code block style={{ fontSize: '12px', whiteSpace: 'pre-wrap' }}>\n {parsedDataSource.query}\n </Code>\n </Box>\n )}\n {parsedDataSource.description && (\n <Text size=\"xs\" c=\"dimmed\" fs=\"italic\">\n {parsedDataSource.description}\n </Text>\n )}\n <Text size=\"xs\" c=\"dimmed\" ta=\"center\" mt=\"xs\">\n Ask your oracle this query to populate the list.\n </Text>\n </Stack>\n </Paper>\n )}\n\n {/* No data, no dataSource (only when not searching) */}\n {!hasData && !liveData.loading && !searchQuery && !parsedDataSource && (\n <Paper p=\"lg\" bg=\"var(--mantine-color-dark-6)\" radius=\"sm\">\n <Text c=\"dimmed\" ta=\"center\" fz=\"sm\">\n No data available. Add data from the AG-UI Canvas.\n </Text>\n </Paper>\n )}\n </Stack>\n </Collapse>\n </Stack>\n );\n}\n\nexport default DynamicListBlock;\n","import React, { useMemo, useState } from 'react';\nimport { Paper, CloseButton, Stack, Text, Box, Group, Divider, Code, ScrollArea, /* Button, */ Collapse } from '@mantine/core';\nimport { IconSparkles, IconChevronDown, IconChevronRight } from '@tabler/icons-react';\nimport { usePanelStore } from '../../hooks/usePanel';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\nimport type { DynamicListColumn, DataSource /* DynamicListAction */ } from './types';\n\ninterface DynamicListSelectionPanelProps {\n selectedItem: any | null;\n columns: DynamicListColumn[];\n dataSource: DataSource | null;\n panelDescription?: string;\n // Actions commented out for now - will be more advanced later\n // actions?: DynamicListAction[];\n /** Callback when panel is closed - used to sync selection state with parent */\n onClose?: () => void;\n}\n\n/**\n * Format a key string to a human-readable label\n * e.g., \"firstName\" -> \"First Name\", \"user_email\" -> \"User Email\"\n */\nfunction formatKeyAsLabel(key: string): string {\n return key\n .replace(/([A-Z])/g, ' $1') // Add space before capitals\n .replace(/[_-]/g, ' ') // Replace underscores and hyphens with spaces\n .replace(/^\\s/, '') // Remove leading space\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n}\n\n/**\n * Format a value based on its type\n */\nfunction formatValue(value: any, type?: string): string {\n if (value === null || value === undefined) return '-';\n\n if (type === 'number' && typeof value === 'number') {\n return value.toLocaleString();\n }\n\n if (type === 'date') {\n try {\n return new Date(value).toLocaleString();\n } catch {\n return String(value);\n }\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value, null, 2);\n }\n\n return String(value);\n}\n\n// Actions commented out for now - will be more advanced later\n// /**\n// * Handle action button click - for now just alert with details\n// */\n// function handleActionClick(action: DynamicListAction, item: any) {\n// alert(`Action: ${action.label}\\n\\nItem Details:\\n${JSON.stringify(item, null, 2)}`);\n// }\n\n/**\n * Default key-value pairs view for dynamic list items\n */\nfunction DefaultKeyValueView({\n item,\n columns,\n dataSource,\n panelDescription,\n // actions,\n}: {\n item: any;\n columns: DynamicListColumn[];\n dataSource: DataSource | null;\n panelDescription?: string;\n // actions?: DynamicListAction[];\n}) {\n const [valuesExpanded, setValuesExpanded] = useState(false);\n\n // Build a map of key -> column for easy lookup\n const columnMap = useMemo(() => {\n const map: Record<string, DynamicListColumn> = {};\n columns.forEach((col) => {\n map[col.key] = col;\n });\n return map;\n }, [columns]);\n\n // Get title from topLeft column or first key\n const titleColumn = columns.find((col) => col.position === 'topLeft');\n const title = titleColumn ? item[titleColumn.key] : Object.values(item)[0];\n\n // Get all keys from the item, excluding internal ones\n const itemKeys = Object.keys(item).filter((key) => !key.startsWith('_'));\n\n return (\n <Stack gap=\"md\" style={{ flex: 1 }}>\n {/* Title */}\n <Box>\n <Text size=\"lg\" fw={600}>\n {formatValue(title)}\n </Text>\n {titleColumn && (\n <Text size=\"xs\" c=\"dimmed\">\n {titleColumn.label}\n </Text>\n )}\n </Box>\n\n {/* Panel Description */}\n {panelDescription && (\n <>\n <Divider />\n <Text size=\"sm\" c=\"dimmed\">\n {panelDescription}\n </Text>\n </>\n )}\n\n {/* Actions - commented out for now - will be more advanced later */}\n {/* {actions && actions.length > 0 && (\n <>\n <Divider />\n <Group gap=\"xs\">\n {actions.map((action) => (\n <Button key={action.id} size=\"sm\" variant=\"light\" color={action.color || 'blue'} onClick={() => handleActionClick(action, item)}>\n {action.label}\n </Button>\n ))}\n </Group>\n </>\n )} */}\n\n {/* Collapsible Values Section */}\n <Divider />\n <Box>\n <Group gap=\"xs\" style={{ cursor: 'pointer' }} onClick={() => setValuesExpanded(!valuesExpanded)}>\n {valuesExpanded ? <IconChevronDown size={16} color=\"var(--mantine-color-blue-4)\" /> : <IconChevronRight size={16} color=\"var(--mantine-color-blue-4)\" />}\n <Text size=\"sm\" fw={500}>\n Values\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n ({itemKeys.length} fields)\n </Text>\n </Group>\n\n <Collapse in={valuesExpanded}>\n <ScrollArea style={{ maxHeight: 300 }} mt=\"sm\">\n <Stack gap=\"sm\">\n {itemKeys.map((key) => {\n const column = columnMap[key];\n const label = column?.label || formatKeyAsLabel(key);\n const value = item[key];\n const formattedValue = formatValue(value, column?.type);\n const isObject = typeof value === 'object' && value !== null;\n\n return (\n <Box key={key}>\n <Text size=\"xs\" c=\"dimmed\" fw={500}>\n {label}\n </Text>\n {isObject ? (\n <Code block style={{ fontSize: '12px', whiteSpace: 'pre-wrap', maxHeight: 150, overflow: 'auto' }}>\n {formattedValue}\n </Code>\n ) : (\n <Text size=\"sm\" c={column?.color || undefined}>\n {formattedValue}\n </Text>\n )}\n </Box>\n );\n })}\n </Stack>\n </ScrollArea>\n </Collapse>\n </Box>\n\n {/* Spacer to push DataSource to bottom */}\n <Box style={{ flex: 1 }} />\n\n {/* DataSource info */}\n {dataSource && (\n <>\n <Divider />\n <Box>\n <Group gap=\"xs\" mb=\"xs\">\n <IconSparkles size={14} color=\"var(--mantine-color-blue-4)\" />\n <Text size=\"xs\" fw={500} c=\"dimmed\">\n Data Source\n </Text>\n </Group>\n {dataSource.oracleName && (\n <Text size=\"xs\" c=\"dimmed\">\n Oracle: {dataSource.oracleName}\n </Text>\n )}\n {dataSource.query && (\n <Box mt=\"xs\">\n <Text size=\"xs\" c=\"dimmed\" mb={4}>\n Query:\n </Text>\n <Code block style={{ fontSize: '11px', whiteSpace: 'pre-wrap' }}>\n {dataSource.query}\n </Code>\n </Box>\n )}\n </Box>\n </>\n )}\n </Stack>\n );\n}\n\n/**\n * Selection panel for dynamic list items.\n * Shows all item fields as key-value pairs by default.\n * Can use custom renderer from context if provided.\n */\nexport const DynamicListSelectionPanel: React.FC<DynamicListSelectionPanelProps> = ({ selectedItem, columns, dataSource, panelDescription, /* actions, */ onClose }) => {\n const { closePanel } = usePanelStore();\n const { dynamicListPanelRenderer } = useBlocknoteContext();\n\n // Handle close - notify parent to clear selection\n const handleClose = () => {\n closePanel();\n onClose?.();\n };\n\n // No item selected\n if (!selectedItem) {\n return (\n <Paper\n p=\"md\"\n shadow=\"sm\"\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n }}\n >\n <CloseButton\n onClick={handleClose}\n style={{\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n zIndex: 1,\n }}\n />\n <Stack align=\"center\" justify=\"center\" style={{ flex: 1 }}>\n <Text c=\"dimmed\">No item selected</Text>\n </Stack>\n </Paper>\n );\n }\n\n // Check if custom renderer is provided\n // Actions commented out for now - will be more advanced later\n const customContent = dynamicListPanelRenderer ? dynamicListPanelRenderer(selectedItem, columns, dataSource, panelDescription, undefined /* actions */, onClose) : null;\n\n return (\n <Paper\n p=\"md\"\n shadow=\"sm\"\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n }}\n >\n <CloseButton\n onClick={handleClose}\n style={{\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n zIndex: 1,\n }}\n />\n\n {customContent ? (\n // Use custom renderer content\n <Box style={{ flex: 1, paddingTop: '1rem', display: 'flex', flexDirection: 'column' }}>{customContent}</Box>\n ) : (\n // Default key-value view (actions commented out for now)\n <DefaultKeyValueView item={selectedItem} columns={columns} dataSource={dataSource} panelDescription={panelDescription} />\n )}\n </Paper>\n );\n};\n\nexport default DynamicListSelectionPanel;\n","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { Stack, Text, Button, ActionIcon, Center, Flex } from '@mantine/core';\nimport { EnumListTypes } from './types';\nimport OraclePersonalitiesEnumList from './oracle_personalities';\nimport { EnumChecklistConfigModal } from './EnumChecklistConfigModal';\nimport { useBlocknoteContext } from '@/mantine/context';\nimport { getEnumListItems, getEnumListNameByType } from './registry';\n\nconst IconSettings = () => <span>⚙️</span>;\n\nexport const EnumChecklistBlockType = 'enumChecklist';\n\nexport interface EnumChecklistBlockConfig {\n listType: EnumListTypes | null;\n listConfig: Record<string, any>;\n selectedIds: string[];\n}\n\nexport interface EnumChecklistBlockProps {\n block: any;\n editor: any;\n}\n\nconst EnumChecklistBlockContent: React.FC<EnumChecklistBlockProps> = ({ block, editor }) => {\n const [modalOpened, setModalOpened] = useState(false);\n const { editable } = useBlocknoteContext();\n\n const listType: EnumListTypes | null = block.props.listType && block.props.listType !== '' ? (block.props.listType as EnumListTypes) : null;\n\n const listConfig = useMemo(() => {\n if (block.props.listConfig && block.props.listConfig !== '{}') {\n try {\n return JSON.parse(block.props.listConfig);\n } catch (error) {\n return {};\n }\n }\n return {};\n }, [block.props.listConfig]);\n\n const selectedIds = useMemo(() => {\n if (block.props.selectedIds && block.props.selectedIds !== '[]') {\n try {\n return new Set(JSON.parse(block.props.selectedIds));\n } catch (error) {\n return new Set();\n }\n }\n return new Set();\n }, [block.props.selectedIds]);\n\n useEffect(() => {\n if (listConfig?.selection_mode === 'single' && selectedIds.size > 1) {\n const arr = Array.from(selectedIds);\n const lastSelected = arr.length > 0 ? arr[arr.length - 1] : undefined;\n updateProps({\n selectedIds: JSON.stringify(lastSelected ? [lastSelected] : []),\n });\n }\n }, [listConfig?.selection_mode, selectedIds]);\n\n const isItemChecked = useCallback(\n (id: string) => {\n return selectedIds.has(id);\n },\n [selectedIds]\n );\n\n const onItemCheck = useCallback(\n (id: string, checked: boolean) => {\n const currentSelectedIds = Array.from(selectedIds) as string[];\n let newSelectedIds: string[];\n\n if (listConfig?.selection_mode === 'single') {\n if (checked) {\n newSelectedIds = [id];\n } else {\n newSelectedIds = currentSelectedIds.filter((selectedId) => selectedId !== id);\n }\n } else {\n if (checked) {\n newSelectedIds = [...currentSelectedIds, id];\n } else {\n newSelectedIds = currentSelectedIds.filter((selectedId) => selectedId !== id);\n }\n }\n\n updateProps({\n selectedIds: JSON.stringify(newSelectedIds),\n });\n },\n [listConfig?.selection_mode, selectedIds]\n );\n\n const updateProps = (props: Record<string, any>) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n ...props,\n },\n });\n };\n\n const handleConfigSave = (config: EnumChecklistBlockConfig) => {\n updateProps({\n listType: config.listType,\n listConfig: JSON.stringify(config.listConfig),\n selectedIds: JSON.stringify(config.selectedIds || []),\n });\n setModalOpened(false);\n };\n\n const renderListComponent = () => {\n if (!listType) return null;\n\n switch (listType) {\n case 'oracle_personalities':\n return (\n <OraclePersonalitiesEnumList\n items={getEnumListItems<'oracle_personalities'>(listType)}\n isItemChecked={isItemChecked}\n onItemCheck={onItemCheck}\n selectionMode={listConfig?.selection_mode}\n />\n );\n default:\n return null;\n }\n };\n\n return (\n <Stack w=\"100%\">\n {listType && (\n <Flex align=\"center\" justify=\"space-between\" gap=\"xs\">\n <Text>{getEnumListNameByType(listType)}</Text>\n {listConfig.listSelectionMode && (\n <Text lh={0.5} c=\"dimmed\">\n {listConfig?.selection_mode === 'single' ? 'Single Selection' : 'Multi Selection'}\n </Text>\n )}\n {editable && (\n <Flex justify={listType ? 'space-between' : 'flex-end'}>\n <Flex gap=\"xs\">\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={() => setModalOpened(true)}>\n <IconSettings />\n </ActionIcon>\n </Flex>\n </Flex>\n )}\n </Flex>\n )}\n {/* Content */}\n <Flex flex={1}>\n {!listType ? (\n <Center py=\"xl\">\n <Stack align=\"center\" gap=\"sm\">\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\">\n No list type configured\n </Text>\n <Button size=\"sm\" variant=\"light\" onClick={() => setModalOpened(true)}>\n Configure List\n </Button>\n </Stack>\n </Center>\n ) : (\n <Stack gap=\"md\" flex={1}>\n {renderListComponent()}\n </Stack>\n )}\n </Flex>\n\n {/* Configuration Modal */}\n <EnumChecklistConfigModal\n opened={modalOpened}\n onClose={() => setModalOpened(false)}\n onSave={handleConfigSave}\n initialConfig={\n listType && listConfig\n ? {\n listType: listType,\n listConfig: listConfig,\n selectedIds: Array.from(selectedIds) as string[],\n }\n : null\n }\n />\n </Stack>\n );\n};\n\nexport const EnumChecklistBlock = createReactBlockSpec(\n {\n //every block has type, responsible for slash menu label\n type: EnumChecklistBlockType,\n propSchema: {\n listType: {\n default: '',\n },\n listConfig: {\n default: '{}',\n },\n selectedIds: {\n default: '[]',\n },\n },\n content: 'none',\n },\n {\n render: (props) => <EnumChecklistBlockContent {...props} />,\n }\n);\n","import React from 'react';\nimport { EnumListData } from '../types';\nimport { Box, Flex, Stack, Text, Image } from '@mantine/core';\nimport ListItemCheckbox from '../../list/ListItemCheckbox';\nimport ListItemContainer from '../../list/ListItemContainer';\n\ntype Props = {\n selectionMode?: 'single' | 'multi' | null;\n // TODO: consider on making this one more generic than that\n items: EnumListData['oracle_personalities']['items'];\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n};\nexport default function OraclePersonalitiesEnumList({ selectionMode, isItemChecked, onItemCheck, items }: Props) {\n if (!items || items.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No assets found\n </Text>\n );\n }\n\n const rows = items.map(({ id, name, description, voice, icon }) => (\n <ListItemContainer key={id} isChecked={false} onClick={() => {}}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={62} h={62} src={icon} alt={name} />\n <Stack gap={0}>\n <Text size=\"sm\" fw={500}>\n {name || '-'}\n </Text>\n {description !== undefined && (\n <Text size=\"sm\" c=\"dimmed\">\n {description}\n </Text>\n )}\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\" fw={500}>\n Voice\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n {voice}\n </Text>\n </Stack>\n {selectionMode && <ListItemCheckbox ariaLabel={`Select oracle ${name}`} checked={isItemChecked?.(id)} onCheck={(checked) => onItemCheck?.(id, checked)} />}\n </Flex>\n </ListItemContainer>\n ));\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Modal, Group, Box } from '@mantine/core';\nimport { ModalNavigation } from '../list/modal/ModalNavigation';\nimport { EnumChecklistBlockConfig } from './EnumChecklistBlock';\nimport { EnumListTypes } from './types';\nimport { EnumChecklistTypeSelection } from './EnumChecklistTypeSelection';\nimport { EnumChecklistPreviewStep } from './EnumChecklistPreviewStep';\nimport { EnumChecklistConfigurationStep } from './EnumChecklistConfigurationStep';\nimport { getEnumListTypesConfigFields } from './registry';\n\ninterface ListConfigModalProps {\n opened: boolean;\n onClose: () => void;\n onSave: (config: EnumChecklistBlockConfig) => void;\n initialConfig?: EnumChecklistBlockConfig | null;\n}\n\nexport const EnumChecklistConfigModal: React.FC<ListConfigModalProps> = ({ opened, onClose, onSave, initialConfig }) => {\n const [activeStep, setActiveStep] = useState('type');\n const [selectedType, setSelectedType] = useState<EnumListTypes | null>(initialConfig?.listType || null);\n const [config, setConfig] = useState<Record<string, any>>(initialConfig?.listConfig || {});\n\n const handleTypeSelect = (type: EnumListTypes) => {\n setSelectedType(type);\n const configFieldsByType = getEnumListTypesConfigFields(type);\n\n const defaultConfig: Record<string, any> = {};\n\n configFieldsByType.forEach((field) => {\n if (field.defaultValue !== undefined) {\n defaultConfig[field.key] = field.defaultValue;\n }\n });\n\n setConfig(defaultConfig);\n };\n\n const handleAddToBlock = () => {\n if (selectedType) {\n onSave({ listType: selectedType, listConfig: config, selectedIds: [] });\n onClose();\n }\n };\n\n const handleConfigChange = (key: string, value: any) => {\n setConfig((prev) => ({ ...prev, [key]: value }));\n };\n\n const isConfigValid = (): boolean => {\n if (!selectedType) return false;\n const configFields = getEnumListTypesConfigFields(selectedType);\n return configFields.every((field) => !field.required || (config[field.key] && config[field.key].trim() !== ''));\n };\n\n const handleClose = () => {\n setActiveStep('type');\n setSelectedType(null);\n setConfig({});\n onClose();\n };\n\n const steps = [\n {\n id: 'type',\n label: 'Type',\n description: 'Choose list type',\n disabled: false,\n },\n {\n id: 'configure',\n label: 'Configure',\n description: 'Set configuration',\n disabled: !selectedType,\n },\n {\n id: 'preview',\n label: 'Preview',\n description: 'Preview and add',\n disabled: !selectedType || !isConfigValid(),\n },\n ];\n\n const renderStepContent = () => {\n switch (activeStep) {\n case 'type':\n return <EnumChecklistTypeSelection selectedType={selectedType} onTypeSelect={handleTypeSelect} onNext={() => setActiveStep('configure')} />;\n case 'configure':\n return selectedType ? (\n <EnumChecklistConfigurationStep\n enumChecklistType={selectedType}\n config={config}\n onConfigChange={handleConfigChange}\n onNext={() => setActiveStep('preview')}\n onPrev={() => setActiveStep('type')}\n isValid={isConfigValid()}\n />\n ) : null;\n case 'preview':\n return selectedType ? <EnumChecklistPreviewStep listType={selectedType} onAddToBlock={handleAddToBlock} onPrev={() => setActiveStep('configure')} /> : null;\n default:\n return null;\n }\n };\n\n return (\n <Modal opened={opened} onClose={handleClose} title=\"Configure Enum Checklist Block\" size=\"xl\">\n <Group align=\"flex-start\" gap=\"lg\" style={{ minHeight: '400px' }}>\n {/* Left Navigation */}\n <Box style={{ width: '200px', flexShrink: 0, height: '400px', display: 'flex' }}>\n <ModalNavigation steps={steps} activeStep={activeStep} onStepChange={setActiveStep} showUpdateButton={selectedType !== null} onUpdateBlock={handleAddToBlock} />\n </Box>\n\n {/* Right Content */}\n <Box style={{ flex: 1 }}>{renderStepContent()}</Box>\n </Group>\n </Modal>\n );\n};\n","import React from 'react';\nimport { Stack, Button, Text } from '@mantine/core';\n\ninterface NavigationStep {\n id: string;\n label: string;\n description: string;\n disabled?: boolean;\n}\n\ninterface ModalNavigationProps {\n steps: NavigationStep[];\n activeStep: string;\n onStepChange: (stepId: string) => void;\n showUpdateButton?: boolean;\n onUpdateBlock?: () => void;\n}\n\nexport const ModalNavigation: React.FC<ModalNavigationProps> = ({ steps, activeStep, onStepChange, showUpdateButton = false, onUpdateBlock }) => {\n return (\n <Stack gap=\"xs\" style={{ height: '100%' }}>\n {/* Navigation Steps */}\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n {steps.map((step) => (\n <Button\n key={step.id}\n variant={activeStep === step.id ? 'filled' : 'subtle'}\n justify=\"flex-start\"\n disabled={step.disabled}\n onClick={() => onStepChange(step.id)}\n styles={{\n root: {\n height: 'auto',\n padding: '12px',\n },\n inner: {\n justifyContent: 'flex-start',\n },\n }}\n >\n <Stack gap={2} align=\"flex-start\">\n <Text size=\"sm\" fw={500}>\n {step.label}\n </Text>\n <Text size=\"xs\" opacity={0.7}>\n {step.description}\n </Text>\n </Stack>\n </Button>\n ))}\n </Stack>\n\n {/* Update Block Button */}\n {showUpdateButton && (\n <Button variant=\"filled\" color=\"blue\" onClick={onUpdateBlock} style={{ marginTop: 'auto' }}>\n Update Block\n </Button>\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Card, Group, Text, Box, Button } from '@mantine/core';\nimport { EnumListTypes, EnumListTypesMetadata } from './types';\nimport { getEnumListTypesMetadata } from './registry';\n\ninterface EnumChecklistTypeSelectionStepProps {\n selectedType: EnumListTypes | null;\n onTypeSelect: (type: EnumListTypes) => void;\n onNext: () => void;\n}\n\nexport const EnumChecklistTypeSelection: React.FC<EnumChecklistTypeSelectionStepProps> = ({ selectedType, onTypeSelect, onNext }) => {\n const enumListsMeta = getEnumListTypesMetadata();\n\n return (\n <Stack gap=\"md\">\n <div>\n <Text size=\"lg\" fw={600} mb=\"xs\">\n Choose List Type\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n Select the type of list you want to create\n </Text>\n </div>\n\n <Stack gap=\"sm\">\n {enumListsMeta.map((enumChecklistMeta: EnumListTypesMetadata) => (\n <Card\n key={enumChecklistMeta.id}\n padding=\"md\"\n radius=\"md\"\n withBorder\n bg={selectedType === enumChecklistMeta.id ? 'var(--mantine-color-gray-8)' : 'transparent'}\n style={{\n cursor: 'pointer',\n }}\n onClick={() => onTypeSelect(enumChecklistMeta.id)}\n >\n <Group gap=\"md\" align=\"flex-start\">\n <Box\n style={{\n width: 48,\n height: 48,\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '20px',\n backgroundColor: 'var(--mantine-color-gray-1)',\n border: '1px solid var(--mantine-color-gray-3)',\n }}\n >\n {enumChecklistMeta.icon}\n </Box>\n\n <Stack gap={2} style={{ flex: 1 }}>\n <Text size=\"md\" fw={600}>\n {enumChecklistMeta.name}\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n {enumChecklistMeta.description}\n </Text>\n </Stack>\n </Group>\n </Card>\n ))}\n </Stack>\n\n <Group justify=\"flex-end\" mt=\"md\">\n <Button onClick={onNext} disabled={!selectedType}>\n Next\n </Button>\n </Group>\n </Stack>\n );\n};\n","import { ConfigField } from '../../list';\nimport { EnumListTypesMetadata, EnumListTypes, EnumListData } from '../types';\n\nexport const oraclePersonalitiesMetadata: EnumListTypesMetadata = {\n id: 'oracle_personalities' as EnumListTypes,\n name: 'Oracle Personalities',\n description: 'Oracle Personalities',\n icon: '🔮',\n};\n\nexport const oraclePersonalitiesConfigFields: ConfigField[] = [\n {\n key: 'selection_mode',\n label: 'Selection Mode',\n description: 'Selection Mode',\n type: 'select',\n options: [\n { value: 'single', label: 'Single' },\n { value: 'multi', label: 'Multi' },\n ],\n required: false,\n defaultValue: null,\n placeholder: 'Select Selection Mode',\n },\n];\n\nexport const oraclePersonalitiesItems: EnumListData['oracle_personalities']['items'] = [\n {\n id: 'oracle-1',\n name: 'Sage Oracle',\n description: 'A wise oracle providing deep insights through ancient wisdom.',\n voice: 'Deep, measured tone with thoughtful pauses.',\n icon: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSrz9RwPU6kEGEnl9Zpjx913EAUawvtOHGdXw&s',\n },\n {\n id: 'oracle-2',\n name: 'Mystic Oracle',\n description: 'An enigmatic oracle channeling otherworldly knowledge.',\n voice: 'Ethereal and mysterious with otherworldly resonance.',\n icon: 'https://storage.hyperspace.ai/template-logos/Kj9FZMvFLrhnGUjRLwi2YKTDXcrdiSwqZr.webp',\n },\n {\n id: 'oracle-3',\n name: 'Scholar Oracle',\n description: 'A methodical oracle with academic rigor and evidence-based analysis.',\n voice: 'Clear and articulate with academic precision.',\n icon: 'https://www.piclumen.com/wp-content/uploads/2024/11/ai-avatar-generator-mecha-woman.webp',\n },\n {\n id: 'oracle-4',\n name: 'Prophet Oracle',\n description: 'A visionary oracle speaking of future possibilities.',\n voice: 'Commanding and visionary with prophetic conviction.',\n icon: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ0jYoUJ4WrIMWfmcSpv66JqvcG6BvxlbFcrS0Vu-ACnW5f-Jwn0PzKEwNYOL8v-N0Qbms&usqp=CAU',\n },\n {\n id: 'oracle-5',\n name: 'Guardian Oracle',\n description: 'A protective oracle focused on safety and security.',\n voice: 'Steady and reassuring with guardian warmth.',\n icon: 'https://cdn.prod.website-files.com/6600e1eab90de089c2d9c9cd/669726e1123a371667fa926c_66553f0235960af8637b5ee8_image_0KhaKlJT_1716768985301_raw.jpeg',\n },\n];\n","import { ConfigField } from '../list';\nimport { oraclePersonalitiesMetadata, oraclePersonalitiesConfigFields, oraclePersonalitiesItems } from './oracle_personalities/config';\nimport { EnumListTypes, EnumListData, BaseEnumListItem, EnumListTypesMetadata } from './types';\n\nexport const ENUM_LIST_CONFIG: Record<EnumListTypes, EnumListData[EnumListTypes]> = {\n oracle_personalities: {\n name: 'Oracle Personalities',\n metadata: oraclePersonalitiesMetadata,\n configFields: oraclePersonalitiesConfigFields,\n items: oraclePersonalitiesItems,\n },\n example_list: {\n name: 'Example List',\n metadata: {\n id: 'example_list' as EnumListTypes,\n name: 'Example List',\n description: 'An example list with different item structure',\n icon: '📝',\n },\n configFields: [\n {\n key: 'selection_mode',\n label: 'Selection Mode',\n description: 'Selection Mode',\n type: 'select',\n options: [\n { value: 'single', label: 'Single' },\n { value: 'multi', label: 'Multi' },\n ],\n required: false,\n defaultValue: 'multi',\n placeholder: 'Select Selection Mode',\n },\n ],\n items: [\n {\n id: 'example-1',\n name: 'Example Item 1',\n description: 'First example item',\n category: 'urgent',\n priority: 1,\n tags: ['important', 'urgent'],\n },\n {\n id: 'example-2',\n name: 'Example Item 2',\n description: 'Second example item',\n category: 'normal',\n priority: 2,\n tags: ['normal'],\n },\n ],\n },\n};\n\nexport const getEnumListNameByType = (type: EnumListTypes): string => {\n return ENUM_LIST_CONFIG[type].name || '';\n};\n\nexport const getEnumListTypesNames = (): EnumListTypes[] => {\n return Object.keys(ENUM_LIST_CONFIG) as EnumListTypes[];\n};\n\nexport const getEnumListTypesConfigFields = (type: EnumListTypes): ConfigField[] => {\n return ENUM_LIST_CONFIG[type].configFields || [];\n};\n\nexport const getEnumListTypesItems = (type: EnumListTypes): BaseEnumListItem[] => {\n return ENUM_LIST_CONFIG[type].items || [];\n};\n\nexport const getEnumListTypesMetadata = (): EnumListTypesMetadata[] => {\n return Object.values(ENUM_LIST_CONFIG).map((entry) => entry.metadata);\n};\n\nexport function getEnumListItems<T extends EnumListTypes>(type: T): EnumListData[T]['items'] {\n return ENUM_LIST_CONFIG[type].items;\n}\n\nexport function getEnumListConfigFields<T extends EnumListTypes>(type: T): EnumListData[T]['configFields'] {\n return ENUM_LIST_CONFIG[type].configFields;\n}\n\nexport function getTypedEnumListItems<T extends EnumListTypes>(type: T): EnumListData[T]['items'] {\n return ENUM_LIST_CONFIG[type].items;\n}\n\n// Example usage:\n// const oracleItems = getTypedEnumListItems('oracle_personalities'); // OraclePersonalitiesItem[]\n// const exampleItems = getTypedEnumListItems('example_list'); // ExampleListItem[]\n\n/*\n * HOW TO ADD A NEW ENUM LIST TYPE:\n *\n * 1. Add the new type to EnumListTypes:\n * export type EnumListTypes = 'oracle_personalities' | 'example_list' | 'your_new_type';\n *\n * 2. Create a new item interface extending BaseEnumListItem:\n * export interface YourNewItem extends BaseEnumListItem {\n * customField: string;\n * anotherField: number;\n * }\n *\n * 3. Add the new type to EnumListData:\n * export type EnumListData = {\n * oracle_personalities: EnumListConfig<OraclePersonalitiesItem>;\n * example_list: EnumListConfig<ExampleListItem>;\n * your_new_type: EnumListConfig<YourNewItem>;\n * };\n *\n * 4. Add the configuration to ENUM_LIST_CONFIG:\n * your_new_type: {\n * name: 'Your New List',\n * metadata: {\n * id: 'your_new_type' as EnumListTypes,\n * name: 'Your New List',\n * description: 'Description of your new list',\n * icon: '🎯',\n * },\n * configFields: [\n * // Your configuration fields\n * ],\n * items: [\n * // Your items\n * ],\n * },\n *\n */\n","import React from 'react';\nimport { Stack, Text, Button, Group } from '@mantine/core';\nimport { EnumListTypes } from './types';\nimport OraclePersonalitiesEnumList from './oracle_personalities';\nimport { getEnumListItems, getEnumListNameByType } from './registry';\n\ninterface ListPreviewStepProps {\n listType: EnumListTypes;\n onAddToBlock: () => void;\n onPrev: () => void;\n}\n\nexport const EnumChecklistPreviewStep: React.FC<ListPreviewStepProps> = ({ listType, onAddToBlock, onPrev }) => {\n const renderListComponent = () => {\n switch (listType) {\n case 'oracle_personalities':\n return <OraclePersonalitiesEnumList items={getEnumListItems<'oracle_personalities'>(listType)} />;\n default:\n return null;\n }\n };\n\n return (\n <Stack gap=\"md\">\n <div>\n <Text size=\"lg\" fw={600} mb=\"xs\">\n Preview {getEnumListNameByType(listType)}\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n Preview how your list will look with the current configuration\n </Text>\n </div>\n\n <div style={{ maxHeight: '400px', overflow: 'auto' }}>{renderListComponent()}</div>\n\n <Group justify=\"space-between\" mt=\"md\">\n <Button variant=\"subtle\" onClick={onPrev}>\n Previous\n </Button>\n <Button onClick={onAddToBlock}>Add to Block</Button>\n </Group>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Text, Button, Group, Switch } from '@mantine/core';\nimport { EnumListTypes } from './types';\nimport { ConfigField } from '../list';\nimport { ENUM_LIST_CONFIG, getEnumListTypesConfigFields } from './registry';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\n\ninterface EnumChecklistConfigurationStepProps {\n enumChecklistType: EnumListTypes;\n config: Record<string, any>;\n onConfigChange: (key: string, value: any) => void;\n onPrev: () => void;\n onNext: () => void;\n isValid: boolean;\n}\n\nexport const EnumChecklistConfigurationStep: React.FC<EnumChecklistConfigurationStepProps> = ({ enumChecklistType: listType, config, onConfigChange, onPrev, onNext, isValid }) => {\n const typeConfig = ENUM_LIST_CONFIG[listType];\n const configFields = getEnumListTypesConfigFields(listType);\n\n const renderListConfigField = (field: ConfigField) => {\n switch (field.type) {\n case 'text':\n return (\n <BaseTextInput\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n value={config[field.key] || ''}\n onChange={(e) => onConfigChange(field.key, e.target.value)}\n required={field.required}\n />\n );\n case 'switch':\n return (\n <Switch\n label={field.label}\n description={field.description}\n checked={config[field.key] !== undefined ? config[field.key] : field.defaultValue || false}\n onChange={(event) => onConfigChange(field.key, event.currentTarget.checked)}\n />\n );\n case 'select':\n return (\n <BaseSelect\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n value={config[field.key] || ''}\n onChange={(value) => onConfigChange(field.key, value)}\n data={field.options || []}\n required={field.required}\n />\n );\n default:\n return (\n <BaseTextInput\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n value={config[field.key] || ''}\n onChange={(e) => onConfigChange(field.key, e.target.value)}\n required={field.required}\n />\n );\n }\n };\n\n return (\n <Stack gap=\"md\">\n <div>\n <Text size=\"lg\" fw={600} mb=\"xs\">\n Configure {typeConfig.metadata.name}\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n {typeConfig.metadata.description}\n </Text>\n </div>\n\n <Stack gap=\"sm\">\n {configFields.map((field: ConfigField) => (\n <div key={field.key}>{renderListConfigField(field)}</div>\n ))}\n </Stack>\n\n <Group justify=\"space-between\" mt=\"md\">\n <Button variant=\"subtle\" onClick={onPrev}>\n Previous\n </Button>\n <Button onClick={onNext} disabled={!isValid}>\n Next\n </Button>\n </Group>\n </Stack>\n );\n};\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { NotifyBlock } from './NotifyBlock';\nimport type { IxoBlockProps } from '../../../core/types';\n\nexport const NotifyBlockSpec = createReactBlockSpec(\n {\n type: 'notify' as const,\n propSchema: {\n title: { default: '' },\n description: { default: '' },\n icon: { default: 'bell' },\n // Notification channel configuration\n channel: { default: 'email' },\n // Email-specific fields\n to: { default: '[]' }, // JSON array of recipients\n cc: { default: '[]' }, // JSON array of CC recipients\n bcc: { default: '[]' }, // JSON array of BCC recipients\n subject: { default: '' },\n body: { default: '' },\n bodyType: { default: 'text' }, // 'text' or 'html'\n from: { default: '' },\n replyTo: { default: '' },\n // SMS/WhatsApp fields\n templateId: { default: '' },\n templateVariables: { default: '{}' }, // JSON object\n // Execution status\n status: { default: 'idle' }, // 'idle', 'sending', 'sent', 'failed'\n messageId: { default: '' },\n sentAt: { default: '' },\n errorMessage: { default: '' },\n // Conditions\n conditions: { default: '' },\n },\n content: 'inline' as const,\n },\n {\n render: (props) => {\n const ixoProps = props as unknown as IxoBlockProps;\n return <NotifyBlock {...ixoProps} />;\n },\n }\n);\n","import React from 'react';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { NotifyTemplateView } from './template/TemplateView';\nimport { NotifyFlowView } from './flow/FlowView';\nimport { useBlockConditions } from '../hooks/useBlockConditions';\nimport { parseConditionConfig, hasVisibilityConditions, hasEnableConditions } from '../utils/conditionUtils';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\n\nexport type NotifyBlockProps = IxoBlockProps;\n\nexport function NotifyBlock({ editor, block }: NotifyBlockProps) {\n const { editable } = useBlocknoteContext();\n const { actions } = useBlockConditions(block, editor);\n\n // Template mode - show configuration interface\n if (editable) {\n return <NotifyTemplateView editor={editor} block={block} />;\n }\n\n // Flow mode - check visibility conditions\n const conditionConfig = parseConditionConfig(block.props.conditions);\n const hasVisibility = hasVisibilityConditions(conditionConfig);\n const showActionExists = actions.some((a) => a.action === 'show');\n const shouldHide = hasVisibility && !showActionExists;\n\n if (shouldHide) {\n return null;\n }\n\n // Check enable conditions\n const hasEnable = hasEnableConditions(conditionConfig);\n const enableActionExists = actions.some((a) => a.action === 'enable');\n const shouldDisable = hasEnable && !enableActionExists;\n\n return <NotifyFlowView block={block} editor={editor} isDisabled={shouldDisable ? { isDisabled: 'disable', message: 'Notification disabled by conditions' } : undefined} />;\n}\n\nexport default NotifyBlock;\n","import React, { useMemo } from 'react';\nimport { TemplateConfig } from './TemplateConfig';\nimport { Group, Stack, Text, Badge } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\nconst NOTIFY_TEMPLATE_PANEL_ID = 'notify-template-panel';\n\nexport const NotifyTemplateView = ({ editor, block }: IxoBlockProps) => {\n const panelId = `${NOTIFY_TEMPLATE_PANEL_ID}-${block.id}`;\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n const { open } = usePanel(panelId, panelContent);\n\n const channel = block.props.channel || 'email';\n const to = (() => {\n try {\n const parsed = typeof block.props.to === 'string' ? JSON.parse(block.props.to) : block.props.to;\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n })();\n\n // Channel color mapping\n const getChannelColor = (channel: string) => {\n switch (channel) {\n case 'email':\n return 'blue';\n case 'sms':\n return 'green';\n case 'whatsapp':\n return 'teal';\n case 'rcs':\n return 'violet';\n default:\n return 'gray';\n }\n };\n\n return (\n <BaseContainer onClick={open}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n {getIcon('bell', block.props.icon as any)}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Group gap=\"xs\" wrap=\"nowrap\">\n <Badge size=\"sm\" variant=\"filled\" color={getChannelColor(channel)}>\n {channel.toUpperCase()}\n </Badge>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {block.props.title || 'Notification'}\n </Text>\n </Group>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false} lineClamp={1}>\n {to.length > 0 ? `To: ${to.join(', ')}` : 'Click to configure recipients'}\n </Text>\n {block.props.description && (\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.description}\n </Text>\n )}\n </Stack>\n </Group>\n </Group>\n </BaseContainer>\n );\n};\n","import React, { useCallback } from 'react';\nimport { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { GeneralTab } from './GeneralTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\nexport const TemplateConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n\n const updateProp = useCallback(\n (key: string, value: any) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n [key]: value,\n },\n });\n },\n [editor, block]\n );\n\n const handleToChange = useCallback(\n (to: string[]) => {\n updateProp('to', JSON.stringify(to));\n },\n [updateProp]\n );\n\n const handleCcChange = useCallback(\n (cc: string[]) => {\n updateProp('cc', JSON.stringify(cc));\n },\n [updateProp]\n );\n\n const handleBccChange = useCallback(\n (bcc: string[]) => {\n updateProp('bcc', JSON.stringify(bcc));\n },\n [updateProp]\n );\n\n return (\n <BaseRightPanelLayout title=\"Notification Settings\" onClose={closePanel}>\n <ReusablePanel\n extraTabs={[\n {\n label: 'General',\n value: 'general',\n content: (\n <GeneralTab\n title={block.props.title || ''}\n description={block.props.description || ''}\n channel={block.props.channel || 'email'}\n to={(() => {\n try {\n return typeof block.props.to === 'string' ? JSON.parse(block.props.to) : block.props.to || [];\n } catch {\n return [];\n }\n })()}\n cc={(() => {\n try {\n return typeof block.props.cc === 'string' ? JSON.parse(block.props.cc) : block.props.cc || [];\n } catch {\n return [];\n }\n })()}\n bcc={(() => {\n try {\n return typeof block.props.bcc === 'string' ? JSON.parse(block.props.bcc) : block.props.bcc || [];\n } catch {\n return [];\n }\n })()}\n subject={block.props.subject || ''}\n body={block.props.body || ''}\n bodyType={block.props.bodyType || 'text'}\n from={block.props.from || ''}\n replyTo={block.props.replyTo || ''}\n onTitleChange={(value) => updateProp('title', value)}\n onDescriptionChange={(value) => updateProp('description', value)}\n onChannelChange={(value) => updateProp('channel', value)}\n onToChange={handleToChange}\n onCcChange={handleCcChange}\n onBccChange={handleBccChange}\n onSubjectChange={(value) => updateProp('subject', value)}\n onBodyChange={(value) => updateProp('body', value)}\n onBodyTypeChange={(value) => updateProp('bodyType', value)}\n onFromChange={(value) => updateProp('from', value)}\n onReplyToChange={(value) => updateProp('replyTo', value)}\n editor={editor}\n blockId={block.id}\n />\n ),\n },\n ]}\n context={{ editor, block }}\n />\n </BaseRightPanelLayout>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Divider, Stack, Text, Group, ActionIcon, Paper } from '@mantine/core';\nimport { IconTrash } from '@tabler/icons-react';\nimport { DataInput } from '@/mantine/components/DataInput';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\nimport BaseButton from '@/mantine/components/Base/BaseButton';\nimport { getIcon } from '@/mantine/utils/iconMap';\n\ninterface GeneralTabProps {\n title: string;\n description: string;\n channel: string;\n to: string[];\n cc: string[];\n bcc: string[];\n subject: string;\n body: string;\n bodyType: string;\n from: string;\n replyTo: string;\n onTitleChange: (value: string) => void;\n onDescriptionChange: (value: string) => void;\n onChannelChange: (value: string) => void;\n onToChange: (to: string[]) => void;\n onCcChange: (cc: string[]) => void;\n onBccChange: (bcc: string[]) => void;\n onSubjectChange: (value: string) => void;\n onBodyChange: (value: string) => void;\n onBodyTypeChange: (value: string) => void;\n onFromChange: (value: string) => void;\n onReplyToChange: (value: string) => void;\n editor: any;\n blockId: string;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({\n title,\n description,\n channel,\n to,\n cc,\n bcc,\n subject,\n body,\n bodyType,\n from,\n replyTo,\n onTitleChange,\n onDescriptionChange,\n onChannelChange,\n onToChange,\n onCcChange,\n onBccChange,\n onSubjectChange,\n onBodyChange,\n onBodyTypeChange,\n onFromChange,\n onReplyToChange,\n editor,\n blockId,\n}) => {\n // Use local state for real-time updates\n const [localTitle, setLocalTitle] = useState(title || '');\n const [localDescription, setLocalDescription] = useState(description || '');\n const [localChannel, setLocalChannel] = useState(channel || 'email');\n const [localTo, setLocalTo] = useState<string[]>(to || []);\n const [localCc, setLocalCc] = useState<string[]>(cc || []);\n const [localBcc, setLocalBcc] = useState<string[]>(bcc || []);\n const [localSubject, setLocalSubject] = useState(subject || '');\n const [localBody, setLocalBody] = useState(body || '');\n const [localBodyType, setLocalBodyType] = useState(bodyType || 'text');\n const [localFrom, setLocalFrom] = useState(from || '');\n const [localReplyTo, setLocalReplyTo] = useState(replyTo || '');\n\n // Sync local state with props\n useEffect(() => setLocalTitle(title || ''), [title]);\n useEffect(() => setLocalDescription(description || ''), [description]);\n useEffect(() => setLocalChannel(channel || 'email'), [channel]);\n useEffect(() => setLocalTo(to || []), [to]);\n useEffect(() => setLocalCc(cc || []), [cc]);\n useEffect(() => setLocalBcc(bcc || []), [bcc]);\n useEffect(() => setLocalSubject(subject || ''), [subject]);\n useEffect(() => setLocalBody(body || ''), [body]);\n useEffect(() => setLocalBodyType(bodyType || 'text'), [bodyType]);\n useEffect(() => setLocalFrom(from || ''), [from]);\n useEffect(() => setLocalReplyTo(replyTo || ''), [replyTo]);\n\n // Array field handlers\n const handleAddRecipient = (type: 'to' | 'cc' | 'bcc') => {\n const setter = type === 'to' ? setLocalTo : type === 'cc' ? setLocalCc : setLocalBcc;\n const callback = type === 'to' ? onToChange : type === 'cc' ? onCcChange : onBccChange;\n const current = type === 'to' ? localTo : type === 'cc' ? localCc : localBcc;\n\n const newRecipients = [...current, ''];\n setter(newRecipients);\n callback(newRecipients);\n };\n\n const handleRemoveRecipient = (type: 'to' | 'cc' | 'bcc', index: number) => {\n const setter = type === 'to' ? setLocalTo : type === 'cc' ? setLocalCc : setLocalBcc;\n const callback = type === 'to' ? onToChange : type === 'cc' ? onCcChange : onBccChange;\n const current = type === 'to' ? localTo : type === 'cc' ? localCc : localBcc;\n\n const newRecipients = current.filter((_, i) => i !== index);\n setter(newRecipients);\n callback(newRecipients);\n };\n\n const handleRecipientChange = (type: 'to' | 'cc' | 'bcc', index: number, value: string) => {\n const setter = type === 'to' ? setLocalTo : type === 'cc' ? setLocalCc : setLocalBcc;\n const callback = type === 'to' ? onToChange : type === 'cc' ? onCcChange : onBccChange;\n const current = type === 'to' ? localTo : type === 'cc' ? localCc : localBcc;\n\n const newRecipients = [...current];\n newRecipients[index] = value;\n setter(newRecipients);\n callback(newRecipients);\n };\n\n return (\n <Stack gap=\"lg\">\n {/* Basic Info Section */}\n <Stack gap=\"xs\">\n <BaseTextInput\n label=\"Title\"\n placeholder=\"e.g. Welcome Email\"\n value={localTitle}\n onChange={(event) => {\n const newTitle = event.currentTarget.value;\n setLocalTitle(newTitle);\n onTitleChange(newTitle);\n }}\n />\n </Stack>\n\n <Stack gap=\"xs\">\n <BaseTextArea\n label=\"Description\"\n placeholder=\"Describe what this notification does\"\n minRows={2}\n value={localDescription}\n onChange={(event) => {\n const newDescription = event.currentTarget.value;\n setLocalDescription(newDescription);\n onDescriptionChange(newDescription);\n }}\n />\n </Stack>\n\n <Divider variant=\"dashed\" />\n\n {/* Channel Selection */}\n <Stack gap=\"xs\">\n <BaseSelect\n label=\"Channel\"\n value={localChannel}\n onChange={(value) => {\n const newChannel = value || 'email';\n setLocalChannel(newChannel);\n onChannelChange(newChannel);\n }}\n data={[\n { value: 'email', label: 'Email' },\n { value: 'sms', label: 'SMS (Coming Soon)', disabled: true },\n { value: 'whatsapp', label: 'WhatsApp (Coming Soon)', disabled: true },\n { value: 'rcs', label: 'RCS (Coming Soon)', disabled: true },\n ]}\n />\n </Stack>\n\n <Divider variant=\"dashed\" />\n\n {/* Email Configuration */}\n {localChannel === 'email' && (\n <>\n {/* Recipients */}\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Text size=\"sm\" fw={600}>\n To (Recipients)\n </Text>\n <BaseButton leftSection={getIcon('plus', 'plus', 'black')} onClick={() => handleAddRecipient('to')}>\n Add\n </BaseButton>\n </Group>\n {localTo.length === 0 && (\n <Text size=\"xs\" c=\"dimmed\">\n No recipients added yet\n </Text>\n )}\n <Stack gap=\"xs\">\n {localTo.map((recipient, index) => (\n <Paper key={index} p=\"xs\" withBorder>\n <Group gap=\"xs\" wrap=\"nowrap\" align=\"flex-start\">\n <DataInput\n placeholder=\"email@example.com or reference\"\n value={recipient}\n onChange={(value) => handleRecipientChange('to', index, value)}\n editorDocument={editor?.document || []}\n currentBlockId={blockId}\n size=\"sm\"\n />\n <ActionIcon color=\"red\" variant=\"light\" onClick={() => handleRemoveRecipient('to', index)}>\n <IconTrash size={16} />\n </ActionIcon>\n </Group>\n </Paper>\n ))}\n </Stack>\n </Stack>\n\n {/* CC Recipients */}\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Text size=\"sm\" fw={600}>\n CC (Optional)\n </Text>\n <BaseButton leftSection={getIcon('plus', 'plus', 'black')} onClick={() => handleAddRecipient('cc')}>\n Add\n </BaseButton>\n </Group>\n {localCc.length > 0 && (\n <Stack gap=\"xs\">\n {localCc.map((recipient, index) => (\n <Paper key={index} p=\"xs\" withBorder>\n <Group gap=\"xs\" wrap=\"nowrap\" align=\"flex-start\">\n <DataInput\n placeholder=\"email@example.com or reference\"\n value={recipient}\n onChange={(value) => handleRecipientChange('cc', index, value)}\n editorDocument={editor?.document || []}\n currentBlockId={blockId}\n size=\"sm\"\n />\n <ActionIcon color=\"red\" variant=\"light\" onClick={() => handleRemoveRecipient('cc', index)}>\n <IconTrash size={16} />\n </ActionIcon>\n </Group>\n </Paper>\n ))}\n </Stack>\n )}\n </Stack>\n\n {/* BCC Recipients */}\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Text size=\"sm\" fw={600}>\n BCC (Optional)\n </Text>\n <BaseButton leftSection={getIcon('plus', 'plus', 'black')} onClick={() => handleAddRecipient('bcc')}>\n Add\n </BaseButton>\n </Group>\n {localBcc.length > 0 && (\n <Stack gap=\"xs\">\n {localBcc.map((recipient, index) => (\n <Paper key={index} p=\"xs\" withBorder>\n <Group gap=\"xs\" wrap=\"nowrap\" align=\"flex-start\">\n <DataInput\n placeholder=\"email@example.com or reference\"\n value={recipient}\n onChange={(value) => handleRecipientChange('bcc', index, value)}\n editorDocument={editor?.document || []}\n currentBlockId={blockId}\n size=\"sm\"\n />\n <ActionIcon color=\"red\" variant=\"light\" onClick={() => handleRemoveRecipient('bcc', index)}>\n <IconTrash size={16} />\n </ActionIcon>\n </Group>\n </Paper>\n ))}\n </Stack>\n )}\n </Stack>\n\n <Divider variant=\"dashed\" />\n\n {/* From & Reply-To */}\n <Stack gap=\"xs\">\n <BaseTextInput\n label=\"From (Optional)\"\n placeholder=\"sender@example.com\"\n value={localFrom}\n onChange={(event) => {\n const newFrom = event.currentTarget.value;\n setLocalFrom(newFrom);\n onFromChange(newFrom);\n }}\n />\n <Text size=\"xs\" c=\"dimmed\">\n Custom sender email address\n </Text>\n </Stack>\n\n <Stack gap=\"xs\">\n <BaseTextInput\n label=\"Reply-To (Optional)\"\n placeholder=\"reply@example.com\"\n value={localReplyTo}\n onChange={(event) => {\n const newReplyTo = event.currentTarget.value;\n setLocalReplyTo(newReplyTo);\n onReplyToChange(newReplyTo);\n }}\n />\n <Text size=\"xs\" c=\"dimmed\">\n Where replies should be sent\n </Text>\n </Stack>\n\n <Divider variant=\"dashed\" />\n\n {/* Subject & Body */}\n <BaseTextInput\n label=\"Subject\"\n placeholder=\"Email subject line\"\n value={localSubject}\n onChange={(event) => {\n const newSubject = event.currentTarget.value;\n setLocalSubject(newSubject);\n onSubjectChange(newSubject);\n }}\n />\n\n <BaseSelect\n label=\"Body Type\"\n value={localBodyType}\n onChange={(value) => {\n const newBodyType = value || 'text';\n setLocalBodyType(newBodyType);\n onBodyTypeChange(newBodyType);\n }}\n data={[\n { value: 'text', label: 'Plain Text' },\n { value: 'html', label: 'HTML' },\n ]}\n />\n\n <Stack gap=\"xs\">\n <BaseTextArea\n label=\"Body\"\n placeholder={localBodyType === 'html' ? '<h1>Hello!</h1><p>Welcome to our service.</p>' : 'Email body content'}\n minRows={6}\n value={localBody}\n onChange={(event) => {\n const newBody = event.currentTarget.value;\n setLocalBody(newBody);\n onBodyChange(newBody);\n }}\n />\n <Text size=\"xs\" c=\"dimmed\">\n {localBodyType === 'html' ? 'HTML content for the email body' : 'Plain text content for the email body'}\n </Text>\n </Stack>\n </>\n )}\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Group, Stack, Text, ActionIcon, Tooltip, Button, Badge, Collapse, Alert, Loader, Code } from '@mantine/core';\nimport { IconSend, IconChevronDown, IconChevronUp, IconCheck, IconX } from '@tabler/icons-react';\nimport { IxoBlockProps } from '@/core/types';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport type { EmailNotificationParams } from '@/mantine/context/BlocknoteContext';\nimport { resolveReferences } from '@/mantine/utils/referenceResolver';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\ninterface FlowViewProps extends IxoBlockProps {\n isDisabled?: {\n isDisabled: 'disable';\n message?: string;\n };\n}\n\nexport const NotifyFlowView = ({ editor, block, isDisabled }: FlowViewProps) => {\n const disabled = isDisabled?.isDisabled === 'disable';\n const [isLoading, setIsLoading] = useState(false);\n const [showDetails, setShowDetails] = useState(false);\n\n // Safe handler access\n let handlers: ReturnType<typeof useBlocknoteHandlers> | null = null;\n try {\n handlers = useBlocknoteHandlers();\n } catch {\n handlers = null;\n }\n\n const channel = block.props.channel || 'email';\n const status = block.props.status || 'idle';\n\n // Parse recipients\n const to: string[] = (() => {\n try {\n return typeof block.props.to === 'string' ? JSON.parse(block.props.to) : block.props.to || [];\n } catch {\n return [];\n }\n })();\n\n const cc: string[] = (() => {\n try {\n return typeof block.props.cc === 'string' ? JSON.parse(block.props.cc) : block.props.cc || [];\n } catch {\n return [];\n }\n })();\n\n const bcc: string[] = (() => {\n try {\n return typeof block.props.bcc === 'string' ? JSON.parse(block.props.bcc) : block.props.bcc || [];\n } catch {\n return [];\n }\n })();\n\n // Channel color mapping\n const getChannelColor = (channel: string) => {\n switch (channel) {\n case 'email':\n return 'blue';\n case 'sms':\n return 'green';\n case 'whatsapp':\n return 'teal';\n case 'rcs':\n return 'violet';\n default:\n return 'gray';\n }\n };\n\n // Status color mapping\n const getStatusColor = (status: string) => {\n switch (status) {\n case 'sent':\n return 'green';\n case 'failed':\n return 'red';\n case 'sending':\n return 'blue';\n default:\n return 'gray';\n }\n };\n\n const handleSendNotification = async () => {\n if (disabled || !handlers || to.length === 0) return;\n\n setIsLoading(true);\n editor.updateBlock(block, {\n props: { ...block.props, status: 'sending', errorMessage: '' },\n });\n\n try {\n // Get the editor document for resolving references\n const editorDocument = editor?.document || [];\n\n // Build notification params based on channel\n if (channel === 'email') {\n // Resolve references in all email fields\n const resolvedTo = to.filter((email) => email.trim() !== '').map((email) => resolveReferences(email, editorDocument));\n\n const resolvedCc = cc.filter((email) => email.trim() !== '').map((email) => resolveReferences(email, editorDocument));\n\n const resolvedBcc = bcc.filter((email) => email.trim() !== '').map((email) => resolveReferences(email, editorDocument));\n\n const resolvedSubject = resolveReferences(block.props.subject || '', editorDocument);\n const resolvedBody = resolveReferences(block.props.body || '', editorDocument);\n const resolvedFrom = block.props.from ? resolveReferences(block.props.from, editorDocument) : undefined;\n const resolvedReplyTo = block.props.replyTo ? resolveReferences(block.props.replyTo, editorDocument) : undefined;\n\n const params: EmailNotificationParams = {\n channel: 'email',\n to: resolvedTo,\n cc: resolvedCc,\n bcc: resolvedBcc,\n subject: resolvedSubject,\n body: resolvedBody,\n bodyType: (block.props.bodyType || 'text') as 'text' | 'html',\n from: resolvedFrom,\n replyTo: resolvedReplyTo,\n };\n\n // Remove empty optional arrays\n if (params.cc?.length === 0) delete params.cc;\n if (params.bcc?.length === 0) delete params.bcc;\n\n const response = await handlers.sendNotification(params);\n\n // Update block with success\n editor.updateBlock(block, {\n props: {\n ...block.props,\n status: 'sent',\n messageId: response.messageId,\n sentAt: response.timestamp,\n errorMessage: '',\n },\n });\n }\n } catch (error) {\n // Update block with error\n editor.updateBlock(block, {\n props: {\n ...block.props,\n status: 'failed',\n errorMessage: error instanceof Error ? error.message : 'Failed to send notification',\n },\n });\n } finally {\n setIsLoading(false);\n }\n };\n\n const canSend = !disabled && !isLoading && handlers && to.length > 0 && (channel === 'email' ? block.props.subject && block.props.body : true);\n\n const sendButton = (\n <Button\n size=\"sm\"\n variant=\"light\"\n color={getChannelColor(channel)}\n leftSection={isLoading ? <Loader size={14} /> : status === 'sent' ? <IconCheck size={14} /> : <IconSend size={14} />}\n onClick={handleSendNotification}\n disabled={!canSend}\n style={{ flexShrink: 0 }}\n >\n {isLoading ? 'Sending...' : status === 'sent' ? 'Sent' : 'Send'}\n </Button>\n );\n\n return (\n <BaseContainer>\n <Stack gap=\"md\">\n {/* Header Section */}\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"flex-start\">\n <Group wrap=\"nowrap\" align=\"flex-start\" style={{ flex: 1 }}>\n {getIcon('bell', block.props.icon as any)}\n\n <Stack gap=\"xs\" style={{ flex: 1, minWidth: 0 }}>\n <Group gap=\"xs\" wrap=\"nowrap\">\n <Badge size=\"sm\" variant=\"filled\" color={getChannelColor(channel)}>\n {channel.toUpperCase()}\n </Badge>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {block.props.title || 'Notification'}\n </Text>\n {status !== 'idle' && (\n <Badge size=\"xs\" variant=\"dot\" color={getStatusColor(status)}>\n {status}\n </Badge>\n )}\n </Group>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false} lineClamp={1}>\n {to.length > 0 ? `To: ${to.slice(0, 2).join(', ')}${to.length > 2 ? ` +${to.length - 2} more` : ''}` : 'No recipients'}\n </Text>\n {block.props.description && (\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.description}\n </Text>\n )}\n </Stack>\n </Group>\n\n <Group gap=\"xs\" style={{ flexShrink: 0 }}>\n {disabled && isDisabled?.message ? (\n <Tooltip label={isDisabled.message} position=\"left\" withArrow>\n {sendButton}\n </Tooltip>\n ) : (\n sendButton\n )}\n <ActionIcon variant=\"subtle\" onClick={() => setShowDetails(!showDetails)}>\n {showDetails ? <IconChevronUp size={16} /> : <IconChevronDown size={16} />}\n </ActionIcon>\n </Group>\n </Group>\n\n {/* Error Message */}\n {status === 'failed' && block.props.errorMessage && (\n <Alert color=\"red\" icon={<IconX size={16} />} title=\"Failed to send\" styles={{ message: { fontSize: '12px' } }}>\n {block.props.errorMessage}\n </Alert>\n )}\n\n {/* Success Message */}\n {status === 'sent' && block.props.messageId && (\n <Alert color=\"green\" icon={<IconCheck size={16} />} title=\"Sent successfully\" styles={{ message: { fontSize: '12px' } }}>\n Message ID: {block.props.messageId}\n {block.props.sentAt && (\n <>\n <br />\n Sent at: {new Date(block.props.sentAt).toLocaleString()}\n </>\n )}\n </Alert>\n )}\n\n {/* Details Section */}\n <Collapse in={showDetails}>\n <Stack gap=\"md\">\n {/* Email Details */}\n {channel === 'email' && (\n <>\n {/* Recipients */}\n <Stack gap=\"xs\">\n <Text size=\"xs\" fw={600} c=\"dimmed\">\n Recipients:\n </Text>\n <Code block style={{ fontSize: '11px' }}>\n {JSON.stringify(\n {\n to: to.filter((e) => e.trim() !== ''),\n ...(cc.length > 0 && { cc: cc.filter((e) => e.trim() !== '') }),\n ...(bcc.length > 0 && { bcc: bcc.filter((e) => e.trim() !== '') }),\n },\n null,\n 2\n )}\n </Code>\n </Stack>\n\n {/* Subject & Body */}\n {block.props.subject && (\n <Stack gap=\"xs\">\n <Text size=\"xs\" fw={600} c=\"dimmed\">\n Subject:\n </Text>\n <Text size=\"xs\">{block.props.subject}</Text>\n </Stack>\n )}\n\n {block.props.body && (\n <Stack gap=\"xs\">\n <Text size=\"xs\" fw={600} c=\"dimmed\">\n Body ({block.props.bodyType || 'text'}):\n </Text>\n <Code block style={{ fontSize: '11px', maxHeight: '200px', overflow: 'auto' }}>\n {block.props.body}\n </Code>\n </Stack>\n )}\n\n {/* Optional fields */}\n {(block.props.from || block.props.replyTo) && (\n <Stack gap=\"xs\">\n <Text size=\"xs\" fw={600} c=\"dimmed\">\n Additional:\n </Text>\n <Code block style={{ fontSize: '11px' }}>\n {JSON.stringify(\n {\n ...(block.props.from && { from: block.props.from }),\n ...(block.props.replyTo && { replyTo: block.props.replyTo }),\n },\n null,\n 2\n )}\n </Code>\n </Stack>\n )}\n </>\n )}\n </Stack>\n </Collapse>\n </Stack>\n </BaseContainer>\n );\n};\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { ClaimBlock } from './ClaimBlock';\nimport { IxoBlockProps } from '@/core/types/editor';\n\nexport const ClaimBlockSpec = createReactBlockSpec(\n {\n type: 'claim' as const,\n propSchema: {\n title: { default: '' },\n description: { default: '' },\n icon: { default: 'square-check' },\n deedDid: { default: '' },\n selectedCollections: { default: '[]' },\n adminAddress: { default: '' },\n claimCollectionId: { default: '' },\n parentCapability: { default: '' },\n authorisedActors: { default: '' },\n linkedClaimCollectionId: { default: '' },\n activationUpstreamNodeId: { default: '' },\n activationRequiredStatus: { default: '' },\n activationRequireAuthorisedActor: { default: false },\n },\n content: 'none',\n },\n {\n render: (props) => {\n const ixoProps = props as unknown as IxoBlockProps;\n return <ClaimBlock {...ixoProps} />;\n },\n }\n);\n","import React from 'react';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { ClaimTemplateView } from './template/TemplateView';\nimport { ClaimFlowView } from './flow/FlowView';\n\nexport type ClaimBlockProps = IxoBlockProps;\n\nexport function ClaimBlock({ editor, block }: ClaimBlockProps) {\n console.log('[ClaimBlock] RENDER START', { blockId: block.id, docType: '...' });\n const { docType } = useBlocknoteContext();\n console.log('[ClaimBlock] docType:', docType);\n\n if (docType === 'template') {\n console.log('[ClaimBlock] Rendering TEMPLATE view');\n return <ClaimTemplateView editor={editor} block={block} />;\n }\n\n console.log('[ClaimBlock] Rendering FLOW view');\n return <ClaimFlowView editor={editor} block={block} />;\n}\n","import React, { useMemo } from 'react';\nimport { Group, Stack, Text } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport { TemplateConfig } from './TemplateConfig';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\nconst CLAIM_TEMPLATE_PANEL_ID = 'claim-template-panel';\n\nexport const ClaimTemplateView = ({ editor, block }: IxoBlockProps) => {\n const panelId = `${CLAIM_TEMPLATE_PANEL_ID}-${block.id}`;\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n const { open } = usePanel(panelId, panelContent);\n\n return (\n <BaseContainer onClick={open}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n {getIcon('square-check', block.props.icon)}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {block.props.title || 'Claim Title'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.description || 'Claim description'}\n </Text>\n </Stack>\n </Group>\n </Group>\n </BaseContainer>\n );\n};\n","import React, { useCallback } from 'react';\nimport { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { GeneralTab } from './GeneralTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { AuthorizationTab } from '@/mantine/components/AuthorizationTab';\nimport { EvaluationTab } from '@/mantine/components/EvaluationTab';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\nexport const TemplateConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n\n const updateProp = useCallback(\n (key: string, value: any) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n [key]: value,\n },\n });\n },\n [editor, block]\n );\n\n return (\n <BaseRightPanelLayout title=\"Claim Settings\" onClose={closePanel}>\n <ReusablePanel\n extraTabs={[\n {\n label: 'General',\n value: 'general',\n content: (\n <GeneralTab\n title={block.props.title || ''}\n description={block.props.description || ''}\n deedDid={block.props.deedDid || ''}\n selectedCollections={block.props.selectedCollections || '[]'}\n adminAddress={block.props.adminAddress || ''}\n onTitleChange={(value) => updateProp('title', value)}\n onDescriptionChange={(value) => updateProp('description', value)}\n onDeedDidChange={(value) => updateProp('deedDid', value)}\n onSelectedCollectionsChange={(value) => updateProp('selectedCollections', value)}\n onAdminAddressChange={(value) => updateProp('adminAddress', value)}\n />\n ),\n },\n {\n label: 'Authorization',\n value: 'authorization',\n content: <AuthorizationTab editor={editor} block={block} />,\n },\n {\n label: 'Evaluation',\n value: 'evaluation',\n content: <EvaluationTab editor={editor} block={block} />,\n },\n ]}\n context={{ editor, block }}\n />\n </BaseRightPanelLayout>\n );\n};\n","import React, { useEffect, useState, useCallback, useMemo } from 'react';\nimport { CollectionSelector } from '@/mantine/components/CollectionSelector';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSection from '@/mantine/components/Base/BaseSection';\n\ninterface GeneralTabProps {\n title: string;\n description: string;\n deedDid: string;\n selectedCollections: string;\n adminAddress?: string;\n onTitleChange: (value: string) => void;\n onDescriptionChange: (value: string) => void;\n onDeedDidChange: (value: string) => void;\n onSelectedCollectionsChange: (value: string) => void;\n onAdminAddressChange?: (value: string) => void;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({\n title,\n description,\n deedDid,\n selectedCollections,\n adminAddress,\n onTitleChange,\n onDescriptionChange,\n onDeedDidChange,\n onSelectedCollectionsChange,\n onAdminAddressChange,\n}) => {\n // Use local state for real-time updates, but sync with block props\n const [localTitle, setLocalTitle] = useState(title || '');\n const [localDescription, setLocalDescription] = useState(description || '');\n\n // Sync local state with props when they change\n useEffect(() => {\n setLocalTitle(title || '');\n }, [title]);\n\n useEffect(() => {\n setLocalDescription(description || '');\n }, [description]);\n\n const parsedSelectedCollections = useMemo(() => {\n try {\n return JSON.parse(selectedCollections || '[]') as string[];\n } catch {\n return [];\n }\n }, [selectedCollections]);\n\n const handleCollectionsChange = useCallback(\n (collections: string[]) => {\n const stringified = JSON.stringify(collections || []);\n onSelectedCollectionsChange(stringified);\n },\n [onSelectedCollectionsChange]\n );\n\n const handleAdminAddressChange = useCallback(\n (adminAddress: string) => {\n if (onAdminAddressChange) {\n onAdminAddressChange(adminAddress);\n }\n },\n [onAdminAddressChange]\n );\n\n return (\n <BaseSection>\n <BaseTextInput\n label=\"Title\"\n placeholder=\"e.g. Claim Title\"\n value={localTitle}\n onChange={(event) => {\n const newTitle = event.currentTarget.value;\n setLocalTitle(newTitle);\n onTitleChange(newTitle);\n }}\n />\n\n <BaseTextArea\n label=\"Description\"\n placeholder=\"Describe what this claim is about\"\n minRows={3}\n value={localDescription}\n onChange={(event) => {\n const newDescription = event.currentTarget.value;\n setLocalDescription(newDescription);\n onDescriptionChange(newDescription);\n }}\n />\n\n <CollectionSelector\n did={deedDid}\n selectedCollections={parsedSelectedCollections}\n onDidChange={onDeedDidChange}\n onCollectionsChange={handleCollectionsChange}\n onAdminAddressChange={handleAdminAddressChange}\n currentAdminAddress={adminAddress}\n />\n </BaseSection>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Stack, Text, Checkbox, Loader, Alert } from '@mantine/core';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport type { ClaimCollection } from '@/mantine/context/BlocknoteContext';\nimport BaseTextInput from './Base/BaseTextInput';\nimport BaseButton from './Base/BaseButton';\n\ninterface CollectionSelectorProps {\n did: string;\n selectedCollections: string[];\n onDidChange: (value: string) => void;\n onCollectionsChange: (collections: string[]) => void;\n onAdminAddressChange?: (adminAddress: string) => void;\n currentAdminAddress?: string;\n}\n\nexport const CollectionSelector: React.FC<CollectionSelectorProps> = ({\n did,\n selectedCollections,\n onDidChange,\n onCollectionsChange,\n onAdminAddressChange,\n currentAdminAddress,\n}) => {\n const handlers = useBlocknoteHandlers();\n const [localDid, setLocalDid] = useState(did || '');\n const [collections, setCollections] = useState<ClaimCollection[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Sync local state with props when they change\n useEffect(() => {\n setLocalDid(did || '');\n }, [did]);\n\n const handleDidChange = (value: string) => {\n setLocalDid(value);\n onDidChange(value);\n };\n\n const handleGetCollections = async () => {\n if (!localDid.trim()) {\n setError('Please enter a DID first');\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const response = await handlers.getClaimCollections({ deedDid: localDid });\n const { adminAddress, collections: fetchedCollections } = response || { adminAddress: '', collections: [] };\n\n setCollections(fetchedCollections || []);\n\n // Only update adminAddress if it's not already set and we have a valid adminAddress\n if (onAdminAddressChange && adminAddress && (!currentAdminAddress || currentAdminAddress === '')) {\n onAdminAddressChange(adminAddress);\n }\n\n if (!fetchedCollections || fetchedCollections.length === 0) {\n setError('No claim collections found for this DID');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch claim collections');\n setCollections([]);\n } finally {\n setLoading(false);\n }\n };\n\n const handleToggleCollection = (collectionId: string) => {\n if (!collectionId) return;\n\n const currentSelections = selectedCollections || [];\n const newSelected = currentSelections.includes(collectionId) ? currentSelections.filter((id) => id !== collectionId) : [...currentSelections, collectionId];\n\n onCollectionsChange(newSelected);\n };\n\n const getCollectionName = (collection: ClaimCollection | undefined) => {\n if (!collection) return 'Unnamed Collection';\n // Try to get name from protocol.profile first, then fallback to collection name\n return collection.protocol?.profile?.name || collection.name || 'Unnamed Collection';\n };\n\n return (\n <Stack gap=\"lg\">\n <Stack gap=\"xs\">\n <BaseTextInput\n label=\"DID\"\n w=\"100%\"\n placeholder=\"Enter DID\"\n value={localDid}\n onChange={(event) => handleDidChange(event.currentTarget.value)}\n description=\"The DID identifier for fetching claim collections\"\n style={{ flex: 1 }}\n />\n <BaseButton onClick={handleGetCollections} disabled={!localDid.trim() || loading}>\n {loading ? <Loader size=\"xs\" color=\"white\" /> : 'Get Collections'}\n </BaseButton>\n\n {error && (\n <Alert color=\"red\" title=\"Error\">\n {error}\n </Alert>\n )}\n </Stack>\n\n {collections && collections.length > 0 && (\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Claim Collections\n </Text>\n <Stack gap=\"sm\">\n {collections.map((collection) => {\n if (!collection || !collection.id) return null;\n return (\n <Checkbox\n key={collection.id}\n label={\n <Stack gap={2}>\n <Text size=\"sm\" fw={500}>\n {getCollectionName(collection)}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" style={{ fontFamily: 'monospace' }}>\n ID: {collection.id}\n </Text>\n {collection.description && (\n <Text size=\"xs\" c=\"dimmed\">\n {collection.description}\n </Text>\n )}\n </Stack>\n }\n checked={selectedCollections?.includes(collection.id) ?? false}\n onChange={() => handleToggleCollection(collection.id)}\n />\n );\n })}\n </Stack>\n </Stack>\n )}\n\n {selectedCollections && selectedCollections.length > 0 && (\n <Stack gap=\"xs\">\n <Text size=\"sm\" c=\"dimmed\">\n {selectedCollections.length} collection{selectedCollections.length !== 1 ? 's' : ''} selected\n </Text>\n </Stack>\n )}\n </Stack>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Stack, Text, Loader, Center, Alert, Title, Flex, ActionIcon } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { useCurrentUser } from '@/mantine/hooks/useCurrentUser';\nimport { useCollections } from '@/mantine/hooks/useCollections';\nimport { TemplateConfig } from '../template/TemplateConfig';\nimport { IconSettings, IconRefresh, IconAlertCircle } from '@tabler/icons-react';\nimport { useBlocknoteContext } from '@/mantine/context/BlocknoteContext';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport { ClaimCollectionsList } from './ClaimCollectionsList';\nimport { buildFlowNodeFromBlock, createRuntimeStateManager, SimpleUCANManager, createDelegationStore } from '@/core/lib/flowEngine';\n\nconst CLAIM_FLOW_PANEL_ID = 'claim-flow-panel';\n\nexport const ClaimFlowView = ({ editor, block }: IxoBlockProps) => {\n const { editable } = useBlocknoteContext();\n const handlers = useBlocknoteHandlers();\n const userAddress = useCurrentUser();\n\n const flowNode = useMemo(() => buildFlowNodeFromBlock(block), [block]);\n const runtime = useMemo(() => createRuntimeStateManager(editor), [editor]);\n const ucanManager = useMemo(() => new SimpleUCANManager(), []);\n const delegationStore = useMemo(() => {\n if (!editor?._yDelegations) return undefined;\n return createDelegationStore(editor._yDelegations);\n }, [editor?._yDelegations]);\n const verifySignature = useMemo(() => {\n if (!handlers?.verifyCapabilitySignature) return undefined;\n return async (capabilityRaw: string, issuerDid: string) => {\n return handlers.verifyCapabilitySignature!({ capabilityRaw, issuerDid });\n };\n }, [handlers]);\n const flowOwnerDid = useMemo(() => editor.getFlowOwnerDid?.() || '', [editor]);\n const flowUri = useMemo(() => {\n const docId = editor.getFlowMetadata?.()?.doc_id || block.id;\n return `ixo:flow:${docId}`;\n }, [editor, block.id]);\n const execution = useMemo(\n () => ({\n flowNode,\n runtime,\n ucanManager,\n actorDid: userAddress || '',\n delegationStore,\n verifySignature,\n rootIssuer: flowOwnerDid || undefined,\n flowUri,\n }),\n [flowNode, runtime, ucanManager, userAddress, delegationStore, verifySignature, flowOwnerDid, flowUri]\n );\n\n const panelId = `${CLAIM_FLOW_PANEL_ID}-${block.id}`;\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n const { open } = usePanel(panelId, panelContent);\n\n const selectedCollectionIds = useMemo(() => {\n try {\n const parsed = JSON.parse(block.props.selectedCollections || '[]') as string[];\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }, [block.props.selectedCollections]);\n\n const did = block.props.deedDid;\n const adminAddress = block.props.adminAddress || '';\n\n const { collections, loading, error, refetch } = useCollections(did, selectedCollectionIds, block, editor);\n\n if (!did) {\n return (\n <Center py=\"xl\">\n <Text size=\"sm\" c=\"dimmed\">\n Please configure the claim block in template mode first\n </Text>\n </Center>\n );\n }\n\n if (selectedCollectionIds.length === 0) {\n return (\n <Center py=\"xl\">\n <Text size=\"sm\" c=\"dimmed\">\n No claim collections selected\n </Text>\n </Center>\n );\n }\n\n return (\n <Stack w=\"100%\">\n <Flex px={5} align=\"center\" justify=\"space-between\">\n <Title order={4}>Submit Claims</Title>\n <Flex gap=\"xs\">\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={refetch} loading={loading}>\n <IconRefresh size={18} />\n </ActionIcon>\n {editable && (\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={open}>\n <IconSettings size={18} />\n </ActionIcon>\n )}\n </Flex>\n </Flex>\n\n {loading ? (\n <Center py=\"xl\">\n <Loader size=\"md\" />\n </Center>\n ) : error ? (\n <Alert color=\"red\" title=\"Failed to load collections\" icon={<IconAlertCircle size={18} />}>\n <Text size=\"sm\">{error}</Text>\n </Alert>\n ) : (\n <ClaimCollectionsList\n collections={collections}\n deedId={did}\n adminAddress={adminAddress}\n userAddress={userAddress}\n onRefresh={refetch}\n execution={execution}\n />\n )}\n </Stack>\n );\n};\n","import { useState, useEffect, useRef } from 'react';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\n\nexport function useCurrentUser() {\n const { getCurrentUser } = useBlocknoteHandlers();\n const getCurrentUserRef = useRef(getCurrentUser);\n useEffect(() => {\n getCurrentUserRef.current = getCurrentUser;\n }, [getCurrentUser]);\n\n const [userAddress, setUserAddress] = useState<string>('');\n\n useEffect(() => {\n const fetchUserAddress = () => {\n try {\n const user = getCurrentUserRef.current();\n setUserAddress(user?.address || '');\n } catch (err) {\n setUserAddress('');\n }\n };\n\n fetchUserAddress();\n }, []);\n\n return userAddress;\n}\n","import { useState, useEffect, useCallback, useRef, useMemo } from 'react';\nimport { ClaimCollection, useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\n\nexport function useCollections(did: string, selectedCollectionIds: string[], block: any, editor: any) {\n const { getClaimCollections } = useBlocknoteHandlers();\n const getClaimCollectionsRef = useRef(getClaimCollections);\n useEffect(() => {\n getClaimCollectionsRef.current = getClaimCollections;\n }, [getClaimCollections]);\n\n const [collections, setCollections] = useState<ClaimCollection[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const adminAddressUpdatedRef = useRef(false);\n\n const selectedCollectionIdsStr = useMemo(() => JSON.stringify(selectedCollectionIds.sort()), [selectedCollectionIds]);\n\n const fetchCollections = useCallback(async () => {\n if (!did || selectedCollectionIds.length === 0) {\n setCollections([]);\n return;\n }\n\n if (loading) {\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const response = await getClaimCollectionsRef.current({ deedDid: did });\n const { adminAddress: fetchedAdminAddress = '', collections: allCollections = [] } = response || {};\n\n const currentAdminAddress = block.props.adminAddress || '';\n if (fetchedAdminAddress && !currentAdminAddress && !adminAddressUpdatedRef.current) {\n adminAddressUpdatedRef.current = true;\n editor.updateBlock(block, {\n props: {\n ...block.props,\n adminAddress: fetchedAdminAddress,\n },\n });\n }\n\n const selectedCollections = Array.isArray(allCollections) ? allCollections.filter((c) => c && selectedCollectionIds.includes(c.id)) : [];\n\n setCollections(selectedCollections);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch collections');\n setCollections([]);\n } finally {\n setLoading(false);\n }\n }, [did, selectedCollectionIdsStr]);\n\n useEffect(() => {\n fetchCollections();\n }, [fetchCollections]);\n\n return { collections, loading, error, refetch: fetchCollections };\n}\n","import React, { useMemo } from 'react';\nimport { Stack, Text, ActionIcon, Tooltip, Loader, Center } from '@mantine/core';\nimport { ClaimCollection, AgentRole, useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport ListItemContainer from '../../list/ListItemContainer';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { useUserRoles } from '@/mantine/hooks/useUserRoles';\nimport { ClaimsListSheet } from './ClaimsListSheet';\nimport { IconArrowRight } from '@tabler/icons-react';\nimport { ClaimCollectionsListProps, CollectionItemProps } from './types';\n\nconst CollectionItem: React.FC<CollectionItemProps> = ({ collection, deedId, adminAddress, userRole, onRefresh, execution }) => {\n console.log('[CollectionItem] RENDER START', { collectionId: collection.id, userRole });\n\n const { getCurrentUser } = useBlocknoteHandlers();\n\n let currentUser;\n try {\n console.log('[CollectionItem] Calling getCurrentUser...');\n currentUser = getCurrentUser();\n console.log('[CollectionItem] getCurrentUser result:', currentUser);\n if (!currentUser) {\n alert('Error in ClaimCollectionsList.tsx:31 - getCurrentUser() returned no data');\n // Provide default value to prevent crash\n currentUser = { address: '' };\n }\n } catch (err) {\n console.log('[CollectionItem] getCurrentUser ERROR:', err);\n alert(`Error in ClaimCollectionsList.tsx:31 - getCurrentUser() failed: ${err instanceof Error ? err.message : String(err)}`);\n // Provide default value to prevent crash\n currentUser = { address: '' };\n }\n\n const getCollectionName = (collection: ClaimCollection) => collection.protocol?.profile?.name || collection.name || 'Unnamed Collection';\n\n const isServiceAgent = userRole === AgentRole.ServiceProvider;\n const canAccessClaims = isServiceAgent;\n\n const claimsPanelId = `claims-list-${collection.id}`;\n const collectionName = getCollectionName(collection);\n console.log('[CollectionItem] Panel setup', { claimsPanelId, collectionName, canAccessClaims });\n\n console.log('[CollectionItem] Creating claimsPanelContent useMemo...');\n const claimsPanelContent = useMemo(() => {\n console.log('[CollectionItem] claimsPanelContent useMemo EXECUTING', { collectionId: collection.id });\n return (\n <ClaimsListSheet\n collectionId={collection.id}\n collectionName={collectionName}\n deedId={deedId}\n adminAddress={adminAddress}\n userAddress={currentUser.address}\n onSubmitComplete={onRefresh}\n execution={execution}\n />\n );\n }, [collection.id, collectionName, deedId, adminAddress, currentUser.address, onRefresh, execution]);\n\n console.log('[CollectionItem] Calling usePanel with panelId:', claimsPanelId);\n const { open: openClaimsPanel } = usePanel(claimsPanelId, claimsPanelContent);\n console.log('[CollectionItem] usePanel returned');\n\n const handleClick = () => {\n console.log('[CollectionItem] handleClick called', { canAccessClaims });\n if (canAccessClaims) {\n console.log('[CollectionItem] Opening claims panel...');\n openClaimsPanel();\n }\n };\n\n return (\n <div style={{ opacity: canAccessClaims ? 1 : 0.5 }}>\n <ListItemContainer isChecked={false} onClick={() => {}}>\n <Stack gap={4} style={{ flex: 1 }}>\n <Text size=\"sm\" fw={500} c={canAccessClaims ? undefined : 'dimmed'}>\n {collectionName}\n </Text>\n {collection.description && (\n <Text size=\"xs\" c=\"dimmed\">\n {collection.description}\n </Text>\n )}\n </Stack>\n\n <Tooltip label=\"You need to apply to be a service agent first\" disabled={canAccessClaims} position=\"left\" withArrow>\n <ActionIcon variant=\"subtle\" size=\"lg\" onClick={handleClick} disabled={!canAccessClaims} style={{ cursor: canAccessClaims ? 'pointer' : 'not-allowed' }}>\n <IconArrowRight size={20} />\n </ActionIcon>\n </Tooltip>\n </ListItemContainer>\n </div>\n );\n};\n\nexport const ClaimCollectionsList: React.FC<ClaimCollectionsListProps> = ({ collections, deedId, adminAddress, userAddress, onRefresh, execution }) => {\n const { userRoles, loading: loadingRoles } = useUserRoles(collections, userAddress, adminAddress, deedId);\n\n if (!collections?.length) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No claim collections found\n </Text>\n );\n }\n\n if (loadingRoles) {\n return (\n <Center py=\"md\">\n <Loader size=\"sm\" />\n </Center>\n );\n }\n\n return (\n <Stack gap=\"md\" px={5}>\n {collections.map((collection) => (\n <CollectionItem\n key={collection.id}\n collection={collection}\n deedId={deedId}\n adminAddress={adminAddress}\n userRole={userRoles[collection.id] || null}\n onRefresh={onRefresh}\n execution={execution}\n />\n ))}\n </Stack>\n );\n};\n","import { useState, useEffect, useMemo, useRef } from 'react';\nimport { useBlocknoteHandlers, ClaimCollection, AgentRole } from '@/mantine/context/BlocknoteContext';\nimport { isClientFulfillmentError } from './utils';\n\nexport function useUserRoles(collections: ClaimCollection[], userAddress: string, adminAddress: string, deedId: string) {\n const { getUserRoles } = useBlocknoteHandlers();\n const getUserRolesRef = useRef(getUserRoles);\n useEffect(() => {\n getUserRolesRef.current = getUserRoles;\n }, [getUserRoles]);\n\n const [userRoles, setUserRoles] = useState<Record<string, AgentRole | null>>({});\n const [loading, setLoading] = useState(true);\n const failedRequestKeyRef = useRef<string | null>(null);\n\n const collectionIdsKey = useMemo(\n () =>\n collections\n .map((c) => c.id)\n .sort()\n .join('|'),\n [collections]\n );\n\n const requestKey = useMemo(() => [userAddress, adminAddress, deedId, collectionIdsKey].filter(Boolean).join('|'), [userAddress, adminAddress, deedId, collectionIdsKey]);\n\n useEffect(() => {\n let isMounted = true;\n\n const setEmptyRoles = () => {\n const rolesMap: Record<string, AgentRole | null> = {};\n collections.forEach((collection) => {\n rolesMap[collection.id] = null;\n });\n if (isMounted) {\n setUserRoles(rolesMap);\n }\n };\n\n const fetchUserRoles = async () => {\n if (!collections || collections.length === 0 || !userAddress || !adminAddress) {\n setLoading(false);\n return;\n }\n\n if (!requestKey || failedRequestKeyRef.current === requestKey) {\n setLoading(false);\n return;\n }\n\n const getUserRolesFn = getUserRolesRef.current;\n\n if (typeof getUserRolesFn !== 'function') {\n setEmptyRoles();\n setLoading(false);\n return;\n }\n\n try {\n setLoading(true);\n const collectionIds = collections.map((c) => c.id);\n const roles = await getUserRolesFn({\n userAddress,\n adminAddress,\n deedDid: deedId,\n collectionIds,\n });\n\n const rolesMap: Record<string, AgentRole | null> = {};\n collections.forEach((collection) => {\n const roleData = roles?.find((r) => r.collectionId === collection.id);\n rolesMap[collection.id] = roleData?.role || null;\n });\n\n setUserRoles(rolesMap);\n } catch (error) {\n if (isClientFulfillmentError(error)) {\n failedRequestKeyRef.current = requestKey;\n } else {\n failedRequestKeyRef.current = null;\n }\n setEmptyRoles();\n } finally {\n if (isMounted) {\n setLoading(false);\n }\n }\n };\n\n fetchUserRoles();\n return () => {\n isMounted = false;\n };\n }, [collections, userAddress, adminAddress, deedId, requestKey]);\n\n return { userRoles, loading };\n}\n","export function isClientFulfillmentError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error ?? '');\n return /client(?:.+)?(cannot|can't).+fulfil?/i.test(message);\n}\n","import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport { CloseButton, Title, Loader, Stack, Text, Button, ActionIcon, Alert } from '@mantine/core';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { useBlocknoteHandlers, Claim } from '@/mantine/context/BlocknoteContext';\nimport { IconArrowLeft, IconAlertCircle } from '@tabler/icons-react';\nimport { Survey, SurveyModel } from '@ixo/surveys';\nimport { surveyTheme } from './theme';\nimport ListItemContainer from '../../list/ListItemContainer';\nimport { executeNode } from '@/core/lib/flowEngine';\nimport { ClaimsListSheetProps } from './types';\n\ntype ViewMode = 'list' | 'survey';\n\nexport const ClaimsListSheet: React.FC<ClaimsListSheetProps> = ({ collectionId, collectionName, deedId, adminAddress, userAddress, onSubmitComplete, execution }) => {\n const { closePanel } = usePanelStore();\n const handlers = useBlocknoteHandlers();\n const [viewMode, setViewMode] = useState<ViewMode>('list');\n const [claims, setClaims] = useState<Claim[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [surveyJson, setSurveyJson] = useState<any>(null);\n const [surveyLoading, setSurveyLoading] = useState(false);\n const [surveyError, setSurveyError] = useState<string | null>(null);\n console.log('[ClaimsListSheet] render', { collectionId, collectionName, deedId, adminAddress, userAddress, viewMode });\n\n // Fetch claims for the collection\n const fetchClaims = useCallback(async () => {\n console.log('[ClaimsListSheet] fetchClaims start', { collectionId, userAddress });\n try {\n setLoading(true);\n setError(null);\n const result = await handlers.getClaimsPerUserAddress({\n collectionId,\n userAddress,\n });\n console.log('[ClaimsListSheet] fetchClaims result', result);\n\n if (!result) {\n alert('Error in ClaimsListSheet.tsx:37 - getClaimsPerUserAddress() returned no data');\n }\n\n setClaims(Array.isArray(result) ? result : []);\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'Failed to fetch claims';\n alert(`Error in ClaimsListSheet.tsx:37 - getClaimsPerUserAddress() failed: ${errorMsg}`);\n setError(errorMsg);\n setClaims([]);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [collectionId, userAddress]);\n\n // Fetch survey template\n const fetchSurveyTemplate = useCallback(async () => {\n console.log('[ClaimsListSheet] fetchSurveyTemplate start', { deedId });\n try {\n setSurveyLoading(true);\n setSurveyError(null);\n const result = await handlers.getDeedSurveyTemplate(deedId);\n console.log('[ClaimsListSheet] fetchSurveyTemplate result', result);\n\n if (!result) {\n alert('Error in ClaimsListSheet.tsx:65 - getDeedSurveyTemplate() returned no data');\n setSurveyError('No data returned from getDeedSurveyTemplate');\n } else if (result?.surveyTemplate) {\n setSurveyJson(result.surveyTemplate);\n } else {\n alert('Error in ClaimsListSheet.tsx:65 - getDeedSurveyTemplate() returned data without surveyTemplate');\n setSurveyError('No survey template found for this deed');\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : 'Failed to load survey template';\n alert(`Error in ClaimsListSheet.tsx:65 - getDeedSurveyTemplate() failed: ${errorMsg}`);\n setSurveyError(errorMsg);\n setSurveyJson(null);\n } finally {\n setSurveyLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [deedId]);\n\n useEffect(() => {\n console.log('[ClaimsListSheet] useEffect fetchClaims');\n fetchClaims();\n }, [fetchClaims]);\n\n const surveyModel = useMemo(() => {\n console.log('[ClaimsListSheet] surveyModel useMemo', { hasSurveyJson: !!surveyJson });\n if (!surveyJson) return null;\n const model = new SurveyModel(surveyJson);\n\n // Apply theme\n model.applyTheme(surveyTheme);\n\n // Configure model settings\n model.showQuestionNumbers = 'off';\n model.questionsOnPageMode = 'singlePage';\n\n return model;\n }, [surveyJson]);\n\n const handleSurveyComplete = useCallback(\n async (sender: any) => {\n console.log('[ClaimsListSheet] handleSurveyComplete fired', { data: sender?.data });\n const surveyData = sender.data;\n\n try {\n const pin = await handlers.requestPin({\n title: 'Verify Identity',\n description: 'Enter your PIN to submit the claim',\n submitText: 'Verify',\n });\n console.log('[ClaimsListSheet] requestPin resolved', { hasPin: !!pin });\n\n if (!pin) {\n alert('Error in ClaimsListSheet.tsx:107 - requestPin() returned no data');\n throw new Error('No PIN provided');\n }\n\n // Validate required fields\n if (!adminAddress) {\n throw new Error('Admin address is not set. Please configure the claim block first.');\n }\n\n // Submit claim using the handler\n console.log('[ClaimsListSheet] submitClaim payload', {\n deedId,\n collectionId,\n adminAddress,\n surveyDataKeys: Object.keys(surveyData || {}),\n });\n const outcome = await executeNode({\n node: execution.flowNode,\n actorDid: execution.actorDid,\n context: {\n runtime: execution.runtime,\n ucanManager: execution.ucanManager,\n delegationStore: execution.delegationStore,\n verifySignature: execution.verifySignature,\n rootIssuer: execution.rootIssuer,\n flowUri: execution.flowUri,\n },\n action: async () => {\n const result = await handlers.submitClaim({\n surveyData,\n deedDid: deedId,\n collectionId,\n adminAddress,\n pin,\n });\n console.log('[ClaimsListSheet] submitClaim result', result);\n\n if (!result) {\n throw new Error('No result returned from submitClaim');\n }\n\n const claimId = (result as any)?.claimId || (result as any)?.id || `${execution.flowNode.id}-${Date.now()}`;\n\n return {\n claimId,\n submittedByDid: execution.actorDid,\n evaluationStatus: 'pending',\n payload: result,\n };\n },\n });\n\n if (!outcome.success) {\n throw new Error(outcome.error || 'Authorization failed');\n }\n\n closePanel();\n onSubmitComplete?.();\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'Failed to submit claim';\n\n // Check which handler failed\n if (error instanceof Error && error.message === 'No PIN provided') {\n // requestPin failed - alert already shown\n } else if (error instanceof Error && error.message === 'No result returned from submitClaim') {\n // submitClaim failed - alert already shown\n } else if (error instanceof Error && error.message.includes('requestPin')) {\n alert(`Error in ClaimsListSheet.tsx:107 - requestPin() failed: ${errorMsg}`);\n } else if (error instanceof Error && error.message.includes('submitClaim')) {\n alert(`Error in ClaimsListSheet.tsx:119 - submitClaim() failed: ${errorMsg}`);\n } else {\n // General error, could be from either handler\n alert(`Error in ClaimsListSheet.tsx:107-119 - Handler failed: ${errorMsg}`);\n }\n\n console.error('[ClaimsListSheet] handleSurveyComplete error', error);\n setSurveyError(errorMsg);\n }\n },\n [handlers, deedId, collectionId, adminAddress, closePanel, onSubmitComplete, execution]\n );\n\n // Set up survey completion callback\n useEffect(() => {\n if (surveyModel) {\n console.log('[ClaimsListSheet] register surveyModel.onComplete listener');\n surveyModel.onComplete.add(handleSurveyComplete);\n return () => {\n console.log('[ClaimsListSheet] cleanup surveyModel.onComplete listener');\n surveyModel.onComplete.remove(handleSurveyComplete);\n };\n }\n return undefined;\n }, [surveyModel, handleSurveyComplete]);\n\n const handleNewClaim = () => {\n console.log('[ClaimsListSheet] handleNewClaim', { hasSurveyJson: !!surveyJson });\n if (!surveyJson) {\n fetchSurveyTemplate();\n }\n setViewMode('survey');\n };\n\n const handleBackToList = () => {\n console.log('[ClaimsListSheet] handleBackToList');\n setViewMode('list');\n setSurveyError(null);\n // Refresh claims after potentially submitting\n fetchClaims();\n };\n\n const getClaimStatus = (paymentsStatus?: Claim['paymentsStatus'] | null): 'pending' | 'approved' | 'rejected' => {\n if (!paymentsStatus) {\n return 'pending';\n }\n\n if (paymentsStatus.approval === 'PAID') {\n return 'approved';\n }\n if (paymentsStatus.rejection === 'PAID') {\n return 'rejected';\n }\n return 'pending';\n };\n\n const getStatusColor = (status: 'pending' | 'approved' | 'rejected') => {\n switch (status) {\n case 'approved':\n return 'green';\n case 'rejected':\n return 'red';\n case 'pending':\n default:\n return 'yellow';\n }\n };\n\n const formatDate = (dateString: string) => {\n try {\n return new Date(dateString).toLocaleDateString();\n } catch {\n return dateString;\n }\n };\n\n return (\n <div\n // p=\"md\"\n // shadow=\"sm\"\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '1rem',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n {viewMode === 'survey' && (\n <ActionIcon variant=\"subtle\" onClick={handleBackToList}>\n <IconArrowLeft size={20} />\n </ActionIcon>\n )}\n <Title order={3}>{viewMode === 'list' ? collectionName : 'Submit New Claim'}</Title>\n </div>\n <CloseButton onClick={closePanel} />\n </div>\n\n {/* Content with transitions */}\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n position: 'relative',\n }}\n >\n {/* List View */}\n <div\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n transform: viewMode === 'list' ? 'translateX(0)' : 'translateX(-100%)',\n opacity: viewMode === 'list' ? 1 : 0,\n transition: 'transform 0.3s ease-out, opacity 0.3s ease-out',\n pointerEvents: viewMode === 'list' ? 'auto' : 'none',\n }}\n >\n <Stack gap=\"md\" style={{ flex: 1 }}>\n {/* New Claim Button */}\n <Button onClick={handleNewClaim} fullWidth>\n New Claim\n </Button>\n\n {/* Claims List */}\n {loading ? (\n <Stack align=\"center\" justify=\"center\" style={{ flex: 1 }}>\n <Loader size=\"lg\" />\n <Text size=\"sm\" c=\"dimmed\">\n Loading claims...\n </Text>\n </Stack>\n ) : error ? (\n <Alert color=\"red\" title=\"Failed to load claims\" icon={<IconAlertCircle size={18} />}>\n <Text size=\"sm\">{error}</Text>\n </Alert>\n ) : claims.length === 0 ? (\n <Stack align=\"center\" justify=\"center\" style={{ flex: 1 }}>\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\">\n No claims found. Click \"New Claim\" to submit your first claim.\n </Text>\n </Stack>\n ) : (\n <Stack gap=\"xs\">\n {claims.map((claim) => {\n const status = getClaimStatus(claim.paymentsStatus);\n return (\n <ListItemContainer key={claim.claimId} isChecked={false} onClick={() => {}}>\n <Stack gap={4} style={{ flex: 1 }}>\n <Text size=\"sm\" fw={500}>\n Claim #{claim.claimId.slice(-8)}\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n Submitted: {formatDate(claim.submissionDate)}\n </Text>\n </Stack>\n <Text size=\"xs\" fw={500} c={getStatusColor(status)}>\n {status.toUpperCase()}\n </Text>\n </ListItemContainer>\n );\n })}\n </Stack>\n )}\n </Stack>\n </div>\n\n {/* Survey View */}\n <div\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n transform: viewMode === 'survey' ? 'translateX(0)' : 'translateX(100%)',\n opacity: viewMode === 'survey' ? 1 : 0,\n transition: 'transform 0.3s ease-out, opacity 0.3s ease-out',\n pointerEvents: viewMode === 'survey' ? 'auto' : 'none',\n }}\n >\n <div>\n {surveyLoading && (\n <Stack align=\"center\" justify=\"center\" style={{ height: '100%' }}>\n <Loader size=\"lg\" />\n <Text size=\"sm\" c=\"dimmed\">\n Loading survey template...\n </Text>\n </Stack>\n )}\n {surveyError && (\n <Stack align=\"center\" justify=\"center\" style={{ height: '100%', padding: '1rem' }}>\n <Text size=\"sm\" c=\"red\">\n {surveyError}\n </Text>\n </Stack>\n )}\n {!surveyLoading && !surveyError && surveyModel && <Survey model={surveyModel} />}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import { ITheme } from '@ixo/surveys';\n\nexport const palette = {\n // Neutral\n Neutral50: '#FAFAFA',\n Neutral100: '#F8F8F8',\n Neutral200: '#F1F1F1',\n Neutral300: '#EBEBEB',\n Neutral500: '#D7D7D7',\n Neutral800: '#9A9A9A',\n Black: '#000000',\n\n // Neutral Dark\n NeutralDark50: '#050505',\n NeutralDark100: '#070707',\n NeutralDark200: '#0E0E0E',\n NeutralDark300: '#141414',\n NeutralDark500: '#282828',\n NeutralDark800: '#656565',\n\n // White\n White: '#FFFFFF',\n WhiteSecondary: '#D7ECE3',\n\n // EmergingBlue\n accentActive: '#0EB8DC',\n accentSecondary: '#20798C',\n accentHover: '#17C6EB',\n accentLight: '#ADEBF8',\n\n // CompanionBlue\n companionBlue: '#e8f9fd',\n\n // EmergingLighter\n accentLighter: 'rgba(173,235,248,0.2)',\n\n accentDarker: '#296DAB',\n darkestBlue: '#000000',\n\n // Contribution\n contributionBlue: 'rgba(22, 143, 168, 1)',\n\n // Danger\n dangerFull: '#E2223B',\n dangerBrighter: '#FCCFD5',\n dangerBright: '#F9909E',\n dangerDark: '#A11C43',\n\n // Success\n successFull: '#61B43A',\n successDarker: '#47822b',\n successBright: '#F4FCF0',\n successSecondary: '#1CBD6A',\n\n orangeFull: '#ED9526',\n orangeBright: '#FDC681',\n\n // Transparent\n transparent: 'rgba(255, 255, 255, 0)',\n whiteTransparentDarker: 'rgba(255, 255, 255, 0.10)',\n whiteTransparent: 'rgba(255, 255, 255, 0.30)',\n whiteTransparentSecondary: 'rgba(255, 255, 255, 0.65)',\n successTransparent: 'rgba(67, 175, 98, 0.30)',\n\n // Glassmorphics\n glass: 'rgba(255, 255, 255, 0.06)',\n glassGradient: 'linear-gradient(135deg, rgba(255, 255, 255, 0.05) 0%, rgba(153, 153, 153, 0.03) 100%)',\n glassDarker: 'rgba(0, 0, 0, 0.5)',\n glassLighter: 'rgba(255, 255, 255, 0.3)',\n\n // Gradients\n offsetCertificateGradient: 'linear-gradient(45deg, rgba(59,152,51,1) 0%, rgba(70,193,193,1) 100%)',\n contributionCertificateGradient: 'linear-gradient(45deg, rgba(22,143,168,1) 0%, rgba(30,204,183,1) 100%)',\n carbonCertificateGradient: 'linear-gradient(55.09deg, rgba(54, 101, 135, 1) -2.49%, rgba(30, 173, 204, 1) 109.08%)',\n shadowGradient: 'linear-gradient(0deg, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.2) 100%)',\n};\n\nexport function hexToRgb(hex: string, rate: number): string {\n const hexNum = hex.replace(/^#/, '');\n\n const r = parseInt(hexNum.substring(0, 2), 16);\n const g = parseInt(hexNum.substring(2, 4), 16);\n const b = parseInt(hexNum.substring(4, 6), 16);\n\n const clampedRate = Math.max(0, Math.min(1, rate));\n\n return `rgba(${r}, ${g}, ${b}, ${clampedRate})`;\n}\n\nexport const surveyTheme: ITheme = {\n backgroundImageFit: 'cover',\n backgroundImageAttachment: 'scroll',\n backgroundOpacity: 0,\n cssVariables: {\n // Input backgrounds - match BaseTextInput\n '-sjs-editorpanel-backcolor': '#1a1a1a',\n '--sjs-editor-background': '#1a1a1a',\n '--sjs-general-backcolor': '#2a2a2a', // this one\n '--sjs-general-backcolor-dark': '#1a1a1a',\n '--sjs-general-backcolor-dim': 'rgba(255, 255, 255, 0.04)',\n '--sjs-general-backcolor-dim-light': 'rgba(255, 255, 255, 0.04)',\n '--sjs-general-backcolor-dim-dark': 'rgba(255, 255, 255, 0.04)',\n\n // Text colors - match BaseTextInput\n '--sjs-general-forecolor': '#f1f3f5',\n '--sjs-general-forecolor-light': '#f1f3f5',\n '--sjs-general-dim-forecolor': '#adb5bd',\n '--sjs-general-dim-forecolor-light': '#adb5bd',\n '--sjs-font-surveytitle-color': '#f1f3f5',\n '--sjs-font-editorfont-color': '#f1f3f5',\n\n // Button colors - match BaseButton (white background, black text)\n '--sjs-primary-backcolor': '#ffffff',\n '--sjs-primary-backcolor-light': '#f8f9fa',\n '--sjs-primary-backcolor-dark': '#e9ecef',\n '--sjs-primary-forecolor': '#000000',\n '--sjs-primary-forecolor-light': '#000000',\n '--sjs-primary-hover-backcolor': '#ffffff',\n\n // Base unit and border radius (8px = md)\n '--sjs-base-unit': '8px',\n '--base-unit': '8px',\n '--sjs-editorpanel-cornerRadius': '8px',\n '--sjs-questionpanel-cornerRadius': '8px',\n '--sjs-corner-radius': '8px',\n\n // Secondary colors\n '--sjs-secondary-backcolor': 'rgba(255, 152, 20, 1)',\n '--sjs-secondary-backcolor-light': 'rgba(255, 152, 20, 0.1)',\n '--sjs-secondary-backcolor-semi-light': 'rgba(255, 152, 20, 0.25)',\n '--sjs-secondary-forecolor': 'rgba(255, 255, 255, 1)',\n '--sjs-secondary-forecolor-light': 'rgba(255, 255, 255, 0.25)',\n\n // Shadows - minimal/none\n '--sjs-shadow-small': '0px 0px 0px 0px rgba(0, 0, 0, 0)',\n '--sjs-shadow-small-reset': '0px 0px 0px 0px rgba(0, 0, 0, 0)',\n '--sjs-shadow-medium': '0px 0px 0px 0px rgba(0, 0, 0, 0)',\n '--sjs-shadow-large': '0px 0px 0px 0px rgba(0, 0, 0, 0)',\n '--sjs-shadow-inner': '0 0 0 1px #333',\n '--sjs-shadow-inner-reset': '0 0 0 1px #333',\n\n // Borders - 1px solid #333\n '--sjs-border-light': '#333',\n '--sjs-border-default': '#333',\n '--sjs-border-inside': '#333',\n '--sjs-special-red': 'rgba(229, 10, 62, 1)',\n '--sjs-special-red-light': 'rgba(229, 10, 62, 0.1)',\n '--sjs-special-red-forecolor': 'rgba(255, 255, 255, 1)',\n '--sjs-special-green': 'rgba(0, 255, 157, 1)',\n '--sjs-special-green-light': 'rgba(0, 255, 157, 0.1)',\n '--sjs-special-green-forecolor': 'rgba(0, 0, 0, 1)',\n '--sjs-special-blue': 'rgba(0, 255, 157, 1)',\n '--sjs-special-blue-light': 'rgba(0, 255, 157, 0.1)',\n '--sjs-special-blue-forecolor': 'rgba(0, 0, 0, 1)',\n '--sjs-special-yellow': 'rgba(255, 152, 20, 1)',\n '--sjs-special-yellow-light': 'rgba(255, 152, 20, 0.1)',\n '--sjs-special-yellow-forecolor': 'rgba(255, 255, 255, 1)',\n '--sjs-article-font-xx-large-textDecoration': 'none',\n '--sjs-article-font-xx-large-fontWeight': '700',\n '--sjs-article-font-xx-large-fontStyle': 'normal',\n '--sjs-article-font-xx-large-fontStretch': 'normal',\n '--sjs-article-font-xx-large-letterSpacing': '0',\n '--sjs-article-font-xx-large-lineHeight': '64px',\n '--sjs-article-font-xx-large-paragraphIndent': '0px',\n '--sjs-article-font-xx-large-textCase': 'none',\n '--sjs-article-font-x-large-textDecoration': 'none',\n '--sjs-article-font-x-large-fontWeight': '700',\n '--sjs-article-font-x-large-fontStyle': 'normal',\n '--sjs-article-font-x-large-fontStretch': 'normal',\n '--sjs-article-font-x-large-letterSpacing': '0',\n '--sjs-article-font-x-large-lineHeight': '56px',\n '--sjs-article-font-x-large-paragraphIndent': '0px',\n '--sjs-article-font-x-large-textCase': 'none',\n '--sjs-article-font-large-textDecoration': 'none',\n '--sjs-article-font-large-fontWeight': '700',\n '--sjs-article-font-large-fontStyle': 'normal',\n '--sjs-article-font-large-fontStretch': 'normal',\n '--sjs-article-font-large-letterSpacing': '0',\n '--sjs-article-font-large-lineHeight': '40px',\n '--sjs-article-font-large-paragraphIndent': '0px',\n '--sjs-article-font-large-textCase': 'none',\n '--sjs-article-font-medium-textDecoration': 'none',\n '--sjs-article-font-medium-fontWeight': '700',\n '--sjs-article-font-medium-fontStyle': 'normal',\n '--sjs-article-font-medium-fontStretch': 'normal',\n '--sjs-article-font-medium-letterSpacing': '0',\n '--sjs-article-font-medium-lineHeight': '32px',\n '--sjs-article-font-medium-paragraphIndent': '0px',\n '--sjs-article-font-medium-textCase': 'none',\n '--sjs-article-font-default-textDecoration': 'none',\n '--sjs-article-font-default-fontWeight': '400',\n '--sjs-article-font-default-fontStyle': 'normal',\n '--sjs-article-font-default-fontStretch': 'normal',\n '--sjs-article-font-default-letterSpacing': '0',\n '--sjs-article-font-default-lineHeight': '28px',\n '--sjs-article-font-default-paragraphIndent': '0px',\n '--sjs-article-font-default-textCase': 'none',\n },\n themeName: 'userTheme',\n colorPalette: 'dark',\n isPanelless: true,\n};\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { BidBlock } from './BidBlock';\nimport { IxoBlockProps } from '@/core/types/editor';\n\nexport const BidBlockSpec = createReactBlockSpec(\n {\n type: 'bid' as const,\n propSchema: {\n title: { default: '' },\n description: { default: '' },\n did: { default: '' },\n selectedCollections: { default: '[]' },\n adminAddress: { default: '' },\n parentCapability: { default: '' },\n authorisedActors: { default: '' },\n linkedClaimCollectionId: { default: '' },\n activationUpstreamNodeId: { default: '' },\n activationRequiredStatus: { default: '' },\n activationRequireAuthorisedActor: { default: false },\n },\n content: 'none',\n },\n {\n render: (props) => {\n const ixoProps = props as unknown as IxoBlockProps;\n return <BidBlock {...ixoProps} />;\n },\n }\n);\n","import React from 'react';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { BidTemplateView } from './template/TemplateView';\nimport { BidFlowView } from './flow/FlowView';\n\nexport type BidBlockProps = IxoBlockProps;\n\nexport function BidBlock({ editor, block }: BidBlockProps) {\n const { docType } = useBlocknoteContext();\n\n if (docType === 'template') {\n return <BidTemplateView editor={editor} block={block} />;\n }\n\n return <BidFlowView editor={editor} block={block} />;\n}\n","import React, { useMemo } from 'react';\nimport { Group, Stack, Text } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport { TemplateConfig } from './TemplateConfig';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\nconst BID_TEMPLATE_PANEL_ID = 'bid-template-panel';\n\nexport const BidTemplateView = ({ editor, block }: IxoBlockProps) => {\n const panelId = `${BID_TEMPLATE_PANEL_ID}-${block.id}`;\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n const { open } = usePanel(panelId, panelContent);\n\n const didDisplay = block.props.did ? `${block.props.did.substring(0, 15)}...${block.props.did.substring(block.props.did.length - 10)}` : 'No DID configured';\n\n return (\n <BaseContainer onClick={open}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n {getIcon('dollar-sign', 'dollar-sign')}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n Bid Block\n </Text>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.did ? didDisplay : 'Configure bid settings'}\n </Text>\n </Stack>\n </Group>\n </Group>\n </BaseContainer>\n );\n};\n","import React, { useCallback } from 'react';\nimport { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { GeneralTab } from './GeneralTab';\nimport { CollectionsTab } from './CollectionsTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { AuthorizationTab } from '@/mantine/components/AuthorizationTab';\nimport { EvaluationTab } from '@/mantine/components/EvaluationTab';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\nexport const TemplateConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n\n const updateProp = useCallback(\n (key: string, value: any) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n [key]: value,\n },\n });\n },\n [editor, block]\n );\n\n return (\n <BaseRightPanelLayout title=\"Bid Settings\" onClose={closePanel}>\n <ReusablePanel\n extraTabs={[\n {\n label: 'General',\n value: 'general',\n content: (\n <GeneralTab\n title={block.props.title || ''}\n description={block.props.description || ''}\n onTitleChange={(value) => updateProp('title', value)}\n onDescriptionChange={(value) => updateProp('description', value)}\n />\n ),\n },\n {\n label: 'Collections',\n value: 'collections',\n content: (\n <CollectionsTab\n did={block.props.did || ''}\n selectedCollections={block.props.selectedCollections || '[]'}\n adminAddress={block.props.adminAddress || ''}\n onDidChange={(value) => updateProp('did', value)}\n onSelectedCollectionsChange={(value) => updateProp('selectedCollections', value)}\n onAdminAddressChange={(value) => updateProp('adminAddress', value)}\n />\n ),\n },\n {\n label: 'Authorization',\n value: 'authorization',\n content: <AuthorizationTab editor={editor} block={block} />,\n },\n {\n label: 'Evaluation',\n value: 'evaluation',\n content: <EvaluationTab editor={editor} block={block} />,\n },\n ]}\n context={{ editor, block }}\n />\n </BaseRightPanelLayout>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSection from '@/mantine/components/Base/BaseSection';\n\ninterface GeneralTabProps {\n title: string;\n description: string;\n onTitleChange: (value: string) => void;\n onDescriptionChange: (value: string) => void;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({ title, description, onTitleChange, onDescriptionChange }) => {\n // Use local state for real-time updates, but sync with block props\n const [localTitle, setLocalTitle] = useState(title || '');\n const [localDescription, setLocalDescription] = useState(description || '');\n\n // Sync local state with props when they change\n useEffect(() => {\n setLocalTitle(title || '');\n }, [title]);\n\n useEffect(() => {\n setLocalDescription(description || '');\n }, [description]);\n\n return (\n <BaseSection>\n <BaseTextInput\n label=\"Title\"\n placeholder=\"e.g. Bid Title\"\n value={localTitle}\n onChange={(event) => {\n const newTitle = event.currentTarget.value;\n setLocalTitle(newTitle);\n onTitleChange(newTitle);\n }}\n />\n\n <BaseTextArea\n label=\"Description\"\n placeholder=\"Describe what this bid is about\"\n minRows={3}\n value={localDescription}\n onChange={(event) => {\n const newDescription = event.currentTarget.value;\n setLocalDescription(newDescription);\n onDescriptionChange(newDescription);\n }}\n />\n </BaseSection>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { CollectionSelector } from '@/mantine/components/CollectionSelector';\n\ninterface CollectionsTabProps {\n did: string;\n selectedCollections: string;\n adminAddress?: string;\n onDidChange: (value: string) => void;\n onSelectedCollectionsChange: (value: string) => void;\n onAdminAddressChange?: (value: string) => void;\n}\n\nexport const CollectionsTab: React.FC<CollectionsTabProps> = ({ did, selectedCollections, adminAddress, onDidChange, onSelectedCollectionsChange, onAdminAddressChange }) => {\n const parsedSelectedCollections = useMemo(() => {\n try {\n return JSON.parse(selectedCollections || '[]') as string[];\n } catch {\n return [];\n }\n }, [selectedCollections]);\n\n const handleCollectionsChange = useCallback(\n (collections: string[]) => {\n onSelectedCollectionsChange(JSON.stringify(collections || []));\n },\n [onSelectedCollectionsChange]\n );\n\n const handleAdminAddressChange = useCallback(\n (adminAddress: string) => {\n if (onAdminAddressChange) {\n onAdminAddressChange(adminAddress);\n }\n },\n [onAdminAddressChange]\n );\n\n return (\n <CollectionSelector\n did={did}\n selectedCollections={parsedSelectedCollections}\n onDidChange={onDidChange}\n onCollectionsChange={handleCollectionsChange}\n onAdminAddressChange={handleAdminAddressChange}\n currentAdminAddress={adminAddress}\n />\n );\n};\n","import React, { useMemo } from 'react';\nimport { Stack, Text, Loader, Center, Alert, Title, Flex, ActionIcon } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { TemplateConfig } from '../../template/TemplateConfig';\nimport { IconSettings, IconRefresh, IconAlertCircle } from '@tabler/icons-react';\nimport { useBlocknoteContext } from '@/mantine/context/BlocknoteContext';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport { ClaimCollectionsList } from './ClaimCollectionsList';\nimport { useCollections } from '../hooks/useCollections';\nimport { useCurrentUser } from '../hooks/useCurrentUser';\nimport { buildFlowNodeFromBlock, createRuntimeStateManager, SimpleUCANManager, createDelegationStore } from '@/core/lib/flowEngine';\n\nconst BID_FLOW_PANEL_ID = 'bid-flow-panel';\n\nexport const BidFlowView = ({ editor, block }: IxoBlockProps) => {\n const { editable } = useBlocknoteContext();\n const handlers = useBlocknoteHandlers();\n const userAddress = useCurrentUser();\n\n const flowNode = useMemo(() => buildFlowNodeFromBlock(block), [block]);\n const runtime = useMemo(() => createRuntimeStateManager(editor), [editor]);\n const ucanManager = useMemo(() => new SimpleUCANManager(), []);\n const delegationStore = useMemo(() => {\n if (!editor?._yDelegations) return undefined;\n return createDelegationStore(editor._yDelegations);\n }, [editor?._yDelegations]);\n const verifySignature = useMemo(() => {\n if (!handlers?.verifyCapabilitySignature) return undefined;\n return async (capabilityRaw: string, issuerDid: string) => {\n return handlers.verifyCapabilitySignature!({ capabilityRaw, issuerDid });\n };\n }, [handlers]);\n const flowOwnerDid = useMemo(() => editor.getFlowOwnerDid?.() || '', [editor]);\n const flowUri = useMemo(() => {\n const docId = editor.getFlowMetadata?.()?.doc_id || block.id;\n return `ixo:flow:${docId}`;\n }, [editor, block.id]);\n const execution = useMemo(\n () => ({\n flowNode,\n runtime,\n ucanManager,\n actorDid: userAddress || '',\n editor: editor as any, // Pass editor for authorization checks\n flowUri,\n delegationStore,\n verifySignature,\n rootIssuer: flowOwnerDid || undefined,\n }),\n [flowNode, runtime, ucanManager, userAddress, editor, flowUri, delegationStore, verifySignature, flowOwnerDid]\n );\n\n const panelId = `${BID_FLOW_PANEL_ID}-${block.id}`;\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n const { open } = usePanel(panelId, panelContent);\n\n const selectedCollectionIds = useMemo(() => {\n try {\n const parsed = JSON.parse(block.props.selectedCollections || '[]') as string[];\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }, [block.props.selectedCollections]);\n\n const did = block.props.did;\n const adminAddress = block.props.adminAddress || '';\n\n const { collections, loading, error, refetch } = useCollections(did, selectedCollectionIds, block, editor);\n\n if (!did) {\n return (\n <Center py=\"xl\">\n <Text size=\"sm\" c=\"dimmed\">\n Please configure the bid block in template mode first\n </Text>\n </Center>\n );\n }\n\n if (selectedCollectionIds.length === 0) {\n return (\n <Center py=\"xl\">\n <Text size=\"sm\" c=\"dimmed\">\n No claim collections selected\n </Text>\n </Center>\n );\n }\n\n return (\n <Stack w=\"100%\">\n <Flex px={5} align=\"center\" justify=\"space-between\">\n <Title order={4}>Bid Application</Title>\n <Flex gap=\"xs\">\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={refetch} loading={loading}>\n <IconRefresh size={18} />\n </ActionIcon>\n {editable && (\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={open}>\n <IconSettings size={18} />\n </ActionIcon>\n )}\n </Flex>\n </Flex>\n\n {loading ? (\n <Center py=\"xl\">\n <Loader size=\"md\" />\n </Center>\n ) : error ? (\n <Alert color=\"red\" title=\"Failed to load collections\" icon={<IconAlertCircle size={18} />}>\n <Text size=\"sm\">{error}</Text>\n </Alert>\n ) : (\n <ClaimCollectionsList\n collections={collections}\n deedId={did}\n adminAddress={adminAddress}\n userAddress={userAddress}\n onRefresh={refetch}\n execution={execution}\n />\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Text, Loader, Center } from '@mantine/core';\nimport { CollectionItem } from './CollectionItem';\nimport { useUserRoles } from '../hooks/useUserRoles';\nimport { ClaimCollectionsListProps } from '../types';\n\nexport const ClaimCollectionsList: React.FC<ClaimCollectionsListProps> = ({ collections, deedId, adminAddress, userAddress, onRefresh, execution }) => {\n const { userRoles, loading } = useUserRoles(collections, userAddress, adminAddress, deedId);\n\n if (!collections || collections.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No claim collections found\n </Text>\n );\n }\n\n if (loading) {\n return (\n <Center py=\"md\">\n <Loader size=\"sm\" />\n </Center>\n );\n }\n\n return (\n <Stack gap=\"md\" px={5}>\n {collections.map((collection) => (\n <CollectionItem\n key={collection.id}\n collection={collection}\n deedId={deedId}\n adminAddress={adminAddress}\n userRole={userRoles[collection.id] || null}\n onRefresh={onRefresh}\n execution={execution}\n />\n ))}\n </Stack>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Stack, Text, Button, Menu, Badge, ActionIcon, Box, Tooltip, Loader } from '@mantine/core';\nimport { IconChevronDown, IconArrowRight, IconLock } from '@tabler/icons-react';\nimport { AgentRole } from '@/mantine/context/BlocknoteContext';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { useBlockAuthorization } from '@/mantine/hooks/useBlockAuthorization';\nimport ListItemContainer from '../../../list/ListItemContainer';\nimport { BidSurveyPanel } from './BidSurveyPanel';\nimport { BidsList } from './BidsList';\nimport UserCheck from '@/icons/UserCheck';\nimport UserPlus from '@/icons/UserPlus';\nimport { CollectionItemProps } from '../types';\nimport { getCollectionName, getRoleColor, getRoleLabel } from '../utils';\n\nexport const CollectionItem: React.FC<CollectionItemProps> = ({ collection, deedId, adminAddress, userRole, onRefresh, execution }) => {\n // Check if user is authorized to execute this block\n const { isAuthorized, reason, loading: authLoading } = useBlockAuthorization({\n editor: execution.editor!,\n flowNode: execution.flowNode,\n actorDid: execution.actorDid,\n flowUri: execution.flowUri,\n });\n\n const serviceAgentPanelId = `bid-survey-${collection.id}-service_agent`;\n const serviceAgentPanelContent = useMemo(\n () => (\n <BidSurveyPanel\n deedId={deedId}\n collectionId={collection.id}\n // eslint-disable-next-line jsx-a11y/aria-role\n role=\"service_agent\"\n onSubmitComplete={onRefresh}\n execution={execution}\n />\n ),\n [deedId, collection.id, onRefresh, execution]\n );\n const { open: openServiceAgent } = usePanel(serviceAgentPanelId, serviceAgentPanelContent);\n\n const evaluationAgentPanelId = `bid-survey-${collection.id}-evaluation_agent`;\n const evaluationAgentPanelContent = useMemo(\n () => (\n <BidSurveyPanel\n deedId={deedId}\n collectionId={collection.id}\n // eslint-disable-next-line jsx-a11y/aria-role\n role=\"evaluation_agent\"\n onSubmitComplete={onRefresh}\n execution={execution}\n />\n ),\n [deedId, collection.id, onRefresh, execution]\n );\n const { open: openEvaluationAgent } = usePanel(evaluationAgentPanelId, evaluationAgentPanelContent);\n\n const bidsListPanelId = `bids-list-${collection.id}`;\n const bidsListPanelContent = useMemo(\n () => <BidsList collectionId={collection.id} deedId={deedId} adminAddress={adminAddress} onRefresh={onRefresh} execution={execution} />,\n [collection.id, deedId, adminAddress, onRefresh, execution]\n );\n const { open: openBidsList } = usePanel(bidsListPanelId, bidsListPanelContent);\n\n const renderActionButton = () => {\n // Show loading state while checking authorization\n if (authLoading) {\n return <Loader size=\"xs\" />;\n }\n\n if (userRole === AgentRole.Owner) {\n return (\n <ActionIcon variant=\"subtle\" size=\"lg\" onClick={openBidsList}>\n <IconArrowRight size={20} />\n </ActionIcon>\n );\n } else if (userRole === AgentRole.ServiceProvider || userRole === AgentRole.Evaluator) {\n return (\n <Badge size=\"sm\" color={getRoleColor(userRole)}>\n {getRoleLabel(userRole)}\n </Badge>\n );\n } else {\n // Check authorization before showing Apply button\n if (!isAuthorized) {\n return (\n <Tooltip label={reason || 'You are not authorized to apply'} withArrow>\n <Button size=\"xs\" variant=\"light\" disabled leftSection={<IconLock size={14} />}>\n Apply\n </Button>\n </Tooltip>\n );\n }\n\n return (\n <Menu shadow=\"md\" width={200}>\n <Menu.Target>\n <Button size=\"xs\" variant=\"light\" rightSection={<IconChevronDown size={14} />}>\n Apply\n </Button>\n </Menu.Target>\n\n <Menu.Dropdown>\n <Menu.Label>Select Role</Menu.Label>\n <Menu.Item onClick={openServiceAgent}>Service Agent</Menu.Item>\n <Menu.Item onClick={openEvaluationAgent}>Evaluation Agent</Menu.Item>\n </Menu.Dropdown>\n </Menu>\n );\n }\n };\n\n const getCollectionIcon = () => {\n if (userRole === AgentRole.Owner) {\n return <UserCheck />;\n }\n return <UserPlus />;\n };\n\n return (\n <ListItemContainer isChecked={false} onClick={() => {}}>\n <Box mr=\"md\" style={{ display: 'flex', alignItems: 'center' }}>\n {getCollectionIcon()}\n </Box>\n\n <Stack gap={4} style={{ flex: 1 }}>\n <Text size=\"sm\" fw={500}>\n {getCollectionName(collection)}\n </Text>\n {collection.description && (\n <Text size=\"xs\" c=\"dimmed\">\n {collection.description}\n </Text>\n )}\n </Stack>\n\n {renderActionButton()}\n </ListItemContainer>\n );\n};\n","import { useState, useEffect, useMemo } from 'react';\r\nimport { isActorAuthorized, AuthorizationResult, createDelegationStore } from '@/core/lib/flowEngine';\r\nimport { FlowNode } from '@/core/types';\r\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\r\nimport type { IxoEditorType } from '@/core/types/editor';\r\n\r\nexport interface UseBlockAuthorizationOptions {\r\n /** The editor instance */\r\n editor: IxoEditorType;\r\n /** The flow node (block converted to FlowNode) */\r\n flowNode: FlowNode;\r\n /** The current user's DID */\r\n actorDid: string;\r\n /** Optional flow URI for capability scoping */\r\n flowUri?: string;\r\n}\r\n\r\nexport interface UseBlockAuthorizationResult {\r\n /** Whether the user is authorized to execute this block */\r\n isAuthorized: boolean;\r\n /** Reason for denial if not authorized */\r\n reason?: string;\r\n /** The capability ID that grants access (if any) */\r\n capabilityId?: string;\r\n /** Whether authorization is still being checked */\r\n loading: boolean;\r\n /** Re-check authorization */\r\n recheck: () => void;\r\n}\r\n\r\n/**\r\n * Hook to check if the current user is authorized to execute a block\r\n *\r\n * Checks:\r\n * 1. authorisedActors whitelist\r\n * 2. UCAN capability chain (if parentCapability is set)\r\n * 3. Default: authorized if no restrictions\r\n */\r\nexport function useBlockAuthorization({\r\n editor,\r\n flowNode,\r\n actorDid,\r\n flowUri,\r\n}: UseBlockAuthorizationOptions): UseBlockAuthorizationResult {\r\n const handlers = useBlocknoteHandlers();\n const [result, setResult] = useState<AuthorizationResult>({ authorized: true });\n const [loading, setLoading] = useState(true);\n const [checkTrigger, setCheckTrigger] = useState(0);\n\n // Get flow owner DID for root issuer (fallback to entity DID)\n const flowOwnerDid = useMemo(() => editor.getFlowOwnerDid?.() || '', [editor]);\n const entityDid = useMemo(() => handlers.getEntityDid?.() || '', [handlers]);\n const rootIssuer = flowOwnerDid || entityDid;\n\r\n // Create delegation store from editor's delegations\r\n const delegationStore = useMemo(() => {\r\n if (!editor._yDelegations) return null;\r\n return createDelegationStore(editor._yDelegations);\r\n }, [editor._yDelegations]);\r\n\r\n // Verify signature handler\r\n const verifySignature = useMemo(() => {\r\n if (!handlers.verifyCapabilitySignature) return undefined;\r\n\r\n return async (capabilityRaw: string, issuerDid: string) => {\r\n try {\r\n const result = await handlers.verifyCapabilitySignature!({\r\n capabilityRaw,\r\n issuerDid,\r\n });\r\n return result;\r\n } catch (error) {\r\n return { valid: false, error: error instanceof Error ? error.message : 'Verification failed' };\r\n }\r\n };\r\n }, [handlers.verifyCapabilitySignature]);\r\n\r\n useEffect(() => {\r\n const checkAuthorization = async () => {\r\n setLoading(true);\r\n\r\n // If no actor DID, not authorized\r\n if (!actorDid) {\r\n setResult({ authorized: false, reason: 'No user DID available' });\r\n setLoading(false);\r\n return;\r\n }\r\n\r\n // If no restrictions on the node, authorized by default\r\n if (!flowNode.authorisedActors?.length && !flowNode.parentCapability) {\r\n setResult({ authorized: true });\r\n setLoading(false);\r\n return;\r\n }\r\n\r\n try {\r\n const authResult = await isActorAuthorized(flowNode, actorDid, {\n delegationStore: delegationStore || undefined,\n verifySignature,\n rootIssuer,\n flowUri,\n });\n\r\n setResult(authResult);\r\n } catch (error) {\r\n setResult({\r\n authorized: false,\r\n reason: error instanceof Error ? error.message : 'Authorization check failed',\r\n });\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n checkAuthorization();\r\n }, [flowNode, actorDid, delegationStore, verifySignature, rootIssuer, flowUri, checkTrigger]);\n\r\n const recheck = () => setCheckTrigger(prev => prev + 1);\r\n\r\n return {\r\n isAuthorized: result.authorized,\r\n reason: result.reason,\r\n capabilityId: result.capabilityId,\r\n loading,\r\n recheck,\r\n };\r\n}\r\n","import React, { useMemo, useEffect } from 'react';\nimport { Loader, Stack, Text } from '@mantine/core';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { Survey } from '@ixo/surveys';\nimport { useBidSurvey } from '../hooks/useBidSurvey';\nimport { BidSurveyPanelProps } from '../types';\nimport { SURVEY_THEME_BACKGROUND, SURVEY_THEME_FOREGROUND, SURVEY_THEME_VARIABLES } from '../constants';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\ntype CSSVariableStyles = React.CSSProperties;\n\nexport const BidSurveyPanel: React.FC<BidSurveyPanelProps> = ({ deedId, collectionId, role, onSubmitComplete, execution }) => {\n const { closePanel } = usePanelStore();\n const { surveyModel, loading, error, handleSurveyComplete } = useBidSurvey(deedId, collectionId, role, onSubmitComplete, execution);\n\n const roleLabel = role === 'service_agent' ? 'Service Agent' : 'Evaluation Agent';\n\n const surveyContainerStyle = useMemo<CSSVariableStyles>(\n () => ({\n flex: 1,\n overflow: 'auto',\n backgroundColor: SURVEY_THEME_BACKGROUND,\n color: SURVEY_THEME_FOREGROUND,\n ...SURVEY_THEME_VARIABLES,\n }),\n []\n );\n\n useEffect(() => {\n if (surveyModel) {\n surveyModel.onComplete.add(handleSurveyComplete);\n return () => {\n surveyModel.onComplete.remove(handleSurveyComplete);\n };\n }\n return undefined;\n }, [surveyModel, handleSurveyComplete]);\n\n return (\n <BaseRightPanelLayout isTemplate={false} onClose={closePanel} title={`${roleLabel} Application`}>\n <div style={surveyContainerStyle}>\n {loading && (\n <Stack align=\"center\" justify=\"center\" style={{ height: '100%' }}>\n <Loader size=\"lg\" />\n <Text size=\"sm\" c=\"dimmed\">\n Loading survey template...\n </Text>\n </Stack>\n )}\n {error && (\n <Stack align=\"center\" justify=\"center\" style={{ height: '100%', padding: '1rem' }}>\n <Text size=\"sm\" c=\"red\">\n {error}\n </Text>\n </Stack>\n )}\n {!loading && !error && surveyModel && <Survey model={surveyModel} />}\n </div>\n </BaseRightPanelLayout>\n );\n};\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useBlocknoteHandlers, EAAgentRoles } from '@/mantine/context/BlocknoteContext';\nimport { SurveyModel } from '@ixo/surveys';\nimport { surveyTheme } from '../../../claim/flow/theme';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { executeNode } from '@/core/lib/flowEngine';\nimport { FlowExecutionContextProps } from '../types';\n\nexport function useBidSurvey(\n deedId: string,\n collectionId: string,\n role: 'service_agent' | 'evaluation_agent',\n onSubmitComplete: (() => void) | undefined,\n execution: FlowExecutionContextProps\n) {\n const handlers = useBlocknoteHandlers();\n const { closePanel } = usePanelStore();\n const [surveyJson, setSurveyJson] = useState<any>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchSurveyTemplate = async () => {\n try {\n setLoading(true);\n setError(null);\n\n const result = role === 'service_agent' ? await handlers.getBidContributorSurveyTemplate(deedId) : await handlers.getBidEvaluatorSurveyTemplate(deedId);\n\n if (result) {\n setSurveyJson(result.surveyTemplate);\n } else {\n setError('No survey template found for this role');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load survey template');\n } finally {\n setLoading(false);\n }\n };\n\n fetchSurveyTemplate();\n }, [deedId, role, handlers]);\n\n const surveyModel = useMemo(() => {\n if (!surveyJson) return null;\n const model = new SurveyModel(surveyJson);\n model.applyTheme(surveyTheme);\n model.showQuestionNumbers = 'off';\n model.questionsOnPageMode = 'singlePage';\n return model;\n }, [surveyJson]);\n\n const handleSurveyComplete = useCallback(\n async (sender: any) => {\n const surveyData = sender.data;\n\n try {\n const bidRole = role === 'service_agent' ? EAAgentRoles.serviceProviders : EAAgentRoles.evaluators;\n\n const actionResult = await executeNode({\n node: execution.flowNode,\n actorDid: execution.actorDid,\n context: {\n runtime: execution.runtime,\n ucanManager: execution.ucanManager,\n delegationStore: execution.delegationStore,\n verifySignature: execution.verifySignature,\n rootIssuer: execution.rootIssuer,\n flowUri: execution.flowUri,\n },\n action: async () => {\n const submission = await handlers.submitBid({\n collectionId,\n role: bidRole,\n surveyAnswers: surveyData,\n });\n\n const claimId = (submission as any)?.claimId || (submission as any)?.id || (submission as any)?.bidId || `${execution.flowNode.id}-${Date.now()}`;\n\n return {\n claimId,\n submittedByDid: execution.actorDid,\n evaluationStatus: 'pending',\n payload: submission,\n };\n },\n });\n\n if (!actionResult.success) {\n throw new Error(actionResult.error || 'Authorization failed');\n }\n\n closePanel();\n onSubmitComplete?.();\n } catch (error) {\n setError(error instanceof Error ? error.message : 'Failed to submit bid');\n }\n },\n [handlers, collectionId, role, closePanel, onSubmitComplete, execution]\n );\n\n return {\n surveyModel,\n loading,\n error,\n handleSurveyComplete,\n };\n}\n","import { RoleBadgeConfig, StatusBadgeConfig } from './types';\nimport { surveyTheme } from '../../claim/flow/theme';\n\nexport const ROLE_CONFIG: Record<string, RoleBadgeConfig> = {\n service_agent: { color: 'blue', label: 'Service Agent' },\n SA: { color: 'blue', label: 'Service Agent' },\n evaluation_agent: { color: 'green', label: 'Evaluation Agent' },\n EA: { color: 'green', label: 'Evaluation Agent' },\n};\n\nexport const STATUS_CONFIG: Record<string, StatusBadgeConfig> = {\n pending: { color: 'yellow', label: 'Pending' },\n approved: { color: 'green', label: 'Approved' },\n rejected: { color: 'red', label: 'Rejected' },\n};\n\nexport const SURVEY_THEME_VARIABLES = Object.entries(surveyTheme.cssVariables ?? {}).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n}, {});\n\n// Override survey theme to match BaseTextInput styling and BaseButton\nexport const SURVEY_THEME_BACKGROUND = 'transparent'; // Transparent background for form\nexport const SURVEY_THEME_FOREGROUND = '#f1f3f5'; // Match BaseTextInput text color\n","import React, { useCallback } from 'react';\nimport { Stack, Text, Loader, Center, Alert } from '@mantine/core';\nimport { IconAlertCircle } from '@tabler/icons-react';\nimport { BidItem } from './BidItem';\nimport { useBids } from '../hooks/useBids';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { BidsListProps } from '../types';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\nexport const BidsList: React.FC<BidsListProps> = ({ collectionId, deedId, adminAddress, onRefresh, execution }) => {\n const { closePanel } = usePanelStore();\n const { bids, loading, error, refetch } = useBids(collectionId);\n\n const handleRefresh = useCallback(() => {\n refetch();\n onRefresh();\n }, [refetch, onRefresh]);\n\n const renderContent = () => {\n if (loading) {\n return (\n <Center py=\"md\">\n <Loader size=\"sm\" />\n </Center>\n );\n }\n\n if (error) {\n return (\n <Alert color=\"red\" icon={<IconAlertCircle size={16} />} py=\"xs\">\n <Text size=\"xs\">{error}</Text>\n </Alert>\n );\n }\n\n if (!bids || bids.length === 0) {\n return (\n <Text size=\"xs\" c=\"dimmed\" ta=\"center\" py=\"sm\">\n No bids submitted yet\n </Text>\n );\n }\n\n return (\n <Stack gap=\"xs\" pl=\"md\">\n {bids.map((bid) => (\n <BidItem key={bid.id} bid={bid} deedId={deedId} adminAddress={adminAddress} onRefresh={handleRefresh} execution={execution} />\n ))}\n </Stack>\n );\n };\n\n return (\n <BaseRightPanelLayout isTemplate={false} onClose={closePanel} title=\"Submitted Bids\">\n {renderContent()}\n </BaseRightPanelLayout>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Stack, Text, Badge, Group, ActionIcon } from '@mantine/core';\nimport { IconArrowRight } from '@tabler/icons-react';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport ListItemContainer from '../../../list/ListItemContainer';\nimport { BidViewPanel } from './BidViewPanel';\nimport { useUserProfile } from '../hooks/useUserProfile';\nimport { BidItemProps } from '../types';\nimport { formatDate, getRoleColor, getRoleLabel, getStatusColor, getStatusLabel } from '../utils';\n\nexport const BidItem: React.FC<BidItemProps> = ({ bid, deedId, adminAddress, onRefresh, execution }) => {\n const { userProfile, loading: loadingProfile } = useUserProfile(bid.did);\n\n const bidPanelId = `bid-view-${bid.id}`;\n const bidPanelContent = useMemo(\n () => <BidViewPanel bid={bid} deedId={deedId} adminAddress={adminAddress} onRefresh={onRefresh} execution={execution} />,\n [bid, deedId, adminAddress, onRefresh, execution]\n );\n const { open: openBidPanel } = usePanel(bidPanelId, bidPanelContent);\n\n const displayName = userProfile?.displayname || bid.did;\n const displayDate = bid.created || '';\n const displayStatus = (bid as any).status;\n const displayReason = (bid as any).reason;\n\n return (\n <ListItemContainer isChecked={false} onClick={() => {}}>\n <Stack gap={4} style={{ flex: 1 }}>\n <Group gap=\"xs\">\n <Text size=\"xs\" fw={500}>\n {loadingProfile ? 'Loading...' : displayName}\n </Text>\n {userProfile?.verified && (\n <Text size=\"xs\" c=\"blue\" fw={600} title=\"Verified user\">\n ✓\n </Text>\n )}\n <Badge size=\"xs\" variant=\"light\" color={getRoleColor(bid.role)}>\n {getRoleLabel(bid.role)}\n </Badge>\n </Group>\n <Text size=\"xs\" c=\"dimmed\">\n Submitted: {formatDate(displayDate)}\n </Text>\n {displayStatus === 'rejected' && displayReason && (\n <Text size=\"xs\" c=\"red\">\n Reason: {displayReason}\n </Text>\n )}\n </Stack>\n\n <Group gap=\"xs\">\n {displayStatus && (\n <Badge size=\"sm\" color={getStatusColor(displayStatus)}>\n {getStatusLabel(displayStatus)}\n </Badge>\n )}\n <ActionIcon variant=\"subtle\" size=\"lg\" onClick={openBidPanel}>\n <IconArrowRight size={20} />\n </ActionIcon>\n </Group>\n </ListItemContainer>\n );\n};\n","import React, { useMemo, useState } from 'react';\nimport { Loader, Stack, Text, Badge, Button, Group, Modal, Alert } from '@mantine/core';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { Survey } from '@ixo/surveys';\nimport { IconCheck, IconX, IconAlertCircle } from '@tabler/icons-react';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport { useBidView } from '../hooks/useBidView';\nimport { useBidActions } from '../hooks/useBidActions';\nimport { BidViewPanelProps } from '../types';\nimport { getRoleColor, getRoleLabel } from '../utils';\nimport { SURVEY_THEME_BACKGROUND, SURVEY_THEME_FOREGROUND, SURVEY_THEME_VARIABLES } from '../constants';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\ntype CSSVariableStyles = React.CSSProperties;\n\nexport const BidViewPanel: React.FC<BidViewPanelProps> = ({ bid, deedId, adminAddress, onRefresh, execution }) => {\n const { closePanel } = usePanelStore();\n const { surveyModel, loading, error } = useBidView(bid, deedId);\n const { approveBid, rejectBid, loading: actionLoading, error: actionError, setError: setActionError } = useBidActions(bid, deedId, adminAddress, execution, onRefresh);\n\n const [rejectModalOpen, setRejectModalOpen] = useState(false);\n const [rejectReason, setRejectReason] = useState('');\n\n const surveyContainerStyle = useMemo<CSSVariableStyles>(\n () => ({\n flex: 1,\n overflow: 'auto',\n backgroundColor: SURVEY_THEME_BACKGROUND,\n color: SURVEY_THEME_FOREGROUND,\n ...SURVEY_THEME_VARIABLES,\n }),\n []\n );\n\n const handleRejectClick = () => {\n setRejectReason('');\n setActionError(null);\n setRejectModalOpen(true);\n };\n\n const handleRejectConfirm = async () => {\n await rejectBid(rejectReason);\n if (!actionError) {\n setRejectModalOpen(false);\n }\n };\n\n return (\n <BaseRightPanelLayout onClose={closePanel} title={`${getRoleLabel(bid.role)} Bid`} isTemplate={false} captionContent={<Badge size=\"sm\" color={getRoleColor(bid.role)} />}>\n {!loading && !error && (\n <Stack gap=\"md\" mb=\"md\">\n {actionError && (\n <Alert color=\"red\" icon={<IconAlertCircle size={16} />} onClose={() => setActionError(null)} withCloseButton>\n {actionError}\n </Alert>\n )}\n <Group justify=\"flex-end\">\n <Button variant=\"outline\" color=\"red\" leftSection={<IconX size={16} />} onClick={handleRejectClick} loading={actionLoading} disabled={actionLoading}>\n Reject\n </Button>\n <Button variant=\"filled\" color=\"green\" leftSection={<IconCheck size={16} />} onClick={approveBid} loading={actionLoading} disabled={actionLoading}>\n Approve\n </Button>\n </Group>\n </Stack>\n )}\n\n <div style={surveyContainerStyle}>\n {loading && (\n <Stack align=\"center\" justify=\"center\" style={{ height: '100%' }}>\n <Loader size=\"lg\" />\n <Text size=\"sm\" c=\"dimmed\">\n Loading bid details...\n </Text>\n </Stack>\n )}\n {error && (\n <Stack align=\"center\" justify=\"center\" style={{ height: '100%', padding: '1rem' }}>\n <Text size=\"sm\" c=\"red\">\n {error}\n </Text>\n </Stack>\n )}\n {!loading && !error && surveyModel && <Survey model={surveyModel} />}\n </div>\n\n <Modal opened={rejectModalOpen} onClose={() => setRejectModalOpen(false)} title=\"Reject Bid\" centered>\n <Stack gap=\"md\">\n <Text size=\"sm\">Please provide a reason for rejecting this bid:</Text>\n <BaseTextArea placeholder=\"Enter rejection reason...\" value={rejectReason} onChange={(e) => setRejectReason(e.currentTarget.value)} minRows={3} />\n <Group justify=\"flex-end\">\n <Button variant=\"outline\" onClick={() => setRejectModalOpen(false)} disabled={actionLoading}>\n Cancel\n </Button>\n <Button color=\"red\" onClick={handleRejectConfirm} loading={actionLoading} disabled={!rejectReason.trim()}>\n Reject Bid\n </Button>\n </Group>\n </Stack>\n </Modal>\n </BaseRightPanelLayout>\n );\n};\n","import { useState, useEffect, useMemo } from 'react';\nimport { useBlocknoteHandlers, Bid } from '@/mantine/context/BlocknoteContext';\nimport { SurveyModel } from '@ixo/surveys';\nimport { surveyTheme } from '../../../claim/flow/theme';\nimport { parseBidData } from '../utils';\n\nexport function useBidView(bid: Bid, deedId: string) {\n const handlers = useBlocknoteHandlers();\n const [surveyJson, setSurveyJson] = useState<any>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const fetchSurveyTemplate = async () => {\n try {\n setLoading(true);\n setError(null);\n\n let result;\n if (bid.role === 'service_agent' || bid.role === 'SA') {\n result = await handlers.getBidContributorSurveyTemplate(deedId);\n } else if (bid.role === 'evaluation_agent' || bid.role === 'EA') {\n result = await handlers.getBidEvaluatorSurveyTemplate(deedId);\n } else {\n setError(`Unknown role: ${bid.role}`);\n setLoading(false);\n return;\n }\n\n if (result) {\n setSurveyJson(result.surveyTemplate);\n } else {\n setError('No survey template found for this role');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load survey template');\n } finally {\n setLoading(false);\n }\n };\n\n fetchSurveyTemplate();\n }, [deedId, bid.role, handlers]);\n\n const surveyModel = useMemo(() => {\n if (!surveyJson) return null;\n const model = new SurveyModel(surveyJson);\n model.applyTheme(surveyTheme);\n model.showQuestionNumbers = 'off';\n model.questionsOnPageMode = 'singlePage';\n model.mode = 'display';\n model.data = parseBidData(bid.data);\n return model;\n }, [surveyJson, bid.data]);\n\n return { surveyModel, loading, error };\n}\n","import { ClaimCollection } from '@/mantine/context/BlocknoteContext';\nimport { ROLE_CONFIG, STATUS_CONFIG } from './constants';\n\nexport function formatDate(dateString: string): string {\n try {\n const date = new Date(dateString);\n return date.toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n } catch {\n return dateString;\n }\n}\n\nexport function getRoleLabel(role: string): string {\n return ROLE_CONFIG[role]?.label || role;\n}\n\nexport function getRoleColor(role: string): string {\n return ROLE_CONFIG[role]?.color || 'gray';\n}\n\nexport function getStatusLabel(status: string): string {\n return STATUS_CONFIG[status]?.label || status;\n}\n\nexport function getStatusColor(status: string): string {\n return STATUS_CONFIG[status]?.color || 'gray';\n}\n\nexport function getCollectionName(collection: ClaimCollection): string {\n return collection.protocol?.profile?.name || collection.name || 'Unnamed Collection';\n}\n\nexport function parseBidData(data: any): any {\n try {\n return typeof data === 'string' ? JSON.parse(data) : data;\n } catch {\n return data;\n }\n}\n\n// Re-export from shared location\nexport { isClientFulfillmentError } from '@/mantine/hooks/utils';\n","import { useState, useCallback } from 'react';\nimport { useBlocknoteHandlers, Bid } from '@/mantine/context/BlocknoteContext';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { executeNode } from '@/core/lib/flowEngine';\nimport { FlowExecutionContextProps } from '../types';\n\nexport function useBidActions(bid: Bid, deedId: string, adminAddress: string, execution: FlowExecutionContextProps, onRefresh?: () => void) {\n const handlers = useBlocknoteHandlers();\n const { closePanel } = usePanelStore();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const approveBid = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n const outcome = await executeNode({\n node: execution.flowNode,\n actorDid: execution.actorDid,\n context: {\n runtime: execution.runtime,\n ucanManager: execution.ucanManager,\n delegationStore: execution.delegationStore,\n verifySignature: execution.verifySignature,\n rootIssuer: execution.rootIssuer,\n flowUri: execution.flowUri,\n },\n action: async () => {\n if (bid.role === 'service_agent' || bid.role === 'SA') {\n await handlers.approveServiceAgentApplication({\n adminAddress,\n collectionId: bid.collection,\n agentQuota: 30,\n deedDid: deedId,\n currentUserAddress: bid.address,\n });\n } else if (bid.role === 'evaluation_agent' || bid.role === 'EA') {\n await handlers.approveEvaluatorApplication({\n adminAddress,\n collectionId: bid.collection,\n deedDid: deedId,\n evaluatorAddress: bid.address,\n agentQuota: 10,\n });\n } else {\n throw new Error(`Unknown role: ${bid.role}`);\n }\n\n await handlers.approveBid({\n bidId: bid.id,\n collectionId: bid.collection,\n did: bid.did,\n });\n\n return {\n claimId: bid.id,\n submittedByDid: execution.actorDid,\n evaluationStatus: 'approved',\n };\n },\n });\n\n if (!outcome.success) {\n throw new Error(outcome.error || 'Authorization failed');\n }\n\n closePanel();\n onRefresh?.();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to approve bid');\n } finally {\n setLoading(false);\n }\n }, [bid, deedId, adminAddress, handlers, closePanel, onRefresh, execution]);\n\n const rejectBid = useCallback(\n async (reason: string) => {\n if (!reason.trim()) {\n setError('Please provide a reason for rejection');\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n\n const outcome = await executeNode({\n node: execution.flowNode,\n actorDid: execution.actorDid,\n context: {\n runtime: execution.runtime,\n ucanManager: execution.ucanManager,\n delegationStore: execution.delegationStore,\n verifySignature: execution.verifySignature,\n rootIssuer: execution.rootIssuer,\n flowUri: execution.flowUri,\n },\n action: async () => {\n await handlers.rejectBid({\n bidId: bid.id,\n collectionId: bid.collection,\n did: deedId,\n reason,\n });\n\n return {\n claimId: bid.id,\n submittedByDid: execution.actorDid,\n evaluationStatus: 'rejected',\n };\n },\n });\n\n if (!outcome.success) {\n throw new Error(outcome.error || 'Authorization failed');\n }\n\n closePanel();\n onRefresh?.();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to reject bid');\n } finally {\n setLoading(false);\n }\n },\n [bid, deedId, handlers, closePanel, onRefresh, execution]\n );\n\n return { approveBid, rejectBid, loading, error, setError };\n}\n","import { useState, useEffect } from 'react';\nimport { useBlocknoteHandlers, IUserMatrixProfile } from '@/mantine/context/BlocknoteContext';\n\nexport function useUserProfile(did: string | undefined) {\n const handlers = useBlocknoteHandlers();\n const [userProfile, setUserProfile] = useState<IUserMatrixProfile | null>(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const fetchUserProfile = async () => {\n if (!did) return;\n\n try {\n setLoading(true);\n const profile = await handlers.getMatrixInfoPerDid(did);\n setUserProfile(profile || null);\n } catch (error) {\n setUserProfile(null);\n } finally {\n setLoading(false);\n }\n };\n\n fetchUserProfile();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [did]);\n\n return { userProfile, loading };\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useBlocknoteHandlers, Bid } from '@/mantine/context/BlocknoteContext';\n\nexport function useBids(collectionId: string) {\n const handlers = useBlocknoteHandlers();\n const [bids, setBids] = useState<Bid[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchBids = useCallback(async () => {\n if (!collectionId) {\n setLoading(false);\n return;\n }\n\n try {\n setLoading(true);\n setError(null);\n const response = await handlers.queryBids({ collectionId });\n setBids(Array.isArray(response?.data) ? response.data : []);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch bids');\n setBids([]);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [collectionId]);\n\n useEffect(() => {\n fetchBids();\n }, [fetchBids]);\n\n return { bids, loading, error, refetch: fetchBids };\n}\n","import React from 'react';\n\ninterface UserCheckProps {\n size?: number | string;\n color?: string;\n style?: React.CSSProperties;\n}\n\nconst UserCheck: React.FC<UserCheckProps> = ({ size = 24, color = 'currentColor', style }) => {\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={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-user-check-icon lucide-user-check\"\n style={style}\n >\n <path d=\"m16 11 2 2 4-4\" />\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n </svg>\n );\n};\n\nexport default UserCheck;\n","import React from 'react';\n\ninterface UserPlusProps {\n size?: number | string;\n color?: string;\n style?: React.CSSProperties;\n}\n\nconst UserPlus: React.FC<UserPlusProps> = ({ size = 24, color = 'currentColor', style }) => {\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={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-user-plus-icon lucide-user-plus\"\n style={style}\n >\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <line x1=\"19\" x2=\"19\" y1=\"8\" y2=\"14\" />\n <line x1=\"22\" x2=\"16\" y1=\"11\" y2=\"11\" />\n </svg>\n );\n};\n\nexport default UserPlus;\n","import React from 'react';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { EvaluatorTemplateView } from './template/TemplateView';\nimport { EvaluatorFlowView } from './flow/FlowView';\n\nexport type EvaluatorBlockProps = IxoBlockProps;\n\nexport function EvaluatorBlock({ editor, block }: EvaluatorBlockProps) {\n const { docType } = useBlocknoteContext();\n\n if (docType === 'template') {\n return <EvaluatorTemplateView editor={editor} block={block} />;\n }\n\n return <EvaluatorFlowView editor={editor} block={block} />;\n}\n","import React, { useMemo } from 'react';\nimport { Group, Stack, Text } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport { TemplateConfig } from './TemplateConfig';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\n\nconst EVALUATOR_TEMPLATE_PANEL_ID = 'evaluator-template-panel';\n\nexport const EvaluatorTemplateView = ({ editor, block }: IxoBlockProps) => {\n const panelId = `${EVALUATOR_TEMPLATE_PANEL_ID}-${block.id}`;\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n const { open } = usePanel(panelId, panelContent);\n\n return (\n <BaseContainer onClick={open}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n {getIcon('checklist', block.props.icon)}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {block.props.title || 'Evaluator Title'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.description || 'Evaluator description'}\n </Text>\n </Stack>\n </Group>\n </Group>\n </BaseContainer>\n );\n};\n","import React, { useCallback } from 'react';\nimport { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { GeneralTab } from './GeneralTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport BaseRightPanelLayout from '@/mantine/components/Layouts/BaseRightPanelLayout';\n\nexport const TemplateConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n\n const updateProp = useCallback(\n (key: string, value: any) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n [key]: value,\n },\n });\n },\n [editor, block]\n );\n\n return (\n <BaseRightPanelLayout title=\"Evaluator Settings\" onClose={closePanel}>\n <ReusablePanel\n extraTabs={[\n {\n label: 'General',\n value: 'general',\n content: (\n <GeneralTab\n title={block.props.title || ''}\n description={block.props.description || ''}\n deedDid={block.props.deedDid || ''}\n selectedCollections={block.props.selectedCollections || '[]'}\n adminAddress={block.props.adminAddress || ''}\n onTitleChange={(value) => updateProp('title', value)}\n onDescriptionChange={(value) => updateProp('description', value)}\n onDeedDidChange={(value) => updateProp('deedDid', value)}\n onSelectedCollectionsChange={(value) => updateProp('selectedCollections', value)}\n onAdminAddressChange={(value) => updateProp('adminAddress', value)}\n />\n ),\n },\n ]}\n context={{ editor, block }}\n />\n </BaseRightPanelLayout>\n );\n};\n","import React, { useEffect, useState, useCallback, useMemo } from 'react';\nimport { CollectionSelector } from '@/mantine/components/CollectionSelector';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseSection from '@/mantine/components/Base/BaseSection';\n\ninterface GeneralTabProps {\n title: string;\n description: string;\n deedDid: string;\n selectedCollections: string;\n adminAddress?: string;\n onTitleChange: (value: string) => void;\n onDescriptionChange: (value: string) => void;\n onDeedDidChange: (value: string) => void;\n onSelectedCollectionsChange: (value: string) => void;\n onAdminAddressChange?: (value: string) => void;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({\n title,\n description,\n deedDid,\n selectedCollections,\n adminAddress,\n onTitleChange,\n onDescriptionChange,\n onDeedDidChange,\n onSelectedCollectionsChange,\n onAdminAddressChange,\n}) => {\n // Use local state for real-time updates, but sync with block props\n const [localTitle, setLocalTitle] = useState(title || '');\n const [localDescription, setLocalDescription] = useState(description || '');\n\n // Sync local state with props when they change\n useEffect(() => {\n setLocalTitle(title || '');\n }, [title]);\n\n useEffect(() => {\n setLocalDescription(description || '');\n }, [description]);\n\n const parsedSelectedCollections = useMemo(() => {\n try {\n return JSON.parse(selectedCollections || '[]') as string[];\n } catch {\n return [];\n }\n }, [selectedCollections]);\n\n const handleCollectionsChange = useCallback(\n (collections: string[]) => {\n const stringified = JSON.stringify(collections || []);\n onSelectedCollectionsChange(stringified);\n },\n [onSelectedCollectionsChange]\n );\n\n const handleAdminAddressChange = useCallback(\n (adminAddress: string) => {\n if (onAdminAddressChange) {\n onAdminAddressChange(adminAddress);\n }\n },\n [onAdminAddressChange]\n );\n\n return (\n <BaseSection>\n <BaseTextInput\n label=\"Title\"\n placeholder=\"e.g. Evaluator Title\"\n value={localTitle}\n onChange={(event) => {\n const newTitle = event.currentTarget.value;\n setLocalTitle(newTitle);\n onTitleChange(newTitle);\n }}\n />\n\n <BaseTextArea\n label=\"Description\"\n placeholder=\"Describe what this evaluator block is about\"\n minRows={3}\n value={localDescription}\n onChange={(event) => {\n const newDescription = event.currentTarget.value;\n setLocalDescription(newDescription);\n onDescriptionChange(newDescription);\n }}\n />\n\n <CollectionSelector\n did={deedDid}\n selectedCollections={parsedSelectedCollections}\n onDidChange={onDeedDidChange}\n onCollectionsChange={handleCollectionsChange}\n onAdminAddressChange={handleAdminAddressChange}\n currentAdminAddress={adminAddress}\n />\n </BaseSection>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Stack, Text, Loader, Center, Alert, Title, Flex, ActionIcon } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { IconSettings, IconRefresh, IconAlertCircle } from '@tabler/icons-react';\nimport { useBlocknoteContext } from '@/mantine/context/BlocknoteContext';\nimport { useCurrentUser } from '@/mantine/hooks/useCurrentUser';\nimport { useCollections } from '@/mantine/hooks/useCollections';\nimport { ClaimCollectionsList } from './ClaimCollectionsList';\n\nexport const EvaluatorFlowView = ({ editor, block }: IxoBlockProps) => {\n const { editable } = useBlocknoteContext();\n const userAddress = useCurrentUser();\n\n const selectedCollectionIds = useMemo(() => {\n try {\n const parsed = JSON.parse(block.props.selectedCollections || '[]') as string[];\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }, [block.props.selectedCollections]);\n\n const did = block.props.deedDid;\n const adminAddress = block.props.adminAddress || '';\n\n const { collections, loading, error, refetch } = useCollections(did, selectedCollectionIds, block, editor);\n\n if (!did) {\n return (\n <Center py=\"xl\">\n <Text size=\"sm\" c=\"dimmed\">\n Please configure the evaluator block in template mode first\n </Text>\n </Center>\n );\n }\n\n if (selectedCollectionIds.length === 0) {\n return (\n <Center py=\"xl\">\n <Text size=\"sm\" c=\"dimmed\">\n No claim collections selected\n </Text>\n </Center>\n );\n }\n\n return (\n <Stack w=\"100%\">\n <Flex px={5} align=\"center\" justify=\"space-between\">\n <Title order={4}>Evaluate Claims</Title>\n <Flex gap=\"xs\">\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={refetch} loading={loading}>\n <IconRefresh size={18} />\n </ActionIcon>\n {editable && (\n <ActionIcon variant=\"subtle\" size=\"sm\">\n <IconSettings size={18} />\n </ActionIcon>\n )}\n </Flex>\n </Flex>\n\n {loading ? (\n <Center py=\"xl\">\n <Loader size=\"md\" />\n </Center>\n ) : error ? (\n <Alert color=\"red\" title=\"Failed to load collections\" icon={<IconAlertCircle size={18} />}>\n <Text size=\"sm\">{error}</Text>\n </Alert>\n ) : (\n <ClaimCollectionsList collections={collections} deedId={did} adminAddress={adminAddress} userAddress={userAddress} onRefresh={refetch} />\n )}\n </Stack>\n );\n};\n","import React, { useMemo, useEffect, useRef } from 'react';\nimport { Stack, Text, ActionIcon, Tooltip, Loader, Center } from '@mantine/core';\nimport { ClaimCollection, AgentRole, useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport ListItemContainer from '../../list/ListItemContainer';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { useUserRoles } from '@/mantine/hooks/useUserRoles';\nimport { ClaimsList } from './ClaimsList';\nimport { IconArrowRight } from '@tabler/icons-react';\n\ninterface ClaimCollectionsListProps {\n collections: ClaimCollection[];\n deedId: string;\n adminAddress: string;\n userAddress: string;\n onRefresh: () => void;\n}\n\ninterface CollectionItemProps {\n collection: ClaimCollection;\n deedId: string;\n adminAddress: string;\n userRole: AgentRole | null;\n onRefresh: () => void;\n}\n\nconst CollectionItem: React.FC<CollectionItemProps> = ({ collection, deedId, adminAddress, userRole, onRefresh }) => {\n const { getCurrentUser } = useBlocknoteHandlers();\n const getCurrentUserRef = useRef(getCurrentUser);\n useEffect(() => {\n getCurrentUserRef.current = getCurrentUser;\n }, [getCurrentUser]);\n const currentUser = getCurrentUserRef.current();\n\n const getCollectionName = (collection: ClaimCollection) => {\n return collection.protocol?.profile?.name || collection.name || 'Unnamed Collection';\n };\n\n // Check if user is an evaluator for this collection\n const isEvaluator = userRole === AgentRole.Evaluator;\n const canEvaluateClaims = isEvaluator;\n\n // Create panel for viewing claims list\n const claimsPanelId = `evaluator-claims-list-${collection.id}`;\n const collectionName = getCollectionName(collection);\n const claimsPanelContent = useMemo(\n () => (\n <ClaimsList\n collectionId={collection.id}\n collectionName={collectionName}\n deedId={deedId}\n adminAddress={adminAddress}\n userAddress={currentUser.address}\n onEvaluationComplete={onRefresh}\n />\n ),\n [collection.id, collectionName, deedId, adminAddress, currentUser.address, onRefresh]\n );\n const { opened, open: openClaimsPanel } = usePanel(claimsPanelId, claimsPanelContent);\n\n const handleClick = () => {\n if (canEvaluateClaims) {\n openClaimsPanel();\n }\n };\n\n return (\n <div style={{ opacity: canEvaluateClaims ? 1 : 0.5 }}>\n <ListItemContainer tooltip=\"You need to be an evaluator agent to review claims\" onClick={handleClick} disabled={!canEvaluateClaims} isChecked={opened}>\n <Stack gap={4} style={{ flex: 1 }}>\n <Text size=\"sm\" fw={500} c={canEvaluateClaims ? undefined : 'dimmed'}>\n {getCollectionName(collection)}\n </Text>\n {collection.description && (\n <Text size=\"xs\" c=\"dimmed\">\n {collection.description}\n </Text>\n )}\n </Stack>\n\n <Tooltip label=\"You need to be an evaluator agent to review claims\" disabled={canEvaluateClaims} position=\"left\" withArrow>\n <ActionIcon variant=\"subtle\" size=\"lg\" onClick={handleClick} disabled={!canEvaluateClaims} style={{ cursor: canEvaluateClaims ? 'pointer' : 'not-allowed' }}>\n <IconArrowRight size={20} />\n </ActionIcon>\n </Tooltip>\n </ListItemContainer>\n </div>\n );\n};\n\nexport const ClaimCollectionsList: React.FC<ClaimCollectionsListProps> = ({ collections, deedId, adminAddress, userAddress, onRefresh }) => {\n const { userRoles, loading: loadingRoles } = useUserRoles(collections, userAddress, adminAddress, deedId);\n\n if (!collections || collections.length === 0) {\n return (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"md\">\n No claim collections found\n </Text>\n );\n }\n\n if (loadingRoles) {\n return (\n <Center py=\"md\">\n <Loader size=\"sm\" />\n </Center>\n );\n }\n\n return (\n <Stack gap=\"md\" px={5}>\n {collections.map((collection) => (\n <CollectionItem key={collection.id} collection={collection} deedId={deedId} adminAddress={adminAddress} userRole={userRoles[collection.id] || null} onRefresh={onRefresh} />\n ))}\n </Stack>\n );\n};\n","import React, { useState, useEffect, useCallback, useMemo } from 'react';\nimport { Paper, CloseButton, Title, Loader, Stack, Text, ActionIcon, Alert, Badge, Group, Button, Divider } from '@mantine/core';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { useBlocknoteHandlers, Claim, IUserMatrixProfile } from '@/mantine/context/BlocknoteContext';\nimport { IconAlertCircle, IconArrowRight, IconRefresh, IconArrowLeft } from '@tabler/icons-react';\nimport ListItemContainer from '../../list/ListItemContainer';\nimport { Survey, SurveyModel } from '@ixo/surveys';\nimport { surveyTheme } from './theme';\n\ntype CSSVariableStyles = React.CSSProperties;\ntype ViewMode = 'list' | 'survey';\n\nconst SURVEY_THEME_VARIABLES = Object.entries(surveyTheme.cssVariables ?? {}).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n}, {});\nconst SURVEY_THEME_BACKGROUND = SURVEY_THEME_VARIABLES['--sjs-general-backcolor'] ?? '#050505';\nconst SURVEY_THEME_FOREGROUND = SURVEY_THEME_VARIABLES['--sjs-general-forecolor'] ?? '#ffffff';\n\ninterface ClaimsListProps {\n collectionId: string;\n collectionName: string;\n deedId: string;\n adminAddress: string;\n userAddress: string;\n onEvaluationComplete?: () => void;\n}\n\nexport const ClaimsList: React.FC<ClaimsListProps> = ({ collectionId, collectionName, deedId, adminAddress, onEvaluationComplete }) => {\n const { closePanel } = usePanelStore();\n const handlers = useBlocknoteHandlers();\n const [viewMode, setViewMode] = useState<ViewMode>('list');\n const [claims, setClaims] = useState<Claim[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [selectedClaim, setSelectedClaim] = useState<Claim | null>(null);\n const [claimData, setClaimData] = useState<any>(null);\n const [surveyJson, setSurveyJson] = useState<any>(null);\n const [surveyLoading, setSurveyLoading] = useState(false);\n const [surveyError, setSurveyError] = useState<string | null>(null);\n const [evaluating, setEvaluating] = useState(false);\n\n // Fetch claims for the collection\n const fetchClaims = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n const result = await handlers.getClaimsPerCollectionId({\n collectionId,\n });\n setClaims(Array.isArray(result) ? result : []);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch claims');\n setClaims([]);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [collectionId]);\n\n useEffect(() => {\n fetchClaims();\n }, [fetchClaims]);\n\n // Fetch claim data and survey template when a claim is selected\n const fetchClaimAndSurvey = useCallback(\n async (claim: Claim) => {\n try {\n setSurveyLoading(true);\n setSurveyError(null);\n\n // Fetch claim data\n const claimDataResult = await handlers.getClaimData(collectionId, claim.claimId);\n setClaimData(claimDataResult || null);\n\n // Fetch contributor survey template for viewing\n const surveyResult = await handlers.getBidContributorSurveyTemplate(deedId);\n if (surveyResult?.surveyTemplate) {\n setSurveyJson(surveyResult.surveyTemplate);\n } else {\n setSurveyError('No survey template found for this deed');\n }\n } catch (err) {\n setSurveyError(err instanceof Error ? err.message : 'Failed to load claim data');\n setClaimData(null);\n setSurveyJson(null);\n } finally {\n setSurveyLoading(false);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [collectionId, deedId]\n );\n\n const handleViewClaim = useCallback(\n (claim: Claim) => {\n setSelectedClaim(claim);\n fetchClaimAndSurvey(claim);\n setViewMode('survey');\n },\n [fetchClaimAndSurvey]\n );\n\n const handleBackToList = useCallback(() => {\n setViewMode('list');\n setSelectedClaim(null);\n setClaimData(null);\n setSurveyJson(null);\n setSurveyError(null);\n setEvaluating(false);\n // Refresh claims after potentially evaluating\n fetchClaims();\n }, [fetchClaims]);\n\n const surveyModel = useMemo(() => {\n if (!surveyJson || !claimData) return null;\n const model = new SurveyModel(surveyJson);\n\n // Apply theme\n model.applyTheme(surveyTheme);\n\n // Configure model settings\n model.showQuestionNumbers = 'off';\n model.questionsOnPageMode = 'singlePage';\n\n // Set survey to read-only mode\n model.mode = 'display';\n\n // Load the submitted answers\n if (claimData) {\n model.data = claimData;\n }\n\n return model;\n }, [surveyJson, claimData]);\n\n const surveyContainerStyle = useMemo<CSSVariableStyles>(\n () => ({\n flex: 1,\n overflow: 'auto',\n backgroundColor: SURVEY_THEME_BACKGROUND,\n color: SURVEY_THEME_FOREGROUND,\n ...SURVEY_THEME_VARIABLES,\n padding: '1rem',\n }),\n []\n );\n\n const handleApprove = useCallback(async () => {\n if (!selectedClaim) return;\n\n try {\n setEvaluating(true);\n setSurveyError(null);\n\n // Get current user address (evaluator)\n const currentUser = handlers.getCurrentUser();\n\n // Evaluate claim with approval\n await handlers.evaluateClaim(\n currentUser.address, // granteeAddress (evaluator address)\n deedId, // deed DID\n {\n claimId: selectedClaim.claimId,\n collectionId: collectionId,\n adminAddress: adminAddress,\n status: undefined, // Optional - pass undefined for now\n verificationProof: '', // Required - empty string for now\n amount: undefined, // Optional - pass undefined for now\n }\n );\n\n // Go back to list\n handleBackToList();\n onEvaluationComplete?.();\n } catch (error) {\n setSurveyError(error instanceof Error ? error.message : 'Failed to approve claim');\n setEvaluating(false);\n }\n }, [selectedClaim, handlers, deedId, collectionId, adminAddress, handleBackToList, onEvaluationComplete]);\n\n const handleReject = useCallback(async () => {\n if (!selectedClaim) return;\n\n try {\n setEvaluating(true);\n setSurveyError(null);\n\n // TODO: Call reject handler when available\n\n // Go back to list\n handleBackToList();\n onEvaluationComplete?.();\n } catch (error) {\n setSurveyError(error instanceof Error ? error.message : 'Failed to reject claim');\n } finally {\n setEvaluating(false);\n }\n }, [selectedClaim, handleBackToList, onEvaluationComplete]);\n\n return (\n <Paper\n p=\"md\"\n shadow=\"sm\"\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '1rem',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n {viewMode === 'survey' && (\n <ActionIcon variant=\"subtle\" onClick={handleBackToList}>\n <IconArrowLeft size={20} />\n </ActionIcon>\n )}\n <Title order={3}>{viewMode === 'list' ? `${collectionName} - Claims` : `Evaluate Claim #${selectedClaim?.claimId.slice(-8)}`}</Title>\n {viewMode === 'list' && !loading && claims.length > 0 && (\n <Badge size=\"lg\" variant=\"light\">\n {claims.length}\n </Badge>\n )}\n </div>\n <Group gap=\"xs\">\n {viewMode === 'list' && (\n <ActionIcon variant=\"subtle\" onClick={fetchClaims} loading={loading} title=\"Refresh claims\">\n <IconRefresh size={18} />\n </ActionIcon>\n )}\n <CloseButton onClick={closePanel} />\n </Group>\n </div>\n\n {/* Content with transitions */}\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n position: 'relative',\n }}\n >\n {/* List View */}\n <div\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n transform: viewMode === 'list' ? 'translateX(0)' : 'translateX(-100%)',\n opacity: viewMode === 'list' ? 1 : 0,\n transition: 'transform 0.3s ease-out, opacity 0.3s ease-out',\n pointerEvents: viewMode === 'list' ? 'auto' : 'none',\n }}\n >\n <Stack gap=\"md\" style={{ flex: 1 }}>\n {/* Claims List */}\n {loading ? (\n <Stack align=\"center\" justify=\"center\" style={{ flex: 1 }}>\n <Loader size=\"lg\" />\n <Text size=\"sm\" c=\"dimmed\">\n Loading claims...\n </Text>\n </Stack>\n ) : error ? (\n <Alert color=\"red\" title=\"Failed to load claims\" icon={<IconAlertCircle size={18} />}>\n <Text size=\"sm\">{error}</Text>\n </Alert>\n ) : claims.length === 0 ? (\n <Stack align=\"center\" justify=\"center\" style={{ flex: 1 }}>\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\">\n No claims found for this collection.\n </Text>\n </Stack>\n ) : (\n <Stack gap=\"xs\">\n {claims.map((claim) => (\n <ClaimListItem key={claim.claimId} claim={claim} onViewClaim={() => handleViewClaim(claim)} />\n ))}\n </Stack>\n )}\n </Stack>\n </div>\n\n {/* Survey View */}\n <div\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n transform: viewMode === 'survey' ? 'translateX(0)' : 'translateX(100%)',\n opacity: viewMode === 'survey' ? 1 : 0,\n transition: 'transform 0.3s ease-out, opacity 0.3s ease-out',\n pointerEvents: viewMode === 'survey' ? 'auto' : 'none',\n }}\n >\n {surveyLoading ? (\n <Stack align=\"center\" justify=\"center\" style={{ flex: 1 }}>\n <Loader size=\"lg\" />\n <Text size=\"sm\" c=\"dimmed\">\n Loading claim data...\n </Text>\n </Stack>\n ) : surveyError ? (\n <Stack style={{ flex: 1 }}>\n <Alert color=\"red\" title=\"Failed to load claim data\" icon={<IconAlertCircle size={18} />}>\n <Text size=\"sm\">{surveyError}</Text>\n </Alert>\n </Stack>\n ) : (\n <>\n <div style={surveyContainerStyle}>{surveyModel && <Survey model={surveyModel} />}</div>\n\n <Divider my=\"md\" />\n\n {/* Action Buttons */}\n <Stack gap=\"sm\">\n <Button color=\"green\" onClick={handleApprove} loading={evaluating} disabled={evaluating}>\n Approve Claim\n </Button>\n <Button color=\"red\" variant=\"outline\" onClick={handleReject} loading={evaluating} disabled={evaluating}>\n Reject Claim\n </Button>\n </Stack>\n </>\n )}\n </div>\n </div>\n </Paper>\n );\n};\n\ninterface ClaimListItemProps {\n claim: Claim;\n onViewClaim: () => void;\n}\n\nconst ClaimListItem: React.FC<ClaimListItemProps> = ({ claim, onViewClaim }) => {\n const handlers = useBlocknoteHandlers();\n const [userProfile, setUserProfile] = useState<IUserMatrixProfile | null>(null);\n const [loadingProfile, setLoadingProfile] = useState(false);\n\n // Fetch user profile based on agentDid\n useEffect(() => {\n const fetchUserProfile = async () => {\n if (!claim.agentDid) return;\n\n try {\n setLoadingProfile(true);\n const profile = await handlers.getMatrixInfoPerDid(claim.agentDid);\n setUserProfile(profile || null);\n } catch (error) {\n // Keep userProfile as null on error\n setUserProfile(null);\n } finally {\n setLoadingProfile(false);\n }\n };\n\n fetchUserProfile();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [claim.agentDid]);\n\n // Derive claim status from paymentsStatus or status field\n const getClaimStatus = (claim: Claim): { status: string; color: string } => {\n // Check if claim has a direct status field\n if ('status' in claim && claim.status) {\n const status = String(claim.status).toLowerCase();\n switch (status) {\n case 'approved':\n return { status: 'Approved', color: 'green' };\n case 'rejected':\n return { status: 'Rejected', color: 'red' };\n case 'pending':\n return { status: 'Pending', color: 'yellow' };\n default:\n return { status: 'Unknown', color: 'gray' };\n }\n }\n\n // Derive status from paymentsStatus if available\n if ('paymentsStatus' in claim && claim.paymentsStatus) {\n const paymentsStatus = claim.paymentsStatus as any;\n if (paymentsStatus.approval === 'PAID') {\n return { status: 'Approved', color: 'green' };\n }\n if (paymentsStatus.rejection === 'PAID') {\n return { status: 'Rejected', color: 'red' };\n }\n if (paymentsStatus.evaluation === 'PAID' || paymentsStatus.submission === 'PAID') {\n return { status: 'Pending', color: 'yellow' };\n }\n }\n\n // Default to pending\n return { status: 'Pending', color: 'yellow' };\n };\n\n const formatDate = (dateString?: string) => {\n if (!dateString) return 'N/A';\n try {\n return new Date(dateString).toLocaleDateString();\n } catch {\n return dateString;\n }\n };\n\n const claimStatus = getClaimStatus(claim);\n\n // Display username or fallback to address\n const displayName = userProfile?.displayname || (claim.agentAddress ? `${claim.agentAddress.slice(0, 12)}...` : 'Unknown');\n\n return (\n <div\n onClick={onViewClaim}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onViewClaim();\n }\n }}\n role=\"button\"\n tabIndex={0}\n style={{ cursor: 'pointer' }}\n >\n <ListItemContainer isChecked={false} onClick={() => {}}>\n <Stack gap={4} style={{ flex: 1 }}>\n <Text size=\"sm\" fw={500}>\n Claim #{claim.claimId.slice(-8)}\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n Submitted: {formatDate((claim as any).submissionDate || (claim as any).submittedAt)}\n </Text>\n {claim.agentDid && (\n <Group gap={4}>\n <Text size=\"xs\" c=\"dimmed\">\n Agent: {loadingProfile ? 'Loading...' : displayName}\n </Text>\n {userProfile?.verified && (\n <Text size=\"xs\" c=\"blue\" fw={600} title=\"Verified user\">\n ✓\n </Text>\n )}\n </Group>\n )}\n </Stack>\n <Stack gap={4} align=\"flex-end\">\n <Badge color={claimStatus.color} size=\"sm\">\n {claimStatus.status}\n </Badge>\n <ActionIcon variant=\"subtle\" size=\"sm\">\n <IconArrowRight size={16} />\n </ActionIcon>\n </Stack>\n </ListItemContainer>\n </div>\n );\n};\n","import { ITheme } from '@ixo/surveys';\n\nexport const IXO_PALETTE = {\n // Neutral\n Neutral50: '#FAFAFA',\n Neutral100: '#F8F8F8',\n Neutral200: '#F1F1F1',\n Neutral300: '#EBEBEB',\n Neutral500: '#D7D7D7',\n Neutral800: '#9A9A9A',\n Black: '#000000',\n\n // Neutral Dark\n NeutralDark50: '#050505',\n NeutralDark100: '#070707',\n NeutralDark200: '#0E0E0E',\n NeutralDark300: '#141414',\n NeutralDark500: '#282828',\n NeutralDark800: '#656565',\n\n // White\n White: '#FFFFFF',\n WhiteSecondary: '#D7ECE3',\n\n // EmergingBlue\n accentActive: '#0EB8DC',\n accentSecondary: '#20798C',\n accentHover: '#17C6EB',\n accentLight: '#ADEBF8',\n\n // CompanionBlue\n companionBlue: '#e8f9fd',\n\n // EmergingLighter\n accentLighter: 'rgba(173,235,248,0.2)',\n\n accentDarker: '#296DAB',\n darkestBlue: '#000000',\n\n // Contribution\n contributionBlue: 'rgba(22, 143, 168, 1)',\n\n // Danger\n dangerFull: '#E2223B',\n dangerBrighter: '#FCCFD5',\n dangerBright: '#F9909E',\n dangerDark: '#A11C43',\n\n // Success\n successFull: '#61B43A',\n successDarker: '#47822b',\n successBright: '#F4FCF0',\n successSecondary: '#1CBD6A',\n\n orangeFull: '#ED9526',\n orangeBright: '#FDC681',\n\n // Transparent\n transparent: 'rgba(255, 255, 255, 0)',\n whiteTransparentDarker: 'rgba(255, 255, 255, 0.10)',\n whiteTransparent: 'rgba(255, 255, 255, 0.30)',\n whiteTransparentSecondary: 'rgba(255, 255, 255, 0.65)',\n successTransparent: 'rgba(67, 175, 98, 0.30)',\n\n // Glassmorphics\n glass: 'rgba(255, 255, 255, 0.06)',\n glassGradient: 'linear-gradient(135deg, rgba(255, 255, 255, 0.05) 0%, rgba(153, 153, 153, 0.03) 100%)',\n glassDarker: 'rgba(0, 0, 0, 0.5)',\n glassLighter: 'rgba(255, 255, 255, 0.3)',\n\n // Gradients\n offsetCertificateGradient: 'linear-gradient(45deg, rgba(59,152,51,1) 0%, rgba(70,193,193,1) 100%)',\n contributionCertificateGradient: 'linear-gradient(45deg, rgba(22,143,168,1) 0%, rgba(30,204,183,1) 100%)',\n carbonCertificateGradient: 'linear-gradient(55.09deg, rgba(54, 101, 135, 1) -2.49%, rgba(30, 173, 204, 1) 109.08%)',\n shadowGradient: 'linear-gradient(0deg, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.2) 100%)',\n};\n\nexport function hexToRgb(hex: string, rate: number): string {\n const hexNum = hex.replace(/^#/, '');\n\n const r = parseInt(hexNum.substring(0, 2), 16);\n const g = parseInt(hexNum.substring(2, 4), 16);\n const b = parseInt(hexNum.substring(4, 6), 16);\n\n const clampedRate = Math.max(0, Math.min(1, rate));\n\n return `rgba(${r}, ${g}, ${b}, ${clampedRate})`;\n}\n\nexport const surveyTheme: ITheme = {\n backgroundImageFit: 'cover',\n backgroundImageAttachment: 'scroll',\n backgroundOpacity: 0,\n cssVariables: {\n '-sjs-editorpanel-backcolor': IXO_PALETTE.glassDarker as string,\n '--sjs-editor-background': IXO_PALETTE.glassDarker as string,\n '--sjs-general-backcolor': IXO_PALETTE.Black as string,\n '--sjs-general-backcolor-dark': IXO_PALETTE.Black as string,\n '--sjs-general-backcolor-dim': IXO_PALETTE.transparent as string,\n '--sjs-general-backcolor-dim-light': IXO_PALETTE.glassDarker as string,\n '--sjs-general-backcolor-dim-dark': IXO_PALETTE.glassDarker as string,\n '--sjs-general-forecolor': IXO_PALETTE.White as string,\n '--sjs-general-forecolor-light': IXO_PALETTE.White as string,\n '--sjs-general-dim-forecolor': IXO_PALETTE.White as string,\n '--sjs-general-dim-forecolor-light': IXO_PALETTE.White as string,\n '--sjs-font-surveytitle-color': IXO_PALETTE.White as string,\n '--sjs-primary-backcolor': IXO_PALETTE.accentActive as string,\n '--sjs-primary-backcolor-light': IXO_PALETTE.accentLight as string,\n '--sjs-primary-backcolor-dark': IXO_PALETTE.accentHover as string,\n '--sjs-primary-forecolor': 'rgba(255, 255, 255, 1)',\n '--sjs-primary-forecolor-light': 'rgba(255, 255, 255, 0.25)',\n '--sjs-base-unit': '8px',\n '--sjs-editorpanel-cornerRadius': '30px',\n '--sjs-questionpanel-cornerRadius': '12px',\n '--sjs-secondary-backcolor': 'rgba(255, 152, 20, 1)',\n '--sjs-secondary-backcolor-light': 'rgba(255, 152, 20, 0.1)',\n '--sjs-secondary-backcolor-semi-light': 'rgba(255, 152, 20, 0.25)',\n '--sjs-secondary-forecolor': 'rgba(255, 255, 255, 1)',\n '--sjs-secondary-forecolor-light': 'rgba(255, 255, 255, 0.25)',\n '--sjs-shadow-small': '0px 0px 0px 0px rgba(0, 0, 0, 0)',\n '--sjs-shadow-small-reset': '0px 0px 0px 0px rgba(0, 0, 0, 0)',\n '--sjs-shadow-medium': '0px 0px 0px 0px rgba(0, 0, 0, 0)',\n '--sjs-shadow-large': '0px 8px 16px 0px rgba(0, 0, 0, 0.1)',\n '--sjs-shadow-inner': '0px 0px 0px 0px rgba(0, 0, 0, 0.15)',\n '--sjs-shadow-inner-reset': '0px 0px 0px 0px rgba(0, 0, 0, 0.15)',\n '--sjs-border-light': 'rgba(0, 0, 0, 0.09)',\n '--sjs-border-default': 'rgba(0, 0, 0, 0.16)',\n '--sjs-border-inside': 'rgba(0, 0, 0, 0.16)',\n '--sjs-special-red': 'rgba(229, 10, 62, 1)',\n '--sjs-special-red-light': 'rgba(229, 10, 62, 0.1)',\n '--sjs-special-red-forecolor': 'rgba(255, 255, 255, 1)',\n '--sjs-special-green': 'rgba(25, 179, 148, 1)',\n '--sjs-special-green-light': 'rgba(25, 179, 148, 0.1)',\n '--sjs-special-green-forecolor': 'rgba(255, 255, 255, 1)',\n '--sjs-special-blue': 'rgba(67, 127, 217, 1)',\n '--sjs-special-blue-light': 'rgba(67, 127, 217, 0.1)',\n '--sjs-special-blue-forecolor': 'rgba(255, 255, 255, 1)',\n '--sjs-special-yellow': 'rgba(255, 152, 20, 1)',\n '--sjs-special-yellow-light': 'rgba(255, 152, 20, 0.1)',\n '--sjs-special-yellow-forecolor': 'rgba(255, 255, 255, 1)',\n '--sjs-article-font-xx-large-textDecoration': 'none',\n '--sjs-article-font-xx-large-fontWeight': '700',\n '--sjs-article-font-xx-large-fontStyle': 'normal',\n '--sjs-article-font-xx-large-fontStretch': 'normal',\n '--sjs-article-font-xx-large-letterSpacing': '0',\n '--sjs-article-font-xx-large-lineHeight': '64px',\n '--sjs-article-font-xx-large-paragraphIndent': '0px',\n '--sjs-article-font-xx-large-textCase': 'none',\n '--sjs-article-font-x-large-textDecoration': 'none',\n '--sjs-article-font-x-large-fontWeight': '700',\n '--sjs-article-font-x-large-fontStyle': 'normal',\n '--sjs-article-font-x-large-fontStretch': 'normal',\n '--sjs-article-font-x-large-letterSpacing': '0',\n '--sjs-article-font-x-large-lineHeight': '56px',\n '--sjs-article-font-x-large-paragraphIndent': '0px',\n '--sjs-article-font-x-large-textCase': 'none',\n '--sjs-article-font-large-textDecoration': 'none',\n '--sjs-article-font-large-fontWeight': '700',\n '--sjs-article-font-large-fontStyle': 'normal',\n '--sjs-article-font-large-fontStretch': 'normal',\n '--sjs-article-font-large-letterSpacing': '0',\n '--sjs-article-font-large-lineHeight': '40px',\n '--sjs-article-font-large-paragraphIndent': '0px',\n '--sjs-article-font-large-textCase': 'none',\n '--sjs-article-font-medium-textDecoration': 'none',\n '--sjs-article-font-medium-fontWeight': '700',\n '--sjs-article-font-medium-fontStyle': 'normal',\n '--sjs-article-font-medium-fontStretch': 'normal',\n '--sjs-article-font-medium-letterSpacing': '0',\n '--sjs-article-font-medium-lineHeight': '32px',\n '--sjs-article-font-medium-paragraphIndent': '0px',\n '--sjs-article-font-medium-textCase': 'none',\n '--sjs-article-font-default-textDecoration': 'none',\n '--sjs-article-font-default-fontWeight': '400',\n '--sjs-article-font-default-fontStyle': 'normal',\n '--sjs-article-font-default-fontStretch': 'normal',\n '--sjs-article-font-default-letterSpacing': '0',\n '--sjs-article-font-default-lineHeight': '28px',\n '--sjs-article-font-default-paragraphIndent': '0px',\n '--sjs-article-font-default-textCase': 'none',\n },\n themeName: 'ixoTheme',\n colorPalette: 'dark',\n};\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { EvaluatorBlock } from './EvaluatorBlock';\nimport { IxoBlockProps } from '@/core/types/editor';\n\nexport const EvaluatorBlockSpec = createReactBlockSpec(\n {\n type: 'evaluator' as const,\n propSchema: {\n title: { default: '' },\n description: { default: '' },\n icon: { default: 'checklist' },\n deedDid: { default: '' },\n selectedCollections: { default: '[]' },\n adminAddress: { default: '' },\n },\n content: 'none',\n },\n {\n render: (props) => {\n const ixoProps = props as unknown as IxoBlockProps;\n return <EvaluatorBlock {...ixoProps} />;\n },\n }\n);\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { VisualizationBlock } from './VisualizationBlock';\nimport type { IxoBlockProps } from '../../../core/types';\n\nexport const VisualizationBlockSpec = createReactBlockSpec(\n {\n type: 'visualization' as const,\n propSchema: {\n vizType: {\n default: '',\n },\n config: {\n default: '{}',\n },\n title: {\n default: '',\n },\n preferences: {\n default: '{}', // JSON string for user customizations like { pageSize: 25 }\n },\n },\n content: 'none',\n },\n {\n render: (props) => {\n const ixoProps = props as unknown as IxoBlockProps;\n return <VisualizationBlock {...ixoProps} />;\n },\n }\n);\n","import React, { useMemo, useCallback, useRef, useState, useEffect } from 'react';\nimport { Box, Stack, Text, Paper, Group } from '@mantine/core';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\n\nexport interface VisualizationBlockProps extends IxoBlockProps {}\n\nexport function VisualizationBlock({ block, editor }: VisualizationBlockProps) {\n const { visualizationRenderer } = useBlocknoteContext();\n const { vizType, config, title, preferences } = block.props;\n\n // Track container dimensions to avoid rendering charts with 0 width/height\n const containerRef = useRef<HTMLDivElement>(null);\n const [hasValidDimensions, setHasValidDimensions] = useState(false);\n\n // Use ResizeObserver to detect when container has proper dimensions\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const checkDimensions = () => {\n const rect = container.getBoundingClientRect();\n setHasValidDimensions(rect.width > 0 && rect.height > 0);\n };\n\n // Initial check\n checkDimensions();\n\n // Watch for resize\n const resizeObserver = new ResizeObserver(checkDimensions);\n resizeObserver.observe(container);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n // Parse the config JSON\n const parsedConfig = useMemo(() => {\n try {\n return typeof config === 'string' ? JSON.parse(config) : config;\n } catch (e) {\n console.error('Failed to parse visualization config:', e);\n return null;\n }\n }, [config]);\n\n // Parse the preferences JSON\n const parsedPreferences = useMemo(() => {\n try {\n return typeof preferences === 'string' ? JSON.parse(preferences) : preferences || {};\n } catch (e) {\n console.error('Failed to parse visualization preferences:', e);\n return {};\n }\n }, [preferences]);\n\n // Callback to update preferences (persists to block via CRDT)\n const handlePreferencesChange = useCallback(\n (newPreferences: object) => {\n if (editor) {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n preferences: JSON.stringify(newPreferences),\n },\n });\n }\n },\n [editor, block]\n );\n\n // If no vizType is set or config parsing failed, show placeholder\n if (!vizType || !parsedConfig) {\n return (\n <Paper p=\"xl\" withBorder w=\"100%\" radius=\"lg\">\n <Stack align=\"center\" gap=\"sm\">\n <Text fz=\"18\" ta=\"center\">\n Visualization Block\n </Text>\n {!vizType && (\n <Text fz=\"sm\" c=\"dimmed\">\n No visualization type set\n </Text>\n )}\n {!parsedConfig && (\n <Text fz=\"sm\" c=\"red.5\">\n Failed to parse visualization configuration.\n </Text>\n )}\n </Stack>\n </Paper>\n );\n }\n\n // If we have a renderer from context, use it\n if (visualizationRenderer) {\n const renderedContent = visualizationRenderer(vizType, parsedConfig, parsedPreferences, handlePreferencesChange);\n if (renderedContent) {\n return (\n <Box ref={containerRef} w=\"100%\" miw={200} mih={200}>\n {/* Only render the chart when container has valid dimensions to avoid Recharts warnings */}\n {hasValidDimensions ? renderedContent : null}\n </Box>\n );\n }\n }\n\n // Fallback: No renderer available - show informative message\n return (\n <Paper p=\"lg\" withBorder radius=\"lg\" w=\"100%\">\n <Stack gap=\"sm\">\n <Text fz=\"18\" ta=\"center\">\n Visualization Block\n </Text>\n <Paper p=\"sm\" bg=\"var(--mantine-color-dark-6)\" radius=\"sm\">\n <Stack gap=\"xs\">\n {!title && (\n <Group gap=\"xs\">\n <Text size=\"xs\" c=\"dimmed\" fw={500}>\n Title:\n </Text>\n <Text size=\"xs\" c=\"white\">\n {title || 'No title'}\n </Text>\n </Group>\n )}\n <Group gap=\"xs\">\n <Text size=\"xs\" c=\"dimmed\" fw={500}>\n Type:\n </Text>\n <Text size=\"xs\" c=\"white\">\n {vizType}\n </Text>\n </Group>\n </Stack>\n </Paper>\n <Text c=\"dimmed\" fz=\"sm\" fs=\"italic\" ta=\"center\">\n View in a compatible client to see the full visualization.\n </Text>\n </Stack>\n </Paper>\n );\n}\n\nexport default VisualizationBlock;\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { DomainCreatorBlock } from './DomainCreatorBlock';\nimport type { IxoBlockProps } from '@/core/types';\n\nexport const DomainCreatorBlockSpec = createReactBlockSpec(\n {\n type: 'domainCreator' as const,\n propSchema: {\n title: { default: '' },\n description: { default: '' },\n icon: { default: 'file-text' },\n surveySchema: { default: '' },\n answers: { default: '' },\n lastSubmission: { default: '' },\n entityDid: { default: '' },\n entityType: { default: '' },\n },\n content: 'none',\n },\n {\n render: (props) => {\n const ixoProps = props as unknown as IxoBlockProps;\n return <DomainCreatorBlock {...ixoProps} />;\n },\n }\n);\n","import React from 'react';\nimport type { IxoBlockProps } from '@/core/types';\nimport { useBlocknoteContext } from '@/mantine/context';\nimport { DomainCreatorTemplateView } from './template/TemplateView';\nimport { DomainCreatorFlowView } from './flow/FlowView';\n\nexport type DomainCreatorBlockProps = IxoBlockProps;\n\nexport function DomainCreatorBlock({ editor, block }: DomainCreatorBlockProps) {\n const { docType } = useBlocknoteContext();\n\n if (docType === 'template') {\n return <DomainCreatorTemplateView editor={editor} block={block} />;\n }\n\n return <DomainCreatorFlowView editor={editor} block={block} />;\n}\n\nexport default DomainCreatorBlock;\n","import React, { useMemo } from 'react';\nimport { Badge, Group, Stack, Text } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\nimport { TemplateConfig } from './TemplateConfig';\n\nconst DOMAIN_CREATOR_TEMPLATE_PANEL_ID = 'domain-creator-template-panel';\n\nexport const DomainCreatorTemplateView = ({ editor, block }: IxoBlockProps) => {\n const panelId = `${DOMAIN_CREATOR_TEMPLATE_PANEL_ID}-${block.id}`;\n const panelContent = useMemo(() => <TemplateConfig editor={editor} block={block} />, [editor, block]);\n const { open } = usePanel(panelId, panelContent);\n\n return (\n <BaseContainer onClick={open}>\n <Badge size=\"xs\" variant=\"light\" color=\"gray\" style={{ position: 'absolute', top: 8, right: 8 }}>\n Template\n </Badge>\n\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n {getIcon('file-text', block.props.icon)}\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {block.props.title || 'Domain Creator'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.description || 'Configure the domain creation flow'}\n </Text>\n </Stack>\n </Group>\n </Group>\n </BaseContainer>\n );\n};\n","import React, { useCallback } from 'react';\nimport { Paper, CloseButton, Title } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { GeneralTab } from './GeneralTab';\n\nexport const TemplateConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n\n const updateProp = useCallback(\n (key: string, value: any) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n [key]: value,\n },\n });\n },\n [editor, block]\n );\n\n return (\n <Paper\n p=\"md\"\n shadow=\"sm\"\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '1rem',\n }}\n >\n <Title order={3}>Domain Creator Settings</Title>\n <CloseButton onClick={closePanel} />\n </div>\n\n <ReusablePanel\n extraTabs={[\n {\n label: 'General',\n value: 'general',\n content: (\n <GeneralTab\n title={block.props.title || ''}\n description={block.props.description || ''}\n icon={block.props.icon || 'file-text'}\n onTitleChange={(value) => updateProp('title', value)}\n onDescriptionChange={(value) => updateProp('description', value)}\n onIconChange={(value) => updateProp('icon', value)}\n />\n ),\n },\n ]}\n context={{ editor, block }}\n />\n </Paper>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport BaseSection from '@/mantine/components/Base/BaseSection';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\n\ninterface GeneralTabProps {\n title: string;\n description: string;\n icon: string;\n onTitleChange: (value: string) => void;\n onDescriptionChange: (value: string) => void;\n onIconChange: (value: string) => void;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({ title, description, icon, onTitleChange, onDescriptionChange, onIconChange }) => {\n const [localTitle, setLocalTitle] = useState(title || '');\n const [localDescription, setLocalDescription] = useState(description || '');\n const [localIcon, setLocalIcon] = useState(icon || 'file-text');\n\n useEffect(() => setLocalTitle(title || ''), [title]);\n useEffect(() => setLocalDescription(description || ''), [description]);\n useEffect(() => setLocalIcon(icon || 'file-text'), [icon]);\n\n return (\n <BaseSection>\n <BaseTextInput\n label=\"Title\"\n placeholder=\"e.g. Domain Creator\"\n value={localTitle}\n onChange={(event) => {\n const newValue = event.currentTarget.value;\n setLocalTitle(newValue);\n onTitleChange(newValue);\n }}\n />\n\n <BaseTextArea\n label=\"Description\"\n placeholder=\"Short summary for the domain creation flow\"\n minRows={3}\n value={localDescription}\n onChange={(event) => {\n const newValue = event.currentTarget.value;\n setLocalDescription(newValue);\n onDescriptionChange(newValue);\n }}\n />\n\n <BaseTextInput\n label=\"Icon\"\n description=\"Use a supported icon key (e.g. file-text, checklist, bell)\"\n placeholder=\"file-text\"\n value={localIcon}\n onChange={(event) => {\n const newValue = event.currentTarget.value;\n setLocalIcon(newValue);\n onIconChange(newValue);\n }}\n />\n </BaseSection>\n );\n};\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { ActionIcon, Badge, Group, Stack, Text, Tooltip } from '@mantine/core';\nimport { IconChevronRight, IconCheck, IconAlertCircle } from '@tabler/icons-react';\nimport { IxoBlockProps } from '@/core/types';\nimport BaseContainer from '@/mantine/components/Base/BaseContainer';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport { DomainCreatorSurveyPanel } from './DomainCreatorSurveyPanel';\n\nconst DOMAIN_CREATOR_FLOW_PANEL_ID = 'domain-creator-flow-panel';\n\ntype SubmissionStatus = 'idle' | 'success' | 'error';\n\nexport const DomainCreatorFlowView: React.FC<IxoBlockProps> = ({ editor, block }) => {\n const [hasOpened, setHasOpened] = useState(false);\n const [submissionStatus, setSubmissionStatus] = useState<SubmissionStatus>('idle');\n\n // Check if there's a previous successful submission\n const lastSubmission = block.props.lastSubmission ? JSON.parse(block.props.lastSubmission) : null;\n const hasExistingSubmission = lastSubmission?.entityDid;\n\n const handleComplete = useCallback(\n (data: { surveyData: Record<string, any>; entityDid?: string; transactionHash?: string }) => {\n // Persist completed submission data onto block\n editor.updateBlock(block, {\n props: {\n ...block.props,\n lastSubmission: JSON.stringify({\n surveyData: data.surveyData,\n entityDid: data.entityDid,\n transactionHash: data.transactionHash,\n completedAt: new Date().toISOString(),\n }),\n },\n });\n setSubmissionStatus('success');\n },\n [block, editor]\n );\n\n const panelId = `${DOMAIN_CREATOR_FLOW_PANEL_ID}-${block.id}`;\n const panelContent = useMemo(() => <DomainCreatorSurveyPanel editor={editor} block={block} onComplete={handleComplete} />, [editor, block, handleComplete]);\n const { open } = usePanel(panelId, panelContent);\n\n const handleOpen = () => {\n setHasOpened(true);\n open();\n };\n\n // Determine badge state\n const getBadgeProps = () => {\n if (hasExistingSubmission || submissionStatus === 'success') {\n return { variant: 'filled' as const, color: 'green', text: 'Created', icon: <IconCheck size={12} /> };\n }\n if (submissionStatus === 'error') {\n return { variant: 'filled' as const, color: 'red', text: 'Error', icon: <IconAlertCircle size={12} /> };\n }\n if (hasOpened) {\n return { variant: 'light' as const, color: 'blue', text: 'In Progress', icon: null };\n }\n return { variant: 'light' as const, color: 'gray', text: 'Click to start', icon: null };\n };\n\n const badgeProps = getBadgeProps();\n\n return (\n <BaseContainer onClick={handleOpen}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\" style={{ flex: 1 }}>\n {getIcon('file-text', block.props.icon)}\n <Stack gap={4} style={{ flex: 1, minWidth: 0 }}>\n <Group gap=\"xs\" align=\"center\">\n <Text fw={600} size=\"sm\" contentEditable={false}>\n {block.props.title || 'Domain Creator'}\n </Text>\n <Badge size=\"xs\" variant={badgeProps.variant} color={badgeProps.color} leftSection={badgeProps.icon}>\n {badgeProps.text}\n </Badge>\n </Group>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false} lineClamp={2}>\n {hasExistingSubmission ? `Domain created: ${lastSubmission.entityDid}` : block.props.description || 'Open the survey panel to create a new domain.'}\n </Text>\n </Stack>\n </Group>\n <Tooltip label={hasExistingSubmission ? 'View/Edit domain' : 'Create domain'} withArrow>\n <ActionIcon variant=\"subtle\" color=\"blue\">\n <IconChevronRight size={18} />\n </ActionIcon>\n </Tooltip>\n </Group>\n </BaseContainer>\n );\n};\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Alert, Button, CloseButton, Group, Loader, Stack, Text, Title } from '@mantine/core';\nimport { useDebouncedCallback } from '@mantine/hooks';\nimport { IconAlertCircle, IconCheck } from '@tabler/icons-react';\nimport { Survey, SurveyModel } from '@ixo/surveys';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { useBlocknoteContext } from '@/mantine/context/BlocknoteContext';\nimport type { IxoBlockProps } from '@/core/types';\nimport { tempDomainCreatorSurvey } from './tempDomainCreatorSurvey';\nimport { surveyTheme } from '../../claim/flow/theme';\nimport { transformSurveyToCredentialSubject, buildVerifiableCredential, buildDomainCardLinkedResource, extractSurveyAnswersTemplate } from '../utils';\n\ntype FlowStep = 'survey' | 'signing' | 'uploading' | 'creating' | 'success' | 'error';\n\ninterface DomainCreatorSurveyPanelProps {\n /** BlockNote editor instance for updating block props */\n editor: IxoBlockProps['editor'];\n /** The domain creator block */\n block: IxoBlockProps['block'];\n /** Callback when domain creation completes */\n onComplete?: (data: { surveyData: Record<string, any>; entityDid?: string; transactionHash?: string }) => void;\n /** Optional existing entity DID (for updating existing entities) */\n entityDid?: string;\n /** Optional issuer DID override (defaults to current user/entity) */\n issuerDid?: string;\n}\n\n/** Debounce delay for syncing survey changes to block props (ms) */\nconst SYNC_DEBOUNCE_MS = 300;\n\n/**\n * Deep comparison for survey values to avoid unnecessary updates.\n * Handles primitives, arrays, and plain objects.\n */\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return a === b;\n if (typeof a !== typeof b) return false;\n if (typeof a !== 'object') return false;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, index) => deepEqual(item, b[index]));\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n const aKeys = Object.keys(aObj);\n const bKeys = Object.keys(bObj);\n\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every((key) => deepEqual(aObj[key], bObj[key]));\n}\n\nexport const DomainCreatorSurveyPanel: React.FC<DomainCreatorSurveyPanelProps> = ({ editor, block, onComplete, entityDid: existingEntityDid, issuerDid: issuerDidOverride }) => {\n const { closePanel } = usePanelStore();\n const { handlers } = useBlocknoteContext();\n\n // Initialize state from block props if entity was already created\n const existingBlockEntityDid = block.props.entityDid as string | undefined;\n const existingBlockEntityType = block.props.entityType as string | undefined;\n\n const [flowStep, setFlowStep] = useState<FlowStep>(existingBlockEntityDid ? 'success' : 'survey');\n const [error, setError] = useState<string | null>(null);\n const [createdEntityDid, setCreatedEntityDid] = useState<string | null>(existingBlockEntityDid || null);\n const [createdEntityType, setCreatedEntityType] = useState<string | null>(existingBlockEntityType || null);\n\n // Track if we're currently syncing from prop to prevent loops\n const isUpdatingFromProp = useRef(false);\n // Track the last answers we synced to avoid redundant updates\n const lastSyncedAnswers = useRef<string>('');\n\n const surveyModel = useMemo(() => {\n const model = new SurveyModel(tempDomainCreatorSurvey);\n model.applyTheme(surveyTheme);\n model.showQuestionNumbers = 'off';\n model.questionsOnPageMode = 'singlePage';\n return model;\n }, []);\n\n /**\n * Syncs block prop answers to the survey model.\n * Called when answers prop changes externally (e.g., from AI agent).\n */\n const syncPropToSurvey = useCallback(\n (answersJson: string) => {\n if (!answersJson || answersJson === lastSyncedAnswers.current) return;\n\n try {\n const answers = JSON.parse(answersJson) as Record<string, unknown>;\n isUpdatingFromProp.current = true;\n\n Object.entries(answers).forEach(([key, value]) => {\n const currentValue = surveyModel.getValue(key);\n if (!deepEqual(currentValue, value)) {\n surveyModel.setValue(key, value);\n }\n });\n\n lastSyncedAnswers.current = answersJson;\n } catch (err) {\n console.error('Failed to parse answers prop:', err);\n } finally {\n isUpdatingFromProp.current = false;\n }\n },\n [surveyModel]\n );\n\n /**\n * Syncs current survey data to block prop.\n * Debounced to avoid excessive CRDT operations.\n */\n const syncSurveyToProp = useDebouncedCallback((data: Record<string, unknown>) => {\n const newAnswersJson = JSON.stringify(data);\n\n // Skip if this matches what we last synced (prevents echo)\n if (newAnswersJson === lastSyncedAnswers.current) return;\n\n lastSyncedAnswers.current = newAnswersJson;\n\n editor.updateBlock(block, {\n props: {\n ...block.props,\n answers: newAnswersJson,\n },\n });\n }, SYNC_DEBOUNCE_MS);\n\n // PROP → SURVEY: Sync when answers prop changes externally\n useEffect(() => {\n const answersJson = block.props.answers as string;\n if (answersJson) {\n syncPropToSurvey(answersJson);\n }\n }, [block.props.answers, syncPropToSurvey]);\n\n // SURVEY → PROP: Listen for value changes in survey\n useEffect(() => {\n const handleValueChanged = () => {\n // Skip if we're updating from prop (prevents loops)\n if (isUpdatingFromProp.current) return;\n syncSurveyToProp(surveyModel.data);\n };\n\n surveyModel.onValueChanged.add(handleValueChanged);\n return () => {\n surveyModel.onValueChanged.remove(handleValueChanged);\n };\n }, [surveyModel, syncSurveyToProp]);\n\n // Initialize surveySchema and answers props if not set\n useEffect(() => {\n const needsSchema = !block.props.surveySchema;\n const needsAnswers = !block.props.answers;\n\n if (needsSchema || needsAnswers) {\n const updates: Record<string, string> = {};\n\n if (needsSchema) {\n updates.surveySchema = JSON.stringify(tempDomainCreatorSurvey);\n }\n\n if (needsAnswers) {\n const emptyTemplate = extractSurveyAnswersTemplate(tempDomainCreatorSurvey);\n const emptyAnswersJson = JSON.stringify(emptyTemplate);\n lastSyncedAnswers.current = emptyAnswersJson;\n updates.answers = emptyAnswersJson;\n }\n\n editor.updateBlock(block, {\n props: {\n ...block.props,\n ...updates,\n },\n });\n }\n }, [editor, block]);\n\n /**\n * Processes the survey data and creates the domain with signed credential.\n *\n * Flow:\n * 1. Transform survey data to credentialSubject\n * 2. Build unsigned credential\n * 3. Sign credential (requires PIN)\n * 4. Upload signed credential to Matrix\n * 5. Build LinkedResource from upload result\n * 6. Create domain entity with LinkedResource\n */\n const processDomainCreation = useCallback(\n async (data: Record<string, any>) => {\n if (!handlers) {\n throw new Error('Handlers not available');\n }\n\n // Validate required handlers\n if (!handlers.signCredential) {\n throw new Error('signCredential handler not implemented');\n }\n if (!handlers.publicFileUpload) {\n throw new Error('publicFileUpload handler not available');\n }\n if (!handlers.createDomain) {\n throw new Error('createDomain handler not implemented');\n }\n if (!handlers.requestPin) {\n throw new Error('requestPin handler not available');\n }\n\n // Get issuer DID (entity or user)\n const issuerDid = issuerDidOverride || handlers.getEntityDid?.() || handlers.getCurrentUser?.()?.address;\n if (!issuerDid) {\n throw new Error('Unable to determine issuer DID');\n }\n\n // For new domains, we'll use a placeholder that createDomain will handle\n // For existing entities, use the provided entityDid\n const entityDid = existingEntityDid || `did:ixo:entity:pending`;\n\n // Step 1: Transform survey data to credentialSubject\n const credentialSubject = transformSurveyToCredentialSubject(data, entityDid);\n\n // Step 2: Build unsigned credential\n const unsignedCredential = buildVerifiableCredential({\n entityDid,\n issuerDid,\n credentialSubject,\n validFrom: data['schema:validFrom'] || new Date().toISOString(),\n validUntil: data['schema:validUntil'],\n });\n\n // Step 3: Request PIN and sign credential\n setFlowStep('signing');\n const pin = await handlers.requestPin({\n title: 'Sign Domain Card',\n description: 'Enter your PIN to sign the Domain Card credential',\n submitText: 'Sign',\n });\n\n // Get entity info for signing (if signing as entity)\n let entityRoomId: string | undefined;\n if (existingEntityDid && handlers.getEntityInfo) {\n const entityInfo = await handlers.getEntityInfo(existingEntityDid);\n entityRoomId = entityInfo.roomId;\n }\n\n const { signedCredential } = await handlers.signCredential({\n issuerDid,\n issuerType: existingEntityDid ? 'entity' : 'user',\n entityRoomId,\n credential: unsignedCredential,\n pin,\n });\n\n // Step 4: Upload signed credential to Matrix\n setFlowStep('uploading');\n const credentialBlob = new Blob([JSON.stringify(signedCredential, null, 2)], {\n type: 'application/json',\n });\n const credentialFile = new File([credentialBlob], 'domainCard.json', {\n type: 'application/json',\n });\n\n const uploadResult = await handlers.publicFileUpload(credentialFile);\n\n // Step 5: Build LinkedResource\n const domainCardLinkedResource = buildDomainCardLinkedResource({\n entityDid,\n cid: uploadResult.cid,\n serviceEndpoint: uploadResult.url,\n description: `Domain Card for ${data['schema:name'] || 'Domain'}`,\n });\n\n // Step 6: Create domain entity\n setFlowStep('creating');\n const entityType = data['type_2'] || data['daoType'] || 'dao';\n const { entityDid: newEntityDid, transactionHash } = await handlers.createDomain({\n entityType,\n linkedResource: [domainCardLinkedResource],\n startDate: data['schema:validFrom'],\n endDate: data['schema:validUntil'],\n });\n\n return {\n entityDid: newEntityDid,\n entityType,\n transactionHash,\n };\n },\n [handlers, existingEntityDid, issuerDidOverride]\n );\n\n const handleSurveyComplete = useCallback(\n async (sender: SurveyModel) => {\n const data = sender.data || {};\n\n try {\n const result = await processDomainCreation(data);\n setCreatedEntityDid(result.entityDid);\n setCreatedEntityType(result.entityType);\n setFlowStep('success');\n\n // Save entityDid and entityType to block props\n editor.updateBlock(block, {\n props: {\n ...block.props,\n entityDid: result.entityDid,\n entityType: result.entityType,\n },\n });\n\n onComplete?.({\n surveyData: data,\n entityDid: result.entityDid,\n transactionHash: result.transactionHash,\n });\n } catch (err) {\n console.error('Domain creation failed:', err);\n setError(err instanceof Error ? err.message : 'Domain creation failed');\n setFlowStep('error');\n }\n },\n [processDomainCreation, onComplete, editor, block]\n );\n\n useEffect(() => {\n surveyModel.onComplete.add(handleSurveyComplete);\n return () => {\n surveyModel.onComplete.remove(handleSurveyComplete);\n };\n }, [handleSurveyComplete, surveyModel]);\n\n const handleRetry = useCallback(() => {\n setFlowStep('survey');\n setError(null);\n surveyModel.clear();\n }, [surveyModel]);\n\n const handleClose = useCallback(() => {\n closePanel();\n }, [closePanel]);\n\n const handleVisitEntity = useCallback(() => {\n if (createdEntityDid && createdEntityType && handlers?.redirectToEntityOverview) {\n handlers.redirectToEntityOverview(createdEntityDid, createdEntityType);\n }\n }, [createdEntityDid, createdEntityType, handlers]);\n\n // Render loading state during async operations\n if (flowStep === 'signing' || flowStep === 'uploading' || flowStep === 'creating') {\n const stepMessages: Record<string, string> = {\n signing: 'Signing Domain Card credential...',\n uploading: 'Uploading credential to storage...',\n creating: 'Creating domain entity...',\n };\n\n return (\n <Stack gap=\"md\" p=\"md\" align=\"center\" justify=\"center\" style={{ minHeight: 300 }}>\n <Loader size=\"lg\" />\n <Text size=\"sm\" c=\"dimmed\">\n {stepMessages[flowStep]}\n </Text>\n </Stack>\n );\n }\n\n // Render success state\n if (flowStep === 'success') {\n return (\n <Stack gap=\"md\" p=\"md\">\n <Alert icon={<IconCheck size={16} />} title=\"Domain Created Successfully\" color=\"green\">\n <Stack gap=\"xs\">\n <Text size=\"sm\">Your domain has been created and the Domain Card credential has been signed and stored.</Text>\n {createdEntityDid && (\n <Text size=\"xs\" c=\"dimmed\">\n Entity DID: {createdEntityDid}\n </Text>\n )}\n </Stack>\n </Alert>\n <Button onClick={handleVisitEntity}>Visit Entity</Button>\n </Stack>\n );\n }\n\n // Render error state\n if (flowStep === 'error') {\n return (\n <Stack gap=\"md\" p=\"md\">\n <Alert icon={<IconAlertCircle size={16} />} title=\"Domain Creation Failed\" color=\"red\">\n <Text size=\"sm\">{error || 'An unexpected error occurred'}</Text>\n </Alert>\n <Group>\n <Button variant=\"outline\" onClick={handleRetry}>\n Try Again\n </Button>\n <Button variant=\"subtle\" onClick={handleClose}>\n Close\n </Button>\n </Group>\n </Stack>\n );\n }\n\n // Render survey form\n return (\n <Stack bg=\"#1a1a1a\" gap=\"md\" p=\"md\">\n <Group justify=\"space-between\" align=\"flex-start\">\n <Stack gap={4}>\n <Title order={3}>Domain Creator</Title>\n <Text size=\"sm\" c=\"dimmed\">\n Complete the survey to create a new domain with a signed Domain Card credential.\n </Text>\n </Stack>\n <CloseButton onClick={handleClose} title=\"Close panel\" />\n </Group>\n <Survey model={surveyModel} />\n </Stack>\n );\n};\n","export const tempDomainCreatorSurvey = {\n title: 'Domain Card Creation',\n description: 'This survey collects structured information required to create a Domain Card Verifiable Credential in compliance with W3C standards.',\n pages: [\n {\n name: 'domainDetails',\n title: 'Domain Information',\n description: 'Provide identifying and descriptive information about the domain entity represented by this credential.',\n elements: [\n {\n type: 'boolean',\n name: 'ixo:advancedDomainSettings',\n title: 'Show Advanced Options',\n defaultValue: 'false',\n },\n {\n type: 'dropdown',\n name: 'type_1',\n visible: false,\n title: 'Domain Type (Primary)',\n defaultValue: 'dao',\n choices: [\n {\n value: 'dao',\n text: 'DAO',\n },\n {\n value: 'protocol',\n text: 'Protocol',\n },\n ],\n },\n {\n type: 'dropdown',\n name: 'type_2',\n title: 'Domain Type ',\n isRequired: true,\n choicesByUrl: {\n url: 'https://test.studio.ixo.earth/api/survey-choices?url=https://raw.githubusercontent.com/ixofoundation/ns/refs/heads/GraemeLeightonIXO-patch-4/protocol/entities/v1/index.json&path=entities.dao.types',\n valueName: 'Value',\n titleName: 'Text',\n },\n },\n {\n type: 'dropdown',\n name: 'daoType',\n title: 'DAO Type',\n isRequired: true,\n choicesByUrl: {\n url: 'https://test.studio.ixo.earth/api/survey-choices?url=https://raw.githubusercontent.com/ixofoundation/ns/refs/heads/GraemeLeightonIXO-patch-4/protocol/tags/v1/index.json&path=daoType',\n valueName: 'Value',\n titleName: 'Text',\n },\n },\n {\n type: 'text',\n name: 'schema:validFrom',\n title: 'Valid From',\n defaultValueExpression: 'today()',\n isRequired: true,\n inputType: 'date',\n },\n {\n type: 'text',\n name: 'schema:validUntil',\n title: 'Vaid Untill',\n defaultValueExpression: 'today()',\n isRequired: true,\n inputType: 'date',\n },\n {\n type: 'text',\n name: 'schema:name',\n title: 'Domain Name',\n description: 'The official name of the domain.',\n isRequired: true,\n },\n {\n type: 'paneldynamic',\n name: 'pannel_schema:alternateName',\n title: 'Alternate Names',\n templateElements: [\n {\n type: 'text',\n name: 'schema:alternateName',\n title: 'Alternate Name',\n },\n ],\n },\n {\n type: 'text',\n name: 'schema:url',\n title: 'URL',\n description: 'Primary URL for the domain',\n inputType: 'url',\n },\n {\n type: 'paneldynamic',\n name: 'schema:sameAs',\n title: 'Additional URLs',\n description: 'Additional URLs associated with the domain (Twitter, Github, Medium)',\n templateElements: [\n {\n type: 'text',\n name: 'schema:sameAs.url',\n title: 'URL',\n inputType: 'url',\n },\n ],\n },\n {\n type: 'comment',\n name: 'schema.description',\n title: 'Canonical Description',\n description: 'A concise, one-paragraph description of the domain.',\n isRequired: true,\n },\n {\n type: 'panel',\n name: 'pannel_schema:media',\n title: 'Domain Images',\n elements: [\n {\n type: 'text',\n name: 'ixo:imageProfile_url',\n title: 'Profile Image URL',\n inputType: 'url',\n },\n {\n type: 'file',\n name: 'ixo:imageProfile',\n title: 'Profile Image',\n },\n {\n type: 'text',\n name: 'ixo:imageLogo_url',\n title: 'Logo URL',\n inputType: 'url',\n },\n {\n type: 'file',\n name: 'ixo:imageLogo',\n title: 'Logo',\n },\n ],\n },\n {\n type: 'comment',\n name: 'schema:keywords',\n title: 'Keywords',\n description: 'List of comma separated keywords describing the domain’s focus areas.',\n },\n {\n type: 'paneldynamic',\n name: 'pannel_ixo:knowsAbout',\n title: 'Topics /Primary Knowledge Areas',\n description: 'Subjects or fields the domain is knowledgeable in.',\n templateElements: [\n {\n type: 'text',\n name: 'ixo:knowsAbout',\n title: 'Knows About',\n },\n ],\n },\n ],\n },\n {\n name: 'contactAndLocation',\n visibleIf: '{ixo:advancedDomainSettings} = true',\n title: 'Contact & Location',\n description: 'Provide address and contact information for the domain.',\n elements: [\n {\n type: 'panel',\n name: 'schema:address',\n title: 'Postal Address',\n elements: [\n {\n type: 'text',\n name: 'schema:streetAddress',\n title: 'Street Address',\n },\n {\n type: 'text',\n name: 'schema:addressLocality',\n title: 'City',\n },\n {\n type: 'text',\n name: 'schema:addressRegion',\n title: 'Region/State',\n },\n {\n type: 'text',\n name: 'schema:postalCode',\n title: 'Postal Code',\n },\n {\n type: 'text',\n name: 'schema:addressCountry',\n title: 'Country',\n },\n ],\n },\n {\n type: 'text',\n name: 'schema:AdministrativeArea',\n title: 'Area Served',\n },\n {\n type: 'paneldynamic',\n name: 'pannel:schema_contactPoint',\n title: 'Contact Points',\n description: 'List available contact methods for support, business, or technical inquiries.',\n templateElements: [\n {\n type: 'text',\n name: 'schema:contactType',\n title: 'Contact Type',\n description: 'Example: General, Support, Sales',\n },\n {\n type: 'text',\n name: 'schema:email',\n title: 'Email Address',\n inputType: 'email',\n },\n {\n type: 'text',\n name: 'schema:telephone',\n title: 'Telephone ',\n inputType: 'tel',\n },\n {\n type: 'text',\n name: 'schema:availableLanguage',\n title: 'Languages Supported',\n description: 'Comma separated two letter language code (English = en)',\n },\n ],\n },\n ],\n },\n {\n name: 'composition',\n visibleIf: '{ixo:advancedDomainSettings} = true',\n title: 'Composition',\n elements: [\n {\n type: 'paneldynamic',\n name: 'schema:hasPart',\n title: 'Domain Components',\n description: 'Describes the specific items, documents, linked domains, or components that belong to this domain.',\n templateElements: [\n {\n type: 'text',\n name: 'schema:hasPart.id',\n title: 'Identifier',\n description: 'URI or URL ',\n },\n {\n type: 'text',\n name: 'schema:hasPart.name',\n title: 'Name',\n },\n {\n type: 'text',\n name: 'schema:hasPart.description',\n title: 'Description',\n },\n {\n type: 'text',\n name: 'schema:hasPart.url',\n title: 'URL',\n description: 'If different to the identifier',\n inputType: 'url',\n },\n {\n type: 'text',\n name: 'schema:hasPart.creator.name',\n title: 'Creator',\n description: 'Component creator (Organisation Name)',\n },\n ],\n },\n {\n type: 'paneldynamic',\n name: 'schema:subjectOf',\n title: 'Publications',\n description: 'Publications produced by the domain or where the domain is the subject.',\n templateElements: [\n {\n type: 'text',\n name: 'schema:subjectOf.name',\n title: 'Publication Title',\n },\n {\n type: 'text',\n name: 'schema:subjectOf.url',\n title: 'URL',\n },\n {\n type: 'text',\n name: 'schema:subjectOf.author.name',\n title: 'Author',\n },\n ],\n },\n {\n type: 'paneldynamic',\n name: 'schema:makesOffer',\n title: 'Offers (Product and/or Services)',\n templateElements: [\n {\n type: 'dropdown',\n name: 'schema:itemOffered.type',\n title: 'Catagory',\n choices: [\n {\n value: 'product',\n text: 'Product',\n },\n {\n value: 'service',\n text: 'Service',\n },\n ],\n },\n {\n type: 'text',\n name: 'schema:itemOffered.name',\n title: 'Name',\n },\n {\n type: 'text',\n name: 'schema:itemOffered.description',\n title: 'Description',\n },\n {\n type: 'text',\n name: 'schema:itemOffered.url',\n title: 'URL',\n inputType: 'url',\n },\n ],\n },\n ],\n },\n {\n name: 'relationshipsAndOffers',\n visibleIf: '{ixo:advancedDomainSettings} = true',\n title: 'Relationships & Funding',\n description: 'Describe the domain’s relationships with other organizations and its software or service offerings.',\n elements: [\n {\n type: 'paneldynamic',\n name: 'schema:memberOf',\n title: 'Memberships',\n templateElements: [\n {\n type: 'text',\n name: 'schema:memberOf.name',\n title: 'Organization Name',\n },\n ],\n },\n {\n type: 'paneldynamic',\n name: 'schema:wasAssociatedWith',\n title: 'Partner/Associated Organizations',\n templateElements: [\n {\n type: 'text',\n name: 'schema:wasAssociatedWith.name',\n title: 'Organization Name',\n },\n {\n type: 'text',\n name: 'schema:wasAssociatedWith.url',\n title: 'URL',\n },\n ],\n },\n {\n type: 'paneldynamic',\n name: 'schema:funding',\n title: 'Funding Sources',\n templateElements: [\n {\n type: 'text',\n name: 'schema:funder.name',\n title: 'Funder Organization',\n },\n {\n type: 'text',\n name: 'schema:amount.currency',\n title: 'Currency Code',\n },\n {\n type: 'text',\n name: 'schema:amount.value',\n title: 'Funding Amount',\n },\n ],\n },\n ],\n },\n {\n name: 'events',\n visibleIf: '{ixo:advancedDomainSettings} = true',\n title: 'Events',\n elements: [\n {\n type: 'paneldynamic',\n name: 'schema:event',\n title: 'Event',\n templateElements: [\n {\n type: 'text',\n name: 'schema:event.name',\n title: 'Name',\n },\n {\n type: 'text',\n name: 'schema:startDate',\n title: 'Start Date',\n },\n {\n type: 'text',\n name: 'schema:endDate',\n title: 'End Date',\n },\n {\n type: 'text',\n name: 'schema:event.location',\n title: 'Location Name',\n },\n {\n type: 'panel',\n name: 'schema:event.address',\n title: 'Postal Address',\n elements: [\n {\n type: 'text',\n name: 'schema:event.streetAddress',\n title: 'Street Address',\n },\n {\n type: 'text',\n name: 'schema:event.addressLocality',\n title: 'City',\n },\n {\n type: 'text',\n name: 'schema:event.addressRegion',\n title: 'Region/State',\n },\n {\n type: 'text',\n name: 'schema:event.postalCode',\n title: 'Postal Code',\n },\n {\n type: 'text',\n name: 'schema:event.addressCountry',\n title: 'Country',\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: 'agentsCredentialsAndAttributes',\n visibleIf: '{ixo:advancedDomainSettings} = true',\n title: 'Agents, Credentials, and Attributes',\n elements: [\n {\n type: 'paneldynamic',\n name: 'ixo:agentCard',\n title: 'Agents',\n templateElements: [\n {\n type: 'text',\n name: 'ixo:agentCard.id',\n title: 'Agent ID',\n },\n {\n type: 'text',\n name: 'ixo:agentCard.name',\n title: 'Name',\n },\n {\n type: 'text',\n name: 'ixo:agentCard.description',\n title: 'Description',\n },\n ],\n },\n {\n type: 'paneldynamic',\n name: 'ixo:verifiableCredential',\n title: 'Credentials',\n templateElements: [\n {\n type: 'text',\n name: 'schema:ID',\n title: 'Credential ID',\n },\n {\n type: 'text',\n name: 'schema:Name',\n title: 'Name',\n },\n {\n type: 'text',\n name: 'schema:description',\n title: 'Description',\n },\n ],\n },\n {\n type: 'paneldynamic',\n name: 'ixo:attribute',\n title: 'Attributes',\n templateElements: [\n {\n type: 'text',\n name: 'schema:ID_2',\n title: 'Attribute ID',\n },\n {\n type: 'text',\n name: 'schema:name_2',\n title: 'Name',\n },\n {\n type: 'text',\n name: 'schema:description_2',\n title: 'Description',\n },\n ],\n },\n ],\n },\n {\n name: 'project',\n visibleIf: '{ixo:advancedDomainSettings} = true',\n title: 'Project Information',\n description: 'Provide details about the related project(s), including objectives, sponsors, and deliverables.',\n elements: [\n {\n type: 'paneldynamic',\n name: 'pannel_proj:project',\n title: 'Projects',\n templateElements: [\n {\n type: 'text',\n name: 'proj:project.name',\n title: 'Project Title',\n },\n {\n type: 'comment',\n name: 'proj:project.description',\n title: 'Project Mission',\n description: 'High-level purpose or mission statement of the project.',\n },\n {\n type: 'paneldynamic',\n name: 'proj:project.hadObjective',\n title: 'Project Objectives',\n templateElements: [\n {\n type: 'comment',\n name: 'proj:hadObjective',\n title: 'Project Objective',\n },\n ],\n },\n {\n type: 'text',\n name: 'proj:plannedStart',\n title: 'Planned Start Date',\n inputType: 'datetime-local',\n },\n {\n type: 'text',\n name: 'proj:plannedEnd',\n title: 'Planned End Date',\n inputType: 'datetime-local',\n },\n {\n type: 'paneldynamic',\n name: 'proj:wasFundedThrough',\n title: 'Project Funding',\n templateElements: [\n {\n type: 'text',\n name: 'proj:moneyAmount',\n title: 'Funding Amount',\n },\n {\n type: 'text',\n name: 'proj:moneyCurrency',\n title: 'Funding Currency',\n },\n {\n type: 'text',\n name: 'prov.agent.name',\n title: 'Funder Name',\n },\n {\n type: 'text',\n name: 'prov:agent.id',\n title: 'Funder URL',\n inputType: 'url',\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: 'researchProfile',\n title: 'Research Profile',\n description: 'Provide information about the research profile associated with the domain.',\n elements: [\n {\n type: 'paneldynamic',\n name: 'ixo:ResearchProfile',\n title: 'Seed Queries',\n templateElements: [\n {\n type: 'comment',\n name: 'ixo:seedQueries',\n title: 'Seed Query',\n description: 'Seed keywords or queries that define the research scope.',\n },\n ],\n },\n {\n type: 'paneldynamic',\n name: 'schema:creativeWork',\n title: 'Citations',\n templateElements: [\n {\n type: 'text',\n name: 'schema:creativeWork.name',\n title: 'Citation Title',\n },\n {\n type: 'text',\n name: 'schema:creativeWork.url',\n title: 'Citation URL',\n },\n {\n type: 'text',\n name: 'schema:creativeWork.publisher',\n title: 'Publisher',\n },\n {\n type: 'text',\n name: 'schema:creativeWork.datePublished',\n title: 'Date Published',\n inputType: 'datetime-local',\n },\n ],\n },\n ],\n },\n ],\n showPageTitles: false,\n showQuestionNumbers: 'on',\n showProgressBar: true,\n progressBarLocation: 'top',\n};\n","/**\n * Transforms survey data from the Domain Creator survey into a W3C Verifiable Credential\n * credentialSubject structure compatible with ixo:DomainCard schema.\n */\n\nexport interface DomainCardCredentialSubject {\n id: string;\n type: string[];\n additionalType?: string[];\n name: string;\n alternateName?: string[];\n description: string;\n url?: string;\n sameAs?: string[];\n logo?: {\n type: string;\n id: string;\n contentUrl: string;\n };\n image?: Array<{\n type: string;\n id: string;\n contentUrl: string;\n }>;\n keywords?: string[];\n knowsAbout?: string[];\n address?: {\n type: string;\n streetAddress?: string;\n addressLocality?: string;\n addressRegion?: string;\n postalCode?: string;\n addressCountry?: string;\n };\n areaServed?: {\n type: string;\n name: string;\n };\n contactPoint?: Array<{\n type: string;\n contactType: string;\n email?: string;\n telephone?: string;\n availableLanguage?: string[];\n }>;\n composition?: {\n type: string;\n hasPart?: Array<{\n type: string;\n id?: string;\n name?: string;\n description?: string;\n url?: string;\n creator?: {\n type: string;\n name: string;\n };\n }>;\n subjectOf?: Array<{\n type: string;\n name: string;\n url?: string;\n author?: {\n type: string;\n name: string;\n };\n }>;\n };\n makesOffer?: Array<{\n type: string;\n name?: string;\n description?: string;\n itemOffered?: {\n type: string;\n name?: string;\n url?: string;\n };\n }>;\n relationships?: {\n memberOf?: Array<{\n type: string;\n name: string;\n }>;\n 'prov:wasAssociatedWith'?: Array<{\n type: string;\n name: string;\n url?: string;\n }>;\n funding?: Array<{\n type: string;\n funder?: {\n type: string;\n name: string;\n };\n amount?: {\n type: string;\n currency: string;\n value: string;\n };\n }>;\n };\n agents?: Array<{\n type: string;\n id?: string;\n name?: string;\n description?: string;\n }>;\n credentials?: Array<{\n type: string;\n id?: string;\n name?: string;\n description?: string;\n }>;\n attributes?: Array<{\n '@type': string;\n '@id': string;\n name: string;\n value: string;\n }>;\n project?: {\n type?: string;\n name?: string;\n description?: string;\n hadObjective?: string[];\n plannedStart?: string;\n plannedEnd?: string;\n wasFundedThrough?: Array<{\n type: string;\n moneyAmount?: string;\n moneyCurrency?: string;\n agent?: {\n type: string;\n id?: string;\n name?: string;\n };\n }>;\n };\n researchProfile?: {\n type: string;\n 'ixo:seedQueries'?: string[];\n citation?: Array<{\n type: string;\n name: string;\n url?: string;\n publisher?: string;\n datePublished?: string;\n }>;\n 'ixo:embedding'?: {\n type: string;\n id: string;\n model: string;\n contentUrl: string;\n };\n dateModified?: string;\n };\n}\n\n/**\n * Helper to extract array items from paneldynamic survey fields\n */\nfunction extractPanelDynamicItems<T>(surveyData: Record<string, any>, panelName: string, itemMapper: (item: Record<string, any>) => T | null): T[] {\n const items = surveyData[panelName];\n if (!Array.isArray(items)) return [];\n return items.map(itemMapper).filter((item): item is T => item !== null);\n}\n\n/**\n * Parse comma-separated string into array of trimmed strings\n */\nfunction parseCommaSeparated(value: string | undefined): string[] {\n if (!value || typeof value !== 'string') return [];\n return value\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\n/**\n * Parse language codes from comma-separated string\n */\nfunction parseLanguageCodes(value: string | undefined): string[] {\n return parseCommaSeparated(value);\n}\n\n/**\n * Build image object from URL\n */\nfunction buildImageObject(url: string | undefined): { type: string; id: string; contentUrl: string } | null {\n if (!url) return null;\n return {\n type: 'schema:ImageObject',\n id: url,\n contentUrl: url,\n };\n}\n\n/**\n * Main transformation function\n */\nexport function transformSurveyToCredentialSubject(surveyData: Record<string, any>, entityDid: string): DomainCardCredentialSubject {\n // Build type array from survey selections\n const types: string[] = [];\n if (surveyData['type_1']) types.push(`ixo:${surveyData['type_1']}`);\n if (surveyData['type_2']) types.push(surveyData['type_2']);\n\n // Build additionalType from daoType\n const additionalType: string[] = [];\n if (surveyData['daoType']) additionalType.push(surveyData['daoType']);\n\n // Extract alternate names from paneldynamic\n const alternateNames = extractPanelDynamicItems(surveyData, 'pannel_schema:alternateName', (item) => item['schema:alternateName'] || null);\n\n // Extract sameAs URLs from paneldynamic\n const sameAsUrls = extractPanelDynamicItems(surveyData, 'schema:sameAs', (item) => item['schema:sameAs.url'] || null);\n\n // Build logo from URL or uploaded file\n const logoUrl = surveyData['ixo:imageLogo_url'] || surveyData['ixo:imageLogo']?.[0]?.content;\n const logo = buildImageObject(logoUrl);\n\n // Build profile image from URL or uploaded file\n const profileImageUrl = surveyData['ixo:imageProfile_url'] || surveyData['ixo:imageProfile']?.[0]?.content;\n const profileImage = buildImageObject(profileImageUrl);\n\n // Parse keywords from comma-separated string\n const keywords = parseCommaSeparated(surveyData['schema:keywords']);\n\n // Extract knowsAbout from paneldynamic\n const knowsAbout = extractPanelDynamicItems(surveyData, 'pannel_ixo:knowsAbout', (item) => item['ixo:knowsAbout'] || null);\n\n // Build address object\n const hasAddressData =\n surveyData['schema:streetAddress'] ||\n surveyData['schema:addressLocality'] ||\n surveyData['schema:addressRegion'] ||\n surveyData['schema:postalCode'] ||\n surveyData['schema:addressCountry'];\n\n const address = hasAddressData\n ? {\n type: 'schema:PostalAddress',\n streetAddress: surveyData['schema:streetAddress'] || undefined,\n addressLocality: surveyData['schema:addressLocality'] || undefined,\n addressRegion: surveyData['schema:addressRegion'] || undefined,\n postalCode: surveyData['schema:postalCode'] || undefined,\n addressCountry: surveyData['schema:addressCountry'] || undefined,\n }\n : undefined;\n\n // Build areaServed\n const areaServed = surveyData['schema:AdministrativeArea']\n ? {\n type: 'schema:AdministrativeArea',\n name: surveyData['schema:AdministrativeArea'],\n }\n : undefined;\n\n // Extract contact points from paneldynamic\n const contactPoints = extractPanelDynamicItems(surveyData, 'pannel:schema_contactPoint', (item) => {\n if (!item['schema:contactType'] && !item['schema:email'] && !item['schema:telephone']) return null;\n return {\n type: 'schema:ContactPoint',\n contactType: item['schema:contactType'] || 'general',\n email: item['schema:email'] || undefined,\n telephone: item['schema:telephone'] || undefined,\n availableLanguage: parseLanguageCodes(item['schema:availableLanguage']),\n };\n });\n\n // Build composition object\n const hasParts = extractPanelDynamicItems(surveyData, 'schema:hasPart', (item) => {\n if (!item['schema:hasPart.name'] && !item['schema:hasPart.id']) return null;\n return {\n type: 'schema:CreativeWork',\n id: item['schema:hasPart.id'] || undefined,\n name: item['schema:hasPart.name'] || undefined,\n description: item['schema:hasPart.description'] || undefined,\n url: item['schema:hasPart.url'] || undefined,\n creator: item['schema:hasPart.creator.name']\n ? {\n type: 'schema:Organization',\n name: item['schema:hasPart.creator.name'],\n }\n : undefined,\n };\n });\n\n const subjectOf = extractPanelDynamicItems(surveyData, 'schema:subjectOf', (item) => {\n if (!item['schema:subjectOf.name']) return null;\n return {\n type: 'schema:CreativeWork',\n name: item['schema:subjectOf.name'],\n url: item['schema:subjectOf.url'] || undefined,\n author: item['schema:subjectOf.author.name']\n ? {\n type: 'schema:Organisation',\n name: item['schema:subjectOf.author.name'],\n }\n : undefined,\n };\n });\n\n const composition =\n hasParts.length > 0 || subjectOf.length > 0\n ? {\n type: 'schema:Collection',\n hasPart: hasParts.length > 0 ? hasParts : undefined,\n subjectOf: subjectOf.length > 0 ? subjectOf : undefined,\n }\n : undefined;\n\n // Extract makesOffer from paneldynamic\n const makesOffer = extractPanelDynamicItems(surveyData, 'schema:makesOffer', (item) => {\n if (!item['schema:itemOffered.name']) return null;\n return {\n type: 'schema:Offer',\n itemOffered: {\n type: item['schema:itemOffered.type'] === 'service' ? 'schema:Service' : 'schema:Product',\n name: item['schema:itemOffered.name'] || undefined,\n description: item['schema:itemOffered.description'] || undefined,\n url: item['schema:itemOffered.url'] || undefined,\n },\n };\n });\n\n // Build relationships object\n const memberOf = extractPanelDynamicItems(surveyData, 'schema:memberOf', (item) => {\n if (!item['schema:memberOf.name']) return null;\n return {\n type: 'schema:Organization',\n name: item['schema:memberOf.name'],\n };\n });\n\n const wasAssociatedWith = extractPanelDynamicItems(surveyData, 'schema:wasAssociatedWith', (item) => {\n if (!item['schema:wasAssociatedWith.name']) return null;\n return {\n type: 'schema:Organization',\n name: item['schema:wasAssociatedWith.name'],\n url: item['schema:wasAssociatedWith.url'] || undefined,\n };\n });\n\n const funding = extractPanelDynamicItems(surveyData, 'schema:funding', (item) => {\n if (!item['schema:funder.name']) return null;\n return {\n type: 'schema:MonetaryGrant',\n funder: {\n type: 'schema:Organization',\n name: item['schema:funder.name'],\n },\n amount:\n item['schema:amount.value'] || item['schema:amount.currency']\n ? {\n type: 'schema:MonetaryAmount',\n currency: item['schema:amount.currency'] || 'USD',\n value: item['schema:amount.value'] || '0',\n }\n : undefined,\n };\n });\n\n const relationships =\n memberOf.length > 0 || wasAssociatedWith.length > 0 || funding.length > 0\n ? {\n memberOf: memberOf.length > 0 ? memberOf : undefined,\n 'prov:wasAssociatedWith': wasAssociatedWith.length > 0 ? wasAssociatedWith : undefined,\n funding: funding.length > 0 ? funding : undefined,\n }\n : undefined;\n\n // Extract agents from paneldynamic\n const agents = extractPanelDynamicItems(surveyData, 'ixo:agentCard', (item) => {\n if (!item['ixo:agentCard.name'] && !item['ixo:agentCard.id']) return null;\n return {\n type: 'ixo:AgentCard',\n id: item['ixo:agentCard.id'] || undefined,\n name: item['ixo:agentCard.name'] || undefined,\n description: item['ixo:agentCard.description'] || undefined,\n };\n });\n\n // Extract credentials from paneldynamic\n const credentials = extractPanelDynamicItems(surveyData, 'ixo:verifiableCredential', (item) => {\n if (!item['schema:Name'] && !item['schema:ID']) return null;\n return {\n type: 'VerifiableCredential',\n id: item['schema:ID'] || undefined,\n name: item['schema:Name'] || undefined,\n description: item['schema:description'] || undefined,\n };\n });\n\n // Extract attributes from paneldynamic\n const attributes = extractPanelDynamicItems(surveyData, 'ixo:attribute', (item) => {\n if (!item['schema:name_2']) return null;\n return {\n '@type': 'ixo:Attribute',\n '@id': item['schema:ID_2'] || `attribute:${item['schema:name_2'].replace(/\\s+/g, '_').toLowerCase()}`,\n name: item['schema:name_2'],\n value: item['schema:description_2'] || '',\n };\n });\n\n // Build project object from paneldynamic\n const projects = extractPanelDynamicItems(surveyData, 'pannel_proj:project', (item) => {\n if (!item['proj:project.name']) return null;\n\n // Extract objectives\n const objectives = extractPanelDynamicItems(item, 'proj:project.hadObjective', (objItem) => objItem['proj:hadObjective'] || null);\n\n // Extract funding\n const projectFunding = extractPanelDynamicItems(item, 'proj:wasFundedThrough', (fundItem) => ({\n type: 'proj:FundingAssociation',\n moneyAmount: fundItem['proj:moneyAmount'] || undefined,\n moneyCurrency: fundItem['proj:moneyCurrency'] || undefined,\n agent:\n fundItem['prov.agent.name'] || fundItem['prov:agent.id']\n ? {\n type: 'prov:Agent',\n id: fundItem['prov:agent.id'] || undefined,\n name: fundItem['prov.agent.name'] || undefined,\n }\n : undefined,\n }));\n\n return {\n type: 'proj:Project',\n name: item['proj:project.name'],\n description: item['proj:project.description'] || undefined,\n hadObjective: objectives.length > 0 ? objectives : undefined,\n plannedStart: item['proj:plannedStart'] || undefined,\n plannedEnd: item['proj:plannedEnd'] || undefined,\n wasFundedThrough: projectFunding.length > 0 ? projectFunding : undefined,\n };\n });\n\n // Use first project if multiple (or combine as needed)\n const project = projects.length > 0 ? projects[0] : undefined;\n\n // Build research profile\n const seedQueries = extractPanelDynamicItems(surveyData, 'ixo:ResearchProfile', (item) => item['ixo:seedQueries'] || null);\n\n const citations = extractPanelDynamicItems(surveyData, 'schema:creativeWork', (item) => {\n if (!item['schema:creativeWork.name']) return null;\n return {\n type: 'schema:CreativeWork',\n name: item['schema:creativeWork.name'],\n url: item['schema:creativeWork.url'] || undefined,\n publisher: item['schema:creativeWork.publisher'] || undefined,\n datePublished: item['schema:creativeWork.datePublished'] || undefined,\n };\n });\n\n const researchProfile =\n seedQueries.length > 0 || citations.length > 0\n ? {\n type: 'ixo:ResearchProfile',\n 'ixo:seedQueries': seedQueries.length > 0 ? seedQueries : undefined,\n citation: citations.length > 0 ? citations : undefined,\n dateModified: new Date().toISOString(),\n }\n : undefined;\n\n // Build the final credentialSubject\n const credentialSubject: DomainCardCredentialSubject = {\n id: entityDid,\n type: types.length > 0 ? types : ['ixo:dao'],\n name: surveyData['schema:name'] || '',\n description: surveyData['schema.description'] || '',\n };\n\n // Add optional fields only if they have values\n if (additionalType.length > 0) credentialSubject.additionalType = additionalType;\n if (alternateNames.length > 0) credentialSubject.alternateName = alternateNames;\n if (surveyData['schema:url']) credentialSubject.url = surveyData['schema:url'];\n if (sameAsUrls.length > 0) credentialSubject.sameAs = sameAsUrls;\n if (logo) credentialSubject.logo = logo;\n if (profileImage) credentialSubject.image = [profileImage];\n if (keywords.length > 0) credentialSubject.keywords = keywords;\n if (knowsAbout.length > 0) credentialSubject.knowsAbout = knowsAbout;\n if (address) credentialSubject.address = address;\n if (areaServed) credentialSubject.areaServed = areaServed;\n if (contactPoints.length > 0) credentialSubject.contactPoint = contactPoints;\n if (composition) credentialSubject.composition = composition;\n if (makesOffer.length > 0) credentialSubject.makesOffer = makesOffer;\n if (relationships) credentialSubject.relationships = relationships;\n if (agents.length > 0) credentialSubject.agents = agents;\n if (credentials.length > 0) credentialSubject.credentials = credentials;\n if (attributes.length > 0) credentialSubject.attributes = attributes;\n if (project) credentialSubject.project = project;\n if (researchProfile) credentialSubject.researchProfile = researchProfile;\n\n return credentialSubject;\n}\n","/**\n * Builds an unsigned W3C Verifiable Credential envelope for a Domain Card.\n * The credential follows the ixo:DomainCard schema.\n */\n\nimport type { DomainCardCredentialSubject } from './transformSurveyToCredentialSubject';\n\n/**\n * JSON-LD context for Domain Card credentials\n */\nexport const DOMAIN_CARD_CONTEXT = [\n 'https://w3id.org/ixo/context/v1',\n {\n schema: 'https://schema.org/',\n ixo: 'https://w3id.org/ixo/vocab/v1',\n prov: 'http://www.w3.org/ns/prov#',\n proj: 'http://www.w3.org/ns/project#',\n id: '@id',\n type: '@type',\n '@protected': true,\n },\n] as const;\n\n/**\n * Domain Card credential schema reference\n */\nexport const DOMAIN_CARD_SCHEMA = {\n id: 'https://w3id.org/ixo/protocol/schema/v1#domainCard',\n type: 'JsonSchema',\n} as const;\n\n/**\n * DataIntegrityProof structure for signed credentials\n */\nexport interface DataIntegrityProof {\n type: 'DataIntegrityProof';\n created: string;\n verificationMethod: string;\n cryptosuite: 'eddsa-rdfc-2022';\n proofPurpose: 'assertionMethod';\n proofValue: string;\n}\n\n/**\n * Unsigned Verifiable Credential structure\n */\nexport interface UnsignedVerifiableCredential {\n '@context': typeof DOMAIN_CARD_CONTEXT;\n id: string;\n type: ['VerifiableCredential', 'ixo:DomainCard'];\n issuer: {\n id: string;\n };\n validFrom: string;\n validUntil: string;\n credentialSchema: typeof DOMAIN_CARD_SCHEMA;\n credentialSubject: DomainCardCredentialSubject;\n}\n\n/**\n * Signed Verifiable Credential with proof\n */\nexport interface SignedVerifiableCredential extends UnsignedVerifiableCredential {\n proof: DataIntegrityProof;\n}\n\n/**\n * Parameters for building an unsigned verifiable credential\n */\nexport interface BuildCredentialParams {\n /** DID of the entity this domain card describes */\n entityDid: string;\n /** DID of the issuer signing this credential */\n issuerDid: string;\n /** The credential subject containing domain card data */\n credentialSubject: DomainCardCredentialSubject;\n /** ISO 8601 date string for when credential becomes valid */\n validFrom: string;\n /** ISO 8601 date string for when credential expires */\n validUntil: string;\n}\n\n/**\n * Converts a date input to ISO 8601 string format.\n * Handles various input formats from survey fields.\n */\nfunction toISOString(dateInput: string | Date | undefined, fallback: Date = new Date()): string {\n if (!dateInput) {\n return fallback.toISOString();\n }\n\n if (dateInput instanceof Date) {\n return dateInput.toISOString();\n }\n\n // Handle date-only strings (YYYY-MM-DD) from date inputs\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(dateInput)) {\n return new Date(dateInput + 'T00:00:00.000Z').toISOString();\n }\n\n // Handle datetime-local strings (YYYY-MM-DDTHH:MM)\n if (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/.test(dateInput)) {\n return new Date(dateInput + ':00.000Z').toISOString();\n }\n\n // Try parsing as-is\n const parsed = new Date(dateInput);\n if (!isNaN(parsed.getTime())) {\n return parsed.toISOString();\n }\n\n return fallback.toISOString();\n}\n\n/**\n * Calculates a default expiration date (5 years from validFrom).\n */\nfunction getDefaultValidUntil(validFrom: string): string {\n const fromDate = new Date(validFrom);\n const untilDate = new Date(fromDate);\n untilDate.setFullYear(untilDate.getFullYear() + 5);\n return untilDate.toISOString();\n}\n\n/**\n * Builds an unsigned verifiable credential for a Domain Card.\n *\n * @param params - Parameters for building the credential\n * @returns An unsigned verifiable credential ready for signing\n *\n * @example\n * ```typescript\n * const credential = buildVerifiableCredential({\n * entityDid: 'did:ixo:entity:abc123',\n * issuerDid: 'did:ixo:ixo1xyz...',\n * credentialSubject: transformedSubject,\n * validFrom: '2025-01-01',\n * validUntil: '2030-01-01',\n * });\n * ```\n */\nexport function buildVerifiableCredential(params: BuildCredentialParams): UnsignedVerifiableCredential {\n const { entityDid, issuerDid, credentialSubject, validFrom, validUntil } = params;\n\n const validFromISO = toISOString(validFrom);\n const validUntilISO = validUntil ? toISOString(validUntil) : getDefaultValidUntil(validFromISO);\n\n return {\n '@context': DOMAIN_CARD_CONTEXT,\n id: `${entityDid}#dmn`,\n type: ['VerifiableCredential', 'ixo:DomainCard'],\n issuer: {\n id: issuerDid,\n },\n validFrom: validFromISO,\n validUntil: validUntilISO,\n credentialSchema: DOMAIN_CARD_SCHEMA,\n credentialSubject: {\n ...credentialSubject,\n // Ensure the subject ID matches the entity DID\n id: entityDid,\n },\n };\n}\n\n/**\n * LinkedResource structure for storing the credential on-chain\n */\nexport interface DomainCardLinkedResource {\n id: string;\n type: 'domainCard';\n proof: string;\n right: string;\n encrypted: string;\n mediaType: 'application/json';\n description: string;\n serviceEndpoint: string;\n}\n\n/**\n * Builds a LinkedResource object for a Domain Card credential.\n *\n * @param params - Parameters for building the linked resource\n * @returns A LinkedResource object ready to be added to an entity\n *\n * @example\n * ```typescript\n * const linkedResource = buildDomainCardLinkedResource({\n * entityDid: 'did:ixo:entity:abc123',\n * cid: 'bafkreid2t3hp7qi6ynyvaz4o3bphyjtqcz2qwlhm4odvuvesnh6dtv3hvu',\n * serviceEndpoint: 'https://mx.ixo.earth/_matrix/media/v3/download/...',\n * });\n * ```\n */\nexport function buildDomainCardLinkedResource(params: { entityDid: string; cid: string; serviceEndpoint: string; description?: string }): DomainCardLinkedResource {\n return {\n id: `${params.entityDid}#dmn`,\n type: 'domainCard',\n proof: params.cid,\n right: '',\n encrypted: 'false',\n mediaType: 'application/json',\n description: params.description || 'Domain Card',\n serviceEndpoint: params.serviceEndpoint,\n };\n}\n","interface SurveyElement {\n type: string;\n name?: string;\n elements?: SurveyElement[];\n templateElements?: SurveyElement[];\n}\n\ninterface SurveyPage {\n name: string;\n elements: SurveyElement[];\n}\n\ninterface SurveyDefinition {\n pages: SurveyPage[];\n}\n\n/**\n * Recursively extracts field names from survey elements.\n * Handles nested panels and paneldynamic template elements.\n */\nfunction extractFieldsFromElements(elements: SurveyElement[], fields: Record<string, unknown>): void {\n for (const element of elements) {\n // Skip panel containers but process their children\n if (element.type === 'panel' && element.elements) {\n extractFieldsFromElements(element.elements, fields);\n continue;\n }\n\n // Handle paneldynamic - these create arrays of objects\n if (element.type === 'paneldynamic' && element.name) {\n // Initialize as empty array for dynamic panels\n fields[element.name] = [];\n\n // Also extract template element names for reference\n if (element.templateElements) {\n extractFieldsFromElements(element.templateElements, fields);\n }\n continue;\n }\n\n // Regular input elements with a name\n if (element.name && element.type !== 'panel') {\n // Set appropriate default based on type\n switch (element.type) {\n case 'boolean':\n fields[element.name] = false;\n break;\n case 'checkbox':\n fields[element.name] = [];\n break;\n case 'file':\n fields[element.name] = [];\n break;\n default:\n fields[element.name] = '';\n }\n }\n\n // Handle nested elements in regular panels\n if (element.elements) {\n extractFieldsFromElements(element.elements, fields);\n }\n }\n}\n\n/**\n * Extracts all field names from a SurveyJS survey definition\n * and creates an empty answers template object.\n *\n * This template can be used to:\n * 1. Initialize the answers prop with all possible fields\n * 2. Provide AI agents with the structure they can fill in\n *\n * @param surveyDef - The SurveyJS survey definition object\n * @returns An object with all field names as keys and empty/default values\n */\nexport function extractSurveyAnswersTemplate(surveyDef: SurveyDefinition): Record<string, unknown> {\n const fields: Record<string, unknown> = {};\n\n for (const page of surveyDef.pages) {\n extractFieldsFromElements(page.elements, fields);\n }\n\n return fields;\n}\n\n/**\n * Creates a stringified empty answers template from a survey definition.\n * Useful for initializing the block prop.\n */\nexport function createEmptyAnswersJson(surveyDef: SurveyDefinition): string {\n return JSON.stringify(extractSurveyAnswersTemplate(surveyDef));\n}\n","import { BlockPropSchemas, BlockType, ValidDependencies } from '../types/blockDependency';\n\nexport interface BlockRegistryEntry<T extends BlockType = BlockType> {\n type: T;\n propSchema: BlockPropSchemas[T];\n validDependencies: T extends keyof ValidDependencies ? ValidDependencies[T] : [];\n defaultProps: Partial<BlockPropSchemas[T]>;\n}\n\nclass BlockRegistry {\n private blocks = new Map<BlockType, BlockRegistryEntry>();\n\n register<T extends BlockType>(entry: BlockRegistryEntry<T>): void {\n this.blocks.set(entry.type, entry as BlockRegistryEntry);\n }\n\n get<T extends BlockType>(type: T): BlockRegistryEntry<T> | undefined {\n return this.blocks.get(type) as BlockRegistryEntry<T>;\n }\n\n getAll(): Map<BlockType, BlockRegistryEntry> {\n return new Map(this.blocks);\n }\n\n getValidDependencies<T extends BlockType>(type: T): BlockType[] {\n const entry = this.get(type);\n return entry?.validDependencies || [];\n }\n\n getPropSchema<T extends BlockType>(type: T): BlockPropSchemas[T] | undefined {\n const entry = this.get(type);\n return entry?.propSchema;\n }\n\n isValidDependency<T extends BlockType>(blockType: T, dependencyType: BlockType): boolean {\n const validDeps = this.getValidDependencies(blockType);\n return validDeps.includes(dependencyType);\n }\n}\n\nexport const blockRegistry = new BlockRegistry();\n\nblockRegistry.register({\n type: 'proposal',\n propSchema: {\n title: '',\n description: '',\n icon: '📝',\n proposalId: '',\n status: 'draft',\n contractAddress: '',\n coreAddress: '',\n createdProposalId: '',\n },\n validDependencies: [],\n defaultProps: {\n icon: '📝',\n status: 'draft',\n },\n});\n\nblockRegistry.register({\n type: 'proposalVote',\n propSchema: {\n title: '',\n subtitle: '',\n icon: '🗳️',\n status: 'open',\n daysLeft: 0,\n proposalId: '',\n proposalBlockId: '',\n proposalContractAddress: '',\n },\n validDependencies: ['proposal'],\n defaultProps: {\n icon: '🗳️',\n status: 'open',\n daysLeft: 0,\n proposalBlockId: '',\n },\n});\n\nblockRegistry.register({\n type: 'list',\n propSchema: {\n title: '',\n did: '',\n fragmentIdentifier: '',\n },\n validDependencies: [],\n defaultProps: {},\n});\n\nblockRegistry.register({\n type: 'overview',\n propSchema: {\n did: '',\n },\n validDependencies: [],\n defaultProps: {},\n});\n\nblockRegistry.register({\n type: 'enumChecklist',\n propSchema: {\n listType: '',\n listConfig: '{}',\n },\n validDependencies: [],\n defaultProps: {},\n});\n\nblockRegistry.register({\n type: 'notify',\n propSchema: {\n title: '',\n description: '',\n icon: 'bell',\n channel: 'email',\n to: '[]',\n cc: '[]',\n bcc: '[]',\n subject: '',\n body: '',\n bodyType: 'text',\n from: '',\n replyTo: '',\n templateId: '',\n templateVariables: '{}',\n status: 'idle',\n messageId: '',\n sentAt: '',\n errorMessage: '',\n conditions: '',\n },\n validDependencies: [],\n defaultProps: {\n icon: 'bell',\n channel: 'email',\n bodyType: 'text',\n status: 'idle',\n },\n});\n\nblockRegistry.register({\n type: 'bid',\n propSchema: {\n title: '',\n description: '',\n did: '',\n selectedCollections: '[]',\n adminAddress: '',\n },\n validDependencies: [],\n defaultProps: {},\n});\n\nblockRegistry.register({\n type: 'claim',\n propSchema: {\n title: '',\n description: '',\n icon: 'square-check',\n deedDid: '',\n selectedCollections: '[]',\n adminAddress: '',\n },\n validDependencies: [],\n defaultProps: {\n icon: 'square-check',\n },\n});\n\nblockRegistry.register({\n type: 'domainCreator',\n propSchema: {\n title: '',\n description: '',\n icon: 'file-text',\n surveySchema: '',\n answers: '',\n lastSubmission: '',\n },\n validDependencies: [],\n defaultProps: {\n icon: 'file-text',\n surveySchema: '',\n answers: '',\n lastSubmission: '',\n },\n});\n","import { useMemo, useEffect, useState, useCallback } from 'react';\n\ninterface DependencyConfig {\n [blockType: string]: {\n blockId: string;\n subscribes: {\n [propName: string]: boolean;\n };\n };\n}\n\n/**\n * Parse dependsOn configuration from block props\n */\nfunction parseDependsOn(block: any): DependencyConfig | null {\n if (!block?.props?.dependsOn) {\n return null;\n }\n\n try {\n if (typeof block.props.dependsOn === 'object') {\n return block.props.dependsOn;\n }\n if (typeof block.props.dependsOn === 'string') {\n return JSON.parse(block.props.dependsOn);\n }\n return null;\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Hook for managing block dependencies with reactive updates\n * Works similar to useBlockConditions - re-evaluates when dependent blocks change\n *\n * @param block The block instance\n * @param editor The editor instance\n * @returns Object with resolved dependencies and update function\n */\nexport function useBlockDependencies(block: any, editor: any) {\n // Extract stable reference to document\n const editorDocument = editor?.document;\n\n // Parse dependency configuration from block's dependsOn prop\n const dependencies = useMemo(() => {\n return parseDependsOn(block);\n }, [block?.props?.dependsOn]);\n\n // Track when source blocks change\n const [sourceBlockVersion, setSourceBlockVersion] = useState(0);\n\n useEffect(() => {\n if (!editor || !dependencies) {\n return;\n }\n\n // Get all source block IDs from dependencies\n const sourceBlockIds = new Set(\n Object.values(dependencies)\n .filter((dep) => dep && dep.blockId)\n .map((dep) => dep!.blockId)\n );\n\n if (sourceBlockIds.size === 0) {\n return;\n }\n\n // Listen for document changes and trigger re-evaluation\n const cleanup = editor.onChange(() => {\n setSourceBlockVersion((prev) => prev + 1);\n });\n\n return cleanup;\n }, [editor, dependencies]);\n\n // Resolve the actual dependency values from the document\n const resolvedDependencies = useMemo(() => {\n // If no document or block, return empty\n if (!editorDocument || !block || !dependencies) {\n return {};\n }\n\n const resolved: any = {};\n\n Object.entries(dependencies).forEach(([depType, config]) => {\n if (!config || !config.blockId || config.blockId === '') {\n resolved[depType] = null;\n return;\n }\n\n // Find the target block in the document\n const targetBlock = editorDocument.find((docBlock: any) => docBlock.id === config.blockId && docBlock.type === depType);\n\n if (!targetBlock) {\n resolved[depType] = null;\n return;\n }\n\n // Extract subscribed properties\n const extracted: any = { blockId: config.blockId };\n Object.entries(config.subscribes).forEach(([prop, shouldSubscribe]) => {\n if (shouldSubscribe === true && targetBlock.props && prop in targetBlock.props) {\n extracted[prop] = targetBlock.props[prop];\n }\n });\n\n resolved[depType] = extracted;\n });\n\n return resolved;\n }, [dependencies, editorDocument, block?.id, sourceBlockVersion]);\n\n // Function to update a specific dependency's blockId\n const updateDependency = useCallback(\n (dependencyType: string, targetBlockId: string | null) => {\n if (!block || !editor) {\n return;\n }\n\n const currentDeps = parseDependsOn(block) || {};\n\n // If no dependency config exists for this type, cannot update\n if (!currentDeps[dependencyType]) {\n return;\n }\n\n // Update the blockId\n const updatedDeps = {\n ...currentDeps,\n [dependencyType]: {\n ...currentDeps[dependencyType],\n blockId: targetBlockId || '',\n },\n };\n\n // Write to dependsOn prop\n const depsString = JSON.stringify(updatedDeps);\n\n try {\n editor.updateBlock(block.id, {\n ...block,\n props: {\n ...block.props,\n dependsOn: depsString,\n },\n });\n } catch (error) {\n // Silent error\n }\n },\n [block, editor]\n );\n\n return {\n dependencies: resolvedDependencies,\n updateDependency,\n };\n}\n","import { useMemo } from 'react';\nimport { DependencyConfig, getDependencies } from '../stores/dependencyHelpers';\n\n/**\n * Hook that manages the dependsOn configuration for a block\n * Parses the dependsOn prop and resolves dependency values\n * This is a read-only hook that doesn't modify block props\n *\n * @param block The block instance\n * @param editor The editor instance\n * @returns Object with parsed config and resolved dependencies\n */\nexport function useDependsOn(block: any, editor: any) {\n // Extract stable reference to document\n const editorDocument = editor?.document;\n\n // Parse the dependsOn configuration from block props\n const dependsOnConfig = useMemo(() => {\n if (!block?.props?.dependsOn) {\n return null;\n }\n\n try {\n // Parse the JSON string from the dependsOn prop\n const config = typeof block.props.dependsOn === 'string' ? JSON.parse(block.props.dependsOn) : block.props.dependsOn;\n\n return config as DependencyConfig;\n } catch (error) {\n return null;\n }\n }, [block?.props?.dependsOn]);\n\n // Get current dependencies (read-only)\n const dependencies = useMemo(() => {\n return getDependencies(block);\n }, [block?.props?.dependencies]);\n\n // Resolve the actual dependency values from the document\n const resolvedDependencies = useMemo(() => {\n if (!block || !editorDocument) {\n return {};\n }\n\n const deps = dependencies;\n if (!deps) {\n return {};\n }\n\n const resolved: any = {};\n\n Object.entries(deps).forEach(([depType, config]) => {\n if (!config || !config.blockId || config.blockId === '') {\n resolved[depType] = null;\n return;\n }\n\n // Find the target block in the document\n const targetBlock = editorDocument.find((docBlock: any) => docBlock.id === config.blockId && docBlock.type === depType);\n\n if (!targetBlock) {\n resolved[depType] = null;\n return;\n }\n\n // Extract subscribed properties\n const extracted: any = {};\n Object.entries(config.subscribes).forEach(([prop, shouldSubscribe]) => {\n if (shouldSubscribe === true && targetBlock.props && prop in targetBlock.props) {\n extracted[prop] = targetBlock.props[prop];\n }\n });\n\n resolved[depType] = extracted;\n });\n\n return resolved;\n }, [\n dependencies, // Re-run when dependencies change\n editorDocument, // Re-run when document changes (more stable than editor?.document)\n block?.id,\n ]);\n\n return {\n dependsOnConfig,\n dependencies,\n resolvedDependencies,\n };\n}\n","import { CheckboxBlockSpec } from './checkbox';\nimport { ListBlockSpec } from './list';\nimport { OverviewBlock } from './overview';\nimport { ProposalBlockSpec } from './proposal';\nimport { EnumChecklistBlock, EnumChecklistBlockType } from './enumChecklist/EnumChecklistBlock';\nimport { ApiRequestBlockSpec } from './apiRequest';\nimport { NotifyBlockSpec } from './notify';\nimport { ClaimBlockSpec } from './claim';\nimport { BidBlockSpec } from './bid';\nimport { EvaluatorBlockSpec } from './evaluator';\nimport { VisualizationBlockSpec } from './visualization';\nimport { DynamicListBlockSpec } from './dynamicList';\nimport { DomainCreatorBlockSpec } from './domainCreator';\n\n// Export new dependency system types and utilities\n\nexport {\n CheckboxBlockSpec,\n ListBlockSpec,\n OverviewBlock,\n ProposalBlockSpec,\n ApiRequestBlockSpec,\n ClaimBlockSpec,\n BidBlockSpec,\n EvaluatorBlockSpec,\n DomainCreatorBlockSpec,\n VisualizationBlockSpec,\n DynamicListBlockSpec,\n};\nexport type { CheckboxBlockProps } from './checkbox';\nexport type { ListBlockSettings, ListBlockProps } from './list';\nexport type { OverviewBlockProps } from './overview';\nexport type { ProposalBlockProps, CreateProposalParams } from './proposal';\nexport type { ApiRequestBlockProps, HttpMethod, KeyValuePair } from './apiRequest';\nexport type { NotifyBlockProps } from './notify';\nexport type { ClaimBlockProps } from './claim';\nexport type { BidBlockProps } from './bid';\nexport type { EvaluatorBlockProps } from './evaluator';\nexport type { DomainCreatorBlockProps } from './domainCreator';\nexport type { VisualizationBlockProps } from './visualization';\nexport type { DynamicListBlockProps, DynamicListColumn, DataSource, ColumnPosition, DynamicListAction, DynamicListPanelConfig } from './dynamicList';\n\n// Export new dependency system types and utilities\nexport type { BlockDependency, BlockPropSchemas, BlockType, DependencyConfig, ResolvedDependencies, ValidDependencies } from './types/blockDependency';\nexport { blockRegistry } from './registry/blockRegistry';\nexport { useBlockDependencies } from './hooks/useBlockDependencies';\nexport { useDependsOn } from './hooks/useDependsOn';\n\n// Export condition system types and utilities\nexport type { BlockCondition, ConditionConfig, ConditionableProperty, BlockConditionsResult } from './types/conditions';\nexport { useBlockConditions } from './hooks/useBlockConditions';\nexport { ConditionBuilderTab } from './components/ConditionBuilder';\nexport { parseConditionConfig, stringifyConditionConfig, getAvailableBlocks } from './utils/conditionUtils';\nexport { getConditionableProperties } from './registry/conditionableProperties';\n\n// Block configuration for easy import\nexport const blockSpecs = {\n checkbox: CheckboxBlockSpec,\n list: ListBlockSpec,\n enumChecklist: EnumChecklistBlock,\n overview: OverviewBlock,\n proposal: ProposalBlockSpec,\n apiRequest: ApiRequestBlockSpec,\n notify: NotifyBlockSpec,\n claim: ClaimBlockSpec,\n bid: BidBlockSpec,\n evaluator: EvaluatorBlockSpec,\n domainCreator: DomainCreatorBlockSpec,\n visualization: VisualizationBlockSpec,\n dynamicList: DynamicListBlockSpec,\n};\n\n// Slash menu items configuration\nexport const getExtraSlashMenuItems = (editor: any) => {\n const slashMenuList = [\n {\n title: 'Checkbox',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'checkbox',\n props: {\n checked: false,\n allowedCheckers: 'all',\n initialChecked: false,\n title: '',\n description: '',\n visibility: 'all',\n dependencies: '',\n conditions: '',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['checkbox', 'task', 'todo'],\n group: 'Basics',\n subtext: 'Add an interactive checkbox with flow permissions',\n },\n {\n title: 'Domain Creator',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'domainCreator',\n props: {\n title: '',\n description: '',\n icon: 'file-text',\n lastSubmission: '',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['domain', 'creator', 'domain-creator'],\n group: 'Domains',\n subtext: 'Launch a survey-driven domain creation flow',\n },\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: 'Enum Checklist',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: EnumChecklistBlockType,\n props: {\n listType: '',\n listConfig: '{}',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['enum', 'enum-checklist', 'enum-list', 'enum-checklist-block'],\n group: 'Domains',\n subtext: 'Create a predefined enum checklist',\n },\n {\n title: 'Overview',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'overview',\n props: {},\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 domain card data',\n },\n {\n title: 'Proposal',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'proposal',\n props: {\n title: '',\n description: '',\n icon: 'A��,�?oA?',\n proposalId: '',\n status: 'draft',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['proposal', 'create-proposal', 'dao-proposal', 'governance'],\n group: 'DAO',\n subtext: 'Create a new DAO proposal',\n },\n {\n title: 'API Request',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'apiRequest',\n props: {\n title: '',\n description: '',\n icon: 'square-check',\n endpoint: '',\n method: 'GET',\n headers: '[]',\n body: '[]',\n response: '',\n status: 'idle',\n conditions: '',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['api', 'api-request', 'request', 'http', 'fetch'],\n group: 'Basics',\n subtext: 'Make HTTP requests and handle responses',\n },\n {\n title: 'Claim',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'claim',\n props: {},\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['claim', 'submission', 'form', 'attestation'],\n group: 'DAO',\n subtext: 'Create and manage claims with submission tracking',\n },\n {\n title: 'Bid',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'bid',\n props: {},\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['bid', 'offer', 'tender'],\n group: 'DAO',\n subtext: 'Create and submit bids',\n },\n {\n title: 'Evaluator',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'evaluator',\n props: {},\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['evaluator', 'evaluate', 'review', 'assessment'],\n group: 'DAO',\n subtext: 'Evaluate and review submitted claims',\n },\n {\n title: 'Visualization',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'visualization',\n props: {\n vizType: '',\n config: '{}',\n title: '',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['visualization', 'chart', 'graph', 'table', 'ag-ui'],\n group: 'Basics',\n subtext: 'Add an AG-UI visualization (chart, table, etc.)',\n },\n {\n title: 'Dynamic List',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'dynamicList',\n props: {\n listId: '',\n title: '',\n columns: '[]',\n dataSource: '{}',\n snapshot: '',\n snapshotTimestamp: '',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['dynamic-list', 'action-list', 'ag-ui-list', 'oracle-list'],\n group: 'Basics',\n subtext: 'Add a dynamic list from AG-UI with snapshot support',\n },\n ];\n\n const yRoot = editor?._yRoot;\n const docType = yRoot?.get('docType');\n\n // Remove action blocks if docType is page,\n if (docType === 'page') {\n return slashMenuList.filter((item) => item.title !== 'Proposal');\n }\n\n return slashMenuList;\n};\n","import { useCreateBlockNote } from '@blocknote/react';\nimport { BlockNoteSchema, defaultBlockSpecs, defaultInlineContentSpecs, defaultStyleSpecs } from '@blocknote/core';\nimport { IxoEditorOptions, IxoEditorType } from '../../core/types';\nimport { blockSpecs } from '../blocks';\n\n/**\n * Custom hook that wraps useCreateBlockNote with IXO-specific configurations (Mantine version)\n * @param options - Configuration options for the IxoEditor\n * @returns A configured IxoEditor instance with augmented type properties\n */\nexport function useCreateIxoEditor(options?: IxoEditorOptions): IxoEditorType | undefined {\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 docType = 'flow',\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 // Augment editor with IXO-specific properties to match IxoEditorType\n if (editor) {\n const ixoEditor = editor as unknown as IxoEditorType;\n ixoEditor._ixoConfig = {\n theme,\n editable,\n sideMenu,\n slashMenu,\n formattingToolbar,\n linkToolbar,\n filePanel,\n tableHandles,\n };\n ixoEditor.mode = 'flow'; // Default mode for non-collaborative editor\n ixoEditor.docType = docType; // Simple prop-based value, not synced via CRDT\n\n // Set the isEditable property on the editor instance\n ixoEditor.isEditable = editable;\n\n return ixoEditor;\n }\n\n return editor as IxoEditorType | undefined;\n}\n","import { useCreateBlockNote } from '@blocknote/react';\nimport { BlockNoteSchema, defaultBlockSpecs, defaultInlineContentSpecs, defaultStyleSpecs } from '@blocknote/core';\nimport { IxoCollaborativeEditorOptions, IxoEditorType, ImageData, FlowNode, SignedCapability } from '../../core/types';\nimport { blockSpecs } from '../blocks';\nimport { useMatrixProvider } from '../../core/hooks/useMatrixProvider';\nimport { useCollaborativeYDoc } from './useCollaborativeYDoc';\nimport { useMemo, useEffect } from 'react';\nimport type { Doc, Map as YMap, Array as YArray, Text as YText } from 'yjs';\nimport { MatrixMetadataManager } from '../../core/lib/matrixMetadata';\n\nconst ROOT_CAPABILITY_KEY = '__root__';\n\n/**\n * Custom hook that wraps useCreateBlockNote with IXO-specific configurations (Mantine version)\n * @param options - Configuration options for the IxoEditor\n * @returns A configured collaborative IxoEditor instance with augmented type properties\n */\nexport function useCreateCollaborativeIxoEditor(options: IxoCollaborativeEditorOptions): {\n editor: IxoEditorType | undefined;\n connectionStatus: string;\n title: YText;\n yDoc: Doc;\n root: YMap<any>;\n flowArray: YArray<any>;\n} {\n const yDoc = useCollaborativeYDoc(options);\n\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 docType = 'flow',\n user,\n matrixClient,\n permissions = { write: false },\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 address: user?.address || '',\n }),\n [user?.id, user?.name, user?.color, user?.accessToken, user?.address]\n );\n\n const { matrixProvider, connectionStatus } = useMatrixProvider({\n yDoc,\n matrixClient,\n roomId: options.roomId,\n });\n\n // Create Matrix metadata manager for page metadata\n const metadataManager = useMemo(() => new MatrixMetadataManager(matrixClient, options.roomId), [matrixClient, options.roomId]);\n\n // Cleanup metadata manager on unmount\n useEffect(() => {\n return () => {\n metadataManager.dispose();\n };\n }, [metadataManager]);\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 // Get root map for metadata\n const root = useMemo(() => yDoc.getMap('root'), [yDoc]);\n\n // BlockNote expects XmlFragment for collaboration\n // We'll use a separate fragment for the editor content\n const documentFragment = useMemo(() => yDoc.getXmlFragment('document'), [yDoc]);\n\n // Flow array for structured block storage (parallel to document)\n const flowArray = useMemo(() => yDoc.getArray('flow'), [yDoc]);\n\n // Runtime map for per-node execution state\n const runtimeMap = useMemo(() => yDoc.getMap('runtime'), [yDoc]);\n\n // Delegations map for capability delegations\n const delegationsMap = useMemo(() => yDoc.getMap('delegations'), [yDoc]);\n\n // Create user-specific fragment for per-block userProps\n const userFragment = useMemo(() => yDoc.getMap(memoizedUser.id), [yDoc, memoizedUser.id]);\n\n // Memoize collaboration config to prevent recreation\n const collaborationConfig = useMemo(\n () => ({\n provider: matrixProvider,\n fragment: documentFragment, // BlockNote needs XmlFragment\n user: {\n name: memoizedUser.name,\n color: memoizedUser.color,\n },\n }),\n [matrixProvider, documentFragment, 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 // Get the Y.Text for collaborative title\n const titleText = useMemo(() => yDoc.getText('title'), [yDoc]);\n\n // Augment editor with IXO-specific properties to match IxoEditorType\n let ixoEditor: IxoEditorType | undefined;\n\n if (editor) {\n ixoEditor = editor as unknown as IxoEditorType;\n\n ixoEditor._ixoConfig = ixoConfig;\n ixoEditor._yRoot = root;\n ixoEditor._yFlow = flowArray;\n ixoEditor.mode = editable ? 'template' : 'flow';\n ixoEditor.user = memoizedUser;\n ixoEditor.docType = docType; // Simple prop-based value, not synced via CRDT\n\n // Add getUserProps and updateUserProps methods\n ixoEditor.getUserProps = (block: any) => {\n return userFragment.get(block.id) || {};\n };\n\n ixoEditor.updateUserProps = (block: any, updates: Record<string, any>) => {\n if (!permissions.write) {\n return;\n }\n const prev = userFragment.get(block.id) || {};\n userFragment.set(block.id, { ...prev, ...updates });\n };\n\n // Add flow-specific methods\n ixoEditor.getFlowMetadata = () => {\n return {\n '@context': (root.get('@context') as string) || '',\n _type: (root.get('_type') as string) || '',\n schema_version: (root.get('schema_version') as string) || '',\n doc_id: (root.get('doc_id') as string) || '',\n title: titleText.toString(),\n createdAt: (root.get('createdAt') as string) || '',\n createdBy: (root.get('createdBy') as string) || '',\n flowOwnerDid: (root.get('flowOwnerDid') as string) || '',\n };\n };\n\n ixoEditor.getFlowOwnerDid = () => {\n return (root.get('flowOwnerDid') as string) || '';\n };\n\n ixoEditor.updateFlowMetadata = (updates: Record<string, any>) => {\n if (!permissions.write) {\n return;\n }\n Object.entries(updates).forEach(([key, value]) => {\n if (key === 'title') {\n // Update title via Y.Text\n titleText.delete(0, titleText.length);\n titleText.insert(0, value as string);\n } else {\n root.set(key, value);\n }\n });\n };\n\n ixoEditor.getFlow = () => {\n return flowArray.toArray();\n };\n\n ixoEditor.getFlowNode = (nodeId: string) => {\n const nodes = flowArray.toArray() as FlowNode[];\n const match = nodes.find((node) => (node as any)?.id === nodeId);\n return (match as FlowNode) || null;\n };\n\n ixoEditor._yRuntime = runtimeMap;\n\n // Initialize delegations Y.Map\n ixoEditor._yDelegations = delegationsMap;\n\n // Delegation methods\n ixoEditor.getDelegation = (capabilityId: string): SignedCapability | null => {\n const raw = delegationsMap.get(capabilityId);\n if (!raw || typeof raw !== 'string' || capabilityId === ROOT_CAPABILITY_KEY) return null;\n try {\n return JSON.parse(raw) as SignedCapability;\n } catch {\n return null;\n }\n };\n\n ixoEditor.setDelegation = (capability: SignedCapability): void => {\n if (!permissions.write) {\n console.warn('Cannot set delegation: write permission denied');\n return;\n }\n delegationsMap.set(capability.id, JSON.stringify(capability));\n };\n\n ixoEditor.getRootCapability = (): SignedCapability | null => {\n const rootId = delegationsMap.get(ROOT_CAPABILITY_KEY);\n if (!rootId || typeof rootId !== 'string') return null;\n const raw = delegationsMap.get(rootId);\n if (!raw || typeof raw !== 'string') return null;\n try {\n return JSON.parse(raw) as SignedCapability;\n } catch {\n return null;\n }\n };\n\n ixoEditor.setRootCapabilityId = (capabilityId: string): void => {\n if (!permissions.write) {\n console.warn('Cannot set root capability: write permission denied');\n return;\n }\n delegationsMap.set(ROOT_CAPABILITY_KEY, capabilityId);\n };\n\n ixoEditor.getAllDelegations = (): SignedCapability[] => {\n const capabilities: SignedCapability[] = [];\n delegationsMap.forEach((value, key) => {\n if (key !== ROOT_CAPABILITY_KEY && typeof value === 'string') {\n try {\n capabilities.push(JSON.parse(value) as SignedCapability);\n } catch {\n // Skip invalid entries\n }\n }\n });\n return capabilities;\n };\n\n ixoEditor.removeDelegation = (capabilityId: string): void => {\n if (!permissions.write) {\n console.warn('Cannot remove delegation: write permission denied');\n return;\n }\n delegationsMap.delete(capabilityId);\n };\n\n // Attach metadata manager\n ixoEditor._metadataManager = metadataManager;\n\n // New page metadata methods\n ixoEditor.setPageMetadata = async (updates) => {\n if (!permissions.write) {\n console.warn('Cannot set page metadata: write permission denied');\n return;\n }\n\n const current = metadataManager.getMetadata() || {};\n await metadataManager.setMetadata({ ...current, ...updates }, permissions);\n };\n\n ixoEditor.getPageMetadata = () => {\n return metadataManager.getMetadata();\n };\n\n // Deprecated: Cover image methods (kept for backward compatibility)\n // Note: Now only stores URL, not full ImageData object\n ixoEditor.setCoverImage = (imageData?: ImageData) => {\n if (!permissions.write) {\n return;\n }\n\n // Extract URL from ImageData and use new API internally\n const current = metadataManager.getMetadata() || {};\n const coverUrl = imageData?.url;\n metadataManager.setMetadata({ ...current, cover: coverUrl }, permissions).catch((error) => {\n console.error('Failed to set cover image:', error);\n });\n };\n\n ixoEditor.getCoverImage = () => {\n // Return undefined since we no longer store full ImageData\n // Only URL is stored in new system\n return undefined;\n };\n\n // Deprecated: Logo methods (kept for backward compatibility)\n // Note: Now only stores URL, not full ImageData object\n ixoEditor.setLogo = (imageData?: ImageData) => {\n if (!permissions.write) {\n return;\n }\n\n // Extract URL from ImageData and use new API internally\n const current = metadataManager.getMetadata() || {};\n const iconUrl = imageData?.url;\n metadataManager.setMetadata({ ...current, icon: iconUrl }, permissions).catch((error) => {\n console.error('Failed to set logo:', error);\n });\n };\n\n ixoEditor.getLogo = () => {\n // Return undefined since we no longer store full ImageData\n // Only URL is stored in new system\n return undefined;\n };\n }\n\n // Sync the isEditable property whenever it changes\n useEffect(() => {\n if (ixoEditor) {\n ixoEditor.isEditable = editable;\n }\n }, [ixoEditor, editable]);\n\n // Initialize YDoc with default values after provider syncs (only for new documents)\n useEffect(() => {\n // Wait for provider to connect and sync\n if (connectionStatus !== 'connected') {\n return;\n }\n\n // Check if document is new (no doc_id means not synced from storage yet)\n const existingDocId = root.get('doc_id');\n if (existingDocId) {\n // Document already exists, don't overwrite\n return;\n }\n\n // Only initialize if user has write permissions\n if (!permissions.write) {\n // User doesn't have write permissions, don't attempt to write\n return;\n }\n\n // Initialize metadata for new document\n root.set('@context', 'https://ixo.world/flow/0.3');\n root.set('_type', 'ixo.flow.crdt');\n root.set('schema_version', '0.3');\n root.set('doc_id', options.docId || `flow_${Date.now()}`);\n root.set('createdAt', new Date().toISOString());\n root.set('createdBy', memoizedUser.id || 'anonymous');\n // Flow owner DID - the user who created the flow has root signing authority\n root.set('flowOwnerDid', memoizedUser.id || '');\n\n // Initialize title if provided\n if (titleText.length === 0 && options.title) {\n titleText.insert(0, options.title);\n }\n }, [connectionStatus, root, titleText, permissions.write, options.docId, options.title, memoizedUser.id]);\n\n return {\n editor: ixoEditor,\n connectionStatus: connectionStatus,\n title: titleText,\n yDoc,\n root,\n flowArray,\n };\n}\n","import { useEffect, useState, useRef, useCallback, useMemo } from 'react';\nimport { MatrixProvider } from '@ixo/matrix-crdt';\nimport { MatrixClient } from 'matrix-js-sdk';\nimport * as Y from 'yjs';\n\nexport function useMatrixProvider({ matrixClient, roomId, yDoc }: { matrixClient: MatrixClient; roomId: string; yDoc: Y.Doc }) {\n const [matrixProvider, setProvider] = useState<MatrixProvider | null>(null);\n const [status, setStatus] = useState<'connecting' | 'connected' | 'failed' | 'disconnected'>('disconnected');\n\n // Use refs to track cleanup and prevent memory leaks\n const isMountedRef = useRef(true);\n const providerRef = useRef<MatrixProvider | null>(null);\n const retryTimeoutRef = useRef<number | null>(null);\n\n // Memoize provider options to prevent recreation\n const providerOptions = useMemo(\n () => ({\n translator: {\n updateEventType: 'matrix-crdt.doc_update',\n snapshotEventType: 'matrix-crdt.doc_snapshot',\n },\n enableExperimentalWebrtcSync: true,\n enableAwareness: true,\n reader: { snapshotInterval: 10 },\n writer: { flushInterval: 300, retryIfForbiddenInterval: 30000 },\n }),\n []\n );\n\n // Memoized status update callbacks to prevent recreation\n const handleDocumentAvailable = useCallback(() => {\n if (isMountedRef.current) {\n setStatus('connected');\n }\n }, []);\n\n const handleDocumentUnavailable = useCallback(() => {\n if (isMountedRef.current) {\n setStatus('failed');\n }\n }, []);\n\n const handleCanWriteChanged = useCallback(() => {\n if (isMountedRef.current && providerRef.current) {\n setStatus(providerRef.current.canWrite ? 'connected' : 'failed');\n }\n }, []);\n\n const initProvider = useCallback(async () => {\n if (!isMountedRef.current) return;\n\n // Clear any existing retry timeout\n if (retryTimeoutRef.current) {\n clearTimeout(retryTimeoutRef.current);\n retryTimeoutRef.current = null;\n }\n\n setStatus('connecting');\n\n try {\n const client = matrixClient;\n (client as any).canSupportVoip = false;\n (client as any).clientOpts = { lazyLoadMembers: true };\n\n const provider = new MatrixProvider(yDoc, client, { type: 'id', id: roomId }, providerOptions);\n\n providerRef.current = provider;\n\n provider.onDocumentAvailable(handleDocumentAvailable);\n provider.onDocumentUnavailable(handleDocumentUnavailable);\n provider.onCanWriteChanged(handleCanWriteChanged);\n\n await provider.initialize();\n\n if (isMountedRef.current) {\n setProvider(provider);\n } else {\n // Component was unmounted during initialization\n provider.dispose();\n }\n } catch (err) {\n if (isMountedRef.current) {\n setStatus('failed');\n // Retry with exponential backoff, but only if component is still mounted\n // @ts-ignore\n retryTimeoutRef.current = setTimeout(() => {\n if (isMountedRef.current && !providerRef.current) {\n initProvider();\n }\n }, 5000);\n }\n }\n }, [matrixClient, providerOptions, handleDocumentAvailable, handleDocumentUnavailable, handleCanWriteChanged]);\n\n useEffect(() => {\n isMountedRef.current = true;\n initProvider();\n\n return () => {\n isMountedRef.current = false;\n\n // Clear retry timeout\n if (retryTimeoutRef.current) {\n clearTimeout(retryTimeoutRef.current);\n retryTimeoutRef.current = null;\n }\n\n // Cleanup provider\n if (providerRef.current) {\n providerRef.current.dispose();\n providerRef.current = null;\n }\n\n setProvider(null);\n setStatus('disconnected');\n };\n }, [initProvider]);\n\n // Cleanup effect to ensure refs are reset on unmount\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n return { matrixProvider, connectionStatus: status };\n}\n","import { useMemo } from 'react';\nimport * as Y from 'yjs';\nimport { IxoCollaborativeEditorOptions } from '../../core/types';\n\nexport function useCollaborativeYDoc(_options: IxoCollaborativeEditorOptions) {\n return useMemo(() => {\n // Create empty YDoc without writing any initial values\n // Values will be initialized after provider sync completes\n const doc = new Y.Doc();\n\n return doc;\n }, []);\n}\n","import type { MatrixClient, MatrixEvent } from 'matrix-js-sdk';\n\n/**\n * Page metadata stored in Matrix state events\n * Now stores only URL strings in separate events\n */\nexport interface PageMetadata {\n /** Cover image URL */\n cover?: string;\n /** Icon/logo image URL */\n icon?: string;\n}\n\n/**\n * State event types for page metadata\n */\nexport const COVER_IMAGE_EVENT_TYPE = 'ixo.page.cover_image';\nexport const COVER_ICON_EVENT_TYPE = 'ixo.page.cover_icon';\n\n/**\n * Callback type for metadata change subscriptions\n */\nexport type MetadataChangeCallback = (metadata: PageMetadata) => void;\n\n/**\n * Manager for Matrix state events containing page metadata (cover, icon)\n *\n * Stores cover and icon as separate state events, each containing only the URL string.\n */\nexport class MatrixMetadataManager {\n private matrixClient: MatrixClient;\n private roomId: string;\n private subscribers: Set<MetadataChangeCallback> = new Set();\n private eventHandler: ((event: MatrixEvent) => void) | null = null;\n\n constructor(matrixClient: MatrixClient, roomId: string) {\n this.matrixClient = matrixClient;\n this.roomId = roomId;\n this.setupEventListener();\n }\n\n /**\n * Set up Matrix event listener for real-time updates\n */\n private setupEventListener(): void {\n this.eventHandler = (event: MatrixEvent) => {\n // Only process state events for our room and event types\n if (event.getRoomId() === this.roomId) {\n const eventType = event.getType();\n if (eventType === COVER_IMAGE_EVENT_TYPE || eventType === COVER_ICON_EVENT_TYPE) {\n // Fetch current state and notify subscribers\n const metadata = this.getMetadata();\n if (metadata) {\n this.notifySubscribers(metadata);\n }\n }\n }\n };\n\n // Listen to room state events\n // @ts-ignore - Matrix SDK event types are complex, this is the correct event name\n this.matrixClient.on('RoomState.events', this.eventHandler);\n }\n\n /**\n * Notify all subscribers of metadata changes\n */\n private notifySubscribers(metadata: PageMetadata): void {\n this.subscribers.forEach((callback) => {\n try {\n callback(metadata);\n } catch (error) {\n console.error('Error in metadata subscriber callback:', error);\n }\n });\n }\n\n /**\n * Send metadata to Matrix state events (separate events for cover and icon)\n *\n * @param metadata - The metadata to store (only URL strings)\n * @param permissions - Permission check object\n * @returns Promise that resolves when state events are sent\n */\n async setMetadata(metadata: PageMetadata, permissions: { write: boolean }): Promise<void> {\n if (!permissions.write) {\n console.warn('Cannot set metadata: write permission denied');\n return;\n }\n\n try {\n const promises: Promise<any>[] = [];\n\n // Send cover image URL if key is present (including undefined for removal)\n if ('cover' in metadata) {\n promises.push(\n (this.matrixClient as any).sendStateEvent(\n this.roomId,\n COVER_IMAGE_EVENT_TYPE,\n { url: metadata.cover || null }, // Wrap in object - null means removed\n '' // Empty state key\n )\n );\n }\n\n // Send icon URL if key is present (including undefined for removal)\n if ('icon' in metadata) {\n promises.push(\n (this.matrixClient as any).sendStateEvent(\n this.roomId,\n COVER_ICON_EVENT_TYPE,\n { url: metadata.icon || null }, // Wrap in object - null means removed\n '' // Empty state key\n )\n );\n }\n\n await Promise.all(promises);\n } catch (error) {\n console.error('Failed to set page metadata:', error);\n throw error;\n }\n }\n\n /**\n * Get current metadata from Matrix state (reads from separate events)\n *\n * @returns Current metadata or null if not set\n */\n getMetadata(): PageMetadata | null {\n try {\n const room = this.matrixClient.getRoom(this.roomId);\n if (!room) {\n console.warn(`Room ${this.roomId} not found`);\n return null;\n }\n\n // Get cover image URL\n const coverEvent = room.currentState.getStateEvents(\n COVER_IMAGE_EVENT_TYPE,\n '' // Empty state key\n );\n const coverContent = coverEvent ? (coverEvent.getContent() as unknown as { url?: string | null }) : null;\n const coverUrl = coverContent?.url || null;\n\n // Get icon URL\n const iconEvent = room.currentState.getStateEvents(\n COVER_ICON_EVENT_TYPE,\n '' // Empty state key\n );\n const iconContent = iconEvent ? (iconEvent.getContent() as unknown as { url?: string | null }) : null;\n const iconUrl = iconContent?.url || null;\n\n // Return null if both are not set\n if (!coverUrl && !iconUrl) {\n return null;\n }\n\n return {\n cover: coverUrl || undefined,\n icon: iconUrl || undefined,\n };\n } catch (error) {\n console.error('Failed to get page metadata:', error);\n return null;\n }\n }\n\n /**\n * Subscribe to metadata changes\n *\n * @param callback - Function to call when metadata changes\n * @returns Unsubscribe function\n */\n subscribe(callback: MetadataChangeCallback): () => void {\n this.subscribers.add(callback);\n\n // Return unsubscribe function\n return () => {\n this.subscribers.delete(callback);\n };\n }\n\n /**\n * Clean up event listeners and subscriptions\n * Call this when the manager is no longer needed\n */\n dispose(): void {\n if (this.eventHandler) {\n // @ts-ignore - Matrix SDK event types are complex, this is the correct event name\n this.matrixClient.off('RoomState.events', this.eventHandler);\n this.eventHandler = null;\n }\n this.subscribers.clear();\n }\n}\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Box, Button, Group } from '@mantine/core';\nimport { useBlocknoteContext } from '../context/BlocknoteContext';\nimport type { PageMetadata } from '../../core/types';\nimport { transformCoverImage, transformIconImage } from '../../core/lib/imageTransform';\n\nexport interface CoverImageProps {\n coverImageUrl?: string;\n logoUrl?: string;\n}\n\n/**\n * CoverImage component - Notion-like cover image with logo\n */\nexport function CoverImage({ coverImageUrl, logoUrl }: CoverImageProps): React.ReactElement | null {\n const { editor, handlers, editable } = useBlocknoteContext();\n const [isHovering, setIsHovering] = useState(false);\n const [isRepositioning, setIsRepositioning] = useState(false);\n const [coverPosition, setCoverPosition] = useState(50); // Default center position (50%)\n const coverFileInputRef = useRef<HTMLInputElement>(null);\n const logoFileInputRef = useRef<HTMLInputElement>(null);\n\n // Reactive state for metadata from Matrix state events\n const [metadata, setMetadata] = useState<PageMetadata | null>(() => editor?.getPageMetadata?.() || null);\n\n // Subscribe to Matrix state event changes for real-time collaboration\n useEffect(() => {\n if (!editor?._metadataManager) {\n return;\n }\n\n // Get initial metadata\n const initialMetadata = editor._metadataManager.getMetadata();\n setMetadata(initialMetadata);\n\n // Subscribe to changes\n const unsubscribe = editor._metadataManager.subscribe((newMetadata) => {\n setMetadata(newMetadata);\n });\n\n // Cleanup subscription on unmount\n return unsubscribe;\n }, [editor]);\n\n // Transform URLs through Cloudflare for optimized delivery\n const rawCoverUrl = metadata?.cover || coverImageUrl;\n const rawLogoUrl = metadata?.icon || logoUrl;\n\n const coverUrl = rawCoverUrl ? transformCoverImage(rawCoverUrl, 'desktop') : undefined;\n const logoSrc = rawLogoUrl ? transformIconImage(rawLogoUrl, 'default') : undefined;\n\n const hasCover = !!coverUrl;\n const hasLogo = !!logoSrc;\n\n // Handle file selection\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>, type: 'cover' | 'logo') => {\n const file = event.target.files?.[0];\n if (!file || !handlers?.publicFileUpload || !editor) {\n return;\n }\n\n try {\n const uploadedData = await handlers.publicFileUpload(file);\n const imageUrl = uploadedData.url; // Extract just the URL string\n\n // Optimistic update: Set local state immediately\n setMetadata((prev) => ({\n ...prev,\n [type === 'cover' ? 'cover' : 'icon']: imageUrl,\n }));\n\n // Send to Matrix state in background\n if (type === 'cover') {\n await editor.setPageMetadata?.({ cover: imageUrl });\n } else {\n await editor.setPageMetadata?.({ icon: imageUrl });\n }\n } catch (error) {\n // On error, revert optimistic update by fetching current state\n const currentMetadata = editor?.getPageMetadata?.();\n if (currentMetadata) {\n setMetadata(currentMetadata);\n }\n }\n };\n\n const handleAddCover = () => {\n coverFileInputRef.current?.click();\n };\n\n const handleChangeCover = () => {\n coverFileInputRef.current?.click();\n };\n\n const handleReposition = () => {\n setIsRepositioning(!isRepositioning);\n };\n\n const handleRemoveCover = async () => {\n if (!editor) return;\n\n // Optimistic update: Remove immediately from local state\n setMetadata((prev) => ({ ...prev, cover: undefined }));\n\n try {\n await editor.setPageMetadata?.({ cover: undefined });\n } catch (error) {\n // On error, revert by fetching current state\n const currentMetadata = editor?.getPageMetadata?.();\n if (currentMetadata) {\n setMetadata(currentMetadata);\n }\n }\n };\n\n const handleAddLogo = () => {\n logoFileInputRef.current?.click();\n };\n\n const handleChangeLogo = () => {\n logoFileInputRef.current?.click();\n };\n\n const handleRemoveLogo = async () => {\n if (!editor) return;\n\n // Optimistic update: Remove immediately from local state\n setMetadata((prev) => ({ ...prev, icon: undefined }));\n\n try {\n await editor.setPageMetadata?.({ icon: undefined });\n } catch (error) {\n // On error, revert by fetching current state\n const currentMetadata = editor?.getPageMetadata?.();\n if (currentMetadata) {\n setMetadata(currentMetadata);\n }\n }\n };\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isRepositioning) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const y = e.clientY - rect.top;\n const percentage = (y / rect.height) * 100;\n setCoverPosition(Math.max(0, Math.min(100, percentage)));\n };\n\n // If not editable and no cover/logo, don't render anything\n if (!editable && !hasCover && !hasLogo) {\n return null;\n }\n\n // Default state: No cover, show \"Add icon\" and \"Add cover\" buttons on hover (Notion style)\n if (!hasCover) {\n return (\n <Box\n style={{\n position: 'relative',\n width: '100%',\n minHeight: hasLogo ? '140px' : '48px',\n backgroundColor: 'transparent',\n marginBottom: '0',\n }}\n onMouseEnter={() => editable && setIsHovering(true)}\n onMouseLeave={() => editable && setIsHovering(false)}\n >\n {/* Centered content wrapper matching editor max-width */}\n <div style={{ maxWidth: '900px', margin: '0 auto', position: 'relative', height: '100%' }}>\n {/* Hidden file inputs */}\n <input ref={coverFileInputRef} type=\"file\" accept=\"image/*\" style={{ display: 'none' }} onChange={(e) => handleFileSelect(e, 'cover')} />\n <input ref={logoFileInputRef} type=\"file\" accept=\"image/*\" style={{ display: 'none' }} onChange={(e) => handleFileSelect(e, 'logo')} />\n\n {/* Hover-reveal buttons - Notion style horizontal layout */}\n {editable && isHovering && !logoSrc && (\n <Group\n gap=\"xs\"\n style={{\n position: 'absolute',\n top: '12px',\n left: '0',\n zIndex: 10,\n }}\n >\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleAddLogo}\n style={{\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n }}\n >\n Add icon\n </Button>\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleAddCover}\n style={{\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n }}\n >\n Add cover\n </Button>\n </Group>\n )}\n\n {/* Logo Area - when logo exists but no cover */}\n {logoSrc && (\n <Box\n style={{\n borderRadius: '100%',\n position: 'relative',\n insetInlineStart: '0',\n width: '120px',\n height: '120px',\n left: -20,\n marginTop: '16px',\n padding: 12,\n zIndex: 11,\n }}\n >\n {/* Logo Image */}\n <img\n src={logoSrc}\n alt=\"Logo\"\n style={{\n width: '100%',\n height: '100%',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.1)',\n objectFit: 'cover',\n }}\n />\n\n {/* Hover Controls for Logo - Below the logo */}\n {editable && isHovering && (\n <div\n style={{\n position: 'absolute',\n bottom: '-32px',\n left: '50%',\n transform: 'translateX(-50%)',\n zIndex: 12,\n display: 'flex',\n flexDirection: 'row',\n gap: '4px',\n alignItems: 'center',\n }}\n >\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleChangeLogo}\n style={{\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n }}\n >\n Change\n </Button>\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleRemoveLogo}\n style={{\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n }}\n >\n Remove\n </Button>\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleAddCover}\n style={{\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n }}\n >\n Add cover\n </Button>\n </div>\n )}\n </Box>\n )}\n </div>\n </Box>\n );\n }\n\n // Cover exists: Show image with hover controls\n return (\n <Box\n style={{\n position: 'relative',\n width: '100%',\n paddingBottom: '70px', // Space for logo area (increased for 120px logo)\n cursor: isRepositioning ? 'ns-resize' : 'default',\n backgroundColor: 'transparent',\n }}\n onMouseEnter={() => editable && setIsHovering(true)}\n onMouseLeave={() => {\n if (editable) {\n setIsHovering(false);\n setIsRepositioning(false);\n }\n }}\n onMouseMove={handleMouseMove}\n onClick={() => isRepositioning && setIsRepositioning(false)}\n >\n {/* Cover Image */}\n <img\n src={coverUrl}\n alt=\"Cover\"\n style={{\n display: 'block',\n objectFit: 'cover',\n borderRadius: '0px',\n width: '100%',\n height: '30vh',\n maxHeight: '280px',\n opacity: 1,\n objectPosition: `center ${coverPosition}%`,\n pointerEvents: isRepositioning ? 'none' : 'auto',\n }}\n />\n\n {/* Hover Controls - Top Right */}\n {editable && isHovering && (\n <Group\n gap=\"xs\"\n style={{\n position: 'absolute',\n top: '12px',\n right: '12px',\n zIndex: 10,\n }}\n >\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleChangeCover}\n style={{\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n }}\n >\n Change cover\n </Button>\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleReposition}\n style={{\n backgroundColor: isRepositioning ? 'rgba(55, 53, 47, 0.9)' : 'rgba(255, 255, 255, 0.9)',\n color: isRepositioning ? 'white' : '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n }}\n >\n {isRepositioning ? 'Done' : 'Reposition'}\n </Button>\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleRemoveCover}\n style={{\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n }}\n >\n Remove\n </Button>\n </Group>\n )}\n\n {/* Centered wrapper for logo alignment */}\n <div style={{ maxWidth: '900px', margin: '0 auto', position: 'absolute', bottom: 0, left: -40, right: 0, height: '70px' }}>\n {/* Logo Area - In the padding at bottom */}\n <Box\n style={{\n position: 'absolute',\n bottom: '4px',\n insetInlineStart: '0',\n width: '120px',\n height: '120px',\n zIndex: 11,\n padding: 12,\n borderRadius: '100%',\n }}\n >\n {/* Logo Image (if exists) */}\n {logoSrc && (\n <img\n src={logoSrc}\n alt=\"Logo\"\n style={{\n width: '100%',\n height: '100%',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.1)',\n objectFit: 'cover',\n }}\n />\n )}\n\n {/* Hover Controls for Logo */}\n {editable && isHovering && (\n <>\n {logoSrc ? (\n // Logo exists: Show Change/Remove buttons when hovering on cover\n <Group\n gap=\"xs\"\n style={{\n position: 'absolute',\n top: '0',\n left: '130px',\n zIndex: 12,\n }}\n >\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleChangeLogo}\n style={{\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n }}\n >\n Change\n </Button>\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleRemoveLogo}\n style={{\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n }}\n >\n Remove\n </Button>\n </Group>\n ) : (\n // No logo: Show \"Add icon\" button when hovering anywhere on cover\n <Button\n variant=\"filled\"\n size=\"xs\"\n onClick={handleAddLogo}\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#37352f',\n fontSize: '12px',\n fontWeight: 500,\n padding: '4px 8px',\n height: 'auto',\n zIndex: 12,\n }}\n >\n Add icon\n </Button>\n )}\n </>\n )}\n </Box>\n </div>\n\n {/* Hidden file inputs */}\n <input ref={coverFileInputRef} type=\"file\" accept=\"image/*\" style={{ display: 'none' }} onChange={(e) => handleFileSelect(e, 'cover')} />\n <input ref={logoFileInputRef} type=\"file\" accept=\"image/*\" style={{ display: 'none' }} onChange={(e) => handleFileSelect(e, 'logo')} />\n </Box>\n );\n}\n","/**\n * Cloudflare Image Transformation Utilities\n *\n * Provides type-safe, reusable utilities for transforming images through\n * Cloudflare's CDN with optimized parameters for different use cases.\n */\n\n/**\n * Cloudflare transformation parameters\n */\nexport interface CloudflareImageOptions {\n width?: number | 'auto';\n height?: number;\n fit?: 'scale-down' | 'contain' | 'cover' | 'crop' | 'pad';\n gravity?: 'auto' | 'left' | 'right' | 'top' | 'bottom' | 'center';\n quality?: number; // 1-100\n format?: 'auto' | 'webp' | 'avif' | 'json';\n dpr?: number; // Device pixel ratio\n sharpen?: number; // 0.0-10.0\n blur?: number; // 0-250\n brightness?: number; // 0.0-1.0\n metadata?: 'keep' | 'copyright' | 'none';\n anim?: boolean;\n}\n\n/**\n * Cloudflare CDN base URL\n */\nconst CLOUDFLARE_CDN_BASE = 'https://www.ixo.earth/cdn-cgi/image';\n\n/**\n * Preset configurations for common image types\n */\nexport const ImagePresets = {\n /**\n * Cover image preset (Notion-style)\n * Wide banner images that fill the width of the page\n */\n cover: {\n desktop: {\n width: 1920,\n fit: 'cover' as const,\n quality: 80,\n format: 'auto' as const,\n metadata: 'none' as const,\n },\n tablet: {\n width: 960,\n fit: 'cover' as const,\n quality: 80,\n format: 'auto' as const,\n metadata: 'none' as const,\n },\n mobile: {\n width: 640,\n fit: 'cover' as const,\n quality: 80,\n format: 'auto' as const,\n metadata: 'none' as const,\n },\n },\n\n /**\n * Icon/Logo preset (Notion-style)\n * Small, square profile/icon images\n */\n icon: {\n default: {\n width: 240, // 2x for retina (120px display size)\n height: 240,\n fit: 'cover' as const,\n gravity: 'auto' as const, // Focus on faces for profile pictures\n quality: 85,\n format: 'auto' as const,\n metadata: 'none' as const,\n },\n thumbnail: {\n width: 120,\n height: 120,\n fit: 'cover' as const,\n gravity: 'auto' as const,\n quality: 85,\n format: 'auto' as const,\n metadata: 'none' as const,\n },\n },\n} as const;\n\n/**\n * Build Cloudflare transformation options string\n *\n * @param options - Transformation options\n * @returns Comma-separated options string\n */\nfunction buildOptionsString(options: CloudflareImageOptions): string {\n const parts: string[] = [];\n\n if (options.width !== undefined) {\n parts.push(`width=${options.width}`);\n }\n if (options.height !== undefined) {\n parts.push(`height=${options.height}`);\n }\n if (options.fit) {\n parts.push(`fit=${options.fit}`);\n }\n if (options.gravity) {\n parts.push(`gravity=${options.gravity}`);\n }\n if (options.quality !== undefined) {\n parts.push(`quality=${options.quality}`);\n }\n if (options.format) {\n parts.push(`format=${options.format}`);\n }\n if (options.dpr !== undefined) {\n parts.push(`dpr=${options.dpr}`);\n }\n if (options.sharpen !== undefined) {\n parts.push(`sharpen=${options.sharpen}`);\n }\n if (options.blur !== undefined) {\n parts.push(`blur=${options.blur}`);\n }\n if (options.brightness !== undefined) {\n parts.push(`brightness=${options.brightness}`);\n }\n if (options.metadata) {\n parts.push(`metadata=${options.metadata}`);\n }\n if (options.anim !== undefined) {\n parts.push(`anim=${options.anim}`);\n }\n\n return parts.join(',');\n}\n\n/**\n * Check if URL is from an allowed origin for Cloudflare transformation\n *\n * @param url - Image URL to check\n * @returns true if URL is from allowed origin\n */\nexport function isAllowedOrigin(url: string): boolean {\n const allowedOrigins = ['ipfs.gateway.ixo.world', 'mx.ixo.earth', 'testmx.ixo.earth', 'devmx.ixo.earth'];\n\n try {\n const urlObj = new URL(url);\n return allowedOrigins.some((origin) => urlObj.hostname.includes(origin));\n } catch {\n return false;\n }\n}\n\n/**\n * Transform image URL with Cloudflare CDN\n *\n * @param sourceUrl - Original image URL\n * @param options - Transformation options\n * @returns Cloudflare CDN URL with transformations\n */\nexport function transformImage(sourceUrl: string, options: CloudflareImageOptions): string {\n if (!sourceUrl) {\n return sourceUrl;\n }\n\n // If already a Cloudflare CDN URL, return as-is\n if (sourceUrl.includes('/cdn-cgi/image/')) {\n return sourceUrl;\n }\n\n // Only transform URLs from allowed origins - Cloudflare CDN won't work for others\n if (!isAllowedOrigin(sourceUrl)) {\n return sourceUrl;\n }\n\n const optionsString = buildOptionsString(options);\n return `${CLOUDFLARE_CDN_BASE}/${optionsString}/${sourceUrl}`;\n}\n\n/**\n * Transform cover image with optimized preset\n *\n * @param sourceUrl - Original image URL\n * @param deviceType - Target device type (defaults to desktop)\n * @param customOptions - Optional custom options to override preset\n * @returns Cloudflare CDN URL optimized for cover images\n */\nexport function transformCoverImage(sourceUrl: string, deviceType: 'desktop' | 'tablet' | 'mobile' = 'desktop', customOptions?: Partial<CloudflareImageOptions>): string {\n const preset = ImagePresets.cover[deviceType];\n const options = { ...preset, ...customOptions };\n return transformImage(sourceUrl, options);\n}\n\n/**\n * Transform icon/logo image with optimized preset\n *\n * @param sourceUrl - Original image URL\n * @param size - Icon size preset (default | thumbnail)\n * @param customOptions - Optional custom options to override preset\n * @returns Cloudflare CDN URL optimized for icons\n */\nexport function transformIconImage(sourceUrl: string, size: 'default' | 'thumbnail' = 'default', customOptions?: Partial<CloudflareImageOptions>): string {\n const preset = ImagePresets.icon[size];\n const options = { ...preset, ...customOptions };\n return transformImage(sourceUrl, options);\n}\n\n/**\n * Generate responsive srcset for cover images\n *\n * @param sourceUrl - Original image URL\n * @returns Object with src and srcset for responsive images\n */\nexport function generateCoverImageSrcSet(sourceUrl: string): {\n src: string;\n srcSet: string;\n sizes: string;\n} {\n return {\n src: transformCoverImage(sourceUrl, 'tablet'),\n srcSet: [`${transformCoverImage(sourceUrl, 'mobile')} 640w`, `${transformCoverImage(sourceUrl, 'tablet')} 960w`, `${transformCoverImage(sourceUrl, 'desktop')} 1920w`].join(\n ', '\n ),\n sizes: '(max-width: 767px) 640px, (max-width: 1023px) 960px, 1920px',\n };\n}\n\n/**\n * Safely transform image URL, only if from allowed origin\n *\n * @param sourceUrl - Original image URL\n * @param options - Transformation options\n * @returns Transformed URL if allowed origin, otherwise original URL\n */\nexport function safeTransformImage(sourceUrl: string, options: CloudflareImageOptions): string {\n if (!sourceUrl || !isAllowedOrigin(sourceUrl)) {\n return sourceUrl;\n }\n return transformImage(sourceUrl, options);\n}\n","import React, { useState, useRef, useEffect } from 'react';\r\n\r\nexport interface PageHeaderMenuItem {\r\n label: string;\r\n onClick: () => void;\r\n icon?: React.ReactNode;\r\n disabled?: boolean;\r\n divider?: boolean;\r\n}\r\n\r\nexport interface PageHeaderProps {\r\n title?: string;\r\n icon?: React.ReactNode;\r\n isPrivate?: boolean;\r\n lastEdited?: string;\r\n onShare?: () => void;\r\n onFavorite?: () => void;\r\n isFavorited?: boolean;\r\n menuItems?: PageHeaderMenuItem[];\r\n}\r\n\r\n/**\r\n * PageHeader component - A Notion-style page header with title, privacy badge, and actions\r\n */\r\nexport function PageHeader({\r\n title = 'New page',\r\n icon,\r\n isPrivate = true,\r\n lastEdited,\r\n onShare,\r\n onFavorite,\r\n isFavorited = false,\r\n menuItems = [],\r\n}: PageHeaderProps): React.ReactElement {\r\n const [isMenuOpen, setIsMenuOpen] = useState(false);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n function handleClickOutside(event: MouseEvent) {\r\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\r\n setIsMenuOpen(false);\r\n }\r\n }\r\n\r\n if (isMenuOpen) {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n };\r\n }, [isMenuOpen]);\r\n\r\n const handleMenuItemClick = (item: PageHeaderMenuItem) => {\r\n if (!item.disabled) {\r\n item.onClick();\r\n setIsMenuOpen(false);\r\n }\r\n };\r\n\r\n return (\r\n <div style={styles.container}>\r\n <div style={styles.leftSection}>\r\n <span style={styles.icon}>{icon || '📄'}</span>\r\n <span style={styles.title}>{title}</span>\r\n {isPrivate && (\r\n <button style={styles.privacyBadge}>\r\n <span style={styles.lockIcon}>🔒</span>\r\n <span>Private</span>\r\n <span style={styles.chevron}>▾</span>\r\n </button>\r\n )}\r\n </div>\r\n <div style={styles.rightSection}>\r\n {lastEdited && <span style={styles.editedText}>{lastEdited}</span>}\r\n {onShare && (\r\n <button style={styles.shareButton} onClick={onShare}>\r\n Share\r\n </button>\r\n )}\r\n {onFavorite && (\r\n <button style={styles.iconButton} onClick={onFavorite}>\r\n {isFavorited ? '★' : '☆'}\r\n </button>\r\n )}\r\n {menuItems.length > 0 && (\r\n <div style={styles.menuContainer} ref={menuRef}>\r\n <button\r\n style={styles.menuButton}\r\n onClick={() => setIsMenuOpen(!isMenuOpen)}\r\n aria-label=\"Menu\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"currentColor\"\r\n >\r\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" />\r\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" />\r\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" />\r\n </svg>\r\n </button>\r\n {isMenuOpen && (\r\n <div style={styles.dropdown}>\r\n {menuItems.map((item, index) => (\r\n <React.Fragment key={index}>\r\n {item.divider && index > 0 && <div style={styles.divider} />}\r\n <button\r\n style={{\r\n ...styles.menuItem,\r\n ...(item.disabled ? styles.menuItemDisabled : {}),\r\n }}\r\n onClick={() => handleMenuItemClick(item)}\r\n disabled={item.disabled}\r\n >\r\n {item.icon && <span style={styles.menuItemIcon}>{item.icon}</span>}\r\n <span>{item.label}</span>\r\n </button>\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n padding: '8px 12px',\r\n borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\r\n backgroundColor: 'transparent',\r\n fontSize: '14px',\r\n minHeight: '44px',\r\n color: 'rgba(255, 255, 255, 0.9)',\r\n },\r\n leftSection: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n },\r\n icon: {\r\n fontSize: '16px',\r\n },\r\n title: {\r\n fontWeight: 500,\r\n color: 'rgba(255, 255, 255, 0.9)',\r\n },\r\n privacyBadge: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n padding: '2px 6px',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n color: 'rgba(255, 255, 255, 0.5)',\r\n fontSize: '12px',\r\n cursor: 'pointer',\r\n borderRadius: '3px',\r\n },\r\n lockIcon: {\r\n fontSize: '12px',\r\n },\r\n chevron: {\r\n fontSize: '10px',\r\n marginLeft: '2px',\r\n },\r\n rightSection: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n },\r\n editedText: {\r\n color: 'rgba(255, 255, 255, 0.4)',\r\n fontSize: '12px',\r\n },\r\n shareButton: {\r\n padding: '4px 10px',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n color: 'rgba(255, 255, 255, 0.9)',\r\n fontSize: '14px',\r\n cursor: 'pointer',\r\n borderRadius: '3px',\r\n fontWeight: 500,\r\n },\r\n iconButton: {\r\n padding: '4px 8px',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n color: 'rgba(255, 255, 255, 0.5)',\r\n fontSize: '16px',\r\n cursor: 'pointer',\r\n borderRadius: '3px',\r\n },\r\n menuContainer: {\r\n position: 'relative',\r\n },\r\n menuButton: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '4px 8px',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n color: 'rgba(255, 255, 255, 0.5)',\r\n cursor: 'pointer',\r\n borderRadius: '3px',\r\n },\r\n dropdown: {\r\n position: 'absolute',\r\n top: '100%',\r\n right: 0,\r\n marginTop: '4px',\r\n minWidth: '180px',\r\n backgroundColor: 'rgb(37, 37, 37)',\r\n borderRadius: '6px',\r\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.4)',\r\n border: '1px solid rgba(255, 255, 255, 0.1)',\r\n padding: '4px 0',\r\n zIndex: 1000,\r\n },\r\n menuItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n width: '100%',\r\n padding: '8px 12px',\r\n border: 'none',\r\n backgroundColor: 'transparent',\r\n color: 'rgba(255, 255, 255, 0.9)',\r\n fontSize: '14px',\r\n cursor: 'pointer',\r\n textAlign: 'left',\r\n },\r\n menuItemDisabled: {\r\n color: 'rgba(255, 255, 255, 0.3)',\r\n cursor: 'not-allowed',\r\n },\r\n menuItemIcon: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '16px',\r\n },\r\n divider: {\r\n height: '1px',\r\n backgroundColor: 'rgba(255, 255, 255, 0.1)',\r\n margin: '4px 0',\r\n },\r\n};\r\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Box } from '@mantine/core';\n\n/** Position info passed to drop callback */\nexport interface DropPosition {\n blockId: string;\n placement: 'before' | 'after';\n index: number;\n}\n\ninterface ExternalDropZoneProps {\n /** Editor instance to get block positions from */\n editor: any;\n /** Callback when external data is dropped - position only, caller handles data */\n onDrop: (position: DropPosition) => void;\n /** MIME type to accept (default: 'application/x-artifact') */\n acceptedType?: string;\n /** Drop indicator element to show (provided by caller, already has data) */\n dropIndicator?: React.ReactNode;\n /** Children (the editor content) */\n children: React.ReactNode;\n}\n\n/**\n * ExternalDropZone - Wraps the editor to handle external drag and drop\n *\n * This component only handles:\n * - Detecting valid drag events (by checking dataTransfer.types)\n * - Calculating the drop position (which block, before/after)\n * - Positioning and showing/hiding the drop indicator\n * - Firing onDrop with position when dropped\n *\n * The caller is responsible for:\n * - Providing the dropIndicator UI (with all data it needs)\n * - Handling the actual data on drop (reading from their own state/store)\n */\n// Auto-scroll constants\nconst SCROLL_ZONE_SIZE = 80; // pixels from edge to trigger scroll\nconst SCROLL_SPEED = 12; // pixels per frame\n\nexport const ExternalDropZone: React.FC<ExternalDropZoneProps> = ({ editor, onDrop, acceptedType = 'application/x-artifact', dropIndicator, children }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [isValidDrag, setIsValidDrag] = useState(false);\n const [indicatorStyle, setIndicatorStyle] = useState<React.CSSProperties>({});\n const dropPositionRef = useRef<DropPosition | null>(null);\n\n // Auto-scroll refs\n const scrollAnimationRef = useRef<number | null>(null);\n const scrollDirectionRef = useRef<'up' | 'down' | null>(null);\n const scrollContainerRef = useRef<HTMLElement | Window | null>(null);\n\n // Get block elements from the editor DOM\n const getBlockElements = useCallback((): HTMLElement[] => {\n if (!containerRef.current) return [];\n // BlockNote blocks have data-node-type=\"blockContainer\" attribute\n const blocks = containerRef.current.querySelectorAll('[data-node-type=\"blockContainer\"]');\n return Array.from(blocks) as HTMLElement[];\n }, []);\n\n // Find the scrollable parent container\n const getScrollContainer = useCallback((): HTMLElement | Window => {\n if (scrollContainerRef.current) return scrollContainerRef.current;\n\n let element: HTMLElement | null = containerRef.current;\n while (element) {\n const style = getComputedStyle(element);\n const overflowY = style.overflowY;\n if (overflowY === 'auto' || overflowY === 'scroll') {\n scrollContainerRef.current = element;\n return element;\n }\n element = element.parentElement;\n }\n // Fallback to window\n scrollContainerRef.current = window;\n return window;\n }, []);\n\n // Perform auto-scroll animation\n const performScroll = useCallback(() => {\n const container = getScrollContainer();\n const direction = scrollDirectionRef.current;\n\n if (!direction) {\n scrollAnimationRef.current = null;\n return;\n }\n\n const scrollAmount = direction === 'up' ? -SCROLL_SPEED : SCROLL_SPEED;\n\n if (container === window) {\n window.scrollBy(0, scrollAmount);\n } else {\n (container as HTMLElement).scrollBy(0, scrollAmount);\n }\n\n // Continue scrolling\n scrollAnimationRef.current = requestAnimationFrame(performScroll);\n }, [getScrollContainer]);\n\n // Start auto-scroll in a direction\n const startAutoScroll = useCallback(\n (direction: 'up' | 'down') => {\n if (scrollDirectionRef.current === direction) return; // Already scrolling this direction\n\n scrollDirectionRef.current = direction;\n if (!scrollAnimationRef.current) {\n scrollAnimationRef.current = requestAnimationFrame(performScroll);\n }\n },\n [performScroll]\n );\n\n // Stop auto-scroll\n const stopAutoScroll = useCallback(() => {\n scrollDirectionRef.current = null;\n if (scrollAnimationRef.current) {\n cancelAnimationFrame(scrollAnimationRef.current);\n scrollAnimationRef.current = null;\n }\n }, []);\n\n // Check if cursor is in scroll zone and trigger auto-scroll\n const checkAutoScroll = useCallback(\n (clientY: number) => {\n const container = getScrollContainer();\n let containerTop: number;\n let containerBottom: number;\n\n if (container === window) {\n containerTop = 0;\n containerBottom = window.innerHeight;\n } else {\n const rect = (container as HTMLElement).getBoundingClientRect();\n containerTop = rect.top;\n containerBottom = rect.bottom;\n }\n\n // Check if in top scroll zone\n if (clientY < containerTop + SCROLL_ZONE_SIZE) {\n startAutoScroll('up');\n }\n // Check if in bottom scroll zone\n else if (clientY > containerBottom - SCROLL_ZONE_SIZE) {\n startAutoScroll('down');\n }\n // Not in scroll zone\n else {\n stopAutoScroll();\n }\n },\n [getScrollContainer, startAutoScroll, stopAutoScroll]\n );\n\n // Find the closest block boundary to the mouse position\n const findDropPosition = useCallback(\n (clientY: number): { position: DropPosition; indicatorTop: number } | null => {\n const blocks = getBlockElements();\n if (blocks.length === 0 || !editor?.document) return null;\n\n const containerRect = containerRef.current?.getBoundingClientRect();\n if (!containerRect) return null;\n\n // Get editor document blocks\n const docBlocks = editor.document;\n if (!docBlocks || docBlocks.length === 0) return null;\n\n let closestDistance = Infinity;\n let closestPosition: DropPosition | null = null;\n let indicatorTop = 0;\n\n blocks.forEach((block, index) => {\n const rect = block.getBoundingClientRect();\n const blockId = block.getAttribute('data-id') || docBlocks[index]?.id;\n if (!blockId) return;\n\n // Check distance to top edge (before this block)\n const topDistance = Math.abs(clientY - rect.top);\n if (topDistance < closestDistance) {\n closestDistance = topDistance;\n closestPosition = { blockId, placement: 'before', index };\n indicatorTop = rect.top - containerRect.top;\n }\n\n // Check distance to bottom edge (after this block)\n const bottomDistance = Math.abs(clientY - rect.bottom);\n if (bottomDistance < closestDistance) {\n closestDistance = bottomDistance;\n closestPosition = { blockId, placement: 'after', index };\n indicatorTop = rect.bottom - containerRect.top;\n }\n });\n\n if (!closestPosition) return null;\n\n return { position: closestPosition, indicatorTop };\n },\n [getBlockElements, editor]\n );\n\n // Handle drag over\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n // Check if this is our accepted type\n if (!e.dataTransfer.types.includes(acceptedType)) return;\n\n e.preventDefault();\n e.stopPropagation();\n e.dataTransfer.dropEffect = 'copy';\n\n // Mark as valid drag\n setIsValidDrag(true);\n\n // Check for auto-scroll near edges\n checkAutoScroll(e.clientY);\n\n // Find drop position\n const result = findDropPosition(e.clientY);\n if (result) {\n dropPositionRef.current = result.position;\n setIndicatorStyle({\n position: 'absolute',\n top: result.indicatorTop,\n left: 0,\n right: 0,\n zIndex: 9999,\n pointerEvents: 'none',\n });\n }\n },\n [acceptedType, findDropPosition, checkAutoScroll]\n );\n\n // Handle drag leave\n const handleDragLeave = useCallback(\n (e: React.DragEvent) => {\n // Only clear if leaving the container entirely\n if (containerRef.current && !containerRef.current.contains(e.relatedTarget as Node)) {\n setIsValidDrag(false);\n dropPositionRef.current = null;\n stopAutoScroll();\n }\n },\n [stopAutoScroll]\n );\n\n // Handle drop\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const position = dropPositionRef.current;\n if (position) {\n onDrop(position);\n }\n\n setIsValidDrag(false);\n dropPositionRef.current = null;\n stopAutoScroll();\n },\n [onDrop, stopAutoScroll]\n );\n\n // Clear state on global dragend\n useEffect(() => {\n const handleGlobalDragEnd = () => {\n setIsValidDrag(false);\n dropPositionRef.current = null;\n stopAutoScroll();\n };\n window.addEventListener('dragend', handleGlobalDragEnd);\n return () => window.removeEventListener('dragend', handleGlobalDragEnd);\n }, [stopAutoScroll]);\n\n // Add/remove body class when external drag is active\n useEffect(() => {\n if (isValidDrag) {\n document.body.classList.add('external-artifact-drag-active');\n } else {\n document.body.classList.remove('external-artifact-drag-active');\n }\n return () => {\n document.body.classList.remove('external-artifact-drag-active');\n };\n }, [isValidDrag]);\n\n // Cleanup auto-scroll on unmount\n useEffect(() => {\n return () => {\n if (scrollAnimationRef.current) {\n cancelAnimationFrame(scrollAnimationRef.current);\n }\n };\n }, []);\n\n // Clone the drop indicator to inject the indicatorTop prop for flip behavior\n const indicatorWithPosition =\n dropIndicator && React.isValidElement(dropIndicator)\n ? React.cloneElement(dropIndicator as React.ReactElement<{ indicatorTop?: number }>, {\n indicatorTop: typeof indicatorStyle.top === 'number' ? indicatorStyle.top : undefined,\n })\n : dropIndicator;\n\n return (\n <Box\n ref={containerRef}\n style={{ position: 'relative', width: '100%', height: '100%' }}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n data-external-drag={isValidDrag ? 'true' : undefined}\n >\n {children}\n\n {/* Drop indicator - shown when valid drag is happening */}\n {isValidDrag && indicatorWithPosition && <Box style={{ ...indicatorStyle, background: 'none', border: 'none', boxShadow: 'none' }}>{indicatorWithPosition}</Box>}\n </Box>\n );\n};\n\nexport default ExternalDropZone;\n","import React from 'react';\nimport { getDefaultReactSlashMenuItems, SuggestionMenuController } from '@blocknote/react';\nimport { BlockNoteView } from '@blocknote/mantine';\nimport { filterSuggestionItems } from '@blocknote/core';\nimport { MantineProvider } from '@mantine/core';\nimport { IxoEditorConfig, IxoEditorType } from '../core/types';\nimport { getExtraSlashMenuItems } from './blocks';\nimport { BlocknoteProvider, BlocknoteHandlers, BlockRequirements, DynamicListDataProvider, DynamicListPanelRenderer } from './context/BlocknoteContext';\nimport PanelContent from './components/PanelContent';\nimport { CoverImage } from './components/CoverImage';\nimport { usePanelStore } from './hooks/usePanel';\nimport { PageHeader, PageHeaderProps } from './components/PageHeader';\nimport { ExternalDropZone, DropPosition } from './components/ExternalDropZone';\n\nexport interface IxoEditorProps {\n editor: IxoEditorType | undefined;\n editable?: boolean;\n className?: string;\n onChange?: () => void;\n onSelectionChange?: () => void;\n children?: React.ReactNode;\n mantineTheme?: any; // Pass your Mantine theme object here\n handlers?: BlocknoteHandlers; // Optional handlers for custom blocks\n blockRequirements?: BlockRequirements; // Optional runtime data for blocks\n isPanelVisible?: boolean;\n coverImageUrl?: string; // Optional cover image URL\n logoUrl?: string; // Optional logo URL\n selfNav?: boolean; // Optional page header navigation (default: false)\n pageHeaderProps?: Omit<PageHeaderProps, 'children'>; // Optional props for the page header\n visualizationRenderer?: (vizType: string, config: object) => React.ReactNode; // AG-UI visualization renderer\n getDynamicListData?: DynamicListDataProvider; // Dynamic list data provider for AG-UI lists\n dynamicListPanelRenderer?: DynamicListPanelRenderer; // Custom renderer for dynamic list selection panel\n /** Callback when external content is dropped into the editor (receives position only) */\n onExternalDrop?: (position: DropPosition) => void;\n /** MIME type to accept for external drops (default: 'application/x-artifact') */\n externalDropType?: string;\n /** Drop indicator element to show during drag (caller provides with data already populated) */\n dropIndicator?: React.ReactNode;\n}\n\n/**\n * Inner component that renders the editor\n */\nfunction IxoEditorContent({\n editor,\n config,\n isEditable,\n className,\n onChange,\n onSelectionChange,\n isPanelVisible = true,\n children,\n coverImageUrl,\n logoUrl,\n selfNav = false,\n pageHeaderProps,\n onExternalDrop,\n externalDropType,\n dropIndicator,\n}: {\n editor: IxoEditorType;\n config: IxoEditorConfig;\n isEditable?: boolean;\n className: string;\n onChange?: () => void;\n isPanelVisible?: boolean;\n onSelectionChange?: () => void;\n children?: React.ReactNode;\n coverImageUrl?: string;\n logoUrl?: string;\n selfNav?: boolean;\n pageHeaderProps?: Omit<PageHeaderProps, 'children'>;\n onExternalDrop?: (position: DropPosition) => void;\n externalDropType?: string;\n dropIndicator?: React.ReactNode;\n}) {\n const { activePanel } = usePanelStore();\n const isPanelOpen = activePanel !== null;\n\n const editorContent = (\n <BlockNoteView\n editor={editor}\n editable={isEditable}\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 );\n\n return (\n <div style={{ display: 'flex', height: '100%', width: '100%', gap: 0 }}>\n <div\n className={`ixo-editor ixo-editor--theme-${config.theme} ${className}`}\n style={{\n width: isPanelVisible && isPanelOpen ? '50%' : '100%',\n transition: 'width 0.2s ease',\n }}\n >\n {selfNav && <PageHeader {...pageHeaderProps} />}\n <CoverImage coverImageUrl={coverImageUrl} logoUrl={logoUrl} />\n {onExternalDrop ? (\n <ExternalDropZone editor={editor} onDrop={onExternalDrop} acceptedType={externalDropType} dropIndicator={dropIndicator}>\n {editorContent}\n </ExternalDropZone>\n ) : (\n editorContent\n )}\n </div>\n {isPanelVisible && <PanelContent theme={config.theme} />}\n </div>\n );\n}\n\n/**\n * IxoEditor component - A customized BlockNote editor for IXO (Mantine UI)\n */\nexport function IxoEditor({\n editor,\n editable,\n className = '',\n onChange,\n onSelectionChange,\n children,\n mantineTheme,\n handlers,\n blockRequirements,\n isPanelVisible,\n coverImageUrl,\n logoUrl,\n selfNav = false,\n pageHeaderProps,\n visualizationRenderer,\n getDynamicListData,\n dynamicListPanelRenderer,\n onExternalDrop,\n externalDropType,\n dropIndicator,\n}: IxoEditorProps): React.ReactElement | null {\n if (!editor) {\n return null;\n }\n\n // Get IXO configuration from editor (now type-safe!)\n const config: IxoEditorConfig = editor._ixoConfig || {\n theme: 'light',\n sideMenu: true,\n slashMenu: true,\n formattingToolbar: true,\n linkToolbar: true,\n filePanel: true,\n tableHandles: true,\n };\n\n const isEditable = editable;\n\n const editorContent = (\n <BlocknoteProvider\n editor={editor}\n handlers={handlers}\n blockRequirements={blockRequirements}\n editable={isEditable}\n visualizationRenderer={visualizationRenderer}\n getDynamicListData={getDynamicListData}\n dynamicListPanelRenderer={dynamicListPanelRenderer}\n >\n <IxoEditorContent\n isPanelVisible={isPanelVisible}\n editor={editor}\n config={config}\n isEditable={isEditable}\n className={className}\n onChange={onChange}\n onSelectionChange={onSelectionChange}\n coverImageUrl={coverImageUrl}\n logoUrl={logoUrl}\n selfNav={selfNav}\n pageHeaderProps={pageHeaderProps}\n onExternalDrop={onExternalDrop}\n externalDropType={externalDropType}\n dropIndicator={dropIndicator}\n >\n {children}\n </IxoEditorContent>\n </BlocknoteProvider>\n );\n\n // If a Mantine theme is provided, wrap with MantineProvider\n // Otherwise, assume the parent app already has a MantineProvider\n if (mantineTheme) {\n return <MantineProvider theme={mantineTheme}>{editorContent}</MantineProvider>;\n }\n\n return editorContent;\n}\n","import React from 'react';\nimport { usePanelStore } from '../hooks/usePanel';\nimport { Box } from '@mantine/core';\n\nconst panelStyles = {\n light: {\n backgroundColor: '#ffffff', // editor background\n color: '#1a1a1a', // main text color\n borderLeft: '1px solid #e0e0e0', // left border only - seamless with editor\n borderTop: 'none',\n borderRight: 'none',\n borderBottom: 'none',\n },\n dark: {\n backgroundColor: '#1f1f1f', // editor background\n color: '#f0f0f0', // main text color\n borderLeft: '1px solid #3a3a3a', // left border only - seamless with editor\n borderTop: 'none',\n borderRight: 'none',\n borderBottom: 'none',\n },\n};\n\nexport default function PanelContent({ theme }: { theme: 'light' | 'dark' }) {\n const { activePanel, registeredPanels } = usePanelStore();\n\n const isOpen = activePanel !== null;\n const content = activePanel ? registeredPanels.get(activePanel) : null;\n\n return (\n <Box\n pos=\"sticky\"\n right={0}\n top={0}\n style={{\n width: isOpen ? '50%' : '0',\n height: '100vh',\n transition: 'width 0.2s ease',\n overflow: isOpen ? 'auto' : 'hidden',\n ...(isOpen && panelStyles[theme]), // You can switch between light/dark based on your theme\n }}\n >\n {isOpen && content}\n </Box>\n );\n}\n","import React, { useState } from 'react';\r\nimport { Modal, Stack, Text, TextInput, Button, Alert, Group } from '@mantine/core';\r\nimport { IconAlertCircle, IconCheck, IconKey } from '@tabler/icons-react';\r\n\r\ninterface EntitySigningSetupProps {\r\n opened: boolean;\r\n onClose: () => void;\r\n entityDid: string;\r\n entityName?: string;\r\n onSetup: (pin: string) => Promise<{ success: boolean; error?: string }>;\r\n}\r\n\r\nexport const EntitySigningSetup: React.FC<EntitySigningSetupProps> = ({\r\n opened,\r\n onClose,\r\n entityDid,\r\n entityName,\r\n onSetup,\r\n}) => {\r\n const [pin, setPin] = useState('');\r\n const [confirmPin, setConfirmPin] = useState('');\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [success, setSuccess] = useState(false);\r\n\r\n const handleSetup = async () => {\r\n if (pin.length < 4) {\r\n setError('PIN must be at least 4 characters');\r\n return;\r\n }\r\n if (pin !== confirmPin) {\r\n setError('PINs do not match');\r\n return;\r\n }\r\n\r\n setLoading(true);\r\n setError(null);\r\n\r\n try {\r\n const result = await onSetup(pin);\r\n if (result.success) {\r\n setSuccess(true);\r\n setTimeout(() => {\r\n onClose();\r\n setSuccess(false);\r\n setPin('');\r\n setConfirmPin('');\r\n }, 2000);\r\n } else {\r\n setError(result.error || 'Setup failed');\r\n }\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : 'Setup failed');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n if (!loading) {\r\n onClose();\r\n setPin('');\r\n setConfirmPin('');\r\n setError(null);\r\n setSuccess(false);\r\n }\r\n };\r\n\r\n return (\r\n <Modal\r\n opened={opened}\r\n onClose={handleClose}\r\n title={\r\n <Group gap=\"xs\">\r\n <IconKey size={20} />\r\n <Text fw={600}>Entity Signing Setup</Text>\r\n </Group>\r\n }\r\n size=\"md\"\r\n >\r\n <Stack gap=\"md\">\r\n {success ? (\r\n <Alert color=\"green\" icon={<IconCheck size={16} />}>\r\n Entity signing key set up successfully!\r\n </Alert>\r\n ) : (\r\n <>\r\n <Text size=\"sm\" c=\"dimmed\">\r\n Flow authorization requires a signing key for{' '}\r\n <Text span fw={500}>{entityName || entityDid}</Text>.\r\n </Text>\r\n\r\n <Alert color=\"blue\" variant=\"light\">\r\n <Text size=\"sm\">\r\n This is a <strong>one-time setup</strong> that allows flows to grant permissions\r\n without requiring wallet signatures for each delegation.\r\n </Text>\r\n </Alert>\r\n\r\n <Stack gap=\"xs\">\r\n <Text size=\"sm\" fw={500}>What happens:</Text>\r\n <Text size=\"sm\" c=\"dimmed\">1. A new signing key is generated</Text>\r\n <Text size=\"sm\" c=\"dimmed\">2. Key is registered on the entity&apos;s DID document (requires wallet)</Text>\r\n <Text size=\"sm\" c=\"dimmed\">3. Key is stored encrypted in the entity&apos;s Matrix room</Text>\r\n </Stack>\r\n\r\n <TextInput\r\n label=\"Enter PIN to encrypt signing key\"\r\n description=\"This PIN will be required when granting permissions\"\r\n type=\"password\"\r\n placeholder=\"Enter PIN (min 4 characters)\"\r\n value={pin}\r\n onChange={(e) => setPin(e.currentTarget.value)}\r\n disabled={loading}\r\n />\r\n\r\n <TextInput\r\n label=\"Confirm PIN\"\r\n type=\"password\"\r\n placeholder=\"Confirm PIN\"\r\n value={confirmPin}\r\n onChange={(e) => setConfirmPin(e.currentTarget.value)}\r\n disabled={loading}\r\n />\r\n\r\n {error && (\r\n <Alert color=\"red\" icon={<IconAlertCircle size={16} />}>\r\n {error}\r\n </Alert>\r\n )}\r\n\r\n <Group justify=\"flex-end\" mt=\"md\">\r\n <Button variant=\"subtle\" onClick={handleClose} disabled={loading}>\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={handleSetup}\r\n loading={loading}\r\n leftSection={<IconKey size={16} />}\r\n >\r\n Setup Entity Signing\r\n </Button>\r\n </Group>\r\n </>\r\n )}\r\n </Stack>\r\n </Modal>\r\n );\r\n};\r\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport { Stack, Text, Paper, Group, Badge, Button, ActionIcon, Loader, Alert, Divider } from '@mantine/core';\r\nimport { IconPlus, IconTrash, IconShieldCheck, IconUser, IconRobot, IconBuilding } from '@tabler/icons-react';\r\nimport type { SignedCapability } from '../../core/types/capability';\r\nimport type { IxoEditorType } from '../../core/types/editor';\r\n\r\ninterface FlowPermissionsPanelProps {\r\n editor: IxoEditorType;\r\n entityDid: string;\r\n entityName?: string;\r\n currentUserDid: string;\r\n onGrantPermission: () => void;\r\n onRevokePermission: (capabilityId: string) => Promise<void>;\r\n getUserDisplayName?: (did: string) => Promise<string>;\r\n}\r\n\r\ninterface DelegationDisplay {\r\n capability: SignedCapability;\r\n displayName: string;\r\n type: 'user' | 'oracle' | 'entity';\r\n}\r\n\r\nexport const FlowPermissionsPanel: React.FC<FlowPermissionsPanelProps> = ({\r\n editor,\r\n entityDid,\r\n entityName,\r\n onGrantPermission,\r\n onRevokePermission,\r\n getUserDisplayName,\r\n}) => {\r\n const [delegations, setDelegations] = useState<DelegationDisplay[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [revoking, setRevoking] = useState<string | null>(null);\r\n\r\n const rootCapability = useMemo(() => editor.getRootCapability?.(), [editor]);\r\n\r\n useEffect(() => {\r\n const loadDelegations = async () => {\r\n setLoading(true);\r\n const allDelegations = editor.getAllDelegations?.() || [];\r\n\r\n const displays: DelegationDisplay[] = await Promise.all(\r\n allDelegations\r\n .filter(d => d.id !== rootCapability?.id)\r\n .map(async (cap) => {\r\n let displayName = cap.audience;\r\n let type: 'user' | 'oracle' | 'entity' = 'user';\r\n\r\n if (getUserDisplayName) {\r\n try {\r\n displayName = await getUserDisplayName(cap.audience);\r\n } catch {\r\n // Keep DID as display name\r\n }\r\n }\r\n\r\n if (cap.audience.includes(':oracle:')) {\r\n type = 'oracle';\r\n } else if (cap.audience.includes(':entity:')) {\r\n type = 'entity';\r\n }\r\n\r\n return { capability: cap, displayName, type };\r\n })\r\n );\r\n\r\n setDelegations(displays);\r\n setLoading(false);\r\n };\r\n\r\n loadDelegations();\r\n }, [editor, rootCapability, getUserDisplayName]);\r\n\r\n const handleRevoke = async (capabilityId: string) => {\r\n setRevoking(capabilityId);\r\n try {\r\n await onRevokePermission(capabilityId);\r\n setDelegations(prev => prev.filter(d => d.capability.id !== capabilityId));\r\n } finally {\r\n setRevoking(null);\r\n }\r\n };\r\n\r\n const getIcon = (type: 'user' | 'oracle' | 'entity') => {\r\n switch (type) {\r\n case 'oracle': return <IconRobot size={16} />;\r\n case 'entity': return <IconBuilding size={16} />;\r\n default: return <IconUser size={16} />;\r\n }\r\n };\r\n\r\n const formatCapabilities = (caps: SignedCapability['capabilities']) => {\r\n return caps.map(c => {\r\n if (c.can === 'flow/*') return 'Full flow access';\r\n if (c.can === 'flow/block/execute') {\r\n const blockId = c.with.split(':').pop();\r\n return `Execute block: ${blockId?.slice(-8)}`;\r\n }\r\n return `${c.can} on ${c.with}`;\r\n }).join(', ');\r\n };\r\n\r\n const formatExpiration = (exp?: number) => {\r\n if (!exp) return 'Never';\r\n const date = new Date(exp);\r\n if (date < new Date()) return 'Expired';\r\n return date.toLocaleDateString();\r\n };\r\n\r\n return (\r\n <Stack gap=\"md\">\r\n {/* Root Authority */}\r\n <Stack gap=\"xs\">\r\n <Text fw={600} size=\"sm\">Root Authority</Text>\r\n <Paper p=\"sm\" withBorder>\r\n <Group gap=\"xs\">\r\n <IconShieldCheck size={20} color=\"var(--mantine-color-green-6)\" />\r\n <Stack gap={2} style={{ flex: 1 }}>\r\n <Text size=\"sm\" fw={500}>{entityName || entityDid}</Text>\r\n <Text size=\"xs\" c=\"dimmed\">\r\n {rootCapability\r\n ? `Granted: ${new Date(rootCapability.issuedAt).toLocaleDateString()}`\r\n : 'Root capability not set up'\r\n }\r\n </Text>\r\n </Stack>\r\n <Badge color=\"green\" variant=\"light\">Entity</Badge>\r\n </Group>\r\n </Paper>\r\n </Stack>\r\n\r\n <Divider label=\"Delegated Permissions\" labelPosition=\"center\" />\r\n\r\n {/* Delegations List */}\r\n {loading ? (\r\n <Group justify=\"center\" py=\"xl\">\r\n <Loader size=\"sm\" />\r\n </Group>\r\n ) : delegations.length === 0 ? (\r\n <Alert color=\"gray\" variant=\"light\">\r\n <Text size=\"sm\">No permissions have been granted yet.</Text>\r\n </Alert>\r\n ) : (\r\n <Stack gap=\"xs\">\r\n {delegations.map(({ capability, displayName, type }) => (\r\n <Paper key={capability.id} p=\"sm\" withBorder>\r\n <Group justify=\"space-between\">\r\n <Group gap=\"xs\">\r\n {getIcon(type)}\r\n <Stack gap={2}>\r\n <Text size=\"sm\" fw={500}>{displayName}</Text>\r\n <Text size=\"xs\" c=\"dimmed\">\r\n {formatCapabilities(capability.capabilities)}\r\n </Text>\r\n <Group gap=\"xs\">\r\n <Text size=\"xs\" c=\"dimmed\">\r\n Expires: {formatExpiration(capability.expiration)}\r\n </Text>\r\n <Text size=\"xs\" c=\"dimmed\">•</Text>\r\n <Text size=\"xs\" c=\"dimmed\">\r\n Granted by: {capability.issuer === entityDid ? 'Entity' : capability.issuer.slice(-8)}\r\n </Text>\r\n </Group>\r\n </Stack>\r\n </Group>\r\n <ActionIcon\r\n color=\"red\"\r\n variant=\"subtle\"\r\n onClick={() => handleRevoke(capability.id)}\r\n loading={revoking === capability.id}\r\n disabled={!!revoking}\r\n >\r\n <IconTrash size={16} />\r\n </ActionIcon>\r\n </Group>\r\n </Paper>\r\n ))}\r\n </Stack>\r\n )}\r\n\r\n {/* Grant Button */}\r\n <Button\r\n leftSection={<IconPlus size={16} />}\r\n variant=\"light\"\r\n onClick={onGrantPermission}\r\n >\r\n Grant Permission\r\n </Button>\r\n </Stack>\r\n );\r\n};\r\n","import React, { useState, useCallback } from 'react';\r\nimport {\r\n Modal,\r\n Stack,\r\n Text,\r\n TextInput,\r\n Button,\r\n Group,\r\n Radio,\r\n Checkbox,\r\n Alert,\r\n Paper,\r\n Loader,\r\n Badge,\r\n ActionIcon,\r\n Divider,\r\n NumberInput,\r\n} from '@mantine/core';\r\nimport { IconSearch, IconUser, IconRobot, IconX, IconShieldPlus } from '@tabler/icons-react';\r\nimport type { Capability, DelegationGrant } from '../../core/types/capability';\r\n\r\ninterface GrantPermissionModalProps {\r\n opened: boolean;\r\n onClose: () => void;\r\n flowUri: string;\r\n /** Blocks available for scope selection. If single block, scope UI is hidden. */\r\n blocks: Array<{ id: string; type: string; name?: string }>;\r\n /** Optional: specific block to grant permission for (hides scope selection) */\r\n targetBlockId?: string;\r\n searchUsers: (query: string) => Promise<Array<{\r\n did: string;\r\n displayName: string;\r\n avatarUrl?: string;\r\n }>>;\r\n getOracles?: () => Promise<Array<{\r\n did: string;\r\n name: string;\r\n }>>;\r\n onGrant: (grant: DelegationGrant, pin: string) => Promise<{ success: boolean; error?: string }>;\r\n}\r\n\r\ntype RecipientType = 'user' | 'oracle' | 'manual';\r\ntype ScopeType = 'full' | 'blocks';\r\n\r\nexport const GrantPermissionModal: React.FC<GrantPermissionModalProps> = ({\r\n opened,\r\n onClose,\r\n flowUri,\r\n blocks,\r\n targetBlockId,\r\n searchUsers,\r\n getOracles,\r\n onGrant,\r\n}) => {\r\n // Single block mode: when targetBlockId is set or only one block is provided\r\n const singleBlockMode = !!targetBlockId || blocks.length === 1;\r\n const fixedBlockId = targetBlockId || (blocks.length === 1 ? blocks[0].id : null);\r\n const fixedBlock = fixedBlockId ? blocks.find(b => b.id === fixedBlockId) || blocks[0] : null;\r\n const [recipientType, setRecipientType] = useState<RecipientType>('user');\r\n const [searchQuery, setSearchQuery] = useState('');\r\n const [searchResults, setSearchResults] = useState<Array<{ did: string; displayName: string }>>([]);\r\n const [searching, setSearching] = useState(false);\r\n const [selectedRecipient, setSelectedRecipient] = useState<{ did: string; displayName: string } | null>(null);\r\n const [manualDid, setManualDid] = useState('');\r\n\r\n const [scopeType, setScopeType] = useState<ScopeType>('full');\r\n const [selectedBlocks, setSelectedBlocks] = useState<string[]>([]);\r\n\r\n const [expirationEnabled, setExpirationEnabled] = useState(false);\r\n const [expirationDays, setExpirationDays] = useState<number | string>(30);\r\n\r\n const [canDelegate, setCanDelegate] = useState(false);\r\n\r\n const [pin, setPin] = useState('');\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const handleSearch = useCallback(async () => {\r\n if (searchQuery.length < 2) return;\r\n\r\n setSearching(true);\r\n try {\r\n if (recipientType === 'oracle' && getOracles) {\r\n const oracles = await getOracles();\r\n setSearchResults(\r\n oracles\r\n .filter(o => o.name.toLowerCase().includes(searchQuery.toLowerCase()) || o.did.includes(searchQuery))\r\n .map(o => ({ did: o.did, displayName: o.name }))\r\n );\r\n } else {\r\n const results = await searchUsers(searchQuery);\r\n setSearchResults(results);\r\n }\r\n } finally {\r\n setSearching(false);\r\n }\r\n }, [searchQuery, recipientType, searchUsers, getOracles]);\r\n\r\n const handleGrant = async () => {\r\n const audience = recipientType === 'manual' ? manualDid : selectedRecipient?.did;\r\n\r\n if (!audience) {\r\n setError('Please select a recipient');\r\n return;\r\n }\r\n\r\n if (pin.length < 4) {\r\n setError('Please enter your PIN');\r\n return;\r\n }\r\n\r\n const capabilities: Capability[] = [];\r\n\r\n // In single block mode, always use the fixed block\r\n if (singleBlockMode && fixedBlockId) {\r\n capabilities.push({ can: 'flow/block/execute', with: `${flowUri}:${fixedBlockId}` });\r\n } else if (scopeType === 'full') {\r\n capabilities.push({ can: 'flow/*', with: flowUri });\r\n } else {\r\n selectedBlocks.forEach(blockId => {\r\n capabilities.push({ can: 'flow/block/execute', with: `${flowUri}:${blockId}` });\r\n });\r\n }\r\n\r\n if (capabilities.length === 0) {\r\n setError('Please select at least one block or use full access');\r\n return;\r\n }\r\n\r\n const expiration = expirationEnabled && expirationDays\r\n ? Date.now() + (Number(expirationDays) * 24 * 60 * 60 * 1000)\r\n : undefined;\r\n\r\n const grant: DelegationGrant = {\r\n audience,\r\n audienceDisplayName: recipientType === 'manual' ? manualDid : selectedRecipient?.displayName,\r\n capabilities,\r\n proofs: [], // Will be filled by parent component\r\n expiration,\r\n canDelegate,\r\n };\r\n\r\n setLoading(true);\r\n setError(null);\r\n\r\n try {\r\n const result = await onGrant(grant, pin);\r\n if (result.success) {\r\n onClose();\r\n resetForm();\r\n } else {\r\n setError(result.error || 'Failed to grant permission');\r\n }\r\n } catch (err) {\r\n setError(err instanceof Error ? err.message : 'Failed to grant permission');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const resetForm = () => {\r\n setRecipientType('user');\r\n setSearchQuery('');\r\n setSearchResults([]);\r\n setSelectedRecipient(null);\r\n setManualDid('');\r\n setScopeType('full');\r\n setSelectedBlocks([]);\r\n setExpirationEnabled(false);\r\n setExpirationDays(30);\r\n setCanDelegate(false);\r\n setPin('');\r\n setError(null);\r\n };\r\n\r\n const handleClose = () => {\r\n if (!loading) {\r\n onClose();\r\n resetForm();\r\n }\r\n };\r\n\r\n return (\r\n <Modal\r\n opened={opened}\r\n onClose={handleClose}\r\n title={\r\n <Group gap=\"xs\">\r\n <IconShieldPlus size={20} />\r\n <Text fw={600}>Grant Permission</Text>\r\n </Group>\r\n }\r\n size=\"lg\"\r\n >\r\n <Stack gap=\"md\">\r\n {/* Recipient Type */}\r\n <Stack gap=\"xs\">\r\n <Text size=\"sm\" fw={500}>Recipient Type</Text>\r\n <Radio.Group value={recipientType} onChange={(v) => { setRecipientType(v as RecipientType); setSelectedRecipient(null); setSearchResults([]); }}>\r\n <Group>\r\n <Radio value=\"user\" label=\"User\" />\r\n <Radio value=\"oracle\" label=\"Oracle\" />\r\n <Radio value=\"manual\" label=\"Enter DID\" />\r\n </Group>\r\n </Radio.Group>\r\n </Stack>\r\n\r\n {/* Recipient Selection */}\r\n {recipientType !== 'manual' ? (\r\n <Stack gap=\"xs\">\r\n <TextInput\r\n placeholder={recipientType === 'oracle' ? 'Search oracles...' : 'Search users...'}\r\n leftSection={<IconSearch size={16} />}\r\n rightSection={searching ? <Loader size={14} /> : null}\r\n value={searchQuery}\r\n onChange={(e) => setSearchQuery(e.currentTarget.value)}\r\n onKeyDown={(e) => e.key === 'Enter' && handleSearch()}\r\n />\r\n\r\n {selectedRecipient ? (\r\n <Paper p=\"sm\" withBorder>\r\n <Group justify=\"space-between\">\r\n <Group gap=\"xs\">\r\n {recipientType === 'oracle' ? <IconRobot size={16} /> : <IconUser size={16} />}\r\n <Text size=\"sm\">{selectedRecipient.displayName}</Text>\r\n <Badge size=\"xs\" variant=\"light\">{selectedRecipient.did.slice(-12)}</Badge>\r\n </Group>\r\n <ActionIcon size=\"sm\" variant=\"subtle\" onClick={() => setSelectedRecipient(null)}>\r\n <IconX size={14} />\r\n </ActionIcon>\r\n </Group>\r\n </Paper>\r\n ) : searchResults.length > 0 ? (\r\n <Paper p=\"xs\" withBorder style={{ maxHeight: 150, overflow: 'auto' }}>\r\n <Stack gap={4}>\r\n {searchResults.map((result) => (\r\n <Button\r\n key={result.did}\r\n variant=\"subtle\"\r\n size=\"sm\"\r\n justify=\"flex-start\"\r\n onClick={() => setSelectedRecipient(result)}\r\n >\r\n {result.displayName}\r\n </Button>\r\n ))}\r\n </Stack>\r\n </Paper>\r\n ) : null}\r\n </Stack>\r\n ) : (\r\n <TextInput\r\n label=\"Recipient DID\"\r\n placeholder=\"did:ixo:...\"\r\n value={manualDid}\r\n onChange={(e) => setManualDid(e.currentTarget.value)}\r\n />\r\n )}\r\n\r\n <Divider />\r\n\r\n {/* Permission Scope */}\r\n <Stack gap=\"xs\">\r\n <Text size=\"sm\" fw={500}>Permission Scope</Text>\r\n\r\n {singleBlockMode && fixedBlock ? (\r\n // Single block mode: show fixed block info\r\n <Paper p=\"sm\" withBorder>\r\n <Group gap=\"xs\">\r\n <Badge variant=\"light\" color=\"blue\">\r\n {fixedBlock.type}\r\n </Badge>\r\n <Text size=\"sm\">\r\n {fixedBlock.name || `Block ${fixedBlock.id.slice(-8)}`}\r\n </Text>\r\n </Group>\r\n <Text size=\"xs\" c=\"dimmed\" mt=\"xs\">\r\n Permission will be granted to execute this specific block.\r\n </Text>\r\n </Paper>\r\n ) : (\r\n // Multi-block mode: show scope selection\r\n <>\r\n <Radio.Group value={scopeType} onChange={(v) => setScopeType(v as ScopeType)}>\r\n <Stack gap=\"xs\">\r\n <Radio value=\"full\" label=\"Full flow access (can execute any block)\" />\r\n <Radio value=\"blocks\" label=\"Specific blocks only\" />\r\n </Stack>\r\n </Radio.Group>\r\n\r\n {scopeType === 'blocks' && (\r\n <Paper p=\"sm\" withBorder style={{ maxHeight: 150, overflow: 'auto' }}>\r\n <Stack gap=\"xs\">\r\n {blocks.map((block) => (\r\n <Checkbox\r\n key={block.id}\r\n label={block.name || `${block.type} (${block.id.slice(-8)})`}\r\n checked={selectedBlocks.includes(block.id)}\r\n onChange={(e) => {\r\n if (e.currentTarget.checked) {\r\n setSelectedBlocks([...selectedBlocks, block.id]);\r\n } else {\r\n setSelectedBlocks(selectedBlocks.filter(id => id !== block.id));\r\n }\r\n }}\r\n />\r\n ))}\r\n </Stack>\r\n </Paper>\r\n )}\r\n </>\r\n )}\r\n </Stack>\r\n\r\n <Divider />\r\n\r\n {/* Expiration */}\r\n <Stack gap=\"xs\">\r\n <Checkbox\r\n label=\"Set expiration\"\r\n checked={expirationEnabled}\r\n onChange={(e) => setExpirationEnabled(e.currentTarget.checked)}\r\n />\r\n {expirationEnabled && (\r\n <NumberInput\r\n label=\"Expires in (days)\"\r\n placeholder=\"30\"\r\n value={expirationDays}\r\n onChange={setExpirationDays}\r\n min={1}\r\n max={365}\r\n />\r\n )}\r\n </Stack>\r\n\r\n {/* Can Delegate */}\r\n <Checkbox\r\n label=\"Recipient can grant permissions to others\"\r\n description=\"Allow this recipient to delegate their permissions\"\r\n checked={canDelegate}\r\n onChange={(e) => setCanDelegate(e.currentTarget.checked)}\r\n />\r\n\r\n <Divider />\r\n\r\n {/* PIN Entry */}\r\n <TextInput\r\n label=\"Enter your PIN to sign this delegation\"\r\n type=\"password\"\r\n placeholder=\"PIN\"\r\n value={pin}\r\n onChange={(e) => setPin(e.currentTarget.value)}\r\n />\r\n\r\n {error && (\r\n <Alert color=\"red\">{error}</Alert>\r\n )}\r\n\r\n <Group justify=\"flex-end\">\r\n <Button variant=\"subtle\" onClick={handleClose} disabled={loading}>\r\n Cancel\r\n </Button>\r\n <Button onClick={handleGrant} loading={loading}>\r\n Grant Permission\r\n </Button>\r\n </Group>\r\n </Stack>\r\n </Modal>\r\n );\r\n};\r\n","/**\n * Lightweight GraphQL client for IXO network queries\n */\n\nexport interface GraphQLResponse<T = any> {\n data?: T;\n errors?: Array<{\n message: string;\n locations?: Array<{ line: number; column: number }>;\n path?: Array<string | number>;\n }>;\n}\n\nexport interface GraphQLRequest {\n query: string;\n variables?: Record<string, any>;\n operationName?: string;\n}\n\nexport class GraphQLClient {\n private endpoint: string;\n private headers: Record<string, string>;\n\n constructor(endpoint: string, headers: Record<string, string> = {}) {\n this.endpoint = endpoint;\n this.headers = {\n 'Content-Type': 'application/json',\n ...headers,\n };\n }\n\n async request<T = any>(request: GraphQLRequest): Promise<T> {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const result: GraphQLResponse<T> = await response.json();\n\n if (result.errors && result.errors.length > 0) {\n throw new Error(`GraphQL error: ${result.errors[0].message}`);\n }\n\n if (!result.data) {\n throw new Error('No data returned from GraphQL query');\n }\n\n return result.data;\n }\n}\n\n// Default client instance for IXO network\nexport const ixoGraphQLClient = new GraphQLClient('https://devnet-blocksync-graphql.ixo.earth/graphql');\n","/**\n * GraphQL queries and types for IXO network\n */\n\nimport { ixoGraphQLClient } from './graphql-client';\n\n// Entity type definition based on the GraphQL schema\nexport interface Entity {\n context: string;\n relayerNode: string;\n controller: string;\n id: string;\n type: string;\n startDate: string;\n endDate: string;\n metadata: string;\n linkedResource: any[];\n settings: Record<string, Record<string, any>>;\n service: string;\n externalId: string;\n}\n\nexport interface EntityResponse {\n entity: Entity;\n}\n\nexport interface EntityVariables {\n entityId: string;\n}\n\n// GraphQL query for fetching entity data\nexport const ENTITY_QUERY = `\n query Entity($entityId: String!) {\n entity(id: $entityId) {\n context\n relayerNode\n controller\n id\n type\n startDate\n endDate\n metadata\n linkedResource\n settings\n service\n externalId\n }\n }\n`;\n\n/**\n * Fetches entity data by ID from the IXO network\n * @param entityId - The unique identifier for the entity\n * @returns Promise resolving to the entity data\n */\nexport async function getEntity(entityId: string): Promise<Entity> {\n const response = await ixoGraphQLClient.request<EntityResponse>({\n query: ENTITY_QUERY,\n variables: { entityId },\n operationName: 'Entity',\n });\n\n return response.entity;\n}\n"],"mappings":"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","names":["useCallback","useRef","useEffect","useRef","useEffect","useCallback","React","React","React","useMemo","React","useCallback","React","useState","Stack","React","useCallback","Stack","SegmentedControl","Text","Alert","React","useCallback","Stack","React","useCallback","useMemo","Stack","React","useCallback","React","React","React","useCallback","React","React","useMemo","useCallback","updatedCondition","React","Stack","Button","React","useCallback","React","Stack","Text","SegmentedControl","Alert","React","useState","Stack","React","useEffect","useMemo","useState","SegmentedControl","Stack","Switch","Text","React","useState","useEffect","useMemo","React","Stack","Text","Switch","SegmentedControl","React","useCallback","React","Group","Stack","Text","React","useMemo","React","Group","Stack","Text","React","Checkbox","Group","Stack","Text","React","Checkbox","Group","Stack","Text","useMemo","useEffect","useState","useMemo","useState","useEffect","React","React","ValidatorActionType","useState","useEffect","useCallback","useState","useEffect","useCallback","create","React","createReactBlockSpec","React","React","useMemo","React","useCallback","React","useState","Stack","Card","Group","Text","Box","Button","Switch","GeneralTab","useState","typeConfig","React","Stack","Button","Switch","Text","Card","Group","Box","TemplateConfig","useCallback","React","GeneralTab","Group","Stack","Text","useMemo","React","TemplateConfig","Group","Stack","Text","React","useState","useEffect","useMemo","useCallback","Stack","Text","ActionIcon","Loader","Center","Flex","Title","Collapse","Tooltip","React","Stack","Text","Box","Flex","IconFileText","Center","Flex","Paper","Tooltip","React","React","Checkbox","IconFileText","React","Text","Flex","Box","Stack","React","Text","Box","Stack","Flex","React","Text","Flex","Stack","Box","React","Text","Tooltip","Box","Flex","Stack","React","Text","Flex","Stack","Tooltip","Box","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","React","Text","Box","Stack","Flex","Group","React","Text","Group","Stack","Flex","Box","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","React","Text","Box","Image","Stack","Flex","Badge","React","Text","Flex","Image","Stack","Badge","Box","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","React","useState","Text","Flex","Box","Tooltip","IconCheckbox","React","Text","IconArrowDown","IconArrowUp","IconChevronDown","IconSettings","React","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","React","useState","useEffect","useMemo","Paper","CloseButton","Stack","Alert","Text","Center","React","Stack","Text","Title","Divider","Flex","Paper","Group","React","Stack","Title","Text","Flex","Divider","Paper","Group","useState","useMemo","useEffect","React","Paper","CloseButton","Center","Alert","Text","Stack","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","Stack","Button","Text","React","useState","useState","useMemo","React","TemplateConfig","useCallback","useEffect","error","Center","Text","Stack","Flex","Title","Tooltip","ActionIcon","IconChevronDown","Collapse","IconArrowUp","IconArrowDown","IconSettings","Loader","page","React","createReactBlockSpec","React","React","useEffect","useState","createReactBlockSpec","Stack","Text","Box","Loader","Alert","Group","Accordion","Collapse","IconChevronRight","IconChevronDown","useDisclosure","useState","useDisclosure","useEffect","React","Box","Loader","Alert","Stack","Text","Group","IconChevronDown","IconChevronRight","Collapse","Accordion","createReactBlockSpec","React","createReactBlockSpec","React","React","useMemo","React","useCallback","React","useEffect","useState","Stack","Text","Loader","SegmentedControl","Stack","React","GeneralTab","useState","useEffect","React","Stack","Text","SegmentedControl","Loader","React","useCallback","useEffect","useState","Card","Stack","React","Card","Group","Text","Badge","Stack","ActionIcon","React","useState","useEffect","useMemo","Stack","Button","Group","Text","Card","Badge","Divider","ScrollArea","Alert","Tabs","Paper","React","Stack","React","Stack","React","useState","Stack","Button","Group","Text","Card","Badge","ActionIcon","Divider","ScrollArea","useState","React","Stack","Text","ScrollArea","Card","Group","Badge","ActionIcon","Button","Divider","React","Stack","React","Stack","React","Stack","React","Stack","React","Stack","React","Stack","React","useState","Stack","Button","Group","Text","Card","useState","React","Stack","Text","Card","Group","Button","React","useState","useEffect","Stack","Alert","Group","Text","Badge","useState","useEffect","React","Stack","Alert","Text","Group","Badge","React","Stack","React","Stack","React","Stack","React","Stack","React","Stack","React","Stack","React","Stack","Checkbox","React","Stack","Checkbox","React","Stack","Group","React","Stack","Group","React","useState","Stack","Button","Group","Text","Card","useState","React","Stack","Text","Card","Group","Button","React","Stack","React","Stack","React","Stack","React","Stack","React","Stack","Radio","Group","React","Stack","Radio","Group","React","useState","Stack","Button","Group","Text","Card","useState","React","Stack","Text","Card","Group","Button","React","Stack","Checkbox","React","Stack","Checkbox","React","Stack","Radio","Group","React","Stack","Radio","Group","React","useState","Stack","Button","Group","Text","Card","useState","React","Stack","Text","Card","Group","Button","React","Stack","React","Stack","React","Stack","Alert","Text","React","Stack","Alert","Text","React","Stack","Checkbox","Group","React","Stack","Checkbox","Group","React","Stack","Checkbox","React","Stack","Checkbox","React","Stack","React","Stack","React","Stack","Checkbox","React","Stack","Checkbox","React","Stack","Checkbox","React","Stack","Checkbox","React","Stack","React","Stack","React","Stack","React","Stack","React","Stack","React","Stack","useState","useMemo","useEffect","React","Alert","Text","Stack","Tabs","Group","Paper","Badge","Card","Divider","ScrollArea","Button","useState","useEffect","useCallback","React","Stack","Card","React","Stack","React","Stack","TemplateConfig","useCallback","React","GeneralTab","Group","Stack","Text","useMemo","React","TemplateConfig","Group","Stack","Text","React","useMemo","React","Card","Group","Stack","Text","Badge","Button","React","Card","Stack","Text","Group","Badge","Button","React","useCallback","useState","useEffect","Stack","Button","Text","Card","Loader","SegmentedControl","useEffect","useState","useState","useEffect","coreAddress","useState","useEffect","useState","useEffect","React","useState","Stack","Text","Group","Card","Button","Progress","Box","Tooltip","useState","React","Stack","Card","Group","Box","Text","Progress","Tooltip","Button","React","useCallback","useEffect","useState","Alert","Button","Card","Stack","Text","ActionsTab","useState","useEffect","useCallback","React","Stack","Alert","Text","Button","Card","useState","useCallback","useEffect","React","Stack","Text","SegmentedControl","Loader","Card","Button","ActionsTab","useMemo","React","React","createReactBlockSpec","React","React","useMemo","useState","useEffect","useCallback","Stack","TextInput","Text","Badge","Group","Switch","Select","Divider","Radio","Paper","Button","ActionIcon","Alert","IconPlus","IconX","IconShieldPlus","IconUser","IconRobot","React","useState","useCallback","Stack","Text","TextInput","Button","Group","Radio","Checkbox","Alert","Paper","Loader","Badge","ActionIcon","Divider","NumberInput","Title","IconSearch","IconUser","getAvailableBlocks","document","useMemo","useState","useEffect","useCallback","React","Stack","Text","Radio","Paper","Group","Button","Badge","ActionIcon","IconX","Select","TextInput","IconPlus","Alert","IconShieldPlus","IconRobot","IconUser","Divider","Switch","React","useMemo","useState","useEffect","useCallback","Stack","TextInput","Text","React","createReactBlockSpec","React","React","useMemo","React","useCallback","useMemo","React","useEffect","useState","Divider","Stack","Text","Button","Group","ActionIcon","Paper","IconTrash","IconPlus","React","useState","useCallback","useMemo","Input","ActionIcon","Tooltip","Badge","Group","IconX","React","useState","useMemo","Text","Stack","Group","ActionIcon","ScrollArea","Badge","Box","Tooltip","IconSearch","IconX","IconChevronRight","IconArrowLeft","getBlockDisplayName","useState","useMemo","React","Stack","Group","ActionIcon","IconArrowLeft","Text","IconX","IconSearch","ScrollArea","Box","Badge","IconChevronRight","Tooltip","value","useState","useMemo","useCallback","React","Input","Group","Tooltip","Badge","IconX","ActionIcon","GeneralTab","useState","useEffect","React","Stack","Divider","Group","Text","Button","IconPlus","Paper","ActionIcon","IconTrash","React","Stack","Text","Button","Group","ActionIcon","Paper","Alert","IconTrash","IconPlus","React","Stack","Alert","Text","Group","Button","IconPlus","Paper","ActionIcon","IconTrash","TemplateConfig","useCallback","useMemo","React","GeneralTab","Group","Stack","Text","Badge","useMemo","React","TemplateConfig","method","Group","Stack","Badge","Text","React","useState","Group","Stack","Text","ActionIcon","Tooltip","Button","Badge","Collapse","Code","Loader","Alert","IconChevronDown","IconChevronUp","useState","method","getStatusColor","status","React","Button","Loader","Stack","Group","Badge","Text","Tooltip","ActionIcon","IconChevronUp","IconChevronDown","Collapse","Alert","Code","React","createReactBlockSpec","React","React","createReactBlockSpec","React","useMemo","useState","useCallback","useEffect","useRef","Box","Stack","Text","Paper","Group","Button","ActionIcon","Tooltip","Code","Flex","Collapse","Title","Badge","TextInput","CloseButton","Select","Menu","useDisclosure","IconRefresh","IconSparkles","IconChevronDown","IconChevronUp","IconChevronRight","IconArrowUp","IconArrowDown","IconSearch","IconAdjustmentsHorizontal","IconDownload","IconInfoCircle","IconX","React","useMemo","useState","Paper","CloseButton","Stack","Text","Box","Group","Divider","Code","ScrollArea","Collapse","IconChevronDown","IconChevronRight","useState","useMemo","React","Stack","Box","Text","Divider","Group","IconChevronDown","IconChevronRight","Collapse","ScrollArea","Code","Paper","CloseButton","useState","useDisclosure","useRef","useMemo","useCallback","useEffect","React","formatValue","Text","Paper","Stack","Flex","Title","ActionIcon","IconChevronUp","IconChevronDown","Collapse","Box","Group","IconInfoCircle","IconX","Code","TextInput","IconSearch","CloseButton","IconArrowUp","IconArrowDown","Tooltip","Button","IconRefresh","Menu","IconAdjustmentsHorizontal","IconChevronRight","Select","IconDownload","IconSparkles","Badge","createReactBlockSpec","React","React","useState","useEffect","useMemo","useCallback","createReactBlockSpec","Stack","Text","Button","ActionIcon","Center","Flex","React","Box","Flex","Stack","Text","Image","React","Text","Flex","Image","Stack","Box","React","useState","Group","Box","React","Stack","Button","Text","React","Stack","Card","Group","Text","Box","Button","React","Stack","Text","Card","Group","Box","Button","React","Stack","Text","Button","Group","React","Stack","Text","Group","Button","React","Stack","Text","Button","Group","Switch","React","Switch","Stack","Text","Group","Button","useState","React","Group","Box","IconSettings","React","useState","useMemo","useEffect","useCallback","Stack","Flex","Text","ActionIcon","Center","Button","createReactBlockSpec","React","createReactBlockSpec","React","React","useMemo","React","useCallback","React","useEffect","useState","Divider","Stack","Text","Group","ActionIcon","Paper","IconTrash","GeneralTab","useState","useEffect","React","Stack","Divider","Group","Text","Paper","ActionIcon","IconTrash","TemplateConfig","useCallback","React","GeneralTab","Group","Stack","Text","Badge","useMemo","React","TemplateConfig","channel","Group","Stack","Badge","Text","React","useState","Group","Stack","Text","ActionIcon","Tooltip","Button","Badge","Collapse","Alert","Loader","Code","IconSend","IconChevronDown","IconChevronUp","IconX","useState","channel","getStatusColor","status","React","Button","Loader","IconSend","Stack","Group","Badge","Text","Tooltip","ActionIcon","IconChevronUp","IconChevronDown","Alert","IconX","Collapse","Code","React","createReactBlockSpec","React","React","createReactBlockSpec","React","React","useMemo","Group","Stack","Text","React","useCallback","React","useEffect","useState","useCallback","useMemo","React","useState","useEffect","Stack","Text","Checkbox","Loader","Alert","useState","useEffect","getCollectionName","React","Stack","Loader","Alert","Text","Checkbox","GeneralTab","useState","useEffect","useMemo","useCallback","adminAddress","React","TemplateConfig","useCallback","React","GeneralTab","useMemo","React","TemplateConfig","Group","Stack","Text","React","useMemo","Stack","Text","Loader","Center","Alert","Title","Flex","ActionIcon","useState","useEffect","useRef","useRef","useEffect","useState","useState","useEffect","useCallback","useRef","useMemo","useRef","useEffect","useState","useMemo","useCallback","IconSettings","IconRefresh","IconAlertCircle","React","useMemo","Stack","Text","ActionIcon","Tooltip","Loader","Center","useState","useEffect","useMemo","useRef","useRef","useEffect","useState","useMemo","React","useState","useEffect","useCallback","useMemo","CloseButton","Title","Loader","Stack","Text","Button","ActionIcon","Alert","IconArrowLeft","useState","useCallback","useEffect","useMemo","error","getStatusColor","formatDate","React","ActionIcon","IconArrowLeft","Title","CloseButton","Stack","Button","Loader","Text","Alert","IconArrowRight","getCollectionName","collection","useMemo","React","Stack","Text","Tooltip","ActionIcon","Center","Loader","useMemo","React","TemplateConfig","Center","Text","Stack","Flex","Title","ActionIcon","IconRefresh","IconSettings","Loader","Alert","IconAlertCircle","React","createReactBlockSpec","React","React","createReactBlockSpec","React","React","useMemo","Group","Stack","Text","React","useCallback","React","useEffect","useState","GeneralTab","useState","useEffect","React","React","useCallback","useMemo","useMemo","useCallback","adminAddress","React","TemplateConfig","useCallback","React","GeneralTab","useMemo","React","TemplateConfig","Group","Stack","Text","React","useMemo","Stack","Text","Loader","Center","Alert","Title","Flex","ActionIcon","IconSettings","IconRefresh","IconAlertCircle","React","Stack","Text","Loader","Center","React","useMemo","Stack","Text","Button","Menu","Badge","ActionIcon","Box","Tooltip","Loader","IconChevronDown","IconArrowRight","useState","useEffect","useMemo","useState","useMemo","result","useEffect","React","useMemo","useEffect","Loader","Stack","Text","Survey","useState","useEffect","useMemo","useCallback","SurveyModel","useState","useEffect","useMemo","SurveyModel","useCallback","error","useMemo","useEffect","React","Stack","Loader","Text","Survey","React","useCallback","Stack","Text","Loader","Center","Alert","IconAlertCircle","React","useMemo","Stack","Text","Badge","Group","ActionIcon","IconArrowRight","React","useMemo","useState","Loader","Stack","Text","Badge","Button","Group","Modal","Alert","Survey","IconCheck","IconX","IconAlertCircle","useState","useEffect","useMemo","SurveyModel","useState","useEffect","useMemo","SurveyModel","useState","useCallback","useState","useCallback","useState","useMemo","React","Badge","Stack","Alert","IconAlertCircle","Group","Button","IconX","IconCheck","Loader","Text","Survey","Modal","useState","useEffect","useState","useEffect","useMemo","React","Stack","Group","Text","Badge","ActionIcon","IconArrowRight","useState","useEffect","useCallback","useState","useCallback","useEffect","useCallback","React","Center","Loader","Alert","IconAlertCircle","Text","Stack","React","React","CollectionItem","useMemo","React","Loader","ActionIcon","IconArrowRight","Badge","Tooltip","Button","Menu","IconChevronDown","Box","Stack","Text","ClaimCollectionsList","React","Text","Center","Loader","Stack","CollectionItem","useMemo","React","TemplateConfig","Center","Text","Stack","Flex","Title","ActionIcon","IconRefresh","IconSettings","Loader","Alert","IconAlertCircle","ClaimCollectionsList","React","createReactBlockSpec","React","React","React","useMemo","Group","Stack","Text","React","useCallback","React","useEffect","useState","useCallback","useMemo","GeneralTab","useState","useEffect","useMemo","useCallback","adminAddress","React","TemplateConfig","useCallback","React","GeneralTab","useMemo","React","TemplateConfig","Group","Stack","Text","React","useMemo","Stack","Text","Loader","Center","Alert","Title","Flex","ActionIcon","IconSettings","IconRefresh","IconAlertCircle","React","useMemo","useEffect","useRef","Stack","Text","ActionIcon","Tooltip","Loader","Center","React","useState","useEffect","useCallback","useMemo","Paper","CloseButton","Title","Loader","Stack","Text","ActionIcon","Alert","Badge","Group","Button","Divider","IconAlertCircle","IconArrowRight","IconRefresh","IconArrowLeft","Survey","SurveyModel","surveyTheme","SURVEY_THEME_VARIABLES","surveyTheme","SURVEY_THEME_BACKGROUND","SURVEY_THEME_FOREGROUND","useState","useCallback","useEffect","useMemo","SurveyModel","error","React","Paper","ActionIcon","IconArrowLeft","Title","Badge","Group","IconRefresh","CloseButton","Stack","Loader","Text","Alert","IconAlertCircle","Survey","Divider","Button","claim","formatDate","IconArrowRight","IconArrowRight","CollectionItem","useRef","useEffect","getCollectionName","collection","useMemo","React","Stack","Text","Tooltip","ActionIcon","ClaimCollectionsList","Center","Loader","useMemo","React","Center","Text","Stack","Flex","Title","ActionIcon","IconRefresh","IconSettings","Loader","Alert","IconAlertCircle","ClaimCollectionsList","React","React","createReactBlockSpec","createReactBlockSpec","React","React","createReactBlockSpec","React","useMemo","useCallback","useRef","useState","useEffect","Box","Stack","Text","Paper","Group","useRef","useState","useEffect","useMemo","useCallback","React","Paper","Stack","Text","Box","Group","createReactBlockSpec","React","React","createReactBlockSpec","React","React","useMemo","Badge","Group","Stack","Text","React","useCallback","Paper","CloseButton","Title","React","useEffect","useState","GeneralTab","useState","useEffect","React","TemplateConfig","useCallback","React","Paper","Title","CloseButton","GeneralTab","useMemo","React","TemplateConfig","Badge","Group","Stack","Text","React","useCallback","useMemo","useState","ActionIcon","Badge","Group","Stack","Text","Tooltip","IconChevronRight","IconCheck","IconAlertCircle","React","useCallback","useEffect","useMemo","useRef","useState","Alert","Button","CloseButton","Group","Loader","Stack","Text","Title","IconAlertCircle","IconCheck","Survey","SurveyModel","useState","useRef","useMemo","SurveyModel","useCallback","useEffect","React","Stack","Loader","Text","Alert","IconCheck","Button","IconAlertCircle","Group","Title","CloseButton","Survey","useState","useCallback","useMemo","React","IconCheck","IconAlertCircle","Group","Stack","Text","Badge","Tooltip","ActionIcon","IconChevronRight","React","createReactBlockSpec","React","useMemo","useEffect","useState","useCallback","useMemo","useCreateBlockNote","BlockNoteSchema","defaultBlockSpecs","defaultInlineContentSpecs","defaultStyleSpecs","useEffect","useState","useRef","useCallback","useMemo","useMemo","useMemo","useEffect","ROOT_CAPABILITY_KEY","useMemo","useEffect","BlockNoteSchema","defaultBlockSpecs","defaultInlineContentSpecs","defaultStyleSpecs","useCreateBlockNote","React","useState","useRef","useEffect","Box","Button","Group","useState","useRef","useEffect","React","Box","Group","Button","React","useState","useRef","useEffect","React","useCallback","useEffect","useRef","useState","Box","React","React","Box","React","React","React","useState","Modal","Stack","Text","TextInput","Button","Alert","Group","IconAlertCircle","IconCheck","IconKey","React","useState","useEffect","useMemo","Stack","Text","Paper","Group","Badge","Button","ActionIcon","Loader","Alert","Divider","IconPlus","IconTrash","IconShieldCheck","IconUser","IconRobot","getIcon","React","useState","useCallback","Modal","Stack","Text","TextInput","Button","Group","Radio","Checkbox","Alert","Paper","Loader","Badge","ActionIcon","Divider","NumberInput","IconSearch","IconUser","IconRobot","IconX","IconShieldPlus"]}