@ixo/editor 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +0,0 @@
|
|
|
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/ListBlock.tsx","../src/mantine/blocks/list/modal/ListConfigModal.tsx","../src/mantine/blocks/list/modal/ListTypeSelectionStep.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/registry.ts","../src/mantine/blocks/list/modal/ListConfigurationStep.tsx","../src/mantine/blocks/list/modal/ListPreviewStep.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/CollectionsList.tsx","../src/mantine/blocks/list/requests/RequestsList.tsx","../src/mantine/blocks/list/members/MembersList.tsx","../src/mantine/blocks/list/validators/ValidatorsList.tsx","../src/mantine/blocks/list/ListPagination.tsx","../src/core/constants.ts","../src/mantine/blocks/list/modal/ModalNavigation.tsx","../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/overview/OverviewBlock.tsx","../src/mantine/context/types.ts","../src/mantine/context/hooks/useSharedProposal.ts","../src/mantine/blocks/proposalVote/ProposalVoteBlockSpec.tsx","../src/mantine/blocks/proposalVote/ProposalVoteBlock.tsx","../src/mantine/blocks/proposalVote/template/TemplateView.tsx","../src/mantine/blocks/proposalVote/template/TemplateConfig.tsx","../src/mantine/blocks/proposalVote/template/GeneralTab.tsx","../src/mantine/blocks/stores/dependencyHelpers.ts","../src/mantine/blocks/proposalVote/flow/FlowView.tsx","../src/mantine/blocks/proposalVote/flow/FlowConfig.tsx","../src/mantine/blocks/proposalVote/flow/GeneralTab.tsx","../src/mantine/blocks/proposalVote/flow/useFlowBusinessLogic.ts","../src/mantine/blocks/hooks/useBlockDependencies.ts","../src/mantine/blocks/hooks/useDependsOn.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/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/proposalActions/ProposalActionsBlockSpec.tsx","../src/mantine/blocks/proposalActions/ProposalActionsBlock.tsx","../src/mantine/blocks/proposalActions/components/ActionsCard.tsx","../src/mantine/blocks/proposalActions/ProposalActionsDrawer.tsx","../src/mantine/blocks/proposalActions/components/SpendActionForm.tsx","../src/mantine/blocks/proposalActions/components/UpdateMembersActionForm.tsx","../src/mantine/blocks/proposalActions/components/StakeActionForm.tsx","../src/mantine/blocks/proposalActions/components/JoinActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/MintActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/ExecuteActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/CustomActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/AuthzExecActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/AuthzGrantActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/BurnNftActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/TransferNftActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/ManageCw721ActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/InstantiateActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/MigrateActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/UpdateAdminActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/ManageCw20ActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/ManageSubDaosActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/UpdateInfoActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/ManageStorageItemsActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/DaoAdminExecActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/AcceptToMarketplaceActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/CreateEntityActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/UpdateVotingConfigActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/UpdatePreProposeConfigActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/GovernanceVoteActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/WithdrawTokenSwapActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/PerformTokenSwapActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/StakeToGroupActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/SendGroupTokenActionForm.tsx","../src/mantine/blocks/proposalActions/components/forms/ValidatorActionsActionForm.tsx","../src/mantine/blocks/proposalActions/registry/actionRegistry.ts","../src/mantine/blocks/enumChecklist/EnumChecklistBlock.tsx","../src/mantine/blocks/enumChecklist/oracle_personalities/index.tsx","../src/mantine/blocks/enumChecklist/EnumChecklistConfigModal.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/registry/blockRegistry.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';\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}\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}\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}\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}\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}\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}\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}\nexport interface Transaction {\n transactionHash: string;\n typeUrl: string;\n memo: string;\n time: string;\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}\nexport interface BlocknoteHandlers {\n getCurrentDao: () => Promise<{ coreAddress: string }>;\n getVote: (proposalContractAddress: string, proposalId: string, userAddress: string) => Promise<VoteResponse>;\n getProposal: (proposalContractAddress: string, proposalId: string) => Promise<ProposalResponse>;\n getCurrentUser: () => Promise<User>;\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 getMembers: (address: string, groupCoreAddress: 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}\nexport interface BlocknoteContextValue {\n editor?: IxoEditorType;\n handlers?: BlocknoteHandlers;\n blockRequirements?: BlockRequirements;\n editable?: boolean;\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 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 // 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 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 {\n parseConditionConfig,\n hasVisibilityConditions,\n hasEnableConditions,\n} 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 { editable } = useBlocknoteContext();\n const { actions } = useBlockConditions(block, editor);\n\n console.log('Rendering CheckboxBlock with actions:', actions);\n\n // Template mode - always show\n if (editable) {\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 console.log('[CheckboxBlock] Hiding block - visibility conditions exist but none passed');\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 console.log('[CheckboxBlock] Enable state:', {\n blockId: block.id,\n hasEnable,\n enableActionExists,\n shouldDisable,\n actions,\n });\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';\nimport type { IconKey } 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(\n () => <TemplateConfig editor={editor} block={block} />,\n [editor, block]\n );\n\n const { open } = usePanel(panelId, panelContent);\n\n return (\n <Card\n withBorder\n padding=\"md\"\n radius=\"md\"\n style={{ width: '100%', cursor: 'pointer', position: 'relative' }}\n onClick={open}\n >\n <Badge\n size=\"xs\"\n variant=\"light\"\n color=\"gray\"\n style={{ position: 'absolute', top: 8, right: 8 }}\n >\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\n contentEditable={false}\n disabled\n checked={false}\n style={{ flexShrink: 0 }}\n onClick={(e) => e.stopPropagation()}\n />\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 icon={block.props.icon || '✓'}\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 onIconChange={(value) => updateProp('icon', 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}>\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 {\n parseConditionConfig,\n stringifyConditionConfig,\n createDefaultCondition,\n getAvailableBlocks,\n} 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 console.log('[ConditionsTab] Raw block.props.conditions:', block.props.conditions);\n\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 // Debug logging\n console.log('[ConditionsTab] Debug info:', {\n blockId: block?.id,\n blockType: block?.type,\n editorDocument: editor?.document,\n availableBlocks,\n currentConditions,\n });\n\n /**\n * Update conditions by directly modifying the block in the editor\n */\n const updateConditions = useCallback(\n (newConfig: ConditionConfig) => {\n console.log('[ConditionsTab] updateConditions called with:', newConfig);\n const conditionsString = stringifyConditionConfig(newConfig);\n console.log('[ConditionsTab] Stringified conditions:', conditionsString);\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 console.log('[ConditionsTab] handleAddCondition called');\n console.log('[ConditionsTab] Current conditions before adding:', currentConditions);\n\n const newCondition = createDefaultCondition();\n console.log('[ConditionsTab] Created new condition:', newCondition);\n\n const newConfig = {\n ...currentConditions,\n enabled: true, // Auto-enable when adding first condition\n conditions: [...currentConditions.conditions, newCondition],\n };\n console.log('[ConditionsTab] New config to be saved:', newConfig);\n\n updateConditions(newConfig);\n }, [currentConditions, updateConditions]);\n\n const handleUpdateCondition = useCallback(\n (index: number, updatedCondition: BlockCondition) => {\n console.log('[ConditionsTab] Updating condition at index:', {\n index,\n updatedCondition,\n currentConditions: currentConditions.conditions.length,\n });\n\n const newConditions = [...currentConditions.conditions];\n newConditions[index] = updatedCondition;\n const newConfig = {\n ...currentConditions,\n conditions: newConditions,\n };\n\n console.log('[ConditionsTab] New config being sent:', newConfig);\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\n 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 {(() => {\n console.log('[ConditionsTab] Rendering conditions:', {\n conditionsCount: currentConditions.conditions.length,\n conditions: currentConditions.conditions,\n });\n return null;\n })()}\n {currentConditions.conditions.map((condition, index) => {\n console.log('[ConditionsTab] Rendering condition at index:', index, condition);\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\n variant=\"outline\"\n onClick={handleAddCondition}\n disabled={availableBlocks.length === 0}\n fullWidth\n >\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\n on them. The \"Add Condition\" button will become enabled once other blocks are 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(\n (c) => c.effect.action === 'show' || c.effect.action === 'hide'\n );\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(\n (c) => c.effect.action === 'enable' || c.effect.action === 'disable'\n );\n}\n","import React, { useCallback } from 'react';\nimport { Stack, SegmentedControl, Button, Text, Alert } from '@mantine/core';\nimport type { ConditionConfig, BlockCondition } from '../../types/conditions';\nimport {\n parseConditionConfig,\n stringifyConditionConfig,\n createDefaultCondition,\n getAvailableBlocks,\n} 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({\n block,\n editor,\n onConditionsChange,\n}: ConditionBuilderTabProps) {\n console.log('[ConditionBuilderTab] Raw block.props.conditions:', block.props.conditions);\n\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 // Debug logging\n console.log('[ConditionBuilderTab] Debug info:', {\n blockId: block?.id,\n blockType: block?.type,\n editorDocument: editor?.document,\n availableBlocks,\n currentConditions,\n onConditionsChange: typeof onConditionsChange,\n });\n\n const updateConditions = useCallback(\n (newConfig: ConditionConfig) => {\n console.log('[ConditionBuilderTab] updateConditions called with:', newConfig);\n const conditionsString = stringifyConditionConfig(newConfig);\n console.log('[ConditionBuilderTab] Stringified conditions:', conditionsString);\n console.log('[ConditionBuilderTab] Calling onConditionsChange...');\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 console.log('[ConditionBuilderTab] handleAddCondition called');\n console.log('[ConditionBuilderTab] Current conditions before adding:', currentConditions);\n\n const newCondition = createDefaultCondition();\n console.log('[ConditionBuilderTab] Created new condition:', newCondition);\n\n const newConfig = {\n ...currentConditions,\n enabled: true, // Auto-enable when adding first condition\n conditions: [...currentConditions.conditions, newCondition],\n };\n console.log('[ConditionBuilderTab] New config to be saved:', newConfig);\n\n updateConditions(newConfig);\n }, [currentConditions, updateConditions]);\n\n const handleUpdateCondition = useCallback(\n (index: number, updatedCondition: BlockCondition) => {\n console.log('[ConditionBuilderTab] Updating condition at index:', {\n index,\n updatedCondition,\n currentConditions: currentConditions.conditions.length,\n });\n\n const newConditions = [...currentConditions.conditions];\n newConditions[index] = updatedCondition;\n const newConfig = {\n ...currentConditions,\n conditions: newConditions,\n };\n\n console.log('[ConditionBuilderTab] New config being sent:', newConfig);\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\n 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 {(() => {\n console.log('[ConditionBuilderTab] Rendering conditions:', {\n conditionsCount: currentConditions.conditions.length,\n conditions: currentConditions.conditions,\n });\n return null;\n })()}\n {currentConditions.conditions.map((condition, index) => {\n console.log('[ConditionBuilderTab] Rendering condition at index:', index, condition);\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\n variant=\"outline\"\n onClick={handleAddCondition}\n disabled={availableBlocks.length === 0}\n fullWidth\n >\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\n on them. The \"Add Condition\" button will become enabled once other blocks are 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 {\n getConditionableProperties,\n getPropertyByName,\n} 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({\n condition,\n availableBlocks,\n onUpdate,\n onDelete,\n}: ConditionRowProps) {\n // Debug logging\n console.log('[ConditionRow] Props:', {\n conditionId: condition.id,\n sourceBlockId: condition.sourceBlockId,\n sourceBlockType: condition.sourceBlockType,\n availableBlocks: availableBlocks.length,\n });\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(\n { value: 'greater_than', label: 'greater than' },\n { value: 'less_than', label: 'less than' }\n );\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 console.log('[ConditionRow] Block selection changed:', {\n oldValue: `${condition.sourceBlockType}:${condition.sourceBlockId}`,\n newValue: value,\n conditionId: condition.id,\n });\n\n if (!value) {\n const updatedCondition = {\n ...condition,\n sourceBlockId: '',\n sourceBlockType: '',\n rule: { ...condition.rule, property: '', value: '' },\n };\n console.log('[ConditionRow] Calling onUpdate with cleared condition:', updatedCondition);\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 console.log('[ConditionRow] Calling onUpdate with new block selection:', updatedCondition);\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 =\n condition.sourceBlockId && condition.sourceBlockType\n ? `${condition.sourceBlockType}:${condition.sourceBlockId}`\n : '';\n\n return (\n <Card withBorder p=\"md\">\n <Stack gap=\"sm\">\n {/* Condition Name */}\n <TextInput\n label=\"Condition name\"\n placeholder=\"e.g., User must acknowledge terms\"\n value={condition.name}\n onChange={(e) => handleNameChange(e.currentTarget.value)}\n />\n\n {/* Source Block Selection */}\n <Select\n label=\"Check this block\"\n placeholder=\"Select a block...\"\n data={blockSelectData}\n value={currentBlockValue}\n onChange={handleSourceBlockChange}\n searchable\n clearable\n />\n\n {/* Property, Operator, and Value Row */}\n {condition.sourceBlockType && (\n <>\n <Group grow>\n {/* Property Selection */}\n <Select\n label=\"Property\"\n placeholder=\"Select property...\"\n data={propertySelectData}\n value={condition.rule.property}\n onChange={handlePropertyChange}\n />\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' &&\n 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\n label=\"Action\"\n placeholder=\"Select action...\"\n data={actionSelectData}\n value={condition.effect.action}\n onChange={handleActionChange}\n />\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(\n blockType: string,\n propertyName: string\n): 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({\n property,\n value,\n onChange,\n disabled = false,\n}: 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\n label=\"Value\"\n checked={Boolean(value)}\n onChange={handleBooleanChange}\n disabled={disabled}\n />\n </Stack>\n );\n\n case 'number':\n return (\n <NumberInput\n label=\"Value\"\n placeholder=\"Enter number...\"\n value={typeof value === 'number' ? value : 0}\n onChange={handleNumberChange}\n disabled={disabled}\n />\n );\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 (\n <Select\n label=\"Value\"\n placeholder=\"Select value...\"\n data={selectData}\n value={String(value)}\n onChange={handleSelectChange}\n disabled={disabled}\n />\n );\n\n case 'string':\n default:\n return (\n <TextInput\n label=\"Value\"\n placeholder=\"Enter text...\"\n value={String(value)}\n onChange={handleStringChange}\n disabled={disabled}\n />\n );\n }\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n Divider,\n SegmentedControl,\n Stack,\n Switch,\n Text,\n TextInput,\n Textarea,\n PillsInput,\n Pill,\n} from '@mantine/core';\nimport { CheckboxAllowedMode } from '../CheckboxBlock';\n\ninterface GeneralTabProps {\n title: string;\n description: string;\n icon: string;\n initialChecked: boolean;\n allowedMode: CheckboxAllowedMode;\n allowedValues: string[];\n onTitleChange: (value: string) => void;\n onDescriptionChange: (value: string) => void;\n onIconChange: (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 icon,\n initialChecked,\n allowedMode,\n allowedValues,\n onTitleChange,\n onDescriptionChange,\n onIconChange,\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 [localIcon, setLocalIcon] = useState(icon || '✓');\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 setLocalIcon(icon || '✓');\n }, [icon]);\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} style={{ color: '#f1f3f5' }}>\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 styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n },\n }}\n />\n </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600} style={{ color: '#f1f3f5' }}>\n Icon\n </Text>\n <TextInput\n placeholder=\"e.g. ✓\"\n value={localIcon}\n onChange={(event) => {\n const newIcon = event.currentTarget.value;\n setLocalIcon(newIcon);\n onIconChange(newIcon);\n }}\n styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n fontSize: '24px',\n textAlign: 'center',\n },\n }}\n />\n </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600} style={{ color: '#f1f3f5' }}>\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 styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n },\n }}\n />\n </Stack>\n\n <Divider color=\"#333\" variant=\"dashed\" />\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600} style={{ color: '#f1f3f5' }}>\n Default State\n </Text>\n <Text size=\"xs\" style={{ color: '#adb5bd' }}>\n Choose whether newly created flows start with this checkbox checked.\n </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 styles={{\n track: {\n backgroundColor: localInitialChecked ? '#4dabf7' : '#333',\n },\n label: {\n color: '#adb5bd',\n },\n }}\n />\n </Stack>\n\n <Divider color=\"#333\" variant=\"dashed\" />\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600} style={{ color: '#f1f3f5' }}>\n Allowed Checkers\n </Text>\n <Text size=\"xs\" style={{ color: '#adb5bd' }}>\n Decide who can toggle this checkbox during a flow.\n </Text>\n <SegmentedControl\n value={localMode}\n onChange={handleModeChange}\n data={[\n { label: 'Everyone', value: 'all' },\n { label: 'Specific users', value: 'specific' },\n ]}\n styles={{\n root: {\n backgroundColor: '#1a1a1a',\n border: '1px solid #333',\n padding: 4,\n borderRadius: 12,\n },\n control: {\n backgroundColor: '#1a1a1a',\n color: '#adb5bd',\n },\n indicator: {\n backgroundColor: '#2a2a2a',\n border: '1px solid #4dabf7',\n },\n label: {\n color: '#f1f3f5',\n },\n }}\n />\n {localMode !== 'all' && (\n <Stack gap={4}>\n <Text size=\"xs\" style={{ color: '#adb5bd' }}>\n {allowedHint}\n </Text>\n <PillsInput\n styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n },\n }}\n >\n <Pill.Group>\n {localValues.map((user) => (\n <Pill\n key={user}\n withRemoveButton\n onRemove={() => handleRemoveUser(user)}\n styles={{\n root: {\n backgroundColor: '#2a2a2a',\n color: '#f1f3f5',\n },\n remove: {\n color: '#adb5bd',\n '&:hover': {\n color: '#ff6b6b',\n },\n },\n }}\n >\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 {\n IconSquareCheck,\n IconFileText,\n IconCheckbox,\n IconNote,\n IconChecklist,\n IconThumbUp,\n type IconProps,\n} from '@tabler/icons-react';\n\nexport type IconKey = 'square-check' | 'file-text' | 'checklist' | 'checkbox' | 'note' | 'thumb-up';\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};\n\nexport const getIcon = (\n key: string | IconKey,\n size: number = 20,\n stroke: number = 1.5,\n fallback: IconKey = 'square-check'\n) => {\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\n variant=\"light\"\n color=\"blue\"\n size=\"lg\"\n radius=\"xl\"\n style={{ flexShrink: 0 }}\n >\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(\n block: any,\n editor: any,\n currentUser?: any\n): 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<\n BlockCondition['rule']['operator'],\n BlockCondition['rule']['operator']\n> = {\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<\n BlockCondition['effect']['action'],\n BlockCondition['effect']['action'] | null\n> = {\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 (\n (condition.rule.operator === 'equals' || condition.rule.operator === 'not_equals') &&\n typeof condition.rule.value === 'boolean'\n ) {\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 {\n BlockCondition,\n ConditionEvaluationResult,\n BlockConditionsResult,\n ConditionConfig,\n} from '../types/conditions';\nimport { normalizeConditions } from './conditionNormalizer';\n\nexport function evaluateCondition(\n condition: BlockCondition,\n sourceBlock: any,\n _currentUser?: any\n): 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 =\n typeof sourceValue === 'number' &&\n typeof rule.value === 'number' &&\n sourceValue > rule.value;\n break;\n case 'less_than':\n passes =\n typeof sourceValue === 'number' &&\n typeof rule.value === 'number' &&\n sourceValue < rule.value;\n break;\n case 'contains':\n passes =\n typeof sourceValue === 'string' &&\n typeof rule.value === 'string' &&\n sourceValue.toLowerCase().includes(rule.value.toLowerCase());\n break;\n case 'not_contains':\n passes =\n typeof sourceValue === 'string' &&\n typeof rule.value === 'string' &&\n !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(\n conditionConfig: ConditionConfig,\n editorDocument: any[],\n currentUser?: any\n): 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(\n (block) => block.id === condition.sourceBlockId && block.type === condition.sourceBlockType\n );\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, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { Group, Stack, Text, Button, ActionIcon, Alert, Loader, Center, Flex } 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 { ListConfigModal } from './modal/ListConfigModal';\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/CollectionsList';\nimport { RequestsList } from './requests/RequestsList';\nimport { MembersList } from './members/MembersList';\nimport { ValidatorsList } from './validators/ValidatorsList';\nimport { getListNameByType } from './registry';\nimport { ListActionsMenu } from './ListActionsMenu';\nimport sortListItems from '@/core/lib/sortListItems';\nimport FilterTab from './FilterTab';\nimport filterListItems from '@/core/lib/filterListItems';\nimport { IconArrowDown, IconArrowUp } from '@tabler/icons-react';\nimport ListPagination from './ListPagination';\nimport { DEFAULT_PAGE_SIZE } from '@/core/constants';\n\n// Using simple text icons instead of @tabler/icons-react to avoid dependency\nconst IconSettings = () => <span>⚙️</span>;\nconst IconRefresh = () => <span>🔄</span>;\nconst IconAlertCircle = () => <span>⚠️</span>;\n\nexport interface ListBlockSettings {\n listType: ListType | null;\n listConfig: Record<string, any>;\n}\n\nexport interface ListBlockProps {\n block: any;\n editor: any;\n}\n\nconst ListBlockContent: React.FC<ListBlockProps> = ({ block, editor }) => {\n const [modalOpened, setModalOpened] = useState(false);\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 const { editable } = useBlocknoteContext();\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 const handlers = useBlocknoteHandlers();\n const listType = block.props.listType && block.props.listType !== '' ? (block.props.listType as ListType) : null;\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\n switch (listType) {\n case 'linked_resources':\n if (!listConfig.did) throw new Error('DID is required');\n result = await handlers.getEntity(listConfig.did);\n setData({ items: result.linkedResource });\n break;\n\n case 'assets':\n if (!listConfig.collectionDid) throw new Error('Collection DID is required');\n result = await handlers.getAssets(listConfig.collectionDid, page);\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 if (!listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getCollections(listConfig.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n\n case 'investments':\n if (!listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getInvestments(listConfig.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n\n case 'oracles':\n if (!listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getOracles(listConfig.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n\n case 'pods':\n if (!listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getPODs(listConfig.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n\n case 'proposals':\n if (!listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getProposals(listConfig.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n\n case 'requests':\n if (!listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getRequests(listConfig.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n\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 if (!listConfig.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getValidators(listConfig.relayedNodeDid, 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 console.log('[ListBlockContent] useEffect', listType, listConfig);\n fetchData();\n }\n }, [listType, page, listConfig]);\n\n const handleConfigSave = (config: BaseListConfig<ListType>) => {\n console.log('[ListBlockContent] handleConfigSave', config);\n updateProps({\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 setModalOpened(false);\n };\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 console.log('[ListBlockContent] renderListComponent', data, listType);\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 'group_members':\n return <MembersList 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 return (\n <Stack mih={listType && totalPages !== 0 ? 700 : undefined} w=\"100%\">\n {listType && (\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 )}\n <Flex justify={listType ? 'space-between' : 'flex-end'}>\n <Flex gap=\"xs\" align=\"center\">\n {listType && <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 {listType && editable && (\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={fetchData} loading={loading}>\n <IconRefresh />\n </ActionIcon>\n )}\n\n {editable && (\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={() => setModalOpened(true)}>\n <IconSettings />\n </ActionIcon>\n )}\n {listType && 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 {!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 ) : 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\n {/* Configuration Modal */}\n <ListConfigModal\n opened={modalOpened}\n onClose={() => setModalOpened(false)}\n onSave={handleConfigSave}\n initialConfig={\n listType && listConfig\n ? { type: listType, config: listConfig, sort: null, filter: null, filterOptions: listFilterConfigOptions, sortOptions: listSortConfigOptions }\n : null\n }\n />\n </Stack>\n );\n};\n\nexport const ListBlock = 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 },\n content: 'none',\n },\n {\n render: (props) => <ListBlockContent {...props} />,\n }\n);\n","import React, { useState } from 'react';\nimport { Modal, Group, Box } from '@mantine/core';\nimport { ListType, BaseListConfig, SortOption, FilterOption } from '../types';\nimport { ListTypeSelectionStep } from './ListTypeSelectionStep';\nimport { ListConfigurationStep } from './ListConfigurationStep';\nimport { ListPreviewStep } from './ListPreviewStep';\nimport { ModalNavigation } from './ModalNavigation';\nimport { getListTypeConfig } from '../registry';\n\ninterface ListConfigModalProps {\n opened: boolean;\n onClose: () => void;\n onSave: (config: BaseListConfig<ListType>) => void;\n initialConfig?: BaseListConfig<ListType> | null;\n}\n\nexport const ListConfigModal: React.FC<ListConfigModalProps> = ({ opened, onClose, onSave, initialConfig }) => {\n const [activeStep, setActiveStep] = useState('type');\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\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 };\n\n const handleConfigChange = (key: string, value: any) => {\n setConfig((prev) => ({ ...prev, [key]: value }));\n };\n\n const handleAddToBlock = () => {\n if (selectedType && config) {\n onSave({\n type: selectedType,\n config: config as any,\n sortOptions: sortConfig as SortOption[],\n filterOptions: filterConfig as FilterOption[],\n filter: null,\n sort: null,\n });\n onClose();\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 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 <ListTypeSelectionStep selectedType={selectedType} onTypeSelect={handleTypeSelect} onNext={() => setActiveStep('configure')} />;\n case 'configure':\n return selectedType ? (\n <ListConfigurationStep\n listType={selectedType}\n config={config}\n onConfigChange={handleConfigChange}\n onPrev={() => setActiveStep('type')}\n onNext={() => setActiveStep('preview')}\n isValid={isConfigValid()}\n />\n ) : null;\n case 'preview':\n return selectedType ? (\n <ListPreviewStep listSortConfig={null} listType={selectedType} config={config} onAddToBlock={handleAddToBlock} onPrev={() => setActiveStep('configure')} />\n ) : null;\n default:\n return null;\n }\n };\n\n return (\n <Modal opened={opened} onClose={handleClose} title=\"Configure List 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\n steps={steps}\n activeStep={activeStep}\n onStepChange={setActiveStep}\n showUpdateButton={selectedType !== null && isConfigValid()}\n onUpdateBlock={handleAddToBlock}\n />\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, Card, Group, Text, Box, Button } from '@mantine/core';\nimport { ListType, ListTypeMetadata } from '../types';\nimport { getAllListTypes } from '../registry';\n\ninterface ListTypeSelectionStepProps {\n selectedType: ListType | null;\n onTypeSelect: (type: ListType) => void;\n onNext: () => void;\n}\n\nexport const ListTypeSelectionStep: React.FC<ListTypeSelectionStepProps> = ({ selectedType, onTypeSelect, onNext }) => {\n const listTypes = getAllListTypes();\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 {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={() => onTypeSelect(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\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 { ListTypeMetadata, ConfigField, SortOption, FilterOption } 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: true,\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","import { ListTypeMetadata, ConfigField, SortOption, FilterOption } 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","import { ListTypeMetadata, ConfigField, SortOption } 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","import { ListTypeMetadata, ConfigField, SortOption } 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: true,\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","import { ListTypeMetadata, ConfigField, SortOption, FilterOption } 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: true,\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","import { ListTypeMetadata, ConfigField, SortOption, FilterOption } 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: true,\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","import { ListTypeMetadata, ConfigField, SortOption, FilterOption } 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","import { ListTypeMetadata, ConfigField, SortOption, FilterOption } 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 registry',\n icon: '📜',\n};\n\nexport const proposalsConfigFields: ConfigField[] = [\n {\n key: 'relayedNodeDid',\n label: 'Relayed Node DID',\n description: 'The DID of the relayed node 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","import { ListTypeMetadata, ConfigField, SortOption, FilterOption } 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: true,\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","import { ListTypeMetadata, ConfigField, SortOption } 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","import { ListTypeMetadata, ConfigField, SortOption, FilterOption } 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","import { ListType, ListTypeMetadata, ConfigField, BaseListConfig, SortOption, FilterOption } from './types';\nimport { linkedResourcesMetadata, linkedResourcesConfigFields, linkedResourcesHandlerKey, linkedResourcesSortFields, linkedResourcesFilterFields } from './linked_resources/config';\nimport { assetsMetadata, assetsConfigFields, assetsHandlerKey, assetsSortFields, assetsFilterFields } from './assets/config';\nimport { transactionsMetadata, transactionsConfigFields, transactionsHandlerKey, transactionsSortFields } from './transactions/config';\nimport { collectionsConfigFields, collectionsHandlerKey, collectionsMetadata, collectionsSortFields } from './collections/config';\nimport { investmentsConfigFields, investmentsFilterFields, investmentsHandlerKey, investmentsMetadata, investmentsSortFields } from './investments/config';\nimport { oraclesConfigFields, oraclesFilterFields, oraclesHandlerKey, oraclesMetadata, oraclesSortFields } from './oracles/config';\nimport { podsConfigFields, podsFilterFields, podsHandlerKey, podsMetadata, podsSortFields } from './pods/config';\nimport { proposalsConfigFields, proposalsFilterFields, proposalsHandlerKey, proposalsMetadata, proposalsSortFields } from './proposals/config';\nimport { requestsConfigFields, requestsFilterFields, requestsHandlerKey, requestsMetadata, requestsSortFields } from './requests/config';\nimport { groupMembersConfigFields, groupMembersHandlerKey, groupMembersMetadata, groupMembersSortFields } from './members/config';\nimport { validatorsConfigFields, validatorsFilterFields, validatorsHandlerKey, validatorsMetadata, validatorsSortFields } from './validators/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};\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","import React from 'react';\nimport { Stack, TextInput, Text, Button, Group, Switch } from '@mantine/core';\nimport { ListType, ConfigField } from '../types';\nimport { getListTypeConfig } from '../registry';\nimport { useBlocknoteHandlers } from '../../../context/BlocknoteContext';\n\ninterface ListConfigurationStepProps {\n listType: ListType;\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 ListConfigurationStep: React.FC<ListConfigurationStepProps> = ({ listType, config, onConfigChange, onPrev, onNext, isValid }) => {\n const typeConfig = getListTypeConfig(listType);\n const handlers = useBlocknoteHandlers();\n\n const handleAutoFill = async () => {\n if (listType === 'transactions' && handlers?.getCurrentUser) {\n try {\n const user = await handlers.getCurrentUser();\n onConfigChange('address', user.address);\n } catch (error) {\n console.error('Failed to get current user:', error);\n }\n }\n };\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 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 {typeConfig.configFields.map((field: ConfigField) => (\n <div key={field.key}>\n {renderListConfigField(field)}\n\n {/* Auto-fill button for transactions */}\n {field.key === 'address' && listType === 'transactions' && (\n <Button size=\"xs\" variant=\"subtle\" mt=\"xs\" onClick={handleAutoFill}>\n Use Current User Address\n </Button>\n )}\n </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, { useState, useEffect } from 'react';\nimport { Stack, Text, Button, Alert, Loader, Center, Group } from '@mantine/core';\nimport { ListType, ListData, BaseListConfig } from '../types';\nimport { getListTypeConfig } from '../registry';\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} 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/CollectionsList';\nimport { RequestsList } from '../requests/RequestsList';\nimport { MembersList } from '../members/MembersList';\nimport { ValidatorsList } from '../validators/ValidatorsList';\nimport ListPagination from '../ListPagination';\nimport { DEFAULT_PAGE_SIZE } from '@/core/constants';\n\ninterface ListPreviewStepProps {\n listType: ListType;\n config: Record<string, any>;\n listSortConfig: BaseListConfig<ListType>['sort'];\n onAddToBlock: () => void;\n onPrev: () => void;\n}\n\nexport const ListPreviewStep: React.FC<ListPreviewStepProps> = ({ listType, config, onAddToBlock, onPrev }) => {\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 [page, setPage] = useState<number>(1);\n const [totalPages, setTotalPages] = useState<number>(0);\n\n const typeConfig = getListTypeConfig(listType);\n const handlers = useBlocknoteHandlers();\n\n const fetchData = async () => {\n if (!handlers) return;\n\n setLoading(true);\n setError(null);\n\n try {\n let result;\n\n switch (listType) {\n case 'linked_resources':\n if (!config.did) throw new Error('DID is required');\n result = await handlers.getEntity(config.did);\n setData({ items: result.linkedResource });\n break;\n\n case 'assets':\n if (!config.collectionDid) throw new Error('Collection DID is required');\n result = await handlers.getAssets(config.collectionDid, page);\n setData({ items: result.data });\n break;\n\n case 'transactions':\n if (!config.address) throw new Error('Address is required');\n result = await handlers.getTransactions(config.address, page);\n setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));\n setData({ items: result.data });\n break;\n case 'collections':\n if (!config.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getCollections(config.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n case 'investments':\n if (!config.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getInvestments(config.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n case 'oracles':\n if (!config.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getOracles(config.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n case 'pods':\n if (!config.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getPODs(config.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n case 'proposals':\n if (!config.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getProposals(config.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n case 'requests':\n if (!config.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getRequests(config.relayedNodeDid, page);\n setData({ items: result.data });\n break;\n case 'group_members':\n if (!config.address) throw new Error('Address is required');\n if (!config.groupCoreAddress) throw new Error('Group Core Address is required');\n result = await handlers.getMembers(config.address, config.groupCoreAddress, config.withBalance, page);\n setData({ items: result.data });\n break;\n case 'validators':\n if (!config.relayedNodeDid) throw new Error('Relayer is required');\n result = await handlers.getValidators(config.relayedNodeDid, page);\n setData({ items: result.data });\n break;\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 };\n\n useEffect(() => {\n fetchData();\n }, [listType, page, config]);\n\n const renderListComponent = () => {\n if (!data) return null;\n\n switch (listType) {\n case 'linked_resources':\n return <LinkedResourcesList items={data.items as LinkedResource[]} config={config} />;\n case 'assets':\n return <AssetsList items={data.items as Asset[]} config={config} />;\n case 'transactions':\n return <TransactionsList items={data.items as Transaction[]} config={config} />;\n case 'collections':\n return <CollectionsList items={data.items as Collection[]} />;\n case 'investments':\n return <InvestmentsList items={data.items as Investment[]} />;\n case 'oracles':\n return <OraclesList items={data.items as Oracle[]} />;\n case 'pods':\n return <PodsList items={data.items as POD[]} />;\n case 'proposals':\n return <ProposalsList items={data.items as Proposal[]} />;\n case 'requests':\n return <RequestsList items={data.items as Request[]} />;\n case 'group_members':\n return <MembersList items={data.items as Member[]} />;\n case 'validators':\n return <ValidatorsList items={data.items as Validator[]} />;\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 {typeConfig.metadata.name}\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 {loading && (\n <Center py=\"xl\">\n <Stack align=\"center\" gap=\"sm\">\n <Loader size=\"md\" />\n <Text size=\"sm\" c=\"dimmed\">\n Loading preview...\n </Text>\n </Stack>\n </Center>\n )}\n\n {error && (\n <Alert color=\"red\" title=\"Failed to load preview\">\n <Stack gap=\"xs\">\n <Text size=\"sm\">{error}</Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={fetchData}>\n Retry\n </Button>\n </Stack>\n </Alert>\n )}\n\n {!loading && !error && data && (\n <>\n <div style={{ maxHeight: '400px', overflow: 'auto' }}>{renderListComponent()}</div>\n <ListPagination page={page} setPage={setPage} totalPages={totalPages} />\n </>\n )}\n\n <Group justify=\"space-between\" mt=\"md\">\n <Button variant=\"subtle\" onClick={onPrev}>\n Previous\n </Button>\n <Button onClick={onAddToBlock}>Add to Block</Button>\n </Group>\n </Stack>\n );\n};\n","import React from 'react';\nimport { Stack, Text, 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","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\" 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 { formatNumber } from '@/core/lib/formatters';\nimport ListItemCheckbox from '../ListItemCheckbox';\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 {formatNumber(v.amount)} {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","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 { 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> = ({\n steps,\n activeStep,\n onStepChange,\n showUpdateButton = false,\n onUpdateBlock,\n}) => {\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 { 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 console.log('Changing sort: ', direction);\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 { 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' }}>\n {block.props.did ? (\n <p>Loading overview for DID: {block.props.did}</p>\n ) : (\n <p>Enter a DID to load overview data</p>\n )}\n </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 address: 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 { ProposalVoteBlock } from './ProposalVoteBlock';\nimport type { IxoBlockProps } from '../../../core/types';\n\nexport const ProposalVoteBlockSpec = createReactBlockSpec(\n {\n type: 'proposalVote' as const,\n propSchema: {\n // Dependency Configuration - stores what this block depends on\n dependsOn: {\n default: JSON.stringify({\n proposal: {\n blockId: '',\n subscribes: {\n proposalId: true,\n },\n },\n }),\n },\n\n // Legacy dependency fields (for backward compatibility)\n proposalBlockId: {\n default: '',\n },\n hasDependencies: {\n default: true,\n },\n dependencies: {\n default: '',\n },\n\n // Display props (collaborative)\n title: {\n default: '',\n },\n subtitle: {\n default: '',\n },\n icon: {\n default: 'checklist',\n },\n status: {\n default: 'open',\n },\n daysLeft: {\n default: 0,\n },\n\n // Contract address (cached for performance)\n proposalContractAddress: {\n default: '',\n },\n\n // Conditions\n conditions: {\n default: '',\n },\n },\n content: 'none',\n },\n {\n render: (props) => {\n const ixoProps = props as unknown as IxoBlockProps;\n return <ProposalVoteBlock {...ixoProps} />;\n },\n }\n);\n","import React from 'react';\nimport type { IxoBlockProps } from '../../../core/types';\nimport { ProposalVoteTemplateView } from './template/TemplateView';\nimport { ProposalVoteFlowView } from './flow/FlowView';\nimport { useBlockConditions } from '../hooks/useBlockConditions';\nimport { parseConditionConfig, hasVisibilityConditions, hasEnableConditions } from '../utils/conditionUtils';\nimport { useBlocknoteContext } from '../../context/BlocknoteContext';\n\nexport interface ProposalVoteBlockSettings {\n title: string;\n subtitle: string;\n icon: string;\n status: string;\n daysLeft: number;\n}\n\nexport interface ProposalVoteBlockProps {\n block: any;\n editor: any;\n}\n\nexport function ProposalVoteBlock({ editor, block }: IxoBlockProps) {\n const { editable } = useBlocknoteContext();\n const { actions } = useBlockConditions(block, editor);\n\n console.log('Rendering ProposalVoteBlock with actions:', actions);\n\n // Template mode - always show\n if (editable) {\n return <ProposalVoteTemplateView 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 console.log('[ProposalVoteBlock] Hiding block - visibility conditions exist but none passed');\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 console.log('[ProposalVoteBlock] Enable state:', {\n blockId: block.id,\n hasEnable,\n enableActionExists,\n shouldDisable,\n actions,\n });\n\n return (\n <ProposalVoteFlowView\n block={block}\n editor={editor}\n isDisabled={\n shouldDisable\n ? {\n isDisabled: 'disable',\n message: 'Voting is currently disabled by conditions',\n }\n : undefined\n }\n />\n );\n}\n\n// Export as default for backwards compatibility\nexport default ProposalVoteBlock;\n","import React, { useMemo } from 'react';\nimport { TemplateConfig } from './TemplateConfig';\nimport { Card, Group, Stack, Text, ActionIcon, Badge } from '@mantine/core';\nimport type { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport type { IconKey } from '@/mantine/utils/iconMap';\n\nconst PROPOSAL_VOTE_TEMPLATE_PANEL_ID = 'proposal-vote-template-panel';\n\nconst getStatusColor = (status: string) => {\n switch (status) {\n case 'open':\n return '#4dabf7';\n case 'passed':\n return '#51cf66';\n case 'rejected':\n return '#ff6b6b';\n case 'executed':\n return '#ffd43b';\n case 'closed':\n return '#868e96';\n default:\n return '#adb5bd';\n }\n};\n\nexport const ProposalVoteTemplateView = ({ editor, block }: IxoBlockProps) => {\n const panelId = `${PROPOSAL_VOTE_TEMPLATE_PANEL_ID}-${block.id}`;\n\n const panelContent = useMemo(\n () => <TemplateConfig editor={editor} block={block} />,\n [editor, block]\n );\n\n const { open } = usePanel(panelId, panelContent);\n\n return (\n <Card\n withBorder\n padding=\"md\"\n radius=\"md\"\n style={{ width: '100%', cursor: 'pointer' }}\n onClick={open}\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 {block.props.title || 'Proposal Vote'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {block.props.subtitle || 'Cast your vote'}\n </Text>\n </Stack>\n </Group>\n\n <Badge color={getStatusColor(block.props.status || 'open')} variant=\"filled\" size=\"sm\">\n {(block.props.status || 'open').toUpperCase()}\n </Badge>\n </Group>\n </Card>\n );\n};\n","import React, { useCallback, useState } from 'react';\nimport { Paper, CloseButton, Title } from '@mantine/core';\nimport type { IxoBlockProps } from '@/core/types';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { GeneralTab } from './GeneralTab';\nimport { useSharedProposal } from '../../../context';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\n\nexport const TemplateConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n const [proposalContractAddress, setProposalContractAddress] = useState<string | null>(null);\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 handleConditionsChange = useCallback(\n (conditions: string) => {\n updateProp('conditions', conditions);\n },\n [updateProp]\n );\n\n // Get proposal data if dependency is set\n const proposalBlockId = block?.props?.proposalBlockId;\n const proposalBlock = proposalBlockId\n ? editor?.document?.find((b: any) => b.id === proposalBlockId)\n : null;\n const proposalId = proposalBlock?.props?.proposalId || '';\n\n const { proposal } = useSharedProposal({\n proposalId: proposalId,\n contractAddress: proposalContractAddress || '',\n autoFetch: false, // Don't auto-fetch in template mode\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 Vote Settings</Title>\n <CloseButton onClick={closePanel} />\n </div>\n <ReusablePanel\n extraTabs={[\n {\n label: 'General',\n value: 'general',\n content: (\n <GeneralTab\n block={block}\n editor={editor}\n proposal={proposal}\n proposalContractAddress={proposalContractAddress}\n />\n ),\n },\n ]}\n context={{ editor, block }}\n onConditionsChange={handleConditionsChange}\n />\n </Paper>\n );\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Stack, Text, Group, Card, Button, Select } from '@mantine/core';\nimport type { ProposalResponse } from '../../../context/BlocknoteContext';\nimport { getDependencies, updateDependency } from '../../stores/dependencyHelpers';\n\nexport interface AvailableProposalBlock {\n id: string;\n title: string;\n description?: string;\n proposalId?: string;\n}\n\ninterface GeneralTabProps {\n block: any;\n editor: any;\n proposal?: ProposalResponse | null;\n proposalContractAddress?: string | null;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({ block, editor, proposal }) => {\n const [selectedDependency, setSelectedDependency] = useState(\n () => block?.props?.proposalBlockId || ''\n );\n const blockSupportsDependencies = block?.props?.hasDependencies === true;\n\n // Get the current dependency configuration from store\n useEffect(() => {\n if (!block) return;\n\n if (!blockSupportsDependencies) {\n setSelectedDependency(block?.props?.proposalBlockId || '');\n return;\n }\n\n const deps = getDependencies(block);\n const proposalDep = deps?.proposal;\n setSelectedDependency(proposalDep?.blockId || block.props?.proposalBlockId || '');\n }, [\n block?.id,\n blockSupportsDependencies,\n block?.props?.proposalBlockId,\n block?.props?.dependencies,\n ]);\n\n // Get available proposal blocks from the editor document\n const availableBlocks = useMemo(() => {\n if (!editor?.document) return [];\n const proposalBlocks = editor.document\n .filter((editorBlock: any) => editorBlock.type === 'proposal')\n .map((editorBlock: any) => ({\n id: editorBlock.id,\n title: editorBlock.props?.title || 'Untitled Proposal',\n description: editorBlock.props?.description,\n proposalId: editorBlock.props?.proposalId,\n }));\n\n return proposalBlocks;\n }, [editor?.document]);\n\n // Check if we have a dependency configured\n const hasDependency = Boolean(selectedDependency);\n\n // Show dropdown only if block supports dependencies and no dependency is configured yet\n const showDependencyDropdown = blockSupportsDependencies && !hasDependency;\n\n // Function to handle dependency updates\n const handleUpdateDependency = (blockId: string | null) => {\n if (!block || !blockSupportsDependencies) {\n return;\n }\n\n const nextValue = blockId || '';\n const currentValue = block.props?.proposalBlockId || '';\n\n updateDependency(editor, block, 'proposal', blockId, 'proposalVote');\n setSelectedDependency(nextValue);\n\n if (editor && typeof editor.updateBlock === 'function' && currentValue !== nextValue) {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n proposalBlockId: nextValue,\n },\n });\n }\n };\n\n return (\n <Stack gap=\"lg\">\n {/* Dependency Configuration - Only show if block supports dependencies and no dependency is set */}\n {blockSupportsDependencies && showDependencyDropdown && (\n <Stack gap=\"md\">\n <Card\n padding=\"md\"\n radius=\"md\"\n style={{\n backgroundColor: '#2a2a2a',\n border: '1px solid #ffd43b',\n color: '#f1f3f5',\n }}\n >\n <Text size=\"sm\" fw={500} style={{ color: '#ffd43b' }}>\n ⚠️ No Proposal Connected\n </Text>\n <Text size=\"xs\" style={{ color: '#adb5bd', marginTop: 4 }}>\n Please select a proposal block to connect this vote to.\n </Text>\n </Card>\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Select Proposal to Vote On\n </Text>\n <Select\n value={selectedDependency}\n onChange={(value) => handleUpdateDependency(value)}\n placeholder=\"Select a proposal to vote on...\"\n data={availableBlocks.map((block: any) => ({\n value: block.id,\n label: `${block.title || 'Untitled'}${\n block.proposalId ? ` (ID: ${block.proposalId})` : ''\n }${\n block.description\n ? ` - ${block.description.substring(0, 50)}${block.description.length > 50 ? '...' : ''}`\n : ''\n }`,\n }))}\n clearable\n styles={{\n input: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#f1f3f5',\n '&:focus': {\n borderColor: '#51cf66',\n },\n },\n dropdown: {\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n },\n option: {\n color: '#f1f3f5',\n '&[data-selected]': {\n backgroundColor: '#333',\n },\n '&[data-hovered]': {\n backgroundColor: '#333',\n },\n },\n }}\n />\n {availableBlocks.length === 0 && (\n <Text size=\"xs\" style={{ color: '#868e96' }}>\n No proposals available. Create a proposal first.\n </Text>\n )}\n </Stack>\n )}\n\n {/* Show current dependency if block supports dependencies and one is set */}\n {blockSupportsDependencies && hasDependency && (\n <Stack gap=\"md\">\n <Group justify=\"space-between\" align=\"center\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Connected Proposal\n </Text>\n <Button\n variant=\"subtle\"\n size=\"xs\"\n color=\"red\"\n onClick={() => handleUpdateDependency(null)}\n >\n Disconnect\n </Button>\n </Group>\n <Card\n padding=\"sm\"\n radius=\"md\"\n style={{ backgroundColor: '#2a2a2a', border: '1px solid #333' }}\n >\n <Text size=\"sm\" fw={500} style={{ color: '#f1f3f5' }}>\n {proposal?.proposal?.title || 'Connected Proposal'}\n </Text>\n {proposal?.proposal?.description && (\n <Text size=\"xs\" style={{ color: '#adb5bd' }}>\n {proposal.proposal.description}\n </Text>\n )}\n </Card>\n </Stack>\n )}\n </Stack>\n );\n};\n","// Dependency configuration types\nexport interface DependencyConfig {\n [blockType: string]: {\n blockId: string;\n subscribes: {\n [propName: string]: boolean;\n };\n };\n}\n\n/**\n * Get dependencies from a block's props\n * @param block The block to get dependencies from\n * @returns The parsed dependency configuration or null\n */\nexport function getDependencies(block: any): DependencyConfig | null {\n if (!block?.props?.dependencies) {\n return null;\n }\n\n try {\n // If it's already an object, return it\n if (typeof block.props.dependencies === 'object') {\n return block.props.dependencies;\n }\n // If it's a JSON string, parse it\n if (typeof block.props.dependencies === 'string') {\n return JSON.parse(block.props.dependencies);\n }\n return null;\n } catch (error) {\n console.error('[getDependencies] Failed to parse dependencies:', error);\n return null;\n }\n}\n\n/**\n * Set dependencies for a block\n * @param editor The editor instance\n * @param block The block to update\n * @param deps The dependency configuration to set\n */\nexport function setDependencies(editor: any, block: any, deps: DependencyConfig) {\n if (!editor || !block) {\n console.error('[setDependencies] Invalid editor or block');\n return;\n }\n\n // Store as JSON string in block props\n const depsString = JSON.stringify(deps);\n\n try {\n editor.updateBlock(block.id, {\n ...block,\n props: {\n ...block.props,\n dependencies: depsString,\n },\n });\n console.log('[setDependencies] Updated dependencies for block:', block.id, deps);\n } catch (error) {\n console.error('[setDependencies] Failed to update block:', error);\n }\n}\n\n/**\n * Update a specific dependency for a block\n * @param editor The editor instance\n * @param block The block to update\n * @param dependencyType The type of dependency to update\n * @param targetBlockId The ID of the target block (null to clear)\n * @param blockType The type of the block (unused, kept for compatibility)\n */\nexport function updateDependency(\n editor: any,\n block: any,\n dependencyType: string,\n targetBlockId: string | null,\n _blockType?: string\n) {\n // Get current dependencies or initialize from dependsOn prop\n const currentDeps = getDependencies(block) || {};\n\n // If no dependency config exists for this type, try to get from dependsOn prop\n if (!currentDeps[dependencyType]) {\n // Parse dependsOn prop to get the structure\n let dependsOnConfig: any = null;\n try {\n if (block?.props?.dependsOn) {\n dependsOnConfig =\n typeof block.props.dependsOn === 'string'\n ? JSON.parse(block.props.dependsOn)\n : block.props.dependsOn;\n }\n } catch (e) {\n console.error('[updateDependency] Failed to parse dependsOn:', e);\n }\n\n const dependencyDefaults = dependsOnConfig?.[dependencyType];\n\n currentDeps[dependencyType] = dependencyDefaults\n ? { ...dependencyDefaults }\n : { blockId: '', subscribes: {} };\n }\n\n // Update the blockId\n if (!targetBlockId) {\n // Clear the blockId but keep the subscribes configuration\n currentDeps[dependencyType] = {\n ...currentDeps[dependencyType],\n blockId: '',\n };\n } else {\n // Update the blockId, keeping existing subscribes\n currentDeps[dependencyType] = {\n ...currentDeps[dependencyType],\n blockId: targetBlockId,\n };\n }\n\n // Save the updated dependencies\n setDependencies(editor, block, currentDeps);\n}\n\n/**\n * Resolve dependencies for a block against the document\n * @param block The block to resolve dependencies for\n * @param document The editor document\n * @returns Object with resolved dependency values\n */\nexport function resolveDependencies(block: any, document: any[]): any {\n const deps = getDependencies(block);\n\n if (!deps || !document) {\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 = document.find(\n (docBlock: any) => docBlock.id === config.blockId && docBlock.type === depType\n );\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\n/**\n * Get default dependency configuration from block's dependsOn prop\n * @param block The block instance\n * @returns The default dependency configuration or null\n */\nexport function getDefaultDependencyConfig(block: any): DependencyConfig | null {\n if (!block?.props?.dependsOn) {\n return null;\n }\n\n try {\n const defaults =\n typeof block.props.dependsOn === 'string'\n ? JSON.parse(block.props.dependsOn)\n : block.props.dependsOn;\n\n // Return a deep clone to avoid mutations\n return JSON.parse(JSON.stringify(defaults));\n } catch (error) {\n console.error('[getDefaultDependencyConfig] Failed to parse dependsOn:', error);\n return null;\n }\n}\n\n/**\n * Initialize block with default dependencies from dependsOn prop\n * @param editor The editor instance\n * @param block The block to initialize\n * @param blockType The type of block (unused, kept for compatibility)\n */\nexport function initializeBlockDependencies(editor: any, block: any, _blockType?: string) {\n const defaults = getDefaultDependencyConfig(block);\n if (defaults && !getDependencies(block)) {\n setDependencies(editor, block, defaults);\n }\n}\n","import React, { useMemo } from 'react';\nimport { FlowConfig } from './FlowConfig';\nimport { Card, Group, Stack, Text, ActionIcon, Alert, Skeleton, Badge } from '@mantine/core';\nimport type { IxoBlockProps } from '@/core/types';\nimport { usePanel } from '@/mantine/hooks/usePanel';\nimport { useFlowBusinessLogic } from './useFlowBusinessLogic';\nimport { getIcon } from '@/mantine/utils/iconMap';\n\nconst PROPOSAL_VOTE_FLOW_PANEL_ID = 'proposal-vote-flow-panel';\n\nconst getStatusColor = (status: string) => {\n switch (status) {\n case 'open':\n return '#4dabf7';\n case 'passed':\n return '#51cf66';\n case 'rejected':\n return '#ff6b6b';\n case 'executed':\n return '#ffd43b';\n case 'closed':\n return '#868e96';\n default:\n return '#adb5bd';\n }\n};\n\ninterface FlowViewProps extends IxoBlockProps {\n isDisabled?: {\n isDisabled: 'disable';\n message?: string;\n };\n}\n\nexport const ProposalVoteFlowView = ({ block, editor, isDisabled }: FlowViewProps) => {\n const panelId = `${PROPOSAL_VOTE_FLOW_PANEL_ID}-${block.id}`;\n\n const {\n hydratedBlock,\n title,\n subtitle,\n icon,\n status,\n proposal,\n userVote,\n proposalContractAddress,\n loading,\n error,\n localError,\n handleVote,\n } = useFlowBusinessLogic({ block, editor });\n\n const panelContent = useMemo(\n () => (\n <FlowConfig\n proposal={proposal}\n userVote={userVote}\n proposalContractAddress={proposalContractAddress}\n onVote={handleVote}\n block={hydratedBlock}\n status={status}\n editor={editor}\n isDisabled={isDisabled}\n />\n ),\n [\n proposal,\n userVote,\n proposalContractAddress,\n handleVote,\n hydratedBlock,\n status,\n editor,\n isDisabled,\n ]\n );\n\n const { open } = usePanel(panelId, panelContent);\n\n return (\n <Card\n withBorder\n padding=\"md\"\n radius=\"md\"\n style={{ width: '100%', cursor: 'pointer' }}\n onClick={open}\n >\n {loading && (\n <Stack>\n <Skeleton height={20} width=\"70%\" />\n <Skeleton height={16} />\n <Skeleton height={16} width=\"40%\" />\n </Stack>\n )}\n\n {(error || localError) && (\n <Alert color=\"red\" title=\"Error\" mb=\"md\">\n {String(error || localError)}\n </Alert>\n )}\n\n {!loading && !error && !localError && (\n <Group wrap=\"nowrap\" justify=\"space-between\" align=\"center\">\n <Group wrap=\"nowrap\" align=\"center\">\n <ActionIcon\n variant=\"light\"\n color=\"blue\"\n size=\"xl\"\n radius=\"xl\"\n style={{ flexShrink: 0 }}\n >\n {getIcon(icon, 24, 1.5, 'checklist')}\n </ActionIcon>\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Text fw={500} size=\"sm\" contentEditable={false}>\n {proposal?.proposal?.title || title || 'Proposal Vote'}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" contentEditable={false}>\n {proposal?.proposal?.description || subtitle || 'Cast your vote'}\n </Text>\n </Stack>\n </Group>\n\n <Badge color={getStatusColor(status)} variant=\"filled\" size=\"sm\">\n {status.toUpperCase()}\n </Badge>\n </Group>\n )}\n </Card>\n );\n};\n","import React from 'react';\nimport { Paper, CloseButton, Title } from '@mantine/core';\nimport type { ProposalResponse, VoteResponse } from '../../../context/BlocknoteContext';\nimport { FlowGeneralTab, type VoteParams } from './GeneralTab';\nimport { ReusablePanel } from '@/mantine/components/ReusablePanel';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport type { IxoBlockProps } from '@/core/types';\n\ninterface FlowConfigProps {\n proposal?: ProposalResponse | null;\n userVote?: VoteResponse | null;\n proposalContractAddress?: string | null;\n onVote?: (voteParams: VoteParams) => void;\n block: any;\n status: string;\n editor: IxoBlockProps['editor'];\n isDisabled?: {\n isDisabled: 'disable';\n message?: string;\n };\n}\n\nexport const FlowConfig: React.FC<FlowConfigProps> = ({\n proposal,\n userVote,\n proposalContractAddress,\n onVote,\n block,\n status,\n editor,\n isDisabled,\n}) => {\n const { closePanel } = usePanelStore();\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 Vote</Title>\n <CloseButton onClick={closePanel} />\n </div>\n <ReusablePanel\n extraTabs={[\n {\n label: 'General',\n value: 'general',\n content: (\n <FlowGeneralTab\n proposal={proposal}\n userVote={userVote}\n proposalContractAddress={proposalContractAddress}\n onVote={onVote}\n block={block}\n status={status}\n isDisabled={isDisabled}\n />\n ),\n },\n ]}\n context={{ editor, block }}\n />\n </Paper>\n );\n};\n","import React, { useState } from 'react';\nimport { Stack, Text, Group, Card, Button, Progress, Box, Textarea, Tooltip } from '@mantine/core';\nimport type { ProposalResponse, 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 proposal?: ProposalResponse | null;\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 calculateTimeRemaining = (proposal?: ProposalResponse | null) => {\n if (!proposal?.proposal.expiration || 'never' in proposal.proposal.expiration) {\n return 'Never expires';\n }\n\n if ('at_height' in proposal.proposal.expiration) {\n return `Expires at block ${proposal.proposal.expiration.at_height}`;\n }\n\n if ('at_time' in proposal.proposal.expiration) {\n const timestamp = proposal.proposal.expiration.at_time;\n let expirationTime: number;\n\n if (timestamp.length > 13) {\n expirationTime = parseInt(timestamp) / 1000000;\n } else {\n expirationTime = parseInt(timestamp);\n if (timestamp.length === 10) {\n expirationTime *= 1000;\n }\n }\n\n const now = Date.now();\n const diffMs = expirationTime - now;\n const days = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n const hours = Math.floor((diffMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n const minutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60));\n\n if (diffMs <= 0) return 'Expired';\n if (days > 0) return `${days} days ${hours}h ${minutes}m`;\n return `${hours}h ${minutes}m`;\n }\n\n return 'Unknown';\n};\n\nconst calculateOutcome = (proposal?: ProposalResponse | null) => {\n if (!proposal?.proposal.votes) return '0%';\n\n const { yes, no, abstain } = proposal.proposal.votes;\n const totalVotes = parseInt(yes) + parseInt(no) + parseInt(abstain);\n\n if (totalVotes === 0) return '0%';\n\n const yesPercentage = (parseInt(yes) / totalVotes) * 100;\n return `${yesPercentage.toFixed(1)}% approve`;\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 proposal,\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 const hasSubmittedProposal = Boolean(proposal?.id);\n\n const handleSlideToSign = () => {\n if (selectedVote && proposal && proposalContractAddress) {\n onVote?.({\n proposalId: proposal.id,\n rationale: rationale.trim() || undefined,\n vote: selectedVote,\n proposalContractAddress,\n });\n setSelectedVote('');\n setRationale('');\n }\n };\n\n const hasDependency = Boolean(proposal);\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\n ? proposal?.proposal.status === 'open'\n ? 'Active'\n : proposal?.proposal.status || 'Active'\n : '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 Ends in\n </Text>\n </Group>\n <Text size=\"sm\" fw={500} style={{ color: '#f1f3f5' }}>\n {hasSubmittedProposal ? calculateTimeRemaining(proposal) : '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 Outcome\n </Text>\n </Group>\n <Text\n size=\"sm\"\n fw={500}\n style={{\n color: hasSubmittedProposal ? '#51cf66' : '#868e96',\n }}\n >\n {hasSubmittedProposal ? calculateOutcome(proposal) : '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\n ? 'linear-gradient(90deg, #51cf66 0%, #ff6b6b 100%)'\n : '#868e96',\n },\n }}\n />\n </Stack>\n </Card>\n\n {/* Vote Options - only show when proposal is submitted and open */}\n {hasDependency &&\n hasSubmittedProposal &&\n (status === 'open' || proposal?.proposal.status === '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\n key={voteType}\n label={disabled ? isDisabled?.message : undefined}\n disabled={!disabled}\n position=\"top\"\n >\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' || proposal?.proposal.status === '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 {hasDependency && !hasSubmittedProposal && (\n <Stack gap=\"lg\">\n <Stack gap=\"md\">\n {(['yes', 'no', 'no_with_veto', 'abstain'] as Vote[]).map((voteType) => (\n <Tooltip\n key={voteType}\n label=\"Proposal must be submitted before voting\"\n position=\"top\"\n >\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 and vote chosen */}\n {hasDependency &&\n hasSubmittedProposal &&\n selectedVote &&\n (status === 'open' || proposal?.proposal.status === '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 </Stack>\n );\n};\n","import { useEffect, useState, useMemo } from 'react';\nimport { useBlocknoteHandlers, useBlocknoteContext } from '../../../context/BlocknoteContext';\nimport { useSharedProposal } from '../../../context';\nimport { useBlockDependencies } from '../../hooks/useBlockDependencies';\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 UseFlowBusinessLogicProps {\n block: IxoBlockProps['block'];\n editor: IxoBlockProps['editor'];\n}\n\nexport const useFlowBusinessLogic = ({ block, editor }: UseFlowBusinessLogicProps) => {\n const { blockRequirements } = useBlocknoteContext();\n const [proposalContractAddress, setProposalContractAddress] = useState<string | null>(null);\n const [localError, setLocalError] = useState<string | null>(null);\n const [userVote, setUserVote] = useState<VoteResponse | null>(null);\n\n // Hydrate block with user props\n const hydratedBlock = useMemo(() => {\n if (editor && typeof editor.getUserProps === 'function') {\n return {\n ...block,\n userProps: editor.getUserProps(block),\n };\n }\n return block;\n }, [block, editor]);\n\n // Get block dependencies\n const dependencies = useBlockDependencies(\n hydratedBlock,\n 'proposalVote',\n editor,\n hydratedBlock.props.hasDependencies\n );\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 const requirements = blockRequirements?.proposal;\n\n // Get proposal dependency\n const proposalDependency = dependencies?.proposal;\n const proposalBlock = proposalDependency?.blockId\n ? editor?.document?.find((b: any) => b.id === proposalDependency.blockId)\n : null;\n\n // Get proposalId from the proposal block's userProps\n const proposalId =\n (proposalBlock &&\n editor &&\n typeof editor.getUserProps === 'function' &&\n editor.getUserProps(proposalBlock)?.proposalId) ||\n '';\n\n // Fetch proposal data\n const { proposal, loading, error } = useSharedProposal({\n proposalId: proposalId,\n contractAddress: proposalContractAddress || '',\n autoFetch: !!proposalContractAddress && !!proposalId,\n });\n\n // Fetch proposal contract address\n useEffect(() => {\n if (!handlers || !requirements?.coreAddress || !proposalId) {\n return;\n }\n\n const fetchPolicyAddress = async () => {\n try {\n const { proposalContractAddress: fetchedProposalContractAddress } =\n await handlers.getProposalContractAddress({\n coreAddress: requirements.coreAddress,\n });\n setProposalContractAddress(fetchedProposalContractAddress);\n } catch (err) {\n console.error('Failed to fetch proposal contract address:', err);\n setLocalError('Failed to load proposal contract address');\n }\n };\n\n fetchPolicyAddress();\n }, [handlers, requirements?.coreAddress, proposalId]);\n\n // Load user vote data\n useEffect(() => {\n if (!handlers || !proposalContractAddress || !proposalId || !proposal) {\n return;\n }\n\n const loadUserVote = async () => {\n try {\n const user = await handlers.getCurrentUser();\n const vote = await handlers.getVote(proposalContractAddress, proposalId, user.address);\n setUserVote(vote);\n } catch (err) {\n console.error('Failed to load user vote:', err);\n }\n };\n\n loadUserVote();\n }, [handlers, proposalContractAddress, proposalId, proposal]);\n\n const updateProp = (key: string, value: any) => {\n editor.updateBlock(hydratedBlock, {\n props: {\n ...hydratedBlock.props,\n [key]: value,\n },\n });\n };\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(\n voteParams.proposalContractAddress,\n voteParams.proposalId.toString(),\n user.address\n );\n setUserVote(vote);\n } catch (err) {\n console.error('Failed to vote:', err);\n setLocalError('Failed to submit vote');\n }\n };\n\n const handleIconChange = (icon: string) => {\n updateProp('icon', icon);\n };\n\n const status = proposal?.proposal?.status || hydratedBlock.props.status || 'open';\n\n return {\n // Block props\n hydratedBlock,\n title: hydratedBlock.props.title,\n subtitle: hydratedBlock.props.subtitle,\n icon: hydratedBlock.props.icon,\n status,\n // Proposal data\n proposal,\n userVote,\n proposalContractAddress,\n // Loading states\n loading,\n // Errors\n error,\n localError,\n // Handlers\n handleVote,\n handleIconChange,\n };\n};\n","import { useMemo } from 'react';\nimport { useDependsOn } from './useDependsOn';\nimport { initializeBlockDependencies } from '../stores/dependencyHelpers';\n\n/**\n * Hook for managing block dependencies\n * This is a wrapper around useDependsOn with initialization logic\n *\n * @param block The block instance (or blockId for legacy)\n * @param blockType The type of block (unused in new implementation)\n * @param editor The editor instance\n * @param hasDependencies Whether the block supports dependencies (unused in new implementation)\n * @returns Resolved dependencies object\n */\nexport function useBlockDependencies(\n block: any,\n blockType: string,\n editor: any,\n hasDependencies: boolean = true\n) {\n // Extract stable references from editor\n const editorDocument = editor?.document;\n const updateBlock = editor?.updateBlock;\n\n // Handle legacy usage where blockId string was passed instead of block object\n const blockObj =\n typeof block === 'string' ? editorDocument?.find((b: any) => b.id === block) : block;\n\n console.log(\n `[useBlockDependencies] Hook called for blockId: ${blockObj?.id}, blockType: ${blockType}`\n );\n\n // Early return if block doesn't support dependencies (legacy check)\n if (!hasDependencies || !blockObj?.props?.dependsOn) {\n console.log(\n `[useBlockDependencies] Block ${blockObj?.id} doesn't support dependencies, returning {}`\n );\n return {};\n }\n\n // Initialize dependencies if needed (only runs once per block)\n useMemo(() => {\n if (updateBlock && blockObj && !blockObj.props.dependencies) {\n console.log(`[useBlockDependencies] Initializing dependencies for ${blockObj.id}`);\n // Pass editor object for initialization, but don't depend on it\n initializeBlockDependencies(editor, blockObj, blockType);\n }\n }, [blockObj?.id, blockType, updateBlock]); // Use updateBlock function as stable reference\n\n // Use the new dependsOn hook (read-only) - pass editor but don't depend on it in this hook\n const { resolvedDependencies } = useDependsOn(blockObj, editor);\n\n console.log(\n `[useBlockDependencies] Returning resolved dependencies for ${blockObj?.id}:`,\n resolvedDependencies\n );\n return resolvedDependencies;\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 =\n typeof block.props.dependsOn === 'string'\n ? JSON.parse(block.props.dependsOn)\n : block.props.dependsOn;\n\n console.log('[useDependsOn] Parsed dependsOn config:', config);\n return config as DependencyConfig;\n } catch (error) {\n console.error('[useDependsOn] Failed to parse dependsOn prop:', 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(\n (docBlock: any) => docBlock.id === config.blockId && docBlock.type === depType\n );\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 console.log('[useDependsOn] Resolved dependencies:', resolved);\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 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: [\n 'draft',\n 'open',\n 'passed',\n 'rejected',\n 'executed',\n 'closed',\n 'execution_failed',\n 'veto_timelock',\n ],\n },\n title: {\n default: '',\n },\n description: {\n default: '',\n },\n icon: {\n default: 'file-text',\n },\n proposalId: {\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';\n\nexport type ProposalBlockProps = IxoBlockProps;\n\nexport function ProposalBlock({ editor, block }: ProposalBlockProps) {\n // Template mode - always show\n if (editor.isEditable) {\n return <ProposalTemplateView editor={editor} block={block} />;\n }\n\n // Flow mode\n return <ProposalFlowView block={block} editor={editor} />;\n}\n\n// Export as default for backwards compatibility\nexport default ProposalBlock;\n","import React, { useMemo } from 'react';\nimport { TemplateConfig } from './TemplateConfig';\nimport { 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';\nimport type { IconKey } 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(\n () => <TemplateConfig editor={editor} block={block} />,\n [editor, block]\n );\n\n const { open } = usePanel(panelId, panelContent);\n\n return (\n <Card\n withBorder\n padding=\"md\"\n radius=\"md\"\n style={{ width: '100%', cursor: 'pointer' }}\n onClick={open}\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, '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 { 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 icon={block.props.icon || '📝'}\n onTitleChange={(value) => updateProp('title', value)}\n onDescriptionChange={(value) => updateProp('description', value)}\n onIconChange={(value) => updateProp('icon', value)}\n />\n ),\n },\n ]}\n context={{ editor, block }}\n />\n </Paper>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Stack, Text, TextInput, Textarea } from '@mantine/core';\n\ninterface GeneralTabProps {\n title: string;\n description: string;\n icon: string;\n onTitleChange: (value: string) => void;\n onDescriptionChange: (value: string) => void;\n onIconChange: (value: string) => void;\n}\n\nexport const GeneralTab: React.FC<GeneralTabProps> = ({\n title,\n description,\n icon,\n onTitleChange,\n onDescriptionChange,\n onIconChange,\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 [localIcon, setLocalIcon] = useState(icon || '📝');\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 setLocalIcon(icon || '📝');\n }, [icon]);\n\n return (\n <Stack gap=\"lg\">\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600} style={{ color: '#f1f3f5' }}>\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 styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n },\n }}\n />\n </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600} style={{ color: '#f1f3f5' }}>\n Icon\n </Text>\n <TextInput\n placeholder=\"e.g. 📝\"\n value={localIcon}\n onChange={(event) => {\n const newIcon = event.currentTarget.value;\n setLocalIcon(newIcon);\n onIconChange(newIcon);\n }}\n styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n fontSize: '24px',\n textAlign: 'center',\n },\n }}\n />\n </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600} style={{ color: '#f1f3f5' }}>\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 styles={{\n input: {\n backgroundColor: '#1a1a1a',\n borderColor: '#333',\n color: '#f1f3f5',\n },\n }}\n />\n </Stack>\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 {\n title,\n description,\n icon,\n proposalId,\n status,\n isFetching,\n isExecuting,\n fetchError,\n executionError,\n handleExecuteProposal,\n handleIconChange,\n } = useFlowBusinessLogic({ block, editor });\n\n const panelContent = useMemo(() => <FlowConfig editor={editor} block={block} />, [editor, block]);\n\n const { open } = usePanel(panelId, panelContent);\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 />\n );\n};\n","import React from 'react';\nimport { Card, Group, Stack, Text, Box, Skeleton, Badge, Button, ActionIcon } from '@mantine/core';\nimport { getIcon } from '@/mantine/utils/iconMap';\nimport type { IconKey } 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}\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 iconPlaceholder,\n status = 'open',\n proposalId,\n isFetching,\n error,\n onClick,\n onIconChange,\n onExecute,\n isExecuting = 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\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 mt=\"xs\"\n w=\"fit-content\"\n >\n Execute\n </Button>\n )}\n </Stack>\n </Group>\n </Group>\n )}\n </Card>\n );\n};\n","import React, { useCallback, useState } from 'react';\nimport {\n Paper,\n CloseButton,\n Title,\n Stack,\n TextInput,\n Textarea,\n Button,\n Text,\n Card,\n} from '@mantine/core';\nimport { IxoBlockProps } from '@/core/types';\nimport { usePanelStore } from '@/mantine/hooks/usePanel';\nimport { useBlocknoteContext } from '../../../context/BlocknoteContext';\nimport { useFlowBusinessLogic } from './useFlowBusinessLogic';\n\nexport const FlowConfig = ({ editor, block }: IxoBlockProps) => {\n const { closePanel } = usePanelStore();\n const { blockRequirements } = useBlocknoteContext();\n const coreAddress = blockRequirements?.proposal?.coreAddress;\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 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 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}>Create Proposal</Title>\n <CloseButton onClick={closePanel} />\n </div>\n\n <Stack gap=\"lg\" style={{ flex: 1, overflow: 'auto' }}>\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\n padding=\"md\"\n radius=\"md\"\n withBorder\n style={{ borderColor: 'var(--mantine-color-green-6)' }}\n >\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\n fullWidth\n onClick={handleCreateProposal}\n disabled={isProposalCreated}\n loading={isCreating}\n >\n {isProposalCreated ? 'Proposal Created' : 'Create Proposal'}\n </Button>\n </Stack>\n </Paper>\n );\n};\n","import { useEffect, useState } from 'react';\nimport { useBlocknoteHandlers, useBlocknoteContext } from '../../../context/BlocknoteContext';\nimport { useSharedProposal } from '../../../context';\nimport type { ChainProposalStatus } from '../components/OnChainProposalCard';\nimport type { IxoBlockProps } from '@/core/types';\n\nconst CHAIN_STATUSES: ChainProposalStatus[] = [\n 'open',\n 'passed',\n 'rejected',\n 'executed',\n 'closed',\n 'execution_failed',\n 'veto_timelock',\n];\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 { blockRequirements } = useBlocknoteContext();\n const coreAddress = blockRequirements?.proposal?.coreAddress;\n\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\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 } =\n 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 (\n coreAddress: string,\n localTitle: string,\n localDescription: string\n ): Promise<string> => {\n if (!handlers) {\n throw new Error('Handlers not available');\n }\n\n // First get the pre-proposal contract address\n const { preProposalContractAddress } = await handlers.getPreProposalContractAddress({\n coreAddress,\n });\n\n const params = {\n preProposalContractAddress,\n title: localTitle,\n description: localDescription,\n };\n\n const createdProposalId = await handlers.createProposal(params);\n\n // Update the block's proposalId property\n updateBlockProps({ proposalId: createdProposalId });\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 React from 'react';\nimport { createReactBlockSpec } from '@blocknote/react';\nimport { ProposalActionsBlock } from './ProposalActionsBlock';\n\nexport const ProposalActionsBlockSpec = createReactBlockSpec(\n {\n type: 'proposalActions' as const,\n propSchema: {\n // Dependency Configuration - stores what this block depends on\n dependsOn: {\n default: JSON.stringify({\n proposal: {\n blockId: '',\n subscribes: {\n proposalId: true,\n createdProposalId: true,\n },\n },\n }),\n },\n\n // Legacy dependency fields (for backward compatibility)\n proposalBlockId: {\n default: '',\n },\n hasDependencies: {\n default: true,\n },\n dependencies: {\n default: '',\n },\n\n // Actions data\n actions: {\n default: '[]',\n },\n },\n content: 'none',\n },\n {\n render: (props) => <ProposalActionsBlock {...props} />,\n }\n);\n","import React, { useCallback } from 'react';\nimport { ActionsCard } from './components/ActionsCard';\nimport { BlockNoteEditor } from '@blocknote/core';\nimport { ProposalAction } from '../../context/types';\n\nexport interface ProposalActionsBlockProps {\n block: any;\n editor: BlockNoteEditor<any, any, any>;\n}\n\nexport const ProposalActionsBlock: React.FC<ProposalActionsBlockProps> = ({ block, editor }) => {\n // Get the proposal from dependencies if available\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 stringifyActions = (actions: ProposalAction[]): string => {\n return JSON.stringify(actions);\n };\n\n const storedActionsJson: string = block?.props?.actions || '[]';\n const actions = parseActions(storedActionsJson);\n\n const updateActions = useCallback(\n (newActions: ProposalAction[]) => {\n editor.updateBlock(block, {\n props: {\n actions: stringifyActions(newActions),\n },\n });\n },\n [block, editor]\n );\n\n const handleAddAction = useCallback(() => {}, []);\n\n const handleEditAction = useCallback(() => {}, []);\n\n const handleRemoveAction = useCallback(\n (index: number) => {\n const newActions = actions.filter((_, i) => i !== index);\n updateActions(newActions);\n },\n [actions, updateActions]\n );\n\n const handleCardClick = useCallback(() => {}, []);\n\n return (\n <ActionsCard actions={actions} isSelected={true} onClick={handleCardClick} onAddAction={handleAddAction} onEditAction={handleEditAction} onRemoveAction={handleRemoveAction} />\n );\n};\n","import React from 'react';\nimport { Card, Group, Text, Badge, Stack, ActionIcon, Button, Box, ScrollArea } from '@mantine/core';\nimport { ProposalAction } from '../../../context/types';\n\ninterface ActionsCardProps {\n actions: ProposalAction[];\n isSelected: boolean;\n onClick: () => void;\n onAddAction: () => void;\n onEditAction: (index: number) => void;\n onRemoveAction: (index: number) => void;\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, onAddAction, onEditAction, onRemoveAction }) => {\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 <Group align=\"flex-start\" gap=\"md\" style={{ flex: 1 }}>\n <Box\n style={{\n width: 48,\n height: 48,\n borderRadius: '50%',\n backgroundColor: '#2a2a2a',\n border: '1px solid #333',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '20px',\n }}\n >\n 📋\n </Box>\n\n <Stack gap=\"xs\" style={{ flex: 1 }}>\n <Group justify=\"space-between\" align=\"center\">\n <Text size=\"md\" fw={600} style={{ color: '#f1f3f5' }}>\n Proposal Actions ({actions.length})\n </Text>\n <Button\n size=\"xs\"\n variant=\"light\"\n className=\"action-button\"\n onClick={(e) => {\n e.stopPropagation();\n onAddAction();\n }}\n style={{\n backgroundColor: '#2a2a2a',\n borderColor: '#333',\n color: '#4dabf7',\n }}\n >\n Add Action\n </Button>\n </Group>\n\n {actions.length === 0 ? (\n <Text size=\"sm\" style={{ color: '#868e96' }}>\n No actions added yet. Click \"Add Action\" to get started.\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 <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 </Group>\n </Card>\n ))}\n </Stack>\n </ScrollArea>\n )}\n </Stack>\n </Group>\n </Group>\n </Card>\n );\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Stack, Select, Button, Group, Text, Card, Badge, Divider, ScrollArea, Alert, Tabs, SimpleGrid, Paper } from '@mantine/core';\nimport { ProposalAction } from '../../context/types';\nimport { getDependencies, updateDependency } from '../stores/dependencyHelpers';\nimport { getActionConfig, getCategorizedActions } from './registry/actionRegistry';\nimport { ACTION_CATEGORIES } from './registry/categories';\nimport { ActionTypeConfig } from './registry/types';\n\ninterface ProposalActionsDrawerProps {\n actions: ProposalAction[];\n editingIndex: number | null;\n onSave: (action: ProposalAction) => void;\n onCancel: () => void;\n editor?: any;\n block?: any;\n proposal?: any;\n isTemplateMode?: boolean;\n}\n\ninterface AvailableProposalBlock {\n id: string;\n title: string;\n description?: string;\n proposalId?: string;\n}\n\nexport const ProposalActionsDrawer: React.FC<ProposalActionsDrawerProps> = ({\n actions,\n editingIndex,\n onSave,\n onCancel,\n editor,\n block,\n proposal: _proposal,\n isTemplateMode = false,\n}) => {\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 // Dependency management state\n const [selectedDependency, setSelectedDependency] = useState(() => block?.props?.proposalBlockId || '');\n const blockSupportsDependencies = block?.props?.hasDependencies === true;\n\n // Get available proposal blocks from the editor document (computed directly from document state)\n const availableBlocks = useMemo((): AvailableProposalBlock[] => {\n if (!editor?.document) return [];\n return editor.document\n .filter((editorBlock: any) => editorBlock.type === 'proposal')\n .map((editorBlock: any) => ({\n id: editorBlock.id,\n title: editorBlock.props?.title || 'Untitled Proposal',\n description: editorBlock.props?.description,\n proposalId: editorBlock.props?.proposalId,\n }));\n }, [editor?.document]); // Re-compute when document changes (via Yjs)\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 // Update dependency state when block props change\n useEffect(() => {\n if (!block) return;\n\n if (!blockSupportsDependencies) {\n setSelectedDependency(block?.props?.proposalBlockId || '');\n return;\n }\n\n const deps = getDependencies(block);\n const proposalDep = deps?.proposal;\n setSelectedDependency(proposalDep?.blockId || block.props?.proposalBlockId || '');\n }, [block?.id, blockSupportsDependencies, block?.props?.proposalBlockId]);\n\n // Function to update the dependency\n const handleUpdateDependency = (blockId: string | null) => {\n if (!block || !blockSupportsDependencies) {\n return;\n }\n\n const nextValue = blockId || '';\n const currentValue = block.props?.proposalBlockId || '';\n\n updateDependency(editor, block, 'proposal', blockId, 'proposalActions');\n setSelectedDependency(nextValue);\n\n if (editor && typeof editor.updateBlock === 'function' && currentValue !== nextValue) {\n editor.updateBlock(block, {\n props: {\n ...block.props,\n proposalBlockId: nextValue,\n },\n });\n }\n };\n\n const hasDependency = Boolean(selectedDependency);\n const showDependencyDropdown = isTemplateMode && blockSupportsDependencies && !hasDependency;\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 const 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\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 {/* Dependency Selection for Template Mode */}\n {isTemplateMode && blockSupportsDependencies && (\n <>\n {showDependencyDropdown ? (\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Select Proposal Block\n </Text>\n <Select\n placeholder=\"Choose a proposal block\"\n data={availableBlocks.map((block) => ({\n value: block.id,\n label: block.title,\n }))}\n value={selectedDependency}\n onChange={(value) => handleUpdateDependency(value)}\n styles={selectStyles}\n />\n {availableBlocks.length === 0 && (\n <Alert color=\"yellow\" style={{ backgroundColor: '#2a2a2a', borderColor: '#ffd43b' }}>\n <Text size=\"sm\" style={{ color: '#ffd43b' }}>\n No proposal blocks found. Create a proposal block first.\n </Text>\n </Alert>\n )}\n </Stack>\n ) : hasDependency ? (\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={500} style={{ color: '#adb5bd' }}>\n Connected to Proposal\n </Text>\n <Card\n withBorder\n padding=\"xs\"\n style={{\n backgroundColor: '#2a2a2a',\n borderColor: '#51cf66',\n }}\n >\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n {availableBlocks.find((b) => b.id === selectedDependency)?.title || 'Selected Proposal'}\n </Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={() => handleUpdateDependency(null)} style={{ color: '#ff6b6b' }}>\n Disconnect\n </Button>\n </Group>\n </Card>\n </Stack>\n ) : null}\n <Divider color=\"#333\" />\n </>\n )}\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}>\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 address: 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>({ address: '', weight: 1 });\n const [newRemoveAddress, setNewRemoveAddress] = useState('');\n\n const handleAddMember = () => {\n if (!newMember.address) return;\n onChange({\n ...data,\n add: [...(data.add || []), { ...newMember }],\n });\n setNewMember({ address: '', 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.address.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.address} onChange={(e) => setNewMember({ ...newMember, address: 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\n label=\"ID\"\n placeholder=\"did:ixo:entity:abc123...\"\n value={data.id}\n onChange={(e) => onChange({ ...data, id: e.target.value })}\n required\n styles={inputStyles}\n />\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\n label=\"Address\"\n placeholder=\"ixo1...\"\n value={data.address}\n onChange={(e) => onChange({ ...data, address: e.target.value })}\n required\n styles={inputStyles}\n />\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\n label=\"Recipient Address\"\n placeholder=\"ixo1...\"\n value={data.to}\n onChange={(e) => onChange({ ...data, to: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\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\n key={index}\n withBorder\n padding=\"xs\"\n style={{ backgroundColor: '#2a2a2a', borderColor: '#333' }}\n >\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n {fund.amount} {fund.denom}\n </Text>\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => handleRemoveFund(index)}\n style={{ color: '#ff6b6b' }}\n >\n Remove\n </Button>\n </Group>\n </Card>\n ))}\n\n <Group grow>\n <TextInput\n placeholder=\"Amount\"\n value={newFund.amount}\n onChange={(e) => setNewFund({ ...newFund, amount: e.currentTarget.value })}\n styles={inputStyles}\n />\n <TextInput\n placeholder=\"Denom (e.g., uixo)\"\n value={newFund.denom}\n onChange={(e) => setNewFund({ ...newFund, denom: e.currentTarget.value })}\n styles={inputStyles}\n />\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\n 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>> = ({\n data,\n onChange,\n}) => {\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\n label=\"Token ID\"\n placeholder=\"1\"\n value={data.tokenId}\n onChange={(e) => onChange({ ...data, tokenId: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\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>> = ({\n data,\n onChange,\n}) => {\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\n label=\"Token ID\"\n placeholder=\"1\"\n value={data.tokenId}\n onChange={(e) => onChange({ ...data, tokenId: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\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>> = ({\n data,\n onChange,\n}) => {\n return (\n <Stack gap=\"md\">\n <Radio.Group\n label=\"Action\"\n value={data.adding ? 'add' : 'remove'}\n onChange={(value) => onChange({ ...data, adding: value === 'add' })}\n >\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>> = ({\n data,\n onChange,\n}) => {\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\n label=\"Label\"\n placeholder=\"My Contract\"\n value={data.label}\n onChange={(e) => onChange({ ...data, label: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\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\n key={index}\n withBorder\n padding=\"xs\"\n style={{ backgroundColor: '#2a2a2a', borderColor: '#333' }}\n >\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n {fund.amount} {fund.denom}\n </Text>\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => handleRemoveFund(index)}\n style={{ color: '#ff6b6b' }}\n >\n Remove\n </Button>\n </Group>\n </Card>\n ))}\n\n <Group grow>\n <TextInput\n placeholder=\"Amount\"\n value={newFund.amount}\n onChange={(e) => setNewFund({ ...newFund, amount: e.currentTarget.value })}\n styles={inputStyles}\n />\n <TextInput\n placeholder=\"Denom (e.g., uixo)\"\n value={newFund.denom}\n onChange={(e) => setNewFund({ ...newFund, denom: e.currentTarget.value })}\n styles={inputStyles}\n />\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>> = ({\n data,\n onChange,\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 <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>> = ({\n data,\n onChange,\n}) => {\n return (\n <Stack gap=\"md\">\n <Radio.Group\n label=\"Action\"\n value={data.adding ? 'add' : 'remove'}\n onChange={(value) => onChange({ ...data, adding: value === 'add' })}\n >\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>> = ({\n data,\n onChange,\n}) => {\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\n key={index}\n withBorder\n padding=\"xs\"\n style={{ backgroundColor: '#2a2a2a', borderColor: '#333' }}\n >\n <Stack gap=\"xs\">\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n {subDao.addr}\n </Text>\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => handleRemoveFromAddList(index)}\n style={{ color: '#ff6b6b' }}\n >\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\n placeholder=\"SubDAO Address\"\n value={newSubDao.addr}\n onChange={(e) => setNewSubDao({ ...newSubDao, addr: e.currentTarget.value })}\n styles={inputStyles}\n />\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\n key={index}\n withBorder\n padding=\"xs\"\n style={{ backgroundColor: '#2a2a2a', borderColor: '#333' }}\n >\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n {subDao.address}\n </Text>\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => handleRemoveFromRemoveList(index)}\n style={{ color: '#ff6b6b' }}\n >\n Remove\n </Button>\n </Group>\n </Card>\n ))}\n\n <Group grow>\n <TextInput\n placeholder=\"SubDAO Address to Remove\"\n value={newRemoveAddress}\n onChange={(e) => setNewRemoveAddress(e.currentTarget.value)}\n styles={inputStyles}\n />\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>> = ({\n data,\n onChange,\n}) => {\n return (\n <Stack gap=\"md\">\n <TextInput\n label=\"DAO Name\"\n placeholder=\"My DAO\"\n value={data.name}\n onChange={(e) => onChange({ ...data, name: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\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>> = ({\n data,\n onChange,\n}) => {\n return (\n <Stack gap=\"md\">\n <Radio.Group\n label=\"Action\"\n value={data.setting ? 'set' : 'remove'}\n onChange={(value) => onChange({ ...data, setting: value === 'set' })}\n >\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\n label=\"Storage Key\"\n placeholder=\"config_key\"\n value={data.key}\n onChange={(e) => onChange({ ...data, key: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\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>> = ({\n data,\n onChange,\n}) => {\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\n key={index}\n withBorder\n padding=\"xs\"\n style={{ backgroundColor: '#2a2a2a', borderColor: '#333' }}\n >\n <Group justify=\"space-between\">\n <Text size=\"sm\" style={{ color: '#f1f3f5' }}>\n Message {index + 1}\n </Text>\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => handleRemoveMessage(index)}\n style={{ color: '#ff6b6b' }}\n >\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>> = ({\n data,\n onChange,\n}) => {\n return (\n <Stack gap=\"md\">\n <TextInput\n label=\"DID\"\n placeholder=\"did:ixo:...\"\n value={data.did}\n onChange={(e) => onChange({ ...data, did: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\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>> = ({\n data,\n onChange,\n}) => {\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<\n ActionFormProps<UpdatePreProposeConfigData>\n> = ({ 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>> = ({\n data,\n onChange,\n}) => {\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()}\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>> = ({\n data,\n onChange,\n}) => {\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>> = ({\n data,\n onChange,\n}) => {\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>> = ({\n data,\n onChange,\n}) => {\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\n label=\"Amount\"\n placeholder=\"1000\"\n value={data.amount}\n onChange={(e) => onChange({ ...data, amount: e.currentTarget.value })}\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 { 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>> = ({\n data,\n onChange,\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 <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\n label=\"Amount\"\n placeholder=\"1000\"\n value={data.amount}\n onChange={(e) => onChange({ ...data, amount: e.currentTarget.value })}\n required\n styles={inputStyles}\n />\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>> = ({\n data,\n onChange,\n}) => {\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) =>\n onChange({ ...data, validatorActionType: value as ValidatorActionType })\n }\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 '../components/SpendActionForm';\nimport { UpdateMembersActionForm } from '../components/UpdateMembersActionForm';\nimport { StakeActionForm } from '../components/StakeActionForm';\nimport { JoinActionForm } from '../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 '../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: [\n !data.to && 'Recipient address is required',\n !data.amount && 'Amount is required',\n !data.denom && 'Denomination is required',\n ].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: [\n !data.contract && 'Contract address is required',\n !data.toAddress && 'Recipient address is required',\n !data.amount && 'Amount is required',\n ].filter(Boolean) 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: [\n !data.to && 'Recipient address is required',\n data.amount <= 0 && 'Amount must be greater than 0',\n ].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: [\n !data.contractChosen && 'Contract must be selected',\n !data.tokenSwapContractAddress && 'Token swap contract address is required',\n ].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: [\n data.add.length === 0 && data.remove.length === 0 && 'Add or remove at least one member',\n ].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: [\n !data.proposalId && 'Proposal ID is required',\n data.vote < 0 && 'Vote option is required',\n ].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:\n !!data.validator &&\n (data.stakeType === StakeType.WithdrawDelegatorReward || (!!data.amount && !!data.denom)),\n errors: [\n !data.validator && 'Validator is required',\n data.stakeType === StakeType.Redelegate &&\n !data.toValidator &&\n 'Destination validator is required',\n data.stakeType !== StakeType.WithdrawDelegatorReward &&\n !data.amount &&\n 'Amount is required',\n ].filter(Boolean) as string[],\n }),\n (data) =>\n `${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: [\n !data.tokenContract && 'Token contract is required',\n !data.stakingContract && 'Staking contract is required',\n !data.amount && 'Amount is required',\n ].filter(Boolean) 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: [\n !data.id && 'ID is required',\n !data.coreAddress && 'Core address is required',\n !data.address && 'Address is required',\n ].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: [\n data.toAdd.length === 0 &&\n data.toRemove.length === 0 &&\n 'Add or remove at least one SubDAO',\n ].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: [\n !data.key && 'Key is required',\n data.setting && !data.value && 'Value is required when setting',\n ].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: [\n !data.coreAddress && 'Core address is required',\n data.msgs.length === 0 && 'At least one message is required',\n ].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: [\n !data.did && 'DID is required',\n !data.relayerNodeDid && 'Relayer node DID is required',\n !data.relayerNodeAddress && 'Relayer node address is required',\n ].filter(Boolean) 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: [\n !data.collection && 'Collection address is required',\n !data.tokenId && 'Token ID is required',\n ].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: [\n !data.collection && 'Collection address is required',\n !data.tokenId && 'Token ID is required',\n !data.recipient && 'Recipient address is required',\n ].filter(Boolean) 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: [\n !data.address && 'Contract address is required',\n !data.message && 'Message is required',\n ].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: [\n !data.contract && 'Contract address is required',\n data.codeId <= 0 && 'Valid code ID is required',\n !data.msg && 'Migration message is required',\n ].filter(Boolean) 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: [\n !data.contract && 'Contract address is required',\n !data.newAdmin && 'New admin address is required',\n ].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(\n Boolean\n ) 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: [\n !data.typeUrl && 'Type URL is required',\n !data.value.grantee && 'Grantee address is required',\n !data.value.msgTypeUrl && 'Message type URL is required',\n ].filter(Boolean) 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: [\n !data.value.grantee && 'Grantee address is required',\n !data.value.msgTypeUrl && 'Message type URL is required',\n ].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 &&\n !data.createMsg &&\n 'Create message is required',\n data.validatorActionType === ValidatorActionType.EditValidator &&\n !data.editMsg &&\n '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 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, 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 { 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","import { CheckboxBlockSpec } from './checkbox';\nimport { ListBlock } from './list';\nimport { OverviewBlock } from './overview';\nimport { ProposalVoteBlock } from './proposalVote';\nimport { ProposalBlockSpec } from './proposal';\nimport { ProposalActionsBlockSpec } from './proposalActions';\nimport { EnumChecklistBlock, EnumChecklistBlockType } from './enumChecklist/EnumChecklistBlock';\n\n// Export new dependency system types and utilities\n\nexport { CheckboxBlockSpec, ListBlock, OverviewBlock, ProposalVoteBlock, ProposalBlockSpec, ProposalActionsBlockSpec };\nexport type { CheckboxBlockProps } from './checkbox';\nexport type { ListBlockSettings, ListBlockProps } from './list';\nexport type { OverviewBlockSettings, OverviewBlockProps } from './overview';\nexport type { ProposalVoteBlockSettings, ProposalVoteBlockProps, VoteParams, AvailableProposalBlock } from './proposalVote';\nexport type { ProposalBlockProps, CreateProposalParams } from './proposal';\nexport type { ProposalActionsBlockProps } from './proposalActions';\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: ListBlock,\n enumChecklist: EnumChecklistBlock,\n overview: OverviewBlock,\n proposalVote: ProposalVoteBlock,\n proposal: ProposalBlockSpec,\n proposalActions: ProposalActionsBlockSpec,\n};\n\n// Slash menu items configuration\nexport const getExtraSlashMenuItems = (editor: any) => [\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 proposalId: '',\n proposalBlockId: '',\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","import { useCreateBlockNote } from '@blocknote/react';\nimport {\n BlockNoteSchema,\n defaultBlockSpecs,\n defaultInlineContentSpecs,\n defaultStyleSpecs,\n} 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 {\n BlockNoteSchema,\n defaultBlockSpecs,\n defaultInlineContentSpecs,\n defaultStyleSpecs,\n} 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 } = 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 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 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\n // Sync the isEditable property whenever it changes\n useEffect(() => {\n if (ixoEditor) {\n ixoEditor.isEditable = editable;\n }\n }, [ixoEditor, editable]);\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({\n matrixClient,\n roomId,\n yDoc,\n}: {\n matrixClient: MatrixClient;\n roomId: string;\n yDoc: Y.Doc;\n}) {\n const [matrixProvider, setProvider] = useState<MatrixProvider | null>(null);\n const [status, setStatus] = useState<'connecting' | 'connected' | 'failed' | 'disconnected'>(\n 'disconnected'\n );\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(\n yDoc,\n client,\n { type: 'id', id: roomId },\n providerOptions\n );\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 }, [\n matrixClient,\n providerOptions,\n handleDocumentAvailable,\n handleDocumentUnavailable,\n handleCanWriteChanged,\n ]);\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 const doc = new Y.Doc();\n\n const root = doc.getMap('root');\n\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', options.user?.id || 'anonymous');\n\n const titleText = doc.getText('title');\n if (titleText.length === 0 && options.title) {\n titleText.insert(0, options.title);\n }\n\n doc.getMap('auditTrail');\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 {\n BlocknoteProvider,\n BlocknoteHandlers,\n BlockRequirements,\n} 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\n className={`ixo-editor ixo-editor--theme-${config.theme} ${className}`}\n style={{ flex: 1 }}\n >\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\n editor={editor}\n handlers={handlers}\n blockRequirements={blockRequirements}\n editable={isEditable}\n >\n <IxoEditorContent\n editor={editor}\n config={config}\n isEditable={isEditable}\n className={className}\n onChange={onChange}\n onSelectionChange={onSelectionChange}\n >\n {children}\n </IxoEditorContent>\n </BlocknoteProvider>\n );\n\n // If a Mantine theme is provided, wrap with MantineProvider\n // Otherwise, assume the parent app already has a MantineProvider\n if (mantineTheme) {\n return <MantineProvider theme={mantineTheme}>{editorContent}</MantineProvider>;\n }\n\n return editorContent;\n}\n","import React from 'react';\nimport { usePanelStore } from '../hooks/usePanel';\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(\n 'https://devnet-blocksync-graphql.ixo.earth/graphql'\n);\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","useState","useEffect","useMemo","useCallback","createReactBlockSpec","Group","Stack","Text","Button","ActionIcon","Alert","Loader","Center","Flex","React","useState","Group","Box","React","Stack","Card","Group","Text","Button","React","Stack","Text","Card","Group","Button","React","Stack","TextInput","Text","Button","Group","Switch","React","TextInput","Switch","Stack","Text","Button","Group","React","useState","useEffect","Stack","Text","Button","Alert","Group","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","useState","useEffect","React","Stack","Text","Alert","Button","Group","React","Stack","Button","Text","useState","React","Group","Box","React","Text","IconCheckbox","React","Text","IconArrowDown","IconArrowUp","React","useState","useEffect","useCallback","useMemo","error","Stack","Flex","Text","IconArrowUp","IconArrowDown","ActionIcon","Center","Button","Loader","Alert","Group","page","createReactBlockSpec","React","createReactBlockSpec","ValidatorActionType","useState","useEffect","useCallback","useState","useEffect","useCallback","React","createReactBlockSpec","React","React","useMemo","React","useCallback","useState","Paper","CloseButton","Title","React","useState","useEffect","useMemo","Stack","Text","Group","Card","Button","Select","GeneralTab","useState","useEffect","useMemo","React","Stack","Card","Text","Select","block","Group","Button","TemplateConfig","useState","useCallback","React","Paper","Title","CloseButton","GeneralTab","Card","Group","Stack","Text","ActionIcon","Badge","useMemo","React","TemplateConfig","Card","Group","ActionIcon","Stack","Text","Badge","React","useMemo","React","Paper","CloseButton","Title","React","useState","Stack","Text","Group","Card","Button","Progress","Box","Textarea","Tooltip","React","Paper","Title","CloseButton","Card","Group","Stack","Text","ActionIcon","Alert","Badge","useEffect","useState","useMemo","useMemo","useMemo","useMemo","useMemo","useState","useMemo","useEffect","getStatusColor","useMemo","React","Card","Stack","Alert","Group","ActionIcon","Text","Badge","React","createReactBlockSpec","React","React","createReactBlockSpec","React","React","useMemo","React","useCallback","Paper","CloseButton","Title","React","useEffect","useState","Stack","Text","TextInput","Textarea","GeneralTab","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","Skeleton","Badge","Button","ActionIcon","React","Card","Stack","Skeleton","Text","Group","ActionIcon","Badge","Button","React","useCallback","useState","Paper","CloseButton","Title","Stack","TextInput","Textarea","Button","Text","Card","useEffect","useState","useFlowBusinessLogic","useState","useEffect","coreAddress","FlowConfig","useState","useFlowBusinessLogic","useCallback","React","Paper","Title","CloseButton","Stack","Card","Text","TextInput","Textarea","Button","useFlowBusinessLogic","useMemo","React","FlowConfig","React","createReactBlockSpec","React","React","createReactBlockSpec","React","useCallback","React","Card","Group","Text","Badge","Stack","ActionIcon","Button","Box","actions","useCallback","React","createReactBlockSpec","React","React","useState","useEffect","useMemo","Stack","Select","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","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","Modal","Group","Box","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","Modal","Group","Box","IconSettings","React","useState","useMemo","useEffect","useCallback","Stack","Flex","Text","ActionIcon","Center","Button","createReactBlockSpec","useCreateBlockNote","BlockNoteSchema","defaultBlockSpecs","defaultInlineContentSpecs","defaultStyleSpecs","useEffect","useState","useRef","useCallback","useMemo","useMemo","useMemo","useEffect","BlockNoteSchema","defaultBlockSpecs","defaultInlineContentSpecs","defaultStyleSpecs","useCreateBlockNote","React","React","React","React"]}
|