@ixo/editor 1.12.0 → 1.14.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../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/registry/conditionableProperties.ts","../src/mantine/blocks/components/ConditionBuilder/PropertyValueInput.tsx","../src/mantine/blocks/checkbox/template/GeneralTab.tsx","../src/mantine/hooks/usePanel.ts","../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/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/registry.ts","../src/mantine/blocks/list/flow/FlowView.tsx","../src/mantine/blocks/list/linked_resources/LinkedResourcesList.tsx","../src/core/lib/getMediaTypeIcon.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/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/utils/numbers.ts","../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/mantine/blocks/overview/OverviewBlock.tsx","../src/mantine/context/types.ts","../src/mantine/context/hooks/useSharedProposal.ts","../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/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/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/blocks/apiRequest/flow/FlowView.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/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/mantine/IxoEditor.tsx","../src/mantine/components/PanelContent.tsx","../src/core/lib/graphql-client.ts","../src/core/lib/graphql-queries.ts"],"sourcesContent":["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';\n\nexport type Addr = string;\nexport type Uint128 = string;\nexport type Timestamp = string;\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// 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}\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: string;\n externalId: string;\n}\nexport interface Asset {\n did: string;\n alsoKnownAs: string;\n name: string;\n icon: string;\n totalCarbon: number;\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}\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\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 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 // Lists data handlers\n getAssets: (collectionDid: string, page: number) => 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 // 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}\nexport type DocType = 'template' | 'page' | 'flow';\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}\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}> = ({ children, editor, handlers, blockRequirements, editable }) => {\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 from editor with reactive updates\n const initialDocType = (editor?.getDocType?.() as DocType) || 'flow';\n console.log('[BlocknoteContext] Initial docType from editor:', initialDocType);\n const [docType, setDocType] = useState<DocType>(initialDocType);\n\n // Log whenever docType state changes\n useEffect(() => {\n console.log('[BlocknoteContext] docType state updated to:', docType);\n }, [docType]);\n\n // Observe changes to the docType in the YMap\n useEffect(() => {\n if (!editor?._yRoot) {\n console.log('[BlocknoteContext] No editor._yRoot, skipping observer setup');\n return;\n }\n\n const updateDocType = () => {\n const newDocType = (editor.getDocType?.() as DocType) || 'flow';\n console.log('[BlocknoteContext] updateDocType() called, newDocType:', newDocType, 'current docType:', docType);\n if (newDocType !== docType) {\n console.log('[BlocknoteContext] docType changed from', docType, 'to', newDocType);\n setDocType(newDocType);\n }\n };\n\n // Set initial value\n console.log('[BlocknoteContext] Setting up observer, calling updateDocType() initially');\n updateDocType();\n\n // Observe changes to the root map\n const observer = () => {\n console.log('[BlocknoteContext] YMap observer triggered, calling updateDocType()');\n updateDocType();\n };\n\n editor._yRoot?.observe(observer);\n\n return () => {\n console.log('[BlocknoteContext] Unobserving YMap');\n editor._yRoot?.unobserve(observer);\n };\n }, [editor]);\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 }}\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 { Card, Checkbox, Group, Stack, Text, ActionIcon, Badge } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\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 <Card withBorder padding=\"md\" radius=\"md\" style={{ width: '100%', cursor: 'pointer', position: 'relative' }} 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 <ActionIcon variant=\"light\" color=\"blue\" size=\"lg\" radius=\"xl\" style={{ flexShrink: 0 }}>\n {getIcon(block.props.icon, 18, 1.5, 'square-check')}\n </ActionIcon>\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 </Card>\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 { GeneralTab } from './GeneralTab';\nimport { CheckboxAllowedMode } from '../CheckboxBlock';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\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 <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}>Checkbox Settings</Title>\n <CloseButton onClick={closePanel} />\n </div>\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 </Paper>\n );\n};\n","import React from 'react';\nimport { Tabs } from '@mantine/core';\nimport { ConditionsTab } from './ConditionsTab';\nimport { IxoBlockProps } from '@/core/types';\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\n return (\n <Tabs defaultValue={defaultValue}>\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, Button, 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';\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 <Button variant=\"outline\" onClick={handleAddCondition} disabled={availableBlocks.length === 0} fullWidth>\n Add Condition\n </Button>\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 console.error('[parseConditionConfig] Failed to parse conditions:', 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 console.error('[stringifyConditionConfig] Failed to stringify conditions:', 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, Button, Text, Alert } from '@mantine/core';\nimport type { ConditionConfig, BlockCondition } from '../../types/conditions';\nimport { parseConditionConfig, stringifyConditionConfig, createDefaultCondition, getAvailableBlocks } from '../../utils/conditionUtils';\nimport { ConditionRow } from './ConditionRow';\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 <Button variant=\"outline\" onClick={handleAddCondition} disabled={availableBlocks.length === 0} fullWidth>\n Add Condition\n </Button>\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 { Card, Stack, TextInput, Select, 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';\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 <Card withBorder p=\"md\">\n <Stack gap=\"sm\">\n {/* Condition Name */}\n <TextInput 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 <Select label=\"Check this block\" placeholder=\"Select a block...\" data={blockSelectData} value={currentBlockValue} onChange={handleSourceBlockChange} searchable clearable />\n\n {/* Property, Operator, and Value Row */}\n {condition.sourceBlockType && (\n <>\n <Group grow>\n {/* Property Selection */}\n <Select label=\"Property\" placeholder=\"Select property...\" data={propertySelectData} value={condition.rule.property} onChange={handlePropertyChange} />\n\n {/* Operator Selection */}\n <Select\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 <Select label=\"Action\" placeholder=\"Select action...\" data={actionSelectData} value={condition.effect.action} onChange={handleActionChange} />\n </Group>\n\n {/* Message */}\n <TextInput\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 </Card>\n );\n}\n","import type { BlockTypeProperties, ConditionableProperty } from '../types/conditions';\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};\n\nexport function getConditionableProperties(blockType: string): ConditionableProperty[] {\n return CONDITIONABLE_PROPERTIES[blockType] || [];\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 { TextInput, NumberInput, Switch, Select, Stack } from '@mantine/core';\nimport type { ConditionableProperty } from '../../types/conditions';\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 <TextInput 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 <NumberInput 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 <TextInput 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 <Select label=\"Value\" placeholder=\"Select value...\" data={selectData} value={String(value)} onChange={handleSelectChange} disabled={disabled} />;\n\n case 'string':\n default:\n return <TextInput label=\"Value\" placeholder=\"Enter text...\" value={String(value)} onChange={handleStringChange} disabled={disabled} />;\n }\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Divider, SegmentedControl, Stack, Switch, Text, TextInput, Textarea, PillsInput, Pill } from '@mantine/core';\nimport { CheckboxAllowedMode } from '../CheckboxBlock';\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 <TextInput\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 <Text size=\"sm\" fw={600}>\n Description\n </Text>\n <Textarea\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 { useCallback, useMemo, useEffect, useRef } from 'react';\nimport { create } from 'zustand';\n\ninterface PanelRegistration {\n id: string;\n content: React.ReactNode;\n}\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\n useEffect(() => {\n const { registerPanel } = usePanelStore.getState();\n registerPanel(panelId, content);\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 from 'react';\nimport { IconSquareCheck, IconFileText, IconCheckbox, IconNote, IconChecklist, IconThumbUp, IconBell, type IconProps } from '@tabler/icons-react';\n\nexport type IconKey = 'square-check' | 'file-text' | 'checklist' | 'checkbox' | 'note' | 'thumb-up' | 'bell';\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};\n\nexport const getIcon = (key: string | IconKey, size: number = 20, stroke: number = 1.5, fallback: IconKey = 'square-check') => {\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 size={size} stroke={stroke} />;\n};\n","import React from 'react';\nimport { Card, Checkbox, Group, Stack, Text, ActionIcon, Tooltip } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport type { IconKey } from '@/mantine/utils/iconMap';\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 <Card withBorder padding=\"md\" radius=\"md\" style={{ width: '100%', cursor: 'pointer' }}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n <ActionIcon variant=\"light\" color=\"blue\" size=\"lg\" radius=\"xl\" style={{ flexShrink: 0 }}>\n {getIcon(block.props.icon, 18, 1.5, 'square-check')}\n </ActionIcon>\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 </Card>\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 console.warn(`[evaluateCondition] Unknown operator: ${rule.operator}`);\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","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/FlowView';\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 { Card, Group, Stack, Text, ActionIcon, Badge } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport { getListNameByType } from '../registry';\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 <Card withBorder padding=\"md\" radius=\"md\" style={{ width: '100%', cursor: 'pointer', position: 'relative' }} 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 <ActionIcon variant=\"light\" color=\"blue\" size=\"lg\" radius=\"xl\" style={{ flexShrink: 0 }}>\n {getIcon(block.props.icon, 18, 1.5, 'checklist')}\n </ActionIcon>\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 </Card>\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 { GeneralTab } from './GeneralTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { ListType, BaseListConfig, SortOption, FilterOption } from '../types';\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 console.error('Failed to parse listConfig:', error);\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 console.error('Failed to parse sortOptions:', error);\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 console.error('Failed to parse filterOptions:', error);\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 <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}>List Settings</Title>\n <CloseButton onClick={closePanel} />\n </div>\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 </Paper>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, Card, Group, Text, Box, TextInput, Button, Switch, Accordion } from '@mantine/core';\nimport { ListType, BaseListConfig, ListTypeMetadata, ConfigField } from '../types';\nimport { getAllListTypes, getListTypeConfig } from '../registry';\nimport { useBlocknoteHandlers } from '../../../context/BlocknoteContext';\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 === 'transactions' && handlers?.getCurrentUser) {\n try {\n const user = handlers.getCurrentUser();\n handleConfigChange('address', user.address);\n } catch (error) {\n console.error('Failed to get current user:', error);\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 <TextInput\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 styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n },\n }}\n />\n {field.key === 'address' && selectedType === 'transactions' && (\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] ? '#4dabf7' : '#333',\n },\n label: {\n color: '#adb5bd',\n },\n }}\n />\n );\n default:\n return (\n <TextInput\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 styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n },\n }}\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 <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 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 <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 <Button onClick={handleSaveConfig} disabled={!isConfigValid()} fullWidth>\n Save Configuration\n </Button>\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: 'encrypted', label: 'Private', type: true },\n { key: 'encrypted', label: 'Public', type: false },\n];\n\nexport const linkedResourcesSortFields: SortOption[] = [\n { key: 'description', label: 'Description', type: 'string' },\n { key: 'type', label: 'Type', type: 'string' },\n { key: 'mediaType', label: 'Media Type', type: 'string' },\n { key: 'serviceEndpoint', label: 'Service Endpoint', type: 'string' },\n];\n\nexport const linkedResourcesSelectionPanelConfig: SelectionPanelConfig = {\n title: (item) => item.description || 'Linked Resource',\n description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `ID: ${item.id}` }, { text: `Encrypted: ${item.encrypted ? 'Yes' : 'No'}` }, { text: `Service Endpoint: ${item.serviceEndpoint}` }],\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: true,\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: 'totalCarbon', label: 'Total Carbon', type: 'number' },\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];\n\nexport const assetsSelectionPanelConfig: SelectionPanelConfig = {\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: `Hash: ${item.transactionHash}` }, { text: `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 title: (item) => item.name || 'Unnamed Collection',\n description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `DID: ${item.did}` }, { text: `Type: ${item.type}` }],\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 description: (item) => item.description || 'No description',\n prompts: (item) => [\n { text: `Price: ${item.price} ${item.currency}` },\n { text: `Subscribed: ${item.isSubscribed ? 'Yes' : 'No'}` },\n { text: `Open: ${item.isOpen ? 'Yes' : 'No'}` },\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 description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `Flows Amount: ${item.flowsAmount}` }, { text: `Active: ${item.isActive ? 'Yes' : 'No'}` }, { text: `Invited: ${item.isInvited ? 'Yes' : 'No'}` }],\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 title: (item) => item.name || 'POD',\n description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `Start Date: ${item.startDate}` }, { text: `End Date: ${item.endDate}` }, { text: `Member: ${item.isMember ? 'Yes' : 'No'}` }],\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 title: (item) => item.name || 'Proposal',\n description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `DID: ${item.did}` }, { text: `Status: ${item.status}` }],\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 title: (item) => item.name || 'Request',\n description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `Total Applications: ${item.totalApplications}` }, { text: `Member: ${item.isMember ? 'Yes' : 'No'}` }, { text: `DID: ${item.did}` }],\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 title: (item) => item.username || 'Unknown Member',\n description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `Address: ${item.address}` }, { text: `DID: ${item.did}` }],\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: (item) => [\n { text: `Status: ${item.isActive ? 'Active' : 'Inactive'}` },\n { text: `Staked: ${item.isStaked ? 'Yes' : 'No'}` },\n { text: `Bonding: ${item.isBonding ? 'Yes' : 'No'}` },\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 title: (item) => item.username || 'Unknown Member',\n description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `Address: ${item.address}` }, { text: `DID: ${item.did}` }],\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 title: (item) => item.name || 'Project',\n description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `DID: ${item.did}` }],\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 description: (item) => item.description || 'No description',\n prompts: (item) => [{ text: `DID: ${item.did}` }],\n actionSections: (item) => item.actionSections,\n detailsHandlerKey: 'getDaoDetails',\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';\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};\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};\n\nexport const getSelectionPanelConfig = (type: ListType): SelectionPanelConfig => {\n return listSelectionPanelRegistry[type];\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { Group, Stack, Text, ActionIcon, Alert, Loader, Center, Flex, Button } from '@mantine/core';\nimport { ListType, BaseListConfig, ListData, FilterOption } from '../types';\nimport {\n Asset,\n Collection,\n LinkedResource,\n Transaction,\n useBlocknoteHandlers,\n Investment,\n Oracle,\n POD,\n Proposal,\n Request,\n Member,\n Validator,\n useBlocknoteContext,\n} from '../../../context/BlocknoteContext';\nimport { LinkedResourcesList } from '../linked_resources/LinkedResourcesList';\nimport { AssetsList } from '../assets/AssetsList';\nimport { TransactionsList } from '../transactions/TransactionsList';\nimport { CollectionsList } from '../collections/CollectionsList';\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, IconArrowRight, IconArrowUp } 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';\n\nconst IconRefresh = () => <span>🔄</span>;\nconst IconSettings = () => <span>⚙️</span>;\nconst IconAlertCircle = () => <span>⚠️</span>;\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 [error, setError] = useState<string | null>(null);\n const [showErrorDetails, setShowErrorDetails] = useState(false);\n const [page, setPage] = useState(1);\n const [selectionMode, setSelectionMode] = useState<'single' | 'multi' | null>(null);\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\n const selectionPanelId = `${LIST_SELECTION_FLOW_PANEL_ID}-${block.id}`;\n const selectionPanelContent = useMemo(\n () => <ListSelectionPanel editor={editor} block={block} selectedIds={selectedIds} listType={listType} />,\n [editor, block, selectedIds, listType]\n );\n const { open: openSelectionPanel } = usePanel(selectionPanelId, selectionPanelContent);\n\n useEffect(() => {\n if (selectionMode === 'single' && 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 }, [selectionMode, 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 if (selectionMode === 'single') {\n if (checked) {\n return new Set([id]);\n }\n nextSelectedIds.delete(id);\n return nextSelectedIds;\n }\n if (checked) {\n nextSelectedIds.add(id);\n } else {\n nextSelectedIds.delete(id);\n }\n return nextSelectedIds;\n });\n },\n [selectionMode]\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 console.error('Failed to parse listConfig:', 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 console.error('Failed to parse listSortConfigOptions:', 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 console.error('Failed to parse listSortConfigOptions:', 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 console.error('Failed to parse listSortConfigOptions:', 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 console.error('Failed to parse listSortConfig:', error);\n return {};\n }\n }\n return {};\n }, [block.props.sort]);\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 userAddress;\n\n switch (listType) {\n case 'linked_resources':\n did = handlers.getEntityDid();\n if (!did && !listConfig.did) throw new Error('DID is required');\n result = await handlers.getEntity(listConfig.did || did);\n setData({ items: result.linkedResource });\n break;\n\n case 'assets':\n did = handlers.getEntityDid();\n if (!did && !listConfig.collectionDid) throw new Error('Collection DID is required');\n result = await handlers.getAssets(listConfig.collectionDid || did, page);\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 case 'dao_members':\n userAddress = handlers.getCurrentUser();\n groupIds = await handlers.getDaoGroupsIds();\n if (!userAddress.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 || userAddress.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 <LinkedResourcesList items={filteredData as LinkedResource[]} config={listConfig} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'assets':\n return <AssetsList items={filteredData as Asset[]} config={listConfig} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'transactions':\n return <TransactionsList items={filteredData as Transaction[]} config={listConfig} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'collections':\n return <CollectionsList items={filteredData as Collection[]} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'investments':\n return <InvestmentsList items={filteredData as Investment[]} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'oracles':\n return <OraclesList items={filteredData as Oracle[]} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'pods':\n return <PodsList items={filteredData as POD[]} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'proposals':\n return <ProposalsList items={filteredData as Proposal[]} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'requests':\n return <RequestsList items={filteredData as Request[]} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'projects':\n return <ProjectsList items={filteredData as Request[]} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'daos':\n return <DaosList items={filteredData as Request[]} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'group_members':\n return <MembersList items={filteredData as Member[]} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'dao_members':\n return <DaoMembersList items={filteredData as Member[]} mods={selectionMode} isItemChecked={isItemChecked} onItemCheck={onItemCheck} />;\n case 'validators':\n return <ValidatorsList items={filteredData as Validator[]} mods={selectionMode} 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 mih={totalPages !== 1 ? 700 : undefined} w=\"100%\">\n <Flex align=\"center\" gap=\"xs\">\n <Text>{getListNameByType(listType)}</Text>\n {listSortConfig?.key && (\n <Flex align=\"center\">\n <Text size=\"xs\" c=\"dimmed\">\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} c=\"dimmed\">\n {listSortConfig.direction === 'asc' && <IconArrowUp size={18} />}\n {listSortConfig.direction === 'desc' && <IconArrowDown size={18} />}\n </Text>\n </Flex>\n )}\n {selectionMode && (\n <Text lh={0.5} c=\"dimmed\">\n {selectionMode === 'single' ? 'Single Selection' : 'Multi Selection'}\n </Text>\n )}\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 <ActionIcon variant=\"subtle\" size=\"sm\" onClick={fetchData} loading={loading}>\n <IconRefresh />\n </ActionIcon>\n\n {editable && (\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={openPanel}>\n <IconSettings />\n </ActionIcon>\n )}\n\n {selectedIds.size > 0 && (\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={openSelectionPanel}>\n <IconArrowRight />\n </ActionIcon>\n )}\n\n {listConfig && listSortConfigOptions && listSortConfigOptions?.length > 0 && (\n <ListActionsMenu\n onSelectActionClick={(mode) => setSelectionMode(mode)}\n selectionMode={selectionMode}\n options={listSortConfigOptions}\n value={listSortConfig}\n onChange={(sortOption) => handleSortChange(sortOption)}\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 <Alert color=\"red\" title=\"Failed to load data\" icon={<IconAlertCircle />}>\n <Stack gap=\"xs\">\n <Text size=\"sm\">{showErrorDetails ? error : 'Unable to fetch list data'}</Text>\n <Group gap=\"xs\">\n <Button size=\"xs\" variant=\"subtle\" onClick={fetchData}>\n Retry\n </Button>\n <Button size=\"xs\" variant=\"subtle\" onClick={() => setShowErrorDetails(!showErrorDetails)}>\n {showErrorDetails ? 'Hide' : 'Show'} Details\n </Button>\n </Group>\n </Stack>\n </Alert>\n ) : (\n <Stack gap=\"md\" flex={1}>\n {renderListComponent()}\n <ListPagination\n page={page}\n setPage={(page) => {\n setPage(page);\n }}\n totalPages={totalPages}\n />\n </Stack>\n )}\n </Flex>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Text, Box, Flex } from '@mantine/core';\nimport { getMediaTypeIcon } from '../../../../core/lib/getMediaTypeIcon';\nimport { LinkedResourcesData, LinkedResourcesConfig } from './types';\nimport ListItemContainer from '../ListItemContainer';\nimport ListItemCheckbox from '../ListItemCheckbox';\n\ninterface LinkedResourcesListProps {\n items: LinkedResourcesData['items'];\n mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n config?: Partial<LinkedResourcesConfig>;\n}\n\nexport const LinkedResourcesList: React.FC<LinkedResourcesListProps> = ({ items, mods, 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 return (\n <ListItemContainer key={item.id || index}>\n <Flex align=\"center\" gap=\"sm\">\n <Box\n style={{\n width: 32,\n height: 32,\n borderRadius: 6,\n backgroundColor: 'var(--mantine-color-gray-1)',\n border: '1px solid var(--mantine-color-gray-3)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {getMediaTypeIcon(item.mediaType, { size: 16 })}\n </Box>\n <Stack gap={0}>\n <Text size=\"sm\">{title}</Text>\n {item.type && (\n <Text size=\"xs\" c=\"dimmed\">\n {item.type}\n </Text>\n )}\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">{item.encrypted === 'true' ? 'Private' : 'Public'}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {item.encrypted === 'true' ? 'Ask for access' : 'Accessible'}\n </Text>\n </Stack>\n {mods && (\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 { IconArchive, IconDeviceAudioTape, IconFileTypeXml, IconImageInPicture, IconPdf, IconFile, IconJson, IconVideo } from '@tabler/icons-react';\nimport React from 'react';\n\ninterface IconProps {\n size?: number;\n className?: string;\n color?: 'primary' | 'secondary' | 'accent';\n}\n\n/**\n * Returns the appropriate icon component based on media type\n * @param mediaType - The MIME type or media type string\n * @param props - Icon props (size, className, color)\n * @returns React component for the appropriate icon\n */\nexport function getMediaTypeIcon(mediaType: string, props: IconProps = {}) {\n const normalizedType = mediaType?.toLowerCase() || '';\n\n // Image types\n if (normalizedType.startsWith('image/')) {\n return <IconImageInPicture {...props} />;\n }\n\n // Video types\n if (normalizedType.startsWith('video/')) {\n return <IconVideo {...props} />;\n }\n\n // Audio types\n if (normalizedType.startsWith('audio/')) {\n return <IconDeviceAudioTape {...props} />;\n }\n\n // PDF\n if (normalizedType.includes('pdf') || normalizedType === 'application/pdf') {\n return <IconPdf {...props} />;\n }\n\n // JSON\n if (normalizedType.includes('json') || normalizedType === 'application/json' || normalizedType === 'text/json') {\n return <IconJson {...props} />;\n }\n\n // XML\n if (\n normalizedType.includes('xml') ||\n normalizedType === 'application/xml' ||\n normalizedType === 'text/xml' ||\n normalizedType === 'application/rss+xml' ||\n normalizedType === 'application/atom+xml'\n ) {\n return <IconFileTypeXml {...props} />;\n }\n\n // Archive types\n if (\n normalizedType.includes('zip') ||\n normalizedType.includes('rar') ||\n normalizedType.includes('tar') ||\n normalizedType.includes('gzip') ||\n normalizedType.includes('7z') ||\n normalizedType === 'application/x-compressed' ||\n normalizedType === 'application/x-zip-compressed' ||\n normalizedType === 'multipart/x-zip'\n ) {\n return <IconArchive {...props} />;\n }\n\n // Text documents\n if (\n normalizedType.startsWith('text/') ||\n normalizedType.includes('document') ||\n normalizedType.includes('word') ||\n normalizedType.includes('excel') ||\n normalizedType.includes('powerpoint') ||\n normalizedType.includes('spreadsheet') ||\n normalizedType.includes('presentation')\n ) {\n return <IconFile {...props} />;\n }\n\n // Default fallback\n return <IconVideo {...props} />;\n}\n\n/**\n * Get a list of all supported media type categories\n * @returns Array of supported media type categories\n */\nexport function getSupportedMediaTypes(): string[] {\n return ['image', 'video', 'audio', 'pdf', 'json', 'xml', 'archive', 'document', 'default'];\n}\n","import { Flex } from '@mantine/core';\nimport React, { PropsWithChildren } from 'react';\n\nexport default function ListItemContainer({ children }: PropsWithChildren) {\n return (\n <Flex styles={{ root: { borderRadius: 16, border: `1px solid rgba(255, 255, 255, 0.06)` } }} p={20} bg=\"rgba(255, 255, 255, 0.02)\" justify=\"space-between\">\n {children}\n </Flex>\n );\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 mods?: 'single' | 'multi' | null;\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, mods, 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 <ListItemContainer key={asset.did}>\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 {asset.totalCarbon !== undefined && (\n <Text size=\"sm\" c=\"dimmed\">\n {formatNumber(asset.totalCarbon)} CARBON\n </Text>\n )}\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.available ? 'Available' : 'Unavailable'}\n </Text>\n </Stack>\n {mods && <ListItemCheckbox ariaLabel={`Select asset ${asset.did}`} checked={isItemChecked?.(asset.did)} onCheck={(checked) => onItemCheck?.(asset.did, checked)} />}\n </Flex>\n </ListItemContainer>\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 mods?: 'single' | 'multi' | null;\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.length <= length * 2) return hash;\n return `${hash.slice(0, length)}...${hash.slice(-length)}`;\n};\n\nexport const TransactionsList: React.FC<TransactionsListProps> = ({ items, mods, 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, index) => (\n <ListItemContainer key={transaction.transactionHash || index}>\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 {mods && (\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 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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const CollectionsList: React.FC<CollectionsListProps> = ({ items, mods, 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((collection) => (\n <ListItemContainer key={collection.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={collection.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{collection.name}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {collection.brand}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">{collection.totalAssets} Assets</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {collection.currency}\n {collection.price}\n </Text>\n </Stack>\n {mods && (\n <ListItemCheckbox\n ariaLabel={`Select collection ${collection.did}`}\n checked={isItemChecked?.(collection.did)}\n onCheck={(checked) => onItemCheck?.(collection.did, checked)}\n />\n )}\n </Flex>\n </ListItemContainer>\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, 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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const InvestmentsList: React.FC<InvestmentsListProps> = ({ items, mods, 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((investment) => (\n <ListItemContainer key={investment.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={investment.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{investment.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {investment.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\">{investment.currency + formatNumber(investment.currentAmount)}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n / {investment.currency + formatNumber(investment.maxAmount)}\n </Text>\n </Flex>\n <Text size=\"xs\" c=\"dimmed\">\n <Progress color=\"rgb(0, 255, 157)\" radius=\"xl\" size=\"lg\" value={(investment.currentAmount * 100) / investment.maxAmount} />\n </Text>\n </Stack>\n {mods && (\n <ListItemCheckbox\n ariaLabel={`Select investment ${investment.did}`}\n checked={isItemChecked?.(investment.did)}\n onCheck={(checked) => onItemCheck?.(investment.did, checked)}\n />\n )}\n </Flex>\n </ListItemContainer>\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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const OraclesList: React.FC<OraclesListProps> = ({ items, mods, 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((oracle) => (\n <ListItemContainer key={oracle.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={oracle.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{oracle.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {oracle.brand || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">{oracle.currency || '-'}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {oracle.minPoints} - {oracle.maxPoints} pts\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n {oracle.flowsAmount} Flows\n </Text>\n </Stack>\n {mods && <ListItemCheckbox ariaLabel={`Select oracle ${oracle.did}`} checked={isItemChecked?.(oracle.did)} onCheck={(checked) => onItemCheck?.(oracle.did, checked)} />}\n </Flex>\n </ListItemContainer>\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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const PodsList: React.FC<PodsListProps> = ({ items, mods, 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((pod) => (\n <ListItemContainer key={pod.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={pod.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{pod.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {pod.startDate} → {pod.endDate}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">{pod.members} Members</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {pod.totalProposals} Proposals\n </Text>\n </Stack>\n {mods && <ListItemCheckbox ariaLabel={`Select pod ${pod.did}`} checked={isItemChecked?.(pod.did)} onCheck={(checked) => onItemCheck?.(pod.did, checked)} />}\n </Flex>\n </ListItemContainer>\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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const ProposalsList: React.FC<ProposalsListProps> = ({ items, mods, 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((proposal) => (\n <ListItemContainer key={proposal.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={proposal.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{proposal.name || '-'}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {proposal.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 {proposal.status}\n </Badge>\n <Text size=\"sm\" c=\"dimmed\">\n {proposal.isVotedOn ? 'Voted' : 'Not voted'}\n </Text>\n </Stack>\n {mods && (\n <ListItemCheckbox ariaLabel={`Select proposal ${proposal.did}`} checked={isItemChecked?.(proposal.did)} onCheck={(checked) => onItemCheck?.(proposal.did, checked)} />\n )}\n </Flex>\n </ListItemContainer>\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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const RequestsList: React.FC<RequestsListProps> = ({ items, mods, 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((request) => (\n <ListItemContainer key={request.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={request.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{request.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {request.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 {request.currency || ''}\n {request.budget ?? '-'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n {request.totalApplications ?? 0} Applications\n </Text>\n </Stack>\n {mods && <ListItemCheckbox ariaLabel={`Select request ${request.did}`} checked={isItemChecked?.(request.did)} onCheck={(checked) => onItemCheck?.(request.did, checked)} />}\n </Flex>\n </ListItemContainer>\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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const MembersList: React.FC<MembersListProps> = ({ items, mods, 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((member) => (\n <ListItemContainer key={member.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={member.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{member.username || '-'}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {member.address || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n <Stack ta=\"right\" gap={0}>\n <Text size=\"sm\">{member.percentage}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {member.role}\n </Text>\n </Stack>\n {mods && <ListItemCheckbox ariaLabel={`Select member ${member.did}`} checked={isItemChecked?.(member.did)} onCheck={(checked) => onItemCheck?.(member.did, checked)} />}\n </Flex>\n </ListItemContainer>\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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const ValidatorsList: React.FC<ValidatorsListProps> = ({ items, mods, 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((v) => (\n <ListItemContainer key={v.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={v.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{v.name || '-'}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {v.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(v), 2)} {v.currency}\n </Text>\n <Text size=\"sm\" c=\"dimmed\">\n {v.commission}% fee\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n {v.isActive ? 'Active' : 'Inactive'} • {v.isStaked ? 'Staked' : 'Not staked'} • {v.isBonding ? 'Bonding' : 'Not bonding'}\n </Text>\n </Stack>\n {mods && <ListItemCheckbox ariaLabel={`Select validator ${v.did}`} checked={isItemChecked?.(v.did)} onCheck={(checked) => onItemCheck?.(v.did, checked)} />}\n </Flex>\n </ListItemContainer>\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","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 from 'react';\nimport { Menu, Text } from '@mantine/core';\nimport { IconArrowDown, IconArrowUp, IconAdjustments, IconCheckbox, IconAdjustmentsHorizontal } 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 }) => void;\n onSelectActionClick: (mode: 'single' | 'multi' | null) => void;\n selectionMode: string | null;\n}\n\nexport const ListActionsMenu: React.FC<ListActionsMenuProps> = ({ options, selectionMode, onSelectActionClick, value, onChange }) => {\n const renderItem = (opt: SortOption, direction: SortDirection) => {\n const isActive = value?.key === opt.key && value?.direction === direction;\n const Icon = direction === 'asc' ? IconArrowUp : IconArrowDown;\n\n return (\n <Menu.Item\n key={`${opt.key}-${direction}`}\n leftSection={<Icon size={16} />}\n onClick={() => {\n onChange({ key: opt.key, direction });\n }}\n data-active={isActive}\n >\n {opt.label}\n </Menu.Item>\n );\n };\n\n return (\n <Menu shadow=\"md\" width={220}>\n <Menu.Target>\n <Text style={{ cursor: 'pointer' }}>\n <IconAdjustmentsHorizontal size={20} />\n </Text>\n </Menu.Target>\n <Menu.Dropdown>\n <Menu.Label>\n <Text c=\"dimmed\">Order By</Text>\n </Menu.Label>\n {options.map((opt) => (\n <React.Fragment key={opt.key}>\n {renderItem(opt, 'desc')}\n {renderItem(opt, 'asc')}\n </React.Fragment>\n ))}\n <Menu.Divider />\n <Menu.Item leftSection={<IconAdjustments size={16} />}>Smart Filter</Menu.Item>\n <Menu.Divider />\n <Menu.Item onClick={() => onSelectActionClick(selectionMode === 'single' ? null : 'single')} leftSection={<IconCheckbox size={16} />}>\n Single Select\n </Menu.Item>\n <Menu.Item onClick={() => onSelectActionClick(selectionMode === 'multi' ? null : 'multi')} leftSection={<IconCheckbox size={16} />}>\n Multi Select\n </Menu.Item>\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 { MembersData } from '@/mantine/blocks/list/members/types';\nimport { ValidatorsData } from '@/mantine/blocks/list/validators/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 | MembersData\n | ValidatorsData,\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 { Asset, Collection, Investment, LinkedResource, Oracle, POD, Proposal, Transaction, Request, Member, Validator } from '@/mantine/context/BlocknoteContext';\n\nexport default function filterListItems(\n items: (LinkedResource | Asset | Transaction | Collection | Investment | Oracle | POD | Proposal | Request | Member | 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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const DaoMembersList: React.FC<DaoMembersLisProps> = ({ items, mods, 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((member) => (\n <ListItemContainer key={member.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={member.icon} />\n <Stack gap={0}>\n <Text size=\"sm\" fw={500}>\n {member.username || 'Unknown User'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" lineClamp={1}>\n {member.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 {member.percentage || '0%'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" tt=\"capitalize\">\n {member.role || 'member'}\n </Text>\n </Stack>\n {mods && (\n <ListItemCheckbox\n ariaLabel={`Select member ${member.username || member.did}`}\n checked={isItemChecked?.(member.did) || false}\n onCheck={(checked) => onItemCheck?.(member.did, checked)}\n />\n )}\n </Flex>\n </ListItemContainer>\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 { 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}\n\nexport const ListSelectionPanel = ({ selectedIds, listType }: ListSelectionPanelProps) => {\n const { closePanel } = usePanelStore();\n const handlers = useBlocknoteHandlers();\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 details = await (handler as any)(selectedItemId);\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 console.error('Failed to fetch item details:', 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]);\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={closePanel}\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={closePanel}\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={closePanel}\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 <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';\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}\n\nexport const SelectionPromptItem: React.FC<SelectionPromptProps> = ({ prompt }) => {\n return (\n <>\n <Flex gap={10}>\n <IconArrowRight size={24} color=\"white\" />\n <Text>{prompt.text}</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 if (!prompts || prompts.length === 0) return null;\n\n return (\n <Stack gap=\"xs\">\n {prompts.map((prompt, index) => (\n <SelectionPromptItem 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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const ProjectsList: React.FC<ProjectListProps> = ({ items, mods, 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((project) => (\n <ListItemContainer key={project.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={project.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{project.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {shortStr(project.description, 50, 0) || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n {mods && <ListItemCheckbox ariaLabel={`Select request ${project.did}`} checked={isItemChecked?.(project.did)} onCheck={(checked) => onItemCheck?.(project.did, checked)} />}\n </Flex>\n </ListItemContainer>\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 mods?: 'single' | 'multi' | null;\n isItemChecked?: (id: string) => boolean;\n onItemCheck?: (id: string, checked: boolean) => void;\n}\n\nexport const DaosList: React.FC<DaoListProps> = ({ items, mods, 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((dao) => (\n <ListItemContainer key={dao.did}>\n <Flex align=\"center\" gap=\"sm\">\n <Image radius={16} w={32} h={32} src={dao.icon} />\n <Stack gap={0}>\n <Text size=\"sm\">{dao.name || '-'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {shortStr(dao.description, 50, 0) || '-'}\n </Text>\n </Stack>\n </Flex>\n <Flex align=\"center\" gap=\"md\">\n {mods && <ListItemCheckbox ariaLabel={`Select request ${dao.did}`} checked={isItemChecked?.(dao.did)} onCheck={(checked) => onItemCheck?.(dao.did, checked)} />}\n </Flex>\n </ListItemContainer>\n ));\n\n return (\n <Box flex={1}>\n <Stack>{rows}</Stack>\n </Box>\n );\n};\n","import React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\n\nexport interface OverviewBlockSettings {\n did: string;\n}\n\nexport interface OverviewBlockProps {\n block: any;\n editor: any;\n}\n\nconst OverviewBlockContent: React.FC<OverviewBlockProps> = ({ block, editor }) => {\n return (\n <div\n style={{\n width: '100%',\n borderRadius: '6px',\n padding: '16px',\n backgroundColor: '#FFFFFF',\n fontFamily: 'Inter, Helvetica, Arial, sans-serif',\n border: '1px solid #e5e7eb',\n }}\n >\n <div style={{ marginBottom: '12px' }}>\n <input\n type=\"text\"\n value={block.props.did || ''}\n placeholder=\"Enter DID\"\n style={{\n color: '#2F2F2F',\n fontFamily: 'Inter, Helvetica, Arial, sans-serif',\n fontSize: '14px',\n fontWeight: 600,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n width: '100%',\n }}\n onChange={(e) => {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n did: e.target.value,\n },\n });\n }}\n />\n </div>\n\n <div style={{ minHeight: '40px', color: '#6b7280' }}>{block.props.did ? <p>Loading overview for DID: {block.props.did}</p> : <p>Enter a DID to load overview data</p>}</div>\n </div>\n );\n};\n\nexport const OverviewBlock = createReactBlockSpec(\n {\n type: 'overview' as const,\n propSchema: {\n did: {\n default: '',\n },\n },\n content: 'none',\n },\n {\n render: (props) => <OverviewBlockContent {...props} />,\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((error) => {\n console.error('Failed to fetch proposal:', error);\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 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 console.log('[ProposalBlock] Rendering with docType:', docType);\n\n // Template mode - always show\n if (docType === 'template') {\n console.log('[ProposalBlock] Rendering ProposalTemplateView (docType is template)');\n return <ProposalTemplateView editor={editor} block={block} />;\n }\n\n // Flow mode\n console.log('[ProposalBlock] Rendering ProposalFlowView (docType is flow)');\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 { Card, Group, Stack, Text, ActionIcon } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\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 <Card withBorder padding=\"md\" radius=\"md\" style={{ width: '100%', cursor: 'pointer' }} onClick={open}>\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n <ActionIcon variant=\"light\" color=\"blue\" size=\"lg\" radius=\"xl\" style={{ flexShrink: 0 }}>\n {getIcon(block.props.icon, 18, 1.5, 'file-text')}\n </ActionIcon>\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 </Card>\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 { GeneralTab } from './GeneralTab';\nimport { ActionsTab } from './ActionsTab';\nimport { VoteTab } from './VoteTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\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}>Proposal Settings</Title>\n <CloseButton onClick={closePanel} />\n </div>\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: (\n <ActionsTab actions={block.props.actions || '[]'} onActionsChange={(actions) => updateProp('actions', JSON.stringify(actions))} editor={editor} block={block} />\n ),\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 </Paper>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Stack, Text, TextInput, Textarea, Select, Loader } from '@mantine/core';\nimport { useBlocknoteHandlers } from '@/mantine/context';\nimport type { DAOGroup } from '@/mantine/context/BlocknoteContext';\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\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 // Fetch groups on mount\n useEffect(() => {\n const fetchGroups = async () => {\n if (!handlers?.getDAOGroups) {\n console.warn('getDAOGroups handler not available');\n return;\n }\n\n setLoadingGroups(true);\n try {\n const daoGroups = await handlers.getDAOGroups();\n setGroups(daoGroups);\n } catch (error) {\n console.error('Failed to fetch DAO groups:', error);\n } finally {\n setLoadingGroups(false);\n }\n };\n\n fetchGroups();\n }, [handlers]);\n\n return (\n <Stack gap=\"lg\">\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Title\n </Text>\n <TextInput\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 </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Description\n </Text>\n <Textarea\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 </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Group\n </Text>\n <Select\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 </Stack>\n </Stack>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { Button, 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 editor: any;\n block: any;\n}\n\nexport const ActionsTab: React.FC<ActionsTabProps> = ({ actions, onActionsChange, editor, block }) => {\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 console.error('Failed to parse actions:', 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 handleAddAction = useCallback(() => {\n setEditingIndex(null);\n setIsEditorVisible(true);\n }, []);\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: '#4dabf7' }}\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 console.error('Validation errors:', validation.errors);\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 size=\"lg\" 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: '#4dabf7',\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 ? '#4dabf7' : '#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: '#4dabf7' }}>\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 ? '#4dabf7' : '#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: '#4dabf7', 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: '#4dabf7',\n '&:hover': {\n backgroundColor: '#339af0',\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 { TextInput, Stack } from '@mantine/core';\nimport { SpendData } from '../../../context/types';\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 <TextInput\n label=\"Recipient Address\"\n placeholder=\"ixo1...\"\n value={data.to}\n onChange={(e) => onChange({ ...data, to: e.currentTarget.value })}\n required\n styles={{\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n }}\n />\n <TextInput\n label=\"Denomination\"\n placeholder=\"uixo\"\n value={data.denom}\n onChange={(e) => onChange({ ...data, denom: e.currentTarget.value })}\n required\n styles={{\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n }}\n />\n <TextInput\n label=\"Amount\"\n placeholder=\"1000000\"\n value={data.amount}\n onChange={(e) => onChange({ ...data, amount: e.currentTarget.value })}\n required\n styles={{\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n }}\n />\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, TextInput, NumberInput, Button, Group, Text, Card, Badge, ActionIcon, Divider, ScrollArea } from '@mantine/core';\nimport { ManageMembersData } from '../../../context/types';\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 const inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\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 <TextInput placeholder=\"Member address\" value={newMember.addr} onChange={(e) => setNewMember({ ...newMember, addr: e.currentTarget.value })} styles={inputStyles} />\n <NumberInput\n placeholder=\"Weight\"\n value={newMember.weight}\n onChange={(value) => setNewMember({ ...newMember, weight: Number(value) || 1 })}\n min={1}\n styles={inputStyles}\n />\n <Button\n size=\"sm\"\n onClick={handleAddMember}\n style={{\n backgroundColor: '#4dabf7',\n '&:hover': {\n backgroundColor: '#339af0',\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 <TextInput placeholder=\"Address to remove\" value={newRemoveAddress} onChange={(e) => setNewRemoveAddress(e.currentTarget.value)} styles={inputStyles} />\n <Button\n size=\"sm\"\n onClick={handleAddRemoveAddress}\n style={{\n backgroundColor: '#4dabf7',\n '&:hover': {\n backgroundColor: '#339af0',\n },\n }}\n >\n ➕ Add\n </Button>\n </Group>\n </Stack>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput, Select, NumberInput } from '@mantine/core';\nimport { StakeData, StakeType } from '../../../context/types';\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\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nconst selectStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n dropdown: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n },\n option: {\n color: '#f1f3f5',\n '&[data-selected]': {\n backgroundColor: '#4dabf7',\n },\n '&:hover': {\n backgroundColor: '#333',\n },\n },\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 <Select\n label=\"Stake Type\"\n value={data.stakeType}\n onChange={(value) => onChange({ ...data, stakeType: value as StakeType })}\n data={stakeTypeOptions}\n required\n styles={selectStyles}\n />\n\n <TextInput\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 styles={inputStyles}\n />\n\n {isRedelegate && (\n <TextInput\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 styles={inputStyles}\n />\n )}\n\n {needsAmount && (\n <>\n <NumberInput\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 styles={inputStyles}\n />\n\n <Select\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 styles={selectStyles}\n />\n </>\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput } from '@mantine/core';\nimport { JoinData } from '../../../context/types';\n\ninterface JoinActionFormProps {\n data: JoinData;\n onChange: (data: JoinData) => void;\n}\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nexport const JoinActionForm: React.FC<JoinActionFormProps> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <TextInput label=\"ID\" placeholder=\"did:ixo:entity:abc123...\" value={data.id} onChange={(e) => onChange({ ...data, id: e.target.value })} required styles={inputStyles} />\n <TextInput\n label=\"Core Address\"\n placeholder=\"ixo1...\"\n value={data.coreAddress}\n onChange={(e) => onChange({ ...data, coreAddress: e.target.value })}\n required\n styles={inputStyles}\n />\n <TextInput label=\"Address\" placeholder=\"ixo1...\" value={data.address} onChange={(e) => onChange({ ...data, address: e.target.value })} required styles={inputStyles} />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput, NumberInput } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { MintData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nexport const MintActionForm: React.FC<ActionFormProps<MintData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <TextInput label=\"Recipient Address\" placeholder=\"ixo1...\" value={data.to} onChange={(e) => onChange({ ...data, to: e.currentTarget.value })} required styles={inputStyles} />\n\n <NumberInput\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 styles={inputStyles}\n />\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, TextInput, Textarea, Button, Group, Text, Card } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ExecuteData, Coin } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput\n label=\"Contract Address\"\n placeholder=\"ixo1...\"\n value={data.address}\n onChange={(e) => onChange({ ...data, address: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <Textarea\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 styles={inputStyles}\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 <TextInput placeholder=\"Amount\" value={newFund.amount} onChange={(e) => setNewFund({ ...newFund, amount: e.currentTarget.value })} styles={inputStyles} />\n <TextInput placeholder=\"Denom (e.g., uixo)\" value={newFund.denom} onChange={(e) => setNewFund({ ...newFund, denom: e.currentTarget.value })} styles={inputStyles} />\n <Button\n size=\"sm\"\n onClick={handleAddFund}\n style={{\n backgroundColor: '#4dabf7',\n '&:hover': { backgroundColor: '#339af0' },\n }}\n >\n Add Fund\n </Button>\n </Group>\n </Stack>\n </Stack>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Stack, Textarea, Alert, Text, Badge } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { CustomData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n fontFamily: 'monospace',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <Textarea\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 styles={inputStyles}\n />\n </div>\n </Stack>\n );\n};\n\n// Import Group from mantine\nimport { Group } from '@mantine/core';\n","import React from 'react';\nimport { Stack, Select, TextInput, Textarea } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { AuthzExecData, AuthzExecActionTypes } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <Select\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 styles={inputStyles}\n />\n\n {data.authzExecActionType === AuthzExecActionTypes.Delegate && (\n <Textarea\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 styles={inputStyles}\n />\n )}\n\n {data.authzExecActionType === AuthzExecActionTypes.Undelegate && (\n <Textarea\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 styles={inputStyles}\n />\n )}\n\n {data.authzExecActionType === AuthzExecActionTypes.Redelegate && (\n <Textarea\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 styles={inputStyles}\n />\n )}\n\n {data.authzExecActionType === AuthzExecActionTypes.ClaimRewards && (\n <Textarea\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 styles={inputStyles}\n />\n )}\n\n {data.authzExecActionType === AuthzExecActionTypes.Custom && (\n <TextInput\n label=\"Custom Message\"\n placeholder=\"Enter custom message\"\n value={data.custom}\n onChange={(e) => onChange({ ...data, custom: e.currentTarget.value })}\n styles={inputStyles}\n />\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { AuthzData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nexport const AuthzGrantActionForm: React.FC<ActionFormProps<AuthzData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <TextInput\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 styles={inputStyles}\n />\n\n <TextInput\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 styles={inputStyles}\n />\n\n <TextInput\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 styles={inputStyles}\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { BurnNftData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nexport const BurnNftActionForm: React.FC<ActionFormProps<BurnNftData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <TextInput\n label=\"Collection Address\"\n placeholder=\"ixo1...\"\n value={data.collection}\n onChange={(e) => onChange({ ...data, collection: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <TextInput label=\"Token ID\" placeholder=\"1\" value={data.tokenId} onChange={(e) => onChange({ ...data, tokenId: e.currentTarget.value })} required styles={inputStyles} />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput, Checkbox, Textarea } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { TransferNftData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nexport const TransferNftActionForm: React.FC<ActionFormProps<TransferNftData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <TextInput\n label=\"Collection Address\"\n placeholder=\"ixo1...\"\n value={data.collection}\n onChange={(e) => onChange({ ...data, collection: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <TextInput label=\"Token ID\" placeholder=\"1\" value={data.tokenId} onChange={(e) => onChange({ ...data, tokenId: e.currentTarget.value })} required styles={inputStyles} />\n\n <TextInput\n label=\"Recipient Address\"\n placeholder=\"ixo1...\"\n value={data.recipient}\n onChange={(e) => onChange({ ...data, recipient: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\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 <Textarea\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 styles={inputStyles}\n />\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput, Radio, Group } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ManageCw721Data } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput\n label=\"NFT Contract Address\"\n placeholder=\"ixo1...\"\n value={data.address}\n onChange={(e) => onChange({ ...data, address: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, TextInput, Textarea, NumberInput, Button, Group, Text, Card } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { InstantiateData, Coin } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput\n label=\"Admin Address\"\n placeholder=\"ixo1...\"\n value={data.admin}\n onChange={(e) => onChange({ ...data, admin: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <NumberInput\n label=\"Code ID\"\n placeholder=\"123\"\n value={data.codeId}\n onChange={(value) => onChange({ ...data, codeId: Number(value) || 0 })}\n min={1}\n required\n styles={inputStyles}\n />\n\n <TextInput label=\"Label\" placeholder=\"My Contract\" value={data.label} onChange={(e) => onChange({ ...data, label: e.currentTarget.value })} required styles={inputStyles} />\n\n <Textarea\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 styles={inputStyles}\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 <TextInput placeholder=\"Amount\" value={newFund.amount} onChange={(e) => setNewFund({ ...newFund, amount: e.currentTarget.value })} styles={inputStyles} />\n <TextInput placeholder=\"Denom (e.g., uixo)\" value={newFund.denom} onChange={(e) => setNewFund({ ...newFund, denom: e.currentTarget.value })} styles={inputStyles} />\n <Button\n size=\"sm\"\n onClick={handleAddFund}\n style={{\n backgroundColor: '#4dabf7',\n '&:hover': { backgroundColor: '#339af0' },\n }}\n >\n Add Fund\n </Button>\n </Group>\n </Stack>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput, Textarea, NumberInput } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { MigrateData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput\n label=\"Contract Address\"\n placeholder=\"ixo1...\"\n value={data.contract}\n onChange={(e) => onChange({ ...data, contract: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <NumberInput\n label=\"New Code ID\"\n placeholder=\"456\"\n value={data.codeId}\n onChange={(value) => onChange({ ...data, codeId: Number(value) || 0 })}\n min={1}\n required\n styles={inputStyles}\n />\n\n <Textarea\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 styles={inputStyles}\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { UpdateAdminData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nexport const UpdateAdminActionForm: React.FC<ActionFormProps<UpdateAdminData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <TextInput\n label=\"Contract Address\"\n placeholder=\"ixo1...\"\n value={data.contract}\n onChange={(e) => onChange({ ...data, contract: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <TextInput\n label=\"New Admin Address\"\n placeholder=\"ixo1...\"\n value={data.newAdmin}\n onChange={(e) => onChange({ ...data, newAdmin: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput, Radio, Group } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ManageCw20Data } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput\n label=\"Token Contract Address\"\n placeholder=\"ixo1...\"\n value={data.address}\n onChange={(e) => onChange({ ...data, address: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, TextInput, Button, Group, Text, Card, Textarea } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ManageSubDaosData, SubDao } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput placeholder=\"SubDAO Address\" value={newSubDao.addr} onChange={(e) => setNewSubDao({ ...newSubDao, addr: e.currentTarget.value })} styles={inputStyles} />\n <Textarea\n placeholder=\"Charter (optional)\"\n value={newSubDao.charter || ''}\n onChange={(e) => setNewSubDao({ ...newSubDao, charter: e.currentTarget.value })}\n minRows={2}\n styles={inputStyles}\n />\n <Button\n size=\"sm\"\n onClick={handleAddSubDao}\n style={{\n backgroundColor: '#4dabf7',\n '&:hover': { backgroundColor: '#339af0' },\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 <TextInput placeholder=\"SubDAO Address to Remove\" value={newRemoveAddress} onChange={(e) => setNewRemoveAddress(e.currentTarget.value)} styles={inputStyles} />\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, TextInput, Textarea, Checkbox } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { UpdateInfoData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nexport const UpdateInfoActionForm: React.FC<ActionFormProps<UpdateInfoData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <TextInput label=\"DAO Name\" placeholder=\"My DAO\" value={data.name} onChange={(e) => onChange({ ...data, name: e.currentTarget.value })} required styles={inputStyles} />\n\n <Textarea\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 styles={inputStyles}\n />\n\n <TextInput\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 styles={inputStyles}\n />\n\n <TextInput\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 styles={inputStyles}\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, TextInput, Radio, Group, Textarea } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ManageStorageItemsData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput label=\"Storage Key\" placeholder=\"config_key\" value={data.key} onChange={(e) => onChange({ ...data, key: e.currentTarget.value })} required styles={inputStyles} />\n\n {data.setting && (\n <Textarea\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 styles={inputStyles}\n />\n )}\n </Stack>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, TextInput, Button, Group, Text, Card, Textarea } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { DaoAdminExecData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput\n label=\"Core Address\"\n placeholder=\"ixo1...\"\n value={data.coreAddress}\n onChange={(e) => onChange({ ...data, coreAddress: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\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 <Textarea\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 styles={inputStyles}\n />\n <Button\n size=\"sm\"\n onClick={handleAddMessage}\n style={{\n backgroundColor: '#4dabf7',\n '&:hover': { backgroundColor: '#339af0' },\n }}\n >\n Add Message\n </Button>\n </Stack>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { AcceptToMarketplaceData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nexport const AcceptToMarketplaceActionForm: React.FC<ActionFormProps<AcceptToMarketplaceData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <TextInput label=\"DID\" placeholder=\"did:ixo:...\" value={data.did} onChange={(e) => onChange({ ...data, did: e.currentTarget.value })} required styles={inputStyles} />\n\n <TextInput\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 styles={inputStyles}\n />\n\n <TextInput\n label=\"Relayer Node Address\"\n placeholder=\"ixo1...\"\n value={data.relayerNodeAddress}\n onChange={(e) => onChange({ ...data, relayerNodeAddress: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Textarea, Alert, Text } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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: '#4dabf7' }}>\n <Text size=\"sm\" style={{ color: '#4dabf7' }}>\n This is a complex entity creation action. Please provide the complete entity data as JSON.\n </Text>\n </Alert>\n\n <Textarea\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 styles={inputStyles}\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Checkbox, Select, NumberInput, Group } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { UpdateProposalConfigData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <Select\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 styles={inputStyles}\n />\n\n {data.thresholdType === '%' && (\n <NumberInput\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 styles={inputStyles}\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 <Select\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 styles={inputStyles}\n />\n\n {data.quorumType === '%' && (\n <NumberInput\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 styles={inputStyles}\n />\n )}\n </>\n )}\n\n <Group grow>\n <NumberInput\n label=\"Proposal Duration\"\n placeholder=\"7\"\n value={data.proposalDuration}\n onChange={(value) => onChange({ ...data, proposalDuration: Number(value) || 1 })}\n min={1}\n styles={inputStyles}\n />\n <Select\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 styles={inputStyles}\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, TextInput, Select, Textarea } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { UpdatePreProposeConfigData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput\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 styles={inputStyles}\n />\n\n <Select\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 styles={inputStyles}\n />\n\n <TextInput\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 styles={inputStyles}\n />\n\n <TextInput\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 styles={inputStyles}\n />\n\n {data.depositInfo.type !== 'native' && (\n <Textarea\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 styles={inputStyles}\n />\n )}\n </>\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput, Select } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { GovernanceVoteData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput\n label=\"Proposal ID\"\n placeholder=\"123\"\n value={data.proposalId}\n onChange={(e) => onChange({ ...data, proposalId: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <Select\n label=\"Vote Option\"\n value={data.vote?.toString() || '1'}\n onChange={(value) => onChange({ ...data, vote: parseInt(value || '1') })}\n data={voteOptions}\n required\n styles={inputStyles}\n />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput, Checkbox } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { WithdrawTokenSwapData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput\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 styles={inputStyles}\n />\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput, Checkbox, Textarea } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { PerformTokenSwapData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <TextInput\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 styles={inputStyles}\n />\n\n <Textarea\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 styles={inputStyles}\n />\n\n <Textarea\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 styles={inputStyles}\n />\n </>\n )}\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { StakeToGroupData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nexport const StakeToGroupActionForm: React.FC<ActionFormProps<StakeToGroupData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <TextInput\n label=\"Token Contract Address\"\n placeholder=\"ixo1...\"\n value={data.tokenContract}\n onChange={(e) => onChange({ ...data, tokenContract: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <TextInput\n label=\"Staking Contract Address\"\n placeholder=\"ixo1...\"\n value={data.stakingContract}\n onChange={(e) => onChange({ ...data, stakingContract: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <TextInput label=\"Amount\" placeholder=\"1000\" value={data.amount} onChange={(e) => onChange({ ...data, amount: e.currentTarget.value })} required styles={inputStyles} />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, TextInput } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { SendGroupTokenData } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\n\nexport const SendGroupTokenActionForm: React.FC<ActionFormProps<SendGroupTokenData>> = ({ data, onChange }) => {\n return (\n <Stack gap=\"md\">\n <TextInput\n label=\"Contract Address\"\n placeholder=\"ixo1...\"\n value={data.contract}\n onChange={(e) => onChange({ ...data, contract: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <TextInput\n label=\"Recipient Address\"\n placeholder=\"ixo1...\"\n value={data.toAddress}\n onChange={(e) => onChange({ ...data, toAddress: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\n\n <TextInput label=\"Amount\" placeholder=\"1000\" value={data.amount} onChange={(e) => onChange({ ...data, amount: e.currentTarget.value })} required styles={inputStyles} />\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Select, Textarea } from '@mantine/core';\nimport { ActionFormProps } from '../../registry/types';\nimport { ValidatorActionsData, ValidatorActionType } from '../../../../context/types';\n\nconst inputStyles = {\n label: { color: '#adb5bd' },\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#4dabf7',\n },\n },\n};\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 <Select\n label=\"Validator Action Type\"\n value={data.validatorActionType}\n onChange={(value) => onChange({ ...data, validatorActionType: value as ValidatorActionType })}\n data={actionTypeOptions}\n required\n styles={inputStyles}\n />\n\n {data.validatorActionType === ValidatorActionType.CreateValidator && (\n <Textarea\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 styles={inputStyles}\n />\n )}\n\n {data.validatorActionType === ValidatorActionType.EditValidator && (\n <Textarea\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 styles={inputStyles}\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, TextInput } from '@mantine/core';\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 <TextInput label=\"Vote Button Title\" placeholder=\"Vote on this proposal\" value={voteTitle} onChange={(event) => onVoteTitleChange(event.currentTarget.value)} />\n\n <TextInput label=\"Vote Button Subtitle\" placeholder=\"Cast your vote\" value={voteSubtitle} onChange={(event) => onVoteSubtitleChange(event.currentTarget.value)} />\n\n <TextInput 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, ActionIcon } 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 <ActionIcon variant=\"light\" color=\"blue\" size=\"xl\" radius=\"xl\" style={{ flexShrink: 0 }}>\n {getIcon(icon, 24, 1.5, 'file-text')}\n </ActionIcon>\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 } from 'react';\nimport { Paper, CloseButton, Title, Stack, TextInput, Textarea, Button, Text, Card } 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';\n\nexport const FlowConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n const coreAddress = (block.props.coreAddress as string) || '';\n\n const [errors, setErrors] = useState<{ [key: string]: string }>({});\n const [isCreating, setIsCreating] = useState(false);\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, editor });\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 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 {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\n <TextInput\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 <Textarea\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} editor={editor} block={block} 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 <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}>Proposal Settings</Title>\n <CloseButton onClick={closePanel} />\n </div>\n <ReusablePanel extraTabs={extraTabs} context={{ editor, block }} />\n </Paper>\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 if (!isCancelled) {\n console.error('Failed to fetch proposal contract address:', error);\n }\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 console.error('Execute proposal: Missing required data');\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 console.error('Failed to execute proposal:', error);\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 editor: IxoBlockProps['editor'];\n}\n\nexport const useVoteBusinessLogic = ({ block, editor }: 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 if (!isCancelled) {\n console.error('[ProposalVote] Failed to fetch proposal contract address:', error);\n }\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 if (!isCancelled) {\n console.error('[ProposalVote] Failed to fetch user vote:', error);\n }\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 console.error('Failed to vote:', 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, Textarea, Tooltip } from '@mantine/core';\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 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 <Stack gap=\"xs\">\n <Text size=\"sm\" style={{ color: '#adb5bd' }}>\n Rationale (optional)\n </Text>\n <Textarea\n value={rationale}\n onChange={(e) => setRationale(e.target.value)}\n placeholder=\"Explain your vote...\"\n disabled={disabled}\n rows={3}\n style={{\n '& .mantine-Textarea-input': {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: disabled ? '#666' : '#f1f3f5',\n opacity: disabled ? 0.5 : 1,\n },\n }}\n />\n </Stack>\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 editor: any;\n block: any;\n isProposalCreated: boolean;\n}\n\nexport const ActionsTab: React.FC<ActionsTabProps> = ({ actions, onActionsChange, editor, block, 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 console.error('Failed to parse actions:', 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: '#4dabf7',\n '&:hover': {\n backgroundColor: '#339af0',\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 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 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 { Card, Group, Stack, Text, ActionIcon, Badge } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\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 <Card withBorder padding=\"md\" radius=\"md\" style={{ width: '100%', cursor: 'pointer', position: 'relative' }} 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 <ActionIcon variant=\"light\" color=\"violet\" size=\"lg\" radius=\"xl\" style={{ flexShrink: 0 }}>\n {getIcon(block.props.icon as any, 18, 1.5, 'square-check')}\n </ActionIcon>\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 </Card>\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 { GeneralTab } from './GeneralTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { HttpMethod, KeyValuePair } from '../ApiRequestBlock';\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 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}>API Request Settings</Title>\n <CloseButton onClick={closePanel} />\n </div>\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 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 />\n ),\n },\n ]}\n context={{ editor, block }}\n />\n </Paper>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Divider, Select, Stack, Text, TextInput, Textarea, Button, Group, ActionIcon, Paper } from '@mantine/core';\nimport { IconTrash, IconPlus } from '@tabler/icons-react';\nimport { HttpMethod, KeyValuePair } from '../ApiRequestBlock';\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}\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}) => {\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 <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Title\n </Text>\n <TextInput\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 </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Description\n </Text>\n <Textarea\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 </Stack>\n\n <Divider variant=\"dashed\" />\n\n {/* API Configuration Section */}\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n HTTP Method\n </Text>\n <Select\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 </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Endpoint URL\n </Text>\n <TextInput\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 </Stack>\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 <TextInput\n placeholder=\"Header key (e.g., Authorization)\"\n value={header.key}\n onChange={(event) => handleHeaderChange(index, 'key', event.currentTarget.value)}\n style={{ flex: 1 }}\n />\n <TextInput\n placeholder=\"Header value (e.g., Bearer token123)\"\n value={header.value}\n onChange={(event) => handleHeaderChange(index, 'value', event.currentTarget.value)}\n style={{ flex: 1 }}\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 <TextInput\n placeholder=\"Field key (e.g., name)\"\n value={field.key}\n onChange={(event) => handleBodyFieldChange(index, 'key', event.currentTarget.value)}\n style={{ flex: 1 }}\n />\n <TextInput\n placeholder=\"Field value (e.g., John Doe)\"\n value={field.value}\n onChange={(event) => handleBodyFieldChange(index, 'value', event.currentTarget.value)}\n style={{ flex: 1 }}\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 } from 'react';\nimport { Card, Group, Stack, Text, ActionIcon, Tooltip, Button, Badge, Collapse, Code, Loader, Alert } from '@mantine/core';\nimport { IconSend, IconChevronDown, IconChevronUp } from '@tabler/icons-react';\nimport { IxoBlockProps } from '@/core/types';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport { KeyValuePair } from '../ApiRequestBlock';\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\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 // Build headers object\n const headersObj: Record<string, string> = {};\n headers.forEach((h) => {\n if (h.key && h.value) {\n headersObj[h.key] = h.value;\n }\n });\n\n // Build body object (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 bodyObj[b.key] = b.value;\n }\n });\n }\n\n // Make the API request\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(endpoint, fetchOptions);\n const responseData = await apiResponse.json();\n\n // Update block with response\n editor.updateBlock(block, {\n props: {\n ...block.props,\n status: apiResponse.ok ? 'success' : 'error',\n response: JSON.stringify(\n {\n status: apiResponse.status,\n statusText: apiResponse.statusText,\n data: responseData,\n },\n null,\n 2\n ),\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 <Card withBorder padding=\"md\" radius=\"md\" style={{ width: '100%' }}>\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 <ActionIcon variant=\"light\" color=\"violet\" size=\"lg\" radius=\"xl\" style={{ flexShrink: 0 }}>\n {getIcon(block.props.icon as any, 18, 1.5, 'square-check')}\n </ActionIcon>\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 {/* 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 </Card>\n );\n};\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 console.error('Failed to parse listConfig:', 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 console.error('Failed to parse selectedIds:', 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}>\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, TextInput, Text, Button, Group, Switch, Select } from '@mantine/core';\nimport { EnumListTypes } from './types';\nimport { ConfigField } from '../list';\nimport { ENUM_LIST_CONFIG, getEnumListTypesConfigFields } from './registry';\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 <TextInput\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 <Select\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 <TextInput\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 { Card, Group, Stack, Text, ActionIcon, Badge } from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\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 <Card withBorder padding=\"md\" radius=\"md\" style={{ width: '100%', cursor: 'pointer', position: 'relative' }} 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 <ActionIcon variant=\"light\" color={getChannelColor(channel)} size=\"lg\" radius=\"xl\" style={{ flexShrink: 0 }}>\n {getIcon(block.props.icon as any, 18, 1.5, 'bell')}\n </ActionIcon>\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 </Card>\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 { GeneralTab } from './GeneralTab';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\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 <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}>Notification Settings</Title>\n <CloseButton onClick={closePanel} />\n </div>\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 />\n ),\n },\n ]}\n context={{ editor, block }}\n />\n </Paper>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Divider, Select, Stack, Text, TextInput, Textarea, Button, Group, ActionIcon, Paper } from '@mantine/core';\nimport { IconTrash, IconPlus } from '@tabler/icons-react';\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}\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}) => {\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 <Text size=\"sm\" fw={600}>\n Title\n </Text>\n <TextInput\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 <Text size=\"sm\" fw={600}>\n Description\n </Text>\n <Textarea\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 <Text size=\"sm\" fw={600}>\n Channel\n </Text>\n <Select\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 <Button size=\"xs\" leftSection={<IconPlus size={14} />} onClick={() => handleAddRecipient('to')}>\n Add\n </Button>\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\">\n <TextInput style={{ flex: 1 }} placeholder=\"email@example.com\" value={recipient} onChange={(e) => handleRecipientChange('to', index, e.currentTarget.value)} />\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 <Button size=\"xs\" leftSection={<IconPlus size={14} />} onClick={() => handleAddRecipient('cc')}>\n Add\n </Button>\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\">\n <TextInput\n style={{ flex: 1 }}\n placeholder=\"email@example.com\"\n value={recipient}\n onChange={(e) => handleRecipientChange('cc', index, e.currentTarget.value)}\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 <Button size=\"xs\" leftSection={<IconPlus size={14} />} onClick={() => handleAddRecipient('bcc')}>\n Add\n </Button>\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\">\n <TextInput\n style={{ flex: 1 }}\n placeholder=\"email@example.com\"\n value={recipient}\n onChange={(e) => handleRecipientChange('bcc', index, e.currentTarget.value)}\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 <Text size=\"sm\" fw={600}>\n From (Optional)\n </Text>\n <TextInput\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 <Text size=\"sm\" fw={600}>\n Reply-To (Optional)\n </Text>\n <TextInput\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 <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Subject\n </Text>\n <TextInput\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 </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Body Type\n </Text>\n <Select\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 </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Body\n </Text>\n <Textarea\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 { Card, 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';\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 // Build notification params based on channel\n if (channel === 'email') {\n const params: EmailNotificationParams = {\n channel: 'email',\n to: to.filter((email) => email.trim() !== ''),\n cc: cc.filter((email) => email.trim() !== ''),\n bcc: bcc.filter((email) => email.trim() !== ''),\n subject: block.props.subject || '',\n body: block.props.body || '',\n bodyType: (block.props.bodyType || 'text') as 'text' | 'html',\n from: block.props.from || undefined,\n replyTo: block.props.replyTo || undefined,\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 <Card withBorder padding=\"md\" radius=\"md\" style={{ width: '100%' }}>\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 <ActionIcon variant=\"light\" color={getChannelColor(channel)} size=\"lg\" radius=\"xl\" style={{ flexShrink: 0 }}>\n {getIcon(block.props.icon as any, 18, 1.5, 'bell')}\n </ActionIcon>\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 </Card>\n );\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","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';\n\n// Export new dependency system types and utilities\n\nexport { CheckboxBlockSpec, ListBlockSpec, OverviewBlock, ProposalBlockSpec, ApiRequestBlockSpec };\nexport type { CheckboxBlockProps } from './checkbox';\nexport type { ListBlockSettings, ListBlockProps } from './list';\nexport type { OverviewBlockSettings, OverviewBlockProps } from './overview';\nexport type { ProposalBlockProps, CreateProposalParams } from './proposal';\nexport type { ApiRequestBlockProps, HttpMethod, KeyValuePair } from './apiRequest';\nexport type { NotifyBlockProps } from './notify';\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};\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: '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 did: '',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['overview', 'overview-block', 'data-overview'],\n group: 'Domains',\n subtext: 'Create an overview from DID data',\n },\n {\n title: 'Proposal Vote',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'proposalVote',\n props: {\n title: '',\n subtitle: '',\n icon: 'A��,�?\"A3A_A,A?',\n status: 'open',\n daysLeft: 0,\n conditions: '',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['vote', 'proposal-vote', 'governance-vote', 'dao-vote'],\n group: 'DAO',\n subtext: 'Create a proposal voting block',\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: 'Proposal Actions',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'proposalActions',\n props: {\n proposalBlockId: '',\n hasDependencies: true,\n actions: '[]',\n },\n },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['actions', 'proposal-actions', 'dao-actions', 'governance-actions'],\n group: 'DAO',\n subtext: 'Manage proposal actions',\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: 'Notification',\n onItemClick: () => {\n editor.insertBlocks(\n [\n {\n type: 'notify',\n props: {\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 },\n ],\n editor.getTextCursorPosition().block,\n 'after'\n );\n },\n aliases: ['notify', 'notification', 'email', 'alert', 'message', 'bird'],\n group: 'Basics',\n subtext: 'Send notifications via Email, SMS, or WhatsApp',\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 Actions' && item.title !== 'Proposal Vote' && 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 } = 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\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 } 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';\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 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 // 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 // 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\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 console.warn('Cannot update user props: write permission denied');\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 };\n };\n\n ixoEditor.updateFlowMetadata = (updates: Record<string, any>) => {\n if (!permissions.write) {\n console.warn('Cannot update flow metadata: write permission denied');\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.getDocType = () => {\n const docType = (root.get('docType') as string) || '';\n console.log('[useCollaborativeIxoEditor] getDocType() called, returning:', docType);\n return docType;\n };\n\n ixoEditor.setDocType = (value: 'template' | 'flow' | 'page' | '') => {\n if (!permissions.write) {\n console.warn('Cannot set doc type: write permission denied');\n return;\n }\n console.log('[useCollaborativeIxoEditor] setDocType() called, setting docType to:', value);\n root.set('docType', value);\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 root.set('docType', ''); // can be 'template' | 'flow' | 'page' | ''\n console.log('[useCollaborativeIxoEditor] Initializing docType to empty string for new document');\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 console.error('Matrix setup failed', 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 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 } from './context/BlocknoteContext';\nimport PanelContent from './components/PanelContent';\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}\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 children,\n}: {\n editor: IxoEditorType;\n config: IxoEditorConfig;\n isEditable?: boolean;\n className: string;\n onChange?: () => void;\n onSelectionChange?: () => void;\n children?: React.ReactNode;\n}) {\n return (\n <div style={{ display: 'flex', height: '100%' }}>\n <div className={`ixo-editor ixo-editor--theme-${config.theme} ${className}`} style={{ flex: 1 }}>\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 </div>\n <PanelContent />\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}: 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 editor={editor} handlers={handlers} blockRequirements={blockRequirements} editable={isEditable}>\n <IxoEditorContent editor={editor} config={config} isEditable={isEditable} className={className} onChange={onChange} onSelectionChange={onSelectionChange}>\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';\n\nexport default function PanelContent() {\n const { activePanel, registeredPanels } = usePanelStore();\n\n const isOpen = activePanel !== null;\n const content = activePanel ? registeredPanels.get(activePanel) : null;\n\n return (\n <div\n style={{\n position: 'relative',\n flexBasis: isOpen ? '50%' : '0',\n transition: 'flex-basis 0.2s ease',\n overflow: 'hidden',\n }}\n >\n {isOpen && content}\n </div>\n );\n}\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":["React","React","React","useMemo","React","useCallback","React","React","useCallback","Stack","SegmentedControl","Button","Text","Alert","React","useCallback","Stack","Button","React","useCallback","Stack","TextInput","Select","React","useCallback","useCallback","updatedCondition","React","Stack","TextInput","Select","useCallback","React","Stack","Text","SegmentedControl","Button","Alert","React","React","useEffect","useMemo","useState","SegmentedControl","Stack","Switch","Text","TextInput","useCallback","useMemo","useEffect","useRef","useCallback","React","Card","Group","Stack","Text","React","useMemo","React","Card","Group","Stack","Text","React","Card","Checkbox","Group","Stack","Text","ActionIcon","React","Checkbox","Card","Group","ActionIcon","Stack","Text","useMemo","useEffect","useState","useMemo","useState","useEffect","React","React","React","createReactBlockSpec","React","React","useMemo","React","useCallback","Paper","CloseButton","Title","React","useState","Stack","Card","Group","Text","TextInput","Button","Switch","GeneralTab","useState","typeConfig","React","Stack","TextInput","Button","Switch","Text","Card","Group","TemplateConfig","useCallback","React","Paper","Title","CloseButton","GeneralTab","Card","Group","Stack","Text","ActionIcon","Badge","useMemo","React","TemplateConfig","Card","Badge","Group","ActionIcon","Stack","Text","React","useState","useEffect","useMemo","useCallback","Group","Stack","Text","ActionIcon","Alert","Loader","Center","Flex","Button","React","Stack","Text","Box","Flex","React","React","React","Checkbox","React","Text","Flex","Box","Stack","React","Text","Box","Stack","Flex","React","Text","Flex","Stack","Box","React","Text","Badge","Tooltip","Box","Flex","Stack","React","Text","Flex","Stack","Tooltip","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","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","Text","IconCheckbox","React","Text","IconArrowDown","IconArrowRight","IconArrowUp","React","React","Text","Box","Image","Stack","Flex","React","Text","Flex","Image","Stack","Box","React","useState","useEffect","useMemo","Paper","CloseButton","Stack","Alert","Text","React","Stack","Text","Title","Divider","Flex","Paper","Group","useState","useMemo","useEffect","React","Paper","CloseButton","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","React","useState","useMemo","TemplateConfig","useEffect","useCallback","error","Center","Text","Stack","Flex","IconArrowUp","IconArrowDown","ActionIcon","IconArrowRight","Loader","Alert","Group","Button","page","React","createReactBlockSpec","React","React","createReactBlockSpec","ValidatorActionType","useState","useEffect","useCallback","useState","useEffect","useCallback","React","createReactBlockSpec","React","React","useMemo","React","useCallback","Paper","CloseButton","Title","React","useEffect","useState","Stack","Text","TextInput","Textarea","Select","Loader","GeneralTab","useState","useEffect","React","Stack","Text","TextInput","Textarea","Select","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","TextInput","Stack","React","useState","Stack","TextInput","NumberInput","Button","Group","Text","Card","Badge","ActionIcon","Divider","ScrollArea","inputStyles","React","Stack","TextInput","Select","NumberInput","React","Stack","Select","TextInput","NumberInput","React","Stack","TextInput","inputStyles","React","Stack","TextInput","NumberInput","inputStyles","React","useState","Stack","TextInput","Textarea","Button","Group","Text","Card","inputStyles","React","useState","useEffect","Stack","Textarea","Alert","Text","Badge","Group","inputStyles","React","Stack","Select","TextInput","Textarea","inputStyles","React","Stack","Select","Textarea","TextInput","React","Stack","TextInput","inputStyles","React","Stack","TextInput","inputStyles","React","Stack","TextInput","Checkbox","Textarea","inputStyles","React","Stack","TextInput","Group","inputStyles","React","useState","Stack","TextInput","Textarea","NumberInput","Button","Group","Text","Card","inputStyles","React","Stack","TextInput","Textarea","NumberInput","inputStyles","React","Stack","TextInput","inputStyles","React","Stack","TextInput","Radio","Group","inputStyles","React","useState","Stack","TextInput","Button","Group","Text","Card","Textarea","inputStyles","React","Stack","TextInput","Textarea","Checkbox","inputStyles","React","Stack","TextInput","Radio","Group","Textarea","inputStyles","React","useState","Stack","TextInput","Button","Group","Text","Card","Textarea","inputStyles","React","Stack","TextInput","inputStyles","React","Stack","Textarea","Alert","Text","inputStyles","React","Stack","Checkbox","Select","NumberInput","Group","inputStyles","React","Stack","Checkbox","TextInput","Select","Textarea","inputStyles","React","Stack","TextInput","Select","inputStyles","React","Stack","TextInput","Checkbox","inputStyles","React","Stack","TextInput","Checkbox","Textarea","inputStyles","React","Stack","TextInput","inputStyles","React","Stack","TextInput","inputStyles","React","Stack","Select","Textarea","inputStyles","React","Stack","Select","Textarea","useState","useMemo","useEffect","React","Alert","Text","Stack","Tabs","Group","Paper","Badge","Card","Divider","ScrollArea","Button","useState","useEffect","useCallback","React","Stack","Card","React","Stack","TextInput","TemplateConfig","useCallback","React","Paper","Title","CloseButton","GeneralTab","Card","Group","Stack","Text","ActionIcon","useMemo","React","TemplateConfig","Card","Group","ActionIcon","Stack","Text","React","useMemo","React","Card","Group","Stack","Text","Badge","Button","ActionIcon","React","Card","Stack","Text","Group","ActionIcon","Badge","Button","React","useCallback","useState","Paper","CloseButton","Title","Stack","TextInput","Textarea","Button","Text","Card","useEffect","useState","useState","useEffect","coreAddress","useState","useEffect","useState","useEffect","React","useState","Stack","Text","Group","Card","Button","Progress","Box","Textarea","Tooltip","React","useCallback","useEffect","useState","Alert","Button","Card","Stack","Text","ActionsTab","useState","useEffect","useCallback","React","Stack","Alert","Text","Button","Card","useState","useCallback","React","Stack","Card","Text","TextInput","Textarea","Button","ActionsTab","Paper","Title","CloseButton","useMemo","React","React","createReactBlockSpec","React","React","createReactBlockSpec","React","React","useMemo","React","useCallback","Paper","CloseButton","Title","React","useEffect","useState","Divider","Select","Stack","Text","TextInput","Textarea","Button","Group","ActionIcon","Paper","GeneralTab","TemplateConfig","useCallback","React","Paper","Title","CloseButton","GeneralTab","Card","Group","Stack","Text","ActionIcon","Badge","useMemo","React","TemplateConfig","method","Card","Badge","Group","ActionIcon","Stack","Text","React","useState","Card","Group","Stack","Text","ActionIcon","Tooltip","Button","Badge","Loader","Alert","useState","method","status","React","Button","Loader","Card","Stack","Group","ActionIcon","Badge","Text","Tooltip","Alert","React","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","TextInput","Text","Button","Group","Switch","Select","React","TextInput","Switch","Select","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","Paper","CloseButton","Title","React","useEffect","useState","Divider","Select","Stack","Text","TextInput","Textarea","Button","Group","ActionIcon","Paper","IconTrash","IconPlus","GeneralTab","TemplateConfig","useCallback","React","Paper","Title","CloseButton","GeneralTab","Card","Group","Stack","Text","ActionIcon","Badge","useMemo","React","TemplateConfig","channel","Card","Badge","Group","ActionIcon","Stack","Text","React","useState","Card","Group","Stack","Text","ActionIcon","Tooltip","Button","Badge","Collapse","Alert","Loader","Code","IconSend","IconChevronDown","IconChevronUp","useState","channel","status","React","Button","Loader","IconSend","Card","Stack","Group","ActionIcon","Badge","Text","Tooltip","IconChevronUp","IconChevronDown","Alert","Collapse","Code","React","createReactBlockSpec","React","useMemo","useEffect","useState","useCallback","useMemo","useCreateBlockNote","BlockNoteSchema","defaultBlockSpecs","defaultInlineContentSpecs","defaultStyleSpecs","useEffect","useState","useRef","useCallback","useMemo","useMemo","useMemo","useEffect","BlockNoteSchema","defaultBlockSpecs","defaultInlineContentSpecs","defaultStyleSpecs","useCreateBlockNote","React","React","React","React"]}