@flexkit/studio 0.2.12 → 0.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/activity-nav-button-RDL5GIWG.js +2 -0
  2. package/dist/{activity-nav-button-LZESIQL2.js.map → activity-nav-button-RDL5GIWG.js.map} +1 -1
  3. package/dist/astro.js +1 -1
  4. package/dist/{chat-page-EKOGKEFR.js → chat-page-B2IOPTUP.js} +3 -3
  5. package/dist/{chat-page-EKOGKEFR.js.map → chat-page-B2IOPTUP.js.map} +1 -1
  6. package/dist/chunk-APVKB4FT.js +2 -0
  7. package/dist/chunk-APVKB4FT.js.map +1 -0
  8. package/dist/{chunk-BOXFB6E6.js → chunk-C5Y6OZFR.js} +2 -2
  9. package/dist/{chunk-BOXFB6E6.js.map → chunk-C5Y6OZFR.js.map} +1 -1
  10. package/dist/chunk-CAZ6EUR2.js +2 -0
  11. package/dist/chunk-CAZ6EUR2.js.map +1 -0
  12. package/dist/{chunk-OFJOZMCR.js → chunk-CJGP4Y5Y.js} +2 -2
  13. package/dist/{chunk-OFJOZMCR.js.map → chunk-CJGP4Y5Y.js.map} +1 -1
  14. package/dist/{chunk-C47FNPLK.js → chunk-CWJWOJRO.js} +3 -3
  15. package/dist/{chunk-C47FNPLK.js.map → chunk-CWJWOJRO.js.map} +1 -1
  16. package/dist/{chunk-2AVINVYN.js → chunk-DJPVRAFE.js} +22 -20
  17. package/dist/{chunk-7IHEL6LU.js → chunk-ETQ3Q472.js} +2 -2
  18. package/dist/{chunk-7IHEL6LU.js.map → chunk-ETQ3Q472.js.map} +1 -1
  19. package/dist/{chunk-EWBEPYML.js → chunk-KNESQOI5.js} +3 -3
  20. package/dist/{chunk-EWBEPYML.js.map → chunk-KNESQOI5.js.map} +1 -1
  21. package/dist/{chunk-QQSI7BPK.js → chunk-N53TGGN5.js} +3 -3
  22. package/dist/{chunk-QQSI7BPK.js.map → chunk-N53TGGN5.js.map} +1 -1
  23. package/dist/chunk-TOY7ZRK2.js +384 -0
  24. package/dist/chunk-TOY7ZRK2.js.map +1 -0
  25. package/dist/{chunk-F2DHCPWW.js → chunk-VPTDAFFZ.js} +2 -2
  26. package/dist/{chunk-F2DHCPWW.js.map → chunk-VPTDAFFZ.js.map} +1 -1
  27. package/dist/chunk-XDLTO6VU.js +3 -0
  28. package/dist/chunk-XDLTO6VU.js.map +1 -0
  29. package/dist/chunk-ZLWYVTGO.js +2 -0
  30. package/dist/chunk-ZLWYVTGO.js.map +1 -0
  31. package/dist/electron.d.ts +103 -0
  32. package/dist/electron.js +131 -0
  33. package/dist/index.css +9 -0
  34. package/dist/index.d.ts +31 -1
  35. package/dist/index.js +9 -9
  36. package/dist/index.js.map +1 -1
  37. package/dist/list-4NZLZRX3.js +2 -0
  38. package/dist/{list-DOTORSUC.js.map → list-4NZLZRX3.js.map} +1 -1
  39. package/dist/nextjs.js +1 -1
  40. package/dist/{pages-ILAXYS2J.js → pages-7MFZAVLV.js} +4 -4
  41. package/dist/{pages-ILAXYS2J.js.map → pages-7MFZAVLV.js.map} +1 -1
  42. package/dist/{plugin-pages-RKJRHKNL.js → plugin-pages-RNB46YPQ.js} +2 -2
  43. package/dist/{plugin-pages-RKJRHKNL.js.map → plugin-pages-RNB46YPQ.js.map} +1 -1
  44. package/dist/{root-JB3NZZNZ.js → root-4XPMKRHZ.js} +5 -5
  45. package/dist/{root-JB3NZZNZ.js.map → root-4XPMKRHZ.js.map} +1 -1
  46. package/dist/{root-RE3ZNXQ3.js → root-5RDJ2HAV.js} +2 -2
  47. package/dist/{root-RE3ZNXQ3.js.map → root-5RDJ2HAV.js.map} +1 -1
  48. package/dist/root-NCLIQPJA.js +23 -0
  49. package/dist/root-NCLIQPJA.js.map +1 -0
  50. package/dist/root-OHZDY47O.js +2 -0
  51. package/dist/{root-76YQTZUI.js.map → root-OHZDY47O.js.map} +1 -1
  52. package/dist/{search-WUO6VWKU.js → search-OWF3LEWH.js} +2 -2
  53. package/dist/{search-WUO6VWKU.js.map → search-OWF3LEWH.js.map} +1 -1
  54. package/dist/{skills-pages-POKCFHOL.js → skills-pages-VCXZFQFD.js} +2 -2
  55. package/dist/{skills-pages-POKCFHOL.js.map → skills-pages-VCXZFQFD.js.map} +1 -1
  56. package/dist/tanstack-start.js +1 -1
  57. package/package.json +11 -7
  58. package/dist/activity-nav-button-LZESIQL2.js +0 -2
  59. package/dist/chunk-6YOVF2AD.js +0 -384
  60. package/dist/chunk-6YOVF2AD.js.map +0 -1
  61. package/dist/chunk-ACS3TGGP.js +0 -2
  62. package/dist/chunk-ACS3TGGP.js.map +0 -1
  63. package/dist/chunk-HYSTMQD7.js +0 -2
  64. package/dist/chunk-HYSTMQD7.js.map +0 -1
  65. package/dist/list-DOTORSUC.js +0 -2
  66. package/dist/root-76YQTZUI.js +0 -2
  67. package/dist/root-A4VHAEK5.js +0 -23
  68. package/dist/root-A4VHAEK5.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/components/dark-mode-switch.tsx","../src/auth/email.tsx","../src/auth/login.tsx","../src/core/config/last-project.ts","../src/core/error/errors.ts","../src/apps/ai/activity-notifier.tsx","../src/core/apps/app-sessions.ts","../src/ui/containers/appbar.tsx","../src/core/error/error-boundary.tsx","../src/ui/containers/app-outlet.tsx","../src/ui/containers/navbar.tsx","../src/ui/containers/layout.tsx","../src/core/config/use-hosted-session.ts","../src/ui/primitives/alert-dialog.tsx","../src/ui/components/alert-dialog.tsx","../src/entities/delete.tsx","../src/ui/drawer-modal-context.tsx","../src/form/fields/default-value-switch.tsx","../src/form/fields/text.tsx","../src/form/fields/switch.tsx","../src/ui/hooks/use-outer-click.ts","../src/form/fields/uploader.tsx","../src/form/fields/number.tsx","../src/ui/primitives/calendar.tsx","../src/form/fields/datetime.tsx","../src/form/fields/editor/novel-editor.ts","../src/form/fields/editor/slash-command.tsx","../src/form/fields/editor/selectors/color-selector.tsx","../src/form/fields/editor/selectors/link-selector.tsx","../src/form/fields/editor/selectors/node-selector.tsx","../src/form/fields/editor/selectors/math-selector.tsx","../src/form/fields/editor/selectors/text-buttons.tsx","../src/form/fields/editor/icons/magic.tsx","../src/form/fields/editor/icons/crazy-spinner.tsx","../src/form/fields/editor/generative/ai-completion-command.tsx","../src/form/fields/editor/generative/ai-selector-commands.tsx","../src/form/fields/editor/generative/ai-selector.tsx","../src/form/fields/editor/generative/generative-menu-switch.tsx","../src/form/fields/editor/index.tsx","../src/form/fields/textarea.tsx","../src/form/fields/relationship/asset-multiple.tsx","../src/form/fields/relationship/data-table-row-actions.tsx","../src/form/fields/relationship/multiple.tsx","../src/form/fields/relationship/single.tsx","../src/form/fields/relationship/index.tsx","../src/form/fields/select.tsx","../src/core/field-groups.ts","../src/form/field-groups.ts","../src/form/json-schema-to-zod.ts","../src/form/form-builder.tsx","../src/entities/add-entity.tsx","../src/core/error/read-only-mode.tsx","../src/entities/save-button.tsx","../src/entities/loading.tsx","../src/entities/edit-entity.tsx","../src/entities/edit-relationship.tsx","../src/entities/actions-manager.tsx","../src/ui/components/no-projects.tsx","../src/ui/containers/root.tsx","../src/core/base-path.ts","../src/core/error/global-error.tsx","../src/core/flexkit-studio.tsx","../src/graphql-client/use-refresh-entity-list.ts"],"names":["DarkModeSwitch","mounted","setMounted","useState","theme","setTheme","useTheme","useEffect","jsxs","ToggleGroup","jsx","ToggleGroupItem","Moon","Sun","Monitor","formSchema","EmailLogin","projectId","redirectTo","setIsEmailLogin","redirectToRef","useRef","finishLogin","hasOtpExpired","setHasOtpExpired","shouldSendOtp","setShouldSendOtp","mutate","useSWRConfig","form","useForm","zodResolver","sendOtpUrl","userApiPaths","apiPaths","baseApiUrl","confirmOtpUrl","data","error","isLoading","useSWR","url","res","errorCode","hasOtpBeenSent","token","calls","interval","setTokenUrl","confirmationResponse","handleEmailLogin","Alert","AlertDescription","Button","Form","event","FormField","field","FormItem","FormControl","Input","FormMessage","Loader2","Mail","Login","isHosted","projectIds","projects","useConfig","selectedProjectId","setSelectedProjectId","selectedProjectHref","useHref","isEmailLogin","providersUrl","isAuthLoading","auth","useAuth","copyrightYear","currentRouterLocation","useLocation","referal","referalHref","fromPath","Loading","Navigate","Fragment","Label","Select","id","SelectTrigger","SelectValue","getProjectLabel","SelectContent","SelectItem","provider","composeLoginHref","basePath","params","LAST_PROJECT_STORAGE_KEY","defaultStorage","readLastProjectId","storage","value","rememberLastProjectId","pickStartProjectId","lastProjectId","FLEXKIT_ERROR_CODES","FLEXKIT_ERROR_MESSAGES","FlexkitError","_FlexkitError","code","message","isFlexkitError","maybeCode","getFlexkitErrorCode","POLL_INTERVAL_MS","WATERMARK_STORAGE_KEY","readWatermark","writeWatermark","since","canNotify","NOTIFICATION_ICON_SIZE","notificationIcon","getNotificationIcon","canvas","context","LOGO_MARK_PATH","isAway","runAsLeader","lockName","task","controller","resolve","ActivityNotifier","navigate","useNavigate","navigateRef","mode","preferencesLoaded","preferences","useNotificationPreferences","mutedKindsRef","preferencesLoadedRef","pollNowRef","ensurePushSubscription","signal","poll","summary","fetcher","paths","plan","planActivityNotifications","icon","notification","shown","createAppSessions","decodeSegment","segment","getAppSegment","pathname","project","app","rememberAppLocation","sessions","appName","location","base","AppBar","currentApp","apps","version","appBarHeight","setAppBarHeight","visibleApps","setVisibleApps","additionalApps","setAdditionalApps","appBar","useParams","appSegment","activeApp","getAppPath","lastLocation","createPath","resizeObserver","availableAppSlots","_visibleApps","_activeApp","_additionalApps","TooltipProvider","Tooltip","TooltipTrigger","NavLink","TooltipContent","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","Settings","Link","Wrench","DropdownMenuSeparator","PackageCheck","PackageX","ErrorAlert","errorText","AlertCircle","AlertTitle","ErrorBoundaryImpl","Component","info","prevProps","RouteErrorBoundary","children","search","useAppSessions","setSessions","next","toRouteObject","route","AppRoutes","routes","useMemo","useRoutes","AppNotFound","AppOutlet","name","item","appLocation","isActive","AppActiveContext","Logo","lazy","ProjectSelector","Search","ActivityNavButton","UserNav","Navbar","projectSummaries","resolvedTheme","currentProject","currentSummary","schema","handleSearchSelection","startTransition","Suspense","SchemaUnavailable","showHomeLink","isMissing","isForbidden","title","description","Layout","isLoadingSchemas","schemaErrors","scopes","appDispatch","useAppDispatch","isKnownProject","appSessions","defaultScope","s","savedScope","SCOPE_STORAGE_KEY","schemaError","Toaster","fetchMe","response","toHostedSession","outcome","useHostedSession","AlertDialog","props","AlertDialogPrimitive","AlertDialogPortal","AlertDialogOverlay","className","cn","AlertDialogContent","size","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","variant","AlertDialogCancel","options","isOpen","setIsOpen","isSubmitting","setIsSubmitting","isClosingFromSubmit","setIsClosingFromSubmit","handleClose","handleAction","maybePromise","buttonVariants","Delete","action","apolloClient","useApolloClient","runMutation","setMutation","setOptions","useEntityMutation","dispatch","useDispatch","hasFiredSilentDeletionRef","idsToDelete","entityName","isSilent","isBatch","handleDeletion","dialogOptions","mutation","getEntityDeleteMutation","reject","gql","getEntityDeleteWhere","cache","toast","scheduleEntityListRemoval","getEntityListQueryName","DrawerModalContext","createContext","_flag","DrawerModalProvider","dirty","setDirty","flag","useDrawerModalContext","useContext","DefaultValueSwitch","scope","checked","disabled","onChange","elementId","useId","Checkbox","Text","control","fieldSchema","readOnly","setValue","label","handleInput","previousValue","handleCheckbox","FormLabel","FormDescription","Switch","useOuterClick","ref","callback","excludeSelectors","handleClickOutside","excludedElements","element","handleFocusOutside","Uploader","entityId","getValues","actionDispatch","relationships","useAppContext","inputFile","wrapperRef","selectedAssetIdRef","base64PreviewImage","setBase64PreviewImage","dragActive","setDragActive","saving","setSaving","relationshipId","connection","selectedAsset","normalizeSelectedAsset","currentValue","getExtensionFromMime","mime","map","parts","sub","getFileExtension","originalFilename","ext","fromMime","file","fileSizeLimit","bytes","isImage","reader","e","uploaded","uploadAssetFile","handleClearing","handleCopyUrl","fieldValue","IMAGES_BASE_URL","handleUpload","handleSelectAsset","currentAsset","selectedAssetId","getReusableAssetId","initialConnection","handleDownload","ImageIcon","UploadIcon","SearchIcon","path","style","defaultStyles","FileTypeIcon","FileOutlineIcon","EllipsisIcon","DropdownMenuGroup","DownloadIcon","CopyIcon","ClearFieldIcon","Maximize2","ClearIcon","Collapsible","CollapsibleContent","asset","Number","dataType","rawValue","parsedValue","Calendar","classNames","showOutsideDays","captionLayout","buttonVariant","formatters","components","defaultClassNames","getDefaultClassNames","DayPicker","date","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","day","modifiers","DateTime","handleSelect","Popover","PopoverTrigger","format","CalendarIcon","PopoverContent","timeValue","hours","minutes","asNovelEditorWithRichCommands","editor","suggestionItems","createSuggestionItems","range","CheckSquare","Heading1","Heading2","Heading3","List","richEditor","ListOrdered","TextQuote","Code","input","Youtube","videoLink","Twitter","tweetLink","slashCommand","Command","renderItems","TEXT_COLORS","HIGHLIGHT_COLORS","ColorSelector","open","onOpenChange","useEditor","activeColorItem","color","activeHighlightItem","ChevronDown","EditorBubbleItem","Check","isValidUrl","getUrlFromString","str","LinkSelector","inputRef","target","Trash","items","TextIcon","NodeSelector","activeItem","MathSelector","evt","from","to","latex","SigmaIcon","TextButtons","BoldIcon","ItalicIcon","UnderlineIcon","StrikethroughIcon","CodeIcon","Magic","CrazySpinner","crazy_spinner_default","AICompletionCommands","completion","onDiscard","CommandGroup","CommandItem","selection","CommandSeparator","TrashIcon","RefreshCcwDot","CheckCheck","ArrowDownWideNarrow","WrapText","AISelectorCommands","onSelect","option","slice","text","pos","getPrevText","StepForward","AISelector","inputValue","setInputValue","complete","useCompletion","init","hasCompletion","ScrollArea","Markdown","CommandInput","addAIHighlight","ArrowUp","CommandList","GenerativeMenuSwitch","removeAIHighlight","EditorBubble","extensions","defaultExtensions","isJSONContent","maybe","parseEditorValue","trimmed","parsed","Editor","defaultValue","openAI","setOpenAI","openNode","setOpenNode","openLink","setOpenLink","openColor","setOpenColor","debouncedUpdates","useDebouncedCallback","json","uploadFn","EditorRoot","EditorContent","_view","handleCommandNavigation","view","handleImagePaste","_slice","moved","handleImageDrop","ImageResizer","EditorCommand","EditorCommandEmpty","EditorCommandList","EditorCommandItem","val","Separator","Textarea","PAGE_SIZE","FULL_ASSET_CONNECTION_LIMIT","AssetMultipleRelationship","entityNamePlural","relationship","uploadAssets","useUploadAssets","fieldId","originalAssetIdsRef","pendingLocalRowsSignatureRef","removedAssetIdsRef","syncedRowsSignatureRef","knownAssetSortOrdersRef","initialRows","normalizeAssets","rows","setRows","loadedServerCount","setLoadedServerCount","getKnownAssetSortOrders","serverTotalCount","setServerTotalCount","assetConnectionQuery","getEntityAssetConnectionQuery","fetchAssetConnection","isLoadingMore","useLazyQuery","initialRowsSignature","getRowsSignature","nextKnownSortOrders","currentRows","currentRowsSignature","connections","selectedAssets","index","normalizeAsset","selectedRowsSignature","rowsSignature","pendingRowsSignature","connect","rowIds","disconnect","_id","totalCount","hasMore","handleLoadMore","useCallback","nextFirst","result","entityRows","fetchedAssets","getOrderedAssetsFromConnection","responseTotal","previousKnownCount","nextLoadedCount","currentIds","removedIds","toAppend","nextRows","handleSelection","uploadedAssets","nextAssets","withSortOrder","removeAsset","assetId","moveAsset","direction","currentIndex","nextIndex","sortedRows","previewTotal","collapsedPreview","AssetThumbnail","SelectedAssetCard","isImageAsset","isFirst","isLast","ArrowUpIcon","ArrowDownIcon","a","b","row","sortOrder","DataTableRowActions","handleDelete","Trash2","MultipleRelationship","relationshipEntityName","relationshipEntitySchema","find","propEq","relationshipEntityAttributesSchema","baseEntityName","connectionName","relationshipAttribute","attr","displayAttributeName","getDisplayAttribute","dataAdapter","entityQuery","getRelatedItemsQuery","previewItems","hasMorePreviewItems","getData","loading","columns","useGridColumnsDefinition","dataRowActions","selectedRows","uniqBy","prop","pendingConnections","pendingDisconnectIds","existingRelationshipIds","pendingDisconnectIdSet","pendingConnectCount","pendingDisconnectCount","displayCount","mappedData","mapQueryResult","Badge","DataTable","disconnectEntity","connectedEntities","rowToDeleteWasJustConnected","shouldUndoDisconnection","disconnection","uniq","rowItem","renderNode","node","relationshipFieldName","rawFieldValue","fieldNode","nodes","SingleRelationship","hasFocus","setHasFocus","relationshipEntity","connectValue","displayValue","rawPrimary","primaryValue","ChevronsUpDown","Relationship","formFieldParams","AlertTriangle","SELECT_OPTION_PREFIX","encodeOptionValue","decodeOptionValue","castedValue","SelectGroup","SelectLabel","ALL_FIELDS_GROUP_NAME","ALL_FIELDS_GROUP","getAttributeGroupNames","attribute","attributeBelongsToGroup","groupName","isAttributeVisibleInGroups","groups","group","resolveVisibleFieldGroups","authoredAllFields","namedGroups","getDefaultFieldGroupName","defaultGroup","firstNamedGroup","jsonSchemaToZod","convert","warned","warnOnce","keyword","HANDLED_KEYWORDS","FORMAT_MESSAGES","isObject","literal","z","candidate","unionOf","convertString","formatMessage","min","SAFE_BOUNDS","convertNumber","integer","minimum","maximum","between","convertArray","convertObject","properties","required","key","shape","property","converted","convertByType","type","alternatives","nullIndex","other","forbidden","toFieldValidator","ctx","isEmpty","warnedInputTypes","getInitialFieldValue","FormBuilder","currentScope","formData","setIsDirty","onSubmit","entitySchema","userSpaces","filterAttributesForSpaces","initialFormValues","values","validators","visibleGroupsForValidation","handleSubmit","watch","trigger","visibleGroups","activeGroup","setActiveGroup","baselineRef","hasMarkedSavedRef","formFieldComponentsMap","useImperativeHandle","hasDataChanged","ids","nextValues","attributeName","formChangesSubscription","renderField","knownComponent","createElement","Tabs","TabsList","TabsTrigger","Icon","ScrollBar","TabsContent","isVisible","fieldElement","form_builder_default","memo","forwardRef","changedData","originalFormData","normalizeComparisonValue","sortAlphabetically","originalData","acc","newData","equals","AddEntity","depth","isFocused","canMutate","useCanMutate","mutationData","isDirty","forceClose","setForceClose","handleBeforeClose","handleSave","saveEntity","uuidv4","getEntityCreateMutation","scheduleEntityListRefetch","DrawerModal","PermissionTooltip","ReadOnlyMode","SaveButton","_","i","Skeleton","EditEntity","currentProjectId","setCurrentScope","setFormIsDirty","nextIsDirty","handleScopeChange","nextScope","results","useEntityQuery","previousData","getEntityUpdateMutation","getLocalAttributeIdsFromUpdateResponse","hasData","isInitialLoading","getEntityIdentifier","displayAttribute","isRelationship","relatedValue","relatedNode","scopedNode","entityIdentifier","scopeItem","getLoadingColumns","column","EditRelationship","assetAccept","connectedEntitiesCount","initialAssetPath","relationshipContext","isAssetPicker","entityLabel","selectTitle","uploadButtonLabel","searchResultIds","setSearchResultIds","initialSingleSelectionState","initialSelectionState","setSelectedRows","conditionalWhereClause","clauses","count","fetchMore","rowsCount","loadingData","loadingColumns","matchedAsset","selected","handleSelectionChange","selectedIds","prevSelected","existingSelections","valueFromData","handleCreateEntity","handleUploadAssets","uploadedAsset","SearchBar","setSearch","searchRequest","searchQuery","setSearchQuery","useSearch","prevResultsRef","debouncedSetSearchQuery","debounce","query","currentResultsString","r","prevResultsString","handleSearchChange","LoaderCircle","fn","ms","timeoutId","args","ActionsManager","actions","useActions","editActions","actionType","latestModalId","payload","NoProjects","user","rootHref","FolderOpen","flexkitDomain","signOutHosted","NavigateCompat","Providers","userId","AuthProvider","ConfigProvider","GraphQLProvider","Outlet","ProjectsRoot","defaultProjectId","SessionUnavailable","HostedRoot","session","startProjectId","Root","normalizeBasePath","GlobalError","useRouteError","errorMessage","isRouteErrorResponse","RouterProviderCompat","RouterProvider","FlexkitStudio","basename","log","debug","router","createBrowserRouter","ThemeProvider","AppProvider","ActionsProvider","useRefreshEntityList","entityNameOrPlural"],"mappings":"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","file":"index.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport type { JSX } from 'react';\nimport { Monitor, Moon, Sun } from 'lucide-react';\nimport { useTheme } from '../theme-context';\nimport { ToggleGroup, ToggleGroupItem } from '../primitives/toggle-group';\n\nexport function DarkModeSwitch(): JSX.Element | null {\n const [mounted, setMounted] = useState(false);\n const { theme, setTheme } = useTheme();\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <ToggleGroup size=\"sm\" type=\"single\" value={theme}>\n <ToggleGroupItem\n aria-label=\"Set dark mode\"\n onClick={() => {\n setTheme('dark');\n }}\n value=\"dark\"\n >\n <Moon className=\"fk:h-4 fk:w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem\n aria-label=\"Set light mode\"\n onClick={() => {\n setTheme('light');\n }}\n value=\"light\"\n >\n <Sun className=\"fk:h-4 fk:w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem\n aria-label=\"Set system mode\"\n onClick={() => {\n setTheme('system');\n }}\n value=\"system\"\n >\n <Monitor className=\"fk:h-4 fk:w-4\" />\n </ToggleGroupItem>\n </ToggleGroup>\n );\n}\n","'use client';\n\nimport { JSX, useEffect, useRef, useState } from 'react';\nimport type { Dispatch, SetStateAction } from 'react';\nimport useSWR, { useSWRConfig } from 'swr';\nimport { useForm } from 'react-hook-form';\nimport * as z from 'zod';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Mail, Loader2 } from 'lucide-react';\nimport { Alert, AlertDescription } from '../ui/primitives/alert';\nimport { Button } from '../ui/primitives/button';\nimport { Form, FormControl, FormField, FormItem, FormMessage } from '../ui/primitives/form';\nimport { Input } from '../ui/primitives/input';\nimport { apiPaths, baseApiUrl, userApiPaths } from '../core/api-paths';\n\nconst formSchema = z.object({\n email: z.email({ error: 'Please enter a valid email address' }),\n});\n\nexport default function EmailLogin({\n projectId,\n redirectTo,\n setIsEmailLogin,\n}: {\n /** Omitted in hosted mode: the OTP flow then goes through the Studio's own user-level API route. */\n projectId?: string;\n /** Absolute URL to open once the session cookie is set; defaults to reloading the current page. */\n redirectTo?: string;\n setIsEmailLogin: Dispatch<SetStateAction<boolean>>;\n}): JSX.Element {\n const redirectToRef = useRef(redirectTo);\n redirectToRef.current = redirectTo;\n\n // The picked project may differ from the one in the URL, so land on it explicitly.\n function finishLogin(): void {\n if (redirectToRef.current) {\n window.location.assign(redirectToRef.current);\n } else {\n window.location.reload();\n }\n }\n\n const [hasOtpExpired, setHasOtpExpired] = useState(false);\n const [shouldSendOtp, setShouldSendOtp] = useState(false);\n const { mutate } = useSWRConfig();\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: '',\n },\n });\n // Project mode talks to the project API directly (open CORS); hosted mode stays same-origin through the BFF.\n const sendOtpUrl = projectId === undefined ? userApiPaths.otpSend : new URL(apiPaths(projectId).loginOtpSend, baseApiUrl).href;\n const confirmOtpUrl =\n projectId === undefined ? userApiPaths.otpConfirm : new URL(apiPaths(projectId).loginOtpConfirm, baseApiUrl).href;\n const { data, error, isLoading } = useSWR(\n shouldSendOtp ? sendOtpUrl : null,\n (url: string) =>\n fetch(url, {\n method: 'POST',\n mode: 'cors',\n credentials: 'same-origin',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ email: form.getValues('email') }),\n }).then(\n (res) => res.json() as Promise<{ token: string } | { error: { message: string; code: string } } | undefined>\n ),\n {\n revalidateIfStale: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n shouldRetryOnError: false,\n }\n );\n const errorCode = data && 'error' in data && data.error.code;\n const hasOtpBeenSent = data && 'token' in data;\n const token = data && 'token' in data ? data.token : '';\n\n useEffect(() => {\n if (!hasOtpBeenSent) {\n return;\n }\n\n let calls = 0;\n const interval = setInterval(() => {\n // Start polling to check for email confirmation\n // if email is confirmed, redirect to dashboard\n if (calls > 100) {\n clearInterval(interval);\n setHasOtpExpired(true);\n\n return;\n }\n\n const setTokenUrl = '/api/flexkit/set-token';\n fetch(\n `${confirmOtpUrl}?email=${encodeURIComponent(form.getValues('email'))}&token=${encodeURIComponent(token)}`,\n { credentials: 'same-origin' }\n )\n .then((res) => {\n if (res.status === 200) {\n // set the token cookie\n res\n .json()\n .then((confirmationResponse: { sid: string }) => {\n fetch(setTokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ sid: confirmationResponse.sid }),\n })\n .then(() => {\n finishLogin();\n })\n .catch(() => {\n // TODO: inform the user about the error, maybe the /set-token route is not available or properly configured\n });\n })\n .catch(() => {\n // TODO: handle this error\n });\n }\n })\n .catch(() => {\n // do nothing, the user has not confirmed the email yet\n });\n calls++;\n }, 3000);\n\n return () => {\n clearInterval(interval);\n };\n }, [confirmOtpUrl, form, hasOtpBeenSent, token]);\n\n function handleEmailLogin(): void {\n setHasOtpExpired(false);\n setShouldSendOtp(true);\n void mutate(sendOtpUrl);\n }\n\n return (\n <div className=\"fk:w-full\">\n {hasOtpBeenSent ? (\n <Alert className=\"fk:dark:bg-foreground fk:dark:text-background\" variant=\"default\">\n <AlertDescription>\n Keep this window open and in a new tab open the link we just sent to:{' '}\n <strong>{form.getValues('email')}</strong> (\n <Button\n className=\"fk:p-0 fk:hover:underline fk:text-link\"\n onClick={() => {\n window.location.reload();\n }}\n variant=\"link\"\n >\n undo\n </Button>\n )\n </AlertDescription>\n </Alert>\n ) : (\n <Form {...form}>\n <form\n onSubmit={(event) => void form.handleSubmit(handleEmailLogin)(event)}\n className=\"fk:w-full fk:space-y-3 fk:mb-10\"\n >\n {errorCode === 'not_exists' && (\n <Alert variant=\"destructive\">\n <AlertDescription>\n There is no Flexkit account associated with this email address.{' '}\n <a\n className=\"fk:text-black/90 fk:dark:text-white/90 fk:underline\"\n href={`https://flexkit.io/signup/email?email=${encodeURIComponent(form.getValues('email'))}`}\n >\n Sign up?\n </a>\n </AlertDescription>\n </Alert>\n )}\n {errorCode === 'unknown_error' || error ? (\n <Alert variant=\"destructive\">\n <AlertDescription>\n There was an unknown error, please{' '}\n <Button\n className=\"fk:p-0 fk:hover:underline\"\n onClick={() => {\n window.location.reload();\n }}\n variant=\"link\"\n >\n try again\n </Button>\n .{' '}\n </AlertDescription>\n </Alert>\n ) : null}\n {hasOtpExpired ? (\n <Alert variant=\"destructive\">\n <AlertDescription>\n The email verification link may have expired. Please{' '}\n <Button\n className=\"fk:p-0 fk:hover:underline\"\n onClick={() => {\n window.location.reload();\n }}\n variant=\"link\"\n >\n try again\n </Button>\n .\n </AlertDescription>\n </Alert>\n ) : null}\n <FormField\n control={form.control}\n defaultValue=\"\"\n name=\"email\"\n render={({ field }) => (\n <FormItem>\n <FormControl>\n <Input\n aria-label=\"Email Address\"\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n className=\"w-full\"\n placeholder=\"Email Address\"\n spellCheck={false}\n type=\"email\"\n {...field}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <Button aria-disabled={isLoading} className=\"fk:w-full\" type=\"submit\" disabled={Boolean(isLoading)}>\n {isLoading ? (\n <Loader2 className=\"fk:h-5 fk:w-5 fk:mr-2 fk:animate-spin\" />\n ) : (\n <Mail className=\"fk:w-5 fk:h-5 fk:mr-2\" />\n )}\n Continue with Email\n </Button>\n <Button\n className=\"fk:w-full fk:text-link\"\n onClick={() => {\n setIsEmailLogin(false);\n }}\n variant=\"link\"\n >\n ← Other Login options\n </Button>\n </form>\n </Form>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { JSX, useState } from 'react';\nimport useSWR from 'swr';\nimport { Navigate, useHref, useLocation } from 'react-router-dom';\nimport { Button } from '../ui/primitives/button';\nimport { DarkModeSwitch } from '../ui/components/dark-mode-switch';\nimport { Loading } from '../ui/components/loading';\nimport { Label } from '../ui/primitives/label';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/primitives/select';\nimport { apiPaths, userApiPaths } from '../core/api-paths';\nimport { useConfig } from '../core/config/config-context';\nimport { getProjectLabel } from '../ui/components/project-label';\nimport { useAuth } from './auth-context';\nimport EmailLogin from './email';\n\ntype Provider = {\n name: string;\n title: string;\n url: string;\n button: {\n variant: 'link' | 'default' | 'outline' | 'destructive' | 'ghost' | 'secondary';\n color: string;\n colorHover: string;\n backgroundColor: string;\n backgroundColorHover: string;\n iconUrl?: string;\n };\n};\n\n/**\n * Login screen. With a `projectId` (project mode) providers and the OTP flow\n * belong to the project picked in the selector; without one (hosted mode) the\n * user signs in to their account and the Studio lists their projects afterwards.\n */\nexport function Login({ projectId }: { projectId?: string }): JSX.Element {\n const isHosted = projectId === undefined;\n // Before login only the ids are known: project schemas (and titles) need a session.\n const { projectIds, projects } = useConfig();\n const [selectedProjectId, setSelectedProjectId] = useState(\n projectId === undefined ? '' : projectIds.includes(projectId) ? projectId : (projectIds[0] ?? projectId)\n );\n const selectedProjectHref = useHref(`/${selectedProjectId}`);\n const [isEmailLogin, setIsEmailLogin] = useState(false);\n // Providers and the OTP flow belong to the project picked in the selector, not the one in the URL.\n const providersUrl = isHosted ? userApiPaths.authProviders : apiPaths(selectedProjectId).authProviders;\n const { data, error, isLoading } = useSWR(providersUrl, (url: string) =>\n fetch(url, { mode: 'cors', credentials: 'same-origin' }).then(\n (res) => res.json() as Promise<{ providers: Provider[] }>\n )\n );\n const [isAuthLoading, auth] = useAuth();\n const copyrightYear = new Date().getFullYear();\n const currentRouterLocation = useLocation();\n // Router pathnames omit the basename; useHref puts it back so the redirect lands on the mounted Studio.\n const referal: string = currentRouterLocation.state?.from?.pathname ?? currentRouterLocation.pathname;\n const referalHref = useHref(referal);\n\n // Hosted mode returns to the page that asked for login (the root picks the project);\n // project mode lands on the project picked in the selector.\n const fromPath =\n isHosted || referal.includes(selectedProjectId)\n ? `${location.origin}${referalHref}`\n : `${location.origin}${selectedProjectHref}`;\n\n if (error) {\n throw new Error('Error fetching auth providers');\n }\n\n // Hosted mode renders this screen outside the auth provider: the session check already happened.\n if (isLoading || (!isHosted && isAuthLoading) || !data) {\n return <Loading />;\n }\n\n if (!isHosted && auth.user?.id) {\n return <Navigate replace state={{ from: currentRouterLocation }} to=\"/\" />;\n }\n\n return (\n <>\n <div className=\"fk:container fk:relative fk:h-[calc(100vh-3rem)] fk:flex fk:items-center fk:justify-center fk:lg:px-0\">\n <div className=\"fk:w-full fk:lg:p-8\">\n <div className=\"fk:mx-auto fk:flex fk:flex-col fk:justify-center fk:sm:w-[350px]\">\n <h1 className=\"fk:mb-4 fk:text-2xl fk:text-center fk:font-medium fk:tracking-tight\">\n Login to Flexkit Studio\n </h1>\n {!isHosted && projectIds.length > 1 ? (\n <div className=\"fk:flex-col fk:space-y-2 fk:mb-3\">\n <Label className=\"fk:text-sm fk:font-normal fk:text-left fk:text-muted-foreground\" htmlFor=\"project\">\n Select project\n </Label>\n <Select\n defaultValue={selectedProjectId}\n onValueChange={(id) => {\n setSelectedProjectId(id);\n }}\n >\n <SelectTrigger className=\"fk:mb-4 fk:w-full fk:h-9 fk:py-1\" id=\"project\">\n <SelectValue aria-label={getProjectLabel(selectedProjectId, projects)}>\n {getProjectLabel(selectedProjectId, projects)}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {projectIds.map((id) => (\n <SelectItem key={id} value={id}>\n {getProjectLabel(id, projects)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ) : null}\n {isEmailLogin ? (\n <EmailLogin\n key={selectedProjectId}\n projectId={isHosted ? undefined : selectedProjectId}\n redirectTo={fromPath}\n setIsEmailLogin={setIsEmailLogin}\n />\n ) : (\n <>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-sm fk:text-left fk:text-muted-foreground\">\n Choose login provider\n </p>\n <div className=\"fk:flex fk:flex-col fk:space-y-6\">\n {data.providers.map((provider: Provider) => (\n <Button\n asChild\n className={`fk:${provider.button.color} fk:${provider.button.backgroundColor} fk:hover:${provider.button.colorHover} fk:hover:${provider.button.backgroundColorHover}`}\n key={provider.name}\n type=\"button\"\n variant={provider.button.variant}\n >\n <a\n href={composeLoginHref({\n url: provider.url,\n projectId: isHosted ? undefined : selectedProjectId,\n basePath: '/api/flexkit/get-token',\n fromPath,\n })}\n >\n {provider.button.iconUrl ? (\n <img\n alt={provider.title}\n className=\"fk:w-[20px] fk:h-[20px] fk:mr-2\"\n src={provider.button.iconUrl}\n />\n ) : null}\n {provider.title}\n </a>\n </Button>\n ))}\n <Button\n className=\"fk:mt-4! fk:text-sm fk:text-center fk:text-link\"\n onClick={() => {\n setIsEmailLogin(true);\n }}\n variant=\"link\"\n >\n Continue with Email →\n </Button>\n </div>\n </>\n )}\n <div className=\"fk:flex fk:flex-col fk:items-center fk:pt-8\">\n <svg className=\"fk:w-28\" fill=\"none\" viewBox=\"0 0 191 42\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M59.2923 38.5263H52.7518V19.433H49.5653V12.9332H52.7518V11.7145C52.7518 10.1373 53.0471 8.65569 53.638 7.26967C54.245 5.88368 55.0677 4.68089 56.1058 3.66131C57.16 2.62579 58.3817 1.81331 59.7713 1.22386C61.1609 0.618477 62.6464 0.315788 64.2276 0.315788H69.1388V6.81564H64.2276C63.5247 6.81564 62.8698 6.9431 62.2628 7.19798C61.6719 7.43696 61.1528 7.77948 60.7057 8.22554C60.2746 8.65569 59.9311 9.17344 59.6756 9.77882C59.4201 10.3683 59.2923 11.0135 59.2923 11.7145V12.9332H67.3182V19.433H59.2923V38.5263Z\"\n fill=\"currentColor\"\n />\n <path d=\"M78.6099 38.5263H71.9802V0.315788H78.6099V38.5263Z\" fill=\"currentColor\" />\n <path\n d=\"M93.8922 32.3923C94.146 32.4723 94.3998 32.5283 94.6536 32.5604C94.9074 32.5765 95.1615 32.5842 95.4153 32.5842C96.0497 32.5842 96.6606 32.4964 97.2476 32.3203C97.8346 32.1445 98.3817 31.8966 98.8896 31.5768C99.4131 31.2409 99.8732 30.841 100.27 30.3772C100.682 29.8973 101.015 29.3695 101.269 28.7937L106.029 33.616C105.426 34.4797 104.728 35.2553 103.934 35.9432C103.157 36.6308 102.308 37.2145 101.388 37.6944C100.484 38.1743 99.5241 38.534 98.5089 38.7741C97.5094 39.03 96.4782 39.1579 95.4153 39.1579C93.6225 39.1579 91.933 38.822 90.3465 38.1502C88.7759 37.4784 87.3957 36.5427 86.2058 35.3434C85.0319 34.1438 84.1038 32.7202 83.4218 31.0729C82.7395 29.4095 82.3983 27.5862 82.3983 25.6029C82.3983 23.5717 82.7395 21.7164 83.4218 20.037C84.1038 18.3576 85.0319 16.9262 86.2058 15.7426C87.3957 14.5591 88.7759 13.6394 90.3465 12.9836C91.933 12.3279 93.6225 12 95.4153 12C96.4782 12 97.5173 12.128 98.5325 12.3839C99.548 12.6398 100.508 13.0076 101.412 13.4875C102.332 13.9673 103.189 14.5591 103.982 15.2628C104.775 15.9505 105.473 16.7263 106.076 17.5899L93.8922 32.3923ZM97.2237 18.8854C96.9224 18.7735 96.6208 18.7015 96.3195 18.6695C96.0338 18.6375 95.7325 18.6215 95.4153 18.6215C94.5267 18.6215 93.6859 18.7895 92.8927 19.1253C92.1154 19.4452 91.4334 19.9091 90.8461 20.5168C90.2751 21.1246 89.823 21.8603 89.4898 22.724C89.1566 23.5717 88.9902 24.5313 88.9902 25.6029C88.9902 25.8428 88.9981 26.1147 89.0138 26.4186C89.0457 26.7225 89.0852 27.0344 89.133 27.3543C89.1965 27.6582 89.2679 27.9541 89.347 28.2419C89.4263 28.5298 89.5296 28.7858 89.6565 29.0097L97.2237 18.8854Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M132.911 38.5263H124.926L119.833 30.6401L114.693 38.5263H106.707L116.055 25.3265L106.707 12.6316H114.693L119.833 20.0129L124.926 12.6316H132.911L123.539 25.3265L132.911 38.5263Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M143.002 38.5263H136.383V0.315788H143.002V24.0898L151.557 12.9976H159.114L150.57 23.6485L159.114 38.5263H151.557L146.335 29.2367L143.002 34.0243V38.5263Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M169.848 5.93416C169.848 6.54038 169.727 7.10672 169.486 7.63317C169.262 8.15962 168.949 8.62224 168.547 9.02108C168.146 9.40396 167.672 9.71505 167.126 9.95433C166.596 10.1777 166.026 10.2893 165.416 10.2893C164.806 10.2893 164.228 10.1777 163.682 9.95433C163.152 9.71505 162.686 9.40396 162.285 9.02108C161.9 8.62224 161.586 8.15962 161.346 7.63317C161.121 7.10672 161.008 6.54038 161.008 5.93416C161.008 5.34388 161.121 4.78553 161.346 4.25908C161.586 3.71666 161.9 3.25403 162.285 2.87115C162.686 2.47232 163.152 2.16124 163.682 1.93789C164.228 1.6986 164.806 1.57895 165.416 1.57895C166.026 1.57895 166.596 1.6986 167.126 1.93789C167.672 2.16124 168.146 2.47232 168.547 2.87115C168.949 3.25403 169.262 3.71666 169.486 4.25908C169.727 4.78553 169.848 5.34388 169.848 5.93416ZM168.716 38.5263H162.092V12.8977H168.716V38.5263Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M186.938 38.5263C185.368 38.5263 183.892 38.2319 182.512 37.6429C181.131 37.0378 179.918 36.2178 178.871 35.183C177.839 34.1323 177.022 32.9145 176.419 31.5294C175.832 30.1442 175.539 28.6635 175.539 27.0874V19.4932H172.374V12.9976H175.539V0.315788H182.012V12.9976H189.106V19.4932H182.012V27.0874C182.012 27.772 182.139 28.4168 182.393 29.0218C182.646 29.6108 182.996 30.1282 183.44 30.574C183.884 31.0198 184.408 31.378 185.01 31.6487C185.613 31.9034 186.256 32.0308 186.938 32.0308H189.106V38.5263H186.938Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M19.8893 2.21053C34.8062 2.21053 39.7785 7.18421 39.7785 22.1053C39.7785 37.0263 34.8062 42 19.8893 42C4.97231 42 0 37.0263 0 22.1053C0 7.18421 4.97231 2.21053 19.8893 2.21053ZM14.7093 10.1053H7.26116L15.9804 21.9654L7.26116 34.2973H14.7093L17.4445 30.1161V14.0271L14.7093 10.1053ZM32.285 10.1053H24.8237L21.7835 14.4979V29.5995L24.8237 34.2973H32.285L23.528 21.9654L32.285 10.1053Z\"\n fill=\"currentColor\"\n />\n </svg>\n <ul className=\"fk:flex fk:w-full fk:mt-4 fk:justify-center fk:text-xs fk:text-muted-foreground\">\n <li className=\"fk:pr-6 fk:after:content-['|'] fk:after:pl-6\">\n <a className=\"fk:underline-offset-4 fk:hover:text-primary\" href=\"https://www.flexkit.io\">\n flexkit.io\n </a>\n </li>\n <li className=\"fk:pr-6 fk:after:content-['|'] fk:after:pl-6\">\n <a className=\"fk:underline-offset-4 fk:hover:text-primary\" href=\"https://www.flexkit.io/docs\">\n Docs\n </a>\n </li>\n <li className=\"\">\n <a\n className=\"fk:underline-offset-4 fk:hover:text-primary\"\n href=\"https://www.flexkit.io/privacy-policy\"\n >\n Privacy Policy\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n {/* workaround to allow Tailwind generate the classes for the login buttons, whose classes are added dynamically */}\n <div className=\"fk:hidden fk:text-white! fk:bg-bitbucket! fk:hover:bg-bitbucket-hover!\" />\n <div className=\"fk:hidden fk:bg-github! fk:hover:bg-github-hover!\" />\n <div className=\"fk:hidden fk:text-muted-foreground! fk:bg-white! fk:hover:bg-accent!\" />\n </div>\n <div className=\"fk:flex fk:justify-center fk:items-center fk:h-12 fk:text-xs fk:text-muted-foreground fk:border-t fk:border-accent\">\n <div className=\"fk:container fk:flex\">\n <div className=\"fk:flex fk:items-center fk:mr-auto\">\n <svg\n className=\"fk:h-5 fk:w-5 fk:mr-3 fk:text-black fk:dark:text-white\"\n fill=\"none\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7 8H41V40H7V8Z\" fill=\"none\" />\n <path\n d=\"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z\"\n fill=\"currentColor\"\n />\n </svg>\n <p className=\"fk:flex fk:items-center\">© {copyrightYear}</p>\n </div>\n <DarkModeSwitch />\n </div>\n </div>\n </>\n );\n}\n\ninterface CreateHrefForProviderOptions {\n /** Omitted in hosted mode: the login is for the account, not a project. */\n projectId?: string;\n url: string;\n basePath: string;\n fromPath: string;\n}\n\nfunction composeLoginHref({ projectId, url, basePath, fromPath }: CreateHrefForProviderOptions): string {\n const params = new URLSearchParams();\n params.set('origin', `${location.origin}${basePath}`);\n\n if (projectId) {\n params.set('projectId', projectId);\n }\n\n params.set('redirect', fromPath);\n\n return `${url}?${params.toString()}`;\n}\n","export const LAST_PROJECT_STORAGE_KEY = 'flexkit-studio:lastProjectId';\n\ntype StorageLike = Pick<Storage, 'getItem' | 'setItem'>;\n\nfunction defaultStorage(): StorageLike | undefined {\n try {\n return typeof localStorage === 'undefined' ? undefined : localStorage;\n } catch {\n return undefined;\n }\n}\n\n/** Project the user opened last on this browser, or null. Storage failures are ignored. */\nexport function readLastProjectId(storage: StorageLike | undefined = defaultStorage()): string | null {\n try {\n const value = storage?.getItem(LAST_PROJECT_STORAGE_KEY);\n\n return value && value.trim() ? value : null;\n } catch {\n return null;\n }\n}\n\nexport function rememberLastProjectId(projectId: string, storage: StorageLike | undefined = defaultStorage()): void {\n try {\n storage?.setItem(LAST_PROJECT_STORAGE_KEY, projectId);\n } catch {\n // Private mode or blocked storage: the Studio simply opens the first project next time.\n }\n}\n\n/** Where `/` should go: the remembered project when it is still accessible, else the first one. */\nexport function pickStartProjectId(projectIds: string[], lastProjectId: string | null): string | undefined {\n if (lastProjectId && projectIds.includes(lastProjectId)) {\n return lastProjectId;\n }\n\n return projectIds[0];\n}\n","export const FLEXKIT_ERROR_CODES = ['PROJECT_PAUSED', 'PROJECT_NOT_FOUND', 'READ_ONLY_MODE', 'UNKNOWN_ERROR'] as const;\n\nexport type FlexkitErrorCode = (typeof FLEXKIT_ERROR_CODES)[number];\n\nexport const FLEXKIT_ERROR_MESSAGES: Record<FlexkitErrorCode, string> = {\n PROJECT_PAUSED: 'This project has been paused.',\n PROJECT_NOT_FOUND: 'The requested project ID was not found',\n READ_ONLY_MODE: 'This project is currently in read only mode and changes cannot be saved',\n UNKNOWN_ERROR: 'Sorry, an unexpected error has occurred. Please try again',\n};\n\nexport class FlexkitError extends Error {\n readonly code: FlexkitErrorCode;\n\n constructor(code: FlexkitErrorCode, message?: string) {\n super(message ?? FLEXKIT_ERROR_MESSAGES[code]);\n this.name = 'FlexkitError';\n this.code = code;\n\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(this, new.target.prototype);\n }\n }\n\n static from(code: FlexkitErrorCode, message?: string): FlexkitError {\n return new FlexkitError(code, message);\n }\n}\n\nexport function isFlexkitError(error: unknown): error is FlexkitError {\n if (!(error instanceof Error)) {\n return false;\n }\n\n const maybeCode = (error as { code?: unknown }).code;\n\n if (typeof maybeCode !== 'string') {\n return false;\n }\n\n return (FLEXKIT_ERROR_CODES as readonly string[]).includes(maybeCode);\n}\n\nexport function getFlexkitErrorCode(error: unknown): FlexkitErrorCode | undefined {\n if (isFlexkitError(error)) {\n return error.code;\n }\n\n return undefined;\n}\n","import { useEffect, useRef } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useSWRConfig } from 'swr';\nimport { useConfig } from '../../core/config/config-context';\nimport { LOGO_MARK_PATH } from '../../ui/components/logo';\nimport { fetcher, paths } from './api';\nimport { planActivityNotifications } from './activity';\nimport { ensurePushSubscription, useNotificationPreferences } from './notification-settings';\nimport type { ActivitySummary } from './types';\n\nconst POLL_INTERVAL_MS = 30_000;\nconst WATERMARK_STORAGE_KEY = 'flexkit:activity-watermark:';\n\nfunction readWatermark(projectId: string): string | null {\n try {\n return localStorage.getItem(`${WATERMARK_STORAGE_KEY}${projectId}`);\n } catch {\n return null;\n }\n}\n\nfunction writeWatermark(projectId: string, since: string): void {\n try {\n localStorage.setItem(`${WATERMARK_STORAGE_KEY}${projectId}`, since);\n } catch {\n // Storage can be blocked; the in-memory watermark still prevents repeats in this tab.\n }\n}\n\nfunction canNotify(): boolean {\n return typeof Notification !== 'undefined' && Notification.permission === 'granted';\n}\n\nconst NOTIFICATION_ICON_SIZE = 192;\n\nlet notificationIcon: Promise<string | undefined> | null = null;\n\n/**\n * The Flexkit logo as a PNG data URL for the notification icon. Browsers do not\n * reliably render SVG notification icons, so the mark is drawn on a canvas once.\n */\nfunction getNotificationIcon(): Promise<string | undefined> {\n notificationIcon ??= (async () => {\n try {\n const canvas = document.createElement('canvas');\n\n canvas.width = NOTIFICATION_ICON_SIZE;\n canvas.height = NOTIFICATION_ICON_SIZE;\n\n const context = canvas.getContext('2d');\n\n if (!context) {\n return undefined;\n }\n\n context.scale(NOTIFICATION_ICON_SIZE / 48, NOTIFICATION_ICON_SIZE / 48);\n context.fillStyle = 'white';\n context.fillRect(7, 8, 34, 32);\n context.fillStyle = '#020817';\n context.fill(new Path2D(LOGO_MARK_PATH));\n\n return canvas.toDataURL('image/png');\n } catch {\n return undefined;\n }\n })();\n\n return notificationIcon;\n}\n\n/**\n * The person is not looking at Studio: the tab is in the background, or another\n * app has focus. Switching apps leaves a partly visible browser window\n * `visible`, so visibility alone misses the most common case.\n */\nfunction isAway(): boolean {\n return document.visibilityState === 'hidden' || !document.hasFocus();\n}\n\n/**\n * Runs `task` in exactly one Studio tab per project at a time (Web Locks), so\n * three open tabs show one notification, not three. Without Web Locks every\n * tab runs it; notification tags still collapse the duplicates.\n */\nfunction runAsLeader(lockName: string, task: (_signal: AbortSignal) => void): () => void {\n const controller = new AbortController();\n\n if (typeof navigator === 'undefined' || !('locks' in navigator)) {\n task(controller.signal);\n\n return () => controller.abort();\n }\n\n navigator.locks\n .request(lockName, { signal: controller.signal }, async () => {\n // An unmount can land between the grant and this callback (React Strict Mode\n // remounts at once). The abort event has then already fired, so waiting for it\n // would hold the lock forever while the remounted notifier queues behind it.\n if (controller.signal.aborted) {\n return;\n }\n\n task(controller.signal);\n\n // Hold the lock until this tab's notifier unmounts.\n await new Promise<void>((resolve) => controller.signal.addEventListener('abort', () => resolve(), { once: true }));\n })\n .catch(() => undefined);\n\n return () => controller.abort();\n}\n\n/**\n * Polls the Activity summary while Studio is open and turns new items into\n * desktop notifications when the tab is in the background. It also refreshes\n * the Activity badge. Renders nothing.\n */\nexport function ActivityNotifier({ projectId }: { projectId: string }): null {\n const navigate = useNavigate();\n const navigateRef = useRef(navigate);\n const { mutate } = useSWRConfig();\n const { mode } = useConfig();\n const { isLoaded: preferencesLoaded, preferences } = useNotificationPreferences();\n // Read on every poll without restarting the poller when preferences change.\n const mutedKindsRef = useRef(preferences.desktopMutedKinds);\n const preferencesLoadedRef = useRef(preferencesLoaded);\n // The leader tab's poll, so a poll skipped while preferences loaded can run as soon as they arrive.\n const pollNowRef = useRef<(() => void) | null>(null);\n\n navigateRef.current = navigate;\n mutedKindsRef.current = preferences.desktopMutedKinds;\n preferencesLoadedRef.current = preferencesLoaded;\n\n // The hosted Studio also reaches the person through Web Push while no tab is\n // open; keep this browser's subscription saved once notifications are allowed.\n useEffect(() => {\n if (mode !== 'hosted') {\n return;\n }\n\n ensurePushSubscription().catch(() => undefined);\n }, [mode]);\n\n useEffect(() => {\n if (!projectId) {\n return;\n }\n\n return runAsLeader(`flexkit-activity-notifier:${projectId}`, (signal) => {\n let since = readWatermark(projectId);\n\n async function poll(): Promise<void> {\n // Without the stored preferences a muted kind could still notify; wait for\n // them (the watermark stays put, so nothing is skipped meanwhile).\n if (!preferencesLoadedRef.current) {\n return;\n }\n\n let summary: ActivitySummary;\n\n try {\n summary = await fetcher<ActivitySummary>(paths(projectId).activitySummary(since));\n } catch {\n return;\n }\n\n if (signal.aborted) {\n return;\n }\n\n const plan = planActivityNotifications({ mutedKinds: mutedKindsRef.current, newItems: summary.newItems, since });\n\n ({ since } = plan);\n writeWatermark(projectId, plan.since);\n void mutate(paths(projectId).activitySummary(), summary, { revalidate: false });\n\n if (!isAway() || !canNotify()) {\n return;\n }\n\n const icon = plan.notifications.length > 0 ? await getNotificationIcon() : undefined;\n\n for (const notification of plan.notifications) {\n const shown = new Notification(notification.title, { body: notification.body, icon, tag: notification.tag });\n\n shown.onclick = () => {\n window.focus();\n navigateRef.current(`/${projectId}/ai/${notification.path}`);\n shown.close();\n };\n }\n }\n\n void poll();\n\n const interval = setInterval(() => void poll(), POLL_INTERVAL_MS);\n\n pollNowRef.current = () => void poll();\n signal.addEventListener('abort', () => {\n clearInterval(interval);\n pollNowRef.current = null;\n });\n });\n }, [mutate, projectId]);\n\n // The first poll waits for the preferences; run it the moment they arrive\n // instead of on the next interval.\n useEffect(() => {\n if (preferencesLoaded) {\n pollNowRef.current?.();\n }\n }, [preferencesLoaded]);\n\n return null;\n}\n","import type { Location } from 'react-router-dom';\n\n/**\n * Which Studio apps have been opened for a project and where each one was\n * last left. Opened apps stay mounted while another app is in front, so a\n * chat, a grid or an explorer query survives a tab switch; the stored\n * location is what the hidden app keeps rendering and where its app bar\n * button leads back to.\n */\nexport interface AppSessions {\n /** Where each opened app was last left. */\n locations: { [appName: string]: Location };\n /** Opened apps in the order they were first opened; each stays mounted. */\n order: string[];\n projectId: string;\n}\n\nexport function createAppSessions(projectId: string): AppSessions {\n return { locations: {}, order: [], projectId };\n}\n\nfunction decodeSegment(segment: string): string {\n try {\n return decodeURIComponent(segment);\n } catch {\n return segment;\n }\n}\n\n/**\n * The app segment that follows the project id in a Studio pathname, e.g.\n * `ai` for `/p1/ai/agent/chats/3`, or `undefined` for `/p1` and `/p1/`.\n */\nexport function getAppSegment(pathname: string, projectId: string): string | undefined {\n const [project, app] = pathname.split('/').filter(Boolean);\n\n if (project === undefined || decodeSegment(project) !== projectId) {\n return undefined;\n }\n\n return app === undefined ? undefined : decodeSegment(app);\n}\n\n/**\n * Records that `appName` is in front at `location`. Returns the same object\n * when nothing changed so callers can skip a state update, and starts over\n * when the project changed so a stored location never points into another\n * project.\n */\nexport function rememberAppLocation(\n sessions: AppSessions,\n projectId: string,\n appName: string,\n location: Location\n): AppSessions {\n const base = sessions.projectId === projectId ? sessions : createAppSessions(projectId);\n\n if (base.locations[appName] === location) {\n return base;\n }\n\n return {\n locations: { ...base.locations, [appName]: location },\n order: base.order.includes(appName) ? base.order : [...base.order, appName],\n projectId,\n };\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { JSX } from 'react';\nimport { MoreHorizontal, PackageCheck, PackageX, Settings, Wrench } from 'lucide-react';\nimport { createPath, Link, NavLink, Navigate, useLocation, useParams } from 'react-router-dom';\nimport { Button } from '../primitives/button';\nimport { getAppSegment } from '../../core/apps/app-sessions';\nimport type { AppSessions } from '../../core/apps/app-sessions';\nimport type { AppOptions } from '../../core/config/types';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../primitives/tooltip';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n} from '../primitives/dropdown-menu';\n\ntype Props = {\n /** The app the URL points at, if it is a known one. */\n activeApp: string | undefined;\n apps: AppOptions[];\n /** Where each opened app was last left; its button leads back there. */\n sessions: AppSessions;\n version: {\n current: string;\n latest: string;\n isCurrent: boolean;\n };\n};\n\nexport function AppBar({ activeApp: currentApp, apps, sessions, version }: Props): JSX.Element {\n const [appBarHeight, setAppBarHeight] = useState(0);\n const [visibleApps, setVisibleApps] = useState<AppOptions[]>(apps);\n const [additionalApps, setAdditionalApps] = useState<AppOptions[]>([]); // apps that are not visible in the sidebar due to lack of space\n const appBar = useRef<HTMLDivElement>(null);\n const location = useLocation();\n const { projectId = '' } = useParams();\n const appSegment = getAppSegment(location.pathname, projectId);\n const activeApp = currentApp ?? apps[0]?.name;\n\n /** An opened app reopens on the page it was left on; the others open on their root. */\n function getAppPath(app: AppOptions): string {\n const lastLocation = sessions.locations[app.name];\n\n return lastLocation ? createPath(lastLocation) : `/${projectId}/${app.name}`;\n }\n\n useEffect(() => {\n if (appBar.current === null) {\n return;\n }\n\n const resizeObserver = new ResizeObserver(() => {\n setAppBarHeight(appBar.current?.offsetHeight ?? 0);\n });\n\n resizeObserver.observe(appBar.current);\n\n return function cleanup() {\n resizeObserver.disconnect();\n };\n }, [currentApp]);\n\n useEffect(() => {\n const availableAppSlots = Math.floor(appBarHeight / 48) - 2;\n const _visibleApps = apps.slice(0, availableAppSlots);\n\n if (!_visibleApps.find((app) => app.name === activeApp)) {\n // if the currently active app is not in the visible apps, add it to the end of the visible apps\n const _activeApp = apps.find((app) => app.name === activeApp);\n _visibleApps.pop();\n _activeApp ? _visibleApps.push(_activeApp) : null;\n }\n\n const _additionalApps = apps.filter((app) => !_visibleApps.includes(app));\n\n setVisibleApps(_visibleApps);\n setAdditionalApps(_additionalApps);\n }, [apps, activeApp, appBarHeight]);\n\n // A bare project URL opens the first app. An unknown app segment is left\n // alone (the outlet reports it) rather than redirected in a loop.\n if (appSegment === undefined && activeApp) {\n return <Navigate replace to={`${location.pathname.replace(/\\/$/, '')}/${activeApp}`} />;\n }\n\n return (\n <TooltipProvider>\n <div className=\"fk:flex fk:flex-col fk:h-full fk:w-12 fk:bg-muted\" ref={appBar}>\n <div className=\"fk:grow\">\n <div className=\"fk:grid fk:grid-cols-1 fk:w-12 fk:h-auto\">\n {visibleApps.map((app) => (\n <Button asChild className=\"fk:h-12 fk:w-12\" key={app.name} variant=\"ghost\">\n <Tooltip>\n <TooltipTrigger\n asChild\n className=\"fk:h-12 fk:p-2 fk:rounded-none fk:border-2 fk:border-transparent! fk:data-[state=active]:border-l-foreground! fk:focus-visible:outline-hidden fk:focus-visible:ring-0 fk:focus-visible:ring-offset-0 fk:focus-visible:border-2! fk:focus-visible:border-ring! fk:focus-visible:rounded-xs fk:corner-squircle\"\n >\n <NavLink\n className=\"fk:text-muted-foreground fk:aria-[current]:text-foreground fk:aria-[current]:bg-background fk:aria-[current]:border-l-white!\"\n to={getAppPath(app)}\n >\n {app.icon}\n </NavLink>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p>{app.title}</p>\n </TooltipContent>\n </Tooltip>\n </Button>\n ))}\n </div>\n {/* additional apps */}\n {additionalApps.length > 0 && (\n <DropdownMenu>\n <Tooltip>\n <DropdownMenuTrigger asChild>\n <TooltipTrigger className=\"fk:flex fk:justify-center fk:items-center fk:h-12 fk:w-12 p-0 fk:data-[state=open]:bg-muted fk:text-muted-foreground fk:transition-colors fk:focus-visible:outline-hidden fk:focus-visible:border-2 fk:focus-visible:border-ring fk:focus-visible:rounded-xs\">\n <MoreHorizontal className=\"fk:w-5 fk:h-5\" strokeWidth={1.5} />\n <span className=\"fk:sr-only\">View additional apps</span>\n <TooltipContent side=\"right\">\n <p>Additional apps</p>\n </TooltipContent>\n </TooltipTrigger>\n </DropdownMenuTrigger>\n </Tooltip>\n <DropdownMenuContent align=\"start\" className=\"fk:w-56\" side=\"right\">\n {additionalApps.map((app) => (\n <DropdownMenuItem asChild key={app.name}>\n <NavLink to={getAppPath(app)}>{app.title}</NavLink>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n {/* settings button */}\n <DropdownMenu>\n <Tooltip>\n <DropdownMenuTrigger asChild>\n <TooltipTrigger className=\"fk:flex fk:justify-center fk:items-center fk:h-12 fk:w-12 fk:p-0 fk:data-[state=open]:bg-muted fk:text-muted-foreground fk:transition-colors fk:focus-visible:outline-hidden fk:focus-visible:border-2 fk:focus-visible:border-ring fk:focus-visible:rounded-xs\">\n <Settings className=\"fk:w-5 fk:h-5\" strokeWidth={1.5} />\n <span className=\"fk:sr-only\">Settings menu</span>\n <TooltipContent side=\"right\">\n <p>Settings menu</p>\n </TooltipContent>\n </TooltipTrigger>\n </DropdownMenuTrigger>\n </Tooltip>\n <DropdownMenuContent align=\"start\" className=\"fk:w-60\" side=\"right\">\n {/* TODO: add command menu functionality */}\n {/* <DropdownMenuItem\n onSelect={() => {\n //\n }}\n >\n <Keyboard className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Command Menu</span>\n <DropdownMenuShortcut>⌘K</DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuSeparator /> */}\n {/* TODO: add theme menu functionality - perhaps a Slack-like theme selector */}\n {/* <DropdownMenuItem\n onSelect={() => {\n //\n }}\n >\n <Palette className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Theme</span>\n </DropdownMenuItem> */}\n <DropdownMenuItem asChild>\n <Link to={`https://flexkit.io/dashboard/*/${projectId}`} target=\"_blank\" rel=\"noopener noreferrer\">\n <Wrench className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Manage project</span>\n </Link>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={version.isCurrent}\n onSelect={() => {\n if (!version.isCurrent) {\n // TODO: open upgrade modal\n }\n }}\n >\n {version.isCurrent ? (\n <>\n <PackageCheck className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Version {version.current}</span>\n </>\n ) : (\n <>\n <PackageX className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>\n Version {version.current}.<br />\n Upgrade to {version.latest}\n </span>\n </>\n )}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </TooltipProvider>\n );\n}\n","import { Component } from 'react';\nimport type { ErrorInfo, JSX, ReactNode } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { useLocation } from 'react-router-dom';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\n\nfunction ErrorAlert({ error }: { error: unknown }): JSX.Element {\n const errorText =\n error instanceof Error ? error.message : 'An unexpected error has occurred. Please try refreshing the page.';\n\n return (\n <Alert variant=\"destructive\">\n <AlertCircle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>Error</AlertTitle>\n <AlertDescription>{errorText}</AlertDescription>\n </Alert>\n );\n}\n\ntype BoundaryProps = {\n children: ReactNode;\n /** Changing it clears a caught error, like a navigation does in a data router. */\n resetKey: string;\n};\n\ntype BoundaryState = { error: unknown; hasError: boolean };\n\nclass ErrorBoundaryImpl extends Component<BoundaryProps, BoundaryState> {\n state: BoundaryState = { error: null, hasError: false };\n\n static getDerivedStateFromError(error: unknown): BoundaryState {\n return { error, hasError: true };\n }\n\n componentDidCatch(error: unknown, info: ErrorInfo): void {\n console.error('Flexkit Studio app error', error, info.componentStack);\n }\n\n componentDidUpdate(prevProps: BoundaryProps): void {\n if (this.state.hasError && prevProps.resetKey !== this.props.resetKey) {\n this.setState({ error: null, hasError: false });\n }\n }\n\n render(): ReactNode {\n return this.state.hasError ? <ErrorAlert error={this.state.error} /> : this.props.children;\n }\n}\n\n/**\n * Shows an error alert in place of the route element that threw, and recovers\n * when the route's location changes. The apps are rendered with `useRoutes`\n * so they can stay mounted off-screen, and `errorElement` only works in a\n * data router, hence this boundary.\n */\nexport function RouteErrorBoundary({ children }: { children: ReactNode }): JSX.Element {\n const { pathname, search } = useLocation();\n\n return <ErrorBoundaryImpl resetKey={`${pathname}${search}`}>{children}</ErrorBoundaryImpl>;\n}\n","import { useMemo, useState } from 'react';\nimport type { JSX } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { useLocation, useRoutes } from 'react-router-dom';\nimport type { Location, RouteObject } from 'react-router-dom';\nimport { AppActiveContext } from '../../core/apps/app-active';\nimport { createAppSessions, getAppSegment, rememberAppLocation } from '../../core/apps/app-sessions';\nimport type { AppSessions } from '../../core/apps/app-sessions';\nimport type { AppOptions, AppRoute } from '../../core/config/types';\nimport { RouteErrorBoundary } from '../../core/error/error-boundary';\nimport { Alert, AlertDescription, AlertTitle } from '../primitives/alert';\n\nexport interface AppSessionState {\n /** The app the URL points at, if it is one of `apps`. */\n activeApp: string | undefined;\n sessions: AppSessions;\n}\n\n/**\n * Tracks which app is in front and where every opened app was last left.\n * The state is adjusted during render (the React-sanctioned pattern for\n * state derived from the previous render) so the app bar and the outlet\n * never see a location that belongs to a different app than the URL.\n */\nexport function useAppSessions(apps: AppOptions[], projectId: string): AppSessionState {\n const location = useLocation();\n const [sessions, setSessions] = useState(() => createAppSessions(projectId));\n const segment = getAppSegment(location.pathname, projectId);\n const activeApp = segment !== undefined && apps.some((app) => app.name === segment) ? segment : undefined;\n const next = activeApp\n ? rememberAppLocation(sessions, projectId, activeApp, location)\n : sessions.projectId === projectId\n ? sessions\n : createAppSessions(projectId);\n\n if (next !== sessions) {\n setSessions(next);\n }\n\n return { activeApp, sessions: next };\n}\n\nfunction toRouteObject(route: AppRoute): RouteObject {\n return {\n children: route.children?.map(toRouteObject),\n element: <RouteErrorBoundary>{route.component}</RouteErrorBoundary>,\n path: route.path,\n };\n}\n\n/**\n * Renders one app against the location it was last seen at. Passing the\n * location to `useRoutes` scopes `useLocation`, `useParams` and relative\n * links inside the app to it, so an app that is hidden behind another one\n * keeps rendering the page it was left on instead of reacting to the URL\n * of the app in front.\n */\nfunction AppRoutes({ app, location }: { app: AppOptions; location: Location }): JSX.Element | null {\n const routes = useMemo<RouteObject[]>(\n () => [\n {\n children: app.routes?.map(toRouteObject),\n element: <RouteErrorBoundary>{app.component}</RouteErrorBoundary>,\n path: app.name,\n },\n ],\n [app]\n );\n\n return useRoutes(routes, location);\n}\n\nfunction AppNotFound({ segment }: { segment: string }): JSX.Element {\n return (\n <div className=\"fk:flex fk:h-full fk:grow fk:items-center fk:justify-center fk:p-8\">\n <Alert className=\"fk:max-w-lg\" variant=\"destructive\">\n <AlertCircle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>App not found</AlertTitle>\n <AlertDescription>There is no Studio app named &quot;{segment}&quot;.</AlertDescription>\n </Alert>\n </div>\n );\n}\n\ntype Props = AppSessionState & {\n apps: AppOptions[];\n};\n\n/**\n * The Studio's app area. Every app that has been opened stays mounted; the\n * one the URL points at is shown and the others are hidden with\n * `display: none`, so switching tabs and back keeps a chat, a half-filled\n * form or an explorer query exactly as it was. The shown app's wrapper uses\n * `display: contents` so the app itself stays a flex item of the layout row.\n */\nexport function AppOutlet({ activeApp, apps, sessions }: Props): JSX.Element {\n const location = useLocation();\n const segment = getAppSegment(location.pathname, sessions.projectId);\n\n return (\n <>\n {sessions.order.map((name) => {\n const app = apps.find((item) => item.name === name);\n const appLocation = sessions.locations[name];\n\n if (!app || !appLocation) {\n return null;\n }\n\n const isActive = name === activeApp;\n\n return (\n <div\n aria-hidden={isActive ? undefined : true}\n data-studio-app={name}\n key={name}\n style={{ display: isActive ? 'contents' : 'none' }}\n >\n <AppActiveContext.Provider value={isActive}>\n <AppRoutes app={app} location={appLocation} />\n </AppActiveContext.Provider>\n </div>\n );\n })}\n {activeApp === undefined && segment !== undefined ? <AppNotFound segment={segment} /> : null}\n </>\n );\n}\n","import { useNavigate } from 'react-router-dom';\nimport { Suspense, lazy, startTransition } from 'react';\nimport type { JSX } from 'react';\nimport { useTheme } from '../theme-context';\nimport type { ProjectSummary, ProjectUiConfig } from '../../core/config/types';\n\nconst Logo = lazy(() => import('../components/logo.js').then(({ Logo: Component }) => ({ 'default': Component })));\nconst ProjectSelector = lazy(() =>\n import('../components/project-selector.js').then(({ ProjectSelector: Component }) => ({ 'default': Component }))\n);\nconst Search = lazy(() => import('../components/search.js').then(({ Search: Component }) => ({ 'default': Component })));\nconst ActivityNavButton = lazy(() =>\n import('../../apps/ai/activity-nav-button.js').then(({ ActivityNavButton: Component }) => ({ 'default': Component }))\n);\nconst UserNav = lazy(() => import('../components/user-nav.js').then(({ UserNav: Component }) => ({ 'default': Component })));\n\ntype Props = {\n projectId: string;\n projectIds: string[];\n /** Hosted mode: names and teams known before schemas load. */\n projectSummaries?: ProjectSummary[];\n projects: ProjectUiConfig[];\n};\n\nexport function Navbar({ projectId, projectIds, projectSummaries = [], projects }: Props): JSX.Element {\n const { resolvedTheme } = useTheme();\n const currentProject = projects.find((project) => project.projectId === projectId);\n const currentSummary = projectSummaries.find((project) => project.id === projectId);\n const schema = currentProject?.schema ?? [];\n const navigate = useNavigate();\n\n function handleSearchSelection(item: { entityName: string; entityNamePlural: string; entityId: string }) {\n startTransition(() => {\n navigate(`/${projectId}/desk/list/${item.entityNamePlural}?id=${item.entityId}`);\n });\n }\n\n return (\n <div className=\"fk:flex fk:basis-14 fk:min-h-14 fk:px-3 fk:gap-x-4 fk:border-b fk:border-border fk:z-30\">\n <Suspense fallback={null}>\n <Logo theme={resolvedTheme} title={currentProject?.title ?? currentSummary?.name ?? 'Flexkit Studio'} />\n </Suspense>\n <div className=\"fk:flex fk:grow fk:shrink fk:items-center fk:gap-x-4 px-4\">\n <Suspense fallback={null}>\n <ProjectSelector\n projectId={projectId}\n projectIds={projectIds}\n projectSummaries={projectSummaries}\n projects={projects}\n />\n </Suspense>\n <Suspense fallback={null}>\n <Search key={projectId} onSelect={handleSearchSelection} projectId={projectId} schema={schema} />\n </Suspense>\n </div>\n <div className=\"fk:flex fk:items-center fk:gap-x-4\">\n <Suspense fallback={null}>\n <ActivityNavButton projectId={projectId} />\n </Suspense>\n <Suspense fallback={null}>\n <UserNav projectId={projectId} />\n </Suspense>\n </div>\n </div>\n );\n}\n","import { useEffect, type JSX } from 'react';\nimport { Link, useParams, useLocation } from 'react-router-dom';\nimport { AlertCircle } from 'lucide-react';\nimport { useAuth } from '../../auth/auth-context';\nimport { Login } from '../../auth/login';\nimport { useConfig } from '../../core/config/config-context';\nimport { SCOPE_STORAGE_KEY, useAppDispatch } from '../../core/app-context';\nimport { rememberLastProjectId } from '../../core/config/last-project';\nimport type { ProjectSchemaError } from '../../core/config/types';\nimport { FlexkitError } from '../../core/error/errors';\nimport { ActivityNotifier } from '../../apps/ai/activity-notifier';\nimport { Loading } from '../components/loading';\nimport { Alert, AlertDescription, AlertTitle } from '../primitives/alert';\nimport { Toaster } from '../primitives/sonner';\nimport { AppBar } from './appbar';\nimport { AppOutlet, useAppSessions } from './app-outlet';\nimport { Navbar } from './navbar';\n\ntype Props = {\n version: {\n current: string;\n latest: string;\n isCurrent: boolean;\n };\n};\n\nfunction SchemaUnavailable({\n projectId,\n error,\n showHomeLink = false,\n}: {\n projectId: string;\n error: ProjectSchemaError;\n /** Hosted mode: offer a way back to the projects the account can open. */\n showHomeLink?: boolean;\n}): JSX.Element {\n const isMissing = error.status === 404;\n const isForbidden = error.status === 401 || error.status === 403;\n const title = isMissing\n ? 'No deployed schema'\n : isForbidden\n ? 'No access to this project'\n : 'Could not load the project schema';\n const description = isMissing\n ? `Project \"${projectId}\" has no deployed schema yet. Run \\`flexkit deploy\\` from the folder containing its flexkit.config.ts.`\n : isForbidden\n ? `Your account is not a member of project \"${projectId}\". Ask a project owner to invite you.`\n : `${error.message} (project \"${projectId}\").`;\n\n return (\n <div className=\"fk:flex fk:h-full fk:items-center fk:justify-center fk:p-8\">\n <Alert className=\"fk:max-w-lg\" variant=\"destructive\">\n <AlertCircle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>{title}</AlertTitle>\n <AlertDescription className=\"fk:flex fk:flex-col fk:gap-2\">\n <span>{description}</span>\n {showHomeLink ? (\n <Link className=\"fk:underline fk:underline-offset-4\" to=\"/\">\n Back to your projects\n </Link>\n ) : null}\n </AlertDescription>\n </Alert>\n </div>\n );\n}\n\nexport function Layout({ version }: Props): JSX.Element {\n const { apps, currentProject, isLoadingSchemas, mode, projectIds, projects, projectSummaries, schemaErrors } =\n useConfig();\n const [isLoading, auth] = useAuth();\n const { projectId = '' } = useParams();\n const scopes = currentProject?.scopes;\n const appDispatch = useAppDispatch();\n const location = useLocation();\n const isKnownProject = projectIds.includes(projectId);\n const appSessions = useAppSessions(apps, projectId);\n\n useEffect(() => {\n if (scopes && scopes.length > 0) {\n const defaultScope = scopes.find((s) => s.isDefault) ?? scopes[0];\n let savedScope = '';\n\n if (typeof localStorage !== 'undefined') {\n savedScope = localStorage.getItem(`${SCOPE_STORAGE_KEY}${projectId}`) ?? '';\n }\n\n appDispatch({ type: 'setScope', payload: { projectId, scope: savedScope || defaultScope.name } });\n }\n }, [appDispatch, location, projectId, scopes]);\n\n // Hosted mode: come back to the project the user worked in last.\n useEffect(() => {\n if (mode === 'hosted' && isKnownProject && currentProject) {\n rememberLastProjectId(projectId);\n }\n }, [currentProject, isKnownProject, mode, projectId]);\n\n if (!isKnownProject) {\n if (mode === 'projects') {\n throw new FlexkitError('PROJECT_NOT_FOUND');\n }\n\n return (\n <SchemaUnavailable error={{ status: 403, message: 'No access to this project' }} projectId={projectId} showHomeLink />\n );\n }\n\n if (isLoading) {\n return <Loading />;\n }\n\n if (!auth.user?.id) {\n return <Login projectId={mode === 'hosted' ? undefined : projectId} />;\n }\n\n if (isLoadingSchemas) {\n return <Loading />;\n }\n\n const schemaError = schemaErrors[projectId];\n\n return (\n <>\n {/* eslint-disable-next-line react/no-unknown-property -- vaul-drawer-wrapper custom property required by Vaul component */}\n <div className=\"fk:flex fk:flex-col fk:h-full flexkit-studio\" vaul-drawer-wrapper=\"\">\n <Navbar projectId={projectId} projectIds={projectIds} projectSummaries={projectSummaries} projects={projects} />\n <div className=\"fk:flex fk:h-full fk:max-h-[calc(100%-3.5rem)] fk:border-t fk:border-border fk:grow shrink\">\n <AppBar apps={apps} version={version} {...appSessions} />\n {currentProject ? (\n <AppOutlet apps={apps} {...appSessions} />\n ) : (\n <SchemaUnavailable\n error={schemaError ?? { status: 0, message: 'The project schema is not available.' }}\n projectId={projectId}\n showHomeLink={mode === 'hosted'}\n />\n )}\n </div>\n </div>\n <ActivityNotifier projectId={projectId} />\n <Toaster />\n </>\n );\n}\n","'use client';\n\nimport useSWR from 'swr';\nimport { userApiPaths } from '../api-paths';\nimport type { HostedUser, ProjectSummary } from './types';\n\nexport type HostedSession =\n | { status: 'loading' }\n | { status: 'anonymous' }\n | { status: 'error'; message: string }\n | { status: 'ready'; user: HostedUser; projects: ProjectSummary[] };\n\ntype MeResponse = { projects: ProjectSummary[]; user: HostedUser };\ntype MeOutcome = { kind: 'anonymous' } | { kind: 'error'; message: string } | { kind: 'ready'; data: MeResponse };\n\nasync function fetchMe(): Promise<MeOutcome> {\n try {\n const response = await fetch(userApiPaths.me, { credentials: 'same-origin' });\n\n if (response.status === 401) {\n return { kind: 'anonymous' };\n }\n\n if (!response.ok) {\n return { kind: 'error', message: `Flexkit answered ${String(response.status)} while loading your projects.` };\n }\n\n return { kind: 'ready', data: (await response.json()) as MeResponse };\n } catch (error) {\n return { kind: 'error', message: error instanceof Error ? error.message : 'Flexkit is not reachable.' };\n }\n}\n\nexport function toHostedSession(outcome: MeOutcome | undefined): HostedSession {\n if (!outcome) {\n return { status: 'loading' };\n }\n\n if (outcome.kind === 'anonymous') {\n return { status: 'anonymous' };\n }\n\n if (outcome.kind === 'error') {\n return { status: 'error', message: outcome.message };\n }\n\n return { status: 'ready', projects: outcome.data.projects, user: outcome.data.user };\n}\n\n/** Hosted mode: who is signed in and which projects they can open. Fetched once per page load. */\nexport function useHostedSession(): HostedSession {\n const { data } = useSWR('hosted-session', fetchMe, {\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n shouldRetryOnError: false,\n });\n\n return toHostedSession(data);\n}\n","'use client';\n\nimport * as React from 'react';\nimport { AlertDialog as AlertDialogPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\nimport { Button } from './button';\n\nfunction AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\nfunction AlertDialogTrigger({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />;\n}\n\nfunction AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />;\n}\n\nfunction AlertDialogOverlay({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: 'default' | 'sm';\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n 'fk:group/alert-dialog-content fk:fixed fk:top-[50%] fk:left-[50%] fk:z-50 fk:grid fk:w-full fk:max-w-[calc(100%-2rem)] fk:translate-x-[-50%] fk:translate-y-[-50%] fk:gap-4 fk:rounded-lg fk:border fk:bg-background fk:p-6 fk:shadow-lg fk:duration-200 fk:data-[size=sm]:max-w-xs fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95 fk:data-[size=default]:sm:max-w-lg fk:corner-squircle',\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n );\n}\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n 'fk:grid fk:grid-rows-[auto_1fr] fk:place-items-center fk:gap-1.5 fk:text-center fk:has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] fk:has-data-[slot=alert-dialog-media]:gap-x-6 fk:sm:group-data-[size=default]/alert-dialog-content:place-items-start fk:sm:group-data-[size=default]/alert-dialog-content:text-left fk:sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n 'fk:flex fk:flex-col-reverse fk:gap-2 fk:group-data-[size=sm]/alert-dialog-content:grid fk:group-data-[size=sm]/alert-dialog-content:grid-cols-2 fk:sm:flex-row fk:sm:justify-end',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogTitle({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n 'fk:text-lg fk:font-semibold fk:sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogMedia({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"fk:mb-2 fk:inline-flex fk:size-16 fk:items-center fk:justify-center fk:rounded-md fk:bg-muted fk:sm:group-data-[size=default]/alert-dialog-content:row-span-2 fk:*:[svg:not([class*='size-'])]:size-8 fk:corner-squircle\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogAction({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Action data-slot=\"alert-dialog-action\" className={cn(className)} {...props} />\n </Button>\n );\n}\n\nfunction AlertDialogCancel({\n className,\n variant = 'outline',\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Cancel data-slot=\"alert-dialog-cancel\" className={cn(className)} {...props} />\n </Button>\n );\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","'use client';\n\nimport { useEffect, useState, type JSX } from 'react';\nimport {\n AlertDialog as AlertModalDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogPortal,\n AlertDialogTitle,\n} from '../primitives/alert-dialog';\nimport { buttonVariants } from '@ui/primitives/button';\nimport { Loader2 } from 'lucide-react';\n\ntype Props = {\n options: {\n dialogTitle: string;\n dialogMessage: string;\n dialogCancelTitle: string;\n dialogActionLabel: string;\n dialogActionCancel?: () => void;\n dialogActionSubmit?: () => void | Promise<void>;\n isDestructive?: boolean;\n };\n};\n\nexport default function AlertDialog({ options }: Props): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [isClosingFromSubmit, setIsClosingFromSubmit] = useState(false);\n\n useEffect(() => {\n setIsOpen(true);\n }, []);\n\n function handleClose(): void {\n setIsOpen(false);\n\n if (!isClosingFromSubmit) {\n options.dialogActionCancel?.();\n }\n\n if (isClosingFromSubmit) {\n setIsClosingFromSubmit(false);\n }\n }\n\n async function handleAction(): Promise<void> {\n setIsSubmitting(true);\n setIsClosingFromSubmit(true);\n setIsOpen(false);\n\n await new Promise<void>((resolve) => {\n globalThis.setTimeout(resolve, 150);\n });\n\n try {\n const maybePromise = options.dialogActionSubmit?.();\n\n if (maybePromise && typeof (maybePromise as Promise<void>).then === 'function') {\n await maybePromise;\n }\n } finally {\n setIsSubmitting(false);\n }\n }\n\n return (\n <AlertModalDialog onOpenChange={handleClose} open={isOpen}>\n <AlertDialogPortal>\n <AlertDialogContent className=\"sm:max-w-[425px]\">\n <AlertDialogHeader>\n <AlertDialogTitle>{options.dialogTitle}</AlertDialogTitle>\n <AlertDialogDescription>{options.dialogMessage}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isSubmitting} onClick={handleClose}>\n {options.dialogCancelTitle}\n </AlertDialogCancel>\n <AlertDialogAction\n className={buttonVariants({ variant: options.isDestructive ? 'destructive' : 'default' })}\n disabled={isSubmitting}\n onClick={handleAction}\n >\n {isSubmitting ? <Loader2 className=\"fk:h-4 fk:w-4 fk:mr-2 fk:animate-spin\" /> : null}\n {options.dialogActionLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialogPortal>\n </AlertModalDialog>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport type { JSX } from 'react';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { useApolloClient } from '@apollo/client/react';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityDeleteMutation, getEntityDeleteWhere } from '../graphql-client/queries';\nimport { getEntityListQueryName, scheduleEntityListRemoval } from '../graphql-client/refetch-entity-lists';\nimport AlertDialog from '../ui/components/alert-dialog';\nimport { useConfig } from '../core/config/config-context';\nimport { useDispatch } from './actions-context';\nimport type { ActionDeleteEntity } from './types';\n\ntype Props = {\n action: ActionDeleteEntity;\n};\n\nexport default function Delete({ action }: Props): JSX.Element {\n const { currentProject } = useConfig();\n const schema = currentProject?.schema ?? [];\n const apolloClient = useApolloClient();\n const [runMutation, setMutation, setOptions] = useEntityMutation();\n const dispatch = useDispatch();\n const hasFiredSilentDeletionRef = useRef(false);\n const idsToDelete = Array.isArray(action.payload.entityId) ? action.payload.entityId : [action.payload.entityId];\n const entityName = action.payload.entityName === '_asset' ? 'asset' : action.payload.entityName.toLowerCase();\n const isSilent = Boolean(action.payload.silent);\n const isBatch = idsToDelete.length > 1;\n\n // Fire silent deletions exactly once. Running this from the render body\n // re-triggered the mutation on every re-render, flooding /graphql.\n useEffect(() => {\n if (!isSilent || hasFiredSilentDeletionRef.current) {\n return;\n }\n\n hasFiredSilentDeletionRef.current = true;\n void handleDeletion();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isSilent]);\n\n if (isSilent) {\n return <></>;\n }\n\n const dialogOptions = {\n dialogTitle: isBatch ? `Delete ${idsToDelete.length} ${entityName}s` : `Delete ${entityName}`,\n dialogMessage: isBatch\n ? `Are you sure you want to delete the selected ${entityName}s? They will be deleted permanently.`\n : `Are you sure you want to delete the selected ${entityName}? The item will be deleted permanently.`,\n dialogCancelTitle: 'Cancel',\n dialogActionLabel: 'Delete',\n isDestructive: true,\n dialogActionSubmit: () => handleDeletion(),\n };\n\n function handleDeletion(): Promise<void> {\n const mutation = getEntityDeleteMutation(action.payload.entityName, schema, idsToDelete);\n\n return new Promise<void>((resolve, reject) => {\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n variables: { where: getEntityDeleteWhere(idsToDelete) },\n update(cache: { evict: (arg0: { id: string }) => void }) {\n for (const id of idsToDelete) {\n cache.evict({ id });\n }\n },\n onCompleted: () => {\n toast.success(isBatch ? 'Items successfully deleted.' : 'Item successfully deleted.');\n void scheduleEntityListRemoval(\n apolloClient,\n getEntityListQueryName(action.payload.entityName, schema),\n idsToDelete\n );\n dispatch({ type: 'Dismiss', _id: action._id, payload: {} });\n resolve();\n },\n onError: (error: Error) => {\n reject(error);\n },\n });\n runMutation(true);\n });\n }\n\n return <AlertDialog options={dialogOptions} />;\n}\n","import { createContext, useContext, useMemo, useState, type ReactNode } from 'react';\n\ntype DrawerModalContextType = {\n isDirty: boolean;\n setIsDirty: (flag: boolean) => void;\n};\n\nexport const DrawerModalContext = createContext<DrawerModalContextType>({\n isDirty: false,\n setIsDirty: (_flag: boolean) => {\n /* void */\n },\n});\n\nexport const DrawerModalProvider = ({ children }: { children: ReactNode }) => {\n const [dirty, setDirty] = useState(false);\n\n const value = useMemo(() => {\n const setIsDirty = (flag: boolean) => {\n setDirty(flag);\n };\n\n return { isDirty: dirty, setIsDirty };\n }, [dirty, setDirty]);\n\n return <DrawerModalContext.Provider value={value}>{children}</DrawerModalContext.Provider>;\n};\n\nexport function useDrawerModalContext(): DrawerModalContextType {\n return useContext(DrawerModalContext);\n}\n","import { useId } from 'react';\nimport type { JSX } from 'react';\nimport { Checkbox } from '../../ui/primitives/checkbox';\n\ntype Props = {\n scope: string | undefined;\n checked: boolean;\n disabled?: boolean;\n onChange: (checked: boolean) => void;\n};\n\nexport function DefaultValueSwitch({ scope, checked, disabled, onChange }: Props): JSX.Element | null {\n const elementId = useId();\n\n if (!scope || scope === 'default') {\n return null;\n }\n\n return (\n <div className=\"fk:flex fk:items-center fk:space-x-2\">\n <Checkbox checked={checked} disabled={disabled} id={elementId} onCheckedChange={onChange as () => void} />\n <label\n className=\"fk:text-xs fk:font-normal fk:leading-none fk:peer-disabled:cursor-not-allowed fk:peer-disabled:opacity-70\"\n htmlFor={elementId}\n >\n Use default value\n </label>\n </div>\n );\n}\n","import { useId } from 'react';\nimport type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Input } from '../../ui/primitives/input';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Text({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'text'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n const id = useId();\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n setValue(name, {\n ...previousValue,\n value: event.currentTarget.value,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel htmlFor={id}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl>\n <Input\n className=\"fk:w-full fk:mt-0.75\"\n disabled={readOnly || field.value?.disabled}\n id={id}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n value={(field.value?.value as string) || ''}\n />\n </FormControl>\n\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Switch as SwitchPrimitive } from '../../ui/primitives/switch';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Switch({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'switch'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n\n function handleInput(checked: boolean, previousValue: FormFieldValue | undefined): void {\n setValue(name, {\n ...previousValue,\n value: checked,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <div className=\"fk:flex fk:flex-row fk:items-center fk:justify-between fk:rounded-lg fk:border fk:border-input fk:p-3 fk:ring-offset-background fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:corner-squircle\">\n <div className=\"fk:space-y-0.5\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <FormControl>\n <SwitchPrimitive\n checked={field.value?.value ? Boolean(field.value.value) : false}\n disabled={readOnly || field.value?.disabled}\n onCheckedChange={(checked) => {\n handleInput(checked, field.value);\n }}\n />\n </FormControl>\n </div>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import { useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nexport function useOuterClick(\n ref: RefObject<HTMLDivElement>,\n callback: React.Dispatch<React.SetStateAction<boolean>>,\n excludeSelectors?: string\n): void {\n useEffect(() => {\n function handleClickOutside(event: MouseEvent): void {\n if (ref.current && !ref.current.contains(event.target as Node)) {\n if (excludeSelectors) {\n const excludedElements = Array.from(document.querySelectorAll(excludeSelectors));\n\n for (const element of excludedElements) {\n if (element.contains(event.target as Node)) {\n return;\n }\n }\n }\n callback(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [callback, ref, excludeSelectors]);\n\n useEffect(() => {\n function handleFocusOutside(event: FocusEvent): void {\n if (ref.current && !ref.current.contains(event.target as Node)) {\n if (excludeSelectors) {\n const excludedElements = Array.from(document.querySelectorAll(excludeSelectors));\n\n for (const element of excludedElements) {\n if (element.contains(event.target as Node)) {\n return;\n }\n }\n }\n callback(false);\n }\n }\n\n document.addEventListener('focusin', handleFocusOutside);\n\n return () => {\n document.removeEventListener('mousedown', handleFocusOutside);\n };\n }, [callback, ref]);\n}\n","import { useEffect, useId, useRef, useState } from 'react';\nimport type { JSX, RefObject, SyntheticEvent } from 'react';\nimport { useParams } from 'react-router-dom';\nimport bytes from 'bytes';\nimport {\n Copy as CopyIcon,\n Download as DownloadIcon,\n Ellipsis as EllipsisIcon,\n Image as ImageIcon,\n File as FileOutlineIcon,\n Maximize2,\n RefreshCwOff as ClearFieldIcon,\n Search as SearchIcon,\n Upload as UploadIcon,\n X as ClearIcon,\n} from 'lucide-react';\nimport { FileIcon as FileTypeIcon, defaultStyles } from 'react-file-icon';\nimport { toast } from 'sonner';\nimport type { FormFieldValue, ImageValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Button } from '../../ui/primitives/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/primitives/tooltip';\nimport { Collapsible, CollapsibleContent } from '../../ui/primitives/collapsible';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../ui/primitives/dropdown-menu';\nimport { IMAGES_BASE_URL } from '../../core/api-paths';\nimport { uploadAssetFile } from '../../core/upload';\nimport { useOuterClick } from '../../ui/hooks/use-outer-click';\nimport { useAppContext, useAppDispatch } from '../../core/app-context';\nimport type { SingleRelationshipConnection } from '../../core/types';\nimport { useDispatch } from '../../entities/actions-context';\nimport type { FormFieldParams } from '../types';\n\nexport function Uploader({\n control,\n entityId,\n fieldSchema,\n getValues,\n readOnly,\n setValue,\n}: FormFieldParams<'asset'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n const { projectId } = useParams();\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const { relationships } = useAppContext();\n const [isOpen, setIsOpen] = useState(false);\n const inputFile = useRef<HTMLInputElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const selectedAssetIdRef = useRef<string | null>(null);\n const [base64PreviewImage, setBase64PreviewImage] = useState<string | null>(null);\n const [dragActive, setDragActive] = useState(false);\n const [saving, setSaving] = useState(false);\n const id = useId();\n const relationshipId = useId();\n useOuterClick(wrapperRef as RefObject<HTMLDivElement>, setIsOpen, '[data-radix-popper-content-wrapper]');\n\n useEffect(() => {\n const connection = relationships[relationshipId]?.connect as SingleRelationshipConnection | undefined;\n\n if (!connection || selectedAssetIdRef.current === connection._id) {\n return;\n }\n\n const selectedAsset = normalizeSelectedAsset(connection.value);\n\n if (!selectedAsset) {\n return;\n }\n\n const currentValue = getValues(name);\n\n selectedAssetIdRef.current = connection._id;\n setBase64PreviewImage(null);\n setValue(name, {\n ...currentValue,\n value: selectedAsset,\n });\n }, [getValues, name, relationshipId, relationships, setValue]);\n\n function getExtensionFromMime(mime: string | undefined): string | undefined {\n if (!mime) {\n return undefined;\n }\n\n const map: Record<string, string> = {\n 'application/pdf': 'pdf',\n 'application/zip': 'zip',\n 'application/x-zip-compressed': 'zip',\n 'application/json': 'json',\n 'text/csv': 'csv',\n 'text/plain': 'txt',\n 'application/msword': 'doc',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',\n 'application/vnd.ms-excel': 'xls',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',\n 'application/vnd.ms-powerpoint': 'ppt',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'pptx',\n 'application/vnd.apple.keynote': 'key',\n 'application/vnd.apple.numbers': 'numbers',\n 'application/vnd.apple.pages': 'pages',\n 'application/x-7z-compressed': '7z',\n 'application/x-rar-compressed': 'rar',\n 'application/xml': 'xml',\n 'video/mp4': 'mp4',\n 'video/quicktime': 'mov',\n 'audio/mpeg': 'mp3',\n 'audio/wav': 'wav',\n };\n\n if (map[mime]) {\n return map[mime];\n }\n\n const parts = mime.split('/');\n\n if (parts.length === 2) {\n const [, sub] = parts;\n\n if (sub.includes('svg')) {\n return 'svg';\n }\n\n return sub.toLowerCase();\n }\n\n return undefined;\n }\n\n function getFileExtension(originalFilename: string | undefined, mime: string | undefined): string {\n if (originalFilename && originalFilename.includes('.')) {\n const ext = originalFilename.split('.').pop();\n\n if (ext) {\n return ext.toLowerCase();\n }\n }\n\n const fromMime = getExtensionFromMime(mime);\n\n if (fromMime) {\n return fromMime;\n }\n\n return 'file';\n }\n\n async function handleInput(file: File | null, previousValue: FormFieldValue | undefined): Promise<void> {\n if (readOnly || !file) {\n return;\n }\n\n const fileSizeLimit = bytes('4MB');\n\n if (file.size > (fileSizeLimit ?? 0)) {\n toast.error('File size too big (max 4MB)');\n return;\n }\n\n const isImage = file.type.startsWith('image/');\n\n selectedAssetIdRef.current = null;\n\n if (isImage) {\n const reader = new FileReader();\n\n reader.onload = (e) => {\n setBase64PreviewImage(e.target?.result as string);\n };\n\n reader.readAsDataURL(file);\n } else {\n setBase64PreviewImage(null);\n }\n\n setSaving(true);\n\n try {\n // The /assets endpoint stores the blob and creates the asset node in one\n // request; the returned asset (with _id) is connected on entity save.\n const uploaded = await uploadAssetFile(file, projectId);\n\n setValue(name, {\n ...getValues(name),\n value: uploaded.asset,\n });\n } catch (error) {\n console.error(error);\n setBase64PreviewImage(null);\n setValue(name, {\n ...getValues(name),\n value: {\n _id: (previousValue?.value as ImageValue)?._id,\n },\n });\n } finally {\n setSaving(false);\n }\n }\n\n function handleClearing(event: SyntheticEvent): void {\n if (readOnly) {\n return;\n }\n\n event.stopPropagation();\n selectedAssetIdRef.current = null;\n setValue(name, {\n ...getValues(name),\n _id: '',\n value: {\n _id: (getValues(name)?.value as ImageValue)?._id,\n },\n });\n }\n\n function handleCopyUrl(event: SyntheticEvent, fieldValue: FormFieldValue | undefined): void {\n event.stopPropagation();\n\n if (fieldValue?.value && typeof fieldValue.value === 'object' && 'path' in fieldValue.value) {\n navigator.clipboard.writeText(`${IMAGES_BASE_URL}${fieldValue.value.path}`);\n }\n }\n\n function handleUpload(event: SyntheticEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (readOnly) {\n return;\n }\n\n inputFile.current?.click();\n }\n\n function handleSelectAsset(event: SyntheticEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (readOnly) {\n return;\n }\n setIsOpen(false);\n\n const currentAsset = getValues(name)?.value as ImageValue | undefined;\n const selectedAssetId = selectedAssetIdRef.current ?? getReusableAssetId(currentAsset);\n const initialConnection = selectedAssetId\n ? {\n _id: selectedAssetId,\n value: currentAsset,\n }\n : undefined;\n\n appDispatch({\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect: initialConnection,\n disconnect: [],\n },\n },\n });\n\n window.setTimeout(() => {\n actionDispatch({\n type: 'EditRelationship',\n payload: {\n assetAccept: options?.accept,\n connectedEntitiesCount: 0,\n entityId,\n entityName: '_asset',\n initialAssetPath: currentAsset?.path,\n initialConnection,\n relationshipId,\n mode: 'single',\n },\n });\n }, 0);\n }\n\n function handleDownload(event: SyntheticEvent, fieldValue: FormFieldValue | undefined): void {\n event.stopPropagation();\n\n if (fieldValue?.value && typeof fieldValue.value === 'object' && 'path' in fieldValue.value) {\n window.open(`${IMAGES_BASE_URL}${fieldValue.value.path}?download=1`, '_blank');\n }\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel htmlFor={id}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl className=\"fk:flex fk:flex-col fk:w-full fk:min-h-[2.5rem] fk:text-sm\">\n <div\n aria-controls={`image-dropdown-${name}`}\n aria-expanded={isOpen}\n className={`fk:relative fk:flex fk:w-full fk:items-start fk:space-x-2 fk:rounded-md fk:border fk:overflow-hidden fk:focus-visible:outline-hidden fk:ring-offset-background fk:focus-visible:ring-2 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-2 ${\n isOpen ? 'fk:outline-hidden fk:ring-2 fk:ring-ring fk:ring-offset-2' : ''\n } ${dragActive ? 'fk:border-dashed fk:border-2 fk:border-emerald-500 fk:bg-green-50' : 'fk:border-input fk:bg-background'} fk:corner-squircle`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.focus();\n wrapperRef.current?.click();\n setIsOpen(true);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n setIsOpen(true);\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }\n }}\n onDragOver={(e) => {\n if (readOnly) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setDragActive(true);\n }}\n onDragEnter={(e) => {\n if (readOnly) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setDragActive(true);\n }}\n onDragLeave={(e) => {\n if (readOnly) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n\n if (readOnly) {\n return;\n }\n\n const file = e.dataTransfer.files && e.dataTransfer.files[0];\n\n handleInput(file, field.value);\n }}\n ref={wrapperRef}\n role=\"combobox\"\n tabIndex={0}\n >\n <div className=\"fk:flex fk:w-full fk:space-x-2\">\n {/* Initial empty state when there is no image */}\n {!(field.value?.value as ImageValue)?.path && !base64PreviewImage ? (\n <div className=\"fk:flex fk:h-9 fk:w-full fk:px-3 fk:pt-0.5 fk:items-center\">\n <div className=\"fk:flex fk:h-full fk:items-center fk:text-muted-foreground fk:text-sm fk:font-light\">\n <ImageIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" /> Drag or paste file here\n </div>\n <Button\n className=\"fk:ml-auto fk:h-7 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n disabled={readOnly}\n id={id}\n onClick={handleUpload}\n variant=\"ghost\"\n >\n <UploadIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Upload\n </Button>\n <Button\n className=\"fk:ml-2 fk:h-7 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n disabled={readOnly}\n onClick={handleSelectAsset}\n variant=\"ghost\"\n >\n <SearchIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Select\n </Button>\n </div>\n ) : null}\n {/* When there is an image, show the image and its metadata */}\n {(field.value?.value as ImageValue | undefined)?.path && !isOpen ? (\n <div className=\"fk:flex fk:h-9 fk:w-full fk:px-3 fk:pt-0.5 fk:items-center\">\n {(() => {\n const value = field.value?.value as ImageValue;\n const mime = value?.mimeType;\n const path = value?.path || '';\n const isImage = Boolean(\n (mime && mime.startsWith('image/')) || /\\.(png|jpe?g|gif|webp|avif|svg)$/i.test(path)\n );\n\n if (isImage) {\n return (\n <img\n className=\"fk:w-8 fk:h-8 fk:mr-2 fk:rounded-sm fk:object-scale-down fk:corner-squircle\"\n src={`${IMAGES_BASE_URL}${value.path}?w=128&h=128&f=webp`}\n alt=\"Uploaded\"\n />\n );\n }\n\n const ext = getFileExtension(value.originalFilename, value.mimeType);\n const style = (\n defaultStyles as Record<string, Record<string, string | number | boolean | undefined>>\n )[ext];\n\n return (\n <div className=\"fk:w-8 fk:h-8 fk:mr-2 fk:rounded-sm fk:bg-transparent fk:flex fk:items-center fk:justify-center fk:[&>svg]:h-full fk:[&>svg]:w-auto fk:corner-squircle\">\n <FileTypeIcon extension={ext} {...(style || {})} />\n </div>\n );\n })()}\n {bytes((field.value?.value as ImageValue).size)}\n <span className=\"fk:block fk:w-px fk:h-5 fk:mx-2 fk:bg-border\" />\n {(field.value?.value as ImageValue).mimeType}\n {(field.value?.value as ImageValue).width && (field.value?.value as ImageValue).height ? (\n <>\n <span className=\"fk:block fk:w-px fk:h-5 fk:mx-2 fk:bg-border\" />\n {(field.value?.value as ImageValue).width}x{(field.value?.value as ImageValue).height}px\n </>\n ) : null}\n </div>\n ) : null}\n {!(field.value?.value as ImageValue)?.path && base64PreviewImage && (\n <div className=\"fk:flex fk:h-9 fk:w-full fk:px-3 fk:pt-0.5 fk:items-center\">\n <img\n src={base64PreviewImage}\n alt=\"Preview\"\n className=\"fk:mr-2 fk:mt-0.5 fk:rounded-sm fk:h-7 fk:w-7 rounded-md object-cover fk:corner-squircle\"\n />\n Loading image...\n </div>\n )}\n {!(field.value?.value as ImageValue)?.path && !base64PreviewImage && saving ? (\n <div className=\"fk:flex fk:h-9 fk:w-full fk:px-3 fk:pt-0.5 fk:items-center\">\n <div className=\"fk:w-7 fk:h-7 fk:mr-2 fk:rounded-sm fk:bg-muted fk:flex fk:items-center fk:justify-center fk:corner-squircle\">\n <FileOutlineIcon className=\"fk:h-4 fk:w-4 fk:text-muted-foreground\" />\n </div>\n Uploading file...\n </div>\n ) : null}\n {/* When there is an image, show the dropdown menu */}\n {(field.value?.value as ImageValue)?.path ? (\n <div className=\"fk:absolute fk:top-0 fk:right-10\">\n <DropdownMenu modal={false}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <Button\n className=\"fk:h-8 fk:w-8 fk:ml-auto fk:mt-[0.1875rem] fk:rounded-sm fk:corner-squircle\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n onPointerDown={(event) => {\n event.stopPropagation();\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n <EllipsisIcon className=\"fk:h-4 fk:w-4\" />\n </Button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>\n <p>Show actions</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <DropdownMenuContent className=\"fk:w-48\">\n <DropdownMenuGroup>\n <DropdownMenuItem disabled={readOnly} onClick={handleUpload}>\n <UploadIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Upload</span>\n </DropdownMenuItem>\n <DropdownMenuItem disabled={readOnly} onClick={handleSelectAsset}>\n <ImageIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Select asset</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem onClick={(e) => handleDownload(e, field.value)}>\n <DownloadIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Download</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={(e) => handleCopyUrl(e, field.value)}>\n <CopyIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Copy URL</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem disabled={readOnly} onClick={handleClearing}>\n <ClearFieldIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Clear field</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n ) : null}\n <>\n {!isOpen && ((field.value?.value as ImageValue)?.path || base64PreviewImage) ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:absolute fk:right-[0.1875rem] fk:top-[0.1875rem] fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n wrapperRef.current?.focus();\n wrapperRef.current?.click();\n }\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n <Maximize2 className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Expand field</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </>\n {isOpen && ((field.value?.value as ImageValue)?.path || base64PreviewImage) ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:absolute fk:right-[0.1875rem] fk:top-[0.1875rem] fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n <ClearIcon className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Close</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n <Collapsible\n className=\"fk:w-full fk:space-y-2 fk:ml-0!\"\n onOpenChange={setIsOpen}\n open={isOpen && (Boolean((field.value?.value as ImageValue)?.path) || Boolean(base64PreviewImage))}\n >\n <CollapsibleContent className=\"fk:w-full\">\n <div className=\"fk:flex fk:w-full fk:h-[30vh]\" id={`image-dropdown-${name}`}>\n {(field.value?.value as ImageValue | undefined)?.path\n ? (() => {\n const value = field.value?.value as ImageValue;\n const mime = value?.mimeType;\n const path = value?.path || '';\n const isImage = Boolean(\n (mime && mime.startsWith('image/')) || /\\.(png|jpe?g|gif|webp|avif|svg)$/i.test(path)\n );\n\n if (isImage) {\n return (\n <img\n className=\"fk:w-full fk:rounded-md fk:object-scale-down fk:corner-squircle\"\n src={`${IMAGES_BASE_URL}${value.path}?w=624&h=624&f=webp`}\n alt=\"Uploaded\"\n />\n );\n }\n\n const ext = getFileExtension(value.originalFilename, value.mimeType);\n const style = (\n defaultStyles as Record<string, Record<string, string | number | boolean | undefined>>\n )[ext];\n\n return (\n <div className=\"fk:w-full fk:h-full fk:rounded-md fk:bg-muted/40 fk:flex fk:flex-col fk:items-center fk:justify-center fk:text-muted-foreground fk:corner-squircle\">\n <div className=\"fk:w-16 fk:h-16 fk:rounded-sm fk:bg-transparent fk:flex fk:items-center fk:justify-center fk:[&>svg]:h-full fk:[&>svg]:w-auto fk:corner-squircle\">\n <FileTypeIcon extension={ext} {...(style || {})} />\n </div>\n <div className=\"fk:mt-3 fk:text-sm\">\n {value.originalFilename || 'File'} · {bytes(value.size)} · {value.mimeType}\n </div>\n <div className=\"fk:mt-1 fk:text-xs\">Preview not available</div>\n </div>\n );\n })()\n : null}\n </div>\n </CollapsibleContent>\n </Collapsible>\n {saving ? (\n <div className=\"fk:absolute fk:m-0! fk:top-0 fk:left-0 fk:right-0 fk:bottom-0 fk:w-full fk:bg-muted-foreground/5 fk:overflow-hidden\">\n <div className=\"fk:animate-progress fk:w-full fk:h-full fk:bg-muted-foreground/10\" />\n </div>\n ) : null}\n </div>\n </FormControl>\n <input\n accept={options?.accept ? options.accept : 'image/*'}\n className=\"fk:hidden\"\n disabled={readOnly}\n id={`file-upload-${name}`}\n onChange={(e) => {\n const file = e.currentTarget.files && e.currentTarget.files[0];\n\n handleInput(file, field.value);\n }}\n ref={inputFile}\n type=\"file\"\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n\nfunction normalizeSelectedAsset(value: unknown): ImageValue | null {\n if (!value || typeof value !== 'object' || !('_id' in value) || !('path' in value)) {\n return null;\n }\n\n const asset = value as Partial<ImageValue>;\n\n return {\n _id: String(asset._id ?? ''),\n path: String(asset.path ?? ''),\n originalFilename: String(asset.originalFilename ?? ''),\n size: Number(asset.size ?? 0),\n mimeType: String(asset.mimeType ?? ''),\n lqip: String(asset.lqip ?? ''),\n width: Number(asset.width ?? 0),\n height: Number(asset.height ?? 0),\n };\n}\n\nfunction getReusableAssetId(asset: ImageValue | undefined): string {\n if (!asset?._id || asset._id.includes(':')) {\n return '';\n }\n\n return asset._id;\n}\n","import { useId } from 'react';\nimport type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Input } from '../../ui/primitives/input';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Number({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'number'>): JSX.Element {\n const { name, label, options, dataType } = fieldSchema;\n const id = useId();\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n const rawValue = event.currentTarget.value;\n let parsedValue: number | '';\n\n // Handle empty input\n if (rawValue === '') {\n parsedValue = '';\n } else {\n // Parse as float or integer based on dataType\n parsedValue = dataType === 'float' ? parseFloat(rawValue) : parseInt(rawValue, 10);\n\n // If parsing results in NaN, use empty string\n if (isNaN(parsedValue)) {\n parsedValue = '';\n }\n }\n\n setValue(name, {\n ...previousValue,\n value: parsedValue,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel htmlFor={id}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl>\n <Input\n className=\"fk:w-full fk:mt-0.75\"\n disabled={readOnly || field.value?.disabled}\n id={id}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n step={dataType === 'float' ? 'any' : '1'}\n type=\"number\"\n value={(field.value?.value as string | number | undefined) ?? ''}\n />\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport { DayButton, DayPicker, getDefaultClassNames } from 'react-day-picker';\nimport { cn } from '../lib/utils';\nimport { Button, buttonVariants } from './button';\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant'];\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'fk:group/calendar fk:bg-background fk:p-3 fk:[--cell-size:--spacing(8)] fk:in-data-[slot=card-content]:bg-transparent fk:in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString('default', { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('fk:relative fk:flex fk:flex-col fk:gap-4 fk:md:flex-row', defaultClassNames.months),\n month: cn('fk:flex fk:w-full fk:flex-col fk:gap-4', defaultClassNames.month),\n nav: cn(\n 'fk:absolute fk:inset-x-0 fk:top-0 fk:flex fk:w-full fk:items-center fk:justify-between fk:gap-1',\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'fk:size-(--cell-size) fk:p-0 fk:select-none fk:aria-disabled:opacity-50',\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'fk:size-(--cell-size) fk:p-0 fk:select-none fk:aria-disabled:opacity-50',\n defaultClassNames.button_next\n ),\n month_caption: cn(\n 'fk:flex fk:h-(--cell-size) fk:w-full fk:items-center fk:justify-center fk:px-(--cell-size)',\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n 'fk:flex fk:h-(--cell-size) fk:w-full fk:items-center fk:justify-center fk:gap-1.5 fk:text-sm fk:font-medium',\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n 'fk:relative fk:rounded-md fk:border fk:border-input fk:shadow-xs fk:has-focus:border-ring fk:has-focus:ring-[3px] fk:has-focus:ring-ring/50 fk:corner-squircle',\n defaultClassNames.dropdown_root\n ),\n dropdown: cn('fk:absolute fk:inset-0 fk:bg-popover fk:opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'fk:font-medium fk:select-none',\n captionLayout === 'label'\n ? 'fk:text-sm'\n : 'fk:flex fk:h-8 fk:items-center fk:gap-1 fk:rounded-md fk:pr-1 fk:pl-2 fk:text-sm fk:[&>svg]:size-3.5 fk:[&>svg]:text-muted-foreground fk:corner-squircle',\n defaultClassNames.caption_label\n ),\n table: 'fk:w-full fk:border-collapse',\n weekdays: cn('fk:flex', defaultClassNames.weekdays),\n weekday: cn(\n 'fk:flex-1 fk:rounded-md fk:text-[0.8rem] fk:font-normal fk:text-muted-foreground fk:select-none fk:corner-squircle',\n defaultClassNames.weekday\n ),\n week: cn('fk:mt-2 fk:flex fk:w-full', defaultClassNames.week),\n week_number_header: cn('fk:w-(--cell-size) fk:select-none', defaultClassNames.week_number_header),\n week_number: cn('fk:text-[0.8rem] fk:text-muted-foreground fk:select-none', defaultClassNames.week_number),\n day: cn(\n 'fk:group/day fk:relative fk:aspect-square fk:h-full fk:w-full fk:p-0 fk:text-center fk:select-none fk:[&:last-child[data-selected=true]_button]:rounded-r-md',\n props.showWeekNumber\n ? 'fk:[&:nth-child(2)[data-selected=true]_button]:rounded-l-md'\n : 'fk:[&:first-child[data-selected=true]_button]:rounded-l-md',\n defaultClassNames.day\n ),\n range_start: cn('fk:rounded-l-md fk:bg-accent fk:corner-squircle', defaultClassNames.range_start),\n range_middle: cn('fk:rounded-none fk:corner-squircle', defaultClassNames.range_middle),\n range_end: cn('fk:rounded-r-md fk:bg-accent fk:corner-squircle', defaultClassNames.range_end),\n today: cn(\n 'fk:rounded-md fk:bg-accent fk:text-accent-foreground fk:data-[selected=true]:rounded-none fk:corner-squircle',\n defaultClassNames.today\n ),\n outside: cn('fk:text-muted-foreground fk:aria-selected:text-muted-foreground', defaultClassNames.outside),\n disabled: cn('fk:text-muted-foreground fk:opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <ChevronLeftIcon className={cn('size-4', className)} {...props} />;\n }\n\n if (orientation === 'right') {\n return <ChevronRightIcon className={cn('size-4', className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...props} />;\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"fk:flex fk:size-(--cell-size) fk:items-center fk:justify-center fk:text-center\">\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'fk:flex fk:aspect-square fk:size-auto fk:w-full fk:min-w-(--cell-size) fk:flex-col fk:gap-1 fk:leading-none fk:font-normal fk:group-data-[focused=true]/day:relative fk:group-data-[focused=true]/day:z-10 fk:group-data-[focused=true]/day:border-ring fk:group-data-[focused=true]/day:ring-[3px] fk:group-data-[focused=true]/day:ring-ring/50 fk:data-[range-end=true]:rounded-md fk:data-[range-end=true]:rounded-r-md fk:data-[range-end=true]:bg-primary fk:data-[range-end=true]:text-primary-foreground fk:data-[range-middle=true]:rounded-none fk:data-[range-middle=true]:bg-accent fk:data-[range-middle=true]:text-accent-foreground fk:data-[range-start=true]:rounded-md fk:data-[range-start=true]:rounded-l-md fk:data-[range-start=true]:bg-primary fk:data-[range-start=true]:text-primary-foreground fk:data-[selected-single=true]:bg-primary fk:data-[selected-single=true]:text-primary-foreground fk:dark:hover:text-accent-foreground fk:[&>span]:text-xs fk:[&>span]:opacity-70',\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","import { useId } from 'react';\nimport type { JSX, SyntheticEvent } from 'react';\nimport { format } from 'date-fns';\nimport { Calendar as CalendarIcon, X as ClearIcon } from 'lucide-react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Input } from '../../ui/primitives/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../ui/primitives/popover';\nimport { Button } from '../../ui/primitives/button';\nimport { Calendar } from '../../ui/primitives/calendar';\nimport { cn } from '../../ui/lib/utils';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function DateTime({\n control,\n fieldSchema,\n getValues,\n readOnly,\n setValue,\n}: FormFieldParams<'datetime'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n const id = useId();\n\n function handleSelect(date: Date | undefined, previousValue: FormFieldValue | undefined): void {\n setValue(name, {\n ...previousValue,\n value: date ? date.toISOString() : '',\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n function handleClearing(event: SyntheticEvent): void {\n event.preventDefault();\n setValue(name, { ...getValues(name), value: undefined });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n >\n <FormLabel htmlFor={id}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl>\n <Popover>\n <PopoverTrigger asChild>\n <Button\n className={cn(\n 'fk:w-full fk:justify-start fk:h-10 fk:text-left fk:font-normal fk:hover:bg-transparent fk:relative',\n !field.value?.value && 'fk:text-muted-foreground'\n )}\n disabled={readOnly || field.value?.disabled}\n id={id}\n variant=\"outline\"\n >\n <div className=\"fk:flex fk:items-center fk:w-full\">\n <span className=\"fk:grow\">\n {field.value?.value\n ? format(new Date(field.value.value as string), 'PPP') +\n ' at ' +\n format(new Date(field.value.value as string), 'HH:mm')\n : 'Pick a date and time'}\n </span>\n <div className=\"fk:flex fk:items-center fk:gap-1\">\n {field.value?.value && (\n <span\n className=\"fk:p-2 fk:text-muted-foreground fk:hover:text-accent-foreground fk:cursor-pointer\"\n onClick={(e) => {\n e.stopPropagation();\n handleClearing(e);\n }}\n role=\"button\"\n aria-label=\"Clear date\"\n >\n <ClearIcon className=\"fk:h-4 fk:w-4\" />\n </span>\n )}\n <CalendarIcon className=\"fk:h-4 fk:w-4 fk:text-muted-foreground fk:hover:text-accent-foreground\" />\n </div>\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"fk:w-auto fk:p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={field.value?.value ? new Date(field.value.value as string) : undefined}\n onSelect={(date) => handleSelect(date, field.value)}\n initialFocus\n />\n <div className=\"fk:p-3 fk:border-t fk:border-border\">\n <label htmlFor=\"time\" className=\"fk:text-sm fk:font-medium\">\n Time\n </label>\n <Input\n className=\"fk:mt-1 fk:w-[90px]\"\n id=\"time\"\n onChange={(e) => {\n const timeValue = e.target.value;\n const [hours, minutes] = timeValue.split(':');\n\n const date = field.value?.value ? new Date(field.value.value as string) : new Date();\n date.setHours(parseInt(hours));\n date.setMinutes(parseInt(minutes));\n\n setValue(name, {\n ...field.value,\n value: date.toISOString(),\n });\n }}\n type=\"time\"\n value={field.value?.value ? format(new Date(field.value.value as string), 'HH:mm') : ''}\n />\n </div>\n </PopoverContent>\n </Popover>\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import type { EditorInstance } from 'novel';\n\ntype HeadingLevel = 1 | 2 | 3;\ntype EditorRange = {\n from: number;\n to: number;\n};\n\ntype SocialEmbedOptions = {\n src: string;\n};\n\nexport type NovelEditorInput = EditorInstance | null | undefined;\n\nexport interface NovelEditorChain {\n focus: () => NovelEditorChain;\n clearNodes: () => NovelEditorChain;\n deleteRange: (range: EditorRange) => NovelEditorChain;\n toggleNode: (typeOrName: string, toggleTypeOrName: string) => NovelEditorChain;\n setNode: (typeOrName: string, attributes?: { level?: HeadingLevel }) => NovelEditorChain;\n toggleBold: () => NovelEditorChain;\n toggleItalic: () => NovelEditorChain;\n toggleUnderline: () => NovelEditorChain;\n toggleStrike: () => NovelEditorChain;\n toggleCode: () => NovelEditorChain;\n toggleHeading: (attributes: { level: HeadingLevel }) => NovelEditorChain;\n toggleTaskList: () => NovelEditorChain;\n toggleBulletList: () => NovelEditorChain;\n toggleOrderedList: () => NovelEditorChain;\n toggleBlockquote: () => NovelEditorChain;\n toggleCodeBlock: () => NovelEditorChain;\n setYoutubeVideo: (attributes: SocialEmbedOptions) => NovelEditorChain;\n setTweet: (attributes: SocialEmbedOptions) => NovelEditorChain;\n run: () => boolean;\n}\n\nexport type NovelEditorWithRichCommands = Omit<EditorInstance, 'chain'> & {\n chain: () => NovelEditorChain;\n};\n\nexport function asNovelEditorWithRichCommands(editor: NovelEditorInput): NovelEditorWithRichCommands | null {\n if (editor == null) {\n return null;\n }\n\n return editor as unknown as NovelEditorWithRichCommands;\n}\n","import {\n CheckSquare,\n Code,\n Heading1,\n Heading2,\n Heading3,\n ImageIcon,\n List,\n ListOrdered,\n Text,\n TextQuote,\n Twitter,\n Youtube,\n} from 'lucide-react';\nimport { Command, createSuggestionItems, renderItems } from 'novel';\nimport { asNovelEditorWithRichCommands } from './novel-editor';\n// TODO: Add image upload function\n// import { uploadFn } from './image-upload';\n\nexport const suggestionItems = createSuggestionItems([\n {\n title: 'Text',\n description: 'Just start typing with plain text.',\n searchTerms: ['p', 'paragraph'],\n icon: <Text size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).toggleNode('paragraph', 'paragraph').run();\n },\n },\n {\n title: 'To-do List',\n description: 'Track tasks with a to-do list.',\n searchTerms: ['todo', 'task', 'list', 'check', 'checkbox'],\n icon: <CheckSquare size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).toggleTaskList().run();\n },\n },\n {\n title: 'Heading 1',\n description: 'Big section heading.',\n searchTerms: ['title', 'big', 'large'],\n icon: <Heading1 size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).setNode('heading', { level: 1 }).run();\n },\n },\n {\n title: 'Heading 2',\n description: 'Medium section heading.',\n searchTerms: ['subtitle', 'medium'],\n icon: <Heading2 size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).setNode('heading', { level: 2 }).run();\n },\n },\n {\n title: 'Heading 3',\n description: 'Small section heading.',\n searchTerms: ['subtitle', 'small'],\n icon: <Heading3 size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).setNode('heading', { level: 3 }).run();\n },\n },\n {\n title: 'Bullet List',\n description: 'Create a simple bullet list.',\n searchTerms: ['unordered', 'point'],\n icon: <List size={18} />,\n command: ({ editor, range }) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().deleteRange(range).toggleBulletList().run();\n },\n },\n {\n title: 'Numbered List',\n description: 'Create a list with numbering.',\n searchTerms: ['ordered'],\n icon: <ListOrdered size={18} />,\n command: ({ editor, range }) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().deleteRange(range).toggleOrderedList().run();\n },\n },\n {\n title: 'Quote',\n description: 'Capture a quote.',\n searchTerms: ['blockquote'],\n icon: <TextQuote size={18} />,\n command: ({ editor, range }) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor\n .chain()\n .focus()\n .deleteRange(range)\n .toggleNode('paragraph', 'paragraph')\n .toggleBlockquote()\n .run();\n },\n },\n {\n title: 'Code',\n description: 'Capture a code snippet.',\n searchTerms: ['codeblock'],\n icon: <Code size={18} />,\n command: ({ editor, range }) => editor.chain().focus().deleteRange(range).toggleCodeBlock().run(),\n },\n {\n title: 'Image',\n description: 'Upload an image from your computer.',\n searchTerms: ['photo', 'picture', 'media'],\n icon: <ImageIcon size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).run();\n // upload image\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n input.onchange = async () => {\n if (input.files?.length) {\n // const file = input.files[0];\n // const pos = editor.view.state.selection.from;\n // uploadFn(file, editor.view, pos);\n }\n };\n input.click();\n },\n },\n {\n title: 'Youtube',\n description: 'Embed a Youtube video.',\n searchTerms: ['video', 'youtube', 'embed'],\n icon: <Youtube size={18} />,\n command: ({ editor, range }) => {\n const videoLink = prompt('Please enter Youtube Video Link');\n //From https://regexr.com/3dj5t\n const ytregex = new RegExp(\n /^((?:https?:)?\\/\\/)?((?:www|m)\\.)?((?:youtube\\.com|youtu.be))(\\/(?:[\\w-]+\\?v=|embed\\/|v\\/)?)([\\w-]+)(\\S+)?$/\n );\n\n if (ytregex.test(videoLink ?? '')) {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setYoutubeVideo({\n src: videoLink ?? '',\n })\n .run();\n } else {\n if (videoLink !== null) {\n alert('Please enter a correct Youtube Video Link');\n }\n }\n },\n },\n {\n title: 'Twitter',\n description: 'Embed a Tweet.',\n searchTerms: ['twitter', 'embed'],\n icon: <Twitter size={18} />,\n command: ({ editor, range }) => {\n const tweetLink = prompt('Please enter Twitter Link');\n const tweetRegex = new RegExp(/^https?:\\/\\/(www\\.)?x\\.com\\/([a-zA-Z0-9_]{1,15})(\\/status\\/(\\d+))?(\\/\\S*)?$/);\n\n if (tweetRegex.test(tweetLink ?? '')) {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setTweet({\n src: tweetLink ?? '',\n })\n .run();\n } else {\n if (tweetLink !== null) {\n alert('Please enter a correct Twitter Link');\n }\n }\n },\n },\n]);\n\nexport const slashCommand = Command.configure({\n suggestion: {\n items: () => suggestionItems,\n render: renderItems,\n },\n});\n","import { Check, ChevronDown } from 'lucide-react';\nimport { EditorBubbleItem, useEditor } from 'novel';\nimport { Button } from '../../../../ui/primitives/button';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../../ui/primitives/popover';\n\nexport interface BubbleColorMenuItem {\n name: string;\n color: string;\n}\n\nconst TEXT_COLORS: BubbleColorMenuItem[] = [\n {\n name: 'Default',\n color: 'var(--novel-black)',\n },\n {\n name: 'Purple',\n color: '#9333EA',\n },\n {\n name: 'Red',\n color: '#E00000',\n },\n {\n name: 'Yellow',\n color: '#EAB308',\n },\n {\n name: 'Blue',\n color: '#2563EB',\n },\n {\n name: 'Green',\n color: '#008A00',\n },\n {\n name: 'Orange',\n color: '#FFA500',\n },\n {\n name: 'Pink',\n color: '#BA4081',\n },\n {\n name: 'Gray',\n color: '#A8A29E',\n },\n];\n\nconst HIGHLIGHT_COLORS: BubbleColorMenuItem[] = [\n {\n name: 'Default',\n color: 'var(--novel-highlight-default)',\n },\n {\n name: 'Purple',\n color: 'var(--novel-highlight-purple)',\n },\n {\n name: 'Red',\n color: 'var(--novel-highlight-red)',\n },\n {\n name: 'Yellow',\n color: 'var(--novel-highlight-yellow)',\n },\n {\n name: 'Blue',\n color: 'var(--novel-highlight-blue)',\n },\n {\n name: 'Green',\n color: 'var(--novel-highlight-green)',\n },\n {\n name: 'Orange',\n color: 'var(--novel-highlight-orange)',\n },\n {\n name: 'Pink',\n color: 'var(--novel-highlight-pink)',\n },\n {\n name: 'Gray',\n color: 'var(--novel-highlight-gray)',\n },\n];\n\ninterface ColorSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const ColorSelector = ({ open, onOpenChange }: ColorSelectorProps) => {\n const { editor } = useEditor();\n\n if (!editor) return null;\n\n const activeColorItem = TEXT_COLORS.find(({ color }) => editor.isActive('textStyle', { color }));\n const activeHighlightItem = HIGHLIGHT_COLORS.find(({ color }) => editor.isActive('highlight', { color }));\n\n return (\n <Popover modal={true} open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Button size=\"sm\" className=\"fk:gap-2 fk:rounded-none fk:corner-squircle\" variant=\"ghost\">\n <span\n className=\"fk:rounded-xs fk:px-1 fk:corner-squircle\"\n style={{\n color: activeColorItem?.color,\n backgroundColor: activeHighlightItem?.color,\n }}\n >\n A\n </span>\n <ChevronDown className=\"fk:h-4 fk:w-4\" />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent\n sideOffset={5}\n className=\"fk:my-1 fk:flex fk:max-h-80 fk:w-48 fk:flex-col fk:overflow-hidden fk:overflow-y-auto fk:rounded-sm fk:border fk:p-1 fk:shadow-xl fk:corner-squircle\"\n align=\"start\"\n >\n <div className=\"fk:flex fk:flex-col\">\n <div className=\"fk:my-1 fk:px-2 fk:text-sm fk:font-semibold fk:text-muted-foreground\">Color</div>\n {TEXT_COLORS.map(({ name, color }) => (\n <EditorBubbleItem\n key={name}\n onSelect={() => {\n editor.commands.unsetColor();\n name !== 'Default' &&\n editor\n .chain()\n .focus()\n .setColor(color || '')\n .run();\n onOpenChange(false);\n }}\n className=\"fk:flex fk:cursor-pointer fk:items-center fk:justify-between fk:px-2 fk:py-1 fk:text-sm fk:hover:bg-muted\"\n >\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <div className=\"fk:rounded-xs fk:border fk:px-2 fk:py-px fk:font-medium fk:corner-squircle\" style={{ color }}>\n A\n </div>\n <span>{name}</span>\n </div>\n </EditorBubbleItem>\n ))}\n </div>\n <div>\n <div className=\"fk:my-1 fk:px-2 fk:text-sm fk:font-semibold fk:text-muted-foreground\">Background</div>\n {HIGHLIGHT_COLORS.map(({ name, color }) => (\n <EditorBubbleItem\n key={name}\n onSelect={() => {\n editor.commands.unsetHighlight();\n name !== 'Default' && editor.chain().focus().setHighlight({ color }).run();\n onOpenChange(false);\n }}\n className=\"fk:flex fk:cursor-pointer fk:items-center fk:justify-between fk:px-2 fk:py-1 fk:text-sm fk:hover:bg-muted\"\n >\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <div\n className=\"fk:rounded-xs fk:border fk:px-2 fk:py-px fk:font-medium fk:corner-squircle\"\n style={{ backgroundColor: color }}\n >\n A\n </div>\n <span>{name}</span>\n </div>\n {editor.isActive('highlight', { color }) && <Check className=\"fk:h-4 fk:w-4\" />}\n </EditorBubbleItem>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n );\n};\n","import { Button } from '../../../../ui/primitives/button';\nimport { PopoverContent } from '../../../../ui/primitives/popover';\nimport { cn } from '../../../../ui/lib/utils';\nimport { Popover } from 'radix-ui';\nimport { Check, Trash } from 'lucide-react';\nimport { useEditor } from 'novel';\nimport { useEffect, useRef } from 'react';\n\nexport function isValidUrl(url: string) {\n try {\n new URL(url);\n return true;\n } catch (_e) {\n return false;\n }\n}\n\nexport function getUrlFromString(str: string) {\n if (isValidUrl(str)) return str;\n try {\n if (str.includes('.') && !str.includes(' ')) {\n return new URL(`https://${str}`).toString();\n }\n } catch (_e) {\n return null;\n }\n}\n\ninterface LinkSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const LinkSelector = ({ open, onOpenChange }: LinkSelectorProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const { editor } = useEditor();\n\n // Autofocus on input by default\n useEffect(() => {\n inputRef.current?.focus();\n });\n\n if (!editor) return null;\n\n return (\n <Popover.Root modal={true} open={open} onOpenChange={onOpenChange}>\n <Popover.Trigger asChild>\n <Button size=\"sm\" variant=\"ghost\" className=\"fk:gap-2 fk:rounded-none fk:border-none fk:corner-squircle\">\n <p className=\"fk:text-base\">↗</p>\n <p\n className={cn('fk:underline fk:decoration-stone-400 fk:underline-offset-4', {\n 'fk:text-blue-500': editor.isActive('link'),\n })}\n >\n Link\n </p>\n </Button>\n </Popover.Trigger>\n <PopoverContent align=\"start\" className=\"fk:w-60 fk:p-0\" sideOffset={10}>\n <form\n onSubmit={(e) => {\n const target = e.currentTarget as HTMLFormElement;\n e.preventDefault();\n const input = target[0] as HTMLInputElement;\n const url = getUrlFromString(input.value);\n if (url) {\n editor.chain().focus().setLink({ href: url }).run();\n onOpenChange(false);\n }\n }}\n className=\"fk:flex fk:p-1\"\n >\n <input\n ref={inputRef}\n type=\"text\"\n placeholder=\"Paste a link\"\n className=\"fk:flex-1 fk:bg-background fk:p-1 fk:text-sm fk:outline-hidden\"\n defaultValue={editor.getAttributes('link').href || ''}\n />\n {editor.getAttributes('link').href ? (\n <Button\n size=\"icon\"\n variant=\"outline\"\n type=\"button\"\n className=\"fk:flex fk:h-8 fk:items-center fk:rounded-xs fk:p-1 fk:text-red-600 fk:transition-all fk:hover:bg-red-100 fk:dark:hover:bg-red-800 fk:corner-squircle\"\n onClick={() => {\n editor.chain().focus().unsetLink().run();\n if (inputRef.current) inputRef.current.value = '';\n onOpenChange(false);\n }}\n >\n <Trash className=\"fk:h-4 fk:w-4\" />\n </Button>\n ) : (\n <Button size=\"icon\" className=\"fk:h-8\">\n <Check className=\"fk:h-4 fk:w-4\" />\n </Button>\n )}\n </form>\n </PopoverContent>\n </Popover.Root>\n );\n};\n","import {\n Check,\n CheckSquare,\n ChevronDown,\n Code,\n Heading1,\n Heading2,\n Heading3,\n ListOrdered,\n type LucideIcon,\n TextIcon,\n TextQuote,\n} from 'lucide-react';\nimport { EditorBubbleItem, useEditor } from 'novel';\nimport { Button } from '../../../../ui/primitives/button';\nimport { Popover } from 'radix-ui';\nimport { asNovelEditorWithRichCommands, type NovelEditorInput } from '../novel-editor';\n\nexport type SelectorItem = {\n name: string;\n icon: LucideIcon;\n command: (editor: NovelEditorInput) => void;\n isActive: (editor: NovelEditorInput) => boolean;\n};\n\nconst items: SelectorItem[] = [\n {\n name: 'Text',\n icon: TextIcon,\n command: (editor) => editor?.chain().focus().clearNodes().run(),\n // I feel like there has to be a more efficient way to do this – feel free to PR if you know how!\n isActive: (editor) =>\n editor != null &&\n editor.isActive('paragraph') &&\n !editor.isActive('bulletList') &&\n !editor.isActive('orderedList'),\n },\n {\n name: 'Heading 1',\n icon: Heading1,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleHeading({ level: 1 }).run();\n },\n isActive: (editor) => editor != null && editor.isActive('heading', { level: 1 }),\n },\n {\n name: 'Heading 2',\n icon: Heading2,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleHeading({ level: 2 }).run();\n },\n isActive: (editor) => editor != null && editor.isActive('heading', { level: 2 }),\n },\n {\n name: 'Heading 3',\n icon: Heading3,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleHeading({ level: 3 }).run();\n },\n isActive: (editor) => editor != null && editor.isActive('heading', { level: 3 }),\n },\n {\n name: 'To-do List',\n icon: CheckSquare,\n command: (editor) => editor?.chain().focus().clearNodes().toggleTaskList().run(),\n isActive: (editor) => editor != null && editor.isActive('taskItem'),\n },\n {\n name: 'Bullet List',\n icon: ListOrdered,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleBulletList().run();\n },\n isActive: (editor) => editor != null && editor.isActive('bulletList'),\n },\n {\n name: 'Numbered List',\n icon: ListOrdered,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleOrderedList().run();\n },\n isActive: (editor) => editor != null && editor.isActive('orderedList'),\n },\n {\n name: 'Quote',\n icon: TextQuote,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleBlockquote().run();\n },\n isActive: (editor) => editor != null && editor.isActive('blockquote'),\n },\n {\n name: 'Code',\n icon: Code,\n command: (editor) => editor?.chain().focus().clearNodes().toggleCodeBlock().run(),\n isActive: (editor) => editor != null && editor.isActive('codeBlock'),\n },\n];\ninterface NodeSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const NodeSelector = ({ open, onOpenChange }: NodeSelectorProps) => {\n const { editor } = useEditor();\n if (!editor) return null;\n const activeItem = items.filter((item) => item.isActive(editor)).pop() ?? {\n name: 'Multiple',\n };\n\n return (\n <Popover.Root modal={true} open={open} onOpenChange={onOpenChange}>\n <Popover.Trigger asChild className=\"fk:gap-2 fk:rounded-none fk:border-none fk:hover:bg-muted fk:focus:ring-0 fk:corner-squircle\">\n <Button size=\"sm\" variant=\"ghost\" className=\"fk:gap-2\">\n <span className=\"fk:whitespace-nowrap fk:text-sm\">{activeItem.name}</span>\n <ChevronDown className=\"fk:h-4 fk:w-4\" />\n </Button>\n </Popover.Trigger>\n <Popover.Content sideOffset={5} align=\"start\" className=\"fk:w-48 fk:p-1\">\n {items.map((item) => (\n <EditorBubbleItem\n key={item.name}\n onSelect={(editor) => {\n item.command(editor);\n onOpenChange(false);\n }}\n className=\"fk:flex fk:cursor-pointer fk:items-center fk:justify-between fk:rounded-xs fk:px-2 fk:py-1 fk:text-sm fk:hover:bg-muted fk:corner-squircle\"\n >\n <div className=\"fk:flex fk:items-center fk:space-x-2\">\n <div className=\"fk:rounded-xs fk:border fk:p-1 fk:corner-squircle\">\n <item.icon className=\"fk:h-3 fk:w-3\" />\n </div>\n <span>{item.name}</span>\n </div>\n {activeItem.name === item.name && <Check className=\"fk:h-4 fk:w-4\" />}\n </EditorBubbleItem>\n ))}\n </Popover.Content>\n </Popover.Root>\n );\n};\n","import { Button } from '../../../../ui/primitives/button';\nimport { cn } from '../../../../ui/lib/utils';\nimport { SigmaIcon } from 'lucide-react';\nimport { useEditor } from 'novel';\n\nexport const MathSelector = () => {\n const { editor } = useEditor();\n\n if (!editor) return null;\n\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"fk:rounded-none fk:w-12 fk:corner-squircle\"\n onClick={(evt) => {\n if (editor.isActive('math')) {\n editor.chain().focus().unsetLatex().run();\n } else {\n const { from, to } = editor.state.selection;\n const latex = editor.state.doc.textBetween(from, to);\n\n if (!latex) return;\n\n editor.chain().focus().setLatex({ latex }).run();\n }\n }}\n >\n <SigmaIcon className={cn('fk:size-4', { 'fk:text-blue-500': editor.isActive('math') })} strokeWidth={2.3} />\n </Button>\n );\n};\n","import { Button } from '../../../../ui/primitives/button';\nimport { cn } from '../../../../ui/lib/utils';\nimport { BoldIcon, CodeIcon, ItalicIcon, StrikethroughIcon, UnderlineIcon } from 'lucide-react';\nimport { EditorBubbleItem, useEditor } from 'novel';\nimport type { SelectorItem } from './node-selector';\nimport { asNovelEditorWithRichCommands } from '../novel-editor';\n\nexport const TextButtons = () => {\n const { editor } = useEditor();\n\n if (!editor) return null;\n\n const items: SelectorItem[] = [\n {\n name: 'bold',\n isActive: (editor) => editor != null && editor.isActive('bold'),\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().toggleBold().run();\n },\n icon: BoldIcon,\n },\n {\n name: 'italic',\n isActive: (editor) => editor != null && editor.isActive('italic'),\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().toggleItalic().run();\n },\n icon: ItalicIcon,\n },\n {\n name: 'underline',\n isActive: (editor) => editor != null && editor.isActive('underline'),\n command: (editor) => editor?.chain().focus().toggleUnderline().run(),\n icon: UnderlineIcon,\n },\n {\n name: 'strike',\n isActive: (editor) => editor != null && editor.isActive('strike'),\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().toggleStrike().run();\n },\n icon: StrikethroughIcon,\n },\n {\n name: 'code',\n isActive: (editor) => editor != null && editor.isActive('code'),\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().toggleCode().run();\n },\n icon: CodeIcon,\n },\n ];\n\n return (\n <div className=\"fk:flex\">\n {items.map((item) => (\n <EditorBubbleItem\n key={item.name}\n onSelect={(editor) => {\n item.command(editor);\n }}\n >\n <Button size=\"sm\" className=\"fk:rounded-none fk:corner-squircle\" onClick={(e) => e.preventDefault()} variant=\"ghost\">\n <item.icon\n className={cn('fk:h-4 fk:w-4', {\n 'fk:text-blue-500': item.isActive(editor),\n })}\n />\n </Button>\n </EditorBubbleItem>\n ))}\n </div>\n );\n};\n","export default function Magic({ className }: { className: string }) {\n return (\n <svg\n width=\"469\"\n height=\"469\"\n viewBox=\"0 0 469 469\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n shapeRendering=\"geometricPrecision\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n className={className}\n >\n <title>Magic AI icon</title>\n\n <path\n d=\"M237.092 62.3004L266.754 71.4198C267.156 71.5285 267.51 71.765 267.765 72.0934C268.02 72.4218 268.161 72.8243 268.166 73.2399C268.172 73.6555 268.042 74.0616 267.796 74.3967C267.55 74.7318 267.201 74.9777 266.803 75.097L237.141 84.3145C236.84 84.4058 236.566 84.5699 236.344 84.7922C236.121 85.0146 235.957 85.2883 235.866 85.5893L226.747 115.252C226.638 115.653 226.401 116.008 226.073 116.263C225.745 116.517 225.342 116.658 224.926 116.664C224.511 116.669 224.105 116.539 223.77 116.293C223.435 116.047 223.189 115.699 223.069 115.301L213.852 85.6383C213.761 85.3374 213.597 85.0636 213.374 84.8412C213.152 84.6189 212.878 84.4548 212.577 84.3635L182.914 75.2441C182.513 75.1354 182.158 74.8989 181.904 74.5705C181.649 74.2421 181.508 73.8396 181.503 73.424C181.497 73.0084 181.627 72.6023 181.873 72.2672C182.119 71.9321 182.467 71.6863 182.865 71.5669L212.528 62.3494C212.829 62.2582 213.103 62.0941 213.325 61.8717C213.547 61.6494 213.712 61.3756 213.803 61.0747L222.922 31.4121C223.031 31.0109 223.267 30.656 223.596 30.4013C223.924 30.1465 224.327 30.0057 224.742 30.0002C225.158 29.9946 225.564 30.1247 225.899 30.3706C226.234 30.6165 226.48 30.9649 226.599 31.363L235.817 61.0257C235.908 61.3266 236.072 61.6003 236.295 61.8227C236.517 62.0451 236.791 62.2091 237.092 62.3004Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M155.948 155.848L202.771 168.939C203.449 169.131 204.045 169.539 204.47 170.101C204.895 170.663 205.125 171.348 205.125 172.052C205.125 172.757 204.895 173.442 204.47 174.004C204.045 174.566 203.449 174.974 202.771 175.166L155.899 188.06C155.361 188.209 154.87 188.496 154.475 188.891C154.079 189.286 153.793 189.777 153.644 190.316L140.553 237.138C140.361 237.816 139.953 238.413 139.391 238.838C138.829 239.262 138.144 239.492 137.44 239.492C136.735 239.492 136.05 239.262 135.488 238.838C134.927 238.413 134.519 237.816 134.327 237.138L121.432 190.267C121.283 189.728 120.997 189.237 120.601 188.842C120.206 188.446 119.715 188.16 119.177 188.011L72.3537 174.92C71.676 174.728 71.0795 174.32 70.6547 173.759C70.2299 173.197 70 172.512 70 171.807C70 171.103 70.2299 170.418 70.6547 169.856C71.0795 169.294 71.676 168.886 72.3537 168.694L119.226 155.799C119.764 155.65 120.255 155.364 120.65 154.969C121.046 154.573 121.332 154.082 121.481 153.544L134.572 106.721C134.764 106.043 135.172 105.447 135.734 105.022C136.295 104.597 136.981 104.367 137.685 104.367C138.389 104.367 139.075 104.597 139.637 105.022C140.198 105.447 140.606 106.043 140.798 106.721L153.693 153.593C153.842 154.131 154.128 154.622 154.524 155.018C154.919 155.413 155.41 155.699 155.948 155.848Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M386.827 289.992C404.33 292.149 403.84 305.828 386.876 307.299C346.623 310.829 298.869 316.271 282.199 360.005C274.844 379.192 269.942 403.2 267.49 432.029C267.427 432.846 267.211 433.626 266.856 434.319C266.501 435.012 266.015 435.602 265.431 436.05C254.988 444.041 251.212 434.186 250.183 425.606C239.2 332.353 214.588 316.909 124.668 306.122C123.892 306.031 123.151 305.767 122.504 305.35C121.857 304.933 121.322 304.375 120.942 303.72C116.399 295.679 119.324 291.038 129.718 289.796C224.688 278.47 236.062 262.83 250.183 169.331C252.177 156.355 257.259 154.083 265.431 162.516C266.51 163.593 267.202 165.099 267.392 166.782C279.257 258.564 293.328 278.617 386.827 289.992Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","const CrazySpinner = () => {\n return (\n <div className=\"fk:flex fk:items-center fk:justify-center fk:gap-0.5\">\n <div className=\"fk:h-1.5 fk:w-1.5 fk:animate-bounce fk:rounded-full fk:bg-pink-500 [animation-delay:-0.3s] fk:corner-squircle\" />\n <div className=\"fk:h-1.5 fk:w-1.5 fk:animate-bounce fk:rounded-full fk:bg-pink-600 [animation-delay:-0.15s] fk:corner-squircle\" />\n <div className=\"fk:h-1.5 fk:w-1.5 fk:animate-bounce fk:rounded-full fk:bg-pink-600 fk:corner-squircle\" />\n </div>\n );\n};\n\nexport default CrazySpinner;\n","import type { JSX } from 'react';\nimport { CommandGroup, CommandItem, CommandSeparator } from '../../../../ui/primitives/command';\nimport { useEditor } from 'novel';\nimport { Check, TextQuote, TrashIcon } from 'lucide-react';\n\nexport default function AICompletionCommands({\n completion,\n onDiscard,\n}: {\n completion: string;\n onDiscard: () => void;\n}): JSX.Element | null {\n const { editor } = useEditor();\n\n if (!editor) return null;\n\n return (\n <>\n <CommandGroup>\n <CommandItem\n className=\"fk:gap-2 fk:px-4\"\n value=\"replace\"\n onSelect={() => {\n const { selection } = editor.view.state;\n\n editor\n .chain()\n .focus()\n .insertContentAt(\n {\n from: selection.from,\n to: selection.to,\n },\n completion\n )\n .run();\n }}\n >\n <Check className=\"fk:h-4 fk:w-4 fk:text-muted-foreground\" />\n Replace selection\n </CommandItem>\n <CommandItem\n className=\"fk:gap-2 fk:px-4\"\n value=\"insert\"\n onSelect={() => {\n const { selection } = editor.view.state;\n editor\n .chain()\n .focus()\n .insertContentAt(selection.to + 1, completion)\n .run();\n }}\n >\n <TextQuote className=\"fk:h-4 fk:w-4 fk:text-muted-foreground\" />\n Insert below\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n\n <CommandGroup>\n <CommandItem onSelect={onDiscard} value=\"thrash\" className=\"fk:gap-2 fk:px-4\">\n <TrashIcon className=\"fk:h-4 fk:w-4 fk:text-muted-foreground\" />\n Discard\n </CommandItem>\n </CommandGroup>\n </>\n );\n}\n","import type { JSX } from 'react';\nimport { ArrowDownWideNarrow, CheckCheck, RefreshCcwDot, StepForward, WrapText } from 'lucide-react';\nimport { getPrevText, useEditor } from 'novel';\nimport { CommandGroup, CommandItem, CommandSeparator } from '../../../../ui/primitives/command';\n\nconst options = [\n {\n value: 'improve',\n label: 'Improve writing',\n icon: RefreshCcwDot,\n },\n\n {\n value: 'fix',\n label: 'Fix grammar',\n icon: CheckCheck,\n },\n {\n value: 'shorter',\n label: 'Make shorter',\n icon: ArrowDownWideNarrow,\n },\n {\n value: 'longer',\n label: 'Make longer',\n icon: WrapText,\n },\n];\n\ninterface AISelectorCommandsProps {\n onSelect: (value: string, option: string) => void;\n}\n\nexport default function AISelectorCommands({ onSelect }: AISelectorCommandsProps): JSX.Element | null {\n const { editor } = useEditor();\n\n if (!editor) return null;\n\n return (\n <>\n <CommandGroup heading=\"Edit or review selection\">\n {options.map((option) => (\n <CommandItem\n onSelect={(value) => {\n const slice = editor.state.selection.content();\n const text = editor.storage.markdown.serializer.serialize(slice.content);\n onSelect(text, value);\n }}\n className=\"fk:flex fk:gap-2 fk:px-4\"\n key={option.value}\n value={option.value}\n >\n <option.icon className=\"fk:h-4 fk:w-4 fk:text-foreground\" />\n {option.label}\n </CommandItem>\n ))}\n </CommandGroup>\n <CommandSeparator />\n <CommandGroup heading=\"Use AI to do more\">\n <CommandItem\n onSelect={() => {\n const pos = editor.state.selection.from;\n\n const text = getPrevText(editor, pos);\n onSelect(text, 'continue');\n }}\n value=\"continue\"\n className=\"fk:gap-2 fk:px-4\"\n >\n <StepForward className=\"fk:h-4 fk:w-4 fk:text-foreground\" />\n Continue writing\n </CommandItem>\n </CommandGroup>\n </>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport type { JSX } from 'react';\nimport { useCompletion } from '@ai-sdk/react';\nimport { ArrowUp } from 'lucide-react';\nimport { addAIHighlight, useEditor } from 'novel';\nimport { useParams } from 'react-router-dom';\nimport Markdown from 'react-markdown';\nimport { toast } from 'sonner';\nimport { Command, CommandInput, CommandList } from '../../../../ui/primitives/command';\nimport { Button } from '../../../../ui/primitives/button';\nimport CrazySpinner from '../icons/crazy-spinner';\nimport Magic from '../icons/magic';\nimport { ScrollArea } from '../../../../ui/primitives/scroll-area';\nimport { apiPaths } from '../../../../core/api-paths';\nimport AICompletionCommands from './ai-completion-command';\nimport AISelectorCommands from './ai-selector-commands';\n\ninterface AISelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport function AISelector({ onOpenChange }: AISelectorProps): JSX.Element | null {\n const { editor } = useEditor();\n const [inputValue, setInputValue] = useState('');\n const { projectId } = useParams();\n\n const { completion, complete, isLoading } = useCompletion({\n api: apiPaths(projectId).completion,\n fetch: async (input, init) => {\n const response = await fetch(input, init);\n\n if (response.status === 429) {\n toast.error('You have reached your request limit for the day.');\n\n throw new Error('FK_AI_RATE_LIMIT');\n }\n\n return response;\n },\n onError: (e) => {\n if (e.message === 'FK_AI_RATE_LIMIT') {\n return;\n }\n\n toast.error(e.message);\n },\n });\n\n const hasCompletion = completion.length > 0;\n\n if (!editor) {\n return null;\n }\n\n return (\n <Command className=\"fk:w-[350px]\">\n {hasCompletion && (\n <div className=\"fk:flex fk:max-h-[400px]\">\n <ScrollArea>\n <div className=\"fk:prose fk:p-2 fk:px-4 fk:prose-sm\">\n <Markdown>{completion}</Markdown>\n </div>\n </ScrollArea>\n </div>\n )}\n\n {isLoading && (\n <div className=\"fk:flex fk:h-12 fk:w-full fk:items-center fk:px-4 fk:text-sm fk:font-medium fk:text-muted-foreground fk:text-pink-600\">\n <Magic className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 \" />\n AI is thinking\n <div className=\"fk:ml-2 fk:mt-1\">\n <CrazySpinner />\n </div>\n </div>\n )}\n {!isLoading && (\n <>\n <div className=\"fk:relative\">\n <CommandInput\n value={inputValue}\n onValueChange={setInputValue}\n autoFocus\n placeholder={hasCompletion ? 'Tell AI what to do next' : 'Ask AI to edit or generate...'}\n onFocus={() => addAIHighlight(editor)}\n />\n <Button\n size=\"icon\"\n className=\"fk:absolute fk:right-2 fk:top-1/2 fk:h-6 w-6 fk:-translate-y-1/2 fk:rounded-full fk:bg-pink-600 fk:hover:bg-pink-800 fk:corner-squircle\"\n onClick={() => {\n if (completion) {\n return complete(completion, {\n body: { option: 'zap', command: inputValue },\n }).then(() => setInputValue(''));\n }\n\n const slice = editor.state.selection.content();\n const text = editor.storage.markdown.serializer.serialize(slice.content);\n\n complete(text, {\n body: { option: 'zap', command: inputValue },\n }).then(() => setInputValue(''));\n }}\n >\n <ArrowUp className=\"fk:h-4 fk:w-4\" />\n </Button>\n </div>\n <CommandList>\n {hasCompletion ? (\n <AICompletionCommands\n onDiscard={() => {\n editor.chain().unsetHighlight().focus().run();\n onOpenChange(false);\n }}\n completion={completion}\n />\n ) : (\n <AISelectorCommands onSelect={(value, option) => complete(value, { body: { option } })} />\n )}\n </CommandList>\n </>\n )}\n </Command>\n );\n}\n","import { Fragment, type ReactNode, useEffect, JSX } from 'react';\nimport { EditorBubble, useEditor } from 'novel';\nimport { removeAIHighlight } from 'novel';\nimport { Button } from '../../../../ui/primitives/button';\nimport Magic from '../icons/magic';\nimport { AISelector } from './ai-selector';\n\ninterface GenerativeMenuSwitchProps {\n children: ReactNode;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\nexport default function GenerativeMenuSwitch({\n children,\n open,\n onOpenChange,\n}: GenerativeMenuSwitchProps): JSX.Element | null {\n const { editor } = useEditor();\n\n useEffect(() => {\n if (!editor) return;\n\n if (!open) removeAIHighlight(editor);\n }, [editor, open]);\n\n if (!editor) return null;\n\n return (\n <EditorBubble\n tippyOptions={{\n placement: open ? 'bottom-start' : 'top',\n onHidden: () => {\n onOpenChange(false);\n editor.chain().unsetHighlight().run();\n },\n }}\n className=\"fk:flex fk:w-fit fk:max-w-[90vw] fk:overflow-hidden fk:rounded-md fk:border fk:border-muted fk:bg-background fk:shadow-xl fk:corner-squircle\"\n >\n {open && <AISelector open={open} onOpenChange={onOpenChange} />}\n {!open && (\n <Fragment>\n <Button\n className=\"fk:gap-1 fk:rounded-none fk:text-pink-600 fk:corner-squircle\"\n variant=\"ghost\"\n onClick={(e) => {\n e.preventDefault();\n onOpenChange(true);\n }}\n size=\"sm\"\n >\n <Magic className=\"fk:h-5 fk:w-5\" />\n Ask AI\n </Button>\n {children}\n </Fragment>\n )}\n </EditorBubble>\n );\n}\n","'use client';\n\nimport { useState, type JSX } from 'react';\nimport {\n EditorCommand,\n EditorCommandEmpty,\n EditorCommandItem,\n EditorCommandList,\n EditorContent,\n EditorRoot,\n handleCommandNavigation,\n handleImageDrop,\n handleImagePaste,\n ImageResizer,\n type EditorContentProps,\n type EditorInstance,\n type JSONContent,\n type SuggestionItem,\n} from 'novel';\nimport { useDebouncedCallback } from 'use-debounce';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../../ui/primitives/form';\nimport { Separator } from '../../../ui/primitives/separator';\nimport type { FormFieldValue } from '../../../graphql-client/types';\nimport type { FormFieldParams } from '../../types';\nimport { DefaultValueSwitch } from '../default-value-switch';\nimport { defaultExtensions } from './extensions';\nimport { slashCommand, suggestionItems } from './slash-command';\nimport { ColorSelector } from './selectors/color-selector';\nimport { LinkSelector } from './selectors/link-selector';\nimport { NodeSelector } from './selectors/node-selector';\nimport { MathSelector } from './selectors/math-selector';\nimport { TextButtons } from './selectors/text-buttons';\nimport GenerativeMenuSwitch from './generative/generative-menu-switch';\n\nconst extensions = [...defaultExtensions, slashCommand] as unknown as NonNullable<EditorContentProps['extensions']>;\n\nfunction isJSONContent(value: unknown): value is JSONContent {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n const maybe = value as { type?: unknown; content?: unknown };\n\n if (typeof maybe.type !== 'string' && typeof maybe.type !== 'undefined') {\n return false;\n }\n\n if (!Array.isArray(maybe.content) && typeof maybe.content !== 'undefined') {\n return false;\n }\n\n return true;\n}\n\nfunction parseEditorValue(value: FormFieldValue['value'] | undefined): JSONContent | undefined {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n if (!trimmed) {\n return undefined;\n }\n\n try {\n const parsed: unknown = JSON.parse(trimmed);\n\n if (isJSONContent(parsed)) {\n return parsed;\n }\n } catch {\n return undefined;\n }\n }\n\n if (isJSONContent(value)) {\n return value;\n }\n\n return undefined;\n}\n\nexport default function Editor({\n control,\n defaultValue,\n fieldSchema,\n readOnly,\n setValue,\n}: FormFieldParams<'editor'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n const [openAI, setOpenAI] = useState(false);\n const [openNode, setOpenNode] = useState(false);\n const [openLink, setOpenLink] = useState(false);\n const [openColor, setOpenColor] = useState(false);\n\n const debouncedUpdates = useDebouncedCallback((editor: EditorInstance, previousValue: FormFieldValue | undefined) => {\n const json = editor.getJSON();\n\n setValue(name, {\n ...previousValue,\n value: JSON.stringify(json),\n });\n }, 300);\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n // TODO: replace this with a real upload function.\n // See: https://github.com/steven-tey/novel/blob/ecdb5d2ff5d3e6ab5f5af95b5a81de3ab4e8a0e9/apps/web/components/tailwind/image-upload.ts\n const uploadFn = (file: File) => {\n // eslint-disable-next-line no-console\n console.log('Image uploader not yet implemented', file);\n\n return Promise.resolve('https://via.placeholder.com/150');\n };\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl>\n <EditorRoot>\n <EditorContent\n key={`${name}:${field.value?.scope ?? defaultValue.scope}:${String(field.value?.disabled ?? defaultValue.disabled)}`}\n className=\"fk:relative fk:w-full fk:max-w-5xl fk:rounded-md fk:border fk:border-input fk:ring-offset-background fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2 fk:corner-squircle\"\n editable={!readOnly && !field.value?.disabled}\n editorProps={{\n handleDOMEvents: {\n keydown: (_view, event) => handleCommandNavigation(event),\n },\n handlePaste: (view, event) => handleImagePaste(view, event, uploadFn),\n handleDrop: (view, event, _slice, moved) => handleImageDrop(view, event, moved, uploadFn),\n attributes: {\n class:\n 'fk:prose prose-lg fk:dark:prose-invert fk:prose-headings:font-title fk:min-h-[150px] fk:font-default fk:rounded-md fk:corner-squircle' +\n 'fk:focus:outline-hidden fk:max-w-full fk:bg-background ',\n },\n }}\n extensions={extensions}\n initialContent={parseEditorValue(field.value?.value ?? defaultValue.value)}\n immediatelyRender={true}\n onUpdate={({ editor }) => {\n debouncedUpdates(editor, field.value);\n }}\n slotAfter={<ImageResizer />}\n >\n <EditorCommand className=\"fk:z-50 fk:h-auto fk:max-h-[330px] fk:overflow-y-auto fk:rounded-md fk:border fk:border-muted fk:bg-background fk:px-1 fk:py-2 fk:shadow-md fk:transition-all fk:pointer-events-auto fk:corner-squircle\">\n <EditorCommandEmpty className=\"fk:px-2 fk:text-muted-foreground\">No results</EditorCommandEmpty>\n <EditorCommandList>\n {suggestionItems.map((item: SuggestionItem) => (\n <EditorCommandItem\n value={item.title}\n onCommand={(val) => item.command?.(val)}\n className=\"fk:flex fk:w-full fk:items-center fk:space-x-2 fk:rounded-md fk:px-2 fk:py-1 fk:text-left fk:text-sm fk:hover:bg-muted fk:aria-selected:bg-muted fk:corner-squircle\"\n key={item.title}\n >\n <div className=\"fk:flex fk:h-10 fk:w-10 fk:items-center fk:justify-center fk:rounded-md fk:border fk:border-muted fk:bg-background fk:corner-squircle\">\n {item.icon}\n </div>\n <div>\n <p className=\"fk:font-medium\">{item.title}</p>\n <p className=\"fk:text-xs fk:text-muted-foreground\">{item.description}</p>\n </div>\n </EditorCommandItem>\n ))}\n </EditorCommandList>\n </EditorCommand>\n <GenerativeMenuSwitch open={openAI} onOpenChange={setOpenAI}>\n <Separator orientation=\"vertical\" />\n <NodeSelector open={openNode} onOpenChange={setOpenNode} />\n <Separator orientation=\"vertical\" />\n <LinkSelector open={openLink} onOpenChange={setOpenLink} />\n <Separator orientation=\"vertical\" />\n <MathSelector />\n <Separator orientation=\"vertical\" />\n <TextButtons />\n <Separator orientation=\"vertical\" />\n <ColorSelector open={openColor} onOpenChange={setOpenColor} />\n </GenerativeMenuSwitch>\n </EditorContent>\n </EditorRoot>\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Textarea as TextareaPrimitive } from '../../ui/primitives/textarea';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Textarea({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'textarea'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n setValue(name, {\n ...previousValue,\n value: event.currentTarget.value,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <div className=\"fk:flex\">\n <div className=\"fk:full-w fk:grid fk:gap-2\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <div className=\"fk:h-full fk:self-end fk:ml-auto\">\n {/* TODO: this should be a slot that can receive user-defined components and system components like Presence and AI Writting Tools */}\n </div>\n </div>\n <FormControl>\n <TextareaPrimitive\n className=\"fk:w-full fk:mt-0.75\"\n disabled={readOnly || field.value?.disabled}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n value={(field.value?.value as string) || ''}\n />\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { JSX, RefObject, SyntheticEvent } from 'react';\nimport { gql } from '@apollo/client';\nimport { useLazyQuery } from '@apollo/client/react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowDown as ArrowDownIcon,\n ArrowUp as ArrowUpIcon,\n Image as ImageIcon,\n Link,\n Maximize2,\n Upload as UploadIcon,\n X as ClearIcon,\n} from 'lucide-react';\nimport { useDispatch } from '../../../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../../../core/app-context';\nimport { IMAGES_BASE_URL } from '../../../core/api-paths';\nimport { useUploadAssets } from '../../../core/upload';\nimport type { MultipleRelationshipConnection } from '../../../core/types';\nimport {\n FULL_ASSET_CONNECTION_LIMIT,\n getEntityAssetConnectionQuery,\n getKnownAssetSortOrders,\n getOrderedAssetsFromConnection,\n} from '../../../graphql-client/queries';\nimport type { OrderedAssetValue } from '../../../graphql-client/types';\nimport { Button } from '../../../ui/primitives/button';\nimport { Collapsible, CollapsibleContent } from '../../../ui/primitives/collapsible';\nimport { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '../../../ui/primitives/form';\nimport { ScrollArea } from '../../../ui/primitives/scroll-area';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/primitives/tooltip';\nimport { useOuterClick } from '../../../ui/hooks/use-outer-click';\nimport type { FormFieldParams } from '../../types';\n\nconst PAGE_SIZE = FULL_ASSET_CONNECTION_LIMIT;\n\ntype AssetConnectionPageResult = {\n [entityNamePlural: string]:\n | {\n [connectionField: string]: unknown;\n }[]\n | undefined;\n};\n\nexport default function AssetMultipleRelationship({\n control,\n defaultValue,\n entityId,\n entityName,\n entityNamePlural,\n fieldSchema,\n readOnly,\n schema,\n setValue,\n}: FormFieldParams<'relationship'>): JSX.Element {\n const { name, label, options, relationship } = fieldSchema;\n const { projectId } = useParams();\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const { relationships } = useAppContext();\n const uploadAssets = useUploadAssets();\n const fieldId = useId();\n const relationshipId = useId();\n const wrapperRef = useRef<HTMLDivElement>(null);\n const originalAssetIdsRef = useRef<string[]>([]);\n const pendingLocalRowsSignatureRef = useRef<string | null>(null);\n const removedAssetIdsRef = useRef<string[]>([]);\n const syncedRowsSignatureRef = useRef('');\n const knownAssetSortOrdersRef = useRef<{ [id: string]: number }>(defaultValue.knownAssetSortOrders ?? {});\n const [isOpen, setIsOpen] = useState(false);\n const initialRows = useMemo(() => normalizeAssets(defaultValue.value), [defaultValue.value]);\n const [rows, setRows] = useState<OrderedAssetValue[]>(initialRows);\n const [loadedServerCount, setLoadedServerCount] = useState(\n () => Object.keys(defaultValue.knownAssetSortOrders ?? getKnownAssetSortOrders(initialRows)).length\n );\n // Advertised connection total; clamped down when a page returns fewer edges than\n // the aggregate claimed so Load more does not stay enabled forever.\n const [serverTotalCount, setServerTotalCount] = useState(() =>\n Math.max(defaultValue.count ?? 0, initialRows[0]?.totalCount ?? 0, initialRows.length)\n );\n const assetConnectionQuery = useMemo(\n () =>\n getEntityAssetConnectionQuery({\n attributeName: name,\n entityName,\n entityNamePlural,\n schema,\n }),\n [entityName, entityNamePlural, name, schema]\n );\n const [fetchAssetConnection, { loading: isLoadingMore }] = useLazyQuery<AssetConnectionPageResult>(gql`\n ${assetConnectionQuery.query}\n `);\n useOuterClick(wrapperRef as RefObject<HTMLDivElement>, setIsOpen);\n\n useEffect(() => {\n const initialRowsSignature = getRowsSignature(initialRows);\n\n originalAssetIdsRef.current = initialRows.map((asset) => asset._id);\n removedAssetIdsRef.current = [];\n const nextKnownSortOrders = {\n ...(defaultValue.knownAssetSortOrders ?? {}),\n ...getKnownAssetSortOrders(initialRows),\n };\n\n knownAssetSortOrdersRef.current = nextKnownSortOrders;\n setLoadedServerCount(Object.keys(nextKnownSortOrders).length);\n setServerTotalCount(Math.max(defaultValue.count ?? 0, initialRows[0]?.totalCount ?? 0, initialRows.length));\n\n setRows((currentRows) => {\n const currentRowsSignature = getRowsSignature(currentRows);\n\n if (\n initialRowsSignature === '' &&\n currentRowsSignature !== '' &&\n syncedRowsSignatureRef.current === currentRowsSignature\n ) {\n return currentRows;\n }\n\n if (currentRowsSignature === initialRowsSignature) {\n return currentRows;\n }\n\n syncedRowsSignatureRef.current = initialRowsSignature;\n\n return initialRows;\n });\n }, [defaultValue.count, defaultValue.knownAssetSortOrders, initialRows]);\n\n useEffect(() => {\n const connections = relationships[relationshipId]?.connect as MultipleRelationshipConnection | undefined;\n\n if (!connections) {\n return;\n }\n\n const selectedAssets = connections\n .map((connection, index) => normalizeAsset(connection.value, connection.sortOrder ?? index))\n .filter((asset): asset is OrderedAssetValue => Boolean(asset));\n const selectedRowsSignature = getRowsSignature(selectedAssets);\n const rowsSignature = getRowsSignature(rows);\n const pendingRowsSignature = pendingLocalRowsSignatureRef.current;\n\n if (pendingRowsSignature === rowsSignature && selectedRowsSignature !== pendingRowsSignature) {\n return;\n }\n\n pendingLocalRowsSignatureRef.current = null;\n\n if (selectedRowsSignature !== rowsSignature) {\n setRows(selectedAssets);\n }\n }, [relationshipId, relationships, rows]);\n\n useEffect(() => {\n const rowsSignature = getRowsSignature(rows);\n\n if (syncedRowsSignatureRef.current === rowsSignature) {\n return;\n }\n\n const connect = rows.map((asset, index) => ({\n _id: asset._id,\n sortOrder: index,\n value: {\n ...asset,\n sortOrder: index,\n },\n }));\n const rowIds = rows.map((asset) => asset._id);\n const disconnect = removedAssetIdsRef.current.filter((_id) => !rowIds.includes(_id));\n\n syncedRowsSignatureRef.current = rowsSignature;\n\n appDispatch({\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect,\n disconnect,\n },\n },\n });\n\n setValue(name, {\n ...defaultValue,\n knownAssetSortOrders: knownAssetSortOrdersRef.current,\n relationships: {\n connect,\n disconnect,\n },\n value: rows,\n });\n }, [appDispatch, defaultValue, name, relationshipId, rows, setValue]);\n\n const totalCount = Math.max(serverTotalCount, loadedServerCount);\n const hasMore = Boolean(entityId) && totalCount > loadedServerCount;\n\n const handleLoadMore = useCallback(() => {\n if (!entityId || isLoadingMore || !hasMore) {\n return;\n }\n\n const nextFirst = loadedServerCount + PAGE_SIZE;\n\n void fetchAssetConnection({\n variables: {\n where: { _id: { eq: entityId } },\n first: nextFirst,\n },\n })\n .then((result) => {\n const entityRows = result.data?.[entityNamePlural];\n const entity = Array.isArray(entityRows) ? entityRows[0] : undefined;\n const connection = entity?.[`${name}Connection`];\n const fetchedAssets = getOrderedAssetsFromConnection(connection);\n const responseTotal = fetchedAssets[0]?.totalCount;\n\n if (typeof responseTotal === 'number') {\n setServerTotalCount(responseTotal);\n }\n\n if (fetchedAssets.length === 0) {\n // Aggregate overstated available edges; stop paging.\n setServerTotalCount(loadedServerCount);\n\n return;\n }\n\n const previousKnownCount = Object.keys(knownAssetSortOrdersRef.current).length;\n const nextKnownSortOrders = {\n ...knownAssetSortOrdersRef.current,\n ...getKnownAssetSortOrders(fetchedAssets),\n };\n const nextLoadedCount = Object.keys(nextKnownSortOrders).length;\n\n knownAssetSortOrdersRef.current = nextKnownSortOrders;\n setLoadedServerCount(nextLoadedCount);\n\n // Fewer edges than requested, or the page added no new known ids —\n // clamp the advertised total so hasMore clears instead of no-op looping.\n if (fetchedAssets.length < nextFirst || nextLoadedCount <= previousKnownCount) {\n setServerTotalCount(nextLoadedCount);\n }\n\n for (const asset of fetchedAssets) {\n if (!originalAssetIdsRef.current.includes(asset._id)) {\n originalAssetIdsRef.current = [...originalAssetIdsRef.current, asset._id];\n }\n }\n\n setRows((currentRows) => {\n const currentIds = new Set(currentRows.map((asset) => asset._id));\n const removedIds = new Set(removedAssetIdsRef.current);\n const toAppend = fetchedAssets.filter((asset) => !currentIds.has(asset._id) && !removedIds.has(asset._id));\n\n if (toAppend.length === 0) {\n // Still rewrite knownAssetSortOrders onto the form value.\n syncedRowsSignatureRef.current = '';\n\n return [...currentRows];\n }\n\n const nextRows = [...currentRows, ...toAppend];\n\n pendingLocalRowsSignatureRef.current = getRowsSignature(nextRows);\n\n return nextRows;\n });\n })\n .catch((error: unknown) => {\n console.error('Error fetching more assets:', error);\n });\n }, [entityId, entityNamePlural, fetchAssetConnection, hasMore, isLoadingMore, loadedServerCount, name]);\n\n function handleSelection(event: SyntheticEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (readOnly) {\n return;\n }\n\n actionDispatch({\n type: 'EditRelationship',\n payload: {\n connectedEntitiesCount: Math.max(rows.length, totalCount),\n entityName: relationship?.entity ?? '_asset',\n entityId,\n relationshipId,\n mode: 'multiple',\n assetAccept: options?.accept,\n },\n });\n }\n\n async function handleUpload(event: SyntheticEvent): Promise<void> {\n event.preventDefault();\n event.stopPropagation();\n\n if (readOnly) {\n return;\n }\n\n const uploadedAssets = await uploadAssets({\n projectId,\n accept: options?.accept ?? 'image/*',\n multiple: true,\n maxBytes: 4 * 1024 * 1024,\n });\n\n setRows((currentRows) => {\n const currentIds = new Set(currentRows.map((asset) => asset._id));\n const nextAssets = uploadedAssets\n .map((uploaded, index) => ({\n ...uploaded.asset,\n sortOrder: currentRows.length + index,\n }))\n .filter((asset) => !currentIds.has(asset._id));\n const nextRows = withSortOrder([...currentRows, ...nextAssets]);\n\n pendingLocalRowsSignatureRef.current = getRowsSignature(nextRows);\n\n return nextRows;\n });\n }\n\n function removeAsset(assetId: string): void {\n setRows((currentRows) => {\n const nextRows = withSortOrder(currentRows.filter((asset) => asset._id !== assetId));\n\n if (originalAssetIdsRef.current.includes(assetId) && !removedAssetIdsRef.current.includes(assetId)) {\n removedAssetIdsRef.current = [...removedAssetIdsRef.current, assetId];\n }\n\n pendingLocalRowsSignatureRef.current = getRowsSignature(nextRows);\n\n return nextRows;\n });\n }\n\n function moveAsset(assetId: string, direction: -1 | 1): void {\n setRows((currentRows) => {\n const currentIndex = currentRows.findIndex((asset) => asset._id === assetId);\n const nextIndex = currentIndex + direction;\n\n if (currentIndex < 0 || nextIndex < 0 || nextIndex >= currentRows.length) {\n return currentRows;\n }\n\n const nextRows = [...currentRows];\n const [asset] = nextRows.splice(currentIndex, 1);\n\n if (!asset) {\n return currentRows;\n }\n\n nextRows.splice(nextIndex, 0, asset);\n\n const sortedRows = withSortOrder(nextRows);\n\n pendingLocalRowsSignatureRef.current = getRowsSignature(sortedRows);\n\n return sortedRows;\n });\n }\n\n const previewTotal = Math.max(rows.length, totalCount);\n const collapsedPreview = rows.slice(0, 8);\n\n return (\n <FormField\n control={control}\n defaultValue={defaultValue}\n name={name}\n render={() => (\n <FormItem>\n <FormLabel htmlFor={fieldId}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl className=\"fk:flex fk:flex-col fk:w-full fk:min-h-9.5 fk:text-sm\">\n <div\n aria-controls={`asset-relationship-dropdown-${name}`}\n aria-expanded={isOpen}\n className={`fk:relative fk:flex fk:w-full fk:items-start fk:space-x-2 fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-2.5 fk:py-0.5 fk:focus-visible:outline-hidden fk:ring-offset-background fk:focus-visible:ring-2 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-2 ${\n isOpen ? 'fk:outline-hidden fk:ring-2 fk:ring-ring fk:ring-offset-2' : ''\n } fk:corner-squircle`}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n wrapperRef.current?.focus();\n setIsOpen(true);\n }}\n ref={wrapperRef}\n role=\"combobox\"\n tabIndex={0}\n >\n <div className=\"fk:flex fk:w-full fk:flex-col\">\n <div className=\"fk:flex fk:w-full fk:items-center fk:gap-2 fk:pr-9\">\n {isOpen && rows.length > 0 ? (\n <div className=\"fk:flex fk:h-9 fk:items-center fk:text-muted-foreground\">\n {previewTotal} {previewTotal === 1 ? 'asset' : 'assets'}\n {hasMore ? ` (${rows.length} loaded)` : ''} selected\n </div>\n ) : rows.length > 0 ? (\n <div className=\"fk:flex fk:min-h-9 fk:flex-wrap fk:gap-2\">\n {collapsedPreview.map((asset) => (\n <AssetThumbnail asset={asset} key={asset._id} />\n ))}\n {!isOpen && previewTotal > 8 ? (\n <div className=\"fk:flex fk:h-9 fk:w-9 fk:items-center fk:justify-center fk:rounded-sm fk:bg-muted fk:text-xs fk:text-muted-foreground fk:corner-squircle\">\n +{previewTotal - 8}\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"fk:flex fk:h-9 fk:items-center fk:text-muted-foreground\">\n <ImageIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Select or upload assets\n </div>\n )}\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:absolute fk:right-0.75 fk:top-0.75 fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n id={fieldId}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setIsOpen((value) => !value);\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n {isOpen ? <ClearIcon className=\"fk:h-4 fk:w-4\" /> : <Maximize2 className=\"fk:h-4 fk:w-4\" />}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{isOpen ? 'Close' : 'Expand field'}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n <Collapsible className=\"fk:w-full fk:space-y-2 fk:ml-0!\" onOpenChange={setIsOpen} open={isOpen}>\n <CollapsibleContent className=\"fk:w-full\">\n <div\n className=\"fk:flex fk:h-[350px] fk:flex-col fk:gap-3\"\n id={`asset-relationship-dropdown-${name}`}\n >\n <div className=\"fk:flex fk:gap-2\">\n <Button className=\"fk:h-8\" disabled={readOnly} onClick={handleSelection} variant=\"outline\">\n <Link className=\"fk:h-4 fk:w-4 fk:mr-2\" />\n Select assets\n </Button>\n <Button\n className=\"fk:h-8\"\n disabled={readOnly}\n onClick={(event) => void handleUpload(event)}\n variant=\"outline\"\n >\n <UploadIcon className=\"fk:h-4 fk:w-4 fk:mr-2\" />\n Upload assets\n </Button>\n </div>\n {rows.length > 0 ? (\n <ScrollArea className=\"fk:min-h-0 fk:flex-1\">\n <div className=\"fk:grid fk:grid-cols-[repeat(auto-fill,minmax(8rem,1fr))] fk:gap-3 fk:pr-3\">\n {rows.map((asset, index) => (\n <SelectedAssetCard\n asset={asset}\n index={index}\n isFirst={index === 0}\n isLast={index === rows.length - 1}\n key={asset._id}\n moveAsset={moveAsset}\n readOnly={readOnly}\n removeAsset={removeAsset}\n />\n ))}\n </div>\n {hasMore ? (\n <div className=\"fk:flex fk:justify-center fk:py-3 fk:pr-3\">\n <Button\n className=\"fk:h-8\"\n disabled={isLoadingMore}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n handleLoadMore();\n }}\n type=\"button\"\n variant=\"outline\"\n >\n {isLoadingMore\n ? 'Loading…'\n : `Load more (${loadedServerCount} of ${totalCount})`}\n </Button>\n </div>\n ) : null}\n </ScrollArea>\n ) : null}\n </div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n\nfunction AssetThumbnail({ asset }: { asset: OrderedAssetValue }): JSX.Element {\n const isImage = isImageAsset(asset);\n\n if (!isImage) {\n return (\n <div className=\"fk:flex fk:h-9 fk:w-9 fk:items-center fk:justify-center fk:rounded-sm fk:bg-muted fk:corner-squircle\">\n <ImageIcon className=\"fk:h-4 fk:w-4 fk:text-muted-foreground\" />\n </div>\n );\n }\n\n return (\n <img\n alt={asset.originalFilename || 'Asset'}\n className=\"fk:h-9 fk:w-9 fk:rounded-sm fk:bg-muted fk:object-cover fk:corner-squircle\"\n src={`${IMAGES_BASE_URL}${asset.path}?w=128&h=128&f=webp`}\n />\n );\n}\n\nfunction SelectedAssetCard({\n asset,\n index,\n isFirst,\n isLast,\n moveAsset,\n readOnly,\n removeAsset,\n}: {\n asset: OrderedAssetValue;\n index: number;\n isFirst: boolean;\n isLast: boolean;\n moveAsset: (assetId: string, direction: -1 | 1) => void;\n readOnly: boolean;\n removeAsset: (assetId: string) => void;\n}): JSX.Element {\n return (\n <div className=\"fk:relative fk:rounded-md fk:border fk:border-input fk:bg-background fk:p-2 fk:corner-squircle\">\n <div className=\"fk:aspect-square fk:overflow-hidden fk:rounded-sm fk:bg-muted fk:corner-squircle\">\n {isImageAsset(asset) ? (\n <img\n alt={asset.originalFilename || 'Asset'}\n className=\"fk:h-full fk:w-full fk:object-cover\"\n src={`${IMAGES_BASE_URL}${asset.path}?w=320&h=320&f=webp`}\n />\n ) : (\n <div className=\"fk:flex fk:h-full fk:w-full fk:items-center fk:justify-center\">\n <ImageIcon className=\"fk:h-8 fk:w-8 fk:text-muted-foreground\" />\n </div>\n )}\n </div>\n <div className=\"fk:mt-2 fk:truncate fk:text-xs\" title={asset.originalFilename}>\n {index + 1}. {asset.originalFilename || asset.path}\n </div>\n <div className=\"fk:mt-2 fk:flex fk:gap-1\">\n <Button\n className=\"fk:h-7 fk:w-7\"\n disabled={readOnly || isFirst}\n onClick={() => moveAsset(asset._id, -1)}\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n >\n <ArrowUpIcon className=\"fk:h-3.5 fk:w-3.5\" />\n </Button>\n <Button\n className=\"fk:h-7 fk:w-7\"\n disabled={readOnly || isLast}\n onClick={() => moveAsset(asset._id, 1)}\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n >\n <ArrowDownIcon className=\"fk:h-3.5 fk:w-3.5\" />\n </Button>\n <Button\n className=\"fk:ml-auto fk:h-7 fk:w-7\"\n disabled={readOnly}\n onClick={() => removeAsset(asset._id)}\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n >\n <ClearIcon className=\"fk:h-3.5 fk:w-3.5\" />\n </Button>\n </div>\n </div>\n );\n}\n\nfunction normalizeAssets(value: unknown): OrderedAssetValue[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .map((item, index) => normalizeAsset(item, index))\n .filter((asset): asset is OrderedAssetValue => Boolean(asset))\n .sort((a, b) => (a.sortOrder ?? Number.MAX_SAFE_INTEGER) - (b.sortOrder ?? Number.MAX_SAFE_INTEGER));\n}\n\nfunction getRowsSignature(rows: OrderedAssetValue[]): string {\n return rows.map((asset, index) => `${asset._id}:${asset.sortOrder ?? index}`).join('|');\n}\n\nfunction withSortOrder(rows: OrderedAssetValue[]): OrderedAssetValue[] {\n return rows.map((row, index) => ({ ...row, sortOrder: index }));\n}\n\nfunction normalizeAsset(value: unknown, sortOrder: number): OrderedAssetValue | null {\n if (!value || typeof value !== 'object' || !('_id' in value) || !('path' in value)) {\n return null;\n }\n\n const asset = value as Partial<OrderedAssetValue>;\n\n return {\n _id: String(asset._id ?? ''),\n path: String(asset.path ?? ''),\n originalFilename: String(asset.originalFilename ?? ''),\n size: Number(asset.size ?? 0),\n mimeType: String(asset.mimeType ?? ''),\n lqip: String(asset.lqip ?? ''),\n width: Number(asset.width ?? 0),\n height: Number(asset.height ?? 0),\n sortOrder: asset.sortOrder ?? sortOrder,\n totalCount: typeof asset.totalCount === 'number' ? asset.totalCount : undefined,\n };\n}\n\nfunction isImageAsset(asset: OrderedAssetValue): boolean {\n return Boolean(\n (asset.mimeType && asset.mimeType.startsWith('image/')) || /\\.(png|jpe?g|gif|webp|avif|svg)$/i.test(asset.path)\n );\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport type { Row } from '@tanstack/react-table';\nimport { Button } from '../../../ui/primitives/button';\n\ninterface DataTableRowActionsProps<TData> {\n action: (entityId: string) => void;\n row: Row<TData>;\n}\n\nexport function DataTableRowActions<TData>({ action, row }: DataTableRowActionsProps<TData>): JSX.Element {\n // @ts-expect-error -- the DataGrid's origina type doesn't know about the _id property\n const entityId = row.original._id as string;\n\n function handleDelete(): void {\n action(entityId);\n }\n\n return (\n <div className=\"fk:flex fk:items-center\">\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1\" onClick={handleDelete} variant=\"ghost\">\n <Trash2 className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Delete</span>\n </Button>\n </div>\n );\n}\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { Dispatch, JSX, RefObject, SyntheticEvent } from 'react';\nimport { gql } from '@apollo/client';\nimport { useLazyQuery } from '@apollo/client/react';\nimport type { Row } from '@tanstack/react-table';\nimport { find, map, prop, propEq, uniq, uniqBy } from 'ramda';\nimport { Link, Maximize2, X as ClearIcon } from 'lucide-react';\nimport { getRelatedItemsQuery, mapQueryResult } from '../../../graphql-client/queries';\nimport type {\n AttributeValue,\n EntityQueryAggregate,\n EntityItem,\n EntityQueryResults,\n MappedEntityItem,\n} from '../../../graphql-client/types';\nimport { useGridColumnsDefinition } from '../../../data-grid/columns';\nimport { DataTable } from '../../../data-grid/data-table';\nimport { Button } from '../../../ui/primitives/button';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../../ui/primitives/form';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/primitives/tooltip';\nimport { Badge } from '../../../ui/primitives/badge';\nimport { Collapsible, CollapsibleContent } from '../../../ui/primitives/collapsible';\nimport { useOuterClick } from '../../../ui/hooks/use-outer-click';\nimport { getDisplayAttribute } from '../../../core/get-display-attribute';\nimport type {\n ActionSetRelationship,\n Attribute,\n Entity,\n MultipleRelationshipConnection,\n Relationships,\n} from '../../../core/types';\nimport { useDispatch } from '../../../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../../../core/app-context';\nimport type { FormFieldParams } from '../../types';\nimport { DataTableRowActions } from './data-table-row-actions';\n\nconst PAGE_SIZE = 25;\n\nexport default function MultipleRelationship({\n control,\n defaultScope,\n defaultValue,\n entityId,\n entityName,\n fieldSchema,\n readOnly,\n schema,\n scope,\n setValue,\n}: FormFieldParams<'relationship'>): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n useOuterClick(wrapperRef as RefObject<HTMLDivElement>, setIsOpen);\n const [rows, setRows] = useState<AttributeValue[] | []>([]);\n const { name, label, options, relationship } = fieldSchema;\n const relationshipEntityName: string = relationship?.entity ?? name;\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const { relationships } = useAppContext();\n const fieldId = useId();\n const relationshipId = useId();\n const relationshipEntitySchema = find(propEq(relationshipEntityName, 'name'))(schema) as Entity | undefined;\n const relationshipEntityAttributesSchema = relationshipEntitySchema?.attributes ?? [];\n const baseEntitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const baseEntityName = baseEntitySchema?.name ?? '';\n let connectionName: string | undefined;\n\n /**\n * Find out if this attribute is related to the base entity (by-directional relationship)\n * If so, get the relationship field name on the target entity that points back to the\n * base entity, so EditRelationship can filter out already-connected items with a\n * `none` quantifier filter (i.e. products: { none: { _id: { eq: ... } } }).\n * */\n const relationshipAttribute = relationshipEntityAttributesSchema.find(\n (attr) => attr.relationship?.entity === baseEntityName\n );\n\n if (relationshipAttribute) {\n connectionName = relationshipAttribute.name;\n }\n\n const displayAttributeName = getDisplayAttribute(relationshipEntitySchema)?.name ?? '';\n const initialRows = useMemo(\n () =>\n defaultValue.value\n ? dataAdapter({\n data: defaultValue.value,\n defaultScope,\n primaryAttributeName: displayAttributeName,\n relationshipEntitySchema,\n scope,\n })\n : [],\n [defaultScope, defaultValue, displayAttributeName, relationshipEntitySchema, scope]\n );\n const entityQuery = getRelatedItemsQuery({\n attributeName: name,\n relatedEntityName: relationshipEntityName,\n scope,\n schema,\n });\n const previewLimit = 12;\n const previewItems = rows.length ? rows.slice(0, previewLimit).map((row) => row[displayAttributeName] as string) : [];\n const hasMorePreviewItems = Math.max(rows.length, defaultValue.count ?? 0) > previewItems.length;\n const [getData, { loading, data }] = useLazyQuery<EntityQueryResults & EntityQueryAggregate>(gql`\n ${entityQuery.query}\n `);\n\n const columns = useGridColumnsDefinition<AttributeValue, unknown>({\n attributesSchema: relationshipEntitySchema?.attributes ?? [],\n actionsComponent: readOnly\n ? undefined\n : (row) => dataRowActions({ appDispatch, relationshipId, relationships, row, setRows }),\n });\n\n useEffect(() => {\n setRows(initialRows);\n\n if (defaultValue.value === '') {\n return;\n }\n\n // set the initial state of the relationship\n appDispatch({\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect: [],\n disconnect: [],\n },\n },\n });\n }, [appDispatch, data, initialRows, relationshipId, defaultValue, scope]);\n\n /**\n * Update the value of the field when the relationshp context value changes\n * The relationshp context value changes when the user selects a row from the datagrid in the EditRelationship modal\n * or when the user ticks one of the pre-existing relationships for deletion\n */\n useEffect(() => {\n setValue(name, { ...defaultValue, relationships: relationships[relationshipId] });\n }, [defaultValue, relationships, relationshipId, setValue, name]);\n\n /**\n * Set the value of the rows for the datagrid\n */\n useEffect(() => {\n const connections = (relationships[relationshipId]?.connect as MultipleRelationshipConnection | null) ?? [];\n const selectedRows = connections.map(({ value }) => value);\n\n setRows(uniqBy(prop('_id'), [...(selectedRows as []), ...initialRows]));\n }, [data, defaultValue.count, initialRows, relationships, relationshipId]);\n\n const pendingConnections =\n (relationships[relationshipId]?.connect as MultipleRelationshipConnection | null) ?? [];\n const pendingDisconnectIds = relationships[relationshipId]?.disconnect ?? [];\n const existingRelationshipIds = new Set(initialRows.map((row) => row._id));\n const pendingDisconnectIdSet = new Set(pendingDisconnectIds);\n // The picker cannot hide already-linked records without a reverse relationship,\n // so re-selecting them must not inflate the displayed total.\n const pendingConnectCount = pendingConnections.filter(\n (connection) => !existingRelationshipIds.has(connection._id) || pendingDisconnectIdSet.has(connection._id)\n ).length;\n const pendingDisconnectCount = pendingDisconnectIds.length;\n const totalCount = defaultValue.count ?? 0;\n const displayCount = Math.max(\n 0,\n Math.max(totalCount, initialRows.length) + pendingConnectCount - pendingDisconnectCount\n );\n const hasMore = totalCount > 0 && rows.length > 0 && rows.length < totalCount;\n\n const handleLoadMore = useCallback(() => {\n if (loading) {\n return;\n }\n\n getData({\n variables: {\n limit: PAGE_SIZE,\n offset: rows.length,\n where: connectionName\n ? {\n [connectionName]: {\n some: {\n _id: { eq: entityId },\n },\n },\n }\n : {},\n },\n })\n .then(({ data: res }: { data: (EntityQueryResults & EntityQueryAggregate) | undefined }) => {\n if (!res) {\n return;\n }\n\n const mappedData = mapQueryResult(relationshipEntitySchema?.plural ?? '', scope, res, schema);\n setRows(uniqBy(prop('_id'), [...initialRows, ...(mappedData.results as [])]));\n })\n .catch((error: unknown) => {\n console.error('Error fetching more data:', error);\n });\n }, [\n connectionName,\n entityId,\n getData,\n initialRows,\n loading,\n relationshipEntitySchema?.plural,\n rows.length,\n schema,\n scope,\n ]);\n\n function handleSelection(event: SyntheticEvent): void {\n event.preventDefault();\n\n if (readOnly) {\n return;\n }\n\n actionDispatch({\n type: 'EditRelationship',\n payload: {\n connectedEntitiesCount: initialRows.length,\n connectionName,\n entityName: relationshipEntityName,\n entityId,\n relationshipId,\n mode: relationship?.mode ?? 'multiple',\n },\n });\n }\n\n return (\n <FormField\n control={control}\n defaultValue={defaultValue}\n name={name}\n render={() => (\n <FormItem className=\"fk:min-w-0\">\n <FormLabel htmlFor={fieldId}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl className=\"fk:flex fk:flex-col fk:w-full fk:min-w-0 fk:min-h-9.5 fk:pl-3 fk:pr-3 fk:py-0.5 fk:text-sm\">\n <div\n aria-controls={`relationship-dropdown-${name}`}\n aria-expanded={isOpen}\n className={`fk:relative fk:flex fk:w-full fk:min-w-0 fk:items-start fk:space-x-2 fk:rounded-md fk:border fk:border-input fk:bg-background fk:focus-visible:outline-hidden fk:ring-offset-background fk:focus-visible:ring-2 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-2 ${\n isOpen ? 'fk:outline-hidden fk:ring-2 fk:ring-ring fk:ring-offset-2' : ''\n } fk:corner-squircle`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.focus();\n wrapperRef.current?.click();\n setIsOpen(true);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n setIsOpen(true);\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }\n }}\n ref={wrapperRef}\n role=\"combobox\"\n tabIndex={0}\n >\n <div className=\"fk:flex fk:w-full fk:min-w-0 fk:flex-col\">\n <div className=\"fk:flex fk:w-full fk:min-w-0 fk:items-start fk:gap-2\">\n {!isOpen ? (\n <span className=\"fk:flex fk:min-w-0 fk:flex-wrap fk:grow fk:overflow-hidden fk:pb-1.5\">\n {previewItems.map((item) => (\n <Badge\n className=\"fk:mr-2 fk:mt-1.5 fk:max-w-60 fk:justify-start fk:rounded-xs fk:corner-squircle\"\n key={item}\n title={item}\n variant=\"secondary\"\n >\n <span className=\"fk:min-w-0 fk:truncate\">{item}</span>\n </Badge>\n ))}\n {hasMorePreviewItems ? (\n <Badge className=\"fk:mr-2 fk:mt-1.5 fk:rounded-xs fk:corner-squircle\" variant=\"secondary\">\n …\n </Badge>\n ) : null}\n </span>\n ) : (\n <Button\n className=\"fk:h-8 fk:mr-auto fk:mt-[0.1875rem]\"\n disabled={readOnly}\n onClick={handleSelection}\n variant=\"outline\"\n >\n <Link className=\"fk:h-4 fk:w-4 fk:mr-2\" /> Link to a record from{' '}\n {relationshipEntitySchema?.menu?.label ?? relationshipEntitySchema?.plural}\n </Button>\n )}\n <div className=\"fk:mt-[0.1875rem] fk:ml-auto fk:flex fk:shrink-0 fk:items-center fk:gap-2\">\n {isOpen ? (\n <span className=\"fk:text-sm fk:font-normal fk:text-muted-foreground\">\n {displayCount.toLocaleString()} {displayCount === 1 ? 'record' : 'records'}\n </span>\n ) : null}\n {!isOpen ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n id={fieldId}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n wrapperRef.current?.focus();\n wrapperRef.current?.click();\n }\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n <Maximize2 className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Expand field</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n <ClearIcon className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Close</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n </div>\n <Collapsible\n className=\"fk:w-full fk:min-w-0 fk:space-y-2 fk:ml-0!\"\n onOpenChange={setIsOpen}\n open={isOpen}\n >\n <CollapsibleContent className=\"fk:w-full fk:min-w-0\">\n <div className=\"fk:mt-3 fk:mb-2 fk:w-full fk:min-w-0\" id={`relationship-dropdown-${name}`}>\n <DataTable\n classNames={{\n wrapper: 'fk:h-[17.5rem] fk:min-h-0 fk:min-w-0 fk:gap-0',\n table: 'fk:pb-0',\n }}\n columns={columns}\n data={rows}\n entityName={entityName}\n hasMore={hasMore}\n isLoadingMore={loading && rows.length > 0}\n onLoadMore={handleLoadMore}\n rowAdditionState={\n relationships[relationshipId]?.connect as MultipleRelationshipConnection | undefined\n }\n rowDeletionState={relationships[relationshipId]?.disconnect}\n />\n </div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n\ntype DataRowActions = {\n appDispatch: Dispatch<ActionSetRelationship>;\n relationshipId: string;\n relationships: Relationships;\n row: Row<AttributeValue>;\n setRows: Dispatch<React.SetStateAction<AttributeValue[]>>;\n};\n\nfunction dataRowActions({ appDispatch, relationshipId, relationships, row, setRows }: DataRowActions): JSX.Element {\n function disconnectEntity(entityId: string): void {\n const connectedEntities = (relationships[relationshipId]?.connect as MultipleRelationshipConnection | null) ?? [];\n const rowToDeleteWasJustConnected = typeof find(propEq(entityId, '_id'), connectedEntities) === 'object';\n\n const shouldUndoDisconnection = relationships[relationshipId]?.disconnect?.includes(entityId);\n const disconnection = rowToDeleteWasJustConnected\n ? (relationships[relationshipId]?.disconnect ?? [])\n : uniq([...(relationships[relationshipId]?.disconnect ?? []), entityId]);\n\n if (rowToDeleteWasJustConnected) {\n setRows((rows) => rows.filter((rowItem) => rowItem._id !== entityId));\n }\n\n appDispatch({\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect: connectedEntities.filter((rowItem) => rowItem._id !== entityId),\n disconnect: shouldUndoDisconnection\n ? (relationships[relationshipId]?.disconnect?.filter((_id) => _id !== entityId) ?? [])\n : disconnection,\n },\n },\n });\n }\n\n return <DataTableRowActions action={disconnectEntity} row={row} />;\n}\n\ntype DataAdapter = {\n data: unknown;\n defaultScope: string;\n primaryAttributeName: string;\n relationshipEntitySchema: Entity | undefined;\n scope: string;\n};\n\nfunction dataAdapter({ data, defaultScope, relationshipEntitySchema, scope }: DataAdapter): AttributeValue[] {\n if (!Array.isArray(data)) {\n return [];\n }\n\n const renderNode = (node: AttributeValue): unknown => {\n const relationshipFieldSchema = find(propEq(node.__typename, 'name'))(\n relationshipEntitySchema?.attributes ?? []\n ) as Attribute | undefined;\n const relationshipFieldName = relationshipFieldSchema?.relationship?.field ?? '';\n\n if (relationshipFieldName) {\n const rawFieldValue = node[relationshipFieldName];\n const fieldNode = (Array.isArray(rawFieldValue) ? rawFieldValue[0] : rawFieldValue) as\n | AttributeValue\n | string\n | null\n | undefined;\n\n if (fieldNode && typeof fieldNode === 'object') {\n return fieldNode[scope] ?? fieldNode[defaultScope] ?? '';\n }\n\n return fieldNode;\n }\n\n return node[scope] ?? node[defaultScope];\n };\n\n return data.map(\n (row: MappedEntityItem | EntityItem) =>\n map((field) => {\n // All relationship fields (scoped attributes, single and multiple\n // relationships) are lists in the schema\n if (Array.isArray(field)) {\n const nodes = field as unknown as AttributeValue[];\n\n if (nodes.length === 0) {\n return '';\n }\n\n if (nodes.length === 1) {\n return renderNode(nodes[0]);\n }\n\n return nodes.slice(0, 3).map(renderNode).join(', ');\n }\n\n if (field && typeof field !== 'string' && field.__typename) {\n return renderNode(field);\n }\n\n return field;\n }, row) as AttributeValue\n );\n}\n","import { useEffect, useId, useState } from 'react';\nimport type { JSX, SyntheticEvent } from 'react';\nimport { find, propEq } from 'ramda';\nimport { ChevronsUpDown, X as ClearIcon } from 'lucide-react';\nimport { Button } from '../../../ui/primitives/button';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../../ui/primitives/form';\nimport { Input } from '../../../ui/primitives/input';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/primitives/tooltip';\nimport { getDisplayAttribute } from '../../../core/get-display-attribute';\nimport type { ActionSetRelationship, Entity, SingleRelationshipConnection } from '../../../core/types';\nimport { useDispatch } from '../../../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../../../core/app-context';\nimport type { FormFieldParams } from '../../types';\nimport type { AttributeValue, EntityItem, MappedEntityItem } from '../../../graphql-client/types';\n\nexport default function SingleRelationship({\n control,\n defaultScope,\n defaultValue,\n entityId,\n fieldSchema,\n getValues,\n readOnly,\n schema,\n scope,\n setValue,\n}: FormFieldParams<'relationship'>): JSX.Element {\n const [hasFocus, setHasFocus] = useState(false);\n const { name, label, options, relationship } = fieldSchema;\n const relationshipEntity: string = relationship?.entity ?? name;\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const fieldId = useId();\n const { relationships } = useAppContext();\n const relationshipId = useId();\n const relationshipEntitySchema = find(propEq(relationshipEntity, 'name'))(schema) as Entity | undefined;\n const displayAttributeName = getDisplayAttribute(relationshipEntitySchema)?.name;\n\n useEffect(() => {\n const connectValue = defaultValue.value;\n\n if (connectValue === '' || typeof connectValue === 'boolean' || typeof connectValue === 'number') {\n return;\n }\n\n const connect: SingleRelationshipConnection = {\n _id: String(defaultValue._id),\n value: connectValue,\n };\n const action: ActionSetRelationship = {\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect,\n disconnect: [],\n },\n },\n };\n\n // set the initial state of the relationship\n appDispatch(action);\n }, [appDispatch, relationshipId, defaultValue, scope]);\n\n /**\n * Update the value of the relationship attribute when the relationshp context value changes\n * The relationshp context value changes when the user selects a row from the datagrid in the EditRelationship modal\n */\n useEffect(() => {\n setValue(name, { ...getValues(name), ...(relationships[relationshipId]?.connect ?? '') });\n }, [defaultValue, name, relationships, relationshipId, setValue]);\n\n function handleSelection(event: SyntheticEvent): void {\n event.preventDefault();\n\n if (readOnly) {\n return;\n }\n\n actionDispatch({\n type: 'EditRelationship',\n payload: {\n connectedEntitiesCount: 0,\n entityName: relationshipEntity,\n entityId,\n relationshipId,\n mode: relationship?.mode ?? 'single',\n },\n });\n }\n\n function handleClearing(event: SyntheticEvent): void {\n if (readOnly) {\n return;\n }\n\n const action: ActionSetRelationship = {\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect: [],\n disconnect: [],\n },\n },\n };\n\n event.preventDefault();\n appDispatch(action);\n setValue(name, { ...getValues(name), _id: '', value: undefined });\n }\n\n return (\n <FormField\n control={control}\n defaultValue={defaultValue}\n name={name}\n render={({\n field,\n }: {\n field: {\n value?: {\n value: string | MappedEntityItem | EntityItem | AttributeValue | undefined | null;\n };\n };\n }) => {\n const value = field.value?.value;\n let displayValue = '';\n\n if (\n displayAttributeName &&\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n value[displayAttributeName]\n ) {\n const rawPrimary = value[displayAttributeName];\n // Local display attributes are list relationship fields with 0..1 scoped nodes\n const primaryValue = (Array.isArray(rawPrimary) ? rawPrimary[0] : rawPrimary) as\n | AttributeValue\n | string\n | undefined;\n\n if (typeof primaryValue === 'string') {\n displayValue = primaryValue;\n } else {\n displayValue = ((primaryValue?.[scope] ?? primaryValue?.[defaultScope]) as string | undefined) ?? '';\n }\n }\n\n return (\n <FormItem>\n <FormLabel htmlFor={fieldId}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl className=\"fk:flex fk:w-full fk:items-center fk:space-x-2\">\n <div\n className={`fk:relative fk:flex fk:w-full fk:items-start fk:space-x-2 fk:rounded-md fk:border fk:border-input fk:bg-background fk:ring-offset-background ${\n hasFocus ? 'fk:outline-hidden fk:ring-2 fk:ring-ring fk:ring-offset-2' : ''\n } fk:corner-squircle`}\n >\n <Input\n className=\"fk:h-9.5 fk:py-1.75 fk:caret-transparent fk:border-0 fk:focus-visible:ring-0 fk:focus-visible:ring-offset-0\"\n disabled={readOnly}\n id={fieldId}\n onBlur={() => {\n setHasFocus(false);\n }}\n onClick={handleSelection}\n onFocus={() => {\n setHasFocus(true);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n handleSelection(e);\n }\n }}\n readOnly\n type=\"text\"\n value={displayValue}\n />\n {displayValue ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:absolute fk:right-10 fk:top-0.75 fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n disabled={readOnly}\n onClick={handleClearing}\n size=\"icon\"\n variant=\"ghost\"\n >\n <ClearIcon className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Clear</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:absolute fk:right-0.75 fk:top-0.75 fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n disabled={readOnly}\n onClick={handleSelection}\n size=\"icon\"\n variant=\"ghost\"\n >\n <ChevronsUpDown className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Open</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n );\n }}\n />\n );\n}\n","import type { JSX } from 'react';\nimport { AlertTriangle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../../ui/primitives/alert';\nimport type { FormFieldParams } from '../../types';\nimport AssetMultipleRelationship from './asset-multiple';\nimport MultipleRelationship from './multiple';\nimport SingleRelationship from './single';\n\nexport default function Relationship(formFieldParams: FormFieldParams<'relationship'>): JSX.Element {\n const { fieldSchema } = formFieldParams;\n const { relationship } = fieldSchema;\n\n if (relationship?.mode === 'single') {\n return <SingleRelationship {...formFieldParams} />;\n }\n\n if (relationship?.mode === 'multiple') {\n if (relationship.entity === '_asset') {\n return <AssetMultipleRelationship {...formFieldParams} />;\n }\n\n const props = { relationshipEntityName: fieldSchema.relationship?.entity, ...formFieldParams };\n\n return <MultipleRelationship {...props} />;\n }\n\n return (\n <Alert variant=\"destructive\">\n <AlertTriangle className=\"h-4 w-4\" />\n <AlertTitle>Error</AlertTitle>\n <AlertDescription>\n {`Incorrect \"mode\" for relationship field. It should be \"single\" or \"multiple\". Please check the schema configuration.`}\n </AlertDescription>\n </Alert>\n );\n}\n","import type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport {\n Select as SelectPrimitive,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '../../ui/primitives/select';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nconst SELECT_OPTION_PREFIX = 'flexkit-select-option:';\n\nfunction encodeOptionValue(value: string): string {\n return `${SELECT_OPTION_PREFIX}${encodeURIComponent(value)}`;\n}\n\nfunction decodeOptionValue(value: string): string {\n return decodeURIComponent(value.slice(SELECT_OPTION_PREFIX.length));\n}\n\nexport function Select({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'select'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n\n function handleInput(value: string, previousValue: FormFieldValue | undefined): void {\n const shouldCastToNumber = fieldSchema.dataType === 'int' && !isNaN(Number(value));\n const castedValue = shouldCastToNumber ? Number(value) : value;\n\n setValue(name, {\n ...previousValue,\n value: castedValue,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <SelectPrimitive\n defaultValue={\n field.value?.value === undefined || field.value.value === null\n ? undefined\n : encodeOptionValue(String(field.value.value))\n }\n disabled={readOnly || field.value?.disabled}\n onValueChange={(value) => {\n handleInput(decodeOptionValue(value), field.value);\n }}\n >\n <FormControl>\n <SelectTrigger>\n <SelectValue placeholder={options?.placeholder} />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n {options?.list?.map((option) => {\n if ('groupLabel' in option) {\n return (\n <SelectGroup key={option.groupLabel}>\n <SelectLabel>{option.groupLabel}</SelectLabel>\n {option.items.map((item) => {\n return (\n <SelectItem key={item.label} value={encodeOptionValue(item.value)}>\n {item.label}\n </SelectItem>\n );\n })}\n </SelectGroup>\n );\n }\n\n return (\n <SelectItem key={option.label} value={encodeOptionValue(option.value)}>\n {option.label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </SelectPrimitive>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import type { FieldGroup } from './types';\n\nexport const ALL_FIELDS_GROUP_NAME = 'all';\n\nexport const ALL_FIELDS_GROUP: FieldGroup = {\n name: ALL_FIELDS_GROUP_NAME,\n title: 'All fields',\n};\n","import { ALL_FIELDS_GROUP, ALL_FIELDS_GROUP_NAME } from '../core/field-groups';\nimport type { Attribute, FieldGroup } from '../core/types';\n\nexport function getAttributeGroupNames(attribute: Attribute): string[] {\n if (typeof attribute.group === 'string') {\n return [attribute.group];\n }\n\n if (Array.isArray(attribute.group)) {\n return attribute.group;\n }\n\n return [];\n}\n\nexport function attributeBelongsToGroup(attribute: Attribute, groupName: string): boolean {\n if (groupName === ALL_FIELDS_GROUP_NAME) {\n return true;\n }\n\n return getAttributeGroupNames(attribute).includes(groupName);\n}\n\nexport function isAttributeVisibleInGroups(attribute: Attribute, groups: FieldGroup[]): boolean {\n if (groups.length === 0) {\n return true;\n }\n\n return groups.some((group) => attributeBelongsToGroup(attribute, group.name));\n}\n\nexport function resolveVisibleFieldGroups(groups: FieldGroup[] | undefined): FieldGroup[] {\n if (!groups || groups.length === 0) {\n return [];\n }\n\n const authoredAllFields = groups.find((group) => group.name === ALL_FIELDS_GROUP_NAME);\n const namedGroups = groups.filter((group) => group.name !== ALL_FIELDS_GROUP_NAME);\n const allFieldsGroup: FieldGroup = {\n ...ALL_FIELDS_GROUP,\n ...authoredAllFields,\n };\n const resolvedGroups = [allFieldsGroup, ...namedGroups];\n\n return resolvedGroups.filter((group) => group.hidden !== true);\n}\n\nexport function getDefaultFieldGroupName(groups: FieldGroup[]): string {\n const defaultGroup = groups.find((group) => group.default);\n\n if (defaultGroup) {\n return defaultGroup.name;\n }\n\n const firstNamedGroup = groups.find((group) => group.name !== ALL_FIELDS_GROUP_NAME);\n\n if (firstNamedGroup) {\n return firstNamedGroup.name;\n }\n\n return ALL_FIELDS_GROUP_NAME;\n}\n","import { z } from 'zod';\nimport type { JsonSchemaObject } from '../core/types';\n\n/**\n * Builds a Zod schema from the JSON Schema fragment `flexkit deploy` compiled\n * out of the config's `validation`. Only the keywords the serializer allows\n * are handled (see `SUPPORTED_VALIDATION_KEYWORDS` in `@flexkit/schema`);\n * anything else is ignored with a one-time warning.\n *\n * Messages are generated from the attribute label: authored Zod messages do\n * not survive the JSON Schema round trip.\n */\nexport function jsonSchemaToZod(schema: JsonSchemaObject, label: string): z.ZodType {\n return convert(schema, label);\n}\n\nconst warned = new Set<string>();\n\nfunction warnOnce(keyword: string): void {\n if (warned.has(keyword)) {\n return;\n }\n\n warned.add(keyword);\n console.warn(`[flexkit] validation keyword \"${keyword}\" is not supported by the Studio form and was ignored.`);\n}\n\nconst HANDLED_KEYWORDS = new Set([\n 'type',\n 'minLength',\n 'maxLength',\n 'pattern',\n 'format',\n 'minimum',\n 'maximum',\n 'exclusiveMinimum',\n 'exclusiveMaximum',\n 'multipleOf',\n 'enum',\n 'const',\n 'properties',\n 'required',\n 'additionalProperties',\n 'items',\n 'minItems',\n 'maxItems',\n 'anyOf',\n 'oneOf',\n 'not',\n 'description',\n 'title',\n '$schema',\n]);\n\nconst FORMAT_MESSAGES: { [format: string]: string } = {\n email: 'must be a valid email address',\n uri: 'must be a valid URL',\n uuid: 'must be a valid UUID',\n 'date-time': 'must be a valid date and time',\n date: 'must be a valid date',\n time: 'must be a valid time',\n};\n\nfunction isObject(value: unknown): value is JsonSchemaObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction literal(value: unknown): z.ZodType {\n if (value === null) return z.null();\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return z.literal(value);\n\n return z.any().refine((candidate) => JSON.stringify(candidate) === JSON.stringify(value));\n}\n\nfunction unionOf(options: z.ZodType[], label: string): z.ZodType {\n if (options.length === 0) return z.any();\n if (options.length === 1) return options[0]!;\n\n return z.union(options as [z.ZodType, z.ZodType, ...z.ZodType[]], { error: `${label} is invalid` });\n}\n\nfunction convertString(schema: JsonSchemaObject, label: string): z.ZodType {\n let result = z.string({ error: `${label} must be text` });\n const format = typeof schema.format === 'string' ? schema.format : undefined;\n const formatMessage = format ? (FORMAT_MESSAGES[format] ?? `must match the ${format} format`) : 'has an invalid format';\n\n if (typeof schema.minLength === 'number') {\n const min = schema.minLength;\n result = result.min(min, { error: min <= 1 ? `${label} is required` : `${label} must be at least ${String(min)} characters` });\n }\n\n if (typeof schema.maxLength === 'number') {\n result = result.max(schema.maxLength, { error: `${label} must be at most ${String(schema.maxLength)} characters` });\n }\n\n if (typeof schema.pattern === 'string') {\n try {\n result = result.regex(new RegExp(schema.pattern), { error: `${label} ${formatMessage}` });\n } catch {\n warnOnce(`pattern:${schema.pattern}`);\n }\n }\n\n return result;\n}\n\nconst SAFE_BOUNDS = new Set([Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER]);\n\nfunction convertNumber(schema: JsonSchemaObject, label: string, integer: boolean): z.ZodType {\n let result = z.number({ error: `${label} must be a number` });\n\n if (integer) {\n result = result.int({ error: `${label} must be a whole number` });\n }\n\n const minimum = typeof schema.minimum === 'number' && !SAFE_BOUNDS.has(schema.minimum) ? schema.minimum : undefined;\n const maximum = typeof schema.maximum === 'number' && !SAFE_BOUNDS.has(schema.maximum) ? schema.maximum : undefined;\n const between =\n minimum !== undefined && maximum !== undefined ? `${label} must be between ${String(minimum)} and ${String(maximum)}` : undefined;\n\n if (minimum !== undefined) {\n result = result.min(minimum, { error: between ?? `${label} must be at least ${String(minimum)}` });\n }\n\n if (maximum !== undefined) {\n result = result.max(maximum, { error: between ?? `${label} must be at most ${String(maximum)}` });\n }\n\n if (typeof schema.exclusiveMinimum === 'number') {\n result = result.gt(schema.exclusiveMinimum, { error: `${label} must be greater than ${String(schema.exclusiveMinimum)}` });\n }\n\n if (typeof schema.exclusiveMaximum === 'number') {\n result = result.lt(schema.exclusiveMaximum, { error: `${label} must be less than ${String(schema.exclusiveMaximum)}` });\n }\n\n if (typeof schema.multipleOf === 'number') {\n result = result.multipleOf(schema.multipleOf, { error: `${label} must be a multiple of ${String(schema.multipleOf)}` });\n }\n\n return result;\n}\n\nfunction convertArray(schema: JsonSchemaObject, label: string): z.ZodType {\n let result = z.array(isObject(schema.items) ? convert(schema.items, label) : z.any(), {\n error: `${label} must be a list`,\n });\n\n if (typeof schema.minItems === 'number') {\n result = result.min(schema.minItems, {\n error: schema.minItems <= 1 ? `${label} is required` : `${label} needs at least ${String(schema.minItems)} items`,\n });\n }\n\n if (typeof schema.maxItems === 'number') {\n result = result.max(schema.maxItems, { error: `${label} allows at most ${String(schema.maxItems)} items` });\n }\n\n return result;\n}\n\nfunction convertObject(schema: JsonSchemaObject, label: string): z.ZodType {\n const properties = isObject(schema.properties) ? schema.properties : {};\n const required = new Set(Array.isArray(schema.required) ? schema.required.filter((key) => typeof key === 'string') : []);\n const shape: { [key: string]: z.ZodType } = {};\n\n for (const [key, property] of Object.entries(properties)) {\n const converted = isObject(property) ? convert(property, `${label} ${key}`) : z.any();\n shape[key] = required.has(key) ? converted : converted.optional();\n }\n\n // `additionalProperties: false` is what Zod emits for every z.object(), whose\n // authored behaviour is to strip unknown keys, not reject them. Mirror that.\n return z.object(shape, { error: `${label} is required` });\n}\n\nfunction convertByType(type: unknown, schema: JsonSchemaObject, label: string): z.ZodType {\n switch (type) {\n case 'string':\n return convertString(schema, label);\n case 'integer':\n return convertNumber(schema, label, true);\n case 'number':\n return convertNumber(schema, label, false);\n case 'boolean':\n return z.boolean({ error: `${label} must be yes or no` });\n case 'null':\n return z.null();\n case 'array':\n return convertArray(schema, label);\n case 'object':\n return convertObject(schema, label);\n default:\n if (typeof type === 'string') warnOnce(`type:${type}`);\n\n return z.any();\n }\n}\n\nfunction convert(schema: JsonSchemaObject, label: string): z.ZodType {\n for (const keyword of Object.keys(schema)) {\n if (!HANDLED_KEYWORDS.has(keyword)) {\n warnOnce(keyword);\n }\n }\n\n if (schema.const !== undefined) {\n return literal(schema.const);\n }\n\n if (Array.isArray(schema.enum)) {\n return unionOf(\n schema.enum.map((value) => literal(value)),\n label\n );\n }\n\n const alternatives = Array.isArray(schema.anyOf) ? schema.anyOf : Array.isArray(schema.oneOf) ? schema.oneOf : undefined;\n\n if (alternatives) {\n const options = alternatives.filter(isObject);\n const nullIndex = options.findIndex((option) => option.type === 'null');\n\n if (nullIndex !== -1 && options.length === 2) {\n const other = options[nullIndex === 0 ? 1 : 0]!;\n\n return convert(other, label).nullable();\n }\n\n return unionOf(\n options.map((option) => convert(option, label)),\n label\n );\n }\n\n if (isObject(schema.not)) {\n const forbidden = convert(schema.not, label);\n\n return z.any().refine((value) => !forbidden.safeParse(value).success, { error: `${label} is invalid` });\n }\n\n if (Array.isArray(schema.type)) {\n return unionOf(\n schema.type.map((type) => convertByType(type, schema, label)),\n label\n );\n }\n\n return convertByType(schema.type, schema, label);\n}\n\n/**\n * Wraps a converted schema so the form shows one message per field: the\n * required message for empty values, otherwise the first failing rule.\n */\nexport function toFieldValidator(schema: z.ZodType, label: string): z.ZodType {\n return z.any().superRefine((value, ctx) => {\n const result = schema.safeParse(value);\n\n if (result.success) {\n return;\n }\n\n const isEmpty = value === undefined || value === null || value === '';\n\n ctx.addIssue({\n code: 'custom',\n message: isEmpty ? `${label} is required` : (result.error.issues[0]?.message ?? `${label} is invalid`),\n });\n });\n}\n","import { createElement, forwardRef, memo, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport type { ComponentType, ForwardedRef, JSX } from 'react';\nimport { useForm } from 'react-hook-form';\nimport type { Resolver } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { z } from 'zod';\nimport { equals, find, propEq } from 'ramda';\nimport { AlertTriangle } from 'lucide-react';\nimport { Icon } from '../ui/components/icon';\nimport { Alert, AlertDescription, AlertTitle } from '../ui/primitives/alert';\nimport { Form } from '../ui/primitives/form';\nimport { ScrollArea, ScrollBar } from '../ui/primitives/scroll-area';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../ui/primitives/tabs';\nimport type { Attribute, Entity, Schema } from '../core/types';\nimport type { FormEntityItem, FormFieldValue } from '../graphql-client/types';\nimport { useAuth } from '../auth/auth-context';\nimport { filterAttributesForSpaces } from '../core/spaces';\nimport { Text as TextField } from './fields/text';\nimport { Switch as SwitchField } from './fields/switch';\nimport { Uploader as UploaderField } from './fields/uploader';\nimport { Number as NumberField } from './fields/number';\nimport { DateTime as DateTimeField } from './fields/datetime';\nimport EditorField from './fields/editor';\nimport { Textarea as TextareaField } from './fields/textarea';\nimport RelationshipField from './fields/relationship';\nimport { Select as SelectField } from './fields/select';\nimport type { FormFieldParams } from './types';\nimport {\n attributeBelongsToGroup,\n getDefaultFieldGroupName,\n isAttributeVisibleInGroups,\n resolveVisibleFieldGroups,\n} from './field-groups';\nimport { jsonSchemaToZod, toFieldValidator } from './json-schema-to-zod';\n\nconst warnedInputTypes = new Set<string>();\n\nexport type SubmitHandle = {\n submit: () => void;\n hasErrors: () => void;\n hasDataChanged: () => boolean;\n markAsSaved: () => void;\n /**\n * Patches local-attribute _ids returned by an update mutation into the live\n * form values without replacing the whole formData snapshot (avoids dirtying).\n */\n applyLocalAttributeIds: (ids: { [attributeName: string]: string }) => void;\n};\n\ntype Props = {\n currentScope: string;\n defaultScope: string;\n entityId?: string;\n entityName: string;\n entityNamePlural: string;\n formData?: FormEntityItem;\n schema: Schema;\n setIsDirty: (isDirty: boolean) => void;\n onSubmit: (newData: FormEntityItem, previousData?: FormEntityItem) => void;\n};\n\nfunction getInitialFieldValue(field: Attribute, defaultScope: string): FormFieldValue {\n const value = field.dataType === 'asset' || field.scope === 'relationship' ? '' : (field.defaultValue ?? '');\n\n return {\n disabled: false,\n scope: defaultScope,\n value,\n };\n}\n\nfunction FormBuilder(\n { currentScope, defaultScope, entityId, entityName, entityNamePlural, formData, schema, setIsDirty, onSubmit }: Props,\n ref: ForwardedRef<SubmitHandle>\n): JSX.Element {\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const [, auth] = useAuth();\n const userSpaces = auth.user?.spaces;\n // Hide space-bound attributes from non-members; the server rejects writes\n // and nulls reads for them regardless.\n const formSchema = useMemo(\n () => filterAttributesForSpaces(entitySchema?.attributes ?? [], userSpaces),\n [entitySchema, userSpaces]\n );\n const initialFormValues = useMemo(() => {\n if (formData) {\n return formData;\n }\n\n return formSchema.reduce<FormEntityItem>(\n (values, field) => ({\n ...values,\n [field.name]: getInitialFieldValue(field, defaultScope),\n }),\n {}\n );\n }, [defaultScope, formData, formSchema]);\n // Validators are compiled once per schema, not on every blur: the deployed\n // JSON Schema of each attribute is converted back to Zod and wrapped so the\n // form shows a single label-based message per field.\n const validators = useMemo(() => {\n const visibleGroupsForValidation = resolveVisibleFieldGroups(entitySchema?.groups);\n const shape: { [fieldName: string]: z.ZodType } = {};\n\n for (const fieldSchema of formSchema) {\n if (fieldSchema.validation === undefined || fieldSchema.hidden === true || fieldSchema.readOnly === true) {\n continue;\n }\n\n if (!isAttributeVisibleInGroups(fieldSchema, visibleGroupsForValidation)) {\n continue;\n }\n\n const label = fieldSchema.label || fieldSchema.name;\n\n shape[fieldSchema.name] = z.object({\n value: toFieldValidator(jsonSchemaToZod(fieldSchema.validation, label), label),\n });\n }\n\n return zodResolver(z.object(shape)) as Resolver<FormEntityItem>;\n }, [entitySchema?.groups, formSchema]);\n const resolver: Resolver<FormEntityItem> = (values, context, options) => validators(values, context, options);\n\n const form = useForm<FormEntityItem>({\n defaultValues: initialFormValues,\n resolver,\n values: formData,\n mode: 'onBlur',\n criteriaMode: 'all',\n });\n\n const { control, getValues, handleSubmit, setValue, watch, trigger } = form;\n // Subscribe to value changes so dirty tracking below re-renders with the form.\n watch();\n const visibleGroups = useMemo(() => resolveVisibleFieldGroups(entitySchema?.groups), [entitySchema?.groups]);\n const [activeGroup, setActiveGroup] = useState(() => getDefaultFieldGroupName(visibleGroups));\n // Baseline for dirty checks. Updated on successful save so relationship-field\n // noise / stale formData props cannot keep reporting dirty after Save.\n const baselineRef = useRef<FormEntityItem | undefined>(formData);\n const hasMarkedSavedRef = useRef(false);\n\n useEffect(() => {\n if (hasMarkedSavedRef.current) {\n return;\n }\n\n baselineRef.current = formData;\n }, [formData]);\n\n const formFieldComponentsMap = {\n datetime: DateTimeField,\n editor: EditorField,\n asset: UploaderField,\n number: NumberField,\n relationship: RelationshipField,\n select: SelectField,\n 'switch': SwitchField,\n text: TextField,\n textarea: TextareaField,\n };\n\n useImperativeHandle(ref, () => ({\n submit() {\n // Force validate all fields\n void trigger().then(() => {\n void handleSubmit(() => {\n const values = getValues() as FormEntityItem;\n // Commit baseline immediately so close matches the disabled Save button\n // even before the mutation onCompleted handler runs.\n hasMarkedSavedRef.current = true;\n baselineRef.current = values;\n setIsDirty(false);\n onSubmit(values, formData);\n })();\n });\n },\n hasErrors() {\n hasMarkedSavedRef.current = false;\n baselineRef.current = formData;\n setIsDirty(true);\n },\n hasDataChanged() {\n return hasDataChanged(getValues(), baselineRef.current);\n },\n markAsSaved() {\n hasMarkedSavedRef.current = true;\n baselineRef.current = getValues() as FormEntityItem;\n setIsDirty(false);\n },\n applyLocalAttributeIds(ids: { [attributeName: string]: string }) {\n const values = getValues() as FormEntityItem;\n const nextValues: FormEntityItem = { ...values };\n\n for (const [attributeName, id] of Object.entries(ids)) {\n const field = values[attributeName];\n\n if (!field || field._id || !id) {\n continue;\n }\n\n nextValues[attributeName] = {\n ...field,\n _id: id,\n };\n }\n\n // Baseline first so any watch fired by setValue still compares clean.\n hasMarkedSavedRef.current = true;\n baselineRef.current = nextValues;\n\n for (const [attributeName, field] of Object.entries(nextValues)) {\n if (field === values[attributeName]) {\n continue;\n }\n\n setValue(attributeName, field, {\n shouldDirty: false,\n shouldTouch: false,\n shouldValidate: false,\n });\n }\n\n setIsDirty(false);\n },\n }));\n\n useEffect(() => {\n const formChangesSubscription = watch(() => {\n // Always compare the full form snapshot. The watch callback payload can be\n // partial and falsely report dirty against the baseline.\n setIsDirty(hasDataChanged(getValues(), baselineRef.current));\n });\n\n return () => {\n formChangesSubscription.unsubscribe();\n };\n }, [formData, getValues, setIsDirty, watch]);\n\n useEffect(() => {\n if (visibleGroups.length === 0) {\n return;\n }\n\n if (visibleGroups.some((group) => group.name === activeGroup)) {\n return;\n }\n\n setActiveGroup(getDefaultFieldGroupName(visibleGroups));\n }, [activeGroup, visibleGroups]);\n\n if (!entitySchema || entitySchema.attributes.length === 0) {\n return (\n <Alert variant=\"destructive\">\n <AlertTriangle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>Error</AlertTitle>\n <AlertDescription>\n No attributes found in the schema for entity <strong>{entityName}</strong>\n </AlertDescription>\n </Alert>\n );\n }\n\n const renderField = (field: Attribute) => {\n if (field.name === '_id') {\n return null;\n }\n\n if (field.hidden === true) {\n return null;\n }\n\n const readOnly = field.readOnly === true;\n const knownComponent = formFieldComponentsMap[field.inputType as keyof typeof formFieldComponentsMap] as\n | ComponentType<FormFieldParams<typeof field.inputType>>\n | undefined;\n\n if (!knownComponent && !warnedInputTypes.has(field.inputType)) {\n // Custom input types from the extension era render as text now.\n warnedInputTypes.add(field.inputType);\n console.warn(`[flexkit] Unknown inputType \"${field.inputType}\" on \"${field.name}\"; rendering a text field.`);\n }\n\n const fieldComponent =\n knownComponent ?? (TextField as unknown as ComponentType<FormFieldParams<typeof field.inputType>>);\n\n return createElement(\n fieldComponent as ComponentType<FormFieldParams<typeof field.inputType>>,\n {\n key: field.name,\n control,\n defaultScope,\n defaultValue: initialFormValues[field.name],\n entityId,\n entityName,\n entityNamePlural,\n fieldSchema: field,\n getValues,\n readOnly,\n schema,\n scope: currentScope,\n setValue,\n } as FormFieldParams<typeof field.inputType>\n );\n };\n\n return (\n <Form {...form}>\n <form\n className=\"fk:flex fk:flex-col fk:gap-5\"\n onSubmit={(event) => {\n event.preventDefault();\n }}\n >\n {visibleGroups.length > 0 ? (\n <Tabs onValueChange={setActiveGroup} value={activeGroup}>\n <div className=\"fk:sticky fk:top-0 fk:z-10 fk:bg-background fk:py-1 fk:mb-6\">\n <ScrollArea className=\"fk:w-full fk:**:data-[slot=scroll-area-viewport]:h-auto fk:[&_[data-slot=scroll-area-scrollbar][data-orientation=vertical]]:hidden fk:**:data-[slot=scroll-area-viewport]:p-1 fk:**:data-[slot=scroll-area-viewport]:-ml-1 fk:**:data-[slot=scroll-area-viewport]:-mt-1\">\n <TabsList className=\"fk:h-9 fk:w-max fk:flex-nowrap fk:justify-start\">\n {visibleGroups.map((group) => (\n <TabsTrigger key={group.name} value={group.name}>\n {group.icon ? <Icon name={group.icon} /> : null}\n {group.title}\n </TabsTrigger>\n ))}\n </TabsList>\n <ScrollBar orientation=\"horizontal\" />\n </ScrollArea>\n </div>\n <TabsContent className=\"fk:gap-8\" value={activeGroup}>\n {formSchema.map((field) => {\n if (!isAttributeVisibleInGroups(field, visibleGroups)) {\n return null;\n }\n\n const isVisible = attributeBelongsToGroup(field, activeGroup);\n const fieldElement = renderField(field);\n\n if (!fieldElement) {\n return null;\n }\n\n return (\n <div className={isVisible ? undefined : 'fk:hidden'} key={field.name}>\n {fieldElement}\n </div>\n );\n })}\n </TabsContent>\n </Tabs>\n ) : (\n formSchema.map((field) => renderField(field))\n )}\n </form>\n </Form>\n );\n}\n\nexport default memo(forwardRef(FormBuilder));\n\nfunction hasDataChanged(\n changedData: FormEntityItem | { [attribute: string]: undefined },\n originalFormData?: FormEntityItem\n): boolean {\n if (!originalFormData) {\n // iterate over changedData and check if there are any values\n return Object.keys(changedData).some(\n (field) => changedData[field]?.value !== '' && changedData[field]?.value !== undefined\n );\n }\n\n /**\n * Normalize the value for comparison.\n * This is necessary because the value might be an object, so we need to either\n * compare by the _id or or other keys depending on the type of field.\n */\n const normalizeComparisonValue = (value: unknown) => {\n if (typeof value === 'object' && value !== null) {\n if ('path' in value) {\n // for image attributes\n return value.path;\n }\n\n return '_id' in value ? (value as { _id: string })._id : '';\n }\n\n return value ?? '';\n };\n\n const sortAlphabetically = (a: string, b: string): 1 | -1 => (a < b ? -1 : 1);\n const originalData = Object.keys(originalFormData)\n .sort((a, b) => sortAlphabetically(a, b))\n .filter((field) => field !== '_updatedAt')\n .reduce(\n (acc, field) => ({\n ...acc,\n [field]: {\n value: normalizeComparisonValue(originalFormData[field].value),\n disabled: originalFormData[field].disabled,\n relationships: originalFormData[field].relationships,\n },\n }),\n {}\n );\n const newData = Object.keys(changedData)\n .sort((a, b) => sortAlphabetically(a, b))\n .filter((field) => field !== '_updatedAt')\n .reduce(\n (acc, field) => ({\n ...acc,\n [field]: {\n value: normalizeComparisonValue(changedData[field]?.value),\n disabled: changedData[field]?.disabled ?? false,\n relationships:\n Boolean(Object.keys(changedData[field]?.relationships?.connect ?? {}).length) ||\n Boolean(changedData[field]?.relationships?.disconnect?.length)\n ? changedData[field]?.relationships\n : undefined,\n },\n }),\n {}\n );\n\n return !equals(originalData, newData);\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { JSX } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { find, propEq } from 'ramda';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { useApolloClient } from '@apollo/client/react';\nimport { Loader2 } from 'lucide-react';\nimport { useAppContext } from '../core/app-context';\nimport DrawerModal from '../ui/components/drawer-modal';\nimport { useDrawerModalContext } from '../ui/drawer-modal-context';\nimport { useConfig } from '../core/config/config-context';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityListQueryName, scheduleEntityListRefetch } from '../graphql-client/refetch-entity-lists';\nimport FormBuilder from '../form/form-builder';\nimport type { SubmitHandle } from '../form/form-builder';\nimport type { Entity } from '../core/types';\nimport { getEntityCreateMutation } from '../graphql-client/queries';\nimport type { FormEntityItem } from '../graphql-client/types';\nimport { Button } from '../ui/primitives/button';\nimport { PermissionTooltip } from '../ui/components/permission-tooltip';\nimport { useCanMutate } from '../core/permissions';\nimport { useDispatch } from './actions-context';\nimport { useAuth } from '../auth/auth-context';\nimport { type Action, type ActionAddEntity } from './types';\n\ntype Props = {\n action: ActionAddEntity;\n depth: number;\n isFocused: boolean;\n};\n\nexport default function AddEntity({ action, depth, isFocused }: Props): JSX.Element {\n const { entityName } = action.payload;\n const ref = useRef<SubmitHandle>(null);\n const canMutate = useCanMutate();\n const [, auth] = useAuth();\n const { currentProject } = useConfig();\n const schema = useMemo(() => currentProject?.schema ?? [], [currentProject]);\n const scopes = currentProject?.scopes;\n const defaultScope = scopes?.find((s) => s.isDefault)?.name ?? 'default';\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const entityNamePlural = entitySchema?.plural ?? entityName;\n const { scope } = useAppContext();\n const dispatch = useDispatch();\n const apolloClient = useApolloClient();\n const [runMutation, setMutation, setOptions, mutationData] = useEntityMutation();\n const { isDirty, setIsDirty } = useDrawerModalContext();\n const [forceClose, setForceClose] = useState(false);\n\n useEffect(() => {\n if (mutationData.error) {\n ref.current?.hasErrors();\n }\n }, [mutationData.error]);\n\n function handleBeforeClose(): boolean {\n if (!isDirty) {\n return true;\n }\n\n dispatch({\n type: 'AlertDialog',\n _id: 'unsavedChanges',\n payload: {\n options: {\n dialogTitle: 'Unsaved Changes',\n dialogMessage:\n 'Are you sure you want to leave? There are unsaved changes. If you leave, your changes will be lost.',\n dialogCancelTitle: 'Stay Here',\n dialogActionLabel: 'Discard Changes',\n dialogActionCancel: () => {\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n },\n dialogActionSubmit: () => {\n setIsDirty(false);\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n setForceClose(true);\n },\n },\n },\n });\n\n return false;\n }\n\n const handleClose = useCallback(\n (_id: Action['_id']) => {\n dispatch({ type: 'Dismiss', _id, payload: {} });\n },\n [dispatch]\n );\n\n const handleSave = useCallback(() => {\n ref.current?.submit();\n }, [ref]);\n\n const saveEntity = useCallback(\n (newData: FormEntityItem) => {\n const _id = uuidv4();\n const mutation = getEntityCreateMutation(entityNamePlural, schema, newData, _id, {\n currentUser: auth.user,\n });\n\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n onCompleted: () => {\n void scheduleEntityListRefetch(apolloClient, getEntityListQueryName(entityNamePlural, schema));\n handleClose(action._id);\n toast.success('Your changes have been saved.');\n },\n });\n runMutation(true);\n },\n [action._id, apolloClient, auth.user, entityNamePlural, handleClose, runMutation, schema, setMutation, setOptions]\n );\n\n return (\n <DrawerModal\n actions={\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:px-8 fk:min-w-32\"\n disabled={!canMutate}\n onClick={() => {\n handleSave();\n }}\n variant=\"default\"\n >\n {mutationData.loading ? <Loader2 className=\"fk:h-4 fk:w-4 fk:mr-2 fk:animate-spin\" /> : null}\n Save\n </Button>\n </PermissionTooltip>\n }\n beforeClose={handleBeforeClose}\n depth={depth}\n forceClose={forceClose}\n isFocused={isFocused}\n onClose={() => {\n handleClose(action._id);\n }}\n title={`Add ${entityName}`}\n >\n <FormBuilder\n currentScope={scope}\n defaultScope={defaultScope}\n entityName={entityName}\n entityNamePlural={entityNamePlural}\n onSubmit={saveEntity}\n ref={ref}\n schema={schema}\n setIsDirty={setIsDirty}\n />\n </DrawerModal>\n );\n}\n","import type { JSX } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\n\nexport function ReadOnlyMode(): JSX.Element {\n return (\n <Alert className=\"fk:mb-4\" variant=\"destructive\">\n <AlertCircle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>Read Only Mode</AlertTitle>\n <AlertDescription>\n This project is currently in read only mode and changes cannot be saved. To troubleshoot this error, please{' '}\n <a\n className=\"fk:text-blue-500 fk:underline\"\n href=\"https://flexkit.io/docs/errors/read-only-mode\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n follow these steps\n </a>\n .\n </AlertDescription>\n </Alert>\n );\n}\n","import { Loader2 } from 'lucide-react';\nimport { Button } from '../ui/primitives/button';\nimport { PermissionTooltip } from '../ui/components/permission-tooltip';\nimport { useDrawerModalContext } from '../ui/drawer-modal-context';\nimport { useCanMutate } from '../core/permissions';\n\nexport default function SaveButton({ handleSave, isLoading }: { handleSave: () => void; isLoading: boolean }) {\n const { isDirty } = useDrawerModalContext();\n const canMutate = useCanMutate();\n\n return (\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:px-8 fk:min-w-32\"\n disabled={!isDirty || !canMutate}\n onClick={() => {\n handleSave();\n }}\n variant=\"default\"\n >\n {isLoading ? <Loader2 className=\"fk:h-4 fk:w-4 fk:mr-2 fk:animate-spin\" /> : null}\n Save\n </Button>\n </PermissionTooltip>\n );\n}\n","import type { JSX } from 'react';\nimport { Skeleton } from '../ui/primitives/skeleton';\n\nexport default function Loading(): JSX.Element {\n const numberOfSkeletonFields = 10;\n\n return (\n <>\n {}\n {Array.from({ length: numberOfSkeletonFields }, (_, i) => i++).map((i) => (\n <div className=\"fk:mt-3 fk:mb-6.5\" key={i}>\n <Skeleton className=\"fk:w-full fk:h-[45px]\" />\n <div className=\"fk:flex fk:mt-2 fk:ml-4\">\n <Skeleton className=\"fk:w-5 fk:mr-2\" />\n <Skeleton className=\"fk:w-[140px] fk:h-[20px]\" />\n </div>\n </div>\n ))}\n </>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { JSX } from 'react';\nimport { find, propEq } from 'ramda';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { useApolloClient } from '@apollo/client/react';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport DrawerModal from '../ui/components/drawer-modal';\nimport { useDrawerModalContext } from '../ui/drawer-modal-context';\nimport { useConfig } from '../core/config/config-context';\nimport { useEntityQuery } from '../graphql-client/use-entity-query';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityListQueryName, scheduleEntityListRefetch } from '../graphql-client/refetch-entity-lists';\nimport { getEntityUpdateMutation, getLocalAttributeIdsFromUpdateResponse } from '../graphql-client/queries';\nimport type { FormEntityItem } from '../graphql-client/types';\nimport { ReadOnlyMode } from '../core/error/read-only-mode';\nimport FormBuilder from '../form/form-builder';\nimport type { SubmitHandle } from '../form/form-builder';\nimport { getDisplayAttribute } from '../core/get-display-attribute';\nimport type { Entity } from '../core/types';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/primitives/select';\nimport { useDispatch } from './actions-context';\nimport SaveButton from './save-button';\nimport Loading from './loading';\nimport { useAuth } from '../auth/auth-context';\nimport { type Action, type ActionEditEntity } from './types';\n\ntype Props = {\n action: ActionEditEntity;\n depth: number;\n isFocused: boolean;\n};\n\nexport default function EditEntity({ action, depth, isFocused }: Props): JSX.Element {\n const { entityId, entityNamePlural } = action.payload;\n const ref = useRef<SubmitHandle>(null);\n const { currentProject, currentProjectId } = useConfig();\n const schema = useMemo(() => currentProject?.schema ?? [], [currentProject]);\n const scopes = currentProject?.scopes;\n const defaultScope = scopes?.find((s) => s.isDefault)?.name ?? 'default';\n const entitySchema = find(propEq(entityNamePlural, 'plural'))(schema) as Entity | undefined;\n const entityName = entitySchema?.name ?? entityNamePlural;\n const { scope } = useAppContext();\n const [currentScope, setCurrentScope] = useState(scope);\n const dispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const apolloClient = useApolloClient();\n const [runMutation, setMutation, setOptions, mutationData] = useEntityMutation();\n const { isDirty, setIsDirty } = useDrawerModalContext();\n const [forceClose, setForceClose] = useState(false);\n const [, auth] = useAuth();\n\n const setFormIsDirty = useCallback(\n (nextIsDirty: boolean) => {\n setIsDirty(nextIsDirty);\n },\n [setIsDirty]\n );\n\n useEffect(() => {\n if (mutationData.error) {\n ref.current?.hasErrors();\n }\n }, [mutationData.error]);\n\n // Use the same dirty flag as the Save button. hasDataChanged() can stay true\n // after a successful save (stale formData baseline / relationship field noise).\n const handleBeforeClose = useCallback(() => {\n if (!isDirty) {\n return true;\n }\n\n dispatch({\n type: 'AlertDialog',\n _id: 'unsavedChanges',\n payload: {\n options: {\n dialogTitle: 'Unsaved Changes',\n dialogMessage:\n 'Are you sure you want to leave? There are unsaved changes. If you leave, your changes will be lost.',\n dialogCancelTitle: 'Stay Here',\n dialogActionLabel: 'Discard Changes',\n dialogActionCancel: () => {\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n },\n dialogActionSubmit: () => {\n setIsDirty(false);\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n setForceClose(true);\n },\n },\n },\n });\n\n return false;\n }, [dispatch, isDirty, setIsDirty]);\n\n const handleClose = useCallback(\n (_id: Action['_id']) => {\n dispatch({ type: 'Dismiss', _id, payload: {} });\n },\n [dispatch]\n );\n\n const handleSave = useCallback(() => {\n ref.current?.submit();\n }, [ref]);\n\n function handleScopeChange(nextScope: string): void {\n if (isDirty) {\n dispatch({\n type: 'AlertDialog',\n _id: 'unsavedChanges',\n payload: {\n options: {\n dialogTitle: 'Unsaved Changes',\n dialogMessage: 'You have unsaved changes. Switching scopes will discard them.',\n dialogCancelTitle: 'Stay Here',\n dialogActionLabel: 'Discard Changes',\n dialogActionCancel: () => {\n setCurrentScope(currentScope);\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n },\n dialogActionSubmit: () => {\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n setCurrentScope(nextScope);\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope: nextScope } });\n },\n },\n },\n });\n\n return;\n }\n\n setCurrentScope(nextScope);\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope: nextScope } });\n }\n\n const { isLoading, data: results } = useEntityQuery({\n entityNamePlural,\n schema,\n scope: currentScope,\n variables: { where: { _id: { eq: entityId } } },\n isForm: true,\n includeCount: false,\n });\n\n const saveEntity = useCallback(\n (newData: FormEntityItem, previousData?: FormEntityItem) => {\n if (!previousData) {\n return;\n }\n\n const mutation = getEntityUpdateMutation(\n entityNamePlural,\n entityId,\n currentScope,\n schema,\n previousData,\n newData,\n {\n currentUser: auth.user,\n }\n );\n\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n variables: { where: { _id: { eq: entityId } } },\n onCompleted: (response: unknown) => {\n // Adopt _ids for any local nodes created on this save. A full form\n // refetch rewrites `values:` and re-dirties the drawer.\n ref.current?.applyLocalAttributeIds(\n getLocalAttributeIdsFromUpdateResponse(response, entityNamePlural, schema)\n );\n void scheduleEntityListRefetch(apolloClient, getEntityListQueryName(entityNamePlural, schema));\n toast.success('Your changes have been saved.');\n },\n });\n runMutation(true);\n },\n [apolloClient, auth.user, currentScope, entityId, entityNamePlural, runMutation, schema, setMutation, setOptions]\n );\n const data = results as FormEntityItem[];\n const hasData = data.length > 0;\n const isInitialLoading = isLoading && !hasData;\n\n function getEntityIdentifier(entitySchema: Entity, data: FormEntityItem[]): string {\n const displayAttribute = getDisplayAttribute(entitySchema);\n const displayAttributeName = displayAttribute?.name;\n const isRelationship = displayAttribute?.relationship?.field !== undefined;\n\n if (!data.length || !displayAttributeName) {\n return '';\n }\n\n if (!isRelationship || !displayAttribute?.relationship?.field) {\n return data[0][displayAttributeName]?.value as string;\n }\n\n const relatedValue = (data[0][displayAttributeName]?.value as Record<string, unknown> | undefined)?.[\n displayAttribute.relationship.field\n ];\n // The related entity's display field may be a local attribute, which is a\n // list relationship field holding 0..1 scoped nodes\n const relatedNode = Array.isArray(relatedValue) ? (relatedValue[0] as unknown) : relatedValue;\n\n if (relatedNode && typeof relatedNode === 'object') {\n const scopedNode = relatedNode as Record<string, unknown>;\n\n return (scopedNode[currentScope] ?? scopedNode.default ?? '') as string;\n }\n\n return (relatedNode ?? '') as string;\n }\n\n const entityIdentifier = hasData && entitySchema ? getEntityIdentifier(entitySchema, data) : '';\n\n return (\n <DrawerModal\n actions={\n <>\n {scopes && scopes.length > 1 ? (\n <Select\n onValueChange={(value) => {\n handleScopeChange(value);\n }}\n value={currentScope}\n >\n <SelectTrigger className=\"fk:w-[12rem] fk:h-9\" id=\"project\">\n <span className=\"fk:text-muted-foreground\">Scope:&nbsp;</span>\n <SelectValue>\n {(find(propEq(currentScope, 'name'))(scopes) as { name: string; label: string }).label}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {scopes.map((scopeItem) => (\n <SelectItem key={scopeItem.name} value={scopeItem.name}>\n {scopeItem.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n <SaveButton handleSave={handleSave} isLoading={mutationData.loading} />\n </>\n }\n beforeClose={handleBeforeClose}\n depth={depth}\n forceClose={forceClose}\n isFocused={isFocused}\n onClose={() => {\n handleClose(action._id);\n }}\n onFormChange={() => {}}\n title={entityIdentifier as string}\n >\n {isInitialLoading || !hasData ? (\n <Loading />\n ) : (\n <>\n {mutationData.isProjectReadOnly ? <ReadOnlyMode /> : null}\n <FormBuilder\n currentScope={currentScope}\n defaultScope={defaultScope}\n entityId={entityId}\n entityName={entityName}\n entityNamePlural={entityNamePlural}\n formData={data[0]}\n onSubmit={saveEntity}\n ref={ref}\n schema={schema}\n setIsDirty={setFormIsDirty}\n />\n </>\n )}\n </DrawerModal>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { JSX } from 'react';\nimport { find, propEq } from 'ramda';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { LoaderCircle, Search as SearchIcon, Upload as UploadIcon } from 'lucide-react';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport DrawerModal from '../ui/components/drawer-modal';\nimport { useConfig } from '../core/config/config-context';\nimport { useEntityQuery } from '../graphql-client/use-entity-query';\nimport type { AttributeValue, MappedEntityItem, EntityItem, ImageValue } from '../graphql-client/types';\nimport { useGridColumnsDefinition } from '../data-grid/columns';\nimport { DataTable } from '../data-grid/data-table';\nimport { Button } from '../ui/primitives/button';\nimport { Input } from '../ui/primitives/input';\nimport { Skeleton } from '../ui/primitives/skeleton';\nimport type {\n Entity,\n SingleRelationshipConnection,\n MultipleRelationshipConnection,\n SearchRequestProps,\n} from '../core/types';\nimport { useDispatch } from './actions-context';\nimport { type Action, type ActionEditRelationship } from './types';\nimport { useSearch } from '../core/use-search';\nimport { useUploadAssets } from '../core/upload';\n\ntype Props = {\n action: ActionEditRelationship;\n depth: number;\n isFocused: boolean;\n};\n\nconst PAGE_SIZE = 25;\n\ntype SelectedRelationshipRow = {\n id: string;\n value: SingleRelationshipConnection['value'];\n};\n\nfunction getLoadingColumns(columns: object[]): ColumnDef<AttributeValue>[] {\n return columns.map((column) => ({\n ...column,\n cell: () => <Skeleton className=\"fk:h-4 fk:w-full\" style={{ marginTop: '7px', marginBottom: '6px' }} />,\n })) as unknown as ColumnDef<AttributeValue>[];\n}\n\nexport default function EditRelationship({ action, depth, isFocused }: Props): JSX.Element {\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const { relationships, scope } = useAppContext();\n const {\n assetAccept,\n connectedEntitiesCount,\n connectionName,\n entityId,\n entityName,\n initialAssetPath,\n initialConnection,\n mode,\n relationshipId,\n } = action.payload;\n const { currentProject, currentProjectId } = useConfig();\n const schema = currentProject?.schema ?? [];\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const entityNamePlural = entitySchema?.plural ?? '';\n const relationshipContext = relationships[relationshipId];\n const uploadAssets = useUploadAssets();\n const isAssetPicker = entityName === '_asset';\n const entityLabel = isAssetPicker ? 'asset' : (entitySchema?.menu?.label ?? entityName.toLowerCase());\n const selectTitle =\n isAssetPicker && mode === 'single' ? 'Select asset' : `Select ${isAssetPicker ? 'assets' : entityLabel}`;\n const uploadButtonLabel = mode === 'single' ? 'Upload asset' : 'Upload assets';\n const [searchResultIds, setSearchResultIds] = useState<{ _id: string }[]>([]);\n\n let initialSingleSelectionState: SelectedRelationshipRow[] = [];\n\n if (initialConnection) {\n initialSingleSelectionState = [\n {\n id: initialConnection._id,\n value: initialConnection.value,\n },\n ];\n } else if (relationshipContext?.connect) {\n const connection = relationshipContext.connect as SingleRelationshipConnection;\n\n initialSingleSelectionState = [\n {\n id: connection._id,\n value: connection.value,\n },\n ];\n }\n\n const initialSelectionState =\n mode === 'single'\n ? initialSingleSelectionState\n : (relationshipContext?.connect as MultipleRelationshipConnection | undefined)?.map((item) => ({\n id: item._id,\n value: item.value,\n })) || [];\n\n const [selectedRows, setSelectedRows] = useState(initialSelectionState);\n const conditionalWhereClause = useMemo(() => {\n const clauses: Array<{ [key: string]: unknown }> = [];\n\n if (isAssetPicker) {\n clauses.push({ NOT: { path: { eq: null } } });\n }\n\n // Exclude already-connected items only when editing an existing parent.\n // On create, entityId is undefined — applying `none: { _id: { eq: undefined } }`\n // makes Neo4j return no rows.\n if (mode === 'multiple' && connectionName && entityId) {\n clauses.push({\n [connectionName]: {\n none: {\n _id: { eq: entityId },\n },\n },\n });\n }\n\n // Empty OR matches nothing; only constrain when the user has searched.\n if (searchResultIds.length > 0) {\n clauses.push({\n OR: searchResultIds.map((result) => ({ _id: { eq: result._id } })),\n });\n }\n\n if (clauses.length === 0) {\n return {};\n }\n\n if (clauses.length === 1) {\n return clauses[0];\n }\n\n return { AND: clauses };\n }, [connectionName, entityId, isAssetPicker, mode, searchResultIds]);\n\n const { count, data, fetchMore, isLoading, isLoadingMore } = useEntityQuery({\n entityNamePlural,\n schema,\n scope,\n variables: {\n offset: 0,\n limit: PAGE_SIZE,\n where: conditionalWhereClause,\n sort: [{ _updatedAt: 'DESC' }, { _id: 'DESC' }],\n },\n // The picker grid only renders display attributes; the deep `full`\n // selection generated multi-second Cypher on relationship-heavy schemas.\n selection: 'list',\n });\n const hasData = Boolean(data?.length);\n const isInitialLoading = isLoading && !hasData;\n const rowsCount = data?.length ?? 0;\n const totalCount = count - connectedEntitiesCount;\n const hasMore = totalCount > 0 && rowsCount > 0 && rowsCount < totalCount;\n\n const columns = useGridColumnsDefinition({\n attributesSchema: entitySchema?.attributes ?? [],\n checkboxSelect: mode,\n });\n const loadingData = Array(5).fill({});\n const loadingColumns = getLoadingColumns(columns);\n\n useEffect(() => {\n if (mode !== 'single' || selectedRows.length > 0 || !initialAssetPath || !data?.length) {\n return;\n }\n\n const matchedAsset = data.find((row) => row.path === initialAssetPath);\n\n if (!matchedAsset?._id || typeof matchedAsset._id !== 'string') {\n return;\n }\n\n setSelectedRows([\n {\n id: matchedAsset._id,\n value: matchedAsset as SingleRelationshipConnection['value'],\n },\n ]);\n }, [data, initialAssetPath, mode, selectedRows.length]);\n\n const handleClose = useCallback(\n (_id: Action['_id']) => {\n actionDispatch({ type: 'Dismiss', _id, payload: {} });\n },\n [actionDispatch]\n );\n\n const handleLoadMore = useCallback(() => {\n fetchMore({\n variables: {\n // Offset is tracked inside useEntityQuery from page windows; value here is ignored.\n offset: 0,\n limit: PAGE_SIZE,\n where: conditionalWhereClause,\n },\n });\n }, [conditionalWhereClause, fetchMore]);\n\n function handleSelection(): void {\n let connect;\n\n if (mode === 'single') {\n const [selected] = selectedRows;\n\n connect = {\n _id: selected?.id ?? '',\n value: selected?.value ?? null,\n } as SingleRelationshipConnection;\n }\n\n if (mode === 'multiple') {\n connect = selectedRows?.map((selected, index) => ({\n _id: selected.id ?? '',\n ...(isAssetPicker ? { sortOrder: index } : {}),\n value: selected.value,\n })) as MultipleRelationshipConnection;\n }\n\n appDispatch({\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect,\n disconnect: relationshipContext?.disconnect ?? [],\n },\n },\n });\n handleClose(action._id);\n }\n\n function handleSelectionChange(selectedIds: string[]): void {\n if (mode === 'multiple') {\n // Keep existing selections that are still selected (in selectedIds)\n // and add new selections\n setSelectedRows((prevSelected) => {\n // Create a map of existing selections for quick lookup\n const existingSelections = new Map(prevSelected.map((item) => [item.id, item]));\n\n // Process each selectedId\n return selectedIds.map((id) => {\n // If we already have this item selected, keep the existing data\n if (existingSelections.has(id)) {\n return existingSelections.get(id)!;\n }\n\n // Otherwise find it in the current data and add it\n const valueFromData = data?.find((row) => row._id === id);\n return {\n id,\n value: valueFromData as unknown as\n | string\n | AttributeValue\n | MappedEntityItem\n | EntityItem\n | ImageValue\n | null\n | undefined,\n };\n });\n });\n\n return;\n }\n\n // if single, get only the last selected row\n const selected = selectedIds[selectedIds.length - 1];\n if (selected) {\n setSelectedRows((prevSelected) => {\n // If we already have this item selected, keep the existing data\n if (prevSelected.length === 1 && prevSelected[0].id === selected) {\n return prevSelected;\n }\n\n // Otherwise find it in the current data\n const valueFromData = data?.find((row) => row._id === selected);\n return [\n {\n id: selected,\n value: valueFromData as unknown as\n | string\n | AttributeValue\n | MappedEntityItem\n | EntityItem\n | ImageValue\n | null\n | undefined,\n },\n ];\n });\n } else {\n // No selection\n setSelectedRows([]);\n }\n }\n\n function handleCreateEntity(): void {\n actionDispatch({ type: 'AddEntity', payload: { entityName } });\n }\n\n async function handleUploadAssets(): Promise<void> {\n const uploadedAssets = await uploadAssets({\n projectId: currentProjectId,\n accept: assetAccept ?? 'image/*',\n multiple: mode === 'multiple',\n maxBytes: 4 * 1024 * 1024,\n });\n\n setSelectedRows((currentRows) => {\n if (mode === 'single') {\n const [uploadedAsset] = uploadedAssets;\n\n return uploadedAsset ? [{ id: uploadedAsset._id, value: uploadedAsset.asset }] : currentRows;\n }\n\n const selectedIds = new Set(currentRows.map((row) => row.id));\n const nextRows = uploadedAssets\n .filter((uploaded) => !selectedIds.has(uploaded._id))\n .map((uploaded) => ({\n id: uploaded._id,\n value: uploaded.asset,\n }));\n\n return [...currentRows, ...nextRows];\n });\n }\n\n return (\n <DrawerModal\n actions={\n <>\n <Button\n className=\"fk:px-8\"\n onClick={() => {\n handleSelection();\n }}\n variant=\"default\"\n >\n Select\n </Button>\n {!isAssetPicker ? (\n <Button\n className=\"fk:px-8\"\n onClick={() => {\n handleCreateEntity();\n }}\n variant=\"outline\"\n >\n {`Create ${entityLabel}`}\n </Button>\n ) : null}\n {isAssetPicker ? (\n <Button\n className=\"fk:px-8\"\n onClick={() => {\n void handleUploadAssets();\n }}\n variant=\"outline\"\n >\n <UploadIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n {uploadButtonLabel}\n </Button>\n ) : null}\n </>\n }\n depth={depth}\n isFocused={isFocused}\n onClose={() => {\n handleClose(action._id);\n }}\n title={selectTitle}\n >\n <div className=\"fk:h-[calc(100vh-10rem)] fk:min-h-0\">\n <DataTable\n columns={isInitialLoading ? loadingColumns : columns}\n data={isInitialLoading ? loadingData : (data ?? [])}\n entityName={entitySchema?.name ?? ''}\n hasMore={hasMore}\n initialSelectionState={\n selectedRows?.reduce(\n (acc, selected) => ({ ...acc, ...(selected.id ? { [selected.id]: true } : {}) }),\n {}\n ) as {\n [_id: string]: boolean;\n }\n }\n isLoadingMore={isLoadingMore}\n onEntitySelectionChange={handleSelectionChange}\n onLoadMore={handleLoadMore}\n toolbarComponent={() => (\n <SearchBar\n entityNamePlural={entityNamePlural}\n projectId={currentProjectId ?? ''}\n setSearchResultIds={setSearchResultIds}\n />\n )}\n />\n </div>\n </DrawerModal>\n );\n}\n\nfunction SearchBar({\n entityNamePlural,\n projectId,\n setSearchResultIds,\n}: {\n entityNamePlural: string;\n projectId: string;\n setSearchResultIds: (ids: { _id: string }[]) => void;\n}): JSX.Element {\n const [search, setSearch] = useState('');\n\n const searchRequest = useMemo<SearchRequestProps>(\n () => ({\n searchRequests: {\n searches: [\n {\n collection: entityNamePlural,\n },\n ],\n },\n commonParams: {\n q: '',\n },\n }),\n [entityNamePlural]\n );\n const [searchQuery, setSearchQuery] = useState(searchRequest);\n const { results, isLoading } = useSearch(projectId, searchQuery);\n const prevResultsRef = useRef<{ _id: string }[] | null>(null);\n\n const debouncedSetSearchQuery = useMemo(\n () =>\n debounce((query: string) => {\n setSearchQuery({\n ...searchRequest,\n commonParams: { q: query },\n });\n }, 300),\n [searchRequest]\n );\n\n useEffect(() => {\n if (results) {\n const currentResultsString = JSON.stringify(results.map((r) => r._id).sort());\n const prevResultsString = prevResultsRef.current\n ? JSON.stringify(prevResultsRef.current.map((r) => r._id).sort())\n : '';\n\n if (currentResultsString !== prevResultsString) {\n prevResultsRef.current = [...results];\n setSearchResultIds(results.map((result) => ({ _id: result._id })));\n }\n }\n }, [results, setSearchResultIds]);\n\n function handleSearchChange(e: React.ChangeEvent<HTMLInputElement>): void {\n const { value } = e.target;\n\n setSearch(value);\n debouncedSetSearchQuery(value);\n }\n\n return (\n <div className=\"fk:relative fk:w-full\">\n {isLoading ? (\n <LoaderCircle className=\"fk:absolute fk:left-4 fk:top-3 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin\" />\n ) : (\n <SearchIcon className=\"fk:absolute fk:left-4 fk:top-3 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50\" />\n )}\n <Input className=\"fk:w-full fk:pl-11!\" onChange={handleSearchChange} placeholder=\"Search\" value={search} />\n </div>\n );\n}\n\nfunction debounce<T extends unknown[]>(fn: (...args: T) => void, ms = 300): (...args: T) => void {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n return (...args: T) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), ms);\n };\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport AlertDialog from '../ui/components/alert-dialog';\nimport { useActions } from './actions-context';\nimport Delete from './delete';\nimport AddEntity from './add-entity';\nimport EditEntity from './edit-entity';\nimport EditRelationship from './edit-relationship';\n\nexport function ActionsManager(): JSX.Element | null {\n const actions = useActions();\n const editActions = actions.filter((item) =>\n ['AddEntity', 'EditEntity', 'EditRelationship'].some((actionType) => actionType === item.type)\n );\n const latestModalId = editActions[editActions.length - 1]?._id;\n\n return (\n <>\n {actions.map((action) => {\n switch (action.type) {\n case 'AlertDialog': {\n const { payload } = action;\n\n return <AlertDialog key={action._id} options={payload.options} />;\n }\n case 'DeleteEntity': {\n return <Delete action={action} key={action._id} />;\n }\n case 'AddEntity': {\n return (\n <AddEntity\n action={action}\n depth={editActions.length - 1}\n isFocused={action._id === latestModalId}\n key={action._id}\n />\n );\n }\n case 'EditEntity': {\n return (\n <EditEntity\n action={action}\n depth={editActions.length - 1}\n isFocused={action._id === latestModalId}\n key={action._id}\n />\n );\n }\n case 'EditRelationship': {\n return (\n <EditRelationship\n action={action}\n depth={editActions.length - 1}\n isFocused={action._id === latestModalId}\n key={action._id}\n />\n );\n }\n default: {\n return null;\n }\n }\n })}\n </>\n );\n}\n","import type { JSX } from 'react';\nimport { useHref } from 'react-router-dom';\nimport { FolderOpen } from 'lucide-react';\nimport { signOutHosted } from '../../auth/hosted-logout';\nimport { flexkitDomain } from '../../core/domains';\nimport type { HostedUser } from '../../core/config/types';\nimport { Button } from '../primitives/button';\n\n/** Hosted mode: the signed-in user is not a member of any project yet. */\nexport function NoProjects({ user }: { user: HostedUser }): JSX.Element {\n const rootHref = useHref('/');\n\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-screen fk:items-center fk:justify-center fk:p-8 fk:bg-background\">\n <div className=\"fk:flex fk:max-w-md fk:flex-col fk:items-center fk:gap-4 fk:text-center\">\n <FolderOpen className=\"fk:h-10 fk:w-10 fk:text-muted-foreground\" />\n <h1 className=\"fk:text-xl fk:font-medium\">No projects yet</h1>\n <p className=\"fk:text-sm fk:text-muted-foreground\">\n {user.email} is not a member of any Flexkit project. Create one in the Dashboard, or ask a project owner to\n invite you, then come back here.\n </p>\n <div className=\"fk:flex fk:gap-3\">\n <Button asChild>\n <a href={`https://${flexkitDomain}/dashboard`}>Open Dashboard</a>\n </Button>\n <Button\n onClick={() => {\n void signOutHosted(rootHref);\n }}\n variant=\"outline\"\n >\n Sign out\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import type { JSX } from 'react';\nimport { Navigate, Outlet, useLocation } from 'react-router-dom';\nimport { AlertCircle } from 'lucide-react';\nimport { AuthProvider } from '../../auth/auth-context';\nimport { Login } from '../../auth/login';\nimport { ConfigProvider } from '../../core/config/config-context';\nimport { pickStartProjectId, readLastProjectId } from '../../core/config/last-project';\nimport type { ProjectSummary, StudioMode } from '../../core/config/types';\nimport { useHostedSession } from '../../core/config/use-hosted-session';\nimport { GraphQLProvider } from '../../graphql-client/graphql-context';\nimport { ActionsManager } from '../../entities/actions-manager';\nimport { Loading } from '../components/loading';\nimport { NoProjects } from '../components/no-projects';\nimport { Alert, AlertDescription, AlertTitle } from '../primitives/alert';\nimport { Button } from '../primitives/button';\nimport { DrawerModalProvider } from '../drawer-modal-context';\n\nconst NavigateCompat = Navigate as unknown as React.ComponentType<{ replace?: boolean; to: string }>;\n\nfunction Providers({\n mode,\n projectIds,\n projectSummaries,\n userId,\n}: {\n mode: StudioMode;\n projectIds: string[];\n projectSummaries?: ProjectSummary[];\n userId?: string;\n}): JSX.Element {\n return (\n <AuthProvider mode={mode}>\n <ConfigProvider mode={mode} projectIds={projectIds} projectSummaries={projectSummaries} userId={userId}>\n <GraphQLProvider>\n <DrawerModalProvider>\n <ActionsManager />\n </DrawerModalProvider>\n <Outlet />\n </GraphQLProvider>\n </ConfigProvider>\n </AuthProvider>\n );\n}\n\n/** Project mode: the host listed the projects; `/` opens the first one. */\nfunction ProjectsRoot({ projectIds }: { projectIds: string[] }): JSX.Element {\n const location = useLocation();\n const [defaultProjectId] = projectIds;\n\n if (location.pathname === '/' && defaultProjectId) {\n return <NavigateCompat replace to={`/${defaultProjectId}`} />;\n }\n\n return <Providers mode=\"projects\" projectIds={projectIds} />;\n}\n\nfunction SessionUnavailable({ message }: { message: string }): JSX.Element {\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-screen fk:items-center fk:justify-center fk:p-8 fk:bg-background\">\n <Alert className=\"fk:max-w-lg\" variant=\"destructive\">\n <AlertCircle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>Could not load your projects</AlertTitle>\n <AlertDescription className=\"fk:flex fk:flex-col fk:gap-3\">\n <span>{message}</span>\n <Button\n className=\"fk:self-start\"\n onClick={() => {\n window.location.reload();\n }}\n size=\"sm\"\n variant=\"outline\"\n >\n Try again\n </Button>\n </AlertDescription>\n </Alert>\n </div>\n );\n}\n\n/**\n * Hosted mode: sign in once, then open any project the account can access.\n * `/` goes to the project used last on this browser, or the first one.\n */\nfunction HostedRoot(): JSX.Element {\n const session = useHostedSession();\n const location = useLocation();\n\n if (session.status === 'loading') {\n return <Loading />;\n }\n\n if (session.status === 'anonymous') {\n return <Login />;\n }\n\n if (session.status === 'error') {\n return <SessionUnavailable message={session.message} />;\n }\n\n const projectIds = session.projects.map((project) => project.id);\n\n if (projectIds.length === 0) {\n return <NoProjects user={session.user} />;\n }\n\n if (location.pathname === '/') {\n const startProjectId = pickStartProjectId(projectIds, readLastProjectId());\n\n return <NavigateCompat replace to={`/${startProjectId ?? ''}`} />;\n }\n\n return <Providers mode=\"hosted\" projectIds={projectIds} projectSummaries={session.projects} userId={session.user.id} />;\n}\n\nexport function Root({ projectIds }: { projectIds?: string[] }): JSX.Element {\n if (projectIds === undefined) {\n return <HostedRoot />;\n }\n\n return <ProjectsRoot projectIds={projectIds} />;\n}\n","export function normalizeBasePath(basePath?: string): string {\n if (!basePath || basePath === '/') {\n return '/';\n }\n\n const normalizedPath = basePath.replace(/^\\/+|\\/+$/g, '');\n\n return `/${normalizedPath}`;\n}\n\nexport function joinBasePath(basePath: string, ...segments: string[]): string {\n const normalizedBasePath = normalizeBasePath(basePath);\n const normalizedSegments = segments.flatMap((segment) => segment.split('/')).filter(Boolean);\n\n if (normalizedSegments.length === 0) {\n return normalizedBasePath;\n }\n\n if (normalizedBasePath === '/') {\n return `/${normalizedSegments.join('/')}`;\n }\n\n return `${normalizedBasePath}/${normalizedSegments.join('/')}`;\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport { isRouteErrorResponse, useRouteError } from 'react-router-dom';\nimport { DarkModeSwitch } from '../../ui/components/dark-mode-switch';\nimport { isFlexkitError, getFlexkitErrorCode } from '../../core/error/errors';\n\nexport function GlobalError(): JSX.Element {\n const error = useRouteError();\n const copyrightYear = new Date().getFullYear();\n\n function errorMessage(): JSX.Element | null {\n if (isRouteErrorResponse(error)) {\n if (error.status === 404) {\n return (\n <>\n <h1 className=\"fk:mb-4 fk:text-7xl fk:text-center fk:font-bold fk:tracking-tight\">404</h1>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-base fk:text-center fk:text-muted-foreground\">Page not found</p>\n </>\n );\n }\n\n return (\n <>\n <h1 className=\"fk:mb-4 fk:text-4xl fk:text-center fk:font-bold fk:tracking-tight\">Oops!</h1>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-base fk:text-center fk:text-muted-foreground\">\n Sorry, an unexpected error has occurred:\n </p>\n <p className=\"fk:text-base fk:text-center\">\n <i>{error.statusText}</i>\n </p>\n </>\n );\n }\n\n if (isFlexkitError(error)) {\n switch (getFlexkitErrorCode(error)) {\n case 'PROJECT_NOT_FOUND':\n return (\n <>\n <h1 className=\"fk:mb-4 fk:text-4xl fk:text-center fk:font-bold fk:tracking-tight\">Project not found</h1>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-base fk:text-center fk:text-muted-foreground\">\n The requested project ID was not found\n </p>\n </>\n );\n case 'UNKNOWN_ERROR':\n default:\n return (\n <>\n <h1 className=\"fk:mb-4 fk:text-4xl fk:text-center fk:font-bold fk:tracking-tight\">Oops!</h1>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-base fk:text-center fk:text-muted-foreground\">\n Sorry, an unexpected error has occurred. Please try again.\n </p>\n </>\n );\n }\n }\n\n if (error instanceof Error) {\n return (\n <>\n <h1 className=\"fk:mb-4 fk:text-4xl fk:text-center fk:font-bold fk:tracking-tight\">Oops!</h1>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-base fk:text-center fk:text-muted-foreground\">\n Sorry, an unexpected error has occurred:\n </p>\n <p className=\"fk:text-base fk:text-center\">\n <i>{error.message}</i>\n </p>\n </>\n );\n }\n\n return null;\n }\n\n return (\n <>\n <div className=\"fk:container fk:relative fk:h-[calc(100vh-3rem)] fk:flex fk:items-center fk:justify-center fk:lg:px-0\">\n <div className=\"fk:w-full fk:lg:p-8\">\n <div className=\"fk:mx-auto fk:flex fk:w-full fk:flex-col fk:justify-center fk:sm:w-[350px]\">\n {errorMessage()}\n </div>\n </div>\n </div>\n <div className=\"fk:flex fk:justify-center fk:items-center fk:h-12 fk:text-xs fk:text-muted-foreground fk:border-t fk:border-accent\">\n <div className=\"fk:container fk:flex\">\n <div className=\"fk:flex fk:items-center fk:mr-auto\">\n <svg\n className=\"fk:h-5 fk:w-5 fk:mr-3 fk:text-black fk:dark:text-white\"\n fill=\"none\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7 8H41V40H7V8Z\" fill=\"none\" />\n <path\n d=\"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z\"\n fill=\"currentColor\"\n />\n </svg>\n <p className=\"fk:flex fk:items-center\">© {copyrightYear}</p>\n </div>\n <DarkModeSwitch />\n </div>\n </div>\n </>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport type { ComponentType, JSX } from 'react';\nimport { debug } from 'debug';\nimport { createBrowserRouter, RouterProvider } from 'react-router-dom';\nimport type { RouterProviderProps } from 'react-router-dom';\nimport { ThemeProvider } from '../ui/theme-context';\nimport { Layout } from '../ui/containers/layout';\nimport { Root } from '../ui/containers/root';\nimport { ActionsProvider } from '../entities/actions-context';\nimport { AppProvider } from './app-context';\nimport { normalizeBasePath } from './base-path';\nimport { GlobalError } from './error/global-error';\nimport type { FlexkitStudioProps } from './config/types';\n\nconst RouterProviderCompat = RouterProvider as unknown as ComponentType<RouterProviderProps>;\ntype BrowserRoutes = Parameters<typeof createBrowserRouter>[0];\n\n/**\n * AppContext:\n * - global loader state\n * - breadcrumbs\n * - page title\n * - scope\n * - relationships (used by the Edit Relationship drawer)\n *\n * ActionsContext:\n * - add, edit, delete entities\n * - show modal dialogs\n * - show notifications\n * - dismiss modals\n *\n * Query params: sort, filter, page, pageSize\n * Path params: id specific entity\n *\n * The Studio renders the schema deployed to each project (`flexkit deploy`).\n * The host either lists the projects (`projectIds`) or omits them, in which\n * case the Studio signs the user in and lists every project they can access.\n */\nexport function FlexkitStudio({ projectIds, basename }: FlexkitStudioProps): JSX.Element | null {\n const [mounted, setMounted] = useState(false);\n const log = debug('core:flexkit-studio');\n\n useEffect(() => {\n // ensure the DOM is available to prevent \"document is not defined\" error with react-router\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return null;\n }\n\n // `projectIds` omitted = hosted mode (the Studio lists the user's projects); an empty list is a host bug.\n if (projectIds !== undefined && projectIds.length === 0) {\n throw new Error(\n 'FlexkitStudio needs at least one project id: <FlexkitStudio projectIds={[\"...\"]} />. Omit the prop for hosted mode.'\n );\n }\n\n const routes = [\n {\n path: '/',\n element: <Root projectIds={projectIds} />,\n errorElement: <GlobalError />,\n children: [\n {\n // The apps are rendered by the Layout (see `AppOutlet`), which keeps\n // every opened app mounted; the splat hands it the rest of the path.\n path: ':projectId/*',\n element: <Layout version={{ current: '1.0.0', latest: '1.0.0', isCurrent: true }} />,\n },\n ],\n },\n ] as unknown as BrowserRoutes;\n const router = createBrowserRouter(routes, { basename: normalizeBasePath(basename) });\n\n log('Init Studio');\n\n return (\n <ThemeProvider attribute=\"class\" defaultTheme=\"system\" disableTransitionOnChange enableSystem>\n <AppProvider>\n <ActionsProvider>\n <RouterProviderCompat router={router} />\n </ActionsProvider>\n </AppProvider>\n </ThemeProvider>\n );\n}\n","import { useCallback } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport { useConfig } from '../core/config/config-context';\nimport { getEntityListQueryName, scheduleEntityListRefetch } from './refetch-entity-lists';\n\n/**\n * Soft-refetch active list queries for an entity without clearing the current rows first.\n * Prefer this after mutations; use `useEntityQuery().reload` when an explicit loading state is desired.\n */\nexport function useRefreshEntityList(entityNameOrPlural: string): () => Promise<void> {\n const apolloClient = useApolloClient();\n const { currentProjectSchema: schema } = useConfig();\n\n return useCallback(async () => {\n if (!schema) {\n return;\n }\n\n await scheduleEntityListRefetch(apolloClient, getEntityListQueryName(entityNameOrPlural, schema));\n }, [apolloClient, entityNameOrPlural, schema]);\n}\n"]}
1
+ {"version":3,"sources":["../src/ui/components/dark-mode-switch.tsx","../src/auth/email.tsx","../src/auth/login.tsx","../src/core/config/last-project.ts","../src/core/error/errors.ts","../src/apps/ai/activity-notifier.tsx","../src/core/apps/app-sessions.ts","../src/ui/containers/appbar.tsx","../src/core/error/error-boundary.tsx","../src/ui/containers/app-outlet.tsx","../src/ui/containers/navbar.tsx","../src/core/use-studio-version.ts","../src/ui/containers/layout.tsx","../src/core/desktop-effects.tsx","../src/core/config/use-hosted-session.ts","../src/ui/primitives/alert-dialog.tsx","../src/ui/components/alert-dialog.tsx","../src/entities/delete.tsx","../src/ui/drawer-modal-context.tsx","../src/form/fields/default-value-switch.tsx","../src/form/fields/text.tsx","../src/form/fields/switch.tsx","../src/ui/hooks/use-outer-click.ts","../src/form/fields/uploader.tsx","../src/form/fields/number.tsx","../src/ui/primitives/calendar.tsx","../src/form/fields/datetime.tsx","../src/form/fields/editor/novel-editor.ts","../src/form/fields/editor/slash-command.tsx","../src/form/fields/editor/selectors/color-selector.tsx","../src/form/fields/editor/selectors/link-selector.tsx","../src/form/fields/editor/selectors/node-selector.tsx","../src/form/fields/editor/selectors/math-selector.tsx","../src/form/fields/editor/selectors/text-buttons.tsx","../src/form/fields/editor/icons/magic.tsx","../src/form/fields/editor/icons/crazy-spinner.tsx","../src/form/fields/editor/generative/ai-completion-command.tsx","../src/form/fields/editor/generative/ai-selector-commands.tsx","../src/form/fields/editor/generative/ai-selector.tsx","../src/form/fields/editor/generative/generative-menu-switch.tsx","../src/form/fields/editor/index.tsx","../src/form/fields/textarea.tsx","../src/form/fields/relationship/asset-multiple.tsx","../src/form/fields/relationship/data-table-row-actions.tsx","../src/form/fields/relationship/multiple.tsx","../src/form/fields/relationship/single.tsx","../src/form/fields/relationship/index.tsx","../src/form/fields/select.tsx","../src/core/field-groups.ts","../src/form/field-groups.ts","../src/form/json-schema-to-zod.ts","../src/form/form-builder.tsx","../src/entities/add-entity.tsx","../src/core/error/read-only-mode.tsx","../src/entities/save-button.tsx","../src/entities/loading.tsx","../src/entities/edit-entity.tsx","../src/entities/edit-relationship.tsx","../src/entities/actions-manager.tsx","../src/ui/components/no-projects.tsx","../src/ui/containers/root.tsx","../src/core/base-path.ts","../src/core/error/global-error.tsx","../src/core/flexkit-studio.tsx","../src/graphql-client/use-refresh-entity-list.ts"],"names":["DarkModeSwitch","mounted","setMounted","useState","theme","setTheme","useTheme","useEffect","jsxs","ToggleGroup","jsx","ToggleGroupItem","Moon","Sun","Monitor","formSchema","EmailLogin","projectId","redirectTo","setIsEmailLogin","redirectToRef","useRef","finishLogin","hasOtpExpired","setHasOtpExpired","shouldSendOtp","setShouldSendOtp","mutate","useSWRConfig","form","useForm","zodResolver","sendOtpUrl","userApiPaths","apiPaths","baseApiUrl","confirmOtpUrl","data","error","isLoading","useSWR","url","res","errorCode","hasOtpBeenSent","token","calls","interval","setTokenUrl","confirmationResponse","handleEmailLogin","Alert","AlertDescription","Button","Form","event","FormField","field","FormItem","FormControl","Input","FormMessage","Loader2","Mail","Login","isHosted","projectIds","projects","useConfig","selectedProjectId","setSelectedProjectId","selectedProjectHref","useHref","isEmailLogin","providersUrl","isAuthLoading","auth","useAuth","copyrightYear","currentRouterLocation","useLocation","referal","referalHref","desktop","getDesktop","fromHref","fromPath","Loading","Navigate","Fragment","Label","Select","id","SelectTrigger","SelectValue","getProjectLabel","SelectContent","SelectItem","provider","composeLoginHref","callback","params","LAST_PROJECT_STORAGE_KEY","defaultStorage","readLastProjectId","storage","value","rememberLastProjectId","pickStartProjectId","lastProjectId","FLEXKIT_ERROR_CODES","FLEXKIT_ERROR_MESSAGES","FlexkitError","_FlexkitError","code","message","isFlexkitError","maybeCode","getFlexkitErrorCode","POLL_INTERVAL_MS","WATERMARK_STORAGE_KEY","readWatermark","writeWatermark","since","canNotify","NOTIFICATION_ICON_SIZE","notificationIcon","getNotificationIcon","canvas","context","LOGO_MARK_PATH","isAway","runAsLeader","lockName","task","controller","resolve","ActivityNotifier","navigate","useNavigate","navigateRef","mode","preferencesLoaded","preferences","useNotificationPreferences","mutedKindsRef","preferencesLoadedRef","pollNowRef","ensurePushSubscription","signal","poll","summary","fetcher","paths","plan","planActivityNotifications","icon","notification","shown","createAppSessions","decodeSegment","segment","getAppSegment","pathname","project","app","rememberAppLocation","sessions","appName","location","base","AppBar","currentApp","apps","version","appBarHeight","setAppBarHeight","visibleApps","setVisibleApps","additionalApps","setAdditionalApps","appBar","useParams","appSegment","activeApp","getAppPath","lastLocation","createPath","resizeObserver","availableAppSlots","_visibleApps","_activeApp","_additionalApps","TooltipProvider","Tooltip","TooltipTrigger","NavLink","TooltipContent","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","Settings","Link","Wrench","DropdownMenuSeparator","PackageCheck","PackageX","ErrorAlert","errorText","AlertCircle","AlertTitle","ErrorBoundaryImpl","Component","info","prevProps","RouteErrorBoundary","children","search","useAppSessions","setSessions","next","toRouteObject","route","AppRoutes","routes","useMemo","useRoutes","AppNotFound","AppOutlet","name","item","appLocation","isActive","AppActiveContext","Logo","lazy","ProjectSelector","Search","ActivityNavButton","UserNav","Navbar","projectSummaries","resolvedTheme","currentProject","currentSummary","schema","handleSearchSelection","startTransition","Suspense","WEB_VERSION","useStudioVersion","downloaded","setDownloaded","update","SchemaUnavailable","showHomeLink","isMissing","isForbidden","title","description","Layout","isLoadingSchemas","schemaErrors","scopes","appDispatch","useAppDispatch","isKnownProject","appSessions","defaultScope","s","savedScope","SCOPE_STORAGE_KEY","schemaError","Toaster","DesktopEffects","path","fetchMe","response","toHostedSession","outcome","useHostedSession","AlertDialog","props","AlertDialogPrimitive","AlertDialogPortal","AlertDialogOverlay","className","cn","AlertDialogContent","size","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","variant","AlertDialogCancel","options","isOpen","setIsOpen","isSubmitting","setIsSubmitting","isClosingFromSubmit","setIsClosingFromSubmit","handleClose","handleAction","maybePromise","buttonVariants","Delete","action","apolloClient","useApolloClient","runMutation","setMutation","setOptions","useEntityMutation","dispatch","useDispatch","hasFiredSilentDeletionRef","idsToDelete","entityName","isSilent","isBatch","handleDeletion","dialogOptions","mutation","getEntityDeleteMutation","reject","gql","getEntityDeleteWhere","cache","toast","scheduleEntityListRemoval","getEntityListQueryName","DrawerModalContext","createContext","_flag","DrawerModalProvider","dirty","setDirty","flag","useDrawerModalContext","useContext","DefaultValueSwitch","scope","checked","disabled","onChange","elementId","useId","Checkbox","Text","control","fieldSchema","readOnly","setValue","label","handleInput","previousValue","handleCheckbox","FormLabel","FormDescription","Switch","useOuterClick","ref","excludeSelectors","handleClickOutside","excludedElements","element","handleFocusOutside","Uploader","entityId","getValues","actionDispatch","relationships","useAppContext","inputFile","wrapperRef","selectedAssetIdRef","base64PreviewImage","setBase64PreviewImage","dragActive","setDragActive","saving","setSaving","relationshipId","connection","selectedAsset","normalizeSelectedAsset","currentValue","getExtensionFromMime","mime","map","parts","sub","getFileExtension","originalFilename","ext","fromMime","file","fileSizeLimit","bytes","isImage","reader","e","uploaded","uploadAssetFile","handleClearing","handleCopyUrl","fieldValue","IMAGES_BASE_URL","handleUpload","handleSelectAsset","currentAsset","selectedAssetId","getReusableAssetId","initialConnection","handleDownload","ImageIcon","UploadIcon","SearchIcon","style","defaultStyles","FileTypeIcon","FileOutlineIcon","EllipsisIcon","DropdownMenuGroup","DownloadIcon","CopyIcon","ClearFieldIcon","Maximize2","ClearIcon","Collapsible","CollapsibleContent","asset","Number","dataType","rawValue","parsedValue","Calendar","classNames","showOutsideDays","captionLayout","buttonVariant","formatters","components","defaultClassNames","getDefaultClassNames","DayPicker","date","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","day","modifiers","DateTime","handleSelect","Popover","PopoverTrigger","format","CalendarIcon","PopoverContent","timeValue","hours","minutes","asNovelEditorWithRichCommands","editor","suggestionItems","createSuggestionItems","range","CheckSquare","Heading1","Heading2","Heading3","List","richEditor","ListOrdered","TextQuote","Code","input","Youtube","videoLink","Twitter","tweetLink","slashCommand","Command","renderItems","TEXT_COLORS","HIGHLIGHT_COLORS","ColorSelector","open","onOpenChange","useEditor","activeColorItem","color","activeHighlightItem","ChevronDown","EditorBubbleItem","Check","isValidUrl","getUrlFromString","str","LinkSelector","inputRef","target","Trash","items","TextIcon","NodeSelector","activeItem","MathSelector","evt","from","to","latex","SigmaIcon","TextButtons","BoldIcon","ItalicIcon","UnderlineIcon","StrikethroughIcon","CodeIcon","Magic","CrazySpinner","crazy_spinner_default","AICompletionCommands","completion","onDiscard","CommandGroup","CommandItem","selection","CommandSeparator","TrashIcon","RefreshCcwDot","CheckCheck","ArrowDownWideNarrow","WrapText","AISelectorCommands","onSelect","option","slice","text","pos","getPrevText","StepForward","AISelector","inputValue","setInputValue","complete","useCompletion","init","hasCompletion","ScrollArea","Markdown","CommandInput","addAIHighlight","ArrowUp","CommandList","GenerativeMenuSwitch","removeAIHighlight","EditorBubble","extensions","defaultExtensions","isJSONContent","maybe","parseEditorValue","trimmed","parsed","Editor","defaultValue","openAI","setOpenAI","openNode","setOpenNode","openLink","setOpenLink","openColor","setOpenColor","debouncedUpdates","useDebouncedCallback","json","uploadFn","EditorRoot","EditorContent","_view","handleCommandNavigation","view","handleImagePaste","_slice","moved","handleImageDrop","ImageResizer","EditorCommand","EditorCommandEmpty","EditorCommandList","EditorCommandItem","val","Separator","Textarea","PAGE_SIZE","FULL_ASSET_CONNECTION_LIMIT","AssetMultipleRelationship","entityNamePlural","relationship","uploadAssets","useUploadAssets","fieldId","originalAssetIdsRef","pendingLocalRowsSignatureRef","removedAssetIdsRef","syncedRowsSignatureRef","knownAssetSortOrdersRef","initialRows","normalizeAssets","rows","setRows","loadedServerCount","setLoadedServerCount","getKnownAssetSortOrders","serverTotalCount","setServerTotalCount","assetConnectionQuery","getEntityAssetConnectionQuery","fetchAssetConnection","isLoadingMore","useLazyQuery","initialRowsSignature","getRowsSignature","nextKnownSortOrders","currentRows","currentRowsSignature","connections","selectedAssets","index","normalizeAsset","selectedRowsSignature","rowsSignature","pendingRowsSignature","connect","rowIds","disconnect","_id","totalCount","hasMore","handleLoadMore","useCallback","nextFirst","result","entityRows","fetchedAssets","getOrderedAssetsFromConnection","responseTotal","previousKnownCount","nextLoadedCount","currentIds","removedIds","toAppend","nextRows","handleSelection","uploadedAssets","nextAssets","withSortOrder","removeAsset","assetId","moveAsset","direction","currentIndex","nextIndex","sortedRows","previewTotal","collapsedPreview","AssetThumbnail","SelectedAssetCard","isImageAsset","isFirst","isLast","ArrowUpIcon","ArrowDownIcon","a","b","row","sortOrder","DataTableRowActions","handleDelete","Trash2","MultipleRelationship","relationshipEntityName","relationshipEntitySchema","find","propEq","relationshipEntityAttributesSchema","baseEntityName","connectionName","relationshipAttribute","attr","displayAttributeName","getDisplayAttribute","dataAdapter","entityQuery","getRelatedItemsQuery","previewItems","hasMorePreviewItems","getData","loading","columns","useGridColumnsDefinition","dataRowActions","selectedRows","uniqBy","prop","pendingConnections","pendingDisconnectIds","existingRelationshipIds","pendingDisconnectIdSet","pendingConnectCount","pendingDisconnectCount","displayCount","mappedData","mapQueryResult","Badge","DataTable","disconnectEntity","connectedEntities","rowToDeleteWasJustConnected","shouldUndoDisconnection","disconnection","uniq","rowItem","renderNode","node","relationshipFieldName","rawFieldValue","fieldNode","nodes","SingleRelationship","hasFocus","setHasFocus","relationshipEntity","connectValue","displayValue","rawPrimary","primaryValue","ChevronsUpDown","Relationship","formFieldParams","AlertTriangle","SELECT_OPTION_PREFIX","encodeOptionValue","decodeOptionValue","castedValue","SelectGroup","SelectLabel","ALL_FIELDS_GROUP_NAME","ALL_FIELDS_GROUP","getAttributeGroupNames","attribute","attributeBelongsToGroup","groupName","isAttributeVisibleInGroups","groups","group","resolveVisibleFieldGroups","authoredAllFields","namedGroups","getDefaultFieldGroupName","defaultGroup","firstNamedGroup","jsonSchemaToZod","convert","warned","warnOnce","keyword","HANDLED_KEYWORDS","FORMAT_MESSAGES","isObject","literal","z","candidate","unionOf","convertString","formatMessage","min","SAFE_BOUNDS","convertNumber","integer","minimum","maximum","between","convertArray","convertObject","properties","required","key","shape","property","converted","convertByType","type","alternatives","nullIndex","other","forbidden","toFieldValidator","ctx","isEmpty","warnedInputTypes","getInitialFieldValue","FormBuilder","currentScope","formData","setIsDirty","onSubmit","entitySchema","userSpaces","filterAttributesForSpaces","initialFormValues","values","validators","visibleGroupsForValidation","handleSubmit","watch","trigger","visibleGroups","activeGroup","setActiveGroup","baselineRef","hasMarkedSavedRef","formFieldComponentsMap","useImperativeHandle","hasDataChanged","ids","nextValues","attributeName","formChangesSubscription","renderField","knownComponent","createElement","Tabs","TabsList","TabsTrigger","Icon","ScrollBar","TabsContent","isVisible","fieldElement","form_builder_default","memo","forwardRef","changedData","originalFormData","normalizeComparisonValue","sortAlphabetically","originalData","acc","newData","equals","AddEntity","depth","isFocused","canMutate","useCanMutate","mutationData","isDirty","forceClose","setForceClose","handleBeforeClose","handleSave","saveEntity","uuidv4","getEntityCreateMutation","scheduleEntityListRefetch","DrawerModal","PermissionTooltip","ReadOnlyMode","SaveButton","_","i","Skeleton","EditEntity","currentProjectId","setCurrentScope","setFormIsDirty","nextIsDirty","handleScopeChange","nextScope","results","useEntityQuery","previousData","getEntityUpdateMutation","getLocalAttributeIdsFromUpdateResponse","hasData","isInitialLoading","getEntityIdentifier","displayAttribute","isRelationship","relatedValue","relatedNode","scopedNode","entityIdentifier","scopeItem","getLoadingColumns","column","EditRelationship","assetAccept","connectedEntitiesCount","initialAssetPath","relationshipContext","isAssetPicker","entityLabel","selectTitle","uploadButtonLabel","searchResultIds","setSearchResultIds","initialSingleSelectionState","initialSelectionState","setSelectedRows","conditionalWhereClause","clauses","count","fetchMore","rowsCount","loadingData","loadingColumns","matchedAsset","selected","handleSelectionChange","selectedIds","prevSelected","existingSelections","valueFromData","handleCreateEntity","handleUploadAssets","uploadedAsset","SearchBar","setSearch","searchRequest","searchQuery","setSearchQuery","useSearch","prevResultsRef","debouncedSetSearchQuery","debounce","query","currentResultsString","r","prevResultsString","handleSearchChange","LoaderCircle","fn","ms","timeoutId","args","ActionsManager","actions","useActions","editActions","actionType","latestModalId","payload","NoProjects","user","rootHref","FolderOpen","flexkitDomain","signOutHosted","NavigateCompat","Providers","userId","AuthProvider","ConfigProvider","GraphQLProvider","Outlet","ProjectsRoot","defaultProjectId","SessionUnavailable","HostedRoot","session","startProjectId","Root","normalizeBasePath","basePath","GlobalError","useRouteError","errorMessage","isRouteErrorResponse","RouterProviderCompat","RouterProvider","FlexkitStudio","basename","log","debug","router","createBrowserRouter","ThemeProvider","AppProvider","ActionsProvider","useRefreshEntityList","entityNameOrPlural"],"mappings":"grKAMO,SAASA,EAAAA,EAAqC,CACnD,GAAM,CAACC,EAASC,CAAU,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CACtC,CAAE,KAAA,CAAAC,CAAAA,CAAO,SAAAC,CAAS,CAAA,CAAIC,GAAAA,EAAS,CAMrC,OAJAC,SAAAA,CAAU,IAAM,CACdL,CAAAA,CAAW,IAAI,EACjB,CAAA,CAAG,EAAE,CAAA,CAEAD,CAAAA,CAKHO,IAAAA,CAACC,GAAAA,CAAA,CAAY,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAOL,CAAAA,CAC1C,QAAA,CAAA,CAAAM,GAAAA,CAACC,GAAAA,CAAA,CACC,YAAA,CAAW,eAAA,CACX,OAAA,CAAS,IAAM,CACbN,CAAAA,CAAS,MAAM,EACjB,EACA,KAAA,CAAM,MAAA,CAEN,QAAA,CAAAK,GAAAA,CAACE,KAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,CAAA,CAClC,EACAF,GAAAA,CAACC,GAAAA,CAAA,CACC,YAAA,CAAW,iBACX,OAAA,CAAS,IAAM,CACbN,CAAAA,CAAS,OAAO,EAClB,CAAA,CACA,KAAA,CAAM,OAAA,CAEN,SAAAK,GAAAA,CAACG,GAAAA,CAAA,CAAI,SAAA,CAAU,gBAAgB,CAAA,CACjC,CAAA,CACAH,GAAAA,CAACC,GAAAA,CAAA,CACC,YAAA,CAAW,iBAAA,CACX,OAAA,CAAS,IAAM,CACbN,CAAAA,CAAS,QAAQ,EACnB,EACA,KAAA,CAAM,QAAA,CAEN,QAAA,CAAAK,GAAAA,CAACI,QAAA,CAAQ,SAAA,CAAU,eAAA,CAAgB,CAAA,CACrC,CAAA,CAAA,CACF,CAAA,CAhCO,IAkCX,CClCA,IAAMC,EAAAA,CAAe,EAAA,CAAA,MAAA,CAAO,CAC1B,KAAA,CAAS,EAAA,CAAA,KAAA,CAAM,CAAE,KAAA,CAAO,oCAAqC,CAAC,CAChE,CAAC,CAAA,CAEc,SAARC,EAAAA,CAA4B,CACjC,SAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CACF,EAMgB,CACd,IAAMC,CAAAA,CAAgBC,MAAAA,CAAOH,CAAU,CAAA,CACvCE,CAAAA,CAAc,OAAA,CAAUF,CAAAA,CAGxB,SAASI,GAAAA,EAAoB,CACvBF,CAAAA,CAAc,OAAA,CAChB,MAAA,CAAO,QAAA,CAAS,MAAA,CAAOA,CAAAA,CAAc,OAAO,CAAA,CAE5C,MAAA,CAAO,QAAA,CAAS,MAAA,GAEpB,CAEA,GAAM,CAACG,CAAAA,CAAeC,CAAgB,CAAA,CAAIrB,QAAAA,CAAS,KAAK,CAAA,CAClD,CAACsB,CAAAA,CAAeC,CAAgB,CAAA,CAAIvB,SAAS,KAAK,CAAA,CAClD,CAAE,MAAA,CAAAwB,GAAO,CAAA,CAAIC,YAAAA,EAAa,CAC1BC,GAAAA,CAAOC,QAAQ,CACnB,QAAA,CAAUC,WAAAA,CAAYhB,EAAU,EAChC,aAAA,CAAe,CACb,KAAA,CAAO,EACT,CACF,CAAC,CAAA,CAEKiB,CAAAA,CAAaf,CAAAA,GAAc,OAAYgB,GAAAA,CAAa,OAAA,CAAU,IAAI,GAAA,CAAIC,IAASjB,CAAS,CAAA,CAAE,YAAA,CAAckB,GAAU,CAAA,CAAE,IAAA,CACpHC,CAAAA,CACJnB,CAAAA,GAAc,OAAYgB,GAAAA,CAAa,UAAA,CAAa,IAAI,GAAA,CAAIC,IAASjB,CAAS,CAAA,CAAE,eAAA,CAAiBkB,GAAU,EAAE,IAAA,CACzG,CAAE,IAAA,CAAAE,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAAC,CAAU,EAAIC,EAAAA,CACjCf,CAAAA,CAAgBO,CAAAA,CAAa,IAAA,CAC5BS,GACC,KAAA,CAAMA,CAAAA,CAAK,CACT,MAAA,CAAQ,OACR,IAAA,CAAM,MAAA,CACN,WAAA,CAAa,aAAA,CACb,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,EAC9C,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,MAAOZ,GAAAA,CAAK,SAAA,CAAU,OAAO,CAAE,CAAC,CACzD,CAAC,CAAA,CAAE,IAAA,CACAa,CAAAA,EAAQA,CAAAA,CAAI,IAAA,EACf,EACF,CACE,iBAAA,CAAmB,KAAA,CACnB,iBAAA,CAAmB,MACnB,qBAAA,CAAuB,KAAA,CACvB,kBAAA,CAAoB,KACtB,CACF,CAAA,CACMC,CAAAA,CAAYN,CAAAA,EAAQ,OAAA,GAAWA,CAAAA,EAAQA,CAAAA,CAAK,KAAA,CAAM,IAAA,CAClDO,EAAiBP,CAAAA,EAAQ,OAAA,GAAWA,CAAAA,CACpCQ,CAAAA,CAAQR,GAAQ,OAAA,GAAWA,CAAAA,CAAOA,CAAAA,CAAK,KAAA,CAAQ,GAErD9B,SAAAA,CAAU,IAAM,CACd,GAAI,CAACqC,CAAAA,CACH,OAGF,IAAIE,EAAQ,CAAA,CACNC,CAAAA,CAAW,WAAA,CAAY,IAAM,CAGjC,GAAID,CAAAA,CAAQ,GAAA,CAAK,CACf,cAAcC,CAAQ,CAAA,CACtBvB,CAAAA,CAAiB,IAAI,CAAA,CAErB,MACF,CAEA,IAAMwB,EAAc,wBAAA,CACpB,KAAA,CACE,CAAA,EAAGZ,CAAa,UAAU,kBAAA,CAAmBP,GAAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmBgB,CAAK,CAAC,CAAA,CAAA,CACxG,CAAE,WAAA,CAAa,aAAc,CAC/B,CAAA,CACG,IAAA,CAAMH,CAAAA,EAAQ,CACTA,EAAI,MAAA,GAAW,GAAA,EAEjBA,CAAAA,CACG,IAAA,GACA,IAAA,CAAMO,CAAAA,EAA0C,CAC/C,KAAA,CAAMD,CAAAA,CAAa,CACjB,MAAA,CAAQ,MAAA,CACR,QAAS,CACP,cAAA,CAAgB,kBAClB,CAAA,CACA,KAAM,IAAA,CAAK,SAAA,CAAU,CAAE,GAAA,CAAKC,EAAqB,GAAI,CAAC,CACxD,CAAC,CAAA,CACE,IAAA,CAAK,IAAM,CACV3B,MACF,CAAC,CAAA,CACA,KAAA,CAAM,IAAM,CAEb,CAAC,EACL,CAAC,EACA,KAAA,CAAM,IAAM,CAEb,CAAC,EAEP,CAAC,CAAA,CACA,KAAA,CAAM,IAAM,CAEb,CAAC,CAAA,CACHwB,CAAAA,GACF,EAAG,GAAI,CAAA,CAEP,OAAO,IAAM,CACX,aAAA,CAAcC,CAAQ,EACxB,CACF,EAAG,CAACX,CAAAA,CAAeP,GAAAA,CAAMe,CAAAA,CAAgBC,CAAK,CAAC,CAAA,CAE/C,SAASK,GAAAA,EAAyB,CAChC1B,CAAAA,CAAiB,KAAK,CAAA,CACtBE,CAAAA,CAAiB,IAAI,CAAA,CAChBC,GAAAA,CAAOK,CAAU,EACxB,CAEA,OACEtB,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACZ,QAAA,CAAAkC,CAAAA,CACClC,GAAAA,CAACyC,GAAA,CAAM,SAAA,CAAU,+CAAA,CAAgD,OAAA,CAAQ,UACvE,QAAA,CAAA3C,IAAAA,CAAC4C,EAAAA,CAAA,CAAiB,QAAA,CAAA,CAAA,uEAAA,CACsD,GAAA,CACtE1C,GAAAA,CAAC,QAAA,CAAA,CAAQ,SAAAmB,GAAAA,CAAK,SAAA,CAAU,OAAO,CAAA,CAAE,EAAS,IAAA,CAC1CnB,GAAAA,CAAC2C,GAAAA,CAAA,CACC,UAAU,wCAAA,CACV,OAAA,CAAS,IAAM,CACb,MAAA,CAAO,QAAA,CAAS,MAAA,GAClB,EACA,OAAA,CAAQ,MAAA,CACT,QAAA,CAAA,MAAA,CAED,CAAA,CAAS,KAEX,CAAA,CACF,CAAA,CAEA3C,GAAAA,CAAC4C,CAAAA,CAAA,CAAM,GAAGzB,GAAAA,CACR,QAAA,CAAArB,IAAAA,CAAC,QACC,QAAA,CAAW+C,CAAAA,EAAO,CAAQ1B,GAAAA,CAAK,aAAaqB,GAAgB,CAAA,CAAEK,CAAK,EAAA,CAAA,CACnE,UAAU,iCAAA,CAET,QAAA,CAAA,CAAAZ,CAAAA,GAAc,YAAA,EACbjC,IAACyC,EAAAA,CAAA,CAAM,OAAA,CAAQ,aAAA,CACb,QAAA,CAAA3C,IAAAA,CAAC4C,EAAAA,CAAA,CAAiB,4EACgD,GAAA,CAChE1C,GAAAA,CAAC,GAAA,CAAA,CACC,SAAA,CAAU,sDACV,IAAA,CAAM,CAAA,sCAAA,EAAyC,kBAAA,CAAmBmB,GAAAA,CAAK,UAAU,OAAO,CAAC,CAAC,CAAA,CAAA,CAC3F,QAAA,CAAA,UAAA,CAED,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAEDc,IAAc,eAAA,EAAmBL,CAAAA,CAChC5B,GAAAA,CAACyC,EAAAA,CAAA,CAAM,OAAA,CAAQ,aAAA,CACb,QAAA,CAAA3C,IAAAA,CAAC4C,GAAA,CAAiB,QAAA,CAAA,CAAA,oCAAA,CACmB,GAAA,CACnC1C,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,2BAAA,CACV,QAAS,IAAM,CACb,MAAA,CAAO,QAAA,CAAS,SAClB,CAAA,CACA,OAAA,CAAQ,MAAA,CACT,qBAED,CAAA,CAAS,GAAA,CACP,GAAA,CAAA,CACJ,CAAA,CACF,CAAA,CACE,IAAA,CACH9B,CAAAA,CACCb,GAAAA,CAACyC,GAAA,CAAM,OAAA,CAAQ,aAAA,CACb,QAAA,CAAA3C,KAAC4C,EAAAA,CAAA,CAAiB,QAAA,CAAA,CAAA,sDAAA,CACqC,GAAA,CACrD1C,IAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,2BAAA,CACV,OAAA,CAAS,IAAM,CACb,MAAA,CAAO,SAAS,MAAA,GAClB,CAAA,CACA,OAAA,CAAQ,OACT,QAAA,CAAA,WAAA,CAED,CAAA,CAAS,GAAA,CAAA,CAEX,CAAA,CACF,EACE,IAAA,CACJ3C,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS3B,GAAAA,CAAK,OAAA,CACd,YAAA,CAAa,GACb,IAAA,CAAK,OAAA,CACL,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAA4B,CAAM,CAAA,GACfjD,IAAAA,CAACkD,EAAA,CACC,QAAA,CAAA,CAAAhD,GAAAA,CAACiD,CAAAA,CAAA,CACC,QAAA,CAAAjD,GAAAA,CAACkD,CAAAA,CAAA,CACC,YAAA,CAAW,eAAA,CACX,cAAA,CAAe,KAAA,CACf,aAAa,KAAA,CACb,WAAA,CAAY,KAAA,CACZ,SAAA,CAAU,SACV,WAAA,CAAY,eAAA,CACZ,UAAA,CAAY,KAAA,CACZ,KAAK,OAAA,CACJ,GAAGH,CAAAA,CACN,CAAA,CACF,EACA/C,GAAAA,CAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,EAEJ,CAAA,CACArD,IAAAA,CAAC6C,GAAAA,CAAA,CAAO,gBAAed,CAAAA,CAAW,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,QAAA,CAAS,QAAA,CAAU,CAAA,CAAQA,CAAAA,CACrF,UAAAA,CAAAA,CACC7B,GAAAA,CAACoD,OAAAA,CAAA,CAAQ,UAAU,uCAAA,CAAwC,CAAA,CAE3DpD,GAAAA,CAACqD,IAAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,CAAA,CACxC,qBAAA,CAAA,CAEJ,CAAA,CACArD,GAAAA,CAAC2C,GAAAA,CAAA,CACC,UAAU,wBAAA,CACV,OAAA,CAAS,IAAM,CACblC,EAAgB,KAAK,EACvB,CAAA,CACA,OAAA,CAAQ,OACT,QAAA,CAAA,4BAAA,CAED,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAEJ,CAEJ,CC9NO,SAAS6C,EAAAA,CAAM,CAAE,SAAA,CAAA/C,GAAU,CAAA,CAAwC,CACxE,IAAMgD,CAAAA,CAAWhD,MAAc,MAAA,CAEzB,CAAE,UAAA,CAAAiD,CAAAA,CAAY,SAAAC,CAAS,CAAA,CAAIC,GAAAA,EAAU,CACrC,CAACC,CAAAA,CAAmBC,CAAoB,CAAA,CAAInE,QAAAA,CAChDc,MAAc,MAAA,CAAY,EAAA,CAAKiD,CAAAA,CAAW,QAAA,CAASjD,GAAS,CAAA,CAAIA,GAAAA,CAAaiD,CAAAA,CAAW,CAAC,CAAA,EAAKjD,GAChG,CAAA,CACMsD,GAAAA,CAAsBC,QAAQ,CAAA,CAAA,EAAIH,CAAiB,CAAA,CAAE,CAAA,CACrD,CAACI,GAAAA,CAActD,CAAe,CAAA,CAAIhB,QAAAA,CAAS,KAAK,CAAA,CAEhDuE,CAAAA,CAAeT,CAAAA,CAAWhC,IAAa,aAAA,CAAgBC,GAAAA,CAASmC,CAAiB,CAAA,CAAE,cACnF,CAAE,IAAA,CAAAhC,CAAAA,CAAM,KAAA,CAAAC,EAAO,SAAA,CAAAC,GAAU,CAAA,CAAIC,EAAAA,CAAOkC,CAAAA,CAAejC,CAAAA,EACvD,KAAA,CAAMA,CAAAA,CAAK,CAAE,IAAA,CAAM,MAAA,CAAQ,WAAA,CAAa,aAAc,CAAC,CAAA,CAAE,IAAA,CACtDC,CAAAA,EAAQA,CAAAA,CAAI,MACf,CACF,CAAA,CACM,CAACiC,EAAeC,CAAI,CAAA,CAAIC,CAAAA,EAAQ,CAChCC,EAAgB,IAAI,IAAA,EAAK,CAAE,WAAA,GAC3BC,CAAAA,CAAwBC,WAAAA,EAAY,CAEpCC,CAAAA,CAAkBF,EAAsB,KAAA,EAAO,IAAA,EAAM,QAAA,EAAYA,CAAAA,CAAsB,QAAA,CACvFG,CAAAA,CAAcV,OAAAA,CAAQS,CAAO,EAE7BE,CAAAA,CAAUC,GAAAA,EAAW,CAGrBC,CAAAA,CAAWpB,GAAYgB,CAAAA,CAAQ,QAAA,CAASZ,CAAiB,CAAA,CAAIa,EAAcX,GAAAA,CAE3Ee,CAAAA,CAAWH,CAAAA,CAAUE,CAAAA,CAAW,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,EAAGA,CAAQ,CAAA,CAAA,CAEnE,GAAI/C,CAAAA,CACF,MAAM,IAAI,KAAA,CAAM,+BAA+B,CAAA,CAIjD,OAAIC,KAAc,CAAC0B,CAAAA,EAAYU,CAAAA,EAAkB,CAACtC,CAAAA,CACzC3B,GAAAA,CAAC6E,GAAAA,CAAA,EAAQ,EAGd,CAACtB,CAAAA,EAAYW,CAAAA,CAAK,IAAA,EAAM,GACnBlE,GAAAA,CAAC8E,QAAAA,CAAA,CAAS,OAAA,CAAO,KAAC,KAAA,CAAO,CAAE,IAAA,CAAMT,CAAsB,CAAA,CAAG,EAAA,CAAG,GAAA,CAAI,CAAA,CAIxEvE,KAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAjF,IAAAA,CAAC,OAAI,SAAA,CAAU,uGAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,OAAI,SAAA,CAAU,qBAAA,CACb,QAAA,CAAAF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kEAAA,CACb,QAAA,CAAA,CAAAE,IAAC,IAAA,CAAA,CAAG,SAAA,CAAU,qEAAA,CAAsE,QAAA,CAAA,yBAAA,CAEpF,EACC,CAACuD,CAAAA,EAAYC,CAAAA,CAAW,MAAA,CAAS,EAChC1D,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAACgF,GAAAA,CAAA,CAAM,UAAU,iEAAA,CAAkE,OAAA,CAAQ,SAAA,CAAU,QAAA,CAAA,gBAAA,CAErG,EACAlF,IAAAA,CAACmF,CAAAA,CAAA,CACC,YAAA,CAActB,EACd,aAAA,CAAgBuB,CAAAA,EAAO,CACrBtB,CAAAA,CAAqBsB,CAAE,EACzB,CAAA,CAEA,QAAA,CAAA,CAAAlF,IAACmF,CAAAA,CAAA,CAAc,SAAA,CAAU,kCAAA,CAAmC,GAAG,SAAA,CAC7D,QAAA,CAAAnF,GAAAA,CAACoF,CAAAA,CAAA,CAAY,YAAA,CAAYC,GAAAA,CAAgB1B,CAAAA,CAAmBF,CAAQ,EACjE,QAAA,CAAA4B,GAAAA,CAAgB1B,CAAAA,CAAmBF,CAAQ,EAC9C,CAAA,CACF,CAAA,CACAzD,GAAAA,CAACsF,CAAAA,CAAA,CACE,QAAA,CAAA9B,CAAAA,CAAW,GAAA,CAAK0B,CAAAA,EACflF,IAACuF,GAAAA,CAAA,CAAoB,KAAA,CAAOL,CAAAA,CACzB,QAAA,CAAAG,GAAAA,CAAgBH,CAAAA,CAAIzB,CAAQ,GADdyB,CAEjB,CACD,CAAA,CACH,CAAA,CAAA,CACF,GACF,CAAA,CACE,IAAA,CACHnB,GAAAA,CACC/D,GAAAA,CAACM,GAAA,CAEC,SAAA,CAAWiD,CAAAA,CAAW,MAAA,CAAYI,CAAAA,CAClC,UAAA,CAAYiB,CAAAA,CACZ,eAAA,CAAiBnE,GAHZkD,CAIP,CAAA,CAEA7D,IAAAA,CAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/E,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,mEAAmE,QAAA,CAAA,uBAAA,CAEhF,CAAA,CACAF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACZ,QAAA,CAAA,CAAA6B,CAAAA,CAAK,UAAU,GAAA,CAAK6D,CAAAA,EACnBxF,GAAAA,CAAC2C,GAAAA,CAAA,CACC,OAAA,CAAO,IAAA,CACP,SAAA,CAAW,CAAA,GAAA,EAAM6C,EAAS,MAAA,CAAO,KAAK,CAAA,IAAA,EAAOA,CAAAA,CAAS,OAAO,eAAe,CAAA,UAAA,EAAaA,CAAAA,CAAS,MAAA,CAAO,UAAU,CAAA,UAAA,EAAaA,CAAAA,CAAS,MAAA,CAAO,oBAAoB,GAEpK,IAAA,CAAK,QAAA,CACL,OAAA,CAASA,CAAAA,CAAS,OAAO,OAAA,CAEzB,QAAA,CAAA1F,IAAAA,CAAC,GAAA,CAAA,CACC,IAAA,CAAM2F,EAAAA,CAAiB,CACrB,GAAA,CAAKD,EAAS,GAAA,CACd,SAAA,CAAWjC,CAAAA,CAAW,MAAA,CAAYI,EAClC,QAAA,CAAUc,CAAAA,CAAUA,CAAAA,CAAQ,aAAA,CAAgB,GAAG,QAAA,CAAS,MAAM,CAAA,sBAAA,CAAA,CAC9D,QAAA,CAAAG,CACF,CAAC,CAAA,CAEA,QAAA,CAAA,CAAAY,EAAS,MAAA,CAAO,OAAA,CACfxF,GAAAA,CAAC,KAAA,CAAA,CACC,IAAKwF,CAAAA,CAAS,KAAA,CACd,SAAA,CAAU,iCAAA,CACV,IAAKA,CAAAA,CAAS,MAAA,CAAO,OAAA,CACvB,CAAA,CACE,IAAA,CACHA,CAAAA,CAAS,KAAA,CAAA,CACZ,CAAA,CAAA,CApBKA,EAAS,IAqBhB,CACD,CAAA,CACDxF,GAAAA,CAAC2C,IAAA,CACC,SAAA,CAAU,iDAAA,CACV,OAAA,CAAS,IAAM,CACblC,CAAAA,CAAgB,IAAI,EACtB,EACA,OAAA,CAAQ,MAAA,CACT,QAAA,CAAA,4BAAA,CAED,CAAA,CACCgE,EACCzE,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,oDAAA,CAAqD,+EAElE,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CAAA,CACF,CAAA,CAEFF,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,KAAA,CAAM,6BAC9D,QAAA,CAAA,CAAAE,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,ggBACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,oDAAA,CAAqD,IAAA,CAAK,eAAe,CAAA,CACjFA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,qjDACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,QACC,CAAA,CAAE,mLAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,4JACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,QACC,CAAA,CAAE,8zBAAA,CACF,IAAA,CAAK,cAAA,CACP,EACAA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,8fAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,QACC,CAAA,CAAE,gYAAA,CACF,IAAA,CAAK,cAAA,CACP,GACF,CAAA,CACAF,IAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,kFACZ,QAAA,CAAA,CAAAE,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,8CAAA,CACZ,QAAA,CAAAA,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,6CAAA,CAA8C,IAAA,CAAK,wBAAA,CAAyB,QAAA,CAAA,YAAA,CAEzF,EACF,CAAA,CACAA,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,+CACZ,QAAA,CAAAA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,6CAAA,CAA8C,IAAA,CAAK,6BAAA,CAA8B,QAAA,CAAA,MAAA,CAE9F,EACF,CAAA,CACAA,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,GACZ,QAAA,CAAAA,GAAAA,CAAC,GAAA,CAAA,CACC,SAAA,CAAU,8CACV,IAAA,CAAK,uCAAA,CACN,QAAA,CAAA,gBAAA,CAED,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,EAEAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wEAAA,CAAyE,EACxFA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CAAoD,EACnEA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CAAuE,GACxF,CAAA,CACAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qHACb,QAAA,CAAAF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,wDAAA,CACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,KACP,OAAA,CAAQ,WAAA,CACR,KAAA,CAAM,IAAA,CACN,MAAM,4BAAA,CAEN,QAAA,CAAA,CAAAE,GAAAA,CAAC,MAAA,CAAA,CAAK,EAAE,iBAAA,CAAkB,IAAA,CAAK,MAAA,CAAO,CAAA,CACtCA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,sRAAA,CACF,KAAK,cAAA,CACP,CAAA,CAAA,CACF,CAAA,CACAF,IAAAA,CAAC,KAAE,SAAA,CAAU,yBAAA,CAA0B,QAAA,CAAA,CAAA,OAAA,CAAGsE,CAAAA,CAAAA,CAAc,GAC1D,CAAA,CACApE,GAAAA,CAACV,EAAAA,CAAA,EAAe,CAAA,CAAA,CAClB,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAWA,SAASmG,EAAAA,CAAiB,CAAE,SAAA,CAAAlF,EAAW,GAAA,CAAAwB,CAAAA,CAAK,QAAA,CAAA2D,CAAAA,CAAU,SAAAd,CAAS,CAAA,CAAyC,CACtG,IAAMe,EAAS,IAAI,eAAA,CACnB,OAAAA,CAAAA,CAAO,IAAI,QAAA,CAAUD,CAAQ,CAAA,CAEzBnF,CAAAA,EACFoF,EAAO,GAAA,CAAI,WAAA,CAAapF,CAAS,CAAA,CAGnCoF,EAAO,GAAA,CAAI,UAAA,CAAYf,CAAQ,CAAA,CAExB,CAAA,EAAG7C,CAAG,CAAA,CAAA,EAAI4D,CAAAA,CAAO,UAAU,CAAA,CACpC,CCpRO,IAAMC,GAA2B,8BAAA,CAIxC,SAASC,EAAAA,EAA0C,CACjD,GAAI,CACF,OAAO,OAAO,YAAA,CAAiB,GAAA,CAAc,KAAA,CAAA,CAAY,YAC3D,CAAA,KAAQ,CACN,MACF,CACF,CAGO,SAASC,GAAkBC,CAAAA,CAAmCF,EAAAA,EAAe,CAAkB,CACpG,GAAI,CACF,IAAMG,CAAAA,CAAQD,CAAAA,EAAS,OAAA,CAAQH,EAAwB,CAAA,CAEvD,OAAOI,GAASA,CAAAA,CAAM,IAAA,EAAK,CAAIA,CAAAA,CAAQ,IACzC,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CAEO,SAASC,EAAAA,CAAsB1F,CAAAA,CAAmBwF,EAAmCF,EAAAA,EAAe,CAAS,CAClH,GAAI,CACFE,CAAAA,EAAS,OAAA,CAAQH,EAAAA,CAA0BrF,CAAS,EACtD,CAAA,KAAQ,CAER,CACF,CAGO,SAAS2F,EAAAA,CAAmB1C,CAAAA,CAAsB2C,CAAAA,CAAkD,CACzG,OAAIA,CAAAA,EAAiB3C,CAAAA,CAAW,QAAA,CAAS2C,CAAa,CAAA,CAC7CA,CAAAA,CAGF3C,CAAAA,CAAW,CAAC,CACrB,CCtCO,IAAM4C,EAAAA,CAAsB,CAAC,iBAAkB,mBAAA,CAAqB,gBAAA,CAAkB,eAAe,CAAA,CAI/FC,EAAAA,CAA2D,CACtE,cAAA,CAAgB,+BAAA,CAChB,kBAAmB,wCAAA,CACnB,cAAA,CAAgB,yEAAA,CAChB,aAAA,CAAe,2DACjB,CAAA,CAEaC,EAAAA,CAAN,MAAMC,CAAAA,SAAqB,KAAM,CAC7B,IAAA,CAET,WAAA,CAAYC,CAAAA,CAAwBC,CAAAA,CAAkB,CACpD,KAAA,CAAMA,CAAAA,EAAWJ,GAAuBG,CAAI,CAAC,CAAA,CAC7C,IAAA,CAAK,KAAO,cAAA,CACZ,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAER,OAAO,cAAA,EACT,MAAA,CAAO,cAAA,CAAe,IAAA,CAAM,GAAA,CAAA,MAAA,CAAW,SAAS,EAEpD,CAEA,OAAO,IAAA,CAAKA,CAAAA,CAAwBC,CAAAA,CAAgC,CAClE,OAAO,IAAIF,CAAAA,CAAaC,CAAAA,CAAMC,CAAO,CACvC,CACF,CAAA,CAEO,SAASC,EAAAA,CAAe9E,CAAAA,CAAuC,CACpE,GAAI,EAAEA,aAAiB,KAAA,CAAA,CACrB,OAAO,MAAA,CAGT,IAAM+E,EAAa/E,CAAAA,CAA6B,IAAA,CAEhD,OAAI,OAAO+E,GAAc,QAAA,CAChB,KAAA,CAGDP,EAAAA,CAA0C,QAAA,CAASO,CAAS,CACtE,CAEO,SAASC,GAAoBhF,CAAAA,CAA8C,CAChF,GAAI8E,EAAAA,CAAe9E,CAAK,CAAA,CACtB,OAAOA,CAAAA,CAAM,IAIjB,CCtCA,IAAMiF,EAAAA,CAAmB,GAAA,CACnBC,EAAAA,CAAwB,8BAE9B,SAASC,EAAAA,CAAcxG,CAAAA,CAAkC,CACvD,GAAI,CACF,OAAO,YAAA,CAAa,OAAA,CAAQ,GAAGuG,EAAqB,CAAA,EAAGvG,CAAS,CAAA,CAAE,CACpE,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CAEA,SAASyG,EAAAA,CAAezG,CAAAA,CAAmB0G,CAAAA,CAAqB,CAC9D,GAAI,CACF,aAAa,OAAA,CAAQ,CAAA,EAAGH,EAAqB,CAAA,EAAGvG,CAAS,CAAA,CAAA,CAAI0G,CAAK,EACpE,CAAA,KAAQ,CAER,CACF,CAEA,SAASC,EAAAA,EAAqB,CAC5B,OAAO,OAAO,YAAA,CAAiB,KAAe,YAAA,CAAa,UAAA,GAAe,SAC5E,CAEA,IAAMC,EAAAA,CAAyB,GAAA,CAE3BC,EAAAA,CAAuD,IAAA,CAM3D,SAASC,EAAAA,EAAmD,CAC1D,OAAAD,EAAAA,GAAAA,CAAsB,SAAY,CAChC,GAAI,CACF,IAAME,CAAAA,CAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,EAE9CA,CAAAA,CAAO,KAAA,CAAQH,EAAAA,CACfG,CAAAA,CAAO,OAASH,EAAAA,CAEhB,IAAMI,CAAAA,CAAUD,CAAAA,CAAO,WAAW,IAAI,CAAA,CAEtC,OAAKC,CAAAA,EAILA,EAAQ,KAAA,CAAMJ,EAAAA,CAAyB,EAAA,CAAIA,EAAAA,CAAyB,EAAE,CAAA,CACtEI,CAAAA,CAAQ,SAAA,CAAY,OAAA,CACpBA,EAAQ,QAAA,CAAS,CAAA,CAAG,CAAA,CAAG,EAAA,CAAI,EAAE,CAAA,CAC7BA,CAAAA,CAAQ,SAAA,CAAY,UACpBA,CAAAA,CAAQ,IAAA,CAAK,IAAI,MAAA,CAAOC,GAAc,CAAC,CAAA,CAEhCF,CAAAA,CAAO,SAAA,CAAU,WAAW,CAAA,EATjC,KAAA,CAUJ,CAAA,KAAQ,CACN,MACF,CACF,CAAA,GAAG,CAEIF,EACT,CAOA,SAASK,EAAAA,EAAkB,CACzB,OAAO,QAAA,CAAS,eAAA,GAAoB,QAAA,EAAY,CAAC,SAAS,QAAA,EAC5D,CAOA,SAASC,EAAAA,CAAYC,CAAAA,CAAkBC,CAAAA,CAAkD,CACvF,IAAMC,CAAAA,CAAa,IAAI,eAAA,CAEvB,OAAI,OAAO,SAAA,CAAc,GAAA,EAAe,EAAE,OAAA,GAAW,YACnDD,CAAAA,CAAKC,CAAAA,CAAW,MAAM,CAAA,CAEf,IAAMA,CAAAA,CAAW,KAAA,EAAM,GAGhC,SAAA,CAAU,MACP,OAAA,CAAQF,CAAAA,CAAU,CAAE,MAAA,CAAQE,EAAW,MAAO,CAAA,CAAG,SAAY,CAIxDA,EAAW,MAAA,CAAO,OAAA,GAItBD,CAAAA,CAAKC,CAAAA,CAAW,MAAM,CAAA,CAGtB,MAAM,IAAI,QAAeC,CAAAA,EAAYD,CAAAA,CAAW,MAAA,CAAO,gBAAA,CAAiB,QAAS,IAAMC,CAAAA,EAAQ,CAAG,CAAE,KAAM,IAAK,CAAC,CAAC,CAAA,EACnH,CAAC,CAAA,CACA,KAAA,CAAM,IAAG,EAAY,CAAA,CAEjB,IAAMD,CAAAA,CAAW,KAAA,GAC1B,CAOO,SAASE,EAAAA,CAAiB,CAAE,UAAAxH,CAAU,CAAA,CAAgC,CAC3E,IAAMyH,CAAAA,CAAWC,WAAAA,EAAY,CACvBC,CAAAA,CAAcvH,OAAOqH,CAAQ,CAAA,CAC7B,CAAE,MAAA,CAAA/G,CAAO,CAAA,CAAIC,YAAAA,EAAa,CAC1B,CAAE,KAAAiH,CAAK,CAAA,CAAIzE,GAAAA,EAAU,CACrB,CAAE,QAAA,CAAU0E,CAAAA,CAAmB,WAAA,CAAAC,CAAY,CAAA,CAAIC,GAAAA,EAA2B,CAE1EC,CAAAA,CAAgB5H,OAAO0H,CAAAA,CAAY,iBAAiB,CAAA,CACpDG,CAAAA,CAAuB7H,OAAOyH,CAAiB,CAAA,CAE/CK,CAAAA,CAAa9H,MAAAA,CAA4B,IAAI,CAAA,CAEnD,OAAAuH,CAAAA,CAAY,QAAUF,CAAAA,CACtBO,CAAAA,CAAc,OAAA,CAAUF,CAAAA,CAAY,kBACpCG,CAAAA,CAAqB,OAAA,CAAUJ,CAAAA,CAI/BvI,SAAAA,CAAU,IAAM,CACVsI,CAAAA,GAAS,QAAA,EAIbO,GAAAA,EAAuB,CAAE,KAAA,CAAM,IAAG,CAAA,CAAY,EAChD,CAAA,CAAG,CAACP,CAAI,CAAC,EAETtI,SAAAA,CAAU,IAAM,CACd,GAAKU,EAIL,OAAOmH,EAAAA,CAAY,CAAA,0BAAA,EAA6BnH,CAAS,CAAA,CAAA,CAAKoI,CAAAA,EAAW,CACvE,IAAI1B,EAAQF,EAAAA,CAAcxG,CAAS,CAAA,CAEnC,eAAeqI,GAAsB,CAGnC,GAAI,CAACJ,CAAAA,CAAqB,QACxB,OAGF,IAAIK,CAAAA,CAEJ,GAAI,CACFA,CAAAA,CAAU,MAAMC,GAAAA,CAAyBC,GAAAA,CAAMxI,CAAS,CAAA,CAAE,eAAA,CAAgB0G,CAAK,CAAC,EAClF,CAAA,KAAQ,CACN,MACF,CAEA,GAAI0B,CAAAA,CAAO,OAAA,CACT,OAGF,IAAMK,CAAAA,CAAOC,GAAAA,CAA0B,CAAE,UAAA,CAAYV,EAAc,OAAA,CAAS,QAAA,CAAUM,CAAAA,CAAQ,QAAA,CAAU,MAAA5B,CAAM,CAAC,CAAA,CAM/G,GAJC,CAAE,KAAA,CAAAA,CAAM,CAAA,CAAI+B,CAAAA,CACbhC,EAAAA,CAAezG,CAAAA,CAAWyI,CAAAA,CAAK,KAAK,EAC/B/H,CAAAA,CAAO8H,GAAAA,CAAMxI,CAAS,CAAA,CAAE,iBAAgB,CAAGsI,CAAAA,CAAS,CAAE,UAAA,CAAY,KAAM,CAAC,CAAA,CAE1E,CAACpB,EAAAA,EAAO,EAAK,CAACP,EAAAA,EAAU,CAC1B,OAGF,IAAMgC,CAAAA,CAAOF,CAAAA,CAAK,aAAA,CAAc,OAAS,CAAA,CAAI,MAAM3B,EAAAA,EAAoB,CAAI,OAE3E,IAAA,IAAW8B,CAAAA,IAAgBH,CAAAA,CAAK,aAAA,CAAe,CAC7C,IAAMI,CAAAA,CAAQ,IAAI,YAAA,CAAaD,EAAa,KAAA,CAAO,CAAE,IAAA,CAAMA,CAAAA,CAAa,KAAM,IAAA,CAAAD,CAAAA,CAAM,GAAA,CAAKC,CAAAA,CAAa,GAAI,CAAC,CAAA,CAE3GC,CAAAA,CAAM,OAAA,CAAU,IAAM,CACpB,IAAM3E,CAAAA,CAAUC,KAAW,CAEvBD,CAAAA,CACFA,CAAAA,CAAQ,WAAA,GAER,MAAA,CAAO,KAAA,EAAM,CAGfyD,CAAAA,CAAY,QAAQ,CAAA,CAAA,EAAI3H,CAAS,CAAA,IAAA,EAAO4I,CAAAA,CAAa,IAAI,CAAA,CAAE,CAAA,CAC3DC,CAAAA,CAAM,QACR,EACF,CACF,CAEKR,GAAK,CAEV,IAAMvG,CAAAA,CAAW,WAAA,CAAY,IAAG,CAAQuG,CAAAA,GAAK,CAAA,CAAG/B,EAAgB,CAAA,CAEhE4B,CAAAA,CAAW,OAAA,CAAU,IAAG,CAAQG,CAAAA,GAAK,CAAA,CACrCD,CAAAA,CAAO,gBAAA,CAAiB,QAAS,IAAM,CACrC,aAAA,CAActG,CAAQ,EACtBoG,CAAAA,CAAW,OAAA,CAAU,KACvB,CAAC,EACH,CAAC,CACH,CAAA,CAAG,CAACxH,EAAQV,CAAS,CAAC,CAAA,CAItBV,SAAAA,CAAU,IAAM,CACVuI,CAAAA,EACFK,CAAAA,CAAW,OAAA,KAEf,CAAA,CAAG,CAACL,CAAiB,CAAC,CAAA,CAEf,IACT,CC7MO,SAASiB,EAAAA,CAAkB9I,CAAAA,CAAgC,CAChE,OAAO,CAAE,SAAA,CAAW,EAAC,CAAG,KAAA,CAAO,EAAC,CAAG,SAAA,CAAAA,CAAU,CAC/C,CAEA,SAAS+I,EAAAA,CAAcC,CAAAA,CAAyB,CAC9C,GAAI,CACF,OAAO,kBAAA,CAAmBA,CAAO,CACnC,CAAA,KAAQ,CACN,OAAOA,CACT,CACF,CAMO,SAASC,EAAAA,CAAcC,CAAAA,CAAkBlJ,EAAuC,CACrF,GAAM,CAACmJ,CAAAA,CAASC,CAAG,CAAA,CAAIF,CAAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAEzD,GAAI,EAAAC,CAAAA,GAAY,MAAA,EAAaJ,EAAAA,CAAcI,CAAO,CAAA,GAAMnJ,CAAAA,CAAAA,CAIxD,OAAOoJ,CAAAA,GAAQ,MAAA,CAAY,MAAA,CAAYL,EAAAA,CAAcK,CAAG,CAC1D,CAQO,SAASC,EAAAA,CACdC,CAAAA,CACAtJ,EACAuJ,CAAAA,CACAC,CAAAA,CACa,CACb,IAAMC,EAAOH,CAAAA,CAAS,SAAA,GAActJ,CAAAA,CAAYsJ,CAAAA,CAAWR,EAAAA,CAAkB9I,CAAS,CAAA,CAEtF,OAAIyJ,EAAK,SAAA,CAAUF,CAAO,CAAA,GAAMC,CAAAA,CACvBC,EAGF,CACL,SAAA,CAAW,CAAE,GAAGA,EAAK,SAAA,CAAW,CAACF,CAAO,EAAGC,CAAS,CAAA,CACpD,KAAA,CAAOC,CAAAA,CAAK,KAAA,CAAM,SAASF,CAAO,CAAA,CAAIE,CAAAA,CAAK,KAAA,CAAQ,CAAC,GAAGA,CAAAA,CAAK,KAAA,CAAOF,CAAO,EAC1E,SAAA,CAAAvJ,CACF,CACF,CCvCO,SAAS0J,GAAO,CAAE,SAAA,CAAWC,CAAAA,CAAY,IAAA,CAAAC,EAAM,QAAA,CAAAN,GAAAA,CAAU,OAAA,CAAAO,CAAQ,CAAA,CAAuB,CAC7F,GAAM,CAACC,EAAcC,CAAe,CAAA,CAAI7K,QAAAA,CAAS,CAAC,EAC5C,CAAC8K,CAAAA,CAAaC,CAAc,CAAA,CAAI/K,SAAuB0K,CAAI,CAAA,CAC3D,CAACM,CAAAA,CAAgBC,CAAiB,CAAA,CAAIjL,QAAAA,CAAuB,EAAE,CAAA,CAC/DkL,CAAAA,CAAShK,MAAAA,CAAuB,IAAI,EACpCoJ,CAAAA,CAAWzF,WAAAA,EAAY,CACvB,CAAE,UAAA/D,CAAAA,CAAY,EAAG,CAAA,CAAIqK,SAAAA,GACrBC,CAAAA,CAAarB,EAAAA,CAAcO,CAAAA,CAAS,QAAA,CAAUxJ,CAAS,CAAA,CACvDuK,CAAAA,CAAYZ,CAAAA,EAAcC,CAAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAGzC,SAASY,CAAAA,CAAWpB,EAAyB,CAC3C,IAAMqB,CAAAA,CAAenB,GAAAA,CAAS,SAAA,CAAUF,CAAAA,CAAI,IAAI,CAAA,CAEhD,OAAOqB,CAAAA,CAAeC,UAAAA,CAAWD,CAAY,CAAA,CAAI,IAAIzK,CAAS,CAAA,CAAA,EAAIoJ,CAAAA,CAAI,IAAI,EAC5E,CAqCA,OAnCA9J,SAAAA,CAAU,IAAM,CACd,GAAI8K,CAAAA,CAAO,OAAA,GAAY,KACrB,OAGF,IAAMO,CAAAA,CAAiB,IAAI,eAAe,IAAM,CAC9CZ,CAAAA,CAAgBK,CAAAA,CAAO,SAAS,YAAA,EAAgB,CAAC,EACnD,CAAC,CAAA,CAED,OAAAO,CAAAA,CAAe,OAAA,CAAQP,EAAO,OAAO,CAAA,CAE9B,UAAmB,CACxBO,EAAe,UAAA,GACjB,CACF,CAAA,CAAG,CAAChB,CAAU,CAAC,CAAA,CAEfrK,SAAAA,CAAU,IAAM,CACd,IAAMsL,CAAAA,CAAoB,IAAA,CAAK,MAAMd,CAAAA,CAAe,EAAE,CAAA,CAAI,CAAA,CACpDe,EAAejB,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAGgB,CAAiB,EAEpD,GAAI,CAACC,CAAAA,CAAa,IAAA,CAAMzB,CAAAA,EAAQA,CAAAA,CAAI,IAAA,GAASmB,CAAS,EAAG,CAEvD,IAAMO,CAAAA,CAAalB,CAAAA,CAAK,KAAMR,CAAAA,EAAQA,CAAAA,CAAI,IAAA,GAASmB,CAAS,EAC5DM,CAAAA,CAAa,GAAA,EAAI,CACjBC,CAAAA,EAAaD,CAAAA,CAAa,IAAA,CAAKC,CAAU,EAC3C,CAEA,IAAMC,CAAAA,CAAkBnB,CAAAA,CAAK,MAAA,CAAQR,GAAQ,CAACyB,CAAAA,CAAa,QAAA,CAASzB,CAAG,CAAC,CAAA,CAExEa,CAAAA,CAAeY,CAAY,CAAA,CAC3BV,CAAAA,CAAkBY,CAAe,EACnC,CAAA,CAAG,CAACnB,CAAAA,CAAMW,CAAAA,CAAWT,CAAY,CAAC,EAI9BQ,CAAAA,GAAe,MAAA,EAAaC,CAAAA,CACvB9K,GAAAA,CAAC8E,SAAA,CAAS,OAAA,CAAO,IAAA,CAAC,EAAA,CAAI,CAAA,EAAGiF,CAAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,MAAO,EAAE,CAAC,CAAA,CAAA,EAAIe,CAAS,GAAI,CAAA,CAIrF9K,GAAAA,CAACuL,GAAAA,CAAA,CACC,SAAAzL,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CAAoD,GAAA,CAAK6K,CAAAA,CACtE,QAAA,CAAA,CAAA7K,IAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,OAAI,SAAA,CAAU,0CAAA,CACZ,QAAA,CAAAuK,CAAAA,CAAY,IAAKZ,CAAAA,EAChB3J,GAAAA,CAAC2C,GAAAA,CAAA,CAAO,OAAA,CAAO,IAAA,CAAC,SAAA,CAAU,iBAAA,CAAiC,QAAQ,OAAA,CACjE,QAAA,CAAA7C,IAAAA,CAAC0L,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAxL,GAAAA,CAACyL,GAAAA,CAAA,CACC,QAAO,IAAA,CACP,SAAA,CAAU,8SAAA,CAEV,QAAA,CAAAzL,GAAAA,CAAC0L,OAAAA,CAAA,CACC,SAAA,CAAU,+HACV,EAAA,CAAIX,CAAAA,CAAWpB,CAAG,CAAA,CAEjB,SAAAA,CAAAA,CAAI,IAAA,CACP,CAAA,CACF,CAAA,CACA3J,IAAC2L,GAAAA,CAAA,CAAe,IAAA,CAAK,OAAA,CACnB,SAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAG,QAAA,CAAA2J,CAAAA,CAAI,MAAM,CAAA,CAChB,CAAA,CAAA,CACF,CAAA,CAAA,CAhB+CA,CAAAA,CAAI,IAiBrD,CACD,CAAA,CACH,CAAA,CAECc,CAAAA,CAAe,OAAS,CAAA,EACvB3K,IAAAA,CAAC8L,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA5L,GAAAA,CAACwL,GAAAA,CAAA,CACC,SAAAxL,GAAAA,CAAC6L,GAAAA,CAAA,CAAoB,OAAA,CAAO,KAC1B,QAAA,CAAA/L,IAAAA,CAAC2L,GAAAA,CAAA,CAAe,UAAU,8PAAA,CACxB,QAAA,CAAA,CAAAzL,GAAAA,CAAC8L,cAAAA,CAAA,CAAe,SAAA,CAAU,eAAA,CAAgB,WAAA,CAAa,IAAK,CAAA,CAC5D9L,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,aAAa,QAAA,CAAA,sBAAA,CAAoB,CAAA,CACjDA,GAAAA,CAAC2L,GAAAA,CAAA,CAAe,IAAA,CAAK,OAAA,CACnB,QAAA,CAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,iBAAA,CAAe,CAAA,CACpB,CAAA,CAAA,CACF,EACF,CAAA,CACF,CAAA,CACAA,GAAAA,CAAC+L,GAAAA,CAAA,CAAoB,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,KAAK,OAAA,CACzD,QAAA,CAAAtB,CAAAA,CAAe,GAAA,CAAKd,GACnB3J,GAAAA,CAACgM,GAAAA,CAAA,CAAiB,OAAA,CAAO,KACvB,QAAA,CAAAhM,GAAAA,CAAC0L,OAAAA,CAAA,CAAQ,GAAIX,CAAAA,CAAWpB,CAAG,CAAA,CAAI,QAAA,CAAAA,EAAI,KAAA,CAAM,CAAA,CAAA,CADZA,CAAAA,CAAI,IAEnC,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,EAEA7J,IAAAA,CAAC8L,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA5L,IAACwL,GAAAA,CAAA,CACC,QAAA,CAAAxL,GAAAA,CAAC6L,IAAA,CAAoB,OAAA,CAAO,IAAA,CAC1B,QAAA,CAAA/L,IAAAA,CAAC2L,GAAAA,CAAA,CAAe,SAAA,CAAU,kQACxB,QAAA,CAAA,CAAAzL,GAAAA,CAACiM,QAAAA,CAAA,CAAS,UAAU,eAAA,CAAgB,WAAA,CAAa,GAAA,CAAK,CAAA,CACtDjM,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAa,QAAA,CAAA,eAAA,CAAa,CAAA,CAC1CA,GAAAA,CAAC2L,GAAAA,CAAA,CAAe,KAAK,OAAA,CACnB,QAAA,CAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAE,yBAAa,CAAA,CAClB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,EACAF,IAAAA,CAACiM,GAAAA,CAAA,CAAoB,KAAA,CAAM,QAAQ,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,OAAA,CAqB1D,UAAA/L,GAAAA,CAACgM,GAAAA,CAAA,CAAiB,OAAA,CAAO,KACvB,QAAA,CAAAlM,IAAAA,CAACoM,MAAAA,CAAA,CAAK,GAAI,CAAA,+BAAA,EAAkC3L,CAAS,CAAA,CAAA,CAAI,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,qBAAA,CAC3E,QAAA,CAAA,CAAAP,IAACmM,MAAAA,CAAA,CAAO,SAAA,CAAU,uBAAA,CAAwB,EAC1CnM,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,gBAAA,CAAc,CAAA,CAAA,CACtB,EACF,CAAA,CACAA,GAAAA,CAACoM,CAAAA,CAAA,EAAsB,CAAA,CACvBpM,GAAAA,CAACgM,GAAAA,CAAA,CACC,SAAU5B,CAAAA,CAAQ,SAAA,CAClB,QAAA,CAAU,IAAM,CACdA,CAAAA,CAAQ,OAAA,KACV,CAAA,CAEC,SAAAA,CAAAA,CAAQ,SAAA,CACPtK,IAAAA,CAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/E,GAAAA,CAACqM,YAAAA,CAAA,CAAa,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAChDvM,IAAAA,CAAC,QAAK,QAAA,CAAA,CAAA,UAAA,CAASsK,CAAAA,CAAQ,OAAA,CAAA,CAAQ,CAAA,CAAA,CACjC,EAEAtK,IAAAA,CAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/E,GAAAA,CAACsM,QAAAA,CAAA,CAAS,SAAA,CAAU,wBAAwB,CAAA,CAC5CxM,IAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,CAAA,UAAA,CACKsK,EAAQ,OAAA,CAAQ,GAAA,CAACpK,GAAAA,CAAC,IAAA,CAAA,EAAG,EAAE,uBAAA,CACVoK,CAAAA,CAAQ,MAAA,CAAA,CAChC,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EACF,CAEJ,CClMA,SAASmC,GAAW,CAAE,KAAA,CAAA3K,CAAM,CAAA,CAAoC,CAC9D,IAAM4K,CAAAA,CACJ5K,CAAAA,YAAiB,KAAA,CAAQA,EAAM,OAAA,CAAU,mEAAA,CAE3C,OACE9B,IAAAA,CAAC2C,GAAA,CAAM,OAAA,CAAQ,aAAA,CACb,QAAA,CAAA,CAAAzC,IAACyM,WAAAA,CAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,EACvCzM,GAAAA,CAAC0M,EAAAA,CAAA,CAAW,QAAA,CAAA,OAAA,CAAK,EACjB1M,GAAAA,CAAC0C,EAAAA,CAAA,CAAkB,QAAA,CAAA8J,CAAAA,CAAU,CAAA,CAAA,CAC/B,CAEJ,CAUA,IAAMG,EAAAA,CAAN,cAAgCC,SAAwC,CACtE,MAAuB,CAAE,KAAA,CAAO,IAAA,CAAM,QAAA,CAAU,KAAM,CAAA,CAEtD,OAAO,wBAAA,CAAyBhL,CAAAA,CAA+B,CAC7D,OAAO,CAAE,KAAA,CAAAA,EAAO,QAAA,CAAU,IAAK,CACjC,CAEA,kBAAkBA,CAAAA,CAAgBiL,CAAAA,CAAuB,CACvD,OAAA,CAAQ,MAAM,0BAAA,CAA4BjL,CAAAA,CAAOiL,CAAAA,CAAK,cAAc,EACtE,CAEA,kBAAA,CAAmBC,CAAAA,CAAgC,CAC7C,IAAA,CAAK,KAAA,CAAM,QAAA,EAAYA,CAAAA,CAAU,WAAa,IAAA,CAAK,KAAA,CAAM,QAAA,EAC3D,IAAA,CAAK,SAAS,CAAE,KAAA,CAAO,IAAA,CAAM,QAAA,CAAU,KAAM,CAAC,EAElD,CAEA,MAAA,EAAoB,CAClB,OAAO,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW9M,IAACuM,EAAAA,CAAA,CAAW,KAAA,CAAO,IAAA,CAAK,MAAM,KAAA,CAAO,CAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QACpF,CACF,CAAA,CAQO,SAASQ,GAAmB,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAyC,CACrF,GAAM,CAAE,QAAA,CAAAvD,CAAAA,CAAU,OAAAwD,CAAO,CAAA,CAAI3I,WAAAA,EAAY,CAEzC,OAAOtE,GAAAA,CAAC2M,EAAAA,CAAA,CAAkB,SAAU,CAAA,EAAGlD,CAAQ,CAAA,EAAGwD,CAAM,GAAK,QAAA,CAAAD,CAAAA,CAAS,CACxE,CCnCO,SAASE,GAAe/C,CAAAA,CAAoB5J,CAAAA,CAAoC,CACrF,IAAMwJ,EAAWzF,WAAAA,EAAY,CACvB,CAACuF,CAAAA,CAAUsD,CAAW,CAAA,CAAI1N,QAAAA,CAAS,IAAM4J,EAAAA,CAAkB9I,CAAS,CAAC,CAAA,CACrEgJ,CAAAA,CAAUC,EAAAA,CAAcO,EAAS,QAAA,CAAUxJ,CAAS,CAAA,CACpDuK,CAAAA,CAAYvB,IAAY,MAAA,EAAaY,CAAAA,CAAK,IAAA,CAAMR,CAAAA,EAAQA,EAAI,IAAA,GAASJ,CAAO,CAAA,CAAIA,CAAAA,CAAU,MAAA,CAC1F6D,CAAAA,CAAOtC,CAAAA,CACTlB,EAAAA,CAAoBC,EAAUtJ,CAAAA,CAAWuK,CAAAA,CAAWf,CAAQ,CAAA,CAC5DF,EAAS,SAAA,GAActJ,CAAAA,CACrBsJ,CAAAA,CACAR,EAAAA,CAAkB9I,CAAS,CAAA,CAEjC,OAAI6M,CAAAA,GAASvD,CAAAA,EACXsD,CAAAA,CAAYC,CAAI,CAAA,CAGX,CAAE,UAAAtC,CAAAA,CAAW,QAAA,CAAUsC,CAAK,CACrC,CAEA,SAASC,EAAAA,CAAcC,CAAAA,CAA8B,CACnD,OAAO,CACL,QAAA,CAAUA,CAAAA,CAAM,QAAA,EAAU,GAAA,CAAID,EAAa,CAAA,CAC3C,OAAA,CAASrN,IAAC+M,EAAAA,CAAA,CAAoB,QAAA,CAAAO,CAAAA,CAAM,UAAU,CAAA,CAC9C,IAAA,CAAMA,CAAAA,CAAM,IACd,CACF,CASA,SAASC,EAAAA,CAAU,CAAE,GAAA,CAAA5D,CAAAA,CAAK,QAAA,CAAAI,CAAS,EAAgE,CACjG,IAAMyD,CAAAA,CAASC,OAAAA,CACb,IAAM,CACJ,CACE,QAAA,CAAU9D,CAAAA,CAAI,QAAQ,GAAA,CAAI0D,EAAa,CAAA,CACvC,OAAA,CAASrN,GAAAA,CAAC+M,EAAAA,CAAA,CAAoB,QAAA,CAAApD,EAAI,SAAA,CAAU,CAAA,CAC5C,IAAA,CAAMA,CAAAA,CAAI,IACZ,CACF,CAAA,CACA,CAACA,CAAG,CACN,CAAA,CAEA,OAAO+D,SAAAA,CAAUF,CAAAA,CAAQzD,CAAQ,CACnC,CAEA,SAAS4D,GAAY,CAAE,OAAA,CAAApE,CAAQ,CAAA,CAAqC,CAClE,OACEvJ,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qEACb,QAAA,CAAAF,IAAAA,CAAC2C,EAAAA,CAAA,CAAM,SAAA,CAAU,aAAA,CAAc,OAAA,CAAQ,aAAA,CACrC,UAAAzC,GAAAA,CAACyM,WAAAA,CAAA,CAAY,SAAA,CAAU,gBAAgB,CAAA,CACvCzM,GAAAA,CAAC0M,EAAAA,CAAA,CAAW,yBAAa,CAAA,CACzB5M,IAAAA,CAAC4C,EAAAA,CAAA,CAAiB,2CAAoC6G,CAAAA,CAAQ,IAAA,CAAA,CAAO,CAAA,CAAA,CACvE,CAAA,CACF,CAEJ,CAaO,SAASqE,EAAAA,CAAU,CAAE,UAAA9C,CAAAA,CAAW,IAAA,CAAAX,CAAAA,CAAM,QAAA,CAAAN,CAAS,CAAA,CAAuB,CAC3E,IAAME,CAAAA,CAAWzF,WAAAA,EAAY,CACvBiF,CAAAA,CAAUC,EAAAA,CAAcO,EAAS,QAAA,CAAUF,CAAAA,CAAS,SAAS,CAAA,CAEnE,OACE/J,IAAAA,CAAAiF,QAAAA,CAAA,CACG,QAAA,CAAA,CAAA8E,EAAS,KAAA,CAAM,GAAA,CAAKgE,CAAAA,EAAS,CAC5B,IAAMlE,CAAAA,CAAMQ,CAAAA,CAAK,IAAA,CAAM2D,GAASA,CAAAA,CAAK,IAAA,GAASD,CAAI,CAAA,CAC5CE,EAAclE,CAAAA,CAAS,SAAA,CAAUgE,CAAI,CAAA,CAE3C,GAAI,CAAClE,CAAAA,EAAO,CAACoE,CAAAA,CACX,OAAO,IAAA,CAGT,IAAMC,CAAAA,CAAWH,IAAS/C,CAAAA,CAE1B,OACE9K,GAAAA,CAAC,KAAA,CAAA,CACC,cAAagO,CAAAA,CAAW,MAAA,CAAY,IAAA,CACpC,iBAAA,CAAiBH,EAEjB,KAAA,CAAO,CAAE,OAAA,CAASG,CAAAA,CAAW,WAAa,MAAO,CAAA,CAEjD,QAAA,CAAAhO,GAAAA,CAACiO,IAAiB,QAAA,CAAjB,CAA0B,KAAA,CAAOD,CAAAA,CAChC,SAAAhO,GAAAA,CAACuN,EAAAA,CAAA,CAAU,GAAA,CAAK5D,EAAK,QAAA,CAAUoE,CAAAA,CAAa,CAAA,CAC9C,CAAA,CAAA,CALKF,CAMP,CAEJ,CAAC,CAAA,CACA/C,IAAc,MAAA,EAAavB,CAAAA,GAAY,MAAA,CAAYvJ,GAAAA,CAAC2N,GAAA,CAAY,OAAA,CAASpE,CAAAA,CAAS,CAAA,CAAK,MAC1F,CAEJ,CCxHA,IAAM2E,EAAAA,CAAOC,IAAAA,CAAK,IAAM,OAAO,oBAAuB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,IAAA,CAAMvB,CAAU,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAU,CAAA,CAAE,CAAC,EAC3GwB,EAAAA,CAAkBD,IAAAA,CAAK,IAC3B,OAAO,gCAAmC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,gBAAiBvB,CAAU,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAU,CAAA,CAAE,CACjH,CAAA,CACMyB,EAAAA,CAASF,KAAK,IAAM,OAAO,sBAAyB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,MAAA,CAAQvB,CAAU,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAU,EAAE,CAAC,CAAA,CACjH0B,EAAAA,CAAoBH,IAAAA,CAAK,IAC7B,OAAO,mCAAsC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,iBAAA,CAAmBvB,CAAU,KAAO,CAAE,OAAA,CAAWA,CAAU,CAAA,CAAE,CACtH,CAAA,CACM2B,EAAAA,CAAUJ,IAAAA,CAAK,IAAM,OAAO,wBAA2B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,OAAA,CAASvB,CAAU,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAU,CAAA,CAAE,CAAC,EAUpH,SAAS4B,EAAAA,CAAO,CAAE,SAAA,CAAAjO,EAAW,UAAA,CAAAiD,CAAAA,CAAY,gBAAA,CAAAiL,CAAAA,CAAmB,EAAC,CAAG,QAAA,CAAAhL,CAAS,EAAuB,CACrG,GAAM,CAAE,aAAA,CAAAiL,CAAc,CAAA,CAAI9O,GAAAA,EAAS,CAC7B+O,CAAAA,CAAiBlL,EAAS,IAAA,CAAMiG,CAAAA,EAAYA,CAAAA,CAAQ,SAAA,GAAcnJ,CAAS,CAAA,CAC3EqO,CAAAA,CAAiBH,CAAAA,CAAiB,KAAM/E,CAAAA,EAAYA,CAAAA,CAAQ,EAAA,GAAOnJ,CAAS,EAC5EsO,CAAAA,CAASF,CAAAA,EAAgB,MAAA,EAAU,GACnC3G,CAAAA,CAAWC,WAAAA,EAAY,CAE7B,SAAS6G,CAAAA,CAAsBhB,CAAAA,CAA0E,CACvGiB,eAAAA,CAAgB,IAAM,CACpB/G,CAAAA,CAAS,CAAA,CAAA,EAAIzH,CAAS,cAAcuN,CAAAA,CAAK,gBAAgB,CAAA,IAAA,EAAOA,CAAAA,CAAK,QAAQ,CAAA,CAAE,EACjF,CAAC,EACH,CAEA,OACEhO,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wGAAA,CAEZ,QAAA,CAAA,CAAA4E,GAAAA,EAAW,GAAM,QAChB1E,GAAAA,CAACgP,QAAAA,CAAA,CAAS,QAAA,CAAU,KAClB,QAAA,CAAAhP,GAAAA,CAACkO,EAAAA,CAAA,CAAK,MAAOQ,CAAAA,CAAe,KAAA,CAAOC,CAAAA,EAAgB,KAAA,EAASC,GAAgB,IAAA,EAAQ,gBAAA,CAAkB,CAAA,CACxG,CAAA,CAEF9O,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2DAAA,CACb,QAAA,CAAA,CAAAE,IAACgP,QAAAA,CAAA,CAAS,QAAA,CAAU,IAAA,CAClB,QAAA,CAAAhP,GAAAA,CAACoO,EAAAA,CAAA,CACC,UAAW7N,CAAAA,CACX,UAAA,CAAYiD,CAAAA,CACZ,gBAAA,CAAkBiL,EAClB,QAAA,CAAUhL,CAAAA,CACZ,CAAA,CACF,CAAA,CACAzD,IAACgP,QAAAA,CAAA,CAAS,QAAA,CAAU,IAAA,CAClB,QAAA,CAAAhP,GAAAA,CAACqO,EAAAA,CAAA,CAAuB,SAAUS,CAAAA,CAAuB,SAAA,CAAWvO,CAAAA,CAAW,MAAA,CAAQsO,GAA1EtO,CAAkF,CAAA,CACjG,CAAA,CAAA,CACF,CAAA,CACAT,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oCAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAACgP,QAAAA,CAAA,CAAS,QAAA,CAAU,KAClB,QAAA,CAAAhP,GAAAA,CAACsO,EAAAA,CAAA,CAAkB,UAAW/N,CAAAA,CAAW,CAAA,CAC3C,CAAA,CACAP,GAAAA,CAACgP,SAAA,CAAS,QAAA,CAAU,IAAA,CAClB,QAAA,CAAAhP,IAACuO,EAAAA,CAAA,CAAQ,SAAA,CAAWhO,CAAAA,CAAW,EACjC,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCxDA,IAAM0O,EAAAA,CAA6B,CAAE,OAAA,CAAS,OAAA,CAAS,MAAA,CAAQ,OAAA,CAAS,SAAA,CAAW,IAAK,CAAA,CAOjF,SAASC,EAAAA,EAAkC,CAChD,IAAMzK,CAAAA,CAAUC,GAAAA,EAAW,CACrB,CAACyK,EAAYC,CAAa,CAAA,CAAI3P,QAAAA,CAAwB,IAAI,CAAA,CAYhE,OAVAI,SAAAA,CAAU,IAAM,CACd,GAAK4E,CAAAA,CAIL,OAAOA,CAAAA,CAAQ,mBAAoB4K,CAAAA,EAAW,CAC5CD,CAAAA,CAAcC,CAAAA,CAAO,OAAO,EAC9B,CAAC,CACH,CAAA,CAAG,CAAC5K,CAAO,CAAC,CAAA,CAEPA,EAID0K,CAAAA,GAAe,IAAA,CACV,CAAE,OAAA,CAAS1K,EAAQ,OAAA,CAAS,MAAA,CAAQA,CAAAA,CAAQ,OAAA,CAAS,UAAW,IAAK,CAAA,CAGvE,CAAE,OAAA,CAASA,EAAQ,OAAA,CAAS,MAAA,CAAQ0K,CAAAA,CAAY,SAAA,CAAW,MAAO,OAAA,CAAS,IAAM1K,CAAAA,CAAQ,aAAA,EAAgB,CAAA,CAPvGwK,EAQX,CCvBA,SAASK,EAAAA,CAAkB,CACzB,SAAA,CAAA/O,CAAAA,CACA,KAAA,CAAAqB,CAAAA,CACA,aAAA2N,CAAAA,CAAe,KACjB,CAAA,CAKgB,CACd,IAAMC,CAAAA,CAAY5N,CAAAA,CAAM,MAAA,GAAW,GAAA,CAC7B6N,CAAAA,CAAc7N,CAAAA,CAAM,MAAA,GAAW,GAAA,EAAOA,EAAM,MAAA,GAAW,GAAA,CACvD8N,CAAAA,CAAQF,CAAAA,CACV,qBACAC,CAAAA,CACE,2BAAA,CACA,mCAAA,CACAE,CAAAA,CAAcH,EAChB,CAAA,SAAA,EAAYjP,CAAS,CAAA,sGAAA,CAAA,CACrBkP,CAAAA,CACE,CAAA,yCAAA,EAA4ClP,CAAS,CAAA,qCAAA,CAAA,CACrD,CAAA,EAAGqB,EAAM,OAAO,CAAA,WAAA,EAAcrB,CAAS,CAAA,GAAA,CAAA,CAE7C,OACEP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CACb,SAAAF,IAAAA,CAAC2C,EAAAA,CAAA,CAAM,SAAA,CAAU,aAAA,CAAc,OAAA,CAAQ,aAAA,CACrC,QAAA,CAAA,CAAAzC,IAACyM,WAAAA,CAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,EACvCzM,GAAAA,CAAC0M,EAAAA,CAAA,CAAY,QAAA,CAAAgD,EAAM,CAAA,CACnB5P,IAAAA,CAAC4C,EAAAA,CAAA,CAAiB,SAAA,CAAU,8BAAA,CAC1B,QAAA,CAAA,CAAA1C,GAAAA,CAAC,QAAM,QAAA,CAAA2P,CAAAA,CAAY,CAAA,CAClBJ,CAAAA,CACCvP,IAACkM,MAAAA,CAAA,CAAK,SAAA,CAAU,oCAAA,CAAqC,GAAG,GAAA,CAAI,QAAA,CAAA,uBAAA,CAE5D,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAEO,SAAS0D,EAAAA,EAAsB,CACpC,GAAM,CAAE,KAAAzF,CAAAA,CAAM,cAAA,CAAAwE,CAAAA,CAAgB,gBAAA,CAAAkB,EAAkB,IAAA,CAAA1H,CAAAA,CAAM,UAAA,CAAA3E,CAAAA,CAAY,QAAA,CAAAC,CAAAA,CAAU,gBAAA,CAAAgL,CAAAA,CAAkB,aAAAqB,CAAa,CAAA,CACzGpM,GAAAA,EAAU,CACN,CAAC7B,CAAAA,CAAWqC,CAAI,CAAA,CAAIC,CAAAA,GACpB,CAAE,SAAA,CAAA5D,CAAAA,CAAY,EAAG,EAAIqK,SAAAA,EAAU,CAC/BmF,CAAAA,CAASpB,CAAAA,EAAgB,OACzBqB,CAAAA,CAAcC,GAAAA,EAAe,CAC7BlG,CAAAA,CAAWzF,aAAY,CACvB4L,CAAAA,CAAiB1M,CAAAA,CAAW,QAAA,CAASjD,CAAS,CAAA,CAC9C4P,CAAAA,CAAcjD,EAAAA,CAAe/C,CAAAA,CAAM5J,CAAS,CAAA,CAC5C6J,CAAAA,CAAU8E,EAAAA,GAsBhB,GApBArP,SAAAA,CAAU,IAAM,CACd,GAAIkQ,CAAAA,EAAUA,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAG,CAC/B,IAAMK,CAAAA,CAAeL,CAAAA,CAAO,IAAA,CAAMM,CAAAA,EAAMA,CAAAA,CAAE,SAAS,CAAA,EAAKN,EAAO,CAAC,CAAA,CAC5DO,CAAAA,CAAa,EAAA,CAEb,OAAO,YAAA,CAAiB,GAAA,GAC1BA,CAAAA,CAAa,YAAA,CAAa,QAAQ,CAAA,EAAGC,GAAiB,CAAA,EAAGhQ,CAAS,CAAA,CAAE,CAAA,EAAK,EAAA,CAAA,CAG3EyP,CAAAA,CAAY,CAAE,IAAA,CAAM,UAAA,CAAY,OAAA,CAAS,CAAE,UAAAzP,CAAAA,CAAW,KAAA,CAAO+P,CAAAA,EAAcF,CAAAA,CAAa,IAAK,CAAE,CAAC,EAClG,CACF,EAAG,CAACJ,CAAAA,CAAajG,CAAAA,CAAUxJ,CAAAA,CAAWwP,CAAM,CAAC,CAAA,CAG7ClQ,SAAAA,CAAU,IAAM,CACVsI,CAAAA,GAAS,QAAA,EAAY+H,CAAAA,EAAkBvB,CAAAA,EACzC1I,GAAsB1F,CAAS,EAEnC,CAAA,CAAG,CAACoO,CAAAA,CAAgBuB,CAAAA,CAAgB/H,CAAAA,CAAM5H,CAAS,CAAC,CAAA,CAEhD,CAAC2P,CAAAA,CAAgB,CACnB,GAAI/H,CAAAA,GAAS,UAAA,CACX,MAAM,IAAI7B,GAAa,mBAAmB,CAAA,CAG5C,OACEtG,GAAAA,CAACsP,EAAAA,CAAA,CAAkB,KAAA,CAAO,CAAE,OAAQ,GAAA,CAAK,OAAA,CAAS,2BAA4B,CAAA,CAAG,UAAW/O,CAAAA,CAAW,YAAA,CAAY,IAAA,CAAC,CAExH,CAEA,GAAIsB,CAAAA,CACF,OAAO7B,GAAAA,CAAC6E,GAAAA,CAAA,EAAQ,CAAA,CAGlB,GAAI,CAACX,CAAAA,CAAK,IAAA,EAAM,EAAA,CACd,OAAOlE,IAACsD,EAAAA,CAAA,CAAM,SAAA,CAAW6E,CAAAA,GAAS,SAAW,MAAA,CAAY5H,CAAAA,CAAW,CAAA,CAGtE,GAAIsP,EACF,OAAO7P,GAAAA,CAAC6E,GAAAA,CAAA,EAAQ,EAGlB,IAAM2L,CAAAA,CAAcV,CAAAA,CAAavP,CAAS,EAE1C,OACET,IAAAA,CAAAiF,QAAAA,CAAA,CAEE,UAAAjF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8CAAA,CAA+C,qBAAA,CAAoB,EAAA,CAChF,QAAA,CAAA,CAAAE,GAAAA,CAACwO,GAAA,CAAO,SAAA,CAAWjO,CAAAA,CAAW,UAAA,CAAYiD,EAAY,gBAAA,CAAkBiL,CAAAA,CAAkB,QAAA,CAAUhL,CAAAA,CAAU,EAC9G3D,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4FAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAACiK,EAAAA,CAAA,CAAO,KAAME,CAAAA,CAAM,OAAA,CAASC,CAAAA,CAAU,GAAG+F,EAAa,CAAA,CACtDxB,CAAAA,CACC3O,GAAAA,CAAC4N,EAAAA,CAAA,CAAU,IAAA,CAAMzD,CAAAA,CAAO,GAAGgG,CAAAA,CAAa,CAAA,CAExCnQ,GAAAA,CAACsP,EAAAA,CAAA,CACC,MAAOkB,CAAAA,EAAe,CAAE,MAAA,CAAQ,CAAA,CAAG,QAAS,sCAAuC,CAAA,CACnF,SAAA,CAAWjQ,CAAAA,CACX,aAAc4H,CAAAA,GAAS,QAAA,CACzB,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CACAnI,GAAAA,CAAC+H,EAAAA,CAAA,CAAiB,UAAWxH,CAAAA,CAAW,CAAA,CACxCP,GAAAA,CAACyQ,EAAAA,CAAA,EAAQ,CAAA,CAAA,CACX,CAEJ,CC/HO,SAASC,EAAAA,EAAuB,CACrC,IAAM1I,CAAAA,CAAWC,WAAAA,EAAY,CAE7B,OAAApI,SAAAA,CAAU,IAAM,CACd,IAAM4E,CAAAA,CAAUC,GAAAA,GAEhB,GAAKD,CAAAA,CAIL,OAAA,QAAA,CAAS,eAAA,CAAgB,QAAQ,eAAA,CAAkBA,CAAAA,CAAQ,QAAA,CAEpDA,CAAAA,CAAQ,UAAA,CAAYkM,CAAAA,EAAS,CAClC3I,CAAAA,CAAS2I,CAAI,EACf,CAAC,CACH,CAAA,CAAG,CAAC3I,CAAQ,CAAC,CAAA,CAEN,IACT,CCfA,eAAe4I,IAA8B,CAC3C,GAAI,CACF,IAAMC,EAAW,MAAM,KAAA,CAAMtP,GAAAA,CAAa,EAAA,CAAI,CAAE,WAAA,CAAa,aAAc,CAAC,CAAA,CAE5E,OAAIsP,CAAAA,CAAS,MAAA,GAAW,GAAA,CACf,CAAE,IAAA,CAAM,WAAY,CAAA,CAGxBA,CAAAA,CAAS,GAIP,CAAE,IAAA,CAAM,OAAA,CAAS,IAAA,CAAO,MAAMA,CAAAA,CAAS,IAAA,EAAsB,CAAA,CAH3D,CAAE,IAAA,CAAM,OAAA,CAAS,OAAA,CAAS,CAAA,iBAAA,EAAoB,MAAA,CAAOA,CAAAA,CAAS,MAAM,CAAC,+BAAgC,CAIhH,CAAA,MAASjP,CAAAA,CAAO,CACd,OAAO,CAAE,IAAA,CAAM,OAAA,CAAS,OAAA,CAASA,aAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,2BAA4B,CACxG,CACF,CAEO,SAASkP,GAAgBC,CAAAA,CAA+C,CAC7E,OAAKA,CAAAA,CAIDA,EAAQ,IAAA,GAAS,WAAA,CACZ,CAAE,MAAA,CAAQ,WAAY,CAAA,CAG3BA,CAAAA,CAAQ,IAAA,GAAS,OAAA,CACZ,CAAE,MAAA,CAAQ,OAAA,CAAS,OAAA,CAASA,CAAAA,CAAQ,OAAQ,CAAA,CAG9C,CAAE,MAAA,CAAQ,OAAA,CAAS,SAAUA,CAAAA,CAAQ,IAAA,CAAK,QAAA,CAAU,IAAA,CAAMA,EAAQ,IAAA,CAAK,IAAK,CAAA,CAX1E,CAAE,MAAA,CAAQ,SAAU,CAY/B,CAGO,SAASC,EAAAA,EAAkC,CAChD,GAAM,CAAE,KAAArP,CAAK,CAAA,CAAIG,EAAAA,CAAO,gBAAA,CAAkB8O,GAAS,CACjD,iBAAA,CAAmB,KAAA,CACnB,qBAAA,CAAuB,KAAA,CACvB,kBAAA,CAAoB,KACtB,CAAC,EAED,OAAOE,EAAAA,CAAgBnP,CAAI,CAC7B,CCnDA,SAASsP,EAAAA,CAAY,CAAE,GAAGC,CAAM,CAAA,CAA2D,CACzF,OAAOlR,IAACmR,WAAAA,CAAqB,IAAA,CAArB,CAA0B,WAAA,CAAU,eAAgB,GAAGD,CAAAA,CAAO,CACxE,CAMA,SAASE,EAAAA,CAAkB,CAAE,GAAGF,CAAM,EAA6D,CACjG,OAAOlR,GAAAA,CAACmR,WAAAA,CAAqB,OAArB,CAA4B,WAAA,CAAU,qBAAA,CAAuB,GAAGD,CAAAA,CAAO,CACjF,CAEA,SAASG,GAAmB,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGJ,CAAM,CAAA,CAA8D,CAC9G,OACElR,GAAAA,CAACmR,YAAqB,OAAA,CAArB,CACC,WAAA,CAAU,sBAAA,CACV,SAAA,CAAWI,GAAAA,CACT,wJAAA,CACAD,CACF,EACC,GAAGJ,CAAAA,CACN,CAEJ,CAEA,SAASM,EAAAA,CAAmB,CAC1B,SAAA,CAAAF,CAAAA,CACA,KAAAG,CAAAA,CAAO,SAAA,CACP,GAAGP,CACL,CAAA,CAEG,CACD,OACEpR,IAAAA,CAACsR,GAAA,CACC,QAAA,CAAA,CAAApR,GAAAA,CAACqR,EAAAA,CAAA,EAAmB,CAAA,CACpBrR,GAAAA,CAACmR,WAAAA,CAAqB,OAAA,CAArB,CACC,WAAA,CAAU,sBAAA,CACV,WAAA,CAAWM,CAAAA,CACX,SAAA,CAAWF,GAAAA,CACT,khBAAA,CACAD,CACF,EACC,GAAGJ,CAAAA,CACN,CAAA,CAAA,CACF,CAEJ,CAEA,SAASQ,EAAAA,CAAkB,CAAE,SAAA,CAAAJ,EAAW,GAAGJ,CAAM,CAAA,CAAgC,CAC/E,OACElR,GAAAA,CAAC,KAAA,CAAA,CACC,WAAA,CAAU,sBACV,SAAA,CAAWuR,GAAAA,CACT,kbAAA,CACAD,CACF,EACC,GAAGJ,CAAAA,CACN,CAEJ,CAEA,SAASS,EAAAA,CAAkB,CAAE,SAAA,CAAAL,CAAAA,CAAW,GAAGJ,CAAM,CAAA,CAAgC,CAC/E,OACElR,GAAAA,CAAC,KAAA,CAAA,CACC,WAAA,CAAU,qBAAA,CACV,UAAWuR,GAAAA,CACT,kLAAA,CACAD,CACF,CAAA,CACC,GAAGJ,CAAAA,CACN,CAEJ,CAEA,SAASU,EAAAA,CAAiB,CAAE,SAAA,CAAAN,CAAAA,CAAW,GAAGJ,CAAM,CAAA,CAA4D,CAC1G,OACElR,IAACmR,WAAAA,CAAqB,KAAA,CAArB,CACC,WAAA,CAAU,qBACV,SAAA,CAAWI,GAAAA,CACT,4JAAA,CACAD,CACF,EACC,GAAGJ,CAAAA,CACN,CAEJ,CAEA,SAASW,EAAAA,CAAuB,CAC9B,SAAA,CAAAP,CAAAA,CACA,GAAGJ,CACL,CAAA,CAAkE,CAChE,OACElR,IAACmR,WAAAA,CAAqB,WAAA,CAArB,CACC,WAAA,CAAU,0BAAA,CACV,SAAA,CAAWI,GAAAA,CAAG,qCAAA,CAAuCD,CAAS,CAAA,CAC7D,GAAGJ,CAAAA,CACN,CAEJ,CAeA,SAASY,EAAAA,CAAkB,CACzB,SAAA,CAAAR,EACA,OAAA,CAAAS,CAAAA,CAAU,SAAA,CACV,IAAA,CAAAN,CAAAA,CAAO,SAAA,CACP,GAAGP,CACL,EACiE,CAC/D,OACElR,GAAAA,CAAC2C,GAAAA,CAAA,CAAO,OAAA,CAASoP,CAAAA,CAAS,IAAA,CAAMN,CAAAA,CAAM,QAAO,IAAA,CAC3C,QAAA,CAAAzR,GAAAA,CAACmR,WAAAA,CAAqB,MAAA,CAArB,CAA4B,WAAA,CAAU,qBAAA,CAAsB,UAAWI,GAAAA,CAAGD,CAAS,CAAA,CAAI,GAAGJ,EAAO,CAAA,CACpG,CAEJ,CAEA,SAASc,GAAkB,CACzB,SAAA,CAAAV,CAAAA,CACA,OAAA,CAAAS,EAAU,SAAA,CACV,IAAA,CAAAN,CAAAA,CAAO,SAAA,CACP,GAAGP,CACL,CAAA,CACiE,CAC/D,OACElR,IAAC2C,GAAAA,CAAA,CAAO,OAAA,CAASoP,CAAAA,CAAS,KAAMN,CAAAA,CAAM,OAAA,CAAO,IAAA,CAC3C,QAAA,CAAAzR,GAAAA,CAACmR,WAAAA,CAAqB,MAAA,CAArB,CAA4B,YAAU,qBAAA,CAAsB,SAAA,CAAWI,GAAAA,CAAGD,CAAS,EAAI,GAAGJ,CAAAA,CAAO,CAAA,CACpG,CAEJ,CCrHe,SAARD,EAAAA,CAA6B,CAAE,QAAAgB,CAAQ,CAAA,CAAuB,CACnE,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAI1S,QAAAA,CAAS,KAAK,CAAA,CACpC,CAAC2S,CAAAA,CAAcC,CAAe,CAAA,CAAI5S,QAAAA,CAAS,KAAK,CAAA,CAChD,CAAC6S,CAAAA,CAAqBC,CAAsB,CAAA,CAAI9S,QAAAA,CAAS,KAAK,CAAA,CAEpEI,SAAAA,CAAU,IAAM,CACdsS,EAAU,IAAI,EAChB,CAAA,CAAG,EAAE,CAAA,CAEL,SAASK,CAAAA,EAAoB,CAC3BL,EAAU,KAAK,CAAA,CAEVG,CAAAA,EACHL,CAAAA,CAAQ,sBAAqB,CAG3BK,CAAAA,EACFC,CAAAA,CAAuB,KAAK,EAEhC,CAEA,eAAeE,CAAAA,EAA8B,CAC3CJ,CAAAA,CAAgB,IAAI,CAAA,CACpBE,CAAAA,CAAuB,IAAI,CAAA,CAC3BJ,CAAAA,CAAU,KAAK,CAAA,CAEf,MAAM,IAAI,OAAA,CAAerK,CAAAA,EAAY,CACnC,UAAA,CAAW,UAAA,CAAWA,CAAAA,CAAS,GAAG,EACpC,CAAC,CAAA,CAED,GAAI,CACF,IAAM4K,CAAAA,CAAeT,CAAAA,CAAQ,kBAAA,IAAqB,CAE9CS,GAAgB,OAAQA,CAAAA,CAA+B,IAAA,EAAS,UAAA,EAClE,MAAMA,EAEV,CAAA,OAAE,CACAL,EAAgB,KAAK,EACvB,CACF,CAEA,OACErS,GAAAA,CAACiR,EAAAA,CAAA,CAAiB,YAAA,CAAcuB,EAAa,IAAA,CAAMN,CAAAA,CACjD,QAAA,CAAAlS,GAAAA,CAACoR,GAAA,CACC,QAAA,CAAAtR,IAAAA,CAAC0R,EAAAA,CAAA,CAAmB,SAAA,CAAU,kBAAA,CAC5B,QAAA,CAAA,CAAA1R,IAAAA,CAAC4R,GAAA,CACC,QAAA,CAAA,CAAA1R,GAAAA,CAAC4R,EAAAA,CAAA,CAAkB,QAAA,CAAAK,CAAAA,CAAQ,WAAA,CAAY,CAAA,CACvCjS,GAAAA,CAAC6R,EAAAA,CAAA,CAAwB,QAAA,CAAAI,EAAQ,aAAA,CAAc,CAAA,CAAA,CACjD,CAAA,CACAnS,IAAAA,CAAC6R,GAAA,CACC,QAAA,CAAA,CAAA3R,GAAAA,CAACgS,EAAAA,CAAA,CAAkB,QAAA,CAAUI,CAAAA,CAAc,OAAA,CAASI,CAAAA,CACjD,QAAA,CAAAP,CAAAA,CAAQ,iBAAA,CACX,CAAA,CACAnS,KAACgS,EAAAA,CAAA,CACC,SAAA,CAAWa,GAAAA,CAAe,CAAE,OAAA,CAASV,CAAAA,CAAQ,aAAA,CAAgB,aAAA,CAAgB,SAAU,CAAC,CAAA,CACxF,QAAA,CAAUG,CAAAA,CACV,OAAA,CAASK,CAAAA,CAER,QAAA,CAAA,CAAAL,CAAAA,CAAepS,IAACoD,OAAAA,CAAA,CAAQ,SAAA,CAAU,uCAAA,CAAwC,EAAK,IAAA,CAC/E6O,CAAAA,CAAQ,iBAAA,CAAA,CACX,CAAA,CAAA,CACF,GACF,CAAA,CACF,CAAA,CACF,CAEJ,CC5Ee,SAARW,GAAwB,CAAE,MAAA,CAAAC,CAAO,CAAA,CAAuB,CAC7D,GAAM,CAAE,cAAA,CAAAlE,CAAe,EAAIjL,GAAAA,EAAU,CAC/BmL,CAAAA,CAASF,CAAAA,EAAgB,MAAA,EAAU,EAAC,CACpCmE,CAAAA,CAAeC,iBAAgB,CAC/B,CAACC,CAAAA,CAAaC,CAAAA,CAAaC,CAAU,CAAA,CAAIC,CAAAA,EAAkB,CAC3DC,CAAAA,CAAWC,GAAY,CACvBC,CAAAA,CAA4B3S,MAAAA,CAAO,KAAK,CAAA,CACxC4S,CAAAA,CAAc,KAAA,CAAM,OAAA,CAAQV,EAAO,OAAA,CAAQ,QAAQ,CAAA,CAAIA,CAAAA,CAAO,QAAQ,QAAA,CAAW,CAACA,CAAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CACzGW,CAAAA,CAAaX,CAAAA,CAAO,OAAA,CAAQ,aAAe,QAAA,CAAW,OAAA,CAAUA,CAAAA,CAAO,OAAA,CAAQ,WAAW,WAAA,EAAY,CACtGY,CAAAA,CAAW,CAAA,CAAQZ,EAAO,OAAA,CAAQ,MAAA,CAClCa,CAAAA,CAAUH,CAAAA,CAAY,OAAS,CAAA,CAcrC,GAVA1T,SAAAA,CAAU,IAAM,CACV,CAAC4T,CAAAA,EAAYH,CAAAA,CAA0B,UAI3CA,CAAAA,CAA0B,OAAA,CAAU,IAAA,CAC/BK,CAAAA,IAEP,CAAA,CAAG,CAACF,CAAQ,CAAC,EAETA,CAAAA,CACF,OAAOzT,GAAAA,CAAA+E,QAAAA,CAAA,EAAE,CAAA,CAGX,IAAM6O,CAAAA,CAAgB,CACpB,WAAA,CAAaF,CAAAA,CAAU,CAAA,OAAA,EAAUH,CAAAA,CAAY,MAAM,CAAA,CAAA,EAAIC,CAAU,CAAA,CAAA,CAAA,CAAM,CAAA,OAAA,EAAUA,CAAU,CAAA,CAAA,CAC3F,aAAA,CAAeE,CAAAA,CACX,CAAA,6CAAA,EAAgDF,CAAU,CAAA,oCAAA,CAAA,CAC1D,CAAA,6CAAA,EAAgDA,CAAU,0CAC9D,iBAAA,CAAmB,QAAA,CACnB,iBAAA,CAAmB,QAAA,CACnB,cAAe,IAAA,CACf,kBAAA,CAAoB,IAAMG,CAAAA,EAC5B,CAAA,CAEA,SAASA,CAAAA,EAAgC,CACvC,IAAME,CAAAA,CAAWC,GAAAA,CAAwBjB,CAAAA,CAAO,OAAA,CAAQ,WAAYhE,CAAAA,CAAQ0E,CAAW,CAAA,CAEvF,OAAO,IAAI,OAAA,CAAc,CAACzL,CAAAA,CAASiM,CAAAA,GAAW,CAC5Cd,CAAAA,CAAYe,GAAAA;AAAA,QAAA,EACRH,CAAQ;AAAA,MAAA,CACX,CAAA,CACDX,CAAAA,CAAW,CACT,SAAA,CAAW,CAAE,KAAA,CAAOe,GAAAA,CAAqBV,CAAW,CAAE,CAAA,CACtD,MAAA,CAAOW,CAAAA,CAAkD,CACvD,QAAWhP,CAAAA,IAAMqO,CAAAA,CACfW,CAAAA,CAAM,KAAA,CAAM,CAAE,EAAA,CAAAhP,CAAG,CAAC,EAEtB,CAAA,CACA,WAAA,CAAa,IAAM,CACjBiP,KAAAA,CAAM,QAAQT,CAAAA,CAAU,6BAAA,CAAgC,4BAA4B,CAAA,CAC/EU,GAAAA,CACHtB,CAAAA,CACAuB,GAAAA,CAAuBxB,CAAAA,CAAO,OAAA,CAAQ,UAAA,CAAYhE,CAAM,CAAA,CACxD0E,CACF,CAAA,CACAH,EAAS,CAAE,IAAA,CAAM,SAAA,CAAW,GAAA,CAAKP,CAAAA,CAAO,GAAA,CAAK,OAAA,CAAS,EAAG,CAAC,CAAA,CAC1D/K,CAAAA,GACF,CAAA,CACA,QAAUlG,CAAAA,EAAiB,CACzBmS,CAAAA,CAAOnS,CAAK,EACd,CACF,CAAC,CAAA,CACDoR,CAAAA,CAAY,IAAI,EAClB,CAAC,CACH,CAEA,OAAOhT,GAAAA,CAACiR,EAAAA,CAAA,CAAY,OAAA,CAAS2C,CAAAA,CAAe,CAC9C,CCpFO,IAAMU,GAAqBC,aAAAA,CAAsC,CACtE,OAAA,CAAS,KAAA,CACT,UAAA,CAAaC,CAAAA,EAAmB,CAEhC,CACF,CAAC,CAAA,CAEYC,EAAAA,CAAsB,CAAC,CAAE,QAAA,CAAAzH,CAAS,CAAA,GAA+B,CAC5E,GAAM,CAAC0H,CAAAA,CAAOC,CAAQ,CAAA,CAAIlV,QAAAA,CAAS,KAAK,CAAA,CAElCuG,CAAAA,CAAQyH,OAAAA,CAAQ,KAKb,CAAE,QAASiH,CAAAA,CAAO,UAAA,CAJLE,CAAAA,EAAkB,CACpCD,CAAAA,CAASC,CAAI,EACf,CAEoC,CAAA,CAAA,CACnC,CAACF,CAAAA,CAAOC,CAAQ,CAAC,CAAA,CAEpB,OAAO3U,GAAAA,CAACsU,EAAAA,CAAmB,QAAA,CAAnB,CAA4B,KAAA,CAAOtO,CAAAA,CAAQ,QAAA,CAAAgH,CAAAA,CAAS,CAC9D,CAAA,CAEO,SAAS6H,EAAAA,EAAgD,CAC9D,OAAOC,WAAWR,EAAkB,CACtC,CCnBO,SAASS,EAAAA,CAAmB,CAAE,KAAA,CAAAC,CAAAA,CAAO,OAAA,CAAAC,CAAAA,CAAS,QAAA,CAAAC,CAAAA,CAAU,QAAA,CAAAC,CAAS,CAAA,CAA8B,CACpG,IAAMC,CAAAA,CAAYC,OAAM,CAExB,OAAI,CAACL,CAAAA,EAASA,CAAAA,GAAU,SAAA,CACf,IAAA,CAIPlV,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sCAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAACsV,GAAAA,CAAA,CAAS,OAAA,CAASL,CAAAA,CAAS,QAAA,CAAUC,CAAAA,CAAU,EAAA,CAAIE,CAAAA,CAAW,eAAA,CAAiBD,CAAAA,CAAwB,CAAA,CACxGnV,GAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAU,2GAAA,CACV,OAAA,CAASoV,EACV,QAAA,CAAA,mBAAA,CAED,CAAA,CAAA,CACF,CAEJ,CCrBO,SAASG,EAAAA,CAAK,CAAE,OAAA,CAAAC,EAAS,WAAA,CAAAC,CAAAA,CAAa,QAAA,CAAAC,CAAAA,CAAU,QAAA,CAAAC,CAAS,CAAA,CAAyC,CACvG,GAAM,CAAE,IAAA,CAAA9H,GAAAA,CAAM,KAAA,CAAA+H,CAAAA,CAAO,QAAA3D,CAAQ,CAAA,CAAIwD,CAAAA,CAC3BvQ,CAAAA,CAAKmQ,KAAAA,EAAM,CAEjB,SAASQ,CAAAA,CACPhT,CAAAA,CACAiT,CAAAA,CACM,CACNH,CAAAA,CAAS9H,GAAAA,CAAM,CACb,GAAGiI,CAAAA,CACH,KAAA,CAAOjT,CAAAA,CAAM,aAAA,CAAc,KAC7B,CAAC,EACH,CAEA,SAASkT,GAAAA,CAAed,CAAAA,CAAkBjP,CAAAA,CAAyC,CACjF2P,CAAAA,CAAS9H,IAAM,CACb,GAAG7H,CAAAA,CACH,QAAA,CAAUiP,CACZ,CAAC,EACH,CAEA,OACEjV,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS0S,CAAAA,CACT,KAAM3H,GAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAA9K,GAAM,CAAA,GACfjD,IAAAA,CAACkD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAhD,GAAAA,CAACgW,CAAAA,CAAA,CAAU,QAAS9Q,CAAAA,CAAK,QAAA,CAAA0Q,CAAAA,CAAM,CAAA,CAC9B3D,CAAAA,EAAS,OAAA,CAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,QAAA,CAAAhE,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC3EjS,IAACiD,CAAAA,CAAA,CACC,QAAA,CAAAjD,GAAAA,CAACkD,CAAAA,CAAA,CACC,SAAA,CAAU,sBAAA,CACV,QAAA,CAAUwS,CAAAA,EAAY3S,GAAAA,CAAM,KAAA,EAAO,QAAA,CACnC,EAAA,CAAImC,EACH,GAAGnC,GAAAA,CACJ,QAAA,CAAWF,CAAAA,EAAU,CACnBgT,CAAAA,CAAYhT,CAAAA,CAAOE,GAAAA,CAAM,KAAK,EAChC,CAAA,CACA,KAAA,CAAQA,GAAAA,CAAM,KAAA,EAAO,OAAoB,EAAA,CAC3C,CAAA,CACF,CAAA,CAEA/C,GAAAA,CAAC+U,EAAAA,CAAA,CACC,OAAA,CAAShS,GAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,QAAA,CAAU2S,CAAAA,CACV,QAAA,CAAWT,GAAY,CACrBc,GAAAA,CAAed,CAAAA,CAASlS,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACA/C,GAAAA,CAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CCxDO,SAAS+S,EAAAA,CAAO,CAAE,OAAA,CAAAV,CAAAA,CAAS,YAAAC,CAAAA,CAAa,QAAA,CAAAC,CAAAA,CAAU,QAAA,CAAAC,CAAS,CAAA,CAA2C,CAC3G,GAAM,CAAE,IAAA,CAAA9H,GAAAA,CAAM,KAAA,CAAA+H,CAAAA,CAAO,OAAA,CAAA3D,CAAQ,CAAA,CAAIwD,CAAAA,CAEjC,SAASI,CAAAA,CAAYZ,CAAAA,CAAkBa,CAAAA,CAAiD,CACtFH,CAAAA,CAAS9H,GAAAA,CAAM,CACb,GAAGiI,CAAAA,CACH,KAAA,CAAOb,CACT,CAAC,EACH,CAEA,SAASc,CAAAA,CAAed,CAAAA,CAAkBjP,CAAAA,CAAyC,CACjF2P,CAAAA,CAAS9H,GAAAA,CAAM,CACb,GAAG7H,CAAAA,CACH,QAAA,CAAUiP,CACZ,CAAC,EACH,CAEA,OACEjV,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS0S,CAAAA,CACT,IAAA,CAAM3H,GAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAA9K,GAAM,CAAA,GACfjD,IAAAA,CAACkD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAlD,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wTAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gBAAA,CACb,UAAAE,GAAAA,CAACgW,CAAAA,CAAA,CAAW,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CACjB3D,CAAAA,EAAS,OAAA,CAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,QAAA,CAAAhE,CAAAA,CAAQ,OAAA,CAAQ,EAAqB,IAAA,CAAA,CAC7E,CAAA,CACAjS,GAAAA,CAACiD,CAAAA,CAAA,CACC,QAAA,CAAAjD,GAAAA,CAACkW,CAAAA,CAAA,CACC,OAAA,CAASnT,GAAAA,CAAM,KAAA,EAAO,KAAA,CAAQ,CAAA,CAAQA,IAAM,KAAA,CAAM,KAAA,CAAS,KAAA,CAC3D,QAAA,CAAU2S,CAAAA,EAAY3S,GAAAA,CAAM,KAAA,EAAO,QAAA,CACnC,eAAA,CAAkBkS,CAAAA,EAAY,CAC5BY,CAAAA,CAAYZ,CAAAA,CAASlS,GAAAA,CAAM,KAAK,EAClC,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACA/C,GAAAA,CAAC+U,EAAAA,CAAA,CACC,OAAA,CAAShS,GAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,QAAA,CAAU2S,EACV,QAAA,CAAWT,CAAAA,EAAY,CACrBc,CAAAA,CAAed,CAAAA,CAASlS,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACA/C,IAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CCvDO,SAASgT,EAAAA,CACdC,CAAAA,CACA1Q,CAAAA,CACA2Q,CAAAA,CACM,CACNxW,SAAAA,CAAU,IAAM,CACd,SAASyW,CAAAA,CAAmBzT,CAAAA,CAAyB,CACnD,GAAIuT,CAAAA,CAAI,OAAA,EAAW,CAACA,CAAAA,CAAI,OAAA,CAAQ,QAAA,CAASvT,CAAAA,CAAM,MAAc,CAAA,CAAG,CAC9D,GAAIwT,CAAAA,CAAkB,CACpB,IAAME,CAAAA,CAAmB,KAAA,CAAM,IAAA,CAAK,SAAS,gBAAA,CAAiBF,CAAgB,CAAC,CAAA,CAE/E,IAAA,IAAWG,CAAAA,IAAWD,CAAAA,CACpB,GAAIC,CAAAA,CAAQ,QAAA,CAAS3T,CAAAA,CAAM,MAAc,CAAA,CACvC,MAGN,CACA6C,CAAAA,CAAS,KAAK,EAChB,CACF,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAa4Q,CAAkB,CAAA,CAElD,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,YAAaA,CAAkB,EAC9D,CACF,CAAA,CAAG,CAAC5Q,CAAAA,CAAU0Q,CAAAA,CAAKC,CAAgB,CAAC,CAAA,CAEpCxW,SAAAA,CAAU,IAAM,CACd,SAAS4W,EAAmB5T,CAAAA,CAAyB,CACnD,GAAIuT,CAAAA,CAAI,OAAA,EAAW,CAACA,CAAAA,CAAI,OAAA,CAAQ,QAAA,CAASvT,CAAAA,CAAM,MAAc,CAAA,CAAG,CAC9D,GAAIwT,EAAkB,CACpB,IAAME,CAAAA,CAAmB,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,gBAAA,CAAiBF,CAAgB,CAAC,CAAA,CAE/E,IAAA,IAAWG,CAAAA,IAAWD,CAAAA,CACpB,GAAIC,EAAQ,QAAA,CAAS3T,CAAAA,CAAM,MAAc,CAAA,CACvC,MAGN,CACA6C,CAAAA,CAAS,KAAK,EAChB,CACF,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAW+Q,CAAkB,CAAA,CAEhD,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaA,CAAkB,EAC9D,CACF,CAAA,CAAG,CAAC/Q,CAAAA,CAAU0Q,CAAG,CAAC,EACpB,CCdO,SAASM,EAAAA,CAAS,CACvB,OAAA,CAAAlB,CAAAA,CACA,SAAAmB,CAAAA,CACA,WAAA,CAAAlB,GAAAA,CACA,SAAA,CAAAmB,GAAAA,CACA,QAAA,CAAAlB,GAAAA,CACA,QAAA,CAAAC,GACF,CAAA,CAA0C,CACxC,GAAM,CAAE,IAAA,CAAA9H,EAAM,KAAA,CAAA+H,CAAAA,CAAO,OAAA,CAAA3D,CAAQ,CAAA,CAAIwD,GAAAA,CAC3B,CAAE,SAAA,CAAAlV,GAAU,CAAA,CAAIqK,SAAAA,EAAU,CAC1BiM,CAAAA,CAAiBxD,CAAAA,GACjBrD,CAAAA,CAAcC,GAAAA,EAAe,CAC7B,CAAE,aAAA,CAAA6G,CAAc,CAAA,CAAIC,GAAAA,EAAc,CAClC,CAAC7E,GAAAA,CAAQC,GAAS,CAAA,CAAI1S,QAAAA,CAAS,KAAK,CAAA,CACpCuX,CAAAA,CAAYrW,MAAAA,CAAyB,IAAI,CAAA,CACzCsW,CAAAA,CAAatW,MAAAA,CAAuB,IAAI,CAAA,CACxCuW,CAAAA,CAAqBvW,MAAAA,CAAsB,IAAI,CAAA,CAC/C,CAACwW,EAAoBC,CAAqB,CAAA,CAAI3X,QAAAA,CAAwB,IAAI,CAAA,CAC1E,CAAC4X,CAAAA,CAAYC,CAAa,CAAA,CAAI7X,QAAAA,CAAS,KAAK,CAAA,CAC5C,CAAC8X,CAAAA,CAAQC,CAAS,CAAA,CAAI/X,QAAAA,CAAS,KAAK,CAAA,CACpCyF,CAAAA,CAAKmQ,KAAAA,EAAM,CACXoC,GAAAA,CAAiBpC,KAAAA,EAAM,CAC7Bc,EAAAA,CAAcc,CAAAA,CAAyC9E,GAAAA,CAAW,qCAAqC,EAEvGtS,SAAAA,CAAU,IAAM,CACd,IAAM6X,CAAAA,CAAaZ,CAAAA,CAAcW,GAAc,CAAA,EAAG,OAAA,CAElD,GAAI,CAACC,CAAAA,EAAcR,CAAAA,CAAmB,OAAA,GAAYQ,CAAAA,CAAW,GAAA,CAC3D,OAGF,IAAMC,CAAAA,CAAgBC,EAAAA,CAAuBF,CAAAA,CAAW,KAAK,CAAA,CAE7D,GAAI,CAACC,CAAAA,CACH,OAGF,IAAME,CAAAA,CAAejB,GAAAA,CAAU/I,CAAI,CAAA,CAEnCqJ,CAAAA,CAAmB,OAAA,CAAUQ,CAAAA,CAAW,GAAA,CACxCN,CAAAA,CAAsB,IAAI,CAAA,CAC1BzB,GAAAA,CAAS9H,CAAAA,CAAM,CACb,GAAGgK,CAAAA,CACH,KAAA,CAAOF,CACT,CAAC,EACH,CAAA,CAAG,CAACf,GAAAA,CAAW/I,CAAAA,CAAM4J,GAAAA,CAAgBX,CAAAA,CAAenB,GAAQ,CAAC,CAAA,CAE7D,SAASmC,CAAAA,CAAqBC,CAAAA,CAA8C,CAC1E,GAAI,CAACA,CAAAA,CACH,OAGF,IAAMC,CAAAA,CAA8B,CAClC,iBAAA,CAAmB,KAAA,CACnB,iBAAA,CAAmB,KAAA,CACnB,8BAAA,CAAgC,KAAA,CAChC,kBAAA,CAAoB,OACpB,UAAA,CAAY,KAAA,CACZ,YAAA,CAAc,KAAA,CACd,oBAAA,CAAsB,KAAA,CACtB,yEAAA,CAA2E,MAAA,CAC3E,0BAAA,CAA4B,KAAA,CAC5B,mEAAA,CAAqE,MAAA,CACrE,+BAAA,CAAiC,KAAA,CACjC,4EAA6E,MAAA,CAC7E,+BAAA,CAAiC,KAAA,CACjC,+BAAA,CAAiC,SAAA,CACjC,6BAAA,CAA+B,OAAA,CAC/B,6BAAA,CAA+B,IAAA,CAC/B,8BAAA,CAAgC,KAAA,CAChC,iBAAA,CAAmB,KAAA,CACnB,WAAA,CAAa,MACb,iBAAA,CAAmB,KAAA,CACnB,YAAA,CAAc,KAAA,CACd,WAAA,CAAa,KACf,CAAA,CAEA,GAAIA,CAAAA,CAAID,CAAI,CAAA,CACV,OAAOC,CAAAA,CAAID,CAAI,EAGjB,IAAME,CAAAA,CAAQF,CAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAE5B,GAAIE,CAAAA,CAAM,MAAA,GAAW,CAAA,CAAG,CACtB,GAAM,EAAGC,CAAG,CAAA,CAAID,CAAAA,CAEhB,OAAIC,CAAAA,CAAI,QAAA,CAAS,KAAK,CAAA,CACb,KAAA,CAGFA,CAAAA,CAAI,WAAA,EACb,CAGF,CAEA,SAASC,EAAiBC,CAAAA,CAAsCL,CAAAA,CAAkC,CAChG,GAAIK,CAAAA,EAAoBA,CAAAA,CAAiB,QAAA,CAAS,GAAG,CAAA,CAAG,CACtD,IAAMC,CAAAA,CAAMD,CAAAA,CAAiB,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,CAE5C,GAAIC,CAAAA,CACF,OAAOA,CAAAA,CAAI,WAAA,EAEf,CAEA,IAAMC,CAAAA,CAAWR,CAAAA,CAAqBC,CAAI,EAE1C,OAAIO,CAAAA,EAIG,MACT,CAEA,eAAezC,CAAAA,CAAY0C,CAAAA,CAAmBzC,CAAAA,CAA0D,CACtG,GAAIJ,GAAAA,EAAY,CAAC6C,CAAAA,CACf,OAGF,IAAMC,CAAAA,CAAgBC,EAAAA,CAAM,KAAK,CAAA,CAEjC,GAAIF,CAAAA,CAAK,IAAA,EAAQC,CAAAA,EAAiB,CAAA,CAAA,CAAI,CACpCrE,KAAAA,CAAM,KAAA,CAAM,6BAA6B,CAAA,CACzC,MACF,CAEA,IAAMuE,CAAAA,CAAUH,CAAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,CAI7C,GAFArB,CAAAA,CAAmB,OAAA,CAAU,IAAA,CAEzBwB,CAAAA,CAAS,CACX,IAAMC,EAAAA,CAAS,IAAI,UAAA,CAEnBA,EAAAA,CAAO,MAAA,CAAUC,EAAAA,EAAM,CACrBxB,CAAAA,CAAsBwB,EAAAA,CAAE,MAAA,EAAQ,MAAgB,EAClD,CAAA,CAEAD,EAAAA,CAAO,cAAcJ,CAAI,EAC3B,CAAA,KACEnB,CAAAA,CAAsB,IAAI,CAAA,CAG5BI,CAAAA,CAAU,IAAI,CAAA,CAEd,GAAI,CAGF,IAAMqB,EAAAA,CAAW,MAAMC,GAAAA,CAAgBP,CAAAA,CAAMhY,GAAS,CAAA,CAEtDoV,GAAAA,CAAS9H,CAAAA,CAAM,CACb,GAAG+I,GAAAA,CAAU/I,CAAI,CAAA,CACjB,KAAA,CAAOgL,EAAAA,CAAS,KAClB,CAAC,EACH,OAASjX,EAAAA,CAAO,CACd,OAAA,CAAQ,KAAA,CAAMA,EAAK,CAAA,CACnBwV,CAAAA,CAAsB,IAAI,CAAA,CAC1BzB,GAAAA,CAAS9H,CAAAA,CAAM,CACb,GAAG+I,GAAAA,CAAU/I,CAAI,CAAA,CACjB,KAAA,CAAO,CACL,GAAA,CAAMiI,CAAAA,EAAe,KAAA,EAAsB,GAC7C,CACF,CAAC,EACH,CAAA,OAAE,CACA0B,CAAAA,CAAU,KAAK,EACjB,CACF,CAEA,SAASuB,CAAAA,CAAelW,CAAAA,CAA6B,CAC/C6S,GAAAA,GAIJ7S,CAAAA,CAAM,eAAA,EAAgB,CACtBqU,CAAAA,CAAmB,OAAA,CAAU,IAAA,CAC7BvB,GAAAA,CAAS9H,EAAM,CACb,GAAG+I,GAAAA,CAAU/I,CAAI,CAAA,CACjB,GAAA,CAAK,EAAA,CACL,KAAA,CAAO,CACL,GAAA,CAAM+I,GAAAA,CAAU/I,CAAI,CAAA,EAAG,KAAA,EAAsB,GAC/C,CACF,CAAC,CAAA,EACH,CAEA,SAASmL,CAAAA,CAAcnW,CAAAA,CAAuBoW,CAAAA,CAA8C,CAC1FpW,CAAAA,CAAM,eAAA,EAAgB,CAElBoW,CAAAA,EAAY,KAAA,EAAS,OAAOA,CAAAA,CAAW,KAAA,EAAU,QAAA,EAAY,MAAA,GAAUA,CAAAA,CAAW,KAAA,EACpF,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,CAAA,EAAGC,GAAe,CAAA,EAAGD,CAAAA,CAAW,KAAA,CAAM,IAAI,CAAA,CAAE,EAE9E,CAEA,SAASE,CAAAA,CAAatW,CAAAA,CAA6B,CACjDA,CAAAA,CAAM,cAAA,EAAe,CACrBA,CAAAA,CAAM,eAAA,EAAgB,CAElB,CAAA6S,KAIJsB,CAAAA,CAAU,OAAA,EAAS,KAAA,GACrB,CAEA,SAASoC,CAAAA,CAAkBvW,CAAAA,CAA6B,CAItD,GAHAA,CAAAA,CAAM,cAAA,EAAe,CACrBA,CAAAA,CAAM,iBAAgB,CAElB6S,GAAAA,CACF,OAEFvD,GAAAA,CAAU,KAAK,CAAA,CAEf,IAAMkH,CAAAA,CAAezC,GAAAA,CAAU/I,CAAI,CAAA,EAAG,KAAA,CAChCyL,CAAAA,CAAkBpC,CAAAA,CAAmB,SAAWqC,EAAAA,CAAmBF,CAAY,CAAA,CAC/EG,CAAAA,CAAoBF,CAAAA,CACtB,CACE,GAAA,CAAKA,CAAAA,CACL,KAAA,CAAOD,CACT,CAAA,CACA,MAAA,CAEJrJ,CAAAA,CAAY,CACV,KAAM,iBAAA,CACN,OAAA,CAAS,CACP,CAACyH,GAAc,EAAG,CAChB,OAAA,CAAS+B,CAAAA,CACT,UAAA,CAAY,EACd,CACF,CACF,CAAC,CAAA,CAED,MAAA,CAAO,UAAA,CAAW,IAAM,CACtB3C,CAAAA,CAAe,CACb,IAAA,CAAM,kBAAA,CACN,OAAA,CAAS,CACP,WAAA,CAAa5E,CAAAA,EAAS,MAAA,CACtB,uBAAwB,CAAA,CACxB,QAAA,CAAA0E,CAAAA,CACA,UAAA,CAAY,QAAA,CACZ,gBAAA,CAAkB0C,CAAAA,EAAc,IAAA,CAChC,iBAAA,CAAAG,CAAAA,CACA,cAAA,CAAA/B,GAAAA,CACA,IAAA,CAAM,QACR,CACF,CAAC,EACH,CAAA,CAAG,CAAC,EACN,CAEA,SAASgC,CAAAA,CAAe5W,CAAAA,CAAuBoW,CAAAA,CAA8C,CAC3FpW,CAAAA,CAAM,eAAA,EAAgB,CAElBoW,GAAY,KAAA,EAAS,OAAOA,CAAAA,CAAW,KAAA,EAAU,QAAA,EAAY,MAAA,GAAUA,CAAAA,CAAW,KAAA,EACpF,MAAA,CAAO,IAAA,CAAK,CAAA,EAAGC,GAAe,CAAA,EAAGD,CAAAA,CAAW,KAAA,CAAM,IAAI,CAAA,WAAA,CAAA,CAAe,QAAQ,EAEjF,CAEA,OACEjZ,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS0S,CAAAA,CACT,IAAA,CAAM3H,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAA9K,CAAM,CAAA,GACfjD,IAAAA,CAACkD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAhD,GAAAA,CAACgW,CAAAA,CAAA,CAAU,OAAA,CAAS9Q,CAAAA,CAAK,QAAA,CAAA0Q,CAAAA,CAAM,EAC9B3D,CAAAA,EAAS,OAAA,CAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,QAAA,CAAAhE,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC3EjS,GAAAA,CAACiD,CAAAA,CAAA,CAAY,SAAA,CAAU,6DACrB,QAAA,CAAAnD,IAAAA,CAAC,KAAA,CAAA,CACC,eAAA,CAAe,CAAA,eAAA,EAAkB+N,CAAI,CAAA,CAAA,CACrC,eAAA,CAAeqE,GAAAA,CACf,SAAA,CAAW,CAAA,iPAAA,EACTA,GAAAA,CAAS,2DAAA,CAA8D,EACzE,IAAImF,CAAAA,CAAa,mEAAA,CAAsE,kCAAkC,CAAA,mBAAA,CAAA,CACzH,OAAA,CAAUuB,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClB3B,CAAAA,CAAW,SAAS,KAAA,EAAM,CAC1BA,CAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1B9E,GAAAA,CAAU,IAAI,EAChB,CAAA,CACA,SAAA,CAAYyG,CAAAA,EAAM,CACZA,CAAAA,CAAE,MAAQ,OAAA,EACZzG,GAAAA,CAAU,IAAI,CAAA,CAGZyG,CAAAA,CAAE,GAAA,GAAQ,QAAA,GACZA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClB3B,CAAAA,CAAW,SAAS,IAAA,EAAK,CACzB9E,GAAAA,CAAU,KAAK,CAAA,EAEnB,CAAA,CACA,UAAA,CAAayG,CAAAA,EAAM,CACblD,GAAAA,GAIJkD,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,iBAAgB,CAClBtB,CAAAA,CAAc,IAAI,CAAA,EACpB,CAAA,CACA,WAAA,CAAcsB,CAAAA,EAAM,CACdlD,GAAAA,GAIJkD,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,GACFtB,CAAAA,CAAc,IAAI,CAAA,EACpB,CAAA,CACA,WAAA,CAAcsB,CAAAA,EAAM,CACdlD,GAAAA,GAIJkD,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClBtB,EAAc,KAAK,CAAA,EACrB,CAAA,CACA,MAAA,CAASsB,CAAAA,EAAM,CAKb,GAJAA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClBtB,CAAAA,CAAc,KAAK,CAAA,CAEf5B,GAAAA,CACF,OAGF,IAAM6C,CAAAA,CAAOK,CAAAA,CAAE,YAAA,CAAa,KAAA,EAASA,CAAAA,CAAE,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA,CAE3D/C,CAAAA,CAAY0C,EAAMxV,CAAAA,CAAM,KAAK,EAC/B,CAAA,CACA,GAAA,CAAKkU,CAAAA,CACL,IAAA,CAAK,UAAA,CACL,QAAA,CAAU,CAAA,CAEV,QAAA,CAAA,CAAAnX,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iCAEZ,QAAA,CAAA,CAAA,CAAEiD,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,EAAQ,CAACoU,CAAAA,CAC7CrX,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,qFAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC0Z,KAAAA,CAAA,CAAU,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAE,0BAAA,CAAA,CACjD,CAAA,CACA5Z,IAAAA,CAAC6C,GAAAA,CAAA,CACC,SAAA,CAAU,8EACV,QAAA,CAAU+S,GAAAA,CACV,EAAA,CAAIxQ,CAAAA,CACJ,OAAA,CAASiU,CAAAA,CACT,OAAA,CAAQ,OAAA,CAER,QAAA,CAAA,CAAAnZ,GAAAA,CAAC2Z,MAAAA,CAAA,CAAW,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAE,QAAA,CAAA,CAElD,CAAA,CACA7Z,IAAAA,CAAC6C,GAAAA,CAAA,CACC,SAAA,CAAU,0EAAA,CACV,QAAA,CAAU+S,GAAAA,CACV,OAAA,CAAS0D,CAAAA,CACT,OAAA,CAAQ,OAAA,CAER,QAAA,CAAA,CAAApZ,GAAAA,CAAC4Z,OAAA,CAAW,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAE,QAAA,CAAA,CAElD,CAAA,CAAA,CACF,CAAA,CACE,IAAA,CAEF7W,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAkC,IAAA,EAAQ,CAACmP,GAAAA,CACxDpS,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CACX,QAAA,CAAA,CAAA,CAAA,IAAM,CACN,IAAMkG,CAAAA,CAAQjD,CAAAA,CAAM,KAAA,EAAO,KAAA,CACrBgV,CAAAA,CAAO/R,CAAAA,EAAO,QAAA,CACd2K,CAAAA,CAAO3K,GAAO,IAAA,EAAQ,EAAA,CAK5B,GAJgB,CAAA,EACb+R,CAAAA,EAAQA,CAAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAM,mCAAA,CAAoC,IAAA,CAAKpH,CAAI,CAAA,CAAA,CAIpF,OACE3Q,IAAC,KAAA,CAAA,CACC,SAAA,CAAU,6EAAA,CACV,GAAA,CAAK,CAAA,EAAGkZ,GAAe,CAAA,EAAGlT,CAAAA,CAAM,IAAI,CAAA,mBAAA,CAAA,CACpC,GAAA,CAAI,UAAA,CACN,CAAA,CAIJ,IAAMqS,GAAMF,CAAAA,CAAiBnS,CAAAA,CAAM,gBAAA,CAAkBA,CAAAA,CAAM,QAAQ,CAAA,CAC7D6T,EAAAA,CACJC,aAAAA,CACAzB,EAAG,CAAA,CAEL,OACErY,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yJACb,QAAA,CAAAA,GAAAA,CAAC+Z,QAAAA,CAAA,CAAa,SAAA,CAAW1B,EAAAA,CAAM,GAAIwB,EAAAA,EAAS,EAAC,CAAI,CAAA,CACnD,CAEJ,CAAA,GAAG,CACFpB,IAAO1V,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAqB,IAAI,CAAA,CAC9C/C,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8CAAA,CAA+C,CAAA,CAAA,CAC7D+C,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAqB,QAAA,CAAA,CAClCA,EAAM,KAAA,EAAO,KAAA,EAAqB,KAAA,EAAA,CAAUA,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAqB,MAAA,CAC9EjD,IAAAA,CAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/E,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+CAA+C,CAAA,CAAA,CAC7D+C,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAqB,KAAA,CAAM,GAAA,CAAA,CAAGA,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAqB,MAAA,CAAO,IAAA,CAAA,CACxF,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACE,KACH,CAAEA,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,EAAQoU,CAAAA,EAC5CrX,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKmX,EACL,GAAA,CAAI,SAAA,CACJ,SAAA,CAAU,0FAAA,CACZ,CAAA,CAAE,kBAAA,CAAA,CAEJ,CAAA,CAED,CAAEpU,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,EAAQ,CAACoU,CAAAA,EAAsBI,EACnEzX,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8GAAA,CACb,QAAA,CAAAA,GAAAA,CAACga,IAAAA,CAAA,CAAgB,SAAA,CAAU,yCAAyC,CAAA,CACtE,CAAA,CAAM,mBAAA,CAAA,CAER,CAAA,CACE,IAAA,CAEFjX,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,CACnC/C,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAAF,KAAC8L,GAAAA,CAAA,CAAa,KAAA,CAAO,KAAA,CACnB,QAAA,CAAA,CAAA5L,GAAAA,CAACuL,GAAAA,CAAA,CACC,QAAA,CAAAzL,IAAAA,CAAC0L,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAxL,GAAAA,CAACyL,IAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAzL,GAAAA,CAAC6L,GAAAA,CAAA,CAAoB,OAAA,CAAO,IAAA,CAC1B,QAAA,CAAA7L,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,6EAAA,CACV,OAAA,CAAUE,CAAAA,EAAU,CAClBA,CAAAA,CAAM,eAAA,GACR,CAAA,CACA,aAAA,CAAgBA,CAAAA,EAAU,CACxBA,CAAAA,CAAM,eAAA,GACR,CAAA,CACA,IAAA,CAAK,OACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAA7C,GAAAA,CAACia,QAAAA,CAAA,CAAa,SAAA,CAAU,eAAA,CAAgB,CAAA,CAC1C,CAAA,CACF,CAAA,CACF,CAAA,CACAja,GAAAA,CAAC2L,GAAAA,CAAA,CACC,QAAA,CAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,cAAA,CAAY,CAAA,CACjB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACAF,IAAAA,CAACiM,GAAAA,CAAA,CAAoB,SAAA,CAAU,SAAA,CAC7B,QAAA,CAAA,CAAAjM,KAACoa,CAAAA,CAAA,CACC,QAAA,CAAA,CAAApa,IAAAA,CAACkM,GAAAA,CAAA,CAAiB,QAAA,CAAU0J,GAAAA,CAAU,OAAA,CAASyD,CAAAA,CAC7C,QAAA,CAAA,CAAAnZ,GAAAA,CAAC2Z,MAAAA,CAAA,CAAW,UAAU,uBAAA,CAAwB,CAAA,CAC9C3Z,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,QAAA,CAAM,CAAA,CAAA,CACd,CAAA,CACAF,IAAAA,CAACkM,GAAAA,CAAA,CAAiB,QAAA,CAAU0J,GAAAA,CAAU,OAAA,CAAS0D,CAAAA,CAC7C,UAAApZ,GAAAA,CAAC0Z,KAAAA,CAAA,CAAU,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC7C1Z,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,cAAA,CAAY,CAAA,CAAA,CACpB,CAAA,CAAA,CACF,CAAA,CACAA,GAAAA,CAACoM,CAAAA,CAAA,EAAsB,CAAA,CACvBtM,IAAAA,CAACoa,CAAAA,CAAA,CACC,QAAA,CAAA,CAAApa,IAAAA,CAACkM,GAAAA,CAAA,CAAiB,OAAA,CAAU4M,CAAAA,EAAMa,CAAAA,CAAeb,CAAAA,CAAG7V,CAAAA,CAAM,KAAK,EAC7D,QAAA,CAAA,CAAA/C,GAAAA,CAACma,QAAAA,CAAA,CAAa,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAChDna,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CAChB,CAAA,CACAF,IAAAA,CAACkM,GAAAA,CAAA,CAAiB,OAAA,CAAU4M,CAAAA,EAAMI,CAAAA,CAAcJ,CAAAA,CAAG7V,CAAAA,CAAM,KAAK,CAAA,CAC5D,QAAA,CAAA,CAAA/C,GAAAA,CAACoa,IAAAA,CAAA,CAAS,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC5Cpa,IAAC,MAAA,CAAA,CAAK,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CAChB,CAAA,CAAA,CACF,CAAA,CACAA,GAAAA,CAACoM,CAAAA,CAAA,EAAsB,CAAA,CACvBtM,IAAAA,CAACkM,GAAAA,CAAA,CAAiB,QAAA,CAAU0J,GAAAA,CAAU,QAASqD,CAAAA,CAC7C,QAAA,CAAA,CAAA/Y,GAAAA,CAACqa,YAAAA,CAAA,CAAe,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAClDra,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,aAAA,CAAW,CAAA,CAAA,CACnB,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EACF,CAAA,CACE,IAAA,CACJA,GAAAA,CAAA+E,QAAAA,CAAA,CACG,QAAA,CAAA,CAACmN,GAAAA,GAAYnP,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,EAAQoU,CAAAA,CAAAA,CACvDnX,GAAAA,CAACuL,GAAAA,CAAA,CACC,QAAA,CAAAzL,IAAAA,CAAC0L,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAxL,GAAAA,CAACyL,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAzL,GAAAA,CAAC2C,GAAAA,CAAA,CACC,UAAU,6HAAA,CACV,SAAA,CAAYiW,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,OAAA,GACZ3B,CAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1BA,CAAAA,CAAW,OAAA,EAAS,KAAA,IAExB,CAAA,CACA,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAAjX,GAAAA,CAACsa,SAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CACF,CAAA,CACAta,IAAC2L,GAAAA,CAAA,CACC,QAAA,CAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,cAAA,CAAY,CAAA,CACjB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACE,IAAA,CACN,CAAA,CACCkS,GAAAA,GAAYnP,CAAAA,CAAM,OAAO,KAAA,EAAsB,IAAA,EAAQoU,CAAAA,CAAAA,CACtDnX,GAAAA,CAACuL,GAAAA,CAAA,CACC,QAAA,CAAAzL,IAAAA,CAAC0L,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAxL,GAAAA,CAACyL,GAAAA,CAAA,CAAe,QAAO,IAAA,CACrB,QAAA,CAAAzL,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,6HAAA,CACV,OAAA,CAAUiW,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,iBAAgB,CAClB3B,CAAAA,CAAW,OAAA,EAAS,IAAA,EAAK,CACzB9E,GAAAA,CAAU,KAAK,EACjB,CAAA,CACA,SAAA,CAAYyG,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,UACZA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClB3B,CAAAA,CAAW,OAAA,EAAS,IAAA,EAAK,CACzB9E,GAAAA,CAAU,KAAK,CAAA,EAEnB,CAAA,CACA,KAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAAnS,GAAAA,CAACua,GAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CACF,CAAA,CACAva,GAAAA,CAAC2L,GAAAA,CAAA,CACC,QAAA,CAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,OAAA,CAAK,CAAA,CACV,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACAA,GAAAA,CAACwa,CAAAA,CAAA,CACC,SAAA,CAAU,kCACV,YAAA,CAAcrI,GAAAA,CACd,IAAA,CAAMD,GAAAA,GAAW,CAAA,CAASnP,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,EAAS,CAAA,CAAQoU,CAAAA,CAAAA,CAE9E,QAAA,CAAAnX,GAAAA,CAACya,CAAAA,CAAA,CAAmB,SAAA,CAAU,WAAA,CAC5B,QAAA,CAAAza,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+BAAA,CAAgC,EAAA,CAAI,CAAA,eAAA,EAAkB6N,CAAI,CAAA,CAAA,CACrE,QAAA,CAAA9K,CAAAA,CAAM,KAAA,EAAO,OAAkC,IAAA,CAAA,CAC5C,IAAM,CACL,IAAMiD,CAAAA,CAAQjD,CAAAA,CAAM,KAAA,EAAO,KAAA,CACrBgV,CAAAA,CAAO/R,CAAAA,EAAO,QAAA,CACd2K,CAAAA,CAAO3K,CAAAA,EAAO,IAAA,EAAQ,GAK5B,GAJgB,CAAA,EACb+R,CAAAA,EAAQA,CAAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAM,mCAAA,CAAoC,IAAA,CAAKpH,CAAI,CAAA,CAAA,CAIpF,OACE3Q,GAAAA,CAAC,KAAA,CAAA,CACC,UAAU,iEAAA,CACV,GAAA,CAAK,CAAA,EAAGkZ,GAAe,CAAA,EAAGlT,CAAAA,CAAM,IAAI,CAAA,mBAAA,CAAA,CACpC,GAAA,CAAI,UAAA,CACN,CAAA,CAIJ,IAAMqS,EAAAA,CAAMF,CAAAA,CAAiBnS,EAAM,gBAAA,CAAkBA,CAAAA,CAAM,QAAQ,CAAA,CAC7D6T,EAAAA,CACJC,aAAAA,CACAzB,EAAG,CAAA,CAEL,OACEvY,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oJAAA,CACb,QAAA,CAAA,CAAAE,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kJAAA,CACb,QAAA,CAAAA,GAAAA,CAAC+Z,QAAAA,CAAA,CAAa,SAAA,CAAW1B,EAAAA,CAAM,GAAIwB,EAAAA,EAAS,EAAC,CAAI,CAAA,CACnD,EACA/Z,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oBAAA,CACZ,QAAA,CAAA,CAAAkG,CAAAA,CAAM,gBAAA,EAAoB,MAAA,CAAO,QAAA,CAAIyS,EAAAA,CAAMzS,CAAAA,CAAM,IAAI,CAAA,CAAE,QAAA,CAAIA,EAAM,QAAA,CAAA,CACpE,CAAA,CACAhG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oBAAA,CAAqB,QAAA,CAAA,uBAAA,CAAqB,CAAA,CAAA,CAC3D,CAEJ,CAAA,GAAG,CACH,IAAA,CACN,CAAA,CACF,CAAA,CACF,EACCuX,CAAAA,CACCvX,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qHAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mEAAA,CAAoE,CAAA,CACrF,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACF,CAAA,CACAA,GAAAA,CAAC,OAAA,CAAA,CACC,MAAA,CAAQiS,CAAAA,EAAS,MAAA,CAASA,CAAAA,CAAQ,MAAA,CAAS,SAAA,CAC3C,SAAA,CAAU,WAAA,CACV,QAAA,CAAUyD,GAAAA,CACV,EAAA,CAAI,CAAA,YAAA,EAAe7H,CAAI,GACvB,QAAA,CAAW+K,CAAAA,EAAM,CACf,IAAML,CAAAA,CAAOK,CAAAA,CAAE,aAAA,CAAc,KAAA,EAASA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,CAAC,CAAA,CAE7D/C,CAAAA,CAAY0C,EAAMxV,CAAAA,CAAM,KAAK,EAC/B,CAAA,CACA,GAAA,CAAKiU,CAAAA,CACL,IAAA,CAAK,MAAA,CACP,CAAA,CACAhX,GAAAA,CAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CAEA,SAASyU,EAAAA,CAAuB5R,CAAAA,CAAmC,CACjE,GAAI,CAACA,CAAAA,EAAS,OAAOA,CAAAA,EAAU,QAAA,EAAY,EAAE,KAAA,GAASA,CAAAA,CAAAA,EAAU,EAAE,MAAA,GAAUA,CAAAA,CAAAA,CAC1E,OAAO,IAAA,CAGT,IAAM0U,CAAAA,CAAQ1U,CAAAA,CAEd,OAAO,CACL,GAAA,CAAK,MAAA,CAAO0U,CAAAA,CAAM,GAAA,EAAO,EAAE,EAC3B,IAAA,CAAM,MAAA,CAAOA,CAAAA,CAAM,IAAA,EAAQ,EAAE,CAAA,CAC7B,gBAAA,CAAkB,MAAA,CAAOA,CAAAA,CAAM,gBAAA,EAAoB,EAAE,CAAA,CACrD,IAAA,CAAM,MAAA,CAAOA,EAAM,IAAA,EAAQ,CAAC,CAAA,CAC5B,QAAA,CAAU,MAAA,CAAOA,CAAAA,CAAM,QAAA,EAAY,EAAE,CAAA,CACrC,IAAA,CAAM,MAAA,CAAOA,CAAAA,CAAM,IAAA,EAAQ,EAAE,EAC7B,KAAA,CAAO,MAAA,CAAOA,CAAAA,CAAM,KAAA,EAAS,CAAC,CAAA,CAC9B,MAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAM,MAAA,EAAU,CAAC,CAClC,CACF,CAEA,SAASnB,EAAAA,CAAmBmB,CAAAA,CAAuC,CACjE,OAAI,CAACA,CAAAA,EAAO,GAAA,EAAOA,CAAAA,CAAM,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,CAChC,EAAA,CAGFA,CAAAA,CAAM,GACf,CC9pBO,SAASC,EAAAA,CAAO,CAAE,QAAAnF,CAAAA,CAAS,WAAA,CAAAC,CAAAA,CAAa,QAAA,CAAAC,CAAAA,CAAU,QAAA,CAAAC,CAAS,CAAA,CAA2C,CAC3G,GAAM,CAAE,IAAA,CAAA9H,GAAAA,CAAM,KAAA,CAAA+H,EAAO,OAAA,CAAA3D,CAAAA,CAAS,QAAA,CAAA2I,CAAS,CAAA,CAAInF,CAAAA,CACrCvQ,CAAAA,CAAKmQ,KAAAA,EAAM,CAEjB,SAASQ,GAAAA,CACPhT,CAAAA,CACAiT,CAAAA,CACM,CACN,IAAM+E,CAAAA,CAAWhY,CAAAA,CAAM,aAAA,CAAc,KAAA,CACjCiY,CAAAA,CAGAD,CAAAA,GAAa,EAAA,CACfC,CAAAA,CAAc,EAAA,EAGdA,CAAAA,CAAcF,CAAAA,GAAa,OAAA,CAAU,UAAA,CAAWC,CAAQ,EAAI,QAAA,CAASA,CAAAA,CAAU,EAAE,CAAA,CAG7E,KAAA,CAAMC,CAAW,CAAA,GACnBA,CAAAA,CAAc,EAAA,CAAA,CAAA,CAIlBnF,CAAAA,CAAS9H,GAAAA,CAAM,CACb,GAAGiI,CAAAA,CACH,MAAOgF,CACT,CAAC,EACH,CAEA,SAAS/E,GAAAA,CAAed,CAAAA,CAAkBjP,CAAAA,CAAyC,CACjF2P,CAAAA,CAAS9H,GAAAA,CAAM,CACb,GAAG7H,CAAAA,CACH,SAAUiP,CACZ,CAAC,EACH,CAEA,OACEjV,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS0S,CAAAA,CACT,IAAA,CAAM3H,GAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAA9K,CAAM,CAAA,GACfjD,IAAAA,CAACkD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAhD,GAAAA,CAACgW,CAAAA,CAAA,CAAU,OAAA,CAAS9Q,CAAAA,CAAK,QAAA,CAAA0Q,CAAAA,CAAM,CAAA,CAC9B3D,GAAS,OAAA,CAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,QAAA,CAAAhE,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC3EjS,GAAAA,CAACiD,CAAAA,CAAA,CACC,QAAA,CAAAjD,GAAAA,CAACkD,EAAA,CACC,SAAA,CAAU,sBAAA,CACV,QAAA,CAAUwS,CAAAA,EAAY3S,CAAAA,CAAM,KAAA,EAAO,QAAA,CACnC,EAAA,CAAImC,CAAAA,CACH,GAAGnC,CAAAA,CACJ,QAAA,CAAWF,CAAAA,EAAU,CACnBgT,GAAAA,CAAYhT,CAAAA,CAAOE,CAAAA,CAAM,KAAK,EAChC,CAAA,CACA,IAAA,CAAM6X,CAAAA,GAAa,OAAA,CAAU,KAAA,CAAQ,GAAA,CACrC,IAAA,CAAK,QAAA,CACL,KAAA,CAAQ7X,EAAM,KAAA,EAAO,KAAA,EAAyC,EAAA,CAChE,CAAA,CACF,CAAA,CACA/C,GAAAA,CAAC+U,EAAAA,CAAA,CACC,OAAA,CAAShS,CAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,QAAA,CAAU2S,EACV,QAAA,CAAWT,CAAAA,EAAY,CACrBc,GAAAA,CAAed,CAAAA,CAASlS,CAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,CAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACA/C,IAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CCxEA,SAAS4X,EAAAA,CAAS,CAChB,SAAA,CAAAzJ,EACA,UAAA,CAAA0J,CAAAA,CACA,eAAA,CAAAC,CAAAA,CAAkB,IAAA,CAClB,aAAA,CAAAC,CAAAA,CAAgB,OAAA,CAChB,aAAA,CAAAC,CAAAA,CAAgB,OAAA,CAChB,UAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,EACA,GAAGnK,CACL,CAAA,CAEG,CACD,IAAMoK,CAAAA,CAAoBC,oBAAAA,EAAqB,CAE/C,OACEvb,GAAAA,CAACwb,SAAAA,CAAA,CACC,eAAA,CAAiBP,CAAAA,CACjB,UAAW1J,GAAAA,CACT,wKAAA,CACA,MAAA,CAAO,GAAA,CAAA,yCAAA,CAAA,CACP,MAAA,CAAO,GAAA,CAAA,6CAAA,CAAA,CACPD,CACF,CAAA,CACA,aAAA,CAAe4J,CAAAA,CACf,UAAA,CAAY,CACV,mBAAA,CAAsBO,CAAAA,EAASA,EAAK,cAAA,CAAe,SAAA,CAAW,CAAE,KAAA,CAAO,OAAQ,CAAC,CAAA,CAChF,GAAGL,CACL,CAAA,CACA,UAAA,CAAY,CACV,IAAA,CAAM7J,GAAAA,CAAG,QAAS+J,CAAAA,CAAkB,IAAI,CAAA,CACxC,MAAA,CAAQ/J,GAAAA,CAAG,yDAAA,CAA2D+J,CAAAA,CAAkB,MAAM,CAAA,CAC9F,KAAA,CAAO/J,GAAAA,CAAG,wCAAA,CAA0C+J,CAAAA,CAAkB,KAAK,EAC3E,GAAA,CAAK/J,GAAAA,CACH,iGAAA,CACA+J,CAAAA,CAAkB,GACpB,CAAA,CACA,eAAA,CAAiB/J,GAAAA,CACfoB,GAAAA,CAAe,CAAE,OAAA,CAASwI,CAAc,CAAC,CAAA,CACzC,0EACAG,CAAAA,CAAkB,eACpB,CAAA,CACA,WAAA,CAAa/J,GAAAA,CACXoB,GAAAA,CAAe,CAAE,OAAA,CAASwI,CAAc,CAAC,CAAA,CACzC,yEAAA,CACAG,CAAAA,CAAkB,WACpB,CAAA,CACA,aAAA,CAAe/J,GAAAA,CACb,4FAAA,CACA+J,CAAAA,CAAkB,aACpB,CAAA,CACA,SAAA,CAAW/J,GAAAA,CACT,6GAAA,CACA+J,CAAAA,CAAkB,SACpB,CAAA,CACA,aAAA,CAAe/J,GAAAA,CACb,gKAAA,CACA+J,EAAkB,aACpB,CAAA,CACA,QAAA,CAAU/J,GAAAA,CAAG,mDAAA,CAAqD+J,CAAAA,CAAkB,QAAQ,CAAA,CAC5F,aAAA,CAAe/J,GAAAA,CACb,+BAAA,CACA2J,CAAAA,GAAkB,OAAA,CACd,YAAA,CACA,2JACJI,CAAAA,CAAkB,aACpB,CAAA,CACA,KAAA,CAAO,8BAAA,CACP,QAAA,CAAU/J,GAAAA,CAAG,SAAA,CAAW+J,CAAAA,CAAkB,QAAQ,CAAA,CAClD,OAAA,CAAS/J,GAAAA,CACP,oHAAA,CACA+J,EAAkB,OACpB,CAAA,CACA,IAAA,CAAM/J,GAAAA,CAAG,2BAAA,CAA6B+J,CAAAA,CAAkB,IAAI,CAAA,CAC5D,kBAAA,CAAoB/J,GAAAA,CAAG,mCAAA,CAAqC+J,CAAAA,CAAkB,kBAAkB,CAAA,CAChG,YAAa/J,GAAAA,CAAG,0DAAA,CAA4D+J,CAAAA,CAAkB,WAAW,CAAA,CACzG,GAAA,CAAK/J,GAAAA,CACH,8JAAA,CACAL,CAAAA,CAAM,cAAA,CACF,6DAAA,CACA,4DAAA,CACJoK,CAAAA,CAAkB,GACpB,EACA,WAAA,CAAa/J,GAAAA,CAAG,iDAAA,CAAmD+J,CAAAA,CAAkB,WAAW,CAAA,CAChG,YAAA,CAAc/J,GAAAA,CAAG,oCAAA,CAAsC+J,CAAAA,CAAkB,YAAY,CAAA,CACrF,SAAA,CAAW/J,GAAAA,CAAG,kDAAmD+J,CAAAA,CAAkB,SAAS,CAAA,CAC5F,KAAA,CAAO/J,GAAAA,CACL,8GAAA,CACA+J,CAAAA,CAAkB,KACpB,CAAA,CACA,OAAA,CAAS/J,GAAAA,CAAG,iEAAA,CAAmE+J,CAAAA,CAAkB,OAAO,EACxG,QAAA,CAAU/J,GAAAA,CAAG,wCAAA,CAA0C+J,CAAAA,CAAkB,QAAQ,CAAA,CACjF,MAAA,CAAQ/J,GAAAA,CAAG,WAAA,CAAa+J,CAAAA,CAAkB,MAAM,CAAA,CAChD,GAAGN,CACL,EACA,UAAA,CAAY,CACV,IAAA,CAAM,CAAC,CAAE,SAAA,CAAA1J,CAAAA,CAAW,OAAA,CAAAoK,CAAAA,CAAS,GAAGxK,CAAM,CAAA,GAC7BlR,GAAAA,CAAC,KAAA,CAAA,CAAI,YAAU,UAAA,CAAW,GAAA,CAAK0b,CAAAA,CAAS,SAAA,CAAWnK,GAAAA,CAAGD,CAAS,CAAA,CAAI,GAAGJ,CAAAA,CAAO,CAAA,CAEtF,OAAA,CAAS,CAAC,CAAE,SAAA,CAAAI,EAAW,WAAA,CAAAqK,CAAAA,CAAa,GAAGzK,CAAM,CAAA,GACvCyK,CAAAA,GAAgB,MAAA,CACX3b,GAAAA,CAAC4b,eAAAA,CAAA,CAAgB,SAAA,CAAWrK,GAAAA,CAAG,QAAA,CAAUD,CAAS,EAAI,GAAGJ,CAAAA,CAAO,CAAA,CAGrEyK,CAAAA,GAAgB,OAAA,CACX3b,GAAAA,CAAC6b,gBAAAA,CAAA,CAAiB,SAAA,CAAWtK,GAAAA,CAAG,QAAA,CAAUD,CAAS,CAAA,CAAI,GAAGJ,EAAO,CAAA,CAGnElR,GAAAA,CAAC8b,eAAAA,CAAA,CAAgB,SAAA,CAAWvK,GAAAA,CAAG,QAAA,CAAUD,CAAS,CAAA,CAAI,GAAGJ,CAAAA,CAAO,CAAA,CAEzE,SAAA,CAAW6K,EAAAA,CACX,WAAY,CAAC,CAAE,QAAA,CAAA/O,CAAAA,CAAU,GAAGkE,CAAM,CAAA,GAE9BlR,GAAAA,CAAC,IAAA,CAAA,CAAI,GAAGkR,CAAAA,CACN,QAAA,CAAAlR,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gFAAA,CACZ,QAAA,CAAAgN,CAAAA,CACH,CAAA,CACF,CAAA,CAGJ,GAAGqO,CACL,CAAA,CACC,GAAGnK,CAAAA,CACN,CAEJ,CAEA,SAAS6K,EAAAA,CAAkB,CAAE,SAAA,CAAAzK,CAAAA,CAAW,GAAA,CAAA0K,CAAAA,CAAK,SAAA,CAAAC,CAAAA,CAAW,GAAG/K,CAAM,CAAA,CAA2C,CAC1G,IAAMoK,CAAAA,CAAoBC,oBAAAA,EAAqB,CAEzCnF,CAAAA,CAAY,EAAA,CAAA,MAAA,CAA0B,IAAI,CAAA,CAChD,OAAM,EAAA,CAAA,SAAA,CAAU,IAAM,CAChB6F,CAAAA,CAAU,OAAA,EAAS7F,CAAAA,CAAI,OAAA,EAAS,KAAA,GACtC,CAAA,CAAG,CAAC6F,EAAU,OAAO,CAAC,CAAA,CAGpBjc,GAAAA,CAAC2C,GAAAA,CAAA,CACC,GAAA,CAAKyT,CAAAA,CACL,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,MAAA,CACL,UAAA,CAAU4F,CAAAA,CAAI,KAAK,kBAAA,EAAmB,CACtC,sBAAA,CACEC,CAAAA,CAAU,QAAA,EAAY,CAACA,CAAAA,CAAU,WAAA,EAAe,CAACA,CAAAA,CAAU,SAAA,EAAa,CAACA,CAAAA,CAAU,YAAA,CAErF,mBAAkBA,CAAAA,CAAU,WAAA,CAC5B,gBAAA,CAAgBA,CAAAA,CAAU,SAAA,CAC1B,mBAAA,CAAmBA,CAAAA,CAAU,YAAA,CAC7B,SAAA,CAAW1K,GAAAA,CACT,48BAAA,CACA+J,CAAAA,CAAkB,GAAA,CAClBhK,CACF,EACC,GAAGJ,CAAAA,CACN,CAEJ,CCpJO,SAASgL,EAAAA,CAAS,CACvB,OAAA,CAAA1G,CAAAA,CACA,YAAAC,GAAAA,CACA,SAAA,CAAAmB,CAAAA,CACA,QAAA,CAAAlB,CAAAA,CACA,QAAA,CAAAC,GACF,CAAA,CAA6C,CAC3C,GAAM,CAAE,IAAA,CAAA9H,CAAAA,CAAM,KAAA,CAAA+H,EAAO,OAAA,CAAA3D,CAAQ,CAAA,CAAIwD,GAAAA,CAC3BvQ,CAAAA,CAAKmQ,KAAAA,EAAM,CAEjB,SAAS8G,GAAAA,CAAaV,CAAAA,CAAwB3F,CAAAA,CAAiD,CAC7FH,GAAAA,CAAS9H,CAAAA,CAAM,CACb,GAAGiI,CAAAA,CACH,KAAA,CAAO2F,CAAAA,CAAOA,CAAAA,CAAK,WAAA,EAAY,CAAI,EACrC,CAAC,EACH,CAEA,SAAS1F,GAAAA,CAAed,CAAAA,CAAkBjP,EAAyC,CACjF2P,GAAAA,CAAS9H,CAAAA,CAAM,CACb,GAAG7H,CAAAA,CACH,QAAA,CAAUiP,CACZ,CAAC,EACH,CAEA,SAAS8D,GAAAA,CAAelW,CAAAA,CAA6B,CACnDA,CAAAA,CAAM,cAAA,EAAe,CACrB8S,GAAAA,CAAS9H,CAAAA,CAAM,CAAE,GAAG+I,CAAAA,CAAU/I,CAAI,CAAA,CAAG,KAAA,CAAO,MAAU,CAAC,EACzD,CAEA,OACE7N,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS0S,CAAAA,CACT,IAAA,CAAM3H,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAA9K,CAAM,CAAA,GACfjD,KAACkD,CAAAA,CAAA,CACC,SAAA,CAAY4V,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,QAAA,GACZA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,EAEtB,EAEA,QAAA,CAAA,CAAA5Y,GAAAA,CAACgW,CAAAA,CAAA,CAAU,OAAA,CAAS9Q,CAAAA,CAAK,QAAA,CAAA0Q,CAAAA,CAAM,CAAA,CAC9B3D,CAAAA,EAAS,OAAA,CAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,SAAAhE,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC3EjS,GAAAA,CAACiD,CAAAA,CAAA,CACC,QAAA,CAAAnD,IAAAA,CAACsc,CAAAA,CAAA,CACC,QAAA,CAAA,CAAApc,GAAAA,CAACqc,CAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAArc,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAW4O,GAAAA,CACT,oGAAA,CACA,CAACxO,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAS,0BACzB,EACA,QAAA,CAAU2S,CAAAA,EAAY3S,CAAAA,CAAM,KAAA,EAAO,QAAA,CACnC,EAAA,CAAImC,CAAAA,CACJ,OAAA,CAAQ,SAAA,CAER,QAAA,CAAApF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CACb,QAAA,CAAA+C,CAAAA,CAAM,KAAA,EAAO,KAAA,CACVuZ,MAAAA,CAAO,IAAI,IAAA,CAAKvZ,CAAAA,CAAM,KAAA,CAAM,KAAe,CAAA,CAAG,KAAK,CAAA,CACnD,MAAA,CACAuZ,MAAAA,CAAO,IAAI,IAAA,CAAKvZ,CAAAA,CAAM,KAAA,CAAM,KAAe,CAAA,CAAG,OAAO,CAAA,CACrD,sBAAA,CACN,CAAA,CACAjD,IAAAA,CAAC,OAAI,SAAA,CAAU,kCAAA,CACZ,QAAA,CAAA,CAAAiD,CAAAA,CAAM,KAAA,EAAO,KAAA,EACZ/C,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,mFAAA,CACV,OAAA,CAAU4Y,CAAAA,EAAM,CACdA,CAAAA,CAAE,iBAAgB,CAClBG,GAAAA,CAAeH,CAAC,EAClB,CAAA,CACA,IAAA,CAAK,QAAA,CACL,YAAA,CAAW,YAAA,CAEX,QAAA,CAAA5Y,GAAAA,CAACua,GAAAA,CAAA,CAAU,SAAA,CAAU,gBAAgB,CAAA,CACvC,CAAA,CAEFva,GAAAA,CAACuc,QAAAA,CAAA,CAAa,SAAA,CAAU,wEAAA,CAAyE,CAAA,CAAA,CACnG,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CACAzc,IAAAA,CAAC0c,GAAAA,CAAA,CAAe,SAAA,CAAU,kBAAA,CAAmB,KAAA,CAAM,OAAA,CACjD,QAAA,CAAA,CAAAxc,GAAAA,CAAC+a,EAAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAA,CAAUhY,CAAAA,CAAM,KAAA,EAAO,KAAA,CAAQ,IAAI,IAAA,CAAKA,CAAAA,CAAM,KAAA,CAAM,KAAe,CAAA,CAAI,MAAA,CACvE,QAAA,CAAW0Y,CAAAA,EAASU,GAAAA,CAAaV,CAAAA,CAAM1Y,CAAAA,CAAM,KAAK,CAAA,CAClD,YAAA,CAAY,KACd,CAAA,CACAjD,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,OAAA,CAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,SAAA,CAAU,2BAAA,CAA4B,QAAA,CAAA,MAAA,CAE5D,CAAA,CACAA,IAACkD,CAAAA,CAAA,CACC,SAAA,CAAU,qBAAA,CACV,EAAA,CAAG,MAAA,CACH,QAAA,CAAW0V,CAAAA,EAAM,CACf,IAAM6D,CAAAA,CAAY7D,CAAAA,CAAE,MAAA,CAAO,KAAA,CACrB,CAAC8D,CAAAA,CAAOC,CAAO,CAAA,CAAIF,CAAAA,CAAU,KAAA,CAAM,GAAG,CAAA,CAEtChB,CAAAA,CAAO1Y,CAAAA,CAAM,KAAA,EAAO,KAAA,CAAQ,IAAI,IAAA,CAAKA,CAAAA,CAAM,MAAM,KAAe,CAAA,CAAI,IAAI,IAAA,CAC9E0Y,CAAAA,CAAK,QAAA,CAAS,QAAA,CAASiB,CAAK,CAAC,CAAA,CAC7BjB,CAAAA,CAAK,UAAA,CAAW,QAAA,CAASkB,CAAO,CAAC,CAAA,CAEjChH,GAAAA,CAAS9H,CAAAA,CAAM,CACb,GAAG9K,CAAAA,CAAM,KAAA,CACT,KAAA,CAAO0Y,CAAAA,CAAK,WAAA,EACd,CAAC,EACH,CAAA,CACA,KAAK,MAAA,CACL,KAAA,CAAO1Y,CAAAA,CAAM,KAAA,EAAO,KAAA,CAAQuZ,MAAAA,CAAO,IAAI,IAAA,CAAKvZ,CAAAA,CAAM,KAAA,CAAM,KAAe,CAAA,CAAG,OAAO,CAAA,CAAI,GACvF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACA/C,GAAAA,CAAC+U,EAAAA,CAAA,CACC,OAAA,CAAShS,CAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,QAAA,CAAU2S,EACV,QAAA,CAAWT,CAAAA,EAAY,CACrBc,GAAAA,CAAed,CAAAA,CAASlS,CAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,CAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACA/C,IAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CCxGO,SAASyZ,EAAAA,CAA8BC,CAAAA,CAA8D,CAC1G,OAAIA,GACK,IAIX,CC3BO,IAAMC,EAAAA,CAAkBC,qBAAAA,CAAsB,CACnD,CACE,KAAA,CAAO,MAAA,CACP,WAAA,CAAa,oCAAA,CACb,YAAa,CAAC,GAAA,CAAK,WAAW,CAAA,CAC9B,IAAA,CAAM/c,GAAAA,CAACuV,IAAAA,CAAA,CAAK,IAAA,CAAM,EAAA,CAAI,CAAA,CACtB,OAAA,CAAS,CAAC,CAAE,OAAAsH,CAAAA,CAAQ,KAAA,CAAAG,CAAM,CAAA,GAAM,CAC9BH,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYG,CAAK,CAAA,CAAE,UAAA,CAAW,YAAa,WAAW,CAAA,CAAE,GAAA,GACjF,CACF,CAAA,CACA,CACE,KAAA,CAAO,YAAA,CACP,WAAA,CAAa,gCAAA,CACb,WAAA,CAAa,CAAC,MAAA,CAAQ,OAAQ,MAAA,CAAQ,OAAA,CAAS,UAAU,CAAA,CACzD,IAAA,CAAMhd,GAAAA,CAACid,WAAAA,CAAA,CAAY,IAAA,CAAM,EAAA,CAAI,CAAA,CAC7B,OAAA,CAAS,CAAC,CAAE,OAAAJ,CAAAA,CAAQ,KAAA,CAAAG,CAAM,CAAA,GAAM,CAC9BH,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYG,CAAK,CAAA,CAAE,cAAA,GAAiB,GAAA,GAC7D,CACF,CAAA,CACA,CACE,KAAA,CAAO,WAAA,CACP,WAAA,CAAa,sBAAA,CACb,WAAA,CAAa,CAAC,OAAA,CAAS,KAAA,CAAO,OAAO,EACrC,IAAA,CAAMhd,GAAAA,CAACkd,QAAAA,CAAA,CAAS,IAAA,CAAM,EAAA,CAAI,CAAA,CAC1B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAL,CAAAA,CAAQ,KAAA,CAAAG,CAAM,IAAM,CAC9BH,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYG,CAAK,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,CAAC,CAAA,CAAE,GAAA,GAC7E,CACF,CAAA,CACA,CACE,KAAA,CAAO,WAAA,CACP,WAAA,CAAa,yBAAA,CACb,WAAA,CAAa,CAAC,UAAA,CAAY,QAAQ,EAClC,IAAA,CAAMhd,GAAAA,CAACmd,QAAAA,CAAA,CAAS,IAAA,CAAM,EAAA,CAAI,CAAA,CAC1B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAN,CAAAA,CAAQ,KAAA,CAAAG,CAAM,IAAM,CAC9BH,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYG,CAAK,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,CAAC,CAAA,CAAE,GAAA,GAC7E,CACF,CAAA,CACA,CACE,KAAA,CAAO,WAAA,CACP,WAAA,CAAa,wBAAA,CACb,WAAA,CAAa,CAAC,UAAA,CAAY,OAAO,CAAA,CACjC,KAAMhd,GAAAA,CAACod,QAAAA,CAAA,CAAS,IAAA,CAAM,EAAA,CAAI,CAAA,CAC1B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAP,CAAAA,CAAQ,KAAA,CAAAG,CAAM,CAAA,GAAM,CAC9BH,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYG,CAAK,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,CAAC,EAAE,GAAA,GAC7E,CACF,CAAA,CACA,CACE,KAAA,CAAO,aAAA,CACP,WAAA,CAAa,8BAAA,CACb,WAAA,CAAa,CAAC,WAAA,CAAa,OAAO,CAAA,CAClC,KAAMhd,GAAAA,CAACqd,IAAAA,CAAA,CAAK,IAAA,CAAM,EAAA,CAAI,CAAA,CACtB,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAR,CAAAA,CAAQ,KAAA,CAAAG,CAAM,CAAA,GAAM,CAC9B,IAAMM,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYN,CAAK,CAAA,CAAE,kBAAiB,CAAE,GAAA,GACnE,CACF,CAAA,CACA,CACE,KAAA,CAAO,eAAA,CACP,WAAA,CAAa,+BAAA,CACb,WAAA,CAAa,CAAC,SAAS,CAAA,CACvB,KAAMhd,GAAAA,CAACud,WAAAA,CAAA,CAAY,IAAA,CAAM,EAAA,CAAI,CAAA,CAC7B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAV,CAAAA,CAAQ,KAAA,CAAAG,CAAM,CAAA,GAAM,CAC9B,IAAMM,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYN,CAAK,CAAA,CAAE,mBAAkB,CAAE,GAAA,GACpE,CACF,CAAA,CACA,CACE,KAAA,CAAO,OAAA,CACP,WAAA,CAAa,kBAAA,CACb,WAAA,CAAa,CAAC,YAAY,CAAA,CAC1B,KAAMhd,GAAAA,CAACwd,SAAAA,CAAA,CAAU,IAAA,CAAM,EAAA,CAAI,CAAA,CAC3B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAX,CAAAA,CAAQ,KAAA,CAAAG,CAAM,CAAA,GAAM,CAC9B,IAAMM,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CACG,KAAA,EAAM,CACN,KAAA,EAAM,CACN,WAAA,CAAYN,CAAK,CAAA,CACjB,WAAW,WAAA,CAAa,WAAW,CAAA,CACnC,gBAAA,EAAiB,CACjB,GAAA,GACL,CACF,CAAA,CACA,CACE,KAAA,CAAO,MAAA,CACP,WAAA,CAAa,yBAAA,CACb,YAAa,CAAC,WAAW,CAAA,CACzB,IAAA,CAAMhd,GAAAA,CAACyd,IAAAA,CAAA,CAAK,IAAA,CAAM,EAAA,CAAI,CAAA,CACtB,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAZ,EAAQ,KAAA,CAAAG,CAAM,CAAA,GAAMH,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYG,CAAK,CAAA,CAAE,eAAA,EAAgB,CAAE,GAAA,EAC9F,CAAA,CACA,CACE,KAAA,CAAO,OAAA,CACP,WAAA,CAAa,qCAAA,CACb,WAAA,CAAa,CAAC,OAAA,CAAS,SAAA,CAAW,OAAO,CAAA,CACzC,IAAA,CAAMhd,GAAAA,CAAC0Z,UAAA,CAAU,IAAA,CAAM,EAAA,CAAI,CAAA,CAC3B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAmD,CAAAA,CAAQ,KAAA,CAAAG,CAAM,CAAA,GAAM,CAC9BH,CAAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYG,CAAK,CAAA,CAAE,GAAA,EAAI,CAE9C,IAAMU,CAAAA,CAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA,CAC5CA,EAAM,IAAA,CAAO,MAAA,CACbA,CAAAA,CAAM,MAAA,CAAS,SAAA,CACfA,CAAAA,CAAM,QAAA,CAAW,SAAY,CACvBA,CAAAA,CAAM,KAAA,EAAO,OAKnB,CAAA,CACAA,CAAAA,CAAM,QACR,CACF,CAAA,CACA,CACE,KAAA,CAAO,SAAA,CACP,WAAA,CAAa,wBAAA,CACb,WAAA,CAAa,CAAC,OAAA,CAAS,SAAA,CAAW,OAAO,CAAA,CACzC,KAAM1d,GAAAA,CAAC2d,OAAAA,CAAA,CAAQ,IAAA,CAAM,EAAA,CAAI,CAAA,CACzB,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAd,CAAAA,CAAQ,KAAA,CAAAG,CAAM,CAAA,GAAM,CAC9B,IAAMY,CAAAA,CAAY,MAAA,CAAO,iCAAiC,CAAA,CAE1C,IAAI,MAAA,CAClB,6GACF,CAAA,CAEY,IAAA,CAAKA,CAAAA,EAAa,EAAE,CAAA,CAC9Bf,CAAAA,CACG,OAAM,CACN,KAAA,EAAM,CACN,WAAA,CAAYG,CAAK,CAAA,CACjB,eAAA,CAAgB,CACf,GAAA,CAAKY,CAAAA,EAAa,EACpB,CAAC,CAAA,CACA,GAAA,GAECA,CAAAA,GAAc,IAAA,EAChB,KAAA,CAAM,2CAA2C,EAGvD,CACF,CAAA,CACA,CACE,KAAA,CAAO,SAAA,CACP,WAAA,CAAa,gBAAA,CACb,WAAA,CAAa,CAAC,UAAW,OAAO,CAAA,CAChC,IAAA,CAAM5d,GAAAA,CAAC6d,OAAAA,CAAA,CAAQ,IAAA,CAAM,EAAA,CAAI,CAAA,CACzB,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAhB,CAAAA,CAAQ,MAAAG,CAAM,CAAA,GAAM,CAC9B,IAAMc,CAAAA,CAAY,MAAA,CAAO,2BAA2B,CAAA,CACjC,IAAI,MAAA,CAAO,6EAA6E,CAAA,CAE5F,IAAA,CAAKA,CAAAA,EAAa,EAAE,CAAA,CACjCjB,CAAAA,CACG,KAAA,EAAM,CACN,KAAA,EAAM,CACN,WAAA,CAAYG,CAAK,CAAA,CACjB,QAAA,CAAS,CACR,GAAA,CAAKc,CAAAA,EAAa,EACpB,CAAC,CAAA,CACA,GAAA,EAAI,CAEHA,CAAAA,GAAc,IAAA,EAChB,KAAA,CAAM,qCAAqC,EAGjD,CACF,CACF,CAAC,CAAA,CAEYC,EAAAA,CAAeC,OAAAA,CAAQ,UAAU,CAC5C,UAAA,CAAY,CACV,KAAA,CAAO,IAAMlB,EAAAA,CACb,MAAA,CAAQmB,WACV,CACF,CAAC,CAAA,CClMD,IAAMC,EAAAA,CAAqC,CACzC,CACE,IAAA,CAAM,SAAA,CACN,KAAA,CAAO,oBACT,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,SACT,CAAA,CACA,CACE,IAAA,CAAM,KAAA,CACN,KAAA,CAAO,SACT,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,SACT,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,SACT,CAAA,CACA,CACE,IAAA,CAAM,OAAA,CACN,KAAA,CAAO,SACT,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,SACT,CAAA,CACA,CACE,KAAM,MAAA,CACN,KAAA,CAAO,SACT,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,SACT,CACF,CAAA,CAEMC,EAAAA,CAA0C,CAC9C,CACE,KAAM,SAAA,CACN,KAAA,CAAO,gCACT,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,+BACT,CAAA,CACA,CACE,IAAA,CAAM,KAAA,CACN,KAAA,CAAO,4BACT,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,+BACT,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,6BACT,CAAA,CACA,CACE,KAAM,OAAA,CACN,KAAA,CAAO,8BACT,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,KAAA,CAAO,+BACT,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,6BACT,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,6BACT,CACF,CAAA,CAOaC,EAAAA,CAAgB,CAAC,CAAE,IAAA,CAAAC,CAAAA,CAAM,YAAA,CAAAC,GAAa,CAAA,GAA0B,CAC3E,GAAM,CAAE,MAAA,CAAAzB,CAAO,CAAA,CAAI0B,SAAAA,EAAU,CAE7B,GAAI,CAAC1B,CAAAA,CAAQ,OAAO,IAAA,CAEpB,IAAM2B,CAAAA,CAAkBN,EAAAA,CAAY,IAAA,CAAK,CAAC,CAAE,KAAA,CAAAO,CAAM,CAAA,GAAM5B,CAAAA,CAAO,QAAA,CAAS,WAAA,CAAa,CAAE,KAAA,CAAA4B,CAAM,CAAC,CAAC,CAAA,CACzFC,CAAAA,CAAsBP,EAAAA,CAAiB,IAAA,CAAK,CAAC,CAAE,KAAA,CAAAM,CAAM,CAAA,GAAM5B,CAAAA,CAAO,QAAA,CAAS,WAAA,CAAa,CAAE,MAAA4B,CAAM,CAAC,CAAC,CAAA,CAExG,OACE3e,IAAAA,CAACsc,CAAAA,CAAA,CAAQ,KAAA,CAAO,IAAA,CAAM,IAAA,CAAMiC,CAAAA,CAAM,YAAA,CAAcC,GAAAA,CAC9C,UAAAte,GAAAA,CAACqc,CAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAvc,IAAAA,CAAC6C,GAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,6CAAA,CAA8C,OAAA,CAAQ,QAChF,QAAA,CAAA,CAAA3C,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,0CAAA,CACV,KAAA,CAAO,CACL,KAAA,CAAOwe,CAAAA,EAAiB,KAAA,CACxB,eAAA,CAAiBE,CAAAA,EAAqB,KACxC,CAAA,CACD,aAED,CAAA,CACA1e,GAAAA,CAAC2e,WAAAA,CAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,CAAA,CAAA,CACzC,CAAA,CACF,CAAA,CAEA7e,IAAAA,CAAC0c,GAAAA,CAAA,CACC,UAAA,CAAY,CAAA,CACZ,UAAU,uJAAA,CACV,KAAA,CAAM,OAAA,CAEN,QAAA,CAAA,CAAA1c,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CAAuE,QAAA,CAAA,OAAA,CAAK,EAC1Fke,EAAAA,CAAY,GAAA,CAAI,CAAC,CAAE,IAAA,CAAArQ,CAAAA,CAAM,KAAA,CAAA4Q,CAAM,CAAA,GAC9Bze,GAAAA,CAAC4e,gBAAAA,CAAA,CAEC,QAAA,CAAU,IAAM,CACd/B,CAAAA,CAAO,QAAA,CAAS,UAAA,EAAW,CAC3BhP,CAAAA,GAAS,SAAA,EACPgP,CAAAA,CACG,KAAA,EAAM,CACN,KAAA,EAAM,CACN,QAAA,CAAS4B,CAAAA,EAAS,EAAE,CAAA,CACpB,GAAA,EAAI,CACTH,GAAAA,CAAa,KAAK,EACpB,CAAA,CACA,SAAA,CAAU,2GAAA,CAEV,QAAA,CAAAxe,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,OAAI,SAAA,CAAU,4EAAA,CAA6E,KAAA,CAAO,CAAE,KAAA,CAAAye,CAAM,CAAA,CAAG,QAAA,CAAA,GAAA,CAE9G,CAAA,CACAze,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAA6N,CAAAA,CAAK,CAAA,CAAA,CACd,GAlBKA,CAmBP,CACD,CAAA,CAAA,CACH,CAAA,CACA/N,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAE,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CAAuE,QAAA,CAAA,YAAA,CAAU,CAAA,CAC/Fme,EAAAA,CAAiB,IAAI,CAAC,CAAE,IAAA,CAAAtQ,CAAAA,CAAM,KAAA,CAAA4Q,CAAM,CAAA,GACnC3e,IAAAA,CAAC8e,gBAAAA,CAAA,CAEC,QAAA,CAAU,IAAM,CACd/B,CAAAA,CAAO,SAAS,cAAA,EAAe,CAC/BhP,CAAAA,GAAS,SAAA,EAAagP,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,YAAA,CAAa,CAAE,KAAA,CAAA4B,CAAM,CAAC,EAAE,GAAA,EAAI,CACzEH,GAAAA,CAAa,KAAK,EACpB,CAAA,CACA,SAAA,CAAU,2GAAA,CAEV,QAAA,CAAA,CAAAxe,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAE,IAAC,KAAA,CAAA,CACC,SAAA,CAAU,4EAAA,CACV,KAAA,CAAO,CAAE,eAAA,CAAiBye,CAAM,CAAA,CACjC,QAAA,CAAA,GAAA,CAED,CAAA,CACAze,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAA6N,CAAAA,CAAK,GACd,CAAA,CACCgP,CAAAA,CAAO,QAAA,CAAS,WAAA,CAAa,CAAE,KAAA,CAAA4B,CAAM,CAAC,CAAA,EAAKze,GAAAA,CAAC6e,KAAAA,CAAA,CAAM,SAAA,CAAU,eAAA,CAAgB,IAjBxEhR,CAkBP,CACD,CAAA,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAAA,CCzKO,SAASiR,EAAAA,CAAW/c,CAAAA,CAAa,CACtC,GAAI,CACF,OAAA,IAAI,GAAA,CAAIA,CAAG,CAAA,CACJ,CAAA,CACT,MAAa,CACX,OAAO,MACT,CACF,CAEO,SAASgd,EAAAA,CAAiBC,CAAAA,CAAa,CAC5C,GAAIF,EAAAA,CAAWE,CAAG,CAAA,CAAG,OAAOA,EAC5B,GAAI,CACF,GAAIA,CAAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAI,QAAA,CAAS,GAAG,CAAA,CACxC,OAAO,IAAI,IAAI,CAAA,QAAA,EAAWA,CAAG,CAAA,CAAE,CAAA,CAAE,QAAA,EAErC,CAAA,KAAa,CACX,OAAO,IACT,CACF,CAOO,IAAMC,EAAAA,CAAe,CAAC,CAAE,IAAA,CAAAZ,CAAAA,CAAM,YAAA,CAAAC,CAAa,CAAA,GAAyB,CACzE,IAAMY,CAAAA,CAAWve,MAAAA,CAAyB,IAAI,CAAA,CACxC,CAAE,MAAA,CAAAkc,CAAO,CAAA,CAAI0B,SAAAA,EAAU,CAO7B,OAJA1e,SAAAA,CAAU,IAAM,CACdqf,CAAAA,CAAS,OAAA,EAAS,KAAA,GACpB,CAAC,CAAA,CAEIrC,CAAAA,CAGH/c,IAAAA,CAACsc,OAAAA,CAAQ,IAAA,CAAR,CAAa,KAAA,CAAO,IAAA,CAAM,IAAA,CAAMiC,CAAAA,CAAM,YAAA,CAAcC,CAAAA,CACnD,QAAA,CAAA,CAAAte,GAAAA,CAACoc,OAAAA,CAAQ,OAAA,CAAR,CAAgB,OAAA,CAAO,KACtB,QAAA,CAAAtc,IAAAA,CAAC6C,GAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAU,4DAAA,CAC1C,QAAA,CAAA,CAAA3C,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,eAAe,QAAA,CAAA,QAAA,CAAC,CAAA,CAC7BA,GAAAA,CAAC,GAAA,CAAA,CACC,SAAA,CAAWuR,GAAAA,CAAG,4DAAA,CAA8D,CAC1E,kBAAA,CAAoBsL,CAAAA,CAAO,QAAA,CAAS,MAAM,CAC5C,CAAC,EACF,QAAA,CAAA,MAAA,CAED,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACA7c,GAAAA,CAACwc,GAAAA,CAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,gBAAA,CAAiB,UAAA,CAAY,EAAA,CACnE,QAAA,CAAA1c,KAAC,MAAA,CAAA,CACC,QAAA,CAAW8Y,CAAAA,EAAM,CACf,IAAMuG,CAAAA,CAASvG,CAAAA,CAAE,aAAA,CACjBA,CAAAA,CAAE,cAAA,EAAe,CACjB,IAAM8E,CAAAA,CAAQyB,CAAAA,CAAO,CAAC,CAAA,CAChBpd,CAAAA,CAAMgd,EAAAA,CAAiBrB,CAAAA,CAAM,KAAK,CAAA,CACpC3b,CAAAA,GACF8a,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,OAAA,CAAQ,CAAE,KAAM9a,CAAI,CAAC,CAAA,CAAE,GAAA,EAAI,CAClDuc,CAAAA,CAAa,KAAK,CAAA,EAEtB,CAAA,CACA,SAAA,CAAU,gBAAA,CAEV,QAAA,CAAA,CAAAte,GAAAA,CAAC,OAAA,CAAA,CACC,IAAKkf,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,WAAA,CAAY,cAAA,CACZ,SAAA,CAAU,gEAAA,CACV,YAAA,CAAcrC,CAAAA,CAAO,aAAA,CAAc,MAAM,CAAA,CAAE,IAAA,EAAQ,EAAA,CACrD,EACCA,CAAAA,CAAO,aAAA,CAAc,MAAM,CAAA,CAAE,IAAA,CAC5B7c,GAAAA,CAAC2C,GAAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,SAAA,CACR,IAAA,CAAK,QAAA,CACL,UAAU,uJAAA,CACV,OAAA,CAAS,IAAM,CACbka,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,SAAA,EAAU,CAAE,GAAA,EAAI,CACnCqC,CAAAA,CAAS,UAASA,CAAAA,CAAS,OAAA,CAAQ,KAAA,CAAQ,EAAA,CAAA,CAC/CZ,CAAAA,CAAa,KAAK,EACpB,CAAA,CAEA,QAAA,CAAAte,GAAAA,CAACof,KAAAA,CAAA,CAAM,SAAA,CAAU,eAAA,CAAgB,EACnC,CAAA,CAEApf,GAAAA,CAAC2C,GAAAA,CAAA,CAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,QAAA,CAC5B,QAAA,CAAA3C,GAAAA,CAAC6e,KAAAA,CAAA,CAAM,SAAA,CAAU,eAAA,CAAgB,EACnC,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CA1DkB,IA4DtB,CAAA,CC7EA,IAAMQ,EAAAA,CAAwB,CAC5B,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMC,QAAAA,CACN,OAAA,CAAUzC,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,GAAA,EAAI,CAE9D,QAAA,CAAWA,CAAAA,EACTA,CAAAA,EAAU,IAAA,EACVA,CAAAA,CAAO,QAAA,CAAS,WAAW,CAAA,EAC3B,CAACA,CAAAA,CAAO,QAAA,CAAS,YAAY,GAC7B,CAACA,CAAAA,CAAO,QAAA,CAAS,aAAa,CAClC,CAAA,CACA,CACE,IAAA,CAAM,WAAA,CACN,IAAA,CAAMK,QAAAA,CACN,OAAA,CAAUL,CAAAA,EAAW,CACnB,IAAMS,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,aAAA,CAAc,CAAE,MAAO,CAAE,CAAC,CAAA,CAAE,GAAA,GACtE,CAAA,CACA,QAAA,CAAWT,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,SAAA,CAAW,CAAE,MAAO,CAAE,CAAC,CACjF,CAAA,CACA,CACE,IAAA,CAAM,WAAA,CACN,IAAA,CAAMM,QAAAA,CACN,OAAA,CAAUN,CAAAA,EAAW,CACnB,IAAMS,CAAAA,CAAaV,GAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,aAAA,CAAc,CAAE,KAAA,CAAO,CAAE,CAAC,CAAA,CAAE,GAAA,GACtE,CAAA,CACA,QAAA,CAAWT,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,CAAC,CACjF,CAAA,CACA,CACE,IAAA,CAAM,WAAA,CACN,IAAA,CAAMO,QAAAA,CACN,OAAA,CAAUP,CAAAA,EAAW,CACnB,IAAMS,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,EAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,aAAA,CAAc,CAAE,KAAA,CAAO,CAAE,CAAC,CAAA,CAAE,MACtE,CAAA,CACA,QAAA,CAAWT,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,CAAC,CACjF,EACA,CACE,IAAA,CAAM,YAAA,CACN,IAAA,CAAMI,WAAAA,CACN,OAAA,CAAUJ,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,gBAAe,CAAE,GAAA,EAAI,CAC/E,QAAA,CAAWA,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,UAAU,CACpE,CAAA,CACA,CACE,IAAA,CAAM,cACN,IAAA,CAAMU,WAAAA,CACN,OAAA,CAAUV,CAAAA,EAAW,CACnB,IAAMS,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,OAAM,CAAE,UAAA,EAAW,CAAE,gBAAA,EAAiB,CAAE,GAAA,GAC7D,CAAA,CACA,QAAA,CAAWT,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,YAAY,CACtE,CAAA,CACA,CACE,IAAA,CAAM,eAAA,CACN,IAAA,CAAMU,WAAAA,CACN,OAAA,CAAUV,CAAAA,EAAW,CACnB,IAAMS,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,EAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,iBAAA,EAAkB,CAAE,GAAA,GAC9D,CAAA,CACA,QAAA,CAAWT,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,aAAa,CACvE,CAAA,CACA,CACE,IAAA,CAAM,OAAA,CACN,IAAA,CAAMW,SAAAA,CACN,OAAA,CAAUX,CAAAA,EAAW,CACnB,IAAMS,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,gBAAA,EAAiB,CAAE,MAC7D,CAAA,CACA,QAAA,CAAWT,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,YAAY,CACtE,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,KAAMY,IAAAA,CACN,OAAA,CAAUZ,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,eAAA,EAAgB,CAAE,GAAA,EAAI,CAChF,SAAWA,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,WAAW,CACrE,CACF,CAAA,CAMa0C,EAAAA,CAAe,CAAC,CAAE,IAAA,CAAAlB,CAAAA,CAAM,aAAAC,CAAa,CAAA,GAAyB,CACzE,GAAM,CAAE,MAAA,CAAAzB,CAAO,CAAA,CAAI0B,SAAAA,EAAU,CAC7B,GAAI,CAAC1B,CAAAA,CAAQ,OAAO,KACpB,IAAM2C,CAAAA,CAAaH,EAAAA,CAAM,MAAA,CAAQvR,CAAAA,EAASA,CAAAA,CAAK,QAAA,CAAS+O,CAAM,CAAC,CAAA,CAAE,GAAA,EAAI,EAAK,CACxE,IAAA,CAAM,UACR,CAAA,CAEA,OACE/c,IAAAA,CAACsc,OAAAA,CAAQ,IAAA,CAAR,CAAa,KAAA,CAAO,IAAA,CAAM,IAAA,CAAMiC,CAAAA,CAAM,YAAA,CAAcC,CAAAA,CACnD,QAAA,CAAA,CAAAte,GAAAA,CAACoc,QAAQ,OAAA,CAAR,CAAgB,OAAA,CAAO,IAAA,CAAC,SAAA,CAAU,8FAAA,CACjC,QAAA,CAAAtc,IAAAA,CAAC6C,GAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,UAAU,UAAA,CAC1C,QAAA,CAAA,CAAA3C,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,iCAAA,CAAmC,QAAA,CAAAwf,CAAAA,CAAW,IAAA,CAAK,CAAA,CACnExf,GAAAA,CAAC2e,WAAAA,CAAA,CAAY,SAAA,CAAU,gBAAgB,CAAA,CAAA,CACzC,CAAA,CACF,CAAA,CACA3e,GAAAA,CAACoc,OAAAA,CAAQ,OAAA,CAAR,CAAgB,UAAA,CAAY,CAAA,CAAG,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,gBAAA,CACrD,QAAA,CAAAiD,GAAM,GAAA,CAAKvR,CAAAA,EACVhO,IAAAA,CAAC8e,gBAAAA,CAAA,CAEC,QAAA,CAAW/B,CAAAA,EAAW,CACpB/O,CAAAA,CAAK,OAAA,CAAQ+O,CAAM,CAAA,CACnByB,CAAAA,CAAa,KAAK,EACpB,CAAA,CACA,SAAA,CAAU,4IAAA,CAEV,QAAA,CAAA,CAAAxe,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sCAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CACb,QAAA,CAAAA,IAAC8N,CAAAA,CAAK,IAAA,CAAL,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CACA9N,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAA8N,CAAAA,CAAK,IAAA,CAAK,CAAA,CAAA,CACnB,CAAA,CACC0R,EAAW,IAAA,GAAS1R,CAAAA,CAAK,IAAA,EAAQ9N,GAAAA,CAAC6e,KAAAA,CAAA,CAAM,SAAA,CAAU,eAAA,CAAgB,CAAA,CAAA,CAAA,CAb9D/Q,CAAAA,CAAK,IAcZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CAAA,CC3KO,IAAM2R,EAAAA,CAAe,IAAM,CAChC,GAAM,CAAE,MAAA,CAAA5C,CAAO,CAAA,CAAI0B,SAAAA,EAAU,CAE7B,OAAK1B,CAAAA,CAGH7c,GAAAA,CAAC2C,GAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,KAAK,IAAA,CACL,SAAA,CAAU,4CAAA,CACV,OAAA,CAAU+c,CAAAA,EAAQ,CAChB,GAAI7C,CAAAA,CAAO,QAAA,CAAS,MAAM,CAAA,CACxBA,CAAAA,CAAO,KAAA,EAAM,CAAE,OAAM,CAAE,UAAA,EAAW,CAAE,GAAA,EAAI,CAAA,KACnC,CACL,GAAM,CAAE,IAAA,CAAA8C,CAAAA,CAAM,EAAA,CAAAC,CAAG,CAAA,CAAI/C,CAAAA,CAAO,MAAM,SAAA,CAC5BgD,CAAAA,CAAQhD,CAAAA,CAAO,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY8C,CAAAA,CAAMC,CAAE,CAAA,CAEnD,GAAI,CAACC,CAAAA,CAAO,OAEZhD,CAAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,QAAA,CAAS,CAAE,KAAA,CAAAgD,CAAM,CAAC,CAAA,CAAE,GAAA,GAC7C,CACF,CAAA,CAEA,QAAA,CAAA7f,IAAC8f,SAAAA,CAAA,CAAU,SAAA,CAAWvO,GAAAA,CAAG,WAAA,CAAa,CAAE,kBAAA,CAAoBsL,CAAAA,CAAO,QAAA,CAAS,MAAM,CAAE,CAAC,CAAA,CAAG,WAAA,CAAa,IAAK,CAAA,CAC5G,CAAA,CArBkB,IAuBtB,CAAA,CCxBO,IAAMkD,EAAAA,CAAc,IAAM,CAC/B,GAAM,CAAE,MAAA,CAAAlD,CAAO,CAAA,CAAI0B,SAAAA,EAAU,CAE7B,OAAK1B,CAAAA,CAoEH7c,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CACZ,QAAA,CAnEyB,CAC5B,CACE,IAAA,CAAM,MAAA,CACN,QAAA,CAAW6c,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,MAAM,CAAA,CAC9D,OAAA,CAAUA,CAAAA,EAAW,CACnB,IAAMS,EAAaV,EAAAA,CAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,GAAA,GAC1C,CAAA,CACA,KAAM0C,QACR,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,QAAA,CAAWnD,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAChE,OAAA,CAAUA,GAAW,CACnB,IAAMS,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,YAAA,EAAa,CAAE,MAC5C,CAAA,CACA,IAAA,CAAM2C,UACR,CAAA,CACA,CACE,IAAA,CAAM,WAAA,CACN,QAAA,CAAWpD,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,WAAW,CAAA,CACnE,OAAA,CAAUA,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,eAAA,EAAgB,CAAE,GAAA,EAAI,CACnE,IAAA,CAAMqD,aACR,EACA,CACE,IAAA,CAAM,QAAA,CACN,QAAA,CAAWrD,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAChE,OAAA,CAAUA,CAAAA,EAAW,CACnB,IAAMS,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,YAAA,EAAa,CAAE,GAAA,GAC5C,CAAA,CACA,KAAM6C,iBACR,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,QAAA,CAAWtD,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,MAAM,CAAA,CAC9D,OAAA,CAAUA,GAAW,CACnB,IAAMS,CAAAA,CAAaV,EAAAA,CAA8BC,CAAM,CAAA,CAElDS,CAAAA,EAILA,CAAAA,CAAW,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,MAC1C,CAAA,CACA,IAAA,CAAM8C,QACR,CACF,CAAA,CAIW,GAAA,CAAKtS,CAAAA,EACV9N,GAAAA,CAAC4e,gBAAAA,CAAA,CAEC,QAAA,CAAW/B,CAAAA,EAAW,CACpB/O,EAAK,OAAA,CAAQ+O,CAAM,EACrB,CAAA,CAEA,QAAA,CAAA7c,GAAAA,CAAC2C,GAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,oCAAA,CAAqC,OAAA,CAAUiW,CAAAA,EAAMA,EAAE,cAAA,EAAe,CAAG,OAAA,CAAQ,OAAA,CAC3G,QAAA,CAAA5Y,GAAAA,CAAC8N,CAAAA,CAAK,IAAA,CAAL,CACC,SAAA,CAAWyD,GAAAA,CAAG,eAAA,CAAiB,CAC7B,kBAAA,CAAoBzD,EAAK,QAAA,CAAS+O,CAAM,CAC1C,CAAC,CAAA,CACH,CAAA,CACF,CAAA,CAAA,CAXK/O,CAAAA,CAAK,IAYZ,CACD,CAAA,CACH,CAAA,CArFkB,IAuFtB,CAAA,CCjGe,SAARuS,EAAAA,CAAuB,CAAE,SAAA,CAAA/O,CAAU,CAAA,CAA0B,CAClE,OACExR,KAAC,KAAA,CAAA,CACC,KAAA,CAAM,KAAA,CACN,MAAA,CAAO,KAAA,CACP,OAAA,CAAQ,aAAA,CACR,IAAA,CAAK,MAAA,CACL,KAAA,CAAM,4BAAA,CACN,cAAA,CAAe,oBAAA,CACf,MAAA,CAAO,eACP,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,WAAA,CAAY,KAAA,CACZ,SAAA,CAAWwR,CAAAA,CAEX,QAAA,CAAA,CAAAtR,GAAAA,CAAC,OAAA,CAAA,CAAM,QAAA,CAAA,eAAA,CAAa,CAAA,CAEpBA,GAAAA,CAAC,QACC,CAAA,CAAE,wwCAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,svCAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CACC,EAAE,sqBAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CAAA,CACF,CAEJ,CC/BA,IAAMsgB,EAAAA,CAAe,IAEjBxgB,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sDAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+GAAA,CAAgH,CAAA,CAC/HA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gHAAA,CAAiH,CAAA,CAChIA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uFAAA,CAAwF,CAAA,CAAA,CACzG,CAAA,CAIGugB,EAAAA,CAAQD,EAAAA,CCLA,SAARE,EAAAA,CAAsC,CAC3C,UAAA,CAAAC,EACA,SAAA,CAAAC,CACF,CAAA,CAGuB,CACrB,GAAM,CAAE,MAAA,CAAA7D,CAAO,CAAA,CAAI0B,SAAAA,EAAU,CAE7B,OAAK1B,CAAAA,CAGH/c,IAAAA,CAAAiF,SAAA,CACE,QAAA,CAAA,CAAAjF,IAAAA,CAAC6gB,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA7gB,IAAAA,CAAC8gB,GAAAA,CAAA,CACC,SAAA,CAAU,kBAAA,CACV,KAAA,CAAM,SAAA,CACN,QAAA,CAAU,IAAM,CACd,GAAM,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAIhE,CAAAA,CAAO,IAAA,CAAK,KAAA,CAElCA,CAAAA,CACG,KAAA,EAAM,CACN,KAAA,EAAM,CACN,gBACC,CACE,IAAA,CAAMgE,CAAAA,CAAU,IAAA,CAChB,EAAA,CAAIA,CAAAA,CAAU,EAChB,CAAA,CACAJ,CACF,CAAA,CACC,GAAA,GACL,CAAA,CAEA,QAAA,CAAA,CAAAzgB,IAAC6e,KAAAA,CAAA,CAAM,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAAE,mBAAA,CAAA,CAE9D,CAAA,CACA/e,IAAAA,CAAC8gB,GAAAA,CAAA,CACC,SAAA,CAAU,kBAAA,CACV,KAAA,CAAM,QAAA,CACN,SAAU,IAAM,CACd,GAAM,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAIhE,CAAAA,CAAO,IAAA,CAAK,KAAA,CAClCA,CAAAA,CACG,KAAA,EAAM,CACN,KAAA,GACA,eAAA,CAAgBgE,CAAAA,CAAU,EAAA,CAAK,CAAA,CAAGJ,CAAU,CAAA,CAC5C,GAAA,GACL,CAAA,CAEA,QAAA,CAAA,CAAAzgB,GAAAA,CAACwd,SAAAA,CAAA,CAAU,SAAA,CAAU,yCAAyC,CAAA,CAAE,cAAA,CAAA,CAElE,CAAA,CAAA,CACF,CAAA,CACAxd,GAAAA,CAAC8gB,GAAAA,CAAA,EAAiB,CAAA,CAElB9gB,GAAAA,CAAC2gB,GAAAA,CAAA,CACC,QAAA,CAAA7gB,IAAAA,CAAC8gB,GAAAA,CAAA,CAAY,QAAA,CAAUF,CAAAA,CAAW,KAAA,CAAM,QAAA,CAAS,SAAA,CAAU,kBAAA,CACzD,QAAA,CAAA,CAAA1gB,GAAAA,CAAC+gB,SAAAA,CAAA,CAAU,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAAE,SAAA,CAAA,CAElE,EACF,CAAA,CAAA,CACF,CAAA,CAnDkB,IAqDtB,CC9DA,IAAM9O,EAAAA,CAAU,CACd,CACE,KAAA,CAAO,SAAA,CACP,KAAA,CAAO,iBAAA,CACP,IAAA,CAAM+O,aACR,CAAA,CAEA,CACE,KAAA,CAAO,KAAA,CACP,KAAA,CAAO,cACP,IAAA,CAAMC,UACR,CAAA,CACA,CACE,KAAA,CAAO,SAAA,CACP,KAAA,CAAO,cAAA,CACP,IAAA,CAAMC,mBACR,CAAA,CACA,CACE,KAAA,CAAO,QAAA,CACP,MAAO,aAAA,CACP,IAAA,CAAMC,QACR,CACF,CAAA,CAMe,SAARC,EAAAA,CAAoC,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAgD,CACpG,GAAM,CAAE,MAAA,CAAAxE,CAAO,CAAA,CAAI0B,SAAAA,EAAU,CAE7B,OAAK1B,CAAAA,CAGH/c,IAAAA,CAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/E,GAAAA,CAAC2gB,GAAAA,CAAA,CAAa,OAAA,CAAQ,0BAAA,CACnB,SAAA1O,EAAAA,CAAQ,GAAA,CAAKqP,CAAAA,EACZxhB,IAAAA,CAAC8gB,GAAAA,CAAA,CACC,QAAA,CAAW5a,CAAAA,EAAU,CACnB,IAAMub,CAAAA,CAAQ1E,CAAAA,CAAO,KAAA,CAAM,SAAA,CAAU,SAAQ,CACvC2E,CAAAA,CAAO3E,CAAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,UAAA,CAAW,SAAA,CAAU0E,CAAAA,CAAM,OAAO,CAAA,CACvEF,CAAAA,CAASG,CAAAA,CAAMxb,CAAK,EACtB,EACA,SAAA,CAAU,0BAAA,CAEV,KAAA,CAAOsb,CAAAA,CAAO,KAAA,CAEd,QAAA,CAAA,CAAAthB,GAAAA,CAACshB,CAAAA,CAAO,IAAA,CAAP,CAAY,SAAA,CAAU,kCAAA,CAAmC,CAAA,CACzDA,CAAAA,CAAO,QAJHA,CAAAA,CAAO,KAKd,CACD,CAAA,CACH,CAAA,CACAthB,GAAAA,CAAC8gB,GAAAA,CAAA,EAAiB,CAAA,CAClB9gB,GAAAA,CAAC2gB,GAAAA,CAAA,CAAa,OAAA,CAAQ,mBAAA,CACpB,SAAA7gB,IAAAA,CAAC8gB,GAAAA,CAAA,CACC,QAAA,CAAU,IAAM,CACd,IAAMa,CAAAA,CAAM5E,CAAAA,CAAO,KAAA,CAAM,SAAA,CAAU,IAAA,CAE7B2E,CAAAA,CAAOE,WAAAA,CAAY7E,EAAQ4E,CAAG,CAAA,CACpCJ,CAAAA,CAASG,CAAAA,CAAM,UAAU,EAC3B,CAAA,CACA,KAAA,CAAM,UAAA,CACN,SAAA,CAAU,kBAAA,CAEV,QAAA,CAAA,CAAAxhB,GAAAA,CAAC2hB,WAAAA,CAAA,CAAY,SAAA,CAAU,kCAAA,CAAmC,CAAA,CAAE,kBAAA,CAAA,CAE9D,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CArCkB,IAuCtB,CCnDO,SAASC,EAAAA,CAAW,CAAE,YAAA,CAAAtD,CAAa,CAAA,CAAwC,CAChF,GAAM,CAAE,MAAA,CAAAzB,CAAO,CAAA,CAAI0B,WAAU,CACvB,CAACsD,CAAAA,CAAYC,CAAa,CAAA,CAAIriB,QAAAA,CAAS,EAAE,CAAA,CACzC,CAAE,SAAA,CAAAc,CAAU,CAAA,CAAIqK,SAAAA,EAAU,CAE1B,CAAE,UAAA,CAAA6V,CAAAA,CAAY,QAAA,CAAAsB,CAAAA,CAAU,SAAA,CAAAlgB,CAAU,CAAA,CAAImgB,aAAAA,CAAc,CACxD,GAAA,CAAKxgB,GAAAA,CAASjB,CAAS,CAAA,CAAE,UAAA,CACzB,MAAO,MAAOmd,CAAAA,CAAOuE,CAAAA,GAAS,CAC5B,IAAMpR,CAAAA,CAAW,MAAM,KAAA,CAAM6M,CAAAA,CAAOuE,CAAI,CAAA,CAExC,GAAIpR,CAAAA,CAAS,MAAA,GAAW,IACtB,MAAAsD,KAAAA,CAAM,KAAA,CAAM,kDAAkD,CAAA,CAExD,IAAI,KAAA,CAAM,kBAAkB,CAAA,CAGpC,OAAOtD,CACT,CAAA,CACA,OAAA,CAAU+H,CAAAA,EAAM,CACVA,CAAAA,CAAE,OAAA,GAAY,kBAAA,EAIlBzE,KAAAA,CAAM,KAAA,CAAMyE,CAAAA,CAAE,OAAO,EACvB,CACF,CAAC,CAAA,CAEKsJ,CAAAA,CAAgBzB,CAAAA,CAAW,MAAA,CAAS,EAE1C,OAAK5D,CAAAA,CAKH/c,IAAAA,CAACke,GAAAA,CAAA,CAAQ,SAAA,CAAU,cAAA,CAChB,QAAA,CAAA,CAAAkE,CAAAA,EACCliB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CACb,QAAA,CAAAA,IAACmiB,CAAAA,CAAA,CACC,QAAA,CAAAniB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CACb,QAAA,CAAAA,GAAAA,CAACoiB,EAAAA,CAAA,CAAU,QAAA,CAAA3B,CAAAA,CAAW,CAAA,CACxB,CAAA,CACF,CAAA,CACF,CAAA,CAGD5e,CAAAA,EACC/B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uHAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAACqgB,EAAAA,CAAA,CAAM,SAAA,CAAU,qCAAA,CAAsC,CAAA,CAAE,gBAAA,CAEzDrgB,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBAAA,CACb,QAAA,CAAAA,GAAAA,CAACugB,EAAAA,CAAA,EAAa,CAAA,CAChB,CAAA,CAAA,CACF,CAAA,CAED,CAAC1e,CAAAA,EACA/B,IAAAA,CAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAjF,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,aAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAACqiB,GAAAA,CAAA,CACC,KAAA,CAAOR,CAAAA,CACP,aAAA,CAAeC,CAAAA,CACf,SAAA,CAAS,KACT,WAAA,CAAaI,CAAAA,CAAgB,yBAAA,CAA4B,+BAAA,CACzD,OAAA,CAAS,IAAMI,cAAAA,CAAezF,CAAM,CAAA,CACtC,CAAA,CACA7c,GAAAA,CAAC2C,GAAAA,CAAA,CACC,IAAA,CAAK,OACL,SAAA,CAAU,yIAAA,CACV,OAAA,CAAS,IAAM,CACb,GAAI8d,CAAAA,CACF,OAAOsB,CAAAA,CAAStB,CAAAA,CAAY,CAC1B,IAAA,CAAM,CAAE,MAAA,CAAQ,MAAO,OAAA,CAASoB,CAAW,CAC7C,CAAC,CAAA,CAAE,IAAA,CAAK,IAAMC,CAAAA,CAAc,EAAE,CAAC,CAAA,CAGjC,IAAMP,CAAAA,CAAQ1E,CAAAA,CAAO,MAAM,SAAA,CAAU,OAAA,EAAQ,CACvC2E,CAAAA,CAAO3E,CAAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,UAAA,CAAW,SAAA,CAAU0E,CAAAA,CAAM,OAAO,CAAA,CAEvEQ,CAAAA,CAASP,CAAAA,CAAM,CACb,IAAA,CAAM,CAAE,MAAA,CAAQ,KAAA,CAAO,OAAA,CAASK,CAAW,CAC7C,CAAC,CAAA,CAAE,IAAA,CAAK,IAAMC,CAAAA,CAAc,EAAE,CAAC,EACjC,CAAA,CAEA,QAAA,CAAA9hB,GAAAA,CAACuiB,OAAAA,CAAA,CAAQ,SAAA,CAAU,eAAA,CAAgB,CAAA,CACrC,CAAA,CAAA,CACF,CAAA,CACAviB,GAAAA,CAACwiB,GAAAA,CAAA,CACE,QAAA,CAAAN,EACCliB,GAAAA,CAACwgB,EAAAA,CAAA,CACC,SAAA,CAAW,IAAM,CACf3D,CAAAA,CAAO,KAAA,EAAM,CAAE,cAAA,EAAe,CAAE,KAAA,EAAM,CAAE,GAAA,GACxCyB,CAAAA,CAAa,KAAK,EACpB,CAAA,CACA,UAAA,CAAYmC,CAAAA,CACd,CAAA,CAEAzgB,GAAAA,CAACohB,EAAAA,CAAA,CAAmB,QAAA,CAAU,CAACpb,CAAAA,CAAOsb,CAAAA,GAAWS,EAAS/b,CAAAA,CAAO,CAAE,IAAA,CAAM,CAAE,MAAA,CAAAsb,CAAO,CAAE,CAAC,CAAA,CAAG,CAAA,CAE5F,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAtEO,IAwEX,CClHe,SAARmB,EAAAA,CAAsC,CAC3C,QAAA,CAAAzV,CAAAA,CACA,IAAA,CAAAqR,CAAAA,CACA,YAAA,CAAAC,CACF,EAAkD,CAChD,GAAM,CAAE,MAAA,CAAAzB,CAAO,CAAA,CAAI0B,SAAAA,EAAU,CAQ7B,OANA1e,SAAAA,CAAU,IAAM,CACTgd,CAAAA,GAEAwB,CAAAA,EAAMqE,kBAAkB7F,CAAM,CAAA,EACrC,CAAA,CAAG,CAACA,CAAAA,CAAQwB,CAAI,CAAC,CAAA,CAEZxB,CAAAA,CAGH/c,IAAAA,CAAC6iB,YAAAA,CAAA,CACC,YAAA,CAAc,CACZ,UAAWtE,CAAAA,CAAO,cAAA,CAAiB,KAAA,CACnC,QAAA,CAAU,IAAM,CACdC,CAAAA,CAAa,KAAK,CAAA,CAClBzB,CAAAA,CAAO,KAAA,EAAM,CAAE,cAAA,EAAe,CAAE,GAAA,GAClC,CACF,CAAA,CACA,SAAA,CAAU,8IAAA,CAET,QAAA,CAAA,CAAAwB,CAAAA,EAAQre,GAAAA,CAAC4hB,EAAAA,CAAA,CAAW,IAAA,CAAMvD,CAAAA,CAAM,YAAA,CAAcC,CAAAA,CAAc,CAAA,CAC5D,CAACD,CAAAA,EACAve,IAAAA,CAACiF,UAAAA,CAAA,CACC,QAAA,CAAA,CAAAjF,IAAAA,CAAC6C,GAAAA,CAAA,CACC,SAAA,CAAU,8DAAA,CACV,OAAA,CAAQ,OAAA,CACR,OAAA,CAAUiW,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjB0F,CAAAA,CAAa,IAAI,EACnB,CAAA,CACA,IAAA,CAAK,IAAA,CAEL,QAAA,CAAA,CAAAte,GAAAA,CAACqgB,EAAAA,CAAA,CAAM,SAAA,CAAU,gBAAgB,CAAA,CAAE,QAAA,CAAA,CAErC,CAAA,CACCrT,CAAAA,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CA/BkB,IAiCtB,CCxBA,IAAM4V,GAAa,CAAC,GAAGC,CAAAA,CAAmB9E,EAAY,CAAA,CAEtD,SAAS+E,EAAAA,CAAc9c,CAAAA,CAAsC,CAC3D,GAAI,CAACA,CAAAA,EAAS,OAAOA,CAAAA,EAAU,SAC7B,OAAO,MAAA,CAGT,IAAM+c,CAAAA,CAAQ/c,CAAAA,CAMd,OAJI,EAAA,OAAO+c,CAAAA,CAAM,IAAA,EAAS,QAAA,EAAY,OAAOA,CAAAA,CAAM,IAAA,CAAS,GAAA,EAIxD,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAAA,CAAM,OAAO,CAAA,EAAK,OAAOA,CAAAA,CAAM,OAAA,CAAY,GAAA,CAKhE,CAEA,SAASC,EAAAA,CAAiBhd,CAAAA,CAAqE,CAC7F,GAAI,OAAOA,CAAAA,EAAU,QAAA,CAAU,CAC7B,IAAMid,CAAAA,CAAUjd,CAAAA,CAAM,IAAA,EAAK,CAE3B,GAAI,CAACid,CAAAA,CACH,OAGF,GAAI,CACF,IAAMC,CAAAA,CAAkB,IAAA,CAAK,KAAA,CAAMD,CAAO,CAAA,CAE1C,GAAIH,EAAAA,CAAcI,CAAM,CAAA,CACtB,OAAOA,CAEX,CAAA,KAAQ,CACN,MACF,CACF,CAEA,GAAIJ,EAAAA,CAAc9c,CAAK,CAAA,CACrB,OAAOA,CAIX,CAEe,SAARmd,EAAAA,CAAwB,CAC7B,OAAA,CAAA3N,CAAAA,CACA,aAAA4N,CAAAA,CACA,WAAA,CAAA3N,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,GACF,CAAA,CAA2C,CACzC,GAAM,CAAE,IAAA,CAAA9H,CAAAA,CAAM,KAAA,CAAA+H,EAAO,OAAA,CAAA3D,CAAQ,CAAA,CAAIwD,CAAAA,CAC3B,CAAC4N,CAAAA,CAAQC,GAAS,CAAA,CAAI7jB,QAAAA,CAAS,KAAK,CAAA,CACpC,CAAC8jB,CAAAA,CAAUC,CAAW,EAAI/jB,QAAAA,CAAS,KAAK,CAAA,CACxC,CAACgkB,CAAAA,CAAUC,GAAW,CAAA,CAAIjkB,QAAAA,CAAS,KAAK,CAAA,CACxC,CAACkkB,CAAAA,CAAWC,CAAY,CAAA,CAAInkB,SAAS,KAAK,CAAA,CAE1CokB,CAAAA,CAAmBC,oBAAAA,CAAqB,CAACjH,CAAAA,CAAwB/G,CAAAA,GAA8C,CACnH,IAAMiO,CAAAA,CAAOlH,CAAAA,CAAO,OAAA,EAAQ,CAE5BlH,GAAAA,CAAS9H,EAAM,CACb,GAAGiI,CAAAA,CACH,KAAA,CAAO,IAAA,CAAK,SAAA,CAAUiO,CAAI,CAC5B,CAAC,EACH,CAAA,CAAG,GAAG,CAAA,CAEN,SAAShO,EAAed,CAAAA,CAAkBjP,CAAAA,CAAyC,CACjF2P,GAAAA,CAAS9H,CAAAA,CAAM,CACb,GAAG7H,CAAAA,CACH,QAAA,CAAUiP,CACZ,CAAC,EACH,CAIA,IAAM+O,CAAAA,CAAYzL,CAAAA,GAEhB,OAAA,CAAQ,GAAA,CAAI,oCAAA,CAAsCA,CAAI,CAAA,CAE/C,OAAA,CAAQ,OAAA,CAAQ,iCAAiC,CAAA,CAAA,CAG1D,OACEvY,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS0S,EACT,IAAA,CAAM3H,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAA9K,CAAM,CAAA,GACfjD,IAAAA,CAACkD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAhD,GAAAA,CAACgW,CAAAA,CAAA,CAAW,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CACjB3D,CAAAA,EAAS,OAAA,CAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,QAAA,CAAAhE,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC3EjS,GAAAA,CAACiD,EAAA,CACC,QAAA,CAAAjD,GAAAA,CAACikB,UAAAA,CAAA,CACC,QAAA,CAAAnkB,IAAAA,CAACokB,aAAAA,CAAA,CAEC,SAAA,CAAU,uOAAA,CACV,QAAA,CAAU,CAACxO,CAAAA,EAAY,CAAC3S,CAAAA,CAAM,KAAA,EAAO,QAAA,CACrC,WAAA,CAAa,CACX,eAAA,CAAiB,CACf,OAAA,CAAS,CAACohB,CAAAA,CAAOthB,CAAAA,GAAUuhB,uBAAAA,CAAwBvhB,CAAK,CAC1D,EACA,WAAA,CAAa,CAACwhB,CAAAA,CAAMxhB,CAAAA,GAAUyhB,gBAAAA,CAAiBD,CAAAA,CAAMxhB,CAAAA,CAAOmhB,CAAQ,CAAA,CACpE,UAAA,CAAY,CAACK,CAAAA,CAAMxhB,CAAAA,CAAO0hB,CAAAA,CAAQC,IAAUC,eAAAA,CAAgBJ,CAAAA,CAAMxhB,CAAAA,CAAO2hB,CAAAA,CAAOR,CAAQ,CAAA,CACxF,UAAA,CAAY,CACV,KAAA,CACE,+LAEJ,CACF,CAAA,CACA,UAAA,CAAYpB,EAAAA,CACZ,eAAgBI,EAAAA,CAAiBjgB,CAAAA,CAAM,KAAA,EAAO,KAAA,EAASqgB,CAAAA,CAAa,KAAK,CAAA,CACzE,iBAAA,CAAmB,IAAA,CACnB,QAAA,CAAU,CAAC,CAAE,MAAA,CAAAvG,CAAO,IAAM,CACxBgH,CAAAA,CAAiBhH,CAAAA,CAAQ9Z,CAAAA,CAAM,KAAK,EACtC,CAAA,CACA,SAAA,CAAW/C,GAAAA,CAAC0kB,YAAAA,CAAA,EAAa,CAAA,CAEzB,QAAA,CAAA,CAAA5kB,IAAAA,CAAC6kB,cAAA,CAAc,SAAA,CAAU,yMAAA,CACvB,QAAA,CAAA,CAAA3kB,GAAAA,CAAC4kB,kBAAAA,CAAA,CAAmB,SAAA,CAAU,kCAAA,CAAmC,QAAA,CAAA,YAAA,CAAU,CAAA,CAC3E5kB,GAAAA,CAAC6kB,iBAAAA,CAAA,CACE,SAAA/H,EAAAA,CAAgB,GAAA,CAAKhP,CAAAA,EACpBhO,IAAAA,CAACglB,iBAAAA,CAAA,CACC,KAAA,CAAOhX,CAAAA,CAAK,KAAA,CACZ,SAAA,CAAYiX,CAAAA,EAAQjX,CAAAA,CAAK,OAAA,GAAUiX,CAAG,EACtC,SAAA,CAAU,qKAAA,CAGV,QAAA,CAAA,CAAA/kB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uIAAA,CACZ,QAAA,CAAA8N,CAAAA,CAAK,IAAA,CACR,CAAA,CACAhO,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAE,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gBAAA,CAAkB,QAAA,CAAA8N,CAAAA,CAAK,KAAA,CAAM,CAAA,CAC1C9N,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,qCAAA,CAAuC,QAAA,CAAA8N,CAAAA,CAAK,WAAA,CAAY,GACvE,CAAA,CAAA,CAAA,CARKA,CAAAA,CAAK,KASZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACAhO,IAAAA,CAAC2iB,EAAAA,CAAA,CAAqB,IAAA,CAAMY,CAAAA,CAAQ,YAAA,CAAcC,GAAAA,CAChD,UAAAtjB,GAAAA,CAACglB,CAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,CAAA,CAClChlB,GAAAA,CAACuf,EAAAA,CAAA,CAAa,IAAA,CAAMgE,CAAAA,CAAU,YAAA,CAAcC,CAAAA,CAAa,CAAA,CACzDxjB,IAACglB,CAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,CAAA,CAClChlB,GAAAA,CAACif,EAAAA,CAAA,CAAa,IAAA,CAAMwE,CAAAA,CAAU,YAAA,CAAcC,GAAAA,CAAa,CAAA,CACzD1jB,GAAAA,CAACglB,CAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,CAAA,CAClChlB,GAAAA,CAACyf,EAAAA,CAAA,EAAa,CAAA,CACdzf,GAAAA,CAACglB,CAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,CAAA,CAClChlB,GAAAA,CAAC+f,GAAA,EAAY,CAAA,CACb/f,GAAAA,CAACglB,CAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,CAAA,CAClChlB,GAAAA,CAACoe,EAAAA,CAAA,CAAc,IAAA,CAAMuF,CAAAA,CAAW,YAAA,CAAcC,EAAc,CAAA,CAAA,CAC9D,CAAA,CAAA,CAAA,CAvDK,CAAA,EAAG/V,CAAI,CAAA,CAAA,EAAI9K,CAAAA,CAAM,KAAA,EAAO,KAAA,EAASqgB,CAAAA,CAAa,KAAK,CAAA,CAAA,EAAI,MAAA,CAAOrgB,CAAAA,CAAM,KAAA,EAAO,UAAYqgB,CAAAA,CAAa,QAAQ,CAAC,CAAA,CAwDpH,CAAA,CACF,CAAA,CACF,CAAA,CACApjB,GAAAA,CAAC+U,EAAAA,CAAA,CACC,OAAA,CAAShS,CAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,MAClC,QAAA,CAAU2S,CAAAA,CACV,QAAA,CAAWT,CAAAA,EAAY,CACrBc,CAAAA,CAAed,CAAAA,CAASlS,CAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,CAAAA,CAAM,KAAA,EAAO,MACtB,CAAA,CACA/C,GAAAA,CAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CClMO,SAAS8hB,EAAAA,CAAS,CAAE,OAAA,CAAAzP,CAAAA,CAAS,WAAA,CAAAC,CAAAA,CAAa,QAAA,CAAAC,CAAAA,CAAU,QAAA,CAAAC,CAAS,CAAA,CAA6C,CAC/G,GAAM,CAAE,KAAA9H,GAAAA,CAAM,KAAA,CAAA+H,CAAAA,CAAO,OAAA,CAAA3D,CAAQ,CAAA,CAAIwD,CAAAA,CAEjC,SAASI,CAAAA,CACPhT,CAAAA,CACAiT,CAAAA,CACM,CACNH,CAAAA,CAAS9H,GAAAA,CAAM,CACb,GAAGiI,CAAAA,CACH,KAAA,CAAOjT,CAAAA,CAAM,aAAA,CAAc,KAC7B,CAAC,EACH,CAEA,SAASkT,CAAAA,CAAed,CAAAA,CAAkBjP,CAAAA,CAAyC,CACjF2P,EAAS9H,GAAAA,CAAM,CACb,GAAG7H,CAAAA,CACH,QAAA,CAAUiP,CACZ,CAAC,EACH,CAEA,OACEjV,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS0S,EACT,IAAA,CAAM3H,GAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAA9K,GAAM,CAAA,GACfjD,IAAAA,CAACkD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAlD,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,SAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4BAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAACgW,CAAAA,CAAA,CAAW,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CACjB3D,CAAAA,EAAS,QAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,QAAA,CAAAhE,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAAA,CAC7E,CAAA,CACAjS,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CAEf,CAAA,CAAA,CACF,EACAA,GAAAA,CAACiD,CAAAA,CAAA,CACC,QAAA,CAAAjD,GAAAA,CAACilB,IAAAA,CAAA,CACC,SAAA,CAAU,sBAAA,CACV,QAAA,CAAUvP,CAAAA,EAAY3S,GAAAA,CAAM,KAAA,EAAO,QAAA,CAClC,GAAGA,GAAAA,CACJ,QAAA,CAAWF,CAAAA,EAAU,CACnBgT,CAAAA,CAAYhT,CAAAA,CAAOE,GAAAA,CAAM,KAAK,EAChC,CAAA,CACA,KAAA,CAAQA,GAAAA,CAAM,KAAA,EAAO,KAAA,EAAoB,GAC3C,CAAA,CACF,CAAA,CACA/C,GAAAA,CAAC+U,EAAAA,CAAA,CACC,OAAA,CAAShS,GAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,QAAA,CAAU2S,CAAAA,CACV,QAAA,CAAWT,CAAAA,EAAY,CACrBc,CAAAA,CAAed,CAAAA,CAASlS,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACA/C,GAAAA,CAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,EAEJ,CAEJ,CChCA,IAAM+hB,EAAAA,CAAYC,GAAAA,CAUH,SAARC,EAAAA,CAA2C,CAChD,QAAA5P,CAAAA,CACA,YAAA,CAAA4N,CAAAA,CACA,QAAA,CAAAzM,CAAAA,CACA,UAAA,CAAAnD,GAAAA,CACA,gBAAA,CAAA6R,GAAAA,CACA,WAAA,CAAA5P,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,MAAA,CAAA7G,EACA,QAAA,CAAA8G,CACF,CAAA,CAAiD,CAC/C,GAAM,CAAE,IAAA,CAAA9H,GAAAA,CAAM,KAAA,CAAA+H,CAAAA,CAAO,OAAA,CAAA3D,CAAAA,CAAS,YAAA,CAAAqT,CAAa,EAAI7P,CAAAA,CACzC,CAAE,SAAA,CAAAlV,GAAU,CAAA,CAAIqK,SAAAA,EAAU,CAC1BiM,GAAAA,CAAiBxD,CAAAA,EAAY,CAC7BrD,GAAAA,CAAcC,GAAAA,EAAe,CAC7B,CAAE,cAAA6G,CAAc,CAAA,CAAIC,GAAAA,EAAc,CAClCwO,CAAAA,CAAeC,GAAAA,EAAgB,CAC/BC,CAAAA,CAAUpQ,KAAAA,EAAM,CAChBoC,CAAAA,CAAiBpC,KAAAA,EAAM,CACvB4B,CAAAA,CAAatW,OAAuB,IAAI,CAAA,CACxC+kB,CAAAA,CAAsB/kB,MAAAA,CAAiB,EAAE,CAAA,CACzCglB,CAAAA,CAA+BhlB,MAAAA,CAAsB,IAAI,CAAA,CACzDilB,CAAAA,CAAqBjlB,MAAAA,CAAiB,EAAE,CAAA,CACxCklB,CAAAA,CAAyBllB,MAAAA,CAAO,EAAE,CAAA,CAClCmlB,GAAAA,CAA0BnlB,MAAAA,CAAiCyiB,CAAAA,CAAa,oBAAA,EAAwB,EAAE,CAAA,CAClG,CAAClR,CAAAA,CAAQC,CAAS,CAAA,CAAI1S,QAAAA,CAAS,KAAK,CAAA,CACpCsmB,CAAAA,CAActY,OAAAA,CAAQ,IAAMuY,EAAAA,CAAgB5C,CAAAA,CAAa,KAAK,CAAA,CAAG,CAACA,CAAAA,CAAa,KAAK,CAAC,CAAA,CACrF,CAAC6C,CAAAA,CAAMC,CAAO,CAAA,CAAIzmB,QAAAA,CAA8BsmB,CAAW,CAAA,CAC3D,CAACI,CAAAA,CAAmBC,CAAoB,CAAA,CAAI3mB,QAAAA,CAChD,IAAM,OAAO,IAAA,CAAK2jB,CAAAA,CAAa,oBAAA,EAAwBiD,GAAAA,CAAwBN,CAAW,CAAC,CAAA,CAAE,MAC/F,CAAA,CAGM,CAACO,CAAAA,CAAkBC,CAAmB,CAAA,CAAI9mB,QAAAA,CAAS,IACvD,IAAA,CAAK,GAAA,CAAI2jB,CAAAA,CAAa,KAAA,EAAS,CAAA,CAAG2C,CAAAA,CAAY,CAAC,CAAA,EAAG,UAAA,EAAc,CAAA,CAAGA,CAAAA,CAAY,MAAM,CACvF,CAAA,CACMS,IAAuB/Y,OAAAA,CAC3B,IACEgZ,GAAAA,CAA8B,CAC5B,aAAA,CAAe5Y,GAAAA,CACf,UAAA,CAAA2F,GAAAA,CACA,gBAAA,CAAA6R,GAAAA,CACA,MAAA,CAAAxW,CACF,CAAC,CAAA,CACH,CAAC2E,GAAAA,CAAY6R,GAAAA,CAAkBxX,GAAAA,CAAMgB,CAAM,CAC7C,CAAA,CACM,CAAC6X,CAAAA,CAAsB,CAAE,OAAA,CAASC,CAAc,CAAC,CAAA,CAAIC,YAAAA,CAAwC5S,GAAAA;AAAA,IAAA,EAC/FwS,IAAqB,KAAK;AAAA,EAAA,CAC7B,CAAA,CACDrQ,EAAAA,CAAcc,CAAAA,CAAyC9E,CAAS,CAAA,CAEhEtS,UAAU,IAAM,CACd,IAAMgnB,CAAAA,CAAuBC,EAAAA,CAAiBf,CAAW,EAEzDL,CAAAA,CAAoB,OAAA,CAAUK,CAAAA,CAAY,GAAA,CAAKrL,CAAAA,EAAUA,CAAAA,CAAM,GAAG,CAAA,CAClEkL,CAAAA,CAAmB,OAAA,CAAU,EAAC,CAC9B,IAAMmB,CAAAA,CAAsB,CAC1B,GAAI3D,CAAAA,CAAa,oBAAA,EAAwB,EAAC,CAC1C,GAAGiD,GAAAA,CAAwBN,CAAW,CACxC,CAAA,CAEAD,GAAAA,CAAwB,OAAA,CAAUiB,CAAAA,CAClCX,CAAAA,CAAqB,OAAO,IAAA,CAAKW,CAAmB,CAAA,CAAE,MAAM,CAAA,CAC5DR,CAAAA,CAAoB,IAAA,CAAK,GAAA,CAAInD,CAAAA,CAAa,KAAA,EAAS,CAAA,CAAG2C,CAAAA,CAAY,CAAC,CAAA,EAAG,YAAc,CAAA,CAAGA,CAAAA,CAAY,MAAM,CAAC,CAAA,CAE1GG,CAAAA,CAASc,GAAgB,CACvB,IAAMC,EAAAA,CAAuBH,EAAAA,CAAiBE,CAAW,CAAA,CAUzD,OAPEH,CAAAA,GAAyB,EAAA,EACzBI,EAAAA,GAAyB,EAAA,EACzBpB,CAAAA,CAAuB,OAAA,GAAYoB,EAAAA,EAKjCA,EAAAA,GAAyBJ,CAAAA,CACpBG,CAAAA,EAGTnB,CAAAA,CAAuB,OAAA,CAAUgB,CAAAA,CAE1Bd,CAAAA,CACT,CAAC,EACH,CAAA,CAAG,CAAC3C,CAAAA,CAAa,KAAA,CAAOA,CAAAA,CAAa,oBAAA,CAAsB2C,CAAW,CAAC,CAAA,CAEvElmB,SAAAA,CAAU,IAAM,CACd,IAAMqnB,EAAcpQ,CAAAA,CAAcW,CAAc,CAAA,EAAG,OAAA,CAEnD,GAAI,CAACyP,CAAAA,CACH,OAGF,IAAMC,CAAAA,CAAiBD,CAAAA,CACpB,GAAA,CAAI,CAACxP,CAAAA,CAAY0P,IAAUC,EAAAA,CAAe3P,CAAAA,CAAW,KAAA,CAAOA,CAAAA,CAAW,SAAA,EAAa0P,CAAK,CAAC,CAAA,CAC1F,MAAA,CAAQ1M,CAAAA,EAAsC,CAAA,CAAQA,CAAM,CAAA,CACzD4M,EAAwBR,EAAAA,CAAiBK,CAAc,CAAA,CACvDI,EAAAA,CAAgBT,EAAAA,CAAiBb,CAAI,CAAA,CACrCuB,EAAAA,CAAuB7B,CAAAA,CAA6B,OAAA,CAEtD6B,EAAAA,GAAyBD,EAAAA,EAAiBD,CAAAA,GAA0BE,EAAAA,GAIxE7B,EAA6B,OAAA,CAAU,IAAA,CAEnC2B,CAAAA,GAA0BC,EAAAA,EAC5BrB,CAAAA,CAAQiB,CAAc,CAAA,EAE1B,CAAA,CAAG,CAAC1P,CAAAA,CAAgBX,CAAAA,CAAemP,CAAI,CAAC,CAAA,CAExCpmB,UAAU,IAAM,CACd,IAAM0nB,CAAAA,CAAgBT,EAAAA,CAAiBb,CAAI,CAAA,CAE3C,GAAIJ,CAAAA,CAAuB,OAAA,GAAY0B,CAAAA,CACrC,OAGF,IAAME,CAAAA,CAAUxB,EAAK,GAAA,CAAI,CAACvL,EAAAA,CAAO0M,CAAAA,IAAW,CAC1C,GAAA,CAAK1M,GAAM,GAAA,CACX,SAAA,CAAW0M,CAAAA,CACX,KAAA,CAAO,CACL,GAAG1M,GACH,SAAA,CAAW0M,CACb,CACF,CAAA,CAAE,CAAA,CACIM,CAAAA,CAASzB,CAAAA,CAAK,GAAA,CAAKvL,EAAAA,EAAUA,EAAAA,CAAM,GAAG,CAAA,CACtCiN,EAAAA,CAAa/B,CAAAA,CAAmB,QAAQ,MAAA,CAAQgC,EAAAA,EAAQ,CAACF,CAAAA,CAAO,QAAA,CAASE,EAAG,CAAC,CAAA,CAEnF/B,CAAAA,CAAuB,OAAA,CAAU0B,CAAAA,CAEjCvX,GAAAA,CAAY,CACV,IAAA,CAAM,kBACN,OAAA,CAAS,CACP,CAACyH,CAAc,EAAG,CAChB,OAAA,CAAAgQ,CAAAA,CACA,UAAA,CAAAE,EACF,CACF,CACF,CAAC,CAAA,CAEDhS,EAAS9H,GAAAA,CAAM,CACb,GAAGuV,CAAAA,CACH,oBAAA,CAAsB0C,GAAAA,CAAwB,QAC9C,aAAA,CAAe,CACb,OAAA,CAAA2B,CAAAA,CACA,UAAA,CAAAE,EACF,EACA,KAAA,CAAO1B,CACT,CAAC,EACH,CAAA,CAAG,CAACjW,GAAAA,CAAaoT,CAAAA,CAAcvV,GAAAA,CAAM4J,CAAAA,CAAgBwO,CAAAA,CAAMtQ,CAAQ,CAAC,CAAA,CAEpE,IAAMkS,EAAAA,CAAa,IAAA,CAAK,GAAA,CAAIvB,CAAAA,CAAkBH,CAAiB,CAAA,CACzD2B,EAAAA,CAAU,CAAA,CAAQnR,CAAAA,EAAakR,EAAAA,CAAa1B,CAAAA,CAE5C4B,EAAAA,CAAiBC,WAAAA,CAAY,IAAM,CACvC,GAAI,CAACrR,CAAAA,EAAYgQ,CAAAA,EAAiB,CAACmB,EAAAA,CACjC,OAGF,IAAMG,CAAAA,CAAY9B,CAAAA,CAAoBjB,EAAAA,CAEjCwB,CAAAA,CAAqB,CACxB,SAAA,CAAW,CACT,KAAA,CAAO,CAAE,GAAA,CAAK,CAAE,EAAA,CAAI/P,CAAS,CAAE,CAAA,CAC/B,KAAA,CAAOsR,CACT,CACF,CAAC,CAAA,CACE,KAAMC,CAAAA,EAAW,CAChB,IAAMC,CAAAA,CAAaD,CAAAA,CAAO,IAAA,GAAO7C,GAAgB,CAAA,CAE3C3N,EAAAA,CAAAA,CADS,KAAA,CAAM,OAAA,CAAQyQ,CAAU,CAAA,CAAIA,CAAAA,CAAW,CAAC,CAAA,CAAI,MAAA,IAC/B,CAAA,EAAGta,GAAI,CAAA,UAAA,CAAY,CAAA,CACzCua,CAAAA,CAAgBC,GAAAA,CAA+B3Q,EAAU,CAAA,CACzD4Q,CAAAA,CAAgBF,CAAAA,CAAc,CAAC,CAAA,EAAG,WAMxC,GAJI,OAAOE,CAAAA,EAAkB,QAAA,EAC3B/B,CAAAA,CAAoB+B,CAAa,CAAA,CAG/BF,CAAAA,CAAc,MAAA,GAAW,CAAA,CAAG,CAE9B7B,CAAAA,CAAoBJ,CAAiB,CAAA,CAErC,MACF,CAEA,IAAMoC,CAAAA,CAAqB,MAAA,CAAO,IAAA,CAAKzC,GAAAA,CAAwB,OAAO,CAAA,CAAE,MAAA,CAClEiB,EAAAA,CAAsB,CAC1B,GAAGjB,GAAAA,CAAwB,QAC3B,GAAGO,GAAAA,CAAwB+B,CAAa,CAC1C,CAAA,CACMI,EAAAA,CAAkB,MAAA,CAAO,IAAA,CAAKzB,EAAmB,CAAA,CAAE,MAAA,CAEzDjB,GAAAA,CAAwB,OAAA,CAAUiB,EAAAA,CAClCX,EAAqBoC,EAAe,CAAA,CAAA,CAIhCJ,CAAAA,CAAc,MAAA,CAASH,CAAAA,EAAaO,EAAAA,EAAmBD,CAAAA,GACzDhC,CAAAA,CAAoBiC,EAAe,CAAA,CAGrC,IAAA,IAAW9N,CAAAA,IAAS0N,CAAAA,CACb1C,CAAAA,CAAoB,QAAQ,QAAA,CAAShL,CAAAA,CAAM,GAAG,CAAA,GACjDgL,CAAAA,CAAoB,OAAA,CAAU,CAAC,GAAGA,CAAAA,CAAoB,OAAA,CAAShL,CAAAA,CAAM,GAAG,CAAA,CAAA,CAI5EwL,CAAAA,CAASc,GAAgB,CACvB,IAAMyB,EAAAA,CAAa,IAAI,GAAA,CAAIzB,CAAAA,CAAY,IAAKtM,EAAAA,EAAUA,EAAAA,CAAM,GAAG,CAAC,CAAA,CAC1DgO,EAAAA,CAAa,IAAI,GAAA,CAAI9C,CAAAA,CAAmB,OAAO,CAAA,CAC/C+C,EAAAA,CAAWP,CAAAA,CAAc,MAAA,CAAQ1N,EAAAA,EAAU,CAAC+N,EAAAA,CAAW,GAAA,CAAI/N,EAAAA,CAAM,GAAG,CAAA,EAAK,CAACgO,EAAAA,CAAW,GAAA,CAAIhO,EAAAA,CAAM,GAAG,CAAC,CAAA,CAEzG,GAAIiO,EAAAA,CAAS,MAAA,GAAW,CAAA,CAEtB,OAAA9C,CAAAA,CAAuB,OAAA,CAAU,EAAA,CAE1B,CAAC,GAAGmB,CAAW,CAAA,CAGxB,IAAM4B,EAAAA,CAAW,CAAC,GAAG5B,CAAAA,CAAa,GAAG2B,EAAQ,CAAA,CAE7C,OAAAhD,CAAAA,CAA6B,OAAA,CAAUmB,GAAiB8B,EAAQ,CAAA,CAEzDA,EACT,CAAC,EACH,CAAC,EACA,KAAA,CAAOhnB,CAAAA,EAAmB,CACzB,OAAA,CAAQ,KAAA,CAAM,6BAAA,CAA+BA,CAAK,EACpD,CAAC,EACL,CAAA,CAAG,CAAC+U,CAAAA,CAAU0O,GAAAA,CAAkBqB,CAAAA,CAAsBoB,EAAAA,CAASnB,CAAAA,CAAeR,CAAAA,CAAmBtY,GAAI,CAAC,CAAA,CAEtG,SAASgb,CAAAA,CAAgBhmB,CAAAA,CAA6B,CACpDA,CAAAA,CAAM,cAAA,EAAe,CACrBA,CAAAA,CAAM,eAAA,EAAgB,CAElB,CAAA6S,CAAAA,EAIJmB,GAAAA,CAAe,CACb,IAAA,CAAM,mBACN,OAAA,CAAS,CACP,sBAAA,CAAwB,IAAA,CAAK,GAAA,CAAIoP,CAAAA,CAAK,MAAA,CAAQ4B,EAAU,CAAA,CACxD,UAAA,CAAYvC,CAAAA,EAAc,MAAA,EAAU,QAAA,CACpC,QAAA,CAAA3O,EACA,cAAA,CAAAc,CAAAA,CACA,IAAA,CAAM,UAAA,CACN,WAAA,CAAaxF,CAAAA,EAAS,MACxB,CACF,CAAC,EACH,CAEA,eAAekH,EAAAA,CAAatW,EAAsC,CAIhE,GAHAA,CAAAA,CAAM,cAAA,EAAe,CACrBA,CAAAA,CAAM,eAAA,EAAgB,CAElB6S,CAAAA,CACF,OAGF,IAAMoT,CAAAA,CAAiB,MAAMvD,CAAAA,CAAa,CACxC,SAAA,CAAAhlB,GAAAA,CACA,MAAA,CAAQ0R,CAAAA,EAAS,MAAA,EAAU,SAAA,CAC3B,QAAA,CAAU,IAAA,CACV,QAAA,CAAU,CAAA,CAAI,IAAA,CAAO,IACvB,CAAC,CAAA,CAEDiU,EAASc,CAAAA,EAAgB,CACvB,IAAMyB,EAAAA,CAAa,IAAI,GAAA,CAAIzB,CAAAA,CAAY,GAAA,CAAKtM,CAAAA,EAAUA,CAAAA,CAAM,GAAG,CAAC,CAAA,CAC1DqO,EAAAA,CAAaD,EAChB,GAAA,CAAI,CAACjQ,CAAAA,CAAUuO,CAAAA,IAAW,CACzB,GAAGvO,EAAS,KAAA,CACZ,SAAA,CAAWmO,CAAAA,CAAY,MAAA,CAASI,CAClC,CAAA,CAAE,EACD,MAAA,CAAQ1M,CAAAA,EAAU,CAAC+N,EAAAA,CAAW,GAAA,CAAI/N,CAAAA,CAAM,GAAG,CAAC,CAAA,CACzCkO,CAAAA,CAAWI,EAAAA,CAAc,CAAC,GAAGhC,CAAAA,CAAa,GAAG+B,EAAU,CAAC,CAAA,CAE9D,OAAApD,CAAAA,CAA6B,OAAA,CAAUmB,EAAAA,CAAiB8B,CAAQ,CAAA,CAEzDA,CACT,CAAC,EACH,CAEA,SAASK,GAAYC,CAAAA,CAAuB,CAC1ChD,CAAAA,CAASc,CAAAA,EAAgB,CACvB,IAAM4B,CAAAA,CAAWI,EAAAA,CAAchC,CAAAA,CAAY,MAAA,CAAQtM,EAAAA,EAAUA,EAAAA,CAAM,GAAA,GAAQwO,CAAO,CAAC,CAAA,CAEnF,OAAIxD,CAAAA,CAAoB,OAAA,CAAQ,QAAA,CAASwD,CAAO,GAAK,CAACtD,CAAAA,CAAmB,OAAA,CAAQ,QAAA,CAASsD,CAAO,CAAA,GAC/FtD,EAAmB,OAAA,CAAU,CAAC,GAAGA,CAAAA,CAAmB,OAAA,CAASsD,CAAO,CAAA,CAAA,CAGtEvD,CAAAA,CAA6B,OAAA,CAAUmB,EAAAA,CAAiB8B,CAAQ,CAAA,CAEzDA,CACT,CAAC,EACH,CAEA,SAASO,EAAAA,CAAUD,CAAAA,CAAiBE,CAAAA,CAAyB,CAC3DlD,CAAAA,CAASc,CAAAA,EAAgB,CACvB,IAAMqC,EAAAA,CAAerC,CAAAA,CAAY,SAAA,CAAWtM,EAAAA,EAAUA,GAAM,GAAA,GAAQwO,CAAO,CAAA,CACrEI,EAAAA,CAAYD,EAAAA,CAAeD,CAAAA,CAEjC,GAAIC,EAAAA,CAAe,CAAA,EAAKC,EAAAA,CAAY,CAAA,EAAKA,EAAAA,EAAatC,CAAAA,CAAY,MAAA,CAChE,OAAOA,CAAAA,CAGT,IAAM4B,CAAAA,CAAW,CAAC,GAAG5B,CAAW,EAC1B,CAACtM,CAAK,CAAA,CAAIkO,CAAAA,CAAS,MAAA,CAAOS,EAAAA,CAAc,CAAC,CAAA,CAE/C,GAAI,CAAC3O,CAAAA,CACH,OAAOsM,CAAAA,CAGT4B,CAAAA,CAAS,MAAA,CAAOU,EAAAA,CAAW,CAAA,CAAG5O,CAAK,CAAA,CAEnC,IAAM6O,CAAAA,CAAaP,GAAcJ,CAAQ,CAAA,CAEzC,OAAAjD,CAAAA,CAA6B,OAAA,CAAUmB,EAAAA,CAAiByC,CAAU,CAAA,CAE3DA,CACT,CAAC,EACH,CAEA,IAAMC,EAAAA,CAAe,KAAK,GAAA,CAAIvD,CAAAA,CAAK,MAAA,CAAQ4B,EAAU,CAAA,CAC/C4B,EAAAA,CAAmBxD,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAExC,OACEjmB,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS0S,CAAAA,CACT,YAAA,CAAc4N,CAAAA,CACd,IAAA,CAAMvV,GAAAA,CACN,OAAQ,IACN/N,IAAAA,CAACkD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAhD,GAAAA,CAACgW,EAAA,CAAU,OAAA,CAASyP,CAAAA,CAAU,QAAA,CAAA7P,CAAAA,CAAM,CAAA,CACnC3D,CAAAA,EAAS,OAAA,CAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,QAAA,CAAAhE,CAAAA,CAAQ,OAAA,CAAQ,EAAqB,IAAA,CAC3EjS,GAAAA,CAACiD,CAAAA,CAAA,CAAY,SAAA,CAAU,uDAAA,CACrB,QAAA,CAAAjD,GAAAA,CAAC,KAAA,CAAA,CACC,eAAA,CAAe,CAAA,4BAAA,EAA+B6N,GAAI,CAAA,CAAA,CAClD,eAAA,CAAeqE,EACf,SAAA,CAAW,CAAA,mRAAA,EACTA,CAAAA,CAAS,2DAAA,CAA8D,EACzE,CAAA,mBAAA,CAAA,CACA,OAAA,CAAUrP,CAAAA,EAAU,CAClBA,CAAAA,CAAM,cAAA,EAAe,CACrBA,CAAAA,CAAM,eAAA,GACNoU,CAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1B9E,CAAAA,CAAU,IAAI,EAChB,CAAA,CACA,GAAA,CAAK8E,CAAAA,CACL,IAAA,CAAK,UAAA,CACL,QAAA,CAAU,EAEV,QAAA,CAAAnX,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+BAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oDAAA,CACZ,QAAA,CAAA,CAAAoS,CAAAA,EAAU+T,CAAAA,CAAK,MAAA,CAAS,EACvBnmB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yDAAA,CACZ,QAAA,CAAA,CAAA0pB,EAAAA,CAAa,GAAA,CAAEA,EAAAA,GAAiB,CAAA,CAAI,OAAA,CAAU,QAAA,CAC9C1B,EAAAA,CAAU,CAAA,EAAA,EAAK7B,CAAAA,CAAK,MAAM,CAAA,QAAA,CAAA,CAAa,EAAA,CAAG,WAAA,CAAA,CAC7C,CAAA,CACEA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAChBnmB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CACZ,QAAA,CAAA,CAAA2pB,EAAAA,CAAiB,GAAA,CAAK/O,GACrB1a,GAAAA,CAAC0pB,EAAAA,CAAA,CAAe,KAAA,CAAOhP,CAAAA,CAAAA,CAAYA,CAAAA,CAAM,GAAK,CAC/C,CAAA,CACA,CAACxI,CAAAA,EAAUsX,EAAAA,CAAe,CAAA,CACzB1pB,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0IAAA,CAA2I,QAAA,CAAA,CAAA,GAAA,CACtJ0pB,EAAAA,CAAe,CAAA,CAAA,CACnB,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CAEA1pB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yDAAA,CACb,QAAA,CAAA,CAAAE,IAAC0Z,KAAAA,CAAA,CAAU,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAE,yBAAA,CAAA,CAEjD,CAAA,CAEF1Z,GAAAA,CAACuL,GAAAA,CAAA,CACC,QAAA,CAAAzL,IAAAA,CAAC0L,GAAAA,CAAA,CACC,UAAAxL,GAAAA,CAACyL,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAzL,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,+GAAA,CACV,EAAA,CAAI8iB,CAAAA,CACJ,OAAA,CAAU5iB,GAAU,CAClBA,CAAAA,CAAM,cAAA,EAAe,CACrBA,CAAAA,CAAM,eAAA,GACNsP,CAAAA,CAAWnM,CAAAA,EAAU,CAACA,CAAK,EAC7B,CAAA,CACA,KAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAEP,QAAA,CAAAkM,CAAAA,CAASlS,GAAAA,CAACua,GAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CAAKva,GAAAA,CAACsa,SAAAA,CAAA,CAAU,UAAU,eAAA,CAAgB,CAAA,CAC3F,CAAA,CACF,CAAA,CACAta,GAAAA,CAAC2L,GAAAA,CAAA,CACC,QAAA,CAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAG,QAAA,CAAAkS,CAAAA,CAAS,OAAA,CAAU,cAAA,CAAe,EACxC,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACAlS,GAAAA,CAACwa,CAAAA,CAAA,CAAY,SAAA,CAAU,iCAAA,CAAkC,YAAA,CAAcrI,CAAAA,CAAW,IAAA,CAAMD,CAAAA,CACtF,QAAA,CAAAlS,IAACya,CAAAA,CAAA,CAAmB,SAAA,CAAU,WAAA,CAC5B,QAAA,CAAA3a,IAAAA,CAAC,OACC,SAAA,CAAU,2CAAA,CACV,EAAA,CAAI,CAAA,4BAAA,EAA+B+N,GAAI,CAAA,CAAA,CAEvC,UAAA/N,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC6C,GAAAA,CAAA,CAAO,SAAA,CAAU,QAAA,CAAS,QAAA,CAAU+S,CAAAA,CAAU,OAAA,CAASmT,CAAAA,CAAiB,QAAQ,SAAA,CAC/E,QAAA,CAAA,CAAA7oB,GAAAA,CAACkM,IAAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAE,eAAA,CAAA,CAE5C,CAAA,CACApM,IAAAA,CAAC6C,GAAAA,CAAA,CACC,SAAA,CAAU,SACV,QAAA,CAAU+S,CAAAA,CACV,OAAA,CAAU7S,CAAAA,EAAO,CAAQsW,EAAAA,CAAatW,CAAK,EAAA,CAAA,CAC3C,OAAA,CAAQ,SAAA,CAER,QAAA,CAAA,CAAA7C,GAAAA,CAAC2Z,MAAAA,CAAA,CAAW,UAAU,uBAAA,CAAwB,CAAA,CAAE,eAAA,CAAA,CAElD,CAAA,CAAA,CACF,CAAA,CACCsM,CAAAA,CAAK,OAAS,CAAA,CACbnmB,IAAAA,CAACqiB,CAAAA,CAAA,CAAW,SAAA,CAAU,sBAAA,CACpB,UAAAniB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4EAAA,CACZ,QAAA,CAAAimB,CAAAA,CAAK,GAAA,CAAI,CAACvL,CAAAA,CAAO0M,CAAAA,GAChBpnB,GAAAA,CAAC2pB,EAAAA,CAAA,CACC,KAAA,CAAOjP,EACP,KAAA,CAAO0M,CAAAA,CACP,OAAA,CAASA,CAAAA,GAAU,CAAA,CACnB,MAAA,CAAQA,CAAAA,GAAUnB,CAAAA,CAAK,MAAA,CAAS,CAAA,CAEhC,SAAA,CAAWkD,EAAAA,CACX,QAAA,CAAUzT,CAAAA,CACV,YAAauT,EAAAA,CAAAA,CAHRvO,CAAAA,CAAM,GAIb,CACD,CAAA,CACH,CAAA,CACCoN,EAAAA,CACC9nB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2CAAA,CACb,QAAA,CAAAA,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,QAAA,CACV,QAAA,CAAUgkB,CAAAA,CACV,OAAA,CAAU9jB,CAAAA,EAAU,CAClBA,CAAAA,CAAM,cAAA,EAAe,CACrBA,CAAAA,CAAM,eAAA,EAAgB,CACtBklB,KACF,CAAA,CACA,IAAA,CAAK,QAAA,CACL,OAAA,CAAQ,SAAA,CAEP,QAAA,CAAApB,CAAAA,CACG,eAAA,CACA,CAAA,WAAA,EAAcR,CAAiB,CAAA,IAAA,EAAO0B,EAAU,CAAA,CAAA,CAAA,CACtD,EACF,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CACA7nB,GAAAA,CAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,EAEJ,CAEJ,CAEA,SAASumB,EAAAA,CAAe,CAAE,KAAA,CAAAhP,CAAM,CAAA,CAA8C,CAG5E,OAFgBkP,EAAAA,CAAalP,CAAK,CAAA,CAWhC1a,GAAAA,CAAC,OACC,GAAA,CAAK0a,CAAAA,CAAM,gBAAA,EAAoB,OAAA,CAC/B,SAAA,CAAU,4EAAA,CACV,IAAK,CAAA,EAAGxB,GAAe,CAAA,EAAGwB,CAAAA,CAAM,IAAI,CAAA,mBAAA,CAAA,CACtC,EAXE1a,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sGAAA,CACb,QAAA,CAAAA,GAAAA,CAAC0Z,KAAAA,CAAA,CAAU,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAChE,CAWN,CAEA,SAASiQ,GAAkB,CACzB,KAAA,CAAAjP,CAAAA,CACA,KAAA,CAAA0M,CAAAA,CACA,OAAA,CAAAyC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,SAAA,CAAAX,CAAAA,CACA,QAAA,CAAAzT,CAAAA,CACA,WAAA,CAAAuT,CACF,CAAA,CAQgB,CACd,OACEnpB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gGAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kFAAA,CACZ,QAAA,CAAA4pB,EAAAA,CAAalP,CAAK,CAAA,CACjB1a,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK0a,CAAAA,CAAM,gBAAA,EAAoB,QAC/B,SAAA,CAAU,qCAAA,CACV,GAAA,CAAK,CAAA,EAAGxB,GAAe,CAAA,EAAGwB,EAAM,IAAI,CAAA,mBAAA,CAAA,CACtC,CAAA,CAEA1a,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+DAAA,CACb,QAAA,CAAAA,GAAAA,CAAC0Z,KAAAA,CAAA,CAAU,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAChE,EAEJ,CAAA,CACA5Z,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCAAA,CAAiC,KAAA,CAAO4a,CAAAA,CAAM,gBAAA,CAC1D,QAAA,CAAA,CAAA0M,CAAAA,CAAQ,CAAA,CAAE,IAAA,CAAG1M,CAAAA,CAAM,gBAAA,EAAoBA,EAAM,IAAA,CAAA,CAChD,CAAA,CACA5a,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CACb,QAAA,CAAA,CAAAE,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,eAAA,CACV,QAAA,CAAU+S,CAAAA,EAAYmU,EACtB,OAAA,CAAS,IAAMV,CAAAA,CAAUzO,CAAAA,CAAM,GAAA,CAAK,EAAE,EACtC,IAAA,CAAK,MAAA,CACL,IAAA,CAAK,QAAA,CACL,OAAA,CAAQ,OAAA,CAER,SAAA1a,GAAAA,CAAC+pB,OAAAA,CAAA,CAAY,SAAA,CAAU,mBAAA,CAAoB,CAAA,CAC7C,CAAA,CACA/pB,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,eAAA,CACV,QAAA,CAAU+S,CAAAA,EAAYoU,EACtB,OAAA,CAAS,IAAMX,CAAAA,CAAUzO,CAAAA,CAAM,GAAA,CAAK,CAAC,CAAA,CACrC,IAAA,CAAK,MAAA,CACL,IAAA,CAAK,QAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAA1a,IAACgqB,SAAAA,CAAA,CAAc,SAAA,CAAU,mBAAA,CAAoB,CAAA,CAC/C,CAAA,CACAhqB,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,0BAAA,CACV,QAAA,CAAU+S,CAAAA,CACV,OAAA,CAAS,IAAMuT,CAAAA,CAAYvO,CAAAA,CAAM,GAAG,CAAA,CACpC,IAAA,CAAK,MAAA,CACL,KAAK,QAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAA1a,GAAAA,CAACua,GAAAA,CAAA,CAAU,SAAA,CAAU,mBAAA,CAAoB,CAAA,CAC3C,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,SAASyL,EAAAA,CAAgBhgB,CAAAA,CAAqC,CAC5D,OAAK,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAIjBA,CAAAA,CACJ,GAAA,CAAI,CAAC8H,CAAAA,CAAMsZ,CAAAA,GAAUC,EAAAA,CAAevZ,CAAAA,CAAMsZ,CAAK,CAAC,CAAA,CAChD,MAAA,CAAQ1M,CAAAA,EAAsC,CAAA,CAAQA,CAAM,CAAA,CAC5D,IAAA,CAAK,CAACuP,CAAAA,CAAGC,CAAAA,GAAAA,CAAOD,CAAAA,CAAE,SAAA,EAAa,MAAA,CAAO,gBAAA,GAAqBC,CAAAA,CAAE,SAAA,EAAa,MAAA,CAAO,gBAAA,CAAiB,CAAA,CAN5F,EAOX,CAEA,SAASpD,EAAAA,CAAiBb,CAAAA,CAAmC,CAC3D,OAAOA,CAAAA,CAAK,GAAA,CAAI,CAACvL,CAAAA,CAAO0M,CAAAA,GAAU,CAAA,EAAG1M,EAAM,GAAG,CAAA,CAAA,EAAIA,CAAAA,CAAM,SAAA,EAAa0M,CAAK,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CACxF,CAEA,SAAS4B,EAAAA,CAAc/C,CAAAA,CAAgD,CACrE,OAAOA,CAAAA,CAAK,GAAA,CAAI,CAACkE,CAAAA,CAAK/C,CAAAA,IAAW,CAAE,GAAG+C,CAAAA,CAAK,SAAA,CAAW/C,CAAM,CAAA,CAAE,CAChE,CAEA,SAASC,EAAAA,CAAerhB,CAAAA,CAAgBokB,CAAAA,CAA6C,CACnF,GAAI,CAACpkB,CAAAA,EAAS,OAAOA,CAAAA,EAAU,QAAA,EAAY,EAAE,KAAA,GAASA,CAAAA,CAAAA,EAAU,EAAE,SAAUA,CAAAA,CAAAA,CAC1E,OAAO,IAAA,CAGT,IAAM0U,CAAAA,CAAQ1U,CAAAA,CAEd,OAAO,CACL,GAAA,CAAK,MAAA,CAAO0U,CAAAA,CAAM,GAAA,EAAO,EAAE,EAC3B,IAAA,CAAM,MAAA,CAAOA,CAAAA,CAAM,IAAA,EAAQ,EAAE,CAAA,CAC7B,gBAAA,CAAkB,MAAA,CAAOA,CAAAA,CAAM,gBAAA,EAAoB,EAAE,CAAA,CACrD,IAAA,CAAM,MAAA,CAAOA,EAAM,IAAA,EAAQ,CAAC,CAAA,CAC5B,QAAA,CAAU,MAAA,CAAOA,CAAAA,CAAM,QAAA,EAAY,EAAE,CAAA,CACrC,IAAA,CAAM,MAAA,CAAOA,CAAAA,CAAM,IAAA,EAAQ,EAAE,EAC7B,KAAA,CAAO,MAAA,CAAOA,CAAAA,CAAM,KAAA,EAAS,CAAC,CAAA,CAC9B,MAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAM,MAAA,EAAU,CAAC,CAAA,CAChC,SAAA,CAAWA,CAAAA,CAAM,WAAa0P,CAAAA,CAC9B,UAAA,CAAY,OAAO1P,CAAAA,CAAM,UAAA,EAAe,QAAA,CAAWA,EAAM,UAAA,CAAa,MACxE,CACF,CAEA,SAASkP,EAAAA,CAAalP,EAAmC,CACvD,OAAO,CAAA,EACJA,CAAAA,CAAM,QAAA,EAAYA,CAAAA,CAAM,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,EAAM,mCAAA,CAAoC,IAAA,CAAKA,CAAAA,CAAM,IAAI,EAElH,CC9nBO,SAAS2P,EAAAA,CAA2B,CAAE,OAAAxX,CAAAA,CAAQ,GAAA,CAAAsX,CAAI,CAAA,CAAiD,CAExG,IAAMxT,CAAAA,CAAWwT,CAAAA,CAAI,QAAA,CAAS,GAAA,CAE9B,SAASG,CAAAA,EAAqB,CAC5BzX,CAAAA,CAAO8D,CAAQ,EACjB,CAEA,OACE3W,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAAF,IAAAA,CAAC6C,GAAAA,CAAA,CAAO,SAAA,CAAU,sCAAA,CAAuC,OAAA,CAAS2nB,EAAc,OAAA,CAAQ,OAAA,CACtF,QAAA,CAAA,CAAAtqB,GAAAA,CAACuqB,MAAAA,CAAA,CAAO,UAAU,eAAA,CAAgB,CAAA,CAClCvqB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAa,kBAAM,CAAA,CAAA,CACrC,CAAA,CACF,CAEJ,CCQA,IAAMklB,EAAAA,CAAY,EAAA,CAEH,SAARsF,EAAAA,CAAsC,CAC3C,OAAA,CAAAhV,CAAAA,CACA,YAAA,CAAApF,CAAAA,CACA,YAAA,CAAAgT,CAAAA,CACA,QAAA,CAAAzM,GAAAA,CACA,UAAA,CAAAnD,GAAAA,CACA,WAAA,CAAAiC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,OAAA7G,CAAAA,CACA,KAAA,CAAAmG,CAAAA,CACA,QAAA,CAAAW,GACF,CAAA,CAAiD,CAC/C,GAAM,CAACzD,CAAAA,CAAQC,CAAS,CAAA,CAAI1S,QAAAA,CAAS,KAAK,EACpCwX,CAAAA,CAAatW,MAAAA,CAAuB,IAAI,CAAA,CAC9CwV,EAAAA,CAAcc,CAAAA,CAAyC9E,CAAS,CAAA,CAChE,GAAM,CAAC8T,GAAAA,CAAMC,GAAO,CAAA,CAAIzmB,SAAgC,EAAE,CAAA,CACpD,CAAE,IAAA,CAAAoO,CAAAA,CAAM,KAAA,CAAA+H,GAAAA,CAAO,OAAA,CAAA3D,CAAAA,CAAS,YAAA,CAAAqT,CAAa,CAAA,CAAI7P,CAAAA,CACzCgV,EAAiCnF,CAAAA,EAAc,MAAA,EAAUzX,CAAAA,CACzDgJ,CAAAA,CAAiBxD,CAAAA,EAAY,CAC7BrD,CAAAA,CAAcC,GAAAA,EAAe,CAC7B,CAAE,aAAA,CAAA6G,CAAc,CAAA,CAAIC,GAAAA,GACpB0O,CAAAA,CAAUpQ,KAAAA,EAAM,CAChBoC,CAAAA,CAAiBpC,KAAAA,EAAM,CACvBqV,GAAAA,CAA2BC,IAAAA,CAAKC,MAAAA,CAAOH,CAAAA,CAAwB,MAAM,CAAC,CAAA,CAAE5b,CAAM,EAC9Egc,CAAAA,CAAqCH,GAAAA,EAA0B,UAAA,EAAc,EAAC,CAE9EI,CAAAA,CADmBH,KAAKC,MAAAA,CAAOpX,GAAAA,CAAY,MAAM,CAAC,CAAA,CAAE3E,CAAM,GACvB,IAAA,EAAQ,EAAA,CAC7Ckc,CAAAA,CAQEC,CAAAA,CAAwBH,CAAAA,CAAmC,IAAA,CAC9DI,CAAAA,EAASA,CAAAA,CAAK,YAAA,EAAc,MAAA,GAAWH,CAC1C,CAAA,CAEIE,CAAAA,GACFD,CAAAA,CAAiBC,EAAsB,IAAA,CAAA,CAGzC,IAAME,CAAAA,CAAuBC,GAAAA,CAAoBT,GAAwB,CAAA,EAAG,IAAA,EAAQ,EAAA,CAC9E3E,CAAAA,CAActY,OAAAA,CAClB,IACE2V,CAAAA,CAAa,KAAA,CACTgI,EAAAA,CAAY,CACV,IAAA,CAAMhI,CAAAA,CAAa,KAAA,CACnB,YAAA,CAAAhT,CAAAA,CAEA,wBAAA,CAAAsa,GAAAA,CACA,KAAA,CAAA1V,CACF,CAAC,CAAA,CACD,GACN,CAAC5E,CAAAA,CAAcgT,CAAAA,CAAc8H,CAAAA,CAAsBR,GAAAA,CAA0B1V,CAAK,CACpF,CAAA,CACMqW,CAAAA,CAAcC,GAAAA,CAAqB,CACvC,aAAA,CAAezd,CAAAA,CACf,iBAAA,CAAmB4c,EACnB,KAAA,CAAAzV,CAAAA,CACA,MAAA,CAAAnG,CACF,CAAC,CAAA,CAEK0c,GAAAA,CAAetF,GAAAA,CAAK,MAAA,CAASA,GAAAA,CAAK,KAAA,CAAM,CAAA,CADzB,EACwC,CAAA,CAAE,IAAKkE,CAAAA,EAAQA,CAAAA,CAAIe,CAAoB,CAAW,CAAA,CAAI,EAAC,CAC9GM,CAAAA,CAAsB,IAAA,CAAK,GAAA,CAAIvF,GAAAA,CAAK,MAAA,CAAQ7C,CAAAA,CAAa,KAAA,EAAS,CAAC,CAAA,CAAImI,GAAAA,CAAa,MAAA,CACpF,CAACE,CAAAA,CAAS,CAAE,OAAA,CAAAC,EAAAA,CAAS,IAAA,CAAA/pB,EAAK,CAAC,CAAA,CAAIilB,YAAAA,CAAwD5S,GAAAA;AAAA,IAAA,EACzFqX,EAAY,KAAK;AAAA,EAAA,CACpB,CAAA,CAEKM,EAAAA,CAAUC,CAAAA,CAAkD,CAChE,gBAAA,CAAkBlB,GAAAA,EAA0B,UAAA,EAAc,EAAC,CAC3D,gBAAA,CAAkBhV,CAAAA,CACd,MAAA,CACCyU,CAAAA,EAAQ0B,EAAAA,CAAe,CAAE,WAAA,CAAA7b,CAAAA,CAAa,cAAA,CAAAyH,CAAAA,CAAgB,aAAA,CAAAX,CAAAA,CAAe,GAAA,CAAAqT,CAAAA,CAAK,OAAA,CAAAjE,GAAQ,CAAC,CAC1F,CAAC,EAEDrmB,SAAAA,CAAU,IAAM,CACdqmB,GAAAA,CAAQH,CAAW,CAAA,CAEf3C,CAAAA,CAAa,KAAA,GAAU,EAAA,EAK3BpT,CAAAA,CAAY,CACV,IAAA,CAAM,iBAAA,CACN,OAAA,CAAS,CACP,CAACyH,CAAc,EAAG,CAChB,OAAA,CAAS,EAAC,CACV,UAAA,CAAY,EACd,CACF,CACF,CAAC,EACH,CAAA,CAAG,CAACzH,CAAAA,CAAarO,GAAMokB,CAAAA,CAAatO,CAAAA,CAAgB2L,CAAAA,CAAcpO,CAAK,CAAC,CAAA,CAOxEnV,SAAAA,CAAU,IAAM,CACd8V,GAAAA,CAAS9H,CAAAA,CAAM,CAAE,GAAGuV,CAAAA,CAAc,aAAA,CAAetM,CAAAA,CAAcW,CAAc,CAAE,CAAC,EAClF,CAAA,CAAG,CAAC2L,CAAAA,CAActM,CAAAA,CAAeW,CAAAA,CAAgB9B,GAAAA,CAAU9H,CAAI,CAAC,CAAA,CAKhEhO,SAAAA,CAAU,IAAM,CAEd,IAAMisB,CAAAA,CAAAA,CADehV,CAAAA,CAAcW,CAAc,CAAA,EAAG,OAAA,EAAqD,EAAC,EACzE,GAAA,CAAI,CAAC,CAAE,KAAA,CAAAzR,CAAM,CAAA,GAAMA,CAAK,CAAA,CAEzDkgB,GAAAA,CAAQ6F,MAAAA,CAAOC,IAAAA,CAAK,KAAK,CAAA,CAAG,CAAC,GAAIF,CAAAA,CAAqB,GAAG/F,CAAW,CAAC,CAAC,EACxE,CAAA,CAAG,CAACpkB,EAAAA,CAAMyhB,CAAAA,CAAa,MAAO2C,CAAAA,CAAajP,CAAAA,CAAeW,CAAc,CAAC,CAAA,CAEzE,IAAMwU,CAAAA,CACHnV,CAAAA,CAAcW,CAAc,CAAA,EAAG,OAAA,EAAqD,EAAC,CAClFyU,EAAAA,CAAuBpV,CAAAA,CAAcW,CAAc,CAAA,EAAG,UAAA,EAAc,EAAC,CACrE0U,EAAAA,CAA0B,IAAI,GAAA,CAAIpG,CAAAA,CAAY,GAAA,CAAKoE,CAAAA,EAAQA,CAAAA,CAAI,GAAG,CAAC,CAAA,CACnEiC,EAAAA,CAAyB,IAAI,IAAIF,EAAoB,CAAA,CAGrDG,EAAAA,CAAsBJ,CAAAA,CAAmB,MAAA,CAC5CvU,CAAAA,EAAe,CAACyU,EAAAA,CAAwB,GAAA,CAAIzU,CAAAA,CAAW,GAAG,CAAA,EAAK0U,EAAAA,CAAuB,GAAA,CAAI1U,CAAAA,CAAW,GAAG,CAC3G,CAAA,CAAE,MAAA,CACI4U,EAAAA,CAAyBJ,EAAAA,CAAqB,MAAA,CAC9CrE,CAAAA,CAAazE,CAAAA,CAAa,KAAA,EAAS,CAAA,CACnCmJ,CAAAA,CAAe,IAAA,CAAK,GAAA,CACxB,CAAA,CACA,IAAA,CAAK,GAAA,CAAI1E,EAAY9B,CAAAA,CAAY,MAAM,CAAA,CAAIsG,EAAAA,CAAsBC,EACnE,CAAA,CACMxE,CAAAA,CAAUD,CAAAA,CAAa,CAAA,EAAK5B,GAAAA,CAAK,MAAA,CAAS,CAAA,EAAKA,GAAAA,CAAK,MAAA,CAAS4B,CAAAA,CAE7DE,EAAAA,CAAiBC,WAAAA,CAAY,IAAM,CACnC0D,EAAAA,EAIJD,CAAAA,CAAQ,CACN,SAAA,CAAW,CACT,KAAA,CAAOvG,EAAAA,CACP,MAAA,CAAQe,GAAAA,CAAK,MAAA,CACb,KAAA,CAAO8E,CAAAA,CACH,CACE,CAACA,CAAc,EAAG,CAChB,IAAA,CAAM,CACJ,GAAA,CAAK,CAAE,EAAA,CAAIpU,GAAS,CACtB,CACF,CACF,CAAA,CACA,EACN,CACF,CAAC,CAAA,CACE,IAAA,CAAK,CAAC,CAAE,IAAA,CAAM3U,CAAI,CAAA,GAAyE,CAC1F,GAAI,CAACA,CAAAA,CACH,OAGF,IAAMwqB,CAAAA,CAAaC,GAAAA,CAAe/B,KAA0B,MAAA,EAAU,EAAA,CAAI1V,CAAAA,CAAOhT,CAAAA,CAAK6M,CAAM,CAAA,CAC5FqX,GAAAA,CAAQ6F,MAAAA,CAAOC,IAAAA,CAAK,KAAK,CAAA,CAAG,CAAC,GAAGjG,CAAAA,CAAa,GAAIyG,CAAAA,CAAW,OAAc,CAAC,CAAC,EAC9E,CAAC,CAAA,CACA,KAAA,CAAO5qB,CAAAA,EAAmB,CACzB,OAAA,CAAQ,KAAA,CAAM,2BAAA,CAA6BA,CAAK,EAClD,CAAC,EACL,EAAG,CACDmpB,CAAAA,CACApU,GAAAA,CACA8U,CAAAA,CACA1F,CAAAA,CACA2F,EAAAA,CACAhB,GAAAA,EAA0B,MAAA,CAC1BzE,GAAAA,CAAK,MAAA,CACLpX,CAAAA,CACAmG,CACF,CAAC,CAAA,CAED,SAAS6T,EAAAA,CAAgBhmB,CAAAA,CAA6B,CACpDA,CAAAA,CAAM,cAAA,EAAe,CAEjB,CAAA6S,CAAAA,EAIJmB,CAAAA,CAAe,CACb,IAAA,CAAM,kBAAA,CACN,OAAA,CAAS,CACP,sBAAA,CAAwBkP,CAAAA,CAAY,MAAA,CACpC,eAAAgF,CAAAA,CACA,UAAA,CAAYN,CAAAA,CACZ,QAAA,CAAA9T,GAAAA,CACA,cAAA,CAAAc,CAAAA,CACA,IAAA,CAAM6N,CAAAA,EAAc,IAAA,EAAQ,UAC9B,CACF,CAAC,EACH,CAEA,OACEtlB,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS0S,CAAAA,CACT,YAAA,CAAc4N,CAAAA,CACd,IAAA,CAAMvV,CAAAA,CACN,MAAA,CAAQ,IACN/N,IAAAA,CAACkD,CAAAA,CAAA,CAAS,SAAA,CAAU,YAAA,CAClB,UAAAhD,GAAAA,CAACgW,CAAAA,CAAA,CAAU,OAAA,CAASyP,CAAAA,CAAU,QAAA,CAAA7P,GAAAA,CAAM,CAAA,CACnC3D,CAAAA,EAAS,OAAA,CAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,QAAA,CAAAhE,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC3EjS,GAAAA,CAACiD,CAAAA,CAAA,CAAY,SAAA,CAAU,4FAAA,CACrB,QAAA,CAAAjD,GAAAA,CAAC,KAAA,CAAA,CACC,eAAA,CAAe,CAAA,sBAAA,EAAyB6N,CAAI,CAAA,CAAA,CAC5C,eAAA,CAAeqE,CAAAA,CACf,UAAW,CAAA,0QAAA,EACTA,CAAAA,CAAS,2DAAA,CAA8D,EACzE,CAAA,mBAAA,CAAA,CACA,OAAA,CAAU0G,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClB3B,CAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1BA,CAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1B9E,CAAAA,CAAU,IAAI,EAChB,CAAA,CACA,SAAA,CAAYyG,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,OAAA,EACZzG,EAAU,IAAI,CAAA,CAGZyG,CAAAA,CAAE,GAAA,GAAQ,QAAA,GACZA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClB3B,CAAAA,CAAW,OAAA,EAAS,IAAA,EAAK,CACzB9E,CAAAA,CAAU,KAAK,CAAA,EAEnB,CAAA,CACA,GAAA,CAAK8E,CAAAA,CACL,IAAA,CAAK,UAAA,CACL,QAAA,CAAU,CAAA,CAEV,QAAA,CAAAnX,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,sDAAA,CACZ,QAAA,CAAA,CAACoS,CAAAA,CAmBApS,IAAAA,CAAC6C,GAAAA,CAAA,CACC,SAAA,CAAU,qCAAA,CACV,QAAA,CAAU+S,CAAAA,CACV,OAAA,CAASmT,EAAAA,CACT,OAAA,CAAQ,SAAA,CAER,QAAA,CAAA,CAAA7oB,GAAAA,CAACkM,IAAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAE,wBAAA,CAAuB,GAAA,CAChEwe,GAAAA,EAA0B,IAAA,EAAM,KAAA,EAASA,GAAAA,EAA0B,MAAA,CAAA,CACtE,CAAA,CA1BA5qB,IAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,sEAAA,CACb,QAAA,CAAA,CAAAyrB,GAAAA,CAAa,GAAA,CAAKzd,CAAAA,EACjB9N,GAAAA,CAAC0sB,GAAAA,CAAA,CACC,SAAA,CAAU,iFAAA,CAEV,KAAA,CAAO5e,CAAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAA9N,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,wBAAA,CAA0B,QAAA,CAAA8N,CAAAA,CAAK,CAAA,CAAA,CAJ1CA,CAKP,CACD,CAAA,CACA0d,CAAAA,CACCxrB,GAAAA,CAAC0sB,GAAAA,CAAA,CAAM,SAAA,CAAU,oDAAA,CAAqD,OAAA,CAAQ,YAAY,QAAA,CAAA,QAAA,CAE1F,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CAYF5sB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2EAAA,CACZ,QAAA,CAAA,CAAAoS,CAAAA,CACCpS,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,oDAAA,CACb,QAAA,CAAA,CAAAysB,CAAAA,CAAa,cAAA,EAAe,CAAE,GAAA,CAAEA,CAAAA,GAAiB,CAAA,CAAI,QAAA,CAAW,SAAA,CAAA,CACnE,CAAA,CACE,IAAA,CACFra,CAAAA,CAyBAlS,GAAAA,CAACuL,GAAAA,CAAA,CACC,QAAA,CAAAzL,IAAAA,CAAC0L,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAxL,GAAAA,CAACyL,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAzL,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,yEAAA,CACV,OAAA,CAAUiW,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClB3B,CAAAA,CAAW,OAAA,EAAS,IAAA,EAAK,CACzB9E,CAAAA,CAAU,KAAK,EACjB,CAAA,CACA,SAAA,CAAYyG,CAAAA,EAAM,CACZA,EAAE,GAAA,GAAQ,OAAA,GACZA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClB3B,CAAAA,CAAW,OAAA,EAAS,IAAA,EAAK,CACzB9E,CAAAA,CAAU,KAAK,CAAA,EAEnB,CAAA,CACA,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAAnS,GAAAA,CAACua,GAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CACF,CAAA,CACAva,GAAAA,CAAC2L,GAAAA,CAAA,CACC,SAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,OAAA,CAAK,CAAA,CACV,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CArDAA,GAAAA,CAACuL,GAAAA,CAAA,CACC,QAAA,CAAAzL,IAAAA,CAAC0L,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAxL,GAAAA,CAACyL,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAzL,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,yEAAA,CACV,EAAA,CAAI8iB,CAAAA,CACJ,SAAA,CAAY7M,CAAAA,EAAM,CACZA,CAAAA,CAAE,MAAQ,OAAA,GACZ3B,CAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1BA,CAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,EAE9B,CAAA,CACA,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAAjX,GAAAA,CAACsa,SAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CACF,CAAA,CACAta,GAAAA,CAAC2L,GAAAA,CAAA,CACC,QAAA,CAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,cAAA,CAAY,CAAA,CACjB,CAAA,CAAA,CACF,EACF,CAAA,CAAA,CAiCJ,CAAA,CAAA,CACF,CAAA,CACAA,GAAAA,CAACwa,CAAAA,CAAA,CACC,SAAA,CAAU,4CAAA,CACV,YAAA,CAAcrI,CAAAA,CACd,IAAA,CAAMD,CAAAA,CAEN,QAAA,CAAAlS,GAAAA,CAACya,CAAAA,CAAA,CAAmB,SAAA,CAAU,sBAAA,CAC5B,QAAA,CAAAza,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sCAAA,CAAuC,EAAA,CAAI,CAAA,sBAAA,EAAyB6N,CAAI,CAAA,CAAA,CACrF,QAAA,CAAA7N,GAAAA,CAAC2sB,CAAAA,CAAA,CACC,UAAA,CAAY,CACV,OAAA,CAAS,+CAAA,CACT,KAAA,CAAO,SACT,CAAA,CACA,OAAA,CAAShB,EAAAA,CACT,IAAA,CAAM1F,GAAAA,CACN,UAAA,CAAYzS,GAAAA,CACZ,OAAA,CAASsU,CAAAA,CACT,aAAA,CAAe4D,EAAAA,EAAWzF,GAAAA,CAAK,MAAA,CAAS,CAAA,CACxC,UAAA,CAAY8B,EAAAA,CACZ,gBAAA,CACEjR,CAAAA,CAAcW,CAAc,CAAA,EAAG,OAAA,CAEjC,gBAAA,CAAkBX,CAAAA,CAAcW,CAAc,CAAA,EAAG,UAAA,CACnD,CAAA,CACF,CAAA,CACF,EACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CACAzX,GAAAA,CAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CAUA,SAAS0oB,EAAAA,CAAe,CAAE,WAAA,CAAA7b,CAAAA,CAAa,cAAA,CAAAyH,CAAAA,CAAgB,aAAA,CAAAX,CAAAA,CAAe,GAAA,CAAAqT,CAAAA,CAAK,OAAA,CAAAjE,CAAQ,CAAA,CAAgC,CACjH,SAAS0G,CAAAA,CAAiBjW,CAAAA,CAAwB,CAChD,IAAMkW,CAAAA,CAAqB/V,EAAcW,CAAc,CAAA,EAAG,OAAA,EAAqD,EAAC,CAC1GqV,CAAAA,CAA8B,OAAOnC,IAAAA,CAAKC,MAAAA,CAAOjU,CAAAA,CAAU,KAAK,CAAA,CAAGkW,CAAiB,CAAA,EAAM,QAAA,CAE1FE,CAAAA,CAA0BjW,CAAAA,CAAcW,CAAc,CAAA,EAAG,UAAA,EAAY,QAAA,CAASd,CAAQ,CAAA,CACtFqW,CAAAA,CAAgBF,CAAAA,CACjBhW,CAAAA,CAAcW,CAAc,CAAA,EAAG,UAAA,EAAc,EAAC,CAC/CwV,IAAAA,CAAK,CAAC,GAAInW,CAAAA,CAAcW,CAAc,CAAA,EAAG,UAAA,EAAc,EAAC,CAAId,CAAQ,CAAC,CAAA,CAErEmW,CAAAA,EACF5G,CAAAA,CAASD,CAAAA,EAASA,CAAAA,CAAK,MAAA,CAAQiH,CAAAA,EAAYA,CAAAA,CAAQ,GAAA,GAAQvW,CAAQ,CAAC,CAAA,CAGtE3G,CAAAA,CAAY,CACV,IAAA,CAAM,iBAAA,CACN,OAAA,CAAS,CACP,CAACyH,CAAc,EAAG,CAChB,OAAA,CAASoV,EAAkB,MAAA,CAAQK,CAAAA,EAAYA,CAAAA,CAAQ,GAAA,GAAQvW,CAAQ,CAAA,CACvE,UAAA,CAAYoW,CAAAA,CACPjW,CAAAA,CAAcW,CAAc,CAAA,EAAG,UAAA,EAAY,MAAA,CAAQmQ,CAAAA,EAAQA,CAAAA,GAAQjR,CAAQ,CAAA,EAAK,EAAC,CAClFqW,CACN,CACF,CACF,CAAC,EACH,CAEA,OAAOhtB,GAAAA,CAACqqB,EAAAA,CAAA,CAAoB,MAAA,CAAQuC,CAAAA,CAAkB,GAAA,CAAKzC,EAAK,CAClE,CAUA,SAASiB,EAAAA,CAAY,CAAE,IAAA,CAAAzpB,CAAAA,CAAM,YAAA,CAAAyO,CAAAA,CAAc,wBAAA,CAAAsa,CAAAA,CAA0B,KAAA,CAAA1V,CAAM,CAAA,CAAkC,CAC3G,GAAI,CAAC,KAAA,CAAM,OAAA,CAAQrT,CAAI,CAAA,CACrB,OAAO,EAAC,CAGV,IAAMwrB,CAAAA,CAAcC,CAAAA,EAAkC,CAIpD,IAAMC,CAAAA,CAH0B1C,IAAAA,CAAKC,MAAAA,CAAOwC,EAAK,UAAA,CAAY,MAAM,CAAC,CAAA,CAClE1C,CAAAA,EAA0B,UAAA,EAAc,EAC1C,CAAA,EACuD,YAAA,EAAc,KAAA,EAAS,EAAA,CAE9E,GAAI2C,CAAAA,CAAuB,CACzB,IAAMC,CAAAA,CAAgBF,CAAAA,CAAKC,CAAqB,CAAA,CAC1CE,CAAAA,CAAa,KAAA,CAAM,OAAA,CAAQD,CAAa,CAAA,CAAIA,CAAAA,CAAc,CAAC,CAAA,CAAIA,CAAAA,CAMrE,OAAIC,CAAAA,EAAa,OAAOA,GAAc,QAAA,CAC7BA,CAAAA,CAAUvY,CAAK,CAAA,EAAKuY,CAAAA,CAAUnd,CAAY,CAAA,EAAK,EAAA,CAGjDmd,CACT,CAEA,OAAOH,CAAAA,CAAKpY,CAAK,CAAA,EAAKoY,CAAAA,CAAKhd,CAAY,CACzC,CAAA,CAEA,OAAOzO,CAAAA,CAAK,GAAA,CACTwoB,CAAAA,EACCnS,GAAAA,CAAKjV,CAAAA,EAAU,CAGb,GAAI,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAG,CACxB,IAAMyqB,EAAQzqB,CAAAA,CAEd,OAAIyqB,CAAAA,CAAM,MAAA,GAAW,CAAA,CACZ,EAAA,CAGLA,CAAAA,CAAM,MAAA,GAAW,CAAA,CACZL,CAAAA,CAAWK,CAAAA,CAAM,CAAC,CAAC,CAAA,CAGrBA,CAAAA,CAAM,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAE,GAAA,CAAIL,CAAU,CAAA,CAAE,IAAA,CAAK,IAAI,CACpD,CAEA,OAAIpqB,CAAAA,EAAS,OAAOA,CAAAA,EAAU,QAAA,EAAYA,CAAAA,CAAM,WACvCoqB,CAAAA,CAAWpqB,CAAK,CAAA,CAGlBA,CACT,CAAA,CAAGonB,CAAG,CACV,CACF,CC1ee,SAARsD,EAAAA,CAAoC,CACzC,OAAA,CAAAjY,CAAAA,CACA,YAAA,CAAApF,CAAAA,CACA,YAAA,CAAAgT,CAAAA,CACA,QAAA,CAAAzM,CAAAA,CACA,WAAA,CAAAlB,GAAAA,CACA,SAAA,CAAAmB,CAAAA,CACA,QAAA,CAAAlB,CAAAA,CACA,MAAA,CAAA7G,CAAAA,CACA,KAAA,CAAAmG,CAAAA,CACA,QAAA,CAAAW,GACF,CAAA,CAAiD,CAC/C,GAAM,CAAC+X,GAAAA,CAAUC,CAAW,CAAA,CAAIluB,QAAAA,CAAS,KAAK,CAAA,CACxC,CAAE,IAAA,CAAAoO,CAAAA,CAAM,KAAA,CAAA+H,GAAAA,CAAO,OAAA,CAAA3D,CAAAA,CAAS,YAAA,CAAAqT,CAAa,CAAA,CAAI7P,GAAAA,CACzCmY,CAAAA,CAA6BtI,CAAAA,EAAc,MAAA,EAAUzX,CAAAA,CACrDgJ,CAAAA,CAAiBxD,CAAAA,EAAY,CAC7BrD,CAAAA,CAAcC,GAAAA,EAAe,CAC7BwV,CAAAA,CAAUpQ,KAAAA,EAAM,CAChB,CAAE,aAAA,CAAAyB,CAAc,CAAA,CAAIC,GAAAA,EAAc,CAClCU,CAAAA,CAAiBpC,OAAM,CACvBqV,CAAAA,CAA2BC,IAAAA,CAAKC,MAAAA,CAAOgD,CAAAA,CAAoB,MAAM,CAAC,CAAA,CAAE/e,CAAM,CAAA,CAC1Eqc,CAAAA,CAAuBC,GAAAA,CAAoBT,CAAwB,CAAA,EAAG,IAAA,CAE5E7qB,SAAAA,CAAU,IAAM,CACd,IAAMguB,CAAAA,CAAezK,CAAAA,CAAa,KAAA,CAElC,GAAIyK,CAAAA,GAAiB,EAAA,EAAM,OAAOA,CAAAA,EAAiB,SAAA,EAAa,OAAOA,CAAAA,EAAiB,QAAA,CACtF,OAGF,IAAMpG,CAAAA,CAAwC,CAC5C,GAAA,CAAK,MAAA,CAAOrE,CAAAA,CAAa,GAAG,CAAA,CAC5B,KAAA,CAAOyK,CACT,CAAA,CACMhb,CAAAA,CAAgC,CACpC,IAAA,CAAM,iBAAA,CACN,OAAA,CAAS,CACP,CAAC4E,CAAc,EAAG,CAChB,OAAA,CAAAgQ,CAAAA,CACA,UAAA,CAAY,EACd,CACF,CACF,CAAA,CAGAzX,CAAAA,CAAY6C,CAAM,EACpB,CAAA,CAAG,CAAC7C,CAAAA,CAAayH,CAAAA,CAAgB2L,CAAAA,CAAcpO,CAAK,CAAC,CAAA,CAMrDnV,SAAAA,CAAU,IAAM,CACd8V,GAAAA,CAAS9H,CAAAA,CAAM,CAAE,GAAG+I,CAAAA,CAAU/I,CAAI,CAAA,CAAG,GAAIiJ,CAAAA,CAAcW,CAAc,CAAA,EAAG,OAAA,EAAW,EAAI,CAAC,EAC1F,CAAA,CAAG,CAAC2L,CAAAA,CAAcvV,CAAAA,CAAMiJ,CAAAA,CAAeW,CAAAA,CAAgB9B,GAAQ,CAAC,EAEhE,SAASkT,CAAAA,CAAgBhmB,CAAAA,CAA6B,CACpDA,CAAAA,CAAM,cAAA,EAAe,CAEjB,CAAA6S,CAAAA,EAIJmB,CAAAA,CAAe,CACb,IAAA,CAAM,kBAAA,CACN,OAAA,CAAS,CACP,sBAAA,CAAwB,CAAA,CACxB,UAAA,CAAY+W,CAAAA,CACZ,QAAA,CAAAjX,CAAAA,CACA,cAAA,CAAAc,CAAAA,CACA,IAAA,CAAM6N,CAAAA,EAAc,IAAA,EAAQ,QAC9B,CACF,CAAC,EACH,CAEA,SAASvM,IAAelW,CAAAA,CAA6B,CACnD,GAAI6S,CAAAA,CACF,OAGF,IAAM7C,CAAAA,CAAgC,CACpC,IAAA,CAAM,iBAAA,CACN,OAAA,CAAS,CACP,CAAC4E,CAAc,EAAG,CAChB,OAAA,CAAS,EAAC,CACV,UAAA,CAAY,EACd,CACF,CACF,CAAA,CAEA5U,CAAAA,CAAM,cAAA,EAAe,CACrBmN,CAAAA,CAAY6C,CAAM,CAAA,CAClB8C,GAAAA,CAAS9H,EAAM,CAAE,GAAG+I,CAAAA,CAAU/I,CAAI,CAAA,CAAG,GAAA,CAAK,EAAA,CAAI,KAAA,CAAO,MAAU,CAAC,EAClE,CAEA,OACE7N,GAAAA,CAAC8C,GAAAA,CAAA,CACC,OAAA,CAAS0S,CAAAA,CACT,YAAA,CAAc4N,CAAAA,CACd,IAAA,CAAMvV,CAAAA,CACN,MAAA,CAAQ,CAAC,CACP,KAAA,CAAA9K,CACF,CAAA,GAMM,CACJ,IAAMiD,CAAAA,CAAQjD,CAAAA,CAAM,OAAO,KAAA,CACvB+qB,CAAAA,CAAe,EAAA,CAEnB,GACE5C,CAAAA,EACAllB,CAAAA,EACA,OAAOA,CAAAA,EAAU,QAAA,EACjB,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,EACpBA,CAAAA,CAAMklB,CAAoB,CAAA,CAC1B,CACA,IAAM6C,CAAAA,CAAa/nB,CAAAA,CAAMklB,CAAoB,CAAA,CAEvC8C,CAAAA,CAAgB,KAAA,CAAM,OAAA,CAAQD,CAAU,CAAA,CAAIA,CAAAA,CAAW,CAAC,CAAA,CAAIA,CAAAA,CAK9D,OAAOC,CAAAA,EAAiB,QAAA,CAC1BF,CAAAA,CAAeE,CAAAA,CAEfF,CAAAA,CAAiBE,CAAAA,GAAehZ,CAAK,CAAA,EAAKgZ,CAAAA,GAAe5d,CAAY,CAAA,EAA6B,GAEtG,CAEA,OACEtQ,IAAAA,CAACkD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAhD,GAAAA,CAACgW,CAAAA,CAAA,CAAU,OAAA,CAASyP,CAAAA,CAAU,QAAA,CAAA7P,GAAAA,CAAM,CAAA,CACnC3D,CAAAA,EAAS,OAAA,CAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,QAAA,CAAAhE,EAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC3EjS,GAAAA,CAACiD,CAAAA,CAAA,CAAY,SAAA,CAAU,gDAAA,CACrB,QAAA,CAAAnD,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAW,CAAA,6IAAA,EACT4tB,GAAAA,CAAW,2DAAA,CAA8D,EAC3E,CAAA,mBAAA,CAAA,CAEA,QAAA,CAAA,CAAA1tB,GAAAA,CAACkD,CAAAA,CAAA,CACC,SAAA,CAAU,6GAAA,CACV,QAAA,CAAUwS,CAAAA,CACV,EAAA,CAAI+P,CAAAA,CACJ,MAAA,CAAQ,IAAM,CACZkI,CAAAA,CAAY,KAAK,EACnB,CAAA,CACA,OAAA,CAAS9E,CAAAA,CACT,OAAA,CAAS,IAAM,CACb8E,CAAAA,CAAY,IAAI,EAClB,CAAA,CACA,SAAA,CAAY/U,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,OAAA,EACZiQ,CAAAA,CAAgBjQ,CAAC,EAErB,CAAA,CACA,QAAA,CAAQ,IAAA,CACR,IAAA,CAAK,MAAA,CACL,KAAA,CAAOkV,CAAAA,CACT,CAAA,CACCA,CAAAA,CACC9tB,GAAAA,CAACuL,GAAAA,CAAA,CACC,QAAA,CAAAzL,KAAC0L,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAxL,GAAAA,CAACyL,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAzL,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,6GAAA,CACV,QAAA,CAAU+S,CAAAA,CACV,OAAA,CAASqD,GAAAA,CACT,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAA/Y,GAAAA,CAACua,GAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CACF,CAAA,CACAva,GAAAA,CAAC2L,IAAA,CACC,QAAA,CAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,OAAA,CAAK,CAAA,CACV,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACE,IAAA,CACJA,GAAAA,CAACuL,GAAAA,CAAA,CACC,QAAA,CAAAzL,IAAAA,CAAC0L,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAxL,GAAAA,CAACyL,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAzL,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,+GAAA,CACV,QAAA,CAAU+S,CAAAA,CACV,OAAA,CAASmT,EACT,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAA7oB,GAAAA,CAACiuB,cAAAA,CAAA,CAAe,SAAA,CAAU,eAAA,CAAgB,CAAA,CAC5C,CAAA,CACF,CAAA,CACAjuB,GAAAA,CAAC2L,GAAAA,CAAA,CACC,QAAA,CAAA3L,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,MAAA,CAAI,CAAA,CACT,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACAA,GAAAA,CAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAEJ,CAAA,CACF,CAEJ,CCxNe,SAAR+qB,EAAAA,CAA8BC,CAAAA,CAA+D,CAClG,GAAM,CAAE,WAAA,CAAA1Y,CAAY,CAAA,CAAI0Y,CAAAA,CAClB,CAAE,YAAA,CAAA7I,CAAa,CAAA,CAAI7P,CAAAA,CAEzB,GAAI6P,CAAAA,EAAc,IAAA,GAAS,QAAA,CACzB,OAAOtlB,GAAAA,CAACytB,EAAAA,CAAA,CAAoB,GAAGU,CAAAA,CAAiB,CAAA,CAGlD,GAAI7I,CAAAA,EAAc,IAAA,GAAS,UAAA,CAAY,CACrC,GAAIA,CAAAA,CAAa,MAAA,GAAW,QAAA,CAC1B,OAAOtlB,GAAAA,CAAColB,EAAAA,CAAA,CAA2B,GAAG+I,CAAAA,CAAiB,CAAA,CAGzD,IAAMjd,CAAAA,CAAQ,CAAE,sBAAA,CAAwBuE,CAAAA,CAAY,YAAA,EAAc,MAAA,CAAQ,GAAG0Y,CAAgB,CAAA,CAE7F,OAAOnuB,GAAAA,CAACwqB,EAAAA,CAAA,CAAsB,GAAGtZ,CAAAA,CAAO,CAC1C,CAEA,OACEpR,IAAAA,CAAC2C,EAAAA,CAAA,CAAM,OAAA,CAAQ,aAAA,CACb,QAAA,CAAA,CAAAzC,GAAAA,CAACouB,aAAAA,CAAA,CAAc,SAAA,CAAU,SAAA,CAAU,CAAA,CACnCpuB,GAAAA,CAAC0M,EAAAA,CAAA,CAAW,QAAA,CAAA,OAAA,CAAK,CAAA,CACjB1M,GAAAA,CAAC0C,EAAAA,CAAA,CACE,QAAA,CAAA,sHAAA,CACH,CAAA,CAAA,CACF,CAEJ,CCpBA,IAAM2rB,EAAAA,CAAuB,yBAE7B,SAASC,EAAAA,CAAkBtoB,CAAAA,CAAuB,CAChD,OAAO,CAAA,EAAGqoB,EAAoB,CAAA,EAAG,kBAAA,CAAmBroB,CAAK,CAAC,CAAA,CAC5D,CAEA,SAASuoB,EAAAA,CAAkBvoB,CAAAA,CAAuB,CAChD,OAAO,kBAAA,CAAmBA,CAAAA,CAAM,KAAA,CAAMqoB,EAAAA,CAAqB,MAAM,CAAC,CACpE,CAEO,SAASppB,EAAAA,CAAO,CAAE,OAAA,CAAAuQ,GAAAA,CAAS,WAAA,CAAAC,EAAa,QAAA,CAAAC,CAAAA,CAAU,QAAA,CAAAC,CAAS,CAAA,CAA2C,CAC3G,GAAM,CAAE,IAAA,CAAA9H,GAAAA,CAAM,KAAA,CAAA+H,CAAAA,CAAO,OAAA,CAAA3D,GAAQ,CAAA,CAAIwD,CAAAA,CAEjC,SAASI,GAAAA,CAAY7P,CAAAA,CAAe8P,CAAAA,CAAiD,CAEnF,IAAM0Y,CAAAA,CADqB/Y,CAAAA,CAAY,QAAA,GAAa,KAAA,EAAS,CAAC,KAAA,CAAM,MAAA,CAAOzP,CAAK,CAAC,CAAA,CACxC,OAAOA,CAAK,CAAA,CAAIA,CAAAA,CAEzD2P,CAAAA,CAAS9H,GAAAA,CAAM,CACb,GAAGiI,CAAAA,CACH,KAAA,CAAO0Y,CACT,CAAC,EACH,CAEA,SAASzY,GAAAA,CAAed,CAAAA,CAAkBjP,CAAAA,CAAyC,CACjF2P,CAAAA,CAAS9H,GAAAA,CAAM,CACb,GAAG7H,CAAAA,CACH,QAAA,CAAUiP,CACZ,CAAC,EACH,CAEA,OACEjV,GAAAA,CAAC8C,GAAAA,CAAA,CACC,QAAS0S,GAAAA,CACT,IAAA,CAAM3H,GAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAA9K,GAAM,CAAA,GACfjD,IAAAA,CAACkD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAhD,GAAAA,CAACgW,CAAAA,CAAA,CAAW,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CACjB3D,GAAAA,EAAS,OAAA,CAAUjS,GAAAA,CAACiW,CAAAA,CAAA,CAAiB,QAAA,CAAAhE,GAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC3EnS,IAAAA,CAACmF,CAAAA,CAAA,CACC,aACElC,GAAAA,CAAM,KAAA,EAAO,KAAA,GAAU,MAAA,EAAaA,GAAAA,CAAM,KAAA,CAAM,KAAA,GAAU,IAAA,CACtD,MAAA,CACAurB,EAAAA,CAAkB,MAAA,CAAOvrB,GAAAA,CAAM,KAAA,CAAM,KAAK,CAAC,CAAA,CAEjD,QAAA,CAAU2S,CAAAA,EAAY3S,GAAAA,CAAM,KAAA,EAAO,QAAA,CACnC,aAAA,CAAgBiD,CAAAA,EAAU,CACxB6P,GAAAA,CAAY0Y,EAAAA,CAAkBvoB,CAAK,CAAA,CAAGjD,GAAAA,CAAM,KAAK,EACnD,CAAA,CAEA,UAAA/C,GAAAA,CAACiD,CAAAA,CAAA,CACC,QAAA,CAAAjD,GAAAA,CAACmF,CAAAA,CAAA,CACC,QAAA,CAAAnF,GAAAA,CAACoF,CAAAA,CAAA,CAAY,WAAA,CAAa6M,GAAAA,EAAS,WAAA,CAAa,CAAA,CAClD,CAAA,CACF,CAAA,CACAjS,GAAAA,CAACsF,CAAAA,CAAA,CACE,QAAA,CAAA2M,GAAAA,EAAS,IAAA,EAAM,GAAA,CAAKqP,CAAAA,EACf,YAAA,GAAgBA,CAAAA,CAEhBxhB,IAAAA,CAAC2uB,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAzuB,GAAAA,CAAC0uB,EAAA,CAAa,QAAA,CAAApN,CAAAA,CAAO,UAAA,CAAW,CAAA,CAC/BA,CAAAA,CAAO,KAAA,CAAM,GAAA,CAAKxT,CAAAA,EAEf9N,GAAAA,CAACuF,GAAAA,CAAA,CAA4B,KAAA,CAAO+oB,EAAAA,CAAkBxgB,CAAAA,CAAK,KAAK,CAAA,CAC7D,QAAA,CAAAA,CAAAA,CAAK,KAAA,CAAA,CADSA,CAAAA,CAAK,KAEtB,CAEH,CAAA,CAAA,CAAA,CARewT,CAAAA,CAAO,UASzB,CAAA,CAKFthB,GAAAA,CAACuF,GAAAA,CAAA,CAA8B,KAAA,CAAO+oB,EAAAA,CAAkBhN,EAAO,KAAK,CAAA,CACjE,QAAA,CAAAA,CAAAA,CAAO,KAAA,CAAA,CADOA,CAAAA,CAAO,KAExB,CAEH,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACAthB,GAAAA,CAAC+U,EAAAA,CAAA,CACC,OAAA,CAAShS,GAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,QAAA,CAAU2S,CAAAA,CACV,QAAA,CAAWT,CAAAA,EAAY,CACrBc,GAAAA,CAAed,CAAAA,CAASlS,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,OAAO,KAAA,CACtB,CAAA,CACA/C,GAAAA,CAACmD,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CCzGO,IAAMwrB,EAAAA,CAAwB,KAAA,CAExBC,EAAAA,CAA+B,CAC1C,IAAA,CAAM,KAAA,CACN,KAAA,CAAO,YACT,ECJO,SAASC,EAAAA,CAAuBC,CAAAA,CAAgC,CACrE,OAAI,OAAOA,CAAAA,CAAU,KAAA,EAAU,QAAA,CACtB,CAACA,CAAAA,CAAU,KAAK,CAAA,CAGrB,MAAM,OAAA,CAAQA,CAAAA,CAAU,KAAK,CAAA,CACxBA,CAAAA,CAAU,KAAA,CAGZ,EACT,CAEO,SAASC,EAAAA,CAAwBD,CAAAA,CAAsBE,CAAAA,CAA4B,CACxF,OAAIA,CAAAA,GAAc,KAAA,CACT,IAAA,CAGFH,EAAAA,CAAuBC,CAAS,CAAA,CAAE,QAAA,CAASE,CAAS,CAC7D,CAEO,SAASC,EAAAA,CAA2BH,CAAAA,CAAsBI,CAAAA,CAA+B,CAC9F,OAAIA,CAAAA,CAAO,SAAW,CAAA,CACb,IAAA,CAGFA,CAAAA,CAAO,IAAA,CAAMC,CAAAA,EAAUJ,EAAAA,CAAwBD,CAAAA,CAAWK,CAAAA,CAAM,IAAI,CAAC,CAC9E,CAEO,SAASC,EAAAA,CAA0BF,CAAAA,CAAgD,CACxF,GAAI,CAACA,CAAAA,EAAUA,CAAAA,CAAO,MAAA,GAAW,CAAA,CAC/B,OAAO,EAAC,CAGV,IAAMG,CAAAA,CAAoBH,CAAAA,CAAO,IAAA,CAAMC,CAAAA,EAAUA,CAAAA,CAAM,IAAA,GAAS,KAAqB,CAAA,CAC/EG,CAAAA,CAAcJ,CAAAA,CAAO,MAAA,CAAQC,CAAAA,EAAUA,CAAAA,CAAM,IAAA,GAAS,KAAqB,CAAA,CAOjF,OAFuB,CAJY,CACjC,GAAGP,EAAAA,CACH,GAAGS,CACL,CAAA,CACwC,GAAGC,CAAW,CAAA,CAEhC,MAAA,CAAQH,CAAAA,EAAUA,CAAAA,CAAM,MAAA,GAAW,IAAI,CAC/D,CAEO,SAASI,EAAAA,CAAyBL,CAAAA,CAA8B,CACrE,IAAMM,EAAeN,CAAAA,CAAO,IAAA,CAAMC,CAAAA,EAAUA,CAAAA,CAAM,OAAO,CAAA,CAEzD,GAAIK,CAAAA,CACF,OAAOA,CAAAA,CAAa,IAAA,CAGtB,IAAMC,CAAAA,CAAkBP,CAAAA,CAAO,IAAA,CAAMC,CAAAA,EAAUA,CAAAA,CAAM,IAAA,GAAS,KAAqB,CAAA,CAEnF,OAAIM,CAAAA,CACKA,CAAAA,CAAgB,IAAA,CAGlB,KACT,CCjDO,SAASC,EAAAA,CAAgB7gB,EAA0B+G,CAAAA,CAA0B,CAClF,OAAO+Z,EAAAA,CAAQ9gB,CAAAA,CAAQ+G,CAAK,CAC9B,CAEA,IAAMga,EAAAA,CAAS,IAAI,GAAA,CAEnB,SAASC,EAAAA,CAASC,CAAAA,CAAuB,CACnCF,GAAO,GAAA,CAAIE,CAAO,CAAA,GAItBF,EAAAA,CAAO,GAAA,CAAIE,CAAO,CAAA,CAClB,OAAA,CAAQ,IAAA,CAAK,CAAA,8BAAA,EAAiCA,CAAO,CAAA,sDAAA,CAAwD,CAAA,EAC/G,CAEA,IAAMC,EAAAA,CAAmB,IAAI,GAAA,CAAI,CAC/B,MAAA,CACA,WAAA,CACA,WAAA,CACA,SAAA,CACA,QAAA,CACA,SAAA,CACA,SAAA,CACA,kBAAA,CACA,kBAAA,CACA,YAAA,CACA,MAAA,CACA,OAAA,CACA,YAAA,CACA,UAAA,CACA,sBAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CACA,OAAA,CACA,OAAA,CACA,KAAA,CACA,aAAA,CACA,OAAA,CACA,SACF,CAAC,CAAA,CAEKC,EAAAA,CAAgD,CACpD,KAAA,CAAO,+BAAA,CACP,IAAK,qBAAA,CACL,IAAA,CAAM,sBAAA,CACN,WAAA,CAAa,+BAAA,CACb,IAAA,CAAM,sBAAA,CACN,IAAA,CAAM,sBACR,CAAA,CAEA,SAASC,EAAAA,CAASjqB,CAAAA,CAA2C,CAC3D,OAAO,OAAOA,CAAAA,EAAU,QAAA,EAAYA,CAAAA,GAAU,IAAA,EAAQ,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAK,CAC5E,CAEA,SAASkqB,EAAAA,CAAQlqB,CAAAA,CAA2B,CAC1C,OAAIA,CAAAA,GAAU,KAAamqB,CAAAA,CAAE,IAAA,EAAK,CAC9B,OAAOnqB,CAAAA,EAAU,QAAA,EAAY,OAAOA,CAAAA,EAAU,QAAA,EAAY,OAAOA,CAAAA,EAAU,SAAA,CAAkBmqB,CAAAA,CAAE,OAAA,CAAQnqB,CAAK,CAAA,CAEzGmqB,CAAAA,CAAE,GAAA,EAAI,CAAE,MAAA,CAAQC,CAAAA,EAAc,IAAA,CAAK,SAAA,CAAUA,CAAS,CAAA,GAAM,IAAA,CAAK,SAAA,CAAUpqB,CAAK,CAAC,CAC1F,CAEA,SAASqqB,GAAQpe,CAAAA,CAAsB2D,CAAAA,CAA0B,CAC/D,OAAI3D,CAAAA,CAAQ,MAAA,GAAW,CAAA,CAAUke,CAAAA,CAAE,GAAA,EAAI,CACnCle,CAAAA,CAAQ,MAAA,GAAW,CAAA,CAAUA,CAAAA,CAAQ,CAAC,CAAA,CAEnCke,CAAAA,CAAE,KAAA,CAAMle,CAAAA,CAAmD,CAAE,KAAA,CAAO,CAAA,EAAG2D,CAAK,CAAA,WAAA,CAAc,CAAC,CACpG,CAEA,SAAS0a,EAAAA,CAAczhB,CAAAA,CAA0B+G,CAAAA,CAA0B,CACzE,IAAIsS,CAAAA,CAASiI,CAAAA,CAAE,MAAA,CAAO,CAAE,KAAA,CAAO,CAAA,EAAGva,CAAK,CAAA,aAAA,CAAgB,CAAC,CAAA,CAClD0G,CAAAA,CAAS,OAAOzN,CAAAA,CAAO,MAAA,EAAW,QAAA,CAAWA,CAAAA,CAAO,MAAA,CAAS,MAAA,CAC7D0hB,CAAAA,CAAgBjU,CAAAA,CAAU0T,EAAAA,CAAgB1T,CAAM,CAAA,EAAK,CAAA,eAAA,EAAkBA,CAAM,CAAA,OAAA,CAAA,CAAa,uBAAA,CAEhG,GAAI,OAAOzN,CAAAA,CAAO,SAAA,EAAc,QAAA,CAAU,CACxC,IAAM2hB,CAAAA,CAAM3hB,CAAAA,CAAO,SAAA,CACnBqZ,CAAAA,CAASA,CAAAA,CAAO,GAAA,CAAIsI,CAAAA,CAAK,CAAE,KAAA,CAAOA,CAAAA,EAAO,CAAA,CAAI,CAAA,EAAG5a,CAAK,CAAA,YAAA,CAAA,CAAiB,CAAA,EAAGA,CAAK,CAAA,kBAAA,EAAqB,MAAA,CAAO4a,CAAG,CAAC,CAAA,WAAA,CAAc,CAAC,EAC/H,CAMA,GAJI,OAAO3hB,CAAAA,CAAO,SAAA,EAAc,QAAA,GAC9BqZ,CAAAA,CAASA,CAAAA,CAAO,IAAIrZ,CAAAA,CAAO,SAAA,CAAW,CAAE,KAAA,CAAO,CAAA,EAAG+G,CAAK,CAAA,iBAAA,EAAoB,MAAA,CAAO/G,CAAAA,CAAO,SAAS,CAAC,CAAA,WAAA,CAAc,CAAC,CAAA,CAAA,CAGhH,OAAOA,CAAAA,CAAO,OAAA,EAAY,QAAA,CAC5B,GAAI,CACFqZ,CAAAA,CAASA,CAAAA,CAAO,KAAA,CAAM,IAAI,MAAA,CAAOrZ,CAAAA,CAAO,OAAO,CAAA,CAAG,CAAE,KAAA,CAAO,CAAA,EAAG+G,CAAK,IAAI2a,CAAa,CAAA,CAAG,CAAC,EAC1F,CAAA,KAAQ,CACNV,EAAAA,CAAS,CAAA,QAAA,EAAWhhB,CAAAA,CAAO,OAAO,CAAA,CAAE,EACtC,CAGF,OAAOqZ,CACT,CAEA,IAAMuI,EAAAA,CAAc,IAAI,GAAA,CAAI,CAAC,MAAA,CAAO,gBAAA,CAAkB,MAAA,CAAO,gBAAgB,CAAC,CAAA,CAE9E,SAASC,EAAAA,CAAc7hB,CAAAA,CAA0B+G,CAAAA,CAAe+a,CAAAA,CAA6B,CAC3F,IAAIzI,CAAAA,CAASiI,CAAAA,CAAE,MAAA,CAAO,CAAE,KAAA,CAAO,CAAA,EAAGva,CAAK,CAAA,iBAAA,CAAoB,CAAC,CAAA,CAExD+a,CAAAA,GACFzI,CAAAA,CAASA,CAAAA,CAAO,GAAA,CAAI,CAAE,KAAA,CAAO,CAAA,EAAGtS,CAAK,CAAA,uBAAA,CAA0B,CAAC,CAAA,CAAA,CAGlE,IAAMgb,CAAAA,CAAU,OAAO/hB,CAAAA,CAAO,OAAA,EAAY,QAAA,EAAY,CAAC4hB,EAAAA,CAAY,GAAA,CAAI5hB,CAAAA,CAAO,OAAO,CAAA,CAAIA,CAAAA,CAAO,OAAA,CAAU,MAAA,CACpGgiB,CAAAA,CAAU,OAAOhiB,CAAAA,CAAO,OAAA,EAAY,QAAA,EAAY,CAAC4hB,EAAAA,CAAY,GAAA,CAAI5hB,CAAAA,CAAO,OAAO,CAAA,CAAIA,CAAAA,CAAO,OAAA,CAAU,MAAA,CACpGiiB,CAAAA,CACJF,CAAAA,GAAY,MAAA,EAAaC,CAAAA,GAAY,MAAA,CAAY,CAAA,EAAGjb,CAAK,CAAA,iBAAA,EAAoB,MAAA,CAAOgb,CAAO,CAAC,CAAA,KAAA,EAAQ,MAAA,CAAOC,CAAO,CAAC,CAAA,CAAA,CAAK,MAAA,CAE1H,OAAID,CAAAA,GAAY,MAAA,GACd1I,CAAAA,CAASA,CAAAA,CAAO,GAAA,CAAI0I,CAAAA,CAAS,CAAE,KAAA,CAAOE,CAAAA,EAAW,CAAA,EAAGlb,CAAK,CAAA,kBAAA,EAAqB,MAAA,CAAOgb,CAAO,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,CAG/FC,CAAAA,GAAY,MAAA,GACd3I,CAAAA,CAASA,CAAAA,CAAO,GAAA,CAAI2I,CAAAA,CAAS,CAAE,KAAA,CAAOC,CAAAA,EAAW,CAAA,EAAGlb,CAAK,oBAAoB,MAAA,CAAOib,CAAO,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,CAG9F,OAAOhiB,CAAAA,CAAO,gBAAA,EAAqB,QAAA,GACrCqZ,CAAAA,CAASA,CAAAA,CAAO,EAAA,CAAGrZ,CAAAA,CAAO,gBAAA,CAAkB,CAAE,KAAA,CAAO,CAAA,EAAG+G,CAAK,CAAA,sBAAA,EAAyB,MAAA,CAAO/G,CAAAA,CAAO,gBAAgB,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,CAGvH,OAAOA,CAAAA,CAAO,gBAAA,EAAqB,QAAA,GACrCqZ,CAAAA,CAASA,EAAO,EAAA,CAAGrZ,CAAAA,CAAO,gBAAA,CAAkB,CAAE,KAAA,CAAO,CAAA,EAAG+G,CAAK,CAAA,mBAAA,EAAsB,MAAA,CAAO/G,CAAAA,CAAO,gBAAgB,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,CAGpH,OAAOA,CAAAA,CAAO,UAAA,EAAe,QAAA,GAC/BqZ,CAAAA,CAASA,CAAAA,CAAO,UAAA,CAAWrZ,CAAAA,CAAO,UAAA,CAAY,CAAE,KAAA,CAAO,CAAA,EAAG+G,CAAK,CAAA,uBAAA,EAA0B,MAAA,CAAO/G,CAAAA,CAAO,UAAU,CAAC,CAAA,CAAG,CAAC,CAAA,CAAA,CAGjHqZ,CACT,CAEA,SAAS6I,EAAAA,CAAaliB,CAAAA,CAA0B+G,CAAAA,CAA0B,CACxE,IAAIsS,CAAAA,CAASiI,CAAAA,CAAE,KAAA,CAAMF,EAAAA,CAASphB,CAAAA,CAAO,KAAK,CAAA,CAAI8gB,EAAAA,CAAQ9gB,CAAAA,CAAO,KAAA,CAAO+G,CAAK,CAAA,CAAIua,CAAAA,CAAE,GAAA,EAAI,CAAG,CACpF,KAAA,CAAO,CAAA,EAAGva,CAAK,CAAA,eAAA,CACjB,CAAC,EAED,OAAI,OAAO/G,CAAAA,CAAO,QAAA,EAAa,QAAA,GAC7BqZ,CAAAA,CAASA,CAAAA,CAAO,GAAA,CAAIrZ,CAAAA,CAAO,QAAA,CAAU,CACnC,KAAA,CAAOA,CAAAA,CAAO,QAAA,EAAY,CAAA,CAAI,CAAA,EAAG+G,CAAK,CAAA,YAAA,CAAA,CAAiB,CAAA,EAAGA,CAAK,CAAA,gBAAA,EAAmB,MAAA,CAAO/G,CAAAA,CAAO,QAAQ,CAAC,CAAA,MAAA,CAC3G,CAAC,CAAA,CAAA,CAGC,OAAOA,CAAAA,CAAO,QAAA,EAAa,QAAA,GAC7BqZ,EAASA,CAAAA,CAAO,GAAA,CAAIrZ,CAAAA,CAAO,QAAA,CAAU,CAAE,KAAA,CAAO,CAAA,EAAG+G,CAAK,CAAA,gBAAA,EAAmB,MAAA,CAAO/G,CAAAA,CAAO,QAAQ,CAAC,CAAA,MAAA,CAAS,CAAC,CAAA,CAAA,CAGrGqZ,CACT,CAEA,SAAS8I,EAAAA,CAAcniB,CAAAA,CAA0B+G,CAAAA,CAA0B,CACzE,IAAMqb,CAAAA,CAAahB,EAAAA,CAASphB,CAAAA,CAAO,UAAU,CAAA,CAAIA,CAAAA,CAAO,UAAA,CAAa,GAC/DqiB,CAAAA,CAAW,IAAI,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQriB,CAAAA,CAAO,QAAQ,CAAA,CAAIA,CAAAA,CAAO,QAAA,CAAS,MAAA,CAAQsiB,CAAAA,EAAQ,OAAOA,CAAAA,EAAQ,QAAQ,CAAA,CAAI,EAAE,CAAA,CACjHC,CAAAA,CAAsC,EAAC,CAE7C,IAAA,GAAW,CAACD,CAAAA,CAAKE,CAAQ,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQJ,CAAU,CAAA,CAAG,CACxD,IAAMK,CAAAA,CAAYrB,EAAAA,CAASoB,CAAQ,CAAA,CAAI1B,EAAAA,CAAQ0B,CAAAA,CAAU,CAAA,EAAGzb,CAAK,CAAA,CAAA,EAAIub,CAAG,CAAA,CAAE,CAAA,CAAIhB,CAAAA,CAAE,GAAA,EAAI,CACpFiB,CAAAA,CAAMD,CAAG,CAAA,CAAID,CAAAA,CAAS,GAAA,CAAIC,CAAG,CAAA,CAAIG,CAAAA,CAAYA,CAAAA,CAAU,QAAA,GACzD,CAIA,OAAOnB,CAAAA,CAAE,MAAA,CAAOiB,CAAAA,CAAO,CAAE,MAAO,CAAA,EAAGxb,CAAK,CAAA,YAAA,CAAe,CAAC,CAC1D,CAEA,SAAS2b,EAAAA,CAAcC,CAAAA,CAAe3iB,CAAAA,CAA0B+G,CAAAA,CAA0B,CACxF,OAAQ4b,CAAAA,EACN,KAAK,QAAA,CACH,OAAOlB,EAAAA,CAAczhB,CAAAA,CAAQ+G,CAAK,CAAA,CACpC,KAAK,SAAA,CACH,OAAO8a,EAAAA,CAAc7hB,CAAAA,CAAQ+G,CAAAA,CAAO,IAAI,CAAA,CAC1C,KAAK,QAAA,CACH,OAAO8a,EAAAA,CAAc7hB,CAAAA,CAAQ+G,CAAAA,CAAO,KAAK,CAAA,CAC3C,KAAK,SAAA,CACH,OAAOua,CAAAA,CAAE,OAAA,CAAQ,CAAE,KAAA,CAAO,CAAA,EAAGva,CAAK,CAAA,kBAAA,CAAqB,CAAC,CAAA,CAC1D,KAAK,MAAA,CACH,OAAOua,CAAAA,CAAE,IAAA,EAAK,CAChB,KAAK,OAAA,CACH,OAAOY,EAAAA,CAAaliB,CAAAA,CAAQ+G,CAAK,CAAA,CACnC,KAAK,QAAA,CACH,OAAOob,EAAAA,CAAcniB,CAAAA,CAAQ+G,CAAK,CAAA,CACpC,QACE,OAAI,OAAO4b,CAAAA,EAAS,QAAA,EAAU3B,EAAAA,CAAS,CAAA,KAAA,EAAQ2B,CAAI,CAAA,CAAE,CAAA,CAE9CrB,CAAAA,CAAE,GAAA,EACb,CACF,CAEA,SAASR,EAAAA,CAAQ9gB,CAAAA,CAA0B+G,CAAAA,CAA0B,CACnE,IAAA,IAAWka,CAAAA,IAAW,MAAA,CAAO,IAAA,CAAKjhB,CAAM,CAAA,CACjCkhB,EAAAA,CAAiB,GAAA,CAAID,CAAO,CAAA,EAC/BD,EAAAA,CAASC,CAAO,CAAA,CAIpB,GAAIjhB,CAAAA,CAAO,KAAA,GAAU,MAAA,CACnB,OAAOqhB,EAAAA,CAAQrhB,CAAAA,CAAO,KAAK,CAAA,CAG7B,GAAI,KAAA,CAAM,OAAA,CAAQA,CAAAA,CAAO,IAAI,CAAA,CAC3B,OAAOwhB,EAAAA,CACLxhB,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAK7I,CAAAA,EAAUkqB,EAAAA,CAAQlqB,CAAK,CAAC,CAAA,CACzC4P,CACF,CAAA,CAGF,IAAM6b,EAAe,KAAA,CAAM,OAAA,CAAQ5iB,CAAAA,CAAO,KAAK,CAAA,CAAIA,CAAAA,CAAO,KAAA,CAAQ,KAAA,CAAM,OAAA,CAAQA,CAAAA,CAAO,KAAK,CAAA,CAAIA,CAAAA,CAAO,KAAA,CAAQ,MAAA,CAE/G,GAAI4iB,CAAAA,CAAc,CAChB,IAAMxf,CAAAA,CAAUwf,CAAAA,CAAa,MAAA,CAAOxB,EAAQ,CAAA,CACtCyB,CAAAA,CAAYzf,CAAAA,CAAQ,SAAA,CAAWqP,CAAAA,EAAWA,CAAAA,CAAO,IAAA,GAAS,MAAM,CAAA,CAEtE,GAAIoQ,CAAAA,GAAc,EAAA,EAAMzf,CAAAA,CAAQ,MAAA,GAAW,CAAA,CAAG,CAC5C,IAAM0f,CAAAA,CAAQ1f,CAAAA,CAAQyf,CAAAA,GAAc,CAAA,CAAI,CAAA,CAAI,CAAC,CAAA,CAE7C,OAAO/B,EAAAA,CAAQgC,CAAAA,CAAO/b,CAAK,CAAA,CAAE,QAAA,EAC/B,CAEA,OAAOya,EAAAA,CACLpe,CAAAA,CAAQ,GAAA,CAAKqP,CAAAA,EAAWqO,EAAAA,CAAQrO,CAAAA,CAAQ1L,CAAK,CAAC,CAAA,CAC9CA,CACF,CACF,CAEA,GAAIqa,EAAAA,CAASphB,CAAAA,CAAO,GAAG,CAAA,CAAG,CACxB,IAAM+iB,CAAAA,CAAYjC,EAAAA,CAAQ9gB,CAAAA,CAAO,GAAA,CAAK+G,CAAK,CAAA,CAE3C,OAAOua,CAAAA,CAAE,GAAA,EAAI,CAAE,MAAA,CAAQnqB,CAAAA,EAAU,CAAC4rB,CAAAA,CAAU,SAAA,CAAU5rB,CAAK,CAAA,CAAE,OAAA,CAAS,CAAE,KAAA,CAAO,CAAA,EAAG4P,CAAK,CAAA,WAAA,CAAc,CAAC,CACxG,CAEA,OAAI,KAAA,CAAM,OAAA,CAAQ/G,CAAAA,CAAO,IAAI,CAAA,CACpBwhB,EAAAA,CACLxhB,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAK2iB,CAAAA,EAASD,EAAAA,CAAcC,CAAAA,CAAM3iB,CAAAA,CAAQ+G,CAAK,CAAC,CAAA,CAC5DA,CACF,CAAA,CAGK2b,EAAAA,CAAc1iB,CAAAA,CAAO,IAAA,CAAMA,CAAAA,CAAQ+G,CAAK,CACjD,CAMO,SAASic,EAAAA,CAAiBhjB,CAAAA,CAAmB+G,CAAAA,CAA0B,CAC5E,OAAOua,CAAAA,CAAE,GAAA,EAAI,CAAE,WAAA,CAAY,CAACnqB,CAAAA,CAAO8rB,CAAAA,GAAQ,CACzC,IAAM5J,CAAAA,CAASrZ,CAAAA,CAAO,SAAA,CAAU7I,CAAK,CAAA,CAErC,GAAIkiB,CAAAA,CAAO,OAAA,CACT,OAGF,IAAM6J,CAAAA,CAAiC/rB,CAAAA,EAAU,IAAA,EAAQA,CAAAA,GAAU,EAAA,CAEnE8rB,CAAAA,CAAI,QAAA,CAAS,CACX,IAAA,CAAM,QAAA,CACN,OAAA,CAASC,CAAAA,CAAU,GAAGnc,CAAK,CAAA,YAAA,CAAA,CAAkBsS,CAAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,OAAA,EAAW,CAAA,EAAGtS,CAAK,CAAA,WAAA,CAC1F,CAAC,EACH,CAAC,CACH,CC3OA,IAAMoc,EAAAA,CAAmB,IAAI,GAAA,CA0B7B,SAASC,EAAAA,CAAqBlvB,CAAAA,CAAkBqN,CAAAA,CAAsC,CACpF,IAAMpK,CAAAA,CAAQjD,EAAM,QAAA,GAAa,OAAA,EAAWA,CAAAA,CAAM,KAAA,GAAU,cAAA,CAAiB,EAAA,CAAMA,CAAAA,CAAM,YAAA,EAAgB,EAAA,CAEzG,OAAO,CACL,QAAA,CAAU,KAAA,CACV,KAAA,CAAOqN,CAAAA,CACP,KAAA,CAAApK,CACF,CACF,CAEA,SAASksB,EAAAA,CACP,CAAE,YAAA,CAAAC,CAAAA,CAAc,YAAA,CAAA/hB,CAAAA,CAAc,QAAA,CAAAuG,CAAAA,CAAU,UAAA,CAAAnD,CAAAA,CAAY,gBAAA,CAAA6R,CAAAA,CAAkB,SAAA+M,CAAAA,CAAU,MAAA,CAAAvjB,CAAAA,CAAQ,UAAA,CAAAwjB,CAAAA,CAAY,QAAA,CAAAC,CAAS,CAAA,CAC7Glc,CAAAA,CACa,CACb,IAAMmc,CAAAA,CAAe5H,IAAAA,CAAKC,MAAAA,CAAOpX,CAAAA,CAAY,MAAM,CAAC,CAAA,CAAE3E,CAAM,CAAA,CACtD,EAAG3K,CAAI,CAAA,CAAIC,CAAAA,EAAQ,CACnBquB,CAAAA,CAAatuB,CAAAA,CAAK,IAAA,EAAM,MAAA,CAGxB7D,CAAAA,CAAaoN,OAAAA,CACjB,IAAMglB,CAAAA,CAA0BF,CAAAA,EAAc,UAAA,EAAc,EAAC,CAAGC,CAAU,CAAA,CAC1E,CAACD,CAAAA,CAAcC,CAAU,CAC3B,CAAA,CACME,CAAAA,CAAoBjlB,OAAAA,CAAQ,IAC5B2kB,CAAAA,EAIG/xB,CAAAA,CAAW,MAAA,CAChB,CAACsyB,CAAAA,CAAQ5vB,CAAAA,IAAW,CAClB,GAAG4vB,CAAAA,CACH,CAAC5vB,CAAAA,CAAM,IAAI,EAAGkvB,EAAAA,CAAqBlvB,CAAAA,CAAOqN,CAAY,CACxD,GACA,EACF,CAAA,CACC,CAACA,CAAAA,CAAcgiB,CAAAA,CAAU/xB,CAAU,CAAC,CAAA,CAIjCuyB,GAAAA,CAAanlB,OAAAA,CAAQ,IAAM,CAC/B,IAAMolB,CAAAA,CAA6BzD,EAAAA,CAA0BmD,GAAc,MAAM,CAAA,CAC3EnB,CAAAA,CAA4C,EAAC,CAEnD,IAAA,IAAW3b,CAAAA,IAAepV,CAAAA,CAAY,CAKpC,GAJIoV,CAAAA,CAAY,UAAA,GAAe,MAAA,EAAaA,CAAAA,CAAY,MAAA,GAAW,IAAA,EAAQA,EAAY,QAAA,GAAa,IAAA,EAIhG,CAACwZ,EAAAA,CAA2BxZ,CAAAA,CAAaod,CAA0B,CAAA,CACrE,SAGF,IAAMjd,CAAAA,CAAQH,CAAAA,CAAY,KAAA,EAASA,CAAAA,CAAY,IAAA,CAE/C2b,CAAAA,CAAM3b,CAAAA,CAAY,IAAI,CAAA,CAAI0a,CAAAA,CAAE,MAAA,CAAO,CACjC,KAAA,CAAO0B,EAAAA,CAAiBnC,EAAAA,CAAgBja,CAAAA,CAAY,UAAA,CAAYG,CAAK,CAAA,CAAGA,CAAK,CAC/E,CAAC,EACH,CAEA,OAAOvU,WAAAA,CAAY8uB,CAAAA,CAAE,MAAA,CAAOiB,CAAK,CAAC,CACpC,CAAA,CAAG,CAACmB,CAAAA,EAAc,MAAA,CAAQlyB,CAAU,CAAC,CAAA,CAG/Bc,CAAAA,CAAOC,OAAAA,CAAwB,CACnC,aAAA,CAAesxB,CAAAA,CACf,QAAA,CAJyC,CAACC,CAAAA,CAAQprB,CAAAA,CAAS0K,CAAAA,GAAY2gB,GAAAA,CAAWD,CAAAA,CAAQprB,CAAAA,CAAS0K,CAAO,CAAA,CAK1G,MAAA,CAAQmgB,CAAAA,CACR,IAAA,CAAM,SACN,YAAA,CAAc,KAChB,CAAC,CAAA,CAEK,CAAE,OAAA,CAAA5c,CAAAA,CAAS,SAAA,CAAAoB,GAAAA,CAAW,YAAA,CAAAkc,CAAAA,CAAc,QAAA,CAAAnd,CAAAA,CAAU,KAAA,CAAAod,CAAAA,CAAO,OAAA,CAAAC,CAAQ,CAAA,CAAI7xB,CAAAA,CAEvE4xB,CAAAA,EAAM,CACN,IAAME,CAAAA,CAAgBxlB,OAAAA,CAAQ,IAAM2hB,EAAAA,CAA0BmD,CAAAA,EAAc,MAAM,CAAA,CAAG,CAACA,CAAAA,EAAc,MAAM,CAAC,CAAA,CACrG,CAACW,CAAAA,CAAaC,CAAc,CAAA,CAAI1zB,QAAAA,CAAS,IAAM8vB,EAAAA,CAAyB0D,CAAa,CAAC,CAAA,CAGtFG,GAAAA,CAAczyB,MAAAA,CAAmCyxB,CAAQ,CAAA,CACzDiB,CAAAA,CAAoB1yB,MAAAA,CAAO,KAAK,CAAA,CAEtCd,SAAAA,CAAU,IAAM,CACVwzB,CAAAA,CAAkB,OAAA,GAItBD,GAAAA,CAAY,OAAA,CAAUhB,CAAAA,EACxB,CAAA,CAAG,CAACA,CAAQ,CAAC,CAAA,CAEb,IAAMkB,CAAAA,CAAyB,CAC7B,QAAA,CAAUpX,EAAAA,CACV,MAAA,CAAQiH,EAAAA,CACR,KAAA,CAAOzM,EAAAA,CACP,MAAA,CAAQiE,EAAAA,CACR,YAAA,CAAcuT,EAAAA,CACd,MAAA,CAAQjpB,EAAAA,CACR,MAAA,CAAUiR,EAAAA,CACV,IAAA,CAAMX,EAAAA,CACN,QAAA,CAAU0P,EACZ,CAAA,CA2FA,GAzFAsO,mBAAAA,CAAoBnd,CAAAA,CAAK,KAAO,CAC9B,MAAA,EAAS,CAEF4c,CAAAA,EAAQ,CAAE,IAAA,CAAK,IAAM,CACnBF,CAAAA,CAAa,IAAM,CACtB,IAAMH,CAAAA,CAAS/b,GAAAA,EAAU,CAGzByc,CAAAA,CAAkB,OAAA,CAAU,IAAA,CAC5BD,GAAAA,CAAY,OAAA,CAAUT,CAAAA,CACtBN,CAAAA,CAAW,KAAK,CAAA,CAChBC,CAAAA,CAASK,CAAAA,CAAQP,CAAQ,EAC3B,CAAC,CAAA,GACH,CAAC,EACH,CAAA,CACA,SAAA,EAAY,CACViB,CAAAA,CAAkB,OAAA,CAAU,KAAA,CAC5BD,GAAAA,CAAY,QAAUhB,CAAAA,CACtBC,CAAAA,CAAW,IAAI,EACjB,CAAA,CACA,cAAA,EAAiB,CACf,OAAOmB,EAAAA,CAAe5c,GAAAA,EAAU,CAAGwc,GAAAA,CAAY,OAAO,CACxD,CAAA,CACA,WAAA,EAAc,CACZC,CAAAA,CAAkB,OAAA,CAAU,IAAA,CAC5BD,GAAAA,CAAY,OAAA,CAAUxc,GAAAA,EAAU,CAChCyb,CAAAA,CAAW,KAAK,EAClB,CAAA,CACA,sBAAA,CAAuBoB,CAAAA,CAA0C,CAC/D,IAAMd,EAAS/b,GAAAA,EAAU,CACnB8c,CAAAA,CAA6B,CAAE,GAAGf,CAAO,CAAA,CAE/C,IAAA,GAAW,CAACgB,CAAAA,CAAezuB,CAAE,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQuuB,CAAG,CAAA,CAAG,CACrD,IAAM1wB,CAAAA,CAAQ4vB,CAAAA,CAAOgB,CAAa,CAAA,CAE9B,CAAC5wB,CAAAA,EAASA,CAAAA,CAAM,GAAA,EAAO,CAACmC,CAAAA,GAI5BwuB,CAAAA,CAAWC,CAAa,CAAA,CAAI,CAC1B,GAAG5wB,CAAAA,CACH,GAAA,CAAKmC,CACP,CAAA,EACF,CAGAmuB,CAAAA,CAAkB,OAAA,CAAU,IAAA,CAC5BD,GAAAA,CAAY,OAAA,CAAUM,CAAAA,CAEtB,IAAA,GAAW,CAACC,CAAAA,CAAe5wB,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQ2wB,CAAU,CAAA,CACxD3wB,CAAAA,GAAU4vB,CAAAA,CAAOgB,CAAa,CAAA,EAIlChe,CAAAA,CAASge,CAAAA,CAAe5wB,CAAAA,CAAO,CAC7B,WAAA,CAAa,KAAA,CACb,WAAA,CAAa,KAAA,CACb,eAAgB,KAClB,CAAC,CAAA,CAGHsvB,CAAAA,CAAW,KAAK,EAClB,CACF,CAAA,CAAE,CAAA,CAEFxyB,SAAAA,CAAU,IAAM,CACd,IAAM+zB,CAAAA,CAA0Bb,CAAAA,CAAM,IAAM,CAG1CV,CAAAA,CAAWmB,EAAAA,CAAe5c,GAAAA,EAAU,CAAGwc,GAAAA,CAAY,OAAO,CAAC,EAC7D,CAAC,CAAA,CAED,OAAO,IAAM,CACXQ,CAAAA,CAAwB,WAAA,GAC1B,CACF,CAAA,CAAG,CAACxB,CAAAA,CAAUxb,GAAAA,CAAWyb,CAAAA,CAAYU,CAAK,CAAC,CAAA,CAE3ClzB,SAAAA,CAAU,IAAM,CACVozB,CAAAA,CAAc,MAAA,GAAW,CAAA,GAIzBA,CAAAA,CAAc,IAAA,CAAM9D,CAAAA,EAAUA,CAAAA,CAAM,IAAA,GAAS+D,CAAW,CAAA,EAI5DC,CAAAA,CAAe5D,EAAAA,CAAyB0D,CAAa,CAAC,CAAA,EACxD,CAAA,CAAG,CAACC,CAAAA,CAAaD,CAAa,CAAC,EAE3B,CAACV,CAAAA,EAAgBA,CAAAA,CAAa,UAAA,CAAW,MAAA,GAAW,CAAA,CACtD,OACEzyB,IAAAA,CAAC2C,EAAAA,CAAA,CAAM,OAAA,CAAQ,aAAA,CACb,QAAA,CAAA,CAAAzC,GAAAA,CAACouB,aAAAA,CAAA,CAAc,SAAA,CAAU,eAAA,CAAgB,CAAA,CACzCpuB,GAAAA,CAAC0M,EAAAA,CAAA,CAAW,QAAA,CAAA,OAAA,CAAK,CAAA,CACjB5M,IAAAA,CAAC4C,EAAAA,CAAA,CAAiB,QAAA,CAAA,CAAA,+CAAA,CAC6B1C,GAAAA,CAAC,QAAA,CAAA,CAAQ,QAAA,CAAAwT,CAAAA,CAAW,GACnE,CAAA,CAAA,CACF,CAAA,CAIJ,IAAMqgB,CAAAA,CAAe9wB,CAAAA,EAAqB,CAKxC,GAJIA,CAAAA,CAAM,IAAA,GAAS,KAAA,EAIfA,CAAAA,CAAM,MAAA,GAAW,IAAA,CACnB,OAAO,IAAA,CAGT,IAAM2S,CAAAA,CAAW3S,CAAAA,CAAM,QAAA,GAAa,IAAA,CAC9B+wB,CAAAA,CAAiBR,CAAAA,CAAuBvwB,CAAAA,CAAM,SAAgD,CAAA,CAIpG,OAAI,CAAC+wB,CAAAA,EAAkB,CAAC9B,EAAAA,CAAiB,GAAA,CAAIjvB,CAAAA,CAAM,SAAS,CAAA,GAE1DivB,EAAAA,CAAiB,GAAA,CAAIjvB,CAAAA,CAAM,SAAS,CAAA,CACpC,OAAA,CAAQ,IAAA,CAAK,CAAA,6BAAA,EAAgCA,CAAAA,CAAM,SAAS,CAAA,MAAA,EAASA,CAAAA,CAAM,IAAI,CAAA,0BAAA,CAA4B,CAAA,CAAA,CAMtGgxB,aAAAA,CAFLD,CAAAA,EAAmBve,EAAAA,CAInB,CACE,GAAA,CAAKxS,CAAAA,CAAM,IAAA,CACX,OAAA,CAAAyS,CAAAA,CACA,YAAA,CAAApF,CAAAA,CACA,YAAA,CAAcsiB,CAAAA,CAAkB3vB,CAAAA,CAAM,IAAI,CAAA,CAC1C,SAAA4T,CAAAA,CACA,UAAA,CAAAnD,CAAAA,CACA,gBAAA,CAAA6R,CAAAA,CACA,WAAA,CAAatiB,CAAAA,CACb,SAAA,CAAA6T,GAAAA,CACA,QAAA,CAAAlB,CAAAA,CACA,MAAA,CAAA7G,CAAAA,CACA,KAAA,CAAOsjB,CAAAA,CACP,QAAA,CAAAxc,CACF,CACF,CACF,CAAA,CAEA,OACE3V,GAAAA,CAAC4C,CAAAA,CAAA,CAAM,GAAGzB,CAAAA,CACR,QAAA,CAAAnB,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,8BAAA,CACV,QAAA,CAAW6C,GAAU,CACnBA,CAAAA,CAAM,cAAA,GACR,CAAA,CAEC,QAAA,CAAAowB,CAAAA,CAAc,MAAA,CAAS,CAAA,CACtBnzB,IAAAA,CAACk0B,EAAAA,CAAA,CAAK,aAAA,CAAeb,CAAAA,CAAgB,KAAA,CAAOD,CAAAA,CAC1C,QAAA,CAAA,CAAAlzB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6DAAA,CACb,QAAA,CAAAF,IAAAA,CAACqiB,CAAAA,CAAA,CAAW,SAAA,CAAU,yQAAA,CACpB,QAAA,CAAA,CAAAniB,GAAAA,CAACi0B,IAAAA,CAAA,CAAS,SAAA,CAAU,kDACjB,QAAA,CAAAhB,CAAAA,CAAc,GAAA,CAAK9D,CAAAA,EAClBrvB,IAAAA,CAACo0B,IAAAA,CAAA,CAA6B,KAAA,CAAO/E,CAAAA,CAAM,IAAA,CACxC,QAAA,CAAA,CAAAA,CAAAA,CAAM,IAAA,CAAOnvB,GAAAA,CAACm0B,CAAAA,CAAA,CAAK,IAAA,CAAMhF,CAAAA,CAAM,IAAA,CAAM,CAAA,CAAK,IAAA,CAC1CA,CAAAA,CAAM,KAAA,CAAA,CAAA,CAFSA,CAAAA,CAAM,IAGxB,CACD,CAAA,CACH,CAAA,CACAnvB,GAAAA,CAACo0B,CAAAA,CAAA,CAAU,WAAA,CAAY,aAAa,CAAA,CAAA,CACtC,CAAA,CACF,CAAA,CACAp0B,GAAAA,CAACq0B,EAAAA,CAAA,CAAY,SAAA,CAAU,UAAA,CAAW,KAAA,CAAOnB,CAAAA,CACtC,QAAA,CAAA7yB,CAAAA,CAAW,GAAA,CAAK0C,CAAAA,EAAU,CACzB,GAAI,CAACksB,EAAAA,CAA2BlsB,CAAAA,CAAOkwB,CAAa,CAAA,CAClD,OAAO,IAAA,CAGT,IAAMqB,CAAAA,CAAYvF,EAAAA,CAAwBhsB,CAAAA,CAAOmwB,CAAW,CAAA,CACtDqB,CAAAA,CAAeV,CAAAA,CAAY9wB,CAAK,EAEtC,OAAKwxB,CAAAA,CAKHv0B,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWs0B,CAAAA,CAAY,MAAA,CAAY,WAAA,CACrC,QAAA,CAAAC,CAAAA,CAAAA,CADuDxxB,CAAAA,CAAM,IAEhE,CAAA,CANO,IAQX,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAEA1C,CAAAA,CAAW,GAAA,CAAK0C,CAAAA,EAAU8wB,CAAAA,CAAY9wB,CAAK,CAAC,CAAA,CAEhD,CAAA,CACF,CAEJ,CAEA,IAAOyxB,EAAAA,CAAQC,IAAAA,CAAKC,UAAAA,CAAWxC,EAAW,CAAC,CAAA,CAE3C,SAASsB,EAAAA,CACPmB,CAAAA,CACAC,CAAAA,CACS,CACT,GAAI,CAACA,CAAAA,CAEH,OAAO,MAAA,CAAO,IAAA,CAAKD,CAAW,CAAA,CAAE,IAAA,CAC7B5xB,CAAAA,EAAU4xB,CAAAA,CAAY5xB,CAAK,CAAA,EAAG,KAAA,GAAU,EAAA,EAAM4xB,CAAAA,CAAY5xB,CAAK,CAAA,EAAG,KAAA,GAAU,MAC/E,CAAA,CAQF,IAAM8xB,CAAAA,CAA4B7uB,CAAAA,EAC5B,OAAOA,GAAU,QAAA,EAAYA,CAAAA,GAAU,IAAA,CACrC,MAAA,GAAUA,CAAAA,CAELA,CAAAA,CAAM,IAAA,CAGR,KAAA,GAASA,CAAAA,CAASA,CAAAA,CAA0B,GAAA,CAAM,EAAA,CAGpDA,CAAAA,EAAS,EAAA,CAGZ8uB,CAAAA,CAAqB,CAAC,CAAA,CAAW5K,CAAAA,GAAuB,CAAA,CAAIA,CAAAA,CAAI,EAAA,CAAK,CAAA,CACrE6K,CAAAA,CAAe,MAAA,CAAO,IAAA,CAAKH,CAAgB,CAAA,CAC9C,IAAA,CAAK,CAAC,CAAA,CAAG1K,CAAAA,GAAM4K,CAAAA,CAAmB,EAAG5K,CAAC,CAAC,CAAA,CACvC,MAAA,CAAQnnB,CAAAA,EAAUA,CAAAA,GAAU,YAAY,CAAA,CACxC,MAAA,CACC,CAACiyB,CAAAA,CAAKjyB,CAAAA,IAAW,CACf,GAAGiyB,CAAAA,CACH,CAACjyB,CAAK,EAAG,CACP,KAAA,CAAO8xB,CAAAA,CAAyBD,CAAAA,CAAiB7xB,CAAK,CAAA,CAAE,KAAK,CAAA,CAC7D,QAAA,CAAU6xB,CAAAA,CAAiB7xB,CAAK,CAAA,CAAE,QAAA,CAClC,aAAA,CAAe6xB,EAAiB7xB,CAAK,CAAA,CAAE,aACzC,CACF,CAAA,CAAA,CACA,EACF,CAAA,CACIkyB,CAAAA,CAAU,MAAA,CAAO,IAAA,CAAKN,CAAW,CAAA,CACpC,IAAA,CAAK,CAAC,CAAA,CAAGzK,CAAAA,GAAM4K,CAAAA,CAAmB,CAAA,CAAG5K,CAAC,CAAC,CAAA,CACvC,MAAA,CAAQnnB,CAAAA,EAAUA,CAAAA,GAAU,YAAY,CAAA,CACxC,MAAA,CACC,CAACiyB,CAAAA,CAAKjyB,CAAAA,IAAW,CACf,GAAGiyB,CAAAA,CACH,CAACjyB,CAAK,EAAG,CACP,KAAA,CAAO8xB,CAAAA,CAAyBF,CAAAA,CAAY5xB,CAAK,CAAA,EAAG,KAAK,CAAA,CACzD,QAAA,CAAU4xB,CAAAA,CAAY5xB,CAAK,CAAA,EAAG,QAAA,EAAY,KAAA,CAC1C,aAAA,CACU,MAAA,CAAO,IAAA,CAAK4xB,CAAAA,CAAY5xB,CAAK,CAAA,EAAG,aAAA,EAAe,OAAA,EAAW,EAAE,CAAA,CAAE,MAAA,EAC9D4xB,CAAAA,CAAY5xB,CAAK,GAAG,aAAA,EAAe,UAAA,EAAY,MAAA,CACnD4xB,CAAAA,CAAY5xB,CAAK,CAAA,EAAG,aAAA,CACpB,MACR,CACF,CAAA,CAAA,CACA,EACF,CAAA,CAEF,OAAO,CAACmyB,MAAAA,CAAOH,CAAAA,CAAcE,CAAO,CACtC,CCtYe,SAARE,EAAAA,CAA2B,CAAE,MAAA,CAAAtiB,CAAAA,CAAQ,KAAA,CAAAuiB,EAAO,SAAA,CAAAC,CAAU,CAAA,CAAuB,CAClF,GAAM,CAAE,UAAA,CAAA7hB,CAAW,CAAA,CAAIX,CAAAA,CAAO,OAAA,CACxBuD,CAAAA,CAAMzV,MAAAA,CAAqB,IAAI,CAAA,CAC/B20B,CAAAA,CAAYC,GAAAA,EAAa,CACzB,EAAGrxB,CAAI,CAAA,CAAIC,CAAAA,EAAQ,CACnB,CAAE,cAAA,CAAAwK,CAAe,CAAA,CAAIjL,GAAAA,EAAU,CAC/BmL,CAAAA,CAASpB,OAAAA,CAAQ,IAAMkB,CAAAA,EAAgB,MAAA,EAAU,EAAC,CAAG,CAACA,CAAc,CAAC,CAAA,CAErEyB,CAAAA,CADSzB,CAAAA,EAAgB,MAAA,EACF,IAAA,CAAM0B,CAAAA,EAAMA,CAAAA,CAAE,SAAS,CAAA,EAAG,IAAA,EAAQ,SAAA,CAEzDgV,CAAAA,CADesF,IAAAA,CAAKC,MAAAA,CAAOpX,CAAAA,CAAY,MAAM,CAAC,CAAA,CAAE3E,CAAM,CAAA,EACrB,MAAA,EAAU2E,CAAAA,CAC3C,CAAE,KAAA,CAAAwB,CAAM,EAAI+B,GAAAA,EAAc,CAC1B3D,CAAAA,CAAWC,CAAAA,EAAY,CACvBP,CAAAA,CAAeC,eAAAA,EAAgB,CAC/B,CAACC,CAAAA,CAAaC,CAAAA,CAAaC,CAAAA,CAAYsiB,CAAY,CAAA,CAAIriB,CAAAA,EAAkB,CACzE,CAAE,OAAA,CAAAsiB,CAAAA,CAAS,UAAA,CAAApD,CAAW,CAAA,CAAIxd,EAAAA,EAAsB,CAChD,CAAC6gB,CAAAA,CAAYC,CAAa,CAAA,CAAIl2B,QAAAA,CAAS,KAAK,CAAA,CAElDI,SAAAA,CAAU,IAAM,CACV21B,CAAAA,CAAa,KAAA,EACfpf,CAAAA,CAAI,OAAA,EAAS,SAAA,GAEjB,CAAA,CAAG,CAACof,CAAAA,CAAa,KAAK,CAAC,CAAA,CAEvB,SAASI,CAAAA,EAA6B,CACpC,OAAKH,CAAAA,EAILriB,CAAAA,CAAS,CACP,IAAA,CAAM,aAAA,CACN,GAAA,CAAK,gBAAA,CACL,OAAA,CAAS,CACP,OAAA,CAAS,CACP,WAAA,CAAa,iBAAA,CACb,aAAA,CACE,qGAAA,CACF,kBAAmB,WAAA,CACnB,iBAAA,CAAmB,iBAAA,CACnB,kBAAA,CAAoB,IAAM,CACxBA,CAAAA,CAAS,CAAE,IAAA,CAAM,SAAA,CAAW,GAAA,CAAK,gBAAA,CAAkB,OAAA,CAAS,EAAG,CAAC,EAClE,CAAA,CACA,kBAAA,CAAoB,IAAM,CACxBif,CAAAA,CAAW,KAAK,CAAA,CAChBjf,CAAAA,CAAS,CAAE,IAAA,CAAM,SAAA,CAAW,GAAA,CAAK,gBAAA,CAAkB,OAAA,CAAS,EAAG,CAAC,CAAA,CAChEuiB,CAAAA,CAAc,IAAI,EACpB,CACF,CACF,CACF,CAAC,CAAA,CAEM,KAAA,EAzBE,IA0BX,CAEA,IAAMnjB,GAAAA,CAAcwV,WAAAA,CACjBJ,CAAAA,EAAuB,CACtBxU,CAAAA,CAAS,CAAE,IAAA,CAAM,SAAA,CAAW,GAAA,CAAAwU,CAAAA,CAAK,OAAA,CAAS,EAAG,CAAC,EAChD,CAAA,CACA,CAACxU,CAAQ,CACX,CAAA,CAEMyiB,CAAAA,CAAa7N,WAAAA,CAAY,IAAM,CACnC5R,CAAAA,CAAI,OAAA,EAAS,MAAA,GACf,CAAA,CAAG,CAACA,CAAG,CAAC,CAAA,CAEF0f,CAAAA,CAAa9N,WAAAA,CAChBiN,GAA4B,CAC3B,IAAMrN,CAAAA,CAAMmO,EAAAA,EAAO,CACbliB,CAAAA,CAAWmiB,GAAAA,CAAwB3Q,CAAAA,CAAkBxW,CAAAA,CAAQomB,CAAAA,CAASrN,CAAAA,CAAK,CAC/E,WAAA,CAAa1jB,CAAAA,CAAK,IACpB,CAAC,EAED+O,CAAAA,CAAYe,GAAAA;AAAA,QAAA,EACRH,CAAQ;AAAA,MAAA,CACX,EACDX,CAAAA,CAAW,CACT,YAAa,IAAM,CACZ+iB,IAA0BnjB,CAAAA,CAAcuB,GAAAA,CAAuBgR,EAAkBxW,CAAM,CAAC,EAC7F2D,GAAAA,CAAYK,CAAAA,CAAO,GAAG,CAAA,CACtBsB,KAAAA,CAAM,QAAQ,+BAA+B,EAC/C,CACF,CAAC,CAAA,CACDnB,EAAY,IAAI,EAClB,EACA,CAACH,CAAAA,CAAO,IAAKC,CAAAA,CAAc5O,CAAAA,CAAK,KAAMmhB,CAAAA,CAAkB7S,GAAAA,CAAaQ,EAAanE,CAAAA,CAAQoE,CAAAA,CAAaC,CAAU,CACnH,CAAA,CAEA,OACElT,GAAAA,CAACk2B,IAAAA,CAAA,CACC,OAAA,CACEl2B,IAACm2B,IAAAA,CAAA,CAAkB,SAAU,CAACb,CAAAA,CAC5B,SAAAx1B,IAAAA,CAAC6C,GAAAA,CAAA,CACC,SAAA,CAAU,qBAAA,CACV,SAAU,CAAC2yB,CAAAA,CACX,QAAS,IAAM,CACbO,IACF,CAAA,CACA,QAAQ,SAAA,CAEP,QAAA,CAAA,CAAAL,EAAa,OAAA,CAAUx1B,GAAAA,CAACoD,QAAA,CAAQ,SAAA,CAAU,wCAAwC,CAAA,CAAK,IAAA,CAAK,QAE/F,CAAA,CACF,CAAA,CAEF,YAAawyB,CAAAA,CACb,KAAA,CAAOR,EACP,UAAA,CAAYM,CAAAA,CACZ,UAAWL,CAAAA,CACX,OAAA,CAAS,IAAM,CACb7iB,IAAYK,CAAAA,CAAO,GAAG,EACxB,CAAA,CACA,KAAA,CAAO,OAAOW,CAAU,CAAA,CAAA,CAExB,SAAAxT,GAAAA,CAACw0B,EAAAA,CAAA,CACC,YAAA,CAAcxf,CAAAA,CACd,aAAc5E,CAAAA,CACd,UAAA,CAAYoD,EACZ,gBAAA,CAAkB6R,CAAAA,CAClB,SAAUyQ,CAAAA,CACV,GAAA,CAAK1f,EACL,MAAA,CAAQvH,CAAAA,CACR,WAAYwjB,CAAAA,CACd,CAAA,CACF,CAEJ,CC3JO,SAAS+D,EAAAA,EAA4B,CAC1C,OACEt2B,IAAAA,CAAC2C,EAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,QAAQ,aAAA,CACjC,QAAA,CAAA,CAAAzC,IAACyM,WAAAA,CAAA,CAAY,UAAU,eAAA,CAAgB,CAAA,CACvCzM,IAAC0M,EAAAA,CAAA,CAAW,QAAA,CAAA,gBAAA,CAAc,CAAA,CAC1B5M,KAAC4C,EAAAA,CAAA,CAAiB,wHAC4F,GAAA,CAC5G1C,GAAAA,CAAC,KACC,SAAA,CAAU,+BAAA,CACV,KAAK,+CAAA,CACL,MAAA,CAAO,SACP,GAAA,CAAI,qBAAA,CACL,8BAED,CAAA,CAAI,GAAA,CAAA,CAEN,GACF,CAEJ,CCjBe,SAARq2B,EAAAA,CAA4B,CAAE,UAAA,CAAAR,CAAAA,CAAY,UAAAh0B,CAAU,CAAA,CAAmD,CAC5G,GAAM,CAAE,QAAA4zB,CAAQ,CAAA,CAAI5gB,EAAAA,EAAsB,CACpCygB,EAAYC,GAAAA,EAAa,CAE/B,OACEv1B,GAAAA,CAACm2B,IAAAA,CAAA,CAAkB,QAAA,CAAU,CAACb,EAC5B,QAAA,CAAAx1B,IAAAA,CAAC6C,IAAA,CACC,SAAA,CAAU,sBACV,QAAA,CAAU,CAAC8yB,GAAW,CAACH,CAAAA,CACvB,QAAS,IAAM,CACbO,IACF,CAAA,CACA,QAAQ,SAAA,CAEP,QAAA,CAAA,CAAAh0B,EAAY7B,GAAAA,CAACoD,OAAAA,CAAA,CAAQ,SAAA,CAAU,uCAAA,CAAwC,EAAK,IAAA,CAAK,MAAA,CAAA,CAEpF,EACF,CAEJ,CCtBe,SAARyB,IAAwC,CAG7C,OACE7E,IAAA+E,QAAAA,CAAA,CAEG,eAAM,IAAA,CAAK,CAAE,OAAQ,EAAuB,CAAA,CAAG,CAACuxB,CAAAA,CAAGC,CAAAA,GAAMA,GAAG,CAAA,CAAE,GAAA,CAAKA,GAClEz2B,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mBAAA,CACb,QAAA,CAAA,CAAAE,IAACw2B,GAAAA,CAAA,CAAS,UAAU,uBAAA,CAAwB,CAAA,CAC5C12B,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAAE,GAAAA,CAACw2B,IAAA,CAAS,SAAA,CAAU,iBAAiB,CAAA,CACrCx2B,GAAAA,CAACw2B,GAAAA,CAAA,CAAS,UAAU,0BAAA,CAA2B,CAAA,CAAA,CACjD,IALsCD,CAMxC,CACD,EACH,CAEJ,CCee,SAARE,EAAAA,CAA4B,CAAE,MAAA,CAAA5jB,GAAAA,CAAQ,MAAAuiB,CAAAA,CAAO,SAAA,CAAAC,CAAU,CAAA,CAAuB,CACnF,GAAM,CAAE,QAAA,CAAA1e,EAAU,gBAAA,CAAA0O,CAAiB,EAAIxS,GAAAA,CAAO,OAAA,CACxCuD,EAAMzV,MAAAA,CAAqB,IAAI,EAC/B,CAAE,cAAA,CAAAgO,IAAgB,gBAAA,CAAA+nB,GAAiB,CAAA,CAAIhzB,GAAAA,GACvCmL,CAAAA,CAASpB,OAAAA,CAAQ,IAAMkB,GAAAA,EAAgB,MAAA,EAAU,EAAC,CAAG,CAACA,GAAc,CAAC,CAAA,CACrEoB,EAASpB,GAAAA,EAAgB,MAAA,CACzByB,EAAeL,CAAAA,EAAQ,IAAA,CAAMM,GAAMA,CAAAA,CAAE,SAAS,GAAG,IAAA,EAAQ,SAAA,CACzDkiB,EAAe5H,IAAAA,CAAKC,MAAAA,CAAOvF,EAAkB,QAAQ,CAAC,EAAExW,CAAM,CAAA,CAC9D2E,IAAa+e,CAAAA,EAAc,IAAA,EAAQlN,EACnC,CAAE,KAAA,CAAArQ,CAAM,CAAA,CAAI+B,GAAAA,GACZ,CAACob,CAAAA,CAAcwE,CAAe,CAAA,CAAIl3B,SAASuV,CAAK,CAAA,CAChD5B,EAAWC,CAAAA,EAAY,CACvBrD,EAAcC,GAAAA,EAAe,CAC7B6C,EAAeC,eAAAA,EAAgB,CAC/B,CAACC,CAAAA,CAAaC,CAAAA,CAAaC,EAAYsiB,CAAY,CAAA,CAAIriB,GAAkB,CACzE,CAAE,QAAAsiB,CAAAA,CAAS,UAAA,CAAApD,CAAW,CAAA,CAAIxd,EAAAA,GAC1B,CAAC6gB,GAAAA,CAAYC,CAAa,CAAA,CAAIl2B,QAAAA,CAAS,KAAK,CAAA,CAC5C,EAAGyE,CAAI,CAAA,CAAIC,GAAQ,CAEnByyB,CAAAA,CAAiB5O,YACpB6O,CAAAA,EAAyB,CACxBxE,CAAAA,CAAWwE,CAAW,EACxB,CAAA,CACA,CAACxE,CAAU,CACb,CAAA,CAEAxyB,UAAU,IAAM,CACV21B,EAAa,KAAA,EACfpf,CAAAA,CAAI,SAAS,SAAA,GAEjB,EAAG,CAACof,CAAAA,CAAa,KAAK,CAAC,CAAA,CAIvB,IAAMI,CAAAA,CAAoB5N,WAAAA,CAAY,IAC/ByN,CAAAA,EAILriB,CAAAA,CAAS,CACP,IAAA,CAAM,aAAA,CACN,IAAK,gBAAA,CACL,OAAA,CAAS,CACP,OAAA,CAAS,CACP,YAAa,iBAAA,CACb,aAAA,CACE,sGACF,iBAAA,CAAmB,WAAA,CACnB,kBAAmB,iBAAA,CACnB,kBAAA,CAAoB,IAAM,CACxBA,EAAS,CAAE,IAAA,CAAM,UAAW,GAAA,CAAK,gBAAA,CAAkB,QAAS,EAAG,CAAC,EAClE,CAAA,CACA,mBAAoB,IAAM,CACxBif,EAAW,KAAK,CAAA,CAChBjf,EAAS,CAAE,IAAA,CAAM,UAAW,GAAA,CAAK,gBAAA,CAAkB,QAAS,EAAG,CAAC,CAAA,CAChEuiB,CAAAA,CAAc,IAAI,EACpB,CACF,CACF,CACF,CAAC,EAEM,KAAA,EAzBE,IAAA,CA0BR,CAACviB,CAAAA,CAAUqiB,CAAAA,CAASpD,CAAU,CAAC,CAAA,CAE5B7f,CAAAA,CAAcwV,WAAAA,CACjBJ,GAAuB,CACtBxU,CAAAA,CAAS,CAAE,IAAA,CAAM,SAAA,CAAW,IAAAwU,CAAAA,CAAK,OAAA,CAAS,EAAG,CAAC,EAChD,CAAA,CACA,CAACxU,CAAQ,CACX,CAAA,CAEMyiB,EAAa7N,WAAAA,CAAY,IAAM,CACnC5R,CAAAA,CAAI,OAAA,EAAS,SACf,CAAA,CAAG,CAACA,CAAG,CAAC,EAER,SAAS0gB,CAAAA,CAAkBC,EAAyB,CAClD,GAAItB,EAAS,CACXriB,CAAAA,CAAS,CACP,IAAA,CAAM,aAAA,CACN,IAAK,gBAAA,CACL,OAAA,CAAS,CACP,OAAA,CAAS,CACP,WAAA,CAAa,iBAAA,CACb,cAAe,+DAAA,CACf,iBAAA,CAAmB,YACnB,iBAAA,CAAmB,iBAAA,CACnB,mBAAoB,IAAM,CACxBujB,EAAgBxE,CAAY,CAAA,CAC5B/e,EAAS,CAAE,IAAA,CAAM,UAAW,GAAA,CAAK,gBAAA,CAAkB,QAAS,EAAG,CAAC,EAClE,CAAA,CACA,mBAAoB,IAAM,CACxBA,EAAS,CAAE,IAAA,CAAM,UAAW,GAAA,CAAK,gBAAA,CAAkB,QAAS,EAAG,CAAC,CAAA,CAChEujB,CAAAA,CAAgBI,CAAS,CAAA,CACzB/mB,CAAAA,CAAY,CAAE,IAAA,CAAM,WAAY,OAAA,CAAS,CAAE,UAAW0mB,GAAAA,CAAkB,KAAA,CAAOK,CAAU,CAAE,CAAC,EAC9F,CACF,CACF,CACF,CAAC,CAAA,CAED,MACF,CAEAJ,CAAAA,CAAgBI,CAAS,CAAA,CACzB/mB,CAAAA,CAAY,CAAE,IAAA,CAAM,UAAA,CAAY,QAAS,CAAE,SAAA,CAAW0mB,IAAkB,KAAA,CAAOK,CAAU,CAAE,CAAC,EAC9F,CAEA,GAAM,CAAE,UAAAl1B,CAAAA,CAAW,IAAA,CAAMm1B,GAAQ,CAAA,CAAIC,GAAAA,CAAe,CAClD,gBAAA,CAAA5R,CAAAA,CACA,OAAAxW,CAAAA,CACA,KAAA,CAAOsjB,EACP,SAAA,CAAW,CAAE,MAAO,CAAE,GAAA,CAAK,CAAE,EAAA,CAAIxb,CAAS,CAAE,CAAE,CAAA,CAC9C,OAAQ,IAAA,CACR,YAAA,CAAc,KAChB,CAAC,CAAA,CAEKmf,EAAa9N,WAAAA,CACjB,CAACiN,EAAyBiC,EAAAA,GAAkC,CAC1D,GAAI,CAACA,EAAAA,CACH,OAGF,IAAMrjB,EAAAA,CAAWsjB,IACf9R,CAAAA,CACA1O,CAAAA,CACAwb,EACAtjB,CAAAA,CACAqoB,EAAAA,CACAjC,EACA,CACE,WAAA,CAAa/wB,EAAK,IACpB,CACF,EAEA+O,CAAAA,CAAYe,GAAAA;AAAA,QAAA,EACRH,EAAQ;AAAA,MAAA,CACX,CAAA,CACDX,CAAAA,CAAW,CACT,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,GAAA,CAAK,CAAE,GAAIyD,CAAS,CAAE,CAAE,CAAA,CAC9C,YAAc9F,EAAAA,EAAsB,CAGlCuF,CAAAA,CAAI,OAAA,EAAS,uBACXghB,GAAAA,CAAuCvmB,EAAAA,CAAUwU,CAAAA,CAAkBxW,CAAM,CAC3E,CAAA,CACKonB,GAAAA,CAA0BnjB,CAAAA,CAAcuB,GAAAA,CAAuBgR,EAAkBxW,CAAM,CAAC,CAAA,CAC7FsF,KAAAA,CAAM,QAAQ,+BAA+B,EAC/C,CACF,CAAC,CAAA,CACDnB,CAAAA,CAAY,IAAI,EAClB,EACA,CAACF,CAAAA,CAAc5O,CAAAA,CAAK,IAAA,CAAMiuB,EAAcxb,CAAAA,CAAU0O,CAAAA,CAAkBrS,CAAAA,CAAanE,CAAAA,CAAQoE,EAAaC,CAAU,CAClH,CAAA,CACMvR,CAAAA,CAAOq1B,IACPK,CAAAA,CAAU11B,CAAAA,CAAK,MAAA,CAAS,CAAA,CACxB21B,GAAmBz1B,CAAAA,EAAa,CAACw1B,CAAAA,CAEvC,SAASE,GAAoBhF,CAAAA,CAAsB5wB,EAAAA,CAAgC,CACjF,IAAM61B,GAAmBrM,GAAAA,CAAoBoH,CAAY,CAAA,CACnDrH,EAAAA,CAAuBsM,EAAAA,EAAkB,IAAA,CACzCC,EAAAA,CAAiBD,EAAAA,EAAkB,cAAc,KAAA,GAAU,MAAA,CAEjE,GAAI,CAAC71B,GAAK,MAAA,EAAU,CAACupB,EAAAA,CACnB,OAAO,GAGT,GAAI,CAACuM,EAAAA,EAAkB,CAACD,IAAkB,YAAA,EAAc,KAAA,CACtD,OAAO71B,EAAAA,CAAK,CAAC,CAAA,CAAEupB,EAAoB,CAAA,EAAG,KAAA,CAGxC,IAAMwM,EAAAA,CAAgB/1B,EAAAA,CAAK,CAAC,CAAA,CAAEupB,EAAoB,CAAA,EAAG,KAAA,GACnDsM,EAAAA,CAAiB,YAAA,CAAa,KAChC,CAAA,CAGMG,CAAAA,CAAc,KAAA,CAAM,OAAA,CAAQD,EAAY,CAAA,CAAKA,EAAAA,CAAa,CAAC,CAAA,CAAgBA,GAEjF,GAAIC,CAAAA,EAAe,OAAOA,CAAAA,EAAgB,SAAU,CAClD,IAAMC,CAAAA,CAAaD,CAAAA,CAEnB,OAAQC,CAAAA,CAAWzF,CAAY,CAAA,EAAKyF,CAAAA,CAAW,SAAW,EAC5D,CAEA,OAAQD,CAAAA,EAAe,EACzB,CAEA,IAAME,EAAAA,CAAmBR,CAAAA,EAAW9E,EAAegF,EAAAA,CAAoBhF,CAAAA,CAAc5wB,CAAI,CAAA,CAAI,EAAA,CAE7F,OACE3B,GAAAA,CAACk2B,IAAAA,CAAA,CACC,OAAA,CACEp2B,IAAAA,CAAAiF,QAAAA,CAAA,CACG,UAAAgL,CAAAA,EAAUA,CAAAA,CAAO,MAAA,CAAS,CAAA,CACzBjQ,KAACmF,CAAAA,CAAA,CACC,aAAA,CAAgBe,CAAAA,EAAU,CACxB8wB,CAAAA,CAAkB9wB,CAAK,EACzB,CAAA,CACA,MAAOmsB,CAAAA,CAEP,QAAA,CAAA,CAAAryB,IAAAA,CAACqF,CAAAA,CAAA,CAAc,SAAA,CAAU,qBAAA,CAAsB,EAAA,CAAG,SAAA,CAChD,UAAAnF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0BAAA,CAA2B,QAAA,CAAA,YAAA,CAAY,CAAA,CACvDA,GAAAA,CAACoF,CAAAA,CAAA,CACG,QAAA,CAAAulB,IAAAA,CAAKC,MAAAA,CAAOuH,CAAAA,CAAc,MAAM,CAAC,CAAA,CAAEpiB,CAAM,CAAA,CAAsC,MACnF,CAAA,CAAA,CACF,CAAA,CACA/P,GAAAA,CAACsF,CAAAA,CAAA,CACE,QAAA,CAAAyK,CAAAA,CAAO,GAAA,CAAK+nB,CAAAA,EACX93B,IAACuF,GAAAA,CAAA,CAAgC,KAAA,CAAOuyB,CAAAA,CAAU,KAC/C,QAAA,CAAAA,CAAAA,CAAU,KAAA,CAAA,CADIA,CAAAA,CAAU,IAE3B,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACE,IAAA,CACJ93B,GAAAA,CAACq2B,EAAAA,CAAA,CAAW,WAAYR,CAAAA,CAAY,SAAA,CAAWL,CAAAA,CAAa,OAAA,CAAS,GACvE,CAAA,CAEF,WAAA,CAAaI,CAAAA,CACb,KAAA,CAAOR,EACP,UAAA,CAAYM,GAAAA,CACZ,SAAA,CAAWL,CAAAA,CACX,QAAS,IAAM,CACb7iB,CAAAA,CAAYK,GAAAA,CAAO,GAAG,EACxB,CAAA,CACA,YAAA,CAAc,IAAM,CAAC,CAAA,CACrB,KAAA,CAAOglB,EAAAA,CAEN,QAAA,CAAAP,IAAoB,CAACD,CAAAA,CACpBr3B,GAAAA,CAAC6E,EAAAA,CAAA,EAAQ,CAAA,CAET/E,IAAAA,CAAAiF,QAAAA,CAAA,CACG,UAAAywB,CAAAA,CAAa,iBAAA,CAAoBx1B,GAAAA,CAACo2B,EAAAA,CAAA,EAAa,CAAA,CAAK,IAAA,CACrDp2B,GAAAA,CAACw0B,EAAAA,CAAA,CACC,YAAA,CAAcrC,CAAAA,CACd,YAAA,CAAc/hB,CAAAA,CACd,SAAUuG,CAAAA,CACV,UAAA,CAAYnD,GAAAA,CACZ,gBAAA,CAAkB6R,EAClB,QAAA,CAAU1jB,CAAAA,CAAK,CAAC,CAAA,CAChB,SAAUm0B,CAAAA,CACV,GAAA,CAAK1f,CAAAA,CACL,MAAA,CAAQvH,EACR,UAAA,CAAY+nB,CAAAA,CACd,CAAA,CAAA,CACF,CAAA,CAEJ,CAEJ,CCxPA,IAAM1R,EAAAA,CAAY,EAAA,CAOlB,SAAS6S,EAAAA,CAAkBpM,CAAAA,CAAgD,CACzE,OAAOA,CAAAA,CAAQ,GAAA,CAAKqM,CAAAA,GAAY,CAC9B,GAAGA,CAAAA,CACH,IAAA,CAAM,IAAMh4B,GAAAA,CAACw2B,IAAA,CAAS,SAAA,CAAU,kBAAA,CAAmB,KAAA,CAAO,CAAE,SAAA,CAAW,KAAA,CAAO,YAAA,CAAc,KAAM,EAAG,CACvG,CAAA,CAAE,CACJ,CAEe,SAARyB,EAAAA,CAAkC,CAAE,MAAA,CAAAplB,CAAAA,CAAQ,MAAAuiB,CAAAA,CAAO,SAAA,CAAAC,CAAU,CAAA,CAAuB,CACzF,IAAMxe,CAAAA,CAAiBxD,CAAAA,GACjBrD,CAAAA,CAAcC,GAAAA,EAAe,CAC7B,CAAE,cAAA6G,CAAAA,CAAe,KAAA,CAAA9B,CAAM,CAAA,CAAI+B,KAAc,CACzC,CACJ,WAAA,CAAAmhB,CAAAA,CACA,uBAAAC,CAAAA,CACA,cAAA,CAAApN,CAAAA,CACA,QAAA,CAAApU,EACA,UAAA,CAAAnD,CAAAA,CACA,gBAAA,CAAA4kB,CAAAA,CACA,kBAAA5e,CAAAA,CACA,IAAA,CAAArR,CAAAA,CACA,cAAA,CAAAsP,CACF,CAAA,CAAI5E,CAAAA,CAAO,OAAA,CACL,CAAE,eAAAlE,GAAAA,CAAgB,gBAAA,CAAA+nB,CAAiB,CAAA,CAAIhzB,KAAU,CACjDmL,CAAAA,CAASF,GAAAA,EAAgB,MAAA,EAAU,EAAC,CACpC4jB,CAAAA,CAAe5H,IAAAA,CAAKC,MAAAA,CAAOpX,EAAY,MAAM,CAAC,CAAA,CAAE3E,CAAM,EACtDwW,CAAAA,CAAmBkN,CAAAA,EAAc,MAAA,EAAU,EAAA,CAC3C8F,EAAsBvhB,CAAAA,CAAcW,CAAc,CAAA,CAClD8N,CAAAA,CAAeC,KAAgB,CAC/B8S,CAAAA,CAAgB9kB,CAAAA,GAAe,QAAA,CAC/B+kB,EAAcD,CAAAA,CAAgB,OAAA,CAAW/F,CAAAA,EAAc,IAAA,EAAM,KAAA,EAAS/e,CAAAA,CAAW,WAAA,EAAY,CAC7FglB,IACJF,CAAAA,EAAiBnwB,CAAAA,GAAS,QAAA,CAAW,cAAA,CAAiB,UAAUmwB,CAAAA,CAAgB,QAAA,CAAWC,CAAW,CAAA,CAAA,CAClGE,EAAoBtwB,CAAAA,GAAS,QAAA,CAAW,cAAA,CAAiB,eAAA,CACzD,CAACuwB,CAAAA,CAAiBC,CAAkB,CAAA,CAAIl5B,QAAAA,CAA4B,EAAE,CAAA,CAExEm5B,CAAAA,CAAyD,GAE7D,GAAIpf,CAAAA,CACFof,CAAAA,CAA8B,CAC5B,CACE,EAAA,CAAIpf,CAAAA,CAAkB,GAAA,CACtB,KAAA,CAAOA,EAAkB,KAC3B,CACF,CAAA,CAAA,KAAA,GACS6e,CAAAA,EAAqB,QAAS,CACvC,IAAM3gB,CAAAA,CAAa2gB,CAAAA,CAAoB,QAEvCO,CAAAA,CAA8B,CAC5B,CACE,EAAA,CAAIlhB,EAAW,GAAA,CACf,KAAA,CAAOA,CAAAA,CAAW,KACpB,CACF,EACF,CAEA,IAAMmhB,CAAAA,CACJ1wB,IAAS,QAAA,CACLywB,CAAAA,CACCP,CAAAA,EAAqB,OAAA,EAAwD,IAAKvqB,CAAAA,GAAU,CAC3F,EAAA,CAAIA,CAAAA,CAAK,IACT,KAAA,CAAOA,CAAAA,CAAK,KACd,CAAA,CAAE,CAAA,EAAK,EAAC,CAER,CAACge,EAAcgN,CAAe,CAAA,CAAIr5B,QAAAA,CAASo5B,CAAqB,EAChEE,CAAAA,CAAyBtrB,OAAAA,CAAQ,IAAM,CAC3C,IAAMurB,CAAAA,CAA6C,EAAC,CA0BpD,OAxBIV,GACFU,CAAAA,CAAQ,IAAA,CAAK,CAAE,GAAA,CAAK,CAAE,IAAA,CAAM,CAAE,EAAA,CAAI,IAAK,CAAE,CAAE,CAAC,CAAA,CAM1C7wB,CAAAA,GAAS,YAAc4iB,CAAAA,EAAkBpU,CAAAA,EAC3CqiB,CAAAA,CAAQ,IAAA,CAAK,CACX,CAACjO,CAAc,EAAG,CAChB,KAAM,CACJ,GAAA,CAAK,CAAE,EAAA,CAAIpU,CAAS,CACtB,CACF,CACF,CAAC,EAIC+hB,CAAAA,CAAgB,MAAA,CAAS,CAAA,EAC3BM,CAAAA,CAAQ,KAAK,CACX,EAAA,CAAIN,CAAAA,CAAgB,GAAA,CAAKxQ,IAAY,CAAE,GAAA,CAAK,CAAE,EAAA,CAAIA,EAAO,GAAI,CAAE,CAAA,CAAE,CACnE,CAAC,CAAA,CAGC8Q,CAAAA,CAAQ,MAAA,GAAW,CAAA,CACd,EAAC,CAGNA,CAAAA,CAAQ,MAAA,GAAW,EACdA,CAAAA,CAAQ,CAAC,CAAA,CAGX,CAAE,IAAKA,CAAQ,CACxB,CAAA,CAAG,CAACjO,EAAgBpU,CAAAA,CAAU2hB,CAAAA,CAAenwB,CAAAA,CAAMuwB,CAAe,CAAC,CAAA,CAE7D,CAAE,KAAA,CAAAO,CAAAA,CAAO,KAAAt3B,CAAAA,CAAM,SAAA,CAAAu3B,CAAAA,CAAW,SAAA,CAAAr3B,EAAW,aAAA,CAAA8kB,EAAc,CAAA,CAAIsQ,GAAAA,CAAe,CAC1E,gBAAA,CAAA5R,CAAAA,CACA,MAAA,CAAAxW,CAAAA,CACA,KAAA,CAAAmG,CAAAA,CACA,SAAA,CAAW,CACT,OAAQ,CAAA,CACR,KAAA,CAAOkQ,EAAAA,CACP,KAAA,CAAO6T,EACP,IAAA,CAAM,CAAC,CAAE,UAAA,CAAY,MAAO,CAAA,CAAG,CAAE,GAAA,CAAK,MAAO,CAAC,CAChD,CAAA,CAGA,SAAA,CAAW,MACb,CAAC,CAAA,CACK1B,EAAAA,CAAU,CAAA,CAAQ11B,CAAAA,EAAM,OACxB21B,EAAAA,CAAmBz1B,CAAAA,EAAa,CAACw1B,EAAAA,CACjC8B,EAAYx3B,CAAAA,EAAM,MAAA,EAAU,CAAA,CAC5BkmB,EAAAA,CAAaoR,CAAAA,CAAQd,CAAAA,CACrBrQ,EAAAA,CAAUD,EAAAA,CAAa,GAAKsR,CAAAA,CAAY,CAAA,EAAKA,CAAAA,CAAYtR,EAAAA,CAEzD8D,GAAUC,CAAAA,CAAyB,CACvC,gBAAA,CAAkB2G,CAAAA,EAAc,YAAc,EAAC,CAC/C,cAAA,CAAgBpqB,CAClB,CAAC,CAAA,CACKixB,EAAAA,CAAc,KAAA,CAAM,CAAC,EAAE,IAAA,CAAK,EAAE,CAAA,CAC9BC,GAAiBtB,EAAAA,CAAkBpM,EAAO,CAAA,CAEhD9rB,SAAAA,CAAU,IAAM,CACd,GAAIsI,CAAAA,GAAS,QAAA,EAAY2jB,EAAa,MAAA,CAAS,CAAA,EAAK,CAACsM,CAAAA,EAAoB,CAACz2B,CAAAA,EAAM,MAAA,CAC9E,OAGF,IAAM23B,EAAe33B,CAAAA,CAAK,IAAA,CAAMwoB,CAAAA,EAAQA,CAAAA,CAAI,OAASiO,CAAgB,CAAA,CAEjE,CAACkB,CAAAA,EAAc,KAAO,OAAOA,CAAAA,CAAa,GAAA,EAAQ,QAAA,EAItDR,EAAgB,CACd,CACE,EAAA,CAAIQ,CAAAA,CAAa,IACjB,KAAA,CAAOA,CACT,CACF,CAAC,EACH,CAAA,CAAG,CAAC33B,CAAAA,CAAMy2B,CAAAA,CAAkBjwB,CAAAA,CAAM2jB,CAAAA,CAAa,MAAM,CAAC,EAEtD,IAAMtZ,CAAAA,CAAcwV,WAAAA,CACjBJ,CAAAA,EAAuB,CACtB/Q,CAAAA,CAAe,CAAE,IAAA,CAAM,SAAA,CAAW,IAAA+Q,CAAAA,CAAK,OAAA,CAAS,EAAG,CAAC,EACtD,CAAA,CACA,CAAC/Q,CAAc,CACjB,CAAA,CAEMkR,CAAAA,CAAiBC,WAAAA,CAAY,IAAM,CACvCkR,CAAAA,CAAU,CACR,SAAA,CAAW,CAET,OAAQ,CAAA,CACR,KAAA,CAAOhU,EAAAA,CACP,KAAA,CAAO6T,CACT,CACF,CAAC,EACH,CAAA,CAAG,CAACA,CAAAA,CAAwBG,CAAS,CAAC,CAAA,CAEtC,SAASrQ,CAAAA,EAAwB,CAC/B,IAAIpB,CAAAA,CAEJ,GAAItf,CAAAA,GAAS,QAAA,CAAU,CACrB,GAAM,CAACoxB,CAAQ,CAAA,CAAIzN,CAAAA,CAEnBrE,CAAAA,CAAU,CACR,GAAA,CAAK8R,CAAAA,EAAU,EAAA,EAAM,EAAA,CACrB,MAAOA,CAAAA,EAAU,KAAA,EAAS,IAC5B,EACF,CAEIpxB,CAAAA,GAAS,UAAA,GACXsf,CAAAA,CAAUqE,CAAAA,EAAc,GAAA,CAAI,CAACyN,CAAAA,CAAUnS,EAAAA,IAAW,CAChD,GAAA,CAAKmS,CAAAA,CAAS,EAAA,EAAM,EAAA,CACpB,GAAIjB,CAAAA,CAAgB,CAAE,SAAA,CAAWlR,EAAM,EAAI,EAAC,CAC5C,KAAA,CAAOmS,CAAAA,CAAS,KAClB,CAAA,CAAE,CAAA,CAAA,CAGJvpB,CAAAA,CAAY,CACV,KAAM,iBAAA,CACN,OAAA,CAAS,CACP,CAACyH,CAAc,EAAG,CAChB,OAAA,CAAAgQ,CAAAA,CACA,WAAY4Q,CAAAA,EAAqB,UAAA,EAAc,EACjD,CACF,CACF,CAAC,CAAA,CACD7lB,CAAAA,CAAYK,EAAO,GAAG,EACxB,CAEA,SAAS2mB,GAAsBC,CAAAA,CAA6B,CAC1D,GAAItxB,CAAAA,GAAS,WAAY,CAGvB2wB,CAAAA,CAAiBY,EAAAA,EAAiB,CAEhC,IAAMC,EAAAA,CAAqB,IAAI,GAAA,CAAID,EAAAA,CAAa,IAAK5rB,CAAAA,EAAS,CAACA,CAAAA,CAAK,EAAA,CAAIA,CAAI,CAAC,CAAC,CAAA,CAG9E,OAAO2rB,EAAY,GAAA,CAAKv0B,CAAAA,EAAO,CAE7B,GAAIy0B,EAAAA,CAAmB,GAAA,CAAIz0B,CAAE,CAAA,CAC3B,OAAOy0B,EAAAA,CAAmB,GAAA,CAAIz0B,CAAE,CAAA,CAIlC,IAAM00B,EAAAA,CAAgBj4B,CAAAA,EAAM,IAAA,CAAMwoB,EAAAA,EAAQA,GAAI,GAAA,GAAQjlB,CAAE,CAAA,CACxD,OAAO,CACL,EAAA,CAAAA,CAAAA,CACA,KAAA,CAAO00B,EAQT,CACF,CAAC,CACH,CAAC,CAAA,CAED,MACF,CAGA,IAAML,CAAAA,CAAWE,CAAAA,CAAYA,EAAY,MAAA,CAAS,CAAC,CAAA,CAEjDX,CAAAA,CADES,CAAAA,CACeG,EAAAA,EAAiB,CAEhC,GAAIA,GAAa,MAAA,GAAW,CAAA,EAAKA,EAAAA,CAAa,CAAC,EAAE,EAAA,GAAOH,CAAAA,CACtD,OAAOG,EAAAA,CAIT,IAAME,EAAAA,CAAgBj4B,CAAAA,EAAM,IAAA,CAAMwoB,CAAAA,EAAQA,EAAI,GAAA,GAAQoP,CAAQ,CAAA,CAC9D,OAAO,CACL,CACE,EAAA,CAAIA,CAAAA,CACJ,KAAA,CAAOK,EAQT,CACF,CACF,CAAA,CAGgB,EAHf,EAKL,CAEA,SAASC,EAAAA,EAA2B,CAClChjB,CAAAA,CAAe,CAAE,IAAA,CAAM,YAAa,OAAA,CAAS,CAAE,UAAA,CAAArD,CAAW,CAAE,CAAC,EAC/D,CAEA,eAAesmB,GAAoC,CACjD,IAAMhR,CAAAA,CAAiB,MAAMvD,EAAa,CACxC,SAAA,CAAWmR,CAAAA,CACX,MAAA,CAAQwB,GAAe,SAAA,CACvB,QAAA,CAAU/vB,CAAAA,GAAS,UAAA,CACnB,SAAU,OACZ,CAAC,CAAA,CAED2wB,CAAAA,CAAiB9R,GAAgB,CAC/B,GAAI7e,CAAAA,GAAS,QAAA,CAAU,CACrB,GAAM,CAAC4xB,CAAa,CAAA,CAAIjR,EAExB,OAAOiR,CAAAA,CAAgB,CAAC,CAAE,GAAIA,CAAAA,CAAc,GAAA,CAAK,KAAA,CAAOA,CAAAA,CAAc,KAAM,CAAC,CAAA,CAAI/S,CACnF,CAEA,IAAMyS,EAAAA,CAAc,IAAI,GAAA,CAAIzS,CAAAA,CAAY,IAAKmD,CAAAA,EAAQA,CAAAA,CAAI,EAAE,CAAC,EACtDvB,EAAAA,CAAWE,CAAAA,CACd,MAAA,CAAQjQ,CAAAA,EAAa,CAAC4gB,EAAAA,CAAY,GAAA,CAAI5gB,CAAAA,CAAS,GAAG,CAAC,CAAA,CACnD,GAAA,CAAKA,CAAAA,GAAc,CAClB,EAAA,CAAIA,CAAAA,CAAS,GAAA,CACb,KAAA,CAAOA,EAAS,KAClB,CAAA,CAAE,CAAA,CAEJ,OAAO,CAAC,GAAGmO,CAAAA,CAAa,GAAG4B,EAAQ,CACrC,CAAC,EACH,CAEA,OACE5oB,IAACk2B,IAAAA,CAAA,CACC,OAAA,CACEp2B,IAAAA,CAAAiF,SAAA,CACE,QAAA,CAAA,CAAA/E,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,SAAA,CACV,OAAA,CAAS,IAAM,CACbkmB,CAAAA,GACF,CAAA,CACA,OAAA,CAAQ,UACT,QAAA,CAAA,QAAA,CAED,CAAA,CACEyP,CAAAA,CAUE,IAAA,CATFt4B,IAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,SAAA,CACV,QAAS,IAAM,CACbk3B,EAAAA,GACF,EACA,OAAA,CAAQ,SAAA,CAEP,QAAA,CAAA,CAAA,OAAA,EAAUtB,CAAW,GACxB,CAAA,CAEDD,CAAAA,CACCx4B,IAAAA,CAAC6C,GAAAA,CAAA,CACC,SAAA,CAAU,SAAA,CACV,OAAA,CAAS,IAAM,CACRm3B,CAAAA,GACP,CAAA,CACA,OAAA,CAAQ,SAAA,CAER,QAAA,CAAA,CAAA95B,GAAAA,CAAC2Z,MAAAA,CAAA,CAAW,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC7C8e,CAAAA,CAAAA,CACH,EACE,IAAA,CAAA,CACN,CAAA,CAEF,KAAA,CAAOrD,CAAAA,CACP,UAAWC,CAAAA,CACX,OAAA,CAAS,IAAM,CACb7iB,EAAYK,CAAAA,CAAO,GAAG,EACxB,CAAA,CACA,MAAO2lB,GAAAA,CAEP,QAAA,CAAAx4B,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,qCAAA,CACb,QAAA,CAAAA,GAAAA,CAAC2sB,CAAAA,CAAA,CACC,OAAA,CAAS2K,EAAAA,CAAmB+B,EAAAA,CAAiB1N,EAAAA,CAC7C,KAAM2L,EAAAA,CAAmB8B,EAAAA,CAAez3B,CAAAA,EAAQ,GAChD,UAAA,CAAY4wB,CAAAA,EAAc,IAAA,EAAQ,EAAA,CAClC,QAASzK,EAAAA,CACT,qBAAA,CACEgE,CAAAA,EAAc,MAAA,CACZ,CAACkJ,CAAAA,CAAKuE,CAAAA,IAAc,CAAE,GAAGvE,EAAK,GAAIuE,CAAAA,CAAS,EAAA,CAAK,CAAE,CAACA,CAAAA,CAAS,EAAE,EAAG,IAAK,EAAI,EAAI,CAAA,CAAA,CAC9E,EACF,CAAA,CAIF,aAAA,CAAe5S,EAAAA,CACf,uBAAA,CAAyB6S,EAAAA,CACzB,UAAA,CAAYzR,CAAAA,CACZ,gBAAA,CAAkB,IAChB/nB,GAAAA,CAACg6B,EAAAA,CAAA,CACC,gBAAA,CAAkB3U,EAClB,SAAA,CAAWqR,CAAAA,EAAoB,EAAA,CAC/B,kBAAA,CAAoBiC,EACtB,CAAA,CAEJ,CAAA,CACF,CAAA,CACF,CAEJ,CAEA,SAASqB,EAAAA,CAAU,CACjB,gBAAA,CAAA3U,EACA,SAAA,CAAA9kB,CAAAA,CACA,kBAAA,CAAAo4B,CACF,EAIgB,CACd,GAAM,CAAC1rB,CAAAA,CAAQgtB,CAAS,CAAA,CAAIx6B,QAAAA,CAAS,EAAE,CAAA,CAEjCy6B,CAAAA,CAAgBzsB,OAAAA,CACpB,KAAO,CACL,eAAgB,CACd,QAAA,CAAU,CACR,CACE,WAAY4X,CACd,CACF,CACF,CAAA,CACA,aAAc,CACZ,CAAA,CAAG,EACL,CACF,GACA,CAACA,CAAgB,CACnB,CAAA,CACM,CAAC8U,CAAAA,CAAaC,CAAc,CAAA,CAAI36B,QAAAA,CAASy6B,CAAa,CAAA,CACtD,CAAE,OAAA,CAAAlD,CAAAA,CAAS,UAAAn1B,CAAU,CAAA,CAAIw4B,GAAAA,CAAU95B,CAAAA,CAAW45B,CAAW,CAAA,CACzDG,GAAAA,CAAiB35B,MAAAA,CAAiC,IAAI,CAAA,CAEtD45B,CAAAA,CAA0B9sB,OAAAA,CAC9B,IACE+sB,GAAUC,CAAAA,EAAkB,CAC1BL,CAAAA,CAAe,CACb,GAAGF,CAAAA,CACH,YAAA,CAAc,CAAE,CAAA,CAAGO,CAAM,CAC3B,CAAC,EACH,CAAA,CAAG,GAAG,CAAA,CACR,CAACP,CAAa,CAChB,EAEAr6B,SAAAA,CAAU,IAAM,CACd,GAAIm3B,EAAS,CACX,IAAM0D,CAAAA,CAAuB,IAAA,CAAK,UAAU1D,CAAAA,CAAQ,GAAA,CAAK2D,CAAAA,EAAMA,CAAAA,CAAE,GAAG,CAAA,CAAE,IAAA,EAAM,CAAA,CACtEC,EAAoBN,GAAAA,CAAe,OAAA,CACrC,IAAA,CAAK,SAAA,CAAUA,IAAe,OAAA,CAAQ,GAAA,CAAKK,CAAAA,EAAMA,CAAAA,CAAE,GAAG,CAAA,CAAE,IAAA,EAAM,CAAA,CAC9D,GAEAD,CAAAA,GAAyBE,CAAAA,GAC3BN,GAAAA,CAAe,OAAA,CAAU,CAAC,GAAGtD,CAAO,CAAA,CACpC2B,CAAAA,CAAmB3B,EAAQ,GAAA,CAAK9O,CAAAA,GAAY,CAAE,GAAA,CAAKA,CAAAA,CAAO,GAAI,CAAA,CAAE,CAAC,GAErE,CACF,CAAA,CAAG,CAAC8O,CAAAA,CAAS2B,CAAkB,CAAC,CAAA,CAEhC,SAASkC,CAAAA,CAAmBjiB,EAA8C,CACxE,GAAM,CAAE,KAAA,CAAA5S,CAAM,CAAA,CAAI4S,CAAAA,CAAE,MAAA,CAEpBqhB,CAAAA,CAAUj0B,CAAK,CAAA,CACfu0B,CAAAA,CAAwBv0B,CAAK,EAC/B,CAEA,OACElG,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBACZ,QAAA,CAAA,CAAA+B,CAAAA,CACC7B,GAAAA,CAAC86B,YAAAA,CAAA,CAAa,SAAA,CAAU,wFAAA,CAAyF,CAAA,CAEjH96B,IAAC4Z,MAAAA,CAAA,CAAW,SAAA,CAAU,wEAAA,CAAyE,EAEjG5Z,GAAAA,CAACkD,CAAAA,CAAA,CAAM,SAAA,CAAU,sBAAsB,QAAA,CAAU23B,CAAAA,CAAoB,WAAA,CAAY,QAAA,CAAS,MAAO5tB,CAAAA,CAAQ,CAAA,CAAA,CAC3G,CAEJ,CAEA,SAASutB,EAAAA,CAA8BO,CAAAA,CAA0BC,CAAAA,CAAK,GAAA,CAA2B,CAC/F,IAAIC,CAAAA,CAEJ,OAAO,CAAA,GAAIC,IAAY,CACrB,YAAA,CAAaD,CAAS,CAAA,CACtBA,CAAAA,CAAY,UAAA,CAAW,IAAMF,CAAAA,CAAG,GAAGG,CAAI,CAAA,CAAGF,CAAE,EAC9C,CACF,CCjeO,SAASG,EAAAA,EAAqC,CACnD,IAAMC,CAAAA,CAAUC,CAAAA,EAAW,CACrBC,CAAAA,CAAcF,EAAQ,MAAA,CAAQttB,CAAAA,EAClC,CAAC,WAAA,CAAa,aAAc,kBAAkB,CAAA,CAAE,IAAA,CAAMytB,CAAAA,EAAeA,IAAeztB,CAAAA,CAAK,IAAI,CAC/F,CAAA,CACM0tB,EAAgBF,CAAAA,CAAYA,CAAAA,CAAY,MAAA,CAAS,CAAC,GAAG,GAAA,CAE3D,OACEt7B,GAAAA,CAAA+E,QAAAA,CAAA,CACG,QAAA,CAAAq2B,CAAAA,CAAQ,GAAA,CAAKvoB,CAAAA,EAAW,CACvB,OAAQA,CAAAA,CAAO,IAAA,EACb,KAAK,aAAA,CAAe,CAClB,GAAM,CAAE,QAAA4oB,CAAQ,CAAA,CAAI5oB,CAAAA,CAEpB,OAAO7S,IAACiR,EAAAA,CAAA,CAA6B,OAAA,CAASwqB,CAAAA,CAAQ,SAA7B5oB,CAAAA,CAAO,GAA+B,CACjE,CACA,KAAK,cAAA,CACH,OAAO7S,GAAAA,CAAC4S,GAAA,CAAO,MAAA,CAAQC,CAAAA,CAAAA,CAAaA,CAAAA,CAAO,GAAK,CAAA,CAElD,KAAK,WAAA,CACH,OACE7S,IAACm1B,EAAAA,CAAA,CACC,MAAA,CAAQtiB,CAAAA,CACR,MAAOyoB,CAAAA,CAAY,MAAA,CAAS,CAAA,CAC5B,SAAA,CAAWzoB,EAAO,GAAA,GAAQ2oB,CAAAA,CAAAA,CACrB3oB,CAAAA,CAAO,GACd,EAGJ,KAAK,YAAA,CACH,OACE7S,GAAAA,CAACy2B,GAAA,CACC,MAAA,CAAQ5jB,CAAAA,CACR,KAAA,CAAOyoB,CAAAA,CAAY,MAAA,CAAS,CAAA,CAC5B,SAAA,CAAWzoB,EAAO,GAAA,GAAQ2oB,CAAAA,CAAAA,CACrB3oB,CAAAA,CAAO,GACd,EAGJ,KAAK,kBAAA,CACH,OACE7S,GAAAA,CAACi4B,GAAA,CACC,MAAA,CAAQplB,CAAAA,CACR,KAAA,CAAOyoB,EAAY,MAAA,CAAS,CAAA,CAC5B,SAAA,CAAWzoB,CAAAA,CAAO,MAAQ2oB,CAAAA,CAAAA,CACrB3oB,CAAAA,CAAO,GACd,CAAA,CAGJ,QACE,OAAO,IAEX,CACF,CAAC,EACH,CAEJ,CCzDO,SAAS6oB,EAAAA,CAAW,CAAE,KAAAC,CAAK,CAAA,CAAsC,CACtE,IAAMC,EAAW93B,OAAAA,CAAQ,GAAG,CAAA,CAE5B,OACE9D,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6FAAA,CACb,QAAA,CAAAF,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yEAAA,CACb,QAAA,CAAA,CAAAE,IAAC67B,UAAAA,CAAA,CAAW,SAAA,CAAU,0CAAA,CAA2C,EACjE77B,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,2BAAA,CAA4B,2BAAe,CAAA,CACzDF,IAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,sCACV,QAAA,CAAA,CAAA67B,CAAAA,CAAK,KAAA,CAAM,kIAAA,CAAA,CAEd,EACA77B,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kBAAA,CACb,UAAAE,GAAAA,CAAC2C,GAAAA,CAAA,CAAO,OAAA,CAAO,KACb,QAAA,CAAA3C,GAAAA,CAAC,GAAA,CAAA,CAAE,IAAA,CAAM,WAAW87B,GAAa,CAAA,UAAA,CAAA,CAAc,QAAA,CAAA,gBAAA,CAAc,CAAA,CAC/D,EACA97B,GAAAA,CAAC2C,GAAAA,CAAA,CACC,OAAA,CAAS,IAAM,CACRo5B,GAAAA,CAAcH,CAAQ,EAC7B,CAAA,CACA,OAAA,CAAQ,SAAA,CACT,QAAA,CAAA,UAAA,CAED,GACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CCnBA,IAAMI,EAAAA,CAAiBl3B,SAEvB,SAASm3B,EAAAA,CAAU,CACjB,IAAA,CAAA9zB,EACA,UAAA,CAAA3E,CAAAA,CACA,gBAAA,CAAAiL,CAAAA,CACA,OAAAytB,CACF,CAAA,CAKgB,CACd,OACEl8B,IAACm8B,GAAAA,CAAA,CAAa,IAAA,CAAMh0B,CAAAA,CAClB,SAAAnI,GAAAA,CAACo8B,GAAAA,CAAA,CAAe,IAAA,CAAMj0B,EAAM,UAAA,CAAY3E,CAAAA,CAAY,gBAAA,CAAkBiL,CAAAA,CAAkB,OAAQytB,CAAAA,CAC9F,QAAA,CAAAp8B,IAAAA,CAACu8B,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAr8B,GAAAA,CAACyU,EAAAA,CAAA,CACC,SAAAzU,GAAAA,CAACm7B,EAAAA,CAAA,EAAe,CAAA,CAClB,EACAn7B,GAAAA,CAACs8B,MAAAA,CAAA,EAAO,CAAA,CAAA,CACV,EACF,CAAA,CACF,CAEJ,CAGA,SAASC,EAAAA,CAAa,CAAE,UAAA,CAAA/4B,CAAW,EAA0C,CAC3E,IAAMuG,CAAAA,CAAWzF,WAAAA,GACX,CAACk4B,CAAgB,CAAA,CAAIh5B,CAAAA,CAE3B,OAAIuG,CAAAA,CAAS,QAAA,GAAa,GAAA,EAAOyyB,CAAAA,CACxBx8B,IAACg8B,EAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CAAC,GAAI,CAAA,CAAA,EAAIQ,CAAgB,CAAA,CAAA,CAAI,CAAA,CAGtDx8B,IAACi8B,EAAAA,CAAA,CAAU,IAAA,CAAK,UAAA,CAAW,WAAYz4B,CAAAA,CAAY,CAC5D,CAEA,SAASi5B,GAAmB,CAAE,OAAA,CAAAh2B,CAAQ,CAAA,CAAqC,CACzE,OACEzG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8FACb,QAAA,CAAAF,IAAAA,CAAC2C,EAAAA,CAAA,CAAM,UAAU,aAAA,CAAc,OAAA,CAAQ,aAAA,CACrC,QAAA,CAAA,CAAAzC,IAACyM,WAAAA,CAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,EACvCzM,GAAAA,CAAC0M,EAAAA,CAAA,CAAW,QAAA,CAAA,8BAAA,CAA4B,EACxC5M,IAAAA,CAAC4C,EAAAA,CAAA,CAAiB,SAAA,CAAU,+BAC1B,QAAA,CAAA,CAAA1C,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAyG,CAAAA,CAAQ,CAAA,CACfzG,GAAAA,CAAC2C,GAAAA,CAAA,CACC,SAAA,CAAU,eAAA,CACV,OAAA,CAAS,IAAM,CACb,MAAA,CAAO,QAAA,CAAS,MAAA,GAClB,EACA,IAAA,CAAK,IAAA,CACL,OAAA,CAAQ,SAAA,CACT,qBAED,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAMA,SAAS+5B,EAAAA,EAA0B,CACjC,IAAMC,EAAU3rB,EAAAA,EAAiB,CAC3BjH,CAAAA,CAAWzF,WAAAA,GAEjB,GAAIq4B,CAAAA,CAAQ,MAAA,GAAW,SAAA,CACrB,OAAO38B,GAAAA,CAAC6E,GAAAA,CAAA,EAAQ,EAGlB,GAAI83B,CAAAA,CAAQ,MAAA,GAAW,WAAA,CACrB,OAAO38B,GAAAA,CAACsD,EAAAA,CAAA,EAAM,CAAA,CAGhB,GAAIq5B,CAAAA,CAAQ,MAAA,GAAW,OAAA,CACrB,OAAO38B,IAACy8B,EAAAA,CAAA,CAAmB,OAAA,CAASE,CAAAA,CAAQ,QAAS,CAAA,CAGvD,IAAMn5B,CAAAA,CAAam5B,CAAAA,CAAQ,SAAS,GAAA,CAAKjzB,CAAAA,EAAYA,CAAAA,CAAQ,EAAE,EAE/D,GAAIlG,CAAAA,CAAW,MAAA,GAAW,CAAA,CACxB,OAAOxD,GAAAA,CAAC07B,EAAAA,CAAA,CAAW,KAAMiB,CAAAA,CAAQ,IAAA,CAAM,CAAA,CAGzC,GAAI5yB,EAAS,QAAA,GAAa,GAAA,CAAK,CAC7B,IAAM6yB,EAAiB12B,EAAAA,CAAmB1C,CAAAA,CAAYsC,EAAAA,EAAmB,EAEzE,OAAO9F,GAAAA,CAACg8B,EAAAA,CAAA,CAAe,QAAO,IAAA,CAAC,EAAA,CAAI,CAAA,CAAA,EAAIY,CAAAA,EAAkB,EAAE,CAAA,CAAA,CAAI,CACjE,CAEA,OAAO58B,IAACi8B,EAAAA,CAAA,CAAU,IAAA,CAAK,QAAA,CAAS,WAAYz4B,CAAAA,CAAY,gBAAA,CAAkBm5B,CAAAA,CAAQ,QAAA,CAAU,OAAQA,CAAAA,CAAQ,IAAA,CAAK,EAAA,CAAI,CACvH,CAEO,SAASE,EAAAA,CAAK,CAAE,UAAA,CAAAr5B,CAAW,CAAA,CAA2C,CAC3E,OACE1D,IAAAA,CAAAiF,SAAA,CACE,QAAA,CAAA,CAAA/E,GAAAA,CAAC0Q,EAAAA,CAAA,EAAe,CAAA,CACflN,CAAAA,GAAe,MAAA,CAAYxD,GAAAA,CAAC08B,GAAA,EAAW,CAAA,CAAK18B,GAAAA,CAACu8B,EAAAA,CAAA,CAAa,UAAA,CAAY/4B,CAAAA,CAAY,CAAA,CAAA,CACrF,CAEJ,CC3HO,SAASs5B,EAAAA,CAAkBC,CAAAA,CAA2B,CAC3D,OAAI,CAACA,CAAAA,EAAYA,CAAAA,GAAa,IACrB,GAAA,CAKF,CAAA,CAAA,EAFgBA,CAAAA,CAAS,OAAA,CAAQ,aAAc,EAAE,CAE/B,CAAA,CAC3B,CCDO,SAASC,EAAAA,EAA2B,CACzC,IAAMp7B,CAAAA,CAAQq7B,aAAAA,EAAc,CACtB74B,EAAgB,IAAI,IAAA,EAAK,CAAE,WAAA,GAEjC,SAAS84B,CAAAA,EAAmC,CAC1C,OAAIC,qBAAqBv7B,CAAK,CAAA,CACxBA,CAAAA,CAAM,MAAA,GAAW,IAEjB9B,IAAAA,CAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/E,IAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mEAAA,CAAoE,QAAA,CAAA,KAAA,CAAG,EACrFA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,sEAAA,CAAuE,0BAAc,CAAA,CAAA,CACpG,CAAA,CAKFF,IAAAA,CAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/E,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mEAAA,CAAoE,QAAA,CAAA,OAAA,CAAK,CAAA,CACvFA,GAAAA,CAAC,KAAE,SAAA,CAAU,sEAAA,CAAuE,QAAA,CAAA,0CAAA,CAEpF,CAAA,CACAA,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,6BAAA,CACX,QAAA,CAAAA,IAAC,GAAA,CAAA,CAAG,QAAA,CAAA4B,CAAAA,CAAM,UAAA,CAAW,EACvB,CAAA,CAAA,CACF,CAAA,CAIA8E,EAAAA,CAAe9E,CAAK,EACdgF,EAAAA,CAAoBhF,CAAK,CAAA,GAC1B,mBAAA,CAED9B,KAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/E,GAAAA,CAAC,MAAG,SAAA,CAAU,mEAAA,CAAoE,QAAA,CAAA,mBAAA,CAAiB,CAAA,CACnGA,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,sEAAA,CAAuE,QAAA,CAAA,wCAAA,CAEpF,GACF,CAAA,CAKAF,IAAAA,CAAAiF,QAAAA,CAAA,CACE,UAAA/E,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mEAAA,CAAoE,iBAAK,CAAA,CACvFA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,uEAAuE,QAAA,CAAA,4DAAA,CAEpF,CAAA,CAAA,CACF,CAAA,CAKJ4B,CAAAA,YAAiB,MAEjB9B,IAAAA,CAAAiF,QAAAA,CAAA,CACE,QAAA,CAAA,CAAA/E,IAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mEAAA,CAAoE,QAAA,CAAA,OAAA,CAAK,EACvFA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,sEAAA,CAAuE,QAAA,CAAA,0CAAA,CAEpF,CAAA,CACAA,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,6BAAA,CACX,QAAA,CAAAA,GAAAA,CAAC,GAAA,CAAA,CAAG,SAAA4B,CAAAA,CAAM,OAAA,CAAQ,CAAA,CACpB,CAAA,CAAA,CACF,EAIG,IACT,CAEA,OACE9B,IAAAA,CAAAiF,SAAA,CACE,QAAA,CAAA,CAAA/E,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,uGAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,qBAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,4EAAA,CACZ,QAAA,CAAAk9B,CAAAA,EAAa,CAChB,CAAA,CACF,CAAA,CACF,CAAA,CACAl9B,GAAAA,CAAC,OAAI,SAAA,CAAU,oHAAA,CACb,QAAA,CAAAF,IAAAA,CAAC,OAAI,SAAA,CAAU,sBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,oCAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OACC,SAAA,CAAU,wDAAA,CACV,IAAA,CAAK,MAAA,CACL,OAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,KAAA,CAAM,KACN,KAAA,CAAM,4BAAA,CAEN,QAAA,CAAA,CAAAE,GAAAA,CAAC,QAAK,CAAA,CAAE,iBAAA,CAAkB,IAAA,CAAK,MAAA,CAAO,CAAA,CACtCA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,uRACF,IAAA,CAAK,cAAA,CACP,CAAA,CAAA,CACF,CAAA,CACAF,KAAC,GAAA,CAAA,CAAE,SAAA,CAAU,yBAAA,CAA0B,QAAA,CAAA,CAAA,OAAA,CAAGsE,GAAc,CAAA,CAAA,CAC1D,CAAA,CACApE,GAAAA,CAACV,EAAAA,CAAA,EAAe,CAAA,CAAA,CAClB,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC7FA,IAAM89B,GAAuBC,cAAAA,CAwBtB,SAASC,EAAAA,CAAc,CAAE,WAAA95B,CAAAA,CAAY,QAAA,CAAA+5B,CAAS,CAAA,CAA2C,CAC9F,GAAM,CAACh+B,CAAAA,CAASC,CAAU,EAAIC,QAAAA,CAAS,KAAK,CAAA,CACtC+9B,CAAAA,CAAMC,MAAM,qBAAqB,CAAA,CAOvC,GALA59B,SAAAA,CAAU,IAAM,CAEdL,CAAAA,CAAW,IAAI,EACjB,EAAG,EAAE,CAAA,CAED,CAACD,EACH,OAAO,IAAA,CAIT,GAAIiE,CAAAA,GAAe,QAAaA,CAAAA,CAAW,MAAA,GAAW,CAAA,CACpD,MAAM,IAAI,KAAA,CACR,qHACF,CAAA,CAkBF,IAAMk6B,CAAAA,CAASC,mBAAAA,CAfA,CACb,CACE,KAAM,GAAA,CACN,OAAA,CAAS39B,GAAAA,CAAC68B,EAAAA,CAAA,CAAK,UAAA,CAAYr5B,CAAAA,CAAY,CAAA,CACvC,YAAA,CAAcxD,IAACg9B,EAAAA,CAAA,EAAY,CAAA,CAC3B,QAAA,CAAU,CACR,CAGE,IAAA,CAAM,cAAA,CACN,OAAA,CAASh9B,IAAC4P,EAAAA,CAAA,EAAO,CACnB,CACF,CACF,CACF,CAAA,CAC2C,CAAE,QAAA,CAAUktB,GAAkBS,CAAQ,CAAE,CAAC,CAAA,CAEpF,OAAAC,CAAAA,CAAI,aAAa,CAAA,CAGfx9B,GAAAA,CAAC49B,IAAA,CAAc,SAAA,CAAU,OAAA,CAAQ,YAAA,CAAa,SAAS,yBAAA,CAAyB,IAAA,CAAC,YAAA,CAAY,IAAA,CAC3F,SAAA59B,GAAAA,CAAC69B,GAAAA,CAAA,CACC,QAAA,CAAA79B,IAAC89B,GAAAA,CAAA,CACC,QAAA,CAAA99B,GAAAA,CAACo9B,GAAA,CAAqB,MAAA,CAAQM,CAAAA,CAAQ,CAAA,CACxC,EACF,CAAA,CACF,CAEJ,CC/EO,SAASK,EAAAA,CAAqBC,CAAAA,CAAiD,CACpF,IAAMlrB,CAAAA,CAAeC,eAAAA,EAAgB,CAC/B,CAAE,oBAAA,CAAsBlE,CAAO,CAAA,CAAInL,GAAAA,GAEzC,OAAOskB,WAAAA,CAAY,SAAY,CACxBnZ,GAIL,MAAMonB,GAAAA,CAA0BnjB,CAAAA,CAAcuB,GAAAA,CAAuB2pB,EAAoBnvB,CAAM,CAAC,EAClG,CAAA,CAAG,CAACiE,CAAAA,CAAckrB,CAAAA,CAAoBnvB,CAAM,CAAC,CAC/C","file":"index.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport type { JSX } from 'react';\nimport { Monitor, Moon, Sun } from 'lucide-react';\nimport { useTheme } from '../theme-context';\nimport { ToggleGroup, ToggleGroupItem } from '../primitives/toggle-group';\n\nexport function DarkModeSwitch(): JSX.Element | null {\n const [mounted, setMounted] = useState(false);\n const { theme, setTheme } = useTheme();\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <ToggleGroup size=\"sm\" type=\"single\" value={theme}>\n <ToggleGroupItem\n aria-label=\"Set dark mode\"\n onClick={() => {\n setTheme('dark');\n }}\n value=\"dark\"\n >\n <Moon className=\"fk:h-4 fk:w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem\n aria-label=\"Set light mode\"\n onClick={() => {\n setTheme('light');\n }}\n value=\"light\"\n >\n <Sun className=\"fk:h-4 fk:w-4\" />\n </ToggleGroupItem>\n <ToggleGroupItem\n aria-label=\"Set system mode\"\n onClick={() => {\n setTheme('system');\n }}\n value=\"system\"\n >\n <Monitor className=\"fk:h-4 fk:w-4\" />\n </ToggleGroupItem>\n </ToggleGroup>\n );\n}\n","'use client';\n\nimport { JSX, useEffect, useRef, useState } from 'react';\nimport type { Dispatch, SetStateAction } from 'react';\nimport useSWR, { useSWRConfig } from 'swr';\nimport { useForm } from 'react-hook-form';\nimport * as z from 'zod';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Mail, Loader2 } from 'lucide-react';\nimport { Alert, AlertDescription } from '../ui/primitives/alert';\nimport { Button } from '../ui/primitives/button';\nimport { Form, FormControl, FormField, FormItem, FormMessage } from '../ui/primitives/form';\nimport { Input } from '../ui/primitives/input';\nimport { apiPaths, baseApiUrl, userApiPaths } from '../core/api-paths';\n\nconst formSchema = z.object({\n email: z.email({ error: 'Please enter a valid email address' }),\n});\n\nexport default function EmailLogin({\n projectId,\n redirectTo,\n setIsEmailLogin,\n}: {\n /** Omitted in hosted mode: the OTP flow then goes through the Studio's own user-level API route. */\n projectId?: string;\n /** Absolute URL to open once the session cookie is set; defaults to reloading the current page. */\n redirectTo?: string;\n setIsEmailLogin: Dispatch<SetStateAction<boolean>>;\n}): JSX.Element {\n const redirectToRef = useRef(redirectTo);\n redirectToRef.current = redirectTo;\n\n // The picked project may differ from the one in the URL, so land on it explicitly.\n function finishLogin(): void {\n if (redirectToRef.current) {\n window.location.assign(redirectToRef.current);\n } else {\n window.location.reload();\n }\n }\n\n const [hasOtpExpired, setHasOtpExpired] = useState(false);\n const [shouldSendOtp, setShouldSendOtp] = useState(false);\n const { mutate } = useSWRConfig();\n const form = useForm({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: '',\n },\n });\n // Project mode talks to the project API directly (open CORS); hosted mode stays same-origin through the BFF.\n const sendOtpUrl = projectId === undefined ? userApiPaths.otpSend : new URL(apiPaths(projectId).loginOtpSend, baseApiUrl).href;\n const confirmOtpUrl =\n projectId === undefined ? userApiPaths.otpConfirm : new URL(apiPaths(projectId).loginOtpConfirm, baseApiUrl).href;\n const { data, error, isLoading } = useSWR(\n shouldSendOtp ? sendOtpUrl : null,\n (url: string) =>\n fetch(url, {\n method: 'POST',\n mode: 'cors',\n credentials: 'same-origin',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ email: form.getValues('email') }),\n }).then(\n (res) => res.json() as Promise<{ token: string } | { error: { message: string; code: string } } | undefined>\n ),\n {\n revalidateIfStale: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n shouldRetryOnError: false,\n }\n );\n const errorCode = data && 'error' in data && data.error.code;\n const hasOtpBeenSent = data && 'token' in data;\n const token = data && 'token' in data ? data.token : '';\n\n useEffect(() => {\n if (!hasOtpBeenSent) {\n return;\n }\n\n let calls = 0;\n const interval = setInterval(() => {\n // Start polling to check for email confirmation\n // if email is confirmed, redirect to dashboard\n if (calls > 100) {\n clearInterval(interval);\n setHasOtpExpired(true);\n\n return;\n }\n\n const setTokenUrl = '/api/flexkit/set-token';\n fetch(\n `${confirmOtpUrl}?email=${encodeURIComponent(form.getValues('email'))}&token=${encodeURIComponent(token)}`,\n { credentials: 'same-origin' }\n )\n .then((res) => {\n if (res.status === 200) {\n // set the token cookie\n res\n .json()\n .then((confirmationResponse: { sid: string }) => {\n fetch(setTokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ sid: confirmationResponse.sid }),\n })\n .then(() => {\n finishLogin();\n })\n .catch(() => {\n // TODO: inform the user about the error, maybe the /set-token route is not available or properly configured\n });\n })\n .catch(() => {\n // TODO: handle this error\n });\n }\n })\n .catch(() => {\n // do nothing, the user has not confirmed the email yet\n });\n calls++;\n }, 3000);\n\n return () => {\n clearInterval(interval);\n };\n }, [confirmOtpUrl, form, hasOtpBeenSent, token]);\n\n function handleEmailLogin(): void {\n setHasOtpExpired(false);\n setShouldSendOtp(true);\n void mutate(sendOtpUrl);\n }\n\n return (\n <div className=\"fk:w-full\">\n {hasOtpBeenSent ? (\n <Alert className=\"fk:dark:bg-foreground fk:dark:text-background\" variant=\"default\">\n <AlertDescription>\n Keep this window open and in a new tab open the link we just sent to:{' '}\n <strong>{form.getValues('email')}</strong> (\n <Button\n className=\"fk:p-0 fk:hover:underline fk:text-link\"\n onClick={() => {\n window.location.reload();\n }}\n variant=\"link\"\n >\n undo\n </Button>\n )\n </AlertDescription>\n </Alert>\n ) : (\n <Form {...form}>\n <form\n onSubmit={(event) => void form.handleSubmit(handleEmailLogin)(event)}\n className=\"fk:w-full fk:space-y-3 fk:mb-10\"\n >\n {errorCode === 'not_exists' && (\n <Alert variant=\"destructive\">\n <AlertDescription>\n There is no Flexkit account associated with this email address.{' '}\n <a\n className=\"fk:text-black/90 fk:dark:text-white/90 fk:underline\"\n href={`https://flexkit.io/signup/email?email=${encodeURIComponent(form.getValues('email'))}`}\n >\n Sign up?\n </a>\n </AlertDescription>\n </Alert>\n )}\n {errorCode === 'unknown_error' || error ? (\n <Alert variant=\"destructive\">\n <AlertDescription>\n There was an unknown error, please{' '}\n <Button\n className=\"fk:p-0 fk:hover:underline\"\n onClick={() => {\n window.location.reload();\n }}\n variant=\"link\"\n >\n try again\n </Button>\n .{' '}\n </AlertDescription>\n </Alert>\n ) : null}\n {hasOtpExpired ? (\n <Alert variant=\"destructive\">\n <AlertDescription>\n The email verification link may have expired. Please{' '}\n <Button\n className=\"fk:p-0 fk:hover:underline\"\n onClick={() => {\n window.location.reload();\n }}\n variant=\"link\"\n >\n try again\n </Button>\n .\n </AlertDescription>\n </Alert>\n ) : null}\n <FormField\n control={form.control}\n defaultValue=\"\"\n name=\"email\"\n render={({ field }) => (\n <FormItem>\n <FormControl>\n <Input\n aria-label=\"Email Address\"\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n className=\"w-full\"\n placeholder=\"Email Address\"\n spellCheck={false}\n type=\"email\"\n {...field}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <Button aria-disabled={isLoading} className=\"fk:w-full\" type=\"submit\" disabled={Boolean(isLoading)}>\n {isLoading ? (\n <Loader2 className=\"fk:h-5 fk:w-5 fk:mr-2 fk:animate-spin\" />\n ) : (\n <Mail className=\"fk:w-5 fk:h-5 fk:mr-2\" />\n )}\n Continue with Email\n </Button>\n <Button\n className=\"fk:w-full fk:text-link\"\n onClick={() => {\n setIsEmailLogin(false);\n }}\n variant=\"link\"\n >\n ← Other Login options\n </Button>\n </form>\n </Form>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { JSX, useState } from 'react';\nimport useSWR from 'swr';\nimport { Navigate, useHref, useLocation } from 'react-router-dom';\nimport { Button } from '../ui/primitives/button';\nimport { DarkModeSwitch } from '../ui/components/dark-mode-switch';\nimport { Loading } from '../ui/components/loading';\nimport { Label } from '../ui/primitives/label';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/primitives/select';\nimport { apiPaths, userApiPaths } from '../core/api-paths';\nimport { useConfig } from '../core/config/config-context';\nimport { getDesktop } from '../core/desktop';\nimport { getProjectLabel } from '../ui/components/project-label';\nimport { useAuth } from './auth-context';\nimport EmailLogin from './email';\n\ntype Provider = {\n name: string;\n title: string;\n url: string;\n button: {\n variant: 'link' | 'default' | 'outline' | 'destructive' | 'ghost' | 'secondary';\n color: string;\n colorHover: string;\n backgroundColor: string;\n backgroundColorHover: string;\n iconUrl?: string;\n };\n};\n\n/**\n * Login screen. With a `projectId` (project mode) providers and the OTP flow\n * belong to the project picked in the selector; without one (hosted mode) the\n * user signs in to their account and the Studio lists their projects afterwards.\n */\nexport function Login({ projectId }: { projectId?: string }): JSX.Element {\n const isHosted = projectId === undefined;\n // Before login only the ids are known: project schemas (and titles) need a session.\n const { projectIds, projects } = useConfig();\n const [selectedProjectId, setSelectedProjectId] = useState(\n projectId === undefined ? '' : projectIds.includes(projectId) ? projectId : (projectIds[0] ?? projectId)\n );\n const selectedProjectHref = useHref(`/${selectedProjectId}`);\n const [isEmailLogin, setIsEmailLogin] = useState(false);\n // Providers and the OTP flow belong to the project picked in the selector, not the one in the URL.\n const providersUrl = isHosted ? userApiPaths.authProviders : apiPaths(selectedProjectId).authProviders;\n const { data, error, isLoading } = useSWR(providersUrl, (url: string) =>\n fetch(url, { mode: 'cors', credentials: 'same-origin' }).then(\n (res) => res.json() as Promise<{ providers: Provider[] }>\n )\n );\n const [isAuthLoading, auth] = useAuth();\n const copyrightYear = new Date().getFullYear();\n const currentRouterLocation = useLocation();\n // Router pathnames omit the basename; useHref puts it back so the redirect lands on the mounted Studio.\n const referal: string = currentRouterLocation.state?.from?.pathname ?? currentRouterLocation.pathname;\n const referalHref = useHref(referal);\n\n const desktop = getDesktop();\n // Hosted mode returns to the page that asked for login (the root picks the project);\n // project mode lands on the project picked in the selector.\n const fromHref = isHosted || referal.includes(selectedProjectId) ? referalHref : selectedProjectHref;\n // The desktop app receives the code on its URL scheme and opens the path itself.\n const fromPath = desktop ? fromHref : `${location.origin}${fromHref}`;\n\n if (error) {\n throw new Error('Error fetching auth providers');\n }\n\n // Hosted mode renders this screen outside the auth provider: the session check already happened.\n if (isLoading || (!isHosted && isAuthLoading) || !data) {\n return <Loading />;\n }\n\n if (!isHosted && auth.user?.id) {\n return <Navigate replace state={{ from: currentRouterLocation }} to=\"/\" />;\n }\n\n return (\n <>\n <div className=\"fk:container fk:relative fk:h-[calc(100vh-3rem)] fk:flex fk:items-center fk:justify-center fk:lg:px-0\">\n <div className=\"fk:w-full fk:lg:p-8\">\n <div className=\"fk:mx-auto fk:flex fk:flex-col fk:justify-center fk:sm:w-[350px]\">\n <h1 className=\"fk:mb-4 fk:text-2xl fk:text-center fk:font-medium fk:tracking-tight\">\n Login to Flexkit Studio\n </h1>\n {!isHosted && projectIds.length > 1 ? (\n <div className=\"fk:flex-col fk:space-y-2 fk:mb-3\">\n <Label className=\"fk:text-sm fk:font-normal fk:text-left fk:text-muted-foreground\" htmlFor=\"project\">\n Select project\n </Label>\n <Select\n defaultValue={selectedProjectId}\n onValueChange={(id) => {\n setSelectedProjectId(id);\n }}\n >\n <SelectTrigger className=\"fk:mb-4 fk:w-full fk:h-9 fk:py-1\" id=\"project\">\n <SelectValue aria-label={getProjectLabel(selectedProjectId, projects)}>\n {getProjectLabel(selectedProjectId, projects)}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {projectIds.map((id) => (\n <SelectItem key={id} value={id}>\n {getProjectLabel(id, projects)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ) : null}\n {isEmailLogin ? (\n <EmailLogin\n key={selectedProjectId}\n projectId={isHosted ? undefined : selectedProjectId}\n redirectTo={fromPath}\n setIsEmailLogin={setIsEmailLogin}\n />\n ) : (\n <>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-sm fk:text-left fk:text-muted-foreground\">\n Choose login provider\n </p>\n <div className=\"fk:flex fk:flex-col fk:space-y-6\">\n {data.providers.map((provider: Provider) => (\n <Button\n asChild\n className={`fk:${provider.button.color} fk:${provider.button.backgroundColor} fk:hover:${provider.button.colorHover} fk:hover:${provider.button.backgroundColorHover}`}\n key={provider.name}\n type=\"button\"\n variant={provider.button.variant}\n >\n <a\n href={composeLoginHref({\n url: provider.url,\n projectId: isHosted ? undefined : selectedProjectId,\n callback: desktop ? desktop.loginCallback : `${location.origin}/api/flexkit/get-token`,\n fromPath,\n })}\n >\n {provider.button.iconUrl ? (\n <img\n alt={provider.title}\n className=\"fk:w-[20px] fk:h-[20px] fk:mr-2\"\n src={provider.button.iconUrl}\n />\n ) : null}\n {provider.title}\n </a>\n </Button>\n ))}\n <Button\n className=\"fk:mt-4! fk:text-sm fk:text-center fk:text-link\"\n onClick={() => {\n setIsEmailLogin(true);\n }}\n variant=\"link\"\n >\n Continue with Email →\n </Button>\n {desktop ? (\n <p className=\"fk:text-xs fk:text-center fk:text-muted-foreground\">\n Sign-in with a provider continues in your browser and returns here.\n </p>\n ) : null}\n </div>\n </>\n )}\n <div className=\"fk:flex fk:flex-col fk:items-center fk:pt-8\">\n <svg className=\"fk:w-28\" fill=\"none\" viewBox=\"0 0 191 42\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M59.2923 38.5263H52.7518V19.433H49.5653V12.9332H52.7518V11.7145C52.7518 10.1373 53.0471 8.65569 53.638 7.26967C54.245 5.88368 55.0677 4.68089 56.1058 3.66131C57.16 2.62579 58.3817 1.81331 59.7713 1.22386C61.1609 0.618477 62.6464 0.315788 64.2276 0.315788H69.1388V6.81564H64.2276C63.5247 6.81564 62.8698 6.9431 62.2628 7.19798C61.6719 7.43696 61.1528 7.77948 60.7057 8.22554C60.2746 8.65569 59.9311 9.17344 59.6756 9.77882C59.4201 10.3683 59.2923 11.0135 59.2923 11.7145V12.9332H67.3182V19.433H59.2923V38.5263Z\"\n fill=\"currentColor\"\n />\n <path d=\"M78.6099 38.5263H71.9802V0.315788H78.6099V38.5263Z\" fill=\"currentColor\" />\n <path\n d=\"M93.8922 32.3923C94.146 32.4723 94.3998 32.5283 94.6536 32.5604C94.9074 32.5765 95.1615 32.5842 95.4153 32.5842C96.0497 32.5842 96.6606 32.4964 97.2476 32.3203C97.8346 32.1445 98.3817 31.8966 98.8896 31.5768C99.4131 31.2409 99.8732 30.841 100.27 30.3772C100.682 29.8973 101.015 29.3695 101.269 28.7937L106.029 33.616C105.426 34.4797 104.728 35.2553 103.934 35.9432C103.157 36.6308 102.308 37.2145 101.388 37.6944C100.484 38.1743 99.5241 38.534 98.5089 38.7741C97.5094 39.03 96.4782 39.1579 95.4153 39.1579C93.6225 39.1579 91.933 38.822 90.3465 38.1502C88.7759 37.4784 87.3957 36.5427 86.2058 35.3434C85.0319 34.1438 84.1038 32.7202 83.4218 31.0729C82.7395 29.4095 82.3983 27.5862 82.3983 25.6029C82.3983 23.5717 82.7395 21.7164 83.4218 20.037C84.1038 18.3576 85.0319 16.9262 86.2058 15.7426C87.3957 14.5591 88.7759 13.6394 90.3465 12.9836C91.933 12.3279 93.6225 12 95.4153 12C96.4782 12 97.5173 12.128 98.5325 12.3839C99.548 12.6398 100.508 13.0076 101.412 13.4875C102.332 13.9673 103.189 14.5591 103.982 15.2628C104.775 15.9505 105.473 16.7263 106.076 17.5899L93.8922 32.3923ZM97.2237 18.8854C96.9224 18.7735 96.6208 18.7015 96.3195 18.6695C96.0338 18.6375 95.7325 18.6215 95.4153 18.6215C94.5267 18.6215 93.6859 18.7895 92.8927 19.1253C92.1154 19.4452 91.4334 19.9091 90.8461 20.5168C90.2751 21.1246 89.823 21.8603 89.4898 22.724C89.1566 23.5717 88.9902 24.5313 88.9902 25.6029C88.9902 25.8428 88.9981 26.1147 89.0138 26.4186C89.0457 26.7225 89.0852 27.0344 89.133 27.3543C89.1965 27.6582 89.2679 27.9541 89.347 28.2419C89.4263 28.5298 89.5296 28.7858 89.6565 29.0097L97.2237 18.8854Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M132.911 38.5263H124.926L119.833 30.6401L114.693 38.5263H106.707L116.055 25.3265L106.707 12.6316H114.693L119.833 20.0129L124.926 12.6316H132.911L123.539 25.3265L132.911 38.5263Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M143.002 38.5263H136.383V0.315788H143.002V24.0898L151.557 12.9976H159.114L150.57 23.6485L159.114 38.5263H151.557L146.335 29.2367L143.002 34.0243V38.5263Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M169.848 5.93416C169.848 6.54038 169.727 7.10672 169.486 7.63317C169.262 8.15962 168.949 8.62224 168.547 9.02108C168.146 9.40396 167.672 9.71505 167.126 9.95433C166.596 10.1777 166.026 10.2893 165.416 10.2893C164.806 10.2893 164.228 10.1777 163.682 9.95433C163.152 9.71505 162.686 9.40396 162.285 9.02108C161.9 8.62224 161.586 8.15962 161.346 7.63317C161.121 7.10672 161.008 6.54038 161.008 5.93416C161.008 5.34388 161.121 4.78553 161.346 4.25908C161.586 3.71666 161.9 3.25403 162.285 2.87115C162.686 2.47232 163.152 2.16124 163.682 1.93789C164.228 1.6986 164.806 1.57895 165.416 1.57895C166.026 1.57895 166.596 1.6986 167.126 1.93789C167.672 2.16124 168.146 2.47232 168.547 2.87115C168.949 3.25403 169.262 3.71666 169.486 4.25908C169.727 4.78553 169.848 5.34388 169.848 5.93416ZM168.716 38.5263H162.092V12.8977H168.716V38.5263Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M186.938 38.5263C185.368 38.5263 183.892 38.2319 182.512 37.6429C181.131 37.0378 179.918 36.2178 178.871 35.183C177.839 34.1323 177.022 32.9145 176.419 31.5294C175.832 30.1442 175.539 28.6635 175.539 27.0874V19.4932H172.374V12.9976H175.539V0.315788H182.012V12.9976H189.106V19.4932H182.012V27.0874C182.012 27.772 182.139 28.4168 182.393 29.0218C182.646 29.6108 182.996 30.1282 183.44 30.574C183.884 31.0198 184.408 31.378 185.01 31.6487C185.613 31.9034 186.256 32.0308 186.938 32.0308H189.106V38.5263H186.938Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M19.8893 2.21053C34.8062 2.21053 39.7785 7.18421 39.7785 22.1053C39.7785 37.0263 34.8062 42 19.8893 42C4.97231 42 0 37.0263 0 22.1053C0 7.18421 4.97231 2.21053 19.8893 2.21053ZM14.7093 10.1053H7.26116L15.9804 21.9654L7.26116 34.2973H14.7093L17.4445 30.1161V14.0271L14.7093 10.1053ZM32.285 10.1053H24.8237L21.7835 14.4979V29.5995L24.8237 34.2973H32.285L23.528 21.9654L32.285 10.1053Z\"\n fill=\"currentColor\"\n />\n </svg>\n <ul className=\"fk:flex fk:w-full fk:mt-4 fk:justify-center fk:text-xs fk:text-muted-foreground\">\n <li className=\"fk:pr-6 fk:after:content-['|'] fk:after:pl-6\">\n <a className=\"fk:underline-offset-4 fk:hover:text-primary\" href=\"https://www.flexkit.io\">\n flexkit.io\n </a>\n </li>\n <li className=\"fk:pr-6 fk:after:content-['|'] fk:after:pl-6\">\n <a className=\"fk:underline-offset-4 fk:hover:text-primary\" href=\"https://www.flexkit.io/docs\">\n Docs\n </a>\n </li>\n <li className=\"\">\n <a\n className=\"fk:underline-offset-4 fk:hover:text-primary\"\n href=\"https://www.flexkit.io/privacy-policy\"\n >\n Privacy Policy\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n {/* workaround to allow Tailwind generate the classes for the login buttons, whose classes are added dynamically */}\n <div className=\"fk:hidden fk:text-white! fk:bg-bitbucket! fk:hover:bg-bitbucket-hover!\" />\n <div className=\"fk:hidden fk:bg-github! fk:hover:bg-github-hover!\" />\n <div className=\"fk:hidden fk:text-muted-foreground! fk:bg-white! fk:hover:bg-accent!\" />\n </div>\n <div className=\"fk:flex fk:justify-center fk:items-center fk:h-12 fk:text-xs fk:text-muted-foreground fk:border-t fk:border-accent\">\n <div className=\"fk:container fk:flex\">\n <div className=\"fk:flex fk:items-center fk:mr-auto\">\n <svg\n className=\"fk:h-5 fk:w-5 fk:mr-3 fk:text-black fk:dark:text-white\"\n fill=\"none\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7 8H41V40H7V8Z\" fill=\"none\" />\n <path\n d=\"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z\"\n fill=\"currentColor\"\n />\n </svg>\n <p className=\"fk:flex fk:items-center\">© {copyrightYear}</p>\n </div>\n <DarkModeSwitch />\n </div>\n </div>\n </>\n );\n}\n\ninterface CreateHrefForProviderOptions {\n /** Omitted in hosted mode: the login is for the account, not a project. */\n projectId?: string;\n url: string;\n /** Where Flexkit sends the session code: the BFF token route, or the desktop app's URL scheme. */\n callback: string;\n fromPath: string;\n}\n\nfunction composeLoginHref({ projectId, url, callback, fromPath }: CreateHrefForProviderOptions): string {\n const params = new URLSearchParams();\n params.set('origin', callback);\n\n if (projectId) {\n params.set('projectId', projectId);\n }\n\n params.set('redirect', fromPath);\n\n return `${url}?${params.toString()}`;\n}\n","export const LAST_PROJECT_STORAGE_KEY = 'flexkit-studio:lastProjectId';\n\ntype StorageLike = Pick<Storage, 'getItem' | 'setItem'>;\n\nfunction defaultStorage(): StorageLike | undefined {\n try {\n return typeof localStorage === 'undefined' ? undefined : localStorage;\n } catch {\n return undefined;\n }\n}\n\n/** Project the user opened last on this browser, or null. Storage failures are ignored. */\nexport function readLastProjectId(storage: StorageLike | undefined = defaultStorage()): string | null {\n try {\n const value = storage?.getItem(LAST_PROJECT_STORAGE_KEY);\n\n return value && value.trim() ? value : null;\n } catch {\n return null;\n }\n}\n\nexport function rememberLastProjectId(projectId: string, storage: StorageLike | undefined = defaultStorage()): void {\n try {\n storage?.setItem(LAST_PROJECT_STORAGE_KEY, projectId);\n } catch {\n // Private mode or blocked storage: the Studio simply opens the first project next time.\n }\n}\n\n/** Where `/` should go: the remembered project when it is still accessible, else the first one. */\nexport function pickStartProjectId(projectIds: string[], lastProjectId: string | null): string | undefined {\n if (lastProjectId && projectIds.includes(lastProjectId)) {\n return lastProjectId;\n }\n\n return projectIds[0];\n}\n","export const FLEXKIT_ERROR_CODES = ['PROJECT_PAUSED', 'PROJECT_NOT_FOUND', 'READ_ONLY_MODE', 'UNKNOWN_ERROR'] as const;\n\nexport type FlexkitErrorCode = (typeof FLEXKIT_ERROR_CODES)[number];\n\nexport const FLEXKIT_ERROR_MESSAGES: Record<FlexkitErrorCode, string> = {\n PROJECT_PAUSED: 'This project has been paused.',\n PROJECT_NOT_FOUND: 'The requested project ID was not found',\n READ_ONLY_MODE: 'This project is currently in read only mode and changes cannot be saved',\n UNKNOWN_ERROR: 'Sorry, an unexpected error has occurred. Please try again',\n};\n\nexport class FlexkitError extends Error {\n readonly code: FlexkitErrorCode;\n\n constructor(code: FlexkitErrorCode, message?: string) {\n super(message ?? FLEXKIT_ERROR_MESSAGES[code]);\n this.name = 'FlexkitError';\n this.code = code;\n\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(this, new.target.prototype);\n }\n }\n\n static from(code: FlexkitErrorCode, message?: string): FlexkitError {\n return new FlexkitError(code, message);\n }\n}\n\nexport function isFlexkitError(error: unknown): error is FlexkitError {\n if (!(error instanceof Error)) {\n return false;\n }\n\n const maybeCode = (error as { code?: unknown }).code;\n\n if (typeof maybeCode !== 'string') {\n return false;\n }\n\n return (FLEXKIT_ERROR_CODES as readonly string[]).includes(maybeCode);\n}\n\nexport function getFlexkitErrorCode(error: unknown): FlexkitErrorCode | undefined {\n if (isFlexkitError(error)) {\n return error.code;\n }\n\n return undefined;\n}\n","import { useEffect, useRef } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useSWRConfig } from 'swr';\nimport { useConfig } from '../../core/config/config-context';\nimport { LOGO_MARK_PATH } from '../../ui/components/logo';\nimport { fetcher, paths } from './api';\nimport { getDesktop } from '../../core/desktop';\nimport { planActivityNotifications } from './activity';\nimport { ensurePushSubscription, useNotificationPreferences } from './notification-settings';\nimport type { ActivitySummary } from './types';\n\nconst POLL_INTERVAL_MS = 30_000;\nconst WATERMARK_STORAGE_KEY = 'flexkit:activity-watermark:';\n\nfunction readWatermark(projectId: string): string | null {\n try {\n return localStorage.getItem(`${WATERMARK_STORAGE_KEY}${projectId}`);\n } catch {\n return null;\n }\n}\n\nfunction writeWatermark(projectId: string, since: string): void {\n try {\n localStorage.setItem(`${WATERMARK_STORAGE_KEY}${projectId}`, since);\n } catch {\n // Storage can be blocked; the in-memory watermark still prevents repeats in this tab.\n }\n}\n\nfunction canNotify(): boolean {\n return typeof Notification !== 'undefined' && Notification.permission === 'granted';\n}\n\nconst NOTIFICATION_ICON_SIZE = 192;\n\nlet notificationIcon: Promise<string | undefined> | null = null;\n\n/**\n * The Flexkit logo as a PNG data URL for the notification icon. Browsers do not\n * reliably render SVG notification icons, so the mark is drawn on a canvas once.\n */\nfunction getNotificationIcon(): Promise<string | undefined> {\n notificationIcon ??= (async () => {\n try {\n const canvas = document.createElement('canvas');\n\n canvas.width = NOTIFICATION_ICON_SIZE;\n canvas.height = NOTIFICATION_ICON_SIZE;\n\n const context = canvas.getContext('2d');\n\n if (!context) {\n return undefined;\n }\n\n context.scale(NOTIFICATION_ICON_SIZE / 48, NOTIFICATION_ICON_SIZE / 48);\n context.fillStyle = 'white';\n context.fillRect(7, 8, 34, 32);\n context.fillStyle = '#020817';\n context.fill(new Path2D(LOGO_MARK_PATH));\n\n return canvas.toDataURL('image/png');\n } catch {\n return undefined;\n }\n })();\n\n return notificationIcon;\n}\n\n/**\n * The person is not looking at Studio: the tab is in the background, or another\n * app has focus. Switching apps leaves a partly visible browser window\n * `visible`, so visibility alone misses the most common case.\n */\nfunction isAway(): boolean {\n return document.visibilityState === 'hidden' || !document.hasFocus();\n}\n\n/**\n * Runs `task` in exactly one Studio tab per project at a time (Web Locks), so\n * three open tabs show one notification, not three. Without Web Locks every\n * tab runs it; notification tags still collapse the duplicates.\n */\nfunction runAsLeader(lockName: string, task: (_signal: AbortSignal) => void): () => void {\n const controller = new AbortController();\n\n if (typeof navigator === 'undefined' || !('locks' in navigator)) {\n task(controller.signal);\n\n return () => controller.abort();\n }\n\n navigator.locks\n .request(lockName, { signal: controller.signal }, async () => {\n // An unmount can land between the grant and this callback (React Strict Mode\n // remounts at once). The abort event has then already fired, so waiting for it\n // would hold the lock forever while the remounted notifier queues behind it.\n if (controller.signal.aborted) {\n return;\n }\n\n task(controller.signal);\n\n // Hold the lock until this tab's notifier unmounts.\n await new Promise<void>((resolve) => controller.signal.addEventListener('abort', () => resolve(), { once: true }));\n })\n .catch(() => undefined);\n\n return () => controller.abort();\n}\n\n/**\n * Polls the Activity summary while Studio is open and turns new items into\n * desktop notifications when the tab is in the background. It also refreshes\n * the Activity badge. Renders nothing.\n */\nexport function ActivityNotifier({ projectId }: { projectId: string }): null {\n const navigate = useNavigate();\n const navigateRef = useRef(navigate);\n const { mutate } = useSWRConfig();\n const { mode } = useConfig();\n const { isLoaded: preferencesLoaded, preferences } = useNotificationPreferences();\n // Read on every poll without restarting the poller when preferences change.\n const mutedKindsRef = useRef(preferences.desktopMutedKinds);\n const preferencesLoadedRef = useRef(preferencesLoaded);\n // The leader tab's poll, so a poll skipped while preferences loaded can run as soon as they arrive.\n const pollNowRef = useRef<(() => void) | null>(null);\n\n navigateRef.current = navigate;\n mutedKindsRef.current = preferences.desktopMutedKinds;\n preferencesLoadedRef.current = preferencesLoaded;\n\n // The hosted Studio also reaches the person through Web Push while no tab is\n // open; keep this browser's subscription saved once notifications are allowed.\n useEffect(() => {\n if (mode !== 'hosted') {\n return;\n }\n\n ensurePushSubscription().catch(() => undefined);\n }, [mode]);\n\n useEffect(() => {\n if (!projectId) {\n return;\n }\n\n return runAsLeader(`flexkit-activity-notifier:${projectId}`, (signal) => {\n let since = readWatermark(projectId);\n\n async function poll(): Promise<void> {\n // Without the stored preferences a muted kind could still notify; wait for\n // them (the watermark stays put, so nothing is skipped meanwhile).\n if (!preferencesLoadedRef.current) {\n return;\n }\n\n let summary: ActivitySummary;\n\n try {\n summary = await fetcher<ActivitySummary>(paths(projectId).activitySummary(since));\n } catch {\n return;\n }\n\n if (signal.aborted) {\n return;\n }\n\n const plan = planActivityNotifications({ mutedKinds: mutedKindsRef.current, newItems: summary.newItems, since });\n\n ({ since } = plan);\n writeWatermark(projectId, plan.since);\n void mutate(paths(projectId).activitySummary(), summary, { revalidate: false });\n\n if (!isAway() || !canNotify()) {\n return;\n }\n\n const icon = plan.notifications.length > 0 ? await getNotificationIcon() : undefined;\n\n for (const notification of plan.notifications) {\n const shown = new Notification(notification.title, { body: notification.body, icon, tag: notification.tag });\n\n shown.onclick = () => {\n const desktop = getDesktop();\n\n if (desktop) {\n desktop.focusWindow();\n } else {\n window.focus();\n }\n\n navigateRef.current(`/${projectId}/ai/${notification.path}`);\n shown.close();\n };\n }\n }\n\n void poll();\n\n const interval = setInterval(() => void poll(), POLL_INTERVAL_MS);\n\n pollNowRef.current = () => void poll();\n signal.addEventListener('abort', () => {\n clearInterval(interval);\n pollNowRef.current = null;\n });\n });\n }, [mutate, projectId]);\n\n // The first poll waits for the preferences; run it the moment they arrive\n // instead of on the next interval.\n useEffect(() => {\n if (preferencesLoaded) {\n pollNowRef.current?.();\n }\n }, [preferencesLoaded]);\n\n return null;\n}\n","import type { Location } from 'react-router-dom';\n\n/**\n * Which Studio apps have been opened for a project and where each one was\n * last left. Opened apps stay mounted while another app is in front, so a\n * chat, a grid or an explorer query survives a tab switch; the stored\n * location is what the hidden app keeps rendering and where its app bar\n * button leads back to.\n */\nexport interface AppSessions {\n /** Where each opened app was last left. */\n locations: { [appName: string]: Location };\n /** Opened apps in the order they were first opened; each stays mounted. */\n order: string[];\n projectId: string;\n}\n\nexport function createAppSessions(projectId: string): AppSessions {\n return { locations: {}, order: [], projectId };\n}\n\nfunction decodeSegment(segment: string): string {\n try {\n return decodeURIComponent(segment);\n } catch {\n return segment;\n }\n}\n\n/**\n * The app segment that follows the project id in a Studio pathname, e.g.\n * `ai` for `/p1/ai/agent/chats/3`, or `undefined` for `/p1` and `/p1/`.\n */\nexport function getAppSegment(pathname: string, projectId: string): string | undefined {\n const [project, app] = pathname.split('/').filter(Boolean);\n\n if (project === undefined || decodeSegment(project) !== projectId) {\n return undefined;\n }\n\n return app === undefined ? undefined : decodeSegment(app);\n}\n\n/**\n * Records that `appName` is in front at `location`. Returns the same object\n * when nothing changed so callers can skip a state update, and starts over\n * when the project changed so a stored location never points into another\n * project.\n */\nexport function rememberAppLocation(\n sessions: AppSessions,\n projectId: string,\n appName: string,\n location: Location\n): AppSessions {\n const base = sessions.projectId === projectId ? sessions : createAppSessions(projectId);\n\n if (base.locations[appName] === location) {\n return base;\n }\n\n return {\n locations: { ...base.locations, [appName]: location },\n order: base.order.includes(appName) ? base.order : [...base.order, appName],\n projectId,\n };\n}\n","import { useEffect, useRef, useState } from 'react';\nimport type { JSX } from 'react';\nimport { MoreHorizontal, PackageCheck, PackageX, Settings, Wrench } from 'lucide-react';\nimport { createPath, Link, NavLink, Navigate, useLocation, useParams } from 'react-router-dom';\nimport { Button } from '../primitives/button';\nimport { getAppSegment } from '../../core/apps/app-sessions';\nimport type { AppSessions } from '../../core/apps/app-sessions';\nimport type { AppOptions } from '../../core/config/types';\nimport type { StudioVersion } from '../../core/use-studio-version';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../primitives/tooltip';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n} from '../primitives/dropdown-menu';\n\ntype Props = {\n /** The app the URL points at, if it is a known one. */\n activeApp: string | undefined;\n apps: AppOptions[];\n /** Where each opened app was last left; its button leads back there. */\n sessions: AppSessions;\n version: StudioVersion;\n};\n\nexport function AppBar({ activeApp: currentApp, apps, sessions, version }: Props): JSX.Element {\n const [appBarHeight, setAppBarHeight] = useState(0);\n const [visibleApps, setVisibleApps] = useState<AppOptions[]>(apps);\n const [additionalApps, setAdditionalApps] = useState<AppOptions[]>([]); // apps that are not visible in the sidebar due to lack of space\n const appBar = useRef<HTMLDivElement>(null);\n const location = useLocation();\n const { projectId = '' } = useParams();\n const appSegment = getAppSegment(location.pathname, projectId);\n const activeApp = currentApp ?? apps[0]?.name;\n\n /** An opened app reopens on the page it was left on; the others open on their root. */\n function getAppPath(app: AppOptions): string {\n const lastLocation = sessions.locations[app.name];\n\n return lastLocation ? createPath(lastLocation) : `/${projectId}/${app.name}`;\n }\n\n useEffect(() => {\n if (appBar.current === null) {\n return;\n }\n\n const resizeObserver = new ResizeObserver(() => {\n setAppBarHeight(appBar.current?.offsetHeight ?? 0);\n });\n\n resizeObserver.observe(appBar.current);\n\n return function cleanup() {\n resizeObserver.disconnect();\n };\n }, [currentApp]);\n\n useEffect(() => {\n const availableAppSlots = Math.floor(appBarHeight / 48) - 2;\n const _visibleApps = apps.slice(0, availableAppSlots);\n\n if (!_visibleApps.find((app) => app.name === activeApp)) {\n // if the currently active app is not in the visible apps, add it to the end of the visible apps\n const _activeApp = apps.find((app) => app.name === activeApp);\n _visibleApps.pop();\n _activeApp ? _visibleApps.push(_activeApp) : null;\n }\n\n const _additionalApps = apps.filter((app) => !_visibleApps.includes(app));\n\n setVisibleApps(_visibleApps);\n setAdditionalApps(_additionalApps);\n }, [apps, activeApp, appBarHeight]);\n\n // A bare project URL opens the first app. An unknown app segment is left\n // alone (the outlet reports it) rather than redirected in a loop.\n if (appSegment === undefined && activeApp) {\n return <Navigate replace to={`${location.pathname.replace(/\\/$/, '')}/${activeApp}`} />;\n }\n\n return (\n <TooltipProvider>\n <div className=\"fk:flex fk:flex-col fk:h-full fk:w-12 fk:bg-muted\" ref={appBar}>\n <div className=\"fk:grow\">\n <div className=\"fk:grid fk:grid-cols-1 fk:w-12 fk:h-auto\">\n {visibleApps.map((app) => (\n <Button asChild className=\"fk:h-12 fk:w-12\" key={app.name} variant=\"ghost\">\n <Tooltip>\n <TooltipTrigger\n asChild\n className=\"fk:h-12 fk:p-2 fk:rounded-none fk:border-2 fk:border-transparent! fk:data-[state=active]:border-l-foreground! fk:focus-visible:outline-hidden fk:focus-visible:ring-0 fk:focus-visible:ring-offset-0 fk:focus-visible:border-2! fk:focus-visible:border-ring! fk:focus-visible:rounded-xs fk:corner-squircle\"\n >\n <NavLink\n className=\"fk:text-muted-foreground fk:aria-[current]:text-foreground fk:aria-[current]:bg-background fk:aria-[current]:border-l-white!\"\n to={getAppPath(app)}\n >\n {app.icon}\n </NavLink>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p>{app.title}</p>\n </TooltipContent>\n </Tooltip>\n </Button>\n ))}\n </div>\n {/* additional apps */}\n {additionalApps.length > 0 && (\n <DropdownMenu>\n <Tooltip>\n <DropdownMenuTrigger asChild>\n <TooltipTrigger className=\"fk:flex fk:justify-center fk:items-center fk:h-12 fk:w-12 p-0 fk:data-[state=open]:bg-muted fk:text-muted-foreground fk:transition-colors fk:focus-visible:outline-hidden fk:focus-visible:border-2 fk:focus-visible:border-ring fk:focus-visible:rounded-xs\">\n <MoreHorizontal className=\"fk:w-5 fk:h-5\" strokeWidth={1.5} />\n <span className=\"fk:sr-only\">View additional apps</span>\n <TooltipContent side=\"right\">\n <p>Additional apps</p>\n </TooltipContent>\n </TooltipTrigger>\n </DropdownMenuTrigger>\n </Tooltip>\n <DropdownMenuContent align=\"start\" className=\"fk:w-56\" side=\"right\">\n {additionalApps.map((app) => (\n <DropdownMenuItem asChild key={app.name}>\n <NavLink to={getAppPath(app)}>{app.title}</NavLink>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n {/* settings button */}\n <DropdownMenu>\n <Tooltip>\n <DropdownMenuTrigger asChild>\n <TooltipTrigger className=\"fk:flex fk:justify-center fk:items-center fk:h-12 fk:w-12 fk:p-0 fk:data-[state=open]:bg-muted fk:text-muted-foreground fk:transition-colors fk:focus-visible:outline-hidden fk:focus-visible:border-2 fk:focus-visible:border-ring fk:focus-visible:rounded-xs\">\n <Settings className=\"fk:w-5 fk:h-5\" strokeWidth={1.5} />\n <span className=\"fk:sr-only\">Settings menu</span>\n <TooltipContent side=\"right\">\n <p>Settings menu</p>\n </TooltipContent>\n </TooltipTrigger>\n </DropdownMenuTrigger>\n </Tooltip>\n <DropdownMenuContent align=\"start\" className=\"fk:w-60\" side=\"right\">\n {/* TODO: add command menu functionality */}\n {/* <DropdownMenuItem\n onSelect={() => {\n //\n }}\n >\n <Keyboard className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Command Menu</span>\n <DropdownMenuShortcut>⌘K</DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuSeparator /> */}\n {/* TODO: add theme menu functionality - perhaps a Slack-like theme selector */}\n {/* <DropdownMenuItem\n onSelect={() => {\n //\n }}\n >\n <Palette className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Theme</span>\n </DropdownMenuItem> */}\n <DropdownMenuItem asChild>\n <Link to={`https://flexkit.io/dashboard/*/${projectId}`} target=\"_blank\" rel=\"noopener noreferrer\">\n <Wrench className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Manage project</span>\n </Link>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={version.isCurrent}\n onSelect={() => {\n version.upgrade?.();\n }}\n >\n {version.isCurrent ? (\n <>\n <PackageCheck className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Version {version.current}</span>\n </>\n ) : (\n <>\n <PackageX className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>\n Version {version.current}.<br />\n Restart to update to {version.latest}\n </span>\n </>\n )}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </TooltipProvider>\n );\n}\n","import { Component } from 'react';\nimport type { ErrorInfo, JSX, ReactNode } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { useLocation } from 'react-router-dom';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\n\nfunction ErrorAlert({ error }: { error: unknown }): JSX.Element {\n const errorText =\n error instanceof Error ? error.message : 'An unexpected error has occurred. Please try refreshing the page.';\n\n return (\n <Alert variant=\"destructive\">\n <AlertCircle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>Error</AlertTitle>\n <AlertDescription>{errorText}</AlertDescription>\n </Alert>\n );\n}\n\ntype BoundaryProps = {\n children: ReactNode;\n /** Changing it clears a caught error, like a navigation does in a data router. */\n resetKey: string;\n};\n\ntype BoundaryState = { error: unknown; hasError: boolean };\n\nclass ErrorBoundaryImpl extends Component<BoundaryProps, BoundaryState> {\n state: BoundaryState = { error: null, hasError: false };\n\n static getDerivedStateFromError(error: unknown): BoundaryState {\n return { error, hasError: true };\n }\n\n componentDidCatch(error: unknown, info: ErrorInfo): void {\n console.error('Flexkit Studio app error', error, info.componentStack);\n }\n\n componentDidUpdate(prevProps: BoundaryProps): void {\n if (this.state.hasError && prevProps.resetKey !== this.props.resetKey) {\n this.setState({ error: null, hasError: false });\n }\n }\n\n render(): ReactNode {\n return this.state.hasError ? <ErrorAlert error={this.state.error} /> : this.props.children;\n }\n}\n\n/**\n * Shows an error alert in place of the route element that threw, and recovers\n * when the route's location changes. The apps are rendered with `useRoutes`\n * so they can stay mounted off-screen, and `errorElement` only works in a\n * data router, hence this boundary.\n */\nexport function RouteErrorBoundary({ children }: { children: ReactNode }): JSX.Element {\n const { pathname, search } = useLocation();\n\n return <ErrorBoundaryImpl resetKey={`${pathname}${search}`}>{children}</ErrorBoundaryImpl>;\n}\n","import { useMemo, useState } from 'react';\nimport type { JSX } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { useLocation, useRoutes } from 'react-router-dom';\nimport type { Location, RouteObject } from 'react-router-dom';\nimport { AppActiveContext } from '../../core/apps/app-active';\nimport { createAppSessions, getAppSegment, rememberAppLocation } from '../../core/apps/app-sessions';\nimport type { AppSessions } from '../../core/apps/app-sessions';\nimport type { AppOptions, AppRoute } from '../../core/config/types';\nimport { RouteErrorBoundary } from '../../core/error/error-boundary';\nimport { Alert, AlertDescription, AlertTitle } from '../primitives/alert';\n\nexport interface AppSessionState {\n /** The app the URL points at, if it is one of `apps`. */\n activeApp: string | undefined;\n sessions: AppSessions;\n}\n\n/**\n * Tracks which app is in front and where every opened app was last left.\n * The state is adjusted during render (the React-sanctioned pattern for\n * state derived from the previous render) so the app bar and the outlet\n * never see a location that belongs to a different app than the URL.\n */\nexport function useAppSessions(apps: AppOptions[], projectId: string): AppSessionState {\n const location = useLocation();\n const [sessions, setSessions] = useState(() => createAppSessions(projectId));\n const segment = getAppSegment(location.pathname, projectId);\n const activeApp = segment !== undefined && apps.some((app) => app.name === segment) ? segment : undefined;\n const next = activeApp\n ? rememberAppLocation(sessions, projectId, activeApp, location)\n : sessions.projectId === projectId\n ? sessions\n : createAppSessions(projectId);\n\n if (next !== sessions) {\n setSessions(next);\n }\n\n return { activeApp, sessions: next };\n}\n\nfunction toRouteObject(route: AppRoute): RouteObject {\n return {\n children: route.children?.map(toRouteObject),\n element: <RouteErrorBoundary>{route.component}</RouteErrorBoundary>,\n path: route.path,\n };\n}\n\n/**\n * Renders one app against the location it was last seen at. Passing the\n * location to `useRoutes` scopes `useLocation`, `useParams` and relative\n * links inside the app to it, so an app that is hidden behind another one\n * keeps rendering the page it was left on instead of reacting to the URL\n * of the app in front.\n */\nfunction AppRoutes({ app, location }: { app: AppOptions; location: Location }): JSX.Element | null {\n const routes = useMemo<RouteObject[]>(\n () => [\n {\n children: app.routes?.map(toRouteObject),\n element: <RouteErrorBoundary>{app.component}</RouteErrorBoundary>,\n path: app.name,\n },\n ],\n [app]\n );\n\n return useRoutes(routes, location);\n}\n\nfunction AppNotFound({ segment }: { segment: string }): JSX.Element {\n return (\n <div className=\"fk:flex fk:h-full fk:grow fk:items-center fk:justify-center fk:p-8\">\n <Alert className=\"fk:max-w-lg\" variant=\"destructive\">\n <AlertCircle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>App not found</AlertTitle>\n <AlertDescription>There is no Studio app named &quot;{segment}&quot;.</AlertDescription>\n </Alert>\n </div>\n );\n}\n\ntype Props = AppSessionState & {\n apps: AppOptions[];\n};\n\n/**\n * The Studio's app area. Every app that has been opened stays mounted; the\n * one the URL points at is shown and the others are hidden with\n * `display: none`, so switching tabs and back keeps a chat, a half-filled\n * form or an explorer query exactly as it was. The shown app's wrapper uses\n * `display: contents` so the app itself stays a flex item of the layout row.\n */\nexport function AppOutlet({ activeApp, apps, sessions }: Props): JSX.Element {\n const location = useLocation();\n const segment = getAppSegment(location.pathname, sessions.projectId);\n\n return (\n <>\n {sessions.order.map((name) => {\n const app = apps.find((item) => item.name === name);\n const appLocation = sessions.locations[name];\n\n if (!app || !appLocation) {\n return null;\n }\n\n const isActive = name === activeApp;\n\n return (\n <div\n aria-hidden={isActive ? undefined : true}\n data-studio-app={name}\n key={name}\n style={{ display: isActive ? 'contents' : 'none' }}\n >\n <AppActiveContext.Provider value={isActive}>\n <AppRoutes app={app} location={appLocation} />\n </AppActiveContext.Provider>\n </div>\n );\n })}\n {activeApp === undefined && segment !== undefined ? <AppNotFound segment={segment} /> : null}\n </>\n );\n}\n","import { useNavigate } from 'react-router-dom';\nimport { Suspense, lazy, startTransition } from 'react';\nimport type { JSX } from 'react';\nimport { useTheme } from '../theme-context';\nimport { getDesktop } from '../../core/desktop';\nimport type { ProjectSummary, ProjectUiConfig } from '../../core/config/types';\n\nconst Logo = lazy(() => import('../components/logo.js').then(({ Logo: Component }) => ({ 'default': Component })));\nconst ProjectSelector = lazy(() =>\n import('../components/project-selector.js').then(({ ProjectSelector: Component }) => ({ 'default': Component }))\n);\nconst Search = lazy(() => import('../components/search.js').then(({ Search: Component }) => ({ 'default': Component })));\nconst ActivityNavButton = lazy(() =>\n import('../../apps/ai/activity-nav-button.js').then(({ ActivityNavButton: Component }) => ({ 'default': Component }))\n);\nconst UserNav = lazy(() => import('../components/user-nav.js').then(({ UserNav: Component }) => ({ 'default': Component })));\n\ntype Props = {\n projectId: string;\n projectIds: string[];\n /** Hosted mode: names and teams known before schemas load. */\n projectSummaries?: ProjectSummary[];\n projects: ProjectUiConfig[];\n};\n\nexport function Navbar({ projectId, projectIds, projectSummaries = [], projects }: Props): JSX.Element {\n const { resolvedTheme } = useTheme();\n const currentProject = projects.find((project) => project.projectId === projectId);\n const currentSummary = projectSummaries.find((project) => project.id === projectId);\n const schema = currentProject?.schema ?? [];\n const navigate = useNavigate();\n\n function handleSearchSelection(item: { entityName: string; entityNamePlural: string; entityId: string }) {\n startTransition(() => {\n navigate(`/${projectId}/desk/list/${item.entityNamePlural}?id=${item.entityId}`);\n });\n }\n\n return (\n <div className=\"fk:flex fk:basis-14 fk:min-h-14 fk:px-3 fk:gap-x-4 fk:border-b fk:border-border fk:z-30 flexkit-navbar\">\n {/* The desktop app shows its own icon in the dock and title bar; the mark only links home on the web. */}\n {getDesktop() === undefined && (\n <Suspense fallback={null}>\n <Logo theme={resolvedTheme} title={currentProject?.title ?? currentSummary?.name ?? 'Flexkit Studio'} />\n </Suspense>\n )}\n <div className=\"fk:flex fk:grow fk:shrink fk:items-center fk:gap-x-4 px-4\">\n <Suspense fallback={null}>\n <ProjectSelector\n projectId={projectId}\n projectIds={projectIds}\n projectSummaries={projectSummaries}\n projects={projects}\n />\n </Suspense>\n <Suspense fallback={null}>\n <Search key={projectId} onSelect={handleSearchSelection} projectId={projectId} schema={schema} />\n </Suspense>\n </div>\n <div className=\"fk:flex fk:items-center fk:gap-x-4\">\n <Suspense fallback={null}>\n <ActivityNavButton projectId={projectId} />\n </Suspense>\n <Suspense fallback={null}>\n <UserNav projectId={projectId} />\n </Suspense>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport { getDesktop } from './desktop';\n\nexport interface StudioVersion {\n current: string;\n latest: string;\n isCurrent: boolean;\n /** Applies the newer version (the desktop app restarts into it); undefined when there is nothing to apply. */\n upgrade?: () => void;\n}\n\nconst WEB_VERSION: StudioVersion = { current: '1.0.0', latest: '1.0.0', isCurrent: true };\n\n/**\n * The Studio version shown in the app bar. The web Studio is always current\n * (the hosted Studio deploys with the packages); the desktop app reports its\n * own version and the update it has downloaded, if any.\n */\nexport function useStudioVersion(): StudioVersion {\n const desktop = getDesktop();\n const [downloaded, setDownloaded] = useState<string | null>(null);\n\n useEffect(() => {\n if (!desktop) {\n return;\n }\n\n return desktop.onUpdateDownloaded((update) => {\n setDownloaded(update.version);\n });\n }, [desktop]);\n\n if (!desktop) {\n return WEB_VERSION;\n }\n\n if (downloaded === null) {\n return { current: desktop.version, latest: desktop.version, isCurrent: true };\n }\n\n return { current: desktop.version, latest: downloaded, isCurrent: false, upgrade: () => desktop.installUpdate() };\n}\n","import { useEffect, type JSX } from 'react';\nimport { Link, useParams, useLocation } from 'react-router-dom';\nimport { AlertCircle } from 'lucide-react';\nimport { useAuth } from '../../auth/auth-context';\nimport { Login } from '../../auth/login';\nimport { useConfig } from '../../core/config/config-context';\nimport { SCOPE_STORAGE_KEY, useAppDispatch } from '../../core/app-context';\nimport { rememberLastProjectId } from '../../core/config/last-project';\nimport type { ProjectSchemaError } from '../../core/config/types';\nimport { FlexkitError } from '../../core/error/errors';\nimport { ActivityNotifier } from '../../apps/ai/activity-notifier';\nimport { Loading } from '../components/loading';\nimport { Alert, AlertDescription, AlertTitle } from '../primitives/alert';\nimport { Toaster } from '../primitives/sonner';\nimport { AppBar } from './appbar';\nimport { AppOutlet, useAppSessions } from './app-outlet';\nimport { Navbar } from './navbar';\nimport { useStudioVersion } from '../../core/use-studio-version';\n\n\nfunction SchemaUnavailable({\n projectId,\n error,\n showHomeLink = false,\n}: {\n projectId: string;\n error: ProjectSchemaError;\n /** Hosted mode: offer a way back to the projects the account can open. */\n showHomeLink?: boolean;\n}): JSX.Element {\n const isMissing = error.status === 404;\n const isForbidden = error.status === 401 || error.status === 403;\n const title = isMissing\n ? 'No deployed schema'\n : isForbidden\n ? 'No access to this project'\n : 'Could not load the project schema';\n const description = isMissing\n ? `Project \"${projectId}\" has no deployed schema yet. Run \\`flexkit deploy\\` from the folder containing its flexkit.config.ts.`\n : isForbidden\n ? `Your account is not a member of project \"${projectId}\". Ask a project owner to invite you.`\n : `${error.message} (project \"${projectId}\").`;\n\n return (\n <div className=\"fk:flex fk:h-full fk:items-center fk:justify-center fk:p-8\">\n <Alert className=\"fk:max-w-lg\" variant=\"destructive\">\n <AlertCircle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>{title}</AlertTitle>\n <AlertDescription className=\"fk:flex fk:flex-col fk:gap-2\">\n <span>{description}</span>\n {showHomeLink ? (\n <Link className=\"fk:underline fk:underline-offset-4\" to=\"/\">\n Back to your projects\n </Link>\n ) : null}\n </AlertDescription>\n </Alert>\n </div>\n );\n}\n\nexport function Layout(): JSX.Element {\n const { apps, currentProject, isLoadingSchemas, mode, projectIds, projects, projectSummaries, schemaErrors } =\n useConfig();\n const [isLoading, auth] = useAuth();\n const { projectId = '' } = useParams();\n const scopes = currentProject?.scopes;\n const appDispatch = useAppDispatch();\n const location = useLocation();\n const isKnownProject = projectIds.includes(projectId);\n const appSessions = useAppSessions(apps, projectId);\n const version = useStudioVersion();\n\n useEffect(() => {\n if (scopes && scopes.length > 0) {\n const defaultScope = scopes.find((s) => s.isDefault) ?? scopes[0];\n let savedScope = '';\n\n if (typeof localStorage !== 'undefined') {\n savedScope = localStorage.getItem(`${SCOPE_STORAGE_KEY}${projectId}`) ?? '';\n }\n\n appDispatch({ type: 'setScope', payload: { projectId, scope: savedScope || defaultScope.name } });\n }\n }, [appDispatch, location, projectId, scopes]);\n\n // Hosted mode: come back to the project the user worked in last.\n useEffect(() => {\n if (mode === 'hosted' && isKnownProject && currentProject) {\n rememberLastProjectId(projectId);\n }\n }, [currentProject, isKnownProject, mode, projectId]);\n\n if (!isKnownProject) {\n if (mode === 'projects') {\n throw new FlexkitError('PROJECT_NOT_FOUND');\n }\n\n return (\n <SchemaUnavailable error={{ status: 403, message: 'No access to this project' }} projectId={projectId} showHomeLink />\n );\n }\n\n if (isLoading) {\n return <Loading />;\n }\n\n if (!auth.user?.id) {\n return <Login projectId={mode === 'hosted' ? undefined : projectId} />;\n }\n\n if (isLoadingSchemas) {\n return <Loading />;\n }\n\n const schemaError = schemaErrors[projectId];\n\n return (\n <>\n {/* eslint-disable-next-line react/no-unknown-property -- vaul-drawer-wrapper custom property required by Vaul component */}\n <div className=\"fk:flex fk:flex-col fk:h-full flexkit-studio\" vaul-drawer-wrapper=\"\">\n <Navbar projectId={projectId} projectIds={projectIds} projectSummaries={projectSummaries} projects={projects} />\n <div className=\"fk:flex fk:h-full fk:max-h-[calc(100%-3.5rem)] fk:border-t fk:border-border fk:grow shrink\">\n <AppBar apps={apps} version={version} {...appSessions} />\n {currentProject ? (\n <AppOutlet apps={apps} {...appSessions} />\n ) : (\n <SchemaUnavailable\n error={schemaError ?? { status: 0, message: 'The project schema is not available.' }}\n projectId={projectId}\n showHomeLink={mode === 'hosted'}\n />\n )}\n </div>\n </div>\n <ActivityNotifier projectId={projectId} />\n <Toaster />\n </>\n );\n}\n","'use client';\n\nimport { useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { getDesktop } from './desktop';\n\n/**\n * Inside the desktop app: marks the document with the platform (the styles\n * reserve room for the window controls and make the navbar draggable) and\n * opens the paths the app asks for (deep links, menu items). Renders nothing,\n * and does nothing on the web.\n */\nexport function DesktopEffects(): null {\n const navigate = useNavigate();\n\n useEffect(() => {\n const desktop = getDesktop();\n\n if (!desktop) {\n return;\n }\n\n document.documentElement.dataset.desktopPlatform = desktop.platform;\n\n return desktop.onNavigate((path) => {\n navigate(path);\n });\n }, [navigate]);\n\n return null;\n}\n","'use client';\n\nimport useSWR from 'swr';\nimport { userApiPaths } from '../api-paths';\nimport type { HostedUser, ProjectSummary } from './types';\n\nexport type HostedSession =\n | { status: 'loading' }\n | { status: 'anonymous' }\n | { status: 'error'; message: string }\n | { status: 'ready'; user: HostedUser; projects: ProjectSummary[] };\n\ntype MeResponse = { projects: ProjectSummary[]; user: HostedUser };\ntype MeOutcome = { kind: 'anonymous' } | { kind: 'error'; message: string } | { kind: 'ready'; data: MeResponse };\n\nasync function fetchMe(): Promise<MeOutcome> {\n try {\n const response = await fetch(userApiPaths.me, { credentials: 'same-origin' });\n\n if (response.status === 401) {\n return { kind: 'anonymous' };\n }\n\n if (!response.ok) {\n return { kind: 'error', message: `Flexkit answered ${String(response.status)} while loading your projects.` };\n }\n\n return { kind: 'ready', data: (await response.json()) as MeResponse };\n } catch (error) {\n return { kind: 'error', message: error instanceof Error ? error.message : 'Flexkit is not reachable.' };\n }\n}\n\nexport function toHostedSession(outcome: MeOutcome | undefined): HostedSession {\n if (!outcome) {\n return { status: 'loading' };\n }\n\n if (outcome.kind === 'anonymous') {\n return { status: 'anonymous' };\n }\n\n if (outcome.kind === 'error') {\n return { status: 'error', message: outcome.message };\n }\n\n return { status: 'ready', projects: outcome.data.projects, user: outcome.data.user };\n}\n\n/** Hosted mode: who is signed in and which projects they can open. Fetched once per page load. */\nexport function useHostedSession(): HostedSession {\n const { data } = useSWR('hosted-session', fetchMe, {\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n shouldRetryOnError: false,\n });\n\n return toHostedSession(data);\n}\n","'use client';\n\nimport * as React from 'react';\nimport { AlertDialog as AlertDialogPrimitive } from 'radix-ui';\nimport { cn } from '../lib/utils';\nimport { Button } from './button';\n\nfunction AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\nfunction AlertDialogTrigger({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />;\n}\n\nfunction AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />;\n}\n\nfunction AlertDialogOverlay({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: 'default' | 'sm';\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n 'fk:group/alert-dialog-content fk:fixed fk:top-[50%] fk:left-[50%] fk:z-50 fk:grid fk:w-full fk:max-w-[calc(100%-2rem)] fk:translate-x-[-50%] fk:translate-y-[-50%] fk:gap-4 fk:rounded-lg fk:border fk:bg-background fk:p-6 fk:shadow-lg fk:duration-200 fk:data-[size=sm]:max-w-xs fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95 fk:data-[size=default]:sm:max-w-lg fk:corner-squircle',\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n );\n}\n\nfunction AlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n 'fk:grid fk:grid-rows-[auto_1fr] fk:place-items-center fk:gap-1.5 fk:text-center fk:has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] fk:has-data-[slot=alert-dialog-media]:gap-x-6 fk:sm:group-data-[size=default]/alert-dialog-content:place-items-start fk:sm:group-data-[size=default]/alert-dialog-content:text-left fk:sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n 'fk:flex fk:flex-col-reverse fk:gap-2 fk:group-data-[size=sm]/alert-dialog-content:grid fk:group-data-[size=sm]/alert-dialog-content:grid-cols-2 fk:sm:flex-row fk:sm:justify-end',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogTitle({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n 'fk:text-lg fk:font-semibold fk:sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDialogMedia({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"fk:mb-2 fk:inline-flex fk:size-16 fk:items-center fk:justify-center fk:rounded-md fk:bg-muted fk:sm:group-data-[size=default]/alert-dialog-content:row-span-2 fk:*:[svg:not([class*='size-'])]:size-8 fk:corner-squircle\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction AlertDialogAction({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Action data-slot=\"alert-dialog-action\" className={cn(className)} {...props} />\n </Button>\n );\n}\n\nfunction AlertDialogCancel({\n className,\n variant = 'outline',\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Cancel data-slot=\"alert-dialog-cancel\" className={cn(className)} {...props} />\n </Button>\n );\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n};\n","'use client';\n\nimport { useEffect, useState, type JSX } from 'react';\nimport {\n AlertDialog as AlertModalDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogPortal,\n AlertDialogTitle,\n} from '../primitives/alert-dialog';\nimport { buttonVariants } from '@ui/primitives/button';\nimport { Loader2 } from 'lucide-react';\n\ntype Props = {\n options: {\n dialogTitle: string;\n dialogMessage: string;\n dialogCancelTitle: string;\n dialogActionLabel: string;\n dialogActionCancel?: () => void;\n dialogActionSubmit?: () => void | Promise<void>;\n isDestructive?: boolean;\n };\n};\n\nexport default function AlertDialog({ options }: Props): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [isClosingFromSubmit, setIsClosingFromSubmit] = useState(false);\n\n useEffect(() => {\n setIsOpen(true);\n }, []);\n\n function handleClose(): void {\n setIsOpen(false);\n\n if (!isClosingFromSubmit) {\n options.dialogActionCancel?.();\n }\n\n if (isClosingFromSubmit) {\n setIsClosingFromSubmit(false);\n }\n }\n\n async function handleAction(): Promise<void> {\n setIsSubmitting(true);\n setIsClosingFromSubmit(true);\n setIsOpen(false);\n\n await new Promise<void>((resolve) => {\n globalThis.setTimeout(resolve, 150);\n });\n\n try {\n const maybePromise = options.dialogActionSubmit?.();\n\n if (maybePromise && typeof (maybePromise as Promise<void>).then === 'function') {\n await maybePromise;\n }\n } finally {\n setIsSubmitting(false);\n }\n }\n\n return (\n <AlertModalDialog onOpenChange={handleClose} open={isOpen}>\n <AlertDialogPortal>\n <AlertDialogContent className=\"sm:max-w-[425px]\">\n <AlertDialogHeader>\n <AlertDialogTitle>{options.dialogTitle}</AlertDialogTitle>\n <AlertDialogDescription>{options.dialogMessage}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isSubmitting} onClick={handleClose}>\n {options.dialogCancelTitle}\n </AlertDialogCancel>\n <AlertDialogAction\n className={buttonVariants({ variant: options.isDestructive ? 'destructive' : 'default' })}\n disabled={isSubmitting}\n onClick={handleAction}\n >\n {isSubmitting ? <Loader2 className=\"fk:h-4 fk:w-4 fk:mr-2 fk:animate-spin\" /> : null}\n {options.dialogActionLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialogPortal>\n </AlertModalDialog>\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport type { JSX } from 'react';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { useApolloClient } from '@apollo/client/react';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityDeleteMutation, getEntityDeleteWhere } from '../graphql-client/queries';\nimport { getEntityListQueryName, scheduleEntityListRemoval } from '../graphql-client/refetch-entity-lists';\nimport AlertDialog from '../ui/components/alert-dialog';\nimport { useConfig } from '../core/config/config-context';\nimport { useDispatch } from './actions-context';\nimport type { ActionDeleteEntity } from './types';\n\ntype Props = {\n action: ActionDeleteEntity;\n};\n\nexport default function Delete({ action }: Props): JSX.Element {\n const { currentProject } = useConfig();\n const schema = currentProject?.schema ?? [];\n const apolloClient = useApolloClient();\n const [runMutation, setMutation, setOptions] = useEntityMutation();\n const dispatch = useDispatch();\n const hasFiredSilentDeletionRef = useRef(false);\n const idsToDelete = Array.isArray(action.payload.entityId) ? action.payload.entityId : [action.payload.entityId];\n const entityName = action.payload.entityName === '_asset' ? 'asset' : action.payload.entityName.toLowerCase();\n const isSilent = Boolean(action.payload.silent);\n const isBatch = idsToDelete.length > 1;\n\n // Fire silent deletions exactly once. Running this from the render body\n // re-triggered the mutation on every re-render, flooding /graphql.\n useEffect(() => {\n if (!isSilent || hasFiredSilentDeletionRef.current) {\n return;\n }\n\n hasFiredSilentDeletionRef.current = true;\n void handleDeletion();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isSilent]);\n\n if (isSilent) {\n return <></>;\n }\n\n const dialogOptions = {\n dialogTitle: isBatch ? `Delete ${idsToDelete.length} ${entityName}s` : `Delete ${entityName}`,\n dialogMessage: isBatch\n ? `Are you sure you want to delete the selected ${entityName}s? They will be deleted permanently.`\n : `Are you sure you want to delete the selected ${entityName}? The item will be deleted permanently.`,\n dialogCancelTitle: 'Cancel',\n dialogActionLabel: 'Delete',\n isDestructive: true,\n dialogActionSubmit: () => handleDeletion(),\n };\n\n function handleDeletion(): Promise<void> {\n const mutation = getEntityDeleteMutation(action.payload.entityName, schema, idsToDelete);\n\n return new Promise<void>((resolve, reject) => {\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n variables: { where: getEntityDeleteWhere(idsToDelete) },\n update(cache: { evict: (arg0: { id: string }) => void }) {\n for (const id of idsToDelete) {\n cache.evict({ id });\n }\n },\n onCompleted: () => {\n toast.success(isBatch ? 'Items successfully deleted.' : 'Item successfully deleted.');\n void scheduleEntityListRemoval(\n apolloClient,\n getEntityListQueryName(action.payload.entityName, schema),\n idsToDelete\n );\n dispatch({ type: 'Dismiss', _id: action._id, payload: {} });\n resolve();\n },\n onError: (error: Error) => {\n reject(error);\n },\n });\n runMutation(true);\n });\n }\n\n return <AlertDialog options={dialogOptions} />;\n}\n","import { createContext, useContext, useMemo, useState, type ReactNode } from 'react';\n\ntype DrawerModalContextType = {\n isDirty: boolean;\n setIsDirty: (flag: boolean) => void;\n};\n\nexport const DrawerModalContext = createContext<DrawerModalContextType>({\n isDirty: false,\n setIsDirty: (_flag: boolean) => {\n /* void */\n },\n});\n\nexport const DrawerModalProvider = ({ children }: { children: ReactNode }) => {\n const [dirty, setDirty] = useState(false);\n\n const value = useMemo(() => {\n const setIsDirty = (flag: boolean) => {\n setDirty(flag);\n };\n\n return { isDirty: dirty, setIsDirty };\n }, [dirty, setDirty]);\n\n return <DrawerModalContext.Provider value={value}>{children}</DrawerModalContext.Provider>;\n};\n\nexport function useDrawerModalContext(): DrawerModalContextType {\n return useContext(DrawerModalContext);\n}\n","import { useId } from 'react';\nimport type { JSX } from 'react';\nimport { Checkbox } from '../../ui/primitives/checkbox';\n\ntype Props = {\n scope: string | undefined;\n checked: boolean;\n disabled?: boolean;\n onChange: (checked: boolean) => void;\n};\n\nexport function DefaultValueSwitch({ scope, checked, disabled, onChange }: Props): JSX.Element | null {\n const elementId = useId();\n\n if (!scope || scope === 'default') {\n return null;\n }\n\n return (\n <div className=\"fk:flex fk:items-center fk:space-x-2\">\n <Checkbox checked={checked} disabled={disabled} id={elementId} onCheckedChange={onChange as () => void} />\n <label\n className=\"fk:text-xs fk:font-normal fk:leading-none fk:peer-disabled:cursor-not-allowed fk:peer-disabled:opacity-70\"\n htmlFor={elementId}\n >\n Use default value\n </label>\n </div>\n );\n}\n","import { useId } from 'react';\nimport type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Input } from '../../ui/primitives/input';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Text({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'text'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n const id = useId();\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n setValue(name, {\n ...previousValue,\n value: event.currentTarget.value,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel htmlFor={id}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl>\n <Input\n className=\"fk:w-full fk:mt-0.75\"\n disabled={readOnly || field.value?.disabled}\n id={id}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n value={(field.value?.value as string) || ''}\n />\n </FormControl>\n\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Switch as SwitchPrimitive } from '../../ui/primitives/switch';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Switch({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'switch'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n\n function handleInput(checked: boolean, previousValue: FormFieldValue | undefined): void {\n setValue(name, {\n ...previousValue,\n value: checked,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <div className=\"fk:flex fk:flex-row fk:items-center fk:justify-between fk:rounded-lg fk:border fk:border-input fk:p-3 fk:ring-offset-background fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:corner-squircle\">\n <div className=\"fk:space-y-0.5\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <FormControl>\n <SwitchPrimitive\n checked={field.value?.value ? Boolean(field.value.value) : false}\n disabled={readOnly || field.value?.disabled}\n onCheckedChange={(checked) => {\n handleInput(checked, field.value);\n }}\n />\n </FormControl>\n </div>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import { useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nexport function useOuterClick(\n ref: RefObject<HTMLDivElement>,\n callback: React.Dispatch<React.SetStateAction<boolean>>,\n excludeSelectors?: string\n): void {\n useEffect(() => {\n function handleClickOutside(event: MouseEvent): void {\n if (ref.current && !ref.current.contains(event.target as Node)) {\n if (excludeSelectors) {\n const excludedElements = Array.from(document.querySelectorAll(excludeSelectors));\n\n for (const element of excludedElements) {\n if (element.contains(event.target as Node)) {\n return;\n }\n }\n }\n callback(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [callback, ref, excludeSelectors]);\n\n useEffect(() => {\n function handleFocusOutside(event: FocusEvent): void {\n if (ref.current && !ref.current.contains(event.target as Node)) {\n if (excludeSelectors) {\n const excludedElements = Array.from(document.querySelectorAll(excludeSelectors));\n\n for (const element of excludedElements) {\n if (element.contains(event.target as Node)) {\n return;\n }\n }\n }\n callback(false);\n }\n }\n\n document.addEventListener('focusin', handleFocusOutside);\n\n return () => {\n document.removeEventListener('mousedown', handleFocusOutside);\n };\n }, [callback, ref]);\n}\n","import { useEffect, useId, useRef, useState } from 'react';\nimport type { JSX, RefObject, SyntheticEvent } from 'react';\nimport { useParams } from 'react-router-dom';\nimport bytes from 'bytes';\nimport {\n Copy as CopyIcon,\n Download as DownloadIcon,\n Ellipsis as EllipsisIcon,\n Image as ImageIcon,\n File as FileOutlineIcon,\n Maximize2,\n RefreshCwOff as ClearFieldIcon,\n Search as SearchIcon,\n Upload as UploadIcon,\n X as ClearIcon,\n} from 'lucide-react';\nimport { FileIcon as FileTypeIcon, defaultStyles } from 'react-file-icon';\nimport { toast } from 'sonner';\nimport type { FormFieldValue, ImageValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Button } from '../../ui/primitives/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/primitives/tooltip';\nimport { Collapsible, CollapsibleContent } from '../../ui/primitives/collapsible';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../ui/primitives/dropdown-menu';\nimport { IMAGES_BASE_URL } from '../../core/api-paths';\nimport { uploadAssetFile } from '../../core/upload';\nimport { useOuterClick } from '../../ui/hooks/use-outer-click';\nimport { useAppContext, useAppDispatch } from '../../core/app-context';\nimport type { SingleRelationshipConnection } from '../../core/types';\nimport { useDispatch } from '../../entities/actions-context';\nimport type { FormFieldParams } from '../types';\n\nexport function Uploader({\n control,\n entityId,\n fieldSchema,\n getValues,\n readOnly,\n setValue,\n}: FormFieldParams<'asset'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n const { projectId } = useParams();\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const { relationships } = useAppContext();\n const [isOpen, setIsOpen] = useState(false);\n const inputFile = useRef<HTMLInputElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const selectedAssetIdRef = useRef<string | null>(null);\n const [base64PreviewImage, setBase64PreviewImage] = useState<string | null>(null);\n const [dragActive, setDragActive] = useState(false);\n const [saving, setSaving] = useState(false);\n const id = useId();\n const relationshipId = useId();\n useOuterClick(wrapperRef as RefObject<HTMLDivElement>, setIsOpen, '[data-radix-popper-content-wrapper]');\n\n useEffect(() => {\n const connection = relationships[relationshipId]?.connect as SingleRelationshipConnection | undefined;\n\n if (!connection || selectedAssetIdRef.current === connection._id) {\n return;\n }\n\n const selectedAsset = normalizeSelectedAsset(connection.value);\n\n if (!selectedAsset) {\n return;\n }\n\n const currentValue = getValues(name);\n\n selectedAssetIdRef.current = connection._id;\n setBase64PreviewImage(null);\n setValue(name, {\n ...currentValue,\n value: selectedAsset,\n });\n }, [getValues, name, relationshipId, relationships, setValue]);\n\n function getExtensionFromMime(mime: string | undefined): string | undefined {\n if (!mime) {\n return undefined;\n }\n\n const map: Record<string, string> = {\n 'application/pdf': 'pdf',\n 'application/zip': 'zip',\n 'application/x-zip-compressed': 'zip',\n 'application/json': 'json',\n 'text/csv': 'csv',\n 'text/plain': 'txt',\n 'application/msword': 'doc',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',\n 'application/vnd.ms-excel': 'xls',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',\n 'application/vnd.ms-powerpoint': 'ppt',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'pptx',\n 'application/vnd.apple.keynote': 'key',\n 'application/vnd.apple.numbers': 'numbers',\n 'application/vnd.apple.pages': 'pages',\n 'application/x-7z-compressed': '7z',\n 'application/x-rar-compressed': 'rar',\n 'application/xml': 'xml',\n 'video/mp4': 'mp4',\n 'video/quicktime': 'mov',\n 'audio/mpeg': 'mp3',\n 'audio/wav': 'wav',\n };\n\n if (map[mime]) {\n return map[mime];\n }\n\n const parts = mime.split('/');\n\n if (parts.length === 2) {\n const [, sub] = parts;\n\n if (sub.includes('svg')) {\n return 'svg';\n }\n\n return sub.toLowerCase();\n }\n\n return undefined;\n }\n\n function getFileExtension(originalFilename: string | undefined, mime: string | undefined): string {\n if (originalFilename && originalFilename.includes('.')) {\n const ext = originalFilename.split('.').pop();\n\n if (ext) {\n return ext.toLowerCase();\n }\n }\n\n const fromMime = getExtensionFromMime(mime);\n\n if (fromMime) {\n return fromMime;\n }\n\n return 'file';\n }\n\n async function handleInput(file: File | null, previousValue: FormFieldValue | undefined): Promise<void> {\n if (readOnly || !file) {\n return;\n }\n\n const fileSizeLimit = bytes('4MB');\n\n if (file.size > (fileSizeLimit ?? 0)) {\n toast.error('File size too big (max 4MB)');\n return;\n }\n\n const isImage = file.type.startsWith('image/');\n\n selectedAssetIdRef.current = null;\n\n if (isImage) {\n const reader = new FileReader();\n\n reader.onload = (e) => {\n setBase64PreviewImage(e.target?.result as string);\n };\n\n reader.readAsDataURL(file);\n } else {\n setBase64PreviewImage(null);\n }\n\n setSaving(true);\n\n try {\n // The /assets endpoint stores the blob and creates the asset node in one\n // request; the returned asset (with _id) is connected on entity save.\n const uploaded = await uploadAssetFile(file, projectId);\n\n setValue(name, {\n ...getValues(name),\n value: uploaded.asset,\n });\n } catch (error) {\n console.error(error);\n setBase64PreviewImage(null);\n setValue(name, {\n ...getValues(name),\n value: {\n _id: (previousValue?.value as ImageValue)?._id,\n },\n });\n } finally {\n setSaving(false);\n }\n }\n\n function handleClearing(event: SyntheticEvent): void {\n if (readOnly) {\n return;\n }\n\n event.stopPropagation();\n selectedAssetIdRef.current = null;\n setValue(name, {\n ...getValues(name),\n _id: '',\n value: {\n _id: (getValues(name)?.value as ImageValue)?._id,\n },\n });\n }\n\n function handleCopyUrl(event: SyntheticEvent, fieldValue: FormFieldValue | undefined): void {\n event.stopPropagation();\n\n if (fieldValue?.value && typeof fieldValue.value === 'object' && 'path' in fieldValue.value) {\n navigator.clipboard.writeText(`${IMAGES_BASE_URL}${fieldValue.value.path}`);\n }\n }\n\n function handleUpload(event: SyntheticEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (readOnly) {\n return;\n }\n\n inputFile.current?.click();\n }\n\n function handleSelectAsset(event: SyntheticEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (readOnly) {\n return;\n }\n setIsOpen(false);\n\n const currentAsset = getValues(name)?.value as ImageValue | undefined;\n const selectedAssetId = selectedAssetIdRef.current ?? getReusableAssetId(currentAsset);\n const initialConnection = selectedAssetId\n ? {\n _id: selectedAssetId,\n value: currentAsset,\n }\n : undefined;\n\n appDispatch({\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect: initialConnection,\n disconnect: [],\n },\n },\n });\n\n window.setTimeout(() => {\n actionDispatch({\n type: 'EditRelationship',\n payload: {\n assetAccept: options?.accept,\n connectedEntitiesCount: 0,\n entityId,\n entityName: '_asset',\n initialAssetPath: currentAsset?.path,\n initialConnection,\n relationshipId,\n mode: 'single',\n },\n });\n }, 0);\n }\n\n function handleDownload(event: SyntheticEvent, fieldValue: FormFieldValue | undefined): void {\n event.stopPropagation();\n\n if (fieldValue?.value && typeof fieldValue.value === 'object' && 'path' in fieldValue.value) {\n window.open(`${IMAGES_BASE_URL}${fieldValue.value.path}?download=1`, '_blank');\n }\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel htmlFor={id}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl className=\"fk:flex fk:flex-col fk:w-full fk:min-h-[2.5rem] fk:text-sm\">\n <div\n aria-controls={`image-dropdown-${name}`}\n aria-expanded={isOpen}\n className={`fk:relative fk:flex fk:w-full fk:items-start fk:space-x-2 fk:rounded-md fk:border fk:overflow-hidden fk:focus-visible:outline-hidden fk:ring-offset-background fk:focus-visible:ring-2 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-2 ${\n isOpen ? 'fk:outline-hidden fk:ring-2 fk:ring-ring fk:ring-offset-2' : ''\n } ${dragActive ? 'fk:border-dashed fk:border-2 fk:border-emerald-500 fk:bg-green-50' : 'fk:border-input fk:bg-background'} fk:corner-squircle`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.focus();\n wrapperRef.current?.click();\n setIsOpen(true);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n setIsOpen(true);\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }\n }}\n onDragOver={(e) => {\n if (readOnly) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setDragActive(true);\n }}\n onDragEnter={(e) => {\n if (readOnly) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setDragActive(true);\n }}\n onDragLeave={(e) => {\n if (readOnly) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n\n if (readOnly) {\n return;\n }\n\n const file = e.dataTransfer.files && e.dataTransfer.files[0];\n\n handleInput(file, field.value);\n }}\n ref={wrapperRef}\n role=\"combobox\"\n tabIndex={0}\n >\n <div className=\"fk:flex fk:w-full fk:space-x-2\">\n {/* Initial empty state when there is no image */}\n {!(field.value?.value as ImageValue)?.path && !base64PreviewImage ? (\n <div className=\"fk:flex fk:h-9 fk:w-full fk:px-3 fk:pt-0.5 fk:items-center\">\n <div className=\"fk:flex fk:h-full fk:items-center fk:text-muted-foreground fk:text-sm fk:font-light\">\n <ImageIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" /> Drag or paste file here\n </div>\n <Button\n className=\"fk:ml-auto fk:h-7 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n disabled={readOnly}\n id={id}\n onClick={handleUpload}\n variant=\"ghost\"\n >\n <UploadIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Upload\n </Button>\n <Button\n className=\"fk:ml-2 fk:h-7 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n disabled={readOnly}\n onClick={handleSelectAsset}\n variant=\"ghost\"\n >\n <SearchIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Select\n </Button>\n </div>\n ) : null}\n {/* When there is an image, show the image and its metadata */}\n {(field.value?.value as ImageValue | undefined)?.path && !isOpen ? (\n <div className=\"fk:flex fk:h-9 fk:w-full fk:px-3 fk:pt-0.5 fk:items-center\">\n {(() => {\n const value = field.value?.value as ImageValue;\n const mime = value?.mimeType;\n const path = value?.path || '';\n const isImage = Boolean(\n (mime && mime.startsWith('image/')) || /\\.(png|jpe?g|gif|webp|avif|svg)$/i.test(path)\n );\n\n if (isImage) {\n return (\n <img\n className=\"fk:w-8 fk:h-8 fk:mr-2 fk:rounded-sm fk:object-scale-down fk:corner-squircle\"\n src={`${IMAGES_BASE_URL}${value.path}?w=128&h=128&f=webp`}\n alt=\"Uploaded\"\n />\n );\n }\n\n const ext = getFileExtension(value.originalFilename, value.mimeType);\n const style = (\n defaultStyles as Record<string, Record<string, string | number | boolean | undefined>>\n )[ext];\n\n return (\n <div className=\"fk:w-8 fk:h-8 fk:mr-2 fk:rounded-sm fk:bg-transparent fk:flex fk:items-center fk:justify-center fk:[&>svg]:h-full fk:[&>svg]:w-auto fk:corner-squircle\">\n <FileTypeIcon extension={ext} {...(style || {})} />\n </div>\n );\n })()}\n {bytes((field.value?.value as ImageValue).size)}\n <span className=\"fk:block fk:w-px fk:h-5 fk:mx-2 fk:bg-border\" />\n {(field.value?.value as ImageValue).mimeType}\n {(field.value?.value as ImageValue).width && (field.value?.value as ImageValue).height ? (\n <>\n <span className=\"fk:block fk:w-px fk:h-5 fk:mx-2 fk:bg-border\" />\n {(field.value?.value as ImageValue).width}x{(field.value?.value as ImageValue).height}px\n </>\n ) : null}\n </div>\n ) : null}\n {!(field.value?.value as ImageValue)?.path && base64PreviewImage && (\n <div className=\"fk:flex fk:h-9 fk:w-full fk:px-3 fk:pt-0.5 fk:items-center\">\n <img\n src={base64PreviewImage}\n alt=\"Preview\"\n className=\"fk:mr-2 fk:mt-0.5 fk:rounded-sm fk:h-7 fk:w-7 rounded-md object-cover fk:corner-squircle\"\n />\n Loading image...\n </div>\n )}\n {!(field.value?.value as ImageValue)?.path && !base64PreviewImage && saving ? (\n <div className=\"fk:flex fk:h-9 fk:w-full fk:px-3 fk:pt-0.5 fk:items-center\">\n <div className=\"fk:w-7 fk:h-7 fk:mr-2 fk:rounded-sm fk:bg-muted fk:flex fk:items-center fk:justify-center fk:corner-squircle\">\n <FileOutlineIcon className=\"fk:h-4 fk:w-4 fk:text-muted-foreground\" />\n </div>\n Uploading file...\n </div>\n ) : null}\n {/* When there is an image, show the dropdown menu */}\n {(field.value?.value as ImageValue)?.path ? (\n <div className=\"fk:absolute fk:top-0 fk:right-10\">\n <DropdownMenu modal={false}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <Button\n className=\"fk:h-8 fk:w-8 fk:ml-auto fk:mt-[0.1875rem] fk:rounded-sm fk:corner-squircle\"\n onClick={(event) => {\n event.stopPropagation();\n }}\n onPointerDown={(event) => {\n event.stopPropagation();\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n <EllipsisIcon className=\"fk:h-4 fk:w-4\" />\n </Button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>\n <p>Show actions</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <DropdownMenuContent className=\"fk:w-48\">\n <DropdownMenuGroup>\n <DropdownMenuItem disabled={readOnly} onClick={handleUpload}>\n <UploadIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Upload</span>\n </DropdownMenuItem>\n <DropdownMenuItem disabled={readOnly} onClick={handleSelectAsset}>\n <ImageIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Select asset</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuGroup>\n <DropdownMenuItem onClick={(e) => handleDownload(e, field.value)}>\n <DownloadIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Download</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={(e) => handleCopyUrl(e, field.value)}>\n <CopyIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Copy URL</span>\n </DropdownMenuItem>\n </DropdownMenuGroup>\n <DropdownMenuSeparator />\n <DropdownMenuItem disabled={readOnly} onClick={handleClearing}>\n <ClearFieldIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Clear field</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n ) : null}\n <>\n {!isOpen && ((field.value?.value as ImageValue)?.path || base64PreviewImage) ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:absolute fk:right-[0.1875rem] fk:top-[0.1875rem] fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n wrapperRef.current?.focus();\n wrapperRef.current?.click();\n }\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n <Maximize2 className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Expand field</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </>\n {isOpen && ((field.value?.value as ImageValue)?.path || base64PreviewImage) ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:absolute fk:right-[0.1875rem] fk:top-[0.1875rem] fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n <ClearIcon className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Close</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n <Collapsible\n className=\"fk:w-full fk:space-y-2 fk:ml-0!\"\n onOpenChange={setIsOpen}\n open={isOpen && (Boolean((field.value?.value as ImageValue)?.path) || Boolean(base64PreviewImage))}\n >\n <CollapsibleContent className=\"fk:w-full\">\n <div className=\"fk:flex fk:w-full fk:h-[30vh]\" id={`image-dropdown-${name}`}>\n {(field.value?.value as ImageValue | undefined)?.path\n ? (() => {\n const value = field.value?.value as ImageValue;\n const mime = value?.mimeType;\n const path = value?.path || '';\n const isImage = Boolean(\n (mime && mime.startsWith('image/')) || /\\.(png|jpe?g|gif|webp|avif|svg)$/i.test(path)\n );\n\n if (isImage) {\n return (\n <img\n className=\"fk:w-full fk:rounded-md fk:object-scale-down fk:corner-squircle\"\n src={`${IMAGES_BASE_URL}${value.path}?w=624&h=624&f=webp`}\n alt=\"Uploaded\"\n />\n );\n }\n\n const ext = getFileExtension(value.originalFilename, value.mimeType);\n const style = (\n defaultStyles as Record<string, Record<string, string | number | boolean | undefined>>\n )[ext];\n\n return (\n <div className=\"fk:w-full fk:h-full fk:rounded-md fk:bg-muted/40 fk:flex fk:flex-col fk:items-center fk:justify-center fk:text-muted-foreground fk:corner-squircle\">\n <div className=\"fk:w-16 fk:h-16 fk:rounded-sm fk:bg-transparent fk:flex fk:items-center fk:justify-center fk:[&>svg]:h-full fk:[&>svg]:w-auto fk:corner-squircle\">\n <FileTypeIcon extension={ext} {...(style || {})} />\n </div>\n <div className=\"fk:mt-3 fk:text-sm\">\n {value.originalFilename || 'File'} · {bytes(value.size)} · {value.mimeType}\n </div>\n <div className=\"fk:mt-1 fk:text-xs\">Preview not available</div>\n </div>\n );\n })()\n : null}\n </div>\n </CollapsibleContent>\n </Collapsible>\n {saving ? (\n <div className=\"fk:absolute fk:m-0! fk:top-0 fk:left-0 fk:right-0 fk:bottom-0 fk:w-full fk:bg-muted-foreground/5 fk:overflow-hidden\">\n <div className=\"fk:animate-progress fk:w-full fk:h-full fk:bg-muted-foreground/10\" />\n </div>\n ) : null}\n </div>\n </FormControl>\n <input\n accept={options?.accept ? options.accept : 'image/*'}\n className=\"fk:hidden\"\n disabled={readOnly}\n id={`file-upload-${name}`}\n onChange={(e) => {\n const file = e.currentTarget.files && e.currentTarget.files[0];\n\n handleInput(file, field.value);\n }}\n ref={inputFile}\n type=\"file\"\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n\nfunction normalizeSelectedAsset(value: unknown): ImageValue | null {\n if (!value || typeof value !== 'object' || !('_id' in value) || !('path' in value)) {\n return null;\n }\n\n const asset = value as Partial<ImageValue>;\n\n return {\n _id: String(asset._id ?? ''),\n path: String(asset.path ?? ''),\n originalFilename: String(asset.originalFilename ?? ''),\n size: Number(asset.size ?? 0),\n mimeType: String(asset.mimeType ?? ''),\n lqip: String(asset.lqip ?? ''),\n width: Number(asset.width ?? 0),\n height: Number(asset.height ?? 0),\n };\n}\n\nfunction getReusableAssetId(asset: ImageValue | undefined): string {\n if (!asset?._id || asset._id.includes(':')) {\n return '';\n }\n\n return asset._id;\n}\n","import { useId } from 'react';\nimport type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Input } from '../../ui/primitives/input';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Number({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'number'>): JSX.Element {\n const { name, label, options, dataType } = fieldSchema;\n const id = useId();\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n const rawValue = event.currentTarget.value;\n let parsedValue: number | '';\n\n // Handle empty input\n if (rawValue === '') {\n parsedValue = '';\n } else {\n // Parse as float or integer based on dataType\n parsedValue = dataType === 'float' ? parseFloat(rawValue) : parseInt(rawValue, 10);\n\n // If parsing results in NaN, use empty string\n if (isNaN(parsedValue)) {\n parsedValue = '';\n }\n }\n\n setValue(name, {\n ...previousValue,\n value: parsedValue,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel htmlFor={id}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl>\n <Input\n className=\"fk:w-full fk:mt-0.75\"\n disabled={readOnly || field.value?.disabled}\n id={id}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n step={dataType === 'float' ? 'any' : '1'}\n type=\"number\"\n value={(field.value?.value as string | number | undefined) ?? ''}\n />\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';\nimport { DayButton, DayPicker, getDefaultClassNames } from 'react-day-picker';\nimport { cn } from '../lib/utils';\nimport { Button, buttonVariants } from './button';\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant'];\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n 'fk:group/calendar fk:bg-background fk:p-3 fk:[--cell-size:--spacing(8)] fk:in-data-[slot=card-content]:bg-transparent fk:in-data-[slot=popover-content]:bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString('default', { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn('fk:relative fk:flex fk:flex-col fk:gap-4 fk:md:flex-row', defaultClassNames.months),\n month: cn('fk:flex fk:w-full fk:flex-col fk:gap-4', defaultClassNames.month),\n nav: cn(\n 'fk:absolute fk:inset-x-0 fk:top-0 fk:flex fk:w-full fk:items-center fk:justify-between fk:gap-1',\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'fk:size-(--cell-size) fk:p-0 fk:select-none fk:aria-disabled:opacity-50',\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'fk:size-(--cell-size) fk:p-0 fk:select-none fk:aria-disabled:opacity-50',\n defaultClassNames.button_next\n ),\n month_caption: cn(\n 'fk:flex fk:h-(--cell-size) fk:w-full fk:items-center fk:justify-center fk:px-(--cell-size)',\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n 'fk:flex fk:h-(--cell-size) fk:w-full fk:items-center fk:justify-center fk:gap-1.5 fk:text-sm fk:font-medium',\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n 'fk:relative fk:rounded-md fk:border fk:border-input fk:shadow-xs fk:has-focus:border-ring fk:has-focus:ring-[3px] fk:has-focus:ring-ring/50 fk:corner-squircle',\n defaultClassNames.dropdown_root\n ),\n dropdown: cn('fk:absolute fk:inset-0 fk:bg-popover fk:opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'fk:font-medium fk:select-none',\n captionLayout === 'label'\n ? 'fk:text-sm'\n : 'fk:flex fk:h-8 fk:items-center fk:gap-1 fk:rounded-md fk:pr-1 fk:pl-2 fk:text-sm fk:[&>svg]:size-3.5 fk:[&>svg]:text-muted-foreground fk:corner-squircle',\n defaultClassNames.caption_label\n ),\n table: 'fk:w-full fk:border-collapse',\n weekdays: cn('fk:flex', defaultClassNames.weekdays),\n weekday: cn(\n 'fk:flex-1 fk:rounded-md fk:text-[0.8rem] fk:font-normal fk:text-muted-foreground fk:select-none fk:corner-squircle',\n defaultClassNames.weekday\n ),\n week: cn('fk:mt-2 fk:flex fk:w-full', defaultClassNames.week),\n week_number_header: cn('fk:w-(--cell-size) fk:select-none', defaultClassNames.week_number_header),\n week_number: cn('fk:text-[0.8rem] fk:text-muted-foreground fk:select-none', defaultClassNames.week_number),\n day: cn(\n 'fk:group/day fk:relative fk:aspect-square fk:h-full fk:w-full fk:p-0 fk:text-center fk:select-none fk:[&:last-child[data-selected=true]_button]:rounded-r-md',\n props.showWeekNumber\n ? 'fk:[&:nth-child(2)[data-selected=true]_button]:rounded-l-md'\n : 'fk:[&:first-child[data-selected=true]_button]:rounded-l-md',\n defaultClassNames.day\n ),\n range_start: cn('fk:rounded-l-md fk:bg-accent fk:corner-squircle', defaultClassNames.range_start),\n range_middle: cn('fk:rounded-none fk:corner-squircle', defaultClassNames.range_middle),\n range_end: cn('fk:rounded-r-md fk:bg-accent fk:corner-squircle', defaultClassNames.range_end),\n today: cn(\n 'fk:rounded-md fk:bg-accent fk:text-accent-foreground fk:data-[selected=true]:rounded-none fk:corner-squircle',\n defaultClassNames.today\n ),\n outside: cn('fk:text-muted-foreground fk:aria-selected:text-muted-foreground', defaultClassNames.outside),\n disabled: cn('fk:text-muted-foreground fk:opacity-50', defaultClassNames.disabled),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return <ChevronLeftIcon className={cn('size-4', className)} {...props} />;\n }\n\n if (orientation === 'right') {\n return <ChevronRightIcon className={cn('size-4', className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn('size-4', className)} {...props} />;\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"fk:flex fk:size-(--cell-size) fk:items-center fk:justify-center fk:text-center\">\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'fk:flex fk:aspect-square fk:size-auto fk:w-full fk:min-w-(--cell-size) fk:flex-col fk:gap-1 fk:leading-none fk:font-normal fk:group-data-[focused=true]/day:relative fk:group-data-[focused=true]/day:z-10 fk:group-data-[focused=true]/day:border-ring fk:group-data-[focused=true]/day:ring-[3px] fk:group-data-[focused=true]/day:ring-ring/50 fk:data-[range-end=true]:rounded-md fk:data-[range-end=true]:rounded-r-md fk:data-[range-end=true]:bg-primary fk:data-[range-end=true]:text-primary-foreground fk:data-[range-middle=true]:rounded-none fk:data-[range-middle=true]:bg-accent fk:data-[range-middle=true]:text-accent-foreground fk:data-[range-start=true]:rounded-md fk:data-[range-start=true]:rounded-l-md fk:data-[range-start=true]:bg-primary fk:data-[range-start=true]:text-primary-foreground fk:data-[selected-single=true]:bg-primary fk:data-[selected-single=true]:text-primary-foreground fk:dark:hover:text-accent-foreground fk:[&>span]:text-xs fk:[&>span]:opacity-70',\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","import { useId } from 'react';\nimport type { JSX, SyntheticEvent } from 'react';\nimport { format } from 'date-fns';\nimport { Calendar as CalendarIcon, X as ClearIcon } from 'lucide-react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Input } from '../../ui/primitives/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../ui/primitives/popover';\nimport { Button } from '../../ui/primitives/button';\nimport { Calendar } from '../../ui/primitives/calendar';\nimport { cn } from '../../ui/lib/utils';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function DateTime({\n control,\n fieldSchema,\n getValues,\n readOnly,\n setValue,\n}: FormFieldParams<'datetime'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n const id = useId();\n\n function handleSelect(date: Date | undefined, previousValue: FormFieldValue | undefined): void {\n setValue(name, {\n ...previousValue,\n value: date ? date.toISOString() : '',\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n function handleClearing(event: SyntheticEvent): void {\n event.preventDefault();\n setValue(name, { ...getValues(name), value: undefined });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n }\n }}\n >\n <FormLabel htmlFor={id}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl>\n <Popover>\n <PopoverTrigger asChild>\n <Button\n className={cn(\n 'fk:w-full fk:justify-start fk:h-10 fk:text-left fk:font-normal fk:hover:bg-transparent fk:relative',\n !field.value?.value && 'fk:text-muted-foreground'\n )}\n disabled={readOnly || field.value?.disabled}\n id={id}\n variant=\"outline\"\n >\n <div className=\"fk:flex fk:items-center fk:w-full\">\n <span className=\"fk:grow\">\n {field.value?.value\n ? format(new Date(field.value.value as string), 'PPP') +\n ' at ' +\n format(new Date(field.value.value as string), 'HH:mm')\n : 'Pick a date and time'}\n </span>\n <div className=\"fk:flex fk:items-center fk:gap-1\">\n {field.value?.value && (\n <span\n className=\"fk:p-2 fk:text-muted-foreground fk:hover:text-accent-foreground fk:cursor-pointer\"\n onClick={(e) => {\n e.stopPropagation();\n handleClearing(e);\n }}\n role=\"button\"\n aria-label=\"Clear date\"\n >\n <ClearIcon className=\"fk:h-4 fk:w-4\" />\n </span>\n )}\n <CalendarIcon className=\"fk:h-4 fk:w-4 fk:text-muted-foreground fk:hover:text-accent-foreground\" />\n </div>\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"fk:w-auto fk:p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={field.value?.value ? new Date(field.value.value as string) : undefined}\n onSelect={(date) => handleSelect(date, field.value)}\n initialFocus\n />\n <div className=\"fk:p-3 fk:border-t fk:border-border\">\n <label htmlFor=\"time\" className=\"fk:text-sm fk:font-medium\">\n Time\n </label>\n <Input\n className=\"fk:mt-1 fk:w-[90px]\"\n id=\"time\"\n onChange={(e) => {\n const timeValue = e.target.value;\n const [hours, minutes] = timeValue.split(':');\n\n const date = field.value?.value ? new Date(field.value.value as string) : new Date();\n date.setHours(parseInt(hours));\n date.setMinutes(parseInt(minutes));\n\n setValue(name, {\n ...field.value,\n value: date.toISOString(),\n });\n }}\n type=\"time\"\n value={field.value?.value ? format(new Date(field.value.value as string), 'HH:mm') : ''}\n />\n </div>\n </PopoverContent>\n </Popover>\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import type { EditorInstance } from 'novel';\n\ntype HeadingLevel = 1 | 2 | 3;\ntype EditorRange = {\n from: number;\n to: number;\n};\n\ntype SocialEmbedOptions = {\n src: string;\n};\n\nexport type NovelEditorInput = EditorInstance | null | undefined;\n\nexport interface NovelEditorChain {\n focus: () => NovelEditorChain;\n clearNodes: () => NovelEditorChain;\n deleteRange: (range: EditorRange) => NovelEditorChain;\n toggleNode: (typeOrName: string, toggleTypeOrName: string) => NovelEditorChain;\n setNode: (typeOrName: string, attributes?: { level?: HeadingLevel }) => NovelEditorChain;\n toggleBold: () => NovelEditorChain;\n toggleItalic: () => NovelEditorChain;\n toggleUnderline: () => NovelEditorChain;\n toggleStrike: () => NovelEditorChain;\n toggleCode: () => NovelEditorChain;\n toggleHeading: (attributes: { level: HeadingLevel }) => NovelEditorChain;\n toggleTaskList: () => NovelEditorChain;\n toggleBulletList: () => NovelEditorChain;\n toggleOrderedList: () => NovelEditorChain;\n toggleBlockquote: () => NovelEditorChain;\n toggleCodeBlock: () => NovelEditorChain;\n setYoutubeVideo: (attributes: SocialEmbedOptions) => NovelEditorChain;\n setTweet: (attributes: SocialEmbedOptions) => NovelEditorChain;\n run: () => boolean;\n}\n\nexport type NovelEditorWithRichCommands = Omit<EditorInstance, 'chain'> & {\n chain: () => NovelEditorChain;\n};\n\nexport function asNovelEditorWithRichCommands(editor: NovelEditorInput): NovelEditorWithRichCommands | null {\n if (editor == null) {\n return null;\n }\n\n return editor as unknown as NovelEditorWithRichCommands;\n}\n","import {\n CheckSquare,\n Code,\n Heading1,\n Heading2,\n Heading3,\n ImageIcon,\n List,\n ListOrdered,\n Text,\n TextQuote,\n Twitter,\n Youtube,\n} from 'lucide-react';\nimport { Command, createSuggestionItems, renderItems } from 'novel';\nimport { asNovelEditorWithRichCommands } from './novel-editor';\n// TODO: Add image upload function\n// import { uploadFn } from './image-upload';\n\nexport const suggestionItems = createSuggestionItems([\n {\n title: 'Text',\n description: 'Just start typing with plain text.',\n searchTerms: ['p', 'paragraph'],\n icon: <Text size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).toggleNode('paragraph', 'paragraph').run();\n },\n },\n {\n title: 'To-do List',\n description: 'Track tasks with a to-do list.',\n searchTerms: ['todo', 'task', 'list', 'check', 'checkbox'],\n icon: <CheckSquare size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).toggleTaskList().run();\n },\n },\n {\n title: 'Heading 1',\n description: 'Big section heading.',\n searchTerms: ['title', 'big', 'large'],\n icon: <Heading1 size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).setNode('heading', { level: 1 }).run();\n },\n },\n {\n title: 'Heading 2',\n description: 'Medium section heading.',\n searchTerms: ['subtitle', 'medium'],\n icon: <Heading2 size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).setNode('heading', { level: 2 }).run();\n },\n },\n {\n title: 'Heading 3',\n description: 'Small section heading.',\n searchTerms: ['subtitle', 'small'],\n icon: <Heading3 size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).setNode('heading', { level: 3 }).run();\n },\n },\n {\n title: 'Bullet List',\n description: 'Create a simple bullet list.',\n searchTerms: ['unordered', 'point'],\n icon: <List size={18} />,\n command: ({ editor, range }) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().deleteRange(range).toggleBulletList().run();\n },\n },\n {\n title: 'Numbered List',\n description: 'Create a list with numbering.',\n searchTerms: ['ordered'],\n icon: <ListOrdered size={18} />,\n command: ({ editor, range }) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().deleteRange(range).toggleOrderedList().run();\n },\n },\n {\n title: 'Quote',\n description: 'Capture a quote.',\n searchTerms: ['blockquote'],\n icon: <TextQuote size={18} />,\n command: ({ editor, range }) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor\n .chain()\n .focus()\n .deleteRange(range)\n .toggleNode('paragraph', 'paragraph')\n .toggleBlockquote()\n .run();\n },\n },\n {\n title: 'Code',\n description: 'Capture a code snippet.',\n searchTerms: ['codeblock'],\n icon: <Code size={18} />,\n command: ({ editor, range }) => editor.chain().focus().deleteRange(range).toggleCodeBlock().run(),\n },\n {\n title: 'Image',\n description: 'Upload an image from your computer.',\n searchTerms: ['photo', 'picture', 'media'],\n icon: <ImageIcon size={18} />,\n command: ({ editor, range }) => {\n editor.chain().focus().deleteRange(range).run();\n // upload image\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/*';\n input.onchange = async () => {\n if (input.files?.length) {\n // const file = input.files[0];\n // const pos = editor.view.state.selection.from;\n // uploadFn(file, editor.view, pos);\n }\n };\n input.click();\n },\n },\n {\n title: 'Youtube',\n description: 'Embed a Youtube video.',\n searchTerms: ['video', 'youtube', 'embed'],\n icon: <Youtube size={18} />,\n command: ({ editor, range }) => {\n const videoLink = prompt('Please enter Youtube Video Link');\n //From https://regexr.com/3dj5t\n const ytregex = new RegExp(\n /^((?:https?:)?\\/\\/)?((?:www|m)\\.)?((?:youtube\\.com|youtu.be))(\\/(?:[\\w-]+\\?v=|embed\\/|v\\/)?)([\\w-]+)(\\S+)?$/\n );\n\n if (ytregex.test(videoLink ?? '')) {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setYoutubeVideo({\n src: videoLink ?? '',\n })\n .run();\n } else {\n if (videoLink !== null) {\n alert('Please enter a correct Youtube Video Link');\n }\n }\n },\n },\n {\n title: 'Twitter',\n description: 'Embed a Tweet.',\n searchTerms: ['twitter', 'embed'],\n icon: <Twitter size={18} />,\n command: ({ editor, range }) => {\n const tweetLink = prompt('Please enter Twitter Link');\n const tweetRegex = new RegExp(/^https?:\\/\\/(www\\.)?x\\.com\\/([a-zA-Z0-9_]{1,15})(\\/status\\/(\\d+))?(\\/\\S*)?$/);\n\n if (tweetRegex.test(tweetLink ?? '')) {\n editor\n .chain()\n .focus()\n .deleteRange(range)\n .setTweet({\n src: tweetLink ?? '',\n })\n .run();\n } else {\n if (tweetLink !== null) {\n alert('Please enter a correct Twitter Link');\n }\n }\n },\n },\n]);\n\nexport const slashCommand = Command.configure({\n suggestion: {\n items: () => suggestionItems,\n render: renderItems,\n },\n});\n","import { Check, ChevronDown } from 'lucide-react';\nimport { EditorBubbleItem, useEditor } from 'novel';\nimport { Button } from '../../../../ui/primitives/button';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../../ui/primitives/popover';\n\nexport interface BubbleColorMenuItem {\n name: string;\n color: string;\n}\n\nconst TEXT_COLORS: BubbleColorMenuItem[] = [\n {\n name: 'Default',\n color: 'var(--novel-black)',\n },\n {\n name: 'Purple',\n color: '#9333EA',\n },\n {\n name: 'Red',\n color: '#E00000',\n },\n {\n name: 'Yellow',\n color: '#EAB308',\n },\n {\n name: 'Blue',\n color: '#2563EB',\n },\n {\n name: 'Green',\n color: '#008A00',\n },\n {\n name: 'Orange',\n color: '#FFA500',\n },\n {\n name: 'Pink',\n color: '#BA4081',\n },\n {\n name: 'Gray',\n color: '#A8A29E',\n },\n];\n\nconst HIGHLIGHT_COLORS: BubbleColorMenuItem[] = [\n {\n name: 'Default',\n color: 'var(--novel-highlight-default)',\n },\n {\n name: 'Purple',\n color: 'var(--novel-highlight-purple)',\n },\n {\n name: 'Red',\n color: 'var(--novel-highlight-red)',\n },\n {\n name: 'Yellow',\n color: 'var(--novel-highlight-yellow)',\n },\n {\n name: 'Blue',\n color: 'var(--novel-highlight-blue)',\n },\n {\n name: 'Green',\n color: 'var(--novel-highlight-green)',\n },\n {\n name: 'Orange',\n color: 'var(--novel-highlight-orange)',\n },\n {\n name: 'Pink',\n color: 'var(--novel-highlight-pink)',\n },\n {\n name: 'Gray',\n color: 'var(--novel-highlight-gray)',\n },\n];\n\ninterface ColorSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const ColorSelector = ({ open, onOpenChange }: ColorSelectorProps) => {\n const { editor } = useEditor();\n\n if (!editor) return null;\n\n const activeColorItem = TEXT_COLORS.find(({ color }) => editor.isActive('textStyle', { color }));\n const activeHighlightItem = HIGHLIGHT_COLORS.find(({ color }) => editor.isActive('highlight', { color }));\n\n return (\n <Popover modal={true} open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Button size=\"sm\" className=\"fk:gap-2 fk:rounded-none fk:corner-squircle\" variant=\"ghost\">\n <span\n className=\"fk:rounded-xs fk:px-1 fk:corner-squircle\"\n style={{\n color: activeColorItem?.color,\n backgroundColor: activeHighlightItem?.color,\n }}\n >\n A\n </span>\n <ChevronDown className=\"fk:h-4 fk:w-4\" />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent\n sideOffset={5}\n className=\"fk:my-1 fk:flex fk:max-h-80 fk:w-48 fk:flex-col fk:overflow-hidden fk:overflow-y-auto fk:rounded-sm fk:border fk:p-1 fk:shadow-xl fk:corner-squircle\"\n align=\"start\"\n >\n <div className=\"fk:flex fk:flex-col\">\n <div className=\"fk:my-1 fk:px-2 fk:text-sm fk:font-semibold fk:text-muted-foreground\">Color</div>\n {TEXT_COLORS.map(({ name, color }) => (\n <EditorBubbleItem\n key={name}\n onSelect={() => {\n editor.commands.unsetColor();\n name !== 'Default' &&\n editor\n .chain()\n .focus()\n .setColor(color || '')\n .run();\n onOpenChange(false);\n }}\n className=\"fk:flex fk:cursor-pointer fk:items-center fk:justify-between fk:px-2 fk:py-1 fk:text-sm fk:hover:bg-muted\"\n >\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <div className=\"fk:rounded-xs fk:border fk:px-2 fk:py-px fk:font-medium fk:corner-squircle\" style={{ color }}>\n A\n </div>\n <span>{name}</span>\n </div>\n </EditorBubbleItem>\n ))}\n </div>\n <div>\n <div className=\"fk:my-1 fk:px-2 fk:text-sm fk:font-semibold fk:text-muted-foreground\">Background</div>\n {HIGHLIGHT_COLORS.map(({ name, color }) => (\n <EditorBubbleItem\n key={name}\n onSelect={() => {\n editor.commands.unsetHighlight();\n name !== 'Default' && editor.chain().focus().setHighlight({ color }).run();\n onOpenChange(false);\n }}\n className=\"fk:flex fk:cursor-pointer fk:items-center fk:justify-between fk:px-2 fk:py-1 fk:text-sm fk:hover:bg-muted\"\n >\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <div\n className=\"fk:rounded-xs fk:border fk:px-2 fk:py-px fk:font-medium fk:corner-squircle\"\n style={{ backgroundColor: color }}\n >\n A\n </div>\n <span>{name}</span>\n </div>\n {editor.isActive('highlight', { color }) && <Check className=\"fk:h-4 fk:w-4\" />}\n </EditorBubbleItem>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n );\n};\n","import { Button } from '../../../../ui/primitives/button';\nimport { PopoverContent } from '../../../../ui/primitives/popover';\nimport { cn } from '../../../../ui/lib/utils';\nimport { Popover } from 'radix-ui';\nimport { Check, Trash } from 'lucide-react';\nimport { useEditor } from 'novel';\nimport { useEffect, useRef } from 'react';\n\nexport function isValidUrl(url: string) {\n try {\n new URL(url);\n return true;\n } catch (_e) {\n return false;\n }\n}\n\nexport function getUrlFromString(str: string) {\n if (isValidUrl(str)) return str;\n try {\n if (str.includes('.') && !str.includes(' ')) {\n return new URL(`https://${str}`).toString();\n }\n } catch (_e) {\n return null;\n }\n}\n\ninterface LinkSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const LinkSelector = ({ open, onOpenChange }: LinkSelectorProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const { editor } = useEditor();\n\n // Autofocus on input by default\n useEffect(() => {\n inputRef.current?.focus();\n });\n\n if (!editor) return null;\n\n return (\n <Popover.Root modal={true} open={open} onOpenChange={onOpenChange}>\n <Popover.Trigger asChild>\n <Button size=\"sm\" variant=\"ghost\" className=\"fk:gap-2 fk:rounded-none fk:border-none fk:corner-squircle\">\n <p className=\"fk:text-base\">↗</p>\n <p\n className={cn('fk:underline fk:decoration-stone-400 fk:underline-offset-4', {\n 'fk:text-blue-500': editor.isActive('link'),\n })}\n >\n Link\n </p>\n </Button>\n </Popover.Trigger>\n <PopoverContent align=\"start\" className=\"fk:w-60 fk:p-0\" sideOffset={10}>\n <form\n onSubmit={(e) => {\n const target = e.currentTarget as HTMLFormElement;\n e.preventDefault();\n const input = target[0] as HTMLInputElement;\n const url = getUrlFromString(input.value);\n if (url) {\n editor.chain().focus().setLink({ href: url }).run();\n onOpenChange(false);\n }\n }}\n className=\"fk:flex fk:p-1\"\n >\n <input\n ref={inputRef}\n type=\"text\"\n placeholder=\"Paste a link\"\n className=\"fk:flex-1 fk:bg-background fk:p-1 fk:text-sm fk:outline-hidden\"\n defaultValue={editor.getAttributes('link').href || ''}\n />\n {editor.getAttributes('link').href ? (\n <Button\n size=\"icon\"\n variant=\"outline\"\n type=\"button\"\n className=\"fk:flex fk:h-8 fk:items-center fk:rounded-xs fk:p-1 fk:text-red-600 fk:transition-all fk:hover:bg-red-100 fk:dark:hover:bg-red-800 fk:corner-squircle\"\n onClick={() => {\n editor.chain().focus().unsetLink().run();\n if (inputRef.current) inputRef.current.value = '';\n onOpenChange(false);\n }}\n >\n <Trash className=\"fk:h-4 fk:w-4\" />\n </Button>\n ) : (\n <Button size=\"icon\" className=\"fk:h-8\">\n <Check className=\"fk:h-4 fk:w-4\" />\n </Button>\n )}\n </form>\n </PopoverContent>\n </Popover.Root>\n );\n};\n","import {\n Check,\n CheckSquare,\n ChevronDown,\n Code,\n Heading1,\n Heading2,\n Heading3,\n ListOrdered,\n type LucideIcon,\n TextIcon,\n TextQuote,\n} from 'lucide-react';\nimport { EditorBubbleItem, useEditor } from 'novel';\nimport { Button } from '../../../../ui/primitives/button';\nimport { Popover } from 'radix-ui';\nimport { asNovelEditorWithRichCommands, type NovelEditorInput } from '../novel-editor';\n\nexport type SelectorItem = {\n name: string;\n icon: LucideIcon;\n command: (editor: NovelEditorInput) => void;\n isActive: (editor: NovelEditorInput) => boolean;\n};\n\nconst items: SelectorItem[] = [\n {\n name: 'Text',\n icon: TextIcon,\n command: (editor) => editor?.chain().focus().clearNodes().run(),\n // I feel like there has to be a more efficient way to do this – feel free to PR if you know how!\n isActive: (editor) =>\n editor != null &&\n editor.isActive('paragraph') &&\n !editor.isActive('bulletList') &&\n !editor.isActive('orderedList'),\n },\n {\n name: 'Heading 1',\n icon: Heading1,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleHeading({ level: 1 }).run();\n },\n isActive: (editor) => editor != null && editor.isActive('heading', { level: 1 }),\n },\n {\n name: 'Heading 2',\n icon: Heading2,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleHeading({ level: 2 }).run();\n },\n isActive: (editor) => editor != null && editor.isActive('heading', { level: 2 }),\n },\n {\n name: 'Heading 3',\n icon: Heading3,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleHeading({ level: 3 }).run();\n },\n isActive: (editor) => editor != null && editor.isActive('heading', { level: 3 }),\n },\n {\n name: 'To-do List',\n icon: CheckSquare,\n command: (editor) => editor?.chain().focus().clearNodes().toggleTaskList().run(),\n isActive: (editor) => editor != null && editor.isActive('taskItem'),\n },\n {\n name: 'Bullet List',\n icon: ListOrdered,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleBulletList().run();\n },\n isActive: (editor) => editor != null && editor.isActive('bulletList'),\n },\n {\n name: 'Numbered List',\n icon: ListOrdered,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleOrderedList().run();\n },\n isActive: (editor) => editor != null && editor.isActive('orderedList'),\n },\n {\n name: 'Quote',\n icon: TextQuote,\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().clearNodes().toggleBlockquote().run();\n },\n isActive: (editor) => editor != null && editor.isActive('blockquote'),\n },\n {\n name: 'Code',\n icon: Code,\n command: (editor) => editor?.chain().focus().clearNodes().toggleCodeBlock().run(),\n isActive: (editor) => editor != null && editor.isActive('codeBlock'),\n },\n];\ninterface NodeSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const NodeSelector = ({ open, onOpenChange }: NodeSelectorProps) => {\n const { editor } = useEditor();\n if (!editor) return null;\n const activeItem = items.filter((item) => item.isActive(editor)).pop() ?? {\n name: 'Multiple',\n };\n\n return (\n <Popover.Root modal={true} open={open} onOpenChange={onOpenChange}>\n <Popover.Trigger asChild className=\"fk:gap-2 fk:rounded-none fk:border-none fk:hover:bg-muted fk:focus:ring-0 fk:corner-squircle\">\n <Button size=\"sm\" variant=\"ghost\" className=\"fk:gap-2\">\n <span className=\"fk:whitespace-nowrap fk:text-sm\">{activeItem.name}</span>\n <ChevronDown className=\"fk:h-4 fk:w-4\" />\n </Button>\n </Popover.Trigger>\n <Popover.Content sideOffset={5} align=\"start\" className=\"fk:w-48 fk:p-1\">\n {items.map((item) => (\n <EditorBubbleItem\n key={item.name}\n onSelect={(editor) => {\n item.command(editor);\n onOpenChange(false);\n }}\n className=\"fk:flex fk:cursor-pointer fk:items-center fk:justify-between fk:rounded-xs fk:px-2 fk:py-1 fk:text-sm fk:hover:bg-muted fk:corner-squircle\"\n >\n <div className=\"fk:flex fk:items-center fk:space-x-2\">\n <div className=\"fk:rounded-xs fk:border fk:p-1 fk:corner-squircle\">\n <item.icon className=\"fk:h-3 fk:w-3\" />\n </div>\n <span>{item.name}</span>\n </div>\n {activeItem.name === item.name && <Check className=\"fk:h-4 fk:w-4\" />}\n </EditorBubbleItem>\n ))}\n </Popover.Content>\n </Popover.Root>\n );\n};\n","import { Button } from '../../../../ui/primitives/button';\nimport { cn } from '../../../../ui/lib/utils';\nimport { SigmaIcon } from 'lucide-react';\nimport { useEditor } from 'novel';\n\nexport const MathSelector = () => {\n const { editor } = useEditor();\n\n if (!editor) return null;\n\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"fk:rounded-none fk:w-12 fk:corner-squircle\"\n onClick={(evt) => {\n if (editor.isActive('math')) {\n editor.chain().focus().unsetLatex().run();\n } else {\n const { from, to } = editor.state.selection;\n const latex = editor.state.doc.textBetween(from, to);\n\n if (!latex) return;\n\n editor.chain().focus().setLatex({ latex }).run();\n }\n }}\n >\n <SigmaIcon className={cn('fk:size-4', { 'fk:text-blue-500': editor.isActive('math') })} strokeWidth={2.3} />\n </Button>\n );\n};\n","import { Button } from '../../../../ui/primitives/button';\nimport { cn } from '../../../../ui/lib/utils';\nimport { BoldIcon, CodeIcon, ItalicIcon, StrikethroughIcon, UnderlineIcon } from 'lucide-react';\nimport { EditorBubbleItem, useEditor } from 'novel';\nimport type { SelectorItem } from './node-selector';\nimport { asNovelEditorWithRichCommands } from '../novel-editor';\n\nexport const TextButtons = () => {\n const { editor } = useEditor();\n\n if (!editor) return null;\n\n const items: SelectorItem[] = [\n {\n name: 'bold',\n isActive: (editor) => editor != null && editor.isActive('bold'),\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().toggleBold().run();\n },\n icon: BoldIcon,\n },\n {\n name: 'italic',\n isActive: (editor) => editor != null && editor.isActive('italic'),\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().toggleItalic().run();\n },\n icon: ItalicIcon,\n },\n {\n name: 'underline',\n isActive: (editor) => editor != null && editor.isActive('underline'),\n command: (editor) => editor?.chain().focus().toggleUnderline().run(),\n icon: UnderlineIcon,\n },\n {\n name: 'strike',\n isActive: (editor) => editor != null && editor.isActive('strike'),\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().toggleStrike().run();\n },\n icon: StrikethroughIcon,\n },\n {\n name: 'code',\n isActive: (editor) => editor != null && editor.isActive('code'),\n command: (editor) => {\n const richEditor = asNovelEditorWithRichCommands(editor);\n\n if (!richEditor) {\n return;\n }\n\n richEditor.chain().focus().toggleCode().run();\n },\n icon: CodeIcon,\n },\n ];\n\n return (\n <div className=\"fk:flex\">\n {items.map((item) => (\n <EditorBubbleItem\n key={item.name}\n onSelect={(editor) => {\n item.command(editor);\n }}\n >\n <Button size=\"sm\" className=\"fk:rounded-none fk:corner-squircle\" onClick={(e) => e.preventDefault()} variant=\"ghost\">\n <item.icon\n className={cn('fk:h-4 fk:w-4', {\n 'fk:text-blue-500': item.isActive(editor),\n })}\n />\n </Button>\n </EditorBubbleItem>\n ))}\n </div>\n );\n};\n","export default function Magic({ className }: { className: string }) {\n return (\n <svg\n width=\"469\"\n height=\"469\"\n viewBox=\"0 0 469 469\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n shapeRendering=\"geometricPrecision\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n className={className}\n >\n <title>Magic AI icon</title>\n\n <path\n d=\"M237.092 62.3004L266.754 71.4198C267.156 71.5285 267.51 71.765 267.765 72.0934C268.02 72.4218 268.161 72.8243 268.166 73.2399C268.172 73.6555 268.042 74.0616 267.796 74.3967C267.55 74.7318 267.201 74.9777 266.803 75.097L237.141 84.3145C236.84 84.4058 236.566 84.5699 236.344 84.7922C236.121 85.0146 235.957 85.2883 235.866 85.5893L226.747 115.252C226.638 115.653 226.401 116.008 226.073 116.263C225.745 116.517 225.342 116.658 224.926 116.664C224.511 116.669 224.105 116.539 223.77 116.293C223.435 116.047 223.189 115.699 223.069 115.301L213.852 85.6383C213.761 85.3374 213.597 85.0636 213.374 84.8412C213.152 84.6189 212.878 84.4548 212.577 84.3635L182.914 75.2441C182.513 75.1354 182.158 74.8989 181.904 74.5705C181.649 74.2421 181.508 73.8396 181.503 73.424C181.497 73.0084 181.627 72.6023 181.873 72.2672C182.119 71.9321 182.467 71.6863 182.865 71.5669L212.528 62.3494C212.829 62.2582 213.103 62.0941 213.325 61.8717C213.547 61.6494 213.712 61.3756 213.803 61.0747L222.922 31.4121C223.031 31.0109 223.267 30.656 223.596 30.4013C223.924 30.1465 224.327 30.0057 224.742 30.0002C225.158 29.9946 225.564 30.1247 225.899 30.3706C226.234 30.6165 226.48 30.9649 226.599 31.363L235.817 61.0257C235.908 61.3266 236.072 61.6003 236.295 61.8227C236.517 62.0451 236.791 62.2091 237.092 62.3004Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M155.948 155.848L202.771 168.939C203.449 169.131 204.045 169.539 204.47 170.101C204.895 170.663 205.125 171.348 205.125 172.052C205.125 172.757 204.895 173.442 204.47 174.004C204.045 174.566 203.449 174.974 202.771 175.166L155.899 188.06C155.361 188.209 154.87 188.496 154.475 188.891C154.079 189.286 153.793 189.777 153.644 190.316L140.553 237.138C140.361 237.816 139.953 238.413 139.391 238.838C138.829 239.262 138.144 239.492 137.44 239.492C136.735 239.492 136.05 239.262 135.488 238.838C134.927 238.413 134.519 237.816 134.327 237.138L121.432 190.267C121.283 189.728 120.997 189.237 120.601 188.842C120.206 188.446 119.715 188.16 119.177 188.011L72.3537 174.92C71.676 174.728 71.0795 174.32 70.6547 173.759C70.2299 173.197 70 172.512 70 171.807C70 171.103 70.2299 170.418 70.6547 169.856C71.0795 169.294 71.676 168.886 72.3537 168.694L119.226 155.799C119.764 155.65 120.255 155.364 120.65 154.969C121.046 154.573 121.332 154.082 121.481 153.544L134.572 106.721C134.764 106.043 135.172 105.447 135.734 105.022C136.295 104.597 136.981 104.367 137.685 104.367C138.389 104.367 139.075 104.597 139.637 105.022C140.198 105.447 140.606 106.043 140.798 106.721L153.693 153.593C153.842 154.131 154.128 154.622 154.524 155.018C154.919 155.413 155.41 155.699 155.948 155.848Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M386.827 289.992C404.33 292.149 403.84 305.828 386.876 307.299C346.623 310.829 298.869 316.271 282.199 360.005C274.844 379.192 269.942 403.2 267.49 432.029C267.427 432.846 267.211 433.626 266.856 434.319C266.501 435.012 266.015 435.602 265.431 436.05C254.988 444.041 251.212 434.186 250.183 425.606C239.2 332.353 214.588 316.909 124.668 306.122C123.892 306.031 123.151 305.767 122.504 305.35C121.857 304.933 121.322 304.375 120.942 303.72C116.399 295.679 119.324 291.038 129.718 289.796C224.688 278.47 236.062 262.83 250.183 169.331C252.177 156.355 257.259 154.083 265.431 162.516C266.51 163.593 267.202 165.099 267.392 166.782C279.257 258.564 293.328 278.617 386.827 289.992Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","const CrazySpinner = () => {\n return (\n <div className=\"fk:flex fk:items-center fk:justify-center fk:gap-0.5\">\n <div className=\"fk:h-1.5 fk:w-1.5 fk:animate-bounce fk:rounded-full fk:bg-pink-500 [animation-delay:-0.3s] fk:corner-squircle\" />\n <div className=\"fk:h-1.5 fk:w-1.5 fk:animate-bounce fk:rounded-full fk:bg-pink-600 [animation-delay:-0.15s] fk:corner-squircle\" />\n <div className=\"fk:h-1.5 fk:w-1.5 fk:animate-bounce fk:rounded-full fk:bg-pink-600 fk:corner-squircle\" />\n </div>\n );\n};\n\nexport default CrazySpinner;\n","import type { JSX } from 'react';\nimport { CommandGroup, CommandItem, CommandSeparator } from '../../../../ui/primitives/command';\nimport { useEditor } from 'novel';\nimport { Check, TextQuote, TrashIcon } from 'lucide-react';\n\nexport default function AICompletionCommands({\n completion,\n onDiscard,\n}: {\n completion: string;\n onDiscard: () => void;\n}): JSX.Element | null {\n const { editor } = useEditor();\n\n if (!editor) return null;\n\n return (\n <>\n <CommandGroup>\n <CommandItem\n className=\"fk:gap-2 fk:px-4\"\n value=\"replace\"\n onSelect={() => {\n const { selection } = editor.view.state;\n\n editor\n .chain()\n .focus()\n .insertContentAt(\n {\n from: selection.from,\n to: selection.to,\n },\n completion\n )\n .run();\n }}\n >\n <Check className=\"fk:h-4 fk:w-4 fk:text-muted-foreground\" />\n Replace selection\n </CommandItem>\n <CommandItem\n className=\"fk:gap-2 fk:px-4\"\n value=\"insert\"\n onSelect={() => {\n const { selection } = editor.view.state;\n editor\n .chain()\n .focus()\n .insertContentAt(selection.to + 1, completion)\n .run();\n }}\n >\n <TextQuote className=\"fk:h-4 fk:w-4 fk:text-muted-foreground\" />\n Insert below\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n\n <CommandGroup>\n <CommandItem onSelect={onDiscard} value=\"thrash\" className=\"fk:gap-2 fk:px-4\">\n <TrashIcon className=\"fk:h-4 fk:w-4 fk:text-muted-foreground\" />\n Discard\n </CommandItem>\n </CommandGroup>\n </>\n );\n}\n","import type { JSX } from 'react';\nimport { ArrowDownWideNarrow, CheckCheck, RefreshCcwDot, StepForward, WrapText } from 'lucide-react';\nimport { getPrevText, useEditor } from 'novel';\nimport { CommandGroup, CommandItem, CommandSeparator } from '../../../../ui/primitives/command';\n\nconst options = [\n {\n value: 'improve',\n label: 'Improve writing',\n icon: RefreshCcwDot,\n },\n\n {\n value: 'fix',\n label: 'Fix grammar',\n icon: CheckCheck,\n },\n {\n value: 'shorter',\n label: 'Make shorter',\n icon: ArrowDownWideNarrow,\n },\n {\n value: 'longer',\n label: 'Make longer',\n icon: WrapText,\n },\n];\n\ninterface AISelectorCommandsProps {\n onSelect: (value: string, option: string) => void;\n}\n\nexport default function AISelectorCommands({ onSelect }: AISelectorCommandsProps): JSX.Element | null {\n const { editor } = useEditor();\n\n if (!editor) return null;\n\n return (\n <>\n <CommandGroup heading=\"Edit or review selection\">\n {options.map((option) => (\n <CommandItem\n onSelect={(value) => {\n const slice = editor.state.selection.content();\n const text = editor.storage.markdown.serializer.serialize(slice.content);\n onSelect(text, value);\n }}\n className=\"fk:flex fk:gap-2 fk:px-4\"\n key={option.value}\n value={option.value}\n >\n <option.icon className=\"fk:h-4 fk:w-4 fk:text-foreground\" />\n {option.label}\n </CommandItem>\n ))}\n </CommandGroup>\n <CommandSeparator />\n <CommandGroup heading=\"Use AI to do more\">\n <CommandItem\n onSelect={() => {\n const pos = editor.state.selection.from;\n\n const text = getPrevText(editor, pos);\n onSelect(text, 'continue');\n }}\n value=\"continue\"\n className=\"fk:gap-2 fk:px-4\"\n >\n <StepForward className=\"fk:h-4 fk:w-4 fk:text-foreground\" />\n Continue writing\n </CommandItem>\n </CommandGroup>\n </>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport type { JSX } from 'react';\nimport { useCompletion } from '@ai-sdk/react';\nimport { ArrowUp } from 'lucide-react';\nimport { addAIHighlight, useEditor } from 'novel';\nimport { useParams } from 'react-router-dom';\nimport Markdown from 'react-markdown';\nimport { toast } from 'sonner';\nimport { Command, CommandInput, CommandList } from '../../../../ui/primitives/command';\nimport { Button } from '../../../../ui/primitives/button';\nimport CrazySpinner from '../icons/crazy-spinner';\nimport Magic from '../icons/magic';\nimport { ScrollArea } from '../../../../ui/primitives/scroll-area';\nimport { apiPaths } from '../../../../core/api-paths';\nimport AICompletionCommands from './ai-completion-command';\nimport AISelectorCommands from './ai-selector-commands';\n\ninterface AISelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport function AISelector({ onOpenChange }: AISelectorProps): JSX.Element | null {\n const { editor } = useEditor();\n const [inputValue, setInputValue] = useState('');\n const { projectId } = useParams();\n\n const { completion, complete, isLoading } = useCompletion({\n api: apiPaths(projectId).completion,\n fetch: async (input, init) => {\n const response = await fetch(input, init);\n\n if (response.status === 429) {\n toast.error('You have reached your request limit for the day.');\n\n throw new Error('FK_AI_RATE_LIMIT');\n }\n\n return response;\n },\n onError: (e) => {\n if (e.message === 'FK_AI_RATE_LIMIT') {\n return;\n }\n\n toast.error(e.message);\n },\n });\n\n const hasCompletion = completion.length > 0;\n\n if (!editor) {\n return null;\n }\n\n return (\n <Command className=\"fk:w-[350px]\">\n {hasCompletion && (\n <div className=\"fk:flex fk:max-h-[400px]\">\n <ScrollArea>\n <div className=\"fk:prose fk:p-2 fk:px-4 fk:prose-sm\">\n <Markdown>{completion}</Markdown>\n </div>\n </ScrollArea>\n </div>\n )}\n\n {isLoading && (\n <div className=\"fk:flex fk:h-12 fk:w-full fk:items-center fk:px-4 fk:text-sm fk:font-medium fk:text-muted-foreground fk:text-pink-600\">\n <Magic className=\"fk:mr-2 fk:h-4 fk:w-4 fk:shrink-0 \" />\n AI is thinking\n <div className=\"fk:ml-2 fk:mt-1\">\n <CrazySpinner />\n </div>\n </div>\n )}\n {!isLoading && (\n <>\n <div className=\"fk:relative\">\n <CommandInput\n value={inputValue}\n onValueChange={setInputValue}\n autoFocus\n placeholder={hasCompletion ? 'Tell AI what to do next' : 'Ask AI to edit or generate...'}\n onFocus={() => addAIHighlight(editor)}\n />\n <Button\n size=\"icon\"\n className=\"fk:absolute fk:right-2 fk:top-1/2 fk:h-6 w-6 fk:-translate-y-1/2 fk:rounded-full fk:bg-pink-600 fk:hover:bg-pink-800 fk:corner-squircle\"\n onClick={() => {\n if (completion) {\n return complete(completion, {\n body: { option: 'zap', command: inputValue },\n }).then(() => setInputValue(''));\n }\n\n const slice = editor.state.selection.content();\n const text = editor.storage.markdown.serializer.serialize(slice.content);\n\n complete(text, {\n body: { option: 'zap', command: inputValue },\n }).then(() => setInputValue(''));\n }}\n >\n <ArrowUp className=\"fk:h-4 fk:w-4\" />\n </Button>\n </div>\n <CommandList>\n {hasCompletion ? (\n <AICompletionCommands\n onDiscard={() => {\n editor.chain().unsetHighlight().focus().run();\n onOpenChange(false);\n }}\n completion={completion}\n />\n ) : (\n <AISelectorCommands onSelect={(value, option) => complete(value, { body: { option } })} />\n )}\n </CommandList>\n </>\n )}\n </Command>\n );\n}\n","import { Fragment, type ReactNode, useEffect, JSX } from 'react';\nimport { EditorBubble, useEditor } from 'novel';\nimport { removeAIHighlight } from 'novel';\nimport { Button } from '../../../../ui/primitives/button';\nimport Magic from '../icons/magic';\nimport { AISelector } from './ai-selector';\n\ninterface GenerativeMenuSwitchProps {\n children: ReactNode;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\nexport default function GenerativeMenuSwitch({\n children,\n open,\n onOpenChange,\n}: GenerativeMenuSwitchProps): JSX.Element | null {\n const { editor } = useEditor();\n\n useEffect(() => {\n if (!editor) return;\n\n if (!open) removeAIHighlight(editor);\n }, [editor, open]);\n\n if (!editor) return null;\n\n return (\n <EditorBubble\n tippyOptions={{\n placement: open ? 'bottom-start' : 'top',\n onHidden: () => {\n onOpenChange(false);\n editor.chain().unsetHighlight().run();\n },\n }}\n className=\"fk:flex fk:w-fit fk:max-w-[90vw] fk:overflow-hidden fk:rounded-md fk:border fk:border-muted fk:bg-background fk:shadow-xl fk:corner-squircle\"\n >\n {open && <AISelector open={open} onOpenChange={onOpenChange} />}\n {!open && (\n <Fragment>\n <Button\n className=\"fk:gap-1 fk:rounded-none fk:text-pink-600 fk:corner-squircle\"\n variant=\"ghost\"\n onClick={(e) => {\n e.preventDefault();\n onOpenChange(true);\n }}\n size=\"sm\"\n >\n <Magic className=\"fk:h-5 fk:w-5\" />\n Ask AI\n </Button>\n {children}\n </Fragment>\n )}\n </EditorBubble>\n );\n}\n","'use client';\n\nimport { useState, type JSX } from 'react';\nimport {\n EditorCommand,\n EditorCommandEmpty,\n EditorCommandItem,\n EditorCommandList,\n EditorContent,\n EditorRoot,\n handleCommandNavigation,\n handleImageDrop,\n handleImagePaste,\n ImageResizer,\n type EditorContentProps,\n type EditorInstance,\n type JSONContent,\n type SuggestionItem,\n} from 'novel';\nimport { useDebouncedCallback } from 'use-debounce';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../../ui/primitives/form';\nimport { Separator } from '../../../ui/primitives/separator';\nimport type { FormFieldValue } from '../../../graphql-client/types';\nimport type { FormFieldParams } from '../../types';\nimport { DefaultValueSwitch } from '../default-value-switch';\nimport { defaultExtensions } from './extensions';\nimport { slashCommand, suggestionItems } from './slash-command';\nimport { ColorSelector } from './selectors/color-selector';\nimport { LinkSelector } from './selectors/link-selector';\nimport { NodeSelector } from './selectors/node-selector';\nimport { MathSelector } from './selectors/math-selector';\nimport { TextButtons } from './selectors/text-buttons';\nimport GenerativeMenuSwitch from './generative/generative-menu-switch';\n\nconst extensions = [...defaultExtensions, slashCommand] as unknown as NonNullable<EditorContentProps['extensions']>;\n\nfunction isJSONContent(value: unknown): value is JSONContent {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n const maybe = value as { type?: unknown; content?: unknown };\n\n if (typeof maybe.type !== 'string' && typeof maybe.type !== 'undefined') {\n return false;\n }\n\n if (!Array.isArray(maybe.content) && typeof maybe.content !== 'undefined') {\n return false;\n }\n\n return true;\n}\n\nfunction parseEditorValue(value: FormFieldValue['value'] | undefined): JSONContent | undefined {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n if (!trimmed) {\n return undefined;\n }\n\n try {\n const parsed: unknown = JSON.parse(trimmed);\n\n if (isJSONContent(parsed)) {\n return parsed;\n }\n } catch {\n return undefined;\n }\n }\n\n if (isJSONContent(value)) {\n return value;\n }\n\n return undefined;\n}\n\nexport default function Editor({\n control,\n defaultValue,\n fieldSchema,\n readOnly,\n setValue,\n}: FormFieldParams<'editor'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n const [openAI, setOpenAI] = useState(false);\n const [openNode, setOpenNode] = useState(false);\n const [openLink, setOpenLink] = useState(false);\n const [openColor, setOpenColor] = useState(false);\n\n const debouncedUpdates = useDebouncedCallback((editor: EditorInstance, previousValue: FormFieldValue | undefined) => {\n const json = editor.getJSON();\n\n setValue(name, {\n ...previousValue,\n value: JSON.stringify(json),\n });\n }, 300);\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n // TODO: replace this with a real upload function.\n // See: https://github.com/steven-tey/novel/blob/ecdb5d2ff5d3e6ab5f5af95b5a81de3ab4e8a0e9/apps/web/components/tailwind/image-upload.ts\n const uploadFn = (file: File) => {\n // eslint-disable-next-line no-console\n console.log('Image uploader not yet implemented', file);\n\n return Promise.resolve('https://via.placeholder.com/150');\n };\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl>\n <EditorRoot>\n <EditorContent\n key={`${name}:${field.value?.scope ?? defaultValue.scope}:${String(field.value?.disabled ?? defaultValue.disabled)}`}\n className=\"fk:relative fk:w-full fk:max-w-5xl fk:rounded-md fk:border fk:border-input fk:ring-offset-background fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2 fk:corner-squircle\"\n editable={!readOnly && !field.value?.disabled}\n editorProps={{\n handleDOMEvents: {\n keydown: (_view, event) => handleCommandNavigation(event),\n },\n handlePaste: (view, event) => handleImagePaste(view, event, uploadFn),\n handleDrop: (view, event, _slice, moved) => handleImageDrop(view, event, moved, uploadFn),\n attributes: {\n class:\n 'fk:prose prose-lg fk:dark:prose-invert fk:prose-headings:font-title fk:min-h-[150px] fk:font-default fk:rounded-md fk:corner-squircle' +\n 'fk:focus:outline-hidden fk:max-w-full fk:bg-background ',\n },\n }}\n extensions={extensions}\n initialContent={parseEditorValue(field.value?.value ?? defaultValue.value)}\n immediatelyRender={true}\n onUpdate={({ editor }) => {\n debouncedUpdates(editor, field.value);\n }}\n slotAfter={<ImageResizer />}\n >\n <EditorCommand className=\"fk:z-50 fk:h-auto fk:max-h-[330px] fk:overflow-y-auto fk:rounded-md fk:border fk:border-muted fk:bg-background fk:px-1 fk:py-2 fk:shadow-md fk:transition-all fk:pointer-events-auto fk:corner-squircle\">\n <EditorCommandEmpty className=\"fk:px-2 fk:text-muted-foreground\">No results</EditorCommandEmpty>\n <EditorCommandList>\n {suggestionItems.map((item: SuggestionItem) => (\n <EditorCommandItem\n value={item.title}\n onCommand={(val) => item.command?.(val)}\n className=\"fk:flex fk:w-full fk:items-center fk:space-x-2 fk:rounded-md fk:px-2 fk:py-1 fk:text-left fk:text-sm fk:hover:bg-muted fk:aria-selected:bg-muted fk:corner-squircle\"\n key={item.title}\n >\n <div className=\"fk:flex fk:h-10 fk:w-10 fk:items-center fk:justify-center fk:rounded-md fk:border fk:border-muted fk:bg-background fk:corner-squircle\">\n {item.icon}\n </div>\n <div>\n <p className=\"fk:font-medium\">{item.title}</p>\n <p className=\"fk:text-xs fk:text-muted-foreground\">{item.description}</p>\n </div>\n </EditorCommandItem>\n ))}\n </EditorCommandList>\n </EditorCommand>\n <GenerativeMenuSwitch open={openAI} onOpenChange={setOpenAI}>\n <Separator orientation=\"vertical\" />\n <NodeSelector open={openNode} onOpenChange={setOpenNode} />\n <Separator orientation=\"vertical\" />\n <LinkSelector open={openLink} onOpenChange={setOpenLink} />\n <Separator orientation=\"vertical\" />\n <MathSelector />\n <Separator orientation=\"vertical\" />\n <TextButtons />\n <Separator orientation=\"vertical\" />\n <ColorSelector open={openColor} onOpenChange={setOpenColor} />\n </GenerativeMenuSwitch>\n </EditorContent>\n </EditorRoot>\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Textarea as TextareaPrimitive } from '../../ui/primitives/textarea';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Textarea({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'textarea'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n setValue(name, {\n ...previousValue,\n value: event.currentTarget.value,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <div className=\"fk:flex\">\n <div className=\"fk:full-w fk:grid fk:gap-2\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <div className=\"fk:h-full fk:self-end fk:ml-auto\">\n {/* TODO: this should be a slot that can receive user-defined components and system components like Presence and AI Writting Tools */}\n </div>\n </div>\n <FormControl>\n <TextareaPrimitive\n className=\"fk:w-full fk:mt-0.75\"\n disabled={readOnly || field.value?.disabled}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n value={(field.value?.value as string) || ''}\n />\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { JSX, RefObject, SyntheticEvent } from 'react';\nimport { gql } from '@apollo/client';\nimport { useLazyQuery } from '@apollo/client/react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowDown as ArrowDownIcon,\n ArrowUp as ArrowUpIcon,\n Image as ImageIcon,\n Link,\n Maximize2,\n Upload as UploadIcon,\n X as ClearIcon,\n} from 'lucide-react';\nimport { useDispatch } from '../../../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../../../core/app-context';\nimport { IMAGES_BASE_URL } from '../../../core/api-paths';\nimport { useUploadAssets } from '../../../core/upload';\nimport type { MultipleRelationshipConnection } from '../../../core/types';\nimport {\n FULL_ASSET_CONNECTION_LIMIT,\n getEntityAssetConnectionQuery,\n getKnownAssetSortOrders,\n getOrderedAssetsFromConnection,\n} from '../../../graphql-client/queries';\nimport type { OrderedAssetValue } from '../../../graphql-client/types';\nimport { Button } from '../../../ui/primitives/button';\nimport { Collapsible, CollapsibleContent } from '../../../ui/primitives/collapsible';\nimport { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '../../../ui/primitives/form';\nimport { ScrollArea } from '../../../ui/primitives/scroll-area';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/primitives/tooltip';\nimport { useOuterClick } from '../../../ui/hooks/use-outer-click';\nimport type { FormFieldParams } from '../../types';\n\nconst PAGE_SIZE = FULL_ASSET_CONNECTION_LIMIT;\n\ntype AssetConnectionPageResult = {\n [entityNamePlural: string]:\n | {\n [connectionField: string]: unknown;\n }[]\n | undefined;\n};\n\nexport default function AssetMultipleRelationship({\n control,\n defaultValue,\n entityId,\n entityName,\n entityNamePlural,\n fieldSchema,\n readOnly,\n schema,\n setValue,\n}: FormFieldParams<'relationship'>): JSX.Element {\n const { name, label, options, relationship } = fieldSchema;\n const { projectId } = useParams();\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const { relationships } = useAppContext();\n const uploadAssets = useUploadAssets();\n const fieldId = useId();\n const relationshipId = useId();\n const wrapperRef = useRef<HTMLDivElement>(null);\n const originalAssetIdsRef = useRef<string[]>([]);\n const pendingLocalRowsSignatureRef = useRef<string | null>(null);\n const removedAssetIdsRef = useRef<string[]>([]);\n const syncedRowsSignatureRef = useRef('');\n const knownAssetSortOrdersRef = useRef<{ [id: string]: number }>(defaultValue.knownAssetSortOrders ?? {});\n const [isOpen, setIsOpen] = useState(false);\n const initialRows = useMemo(() => normalizeAssets(defaultValue.value), [defaultValue.value]);\n const [rows, setRows] = useState<OrderedAssetValue[]>(initialRows);\n const [loadedServerCount, setLoadedServerCount] = useState(\n () => Object.keys(defaultValue.knownAssetSortOrders ?? getKnownAssetSortOrders(initialRows)).length\n );\n // Advertised connection total; clamped down when a page returns fewer edges than\n // the aggregate claimed so Load more does not stay enabled forever.\n const [serverTotalCount, setServerTotalCount] = useState(() =>\n Math.max(defaultValue.count ?? 0, initialRows[0]?.totalCount ?? 0, initialRows.length)\n );\n const assetConnectionQuery = useMemo(\n () =>\n getEntityAssetConnectionQuery({\n attributeName: name,\n entityName,\n entityNamePlural,\n schema,\n }),\n [entityName, entityNamePlural, name, schema]\n );\n const [fetchAssetConnection, { loading: isLoadingMore }] = useLazyQuery<AssetConnectionPageResult>(gql`\n ${assetConnectionQuery.query}\n `);\n useOuterClick(wrapperRef as RefObject<HTMLDivElement>, setIsOpen);\n\n useEffect(() => {\n const initialRowsSignature = getRowsSignature(initialRows);\n\n originalAssetIdsRef.current = initialRows.map((asset) => asset._id);\n removedAssetIdsRef.current = [];\n const nextKnownSortOrders = {\n ...(defaultValue.knownAssetSortOrders ?? {}),\n ...getKnownAssetSortOrders(initialRows),\n };\n\n knownAssetSortOrdersRef.current = nextKnownSortOrders;\n setLoadedServerCount(Object.keys(nextKnownSortOrders).length);\n setServerTotalCount(Math.max(defaultValue.count ?? 0, initialRows[0]?.totalCount ?? 0, initialRows.length));\n\n setRows((currentRows) => {\n const currentRowsSignature = getRowsSignature(currentRows);\n\n if (\n initialRowsSignature === '' &&\n currentRowsSignature !== '' &&\n syncedRowsSignatureRef.current === currentRowsSignature\n ) {\n return currentRows;\n }\n\n if (currentRowsSignature === initialRowsSignature) {\n return currentRows;\n }\n\n syncedRowsSignatureRef.current = initialRowsSignature;\n\n return initialRows;\n });\n }, [defaultValue.count, defaultValue.knownAssetSortOrders, initialRows]);\n\n useEffect(() => {\n const connections = relationships[relationshipId]?.connect as MultipleRelationshipConnection | undefined;\n\n if (!connections) {\n return;\n }\n\n const selectedAssets = connections\n .map((connection, index) => normalizeAsset(connection.value, connection.sortOrder ?? index))\n .filter((asset): asset is OrderedAssetValue => Boolean(asset));\n const selectedRowsSignature = getRowsSignature(selectedAssets);\n const rowsSignature = getRowsSignature(rows);\n const pendingRowsSignature = pendingLocalRowsSignatureRef.current;\n\n if (pendingRowsSignature === rowsSignature && selectedRowsSignature !== pendingRowsSignature) {\n return;\n }\n\n pendingLocalRowsSignatureRef.current = null;\n\n if (selectedRowsSignature !== rowsSignature) {\n setRows(selectedAssets);\n }\n }, [relationshipId, relationships, rows]);\n\n useEffect(() => {\n const rowsSignature = getRowsSignature(rows);\n\n if (syncedRowsSignatureRef.current === rowsSignature) {\n return;\n }\n\n const connect = rows.map((asset, index) => ({\n _id: asset._id,\n sortOrder: index,\n value: {\n ...asset,\n sortOrder: index,\n },\n }));\n const rowIds = rows.map((asset) => asset._id);\n const disconnect = removedAssetIdsRef.current.filter((_id) => !rowIds.includes(_id));\n\n syncedRowsSignatureRef.current = rowsSignature;\n\n appDispatch({\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect,\n disconnect,\n },\n },\n });\n\n setValue(name, {\n ...defaultValue,\n knownAssetSortOrders: knownAssetSortOrdersRef.current,\n relationships: {\n connect,\n disconnect,\n },\n value: rows,\n });\n }, [appDispatch, defaultValue, name, relationshipId, rows, setValue]);\n\n const totalCount = Math.max(serverTotalCount, loadedServerCount);\n const hasMore = Boolean(entityId) && totalCount > loadedServerCount;\n\n const handleLoadMore = useCallback(() => {\n if (!entityId || isLoadingMore || !hasMore) {\n return;\n }\n\n const nextFirst = loadedServerCount + PAGE_SIZE;\n\n void fetchAssetConnection({\n variables: {\n where: { _id: { eq: entityId } },\n first: nextFirst,\n },\n })\n .then((result) => {\n const entityRows = result.data?.[entityNamePlural];\n const entity = Array.isArray(entityRows) ? entityRows[0] : undefined;\n const connection = entity?.[`${name}Connection`];\n const fetchedAssets = getOrderedAssetsFromConnection(connection);\n const responseTotal = fetchedAssets[0]?.totalCount;\n\n if (typeof responseTotal === 'number') {\n setServerTotalCount(responseTotal);\n }\n\n if (fetchedAssets.length === 0) {\n // Aggregate overstated available edges; stop paging.\n setServerTotalCount(loadedServerCount);\n\n return;\n }\n\n const previousKnownCount = Object.keys(knownAssetSortOrdersRef.current).length;\n const nextKnownSortOrders = {\n ...knownAssetSortOrdersRef.current,\n ...getKnownAssetSortOrders(fetchedAssets),\n };\n const nextLoadedCount = Object.keys(nextKnownSortOrders).length;\n\n knownAssetSortOrdersRef.current = nextKnownSortOrders;\n setLoadedServerCount(nextLoadedCount);\n\n // Fewer edges than requested, or the page added no new known ids —\n // clamp the advertised total so hasMore clears instead of no-op looping.\n if (fetchedAssets.length < nextFirst || nextLoadedCount <= previousKnownCount) {\n setServerTotalCount(nextLoadedCount);\n }\n\n for (const asset of fetchedAssets) {\n if (!originalAssetIdsRef.current.includes(asset._id)) {\n originalAssetIdsRef.current = [...originalAssetIdsRef.current, asset._id];\n }\n }\n\n setRows((currentRows) => {\n const currentIds = new Set(currentRows.map((asset) => asset._id));\n const removedIds = new Set(removedAssetIdsRef.current);\n const toAppend = fetchedAssets.filter((asset) => !currentIds.has(asset._id) && !removedIds.has(asset._id));\n\n if (toAppend.length === 0) {\n // Still rewrite knownAssetSortOrders onto the form value.\n syncedRowsSignatureRef.current = '';\n\n return [...currentRows];\n }\n\n const nextRows = [...currentRows, ...toAppend];\n\n pendingLocalRowsSignatureRef.current = getRowsSignature(nextRows);\n\n return nextRows;\n });\n })\n .catch((error: unknown) => {\n console.error('Error fetching more assets:', error);\n });\n }, [entityId, entityNamePlural, fetchAssetConnection, hasMore, isLoadingMore, loadedServerCount, name]);\n\n function handleSelection(event: SyntheticEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (readOnly) {\n return;\n }\n\n actionDispatch({\n type: 'EditRelationship',\n payload: {\n connectedEntitiesCount: Math.max(rows.length, totalCount),\n entityName: relationship?.entity ?? '_asset',\n entityId,\n relationshipId,\n mode: 'multiple',\n assetAccept: options?.accept,\n },\n });\n }\n\n async function handleUpload(event: SyntheticEvent): Promise<void> {\n event.preventDefault();\n event.stopPropagation();\n\n if (readOnly) {\n return;\n }\n\n const uploadedAssets = await uploadAssets({\n projectId,\n accept: options?.accept ?? 'image/*',\n multiple: true,\n maxBytes: 4 * 1024 * 1024,\n });\n\n setRows((currentRows) => {\n const currentIds = new Set(currentRows.map((asset) => asset._id));\n const nextAssets = uploadedAssets\n .map((uploaded, index) => ({\n ...uploaded.asset,\n sortOrder: currentRows.length + index,\n }))\n .filter((asset) => !currentIds.has(asset._id));\n const nextRows = withSortOrder([...currentRows, ...nextAssets]);\n\n pendingLocalRowsSignatureRef.current = getRowsSignature(nextRows);\n\n return nextRows;\n });\n }\n\n function removeAsset(assetId: string): void {\n setRows((currentRows) => {\n const nextRows = withSortOrder(currentRows.filter((asset) => asset._id !== assetId));\n\n if (originalAssetIdsRef.current.includes(assetId) && !removedAssetIdsRef.current.includes(assetId)) {\n removedAssetIdsRef.current = [...removedAssetIdsRef.current, assetId];\n }\n\n pendingLocalRowsSignatureRef.current = getRowsSignature(nextRows);\n\n return nextRows;\n });\n }\n\n function moveAsset(assetId: string, direction: -1 | 1): void {\n setRows((currentRows) => {\n const currentIndex = currentRows.findIndex((asset) => asset._id === assetId);\n const nextIndex = currentIndex + direction;\n\n if (currentIndex < 0 || nextIndex < 0 || nextIndex >= currentRows.length) {\n return currentRows;\n }\n\n const nextRows = [...currentRows];\n const [asset] = nextRows.splice(currentIndex, 1);\n\n if (!asset) {\n return currentRows;\n }\n\n nextRows.splice(nextIndex, 0, asset);\n\n const sortedRows = withSortOrder(nextRows);\n\n pendingLocalRowsSignatureRef.current = getRowsSignature(sortedRows);\n\n return sortedRows;\n });\n }\n\n const previewTotal = Math.max(rows.length, totalCount);\n const collapsedPreview = rows.slice(0, 8);\n\n return (\n <FormField\n control={control}\n defaultValue={defaultValue}\n name={name}\n render={() => (\n <FormItem>\n <FormLabel htmlFor={fieldId}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl className=\"fk:flex fk:flex-col fk:w-full fk:min-h-9.5 fk:text-sm\">\n <div\n aria-controls={`asset-relationship-dropdown-${name}`}\n aria-expanded={isOpen}\n className={`fk:relative fk:flex fk:w-full fk:items-start fk:space-x-2 fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-2.5 fk:py-0.5 fk:focus-visible:outline-hidden fk:ring-offset-background fk:focus-visible:ring-2 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-2 ${\n isOpen ? 'fk:outline-hidden fk:ring-2 fk:ring-ring fk:ring-offset-2' : ''\n } fk:corner-squircle`}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n wrapperRef.current?.focus();\n setIsOpen(true);\n }}\n ref={wrapperRef}\n role=\"combobox\"\n tabIndex={0}\n >\n <div className=\"fk:flex fk:w-full fk:flex-col\">\n <div className=\"fk:flex fk:w-full fk:items-center fk:gap-2 fk:pr-9\">\n {isOpen && rows.length > 0 ? (\n <div className=\"fk:flex fk:h-9 fk:items-center fk:text-muted-foreground\">\n {previewTotal} {previewTotal === 1 ? 'asset' : 'assets'}\n {hasMore ? ` (${rows.length} loaded)` : ''} selected\n </div>\n ) : rows.length > 0 ? (\n <div className=\"fk:flex fk:min-h-9 fk:flex-wrap fk:gap-2\">\n {collapsedPreview.map((asset) => (\n <AssetThumbnail asset={asset} key={asset._id} />\n ))}\n {!isOpen && previewTotal > 8 ? (\n <div className=\"fk:flex fk:h-9 fk:w-9 fk:items-center fk:justify-center fk:rounded-sm fk:bg-muted fk:text-xs fk:text-muted-foreground fk:corner-squircle\">\n +{previewTotal - 8}\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"fk:flex fk:h-9 fk:items-center fk:text-muted-foreground\">\n <ImageIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n Select or upload assets\n </div>\n )}\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:absolute fk:right-0.75 fk:top-0.75 fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n id={fieldId}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setIsOpen((value) => !value);\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n {isOpen ? <ClearIcon className=\"fk:h-4 fk:w-4\" /> : <Maximize2 className=\"fk:h-4 fk:w-4\" />}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{isOpen ? 'Close' : 'Expand field'}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n <Collapsible className=\"fk:w-full fk:space-y-2 fk:ml-0!\" onOpenChange={setIsOpen} open={isOpen}>\n <CollapsibleContent className=\"fk:w-full\">\n <div\n className=\"fk:flex fk:h-[350px] fk:flex-col fk:gap-3\"\n id={`asset-relationship-dropdown-${name}`}\n >\n <div className=\"fk:flex fk:gap-2\">\n <Button className=\"fk:h-8\" disabled={readOnly} onClick={handleSelection} variant=\"outline\">\n <Link className=\"fk:h-4 fk:w-4 fk:mr-2\" />\n Select assets\n </Button>\n <Button\n className=\"fk:h-8\"\n disabled={readOnly}\n onClick={(event) => void handleUpload(event)}\n variant=\"outline\"\n >\n <UploadIcon className=\"fk:h-4 fk:w-4 fk:mr-2\" />\n Upload assets\n </Button>\n </div>\n {rows.length > 0 ? (\n <ScrollArea className=\"fk:min-h-0 fk:flex-1\">\n <div className=\"fk:grid fk:grid-cols-[repeat(auto-fill,minmax(8rem,1fr))] fk:gap-3 fk:pr-3\">\n {rows.map((asset, index) => (\n <SelectedAssetCard\n asset={asset}\n index={index}\n isFirst={index === 0}\n isLast={index === rows.length - 1}\n key={asset._id}\n moveAsset={moveAsset}\n readOnly={readOnly}\n removeAsset={removeAsset}\n />\n ))}\n </div>\n {hasMore ? (\n <div className=\"fk:flex fk:justify-center fk:py-3 fk:pr-3\">\n <Button\n className=\"fk:h-8\"\n disabled={isLoadingMore}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n handleLoadMore();\n }}\n type=\"button\"\n variant=\"outline\"\n >\n {isLoadingMore\n ? 'Loading…'\n : `Load more (${loadedServerCount} of ${totalCount})`}\n </Button>\n </div>\n ) : null}\n </ScrollArea>\n ) : null}\n </div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n\nfunction AssetThumbnail({ asset }: { asset: OrderedAssetValue }): JSX.Element {\n const isImage = isImageAsset(asset);\n\n if (!isImage) {\n return (\n <div className=\"fk:flex fk:h-9 fk:w-9 fk:items-center fk:justify-center fk:rounded-sm fk:bg-muted fk:corner-squircle\">\n <ImageIcon className=\"fk:h-4 fk:w-4 fk:text-muted-foreground\" />\n </div>\n );\n }\n\n return (\n <img\n alt={asset.originalFilename || 'Asset'}\n className=\"fk:h-9 fk:w-9 fk:rounded-sm fk:bg-muted fk:object-cover fk:corner-squircle\"\n src={`${IMAGES_BASE_URL}${asset.path}?w=128&h=128&f=webp`}\n />\n );\n}\n\nfunction SelectedAssetCard({\n asset,\n index,\n isFirst,\n isLast,\n moveAsset,\n readOnly,\n removeAsset,\n}: {\n asset: OrderedAssetValue;\n index: number;\n isFirst: boolean;\n isLast: boolean;\n moveAsset: (assetId: string, direction: -1 | 1) => void;\n readOnly: boolean;\n removeAsset: (assetId: string) => void;\n}): JSX.Element {\n return (\n <div className=\"fk:relative fk:rounded-md fk:border fk:border-input fk:bg-background fk:p-2 fk:corner-squircle\">\n <div className=\"fk:aspect-square fk:overflow-hidden fk:rounded-sm fk:bg-muted fk:corner-squircle\">\n {isImageAsset(asset) ? (\n <img\n alt={asset.originalFilename || 'Asset'}\n className=\"fk:h-full fk:w-full fk:object-cover\"\n src={`${IMAGES_BASE_URL}${asset.path}?w=320&h=320&f=webp`}\n />\n ) : (\n <div className=\"fk:flex fk:h-full fk:w-full fk:items-center fk:justify-center\">\n <ImageIcon className=\"fk:h-8 fk:w-8 fk:text-muted-foreground\" />\n </div>\n )}\n </div>\n <div className=\"fk:mt-2 fk:truncate fk:text-xs\" title={asset.originalFilename}>\n {index + 1}. {asset.originalFilename || asset.path}\n </div>\n <div className=\"fk:mt-2 fk:flex fk:gap-1\">\n <Button\n className=\"fk:h-7 fk:w-7\"\n disabled={readOnly || isFirst}\n onClick={() => moveAsset(asset._id, -1)}\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n >\n <ArrowUpIcon className=\"fk:h-3.5 fk:w-3.5\" />\n </Button>\n <Button\n className=\"fk:h-7 fk:w-7\"\n disabled={readOnly || isLast}\n onClick={() => moveAsset(asset._id, 1)}\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n >\n <ArrowDownIcon className=\"fk:h-3.5 fk:w-3.5\" />\n </Button>\n <Button\n className=\"fk:ml-auto fk:h-7 fk:w-7\"\n disabled={readOnly}\n onClick={() => removeAsset(asset._id)}\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n >\n <ClearIcon className=\"fk:h-3.5 fk:w-3.5\" />\n </Button>\n </div>\n </div>\n );\n}\n\nfunction normalizeAssets(value: unknown): OrderedAssetValue[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .map((item, index) => normalizeAsset(item, index))\n .filter((asset): asset is OrderedAssetValue => Boolean(asset))\n .sort((a, b) => (a.sortOrder ?? Number.MAX_SAFE_INTEGER) - (b.sortOrder ?? Number.MAX_SAFE_INTEGER));\n}\n\nfunction getRowsSignature(rows: OrderedAssetValue[]): string {\n return rows.map((asset, index) => `${asset._id}:${asset.sortOrder ?? index}`).join('|');\n}\n\nfunction withSortOrder(rows: OrderedAssetValue[]): OrderedAssetValue[] {\n return rows.map((row, index) => ({ ...row, sortOrder: index }));\n}\n\nfunction normalizeAsset(value: unknown, sortOrder: number): OrderedAssetValue | null {\n if (!value || typeof value !== 'object' || !('_id' in value) || !('path' in value)) {\n return null;\n }\n\n const asset = value as Partial<OrderedAssetValue>;\n\n return {\n _id: String(asset._id ?? ''),\n path: String(asset.path ?? ''),\n originalFilename: String(asset.originalFilename ?? ''),\n size: Number(asset.size ?? 0),\n mimeType: String(asset.mimeType ?? ''),\n lqip: String(asset.lqip ?? ''),\n width: Number(asset.width ?? 0),\n height: Number(asset.height ?? 0),\n sortOrder: asset.sortOrder ?? sortOrder,\n totalCount: typeof asset.totalCount === 'number' ? asset.totalCount : undefined,\n };\n}\n\nfunction isImageAsset(asset: OrderedAssetValue): boolean {\n return Boolean(\n (asset.mimeType && asset.mimeType.startsWith('image/')) || /\\.(png|jpe?g|gif|webp|avif|svg)$/i.test(asset.path)\n );\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport type { Row } from '@tanstack/react-table';\nimport { Button } from '../../../ui/primitives/button';\n\ninterface DataTableRowActionsProps<TData> {\n action: (entityId: string) => void;\n row: Row<TData>;\n}\n\nexport function DataTableRowActions<TData>({ action, row }: DataTableRowActionsProps<TData>): JSX.Element {\n // @ts-expect-error -- the DataGrid's origina type doesn't know about the _id property\n const entityId = row.original._id as string;\n\n function handleDelete(): void {\n action(entityId);\n }\n\n return (\n <div className=\"fk:flex fk:items-center\">\n <Button className=\"fk:flex fk:h-7 fk:w-7 fk:p-0 fk:mr-1\" onClick={handleDelete} variant=\"ghost\">\n <Trash2 className=\"fk:h-4 fk:w-4\" />\n <span className=\"fk:sr-only\">Delete</span>\n </Button>\n </div>\n );\n}\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { Dispatch, JSX, RefObject, SyntheticEvent } from 'react';\nimport { gql } from '@apollo/client';\nimport { useLazyQuery } from '@apollo/client/react';\nimport type { Row } from '@tanstack/react-table';\nimport { find, map, prop, propEq, uniq, uniqBy } from 'ramda';\nimport { Link, Maximize2, X as ClearIcon } from 'lucide-react';\nimport { getRelatedItemsQuery, mapQueryResult } from '../../../graphql-client/queries';\nimport type {\n AttributeValue,\n EntityQueryAggregate,\n EntityItem,\n EntityQueryResults,\n MappedEntityItem,\n} from '../../../graphql-client/types';\nimport { useGridColumnsDefinition } from '../../../data-grid/columns';\nimport { DataTable } from '../../../data-grid/data-table';\nimport { Button } from '../../../ui/primitives/button';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../../ui/primitives/form';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/primitives/tooltip';\nimport { Badge } from '../../../ui/primitives/badge';\nimport { Collapsible, CollapsibleContent } from '../../../ui/primitives/collapsible';\nimport { useOuterClick } from '../../../ui/hooks/use-outer-click';\nimport { getDisplayAttribute } from '../../../core/get-display-attribute';\nimport type {\n ActionSetRelationship,\n Attribute,\n Entity,\n MultipleRelationshipConnection,\n Relationships,\n} from '../../../core/types';\nimport { useDispatch } from '../../../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../../../core/app-context';\nimport type { FormFieldParams } from '../../types';\nimport { DataTableRowActions } from './data-table-row-actions';\n\nconst PAGE_SIZE = 25;\n\nexport default function MultipleRelationship({\n control,\n defaultScope,\n defaultValue,\n entityId,\n entityName,\n fieldSchema,\n readOnly,\n schema,\n scope,\n setValue,\n}: FormFieldParams<'relationship'>): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n useOuterClick(wrapperRef as RefObject<HTMLDivElement>, setIsOpen);\n const [rows, setRows] = useState<AttributeValue[] | []>([]);\n const { name, label, options, relationship } = fieldSchema;\n const relationshipEntityName: string = relationship?.entity ?? name;\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const { relationships } = useAppContext();\n const fieldId = useId();\n const relationshipId = useId();\n const relationshipEntitySchema = find(propEq(relationshipEntityName, 'name'))(schema) as Entity | undefined;\n const relationshipEntityAttributesSchema = relationshipEntitySchema?.attributes ?? [];\n const baseEntitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const baseEntityName = baseEntitySchema?.name ?? '';\n let connectionName: string | undefined;\n\n /**\n * Find out if this attribute is related to the base entity (by-directional relationship)\n * If so, get the relationship field name on the target entity that points back to the\n * base entity, so EditRelationship can filter out already-connected items with a\n * `none` quantifier filter (i.e. products: { none: { _id: { eq: ... } } }).\n * */\n const relationshipAttribute = relationshipEntityAttributesSchema.find(\n (attr) => attr.relationship?.entity === baseEntityName\n );\n\n if (relationshipAttribute) {\n connectionName = relationshipAttribute.name;\n }\n\n const displayAttributeName = getDisplayAttribute(relationshipEntitySchema)?.name ?? '';\n const initialRows = useMemo(\n () =>\n defaultValue.value\n ? dataAdapter({\n data: defaultValue.value,\n defaultScope,\n primaryAttributeName: displayAttributeName,\n relationshipEntitySchema,\n scope,\n })\n : [],\n [defaultScope, defaultValue, displayAttributeName, relationshipEntitySchema, scope]\n );\n const entityQuery = getRelatedItemsQuery({\n attributeName: name,\n relatedEntityName: relationshipEntityName,\n scope,\n schema,\n });\n const previewLimit = 12;\n const previewItems = rows.length ? rows.slice(0, previewLimit).map((row) => row[displayAttributeName] as string) : [];\n const hasMorePreviewItems = Math.max(rows.length, defaultValue.count ?? 0) > previewItems.length;\n const [getData, { loading, data }] = useLazyQuery<EntityQueryResults & EntityQueryAggregate>(gql`\n ${entityQuery.query}\n `);\n\n const columns = useGridColumnsDefinition<AttributeValue, unknown>({\n attributesSchema: relationshipEntitySchema?.attributes ?? [],\n actionsComponent: readOnly\n ? undefined\n : (row) => dataRowActions({ appDispatch, relationshipId, relationships, row, setRows }),\n });\n\n useEffect(() => {\n setRows(initialRows);\n\n if (defaultValue.value === '') {\n return;\n }\n\n // set the initial state of the relationship\n appDispatch({\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect: [],\n disconnect: [],\n },\n },\n });\n }, [appDispatch, data, initialRows, relationshipId, defaultValue, scope]);\n\n /**\n * Update the value of the field when the relationshp context value changes\n * The relationshp context value changes when the user selects a row from the datagrid in the EditRelationship modal\n * or when the user ticks one of the pre-existing relationships for deletion\n */\n useEffect(() => {\n setValue(name, { ...defaultValue, relationships: relationships[relationshipId] });\n }, [defaultValue, relationships, relationshipId, setValue, name]);\n\n /**\n * Set the value of the rows for the datagrid\n */\n useEffect(() => {\n const connections = (relationships[relationshipId]?.connect as MultipleRelationshipConnection | null) ?? [];\n const selectedRows = connections.map(({ value }) => value);\n\n setRows(uniqBy(prop('_id'), [...(selectedRows as []), ...initialRows]));\n }, [data, defaultValue.count, initialRows, relationships, relationshipId]);\n\n const pendingConnections =\n (relationships[relationshipId]?.connect as MultipleRelationshipConnection | null) ?? [];\n const pendingDisconnectIds = relationships[relationshipId]?.disconnect ?? [];\n const existingRelationshipIds = new Set(initialRows.map((row) => row._id));\n const pendingDisconnectIdSet = new Set(pendingDisconnectIds);\n // The picker cannot hide already-linked records without a reverse relationship,\n // so re-selecting them must not inflate the displayed total.\n const pendingConnectCount = pendingConnections.filter(\n (connection) => !existingRelationshipIds.has(connection._id) || pendingDisconnectIdSet.has(connection._id)\n ).length;\n const pendingDisconnectCount = pendingDisconnectIds.length;\n const totalCount = defaultValue.count ?? 0;\n const displayCount = Math.max(\n 0,\n Math.max(totalCount, initialRows.length) + pendingConnectCount - pendingDisconnectCount\n );\n const hasMore = totalCount > 0 && rows.length > 0 && rows.length < totalCount;\n\n const handleLoadMore = useCallback(() => {\n if (loading) {\n return;\n }\n\n getData({\n variables: {\n limit: PAGE_SIZE,\n offset: rows.length,\n where: connectionName\n ? {\n [connectionName]: {\n some: {\n _id: { eq: entityId },\n },\n },\n }\n : {},\n },\n })\n .then(({ data: res }: { data: (EntityQueryResults & EntityQueryAggregate) | undefined }) => {\n if (!res) {\n return;\n }\n\n const mappedData = mapQueryResult(relationshipEntitySchema?.plural ?? '', scope, res, schema);\n setRows(uniqBy(prop('_id'), [...initialRows, ...(mappedData.results as [])]));\n })\n .catch((error: unknown) => {\n console.error('Error fetching more data:', error);\n });\n }, [\n connectionName,\n entityId,\n getData,\n initialRows,\n loading,\n relationshipEntitySchema?.plural,\n rows.length,\n schema,\n scope,\n ]);\n\n function handleSelection(event: SyntheticEvent): void {\n event.preventDefault();\n\n if (readOnly) {\n return;\n }\n\n actionDispatch({\n type: 'EditRelationship',\n payload: {\n connectedEntitiesCount: initialRows.length,\n connectionName,\n entityName: relationshipEntityName,\n entityId,\n relationshipId,\n mode: relationship?.mode ?? 'multiple',\n },\n });\n }\n\n return (\n <FormField\n control={control}\n defaultValue={defaultValue}\n name={name}\n render={() => (\n <FormItem className=\"fk:min-w-0\">\n <FormLabel htmlFor={fieldId}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl className=\"fk:flex fk:flex-col fk:w-full fk:min-w-0 fk:min-h-9.5 fk:pl-3 fk:pr-3 fk:py-0.5 fk:text-sm\">\n <div\n aria-controls={`relationship-dropdown-${name}`}\n aria-expanded={isOpen}\n className={`fk:relative fk:flex fk:w-full fk:min-w-0 fk:items-start fk:space-x-2 fk:rounded-md fk:border fk:border-input fk:bg-background fk:focus-visible:outline-hidden fk:ring-offset-background fk:focus-visible:ring-2 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-2 ${\n isOpen ? 'fk:outline-hidden fk:ring-2 fk:ring-ring fk:ring-offset-2' : ''\n } fk:corner-squircle`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.focus();\n wrapperRef.current?.click();\n setIsOpen(true);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n setIsOpen(true);\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }\n }}\n ref={wrapperRef}\n role=\"combobox\"\n tabIndex={0}\n >\n <div className=\"fk:flex fk:w-full fk:min-w-0 fk:flex-col\">\n <div className=\"fk:flex fk:w-full fk:min-w-0 fk:items-start fk:gap-2\">\n {!isOpen ? (\n <span className=\"fk:flex fk:min-w-0 fk:flex-wrap fk:grow fk:overflow-hidden fk:pb-1.5\">\n {previewItems.map((item) => (\n <Badge\n className=\"fk:mr-2 fk:mt-1.5 fk:max-w-60 fk:justify-start fk:rounded-xs fk:corner-squircle\"\n key={item}\n title={item}\n variant=\"secondary\"\n >\n <span className=\"fk:min-w-0 fk:truncate\">{item}</span>\n </Badge>\n ))}\n {hasMorePreviewItems ? (\n <Badge className=\"fk:mr-2 fk:mt-1.5 fk:rounded-xs fk:corner-squircle\" variant=\"secondary\">\n …\n </Badge>\n ) : null}\n </span>\n ) : (\n <Button\n className=\"fk:h-8 fk:mr-auto fk:mt-[0.1875rem]\"\n disabled={readOnly}\n onClick={handleSelection}\n variant=\"outline\"\n >\n <Link className=\"fk:h-4 fk:w-4 fk:mr-2\" /> Link to a record from{' '}\n {relationshipEntitySchema?.menu?.label ?? relationshipEntitySchema?.plural}\n </Button>\n )}\n <div className=\"fk:mt-[0.1875rem] fk:ml-auto fk:flex fk:shrink-0 fk:items-center fk:gap-2\">\n {isOpen ? (\n <span className=\"fk:text-sm fk:font-normal fk:text-muted-foreground\">\n {displayCount.toLocaleString()} {displayCount === 1 ? 'record' : 'records'}\n </span>\n ) : null}\n {!isOpen ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n id={fieldId}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n wrapperRef.current?.focus();\n wrapperRef.current?.click();\n }\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n <Maximize2 className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Expand field</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n wrapperRef.current?.blur();\n setIsOpen(false);\n }\n }}\n size=\"icon\"\n variant=\"ghost\"\n >\n <ClearIcon className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Close</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n </div>\n <Collapsible\n className=\"fk:w-full fk:min-w-0 fk:space-y-2 fk:ml-0!\"\n onOpenChange={setIsOpen}\n open={isOpen}\n >\n <CollapsibleContent className=\"fk:w-full fk:min-w-0\">\n <div className=\"fk:mt-3 fk:mb-2 fk:w-full fk:min-w-0\" id={`relationship-dropdown-${name}`}>\n <DataTable\n classNames={{\n wrapper: 'fk:h-[17.5rem] fk:min-h-0 fk:min-w-0 fk:gap-0',\n table: 'fk:pb-0',\n }}\n columns={columns}\n data={rows}\n entityName={entityName}\n hasMore={hasMore}\n isLoadingMore={loading && rows.length > 0}\n onLoadMore={handleLoadMore}\n rowAdditionState={\n relationships[relationshipId]?.connect as MultipleRelationshipConnection | undefined\n }\n rowDeletionState={relationships[relationshipId]?.disconnect}\n />\n </div>\n </CollapsibleContent>\n </Collapsible>\n </div>\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n\ntype DataRowActions = {\n appDispatch: Dispatch<ActionSetRelationship>;\n relationshipId: string;\n relationships: Relationships;\n row: Row<AttributeValue>;\n setRows: Dispatch<React.SetStateAction<AttributeValue[]>>;\n};\n\nfunction dataRowActions({ appDispatch, relationshipId, relationships, row, setRows }: DataRowActions): JSX.Element {\n function disconnectEntity(entityId: string): void {\n const connectedEntities = (relationships[relationshipId]?.connect as MultipleRelationshipConnection | null) ?? [];\n const rowToDeleteWasJustConnected = typeof find(propEq(entityId, '_id'), connectedEntities) === 'object';\n\n const shouldUndoDisconnection = relationships[relationshipId]?.disconnect?.includes(entityId);\n const disconnection = rowToDeleteWasJustConnected\n ? (relationships[relationshipId]?.disconnect ?? [])\n : uniq([...(relationships[relationshipId]?.disconnect ?? []), entityId]);\n\n if (rowToDeleteWasJustConnected) {\n setRows((rows) => rows.filter((rowItem) => rowItem._id !== entityId));\n }\n\n appDispatch({\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect: connectedEntities.filter((rowItem) => rowItem._id !== entityId),\n disconnect: shouldUndoDisconnection\n ? (relationships[relationshipId]?.disconnect?.filter((_id) => _id !== entityId) ?? [])\n : disconnection,\n },\n },\n });\n }\n\n return <DataTableRowActions action={disconnectEntity} row={row} />;\n}\n\ntype DataAdapter = {\n data: unknown;\n defaultScope: string;\n primaryAttributeName: string;\n relationshipEntitySchema: Entity | undefined;\n scope: string;\n};\n\nfunction dataAdapter({ data, defaultScope, relationshipEntitySchema, scope }: DataAdapter): AttributeValue[] {\n if (!Array.isArray(data)) {\n return [];\n }\n\n const renderNode = (node: AttributeValue): unknown => {\n const relationshipFieldSchema = find(propEq(node.__typename, 'name'))(\n relationshipEntitySchema?.attributes ?? []\n ) as Attribute | undefined;\n const relationshipFieldName = relationshipFieldSchema?.relationship?.field ?? '';\n\n if (relationshipFieldName) {\n const rawFieldValue = node[relationshipFieldName];\n const fieldNode = (Array.isArray(rawFieldValue) ? rawFieldValue[0] : rawFieldValue) as\n | AttributeValue\n | string\n | null\n | undefined;\n\n if (fieldNode && typeof fieldNode === 'object') {\n return fieldNode[scope] ?? fieldNode[defaultScope] ?? '';\n }\n\n return fieldNode;\n }\n\n return node[scope] ?? node[defaultScope];\n };\n\n return data.map(\n (row: MappedEntityItem | EntityItem) =>\n map((field) => {\n // All relationship fields (scoped attributes, single and multiple\n // relationships) are lists in the schema\n if (Array.isArray(field)) {\n const nodes = field as unknown as AttributeValue[];\n\n if (nodes.length === 0) {\n return '';\n }\n\n if (nodes.length === 1) {\n return renderNode(nodes[0]);\n }\n\n return nodes.slice(0, 3).map(renderNode).join(', ');\n }\n\n if (field && typeof field !== 'string' && field.__typename) {\n return renderNode(field);\n }\n\n return field;\n }, row) as AttributeValue\n );\n}\n","import { useEffect, useId, useState } from 'react';\nimport type { JSX, SyntheticEvent } from 'react';\nimport { find, propEq } from 'ramda';\nimport { ChevronsUpDown, X as ClearIcon } from 'lucide-react';\nimport { Button } from '../../../ui/primitives/button';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../../ui/primitives/form';\nimport { Input } from '../../../ui/primitives/input';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../ui/primitives/tooltip';\nimport { getDisplayAttribute } from '../../../core/get-display-attribute';\nimport type { ActionSetRelationship, Entity, SingleRelationshipConnection } from '../../../core/types';\nimport { useDispatch } from '../../../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../../../core/app-context';\nimport type { FormFieldParams } from '../../types';\nimport type { AttributeValue, EntityItem, MappedEntityItem } from '../../../graphql-client/types';\n\nexport default function SingleRelationship({\n control,\n defaultScope,\n defaultValue,\n entityId,\n fieldSchema,\n getValues,\n readOnly,\n schema,\n scope,\n setValue,\n}: FormFieldParams<'relationship'>): JSX.Element {\n const [hasFocus, setHasFocus] = useState(false);\n const { name, label, options, relationship } = fieldSchema;\n const relationshipEntity: string = relationship?.entity ?? name;\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const fieldId = useId();\n const { relationships } = useAppContext();\n const relationshipId = useId();\n const relationshipEntitySchema = find(propEq(relationshipEntity, 'name'))(schema) as Entity | undefined;\n const displayAttributeName = getDisplayAttribute(relationshipEntitySchema)?.name;\n\n useEffect(() => {\n const connectValue = defaultValue.value;\n\n if (connectValue === '' || typeof connectValue === 'boolean' || typeof connectValue === 'number') {\n return;\n }\n\n const connect: SingleRelationshipConnection = {\n _id: String(defaultValue._id),\n value: connectValue,\n };\n const action: ActionSetRelationship = {\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect,\n disconnect: [],\n },\n },\n };\n\n // set the initial state of the relationship\n appDispatch(action);\n }, [appDispatch, relationshipId, defaultValue, scope]);\n\n /**\n * Update the value of the relationship attribute when the relationshp context value changes\n * The relationshp context value changes when the user selects a row from the datagrid in the EditRelationship modal\n */\n useEffect(() => {\n setValue(name, { ...getValues(name), ...(relationships[relationshipId]?.connect ?? '') });\n }, [defaultValue, name, relationships, relationshipId, setValue]);\n\n function handleSelection(event: SyntheticEvent): void {\n event.preventDefault();\n\n if (readOnly) {\n return;\n }\n\n actionDispatch({\n type: 'EditRelationship',\n payload: {\n connectedEntitiesCount: 0,\n entityName: relationshipEntity,\n entityId,\n relationshipId,\n mode: relationship?.mode ?? 'single',\n },\n });\n }\n\n function handleClearing(event: SyntheticEvent): void {\n if (readOnly) {\n return;\n }\n\n const action: ActionSetRelationship = {\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect: [],\n disconnect: [],\n },\n },\n };\n\n event.preventDefault();\n appDispatch(action);\n setValue(name, { ...getValues(name), _id: '', value: undefined });\n }\n\n return (\n <FormField\n control={control}\n defaultValue={defaultValue}\n name={name}\n render={({\n field,\n }: {\n field: {\n value?: {\n value: string | MappedEntityItem | EntityItem | AttributeValue | undefined | null;\n };\n };\n }) => {\n const value = field.value?.value;\n let displayValue = '';\n\n if (\n displayAttributeName &&\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n value[displayAttributeName]\n ) {\n const rawPrimary = value[displayAttributeName];\n // Local display attributes are list relationship fields with 0..1 scoped nodes\n const primaryValue = (Array.isArray(rawPrimary) ? rawPrimary[0] : rawPrimary) as\n | AttributeValue\n | string\n | undefined;\n\n if (typeof primaryValue === 'string') {\n displayValue = primaryValue;\n } else {\n displayValue = ((primaryValue?.[scope] ?? primaryValue?.[defaultScope]) as string | undefined) ?? '';\n }\n }\n\n return (\n <FormItem>\n <FormLabel htmlFor={fieldId}>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <FormControl className=\"fk:flex fk:w-full fk:items-center fk:space-x-2\">\n <div\n className={`fk:relative fk:flex fk:w-full fk:items-start fk:space-x-2 fk:rounded-md fk:border fk:border-input fk:bg-background fk:ring-offset-background ${\n hasFocus ? 'fk:outline-hidden fk:ring-2 fk:ring-ring fk:ring-offset-2' : ''\n } fk:corner-squircle`}\n >\n <Input\n className=\"fk:h-9.5 fk:py-1.75 fk:caret-transparent fk:border-0 fk:focus-visible:ring-0 fk:focus-visible:ring-offset-0\"\n disabled={readOnly}\n id={fieldId}\n onBlur={() => {\n setHasFocus(false);\n }}\n onClick={handleSelection}\n onFocus={() => {\n setHasFocus(true);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n handleSelection(e);\n }\n }}\n readOnly\n type=\"text\"\n value={displayValue}\n />\n {displayValue ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:absolute fk:right-10 fk:top-0.75 fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n disabled={readOnly}\n onClick={handleClearing}\n size=\"icon\"\n variant=\"ghost\"\n >\n <ClearIcon className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Clear</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n className=\"fk:absolute fk:right-0.75 fk:top-0.75 fk:h-8 fk:w-8 fk:rounded-sm fk:text-muted-foreground fk:corner-squircle\"\n disabled={readOnly}\n onClick={handleSelection}\n size=\"icon\"\n variant=\"ghost\"\n >\n <ChevronsUpDown className=\"fk:h-4 fk:w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Open</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n </FormControl>\n <FormMessage />\n </FormItem>\n );\n }}\n />\n );\n}\n","import type { JSX } from 'react';\nimport { AlertTriangle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../../ui/primitives/alert';\nimport type { FormFieldParams } from '../../types';\nimport AssetMultipleRelationship from './asset-multiple';\nimport MultipleRelationship from './multiple';\nimport SingleRelationship from './single';\n\nexport default function Relationship(formFieldParams: FormFieldParams<'relationship'>): JSX.Element {\n const { fieldSchema } = formFieldParams;\n const { relationship } = fieldSchema;\n\n if (relationship?.mode === 'single') {\n return <SingleRelationship {...formFieldParams} />;\n }\n\n if (relationship?.mode === 'multiple') {\n if (relationship.entity === '_asset') {\n return <AssetMultipleRelationship {...formFieldParams} />;\n }\n\n const props = { relationshipEntityName: fieldSchema.relationship?.entity, ...formFieldParams };\n\n return <MultipleRelationship {...props} />;\n }\n\n return (\n <Alert variant=\"destructive\">\n <AlertTriangle className=\"h-4 w-4\" />\n <AlertTitle>Error</AlertTitle>\n <AlertDescription>\n {`Incorrect \"mode\" for relationship field. It should be \"single\" or \"multiple\". Please check the schema configuration.`}\n </AlertDescription>\n </Alert>\n );\n}\n","import type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport {\n Select as SelectPrimitive,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from '../../ui/primitives/select';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nconst SELECT_OPTION_PREFIX = 'flexkit-select-option:';\n\nfunction encodeOptionValue(value: string): string {\n return `${SELECT_OPTION_PREFIX}${encodeURIComponent(value)}`;\n}\n\nfunction decodeOptionValue(value: string): string {\n return decodeURIComponent(value.slice(SELECT_OPTION_PREFIX.length));\n}\n\nexport function Select({ control, fieldSchema, readOnly, setValue }: FormFieldParams<'select'>): JSX.Element {\n const { name, label, options } = fieldSchema;\n\n function handleInput(value: string, previousValue: FormFieldValue | undefined): void {\n const shouldCastToNumber = fieldSchema.dataType === 'int' && !isNaN(Number(value));\n const castedValue = shouldCastToNumber ? Number(value) : value;\n\n setValue(name, {\n ...previousValue,\n value: castedValue,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n <SelectPrimitive\n defaultValue={\n field.value?.value === undefined || field.value.value === null\n ? undefined\n : encodeOptionValue(String(field.value.value))\n }\n disabled={readOnly || field.value?.disabled}\n onValueChange={(value) => {\n handleInput(decodeOptionValue(value), field.value);\n }}\n >\n <FormControl>\n <SelectTrigger>\n <SelectValue placeholder={options?.placeholder} />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n {options?.list?.map((option) => {\n if ('groupLabel' in option) {\n return (\n <SelectGroup key={option.groupLabel}>\n <SelectLabel>{option.groupLabel}</SelectLabel>\n {option.items.map((item) => {\n return (\n <SelectItem key={item.label} value={encodeOptionValue(item.value)}>\n {item.label}\n </SelectItem>\n );\n })}\n </SelectGroup>\n );\n }\n\n return (\n <SelectItem key={option.label} value={encodeOptionValue(option.value)}>\n {option.label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </SelectPrimitive>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n disabled={readOnly}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import type { FieldGroup } from './types';\n\nexport const ALL_FIELDS_GROUP_NAME = 'all';\n\nexport const ALL_FIELDS_GROUP: FieldGroup = {\n name: ALL_FIELDS_GROUP_NAME,\n title: 'All fields',\n};\n","import { ALL_FIELDS_GROUP, ALL_FIELDS_GROUP_NAME } from '../core/field-groups';\nimport type { Attribute, FieldGroup } from '../core/types';\n\nexport function getAttributeGroupNames(attribute: Attribute): string[] {\n if (typeof attribute.group === 'string') {\n return [attribute.group];\n }\n\n if (Array.isArray(attribute.group)) {\n return attribute.group;\n }\n\n return [];\n}\n\nexport function attributeBelongsToGroup(attribute: Attribute, groupName: string): boolean {\n if (groupName === ALL_FIELDS_GROUP_NAME) {\n return true;\n }\n\n return getAttributeGroupNames(attribute).includes(groupName);\n}\n\nexport function isAttributeVisibleInGroups(attribute: Attribute, groups: FieldGroup[]): boolean {\n if (groups.length === 0) {\n return true;\n }\n\n return groups.some((group) => attributeBelongsToGroup(attribute, group.name));\n}\n\nexport function resolveVisibleFieldGroups(groups: FieldGroup[] | undefined): FieldGroup[] {\n if (!groups || groups.length === 0) {\n return [];\n }\n\n const authoredAllFields = groups.find((group) => group.name === ALL_FIELDS_GROUP_NAME);\n const namedGroups = groups.filter((group) => group.name !== ALL_FIELDS_GROUP_NAME);\n const allFieldsGroup: FieldGroup = {\n ...ALL_FIELDS_GROUP,\n ...authoredAllFields,\n };\n const resolvedGroups = [allFieldsGroup, ...namedGroups];\n\n return resolvedGroups.filter((group) => group.hidden !== true);\n}\n\nexport function getDefaultFieldGroupName(groups: FieldGroup[]): string {\n const defaultGroup = groups.find((group) => group.default);\n\n if (defaultGroup) {\n return defaultGroup.name;\n }\n\n const firstNamedGroup = groups.find((group) => group.name !== ALL_FIELDS_GROUP_NAME);\n\n if (firstNamedGroup) {\n return firstNamedGroup.name;\n }\n\n return ALL_FIELDS_GROUP_NAME;\n}\n","import { z } from 'zod';\nimport type { JsonSchemaObject } from '../core/types';\n\n/**\n * Builds a Zod schema from the JSON Schema fragment `flexkit deploy` compiled\n * out of the config's `validation`. Only the keywords the serializer allows\n * are handled (see `SUPPORTED_VALIDATION_KEYWORDS` in `@flexkit/schema`);\n * anything else is ignored with a one-time warning.\n *\n * Messages are generated from the attribute label: authored Zod messages do\n * not survive the JSON Schema round trip.\n */\nexport function jsonSchemaToZod(schema: JsonSchemaObject, label: string): z.ZodType {\n return convert(schema, label);\n}\n\nconst warned = new Set<string>();\n\nfunction warnOnce(keyword: string): void {\n if (warned.has(keyword)) {\n return;\n }\n\n warned.add(keyword);\n console.warn(`[flexkit] validation keyword \"${keyword}\" is not supported by the Studio form and was ignored.`);\n}\n\nconst HANDLED_KEYWORDS = new Set([\n 'type',\n 'minLength',\n 'maxLength',\n 'pattern',\n 'format',\n 'minimum',\n 'maximum',\n 'exclusiveMinimum',\n 'exclusiveMaximum',\n 'multipleOf',\n 'enum',\n 'const',\n 'properties',\n 'required',\n 'additionalProperties',\n 'items',\n 'minItems',\n 'maxItems',\n 'anyOf',\n 'oneOf',\n 'not',\n 'description',\n 'title',\n '$schema',\n]);\n\nconst FORMAT_MESSAGES: { [format: string]: string } = {\n email: 'must be a valid email address',\n uri: 'must be a valid URL',\n uuid: 'must be a valid UUID',\n 'date-time': 'must be a valid date and time',\n date: 'must be a valid date',\n time: 'must be a valid time',\n};\n\nfunction isObject(value: unknown): value is JsonSchemaObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction literal(value: unknown): z.ZodType {\n if (value === null) return z.null();\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return z.literal(value);\n\n return z.any().refine((candidate) => JSON.stringify(candidate) === JSON.stringify(value));\n}\n\nfunction unionOf(options: z.ZodType[], label: string): z.ZodType {\n if (options.length === 0) return z.any();\n if (options.length === 1) return options[0]!;\n\n return z.union(options as [z.ZodType, z.ZodType, ...z.ZodType[]], { error: `${label} is invalid` });\n}\n\nfunction convertString(schema: JsonSchemaObject, label: string): z.ZodType {\n let result = z.string({ error: `${label} must be text` });\n const format = typeof schema.format === 'string' ? schema.format : undefined;\n const formatMessage = format ? (FORMAT_MESSAGES[format] ?? `must match the ${format} format`) : 'has an invalid format';\n\n if (typeof schema.minLength === 'number') {\n const min = schema.minLength;\n result = result.min(min, { error: min <= 1 ? `${label} is required` : `${label} must be at least ${String(min)} characters` });\n }\n\n if (typeof schema.maxLength === 'number') {\n result = result.max(schema.maxLength, { error: `${label} must be at most ${String(schema.maxLength)} characters` });\n }\n\n if (typeof schema.pattern === 'string') {\n try {\n result = result.regex(new RegExp(schema.pattern), { error: `${label} ${formatMessage}` });\n } catch {\n warnOnce(`pattern:${schema.pattern}`);\n }\n }\n\n return result;\n}\n\nconst SAFE_BOUNDS = new Set([Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER]);\n\nfunction convertNumber(schema: JsonSchemaObject, label: string, integer: boolean): z.ZodType {\n let result = z.number({ error: `${label} must be a number` });\n\n if (integer) {\n result = result.int({ error: `${label} must be a whole number` });\n }\n\n const minimum = typeof schema.minimum === 'number' && !SAFE_BOUNDS.has(schema.minimum) ? schema.minimum : undefined;\n const maximum = typeof schema.maximum === 'number' && !SAFE_BOUNDS.has(schema.maximum) ? schema.maximum : undefined;\n const between =\n minimum !== undefined && maximum !== undefined ? `${label} must be between ${String(minimum)} and ${String(maximum)}` : undefined;\n\n if (minimum !== undefined) {\n result = result.min(minimum, { error: between ?? `${label} must be at least ${String(minimum)}` });\n }\n\n if (maximum !== undefined) {\n result = result.max(maximum, { error: between ?? `${label} must be at most ${String(maximum)}` });\n }\n\n if (typeof schema.exclusiveMinimum === 'number') {\n result = result.gt(schema.exclusiveMinimum, { error: `${label} must be greater than ${String(schema.exclusiveMinimum)}` });\n }\n\n if (typeof schema.exclusiveMaximum === 'number') {\n result = result.lt(schema.exclusiveMaximum, { error: `${label} must be less than ${String(schema.exclusiveMaximum)}` });\n }\n\n if (typeof schema.multipleOf === 'number') {\n result = result.multipleOf(schema.multipleOf, { error: `${label} must be a multiple of ${String(schema.multipleOf)}` });\n }\n\n return result;\n}\n\nfunction convertArray(schema: JsonSchemaObject, label: string): z.ZodType {\n let result = z.array(isObject(schema.items) ? convert(schema.items, label) : z.any(), {\n error: `${label} must be a list`,\n });\n\n if (typeof schema.minItems === 'number') {\n result = result.min(schema.minItems, {\n error: schema.minItems <= 1 ? `${label} is required` : `${label} needs at least ${String(schema.minItems)} items`,\n });\n }\n\n if (typeof schema.maxItems === 'number') {\n result = result.max(schema.maxItems, { error: `${label} allows at most ${String(schema.maxItems)} items` });\n }\n\n return result;\n}\n\nfunction convertObject(schema: JsonSchemaObject, label: string): z.ZodType {\n const properties = isObject(schema.properties) ? schema.properties : {};\n const required = new Set(Array.isArray(schema.required) ? schema.required.filter((key) => typeof key === 'string') : []);\n const shape: { [key: string]: z.ZodType } = {};\n\n for (const [key, property] of Object.entries(properties)) {\n const converted = isObject(property) ? convert(property, `${label} ${key}`) : z.any();\n shape[key] = required.has(key) ? converted : converted.optional();\n }\n\n // `additionalProperties: false` is what Zod emits for every z.object(), whose\n // authored behaviour is to strip unknown keys, not reject them. Mirror that.\n return z.object(shape, { error: `${label} is required` });\n}\n\nfunction convertByType(type: unknown, schema: JsonSchemaObject, label: string): z.ZodType {\n switch (type) {\n case 'string':\n return convertString(schema, label);\n case 'integer':\n return convertNumber(schema, label, true);\n case 'number':\n return convertNumber(schema, label, false);\n case 'boolean':\n return z.boolean({ error: `${label} must be yes or no` });\n case 'null':\n return z.null();\n case 'array':\n return convertArray(schema, label);\n case 'object':\n return convertObject(schema, label);\n default:\n if (typeof type === 'string') warnOnce(`type:${type}`);\n\n return z.any();\n }\n}\n\nfunction convert(schema: JsonSchemaObject, label: string): z.ZodType {\n for (const keyword of Object.keys(schema)) {\n if (!HANDLED_KEYWORDS.has(keyword)) {\n warnOnce(keyword);\n }\n }\n\n if (schema.const !== undefined) {\n return literal(schema.const);\n }\n\n if (Array.isArray(schema.enum)) {\n return unionOf(\n schema.enum.map((value) => literal(value)),\n label\n );\n }\n\n const alternatives = Array.isArray(schema.anyOf) ? schema.anyOf : Array.isArray(schema.oneOf) ? schema.oneOf : undefined;\n\n if (alternatives) {\n const options = alternatives.filter(isObject);\n const nullIndex = options.findIndex((option) => option.type === 'null');\n\n if (nullIndex !== -1 && options.length === 2) {\n const other = options[nullIndex === 0 ? 1 : 0]!;\n\n return convert(other, label).nullable();\n }\n\n return unionOf(\n options.map((option) => convert(option, label)),\n label\n );\n }\n\n if (isObject(schema.not)) {\n const forbidden = convert(schema.not, label);\n\n return z.any().refine((value) => !forbidden.safeParse(value).success, { error: `${label} is invalid` });\n }\n\n if (Array.isArray(schema.type)) {\n return unionOf(\n schema.type.map((type) => convertByType(type, schema, label)),\n label\n );\n }\n\n return convertByType(schema.type, schema, label);\n}\n\n/**\n * Wraps a converted schema so the form shows one message per field: the\n * required message for empty values, otherwise the first failing rule.\n */\nexport function toFieldValidator(schema: z.ZodType, label: string): z.ZodType {\n return z.any().superRefine((value, ctx) => {\n const result = schema.safeParse(value);\n\n if (result.success) {\n return;\n }\n\n const isEmpty = value === undefined || value === null || value === '';\n\n ctx.addIssue({\n code: 'custom',\n message: isEmpty ? `${label} is required` : (result.error.issues[0]?.message ?? `${label} is invalid`),\n });\n });\n}\n","import { createElement, forwardRef, memo, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport type { ComponentType, ForwardedRef, JSX } from 'react';\nimport { useForm } from 'react-hook-form';\nimport type { Resolver } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { z } from 'zod';\nimport { equals, find, propEq } from 'ramda';\nimport { AlertTriangle } from 'lucide-react';\nimport { Icon } from '../ui/components/icon';\nimport { Alert, AlertDescription, AlertTitle } from '../ui/primitives/alert';\nimport { Form } from '../ui/primitives/form';\nimport { ScrollArea, ScrollBar } from '../ui/primitives/scroll-area';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../ui/primitives/tabs';\nimport type { Attribute, Entity, Schema } from '../core/types';\nimport type { FormEntityItem, FormFieldValue } from '../graphql-client/types';\nimport { useAuth } from '../auth/auth-context';\nimport { filterAttributesForSpaces } from '../core/spaces';\nimport { Text as TextField } from './fields/text';\nimport { Switch as SwitchField } from './fields/switch';\nimport { Uploader as UploaderField } from './fields/uploader';\nimport { Number as NumberField } from './fields/number';\nimport { DateTime as DateTimeField } from './fields/datetime';\nimport EditorField from './fields/editor';\nimport { Textarea as TextareaField } from './fields/textarea';\nimport RelationshipField from './fields/relationship';\nimport { Select as SelectField } from './fields/select';\nimport type { FormFieldParams } from './types';\nimport {\n attributeBelongsToGroup,\n getDefaultFieldGroupName,\n isAttributeVisibleInGroups,\n resolveVisibleFieldGroups,\n} from './field-groups';\nimport { jsonSchemaToZod, toFieldValidator } from './json-schema-to-zod';\n\nconst warnedInputTypes = new Set<string>();\n\nexport type SubmitHandle = {\n submit: () => void;\n hasErrors: () => void;\n hasDataChanged: () => boolean;\n markAsSaved: () => void;\n /**\n * Patches local-attribute _ids returned by an update mutation into the live\n * form values without replacing the whole formData snapshot (avoids dirtying).\n */\n applyLocalAttributeIds: (ids: { [attributeName: string]: string }) => void;\n};\n\ntype Props = {\n currentScope: string;\n defaultScope: string;\n entityId?: string;\n entityName: string;\n entityNamePlural: string;\n formData?: FormEntityItem;\n schema: Schema;\n setIsDirty: (isDirty: boolean) => void;\n onSubmit: (newData: FormEntityItem, previousData?: FormEntityItem) => void;\n};\n\nfunction getInitialFieldValue(field: Attribute, defaultScope: string): FormFieldValue {\n const value = field.dataType === 'asset' || field.scope === 'relationship' ? '' : (field.defaultValue ?? '');\n\n return {\n disabled: false,\n scope: defaultScope,\n value,\n };\n}\n\nfunction FormBuilder(\n { currentScope, defaultScope, entityId, entityName, entityNamePlural, formData, schema, setIsDirty, onSubmit }: Props,\n ref: ForwardedRef<SubmitHandle>\n): JSX.Element {\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const [, auth] = useAuth();\n const userSpaces = auth.user?.spaces;\n // Hide space-bound attributes from non-members; the server rejects writes\n // and nulls reads for them regardless.\n const formSchema = useMemo(\n () => filterAttributesForSpaces(entitySchema?.attributes ?? [], userSpaces),\n [entitySchema, userSpaces]\n );\n const initialFormValues = useMemo(() => {\n if (formData) {\n return formData;\n }\n\n return formSchema.reduce<FormEntityItem>(\n (values, field) => ({\n ...values,\n [field.name]: getInitialFieldValue(field, defaultScope),\n }),\n {}\n );\n }, [defaultScope, formData, formSchema]);\n // Validators are compiled once per schema, not on every blur: the deployed\n // JSON Schema of each attribute is converted back to Zod and wrapped so the\n // form shows a single label-based message per field.\n const validators = useMemo(() => {\n const visibleGroupsForValidation = resolveVisibleFieldGroups(entitySchema?.groups);\n const shape: { [fieldName: string]: z.ZodType } = {};\n\n for (const fieldSchema of formSchema) {\n if (fieldSchema.validation === undefined || fieldSchema.hidden === true || fieldSchema.readOnly === true) {\n continue;\n }\n\n if (!isAttributeVisibleInGroups(fieldSchema, visibleGroupsForValidation)) {\n continue;\n }\n\n const label = fieldSchema.label || fieldSchema.name;\n\n shape[fieldSchema.name] = z.object({\n value: toFieldValidator(jsonSchemaToZod(fieldSchema.validation, label), label),\n });\n }\n\n return zodResolver(z.object(shape)) as Resolver<FormEntityItem>;\n }, [entitySchema?.groups, formSchema]);\n const resolver: Resolver<FormEntityItem> = (values, context, options) => validators(values, context, options);\n\n const form = useForm<FormEntityItem>({\n defaultValues: initialFormValues,\n resolver,\n values: formData,\n mode: 'onBlur',\n criteriaMode: 'all',\n });\n\n const { control, getValues, handleSubmit, setValue, watch, trigger } = form;\n // Subscribe to value changes so dirty tracking below re-renders with the form.\n watch();\n const visibleGroups = useMemo(() => resolveVisibleFieldGroups(entitySchema?.groups), [entitySchema?.groups]);\n const [activeGroup, setActiveGroup] = useState(() => getDefaultFieldGroupName(visibleGroups));\n // Baseline for dirty checks. Updated on successful save so relationship-field\n // noise / stale formData props cannot keep reporting dirty after Save.\n const baselineRef = useRef<FormEntityItem | undefined>(formData);\n const hasMarkedSavedRef = useRef(false);\n\n useEffect(() => {\n if (hasMarkedSavedRef.current) {\n return;\n }\n\n baselineRef.current = formData;\n }, [formData]);\n\n const formFieldComponentsMap = {\n datetime: DateTimeField,\n editor: EditorField,\n asset: UploaderField,\n number: NumberField,\n relationship: RelationshipField,\n select: SelectField,\n 'switch': SwitchField,\n text: TextField,\n textarea: TextareaField,\n };\n\n useImperativeHandle(ref, () => ({\n submit() {\n // Force validate all fields\n void trigger().then(() => {\n void handleSubmit(() => {\n const values = getValues() as FormEntityItem;\n // Commit baseline immediately so close matches the disabled Save button\n // even before the mutation onCompleted handler runs.\n hasMarkedSavedRef.current = true;\n baselineRef.current = values;\n setIsDirty(false);\n onSubmit(values, formData);\n })();\n });\n },\n hasErrors() {\n hasMarkedSavedRef.current = false;\n baselineRef.current = formData;\n setIsDirty(true);\n },\n hasDataChanged() {\n return hasDataChanged(getValues(), baselineRef.current);\n },\n markAsSaved() {\n hasMarkedSavedRef.current = true;\n baselineRef.current = getValues() as FormEntityItem;\n setIsDirty(false);\n },\n applyLocalAttributeIds(ids: { [attributeName: string]: string }) {\n const values = getValues() as FormEntityItem;\n const nextValues: FormEntityItem = { ...values };\n\n for (const [attributeName, id] of Object.entries(ids)) {\n const field = values[attributeName];\n\n if (!field || field._id || !id) {\n continue;\n }\n\n nextValues[attributeName] = {\n ...field,\n _id: id,\n };\n }\n\n // Baseline first so any watch fired by setValue still compares clean.\n hasMarkedSavedRef.current = true;\n baselineRef.current = nextValues;\n\n for (const [attributeName, field] of Object.entries(nextValues)) {\n if (field === values[attributeName]) {\n continue;\n }\n\n setValue(attributeName, field, {\n shouldDirty: false,\n shouldTouch: false,\n shouldValidate: false,\n });\n }\n\n setIsDirty(false);\n },\n }));\n\n useEffect(() => {\n const formChangesSubscription = watch(() => {\n // Always compare the full form snapshot. The watch callback payload can be\n // partial and falsely report dirty against the baseline.\n setIsDirty(hasDataChanged(getValues(), baselineRef.current));\n });\n\n return () => {\n formChangesSubscription.unsubscribe();\n };\n }, [formData, getValues, setIsDirty, watch]);\n\n useEffect(() => {\n if (visibleGroups.length === 0) {\n return;\n }\n\n if (visibleGroups.some((group) => group.name === activeGroup)) {\n return;\n }\n\n setActiveGroup(getDefaultFieldGroupName(visibleGroups));\n }, [activeGroup, visibleGroups]);\n\n if (!entitySchema || entitySchema.attributes.length === 0) {\n return (\n <Alert variant=\"destructive\">\n <AlertTriangle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>Error</AlertTitle>\n <AlertDescription>\n No attributes found in the schema for entity <strong>{entityName}</strong>\n </AlertDescription>\n </Alert>\n );\n }\n\n const renderField = (field: Attribute) => {\n if (field.name === '_id') {\n return null;\n }\n\n if (field.hidden === true) {\n return null;\n }\n\n const readOnly = field.readOnly === true;\n const knownComponent = formFieldComponentsMap[field.inputType as keyof typeof formFieldComponentsMap] as\n | ComponentType<FormFieldParams<typeof field.inputType>>\n | undefined;\n\n if (!knownComponent && !warnedInputTypes.has(field.inputType)) {\n // Custom input types from the extension era render as text now.\n warnedInputTypes.add(field.inputType);\n console.warn(`[flexkit] Unknown inputType \"${field.inputType}\" on \"${field.name}\"; rendering a text field.`);\n }\n\n const fieldComponent =\n knownComponent ?? (TextField as unknown as ComponentType<FormFieldParams<typeof field.inputType>>);\n\n return createElement(\n fieldComponent as ComponentType<FormFieldParams<typeof field.inputType>>,\n {\n key: field.name,\n control,\n defaultScope,\n defaultValue: initialFormValues[field.name],\n entityId,\n entityName,\n entityNamePlural,\n fieldSchema: field,\n getValues,\n readOnly,\n schema,\n scope: currentScope,\n setValue,\n } as FormFieldParams<typeof field.inputType>\n );\n };\n\n return (\n <Form {...form}>\n <form\n className=\"fk:flex fk:flex-col fk:gap-5\"\n onSubmit={(event) => {\n event.preventDefault();\n }}\n >\n {visibleGroups.length > 0 ? (\n <Tabs onValueChange={setActiveGroup} value={activeGroup}>\n <div className=\"fk:sticky fk:top-0 fk:z-10 fk:bg-background fk:py-1 fk:mb-6\">\n <ScrollArea className=\"fk:w-full fk:**:data-[slot=scroll-area-viewport]:h-auto fk:[&_[data-slot=scroll-area-scrollbar][data-orientation=vertical]]:hidden fk:**:data-[slot=scroll-area-viewport]:p-1 fk:**:data-[slot=scroll-area-viewport]:-ml-1 fk:**:data-[slot=scroll-area-viewport]:-mt-1\">\n <TabsList className=\"fk:h-9 fk:w-max fk:flex-nowrap fk:justify-start\">\n {visibleGroups.map((group) => (\n <TabsTrigger key={group.name} value={group.name}>\n {group.icon ? <Icon name={group.icon} /> : null}\n {group.title}\n </TabsTrigger>\n ))}\n </TabsList>\n <ScrollBar orientation=\"horizontal\" />\n </ScrollArea>\n </div>\n <TabsContent className=\"fk:gap-8\" value={activeGroup}>\n {formSchema.map((field) => {\n if (!isAttributeVisibleInGroups(field, visibleGroups)) {\n return null;\n }\n\n const isVisible = attributeBelongsToGroup(field, activeGroup);\n const fieldElement = renderField(field);\n\n if (!fieldElement) {\n return null;\n }\n\n return (\n <div className={isVisible ? undefined : 'fk:hidden'} key={field.name}>\n {fieldElement}\n </div>\n );\n })}\n </TabsContent>\n </Tabs>\n ) : (\n formSchema.map((field) => renderField(field))\n )}\n </form>\n </Form>\n );\n}\n\nexport default memo(forwardRef(FormBuilder));\n\nfunction hasDataChanged(\n changedData: FormEntityItem | { [attribute: string]: undefined },\n originalFormData?: FormEntityItem\n): boolean {\n if (!originalFormData) {\n // iterate over changedData and check if there are any values\n return Object.keys(changedData).some(\n (field) => changedData[field]?.value !== '' && changedData[field]?.value !== undefined\n );\n }\n\n /**\n * Normalize the value for comparison.\n * This is necessary because the value might be an object, so we need to either\n * compare by the _id or or other keys depending on the type of field.\n */\n const normalizeComparisonValue = (value: unknown) => {\n if (typeof value === 'object' && value !== null) {\n if ('path' in value) {\n // for image attributes\n return value.path;\n }\n\n return '_id' in value ? (value as { _id: string })._id : '';\n }\n\n return value ?? '';\n };\n\n const sortAlphabetically = (a: string, b: string): 1 | -1 => (a < b ? -1 : 1);\n const originalData = Object.keys(originalFormData)\n .sort((a, b) => sortAlphabetically(a, b))\n .filter((field) => field !== '_updatedAt')\n .reduce(\n (acc, field) => ({\n ...acc,\n [field]: {\n value: normalizeComparisonValue(originalFormData[field].value),\n disabled: originalFormData[field].disabled,\n relationships: originalFormData[field].relationships,\n },\n }),\n {}\n );\n const newData = Object.keys(changedData)\n .sort((a, b) => sortAlphabetically(a, b))\n .filter((field) => field !== '_updatedAt')\n .reduce(\n (acc, field) => ({\n ...acc,\n [field]: {\n value: normalizeComparisonValue(changedData[field]?.value),\n disabled: changedData[field]?.disabled ?? false,\n relationships:\n Boolean(Object.keys(changedData[field]?.relationships?.connect ?? {}).length) ||\n Boolean(changedData[field]?.relationships?.disconnect?.length)\n ? changedData[field]?.relationships\n : undefined,\n },\n }),\n {}\n );\n\n return !equals(originalData, newData);\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { JSX } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { find, propEq } from 'ramda';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { useApolloClient } from '@apollo/client/react';\nimport { Loader2 } from 'lucide-react';\nimport { useAppContext } from '../core/app-context';\nimport DrawerModal from '../ui/components/drawer-modal';\nimport { useDrawerModalContext } from '../ui/drawer-modal-context';\nimport { useConfig } from '../core/config/config-context';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityListQueryName, scheduleEntityListRefetch } from '../graphql-client/refetch-entity-lists';\nimport FormBuilder from '../form/form-builder';\nimport type { SubmitHandle } from '../form/form-builder';\nimport type { Entity } from '../core/types';\nimport { getEntityCreateMutation } from '../graphql-client/queries';\nimport type { FormEntityItem } from '../graphql-client/types';\nimport { Button } from '../ui/primitives/button';\nimport { PermissionTooltip } from '../ui/components/permission-tooltip';\nimport { useCanMutate } from '../core/permissions';\nimport { useDispatch } from './actions-context';\nimport { useAuth } from '../auth/auth-context';\nimport { type Action, type ActionAddEntity } from './types';\n\ntype Props = {\n action: ActionAddEntity;\n depth: number;\n isFocused: boolean;\n};\n\nexport default function AddEntity({ action, depth, isFocused }: Props): JSX.Element {\n const { entityName } = action.payload;\n const ref = useRef<SubmitHandle>(null);\n const canMutate = useCanMutate();\n const [, auth] = useAuth();\n const { currentProject } = useConfig();\n const schema = useMemo(() => currentProject?.schema ?? [], [currentProject]);\n const scopes = currentProject?.scopes;\n const defaultScope = scopes?.find((s) => s.isDefault)?.name ?? 'default';\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const entityNamePlural = entitySchema?.plural ?? entityName;\n const { scope } = useAppContext();\n const dispatch = useDispatch();\n const apolloClient = useApolloClient();\n const [runMutation, setMutation, setOptions, mutationData] = useEntityMutation();\n const { isDirty, setIsDirty } = useDrawerModalContext();\n const [forceClose, setForceClose] = useState(false);\n\n useEffect(() => {\n if (mutationData.error) {\n ref.current?.hasErrors();\n }\n }, [mutationData.error]);\n\n function handleBeforeClose(): boolean {\n if (!isDirty) {\n return true;\n }\n\n dispatch({\n type: 'AlertDialog',\n _id: 'unsavedChanges',\n payload: {\n options: {\n dialogTitle: 'Unsaved Changes',\n dialogMessage:\n 'Are you sure you want to leave? There are unsaved changes. If you leave, your changes will be lost.',\n dialogCancelTitle: 'Stay Here',\n dialogActionLabel: 'Discard Changes',\n dialogActionCancel: () => {\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n },\n dialogActionSubmit: () => {\n setIsDirty(false);\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n setForceClose(true);\n },\n },\n },\n });\n\n return false;\n }\n\n const handleClose = useCallback(\n (_id: Action['_id']) => {\n dispatch({ type: 'Dismiss', _id, payload: {} });\n },\n [dispatch]\n );\n\n const handleSave = useCallback(() => {\n ref.current?.submit();\n }, [ref]);\n\n const saveEntity = useCallback(\n (newData: FormEntityItem) => {\n const _id = uuidv4();\n const mutation = getEntityCreateMutation(entityNamePlural, schema, newData, _id, {\n currentUser: auth.user,\n });\n\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n onCompleted: () => {\n void scheduleEntityListRefetch(apolloClient, getEntityListQueryName(entityNamePlural, schema));\n handleClose(action._id);\n toast.success('Your changes have been saved.');\n },\n });\n runMutation(true);\n },\n [action._id, apolloClient, auth.user, entityNamePlural, handleClose, runMutation, schema, setMutation, setOptions]\n );\n\n return (\n <DrawerModal\n actions={\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:px-8 fk:min-w-32\"\n disabled={!canMutate}\n onClick={() => {\n handleSave();\n }}\n variant=\"default\"\n >\n {mutationData.loading ? <Loader2 className=\"fk:h-4 fk:w-4 fk:mr-2 fk:animate-spin\" /> : null}\n Save\n </Button>\n </PermissionTooltip>\n }\n beforeClose={handleBeforeClose}\n depth={depth}\n forceClose={forceClose}\n isFocused={isFocused}\n onClose={() => {\n handleClose(action._id);\n }}\n title={`Add ${entityName}`}\n >\n <FormBuilder\n currentScope={scope}\n defaultScope={defaultScope}\n entityName={entityName}\n entityNamePlural={entityNamePlural}\n onSubmit={saveEntity}\n ref={ref}\n schema={schema}\n setIsDirty={setIsDirty}\n />\n </DrawerModal>\n );\n}\n","import type { JSX } from 'react';\nimport { AlertCircle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\n\nexport function ReadOnlyMode(): JSX.Element {\n return (\n <Alert className=\"fk:mb-4\" variant=\"destructive\">\n <AlertCircle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>Read Only Mode</AlertTitle>\n <AlertDescription>\n This project is currently in read only mode and changes cannot be saved. To troubleshoot this error, please{' '}\n <a\n className=\"fk:text-blue-500 fk:underline\"\n href=\"https://flexkit.io/docs/errors/read-only-mode\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n follow these steps\n </a>\n .\n </AlertDescription>\n </Alert>\n );\n}\n","import { Loader2 } from 'lucide-react';\nimport { Button } from '../ui/primitives/button';\nimport { PermissionTooltip } from '../ui/components/permission-tooltip';\nimport { useDrawerModalContext } from '../ui/drawer-modal-context';\nimport { useCanMutate } from '../core/permissions';\n\nexport default function SaveButton({ handleSave, isLoading }: { handleSave: () => void; isLoading: boolean }) {\n const { isDirty } = useDrawerModalContext();\n const canMutate = useCanMutate();\n\n return (\n <PermissionTooltip disabled={!canMutate}>\n <Button\n className=\"fk:px-8 fk:min-w-32\"\n disabled={!isDirty || !canMutate}\n onClick={() => {\n handleSave();\n }}\n variant=\"default\"\n >\n {isLoading ? <Loader2 className=\"fk:h-4 fk:w-4 fk:mr-2 fk:animate-spin\" /> : null}\n Save\n </Button>\n </PermissionTooltip>\n );\n}\n","import type { JSX } from 'react';\nimport { Skeleton } from '../ui/primitives/skeleton';\n\nexport default function Loading(): JSX.Element {\n const numberOfSkeletonFields = 10;\n\n return (\n <>\n {}\n {Array.from({ length: numberOfSkeletonFields }, (_, i) => i++).map((i) => (\n <div className=\"fk:mt-3 fk:mb-6.5\" key={i}>\n <Skeleton className=\"fk:w-full fk:h-[45px]\" />\n <div className=\"fk:flex fk:mt-2 fk:ml-4\">\n <Skeleton className=\"fk:w-5 fk:mr-2\" />\n <Skeleton className=\"fk:w-[140px] fk:h-[20px]\" />\n </div>\n </div>\n ))}\n </>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { JSX } from 'react';\nimport { find, propEq } from 'ramda';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { useApolloClient } from '@apollo/client/react';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport DrawerModal from '../ui/components/drawer-modal';\nimport { useDrawerModalContext } from '../ui/drawer-modal-context';\nimport { useConfig } from '../core/config/config-context';\nimport { useEntityQuery } from '../graphql-client/use-entity-query';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityListQueryName, scheduleEntityListRefetch } from '../graphql-client/refetch-entity-lists';\nimport { getEntityUpdateMutation, getLocalAttributeIdsFromUpdateResponse } from '../graphql-client/queries';\nimport type { FormEntityItem } from '../graphql-client/types';\nimport { ReadOnlyMode } from '../core/error/read-only-mode';\nimport FormBuilder from '../form/form-builder';\nimport type { SubmitHandle } from '../form/form-builder';\nimport { getDisplayAttribute } from '../core/get-display-attribute';\nimport type { Entity } from '../core/types';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/primitives/select';\nimport { useDispatch } from './actions-context';\nimport SaveButton from './save-button';\nimport Loading from './loading';\nimport { useAuth } from '../auth/auth-context';\nimport { type Action, type ActionEditEntity } from './types';\n\ntype Props = {\n action: ActionEditEntity;\n depth: number;\n isFocused: boolean;\n};\n\nexport default function EditEntity({ action, depth, isFocused }: Props): JSX.Element {\n const { entityId, entityNamePlural } = action.payload;\n const ref = useRef<SubmitHandle>(null);\n const { currentProject, currentProjectId } = useConfig();\n const schema = useMemo(() => currentProject?.schema ?? [], [currentProject]);\n const scopes = currentProject?.scopes;\n const defaultScope = scopes?.find((s) => s.isDefault)?.name ?? 'default';\n const entitySchema = find(propEq(entityNamePlural, 'plural'))(schema) as Entity | undefined;\n const entityName = entitySchema?.name ?? entityNamePlural;\n const { scope } = useAppContext();\n const [currentScope, setCurrentScope] = useState(scope);\n const dispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const apolloClient = useApolloClient();\n const [runMutation, setMutation, setOptions, mutationData] = useEntityMutation();\n const { isDirty, setIsDirty } = useDrawerModalContext();\n const [forceClose, setForceClose] = useState(false);\n const [, auth] = useAuth();\n\n const setFormIsDirty = useCallback(\n (nextIsDirty: boolean) => {\n setIsDirty(nextIsDirty);\n },\n [setIsDirty]\n );\n\n useEffect(() => {\n if (mutationData.error) {\n ref.current?.hasErrors();\n }\n }, [mutationData.error]);\n\n // Use the same dirty flag as the Save button. hasDataChanged() can stay true\n // after a successful save (stale formData baseline / relationship field noise).\n const handleBeforeClose = useCallback(() => {\n if (!isDirty) {\n return true;\n }\n\n dispatch({\n type: 'AlertDialog',\n _id: 'unsavedChanges',\n payload: {\n options: {\n dialogTitle: 'Unsaved Changes',\n dialogMessage:\n 'Are you sure you want to leave? There are unsaved changes. If you leave, your changes will be lost.',\n dialogCancelTitle: 'Stay Here',\n dialogActionLabel: 'Discard Changes',\n dialogActionCancel: () => {\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n },\n dialogActionSubmit: () => {\n setIsDirty(false);\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n setForceClose(true);\n },\n },\n },\n });\n\n return false;\n }, [dispatch, isDirty, setIsDirty]);\n\n const handleClose = useCallback(\n (_id: Action['_id']) => {\n dispatch({ type: 'Dismiss', _id, payload: {} });\n },\n [dispatch]\n );\n\n const handleSave = useCallback(() => {\n ref.current?.submit();\n }, [ref]);\n\n function handleScopeChange(nextScope: string): void {\n if (isDirty) {\n dispatch({\n type: 'AlertDialog',\n _id: 'unsavedChanges',\n payload: {\n options: {\n dialogTitle: 'Unsaved Changes',\n dialogMessage: 'You have unsaved changes. Switching scopes will discard them.',\n dialogCancelTitle: 'Stay Here',\n dialogActionLabel: 'Discard Changes',\n dialogActionCancel: () => {\n setCurrentScope(currentScope);\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n },\n dialogActionSubmit: () => {\n dispatch({ type: 'Dismiss', _id: 'unsavedChanges', payload: {} });\n setCurrentScope(nextScope);\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope: nextScope } });\n },\n },\n },\n });\n\n return;\n }\n\n setCurrentScope(nextScope);\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope: nextScope } });\n }\n\n const { isLoading, data: results } = useEntityQuery({\n entityNamePlural,\n schema,\n scope: currentScope,\n variables: { where: { _id: { eq: entityId } } },\n isForm: true,\n includeCount: false,\n });\n\n const saveEntity = useCallback(\n (newData: FormEntityItem, previousData?: FormEntityItem) => {\n if (!previousData) {\n return;\n }\n\n const mutation = getEntityUpdateMutation(\n entityNamePlural,\n entityId,\n currentScope,\n schema,\n previousData,\n newData,\n {\n currentUser: auth.user,\n }\n );\n\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n variables: { where: { _id: { eq: entityId } } },\n onCompleted: (response: unknown) => {\n // Adopt _ids for any local nodes created on this save. A full form\n // refetch rewrites `values:` and re-dirties the drawer.\n ref.current?.applyLocalAttributeIds(\n getLocalAttributeIdsFromUpdateResponse(response, entityNamePlural, schema)\n );\n void scheduleEntityListRefetch(apolloClient, getEntityListQueryName(entityNamePlural, schema));\n toast.success('Your changes have been saved.');\n },\n });\n runMutation(true);\n },\n [apolloClient, auth.user, currentScope, entityId, entityNamePlural, runMutation, schema, setMutation, setOptions]\n );\n const data = results as FormEntityItem[];\n const hasData = data.length > 0;\n const isInitialLoading = isLoading && !hasData;\n\n function getEntityIdentifier(entitySchema: Entity, data: FormEntityItem[]): string {\n const displayAttribute = getDisplayAttribute(entitySchema);\n const displayAttributeName = displayAttribute?.name;\n const isRelationship = displayAttribute?.relationship?.field !== undefined;\n\n if (!data.length || !displayAttributeName) {\n return '';\n }\n\n if (!isRelationship || !displayAttribute?.relationship?.field) {\n return data[0][displayAttributeName]?.value as string;\n }\n\n const relatedValue = (data[0][displayAttributeName]?.value as Record<string, unknown> | undefined)?.[\n displayAttribute.relationship.field\n ];\n // The related entity's display field may be a local attribute, which is a\n // list relationship field holding 0..1 scoped nodes\n const relatedNode = Array.isArray(relatedValue) ? (relatedValue[0] as unknown) : relatedValue;\n\n if (relatedNode && typeof relatedNode === 'object') {\n const scopedNode = relatedNode as Record<string, unknown>;\n\n return (scopedNode[currentScope] ?? scopedNode.default ?? '') as string;\n }\n\n return (relatedNode ?? '') as string;\n }\n\n const entityIdentifier = hasData && entitySchema ? getEntityIdentifier(entitySchema, data) : '';\n\n return (\n <DrawerModal\n actions={\n <>\n {scopes && scopes.length > 1 ? (\n <Select\n onValueChange={(value) => {\n handleScopeChange(value);\n }}\n value={currentScope}\n >\n <SelectTrigger className=\"fk:w-[12rem] fk:h-9\" id=\"project\">\n <span className=\"fk:text-muted-foreground\">Scope:&nbsp;</span>\n <SelectValue>\n {(find(propEq(currentScope, 'name'))(scopes) as { name: string; label: string }).label}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n {scopes.map((scopeItem) => (\n <SelectItem key={scopeItem.name} value={scopeItem.name}>\n {scopeItem.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n <SaveButton handleSave={handleSave} isLoading={mutationData.loading} />\n </>\n }\n beforeClose={handleBeforeClose}\n depth={depth}\n forceClose={forceClose}\n isFocused={isFocused}\n onClose={() => {\n handleClose(action._id);\n }}\n onFormChange={() => {}}\n title={entityIdentifier as string}\n >\n {isInitialLoading || !hasData ? (\n <Loading />\n ) : (\n <>\n {mutationData.isProjectReadOnly ? <ReadOnlyMode /> : null}\n <FormBuilder\n currentScope={currentScope}\n defaultScope={defaultScope}\n entityId={entityId}\n entityName={entityName}\n entityNamePlural={entityNamePlural}\n formData={data[0]}\n onSubmit={saveEntity}\n ref={ref}\n schema={schema}\n setIsDirty={setFormIsDirty}\n />\n </>\n )}\n </DrawerModal>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { JSX } from 'react';\nimport { find, propEq } from 'ramda';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { LoaderCircle, Search as SearchIcon, Upload as UploadIcon } from 'lucide-react';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport DrawerModal from '../ui/components/drawer-modal';\nimport { useConfig } from '../core/config/config-context';\nimport { useEntityQuery } from '../graphql-client/use-entity-query';\nimport type { AttributeValue, MappedEntityItem, EntityItem, ImageValue } from '../graphql-client/types';\nimport { useGridColumnsDefinition } from '../data-grid/columns';\nimport { DataTable } from '../data-grid/data-table';\nimport { Button } from '../ui/primitives/button';\nimport { Input } from '../ui/primitives/input';\nimport { Skeleton } from '../ui/primitives/skeleton';\nimport type {\n Entity,\n SingleRelationshipConnection,\n MultipleRelationshipConnection,\n SearchRequestProps,\n} from '../core/types';\nimport { useDispatch } from './actions-context';\nimport { type Action, type ActionEditRelationship } from './types';\nimport { useSearch } from '../core/use-search';\nimport { useUploadAssets } from '../core/upload';\n\ntype Props = {\n action: ActionEditRelationship;\n depth: number;\n isFocused: boolean;\n};\n\nconst PAGE_SIZE = 25;\n\ntype SelectedRelationshipRow = {\n id: string;\n value: SingleRelationshipConnection['value'];\n};\n\nfunction getLoadingColumns(columns: object[]): ColumnDef<AttributeValue>[] {\n return columns.map((column) => ({\n ...column,\n cell: () => <Skeleton className=\"fk:h-4 fk:w-full\" style={{ marginTop: '7px', marginBottom: '6px' }} />,\n })) as unknown as ColumnDef<AttributeValue>[];\n}\n\nexport default function EditRelationship({ action, depth, isFocused }: Props): JSX.Element {\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const { relationships, scope } = useAppContext();\n const {\n assetAccept,\n connectedEntitiesCount,\n connectionName,\n entityId,\n entityName,\n initialAssetPath,\n initialConnection,\n mode,\n relationshipId,\n } = action.payload;\n const { currentProject, currentProjectId } = useConfig();\n const schema = currentProject?.schema ?? [];\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const entityNamePlural = entitySchema?.plural ?? '';\n const relationshipContext = relationships[relationshipId];\n const uploadAssets = useUploadAssets();\n const isAssetPicker = entityName === '_asset';\n const entityLabel = isAssetPicker ? 'asset' : (entitySchema?.menu?.label ?? entityName.toLowerCase());\n const selectTitle =\n isAssetPicker && mode === 'single' ? 'Select asset' : `Select ${isAssetPicker ? 'assets' : entityLabel}`;\n const uploadButtonLabel = mode === 'single' ? 'Upload asset' : 'Upload assets';\n const [searchResultIds, setSearchResultIds] = useState<{ _id: string }[]>([]);\n\n let initialSingleSelectionState: SelectedRelationshipRow[] = [];\n\n if (initialConnection) {\n initialSingleSelectionState = [\n {\n id: initialConnection._id,\n value: initialConnection.value,\n },\n ];\n } else if (relationshipContext?.connect) {\n const connection = relationshipContext.connect as SingleRelationshipConnection;\n\n initialSingleSelectionState = [\n {\n id: connection._id,\n value: connection.value,\n },\n ];\n }\n\n const initialSelectionState =\n mode === 'single'\n ? initialSingleSelectionState\n : (relationshipContext?.connect as MultipleRelationshipConnection | undefined)?.map((item) => ({\n id: item._id,\n value: item.value,\n })) || [];\n\n const [selectedRows, setSelectedRows] = useState(initialSelectionState);\n const conditionalWhereClause = useMemo(() => {\n const clauses: Array<{ [key: string]: unknown }> = [];\n\n if (isAssetPicker) {\n clauses.push({ NOT: { path: { eq: null } } });\n }\n\n // Exclude already-connected items only when editing an existing parent.\n // On create, entityId is undefined — applying `none: { _id: { eq: undefined } }`\n // makes Neo4j return no rows.\n if (mode === 'multiple' && connectionName && entityId) {\n clauses.push({\n [connectionName]: {\n none: {\n _id: { eq: entityId },\n },\n },\n });\n }\n\n // Empty OR matches nothing; only constrain when the user has searched.\n if (searchResultIds.length > 0) {\n clauses.push({\n OR: searchResultIds.map((result) => ({ _id: { eq: result._id } })),\n });\n }\n\n if (clauses.length === 0) {\n return {};\n }\n\n if (clauses.length === 1) {\n return clauses[0];\n }\n\n return { AND: clauses };\n }, [connectionName, entityId, isAssetPicker, mode, searchResultIds]);\n\n const { count, data, fetchMore, isLoading, isLoadingMore } = useEntityQuery({\n entityNamePlural,\n schema,\n scope,\n variables: {\n offset: 0,\n limit: PAGE_SIZE,\n where: conditionalWhereClause,\n sort: [{ _updatedAt: 'DESC' }, { _id: 'DESC' }],\n },\n // The picker grid only renders display attributes; the deep `full`\n // selection generated multi-second Cypher on relationship-heavy schemas.\n selection: 'list',\n });\n const hasData = Boolean(data?.length);\n const isInitialLoading = isLoading && !hasData;\n const rowsCount = data?.length ?? 0;\n const totalCount = count - connectedEntitiesCount;\n const hasMore = totalCount > 0 && rowsCount > 0 && rowsCount < totalCount;\n\n const columns = useGridColumnsDefinition({\n attributesSchema: entitySchema?.attributes ?? [],\n checkboxSelect: mode,\n });\n const loadingData = Array(5).fill({});\n const loadingColumns = getLoadingColumns(columns);\n\n useEffect(() => {\n if (mode !== 'single' || selectedRows.length > 0 || !initialAssetPath || !data?.length) {\n return;\n }\n\n const matchedAsset = data.find((row) => row.path === initialAssetPath);\n\n if (!matchedAsset?._id || typeof matchedAsset._id !== 'string') {\n return;\n }\n\n setSelectedRows([\n {\n id: matchedAsset._id,\n value: matchedAsset as SingleRelationshipConnection['value'],\n },\n ]);\n }, [data, initialAssetPath, mode, selectedRows.length]);\n\n const handleClose = useCallback(\n (_id: Action['_id']) => {\n actionDispatch({ type: 'Dismiss', _id, payload: {} });\n },\n [actionDispatch]\n );\n\n const handleLoadMore = useCallback(() => {\n fetchMore({\n variables: {\n // Offset is tracked inside useEntityQuery from page windows; value here is ignored.\n offset: 0,\n limit: PAGE_SIZE,\n where: conditionalWhereClause,\n },\n });\n }, [conditionalWhereClause, fetchMore]);\n\n function handleSelection(): void {\n let connect;\n\n if (mode === 'single') {\n const [selected] = selectedRows;\n\n connect = {\n _id: selected?.id ?? '',\n value: selected?.value ?? null,\n } as SingleRelationshipConnection;\n }\n\n if (mode === 'multiple') {\n connect = selectedRows?.map((selected, index) => ({\n _id: selected.id ?? '',\n ...(isAssetPicker ? { sortOrder: index } : {}),\n value: selected.value,\n })) as MultipleRelationshipConnection;\n }\n\n appDispatch({\n type: 'setRelationship',\n payload: {\n [relationshipId]: {\n connect,\n disconnect: relationshipContext?.disconnect ?? [],\n },\n },\n });\n handleClose(action._id);\n }\n\n function handleSelectionChange(selectedIds: string[]): void {\n if (mode === 'multiple') {\n // Keep existing selections that are still selected (in selectedIds)\n // and add new selections\n setSelectedRows((prevSelected) => {\n // Create a map of existing selections for quick lookup\n const existingSelections = new Map(prevSelected.map((item) => [item.id, item]));\n\n // Process each selectedId\n return selectedIds.map((id) => {\n // If we already have this item selected, keep the existing data\n if (existingSelections.has(id)) {\n return existingSelections.get(id)!;\n }\n\n // Otherwise find it in the current data and add it\n const valueFromData = data?.find((row) => row._id === id);\n return {\n id,\n value: valueFromData as unknown as\n | string\n | AttributeValue\n | MappedEntityItem\n | EntityItem\n | ImageValue\n | null\n | undefined,\n };\n });\n });\n\n return;\n }\n\n // if single, get only the last selected row\n const selected = selectedIds[selectedIds.length - 1];\n if (selected) {\n setSelectedRows((prevSelected) => {\n // If we already have this item selected, keep the existing data\n if (prevSelected.length === 1 && prevSelected[0].id === selected) {\n return prevSelected;\n }\n\n // Otherwise find it in the current data\n const valueFromData = data?.find((row) => row._id === selected);\n return [\n {\n id: selected,\n value: valueFromData as unknown as\n | string\n | AttributeValue\n | MappedEntityItem\n | EntityItem\n | ImageValue\n | null\n | undefined,\n },\n ];\n });\n } else {\n // No selection\n setSelectedRows([]);\n }\n }\n\n function handleCreateEntity(): void {\n actionDispatch({ type: 'AddEntity', payload: { entityName } });\n }\n\n async function handleUploadAssets(): Promise<void> {\n const uploadedAssets = await uploadAssets({\n projectId: currentProjectId,\n accept: assetAccept ?? 'image/*',\n multiple: mode === 'multiple',\n maxBytes: 4 * 1024 * 1024,\n });\n\n setSelectedRows((currentRows) => {\n if (mode === 'single') {\n const [uploadedAsset] = uploadedAssets;\n\n return uploadedAsset ? [{ id: uploadedAsset._id, value: uploadedAsset.asset }] : currentRows;\n }\n\n const selectedIds = new Set(currentRows.map((row) => row.id));\n const nextRows = uploadedAssets\n .filter((uploaded) => !selectedIds.has(uploaded._id))\n .map((uploaded) => ({\n id: uploaded._id,\n value: uploaded.asset,\n }));\n\n return [...currentRows, ...nextRows];\n });\n }\n\n return (\n <DrawerModal\n actions={\n <>\n <Button\n className=\"fk:px-8\"\n onClick={() => {\n handleSelection();\n }}\n variant=\"default\"\n >\n Select\n </Button>\n {!isAssetPicker ? (\n <Button\n className=\"fk:px-8\"\n onClick={() => {\n handleCreateEntity();\n }}\n variant=\"outline\"\n >\n {`Create ${entityLabel}`}\n </Button>\n ) : null}\n {isAssetPicker ? (\n <Button\n className=\"fk:px-8\"\n onClick={() => {\n void handleUploadAssets();\n }}\n variant=\"outline\"\n >\n <UploadIcon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n {uploadButtonLabel}\n </Button>\n ) : null}\n </>\n }\n depth={depth}\n isFocused={isFocused}\n onClose={() => {\n handleClose(action._id);\n }}\n title={selectTitle}\n >\n <div className=\"fk:h-[calc(100vh-10rem)] fk:min-h-0\">\n <DataTable\n columns={isInitialLoading ? loadingColumns : columns}\n data={isInitialLoading ? loadingData : (data ?? [])}\n entityName={entitySchema?.name ?? ''}\n hasMore={hasMore}\n initialSelectionState={\n selectedRows?.reduce(\n (acc, selected) => ({ ...acc, ...(selected.id ? { [selected.id]: true } : {}) }),\n {}\n ) as {\n [_id: string]: boolean;\n }\n }\n isLoadingMore={isLoadingMore}\n onEntitySelectionChange={handleSelectionChange}\n onLoadMore={handleLoadMore}\n toolbarComponent={() => (\n <SearchBar\n entityNamePlural={entityNamePlural}\n projectId={currentProjectId ?? ''}\n setSearchResultIds={setSearchResultIds}\n />\n )}\n />\n </div>\n </DrawerModal>\n );\n}\n\nfunction SearchBar({\n entityNamePlural,\n projectId,\n setSearchResultIds,\n}: {\n entityNamePlural: string;\n projectId: string;\n setSearchResultIds: (ids: { _id: string }[]) => void;\n}): JSX.Element {\n const [search, setSearch] = useState('');\n\n const searchRequest = useMemo<SearchRequestProps>(\n () => ({\n searchRequests: {\n searches: [\n {\n collection: entityNamePlural,\n },\n ],\n },\n commonParams: {\n q: '',\n },\n }),\n [entityNamePlural]\n );\n const [searchQuery, setSearchQuery] = useState(searchRequest);\n const { results, isLoading } = useSearch(projectId, searchQuery);\n const prevResultsRef = useRef<{ _id: string }[] | null>(null);\n\n const debouncedSetSearchQuery = useMemo(\n () =>\n debounce((query: string) => {\n setSearchQuery({\n ...searchRequest,\n commonParams: { q: query },\n });\n }, 300),\n [searchRequest]\n );\n\n useEffect(() => {\n if (results) {\n const currentResultsString = JSON.stringify(results.map((r) => r._id).sort());\n const prevResultsString = prevResultsRef.current\n ? JSON.stringify(prevResultsRef.current.map((r) => r._id).sort())\n : '';\n\n if (currentResultsString !== prevResultsString) {\n prevResultsRef.current = [...results];\n setSearchResultIds(results.map((result) => ({ _id: result._id })));\n }\n }\n }, [results, setSearchResultIds]);\n\n function handleSearchChange(e: React.ChangeEvent<HTMLInputElement>): void {\n const { value } = e.target;\n\n setSearch(value);\n debouncedSetSearchQuery(value);\n }\n\n return (\n <div className=\"fk:relative fk:w-full\">\n {isLoading ? (\n <LoaderCircle className=\"fk:absolute fk:left-4 fk:top-3 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50 fk:animate-spin\" />\n ) : (\n <SearchIcon className=\"fk:absolute fk:left-4 fk:top-3 fk:h-4 fk:w-4 fk:shrink-0 fk:opacity-50\" />\n )}\n <Input className=\"fk:w-full fk:pl-11!\" onChange={handleSearchChange} placeholder=\"Search\" value={search} />\n </div>\n );\n}\n\nfunction debounce<T extends unknown[]>(fn: (...args: T) => void, ms = 300): (...args: T) => void {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n return (...args: T) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), ms);\n };\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport AlertDialog from '../ui/components/alert-dialog';\nimport { useActions } from './actions-context';\nimport Delete from './delete';\nimport AddEntity from './add-entity';\nimport EditEntity from './edit-entity';\nimport EditRelationship from './edit-relationship';\n\nexport function ActionsManager(): JSX.Element | null {\n const actions = useActions();\n const editActions = actions.filter((item) =>\n ['AddEntity', 'EditEntity', 'EditRelationship'].some((actionType) => actionType === item.type)\n );\n const latestModalId = editActions[editActions.length - 1]?._id;\n\n return (\n <>\n {actions.map((action) => {\n switch (action.type) {\n case 'AlertDialog': {\n const { payload } = action;\n\n return <AlertDialog key={action._id} options={payload.options} />;\n }\n case 'DeleteEntity': {\n return <Delete action={action} key={action._id} />;\n }\n case 'AddEntity': {\n return (\n <AddEntity\n action={action}\n depth={editActions.length - 1}\n isFocused={action._id === latestModalId}\n key={action._id}\n />\n );\n }\n case 'EditEntity': {\n return (\n <EditEntity\n action={action}\n depth={editActions.length - 1}\n isFocused={action._id === latestModalId}\n key={action._id}\n />\n );\n }\n case 'EditRelationship': {\n return (\n <EditRelationship\n action={action}\n depth={editActions.length - 1}\n isFocused={action._id === latestModalId}\n key={action._id}\n />\n );\n }\n default: {\n return null;\n }\n }\n })}\n </>\n );\n}\n","import type { JSX } from 'react';\nimport { useHref } from 'react-router-dom';\nimport { FolderOpen } from 'lucide-react';\nimport { signOutHosted } from '../../auth/hosted-logout';\nimport { flexkitDomain } from '../../core/domains';\nimport type { HostedUser } from '../../core/config/types';\nimport { Button } from '../primitives/button';\n\n/** Hosted mode: the signed-in user is not a member of any project yet. */\nexport function NoProjects({ user }: { user: HostedUser }): JSX.Element {\n const rootHref = useHref('/');\n\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-screen fk:items-center fk:justify-center fk:p-8 fk:bg-background\">\n <div className=\"fk:flex fk:max-w-md fk:flex-col fk:items-center fk:gap-4 fk:text-center\">\n <FolderOpen className=\"fk:h-10 fk:w-10 fk:text-muted-foreground\" />\n <h1 className=\"fk:text-xl fk:font-medium\">No projects yet</h1>\n <p className=\"fk:text-sm fk:text-muted-foreground\">\n {user.email} is not a member of any Flexkit project. Create one in the Dashboard, or ask a project owner to\n invite you, then come back here.\n </p>\n <div className=\"fk:flex fk:gap-3\">\n <Button asChild>\n <a href={`https://${flexkitDomain}/dashboard`}>Open Dashboard</a>\n </Button>\n <Button\n onClick={() => {\n void signOutHosted(rootHref);\n }}\n variant=\"outline\"\n >\n Sign out\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import type { JSX } from 'react';\nimport { Navigate, Outlet, useLocation } from 'react-router-dom';\nimport { AlertCircle } from 'lucide-react';\nimport { AuthProvider } from '../../auth/auth-context';\nimport { Login } from '../../auth/login';\nimport { ConfigProvider } from '../../core/config/config-context';\nimport { DesktopEffects } from '../../core/desktop-effects';\nimport { pickStartProjectId, readLastProjectId } from '../../core/config/last-project';\nimport type { ProjectSummary, StudioMode } from '../../core/config/types';\nimport { useHostedSession } from '../../core/config/use-hosted-session';\nimport { GraphQLProvider } from '../../graphql-client/graphql-context';\nimport { ActionsManager } from '../../entities/actions-manager';\nimport { Loading } from '../components/loading';\nimport { NoProjects } from '../components/no-projects';\nimport { Alert, AlertDescription, AlertTitle } from '../primitives/alert';\nimport { Button } from '../primitives/button';\nimport { DrawerModalProvider } from '../drawer-modal-context';\n\nconst NavigateCompat = Navigate as unknown as React.ComponentType<{ replace?: boolean; to: string }>;\n\nfunction Providers({\n mode,\n projectIds,\n projectSummaries,\n userId,\n}: {\n mode: StudioMode;\n projectIds: string[];\n projectSummaries?: ProjectSummary[];\n userId?: string;\n}): JSX.Element {\n return (\n <AuthProvider mode={mode}>\n <ConfigProvider mode={mode} projectIds={projectIds} projectSummaries={projectSummaries} userId={userId}>\n <GraphQLProvider>\n <DrawerModalProvider>\n <ActionsManager />\n </DrawerModalProvider>\n <Outlet />\n </GraphQLProvider>\n </ConfigProvider>\n </AuthProvider>\n );\n}\n\n/** Project mode: the host listed the projects; `/` opens the first one. */\nfunction ProjectsRoot({ projectIds }: { projectIds: string[] }): JSX.Element {\n const location = useLocation();\n const [defaultProjectId] = projectIds;\n\n if (location.pathname === '/' && defaultProjectId) {\n return <NavigateCompat replace to={`/${defaultProjectId}`} />;\n }\n\n return <Providers mode=\"projects\" projectIds={projectIds} />;\n}\n\nfunction SessionUnavailable({ message }: { message: string }): JSX.Element {\n return (\n <div className=\"fk:flex fk:h-full fk:min-h-screen fk:items-center fk:justify-center fk:p-8 fk:bg-background\">\n <Alert className=\"fk:max-w-lg\" variant=\"destructive\">\n <AlertCircle className=\"fk:h-4 fk:w-4\" />\n <AlertTitle>Could not load your projects</AlertTitle>\n <AlertDescription className=\"fk:flex fk:flex-col fk:gap-3\">\n <span>{message}</span>\n <Button\n className=\"fk:self-start\"\n onClick={() => {\n window.location.reload();\n }}\n size=\"sm\"\n variant=\"outline\"\n >\n Try again\n </Button>\n </AlertDescription>\n </Alert>\n </div>\n );\n}\n\n/**\n * Hosted mode: sign in once, then open any project the account can access.\n * `/` goes to the project used last on this browser, or the first one.\n */\nfunction HostedRoot(): JSX.Element {\n const session = useHostedSession();\n const location = useLocation();\n\n if (session.status === 'loading') {\n return <Loading />;\n }\n\n if (session.status === 'anonymous') {\n return <Login />;\n }\n\n if (session.status === 'error') {\n return <SessionUnavailable message={session.message} />;\n }\n\n const projectIds = session.projects.map((project) => project.id);\n\n if (projectIds.length === 0) {\n return <NoProjects user={session.user} />;\n }\n\n if (location.pathname === '/') {\n const startProjectId = pickStartProjectId(projectIds, readLastProjectId());\n\n return <NavigateCompat replace to={`/${startProjectId ?? ''}`} />;\n }\n\n return <Providers mode=\"hosted\" projectIds={projectIds} projectSummaries={session.projects} userId={session.user.id} />;\n}\n\nexport function Root({ projectIds }: { projectIds?: string[] }): JSX.Element {\n return (\n <>\n <DesktopEffects />\n {projectIds === undefined ? <HostedRoot /> : <ProjectsRoot projectIds={projectIds} />}\n </>\n );\n}\n","export function normalizeBasePath(basePath?: string): string {\n if (!basePath || basePath === '/') {\n return '/';\n }\n\n const normalizedPath = basePath.replace(/^\\/+|\\/+$/g, '');\n\n return `/${normalizedPath}`;\n}\n\nexport function joinBasePath(basePath: string, ...segments: string[]): string {\n const normalizedBasePath = normalizeBasePath(basePath);\n const normalizedSegments = segments.flatMap((segment) => segment.split('/')).filter(Boolean);\n\n if (normalizedSegments.length === 0) {\n return normalizedBasePath;\n }\n\n if (normalizedBasePath === '/') {\n return `/${normalizedSegments.join('/')}`;\n }\n\n return `${normalizedBasePath}/${normalizedSegments.join('/')}`;\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport { isRouteErrorResponse, useRouteError } from 'react-router-dom';\nimport { DarkModeSwitch } from '../../ui/components/dark-mode-switch';\nimport { isFlexkitError, getFlexkitErrorCode } from '../../core/error/errors';\n\nexport function GlobalError(): JSX.Element {\n const error = useRouteError();\n const copyrightYear = new Date().getFullYear();\n\n function errorMessage(): JSX.Element | null {\n if (isRouteErrorResponse(error)) {\n if (error.status === 404) {\n return (\n <>\n <h1 className=\"fk:mb-4 fk:text-7xl fk:text-center fk:font-bold fk:tracking-tight\">404</h1>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-base fk:text-center fk:text-muted-foreground\">Page not found</p>\n </>\n );\n }\n\n return (\n <>\n <h1 className=\"fk:mb-4 fk:text-4xl fk:text-center fk:font-bold fk:tracking-tight\">Oops!</h1>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-base fk:text-center fk:text-muted-foreground\">\n Sorry, an unexpected error has occurred:\n </p>\n <p className=\"fk:text-base fk:text-center\">\n <i>{error.statusText}</i>\n </p>\n </>\n );\n }\n\n if (isFlexkitError(error)) {\n switch (getFlexkitErrorCode(error)) {\n case 'PROJECT_NOT_FOUND':\n return (\n <>\n <h1 className=\"fk:mb-4 fk:text-4xl fk:text-center fk:font-bold fk:tracking-tight\">Project not found</h1>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-base fk:text-center fk:text-muted-foreground\">\n The requested project ID was not found\n </p>\n </>\n );\n case 'UNKNOWN_ERROR':\n default:\n return (\n <>\n <h1 className=\"fk:mb-4 fk:text-4xl fk:text-center fk:font-bold fk:tracking-tight\">Oops!</h1>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-base fk:text-center fk:text-muted-foreground\">\n Sorry, an unexpected error has occurred. Please try again.\n </p>\n </>\n );\n }\n }\n\n if (error instanceof Error) {\n return (\n <>\n <h1 className=\"fk:mb-4 fk:text-4xl fk:text-center fk:font-bold fk:tracking-tight\">Oops!</h1>\n <p className=\"fk:mt-2 fk:mb-2 fk:text-base fk:text-center fk:text-muted-foreground\">\n Sorry, an unexpected error has occurred:\n </p>\n <p className=\"fk:text-base fk:text-center\">\n <i>{error.message}</i>\n </p>\n </>\n );\n }\n\n return null;\n }\n\n return (\n <>\n <div className=\"fk:container fk:relative fk:h-[calc(100vh-3rem)] fk:flex fk:items-center fk:justify-center fk:lg:px-0\">\n <div className=\"fk:w-full fk:lg:p-8\">\n <div className=\"fk:mx-auto fk:flex fk:w-full fk:flex-col fk:justify-center fk:sm:w-[350px]\">\n {errorMessage()}\n </div>\n </div>\n </div>\n <div className=\"fk:flex fk:justify-center fk:items-center fk:h-12 fk:text-xs fk:text-muted-foreground fk:border-t fk:border-accent\">\n <div className=\"fk:container fk:flex\">\n <div className=\"fk:flex fk:items-center fk:mr-auto\">\n <svg\n className=\"fk:h-5 fk:w-5 fk:mr-3 fk:text-black fk:dark:text-white\"\n fill=\"none\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n width=\"48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7 8H41V40H7V8Z\" fill=\"none\" />\n <path\n d=\"M24 0C42 0 48 6 48 24C48 42 42 48 24 48C6 48 0 42 0 24C0 6 6 0 24 0ZM17.7494 9.52381H8.7619L19.2833 23.8313L8.7619 38.7078H17.7494L21.0499 33.6639V14.2549L17.7494 9.52381ZM38.9577 9.52381H29.9542L26.2857 14.8229V33.0406L29.9542 38.7078H38.9577L28.3908 23.8313L38.9577 9.52381Z\"\n fill=\"currentColor\"\n />\n </svg>\n <p className=\"fk:flex fk:items-center\">© {copyrightYear}</p>\n </div>\n <DarkModeSwitch />\n </div>\n </div>\n </>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport type { ComponentType, JSX } from 'react';\nimport { debug } from 'debug';\nimport { createBrowserRouter, RouterProvider } from 'react-router-dom';\nimport type { RouterProviderProps } from 'react-router-dom';\nimport { ThemeProvider } from '../ui/theme-context';\nimport { Layout } from '../ui/containers/layout';\nimport { Root } from '../ui/containers/root';\nimport { ActionsProvider } from '../entities/actions-context';\nimport { AppProvider } from './app-context';\nimport { normalizeBasePath } from './base-path';\nimport { GlobalError } from './error/global-error';\nimport type { FlexkitStudioProps } from './config/types';\n\nconst RouterProviderCompat = RouterProvider as unknown as ComponentType<RouterProviderProps>;\ntype BrowserRoutes = Parameters<typeof createBrowserRouter>[0];\n\n/**\n * AppContext:\n * - global loader state\n * - breadcrumbs\n * - page title\n * - scope\n * - relationships (used by the Edit Relationship drawer)\n *\n * ActionsContext:\n * - add, edit, delete entities\n * - show modal dialogs\n * - show notifications\n * - dismiss modals\n *\n * Query params: sort, filter, page, pageSize\n * Path params: id specific entity\n *\n * The Studio renders the schema deployed to each project (`flexkit deploy`).\n * The host either lists the projects (`projectIds`) or omits them, in which\n * case the Studio signs the user in and lists every project they can access.\n */\nexport function FlexkitStudio({ projectIds, basename }: FlexkitStudioProps): JSX.Element | null {\n const [mounted, setMounted] = useState(false);\n const log = debug('core:flexkit-studio');\n\n useEffect(() => {\n // ensure the DOM is available to prevent \"document is not defined\" error with react-router\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return null;\n }\n\n // `projectIds` omitted = hosted mode (the Studio lists the user's projects); an empty list is a host bug.\n if (projectIds !== undefined && projectIds.length === 0) {\n throw new Error(\n 'FlexkitStudio needs at least one project id: <FlexkitStudio projectIds={[\"...\"]} />. Omit the prop for hosted mode.'\n );\n }\n\n const routes = [\n {\n path: '/',\n element: <Root projectIds={projectIds} />,\n errorElement: <GlobalError />,\n children: [\n {\n // The apps are rendered by the Layout (see `AppOutlet`), which keeps\n // every opened app mounted; the splat hands it the rest of the path.\n path: ':projectId/*',\n element: <Layout />,\n },\n ],\n },\n ] as unknown as BrowserRoutes;\n const router = createBrowserRouter(routes, { basename: normalizeBasePath(basename) });\n\n log('Init Studio');\n\n return (\n <ThemeProvider attribute=\"class\" defaultTheme=\"system\" disableTransitionOnChange enableSystem>\n <AppProvider>\n <ActionsProvider>\n <RouterProviderCompat router={router} />\n </ActionsProvider>\n </AppProvider>\n </ThemeProvider>\n );\n}\n","import { useCallback } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport { useConfig } from '../core/config/config-context';\nimport { getEntityListQueryName, scheduleEntityListRefetch } from './refetch-entity-lists';\n\n/**\n * Soft-refetch active list queries for an entity without clearing the current rows first.\n * Prefer this after mutations; use `useEntityQuery().reload` when an explicit loading state is desired.\n */\nexport function useRefreshEntityList(entityNameOrPlural: string): () => Promise<void> {\n const apolloClient = useApolloClient();\n const { currentProjectSchema: schema } = useConfig();\n\n return useCallback(async () => {\n if (!schema) {\n return;\n }\n\n await scheduleEntityListRefetch(apolloClient, getEntityListQueryName(entityNameOrPlural, schema));\n }, [apolloClient, entityNameOrPlural, schema]);\n}\n"]}