@flexkit/studio 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/astro.d.ts +1 -1
- package/dist/astro.js +4 -1
- package/dist/chunk-HC5NUUAJ.js +2 -0
- package/dist/chunk-HC5NUUAJ.js.map +1 -0
- package/dist/{chunk-BUWJY7WB.js → chunk-TL6JXN6O.js} +62 -14
- package/dist/core-handler-XAVVKLhV.d.ts +37 -0
- package/dist/editor-ZLTDOUPT.js +2 -0
- package/dist/{editor-VSCVCAL4.js.map → editor-ZLTDOUPT.js.map} +1 -1
- package/dist/index.css +152 -73
- package/dist/index.js +112 -112
- package/dist/index.js.map +1 -1
- package/dist/nextjs.d.ts +1 -1
- package/dist/nextjs.js +17 -9
- package/dist/tanstack-start.d.ts +1 -1
- package/dist/tanstack-start.js +11 -1
- package/dist/ui.d.ts +9 -9
- package/package.json +11 -9
- package/dist/chunk-HZZZBJEZ.js +0 -2
- package/dist/chunk-HZZZBJEZ.js.map +0 -1
- package/dist/core-handler-B07aYFJi.d.ts +0 -17
- package/dist/editor-VSCVCAL4.js +0 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/theme-context.tsx","../src/ui/components/dark-mode-switch.tsx","../src/ui/components/loading.tsx","../src/ui/primitives/alert.tsx","../src/auth/email.tsx","../src/auth/login.tsx","../src/core/error/errors.ts","../src/ui/primitives/sonner.tsx","../src/ui/containers/appbar.tsx","../src/core/use-contributed-component.tsx","../src/ui/containers/navbar.tsx","../src/ui/containers/layout.tsx","../src/graphql-client/error-utils.ts","../src/graphql-client/graphql-context.tsx","../src/ui/primitives/alert-dialog.tsx","../src/ui/components/alert-dialog.tsx","../src/entities/actions-context.tsx","../src/graphql-client/queries.ts","../src/graphql-client/use-entity-mutation.ts","../src/entities/delete.tsx","../src/ui/primitives/drawer.tsx","../src/ui/components/drawer-modal.tsx","../src/ui/drawer-modal-context.tsx","../src/ui/primitives/collapsible.tsx","../src/ui/hooks/use-outer-click.ts","../src/form/fields/uploader.tsx","../src/form/fields/number.tsx","../src/ui/primitives/popover.tsx","../src/ui/primitives/calendar.tsx","../src/form/fields/datetime.tsx","../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/data-grid/preview-components/tags.tsx","../src/data-grid/columns.tsx","../src/data-grid/data-table.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/form/fields/undefined-field-type-error.tsx","../src/form/form-builder.tsx","../src/entities/add-entity.tsx","../src/graphql-client/use-entity-query.ts","../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/containers/root.tsx","../src/core/error/global-error.tsx","../src/core/error/error-boundary.tsx","../src/core/flexkit-studio.tsx","../src/core/upload.ts","../src/core/error/project-disabled.tsx","../src/core/error/schema-error.tsx","../src/core/config/define-config.ts","../src/core/config/define-entity.ts","../src/data-grid/data-table-faceted-filter.tsx","../src/data-grid/data-table-row-actions.tsx","../src/data-grid/data-table-view-options.tsx","../src/data-grid/data-table-toolbar.tsx"],"names":["ThemeProvider","children","props","mounted","setMounted","useState","useEffect","jsx","NextThemesProvider","Fragment","DarkModeSwitch","theme","setTheme","useTheme","jsxs","ToggleGroup","ToggleGroupItem","Moon","Sun","Monitor","Loading","resolvedTheme","alertVariants","cva","Alert","Ao","className","variant","ref","cn","AlertTitle","AlertDescription","formSchema","EmailLogin","projectId","setIsEmailLogin","hasOtpExpired","setHasOtpExpired","shouldSendOtp","setShouldSendOtp","mutate","useSWRConfig","form","useForm","zodResolver","sendOtpUrl","apiPaths","baseApiUrl","data","error","isLoading","useSWR","url","res","errorCode","hasOtpBeenSent","token","calls","interval","confirmOtpUrl","setTokenUrl","confirmationResponse","handleEmailLogin","Button","Form","event","FormField","field","FormItem","FormControl","Input","FormMessage","Loader2","Mail","Login","projects","useConfig","selectedProject","setSelectedProject","project","isEmailLogin","isAuthLoading","auth","useAuth","copyrightYear","currentRouterLocation","useLocation","referal","fromPath","Navigate","Label","Select","id","SelectTrigger","SelectValue","SelectContent","SelectItem","provider","composeLoginHref","basePath","params","FLEXKIT_ERROR_CODES","FLEXKIT_ERROR_MESSAGES","FlexkitError","_FlexkitError","code","message","isFlexkitError","maybeCode","getFlexkitErrorCode","Toaster","Sonner","AppBar","apps","version","appBarHeight","setAppBarHeight","visibleApps","setVisibleApps","additionalApps","setAdditionalApps","appBar","useRef","location","useParams","currentAppSegmentPath","app","activeApp","resizeObserver","availableAppSlots","_visibleApps","_activeApp","_additionalApps","TooltipProvider","Tooltip","TooltipTrigger","NavLink","TooltipContent","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","Settings","Link","Wrench","DropdownMenuSeparator","PackageCheck","PackageX","contributionPointMap","lazy","Logo","ProjectSelector","Search","UserNav","Switch","Text","Textarea","Boolean","Asset","Editor","DateTime","useContributedComponent","contributionPoint","getContributionPointConfig","section","pathParts","defaultComponent","contributionPointConfig","Navbar","currentProject","schema","navigate","useNavigate","handleSearchSelection","item","startTransition","Suspense","Layout","contributions","find","propEq","scopes","appDispatch","useAppDispatch","defaultScope","s","savedScope","SCOPE_STORAGE_KEY","Outlet","hasCause","getServerError","ServerError","possibleServerError","parseErrorBody","bodyText","GraphQLErrorContext","createContext","useGraphQLError","ctx","useContext","createErrorLink","setSchemaErrorMessage","ErrorLink","CombinedGraphQLErrors","locations","path","CombinedProtocolErrors","extensions","serverError","responseBody","firstError","additiveLink","currentProjectId","from","HttpLink","client","ApolloClient","InMemoryCache","responseObject","defaultDataIdFromObject","GraphQLProvider","schemaErrorMessage","useMemo","ApolloProvider","AlertDialog","AlertDialogPortal","AlertDialogOverlay","AlertDialogContent","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","buttonVariants","AlertDialogCancel","options","isOpen","setIsOpen","isSubmitting","setIsSubmitting","isClosingFromSubmit","setIsClosingFromSubmit","handleClose","handleAction","maybePromise","ActionsContext","EntityDispatchContext","actionsReducer","actions","action","actionType","uniqBy","ActionsProvider","entityActions","dispatchEntityActions","useReducer","useActions","useDispatch","stringTypes","temporalTypes","getEntityQuery","entityNamePlural","scope","filters","entitySchema","getEntitySchema","entityName","attributes","heading","globalAttributesList","getAttributeListByScope","imageAttributes","getImageAttributes","localAttributes","defaultScopedAttr","acc","attribute","scopedAttribute","localAttributesList","imageAttributesList","relationshipAttributesList","filter","attributesNameList","relatedAcc","relatedAttribute","additionalScope","relationshipEntity","localAttributeQuery","mapQueryResult","results","count","items","sliceFirstThreeItems","values","primaryAttribute","primaryAttributeName","mappedQueryResult","entity","_id","globalAttributes","attributeName","relationshipAttributes","relatedEntityName","relatedEntity","getPrimaryAttribute","primaryAttributeScope","localValue","value","mapQueryResultForFormFields","attributeSchema","localAttribute","getValueByScope","aggregateCount","result","attr","option","getEntityUpdateMutation","entityId","originalData","dataToMutate","pluralizedEntityName","capitalize","filterOutInvalidAttributes","globalAttributesUpdate","localAttributesUpdate","imageAttributesUpdate","relationshipAttributesUpdate","responseType","attributeNamesList","formatResponseFieldsForMutation","nonUpdatableAttributes","omit","pick","type","attributeType","schemaAttributes","toPairs","typedValue","stringifyValue","attributeValue","imageValue","imagePath","imageSize","imageMimeType","originalFilename","height","width","lqip","dataType","inputType","relationship","disconnect","connect","nodesToDisconnect","disconnectString","nodesToConnect","connectString","node","globalAttributesArray","localAttributesArray","relationshipAttributesArray","fields","relationshipAttribute","relationshipMode","relationshipEntityName","relationshipEntityAttributes","list","multipleRelationshipAttributes","str","getEntityDeleteMutation","localAttributesDelete","getEntityCreateMutation","entityData","localAttributesCreate","relationshipAttributesCreate","isMultipleRelationship","hasRelationships","getRelatedItemsQuery","queryEntityName","getAssetCreateMutation","assetSchema","uuidv4","tagSchema","useCreateAssetMutation","apolloClient","useApolloClient","mutation","gql","useEntityMutation","runMutation","setRunMutation","setMutation","setOptions","mutateFunction","loading","useMutation","isProjectDisabled","isProjectReadOnly","Delete","handleDeletion","dialogOptions","resolve","cache","toast","Drawer","shouldScaleBackground","DrawerPrimitive","DrawerPortal","DrawerOverlay","Yt","DrawerContent","DrawerHeader","DrawerTitle","DrawerDescription","DrawerModal","beforeClose","depth","isFocused","onFormChange","onClose","title","gutter","useCallback","onEscapeKeyPressed","Skeleton","CloseIcon","Separator","DrawerModalContext","_flag","DrawerModalProvider","dirty","setDirty","flag","useDrawerModalContext","Collapsible","CollapsibleContent","CollapsiblePrimitive","useOuterClick","callback","excludeSelectors","handleClickOutside","excludedElements","element","handleFocusOutside","FileTypeIconCompat","FileTypeIcon","Uploader","control","fieldSchema","getValues","setValue","name","label","isEditable","inputFile","wrapperRef","base64PreviewImage","setBase64PreviewImage","dragActive","setDragActive","saving","setSaving","useId","getExtensionFromMime","mime","map","parts","sub","getFileExtension","ext","fromMime","handleInput","file","previousValue","fileSizeLimit","bytes","isImage","reader","e","img","handleClearing","handleCopyUrl","fieldValue","IMAGES_BASE_URL","handleUpload","handleDownload","FormLabel","FormDescription","ImageIcon","UploadIcon","SearchIcon","style","defaultStyles","FileOutlineIcon","EllipsisIcon","DropdownMenuGroup","DownloadIcon","CopyIcon","ClearFieldIcon","Maximize2","ClearIcon","Number","rawValue","parsedValue","handleCheckbox","checked","DefaultValueSwitch","Popover","PopoverTrigger","PopoverContent","Hi","align","sideOffset","Calendar","classNames","showOutsideDays","DayPicker","ChevronLeft","ChevronRight","handleSelect","date","format","CalendarIcon","timeValue","hours","minutes","suggestionItems","createSuggestionItems","editor","range","CheckSquare","Heading1","Heading2","Heading3","List","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","LinkSelector","inputRef","target","Trash","TextIcon","NodeSelector","activeItem","MathSelector","evt","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","slice","text","pos","getPrevText","StepForward","AISelector","inputValue","setInputValue","complete","useCompletion","response","hasCompletion","ScrollArea","Markdown","CommandInput","addAIHighlight","ArrowUp","CommandList","GenerativeMenuSwitch","removeAIHighlight","EditorBubble","defaultExtensions","defaultValue","initialValue","content","setContent","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","Tags","tag","Badge","useGridColumnsDefinition","attributesSchema","checkboxSelect","actionsComponent","inputTypeToPreviewFieldMap","previewFieldComponentsMap","cols","previewType","previewComponent","isTagsPreview","row","column","singleCheckboxSelect","table","Checkbox","multipleCheckboxSelect","inferRowHeightEstimate","rowClassName","DataTable","columns","initialSelectionState","onEntitySelectionChange","onScroll","pageSize","rowHeightEstimate","rowAdditionState","rowDeletionState","toolbarComponent","scrollRef","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","columnFilters","setColumnFilters","sorting","setSorting","useReactTable","handleRowSelectionChange","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getRowClassnames","rows","rowVirtualizer","useVirtualizer","virtualItems","totalSize","updaterFn","selectedIds","Table","TableHeader","headerGroup","TableRow","header","TableHead","flexRender","TableBody","virtualRow","cell","TableCell","line","DataTableRowActions","handleDelete","Trash2","PAGE_SIZE","MultipleRelationship","setRows","actionDispatch","relationships","useAppContext","fieldId","relationshipId","relationshipEntitySchema","relationshipEntityAttributesSchema","baseEntityName","connectionName","relationshipAttributeMode","connectionAttributeName","getPrimaryAttributeName","initialRows","dataAdapter","entityQuery","previewItems","getData","useLazyQuery","dataRowActions","selectedRows","prop","fetchMoreOnBottomReached","containerRefElement","totalCount","scrollHeight","scrollTop","clientHeight","mappedData","handleSelection","disconnectEntity","connectedEntities","rowToDeleteWasJustConnected","shouldUndoDisconnection","disconnection","uniq","rowItem","relationshipFieldName","SingleRelationship","hasFocus","setHasFocus","displayValue","ChevronsUpDown","Relationship","formFieldParams","AlertTriangle","castedValue","SelectGroup","SelectLabel","UndefinedFieldTypeError","FormBuilder","currentScope","formData","setIsDirty","onSubmit","validationSchema","z","handleSubmit","watch","trigger","formState","errors","formFieldComponentsMap","useImperativeHandle","hasDataChanged","formChangesSubscription","changedData","fieldComponent","createElement","form_builder_default","memo","forwardRef","originalFormData","normalizeComparisonValue","sortAlphabetically","a","b","newData","equals","AddEntity","dispatch","mutationData","handleBeforeClose","handleSave","saveEntity","refreshQuery","useEntityQuery","variables","isForm","setResult","fetchNextPage","useQuery","mappedResults","mapResults","fetchMore","args","mappedFetchMoreResults","prevRows","ReadOnlyMode","AlertCircle","SaveButton","isDirty","_","i","EditEntity","setCurrentScope","setFormIsDirty","handleScopeChange","previousData","getEntityIdentifier","isRelationship","entityIdentifier","scopeItem","getLoadingColumns","EditRelationship","connectedEntitiesCount","mode","entityLabel","relationshipContext","searchResultIds","setSearchResultIds","setSelectedRows","filterOutConnectedEntities","conditionalWhereClause","loadingData","loadingColumns","rowsCount","selected","handleSelectionChange","prevSelected","existingSelections","valueFromData","handleCreateEntity","SearchBar","search","setSearch","getBaseSearchRequest","searchRequest","searchQuery","setSearchQuery","useSearch","prevResultsRef","debouncedSetSearchQuery","debounce","query","currentResultsString","r","prevResultsString","handleSearchChange","LoaderCircle","fn","ms","timeoutId","ActionsManager","editActions","latestModalId","payload","Root","config","defaultApp","AuthProvider","ConfigProvider","GlobalError","useRouteError","errorMessage","isRouteErrorResponse","ErrorBoundary","errorText","FlexkitStudio","log","debug","configArray","mapConfig","getApps","router","createBrowserRouter","route","child","AppProvider","RouterProvider","ACCEPTED_MIME_TYPES","openFileDialogAndUpload","createAssetNode","accept","multiple","maxBytes","resolvedAccept","files","validFiles","uploadUrl","uploads","dimensions","readImageDimensions","useUploadAssets","createAsset","ProjectDisabled","SchemaError","defineConfig","defineEntity","DataTableFacetedFilter","facets","selectedValues","CirclePlusIcon","CommandEmpty","isSelected","filterValues","CheckIcon","handleEdit","Pencil","Ellipsis","DataTableViewOptions","Settings2","DropdownMenuLabel","DropdownMenuCheckboxItem","DataTableToolbar","appContext","isDeleting","setIsDeleting","handleCreate","deleteOne","handleBatchDelete","itemLabel"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport { useState, useEffect } from 'react';\nimport { ThemeProvider as NextThemesProvider } from 'next-themes';\nimport { type ThemeProviderProps } from 'next-themes/dist/types';\n\nexport function ThemeProvider({ children, ...props }: ThemeProviderProps): JSX.Element {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return <>{children}</>;\n }\n\n return <NextThemesProvider {...props}>{children}</NextThemesProvider>;\n}\n","import { useState, useEffect } from 'react';\nimport { Monitor, Moon, Sun } from 'lucide-react';\nimport { useTheme } from 'next-themes';\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","import { useTheme } from 'next-themes';\n\nexport function Loading(): JSX.Element {\n const { resolvedTheme } = useTheme();\n\n return (\n <div className=\"fk-flex fk-w-full fk-h-full fk-justify-center fk-items-center fk-bg-background\">\n <div className=\"fk-flex fk-flex-col fk-items-center\">\n {resolvedTheme === 'dark' ? (\n <svg\n className=\"fk-h-8 fk-w-8 fk-animate-bounce\"\n fill=\"none\"\n viewBox=\"0 0 48 48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7 8H41V40H7V8Z\" fill=\"#020817\" />\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=\"white\"\n />\n </svg>\n ) : (\n <svg\n className=\"fk-h-8 fk-w-8 fk-animate-bounce\"\n fill=\"none\"\n viewBox=\"0 0 48 48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7 8H41V40H7V8Z\" fill=\"white\" />\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=\"#020817\"\n />\n </svg>\n )}\n <div className=\"fk-text-foreground fk-text-center fk-mt-4 fk-animate-pulse\">Loading...</div>\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from 'src/ui/lib/utils';\n\nconst alertVariants = cva(\n 'fk-relative fk-w-full fk-rounded-lg fk-border fk-p-4 [&>svg~*]:fk-pl-7 [&>svg+div]:fk-translate-y-[-3px] [&>svg]:fk-absolute [&>svg]:fk-left-4 [&>svg]:fk-top-4 [&>svg]:fk-text-foreground',\n {\n variants: {\n variant: {\n 'default': 'fk-bg-background fk-text-foreground',\n destructive: 'fk-border-none fk-text-destructive fk-bg-destructive-foreground [&>svg]:fk-text-destructive',\n success: 'fk-border-none fk-text-success fk-bg-success-foreground [&>svg]:fk-text-success',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div className={cn(alertVariants({ variant }), className)} ref={ref} role=\"alert\" {...props} />\n));\nAlert.displayName = 'Alert';\n\nconst AlertTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n // eslint-disable-next-line jsx-a11y/heading-has-content -- intentional, content is set later\n <h5 className={cn('fk-mb-1 fk-font-medium fk-leading-none fk-tracking-tight', className)} ref={ref} {...props} />\n )\n);\nAlertTitle.displayName = 'AlertTitle';\n\nconst AlertDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <div className={cn('fk-text-sm [&_p]:fk-leading-relaxed', className)} ref={ref} {...props} />\n )\n);\nAlertDescription.displayName = 'AlertDescription';\n\nexport { Alert, AlertTitle, AlertDescription };\n","'use client';\n\nimport { useEffect, 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 } from '../core/api-paths';\n\nconst formSchema = z.object({\n email: z.string().email({ message: 'Please enter a valid email address' }),\n});\n\nexport default function EmailLogin({\n projectId,\n setIsEmailLogin,\n}: {\n projectId: string;\n setIsEmailLogin: Dispatch<SetStateAction<boolean>>;\n}): JSX.Element {\n const [hasOtpExpired, setHasOtpExpired] = useState(false);\n const [shouldSendOtp, setShouldSendOtp] = useState(false);\n const { mutate } = useSWRConfig();\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: '',\n },\n });\n const sendOtpUrl = new URL(apiPaths(projectId).loginOtpSend, baseApiUrl);\n const { data, error, isLoading } = useSWR(\n shouldSendOtp ? sendOtpUrl.href : null,\n (url: string) =>\n fetch(url, { method: 'POST', mode: 'cors', body: JSON.stringify({ email: form.getValues('email') }) }).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 confirmOtpUrl = new URL(apiPaths(projectId).loginOtpConfirm, baseApiUrl);\n const setTokenUrl = '/api/flexkit/set-token';\n fetch(`${confirmOtpUrl.href}?email=${form.getValues('email')}&token=${token}`)\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 window.location.reload();\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 }, [form, hasOtpBeenSent, projectId, token]);\n\n function handleEmailLogin(): void {\n setHasOtpExpired(false);\n setShouldSendOtp(true);\n void mutate(sendOtpUrl.href);\n }\n\n return (\n <div className=\"fk-w-full\">\n {hasOtpBeenSent ? (\n <Alert variant=\"success\">\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 hover:fk-underline dark:fk-text-background\"\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 dark:fk-text-white/90 fk-underline\"\n href={`https://flexkit.io/signup/email?email=${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 hover:fk-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 hover:fk-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 { useState } from 'react';\nimport useSWR from 'swr';\nimport { Navigate, 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 } from '../core/api-paths';\nimport { useConfig } from '../core/config/config-context';\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\nexport function Login({ projectId }: { projectId: string }): JSX.Element {\n const { projects } = useConfig();\n const [selectedProject, setSelectedProject] = useState(\n projects.find((project) => project.projectId === projectId) ?? projects[0]\n );\n const [isEmailLogin, setIsEmailLogin] = useState(false);\n const { data, error, isLoading } = useSWR(apiPaths(projectId).authProviders, (url: string) =>\n fetch(url, { mode: 'cors' }).then((res) => res.json() as Promise<{ providers: Provider[] }>)\n );\n const [isAuthLoading, auth] = useAuth();\n const copyrightYear = new Date().getFullYear();\n const currentRouterLocation = useLocation();\n const referal: string =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- generic \"any\" typing comes from react-router-dom\n currentRouterLocation.state?.from?.pathname ?? currentRouterLocation.pathname;\n\n const fromPath = referal.includes(selectedProject.projectId)\n ? `${location.origin}${referal}`\n : `${location.origin}${selectedProject.basePath}/${selectedProject.projectId}`;\n\n if (error) {\n throw new Error('Error fetching auth providers');\n }\n\n if (isLoading || isAuthLoading || !data) {\n return <Loading />;\n }\n\n if (auth.user?.id) {\n return <Navigate replace state={{ from: currentRouterLocation }} to={selectedProject.basePath} />;\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 lg:fk-px-0\">\n <div className=\"fk-w-full lg:fk-p-8\">\n <div className=\"fk-mx-auto fk-flex fk-flex-col fk-justify-center sm:fk-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 {projects.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={selectedProject.projectId}\n onValueChange={(id) => {\n setSelectedProject(projects.find((project) => project.projectId === id) ?? projects[0]);\n }}\n >\n <SelectTrigger className=\"fk-mb-4 fk-w-full fk-h-9 fk-py-1\" id=\"project\">\n <SelectValue aria-label={selectedProject.title}>{selectedProject.title}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {projects.map((project) => (\n <SelectItem key={project.projectId} value={project.projectId}>\n {project.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ) : null}\n {isEmailLogin ? (\n <EmailLogin projectId={projectId} setIsEmailLogin={setIsEmailLogin} />\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={`${provider.button.color} ${provider.button.backgroundColor} hover:${provider.button.colorHover} 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: selectedProject.projectId,\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-[7rem]\" 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 after:fk-content-['|'] after:fk-pl-6\">\n <a className=\"fk-underline-offset-4 hover:fk-text-primary\" href=\"https://www.flexkit.io\">\n flexkit.io\n </a>\n </li>\n <li className=\"fk-pr-6 after:fk-content-['|'] after:fk-pl-6\">\n <a className=\"fk-underline-offset-4 hover:fk-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 hover:fk-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 hover:!fk-bg-bitbucket-hover\" />\n <div className=\"fk-hidden !fk-bg-github hover:!fk-bg-github-hover\" />\n <div className=\"fk-hidden !fk-text-muted-foreground !fk-bg-white hover:!fk-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 dark:fk-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 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 params.set('projectId', projectId);\n params.set('redirect', fromPath);\n\n return `${url}?${params.toString()}`;\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","'use client';\n\nimport { useTheme } from 'next-themes';\nimport { Toaster as Sonner } from 'sonner';\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nfunction Toaster({ ...props }: ToasterProps): JSX.Element {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n className=\"toaster fk-group\"\n theme={theme as ToasterProps['theme']}\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:fk-bg-background group-[.toaster]:fk-text-foreground group-[.toaster]:fk-border-border group-[.toaster]:fk-shadow-lg',\n description: 'group-[.toast]:fk-text-muted-foreground',\n actionButton: 'group-[.toast]:fk-bg-primary group-[.toast]:fk-text-primary-foreground',\n cancelButton: 'group-[.toast]:fk-bg-muted group-[.toast]:fk-text-muted-foreground',\n success:\n 'group-[.toaster]:!fk-bg-emerald-500 group-[.toaster]:!fk-border-emerald-500 group-[.toaster]:!fk-text-white',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { Toaster };\n","import { useEffect, useRef, useState } from 'react';\nimport { MoreHorizontal, PackageCheck, PackageX, Settings, Wrench } from 'lucide-react';\nimport { Link, NavLink, Navigate, useLocation, useParams } from 'react-router-dom';\nimport { Button } from '../primitives/button';\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 apps: AppOptions[];\n version: {\n current: string;\n latest: string;\n isCurrent: boolean;\n };\n};\n\nexport function AppBar({ apps, 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 currentAppSegmentPath = apps.find((app) => location.pathname.includes(`/${projectId}/${app.name}`))?.name;\n const activeApp = apps.find((app) => location.pathname.includes(`/${projectId}/${app.name}`))?.name ?? apps[0]?.name;\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 }, [currentAppSegmentPath]);\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 if (currentAppSegmentPath === undefined && activeApp) {\n return <Navigate to={`${location.pathname}/${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 data-[state=active]:fk-border-l-current focus-visible:fk-outline-none focus-visible:fk-ring-0 focus-visible:fk-ring-offset-0 focus-visible:fk-border-2 focus-visible:fk-border-ring focus-visible:fk-rounded-sm\"\n >\n <NavLink\n className=\"fk-text-muted-foreground aria-[current]:fk-text-foreground aria-[current]:fk-bg-background aria-[current]:fk-border-l-white\"\n to={app.name}\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 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-none fk-focus-visible:border-2 fk-focus-visible:border-ring fk-focus-visible:rounded-sm\">\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={app.name}>{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-none fk-focus-visible:border-2 fk-focus-visible:border-ring fk-focus-visible:rounded-sm\">\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 { lazy } from 'react';\nimport type { ComponentType, LazyExoticComponent } from 'react';\nimport { useConfig } from './config/config-context';\nimport { PluginOptions } from './config/types';\nimport type { LogoProps, ProjectSelectorProps, SearchProps, UserNavProps } from './config/types';\nimport type { FormFieldParams } from '../form/types';\nimport type { Asset } from '../data-grid/preview-components/asset';\n\ninterface ContributionPointMap {\n 'navbar.logo': LazyExoticComponent<ComponentType<LogoProps>>;\n 'navbar.projectSelector': LazyExoticComponent<ComponentType<ProjectSelectorProps>>;\n 'navbar.search': LazyExoticComponent<ComponentType<SearchProps>>;\n 'navbar.userNav': LazyExoticComponent<ComponentType<UserNavProps>>;\n 'formFields.switch': LazyExoticComponent<ComponentType<FormFieldParams<'switch'>>>;\n 'formFields.text': LazyExoticComponent<ComponentType<FormFieldParams<'text'>>>;\n 'formFields.textarea': LazyExoticComponent<ComponentType<FormFieldParams<'textarea'>>>;\n 'previewFields.boolean': LazyExoticComponent<ComponentType<{ value: boolean }>>;\n 'previewFields.asset': LazyExoticComponent<ComponentType<{ value: Asset }>>;\n 'previewFields.text': LazyExoticComponent<ComponentType<{ value: string }>>;\n 'previewFields.editor': LazyExoticComponent<ComponentType<{ value: string }>>;\n 'previewFields.datetime': LazyExoticComponent<ComponentType<{ value: string }>>;\n}\n\nconst contributionPointMap: ContributionPointMap = {\n // navbar\n 'navbar.logo': lazy(() => import('../ui/components/logo.js').then(({ Logo }) => ({ 'default': Logo }))),\n 'navbar.projectSelector': lazy(() =>\n import('../ui/components/project-selector.js').then(({ ProjectSelector }) => ({ 'default': ProjectSelector }))\n ),\n 'navbar.search': lazy(() => import('../ui/components/search.js').then(({ Search }) => ({ 'default': Search }))),\n 'navbar.userNav': lazy(() => import('../ui/components/user-nav.js').then(({ UserNav }) => ({ 'default': UserNav }))),\n // form fields\n 'formFields.switch': lazy(() => import('../form/fields/switch.js').then(({ Switch }) => ({ 'default': Switch }))),\n 'formFields.text': lazy(() => import('../form/fields/text.js').then(({ Text }) => ({ 'default': Text }))),\n 'formFields.textarea': lazy(() =>\n import('../form/fields/textarea.js').then(({ Textarea }) => ({ 'default': Textarea }))\n ),\n // preview fields\n 'previewFields.boolean': lazy(() =>\n import('../data-grid/preview-components/boolean.js').then(({ Boolean }) => ({ 'default': Boolean }))\n ),\n 'previewFields.asset': lazy(() =>\n import('../data-grid/preview-components/asset.js').then(({ Asset }) => ({ 'default': Asset }))\n ),\n 'previewFields.text': lazy(() =>\n import('../data-grid/preview-components/text.js').then(({ Text }) => ({ 'default': Text }))\n ),\n 'previewFields.editor': lazy(() =>\n import('../data-grid/preview-components/editor.js').then(({ Editor }) => ({ 'default': Editor }))\n ),\n 'previewFields.datetime': lazy(() =>\n import('../data-grid/preview-components/datetime.js').then(({ DateTime }) => ({ 'default': DateTime }))\n ),\n};\n\nexport function useContributedComponent<T extends keyof ContributionPointMap>(\n contributionPoint: T\n): ContributionPointMap[T] {\n const { getContributionPointConfig } = useConfig();\n const [section, ...pathParts] = contributionPoint.split('.');\n const defaultComponent = contributionPointMap[contributionPoint];\n const contributionPointConfig = getContributionPointConfig(\n section as keyof PluginOptions['contributes'],\n pathParts\n ) as unknown as { component: ContributionPointMap[T] }[];\n\n return contributionPointConfig?.length > 0 ? contributionPointConfig[0]?.component : defaultComponent;\n}\n","import { useNavigate } from 'react-router-dom';\nimport { Suspense, startTransition } from 'react';\nimport { useTheme } from 'next-themes';\nimport type { ProjectOptions } from '../../core/config/types';\nimport { useContributedComponent } from '../../core/use-contributed-component';\n\ntype Props = {\n projectId: string;\n projects: ProjectOptions[];\n};\n\nexport function Navbar({ projectId, projects }: Props): JSX.Element {\n const { resolvedTheme } = useTheme();\n const Logo = useContributedComponent('navbar.logo');\n const ProjectSelector = useContributedComponent('navbar.projectSelector');\n const Search = useContributedComponent('navbar.search');\n const UserNav = useContributedComponent('navbar.userNav');\n const currentProject = projects.find((project) => project.projectId === projectId) ?? projects[0];\n const { basePath, schema } = currentProject;\n const navigate = useNavigate();\n\n function handleSearchSelection(item: { entityName: string; entityNamePlural: string; entityId: string }) {\n startTransition(() => {\n navigate(`${basePath}/${projectId}/desk/list/${item.entityNamePlural}?id=${item.entityId}`);\n });\n }\n\n return (\n <div className=\"fk-flex fk-basis-14 fk-min-h-[3.5rem] fk-px-3 fk-gap-x-4 fk-border-b fk-border-border fk-z-20\">\n <Suspense fallback={null}>\n <Logo theme={resolvedTheme} title=\"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 projectId={projectId} projects={projects} />\n </Suspense>\n <Suspense fallback={null}>\n <Search onSelect={handleSearchSelection} projectId={projectId} schema={schema} />\n </Suspense>\n </div>\n <div className=\"fk-flex fk-items-center\">\n <Suspense fallback={null}>\n <UserNav projectId={projectId} />\n </Suspense>\n </div>\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { Outlet, useParams, useLocation } from 'react-router-dom';\nimport { find, propEq } from 'ramda';\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 type { SingleProject } from '../../core/config/types';\nimport { FlexkitError } from '../../core/error/errors';\nimport { Loading } from '../components/loading';\nimport { Toaster } from '../primitives/sonner';\nimport { AppBar } from './appbar';\nimport { Navbar } from './navbar';\n\ntype Props = {\n version: {\n current: string;\n latest: string;\n isCurrent: boolean;\n };\n};\n\nexport function Layout({ version }: Props): JSX.Element {\n const { contributions, projects } = useConfig();\n const [isLoading, auth] = useAuth();\n const { projectId } = useParams();\n\n const project = find(propEq(projectId ?? '', 'projectId'))(projects) as SingleProject | undefined;\n\n if (!project) {\n throw new FlexkitError('PROJECT_NOT_FOUND');\n }\n\n const { scopes } = project;\n const { apps } = contributions;\n const appDispatch = useAppDispatch();\n const location = useLocation();\n\n useEffect(() => {\n if (scopes) {\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 }, [location]);\n\n if (isLoading) {\n return <Loading />;\n }\n\n if (!auth.user?.id) {\n return <Login projectId={projectId ?? ''} />;\n }\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 ?? ''} 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} />\n <Outlet />\n </div>\n </div>\n <Toaster />\n </>\n );\n}\n","import type { ErrorLike } from '@apollo/client';\nimport { ServerError } from '@apollo/client/errors';\n\ntype ErrorWithCause = ErrorLike & { cause?: unknown };\n\nfunction hasCause(error: ErrorLike): error is ErrorWithCause {\n if (!error) {\n return false;\n }\n\n return 'cause' in (error as ErrorWithCause);\n}\n\nexport function getServerError(error?: ErrorLike): ServerError | null {\n if (!error) {\n return null;\n }\n\n if (ServerError.is(error)) {\n return error;\n }\n\n if (hasCause(error)) {\n const possibleServerError = error.cause;\n\n if (ServerError.is(possibleServerError)) {\n return possibleServerError;\n }\n }\n\n return null;\n}\n\nexport function parseErrorBody<T>(bodyText: string | undefined): T | null {\n if (!bodyText) {\n return null;\n }\n\n try {\n return JSON.parse(bodyText) as T;\n } catch {\n return null;\n }\n}\n","'use client';\n\nimport { ApolloClient, InMemoryCache, defaultDataIdFromObject, from, HttpLink } from '@apollo/client';\nimport type { ApolloLink } from '@apollo/client';\nimport { ApolloProvider } from '@apollo/client/react';\nimport { ErrorLink } from '@apollo/client/link/error';\nimport { CombinedGraphQLErrors, CombinedProtocolErrors } from '@apollo/client/errors';\nimport { getServerError, parseErrorBody } from './error-utils';\nimport { useConfig } from '../core/config/config-context';\nimport React, { createContext, useContext, useMemo, useState } from 'react';\n\ntype GraphQLErrorContextValue = {\n schemaErrorMessage: string | null;\n setSchemaErrorMessage: React.Dispatch<React.SetStateAction<string | null>>;\n};\n\nconst GraphQLErrorContext = createContext<GraphQLErrorContextValue | undefined>(undefined);\n\nfunction useGraphQLError(): GraphQLErrorContextValue {\n const ctx = useContext(GraphQLErrorContext);\n\n if (!ctx) {\n throw new Error('useGraphQLError must be used within GraphQLProvider');\n }\n\n return ctx;\n}\n\nfunction createErrorLink(setSchemaErrorMessage: (msg: string | null) => void): ApolloLink {\n return new ErrorLink(({ error }) => {\n if (CombinedGraphQLErrors.is(error)) {\n error.errors.forEach(({ message, locations, path }) => {\n console.log(`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`);\n });\n } else if (CombinedProtocolErrors.is(error)) {\n error.errors.forEach(({ message, extensions }) => {\n console.log(`[Protocol error]: Message: ${message}, Extensions: ${JSON.stringify(extensions)}`);\n });\n }\n\n const serverError = getServerError(error);\n\n if (serverError?.statusCode === 400) {\n const responseBody = parseErrorBody<Record<string, unknown>>(serverError.bodyText);\n let message: string | null = null;\n\n if (responseBody && typeof responseBody === 'object') {\n if (typeof responseBody.message === 'string') {\n message = responseBody.message;\n } else if (Array.isArray((responseBody as { errors?: unknown }).errors)) {\n const errorsArray = (responseBody as { errors?: unknown }).errors as unknown[];\n const firstError = errorsArray[0] as { message?: unknown } | undefined;\n\n if (firstError && typeof firstError.message === 'string') {\n message = firstError.message;\n }\n } else if (typeof (responseBody as { error?: unknown }).error === 'string') {\n message = (responseBody as { error?: unknown }).error as string;\n } else {\n message = JSON.stringify(responseBody);\n }\n } else {\n message = serverError.bodyText;\n }\n\n setSchemaErrorMessage(message ?? 'There is an error in your Flexkit schema (flexkit.config.ts).');\n }\n\n if (serverError) {\n console.log(`[Network error]: ${serverError.message}`);\n\n return;\n }\n\n if (error) {\n console.log(`[Network error]: ${error.message}`);\n }\n });\n}\n\nfunction additiveLink(currentProjectId: string, setSchemaErrorMessage: (msg: string | null) => void): ApolloLink {\n return from([\n createErrorLink(setSchemaErrorMessage),\n new HttpLink({ uri: `/api/flexkit/${currentProjectId}/graphql` }),\n ]);\n}\n\nfunction client(\n currentProjectId: string | undefined,\n setSchemaErrorMessage: (msg: string | null) => void\n): ApolloClient {\n return new ApolloClient({\n link: additiveLink(currentProjectId ?? '', setSchemaErrorMessage),\n cache: new InMemoryCache({\n dataIdFromObject: (responseObject) => {\n return responseObject._id ? (responseObject._id as string) : defaultDataIdFromObject(responseObject);\n },\n }),\n });\n}\n\nexport function GraphQLProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const { currentProjectId } = useConfig();\n const [schemaErrorMessage, setSchemaErrorMessage] = useState<string | null>(null);\n const ctx = useMemo(() => ({ schemaErrorMessage, setSchemaErrorMessage }), [schemaErrorMessage]);\n\n return (\n <GraphQLErrorContext.Provider value={ctx}>\n <ApolloProvider client={client(currentProjectId, setSchemaErrorMessage)}>{children}</ApolloProvider>\n </GraphQLErrorContext.Provider>\n );\n}\n\nexport { useGraphQLError };\n","'use client';\n\nimport * as React from 'react';\nimport * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';\nimport { cn } from 'src/ui/lib/utils';\nimport { buttonVariants } from './button';\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n 'fk-fixed fk-inset-0 fk-z-50 fk-bg-overlay/75 fk-backdrop-blur-[1px] fk- data-[state=open]:fk-animate-in data-[state=closed]:fk-animate-out data-[state=closed]:fk-fade-out-0 data-[state=open]:fk-fade-in-0',\n className\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n className={cn(\n 'fk-fixed fk-left-[50%] fk-top-[50%] fk-z-50 fk-grid fk-w-full fk-max-w-lg fk-translate-x-[-50%] fk-translate-y-[-50%] fk-gap-4 fk-border fk-bg-background fk-p-6 fk-shadow-lg fk-duration-200 data-[state=open]:fk-animate-in data-[state=closed]:fk-animate-out data-[state=closed]:fk-fade-out-0 data-[state=open]:fk-fade-in-0 data-[state=closed]:fk-zoom-out-95 data-[state=open]:fk-zoom-in-95 data-[state=closed]:fk-slide-out-to-left-1/2 data-[state=closed]:fk-slide-out-to-top-[48%] data-[state=open]:fk-slide-in-from-left-1/2 data-[state=open]:fk-slide-in-from-top-[48%] sm:fk-rounded-lg',\n className\n )}\n ref={ref}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nfunction AlertDialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): JSX.Element {\n return (\n <div className={cn('fk-flex fk-flex-col fk-space-y-2 fk-text-center sm:fk-text-left', className)} {...props} />\n );\n}\nAlertDialogHeader.displayName = 'AlertDialogHeader';\n\nfunction AlertDialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): JSX.Element {\n return (\n <div\n className={cn('fk-flex fk-flex-col-reverse sm:fk-flex-row sm:fk-justify-end sm:fk-space-x-2', className)}\n {...props}\n />\n );\n}\nAlertDialogFooter.displayName = 'AlertDialogFooter';\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title className={cn('fk-text-lg fk-font-semibold', className)} ref={ref} {...props} />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n className={cn('fk-text-sm fk-text-muted-foreground', className)}\n ref={ref}\n {...props}\n />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action className={cn(buttonVariants(), className)} ref={ref} {...props} />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: 'outline' }), 'fk-mt-2 sm:fk-mt-0', className)}\n ref={ref}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","'use client';\n\nimport { useEffect, useState } 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\n try {\n const maybePromise = options.dialogActionSubmit?.();\n\n if (maybePromise && typeof (maybePromise as Promise<void>).then === 'function') {\n await (maybePromise as Promise<void>);\n }\n } finally {\n setIsClosingFromSubmit(true);\n setIsOpen(false);\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 { createContext, useContext, useReducer } from 'react';\nimport type { Dispatch, ReactNode } from 'react';\nimport { props, uniqBy } from 'ramda';\nimport type {\n Action,\n ActionAddEntity,\n ActionAlertDialog,\n ActionDeleteEntity,\n ActionEditEntity,\n ActionEditRelationship,\n} from './types';\n\nconst ActionsContext = createContext<Action[] | []>([]);\nconst EntityDispatchContext = createContext<Dispatch<Action>>(() => undefined);\n\nfunction actionsReducer(actions: Action[], action: Action): Action[] {\n const actionType = action.type;\n\n if (!action._id) {\n action._id = Date.now().toString();\n }\n\n switch (actionType) {\n case 'DeleteEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionDeleteEntity[]), action]);\n }\n case 'AddEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionAddEntity[]), action]);\n }\n case 'EditEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionEditEntity[]), action]);\n }\n case 'EditRelationship': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionEditRelationship[]), action]);\n }\n case 'AlertDialog': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionAlertDialog[]), action]);\n }\n case 'Dismiss': {\n return actions.filter((item) => item._id !== action._id);\n }\n default: {\n throw Error(`Unknown action: ${actionType as string}`);\n }\n }\n}\n\nfunction ActionsProvider({ children }: { children: ReactNode }): JSX.Element {\n const [entityActions, dispatchEntityActions] = useReducer(actionsReducer, []);\n\n return (\n <ActionsContext.Provider value={entityActions}>\n <EntityDispatchContext.Provider value={dispatchEntityActions}>{children}</EntityDispatchContext.Provider>\n </ActionsContext.Provider>\n );\n}\n\nfunction useActions(): Action[] {\n return useContext(ActionsContext);\n}\n\nfunction useDispatch(): Dispatch<Action> {\n return useContext(EntityDispatchContext);\n}\n\nexport { ActionsProvider, useActions, useDispatch };\n","import { filter, find, pick, propEq, toPairs, omit } from 'ramda';\nimport { v4 as uuidv4 } from 'uuid';\nimport { assetSchema } from '../entities/assets-schema';\nimport { tagSchema } from '../entities/tags-schema';\nimport type { Attribute, Entity, DataType, Schema, ScopeType, MultipleRelationshipConnection } from '../core/types';\nimport type {\n AttributeValue,\n EntityData,\n EntityItem,\n EntityQueryAggregate,\n EntityQueryResults,\n FormEntityItem,\n FormFieldValue,\n MappedEntityItem,\n MappedEntityQueryResults,\n MappedFormEntityQueryResults,\n EntityQueryResult,\n ImageValue,\n} from './types';\n\ntype EntityQuery = {\n queryEntityName: string;\n query: string;\n};\n\nconst stringTypes: DataType[] = ['id', 'string'];\nconst temporalTypes: DataType[] = ['date', 'datetime', 'duration', 'time'];\n\nexport function getEntityQuery(entityNamePlural: string, scope: string, schema: Schema): EntityQuery {\n const filters = `(where: $where, options: $options)`;\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const entityName = entitySchema?.name ?? entityNamePlural;\n const attributes = entitySchema?.attributes ?? [];\n const heading = `$where: ${entityName}Where, $options: ${entityName}Options`;\n\n if (!entitySchema) {\n throw new Error(`Entity '${entityName}' not found in the schema`);\n }\n\n if (attributes.length === 0) {\n throw new Error(`Entity '${entityName}' has no attributes defined in the schema`);\n }\n\n const globalAttributesList: string = getAttributeListByScope('global', attributes).join('\\n ');\n const imageAttributes: string[] = getImageAttributes(attributes);\n const localAttributes: readonly string[] = getAttributeListByScope(['local'], attributes);\n const defaultScopedAttr = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n }\\n `,\n ''\n );\n const scopedAttribute = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n ${scope}\\n }\\n `,\n ''\n );\n const localAttributesList: string = scope === 'default' ? defaultScopedAttr : scopedAttribute;\n const imageAttributesList: string = imageAttributes.reduce((acc, attribute) => {\n return `${acc}\\n ${attribute} {\\n _id\\n originalFilename\\n mimeType\\n path\\n size\\n height\\n width\\n lqip\\n }\\n `;\n }, '');\n\n const relationshipAttributes = filter(propEq('relationship', 'scope'))(attributes);\n const relationshipAttributesList: string = relationshipAttributes.reduce((acc, attribute) => {\n const relatedEntity = find(propEq(attribute.relationship?.entity, 'name'))(schema) as Entity | undefined;\n const attributesNameList = relatedEntity?.attributes.reduce((relatedAcc, relatedAttribute) => {\n const additionalScope = scope === 'default' ? '' : `${scope}\\n `;\n\n if (relatedAttribute.dataType === 'asset') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n _id\\n originalFilename\\n mimeType\\n path\\n size\\n height\\n width\\n lqip\\n }\\n `;\n }\n\n if (relatedAttribute.scope === 'local') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n _id\\n default\\n ${additionalScope}\\n}\\n `;\n }\n\n if (relatedAttribute.scope === 'relationship') {\n const relationshipEntity = find(propEq(relatedAttribute.relationship?.entity, 'name'))(schema) as\n | Entity\n | undefined;\n const relationshipAttribute = find(propEq(relatedAttribute.relationship?.field, 'name'))(\n relationshipEntity?.attributes ?? []\n ) as Attribute;\n const localAttributeQuery =\n relationshipAttribute.scope === 'local'\n ? `{\\n _id\\n default\\n ${additionalScope}}\\n `\n : '';\n\n if (relatedAttribute.relationship?.mode === 'single') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n\n if (relatedAttribute.relationship?.field) {\n return `${relatedAcc}\\n ${relatedAttribute.name} (options: {limit: 25, offset: 0}) {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n }\n\n return `${relatedAcc}\\n ${relatedAttribute.name}\\n `;\n }, '');\n\n return (\n `${attribute.name}Aggregate {\\n` +\n ` count\\n` +\n ` }` +\n `${acc}\\n ${attribute.name} (options: {limit: 25, offset: 0}) { _id ${attributesNameList ?? ''}` +\n `}\\n `\n );\n }, '');\n\n return {\n queryEntityName: entityNamePlural,\n query:\n `query getEntity(${heading}) {\\n` +\n ` ${entityNamePlural}Aggregate {\\n` +\n ` count\\n` +\n ` }\\n` +\n ` ${entityNamePlural}${filters} {\\n` +\n ` _id\\n` +\n ` ${globalAttributesList}` +\n ` ${localAttributesList}` +\n ` ${imageAttributesList}` +\n ` ${relationshipAttributesList}` +\n `}\\n` +\n `}\\n`,\n };\n}\n\n/**\n * Map the GraphQl results JSON to a key-value pair array. The values inside the scopedAttributes key are flattened to the first level.\n */\nexport function mapQueryResult(\n entityNamePlural: string,\n scope: string,\n results: EntityQueryResults,\n schema: Schema\n): MappedEntityQueryResults {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const attributes = entitySchema?.attributes ?? [];\n\n if (attributes.length === 0) {\n return {\n count: 0,\n results: [],\n };\n }\n\n const { count } = results[`${entityNamePlural}Aggregate`] as EntityQueryAggregate;\n const items = results[entityNamePlural] as EntityQueryResult[];\n const sliceFirstThreeItems = (values: EntityItem[], primaryAttribute: Attribute): string => {\n const primaryAttributeName = primaryAttribute.name;\n\n return values\n .slice(0, 3)\n .map((item) =>\n primaryAttribute.scope === 'local'\n ? (item[primaryAttributeName]?.[scope] ?? item[primaryAttributeName].default)\n : item[primaryAttributeName]\n )\n .join(', ');\n };\n const mappedQueryResult = items.map((entity) => {\n const { _id } = entity;\n const globalAttributes = getAttributeListByScope('global', attributes).reduce(\n (acc, attributeName) => ({ ...acc, [attributeName]: entity[attributeName] }),\n {}\n );\n const localAttributes = getAttributeListByScope('local', attributes).reduce((acc, attributeName) => {\n const scopedAttribute = entity[attributeName] as AttributeValue | null;\n\n return {\n ...acc,\n [attributeName]: scopedAttribute?.[scope] ? scopedAttribute[scope] : scopedAttribute?.default,\n };\n }, {});\n const imageAttributes = getImageAttributes(attributes).reduce(\n (acc, attributeName) => ({ ...acc, [attributeName]: entity[attributeName] }),\n {}\n );\n const relationshipAttributes = getAttributeListByScope(['relationship'], attributes).reduce(\n (acc, attributeName) => {\n const relationshipAttribute = find(propEq(attributeName, 'name'))(attributes) as Attribute;\n const relatedEntityName = relationshipAttribute.relationship?.entity ?? '';\n const relatedEntity = find(propEq(relatedEntityName, 'name'))(schema) as Entity | undefined;\n const primaryAttribute = getPrimaryAttribute(relatedEntity?.attributes ?? []);\n const primaryAttributeName = primaryAttribute?.name ?? '';\n const primaryAttributeScope = primaryAttribute?.scope ?? 'global';\n const localValue = entity[attributeName] as AttributeValue | null;\n\n if (!primaryAttributeName) {\n throw new Error(`There is an error in the schema for the relationship attribute \"${attributeName}\"`);\n }\n\n if (Array.isArray(localValue)) {\n return {\n ...acc,\n [attributeName]: sliceFirstThreeItems(localValue, primaryAttribute),\n };\n }\n\n const value =\n primaryAttributeScope === 'global'\n ? localValue?.[primaryAttributeName]\n : ((localValue?.[primaryAttributeName] as AttributeValue | undefined)?.[scope] ??\n (localValue?.[primaryAttributeName] as AttributeValue | undefined)?.default);\n\n return {\n ...acc,\n [attributeName]: value,\n };\n },\n {}\n );\n\n return { _id, ...globalAttributes, ...localAttributes, ...imageAttributes, ...relationshipAttributes };\n });\n\n return {\n count,\n results: mappedQueryResult,\n };\n}\n\n/**\n * Like mapQueryResult but the local attribute values are returned as an object:\n * \\{_id: string, value: string, disabled: boolean, scope: string\\}.\n */\nexport function mapQueryResultForFormFields(\n entityNamePlural: string,\n scope: string,\n results: EntityQueryResults,\n schema: Schema\n): MappedFormEntityQueryResults {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const attributes = entitySchema?.attributes ?? [];\n\n if (attributes.length === 0) {\n return {\n count: 0,\n results: [],\n };\n }\n\n const { count } = results[`${entityNamePlural}Aggregate`] as EntityQueryAggregate;\n const items = results[entityNamePlural] as EntityQueryResult[];\n const mappedQueryResult = items.map((entity) => {\n const globalAttributes = getAttributeListByScope('global', attributes).reduce(\n (acc, attribute) => ({\n ...acc,\n [attribute]: {\n value: entity[attribute],\n disabled: false,\n scope: 'default',\n _id: '',\n },\n }),\n {}\n );\n const localAttributes = getAttributeListByScope('local', attributes).reduce((acc, attributeName) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(attributes) as Attribute;\n const localAttribute = entity[attributeName] as AttributeValue | null;\n\n return {\n ...acc,\n [attributeName]: {\n value: localAttribute ? getValueByScope(localAttribute, scope) : null,\n disabled: Boolean(\n localAttribute && localAttribute[scope] === null && attributeSchema.scope === 'local' && scope !== 'default'\n ),\n scope,\n _id: localAttribute ? localAttribute._id : null,\n },\n };\n }, {});\n const imageAttributes = getImageAttributes(attributes).reduce(\n (acc, attribute) => ({\n ...acc,\n [attribute]: {\n value: entity[attribute],\n disabled: false,\n scope: 'default',\n _id: '',\n },\n }),\n {}\n );\n const relationshipAttributes = getAttributeListByScope(['relationship'], attributes).reduce(\n (acc, attributeName) => {\n const value = entity[attributeName] as AttributeValue | null;\n const _id = value?._id;\n const aggregateCount = (entity[`${attributeName}Aggregate`] as AttributeValue).count;\n\n return {\n ...acc,\n [attributeName]: {\n count: aggregateCount,\n _id,\n value,\n disabled: false,\n scope,\n },\n };\n },\n {}\n );\n\n return { ...globalAttributes, ...localAttributes, ...imageAttributes, ...relationshipAttributes };\n });\n\n return {\n count,\n results: mappedQueryResult,\n };\n}\n\n/**\n * Attribute values can be an object or an array of objects if the attribute is a multi-select.\n */\nfunction getValueByScope(\n attribute: AttributeValue | AttributeValue[],\n scope: string\n): FormFieldValue[] | AttributeValue | string | null {\n if (Array.isArray(attribute)) {\n return attribute.reduce((result: FormFieldValue[], attr: AttributeValue) => {\n if (attr[scope] ?? attr.default) {\n const option = {\n _id: attr._id,\n disabled: Boolean(attr.scope === null && scope !== 'default'),\n scope,\n value: attr[scope] ?? attr.default,\n };\n\n result.push(option);\n }\n\n return result;\n }, []);\n }\n\n return attribute[scope] ?? attribute.default ?? null;\n}\n\n/**\n * Returns a string with the GraphQl query needed to mutate the dataToMutate object for the given entity and scope.\n */\nexport function getEntityUpdateMutation(\n entityNamePlural: string,\n entityId: string,\n scope: string,\n schema: Schema,\n originalData: FormEntityItem,\n dataToMutate: EntityData\n): string {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const entityName = entitySchema?.name ?? entityNamePlural;\n const attributes = entitySchema?.attributes ?? [];\n const pluralizedEntityName = capitalize(entityNamePlural);\n\n if (attributes.length === 0) {\n return '';\n }\n\n const data = filterOutInvalidAttributes(attributes, dataToMutate);\n const globalAttributes = globalAttributesUpdate(attributes, data);\n const localAttributes = localAttributesUpdate(entityId, attributes, data, scope);\n const imageAttributes = imageAttributesUpdate(entityId, attributes, data);\n const relationshipAttributes = relationshipAttributesUpdate(attributes, originalData, data);\n const responseType = entityNamePlural;\n const attributeNamesList = formatResponseFieldsForMutation(schema, entityNamePlural, scope);\n\n return (\n `mutation updateEntity($where: ${entityName}Where) {\\n` +\n ` update${pluralizedEntityName}(\\n` +\n ` where: $where\\n` +\n ` update: {${globalAttributes}${localAttributes}${imageAttributes}${relationshipAttributes}\\n }\\n` +\n ` ) {\\n` +\n ` ${responseType} {\\n` +\n ` _id\\n` +\n ` ${attributeNamesList}` +\n ` }\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\n/**\n * Filter out any attribute received from the form that does not exist in the schema.\n */\nfunction filterOutInvalidAttributes(attributes: Attribute[], dataToMutate: EntityData): FormEntityItem {\n const nonUpdatableAttributes: readonly string[] = attributes\n .map((attribute) => {\n if (attribute.isEditable === false) {\n return attribute.name;\n }\n\n return '';\n })\n .filter(Boolean);\n const data = omit(nonUpdatableAttributes, dataToMutate);\n\n return pick(\n attributes.map((attribute) => attribute.name) as unknown as readonly [number, ...number[]],\n data\n ) as unknown as FormEntityItem;\n}\n\n/**\n * Filter attributes by scope: local, global or relationship.\n */\nfunction getAttributeListByScope(type: ScopeType | ScopeType[], attributes: Attribute[]): Attribute['name'][] {\n if (Array.isArray(type)) {\n return type.reduce((acc: Attribute['name'][], attributeType: ScopeType) => {\n return acc.concat(getAttributeListByScope(attributeType, attributes));\n }, []);\n }\n\n const filteredAttributes = attributes.filter(\n (attribute) => attribute.scope === type && attribute.inputType !== 'asset'\n );\n\n return filteredAttributes.map((attribute) => attribute.name);\n}\n\n/**\n * Get all attributes that are of type image.\n */\nfunction getImageAttributes(attributes: Attribute[]): Attribute['name'][] {\n const filteredAttributes = filter(propEq('asset', 'dataType'))(attributes);\n\n return filteredAttributes.map((attribute) => attribute.name);\n}\n\nfunction globalAttributesUpdate(schemaAttributes: Attribute[], data: FormEntityItem): string {\n const globalAttributes = pick(getAttributeListByScope('global', schemaAttributes) as [string], data);\n const attributesString = toPairs(globalAttributes).reduce((acc, [attributeName, value]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const typedValue = stringifyValue(attributeSchema.dataType, value?.value ?? null);\n\n return `${acc}\\n ${attributeName}: ${typedValue}`;\n }, '');\n\n return attributesString;\n}\n\nfunction imageAttributesUpdate(entityId: string, schemaAttributes: Attribute[], data: FormEntityItem): string {\n const imageAttributes = pick(getImageAttributes(schemaAttributes) as [string], data);\n const attributesArray: [string, FormFieldValue][] = toPairs(imageAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const imageValue = attributeValue.value as ImageValue | null;\n const imagePath = imageValue?.path ? `\"${imageValue.path}\"` : 'null';\n const imageSize = imageValue?.size ? imageValue.size : 'null';\n const imageMimeType = imageValue?.mimeType ? `\"${imageValue.mimeType}\"` : 'null';\n const originalFilename = imageValue?.originalFilename ? `\"${imageValue.originalFilename}\"` : 'null';\n const height = imageValue?.height ? imageValue.height : 'null';\n const width = imageValue?.width ? imageValue.width : 'null';\n const lqip = imageValue?.lqip ? `\"${imageValue.lqip}\"` : 'null';\n\n if (!imagePath) {\n return acc;\n }\n\n if ((attributeValue.value as ImageValue)?._id) {\n return (\n `${acc}\\n ${attributeName}: {\\n` +\n ` update: {\\n` +\n ` node: {\\n` +\n ` mimeType: ${imageMimeType}\\n` +\n ` originalFilename: ${originalFilename}\\n` +\n ` path: ${imagePath}\\n` +\n ` size: ${imageSize}\\n` +\n ` height: ${height}\\n` +\n ` width: ${width}\\n` +\n ` lqip: ${lqip}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }\n\n return (\n `${acc}\\n ${attributeName}: {\\n` +\n ` create: {\\n` +\n ` node: {\\n` +\n ` _id: \"${entityId}:${attributeName}\"\\n` +\n ` mimeType: ${imageMimeType}\\n` +\n ` originalFilename: ${originalFilename}\\n` +\n ` path: ${imagePath}\\n` +\n ` size: ${imageSize}\\n` +\n ` height: ${height}\\n` +\n ` width: ${width}\\n` +\n ` lqip: ${lqip}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nfunction localAttributesUpdate(\n entityId: string,\n schemaAttributes: Attribute[],\n data: FormEntityItem,\n scope: string\n): string {\n const localAttributes = pick(getAttributeListByScope('local', schemaAttributes) as [string], data);\n const attributesArray: [string, FormFieldValue][] = toPairs(localAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const { dataType } = attributeSchema;\n const typedValue =\n attributeValue.disabled || Array.isArray(attributeValue.value)\n ? 'null'\n : stringifyValue(dataType, attributeValue.value);\n\n if (attributeValue._id) {\n return `${acc}\\n ${attributeName}: {\\n update: {\\n node: {\\n ${scope}: ${typedValue}\\n }\\n }\\n }`;\n }\n\n if (!typedValue) {\n return acc;\n }\n\n return (\n `${acc}\\n ${attributeName}: {\\n` +\n ` create: {\\n` +\n ` node: {\\n` +\n ` _id: \"${entityId}:${attributeName}\"\\n` +\n ` _type: \"${dataType}\"\\n` +\n ` ${scope}: ${typedValue}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nfunction relationshipAttributesUpdate(\n schemaAttributes: Attribute[],\n originalData: FormEntityItem,\n data: FormEntityItem\n): string {\n const relationshipAttributes = pick(getAttributeListByScope('relationship', schemaAttributes) as [string], data);\n const attributesArray = toPairs(relationshipAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const { inputType, relationship } = attributeSchema;\n\n if (inputType === 'relationship' && relationship?.mode === 'single') {\n const disconnect = `disconnect: {\\n where: {\\n node: {\\n _id: \"${\n originalData[attributeName]._id ?? ''\n }\"\\n }\\n }\\n }\\n`;\n const connect = `connect: {\\n where: {\\n node: {\\n _id: \"${\n attributeValue._id ?? ''\n }\"\\n }\\n }\\n }\\n`;\n\n return `${acc}\\n ${attributeName}: {\\n ${connect} ${disconnect} }`;\n }\n\n if (inputType === 'relationship' && relationship?.mode === 'multiple') {\n const nodesToDisconnect: string | undefined = attributeValue.relationships?.disconnect?.reduce(\n (disconnectString: string, _id: string) => {\n return `${disconnectString} {\\n node: {\\n _id: \"${_id}\"\\n }\\n }\\n`;\n },\n ''\n );\n const connections = (attributeValue.relationships?.connect as MultipleRelationshipConnection | null) ?? [];\n const nodesToConnect: string | undefined = connections.reduce((connectString: string, node) => {\n return `${connectString} {\\n _id: \"${node._id}\"\\n }\\n`;\n }, '');\n const disconnect = nodesToDisconnect\n ? `disconnect: {\\n where: {\\n OR: [\\n${nodesToDisconnect} ]\\n }\\n }\\n`\n : '';\n const connect = nodesToConnect\n ? `connect: {\\n where: {\\n node: {\\n OR: [\\n${nodesToConnect} ]\\n }\\n }\\n }\\n`\n : '';\n\n return `${acc}\\n ${attributeName}: {\\n ${disconnect} ${connect} }`;\n }\n\n return `${acc}\\n`;\n }, '');\n\n return attributesString;\n}\n\nfunction stringifyValue(\n type: DataType,\n value: string | MappedEntityItem | EntityItem | AttributeValue | ImageValue | null | undefined\n): string | null {\n if (temporalTypes.includes(type)) {\n return value?.toString().replace(/\"/g, '\\\\\"') ? `\"${value?.toString().replace(/\"/g, '\\\\\"')}\"` : null;\n }\n\n return stringTypes.includes(type)\n ? `\"${value?.toString().replace(/\"/g, '\\\\\"') ?? 'null'}\"`\n : (value?.toString() ?? null);\n}\n\nfunction formatResponseFieldsForMutation(schema: Schema, entityNamePlural: string, scope: string): string {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const schemaAttributes = entitySchema?.attributes ?? [];\n const globalAttributesArray = getAttributeListByScope('global', schemaAttributes);\n const localAttributesArray = getAttributeListByScope('local', schemaAttributes);\n const relationshipAttributesArray = getAttributeListByScope('relationship', schemaAttributes);\n\n let fields = globalAttributesArray.reduce((acc, attributeName: string) => {\n return `${acc}${attributeName}\\n `;\n }, '');\n\n fields += localAttributesArray.reduce((acc, attributeName: string) => {\n return `${acc} ${attributeName} {\\n _id\\n ${scope}\\n }\\n `;\n }, '');\n\n fields += relationshipAttributesArray.reduce((acc, attributeName: string) => {\n const relationshipAttribute = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute | undefined;\n const relationshipMode = relationshipAttribute?.relationship?.mode ?? 'single';\n const relationshipEntityName = relationshipAttribute?.relationship?.entity ?? '';\n const relationshipEntitySchema = find(propEq(relationshipEntityName, 'name'))(schema) as Entity | undefined;\n const relationshipEntityAttributes = relationshipEntitySchema?.attributes ?? [];\n const primaryAttributeName =\n relationshipAttribute?.relationship?.field ?? '[invalid_relationship_field_name_in_schema]';\n const primaryAttribute = find(propEq(primaryAttributeName, 'name'))(relationshipEntityAttributes) as Attribute;\n const primaryAttributeScope = primaryAttribute.scope;\n let list = '';\n\n if (relationshipMode === 'single') {\n if (primaryAttributeScope === 'global') {\n list = ` ${attributeName} {\\n _id\\n ${primaryAttributeName}\\n }\\n `;\n }\n\n if (primaryAttributeScope === 'local') {\n list = ` ${attributeName} {\\n _id\\n ${primaryAttributeName} {\\n _id\\n default\\n ${scope}\\n }\\n }\\n `;\n }\n }\n\n if (relationshipMode === 'multiple' && relationshipEntityAttributes.length) {\n const multipleRelationshipAttributes = relationshipEntityAttributes.reduce((str, attribute) => {\n if (attribute.scope === 'local') {\n return `${str} ${attribute.name} {\\n _id\\n default\\n ${scope}\\n }\\n`;\n }\n\n if (attribute.scope === 'relationship') {\n const additionalScope = scope === 'default' ? '' : `${scope}\\n `;\n const relationshipEntity = find(propEq(attribute.relationship?.entity, 'name'))(schema) as Entity | undefined;\n const relationshipAttribute = find(propEq(attribute.relationship?.field, 'name'))(\n relationshipEntity?.attributes ?? []\n ) as Attribute;\n const localAttributeQuery =\n relationshipAttribute.scope === 'local'\n ? `{\\n _id\\n default\\n ${additionalScope}}\\n `\n : '';\n\n if (attribute.relationship?.mode === 'single') {\n return `${str} ${attribute.name} {\\n ${attribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n\n if (attribute.relationship?.field) {\n return `${str} ${attribute.name} (options: {limit: 25, offset: 0}) {\\n ${attribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n }\n\n if (attribute.inputType === 'asset') {\n return `${str} ${attribute.name} {\\n _id\\n originalFilename\\n mimeType\\n path\\n size\\n height\\n width\\n lqip\\n }\\n`;\n }\n\n return `${str} ${attribute.name}\\n `;\n }, '');\n\n list =\n ` ${attributeName}Aggregate {\\n` +\n ` count\\n` +\n ` }\\n` +\n ` ${attributeName} (options: {limit: 25, offset: 0}) {\\n${multipleRelationshipAttributes}` +\n ` }\\n`;\n }\n\n return `${acc}${list}`;\n }, '');\n\n return fields;\n}\n\n/**\n * Returns a string with the GraphQl mutation needed to delete an entity.\n */\nexport function getEntityDeleteMutation(entityName: string, schema: Schema, _id: string): string {\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const attributes = entitySchema?.attributes ?? [];\n const pluralizedEntityName = capitalize(entitySchema?.plural ?? '');\n const localAttributes = localAttributesDelete(attributes, _id);\n\n if (entityName === '_asset') {\n return (\n `mutation deleteEntity($where: ${entityName}Where) {\\n` +\n ` delete_assets(\\n` +\n ` where: $where\\n` +\n ` ) {\\n` +\n ` nodesDeleted\\n` +\n ` relationshipsDeleted\\n` +\n ` }\\n` +\n `}\\n`\n );\n }\n\n return (\n `mutation deleteEntity($where: ${entityName}Where) {\\n` +\n ` delete${pluralizedEntityName}(\\n` +\n ` where: $where\\n` +\n `${localAttributes ? ` delete: {\\n ${localAttributes}\\n }\\n` : ''}` +\n ` ) {\\n` +\n ` nodesDeleted\\n` +\n ` relationshipsDeleted\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\nfunction localAttributesDelete(schemaAttributes: Attribute[], _id: string): string {\n const localAttributes = getAttributeListByScope('local', schemaAttributes);\n const attributesString: string = localAttributes.reduce((acc, attributeName) => {\n return (\n `${acc}\\n` +\n ` ${attributeName}: {\\n` +\n ` where: {\\n` +\n ` node: {\\n` +\n ` _id: \"${_id}:${attributeName}\"\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nexport function getEntityCreateMutation(\n entityNamePlural: string,\n schema: Schema,\n entityData: EntityData,\n _id: string\n): string {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const attributes = entitySchema?.attributes ?? [];\n const pluralizedEntityName = capitalize(entitySchema?.plural ?? '');\n\n if (attributes.length === 0) {\n return '';\n }\n\n const data = filterOutInvalidAttributes(attributes, entityData);\n const globalAttributes = globalAttributesUpdate(attributes, data);\n const localAttributes = localAttributesCreate(attributes, data, 'default', _id);\n const relationshipAttributes = relationshipAttributesCreate(attributes, data);\n const responseType = entityNamePlural;\n const attributeNamesList = formatResponseFieldsForMutation(schema, responseType, 'default');\n\n return (\n `mutation {\\n` +\n ` create${pluralizedEntityName}(\\n` +\n ` input: [{\\n` +\n ` _id: \"${_id}\"` +\n ` ${globalAttributes}` +\n ` ${localAttributes}\\n` +\n ` ${relationshipAttributes}\\n` +\n ` }]\\n` +\n ` ) {\\n` +\n ` ${responseType} {\\n` +\n ` ${attributeNamesList}` +\n ` }\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\nfunction localAttributesCreate(\n schemaAttributes: Attribute[],\n data: FormEntityItem,\n defaultScope: string,\n _id: string\n): string {\n const localAttributes = pick(getAttributeListByScope('local', schemaAttributes) as [string], data);\n const attributesArray = toPairs(localAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n if (!attributeValue?.value) {\n return acc;\n }\n\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const typedValue = Array.isArray(attributeValue.value)\n ? 'null'\n : stringifyValue(attributeSchema.dataType, attributeValue.value);\n\n return (\n `${acc}\\n` +\n ` ${attributeName}: {\\n` +\n ` create: {\\n` +\n ` node: {\\n` +\n ` _id: \"${_id}:${attributeName}\"\\n` +\n ` _type: \"${attributeSchema.dataType}\"\\n` +\n ` ${defaultScope}: ${typedValue}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nfunction relationshipAttributesCreate(schemaAttributes: Attribute[], data: FormEntityItem): string {\n const relationshipAttributes = pick(getAttributeListByScope('relationship', schemaAttributes) as [string], data);\n const attributesArray = toPairs(relationshipAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const { inputType, relationship } = attributeSchema;\n\n if (inputType === 'relationship' && relationship?.mode === 'single') {\n const connect = `connect: {\\n where: {\\n node: {\\n _id: \"${\n attributeValue._id ?? ''\n }\"\\n }\\n }\\n }\\n`;\n\n return `${acc}\\n ${attributeName}: {\\n ${connect} }`;\n }\n\n const isMultipleRelationship = inputType === 'relationship' && relationship?.mode === 'multiple';\n const hasRelationships =\n Array.isArray(attributeValue.relationships?.connect) && attributeValue.relationships.connect.length > 0;\n if (isMultipleRelationship && hasRelationships) {\n const connections = (attributeValue.relationships?.connect as MultipleRelationshipConnection | null) ?? [];\n const nodesToConnect: string | undefined = connections.reduce((connectString: string, node) => {\n return `${connectString} {\\n _id: \"${node._id}\"\\n }\\n`;\n }, '');\n const connect = nodesToConnect\n ? `connect: {\\n where: {\\n node: {\\n OR: [\\n${nodesToConnect} ]\\n }\\n }\\n }\\n`\n : '';\n\n return `${acc}\\n ${attributeName}: {\\n ${connect} }`;\n }\n\n return `${acc}\\n`;\n }, '');\n\n return attributesString;\n}\n\n/**\n * Find the attribute of an entity with isPrimary === true.\n * if none is found, return the first attribute.\n */\nfunction getPrimaryAttribute(schemaAttributes: Attribute[]): Attribute {\n return schemaAttributes.find((attr) => attr.isPrimary) ?? schemaAttributes[0];\n}\n\nexport function getRelatedItemsQuery({\n attributeName,\n relatedEntityName,\n scope,\n schema,\n}: {\n attributeName: string;\n relatedEntityName: string;\n scope: string;\n schema: Schema;\n}): EntityQuery {\n const filters = `(where: $where, options: $options)`;\n const entitySchema = find(propEq(relatedEntityName, 'name'))(schema) as Entity | undefined;\n const attributes = entitySchema?.attributes ?? [];\n const heading = `$where: ${relatedEntityName}Where, $options: ${relatedEntityName}Options`;\n const queryEntityName = entitySchema?.plural ?? '';\n\n if (attributes.length === 0) {\n return {\n queryEntityName: '',\n query: '',\n };\n }\n\n const globalAttributesList: string = getAttributeListByScope('global', attributes).join('\\n ');\n const localAttributes: readonly string[] = getAttributeListByScope(['local'], attributes);\n const defaultScopedAttr = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n }\\n `,\n ''\n );\n const scopedAttribute = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n ${scope}\\n }\\n `,\n ''\n );\n const localAttributesList: string = scope === 'default' ? defaultScopedAttr : scopedAttribute;\n\n const relationshipAttributes = filter(propEq('relationship', 'scope'))(attributes);\n const relationshipAttributesList: string = relationshipAttributes.reduce((acc, attribute) => {\n const relatedEntity = find(propEq(attribute.relationship?.entity, 'name'))(schema) as Entity | undefined;\n const attributesNameList = relatedEntity?.attributes.reduce((relatedAcc, relatedAttribute) => {\n const additionalScope = scope === 'default' ? '' : `${scope}\\n `;\n\n if (relatedAttribute.scope === 'local') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n _id\\n default\\n ${additionalScope}}\\n `;\n }\n\n if (relatedAttribute.scope === 'relationship') {\n const relationshipEntity = find(propEq(relatedAttribute.relationship?.entity, 'name'))(schema) as\n | Entity\n | undefined;\n const relationshipAttribute = find(propEq(relatedAttribute.relationship?.field, 'name'))(\n relationshipEntity?.attributes ?? []\n ) as Attribute;\n const localAttributeQuery =\n relationshipAttribute.scope === 'local'\n ? `{\\n _id\\n default\\n ${additionalScope}}\\n `\n : '';\n\n if (relatedAttribute.relationship?.mode === 'single') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n\n if (relatedAttribute.relationship?.field) {\n return `${relatedAcc}\\n ${relatedAttribute.name} (options: {limit: 25, offset: 0}) {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n }\n\n return `${relatedAcc}\\n ${relatedAttribute.name}\\n `;\n }, '');\n\n return `${acc}\\n ${attribute.name} (options: {limit: 25, offset: 0}) { _id ${attributesNameList ?? ''}}\\n`;\n }, '');\n\n return {\n queryEntityName,\n query:\n `query getEntity(${heading}) {\\n` +\n ` ${attributeName}Aggregate(where: $where) {\\n` +\n ` count\\n` +\n ` }\\n` +\n ` ${queryEntityName}${filters} {\\n` +\n ` _id\\n` +\n ` ${globalAttributesList}` +\n ` ${localAttributesList}` +\n ` ${relationshipAttributesList}` +\n ` }\\n` +\n `}\\n`,\n };\n}\n\nexport function getAssetCreateMutation(entityData: EntityData): string {\n const attributes = assetSchema.attributes;\n const pluralizedEntityName = capitalize(assetSchema.plural);\n const _id = uuidv4();\n const data = filterOutInvalidAttributes(attributes, entityData);\n const globalAttributes = globalAttributesUpdate(attributes, data);\n const responseType = assetSchema.plural;\n const attributeNamesList = formatResponseFieldsForMutation([assetSchema, tagSchema], responseType, 'default');\n\n return (\n `mutation {\\n` +\n ` create${pluralizedEntityName}(\\n` +\n ` input: [{\\n` +\n ` _id: \"${_id}\"` +\n ` ${globalAttributes}` +\n ` }]\\n` +\n ` ) {\\n` +\n ` ${responseType} {\\n` +\n ` ${attributeNamesList}` +\n ` }\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\nconst capitalize = (str: string): string => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nexport function getEntitySchema(schema: Schema, entityNamePlural: string): Entity | undefined {\n if (entityNamePlural === '_assets') {\n return assetSchema;\n }\n\n return find(propEq(entityNamePlural, 'plural'))(schema) as Entity | undefined;\n}\n","import { useEffect, useState } from 'react';\nimport type { Dispatch, SetStateAction } from 'react';\nimport { gql } from '@apollo/client';\nimport type { DocumentNode, ErrorLike } from '@apollo/client';\nimport { useApolloClient, useMutation } from '@apollo/client/react';\nimport type { MutationHookOptions } from '@apollo/client/react';\nimport { getAssetCreateMutation } from './queries';\nimport type { FormEntityItem, EntityData } from './types';\nimport { getServerError, parseErrorBody } from './error-utils';\n\nexport function useCreateAssetMutation(): (entityData: FormEntityItem) => Promise<void> {\n const apolloClient = useApolloClient();\n\n return async (entityData: FormEntityItem): Promise<void> => {\n const mutation = getAssetCreateMutation(entityData as unknown as EntityData);\n\n await apolloClient.mutate({\n mutation: gql`\n ${mutation}\n `,\n });\n };\n}\n\ntype EntityMutationResponse = [\n Dispatch<SetStateAction<boolean>>,\n Dispatch<SetStateAction<DocumentNode>>,\n Dispatch<SetStateAction<object>>,\n {\n data: unknown;\n loading: boolean;\n error: ErrorLike | undefined;\n isProjectDisabled: boolean;\n isProjectReadOnly: boolean;\n },\n];\n\nexport function useEntityMutation(): EntityMutationResponse {\n const [runMutation, setRunMutation] = useState(false);\n const [mutation, setMutation] = useState(gql`\n mutation updateEntity($any: Any) {\n any\n }\n `);\n const [options, setOptions] = useState<MutationHookOptions>({});\n const [mutateFunction, { data, loading, error }] = useMutation(mutation, options);\n\n // Parse 403 error response to determine the specific error code\n const serverError = getServerError(error);\n\n const { isProjectDisabled, isProjectReadOnly } = (() => {\n if (serverError?.statusCode === 403) {\n const responseBody = parseErrorBody<{ code?: string }>(serverError.bodyText);\n\n if (responseBody && typeof responseBody.code === 'string') {\n if (responseBody.code === 'PROJECT_PAUSED') {\n return {\n isProjectDisabled: true,\n isProjectReadOnly: false,\n };\n }\n\n if (responseBody.code === 'READ_ONLY_MODE') {\n return {\n isProjectDisabled: false,\n isProjectReadOnly: true,\n };\n }\n }\n\n return {\n isProjectDisabled: true,\n isProjectReadOnly: false,\n };\n }\n\n return {\n isProjectDisabled: false,\n isProjectReadOnly: false,\n };\n })();\n\n useEffect(() => {\n if (runMutation) {\n void mutateFunction();\n setRunMutation(false);\n }\n }, [runMutation, mutateFunction]);\n\n return [setRunMutation, setMutation, setOptions, { data, loading, error, isProjectDisabled, isProjectReadOnly }];\n}\n","'use client';\n\nimport { find, propEq } from 'ramda';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityDeleteMutation } from '../graphql-client/queries';\nimport AlertDialog from '../ui/components/alert-dialog';\nimport { useConfig } from '../core/config/config-context';\nimport type { SingleProject } from '../core/config/types';\nimport type { ActionDeleteEntity } from './types';\n\ntype Props = {\n action: ActionDeleteEntity;\n};\n\nexport default function Delete({ action }: Props): JSX.Element {\n const { projects, currentProjectId } = useConfig();\n const { schema } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const [runMutation, setMutation, setOptions] = useEntityMutation();\n const entityName = action.payload.entityName === '_asset' ? 'asset' : action.payload.entityName.toLowerCase();\n\n if (action.payload.silent) {\n // fire immediately without confirmation\n setTimeout(() => {\n void handleDeletion();\n }, 0);\n\n return <></>;\n }\n\n const dialogOptions = {\n dialogTitle: `Delete ${entityName}`,\n dialogMessage: `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 _id = action.payload.entityId;\n const mutation = getEntityDeleteMutation(action.payload.entityName, schema, _id);\n\n return new Promise<void>((resolve) => {\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n variables: { where: { _id } },\n update(cache: { evict: (arg0: { id: string }) => void }) {\n cache.evict({ id: _id });\n },\n onCompleted: () => {\n toast.success('Item successfully deleted.');\n resolve();\n },\n });\n runMutation(true);\n });\n }\n\n return <AlertDialog options={dialogOptions} />;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Drawer as DrawerPrimitive } from 'vaul';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction Drawer({\n shouldScaleBackground = true,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>): JSX.Element {\n return <DrawerPrimitive.Root direction=\"right\" shouldScaleBackground={shouldScaleBackground} {...props} />;\n}\n\nDrawer.displayName = 'Drawer';\n\nconst DrawerTrigger = DrawerPrimitive.Trigger;\n\nconst DrawerPortal = DrawerPrimitive.Portal;\n\nconst DrawerClose = DrawerPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <div // DrawerPrimitive.Overlay replaced here with a div to fix issue with RemoveScroll used in DrawerPrimitive.Overlay\n className={cn('fk-fixed fk-inset-0 fk-z-50 fk-bg-overlay/75 fk-backdrop-blur-[1px]', className)}\n ref={ref}\n {...props}\n />\n));\nDrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n className={cn(\n 'fk-fixed fk-w-full fk-max-w-[clamp(40vw,95vw,60rem)] fk-right-0 fk-bottom-0 fk-z-50 fk-flex fk-h-full fk-flex-col !fk-transition-all fk-duration-500 fk-rounded-l-[20px] fk-border fk-border-border fk-bg-background',\n className\n )}\n ref={ref}\n {...props}\n >\n <div className=\"fk-flex fk-w-full fk-h-full fk-pr-4\">\n <div className=\"fk-my-auto fk-ml-2 fk-h-[100px] fk-w-2 fk-min-w-2 fk-rounded-full fk-bg-muted\" />\n <div className=\"fk-flex fk-flex-col fk-w-full fk-max-w-[calc(100%-1rem)] fk-pb-12\">{children}</div>\n </div>\n </DrawerPrimitive.Content>\n </DrawerPortal>\n));\nDrawerContent.displayName = 'DrawerContent';\n\nfunction DrawerHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): JSX.Element {\n return <div className={cn('fk-flex fk-gap-2.5 fk-p-4 fk-text-center sm:fk-text-left', className)} {...props} />;\n}\n\nDrawerHeader.displayName = 'DrawerHeader';\n\nfunction DrawerFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): JSX.Element {\n return <div className={cn('fk-mt-auto fk-flex fk-flex-col fk-gap-2 fk-p-4', className)} {...props} />;\n}\n\nDrawerFooter.displayName = 'DrawerFooter';\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n className={cn('fk-flex fk-items-center fk-text-lg fk-font-semibold fk-leading-none fk-tracking-tight', className)}\n ref={ref}\n {...props}\n />\n));\nDrawerTitle.displayName = DrawerPrimitive.Title.displayName;\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description className={cn('fk-text-sm fk-text-muted-foreground', className)} ref={ref} {...props} />\n));\nDrawerDescription.displayName = DrawerPrimitive.Description.displayName;\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\nimport type { Dispatch, ReactNode, SetStateAction } from 'react';\nimport { X as CloseIcon } from 'lucide-react';\nimport { Button } from '../primitives/button';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from '../primitives/drawer';\nimport { Separator } from '../primitives/separator';\nimport { Skeleton } from '../primitives/skeleton';\n\ntype Props = {\n actions: ReactNode;\n beforeClose?: () => boolean;\n children: ReactNode;\n depth: number; // how many drawers are open, to control the width of the drawers\n isFocused: boolean; // whether the drawer is the last one open\n onFormChange?: Dispatch<SetStateAction<boolean>>; // a callback executed everyt time the form changes its state\n onClose: () => void;\n title: string;\n};\n\nexport default function DrawerModal({\n actions,\n beforeClose,\n children,\n depth,\n isFocused,\n onFormChange,\n onClose,\n title,\n}: Props): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const gutter = depth * (50 / depth);\n\n const handleClose = useCallback(() => {\n const shouldClose = beforeClose ? beforeClose() : true;\n\n if (!shouldClose) return;\n\n setIsOpen(false);\n setTimeout(() => {\n onClose();\n }, 150);\n }, [beforeClose, onClose, setIsOpen]);\n\n const onEscapeKeyPressed = useCallback(\n (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && isFocused) {\n handleClose();\n }\n },\n [handleClose, isFocused]\n );\n\n useEffect(() => {\n setIsOpen(true);\n // overwrite \"background: black\" set by Vaul in the body, and add missing bottom: 0 style\n globalThis.document.body.classList.add('fk-drawer-fix');\n }, []);\n\n useEffect(() => {\n globalThis.document.addEventListener('keydown', onEscapeKeyPressed, false);\n\n return () => {\n globalThis.document.removeEventListener('keydown', onEscapeKeyPressed, false);\n };\n }, [onEscapeKeyPressed]);\n\n return (\n <Drawer\n dismissible={false}\n onClose={() => {\n handleClose();\n }}\n open={isOpen}\n >\n <DrawerContent style={isFocused ? {} : { maxWidth: `calc(100% - ${gutter.toString()}px)` }}>\n <DrawerHeader>\n <DrawerTitle className=\"fk-w-full\">\n {title ? title : <Skeleton className=\"fk-h-5 fk-w-[120px]\" />}\n </DrawerTitle>\n <DrawerDescription className=\"fk-sr-only\">{title ? title : 'Loading form'}</DrawerDescription>\n {actions}\n <Button className=\"\" onClick={handleClose} size=\"icon\" variant=\"ghost\">\n <CloseIcon className=\"fk-h-4 fk-w-4\" />\n <span className=\"fk-sr-only\">Close</span>\n </Button>\n </DrawerHeader>\n <Separator />\n <div className=\"fk-px-4 fk-pt-6 fk-h-full fk-min-h-full fk-overflow-y-auto fk-pb-16\" data-vaul-no-drag>\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n );\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","'use client';\n\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\n\nconst Collapsible = CollapsiblePrimitive.Root;\n\nconst { CollapsibleTrigger } = CollapsiblePrimitive;\n\nconst { CollapsibleContent } = CollapsiblePrimitive;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\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 { useId, useRef, useState } from 'react';\nimport type { ComponentType } from 'react';\nimport type { 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 { apiPaths, IMAGES_BASE_URL } from '../../core/api-paths';\nimport { useOuterClick } from '../../ui/hooks/use-outer-click';\nimport type { FormFieldParams } from '../types';\n\n// Temporary fix due to runtime mismatch between React 18 and React 19 types\ntype FileTypeIconCompatProps = {\n extension: string;\n [key: string]: string | number | boolean | undefined;\n};\n\nconst FileTypeIconCompat = FileTypeIcon as unknown as ComponentType<FileTypeIconCompatProps>;\n\nexport function Uploader({ control, fieldSchema, getValues, setValue }: FormFieldParams<'asset'>): JSX.Element {\n const { name, label, isEditable, options } = fieldSchema;\n const { projectId } = useParams();\n const [isOpen, setIsOpen] = useState(false);\n const inputFile = useRef<HTMLInputElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(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 useOuterClick(wrapperRef, setIsOpen, '[data-radix-popper-content-wrapper]');\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[1];\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 (!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 if (isImage) {\n const reader = new FileReader();\n\n reader.onload = (e) => {\n const img = new Image();\n\n setBase64PreviewImage(e.target?.result as string);\n\n img.onload = function () {\n setValue(name, {\n ...(getValues(name)?.value as ImageValue),\n value: {\n ...(getValues(name)?.value as ImageValue),\n width: img.width,\n height: img.height,\n },\n });\n };\n\n img.src = reader.result as string;\n };\n\n reader.readAsDataURL(file);\n } else {\n setBase64PreviewImage(null);\n }\n\n setSaving(true);\n\n try {\n const response = await fetch(apiPaths(projectId).upload, {\n method: 'POST',\n headers: { 'Content-Type': file?.type || 'application/octet-stream' },\n body: file,\n });\n\n const data = await response.json();\n\n setValue(name, {\n ...(getValues(name)?.value as ImageValue),\n value: {\n ...(getValues(name)?.value as ImageValue),\n path: data.pathname,\n originalFilename: file.name,\n size: file.size,\n mimeType: file.type,\n lqip: data.lqip,\n ...(isImage ? {} : { width: undefined, height: undefined }),\n },\n });\n } catch (error) {\n console.error(error);\n setBase64PreviewImage(null);\n setValue(name, {\n ...(getValues(name)?.value as ImageValue),\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 event.stopPropagation();\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 inputFile.current?.click();\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 focus-visible:fk-outline-none fk-ring-offset-background focus-visible:fk-ring-2 focus-visible:fk-ring-ring focus-visible:fk-ring-offset-2 ${\n isOpen ? 'fk-outline-none 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'}`}\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 e.preventDefault();\n e.stopPropagation();\n setDragActive(true);\n }}\n onDragEnter={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(true);\n }}\n onDragLeave={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\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 fk-text-muted-foreground\"\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 className=\"fk-ml-2 fk-h-7 fk-rounded fk-text-muted-foreground\" variant=\"ghost\">\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 fk-object-scale-down\"\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 fk-bg-transparent fk-flex fk-items-center fk-justify-center [&>svg]:fk-h-full [&>svg]:fk-w-auto\">\n <FileTypeIconCompat 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 fk-h-7 fk-w-7 rounded-md object-cover\"\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 fk-bg-muted fk-flex fk-items-center fk-justify-center\">\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>\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\"\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 onClick={handleUpload}>\n <UploadIcon className=\"fk-mr-2 fk-h-4 fk-w-4\" />\n <span>Upload</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <ImageIcon className=\"fk-mr-2 fk-h-4 fk-w-4\" />\n <span>Select file</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 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 fk-text-muted-foreground\"\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 fk-text-muted-foreground\"\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\"\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\">\n <div className=\"fk-w-16 fk-h-16 fk-rounded fk-bg-transparent fk-flex fk-items-center fk-justify-center [&>svg]:fk-h-full [&>svg]:fk-w-auto\">\n <FileTypeIconCompat 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 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","import { useId } 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, setValue }: FormFieldParams<'number'>): JSX.Element {\n const { name, label, isEditable, 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.1875rem] ${\n !field.value?.scope || field.value.scope === 'default' ? 'fk-mb-3' : ''\n }`}\n disabled={isEditable === false || 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 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 * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { cn } from 'src/ui/lib/utils';\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'fk-z-50 fk-w-72 fk-rounded-md fk-border fk-border-border fk-bg-popover fk-p-4 fk-text-popover-foreground fk-shadow-md fk-outline-none data-[state=open]:fk-animate-in data-[state=closed]:fk-animate-out data-[state=closed]:fk-fade-out-0 data-[state=open]:fk-fade-in-0 data-[state=closed]:fk-zoom-out-95 data-[state=open]:fk-zoom-in-95 data-[side=bottom]:fk-slide-in-from-top-2 data-[side=left]:fk-slide-in-from-right-2 data-[side=right]:fk-slide-in-from-left-2 data-[side=top]:fk-slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent };\n","'use client';\n\nimport * as React from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { DayPicker } from 'react-day-picker';\nimport { cn } from '../lib/utils';\nimport { buttonVariants } from './button';\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({ className, classNames, showOutsideDays = true, ...props }: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn('fk-p-3', className)}\n classNames={{\n months: 'fk-flex fk-flex-col sm:fk-flex-row fk-space-y-4 sm:fk-space-x-4 sm:fk-space-y-0',\n month: 'fk-space-y-4',\n caption: 'fk-flex fk-justify-center fk-pt-1 fk-relative fk-items-center',\n caption_label: 'fk-text-sm fk-font-medium',\n nav: 'fk-space-x-1 fk-flex fk-items-center',\n nav_button: cn(\n buttonVariants({ variant: 'outline' }),\n 'fk-h-7 fk-w-7 fk-bg-transparent fk-p-0 fk-opacity-50 hover:fk-opacity-100'\n ),\n nav_button_previous: 'fk-absolute fk-left-1',\n nav_button_next: 'fk-absolute fk-right-1',\n table: 'fk-w-full fk-border-collapse fk-space-y-1',\n head_row: 'fk-flex',\n head_cell: 'fk-text-muted-foreground fk-rounded-md fk-w-9 fk-font-normal fk-text-[0.8rem]',\n row: 'fk-flex fk-w-full fk-mt-2',\n cell: 'fk-h-9 fk-w-9 fk-text-center fk-text-sm fk-p-0 fk-relative [&:has([aria-selected].day-range-end)]:fk-rounded-r-md [&:has([aria-selected].day-outside)]:fk-bg-accent/50 [&:has([aria-selected])]:fk-bg-accent first:[&:has([aria-selected])]:fk-rounded-l-md last:[&:has([aria-selected])]:fk-rounded-r-md focus-within:fk-relative focus-within:fk-z-20',\n day: cn(\n buttonVariants({ variant: 'ghost' }),\n 'fk-h-9 fk-w-9 fk-p-0 fk-font-normal aria-selected:fk-opacity-100'\n ),\n day_range_end: 'fk-day-range-end',\n day_selected:\n 'fk-bg-primary fk-text-primary-foreground hover:fk-bg-primary hover:fk-text-primary-foreground focus:fk-bg-primary focus:fk-text-primary-foreground',\n day_today: 'fk-bg-accent fk-text-accent-foreground',\n day_outside:\n 'fk-day-outside fk-text-muted-foreground fk-opacity-50 aria-selected:fk-bg-accent/50 aria-selected:fk-text-muted-foreground aria-selected:fk-opacity-30',\n day_disabled: 'fk-text-muted-foreground fk-opacity-50',\n day_range_middle: 'aria-selected:fk-bg-accent aria-selected:fk-text-accent-foreground',\n day_hidden: 'fk-invisible',\n ...classNames,\n }}\n components={{\n IconLeft: ({ ...props }) => <ChevronLeft className=\"fk-h-4 fk-w-4\" />,\n IconRight: ({ ...props }) => <ChevronRight className=\"fk-h-4 fk-w-4\" />,\n }}\n {...props}\n />\n );\n}\nCalendar.displayName = 'Calendar';\n\nexport { Calendar };\n","import { useId } from 'react';\nimport type { 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({ control, fieldSchema, getValues, setValue }: FormFieldParams<'datetime'>): JSX.Element {\n const { name, label, isEditable, 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 hover:fk-bg-transparent fk-relative',\n !field.value?.value && 'fk-text-muted-foreground',\n !field.value?.scope || field.value.scope === 'default' ? 'fk-mb-3' : ''\n )}\n disabled={isEditable === false || 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-flex-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 hover:fk-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 hover:fk-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 onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\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 { createSuggestionItems } from 'novel/extensions';\nimport { Command, renderItems } from 'novel/extensions';\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 editor.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 editor.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 editor.chain().focus().deleteRange(range).toggleNode('paragraph', 'paragraph').toggleBlockquote().run(),\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\" variant=\"ghost\">\n <span\n className=\"fk-rounded-sm fk-px-1\"\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 fk-border fk-p-1 fk-shadow-xl \"\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 hover:fk-bg-muted\"\n >\n <div className=\"fk-flex fk-items-center fk-gap-2\">\n <div className=\"fk-rounded-sm fk-border fk-px-2 fk-py-px fk-font-medium\" 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 hover:fk-bg-muted\"\n >\n <div className=\"fk-flex fk-items-center fk-gap-2\">\n <div\n className=\"fk-rounded-sm fk-border fk-px-2 fk-py-px fk-font-medium\"\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, PopoverTrigger } from '@radix-ui/react-popover';\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 modal={true} open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Button size=\"sm\" variant=\"ghost\" className=\"fk-gap-2 fk-rounded-none fk-border-none\">\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 </PopoverTrigger>\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-none\"\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-sm fk-p-1 fk-text-red-600 fk-transition-all hover:fk-bg-red-100 dark:hover:fk-bg-red-800\"\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>\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 { PopoverContent, PopoverTrigger } from '../../../../ui/primitives/popover';\nimport { Popover } from '@radix-ui/react-popover';\n\nexport type SelectorItem = {\n name: string;\n icon: LucideIcon;\n command: (editor: ReturnType<typeof useEditor>['editor']) => void;\n isActive: (editor: ReturnType<typeof useEditor>['editor']) => 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) => editor?.chain().focus().clearNodes().toggleHeading({ level: 1 }).run(),\n isActive: (editor) => editor != null && editor.isActive('heading', { level: 1 }),\n },\n {\n name: 'Heading 2',\n icon: Heading2,\n command: (editor) => editor?.chain().focus().clearNodes().toggleHeading({ level: 2 }).run(),\n isActive: (editor) => editor != null && editor.isActive('heading', { level: 2 }),\n },\n {\n name: 'Heading 3',\n icon: Heading3,\n command: (editor) => editor?.chain().focus().clearNodes().toggleHeading({ level: 3 }).run(),\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) => editor?.chain().focus().clearNodes().toggleBulletList().run(),\n isActive: (editor) => editor != null && editor.isActive('bulletList'),\n },\n {\n name: 'Numbered List',\n icon: ListOrdered,\n command: (editor) => editor?.chain().focus().clearNodes().toggleOrderedList().run(),\n isActive: (editor) => editor != null && editor.isActive('orderedList'),\n },\n {\n name: 'Quote',\n icon: TextQuote,\n command: (editor) => editor?.chain().focus().clearNodes().toggleBlockquote().run(),\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 modal={true} open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild className=\"fk-gap-2 fk-rounded-none fk-border-none hover:fk-bg-muted focus:fk-ring-0\">\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 </PopoverTrigger>\n <PopoverContent 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-sm fk-px-2 fk-py-1 fk-text-sm hover:fk-bg-muted\"\n >\n <div className=\"fk-flex fk-items-center fk-space-x-2\">\n <div className=\"fk-rounded-sm fk-border fk-p-1\">\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 </PopoverContent>\n </Popover>\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\"\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';\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) => editor?.chain().focus().toggleBold().run(),\n icon: BoldIcon,\n },\n {\n name: 'italic',\n isActive: (editor) => editor != null && editor.isActive('italic'),\n command: (editor) => editor?.chain().focus().toggleItalic().run(),\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) => editor?.chain().focus().toggleStrike().run(),\n icon: StrikethroughIcon,\n },\n {\n name: 'code',\n isActive: (editor) => editor != null && editor.isActive('code'),\n command: (editor) => editor?.chain().focus().toggleCode().run(),\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\" 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 [fk-animation-delay:-0.3s]\" />\n <div className=\"fk-h-1.5 fk-w-1.5 fk-animate-bounce fk-rounded-full fk-bg-pink-600 [fk-animation-delay:-0.15s]\" />\n <div className=\"fk-h-1.5 fk-w-1.5 fk-animate-bounce fk-rounded-full fk-bg-pink-600\" />\n </div>\n );\n};\n\nexport default CrazySpinner;\n","import { 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.selection;\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.selection;\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 { ArrowDownWideNarrow, CheckCheck, RefreshCcwDot, StepForward, WrapText } from 'lucide-react';\nimport { useEditor } from 'novel';\nimport { getPrevText } from 'novel/utils';\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 { useCompletion } from 'ai/react';\nimport { ArrowUp } from 'lucide-react';\nimport { useEditor } from 'novel';\nimport { addAIHighlight } from 'novel/extensions';\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 onResponse: (response) => {\n if (response.status === 429) {\n toast.error('You have reached your request limit for the day.');\n\n return;\n }\n },\n onError: (e) => {\n toast.error(e.message);\n },\n });\n\n const hasCompletion = completion.length > 0;\n\n if (!editor) return null;\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 hover:fk-bg-pink-800\"\n onClick={() => {\n if (completion)\n return complete(completion, {\n body: { option: 'zap', command: inputValue },\n }).then(() => setInputValue(''));\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 { EditorBubble, useEditor } from 'novel';\nimport { removeAIHighlight } from 'novel/extensions';\nimport {} from 'novel/plugins';\nimport { Fragment, type ReactNode, useEffect } from 'react';\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 }, [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\"\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\"\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 } from 'react';\nimport {\n EditorCommand,\n EditorCommandEmpty,\n EditorCommandItem,\n EditorCommandList,\n EditorContent,\n EditorRoot,\n type EditorInstance,\n type JSONContent,\n} from 'novel';\nimport { ImageResizer, handleCommandNavigation } from 'novel/extensions';\nimport { handleImageDrop, handleImagePaste } from 'novel/plugins';\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];\n\nexport default function Editor({\n control,\n defaultValue,\n fieldSchema,\n setValue,\n}: FormFieldParams<'editor'>): JSX.Element {\n const { name, label, isEditable, options } = fieldSchema;\n let initialValue;\n\n try {\n initialValue = defaultValue?.value ? JSON.parse(defaultValue.value as string) : undefined;\n } catch (e) {\n initialValue = undefined;\n }\n\n const [content, setContent] = useState<JSONContent | undefined>(initialValue);\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 setContent(json);\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 console.log('Uploading file', file);\n\n return Promise.resolve('https://via.placeholder.com/150');\n };\n\n return (\n <FormField\n control={control}\n defaultValue={defaultValue}\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 className=\"fk-relative fk-w-full fk-max-w-screen-lg fk-rounded-md fk-border fk-border-input fk-ring-offset-background focus-within:fk-outline-none focus-within:fk-ring-2 focus-within:fk-ring-ring focus-within:fk-ring-offset-2\"\n editable={isEditable !== false && !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 dark:fk-prose-invert prose-headings:fk-font-title fk-min-h-[150px] fk-font-default fk-rounded-md ' +\n 'focus:fk-outline-none fk-max-w-full fk-bg-background ',\n },\n }}\n extensions={extensions}\n initialContent={content}\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\">\n <EditorCommandEmpty className=\"fk-px-2 fk-text-muted-foreground\">No results</EditorCommandEmpty>\n <EditorCommandList>\n {suggestionItems.map((item) => (\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 hover:fk-bg-muted aria-selected:fk-bg-muted\"\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\">\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 onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import { Badge } from '../../ui/primitives/badge';\n\nexport function Tags({ value }: { value: string }) {\n if (!value || !value.split(',').length) {\n return null;\n }\n\n return (\n <div className=\"fk-flex fk-flex-wrap fk-gap-1 fk-max-w-full truncate\">\n {value.split(',').map((tag) => (\n <Badge\n className=\"fk-px-2.5 fk-py-0 fk-font-normal fk-text-[0.6875rem] fk-leading-4\"\n key={tag}\n variant=\"secondary\"\n >\n {tag}\n </Badge>\n ))}\n </div>\n );\n}\n","import { ComponentType } from 'react';\nimport type { CellContext, ColumnDef, Row, Table } from '@tanstack/react-table';\nimport type { Attribute } from '../core/types';\nimport type { AttributeValue } from '../graphql-client/types';\nimport { useConfig } from '../core/config/config-context';\nimport { Checkbox } from '../ui/primitives/checkbox';\nimport { Boolean as BooleanPrefiewField } from './preview-components/boolean';\nimport { Text as TextPreviewField } from './preview-components/text';\nimport { Editor as EditorPreviewField } from './preview-components/editor';\nimport { Asset as AssetPreviewField } from './preview-components/asset';\nimport { DateTime as DateTimePreviewField } from './preview-components/datetime';\nimport { Tags as TagsPreviewField } from './preview-components/tags';\n\ntype Props<TData> = {\n attributesSchema: Attribute[];\n checkboxSelect?: 'single' | 'multiple'; // whether to include a checkbox column for row selection\n actionsComponent?: (row: Row<TData>) => JSX.Element; // a component to be displayed in the actions column of the grid\n};\n\ntype ColumnDefinition<TData extends AttributeValue, TValue> = ColumnDef<TData, TValue> & { id?: string; size: number };\n\nexport function useGridColumnsDefinition<TData extends AttributeValue, TValue>({\n attributesSchema,\n checkboxSelect,\n actionsComponent,\n}: Props<TData>): ColumnDefinition<TData, TValue>[] {\n const { getContributionPointConfig } = useConfig();\n const inputTypeToPreviewFieldMap = {\n 'datetime': 'datetime',\n 'editor': 'editor',\n 'asset': 'asset',\n 'number': 'text',\n 'relationship': 'text',\n 'select': 'text',\n 'switch': 'boolean',\n 'text': 'text',\n 'textarea': 'text',\n };\n const previewFieldComponentsMap = {\n 'boolean': BooleanPrefiewField,\n 'date': TextPreviewField,\n 'datetime': DateTimePreviewField,\n 'editor': EditorPreviewField,\n 'asset': AssetPreviewField,\n 'number': TextPreviewField,\n 'relationship': TextPreviewField,\n 'select': TextPreviewField,\n 'switch': BooleanPrefiewField,\n 'text': TextPreviewField,\n 'textarea': TextPreviewField,\n 'tags': TagsPreviewField,\n };\n\n const cols = attributesSchema\n .map((attribute) => {\n const previewType =\n attribute.previewType ??\n inputTypeToPreviewFieldMap[attribute.inputType as keyof typeof inputTypeToPreviewFieldMap];\n const previewComponent =\n (getContributionPointConfig('previewFields', [previewType])?.[0]?.component as unknown as\n | ComponentType<{ value: TData }>\n | undefined) ??\n previewFieldComponentsMap[previewType as keyof typeof previewFieldComponentsMap] ??\n previewFieldComponentsMap['text'];\n\n if (attribute.isHidden) {\n return null;\n }\n\n const isTagsPreview = previewType === 'tags';\n\n return {\n accessorKey: attribute.name,\n filterFn: (row: Row<TData>, id: string, value: string | string[]) => {\n if (isTagsPreview) {\n return true;\n }\n\n const selectedValues = Array.isArray(value) ? value : [value];\n\n return selectedValues.includes(row.getValue(id));\n },\n header: () => <div className=\"fk-flex fk-items-center\">{attribute.label}</div>,\n cell: ({ row }: CellContext<TData, TValue>) => {\n const PreviewComponent = previewComponent as ComponentType<{ value: TData }>;\n\n // TODO: Pass the complete row data to the preview component, so it can concatenate values from other attributes (i.e. for the \"image dimensions\" column)\n // console.log(row.getAllCells());\n return <PreviewComponent value={row.getValue(attribute.name)} />;\n },\n enableSorting: false,\n enableHiding: true,\n size: attribute.options?.size ?? 150,\n };\n })\n .filter((column) => column !== null);\n\n const actions = {\n id: 'actions',\n cell: ({ row }: CellContext<TData, TValue>) => (actionsComponent ? actionsComponent(row) : null),\n size: 80,\n };\n\n const singleCheckboxSelect = {\n id: 'select',\n cell: ({ row, table }: CellContext<TData, TValue>) => (\n <Checkbox\n aria-label=\"Select row\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => {\n table.toggleAllPageRowsSelected(false);\n row.toggleSelected(Boolean(value));\n }}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n size: 50,\n };\n\n const multipleCheckboxSelect = {\n id: 'select',\n header: ({ table }: { table: Table<unknown> }) => (\n <Checkbox\n aria-label=\"Select all\"\n checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate')}\n onCheckedChange={(value) => {\n table.toggleAllPageRowsSelected(Boolean(value));\n }}\n />\n ),\n cell: ({ row }: CellContext<TData, TValue>) => (\n <Checkbox\n aria-label=\"Select row\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => {\n row.toggleSelected(Boolean(value));\n }}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n size: 50,\n };\n\n return [\n ...(checkboxSelect === 'single' ? [singleCheckboxSelect] : []),\n ...(checkboxSelect === 'multiple' ? [multipleCheckboxSelect] : []),\n ...(actionsComponent ? [actions] : []),\n ...cols,\n ];\n}\n","'use client';\n\nimport { useRef, useState } from 'react';\nimport type { ReactElement, UIEvent } from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\nimport type {\n ColumnDef,\n ColumnFiltersState,\n Updater,\n Row,\n RowSelectionState,\n SortingState,\n Table,\n TableMeta,\n VisibilityState,\n} from '@tanstack/react-table';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport {\n Table as TablePrimitive,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../ui/primitives/table';\nimport { cn } from '../ui/lib/utils';\nimport type { AttributeValue } from '../graphql-client/types';\nimport type { MultipleRelationshipConnection } from '../core/types';\n\ninterface DataTableProps<TData extends AttributeValue, TValue> {\n classNames?: {\n wrapper?: string;\n table?: string;\n row?: string;\n };\n columns: ColumnDef<AttributeValue, TValue>[];\n data: TData[];\n entityName: string;\n initialSelectionState?: RowSelectionState;\n onEntitySelectionChange?: (rowSelection: string[]) => void;\n onScroll?: (event: UIEvent<HTMLDivElement>) => void;\n pageSize?: number;\n rowHeightEstimate?: number;\n rowAdditionState?: MultipleRelationshipConnection;\n rowDeletionState?: string[];\n toolbarComponent?: (table: Table<AttributeValue>) => ReactElement;\n}\n\ninterface ExtendedDataTable extends TableMeta<unknown> {\n getRowBackground: (row: Row<AttributeValue>) => string;\n}\n\nfunction inferRowHeightEstimate(rowClassName?: string): number | undefined {\n if (!rowClassName) {\n return undefined;\n }\n\n const tokens = rowClassName.split(/\\s+/);\n\n if (tokens.includes('fk-h-20')) {\n return 80;\n }\n\n return undefined;\n}\n\nexport function DataTable<TData extends AttributeValue, TValue>({\n classNames,\n columns,\n data,\n initialSelectionState,\n onEntitySelectionChange,\n onScroll,\n pageSize,\n rowHeightEstimate,\n rowAdditionState,\n rowDeletionState,\n toolbarComponent,\n}: DataTableProps<TData, TValue>): JSX.Element {\n const scrollRef = useRef<HTMLDivElement>(null);\n const [rowSelection, setRowSelection] = useState(initialSelectionState ?? {});\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({});\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n const [sorting, setSorting] = useState<SortingState>([]);\n\n const table = useReactTable({\n data,\n columns,\n state: {\n sorting,\n columnVisibility,\n rowSelection,\n columnFilters,\n },\n initialState: {\n pagination: {\n pageSize: pageSize ?? 25,\n },\n },\n enableRowSelection: true,\n onRowSelectionChange: handleRowSelectionChange,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getRowId: (row) => row._id,\n manualPagination: true,\n meta: {\n getRowBackground: (row: Row<AttributeValue>) => getRowClassnames(row, rowDeletionState, rowAdditionState),\n },\n });\n\n const { rows } = table.getRowModel();\n const rowVirtualizer = useVirtualizer({\n count: rows.length,\n estimateSize: () => rowHeightEstimate ?? inferRowHeightEstimate(classNames?.row) ?? 45, // estimate row height for accurate scrollbar dragging\n getScrollElement: () => scrollRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.includes('Firefox')\n ? (element) => element.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n });\n\n const virtualItems = rowVirtualizer.getVirtualItems();\n const totalSize = rowVirtualizer.getTotalSize();\n\n function handleRowSelectionChange(updaterFn: Updater<RowSelectionState>): void {\n const selectedIds = typeof updaterFn === 'function' ? Object.keys(updaterFn(rowSelection)) : Object.keys(updaterFn);\n\n setRowSelection(updaterFn);\n onEntitySelectionChange?.(selectedIds);\n }\n\n return (\n <div className={cn('fk-w-full fk-h-full fk-space-y-4', classNames?.wrapper)}>\n {toolbarComponent && toolbarComponent(table)}\n <TablePrimitive className={cn('fk-grid fk-pb-[5rem]', classNames?.table)} onScroll={onScroll} ref={scrollRef}>\n <TableHeader className=\"fk-grid\">\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow className=\"fk-flex fk-w-full\" key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n return (\n <TableHead\n className={cn('fk-flex fk-items-center', header.column.id === 'actions' && 'fk-pl-0')}\n colSpan={header.colSpan}\n key={header.id}\n style={header.getSize() ? { width: `${header.getSize().toString()}px` } : {}}\n >\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody\n className=\"fk-grid fk-relative\"\n style={{\n height: `${totalSize.toString()}px`, //tells scrollbar how big the table is\n }}\n >\n {virtualItems.length ? (\n virtualItems.map((virtualRow) => {\n const row = rows[virtualRow.index];\n\n return (\n <TableRow\n className={`${(table.options.meta as ExtendedDataTable).getRowBackground(\n row\n )} fk-flex fk-absolute fk-w-full ${classNames?.row ?? ''}`}\n data-index={virtualRow.index}\n data-state={row.getIsSelected() && 'selected'}\n key={virtualRow.key}\n ref={rowVirtualizer.measureElement}\n style={{\n transform: `translateY(${virtualRow.start.toString()}px)`,\n }}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n className={cn('fk-flex fk-items-center fk-truncate', cell.column.id === 'actions' && '!fk-pl-0')}\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n );\n })\n ) : (\n <TableRow>\n <TableCell className=\"fk-h-24 fk-text-center\" colSpan={columns.length}>\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </TablePrimitive>\n </div>\n );\n}\n\nfunction getRowClassnames(\n row: Row<AttributeValue>,\n rowDeletionState?: string[],\n rowAdditionState?: MultipleRelationshipConnection\n): string {\n if (rowDeletionState?.includes(row.original._id)) {\n return 'fk-bg-row-removed hover:fk-bg-row-removed-hover';\n }\n\n if (rowAdditionState?.some((line) => line._id === row.original._id)) {\n return 'fk-bg-row-added hover:fk-bg-row-added-hover';\n }\n\n return '';\n}\n","'use client';\n\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, 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 ImageValue,\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 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 entityNamePlural,\n fieldSchema,\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, 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 const relationshipMode = find<Attribute>(propEq(entityName, 'name'))(relationshipEntityAttributesSchema)?.relationship\n ?.mode;\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 connection name to filter out the related items already connected when showing the list (i.e. productsConnection_NONE)\n * */\n const relationshipAttribute = relationshipEntityAttributesSchema.find(\n (attr) => attr.relationship?.entity === baseEntityName\n );\n const relationshipAttributeMode = relationshipAttribute?.relationship?.mode;\n const connectionAttributeName = relationshipMode === 'single' ? entityName : entityNamePlural;\n\n if (relationshipAttributeMode) {\n connectionName =\n relationshipAttributeMode === 'single'\n ? `${connectionAttributeName}Connection_NOT`\n : `${connectionAttributeName}Connection_NONE`;\n }\n\n const primaryAttributeName = getPrimaryAttributeName(relationshipEntityAttributesSchema);\n const initialRows = useMemo(\n () =>\n defaultValue.value\n ? dataAdapter({ data: defaultValue.value, defaultScope, primaryAttributeName, relationshipEntitySchema, scope })\n : [],\n [defaultScope, defaultValue, primaryAttributeName, relationshipEntitySchema, scope]\n );\n const entityQuery = getRelatedItemsQuery({\n attributeName: name,\n relatedEntityName: relationshipEntityName,\n scope,\n schema,\n });\n const previewItems = rows.length ? rows.slice(0, 12).map((row) => row[primaryAttributeName] as string) : [];\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: (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 // called on scroll and possibly on mount to fetch more data as the user scrolls and reaches bottom of table\n const fetchMoreOnBottomReached = useCallback(\n (containerRefElement?: HTMLDivElement | null) => {\n const totalCount = defaultValue.count ?? 0;\n\n if (!containerRefElement || totalCount === 0 || rows.length === 0) {\n return;\n }\n\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n //once the user has scrolled within 200px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 200 && !loading && rows.length < totalCount) {\n getData({\n variables: {\n options: {\n limit: PAGE_SIZE,\n offset: rows.length,\n },\n where: {\n productsConnection_SOME: {\n node: {\n _id: entityId,\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 // eslint-disable-next-line no-console -- show the error to the user\n console.error('Error fetching more data:', error);\n });\n }\n },\n [\n defaultValue.count,\n entityId,\n getData,\n initialRows,\n loading,\n relationshipEntitySchema?.plural,\n rows.length,\n schema,\n scope,\n ]\n );\n\n function handleSelection(event: SyntheticEvent): void {\n event.preventDefault();\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>\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-[2.375rem] fk-pl-3 fk-pr-10 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-items-start fk-space-x-2 fk-rounded-md fk-border fk-border-input fk-bg-background focus-visible:fk-outline-none fk-ring-offset-background focus-visible:fk-ring-2 focus-visible:fk-ring-ring focus-visible:fk-ring-offset-2 ${\n isOpen ? 'fk-outline-none fk-ring-2 fk-ring-ring fk-ring-offset-2' : ''\n }`}\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-space-x-2\">\n {!isOpen ? (\n <span className=\"fk-flex fk-flex-wrap fk-grow fk-pb-1.5\">\n {previewItems.map((item) => (\n <Badge className=\"fk-mr-2 fk-mt-1.5 fk-rounded-sm\" key={item} variant=\"secondary\">\n {item}\n </Badge>\n ))}\n </span>\n ) : (\n <Button className=\"fk-h-8 fk-mr-auto fk-mt-2\" onClick={handleSelection} variant=\"outline\">\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 {!isOpen ? (\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 fk-text-muted-foreground\"\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-absolute fk-right-[0.1875rem] fk-top-[0.1875rem] fk-h-8 fk-w-8 fk-rounded fk-text-muted-foreground\"\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 <Collapsible className=\"fk-w-full fk-space-y-2 !fk-ml-0\" onOpenChange={setIsOpen} open={isOpen}>\n <CollapsibleContent className=\"fk-w-full\">\n <div className=\"fk-flex fk-w-full fk-mt-3 fk-mb-2\" id={`relationship-dropdown-${name}`}>\n <DataTable\n classNames={{ table: 'fk-max-h-[17.5rem]' }}\n columns={columns}\n data={rows}\n entityName={entityName}\n onScroll={(e) => {\n fetchMoreOnBottomReached(e.target as HTMLDivElement);\n }}\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 </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\n/**\n * Find the name of the attribute of an entity with isPrimary === true.\n * The value of that attribute is returned as the value for the relationship attribute\n */\nfunction getPrimaryAttributeName(schemaAttributes: Attribute[]): string {\n return schemaAttributes.find((attr) => attr.isPrimary)?.name ?? schemaAttributes[0]?.name;\n}\n\ntype DataAdapter = {\n data: string | MappedEntityItem | EntityItem | AttributeValue | ImageValue;\n defaultScope: string;\n primaryAttributeName: string;\n relationshipEntitySchema: Entity | undefined;\n scope: string;\n};\n\nfunction dataAdapter({\n data,\n defaultScope,\n primaryAttributeName,\n relationshipEntitySchema,\n scope,\n}: DataAdapter): AttributeValue[] {\n if (!Array.isArray(data)) {\n return [];\n }\n\n return data.map(\n (row: MappedEntityItem | EntityItem) =>\n map((field) => {\n if (field && typeof field !== 'string' && !Array.isArray(field) && field.__typename) {\n const relationshipFieldSchema = find(propEq(field.__typename, 'name'))(\n relationshipEntitySchema?.attributes ?? []\n ) as Attribute | undefined;\n const relationshipFieldName = relationshipFieldSchema?.relationship?.field ?? '';\n\n if (relationshipFieldName) {\n return (\n (field[relationshipFieldName] as AttributeValue)?.[scope] ??\n (field[relationshipFieldName] as AttributeValue)?.[defaultScope] ??\n field[relationshipFieldName]\n );\n }\n\n return field[scope] ?? field[defaultScope];\n }\n\n if (Array.isArray(field)) {\n const attrField = field as AttributeValue[];\n\n return attrField\n .slice(0, 3)\n .map(\n (item) =>\n (item[primaryAttributeName] as AttributeValue | undefined)?.[scope] ??\n (item[primaryAttributeName] as AttributeValue | undefined)?.[defaultScope]\n )\n .join(', ');\n }\n\n return field;\n }, row) as AttributeValue\n );\n}\n","import { useEffect, useId, useState } from 'react';\nimport type { 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 type { ActionSetRelationship, Attribute, Entity } 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 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 primaryAttribute = getPrimaryAttribute(relationshipEntitySchema?.attributes ?? []);\n const primaryAttributeName = primaryAttribute.name;\n\n useEffect(() => {\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: { _id: String(defaultValue._id), value: defaultValue.value },\n disconnect: [],\n },\n },\n });\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 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 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 (value && typeof value === 'object' && !Array.isArray(value) && value[primaryAttributeName]) {\n displayValue =\n ((value[primaryAttributeName] as AttributeValue)?.[scope] as string) ??\n (value[primaryAttributeName] as AttributeValue)?.[defaultScope] ??\n value[primaryAttributeName];\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-none fk-ring-2 fk-ring-ring fk-ring-offset-2' : ''\n }`}\n >\n <Input\n className=\"fk-h-[2.375rem] fk-py-[0.4375rem] fk-caret-transparent fk-border-0 focus-visible:fk-ring-0 focus-visible:fk-ring-offset-0\"\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.1875rem] fk-h-8 fk-w-8 fk-rounded fk-text-muted-foreground\"\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.1875rem] fk-top-[0.1875rem] fk-h-8 fk-w-8 fk-rounded fk-text-muted-foreground\"\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\n/**\n * Find the attribute of an entity with isPrimary === true.\n * if none is found, return the first attribute.\n */\nfunction getPrimaryAttribute(schemaAttributes: Attribute[]): Attribute {\n return schemaAttributes.find((attr) => attr.isPrimary) ?? schemaAttributes[0];\n}\n","import { AlertTriangle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../../ui/primitives/alert';\nimport type { FormFieldParams } from '../../types';\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 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 { 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\nexport function Select({ control, fieldSchema, setValue }: FormFieldParams<'select'>): JSX.Element {\n const { name, label, isEditable, 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={field.value?.value ? String(field.value.value) : undefined}\n disabled={isEditable === false || field.value?.disabled}\n onValueChange={(value) => {\n handleInput(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={item.value}>\n {item.label}\n </SelectItem>\n );\n })}\n </SelectGroup>\n );\n }\n\n return (\n <SelectItem key={option.label} value={option.value}>\n {option.label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </SelectPrimitive>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\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 { AlertTriangle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\n\ntype Props = {\n inputType: string;\n label: string;\n};\n\nexport default function UndefinedFieldTypeError({ inputType, label }: Props): JSX.Element {\n return (\n <Alert variant=\"destructive\">\n <AlertTriangle className=\"h-4 w-4\" />\n <AlertTitle>Error</AlertTitle>\n <AlertDescription>\n {`Incorrect inputType: \"${inputType}\" for the \"${label}\" attribute. Please check the schema configuration.`}\n </AlertDescription>\n </Alert>\n );\n}\n","import { createElement, forwardRef, memo, useEffect, useImperativeHandle, useMemo } from 'react';\nimport type { ComponentType, ForwardedRef } from 'react';\nimport { useForm } 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 { Alert, AlertDescription, AlertTitle } from '../ui/primitives/alert';\nimport { Form } from '../ui/primitives/form';\nimport type { Entity, Schema } from '../core/types';\nimport type { EntityData, FormEntityItem } from '../graphql-client/types';\nimport { useConfig } from '../core/config/config-context';\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 UndefinedFieldTypeError from './fields/undefined-field-type-error';\nimport type { FormFieldParams } from './types';\n\nexport type SubmitHandle = {\n submit: () => void;\n hasErrors: () => void;\n hasDataChanged: () => boolean;\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: EntityData, previousData?: FormEntityItem) => void;\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 formSchema = entitySchema?.attributes ?? [];\n const validationSchema = useMemo(() => {\n return z.object(\n formSchema.reduce((acc, fieldSchema) => {\n if (typeof fieldSchema.validation === 'undefined') return acc;\n\n // Create a clearer validation schema for each field\n return {\n ...acc,\n [fieldSchema.name]: z.object({\n // Pass through the validation with more detailed error\n value: fieldSchema.validation(z).or(\n z.any().refine(() => false, {\n message: fieldSchema.label ? `${fieldSchema.label} is required` : 'Required field',\n })\n ),\n }),\n };\n }, {})\n );\n }, [formSchema]);\n type UserSchema = z.infer<typeof validationSchema>;\n\n const form = useForm<UserSchema>({\n resolver: zodResolver(validationSchema),\n values: formData,\n mode: 'onBlur',\n criteriaMode: 'all',\n });\n\n const { control, getValues, handleSubmit, setValue, watch, trigger, formState } = form;\n const { errors } = formState;\n const { getContributionPointConfig } = useConfig();\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 setIsDirty(false);\n onSubmit(getValues(), formData);\n })();\n });\n },\n hasErrors() {\n setIsDirty(true);\n },\n hasDataChanged() {\n return hasDataChanged(getValues(), formData);\n },\n }));\n\n useEffect(() => {\n const formChangesSubscription = watch((changedData) => {\n setIsDirty(hasDataChanged(changedData, formData));\n });\n\n return () => {\n formChangesSubscription.unsubscribe();\n };\n }, [formData, setIsDirty, watch]);\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 return (\n <Form {...form}>\n <form className=\"fk-flex fk-flex-col fk-gap-y-5\">\n {formSchema.map((field) => {\n if (field.name === '_id') {\n return null;\n }\n\n const fieldComponent =\n (getContributionPointConfig('formFields', [field.inputType])?.[0]?.component as unknown as\n | ComponentType<FormFieldParams<typeof field.inputType>>\n | undefined) ?? formFieldComponentsMap[field.inputType as keyof typeof formFieldComponentsMap];\n\n return fieldComponent ? (\n createElement(\n fieldComponent as ComponentType<FormFieldParams<typeof field.inputType>>,\n {\n key: field.name,\n control,\n defaultScope,\n defaultValue: formData ? formData[field.name] : { value: '', disabled: false, scope: defaultScope },\n entityId,\n entityName,\n entityNamePlural,\n fieldSchema: field,\n getValues,\n schema,\n scope: currentScope,\n setValue,\n } as FormFieldParams<typeof field.inputType>\n )\n ) : (\n <UndefinedFieldTypeError inputType={field.inputType} key={field.name} label={field.label} />\n );\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, useRef } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { find, propEq } from 'ramda';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { Loader2 } from 'lucide-react';\nimport { useAppContext } from '../core/app-context';\nimport type { SingleProject } from '../core/config/types';\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 FormBuilder from '../form/form-builder';\nimport type { SubmitHandle } from '../form/form-builder';\nimport type { Entity } from '../core/types';\nimport { getEntityCreateMutation, getEntityQuery } from '../graphql-client/queries';\nimport type { EntityData } from '../graphql-client/types';\nimport { Button } from '../ui/primitives/button';\nimport { useDispatch } from './actions-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 { projects, currentProjectId } = useConfig();\n const { schema, scopes } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\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 [runMutation, setMutation, setOptions, mutationData] = useEntityMutation();\n const { setIsDirty } = useDrawerModalContext();\n\n useEffect(() => {\n if (mutationData.error) {\n ref.current?.hasErrors();\n }\n }, [mutationData.error]);\n\n function handleBeforeClose(): boolean {\n if (ref.current?.hasDataChanged()) {\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 dispatch({ type: 'Dismiss', _id: action._id, payload: {} });\n },\n },\n },\n });\n\n return false;\n }\n\n return true;\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: EntityData) => {\n const _id = uuidv4();\n const mutation = getEntityCreateMutation(entityNamePlural, schema, newData, _id);\n const entityQuery = getEntityQuery(entityNamePlural, scope, schema);\n const refreshQuery = gql`\n ${entityQuery.query}\n `;\n\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n refetchQueries: [refreshQuery],\n onCompleted: () => {\n handleClose(action._id);\n toast.success('Your changes have been saved.');\n },\n });\n runMutation(true);\n },\n [action._id, entityNamePlural, handleClose, runMutation, schema, setMutation, scope, setOptions]\n );\n\n return (\n <DrawerModal\n actions={\n <Button\n className=\"fk-px-8\"\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 }\n beforeClose={handleBeforeClose}\n depth={depth}\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 { useEffect, useCallback, useState } from 'react';\nimport { prop, uniqBy } from 'ramda';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { getServerError, parseErrorBody } from './error-utils';\nimport { getEntityQuery, mapQueryResult, mapQueryResultForFormFields } from './queries';\nimport type {\n EntityQueryAggregate,\n EntityQueryResults,\n FormEntityItem,\n MappedEntityQueryResults,\n MappedEntityItem,\n MappedFormEntityQueryResults,\n UseEntityQueryParams,\n ImageValue,\n} from './types';\n\ntype FetchMoreOptions = { variables: { options: { offset: number; limit: number } } };\ntype Results = (MappedEntityQueryResults | MappedFormEntityQueryResults) | { count: 0; results: [] };\n\nexport function useEntityQuery({ entityNamePlural, schema, scope, variables, isForm }: UseEntityQueryParams): {\n count: number;\n data: MappedEntityItem[] | FormEntityItem[] | ImageValue[] | undefined;\n fetchMore: (args: FetchMoreOptions) => void;\n isLoading: boolean;\n isProjectDisabled: boolean;\n isProjectReadOnly: boolean;\n} {\n const [result, setResult] = useState<Results>({\n count: 0,\n results: [],\n });\n const entityQuery = getEntityQuery(entityNamePlural, scope, schema);\n const {\n loading: isLoading,\n data,\n fetchMore: fetchNextPage,\n error,\n } = useQuery<EntityQueryResults & EntityQueryAggregate>(\n gql`\n ${entityQuery.query}\n `,\n { variables }\n );\n\n // Parse 403 error response to determine the specific error code\n const serverError = getServerError(error);\n\n const { isProjectDisabled, isProjectReadOnly } = (() => {\n if (serverError?.statusCode === 403) {\n const responseBody = parseErrorBody<{ code?: string }>(serverError.bodyText);\n\n if (responseBody && typeof responseBody.code === 'string') {\n if (responseBody.code === 'PROJECT_PAUSED') {\n return {\n isProjectDisabled: true,\n isProjectReadOnly: false,\n };\n }\n\n if (responseBody.code === 'READ_ONLY_MODE') {\n return {\n isProjectDisabled: false,\n isProjectReadOnly: true,\n };\n }\n }\n\n return {\n isProjectDisabled: true,\n isProjectReadOnly: false,\n };\n }\n\n return {\n isProjectDisabled: false,\n isProjectReadOnly: false,\n };\n })();\n\n const mappedResults = useCallback(\n () => mapResults({ data, entityNamePlural, isForm, schema, scope }),\n [data, entityNamePlural, isForm, schema, scope]\n );\n\n function fetchMore(args: FetchMoreOptions): void {\n fetchNextPage(args)\n .then(({ data: res }) => {\n const mappedFetchMoreResults = mapResults({ data: res, entityNamePlural, isForm, schema, scope });\n\n setResult((prevRows) => {\n return {\n count: mappedFetchMoreResults.count,\n results: uniqBy(prop('_id'), [...prevRows.results, ...mappedFetchMoreResults.results]),\n } as Results;\n });\n })\n .catch((error: unknown) => {\n // eslint-disable-next-line no-console -- show the error to the user\n console.error('Error fetching more data:', error);\n });\n }\n\n useEffect(() => {\n setResult(mappedResults);\n }, [mappedResults]);\n\n return { isLoading, fetchMore, count: result.count, data: result.results, isProjectDisabled, isProjectReadOnly };\n}\n\nfunction mapResults(\n args: {\n data: (EntityQueryResults & EntityQueryAggregate) | undefined;\n } & UseEntityQueryParams\n): MappedEntityQueryResults | MappedFormEntityQueryResults {\n const entityNamePlural = args.entityNamePlural as keyof FormEntityItem;\n\n if (!args.data?.[entityNamePlural]) {\n return { count: 0, results: [] };\n }\n\n return args.isForm\n ? mapQueryResultForFormFields(args.entityNamePlural, args.scope, args.data, args.schema)\n : mapQueryResult(args.entityNamePlural, args.scope, args.data, args.schema);\n}\n","import { 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 { useDrawerModalContext } from '../ui/drawer-modal-context';\n\nexport default function SaveButton({ handleSave, isLoading }: { handleSave: () => void; isLoading: boolean }) {\n const { isDirty } = useDrawerModalContext();\n return (\n <Button\n className=\"fk-px-8\"\n disabled={!isDirty}\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 );\n}\n","import { Skeleton } from '../ui/primitives/skeleton';\n\nexport default function Loading(): JSX.Element {\n const numberOfSkeletonFields = 10;\n\n return (\n <>\n {/* eslint-disable-next-line no-param-reassign -- allowed for simplicity */}\n {Array.from({ length: numberOfSkeletonFields }, (_, i) => i++).map((i) => (\n <div className=\"fk-mt-3 fk-mb-[1.625rem]\" 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-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, useRef, useState } from 'react';\nimport { find, propEq } from 'ramda';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport type { SingleProject } from '../core/config/types';\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 { getEntityUpdateMutation } from '../graphql-client/queries';\nimport type { EntityData, 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 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 { 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 { projects, currentProjectId } = useConfig();\n const { schema, scopes } = useCallback(\n () => find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject,\n [currentProjectId, projects]\n )();\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 [runMutation, setMutation, setOptions, mutationData] = useEntityMutation();\n const { setIsDirty } = useDrawerModalContext();\n\n const setFormIsDirty = useCallback(\n (isDirty: boolean) => {\n setIsDirty(isDirty);\n },\n [setIsDirty]\n );\n\n useEffect(() => {\n if (mutationData.error) {\n ref.current?.hasErrors();\n }\n }, [mutationData.error]);\n\n const handleBeforeClose = useCallback(() => {\n if (ref.current?.hasDataChanged()) {\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 dispatch({ type: 'Dismiss', _id: action._id, payload: {} });\n },\n },\n },\n });\n\n return false;\n }\n\n return true;\n }, [dispatch, action._id]);\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(scope: string): void {\n if (ref.current?.hasDataChanged()) {\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 setCurrentScope(scope);\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope } });\n },\n },\n },\n });\n\n return;\n }\n\n setCurrentScope(scope);\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope } });\n }\n\n const saveEntity = useCallback(\n (newData: EntityData, previousData?: FormEntityItem) => {\n if (!previousData) return;\n\n const mutation = getEntityUpdateMutation(entityNamePlural, entityId, currentScope, schema, previousData, newData);\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n variables: { where: { _id: entityId } },\n onCompleted: () => {\n toast.success('Your changes have been saved.');\n },\n });\n runMutation(true);\n },\n [action._id, entityId, entityNamePlural, schema, runMutation, setMutation, setOptions, currentScope]\n );\n\n const { isLoading, data: results } = useEntityQuery({\n entityNamePlural,\n schema,\n scope: currentScope,\n variables: { where: { _id: entityId } },\n isForm: true,\n });\n const data = results as FormEntityItem[];\n\n function getEntityIdentifier(entitySchema: Entity, data: FormEntityItem[]): string {\n const primaryAttribute = entitySchema?.attributes.find((attr) => attr.isPrimary) ?? entitySchema?.attributes[0];\n const primaryAttributeName = primaryAttribute.name;\n const isRelationship = primaryAttribute?.relationship?.field !== undefined;\n\n if (isLoading || !data.length) {\n return '';\n }\n\n return isRelationship && primaryAttribute?.relationship?.field\n ? ((data[0][primaryAttributeName]?.value as Record<string, unknown>)?.[\n primaryAttribute.relationship.field\n ] as string)\n : (data[0][primaryAttributeName]?.value as string);\n }\n\n const entityIdentifier = !isLoading && data.length && 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: </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 isFocused={isFocused}\n onClose={() => {\n handleClose(action._id);\n }}\n onFormChange={() => {}}\n title={entityIdentifier as string}\n >\n {isLoading || !data.length ? (\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, useState, useRef } from 'react';\nimport { find, propEq } from 'ramda';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { LoaderCircle, Search as SearchIcon } 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 type { SingleProject } from '../core/config/types';\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';\n\ntype Props = {\n action: ActionEditRelationship;\n depth: number;\n isFocused: boolean;\n};\n\nconst PAGE_SIZE = 25;\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 { connectedEntitiesCount, connectionName, entityId, entityName, mode, relationshipId } = action.payload;\n const { projects, currentProjectId } = useConfig();\n const { schema } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const entityLabel = entitySchema?.menu?.label ?? entityName.toLowerCase();\n const entityNamePlural = entitySchema?.plural ?? '';\n const relationshipContext = relationships[relationshipId];\n const [searchResultIds, setSearchResultIds] = useState<{ _id: string }[]>([]);\n\n const initialSelectionState =\n mode === 'single'\n ? relationshipContext?.connect\n ? [\n {\n id: (relationshipContext.connect as SingleRelationshipConnection)._id,\n value: (relationshipContext.connect as SingleRelationshipConnection).value,\n },\n ]\n : []\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 filterOutConnectedEntities = connectionName\n ? {\n [connectionName]: {\n node: {\n _id: entityId,\n },\n },\n }\n : {};\n const conditionalWhereClause =\n mode === 'multiple'\n ? {\n ...filterOutConnectedEntities,\n OR: searchResultIds,\n }\n : {\n OR: searchResultIds,\n };\n\n const { count, data, fetchMore, isLoading } = useEntityQuery({\n entityNamePlural,\n schema,\n scope,\n variables: {\n options: {\n offset: 0,\n limit: PAGE_SIZE,\n },\n where: conditionalWhereClause,\n },\n });\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 const handleClose = useCallback(\n (_id: Action['_id']) => {\n actionDispatch({ type: 'Dismiss', _id, payload: {} });\n },\n [actionDispatch]\n );\n\n // called on scroll and possibly on mount to fetch more data as the user scrolls and reaches bottom of table\n const fetchMoreOnBottomReached = useCallback(\n (containerRefElement?: HTMLDivElement | null) => {\n const rowsCount = data?.length ?? 0;\n const totalCount = count - connectedEntitiesCount;\n\n if (containerRefElement && totalCount > 0 && rowsCount > 0) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n //once the user has scrolled within 500px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 500 && !isLoading && rowsCount < totalCount) {\n fetchMore({\n variables: {\n options: {\n offset: rowsCount,\n limit: PAGE_SIZE,\n },\n },\n });\n }\n }\n },\n [connectedEntitiesCount, count, data?.length, fetchMore, isLoading]\n );\n\n function handleSelection(): void {\n let connect;\n\n if (mode === 'single') {\n const selected = selectedRows[0];\n\n connect = {\n _id: selected.id ?? '',\n value: selected.value,\n } as SingleRelationshipConnection;\n }\n\n if (mode === 'multiple') {\n connect = selectedRows?.map((selected) => ({\n _id: selected.id ?? '',\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 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 <Button\n className=\"fk-px-8\"\n onClick={() => {\n handleCreateEntity();\n }}\n variant=\"outline\"\n >\n {`Create ${entityLabel}`}\n </Button>\n </>\n }\n depth={depth}\n isFocused={isFocused}\n onClose={() => {\n handleClose(action._id);\n }}\n title={`Select ${entityLabel}`}\n >\n <DataTable\n columns={isLoading ? loadingColumns : columns}\n data={isLoading ? loadingData : (data ?? [])}\n entityName={entitySchema?.name ?? ''}\n initialSelectionState={\n selectedRows?.reduce(\n (acc, selected) => ({ ...acc, ...(selected.id ? { [selected.id]: true } : {}) }),\n {}\n ) as {\n [_id: string]: boolean;\n }\n }\n onEntitySelectionChange={handleSelectionChange}\n onScroll={(e) => {\n fetchMoreOnBottomReached(e.target as HTMLDivElement);\n }}\n toolbarComponent={() => (\n <SearchBar\n entityNamePlural={entityNamePlural}\n projectId={currentProjectId ?? ''}\n setSearchResultIds={setSearchResultIds}\n />\n )}\n />\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 function getBaseSearchRequest(): SearchRequestProps {\n return {\n searchRequests: {\n searches: [\n {\n collection: entityNamePlural,\n },\n ],\n },\n commonParams: {\n q: '',\n },\n };\n }\n\n const searchRequest = getBaseSearchRequest();\n const [searchQuery, setSearchQuery] = useState(searchRequest);\n const { results, isLoading } = useSearch(projectId, searchQuery);\n const prevResultsRef = useRef<any[] | null>(null);\n\n const debouncedSetSearchQuery = useCallback(\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.value;\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(fn: Function, ms = 300) {\n let timeoutId: ReturnType<typeof setTimeout>;\n return function (this: any, ...args: any[]) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn.apply(this, args), ms);\n };\n}\n","'use client';\n\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 { Outlet } from 'react-router-dom';\nimport { AuthProvider } from '../../auth/auth-context';\nimport { ConfigProvider } from '../../core/config/config-context';\nimport { GraphQLProvider } from '../../graphql-client/graphql-context';\nimport { ActionsManager } from '../../entities/actions-manager';\nimport type { ProjectOptions } from '../../core/config/types';\nimport { DrawerModalProvider } from '../drawer-modal-context';\n\nexport function Root({ config }: { config: ProjectOptions[] }): JSX.Element {\n const [defaultApp] = config;\n const { basePath, projectId } = defaultApp;\n\n if (window.location.pathname === basePath) {\n window.location.href = `${basePath}/${projectId}`;\n }\n\n return (\n <AuthProvider>\n <ConfigProvider config={config}>\n <GraphQLProvider>\n <DrawerModalProvider>\n <ActionsManager />\n </DrawerModalProvider>\n <Outlet />\n </GraphQLProvider>\n </ConfigProvider>\n </AuthProvider>\n );\n}\n","'use client';\n\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 lg:fk-px-0\">\n <div className=\"fk-w-full lg:fk-p-8\">\n <div className=\"fk-mx-auto fk-flex fk-w-full fk-flex-col fk-justify-center sm:fk-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 dark:fk-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","import { AlertCircle } from 'lucide-react';\nimport { useRouteError } from 'react-router-dom';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\n\nexport function ErrorBoundary() {\n const error = useRouteError();\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","'use client';\n\nimport { useEffect, useState } from 'react';\nimport { debug } from 'debug';\nimport { createBrowserRouter, RouterProvider } 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 { getApps } from './config/config-context';\nimport { GlobalError } from './error/global-error';\nimport { ErrorBoundary } from './error/error-boundary';\nimport type { Config, ProjectOptions, SingleProject } from './config/types';\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\nexport function FlexkitStudio({ config }: { config: Config }): JSX.Element | null {\n const [mounted, setMounted] = useState(false);\n const log = debug('core:flexkit-studio');\n const configArray: ProjectOptions[] = Array.isArray(config)\n ? config.map((project) => mapConfig(project))\n : [mapConfig(config)];\n const apps = getApps(configArray);\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 const router = createBrowserRouter([\n {\n path: '/studio',\n element: <Root config={configArray} />,\n errorElement: <GlobalError />,\n children: [\n {\n path: '/studio/:projectId',\n element: <Layout version={{ current: '1.0.0', latest: '1.0.0', isCurrent: true }} />,\n children: apps.map((app) => ({\n path: app.name,\n element: app.component,\n errorElement: <ErrorBoundary />,\n children: app.routes?.map((route) => ({\n path: route.path,\n element: route.component,\n errorElement: <ErrorBoundary />,\n children: route.children?.map((child) => ({ path: child.path, element: child.component })),\n })),\n })),\n },\n ],\n },\n ]);\n\n log('Init Studio');\n\n return (\n <ThemeProvider attribute=\"class\" defaultTheme=\"system\" disableTransitionOnChange enableSystem>\n <AppProvider>\n <ActionsProvider>\n <RouterProvider router={router} />\n </ActionsProvider>\n </AppProvider>\n </ThemeProvider>\n );\n}\n\nfunction mapConfig(project: SingleProject | ProjectOptions): ProjectOptions {\n return {\n basePath: project.basePath ?? '/',\n menuGroups: project.menuGroups ?? [],\n icon: project.icon,\n plugins: project.plugins,\n projectId: project.projectId,\n title: project.title,\n schema: project.schema,\n scopes: project.scopes,\n };\n}\n","import { toast } from 'sonner';\nimport { apiPaths } from './api-paths';\nimport { useCreateAssetMutation } from '../graphql-client/use-entity-mutation';\nimport type { FormEntityItem } from '../graphql-client/types';\n\nexport const ACCEPTED_MIME_TYPES = [\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'image/vnd.microsoft.icon',\n 'image/bmp',\n 'image/gif',\n 'image/tiff',\n 'image/svg+xml',\n 'image/avif',\n 'image/heic',\n 'image/heif',\n 'image/heic-sequence',\n 'image/heif-sequence',\n 'image/apng',\n 'audio/aac',\n 'audio/mpeg',\n 'audio/wav',\n 'audio/webm',\n 'audio/midi',\n 'audio/x-midi',\n 'audio/ogg',\n 'video/x-msvideo',\n 'video/mp4',\n 'video/mpeg',\n 'video/webm',\n 'video/quicktime',\n 'video/ogg',\n 'video/mp2t',\n 'video/3gpp',\n 'video/3gpp2',\n 'application/x-7z-compressed',\n 'application/zip',\n 'application/vnd.amazon.ebook',\n 'application/octet-stream',\n 'application/epub+zip',\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-fontobject',\n 'application/gzip',\n 'application/x-gzip',\n 'application/java-archive',\n 'application/json',\n 'application/ld+json',\n 'text/javascript',\n 'application/vnd.oasis.opendocument.presentation',\n 'application/vnd.oasis.opendocument.spreadsheet',\n 'application/vnd.oasis.opendocument.text',\n 'application/ogg',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.rar',\n 'application/x-tar',\n 'application/vnd.visio',\n 'application/xhtml+xml',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/xml',\n];\n\nexport type UploadedFileResult = {\n pathname: string;\n lqip?: string;\n size: number;\n mimeType: string;\n originalFilename: string;\n width?: number;\n height?: number;\n};\n\ntype UploadResponse = {\n pathname: string;\n lqip?: string;\n};\n\nexport type OpenFileDialogAndUploadOptions = {\n projectId: string | undefined;\n accept?: string;\n multiple?: boolean;\n maxBytes?: number;\n};\n\n/**\n * Opens a native file picker and uploads selected files to the Flexkit upload endpoint.\n * It also creates an asset node in the database.\n * Returns a list of uploaded file results. Skips files that exceed maxBytes.\n */\nasync function openFileDialogAndUpload(\n options: OpenFileDialogAndUploadOptions,\n createAssetNode?: (file: UploadedFileResult, projectId?: string) => Promise<void>\n): Promise<UploadedFileResult[]> {\n const { projectId, accept, multiple = true, maxBytes = 4 * 1024 * 1024 } = options;\n\n const input = document.createElement('input');\n input.type = 'file';\n const resolvedAccept = accept ?? ACCEPTED_MIME_TYPES.join(',');\n\n input.accept = resolvedAccept;\n input.multiple = multiple;\n input.style.display = 'none';\n document.body.appendChild(input);\n\n try {\n const files = await new Promise<FileList | null>((resolve) => {\n input.onchange = () => resolve(input.files);\n input.click();\n });\n\n if (!files || files.length === 0) {\n return [];\n }\n\n const validFiles: File[] = [];\n\n for (const file of Array.from(files)) {\n if (file.size > maxBytes) {\n toast.error(`File size too big (max ${(maxBytes / (1024 * 1024)).toFixed(0)}MB): ${file.name}`);\n\n continue;\n }\n\n validFiles.push(file);\n }\n\n const uploadUrl = apiPaths(projectId).upload;\n const uploads = await Promise.all(\n validFiles.map(async (file): Promise<UploadedFileResult> => {\n const dimensions = await readImageDimensions(file);\n\n const response = await fetch(uploadUrl, {\n method: 'POST',\n headers: { 'Content-Type': file.type || 'application/octet-stream' },\n body: file,\n });\n\n if (!response.ok) {\n throw new Error(`Upload failed for ${file.name}`);\n }\n\n const data = (await response.json()) as UploadResponse;\n\n const result: UploadedFileResult = {\n pathname: data.pathname,\n lqip: data.lqip,\n originalFilename: file.name,\n size: file.size,\n mimeType: file.type,\n width: dimensions?.width,\n height: dimensions?.height,\n };\n\n if (createAssetNode) {\n await createAssetNode(result, projectId);\n }\n\n return result;\n })\n );\n\n if (uploads.length > 0) {\n toast.success(`Uploaded ${uploads.length} file${uploads.length > 1 ? 's' : ''}`);\n }\n\n return uploads;\n } catch (error) {\n // eslint-disable-next-line no-console -- surface error for debugging\n console.error(error);\n toast.error('Upload failed. Please try again.');\n\n return [];\n } finally {\n document.body.removeChild(input);\n }\n}\n\nasync function readImageDimensions(file: File): Promise<{ width: number; height: number } | null> {\n const isImage = file.type.startsWith('image/');\n\n if (!isImage) {\n return null;\n }\n\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n const img = new Image();\n img.onload = () => {\n resolve({ width: img.width, height: img.height });\n };\n img.onerror = () => resolve(null);\n img.src = reader.result as string;\n };\n reader.onerror = () => resolve(null);\n reader.readAsDataURL(file);\n });\n}\n\n// Asset creation is delegated via the createAssetNode callback so callers can use Apollo useMutation\n\nexport function useUploadAssets(): (options: OpenFileDialogAndUploadOptions) => Promise<UploadedFileResult[]> {\n const createAsset = useCreateAssetMutation();\n\n return async (options: OpenFileDialogAndUploadOptions): Promise<UploadedFileResult[]> => {\n return openFileDialogAndUpload(options, async (file) => {\n const entityData: FormEntityItem = {\n path: { _id: '', disabled: false, scope: 'default', value: file.pathname },\n originalFilename: { _id: '', disabled: false, scope: 'default', value: file.originalFilename },\n size: { _id: '', disabled: false, scope: 'default', value: file.size as unknown as string },\n lqip: { _id: '', disabled: false, scope: 'default', value: file.lqip },\n mimeType: { _id: '', disabled: false, scope: 'default', value: file.mimeType },\n ...(typeof file.width === 'number'\n ? { width: { _id: '', disabled: false, scope: 'default', value: file.width as unknown as string } }\n : {}),\n ...(typeof file.height === 'number'\n ? { height: { _id: '', disabled: false, scope: 'default', value: file.height as unknown as string } }\n : {}),\n };\n\n await createAsset(entityData);\n });\n };\n}\n","import { AlertCircle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\n\nexport function ProjectDisabled(): JSX.Element {\n return (\n <Alert variant=\"destructive\">\n <AlertCircle className=\"fk-h-4 fk-w-4\" />\n <AlertTitle>Project Paused</AlertTitle>\n <AlertDescription>\n This project has been paused. To troubleshoot this error, please{' '}\n <a\n className=\"fk-text-blue-500 fk-underline\"\n href=\"https://flexkit.io/docs/errors/project-paused\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n follow these steps\n </a>\n .\n </AlertDescription>\n </Alert>\n );\n}\n","import { AlertCircle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\nimport { useGraphQLError } from '../../graphql-client/graphql-context';\n\nexport function SchemaError(): JSX.Element {\n const { schemaErrorMessage } = useGraphQLError();\n\n if (!schemaErrorMessage) {\n return <></>;\n }\n\n return (\n <Alert className=\"fk-mb-4\" variant=\"destructive\">\n <AlertCircle className=\"fk-h-4 fk-w-4\" />\n <AlertTitle>Schema Error</AlertTitle>\n <AlertDescription>\n There is an error in your Flexkit schema. Please check the schema configuration in your flexkit.config.ts file.\n <br />\n {schemaErrorMessage}\n </AlertDescription>\n </Alert>\n );\n}\n","import type { Config } from './types';\n\nexport function defineConfig<T extends Config>(config: T): T {\n return config;\n}\n","import type { Entity } from '../types';\n\nexport function defineEntity<T extends Entity>(entity: T): T {\n return entity;\n}\n","import * as React from 'react';\nimport { Check as CheckIcon, CirclePlus as CirclePlusIcon } from 'lucide-react';\nimport { Column } from '@tanstack/react-table';\nimport { cn } from '../ui/lib/utils';\nimport { Badge } from '../ui/primitives/badge';\nimport { Button } from '../ui/primitives/button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from '../ui/primitives/command';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/primitives/popover';\nimport { Separator } from '../ui/primitives/separator';\n\ninterface DataTableFacetedFilterProps<TData, TValue> {\n column?: Column<TData, TValue>;\n title?: string;\n options: {\n label: string;\n value: string;\n icon?: React.ComponentType<{ className?: string }>;\n }[];\n}\n\nexport function DataTableFacetedFilter<TData, TValue>({\n column,\n title,\n options,\n}: DataTableFacetedFilterProps<TData, TValue>) {\n const facets = column?.getFacetedUniqueValues();\n const selectedValues = new Set(column?.getFilterValue() as string[]);\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"fk-h-8 fk-border-dashed\">\n <CirclePlusIcon className=\"fk-mr-2 fk-h-4 fk-w-4\" />\n {title}\n {selectedValues?.size > 0 && (\n <>\n <Separator orientation=\"vertical\" className=\"fk-mx-2 fk-h-4\" />\n <Badge variant=\"secondary\" className=\"fk-rounded-sm fk-px-1 fk-font-normal lg:fk-hidden\">\n {selectedValues.size}\n </Badge>\n <div className=\"fk-space-x-1 lg:fk-flex\">\n {selectedValues.size > 2 ? (\n <Badge variant=\"secondary\" className=\"fk-rounded-sm fk-px-1 fk-font-normal\">\n {selectedValues.size} selected\n </Badge>\n ) : (\n options\n .filter((option) => selectedValues.has(option.value))\n .map((option) => (\n <Badge variant=\"secondary\" key={option.value} className=\"fk-rounded-sm fk-px-1 fk-font-normal\">\n {option.label}\n </Badge>\n ))\n )}\n </div>\n </>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"fk-w-[200px] fk-p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder={title} />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n <CommandGroup>\n {options.map((option) => {\n const isSelected = selectedValues.has(option.value);\n return (\n <CommandItem\n key={option.value}\n onSelect={() => {\n if (isSelected) {\n selectedValues.delete(option.value);\n } else {\n selectedValues.add(option.value);\n }\n const filterValues = Array.from(selectedValues);\n column?.setFilterValue(filterValues.length ? filterValues : undefined);\n }}\n >\n <div\n className={cn(\n 'fk-mr-2 fk-flex fk-h-4 fk-w-4 fk-items-center fk-justify-center fk-rounded-sm fk-border fk-border-primary',\n isSelected ? 'fk-bg-primary fk-text-primary-foreground' : 'fk-opacity-50 [&_svg]:fk-invisible'\n )}\n >\n <CheckIcon className={cn('h-4 w-4')} />\n </div>\n {option.icon && <option.icon className=\"fk-mr-2 fk-h-4 fk-w-4 fk-text-muted-foreground\" />}\n <span>{option.label}</span>\n {facets?.get(option.value) && (\n <span className=\"fk-ml-auto fk-flex fk-h-4 fk-w-4 fk-items-center fk-justify-center fk-font-mono fk-text-xs\">\n {facets.get(option.value)}\n </span>\n )}\n </CommandItem>\n );\n })}\n </CommandGroup>\n {selectedValues.size > 0 && (\n <>\n <CommandSeparator />\n <CommandGroup>\n <CommandItem\n onSelect={() => column?.setFilterValue(undefined)}\n className=\"fk-justify-center fk-text-center\"\n >\n Clear filters\n </CommandItem>\n </CommandGroup>\n </>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n","'use client';\n\nimport { Ellipsis, Pencil, Trash2 } from 'lucide-react';\nimport type { Row } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\nimport { useDispatch } from '../entities/actions-context';\n\ninterface DataTableRowActionsProps<TData> {\n entityName: string;\n entityNamePlural: string;\n row: Row<TData>;\n options?: {\n canDelete?: boolean;\n canEdit?: boolean;\n };\n}\n\nexport function DataTableRowActions<TData>({\n entityName,\n entityNamePlural,\n row,\n options = { canDelete: true, canEdit: true },\n}: DataTableRowActionsProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const entityId = row.original._id;\n\n function handleEdit(): void {\n actionDispatch({ type: 'EditEntity', payload: { entityId, entityNamePlural } });\n }\n\n function handleDelete(): void {\n actionDispatch({ type: 'DeleteEntity', payload: { entityId, entityName } });\n }\n\n return (\n <div className=\"fk-flex\">\n {options.canEdit && (\n <Button className=\"fk-flex fk-h-7 fk-w-7 fk-p-0 fk-mr-1\" onClick={handleEdit} variant=\"ghost\">\n <Pencil className=\"fk-h-4 fk-w-4\" />\n <span className=\"fk-sr-only\">Edit</span>\n </Button>\n )}\n {options.canDelete && !options.canEdit && (\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 )}\n {options.canEdit && options.canDelete && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk-flex fk-h-7 fk-w-7 fk-p-0\" variant=\"ghost\">\n <Ellipsis className=\"fk-h-4 fk-w-4\" />\n <span className=\"fk-sr-only\">Additional actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[160px]\">\n <DropdownMenuItem onClick={handleEdit}>Edit</DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={handleDelete}>Delete</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { Settings2 } from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTableViewOptions<TData>({ table }: DataTableViewOptionsProps<TData>): JSX.Element {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk-hidden fk-h-8 lg:fk-flex\" size=\"sm\" variant=\"outline\">\n <Settings2 className=\"fk-mr-2 fk-h-4 fk-w-4\" />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk-w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n checked={column.getIsVisible()}\n className=\"capitalize\"\n key={column.id}\n onCheckedChange={(value) => {\n column.toggleVisibility(Boolean(value));\n }}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { find, propEq } from 'ramda';\nimport type { Table } from '@tanstack/react-table';\nimport { Loader2, Trash2 } from 'lucide-react';\nimport { gql } from '@apollo/client';\nimport { toast } from 'sonner';\nimport { Button } from '../ui/primitives/button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/primitives/select';\nimport { useDispatch } from '../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport { useConfig } from '../core/config/config-context';\nimport type { SingleProject } from '../core/config/types';\nimport { DataTableViewOptions } from './data-table-view-options';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityDeleteMutation } from '../graphql-client/queries';\n\ninterface DataTableToolbarProps<TData> {\n entityName: string;\n table: Table<TData>;\n}\n\nexport function DataTableToolbar<TData>({ entityName, table }: DataTableToolbarProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const appContext = useAppContext();\n const { projects, currentProjectId } = useConfig();\n const { scopes } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const [runMutation, setMutation, setOptions] = useEntityMutation();\n const [isDeleting, setIsDeleting] = useState(false);\n\n // Collect selected entity ids from the table\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const selectedIds: string[] = table.getSelectedRowModel().rows.map((row) => row.original._id as string);\n\n function handleCreate(): void {\n actionDispatch({ type: 'AddEntity', payload: { entityName } });\n }\n\n function handleScopeChange(value: string): void {\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope: value } });\n }\n\n async function deleteOne(_id: string): Promise<void> {\n const { schema } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const mutation = getEntityDeleteMutation(entityName, schema, _id);\n\n await new Promise<void>((resolve) => {\n setMutation(gql`\n ${mutation}\n `);\n\n setOptions({\n variables: { where: { _id } },\n update(cache: { evict: (arg0: { id: string }) => void }) {\n cache.evict({ id: _id });\n },\n onCompleted: () => {\n resolve();\n },\n });\n\n runMutation(true);\n });\n }\n\n function handleBatchDelete(): void {\n const itemLabel = entityName === '_asset' ? 'asset' : entityName.toLowerCase();\n\n actionDispatch({\n type: 'AlertDialog',\n payload: {\n options: {\n dialogTitle: `Delete ${selectedIds.length} ${itemLabel}${selectedIds.length > 1 ? 's' : ''}`,\n dialogMessage:\n selectedIds.length > 1\n ? `Are you sure you want to delete the selected ${itemLabel}s? They will be deleted permanently.`\n : `Are you sure you want to delete the selected ${itemLabel}? The item will be deleted permanently.`,\n dialogCancelTitle: 'Cancel',\n dialogActionLabel: 'Delete',\n isDestructive: true,\n dialogActionSubmit: async () => {\n setIsDeleting(true);\n try {\n for (const id of selectedIds) {\n // eslint-disable-next-line no-await-in-loop\n await deleteOne(id);\n }\n\n table.resetRowSelection();\n\n toast.success(selectedIds.length > 1 ? 'Items successfully deleted.' : 'Item successfully deleted.');\n } catch {\n toast.error('Failed to delete selected items.');\n } finally {\n setIsDeleting(false);\n }\n },\n dialogActionCancel: () => {\n // no-op\n },\n },\n },\n });\n }\n\n return (\n <div className=\"fk-flex fk-items-center fk-justify-between\">\n <div className=\"fk-flex fk-flex-1 fk-items-center fk-space-x-2\">\n {scopes && scopes.length > 0 ? (\n <Select\n defaultValue={appContext.scope}\n onValueChange={(value) => {\n handleScopeChange(value);\n }}\n value={appContext.scope}\n >\n <SelectTrigger className=\"fk-w-[12rem] fk-h-8\" id=\"project\">\n <span className=\"fk-text-muted-foreground\">Scope:</span>\n <SelectValue>\n {\n ((find(propEq(appContext.scope ?? '', 'name'))(scopes) as { name: string; label: string }) || null)\n ?.label\n }\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 <DataTableViewOptions table={table} />\n </div>\n {selectedIds.length > 0 ? (\n <Button\n className=\"fk-h-8 fk-mr-2 lg:fk-flex\"\n disabled={isDeleting}\n onClick={handleBatchDelete}\n size=\"sm\"\n variant=\"destructive\"\n >\n {isDeleting ? (\n <Loader2 className=\"fk-mr-2 fk-h-4 fk-w-4 fk-animate-spin\" />\n ) : (\n <Trash2 className=\"fk-mr-2 fk-h-4 fk-w-4\" />\n )}\n Delete ({selectedIds.length})\n </Button>\n ) : null}\n <Button\n className=\"fk-ml-auto fk-h-8 lg:fk-flex\"\n disabled={isDeleting}\n onClick={handleCreate}\n size=\"sm\"\n variant=\"default\"\n >\n Create\n </Button>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/theme-context.tsx","../src/ui/components/dark-mode-switch.tsx","../src/ui/components/loading.tsx","../src/ui/primitives/alert.tsx","../src/auth/email.tsx","../src/auth/login.tsx","../src/core/error/errors.ts","../src/ui/primitives/sonner.tsx","../src/ui/containers/appbar.tsx","../src/core/use-contributed-component.tsx","../src/ui/containers/navbar.tsx","../src/ui/containers/layout.tsx","../src/graphql-client/error-utils.ts","../src/graphql-client/graphql-context.tsx","../src/ui/primitives/alert-dialog.tsx","../src/ui/components/alert-dialog.tsx","../src/entities/actions-context.tsx","../src/graphql-client/queries.ts","../src/graphql-client/use-entity-mutation.ts","../src/entities/delete.tsx","../src/ui/primitives/drawer.tsx","../src/ui/components/drawer-modal.tsx","../src/ui/drawer-modal-context.tsx","../src/ui/primitives/collapsible.tsx","../src/ui/hooks/use-outer-click.ts","../src/form/fields/uploader.tsx","../src/form/fields/number.tsx","../src/ui/primitives/popover.tsx","../src/ui/primitives/calendar.tsx","../src/form/fields/datetime.tsx","../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/data-grid/preview-components/tags.tsx","../src/data-grid/columns.tsx","../src/data-grid/data-table.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/form/fields/undefined-field-type-error.tsx","../src/form/form-builder.tsx","../src/entities/add-entity.tsx","../src/graphql-client/use-entity-query.ts","../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/containers/root.tsx","../src/core/error/global-error.tsx","../src/core/error/error-boundary.tsx","../src/core/flexkit-studio.tsx","../src/core/upload.ts","../src/core/error/project-disabled.tsx","../src/core/error/schema-error.tsx","../src/core/config/define-config.ts","../src/core/config/define-entity.ts","../src/data-grid/data-table-faceted-filter.tsx","../src/data-grid/data-table-row-actions.tsx","../src/data-grid/data-table-view-options.tsx","../src/data-grid/data-table-toolbar.tsx"],"names":["ThemeProvider","children","props","mounted","setMounted","useState","useEffect","jsx","NextThemesProvider","Fragment","DarkModeSwitch","theme","setTheme","useTheme","jsxs","ToggleGroup","ToggleGroupItem","Moon","Sun","Monitor","Loading","resolvedTheme","alertVariants","cva","Alert","Ao","className","variant","ref","cn","AlertTitle","AlertDescription","formSchema","EmailLogin","projectId","setIsEmailLogin","hasOtpExpired","setHasOtpExpired","shouldSendOtp","setShouldSendOtp","mutate","useSWRConfig","form","useForm","zodResolver","sendOtpUrl","apiPaths","baseApiUrl","data","error","isLoading","useSWR","url","res","errorCode","hasOtpBeenSent","token","calls","interval","confirmOtpUrl","setTokenUrl","confirmationResponse","handleEmailLogin","Button","Form","event","FormField","field","FormItem","FormControl","Input","FormMessage","Loader2","Mail","Login","projects","useConfig","selectedProject","setSelectedProject","project","isEmailLogin","isAuthLoading","auth","useAuth","copyrightYear","currentRouterLocation","useLocation","referal","fromPath","Navigate","Label","Select","id","SelectTrigger","SelectValue","SelectContent","SelectItem","provider","composeLoginHref","basePath","params","FLEXKIT_ERROR_CODES","FLEXKIT_ERROR_MESSAGES","FlexkitError","_FlexkitError","code","message","isFlexkitError","maybeCode","getFlexkitErrorCode","Toaster","Sonner","AppBar","apps","version","appBarHeight","setAppBarHeight","visibleApps","setVisibleApps","additionalApps","setAdditionalApps","appBar","useRef","location","useParams","currentAppSegmentPath","app","activeApp","resizeObserver","availableAppSlots","_visibleApps","_activeApp","_additionalApps","TooltipProvider","Tooltip","TooltipTrigger","NavLink","TooltipContent","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","Settings","Link","Wrench","DropdownMenuSeparator","PackageCheck","PackageX","contributionPointMap","lazy","Logo","ProjectSelector","Search","UserNav","Switch","Text","Textarea","Boolean","Asset","Editor","DateTime","useContributedComponent","contributionPoint","getContributionPointConfig","section","pathParts","defaultComponent","contributionPointConfig","Navbar","currentProject","schema","navigate","useNavigate","handleSearchSelection","item","startTransition","Suspense","Layout","contributions","find","propEq","scopes","appDispatch","useAppDispatch","defaultScope","s","savedScope","SCOPE_STORAGE_KEY","Outlet","hasCause","getServerError","ServerError","possibleServerError","parseErrorBody","bodyText","GraphQLErrorContext","createContext","useGraphQLError","ctx","useContext","createErrorLink","setSchemaErrorMessage","ErrorLink","CombinedGraphQLErrors","locations","path","CombinedProtocolErrors","extensions","serverError","responseBody","firstError","additiveLink","currentProjectId","from","HttpLink","client","ApolloClient","InMemoryCache","responseObject","defaultDataIdFromObject","GraphQLProvider","schemaErrorMessage","useMemo","ApolloProvider","AlertDialog","AlertDialogPortal","AlertDialogOverlay","AlertDialogContent","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","buttonVariants","AlertDialogCancel","options","isOpen","setIsOpen","isSubmitting","setIsSubmitting","isClosingFromSubmit","setIsClosingFromSubmit","handleClose","handleAction","maybePromise","ActionsContext","EntityDispatchContext","actionsReducer","actions","action","actionType","uniqBy","ActionsProvider","entityActions","dispatchEntityActions","useReducer","useActions","useDispatch","stringTypes","temporalTypes","getEntityQuery","entityNamePlural","scope","filters","entitySchema","getEntitySchema","entityName","attributes","heading","globalAttributesList","getAttributeListByScope","imageAttributes","getImageAttributes","localAttributes","defaultScopedAttr","acc","attribute","scopedAttribute","localAttributesList","imageAttributesList","relationshipAttributesList","filter","attributesNameList","relatedAcc","relatedAttribute","additionalScope","relationshipEntity","localAttributeQuery","mapQueryResult","results","count","items","sliceFirstThreeItems","values","primaryAttribute","primaryAttributeName","mappedQueryResult","entity","_id","globalAttributes","attributeName","relationshipAttributes","relatedEntityName","relatedEntity","getPrimaryAttribute","primaryAttributeScope","localValue","value","mapQueryResultForFormFields","attributeSchema","localAttribute","getValueByScope","aggregateCount","result","attr","option","getEntityUpdateMutation","entityId","originalData","dataToMutate","pluralizedEntityName","capitalize","filterOutInvalidAttributes","globalAttributesUpdate","localAttributesUpdate","imageAttributesUpdate","relationshipAttributesUpdate","responseType","attributeNamesList","formatResponseFieldsForMutation","nonUpdatableAttributes","omit","pick","type","attributeType","schemaAttributes","toPairs","typedValue","stringifyValue","attributeValue","imageValue","imagePath","imageSize","imageMimeType","originalFilename","height","width","lqip","dataType","inputType","relationship","disconnect","connect","nodesToDisconnect","disconnectString","nodesToConnect","connectString","node","globalAttributesArray","localAttributesArray","relationshipAttributesArray","fields","relationshipAttribute","relationshipMode","relationshipEntityName","relationshipEntityAttributes","list","multipleRelationshipAttributes","str","getEntityDeleteMutation","localAttributesDelete","getEntityCreateMutation","entityData","localAttributesCreate","relationshipAttributesCreate","isMultipleRelationship","hasRelationships","getRelatedItemsQuery","queryEntityName","getAssetCreateMutation","assetSchema","uuidv4","tagSchema","useCreateAssetMutation","apolloClient","useApolloClient","mutation","gql","useEntityMutation","runMutation","setRunMutation","setMutation","setOptions","mutateFunction","loading","useMutation","isProjectDisabled","isProjectReadOnly","Delete","handleDeletion","dialogOptions","resolve","cache","toast","Drawer","shouldScaleBackground","DrawerPrimitive","DrawerPortal","DrawerOverlay","Kt","DrawerContent","DrawerHeader","DrawerTitle","DrawerDescription","DrawerModal","beforeClose","depth","isFocused","onFormChange","onClose","title","gutter","useCallback","onEscapeKeyPressed","Skeleton","CloseIcon","Separator","DrawerModalContext","_flag","DrawerModalProvider","dirty","setDirty","flag","useDrawerModalContext","Collapsible","CollapsibleContent","CollapsiblePrimitive","useOuterClick","callback","excludeSelectors","handleClickOutside","excludedElements","element","handleFocusOutside","FileTypeIconCompat","FileTypeIcon","Uploader","control","fieldSchema","getValues","setValue","name","label","isEditable","inputFile","wrapperRef","base64PreviewImage","setBase64PreviewImage","dragActive","setDragActive","saving","setSaving","useId","getExtensionFromMime","mime","map","parts","sub","getFileExtension","ext","fromMime","handleInput","file","previousValue","fileSizeLimit","bytes","isImage","reader","e","img","handleClearing","handleCopyUrl","fieldValue","IMAGES_BASE_URL","handleUpload","handleDownload","FormLabel","FormDescription","ImageIcon","UploadIcon","SearchIcon","style","defaultStyles","FileOutlineIcon","EllipsisIcon","DropdownMenuGroup","DownloadIcon","CopyIcon","ClearFieldIcon","Maximize2","ClearIcon","Number","rawValue","parsedValue","handleCheckbox","checked","DefaultValueSwitch","Popover","PopoverTrigger","PopoverContent","Hi","align","sideOffset","Calendar","classNames","showOutsideDays","captionLayout","buttonVariant","formatters","components","defaultClassNames","getDefaultClassNames","DayPicker","date","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","day","modifiers","Oo","handleSelect","format","CalendarIcon","timeValue","hours","minutes","suggestionItems","createSuggestionItems","editor","range","CheckSquare","Heading1","Heading2","Heading3","List","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","LinkSelector","inputRef","target","Trash","TextIcon","NodeSelector","activeItem","MathSelector","evt","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","slice","text","pos","getPrevText","StepForward","AISelector","inputValue","setInputValue","complete","useCompletion","init","response","hasCompletion","ScrollArea","Markdown","CommandInput","addAIHighlight","ArrowUp","CommandList","GenerativeMenuSwitch","removeAIHighlight","EditorBubble","defaultExtensions","isJSONContent","maybe","parseEditorValue","trimmed","parsed","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","Tags","tag","Badge","useGridColumnsDefinition","attributesSchema","checkboxSelect","actionsComponent","inputTypeToPreviewFieldMap","previewFieldComponentsMap","cols","previewType","previewComponent","isTagsPreview","row","column","singleCheckboxSelect","table","Checkbox","multipleCheckboxSelect","inferRowHeightEstimate","rowClassName","DataTable","columns","initialSelectionState","onEntitySelectionChange","onScroll","pageSize","rowHeightEstimate","rowAdditionState","rowDeletionState","toolbarComponent","scrollRef","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","columnFilters","setColumnFilters","sorting","setSorting","useReactTable","handleRowSelectionChange","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getRowClassnames","rows","rowVirtualizer","useVirtualizer","virtualItems","totalSize","updaterFn","selectedIds","Table","TableHeader","headerGroup","TableRow","header","TableHead","flexRender","TableBody","virtualRow","cell","TableCell","line","DataTableRowActions","handleDelete","Trash2","PAGE_SIZE","MultipleRelationship","setRows","actionDispatch","relationships","useAppContext","fieldId","relationshipId","relationshipEntitySchema","relationshipEntityAttributesSchema","baseEntityName","connectionName","relationshipAttributeMode","connectionAttributeName","getPrimaryAttributeName","initialRows","dataAdapter","entityQuery","previewItems","getData","useLazyQuery","dataRowActions","selectedRows","prop","fetchMoreOnBottomReached","containerRefElement","totalCount","scrollHeight","scrollTop","clientHeight","mappedData","handleSelection","disconnectEntity","connectedEntities","rowToDeleteWasJustConnected","shouldUndoDisconnection","disconnection","uniq","rowItem","relationshipFieldName","SingleRelationship","hasFocus","setHasFocus","displayValue","ChevronsUpDown","Relationship","formFieldParams","AlertTriangle","castedValue","SelectGroup","SelectLabel","UndefinedFieldTypeError","FormBuilder","currentScope","formData","setIsDirty","onSubmit","validationSchema","z","handleSubmit","watch","trigger","formState","errors","formFieldComponentsMap","useImperativeHandle","hasDataChanged","formChangesSubscription","changedData","fieldComponent","createElement","form_builder_default","memo","forwardRef","originalFormData","normalizeComparisonValue","sortAlphabetically","a","b","newData","equals","AddEntity","dispatch","mutationData","handleBeforeClose","handleSave","saveEntity","refreshQuery","useEntityQuery","variables","isForm","setResult","fetchNextPage","useQuery","mappedResults","mapResults","fetchMore","args","mappedFetchMoreResults","prevRows","ReadOnlyMode","AlertCircle","SaveButton","isDirty","_","i","EditEntity","setCurrentScope","setFormIsDirty","handleScopeChange","previousData","getEntityIdentifier","isRelationship","entityIdentifier","scopeItem","getLoadingColumns","EditRelationship","connectedEntitiesCount","mode","entityLabel","relationshipContext","searchResultIds","setSearchResultIds","setSelectedRows","filterOutConnectedEntities","conditionalWhereClause","loadingData","loadingColumns","rowsCount","selected","handleSelectionChange","prevSelected","existingSelections","valueFromData","handleCreateEntity","SearchBar","search","setSearch","getBaseSearchRequest","searchRequest","searchQuery","setSearchQuery","useSearch","prevResultsRef","debouncedSetSearchQuery","debounce","query","currentResultsString","r","prevResultsString","handleSearchChange","LoaderCircle","fn","ms","timeoutId","ActionsManager","editActions","latestModalId","payload","Root","config","defaultApp","AuthProvider","ConfigProvider","GlobalError","useRouteError","errorMessage","isRouteErrorResponse","ErrorBoundary","errorText","FlexkitStudio","log","debug","configArray","mapConfig","getApps","router","createBrowserRouter","route","child","AppProvider","RouterProvider","ACCEPTED_MIME_TYPES","openFileDialogAndUpload","createAssetNode","accept","multiple","maxBytes","resolvedAccept","files","validFiles","uploadUrl","uploads","dimensions","readImageDimensions","useUploadAssets","createAsset","ProjectDisabled","SchemaError","defineConfig","defineEntity","DataTableFacetedFilter","facets","selectedValues","CirclePlusIcon","CommandEmpty","isSelected","filterValues","CheckIcon","handleEdit","Pencil","Ellipsis","DataTableViewOptions","Settings2","DropdownMenuLabel","DropdownMenuCheckboxItem","DataTableToolbar","appContext","isDeleting","setIsDeleting","handleCreate","deleteOne","handleBatchDelete","itemLabel"],"mappings":"yrJAMO,SAASA,EAAAA,CAAc,CAAE,QAAA,CAAAC,CAAAA,CAAU,GAAGC,CAAM,CAAA,CAAoC,CACrF,GAAM,CAACC,CAAAA,CAASC,CAAU,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAM5C,OAJAC,SAAAA,CAAU,IAAM,CACdF,CAAAA,CAAW,IAAI,EACjB,CAAA,CAAG,EAAE,CAAA,CAEAD,CAAAA,CAIEI,GAAAA,CAACC,cAAA,CAAoB,GAAGN,CAAAA,CAAQ,QAAA,CAAAD,CAAAA,CAAS,CAAA,CAHvCM,GAAAA,CAAAE,QAAAA,CAAA,CAAG,QAAA,CAAAR,CAAAA,CAAS,CAIvB,CCbO,SAASS,EAAAA,EAAqC,CACnD,GAAM,CAACP,CAAAA,CAASC,CAAU,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CACtC,CAAE,KAAA,CAAAM,CAAAA,CAAO,QAAA,CAAAC,CAAS,CAAA,CAAIC,QAAAA,EAAS,CAMrC,OAJAP,SAAAA,CAAU,IAAM,CACdF,CAAAA,CAAW,IAAI,EACjB,CAAA,CAAG,EAAE,CAAA,CAEAD,CAAAA,CAKHW,IAAAA,CAACC,GAAAA,CAAA,CAAY,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,KAAA,CAAOJ,CAAAA,CAC1C,QAAA,CAAA,CAAAJ,GAAAA,CAACS,GAAAA,CAAA,CACC,YAAA,CAAW,eAAA,CACX,OAAA,CAAS,IAAM,CACbJ,CAAAA,CAAS,MAAM,EACjB,CAAA,CACA,KAAA,CAAM,MAAA,CAEN,QAAA,CAAAL,GAAAA,CAACU,IAAAA,CAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,EAClC,CAAA,CACAV,GAAAA,CAACS,GAAAA,CAAA,CACC,YAAA,CAAW,gBAAA,CACX,OAAA,CAAS,IAAM,CACbJ,CAAAA,CAAS,OAAO,EAClB,CAAA,CACA,KAAA,CAAM,OAAA,CAEN,QAAA,CAAAL,GAAAA,CAACW,GAAAA,CAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,CAAA,CACjC,CAAA,CACAX,GAAAA,CAACS,GAAAA,CAAA,CACC,YAAA,CAAW,iBAAA,CACX,OAAA,CAAS,IAAM,CACbJ,CAAAA,CAAS,QAAQ,EACnB,CAAA,CACA,KAAA,CAAM,QAAA,CAEN,QAAA,CAAAL,GAAAA,CAACY,OAAAA,CAAA,CAAQ,SAAA,CAAU,eAAA,CAAgB,CAAA,CACrC,CAAA,CAAA,CACF,CAAA,CAhCO,IAkCX,CC9CO,SAASC,EAAAA,EAAuB,CACrC,GAAM,CAAE,aAAA,CAAAC,CAAc,EAAIR,QAAAA,EAAS,CAEnC,OACEN,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gFAAA,CACb,QAAA,CAAAO,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CACZ,QAAA,CAAA,CAAAO,CAAAA,GAAkB,MAAA,CACjBP,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,iCAAA,CACV,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,WAAA,CACR,KAAA,CAAM,4BAAA,CAEN,QAAA,CAAA,CAAAP,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,iBAAA,CAAkB,IAAA,CAAK,SAAA,CAAU,CAAA,CACzCA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,sRAAA,CACF,IAAA,CAAK,OAAA,CACP,CAAA,CAAA,CACF,CAAA,CAEAO,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,iCAAA,CACV,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,WAAA,CACR,KAAA,CAAM,4BAAA,CAEN,QAAA,CAAA,CAAAP,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,iBAAA,CAAkB,IAAA,CAAK,OAAA,CAAQ,CAAA,CACvCA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,sRAAA,CACF,IAAA,CAAK,UACP,CAAA,CAAA,CACF,CAAA,CAEFA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CAA6D,QAAA,CAAA,YAAA,CAAU,CAAA,CAAA,CACxF,CAAA,CACF,CAEJ,CCnCA,IAAMe,EAAAA,CAAgBC,GAAAA,CACpB,4LAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CACP,OAAA,CAAW,qCAAA,CACX,WAAA,CAAa,6FAAA,CACb,OAAA,CAAS,iFACX,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SACX,CACF,CACF,CAAA,CAEMC,CAAAA,CAAcC,EAAA,CAAA,UAAA,CAGlB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,OAAA,CAAAC,CAAAA,CAAS,GAAGzB,CAAM,CAAA,CAAG0B,CAAAA,GACnCrB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWsB,CAAAA,CAAGP,EAAAA,CAAc,CAAE,OAAA,CAAAK,CAAQ,CAAC,CAAA,CAAGD,CAAS,CAAA,CAAG,GAAA,CAAKE,CAAAA,CAAK,IAAA,CAAK,OAAA,CAAS,GAAG1B,CAAAA,CAAO,CAC9F,CAAA,CACDsB,CAAAA,CAAM,WAAA,CAAc,OAAA,CAEpB,IAAMM,EAAAA,CAAmBL,EAAA,CAAA,UAAA,CACvB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAG0B,CAAAA,GAExBrB,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAWsB,CAAAA,CAAG,0DAAA,CAA4DH,CAAS,CAAA,CAAG,GAAA,CAAKE,CAAAA,CAAM,GAAG1B,EAAO,CAEnH,CAAA,CACA4B,EAAAA,CAAW,WAAA,CAAc,YAAA,CAEzB,IAAMC,CAAAA,CAAyBN,EAAA,CAAA,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAG0B,CAAAA,GACxBrB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWsB,CAAAA,CAAG,qCAAA,CAAuCH,CAAS,CAAA,CAAG,GAAA,CAAKE,CAAAA,CAAM,GAAG1B,CAAAA,CAAO,CAE/F,CAAA,CACA6B,CAAAA,CAAiB,WAAA,CAAc,kBAAA,CC1B/B,IAAMC,EAAAA,CAAe,EAAA,CAAA,MAAA,CAAO,CAC1B,KAAA,CAAS,EAAA,CAAA,MAAA,EAAO,CAAE,KAAA,CAAM,CAAE,OAAA,CAAS,oCAAqC,CAAC,CAC3E,CAAC,CAAA,CAEc,SAARC,EAAAA,CAA4B,CACjC,SAAA,CAAAC,GAAAA,CACA,eAAA,CAAAC,CACF,CAAA,CAGgB,CACd,GAAM,CAACC,CAAAA,CAAeC,CAAgB,CAAA,CAAIhC,QAAAA,CAAS,KAAK,CAAA,CAClD,CAACiC,CAAAA,CAAeC,CAAgB,CAAA,CAAIlC,QAAAA,CAAS,KAAK,CAAA,CAClD,CAAE,MAAA,CAAAmC,CAAO,CAAA,CAAIC,YAAAA,EAAa,CAC1BC,CAAAA,CAAOC,OAAAA,CAAoC,CAC/C,QAAA,CAAUC,WAAAA,CAAYZ,EAAU,CAAA,CAChC,aAAA,CAAe,CACb,KAAA,CAAO,EACT,CACF,CAAC,CAAA,CACKa,CAAAA,CAAa,IAAI,GAAA,CAAIC,GAAAA,CAASZ,GAAS,CAAA,CAAE,YAAA,CAAca,GAAU,CAAA,CACjE,CAAE,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAC,GAAAA,CAAO,SAAA,CAAAC,CAAU,CAAA,CAAIC,EAAAA,CACjCb,CAAAA,CAAgBO,CAAAA,CAAW,IAAA,CAAO,IAAA,CACjCO,CAAAA,EACC,KAAA,CAAMA,CAAAA,CAAK,CAAE,MAAA,CAAQ,MAAA,CAAQ,IAAA,CAAM,MAAA,CAAQ,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,KAAA,CAAOV,CAAAA,CAAK,SAAA,CAAU,OAAO,CAAE,CAAC,CAAE,CAAC,CAAA,CAAE,IAAA,CACpGW,CAAAA,EAAQA,CAAAA,CAAI,IAAA,EACf,CAAA,CACF,CACE,iBAAA,CAAmB,KAAA,CACnB,iBAAA,CAAmB,KAAA,CACnB,qBAAA,CAAuB,KAAA,CACvB,kBAAA,CAAoB,KACtB,CACF,CAAA,CACMC,CAAAA,CAAYN,CAAAA,EAAQ,OAAA,GAAWA,CAAAA,EAAQA,CAAAA,CAAK,KAAA,CAAM,IAAA,CAClDO,CAAAA,CAAiBP,CAAAA,EAAQ,OAAA,GAAWA,CAAAA,CACpCQ,CAAAA,CAAQR,CAAAA,EAAQ,OAAA,GAAWA,CAAAA,CAAOA,CAAAA,CAAK,KAAA,CAAQ,EAAA,CAErD1C,SAAAA,CAAU,IAAM,CACd,GAAI,CAACiD,CAAAA,CACH,OAGF,IAAIE,CAAAA,CAAQ,CAAA,CACNC,CAAAA,CAAW,WAAA,CAAY,IAAM,CAGjC,GAAID,CAAAA,CAAQ,GAAA,CAAK,CACf,aAAA,CAAcC,CAAQ,EACtBrB,CAAAA,CAAiB,IAAI,CAAA,CAErB,MACF,CAEA,IAAMsB,CAAAA,CAAgB,IAAI,GAAA,CAAIb,GAAAA,CAASZ,GAAS,CAAA,CAAE,eAAA,CAAiBa,GAAU,CAAA,CACvEa,CAAAA,CAAc,wBAAA,CACpB,KAAA,CAAM,CAAA,EAAGD,CAAAA,CAAc,IAAI,CAAA,OAAA,EAAUjB,CAAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,OAAA,EAAUc,CAAK,CAAA,CAAE,CAAA,CAC1E,IAAA,CAAMH,CAAAA,EAAQ,CACTA,CAAAA,CAAI,MAAA,GAAW,GAAA,EAEjBA,CAAAA,CACG,IAAA,EAAK,CACL,IAAA,CAAMQ,CAAAA,EAA0C,CAC/C,KAAA,CAAMD,CAAAA,CAAa,CACjB,MAAA,CAAQ,MAAA,CACR,OAAA,CAAS,CACP,cAAA,CAAgB,kBAClB,CAAA,CACA,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,GAAA,CAAKC,CAAAA,CAAqB,GAAI,CAAC,CACxD,CAAC,CAAA,CACE,IAAA,CAAK,IAAM,CACV,MAAA,CAAO,QAAA,CAAS,MAAA,GAClB,CAAC,CAAA,CACA,KAAA,CAAM,IAAM,CAEb,CAAC,EACL,CAAC,CAAA,CACA,KAAA,CAAM,IAAM,CAEb,CAAC,EAEP,CAAC,CAAA,CACA,KAAA,CAAM,IAAM,CAEb,CAAC,CAAA,CACHJ,CAAAA,GACF,CAAA,CAAG,GAAI,CAAA,CAEP,OAAO,IAAM,CACX,aAAA,CAAcC,CAAQ,EACxB,CACF,CAAA,CAAG,CAAChB,CAAAA,CAAMa,CAAAA,CAAgBrB,GAAAA,CAAWsB,CAAK,CAAC,CAAA,CAE3C,SAASM,CAAAA,EAAyB,CAChCzB,CAAAA,CAAiB,KAAK,CAAA,CACtBE,CAAAA,CAAiB,IAAI,CAAA,CAChBC,CAAAA,CAAOK,CAAAA,CAAW,IAAI,EAC7B,CAEA,OACEtC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACZ,QAAA,CAAAgD,EACChD,GAAAA,CAACiB,CAAAA,CAAA,CAAM,OAAA,CAAQ,SAAA,CACb,QAAA,CAAAV,IAAAA,CAACiB,CAAAA,CAAA,CAAiB,QAAA,CAAA,CAAA,uEAAA,CACsD,GAAA,CACtExB,GAAAA,CAAC,QAAA,CAAA,CAAQ,QAAA,CAAAmC,CAAAA,CAAK,SAAA,CAAU,OAAO,CAAA,CAAE,CAAA,CAAS,IAAA,CAC1CnC,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,mDAAA,CACV,OAAA,CAAS,IAAM,CACb,MAAA,CAAO,QAAA,CAAS,MAAA,GAClB,CAAA,CACA,OAAA,CAAQ,MAAA,CACT,QAAA,CAAA,MAAA,CAED,CAAA,CAAS,GAAA,CAAA,CAEX,CAAA,CACF,CAAA,CAEAxD,GAAAA,CAACyD,CAAAA,CAAA,CAAM,GAAGtB,CAAAA,CACR,QAAA,CAAA5B,IAAAA,CAAC,MAAA,CAAA,CACC,QAAA,CAAWmD,CAAAA,EAAO,CAAQvB,CAAAA,CAAK,YAAA,CAAaoB,CAAgB,CAAA,CAAEG,CAAK,EAAA,CAAA,CACnE,SAAA,CAAU,iCAAA,CAET,QAAA,CAAA,CAAAX,CAAAA,GAAc,YAAA,EACb/C,GAAAA,CAACiB,CAAAA,CAAA,CAAM,OAAA,CAAQ,aAAA,CACb,QAAA,CAAAV,IAAAA,CAACiB,CAAAA,CAAA,CAAiB,QAAA,CAAA,CAAA,iEAAA,CACgD,GAAA,CAChExB,GAAAA,CAAC,GAAA,CAAA,CACC,SAAA,CAAU,qDAAA,CACV,IAAA,CAAM,CAAA,sCAAA,EAAyCmC,CAAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,CAAA,CACvE,QAAA,CAAA,UAAA,CAED,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAEDY,CAAAA,GAAc,eAAA,EAAmBL,GAAAA,CAChC1C,GAAAA,CAACiB,CAAAA,CAAA,CAAM,OAAA,CAAQ,aAAA,CACb,QAAA,CAAAV,IAAAA,CAACiB,CAAAA,CAAA,CAAiB,QAAA,CAAA,CAAA,oCAAA,CACmB,GAAA,CACnCxB,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,2BAAA,CACV,OAAA,CAAS,IAAM,CACb,MAAA,CAAO,QAAA,CAAS,MAAA,GAClB,CAAA,CACA,OAAA,CAAQ,MAAA,CACT,QAAA,CAAA,WAAA,CAED,CAAA,CAAS,GAAA,CACP,GAAA,CAAA,CACJ,CAAA,CACF,CAAA,CACE,IAAA,CACH3B,CAAAA,CACC7B,GAAAA,CAACiB,CAAAA,CAAA,CAAM,OAAA,CAAQ,cACb,QAAA,CAAAV,IAAAA,CAACiB,CAAAA,CAAA,CAAiB,QAAA,CAAA,CAAA,sDAAA,CACqC,GAAA,CACrDxB,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,2BAAA,CACV,OAAA,CAAS,IAAM,CACb,MAAA,CAAO,QAAA,CAAS,MAAA,GAClB,CAAA,CACA,OAAA,CAAQ,MAAA,CACT,QAAA,CAAA,WAAA,CAED,CAAA,CAAS,GAAA,CAAA,CAEX,CAAA,CACF,CAAA,CACE,IAAA,CACJxD,GAAAA,CAAC2D,CAAAA,CAAA,CACC,OAAA,CAASxB,CAAAA,CAAK,OAAA,CACd,YAAA,CAAa,EAAA,CACb,IAAA,CAAK,OAAA,CACL,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAyB,GAAM,CAAA,GACfrD,IAAAA,CAACsD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA7D,GAAAA,CAAC8D,CAAAA,CAAA,CACC,QAAA,CAAA9D,GAAAA,CAAC+D,GAAAA,CAAA,CACC,YAAA,CAAW,eAAA,CACX,cAAA,CAAe,KAAA,CACf,YAAA,CAAa,KAAA,CACb,WAAA,CAAY,KAAA,CACZ,SAAA,CAAU,QAAA,CACV,YAAY,eAAA,CACZ,UAAA,CAAY,KAAA,CACZ,IAAA,CAAK,OAAA,CACJ,GAAGH,GAAAA,CACN,CAAA,CACF,CAAA,CACA5D,GAAAA,CAACgE,GAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAAA,CACAzD,IAAAA,CAACiD,GAAAA,CAAA,CAAO,eAAA,CAAeb,CAAAA,CAAW,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,QAAA,CAAS,QAAA,CAAU,CAAA,CAAQA,CAAAA,CACrF,QAAA,CAAA,CAAAA,CAAAA,CACC3C,GAAAA,CAACiE,OAAAA,CAAA,CAAQ,UAAU,uCAAA,CAAwC,CAAA,CAE3DjE,GAAAA,CAACkE,IAAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,CAAA,CACxC,qBAAA,CAAA,CAEJ,CAAA,CACAlE,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,wBAAA,CACV,OAAA,CAAS,IAAM,CACb5B,CAAAA,CAAgB,KAAK,EACvB,CAAA,CACA,OAAA,CAAQ,MAAA,CACT,QAAA,CAAA,4BAAA,CAED,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAEJ,CAEJ,CC1MO,SAASuC,EAAAA,CAAM,CAAE,SAAA,CAAAxC,CAAU,CAAA,CAAuC,CACvE,GAAM,CAAE,QAAA,CAAAyC,CAAS,CAAA,CAAIC,CAAAA,EAAU,CACzB,CAACC,CAAAA,CAAiBC,CAAkB,CAAA,CAAIzE,QAAAA,CAC5CsE,CAAAA,CAAS,IAAA,CAAMI,CAAAA,EAAYA,CAAAA,CAAQ,SAAA,GAAc7C,CAAS,CAAA,EAAKyC,CAAAA,CAAS,CAAC,CAC3E,CAAA,CACM,CAACK,CAAAA,CAAc7C,CAAe,CAAA,CAAI9B,QAAAA,CAAS,KAAK,CAAA,CAChD,CAAE,IAAA,CAAA2C,GAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAAC,CAAU,CAAA,CAAIC,EAAAA,CAAOL,GAAAA,CAASZ,CAAS,CAAA,CAAE,aAAA,CAAgBkB,CAAAA,EAC5E,KAAA,CAAMA,CAAAA,CAAK,CAAE,IAAA,CAAM,MAAO,CAAC,CAAA,CAAE,IAAA,CAAMC,GAAQA,CAAAA,CAAI,IAAA,EAA4C,CAC7F,CAAA,CACM,CAAC4B,CAAAA,CAAeC,CAAI,CAAA,CAAIC,GAAAA,EAAQ,CAChCC,CAAAA,CAAgB,IAAI,IAAA,EAAK,CAAE,WAAA,EAAY,CACvCC,CAAAA,CAAwBC,WAAAA,EAAY,CACpCC,CAAAA,CAEJF,CAAAA,CAAsB,KAAA,EAAO,IAAA,EAAM,QAAA,EAAYA,CAAAA,CAAsB,QAAA,CAEjEG,CAAAA,CAAWD,CAAAA,CAAQ,QAAA,CAASV,CAAAA,CAAgB,SAAS,CAAA,CACvD,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,EAAGU,CAAO,CAAA,CAAA,CAC5B,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,EAAGV,CAAAA,CAAgB,QAAQ,CAAA,CAAA,EAAIA,CAAAA,CAAgB,SAAS,CAAA,CAAA,CAE9E,GAAI5B,CAAAA,CACF,MAAM,IAAI,KAAA,CAAM,+BAA+B,CAAA,CAGjD,OAAIC,CAAAA,EAAa+B,CAAAA,EAAiB,CAACjC,GAAAA,CAC1BzC,GAAAA,CAACa,EAAAA,CAAA,EAAQ,EAGd8D,CAAAA,CAAK,IAAA,EAAM,EAAA,CACN3E,GAAAA,CAACkF,QAAAA,CAAA,CAAS,OAAA,CAAO,IAAA,CAAC,KAAA,CAAO,CAAE,IAAA,CAAMJ,CAAsB,CAAA,CAAG,EAAA,CAAIR,CAAAA,CAAgB,QAAA,CAAU,CAAA,CAI/F/D,IAAAA,CAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uGAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,QAAA,CAAAO,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kEAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,qEAAA,CAAsE,QAAA,CAAA,yBAAA,CAEpF,CAAA,CACCoE,CAAAA,CAAS,MAAA,CAAS,CAAA,CACjB7D,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAACmF,GAAAA,CAAA,CAAM,SAAA,CAAU,iEAAA,CAAkE,OAAA,CAAQ,SAAA,CAAU,QAAA,CAAA,gBAAA,CAErG,CAAA,CACA5E,IAAAA,CAAC6E,GAAAA,CAAA,CACC,YAAA,CAAcd,CAAAA,CAAgB,UAC9B,aAAA,CAAgBe,CAAAA,EAAO,CACrBd,CAAAA,CAAmBH,CAAAA,CAAS,IAAA,CAAMI,CAAAA,EAAYA,CAAAA,CAAQ,SAAA,GAAca,CAAE,CAAA,EAAKjB,CAAAA,CAAS,CAAC,CAAC,EACxF,CAAA,CAEA,QAAA,CAAA,CAAApE,GAAAA,CAACsF,CAAAA,CAAA,CAAc,SAAA,CAAU,kCAAA,CAAmC,EAAA,CAAG,SAAA,CAC7D,QAAA,CAAAtF,GAAAA,CAACuF,GAAAA,CAAA,CAAY,YAAA,CAAYjB,CAAAA,CAAgB,KAAA,CAAQ,QAAA,CAAAA,EAAgB,KAAA,CAAM,CAAA,CACzE,CAAA,CACAtE,GAAAA,CAACwF,GAAAA,CAAA,CACE,QAAA,CAAApB,CAAAA,CAAS,GAAA,CAAKI,CAAAA,EACbxE,GAAAA,CAACyF,CAAAA,CAAA,CAAmC,KAAA,CAAOjB,CAAAA,CAAQ,SAAA,CAChD,QAAA,CAAAA,CAAAA,CAAQ,KAAA,CAAA,CADMA,CAAAA,CAAQ,SAEzB,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACE,IAAA,CACHC,CAAAA,CACCzE,GAAAA,CAAC0B,EAAAA,CAAA,CAAW,SAAA,CAAWC,EAAW,eAAA,CAAiBC,CAAAA,CAAiB,CAAA,CAEpErB,IAAAA,CAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAF,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,kEAAA,CAAmE,QAAA,CAAA,uBAAA,CAEhF,CAAA,CACAO,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACZ,QAAA,CAAA,CAAAkC,GAAAA,CAAK,SAAA,CAAU,GAAA,CAAKiD,CAAAA,EACnB1F,GAAAA,CAACwD,GAAAA,CAAA,CACC,OAAA,CAAO,IAAA,CACP,SAAA,CAAW,CAAA,EAAGkC,CAAAA,CAAS,MAAA,CAAO,KAAK,CAAA,CAAA,EAAIA,CAAAA,CAAS,MAAA,CAAO,eAAe,CAAA,OAAA,EAAUA,CAAAA,CAAS,MAAA,CAAO,UAAU,CAAA,OAAA,EAAUA,CAAAA,CAAS,MAAA,CAAO,oBAAoB,CAAA,CAAA,CAExJ,IAAA,CAAK,QAAA,CACL,OAAA,CAASA,CAAAA,CAAS,MAAA,CAAO,OAAA,CAEzB,QAAA,CAAAnF,IAAAA,CAAC,GAAA,CAAA,CACC,IAAA,CAAMoF,EAAAA,CAAiB,CACrB,GAAA,CAAKD,CAAAA,CAAS,GAAA,CACd,SAAA,CAAWpB,CAAAA,CAAgB,SAAA,CAC3B,QAAA,CAAU,yBACV,QAAA,CAAAW,CACF,CAAC,CAAA,CAEA,QAAA,CAAA,CAAAS,CAAAA,CAAS,MAAA,CAAO,OAAA,CACf1F,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK0F,CAAAA,CAAS,KAAA,CACd,SAAA,CAAU,iCAAA,CACV,GAAA,CAAKA,CAAAA,CAAS,MAAA,CAAO,OAAA,CACvB,CAAA,CACE,IAAA,CACHA,CAAAA,CAAS,KAAA,CAAA,CACZ,CAAA,CAAA,CApBKA,CAAAA,CAAS,IAqBhB,CACD,CAAA,CACD1F,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,iDAAA,CACV,OAAA,CAAS,IAAM,CACb5B,CAAAA,CAAgB,IAAI,EACtB,CAAA,CACA,OAAA,CAAQ,MAAA,CACT,QAAA,CAAA,4BAAA,CAED,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEFrB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6CAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,aAAA,CAAc,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,KAAA,CAAM,4BAAA,CAClE,QAAA,CAAA,CAAAP,GAAAA,CAAC,MAAA,CAAA,CACC,EAAE,+fAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,oDAAA,CAAqD,IAAA,CAAK,cAAA,CAAe,CAAA,CACjFA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,ojDAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,mLAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,2JAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,8zBAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,8fAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,gYAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CAAA,CACF,CAAA,CACAO,IAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,iFAAA,CACZ,QAAA,CAAA,CAAAP,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,8CAAA,CACZ,QAAA,CAAAA,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,6CAAA,CAA8C,IAAA,CAAK,wBAAA,CAAyB,QAAA,CAAA,YAAA,CAEzF,CAAA,CACF,CAAA,CACAA,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,8CAAA,CACZ,QAAA,CAAAA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,6CAAA,CAA8C,IAAA,CAAK,6BAAA,CAA8B,QAAA,CAAA,MAAA,CAE9F,CAAA,CACF,CAAA,CACAA,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,EAAA,CACZ,QAAA,CAAAA,GAAAA,CAAC,GAAA,CAAA,CACC,SAAA,CAAU,6CAAA,CACV,IAAA,CAAK,wCACN,QAAA,CAAA,gBAAA,CAED,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAEAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wEAAA,CAAyE,CAAA,CACxFA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CAAoD,CAAA,CACnEA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CAAuE,CAAA,CAAA,CACxF,CAAA,CACAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oHAAA,CACb,QAAA,CAAAO,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sBAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oCAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,wDAAA,CACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,KAAA,CAAM,IAAA,CACN,KAAA,CAAM,4BAAA,CAEN,QAAA,CAAA,CAAAP,GAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,iBAAA,CAAkB,IAAA,CAAK,MAAA,CAAO,CAAA,CACtCA,GAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,sRAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CAAA,CACF,CAAA,CACAO,IAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,yBAAA,CAA0B,QAAA,CAAA,CAAA,OAAA,CAAGsE,CAAAA,CAAAA,CAAc,CAAA,CAAA,CAC1D,CAAA,CACA7E,GAAAA,CAACG,EAAAA,CAAA,EAAe,CAAA,CAAA,CAClB,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CASA,SAASwF,EAAAA,CAAiB,CAAE,SAAA,CAAAhE,CAAAA,CAAW,GAAA,CAAAkB,CAAAA,CAAK,QAAA,CAAA+C,CAAAA,CAAU,QAAA,CAAAX,CAAS,CAAA,CAAyC,CACtG,IAAMY,CAAAA,CAAS,IAAI,eAAA,CACnB,OAAAA,CAAAA,CAAO,GAAA,CAAI,QAAA,CAAU,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,EAAGD,CAAQ,CAAA,CAAE,CAAA,CACpDC,CAAAA,CAAO,GAAA,CAAI,WAAA,CAAalE,CAAS,CAAA,CACjCkE,CAAAA,CAAO,GAAA,CAAI,UAAA,CAAYZ,CAAQ,CAAA,CAExB,CAAA,EAAGpC,CAAG,CAAA,CAAA,EAAIgD,CAAAA,CAAO,QAAA,EAAU,CAAA,CACpC,CChPO,IAAMC,EAAAA,CAAsB,CAAC,gBAAA,CAAkB,mBAAA,CAAqB,gBAAA,CAAkB,eAAe,CAAA,CAI/FC,EAAAA,CAA2D,CACtE,cAAA,CAAgB,+BAAA,CAChB,iBAAA,CAAmB,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,EAAAA,CAAuBG,CAAI,CAAC,CAAA,CAC7C,IAAA,CAAK,IAAA,CAAO,cAAA,CACZ,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAER,MAAA,CAAO,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,CAAe1D,CAAAA,CAAuC,CACpE,GAAI,EAAEA,CAAAA,YAAiB,KAAA,CAAA,CACrB,OAAO,MAAA,CAGT,IAAM2D,CAAAA,CAAa3D,CAAAA,CAA6B,IAAA,CAEhD,OAAI,OAAO2D,CAAAA,EAAc,QAAA,CAChB,KAAA,CAGDP,EAAAA,CAA0C,QAAA,CAASO,CAAS,CACtE,CAEO,SAASC,EAAAA,CAAoB5D,CAAAA,CAA8C,CAChF,GAAI0D,EAAAA,CAAe1D,CAAK,CAAA,CACtB,OAAOA,CAAAA,CAAM,IAIjB,CC1CA,SAAS6D,EAAAA,CAAQ,CAAE,GAAG5G,CAAM,CAAA,CAA8B,CACxD,GAAM,CAAE,KAAA,CAAAS,CAAAA,CAAQ,QAAS,CAAA,CAAIE,QAAAA,EAAS,CAEtC,OACEN,GAAAA,CAACwG,OAAAA,CAAA,CACC,SAAA,CAAU,mBACV,KAAA,CAAOpG,CAAAA,CACP,YAAA,CAAc,CACZ,UAAA,CAAY,CACV,KAAA,CACE,mJAAA,CACF,WAAA,CAAa,yCAAA,CACb,YAAA,CAAc,wEAAA,CACd,YAAA,CAAc,oEAAA,CACd,OAAA,CACE,6GACJ,CACF,CAAA,CACC,GAAGT,CAAAA,CACN,CAEJ,CCLO,SAAS8G,EAAAA,CAAO,CAAE,IAAA,CAAAC,CAAAA,CAAM,OAAA,CAAAC,CAAQ,CAAA,CAAuB,CAC5D,GAAM,CAACC,CAAAA,CAAcC,CAAe,CAAA,CAAI/G,QAAAA,CAAS,CAAC,CAAA,CAC5C,CAACgH,CAAAA,CAAaC,CAAc,CAAA,CAAIjH,QAAAA,CAAuB4G,CAAI,CAAA,CAC3D,CAACM,CAAAA,CAAgBC,CAAiB,CAAA,CAAInH,QAAAA,CAAuB,EAAE,CAAA,CAC/DoH,CAAAA,CAASC,MAAAA,CAAuB,IAAI,EACpCC,GAAAA,CAAWrC,WAAAA,EAAY,CACvB,CAAE,SAAA,CAAApD,CAAU,CAAA,CAAI0F,SAAAA,EAAU,CAC1BC,CAAAA,CAAwBZ,CAAAA,CAAK,IAAA,CAAMa,CAAAA,EAAQH,GAAAA,CAAS,QAAA,CAAS,QAAA,CAAS,CAAA,CAAA,EAAIzF,CAAS,CAAA,CAAA,EAAI4F,CAAAA,CAAI,IAAI,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,CACrGC,CAAAA,CAAYd,CAAAA,CAAK,IAAA,CAAMa,CAAAA,EAAQH,GAAAA,CAAS,QAAA,CAAS,QAAA,CAAS,IAAIzF,CAAS,CAAA,CAAA,EAAI4F,CAAAA,CAAI,IAAI,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAQb,CAAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAmChH,OAjCA3G,SAAAA,CAAU,IAAM,CACd,GAAImH,CAAAA,CAAO,OAAA,GAAY,IAAA,CACrB,OAGF,IAAMO,CAAAA,CAAiB,IAAI,cAAA,CAAe,IAAM,CAC9CZ,CAAAA,CAAgBK,CAAAA,CAAO,OAAA,EAAS,YAAA,EAAgB,CAAC,EACnD,CAAC,CAAA,CAED,OAAAO,CAAAA,CAAe,OAAA,CAAQP,CAAAA,CAAO,OAAO,CAAA,CAE9B,UAAmB,CACxBO,CAAAA,CAAe,UAAA,GACjB,CACF,CAAA,CAAG,CAACH,CAAqB,CAAC,CAAA,CAE1BvH,SAAAA,CAAU,IAAM,CACd,IAAM2H,CAAAA,CAAoB,IAAA,CAAK,KAAA,CAAMd,CAAAA,CAAe,EAAE,CAAA,CAAI,CAAA,CACpDe,CAAAA,CAAejB,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAGgB,CAAiB,CAAA,CAEpD,GAAI,CAACC,CAAAA,CAAa,IAAA,CAAMJ,CAAAA,EAAQA,CAAAA,CAAI,IAAA,GAASC,CAAS,CAAA,CAAG,CAEvD,IAAMI,CAAAA,CAAalB,CAAAA,CAAK,IAAA,CAAMa,CAAAA,EAAQA,CAAAA,CAAI,IAAA,GAASC,CAAS,CAAA,CAC5DG,CAAAA,CAAa,GAAA,EAAI,CACjBC,CAAAA,EAAaD,CAAAA,CAAa,IAAA,CAAKC,CAAU,EAC3C,CAEA,IAAMC,CAAAA,CAAkBnB,CAAAA,CAAK,MAAA,CAAQa,CAAAA,EAAQ,CAACI,CAAAA,CAAa,QAAA,CAASJ,CAAG,CAAC,CAAA,CAExER,CAAAA,CAAeY,CAAY,CAAA,CAC3BV,CAAAA,CAAkBY,CAAe,EACnC,CAAA,CAAG,CAACnB,CAAAA,CAAMc,CAAAA,CAAWZ,CAAY,CAAC,CAAA,CAE9BU,CAAAA,GAA0B,MAAA,EAAaE,CAAAA,CAClCxH,GAAAA,CAACkF,QAAAA,CAAA,CAAS,EAAA,CAAI,CAAA,EAAGkC,GAAAA,CAAS,QAAQ,CAAA,CAAA,EAAII,CAAS,CAAA,CAAA,CAAI,CAAA,CAI1DxH,GAAAA,CAAC8H,GAAAA,CAAA,CACC,QAAA,CAAAvH,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mDAAA,CAAoD,GAAA,CAAK2G,CAAAA,CACtE,QAAA,CAAA,CAAA3G,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0CAAA,CACZ,QAAA,CAAA8G,CAAAA,CAAY,GAAA,CAAKS,CAAAA,EAChBvH,GAAAA,CAACwD,GAAAA,CAAA,CAAO,OAAA,CAAO,KAAC,SAAA,CAAU,iBAAA,CAAiC,OAAA,CAAQ,OAAA,CACjE,QAAA,CAAAjD,IAAAA,CAACwH,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA/H,GAAAA,CAACgI,GAAAA,CAAA,CACC,OAAA,CAAO,IAAA,CACP,SAAA,CAAU,kRAAA,CAEV,QAAA,CAAAhI,GAAAA,CAACiI,OAAAA,CAAA,CACC,SAAA,CAAU,6HAAA,CACV,EAAA,CAAIV,CAAAA,CAAI,IAAA,CAEP,QAAA,CAAAA,CAAAA,CAAI,IAAA,CACP,CAAA,CACF,CAAA,CACAvH,GAAAA,CAACkI,GAAAA,CAAA,CAAe,IAAA,CAAK,OAAA,CACnB,QAAA,CAAAlI,GAAAA,CAAC,GAAA,CAAA,CAAG,QAAA,CAAAuH,CAAAA,CAAI,KAAA,CAAM,CAAA,CAChB,CAAA,CAAA,CACF,CAAA,CAAA,CAhB+CA,CAAAA,CAAI,IAiBrD,CACD,CAAA,CACH,CAAA,CAECP,CAAAA,CAAe,MAAA,CAAS,CAAA,EACvBzG,IAAAA,CAAC4H,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAnI,GAAAA,CAAC+H,GAAAA,CAAA,CACC,QAAA,CAAA/H,GAAAA,CAACoI,GAAAA,CAAA,CAAoB,OAAA,CAAO,KAC1B,QAAA,CAAA7H,IAAAA,CAACyH,GAAAA,CAAA,CAAe,SAAA,CAAU,yPAAA,CACxB,QAAA,CAAA,CAAAhI,GAAAA,CAACqI,cAAAA,CAAA,CAAe,SAAA,CAAU,eAAA,CAAgB,WAAA,CAAa,GAAA,CAAK,CAAA,CAC5DrI,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAa,QAAA,CAAA,sBAAA,CAAoB,CAAA,CACjDA,GAAAA,CAACkI,GAAAA,CAAA,CAAe,IAAA,CAAK,OAAA,CACnB,QAAA,CAAAlI,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,iBAAA,CAAe,CAAA,CACpB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CACAA,GAAAA,CAACsI,CAAAA,CAAA,CAAoB,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,OAAA,CACzD,QAAA,CAAAtB,CAAAA,CAAe,GAAA,CAAKO,CAAAA,EACnBvH,GAAAA,CAACuI,CAAAA,CAAA,CAAiB,OAAA,CAAO,IAAA,CACvB,QAAA,CAAAvI,GAAAA,CAACiI,OAAAA,CAAA,CAAQ,EAAA,CAAIV,CAAAA,CAAI,IAAA,CAAO,QAAA,CAAAA,CAAAA,CAAI,KAAA,CAAM,CAAA,CAAA,CADLA,EAAI,IAEnC,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAEAhH,IAAAA,CAAC4H,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAnI,GAAAA,CAAC+H,GAAAA,CAAA,CACC,QAAA,CAAA/H,GAAAA,CAACoI,GAAAA,CAAA,CAAoB,OAAA,CAAO,IAAA,CAC1B,QAAA,CAAA7H,IAAAA,CAACyH,GAAAA,CAAA,CAAe,SAAA,CAAU,+PAAA,CACxB,QAAA,CAAA,CAAAhI,GAAAA,CAACwI,QAAAA,CAAA,CAAS,SAAA,CAAU,eAAA,CAAgB,WAAA,CAAa,GAAA,CAAK,CAAA,CACtDxI,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAa,QAAA,CAAA,eAAA,CAAa,CAAA,CAC1CA,GAAAA,CAACkI,GAAAA,CAAA,CAAe,IAAA,CAAK,OAAA,CACnB,QAAA,CAAAlI,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,eAAA,CAAa,CAAA,CAClB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CACAO,IAAAA,CAAC+H,CAAAA,CAAA,CAAoB,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,OAAA,CAqB1D,QAAA,CAAA,CAAAtI,IAACuI,CAAAA,CAAA,CAAiB,OAAA,CAAO,IAAA,CACvB,QAAA,CAAAhI,IAAAA,CAACkI,MAAAA,CAAA,CAAK,EAAA,CAAI,CAAA,+BAAA,EAAkC9G,CAAS,CAAA,CAAA,CAAI,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,qBAAA,CAC3E,QAAA,CAAA,CAAA3B,GAAAA,CAAC0I,MAAAA,CAAA,CAAO,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC1C1I,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,gBAAA,CAAc,CAAA,CAAA,CACtB,CAAA,CACF,CAAA,CACAA,GAAAA,CAAC2I,CAAAA,CAAA,EAAsB,EACvB3I,GAAAA,CAACuI,CAAAA,CAAA,CACC,QAAA,CAAU5B,CAAAA,CAAQ,SAAA,CAClB,QAAA,CAAU,IAAM,CACTA,CAAAA,CAAQ,UAGf,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAQ,SAAA,CACPpG,IAAAA,CAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAF,GAAAA,CAAC4I,YAAAA,CAAA,CAAa,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAChDrI,IAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,CAAA,UAAA,CAASoG,CAAAA,CAAQ,OAAA,CAAA,CAAQ,CAAA,CAAA,CACjC,CAAA,CAEApG,KAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAF,GAAAA,CAAC6I,QAAAA,CAAA,CAAS,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC5CtI,IAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,CAAA,UAAA,CACKoG,CAAAA,CAAQ,OAAA,CAAQ,GAAA,CAAC3G,GAAAA,CAAC,IAAA,CAAA,EAAG,CAAA,CAAE,aAAA,CACpB2G,CAAAA,CAAQ,MAAA,CAAA,CACtB,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CCtKA,IAAMmC,EAAAA,CAA6C,CAEjD,aAAA,CAAeC,IAAAA,CAAK,IAAM,OAAO,oBAA0B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,IAAA,CAAAC,CAAK,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAK,CAAA,CAAE,CAAC,CAAA,CACtG,wBAAA,CAA0BD,IAAAA,CAAK,IAC7B,OAAO,gCAAsC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,eAAA,CAAAE,CAAgB,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAgB,CAAA,CAAE,CAC/G,CAAA,CACA,eAAA,CAAiBF,IAAAA,CAAK,IAAM,OAAO,sBAA4B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,MAAA,CAAAG,CAAO,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAO,CAAA,CAAE,CAAC,CAAA,CAC9G,gBAAA,CAAkBH,IAAAA,CAAK,IAAM,OAAO,wBAA8B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,OAAA,CAAAI,CAAQ,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAQ,CAAA,CAAE,CAAC,CAAA,CAEnH,mBAAA,CAAqBJ,IAAAA,CAAK,IAAM,OAAO,sBAA0B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,MAAA,CAAAK,CAAO,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAO,CAAA,CAAE,CAAC,CAAA,CAChH,iBAAA,CAAmBL,IAAAA,CAAK,IAAM,OAAO,oBAAwB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,IAAA,CAAAM,CAAK,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAK,CAAA,CAAE,CAAC,CAAA,CACxG,qBAAA,CAAuBN,IAAAA,CAAK,IAC1B,OAAO,wBAA4B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,QAAA,CAAAO,CAAS,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAS,CAAA,CAAE,CACvF,CAAA,CAEA,uBAAA,CAAyBP,IAAAA,CAAK,IAC5B,OAAO,uBAA4C,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,OAAA,CAAAQ,CAAQ,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAQ,CAAA,CAAE,CACrG,CAAA,CACA,sBAAuBR,IAAAA,CAAK,IAC1B,OAAO,qBAA0C,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,KAAA,CAAAS,CAAM,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAM,CAAA,CAAE,CAC/F,CAAA,CACA,oBAAA,CAAsBT,IAAAA,CAAK,IACzB,OAAO,oBAAyC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,IAAA,CAAAM,CAAK,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAK,EAAE,CAC5F,CAAA,CACA,sBAAA,CAAwBN,IAAAA,CAAK,IAC3B,OAAO,sBAA2C,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,MAAA,CAAAU,CAAO,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAO,CAAA,CAAE,CAClG,CAAA,CACA,wBAAA,CAA0BV,IAAAA,CAAK,IAC7B,OAAO,wBAA6C,CAAA,CAAE,IAAA,CAAK,CAAC,CAAE,QAAA,CAAAW,CAAS,CAAA,IAAO,CAAE,OAAA,CAAWA,CAAS,CAAA,CAAE,CACxG,CACF,CAAA,CAEO,SAASC,EAAAA,CACdC,CAAAA,CACyB,CACzB,GAAM,CAAE,0BAAA,CAAAC,CAA2B,CAAA,CAAIxF,CAAAA,EAAU,CAC3C,CAACyF,CAAAA,CAAS,GAAGC,CAAS,CAAA,CAAIH,CAAAA,CAAkB,KAAA,CAAM,GAAG,CAAA,CACrDI,CAAAA,CAAmBlB,EAAAA,CAAqBc,CAAiB,CAAA,CACzDK,CAAAA,CAA0BJ,CAAAA,CAC9BC,CAAAA,CACAC,CACF,CAAA,CAEA,OAAOE,CAAAA,EAAyB,MAAA,CAAS,CAAA,CAAIA,CAAAA,CAAwB,CAAC,CAAA,EAAG,SAAA,CAAYD,CACvF,CCxDO,SAASE,EAAAA,CAAO,CAAE,SAAA,CAAAvI,CAAAA,CAAW,QAAA,CAAAyC,CAAS,CAAA,CAAuB,CAClE,GAAM,CAAE,aAAA,CAAAtD,CAAc,CAAA,CAAIR,UAAS,CAC7B0I,CAAAA,CAAOW,EAAAA,CAAwB,aAAa,CAAA,CAC5CV,CAAAA,CAAkBU,EAAAA,CAAwB,wBAAwB,CAAA,CAClET,CAAAA,CAASS,EAAAA,CAAwB,eAAe,CAAA,CAChDR,CAAAA,CAAUQ,EAAAA,CAAwB,gBAAgB,CAAA,CAClDQ,CAAAA,CAAiB/F,CAAAA,CAAS,IAAA,CAAMI,CAAAA,EAAYA,CAAAA,CAAQ,SAAA,GAAc7C,CAAS,CAAA,EAAKyC,CAAAA,CAAS,CAAC,CAAA,CAC1F,CAAE,QAAA,CAAAwB,CAAAA,CAAU,MAAA,CAAAwE,CAAO,CAAA,CAAID,CAAAA,CACvBE,CAAAA,CAAWC,WAAAA,EAAY,CAE7B,SAASC,CAAAA,CAAsBC,CAAAA,CAA0E,CACvGC,eAAAA,CAAgB,IAAM,CACpBJ,CAAAA,CAAS,CAAA,EAAGzE,CAAQ,CAAA,CAAA,EAAIjE,CAAS,CAAA,WAAA,EAAc6I,CAAAA,CAAK,gBAAgB,CAAA,IAAA,EAAOA,CAAAA,CAAK,QAAQ,CAAA,CAAE,EAC5F,CAAC,EACH,CAEA,OACEjK,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,+FAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC0K,QAAAA,CAAA,CAAS,QAAA,CAAU,IAAA,CAClB,QAAA,CAAA1K,GAAAA,CAACgJ,CAAAA,CAAA,CAAK,KAAA,CAAOlI,CAAAA,CAAe,KAAA,CAAM,gBAAA,CAAiB,CAAA,CACrD,CAAA,CACAP,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2DAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC0K,QAAAA,CAAA,CAAS,QAAA,CAAU,IAAA,CAClB,QAAA,CAAA1K,GAAAA,CAACiJ,CAAAA,CAAA,CAAgB,SAAA,CAAWtH,CAAAA,CAAW,QAAA,CAAUyC,CAAAA,CAAU,CAAA,CAC7D,CAAA,CACApE,GAAAA,CAAC0K,QAAAA,CAAA,CAAS,QAAA,CAAU,IAAA,CAClB,QAAA,CAAA1K,GAAAA,CAACkJ,CAAAA,CAAA,CAAO,QAAA,CAAUqB,CAAAA,CAAuB,SAAA,CAAW5I,CAAAA,CAAW,MAAA,CAAQyI,CAAAA,CAAQ,CAAA,CACjF,CAAA,CAAA,CACF,CAAA,CACApK,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAAA,GAAAA,CAAC0K,QAAAA,CAAA,CAAS,QAAA,CAAU,KAClB,QAAA,CAAA1K,GAAAA,CAACmJ,CAAAA,CAAA,CAAQ,SAAA,CAAWxH,CAAAA,CAAW,CAAA,CACjC,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCzBO,SAASgJ,EAAAA,CAAO,CAAE,OAAA,CAAAhE,CAAQ,CAAA,CAAuB,CACtD,GAAM,CAAE,aAAA,CAAAiE,CAAAA,CAAe,QAAA,CAAAxG,CAAS,EAAIC,CAAAA,EAAU,CACxC,CAAC1B,CAAAA,CAAWgC,CAAI,CAAA,CAAIC,GAAAA,EAAQ,CAC5B,CAAE,SAAA,CAAAjD,CAAU,CAAA,CAAI0F,SAAAA,EAAU,CAE1B7C,CAAAA,CAAUqG,IAAAA,CAAKC,MAAAA,CAAOnJ,CAAAA,EAAa,EAAA,CAAI,WAAW,CAAC,CAAA,CAAEyC,CAAQ,CAAA,CAEnE,GAAI,CAACI,CAAAA,CACH,MAAM,IAAIwB,EAAAA,CAAa,mBAAmB,CAAA,CAG5C,GAAM,CAAE,MAAA,CAAA+E,CAAO,CAAA,CAAIvG,CAAAA,CACb,CAAE,IAAA,CAAAkC,CAAK,CAAA,CAAIkE,CAAAA,CACXI,CAAAA,CAAcC,GAAAA,EAAe,CAC7B7D,CAAAA,CAAWrC,WAAAA,EAAY,CAe7B,OAbAhF,SAAAA,CAAU,IAAM,CACd,GAAIgL,CAAAA,CAAQ,CACV,IAAMG,CAAAA,CAAeH,CAAAA,CAAO,IAAA,CAAMI,CAAAA,EAAMA,CAAAA,CAAE,SAAS,CAAA,EAAKJ,CAAAA,CAAO,CAAC,CAAA,CAC5DK,CAAAA,CAAa,EAAA,CAEb,OAAO,YAAA,CAAiB,GAAA,GAC1BA,CAAAA,CAAa,YAAA,CAAa,OAAA,CAAQ,CAAA,EAAGC,GAAiB,CAAA,EAAG1J,CAAS,CAAA,CAAE,CAAA,EAAK,EAAA,CAAA,CAG3EqJ,CAAAA,CAAY,CAAE,IAAA,CAAM,UAAA,CAAY,OAAA,CAAS,CAAE,SAAA,CAAArJ,CAAAA,CAAW,KAAA,CAAOyJ,CAAAA,EAAcF,CAAAA,CAAa,IAAK,CAAE,CAAC,EAClG,CACF,CAAA,CAAG,CAAC9D,CAAQ,CAAC,CAAA,CAETzE,CAAAA,CACK3C,GAAAA,CAACa,EAAAA,CAAA,EAAQ,CAAA,CAGb8D,CAAAA,CAAK,IAAA,EAAM,EAAA,CAKdpE,IAAAA,CAAAL,QAAAA,CAAA,CAEE,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8CAAA,CAA+C,qBAAA,CAAoB,EAAA,CAChF,QAAA,CAAA,CAAAP,GAAAA,CAACkK,EAAAA,CAAA,CAAO,SAAA,CAAWvI,CAAAA,EAAa,EAAA,CAAI,QAAA,CAAUyC,CAAAA,CAAU,EACxD7D,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4FAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAACyG,EAAAA,CAAA,CAAO,IAAA,CAAMC,CAAAA,CAAM,OAAA,CAASC,CAAAA,CAAS,CAAA,CACtC3G,GAAAA,CAACsL,MAAAA,CAAA,EAAO,CAAA,CAAA,CACV,CAAA,CAAA,CACF,CAAA,CACAtL,GAAAA,CAACuG,EAAAA,CAAA,EAAQ,CAAA,CAAA,CACX,CAAA,CAdOvG,GAAAA,CAACmE,EAAAA,CAAA,CAAM,SAAA,CAAWxC,CAAAA,EAAa,EAAA,CAAI,CAgB9C,CCnEA,SAAS4J,EAAAA,CAAS7I,CAAAA,CAA2C,CAC3D,OAAKA,CAAAA,CAIE,OAAA,GAAYA,CAAAA,CAHV,KAIX,CAEO,SAAS8I,EAAAA,CAAe9I,CAAAA,CAAuC,CACpE,GAAI,CAACA,CAAAA,CACH,OAAO,IAAA,CAGT,GAAI+I,WAAAA,CAAY,EAAA,CAAG/I,CAAK,CAAA,CACtB,OAAOA,CAAAA,CAGT,GAAI6I,EAAAA,CAAS7I,CAAK,CAAA,CAAG,CACnB,IAAMgJ,CAAAA,CAAsBhJ,CAAAA,CAAM,KAAA,CAElC,GAAI+I,WAAAA,CAAY,EAAA,CAAGC,CAAmB,CAAA,CACpC,OAAOA,CAEX,CAEA,OAAO,IACT,CAEO,SAASC,EAAAA,CAAkBC,CAAAA,CAAwC,CACxE,GAAI,CAACA,CAAAA,CACH,OAAO,IAAA,CAGT,GAAI,CACF,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAQ,CAC5B,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CC3BA,IAAMC,EAAAA,CAAsBC,aAAAA,CAAoD,MAAS,CAAA,CAEzF,SAASC,EAAAA,EAA4C,CACnD,IAAMC,CAAAA,CAAMC,UAAAA,CAAWJ,EAAmB,CAAA,CAE1C,GAAI,CAACG,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,qDAAqD,CAAA,CAGvE,OAAOA,CACT,CAEA,SAASE,EAAAA,CAAgBC,CAAAA,CAAiE,CACxF,OAAO,IAAIC,SAAAA,CAAU,CAAC,CAAE,KAAA,CAAA1J,CAAM,CAAA,GAAM,CAC9B2J,qBAAAA,CAAsB,EAAA,CAAG3J,CAAK,CAAA,CAChCA,CAAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAE,OAAA,CAAAyD,CAAAA,CAAS,SAAA,CAAAmG,CAAAA,CAAW,IAAA,CAAAC,CAAK,CAAA,GAAM,CACrD,OAAA,CAAQ,GAAA,CAAI,CAAA,0BAAA,EAA6BpG,CAAO,CAAA,YAAA,EAAemG,CAAS,CAAA,QAAA,EAAWC,CAAI,CAAA,CAAE,EAC3F,CAAC,CAAA,CACQC,sBAAAA,CAAuB,EAAA,CAAG9J,CAAK,CAAA,EACxCA,CAAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAE,OAAA,CAAAyD,CAAAA,CAAS,UAAA,CAAAsG,CAAW,CAAA,GAAM,CAChD,QAAQ,GAAA,CAAI,CAAA,2BAAA,EAA8BtG,CAAO,CAAA,cAAA,EAAiB,IAAA,CAAK,SAAA,CAAUsG,CAAU,CAAC,CAAA,CAAE,EAChG,CAAC,CAAA,CAGH,IAAMC,CAAAA,CAAclB,EAAAA,CAAe9I,CAAK,CAAA,CAExC,GAAIgK,CAAAA,EAAa,UAAA,GAAe,GAAA,CAAK,CACnC,IAAMC,CAAAA,CAAehB,EAAAA,CAAwCe,CAAAA,CAAY,QAAQ,CAAA,CAC7EvG,CAAAA,CAAyB,IAAA,CAE7B,GAAIwG,CAAAA,EAAgB,OAAOA,CAAAA,EAAiB,QAAA,CAC1C,GAAI,OAAOA,CAAAA,CAAa,OAAA,EAAY,QAAA,CAClCxG,CAAAA,CAAUwG,CAAAA,CAAa,OAAA,CAAA,KAAA,GACd,KAAA,CAAM,OAAA,CAASA,CAAAA,CAAsC,MAAM,CAAA,CAAG,CAEvE,IAAMC,CAAAA,CADeD,CAAAA,CAAsC,MAAA,CAC5B,CAAC,CAAA,CAE5BC,CAAAA,EAAc,OAAOA,CAAAA,CAAW,OAAA,EAAY,QAAA,GAC9CzG,CAAAA,CAAUyG,CAAAA,CAAW,OAAA,EAEzB,CAAA,KAAW,OAAQD,CAAAA,CAAqC,KAAA,EAAU,QAAA,CAChExG,CAAAA,CAAWwG,CAAAA,CAAqC,KAAA,CAEhDxG,CAAAA,CAAU,IAAA,CAAK,SAAA,CAAUwG,CAAY,CAAA,CAAA,KAGvCxG,CAAAA,CAAUuG,CAAAA,CAAY,QAAA,CAGxBP,CAAAA,CAAsBhG,CAAAA,EAAW,+DAA+D,EAClG,CAEA,GAAIuG,CAAAA,CAAa,CACf,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoBA,CAAAA,CAAY,OAAO,CAAA,CAAE,CAAA,CAErD,MACF,CAEIhK,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoBA,CAAAA,CAAM,OAAO,CAAA,CAAE,EAEnD,CAAC,CACH,CAEA,SAASmK,EAAAA,CAAaC,CAAAA,CAA0BX,CAAAA,CAAiE,CAC/G,OAAOY,IAAAA,CAAK,CACVb,EAAAA,CAAgBC,CAAqB,CAAA,CACrC,IAAIa,QAAAA,CAAS,CAAE,GAAA,CAAK,CAAA,aAAA,EAAgBF,CAAgB,CAAA,QAAA,CAAW,CAAC,CAClE,CAAC,CACH,CAEA,SAASG,EAAAA,CACPH,CAAAA,CACAX,CAAAA,CACc,CACd,OAAO,IAAIe,YAAAA,CAAa,CACtB,IAAA,CAAML,EAAAA,CAAaC,CAAAA,EAAoB,EAAA,CAAIX,CAAqB,CAAA,CAChE,KAAA,CAAO,IAAIgB,aAAAA,CAAc,CACvB,gBAAA,CAAmBC,CAAAA,EACVA,CAAAA,CAAe,GAAA,CAAOA,CAAAA,CAAe,GAAA,CAAiBC,uBAAAA,CAAwBD,CAAc,CAEvG,CAAC,CACH,CAAC,CACH,CAEO,SAASE,EAAAA,CAAgB,CAAE,QAAA,CAAA5N,CAAS,CAAA,CAA+C,CACxF,GAAM,CAAE,gBAAA,CAAAoN,CAAiB,CAAA,CAAIzI,CAAAA,EAAU,CACjC,CAACkJ,CAAAA,CAAoBpB,CAAqB,CAAA,CAAIrM,QAAAA,CAAwB,IAAI,CAAA,CAC1EkM,CAAAA,CAAMwB,OAAAA,CAAQ,KAAO,CAAE,kBAAA,CAAAD,CAAAA,CAAoB,qBAAA,CAAApB,CAAsB,CAAA,CAAA,CAAI,CAACoB,CAAkB,CAAC,CAAA,CAE/F,OACEvN,GAAAA,CAAC6L,EAAAA,CAAoB,QAAA,CAApB,CAA6B,KAAA,CAAOG,CAAAA,CACnC,QAAA,CAAAhM,GAAAA,CAACyN,cAAAA,CAAA,CAAe,MAAA,CAAQR,EAAAA,CAAOH,CAAAA,CAAkBX,CAAqB,CAAA,CAAI,QAAA,CAAAzM,CAAAA,CAAS,CAAA,CACrF,CAEJ,CCxGA,IAAMgO,EAAAA,CAAmC,CAAA,CAAA,IAAA,CAIzC,IAAMC,EAAAA,CAAyC,CAAA,CAAA,MAAA,CAEzCC,EAAAA,CAA2B,EAAA,CAAA,UAAA,CAG/B,CAAC,CAAE,SAAA,CAAAzM,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAG0B,CAAAA,GAC1BrB,GAAAA,CAAsB,CAAA,CAAA,OAAA,CAArB,CACC,SAAA,CAAWsB,CAAAA,CACT,6MAAA,CACAH,CACF,CAAA,CACC,GAAGxB,EACJ,GAAA,CAAK0B,CAAAA,CACP,CACD,CAAA,CACDuM,EAAAA,CAAmB,WAAA,CAAmC,CAAA,CAAA,OAAA,CAAQ,WAAA,CAE9D,IAAMC,EAAAA,CAA2B,EAAA,CAAA,UAAA,CAG/B,CAAC,CAAE,SAAA,CAAA1M,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAG0B,CAAAA,GAC1Bd,IAAAA,CAACoN,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA3N,GAAAA,CAAC4N,EAAAA,CAAA,EAAmB,CAAA,CACpB5N,GAAAA,CAAsB,CAAA,CAAA,OAAA,CAArB,CACC,SAAA,CAAWsB,CAAAA,CACT,2kBAAA,CACAH,CACF,CAAA,CACA,GAAA,CAAKE,CAAAA,CACJ,GAAG1B,CAAAA,CACN,CAAA,CAAA,CACF,CACD,CAAA,CACDkO,EAAAA,CAAmB,WAAA,CAAmC,CAAA,CAAA,OAAA,CAAQ,WAAA,CAE9D,SAASC,EAAAA,CAAkB,CAAE,SAAA,CAAA3M,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAsD,CACrG,OACEK,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWsB,CAAAA,CAAG,iEAAA,CAAmEH,CAAS,CAAA,CAAI,GAAGxB,EAAO,CAEjH,CACAmO,EAAAA,CAAkB,WAAA,CAAc,mBAAA,CAEhC,SAASC,EAAAA,CAAkB,CAAE,SAAA,CAAA5M,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAsD,CACrG,OACEK,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWsB,CAAAA,CAAG,8EAAA,CAAgFH,CAAS,CAAA,CACtG,GAAGxB,CAAAA,CACN,CAEJ,CACAoO,EAAAA,CAAkB,WAAA,CAAc,mBAAA,CAEhC,IAAMC,EAAAA,CAAyB,EAAA,CAAA,UAAA,CAG7B,CAAC,CAAE,SAAA,CAAA7M,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAG0B,CAAAA,GAC1BrB,GAAAA,CAAsB,CAAA,CAAA,KAAA,CAArB,CAA2B,SAAA,CAAWsB,CAAAA,CAAG,6BAAA,CAA+BH,CAAS,CAAA,CAAG,GAAA,CAAKE,CAAAA,CAAM,GAAG1B,CAAAA,CAAO,CAC3G,CAAA,CACDqO,EAAAA,CAAiB,WAAA,CAAmC,CAAA,CAAA,KAAA,CAAM,WAAA,CAE1D,IAAMC,EAAAA,CAA+B,EAAA,CAAA,UAAA,CAGnC,CAAC,CAAE,SAAA,CAAA9M,EAAW,GAAGxB,CAAM,CAAA,CAAG0B,CAAAA,GAC1BrB,GAAAA,CAAsB,CAAA,CAAA,WAAA,CAArB,CACC,SAAA,CAAWsB,CAAAA,CAAG,qCAAA,CAAuCH,CAAS,CAAA,CAC9D,GAAA,CAAKE,CAAAA,CACJ,GAAG1B,CAAAA,CACN,CACD,CAAA,CACDsO,EAAAA,CAAuB,WAAA,CAAmC,CAAA,CAAA,WAAA,CAAY,WAAA,CAEtE,IAAMC,EAAAA,CAA0B,EAAA,CAAA,UAAA,CAG9B,CAAC,CAAE,SAAA,CAAA/M,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAG0B,IAC1BrB,GAAAA,CAAsB,CAAA,CAAA,MAAA,CAArB,CAA4B,SAAA,CAAWsB,CAAAA,CAAG6M,GAAAA,EAAe,CAAGhN,CAAS,CAAA,CAAG,GAAA,CAAKE,CAAAA,CAAM,GAAG1B,CAAAA,CAAO,CAC/F,CAAA,CACDuO,EAAAA,CAAkB,WAAA,CAAmC,CAAA,CAAA,MAAA,CAAO,WAAA,CAE5D,IAAME,EAAAA,CAA0B,EAAA,CAAA,UAAA,CAG9B,CAAC,CAAE,SAAA,CAAAjN,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAG0B,CAAAA,GAC1BrB,GAAAA,CAAsB,CAAA,CAAA,MAAA,CAArB,CACC,SAAA,CAAWsB,CAAAA,CAAG6M,GAAAA,CAAe,CAAE,OAAA,CAAS,SAAU,CAAC,CAAA,CAAG,oBAAA,CAAsBhN,CAAS,CAAA,CACrF,GAAA,CAAKE,CAAAA,CACJ,GAAG1B,CAAAA,CACN,CACD,CAAA,CACDyO,EAAAA,CAAkB,WAAA,CAAmC,CAAA,CAAA,MAAA,CAAO,WAAA,CCxE7C,SAARV,EAAAA,CAA6B,CAAE,OAAA,CAAAW,CAAQ,CAAA,CAAuB,CACnE,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIzO,QAAAA,CAAS,KAAK,CAAA,CACpC,CAAC0O,CAAAA,CAAcC,CAAe,CAAA,CAAI3O,QAAAA,CAAS,KAAK,CAAA,CAChD,CAAC4O,CAAAA,CAAqBC,CAAsB,CAAA,CAAI7O,QAAAA,CAAS,KAAK,CAAA,CAEpEC,SAAAA,CAAU,IAAM,CACdwO,CAAAA,CAAU,IAAI,EAChB,CAAA,CAAG,EAAE,CAAA,CAEL,SAASK,CAAAA,EAAoB,CAC3BL,CAAAA,CAAU,KAAK,CAAA,CAEVG,CAAAA,EACHL,CAAAA,CAAQ,kBAAA,IAAqB,CAG3BK,CAAAA,EACFC,CAAAA,CAAuB,KAAK,EAEhC,CAEA,eAAeE,CAAAA,EAA8B,CAC3CJ,CAAAA,CAAgB,IAAI,CAAA,CAEpB,GAAI,CACF,IAAMK,CAAAA,CAAeT,CAAAA,CAAQ,kBAAA,IAAqB,CAE9CS,CAAAA,EAAgB,OAAQA,CAAAA,CAA+B,IAAA,EAAS,UAAA,EAClE,MAAOA,EAEX,CAAA,OAAE,CACAH,CAAAA,CAAuB,IAAI,CAAA,CAC3BJ,CAAAA,CAAU,KAAK,CAAA,CACfE,CAAAA,CAAgB,KAAK,EACvB,CACF,CAEA,OACEzO,GAAAA,CAAC0N,EAAAA,CAAA,CAAiB,YAAA,CAAckB,CAAAA,CAAa,IAAA,CAAMN,CAAAA,CACjD,QAAA,CAAAtO,GAAAA,CAAC2N,EAAAA,CAAA,CACC,QAAA,CAAApN,IAAAA,CAACsN,EAAAA,CAAA,CAAmB,SAAA,CAAU,kBAAA,CAC5B,QAAA,CAAA,CAAAtN,IAAAA,CAACuN,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA9N,GAAAA,CAACgO,EAAAA,CAAA,CAAkB,QAAA,CAAAK,CAAAA,CAAQ,WAAA,CAAY,CAAA,CACvCrO,GAAAA,CAACiO,EAAAA,CAAA,CAAwB,QAAA,CAAAI,CAAAA,CAAQ,aAAA,CAAc,CAAA,CAAA,CACjD,CAAA,CACA9N,IAAAA,CAACwN,EAAAA,CAAA,CACC,QAAA,CAAA,CAAA/N,GAAAA,CAACoO,EAAAA,CAAA,CAAkB,QAAA,CAAUI,CAAAA,CAAc,OAAA,CAASI,CAAAA,CACjD,QAAA,CAAAP,CAAAA,CAAQ,iBAAA,CACX,CAAA,CACA9N,IAAAA,CAAC2N,EAAAA,CAAA,CACC,SAAA,CAAWC,GAAAA,CAAe,CAAE,OAAA,CAASE,CAAAA,CAAQ,aAAA,CAAgB,aAAA,CAAgB,SAAU,CAAC,CAAA,CACxF,QAAA,CAAUG,CAAAA,CACV,OAAA,CAASK,CAAAA,CAER,QAAA,CAAA,CAAAL,CAAAA,CAAexO,GAAAA,CAACiE,OAAAA,CAAA,CAAQ,SAAA,CAAU,wCAAwC,CAAA,CAAK,IAAA,CAC/EoK,CAAAA,CAAQ,iBAAA,CAAA,CACX,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAEJ,CC7EA,IAAMU,EAAAA,CAAiBjD,aAAAA,CAA6B,EAAE,EAChDkD,EAAAA,CAAwBlD,aAAAA,CAAgC,IAAG,CAAA,CAAY,CAAA,CAE7E,SAASmD,EAAAA,CAAeC,CAAAA,CAAmBC,CAAAA,CAA0B,CACnE,IAAMC,CAAAA,CAAaD,CAAAA,CAAO,IAAA,CAM1B,OAJKA,CAAAA,CAAO,GAAA,GACVA,CAAAA,CAAO,GAAA,CAAM,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,EAAS,CAAA,CAG3BC,CAAAA,EACN,KAAK,cAAA,CACH,OAAOC,MAAAA,CAAO1P,KAAAA,CAAM,CAAC,OAAkB,KAAK,CAAC,CAAA,CAAG,CAAC,GAAIuP,CAAAA,CAAkCC,CAAM,CAAC,CAAA,CAEhG,KAAK,WAAA,CACH,OAAOE,MAAAA,CAAO1P,KAAAA,CAAM,CAAC,MAAA,CAAkB,KAAK,CAAC,CAAA,CAAG,CAAC,GAAIuP,CAAAA,CAA+BC,CAAM,CAAC,CAAA,CAE7F,KAAK,YAAA,CACH,OAAOE,MAAAA,CAAO1P,KAAAA,CAAM,CAAC,MAAA,CAAkB,KAAK,CAAC,CAAA,CAAG,CAAC,GAAIuP,CAAAA,CAAgCC,CAAM,CAAC,CAAA,CAE9F,KAAK,kBAAA,CACH,OAAOE,MAAAA,CAAO1P,KAAAA,CAAM,CAAC,MAAA,CAAkB,KAAK,CAAC,CAAA,CAAG,CAAC,GAAIuP,CAAAA,CAAsCC,CAAM,CAAC,CAAA,CAEpG,KAAK,aAAA,CACH,OAAOE,MAAAA,CAAO1P,KAAAA,CAAM,CAAC,MAAA,CAAkB,KAAK,CAAC,CAAA,CAAG,CAAC,GAAIuP,CAAAA,CAAiCC,CAAM,CAAC,CAAA,CAE/F,KAAK,SAAA,CACH,OAAOD,CAAAA,CAAQ,MAAA,CAAQ1E,CAAAA,EAASA,CAAAA,CAAK,GAAA,GAAQ2E,CAAAA,CAAO,GAAG,CAAA,CAEzD,QACE,MAAM,KAAA,CAAM,CAAA,gBAAA,EAAmBC,CAAoB,CAAA,CAAE,CAEzD,CACF,CAEA,SAASE,EAAAA,CAAgB,CAAE,QAAA,CAAA5P,CAAS,CAAA,CAAyC,CAC3E,GAAM,CAAC6P,CAAAA,CAAeC,CAAqB,CAAA,CAAIC,UAAAA,CAAWR,EAAAA,CAAgB,EAAE,CAAA,CAE5E,OACEjP,GAAAA,CAAC+O,EAAAA,CAAe,QAAA,CAAf,CAAwB,KAAA,CAAOQ,CAAAA,CAC9B,QAAA,CAAAvP,GAAAA,CAACgP,EAAAA,CAAsB,QAAA,CAAtB,CAA+B,KAAA,CAAOQ,CAAAA,CAAwB,QAAA,CAAA9P,CAAAA,CAAS,CAAA,CAC1E,CAEJ,CAEA,SAASgQ,IAAuB,CAC9B,OAAOzD,UAAAA,CAAW8C,EAAc,CAClC,CAEA,SAASY,EAAAA,EAAgC,CACvC,OAAO1D,UAAAA,CAAW+C,EAAqB,CACzC,CCxCA,IAAMY,EAAAA,CAA0B,CAAC,IAAA,CAAM,QAAQ,CAAA,CACzCC,EAAAA,CAA4B,CAAC,MAAA,CAAQ,UAAA,CAAY,UAAA,CAAY,MAAM,CAAA,CAElE,SAASC,EAAAA,CAAeC,CAAAA,CAA0BC,CAAAA,CAAe5F,CAAAA,CAA6B,CACnG,IAAM6F,CAAAA,CAAU,oCAAA,CACVC,CAAAA,CAAeC,EAAAA,CAAgB/F,CAAAA,CAAQ2F,CAAgB,CAAA,CACvDK,CAAAA,CAAaF,CAAAA,EAAc,IAAA,EAAQH,CAAAA,CACnCM,CAAAA,CAAaH,CAAAA,EAAc,UAAA,EAAc,GACzCI,CAAAA,CAAU,CAAA,QAAA,EAAWF,CAAU,CAAA,iBAAA,EAAoBA,CAAU,CAAA,OAAA,CAAA,CAEnE,GAAI,CAACF,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAWE,CAAU,CAAA,yBAAA,CAA2B,CAAA,CAGlE,GAAIC,CAAAA,CAAW,MAAA,GAAW,CAAA,CACxB,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAWD,CAAU,CAAA,yCAAA,CAA2C,CAAA,CAGlF,IAAMG,CAAAA,CAA+BC,CAAAA,CAAwB,QAAA,CAAUH,CAAU,EAAE,IAAA,CAAK;AAAA,EAAA,CAAM,EACxFI,CAAAA,CAA4BC,EAAAA,CAAmBL,CAAU,CAAA,CACzDM,CAAAA,CAAqCH,EAAwB,CAAC,OAAO,EAAGH,CAAU,CAAA,CAClFO,EAAoBD,CAAAA,CAAgB,MAAA,CACxC,CAACE,CAAAA,CAAKC,CAAAA,GAAc,GAAGD,CAAG;AAAA,IAAA,EAASC,CAAS,CAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA,CAC5C,EACF,EACMC,CAAAA,CAAkBJ,CAAAA,CAAgB,OACtC,CAACE,CAAAA,CAAKC,CAAAA,GAAc,CAAA,EAAGD,CAAG;AAAA,IAAA,EAASC,CAAS,CAAA;AAAA;AAAA;AAAA,MAAA,EAAuCd,CAAK;AAAA;AAAA,EAAA,CAAA,CACxF,EACF,CAAA,CACMgB,CAAAA,CAA8BhB,CAAAA,GAAU,UAAYY,CAAAA,CAAoBG,CAAAA,CACxEE,CAAAA,CAA8BR,CAAAA,CAAgB,MAAA,CAAO,CAACI,CAAAA,CAAKC,CAAAA,GACxD,GAAGD,CAAG;AAAA,IAAA,EAASC,CAAS,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA,CAC9B,EAAE,CAAA,CAGCI,CAAAA,CADyBC,OAAOrG,MAAAA,CAAO,cAAA,CAAgB,OAAO,CAAC,CAAA,CAAEuF,CAAU,CAAA,CACf,OAAO,CAACQ,CAAAA,CAAKC,IAAc,CAE3F,IAAMM,EADgBvG,IAAAA,CAAKC,MAAAA,CAAOgG,CAAAA,CAAU,YAAA,EAAc,OAAQ,MAAM,CAAC,EAAE1G,CAAM,CAAA,EACvC,WAAW,MAAA,CAAO,CAACiH,CAAAA,CAAYC,CAAAA,GAAqB,CAC5F,IAAMC,CAAAA,CAAkBvB,IAAU,SAAA,CAAY,EAAA,CAAK,GAAGA,CAAK;AAAA,IAAA,CAAA,CAE3D,GAAIsB,CAAAA,CAAiB,QAAA,GAAa,OAAA,CAChC,OAAO,GAAGD,CAAU;AAAA,MAAA,EAAWC,EAAiB,IAAI,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA,CAGtD,GAAIA,CAAAA,CAAiB,KAAA,GAAU,OAAA,CAC7B,OAAO,GAAGD,CAAU;AAAA,MAAA,EAAWC,EAAiB,IAAI,CAAA;AAAA;AAAA;AAAA,MAAA,EAA2CC,CAAe;AAAA;AAAA,IAAA,CAAA,CAGhH,GAAID,CAAAA,CAAiB,KAAA,GAAU,cAAA,CAAgB,CAC7C,IAAME,CAAAA,CAAqB3G,IAAAA,CAAKC,MAAAA,CAAOwG,CAAAA,CAAiB,YAAA,EAAc,MAAA,CAAQ,MAAM,CAAC,CAAA,CAAElH,CAAM,CAAA,CAMvFqH,CAAAA,CAHwB5G,IAAAA,CAAKC,MAAAA,CAAOwG,CAAAA,CAAiB,YAAA,EAAc,MAAO,MAAM,CAAC,CAAA,CACrFE,CAAAA,EAAoB,UAAA,EAAc,EACpC,CAAA,CAEwB,QAAU,OAAA,CAC5B,CAAA;AAAA;AAAA;AAAA,MAAA,EAAsCD,CAAe,CAAA;AAAA,QAAA,CAAA,CACrD,EAAA,CAEN,GAAID,CAAAA,CAAiB,YAAA,EAAc,OAAS,QAAA,CAC1C,OAAO,GAAGD,CAAU;AAAA,MAAA,EAAWC,EAAiB,IAAI,CAAA;AAAA,MAAA,EAAaA,CAAAA,CAAiB,YAAA,CAAa,KAAK,CAAA,EAAA,EAAKG,CAAmB,CAAA;AAAA,IAAA,CAAA,CAG9H,GAAIH,CAAAA,CAAiB,YAAA,EAAc,KAAA,CACjC,OAAO,GAAGD,CAAU;AAAA,MAAA,EAAWC,EAAiB,IAAI,CAAA;AAAA,MAAA,EAA+CA,CAAAA,CAAiB,YAAA,CAAa,KAAK,CAAA,EAAA,EAAKG,CAAmB,CAAA;AAAA,IAAA,CAElK,CAEA,OAAO,CAAA,EAAGJ,CAAU;AAAA,MAAA,EAAWC,EAAiB,IAAI;AAAA,EAAA,CACtD,EAAG,EAAE,CAAA,CAEL,OACE,CAAA,EAAGR,EAAU,IAAI,CAAA;AAAA;AAAA,KAAA,EAGdD,CAAG;AAAA,IAAA,EAASC,CAAAA,CAAU,IAAI,CAAA,0CAAA,EAA6CM,CAAAA,EAAsB,EAAE,CAAA;AAAA,EAAA,CAGtG,CAAA,CAAG,EAAE,CAAA,CAEL,OAAO,CACL,eAAA,CAAiBrB,CAAAA,CACjB,KAAA,CACE,CAAA,gBAAA,EAAmBO,CAAO,CAAA;AAAA,EAAA,EACrBP,CAAgB,CAAA;AAAA;AAAA;AAAA,EAAA,EAGhBA,CAAgB,GAAGE,CAAO,CAAA;AAAA;AAAA,IAAA,EAExBM,CAAoB,CAAA,IAAA,EACpBS,CAAmB,CAAA,IAAA,EACnBC,CAAmB,KACrBC,CAA0B,CAAA;AAAA;AAAA,CAGnC,CACF,CAKO,SAASQ,EAAAA,CACd3B,CAAAA,CACAC,EACA2B,CAAAA,CACAvH,CAAAA,CAC0B,CAE1B,IAAMiG,EADeF,EAAAA,CAAgB/F,CAAAA,CAAQ2F,CAAgB,CAAA,EAC5B,UAAA,EAAc,EAAC,CAEhD,GAAIM,CAAAA,CAAW,MAAA,GAAW,EACxB,OAAO,CACL,KAAA,CAAO,CAAA,CACP,QAAS,EACX,CAAA,CAGF,GAAM,CAAE,KAAA,CAAAuB,CAAM,EAAID,CAAAA,CAAQ,CAAA,EAAG5B,CAAgB,CAAA,SAAA,CAAW,CAAA,CAClD8B,CAAAA,CAAQF,CAAAA,CAAQ5B,CAAgB,CAAA,CAChC+B,CAAAA,CAAuB,CAACC,CAAAA,CAAsBC,IAAwC,CAC1F,IAAMC,CAAAA,CAAuBD,CAAAA,CAAiB,KAE9C,OAAOD,CAAAA,CACJ,MAAM,CAAA,CAAG,CAAC,EACV,GAAA,CAAKvH,CAAAA,EACJwH,CAAAA,CAAiB,KAAA,GAAU,QACtBxH,CAAAA,CAAKyH,CAAoB,IAAIjC,CAAK,CAAA,EAAKxF,EAAKyH,CAAoB,CAAA,CAAE,OAAA,CACnEzH,CAAAA,CAAKyH,CAAoB,CAC/B,CAAA,CACC,KAAK,IAAI,CACd,EACMC,CAAAA,CAAoBL,CAAAA,CAAM,GAAA,CAAKM,CAAAA,EAAW,CAC9C,GAAM,CAAE,GAAA,CAAAC,CAAI,EAAID,CAAAA,CACVE,CAAAA,CAAmB7B,CAAAA,CAAwB,QAAA,CAAUH,CAAU,CAAA,CAAE,MAAA,CACrE,CAACQ,CAAAA,CAAKyB,CAAAA,IAAmB,CAAE,GAAGzB,CAAAA,CAAK,CAACyB,CAAa,EAAGH,CAAAA,CAAOG,CAAa,CAAE,CAAA,CAAA,CAC1E,EACF,CAAA,CACM3B,CAAAA,CAAkBH,CAAAA,CAAwB,OAAA,CAASH,CAAU,CAAA,CAAE,MAAA,CAAO,CAACQ,CAAAA,CAAKyB,CAAAA,GAAkB,CAClG,IAAMvB,CAAAA,CAAkBoB,CAAAA,CAAOG,CAAa,EAE5C,OAAO,CACL,GAAGzB,CAAAA,CACH,CAACyB,CAAa,EAAGvB,CAAAA,GAAkBf,CAAK,EAAIe,CAAAA,CAAgBf,CAAK,EAAIe,CAAAA,EAAiB,OACxF,CACF,CAAA,CAAG,EAAE,CAAA,CACCN,EAAkBC,EAAAA,CAAmBL,CAAU,EAAE,MAAA,CACrD,CAACQ,EAAKyB,CAAAA,IAAmB,CAAE,GAAGzB,CAAAA,CAAK,CAACyB,CAAa,EAAGH,EAAOG,CAAa,CAAE,GAC1E,EACF,CAAA,CACMC,CAAAA,CAAyB/B,EAAwB,CAAC,cAAc,CAAA,CAAGH,CAAU,EAAE,MAAA,CACnF,CAACQ,CAAAA,CAAKyB,CAAAA,GAAkB,CAEtB,IAAME,CAAAA,CADwB3H,KAAKC,MAAAA,CAAOwH,CAAAA,CAAe,MAAM,CAAC,CAAA,CAAEjC,CAAU,CAAA,CAC5B,cAAc,MAAA,EAAU,EAAA,CAClEoC,CAAAA,CAAgB5H,IAAAA,CAAKC,OAAO0H,CAAAA,CAAmB,MAAM,CAAC,CAAA,CAAEpI,CAAM,CAAA,CAC9D4H,CAAAA,CAAmBU,GAAoBD,CAAAA,EAAe,UAAA,EAAc,EAAE,CAAA,CACtER,CAAAA,CAAuBD,CAAAA,EAAkB,MAAQ,EAAA,CACjDW,CAAAA,CAAwBX,CAAAA,EAAkB,KAAA,EAAS,SACnDY,CAAAA,CAAaT,CAAAA,CAAOG,CAAa,CAAA,CAEvC,GAAI,CAACL,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,mEAAmEK,CAAa,CAAA,CAAA,CAAG,CAAA,CAGrG,GAAI,MAAM,OAAA,CAAQM,CAAU,EAC1B,OAAO,CACL,GAAG/B,CAAAA,CACH,CAACyB,CAAa,EAAGR,EAAqBc,CAAAA,CAAYZ,CAAgB,CACpE,CAAA,CAGF,IAAMa,EACJF,CAAAA,GAA0B,QAAA,CACtBC,CAAAA,GAAaX,CAAoB,EAC/BW,CAAAA,GAAaX,CAAoB,CAAA,GAAmCjC,CAAK,GAC1E4C,CAAAA,GAAaX,CAAoB,CAAA,EAAkC,OAAA,CAE1E,OAAO,CACL,GAAGpB,EACH,CAACyB,CAAa,EAAGO,CACnB,CACF,CAAA,CACA,EACF,CAAA,CAEA,OAAO,CAAE,GAAA,CAAAT,CAAAA,CAAK,GAAGC,CAAAA,CAAkB,GAAG1B,CAAAA,CAAiB,GAAGF,EAAiB,GAAG8B,CAAuB,CACvG,CAAC,CAAA,CAED,OAAO,CACL,KAAA,CAAAX,CAAAA,CACA,OAAA,CAASM,CACX,CACF,CAMO,SAASY,EAAAA,CACd/C,EACAC,CAAAA,CACA2B,CAAAA,CACAvH,CAAAA,CAC8B,CAE9B,IAAMiG,CAAAA,CADeF,EAAAA,CAAgB/F,EAAQ2F,CAAgB,CAAA,EAC5B,YAAc,EAAC,CAEhD,GAAIM,CAAAA,CAAW,SAAW,CAAA,CACxB,OAAO,CACL,KAAA,CAAO,CAAA,CACP,QAAS,EACX,CAAA,CAGF,GAAM,CAAE,KAAA,CAAAuB,CAAM,EAAID,CAAAA,CAAQ,CAAA,EAAG5B,CAAgB,CAAA,SAAA,CAAW,CAAA,CAElDmC,CAAAA,CADQP,CAAAA,CAAQ5B,CAAgB,CAAA,CACN,GAAA,CAAKoC,CAAAA,EAAW,CAC9C,IAAME,CAAAA,CAAmB7B,CAAAA,CAAwB,QAAA,CAAUH,CAAU,EAAE,MAAA,CACrE,CAACQ,EAAKC,CAAAA,IAAe,CACnB,GAAGD,CAAAA,CACH,CAACC,CAAS,EAAG,CACX,KAAA,CAAOqB,CAAAA,CAAOrB,CAAS,CAAA,CACvB,SAAU,KAAA,CACV,KAAA,CAAO,SAAA,CACP,GAAA,CAAK,EACP,CACF,CAAA,CAAA,CACA,EACF,CAAA,CACMH,EAAkBH,CAAAA,CAAwB,OAAA,CAASH,CAAU,CAAA,CAAE,OAAO,CAACQ,CAAAA,CAAKyB,CAAAA,GAAkB,CAClG,IAAMS,CAAAA,CAAkBlI,IAAAA,CAAKC,MAAAA,CAAOwH,CAAAA,CAAe,MAAM,CAAC,CAAA,CAAEjC,CAAU,CAAA,CAChE2C,CAAAA,CAAiBb,EAAOG,CAAa,CAAA,CAE3C,OAAO,CACL,GAAGzB,CAAAA,CACH,CAACyB,CAAa,EAAG,CACf,MAAOU,CAAAA,CAAiBC,EAAAA,CAAgBD,CAAAA,CAAgBhD,CAAK,EAAI,IAAA,CACjE,QAAA,CAAU,GACRgD,CAAAA,EAAkBA,CAAAA,CAAehD,CAAK,CAAA,GAAM,IAAA,EAAQ+C,CAAAA,CAAgB,KAAA,GAAU,SAAW/C,CAAAA,GAAU,SAAA,CAAA,CAErG,KAAA,CAAAA,CAAAA,CACA,IAAKgD,CAAAA,CAAiBA,CAAAA,CAAe,GAAA,CAAM,IAC7C,CACF,CACF,CAAA,CAAG,EAAE,CAAA,CACCvC,EAAkBC,EAAAA,CAAmBL,CAAU,CAAA,CAAE,MAAA,CACrD,CAACQ,CAAAA,CAAKC,CAAAA,IAAe,CACnB,GAAGD,CAAAA,CACH,CAACC,CAAS,EAAG,CACX,KAAA,CAAOqB,EAAOrB,CAAS,CAAA,CACvB,SAAU,KAAA,CACV,KAAA,CAAO,UACP,GAAA,CAAK,EACP,CACF,CAAA,CAAA,CACA,EACF,CAAA,CACMyB,CAAAA,CAAyB/B,CAAAA,CAAwB,CAAC,cAAc,CAAA,CAAGH,CAAU,CAAA,CAAE,OACnF,CAACQ,CAAAA,CAAKyB,IAAkB,CACtB,IAAMO,EAAQV,CAAAA,CAAOG,CAAa,CAAA,CAC5BF,CAAAA,CAAMS,GAAO,GAAA,CACbK,CAAAA,CAAkBf,EAAO,CAAA,EAAGG,CAAa,WAAW,CAAA,CAAqB,KAAA,CAE/E,OAAO,CACL,GAAGzB,CAAAA,CACH,CAACyB,CAAa,EAAG,CACf,MAAOY,CAAAA,CACP,GAAA,CAAAd,CAAAA,CACA,KAAA,CAAAS,EACA,QAAA,CAAU,KAAA,CACV,KAAA,CAAA7C,CACF,CACF,CACF,CAAA,CACA,EACF,EAEA,OAAO,CAAE,GAAGqC,CAAAA,CAAkB,GAAG1B,EAAiB,GAAGF,CAAAA,CAAiB,GAAG8B,CAAuB,CAClG,CAAC,CAAA,CAED,OAAO,CACL,KAAA,CAAAX,EACA,OAAA,CAASM,CACX,CACF,CAKA,SAASe,EAAAA,CACPnC,CAAAA,CACAd,EACmD,CACnD,OAAI,MAAM,OAAA,CAAQc,CAAS,CAAA,CAClBA,CAAAA,CAAU,OAAO,CAACqC,CAAAA,CAA0BC,CAAAA,GAAyB,CAC1E,GAAIA,CAAAA,CAAKpD,CAAK,CAAA,EAAKoD,CAAAA,CAAK,QAAS,CAC/B,IAAMC,EAAS,CACb,GAAA,CAAKD,EAAK,GAAA,CACV,QAAA,CAAkBA,CAAAA,CAAK,KAAA,GAAU,MAAQpD,CAAAA,GAAU,SAAA,CACnD,MAAAA,CAAAA,CACA,KAAA,CAAOoD,EAAKpD,CAAK,CAAA,EAAKoD,CAAAA,CAAK,OAC7B,EAEAD,CAAAA,CAAO,IAAA,CAAKE,CAAM,EACpB,CAEA,OAAOF,CACT,CAAA,CAAG,EAAE,EAGArC,CAAAA,CAAUd,CAAK,CAAA,EAAKc,CAAAA,CAAU,SAAW,IAClD,CAKO,SAASwC,EAAAA,CACdvD,EACAwD,CAAAA,CACAvD,CAAAA,CACA5F,EACAoJ,CAAAA,CACAC,CAAAA,CACQ,CACR,IAAMvD,CAAAA,CAAeC,EAAAA,CAAgB/F,CAAAA,CAAQ2F,CAAgB,CAAA,CACvDK,CAAAA,CAAaF,GAAc,IAAA,EAAQH,CAAAA,CACnCM,EAAaH,CAAAA,EAAc,UAAA,EAAc,EAAC,CAC1CwD,EAAuBC,EAAAA,CAAW5D,CAAgB,EAExD,GAAIM,CAAAA,CAAW,SAAW,CAAA,CACxB,OAAO,EAAA,CAGT,IAAM5N,EAAOmR,EAAAA,CAA2BvD,CAAAA,CAAYoD,CAAY,CAAA,CAC1DpB,EAAmBwB,EAAAA,CAAuBxD,CAAAA,CAAY5N,CAAI,CAAA,CAC1DkO,EAAkBmD,EAAAA,CAAsBP,CAAAA,CAAUlD,EAAY5N,CAAAA,CAAMuN,CAAK,EACzES,CAAAA,CAAkBsD,EAAAA,CAAsBR,CAAAA,CAAUlD,CAAAA,CAAY5N,CAAI,CAAA,CAClE8P,CAAAA,CAAyByB,GAA6B3D,CAAAA,CAAYmD,CAAAA,CAAc/Q,CAAI,CAAA,CACpFwR,CAAAA,CAAelE,CAAAA,CACfmE,CAAAA,CAAqBC,GAAgC/J,CAAAA,CAAQ2F,CAAAA,CAAkBC,CAAK,CAAA,CAE1F,OACE,iCAAiCI,CAAU,CAAA;AAAA,QAAA,EAChCsD,CAAoB,CAAA;AAAA;AAAA,aAAA,EAEfrB,CAAgB,CAAA,EAAG1B,CAAe,CAAA,EAAGF,CAAe,GAAG8B,CAAsB;AAAA;AAAA;AAAA,IAAA,EAEtF0B,CAAY,CAAA;AAAA;AAAA,IAAA,EAEZC,CAAkB,CAAA;AAAA;AAAA;AAAA,CAK7B,CAKA,SAASN,EAAAA,CAA2BvD,CAAAA,CAAyBoD,EAA0C,CACrG,IAAMW,CAAAA,CAA4C/D,CAAAA,CAC/C,GAAA,CAAKS,CAAAA,EACAA,CAAAA,CAAU,UAAA,GAAe,MACpBA,CAAAA,CAAU,IAAA,CAGZ,EACR,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACXrO,CAAAA,CAAO4R,KAAKD,CAAAA,CAAwBX,CAAY,CAAA,CAEtD,OAAOa,IAAAA,CACLjE,CAAAA,CAAW,GAAA,CAAKS,CAAAA,EAAcA,EAAU,IAAI,CAAA,CAC5CrO,CACF,CACF,CAKA,SAAS+N,CAAAA,CAAwB+D,CAAAA,CAA+BlE,EAA8C,CAC5G,OAAI,KAAA,CAAM,OAAA,CAAQkE,CAAI,CAAA,CACbA,CAAAA,CAAK,MAAA,CAAO,CAAC1D,CAAAA,CAA0B2D,CAAAA,GACrC3D,CAAAA,CAAI,MAAA,CAAOL,CAAAA,CAAwBgE,CAAAA,CAAenE,CAAU,CAAC,EACnE,EAAE,CAAA,CAGoBA,CAAAA,CAAW,OACnCS,CAAAA,EAAcA,CAAAA,CAAU,KAAA,GAAUyD,CAAAA,EAAQzD,EAAU,SAAA,GAAc,OACrE,CAAA,CAE0B,GAAA,CAAKA,CAAAA,EAAcA,CAAAA,CAAU,IAAI,CAC7D,CAKA,SAASJ,EAAAA,CAAmBL,CAAAA,CAA8C,CAGxE,OAF2Bc,MAAAA,CAAOrG,MAAAA,CAAO,OAAA,CAAS,UAAU,CAAC,CAAA,CAAEuF,CAAU,CAAA,CAE/C,GAAA,CAAKS,CAAAA,EAAcA,CAAAA,CAAU,IAAI,CAC7D,CAEA,SAAS+C,EAAAA,CAAuBY,CAAAA,CAA+BhS,EAA8B,CAC3F,IAAM4P,CAAAA,CAAmBiC,IAAAA,CAAK9D,EAAwB,QAAA,CAAUiE,CAAgB,CAAA,CAAehS,CAAI,CAAA,CAQnG,OAPyBiS,OAAAA,CAAQrC,CAAgB,EAAE,MAAA,CAAO,CAACxB,CAAAA,CAAK,CAACyB,CAAAA,CAAeO,CAAK,CAAA,GAAM,CACzF,IAAME,CAAAA,CAAkBlI,IAAAA,CAAKC,MAAAA,CAAOwH,CAAAA,CAAe,MAAM,CAAC,CAAA,CAAEmC,CAAgB,EACtEE,CAAAA,CAAaC,EAAAA,CAAe7B,CAAAA,CAAgB,QAAA,CAAUF,GAAO,KAAA,EAAS,IAAI,CAAA,CAEhF,OAAO,GAAGhC,CAAG;AAAA,MAAA,EAAWyB,CAAa,KAAKqC,CAAU,CAAA,CACtD,EAAG,EAAE,CAGP,CAEA,SAASZ,EAAAA,CAAsBR,EAAkBkB,CAAAA,CAA+BhS,CAAAA,CAA8B,CAC5G,IAAMgO,CAAAA,CAAkB6D,KAAK5D,EAAAA,CAAmB+D,CAAgB,EAAehS,CAAI,CAAA,CAoDnF,OAnDoDiS,OAAAA,CAAQjE,CAAe,EAC1B,MAAA,CAAO,CAACI,EAAK,CAACyB,CAAAA,CAAeuC,CAAc,CAAA,GAAM,CAChG,IAAMC,CAAAA,CAAaD,CAAAA,CAAe,MAC5BE,CAAAA,CAAYD,CAAAA,EAAY,KAAO,CAAA,CAAA,EAAIA,CAAAA,CAAW,IAAI,CAAA,CAAA,CAAA,CAAM,MAAA,CACxDE,CAAAA,CAAYF,GAAY,IAAA,CAAOA,CAAAA,CAAW,KAAO,MAAA,CACjDG,CAAAA,CAAgBH,GAAY,QAAA,CAAW,CAAA,CAAA,EAAIA,EAAW,QAAQ,CAAA,CAAA,CAAA,CAAM,OACpEI,CAAAA,CAAmBJ,CAAAA,EAAY,iBAAmB,CAAA,CAAA,EAAIA,CAAAA,CAAW,gBAAgB,CAAA,CAAA,CAAA,CAAM,MAAA,CACvFK,EAASL,CAAAA,EAAY,MAAA,CAASA,EAAW,MAAA,CAAS,MAAA,CAClDM,EAAQN,CAAAA,EAAY,KAAA,CAAQA,EAAW,KAAA,CAAQ,MAAA,CAC/CO,EAAOP,CAAAA,EAAY,IAAA,CAAO,IAAIA,CAAAA,CAAW,IAAI,IAAM,MAAA,CAEzD,OAAKC,EAIAF,CAAAA,CAAe,KAAA,EAAsB,GAAA,CAEtC,CAAA,EAAGhE,CAAG;AAAA,MAAA,EAAWyB,CAAa,CAAA;AAAA;AAAA;AAAA,sBAAA,EAGL2C,CAAa;AAAA,8BAAA,EACLC,CAAgB;AAAA,kBAAA,EAC5BH,CAAS;AAAA,kBAAA,EACTC,CAAS;AAAA,oBAAA,EACPG,CAAM;AAAA,mBAAA,EACPC,CAAK;AAAA,kBAAA,EACNC,CAAI;AAAA;AAAA;AAAA,OAAA,CAAA,CAQ3B,GAAGxE,CAAG;AAAA,MAAA,EAAWyB,CAAa,CAAA;AAAA;AAAA;AAAA,kBAAA,EAGTiB,CAAQ,IAAIjB,CAAa,CAAA;AAAA,sBAAA,EACrB2C,CAAa;AAAA,8BAAA,EACLC,CAAgB;AAAA,kBAAA,EAC5BH,CAAS;AAAA,kBAAA,EACTC,CAAS;AAAA,oBAAA,EACPG,CAAM;AAAA,mBAAA,EACPC,CAAK;AAAA,kBAAA,EACNC,CAAI;AAAA;AAAA;AAAA,OAAA,CAAA,CAhClBxE,CAqCX,CAAA,CAAG,EAAE,CAGP,CAEA,SAASiD,EAAAA,CACPP,CAAAA,CACAkB,CAAAA,CACAhS,CAAAA,CACAuN,CAAAA,CACQ,CACR,IAAMW,CAAAA,CAAkB2D,IAAAA,CAAK9D,CAAAA,CAAwB,OAAA,CAASiE,CAAgB,CAAA,CAAehS,CAAI,CAAA,CA+BjG,OA9BoDiS,OAAAA,CAAQ/D,CAAe,CAAA,CAC1B,MAAA,CAAO,CAACE,CAAAA,CAAK,CAACyB,CAAAA,CAAeuC,CAAc,CAAA,GAAM,CAChG,IAAM9B,CAAAA,CAAkBlI,IAAAA,CAAKC,MAAAA,CAAOwH,CAAAA,CAAe,MAAM,CAAC,CAAA,CAAEmC,CAAgB,CAAA,CACtE,CAAE,QAAA,CAAAa,CAAS,CAAA,CAAIvC,EACf4B,CAAAA,CACJE,CAAAA,CAAe,QAAA,EAAY,KAAA,CAAM,OAAA,CAAQA,CAAAA,CAAe,KAAK,CAAA,CACzD,OACAD,EAAAA,CAAeU,CAAAA,CAAUT,CAAAA,CAAe,KAAK,CAAA,CAEnD,OAAIA,CAAAA,CAAe,GAAA,CACV,GAAGhE,CAAG;AAAA,MAAA,EAAWyB,CAAa,CAAA;AAAA;AAAA;AAAA,YAAA,EAA0DtC,CAAK,KAAK2E,CAAU;AAAA;AAAA;AAAA,OAAA,CAAA,CAGhHA,CAAAA,CAKH,GAAG9D,CAAG;AAAA,MAAA,EAAWyB,CAAa,CAAA;AAAA;AAAA;AAAA,kBAAA,EAGTiB,CAAQ,IAAIjB,CAAa,CAAA;AAAA,oBAAA,EACvBgD,CAAQ,CAAA;AAAA,YAAA,EAChBtF,CAAK,KAAK2E,CAAU;AAAA;AAAA;AAAA,OAAA,CAAA,CAT5B9D,CAcX,CAAA,CAAG,EAAE,CAGP,CAEA,SAASmD,EAAAA,CACPS,CAAAA,CACAjB,CAAAA,CACA/Q,CAAAA,CACQ,CACR,IAAM8P,CAAAA,CAAyB+B,KAAK9D,CAAAA,CAAwB,cAAA,CAAgBiE,CAAgB,CAAA,CAAehS,CAAI,CAAA,CAyC/G,OAxCwBiS,OAAAA,CAAQnC,CAAsB,CAAA,CACL,MAAA,CAAO,CAAC1B,CAAAA,CAAK,CAACyB,EAAeuC,CAAc,CAAA,GAAM,CAChG,IAAM9B,CAAAA,CAAkBlI,IAAAA,CAAKC,MAAAA,CAAOwH,CAAAA,CAAe,MAAM,CAAC,CAAA,CAAEmC,CAAgB,CAAA,CACtE,CAAE,SAAA,CAAAc,CAAAA,CAAW,YAAA,CAAAC,CAAa,CAAA,CAAIzC,CAAAA,CAEpC,GAAIwC,CAAAA,GAAc,cAAA,EAAkBC,CAAAA,EAAc,IAAA,GAAS,QAAA,CAAU,CACnE,IAAMC,CAAAA,CAAa,CAAA;AAAA;AAAA;AAAA,oBAAA,EACjBjC,CAAAA,CAAalB,CAAa,CAAA,CAAE,GAAA,EAAO,EACrC,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CACMoD,CAAAA,CAAU,CAAA;AAAA;AAAA;AAAA,oBAAA,EACdb,CAAAA,CAAe,KAAO,EACxB,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAEA,OAAO,GAAGhE,CAAG;AAAA,MAAA,EAAWyB,CAAa,CAAA;AAAA,QAAA,EAAgBoD,CAAO,WAAWD,CAAU,CAAA,OAAA,CACnF,CAEA,GAAIF,CAAAA,GAAc,cAAA,EAAkBC,CAAAA,EAAc,IAAA,GAAS,UAAA,CAAY,CACrE,IAAMG,CAAAA,CAAwCd,EAAe,aAAA,EAAe,UAAA,EAAY,OACtF,CAACe,CAAAA,CAA0BxD,CAAAA,GAClB,CAAA,EAAGwD,CAAgB,CAAA;AAAA;AAAA,wBAAA,EAAqExD,CAAG,CAAA;AAAA;AAAA;AAAA,CAAA,CAEpG,EACF,CAAA,CAEMyD,CAAAA,CAAAA,CADehB,CAAAA,CAAe,aAAA,EAAe,OAAA,EAAqD,EAAC,EAClD,MAAA,CAAO,CAACiB,CAAAA,CAAuBC,CAAAA,GAC7E,GAAGD,CAAa,CAAA;AAAA,wBAAA,EAA8CC,EAAK,GAAG,CAAA;AAAA;AAAA,CAAA,CAC5E,EAAE,CAAA,CACCN,CAAAA,CAAaE,CAAAA,CACf,CAAA;AAAA;AAAA;AAAA,EAAyDA,CAAiB,CAAA;AAAA;AAAA;AAAA,CAAA,CAC1E,EAAA,CACED,EAAUG,CAAAA,CACZ,CAAA;AAAA;AAAA;AAAA;AAAA,EAA6EA,CAAc,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAC3F,EAAA,CAEJ,OAAO,CAAA,EAAGhF,CAAG;AAAA,MAAA,EAAWyB,CAAa,CAAA;AAAA,QAAA,EAAgBmD,CAAU,CAAA,QAAA,EAAWC,CAAO,SACnF,CAEA,OAAO,GAAG7E,CAAG;AAAA,CACf,EAAG,EAAE,CAGP,CAEA,SAAS+D,EAAAA,CACPL,EACA1B,CAAAA,CACe,CACf,OAAIhD,EAAAA,CAAc,QAAA,CAAS0E,CAAI,CAAA,CACtB1B,CAAAA,EAAO,UAAS,CAAE,OAAA,CAAQ,KAAM,KAAK,CAAA,CAAI,CAAA,CAAA,EAAIA,CAAAA,EAAO,UAAS,CAAE,OAAA,CAAQ,KAAM,KAAK,CAAC,IAAM,IAAA,CAG3FjD,EAAAA,CAAY,SAAS2E,CAAI,CAAA,CAC5B,IAAI1B,CAAAA,EAAO,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAM,KAAK,CAAA,EAAK,MAAM,CAAA,CAAA,CAAA,CACnDA,CAAAA,EAAO,UAAS,EAAK,IAC5B,CAEA,SAASsB,EAAAA,CAAgC/J,EAAgB2F,CAAAA,CAA0BC,CAAAA,CAAuB,CAExG,IAAMyE,CAAAA,CADetE,GAAgB/F,CAAAA,CAAQ2F,CAAgB,GACtB,UAAA,EAAc,GAC/CiG,CAAAA,CAAwBxF,CAAAA,CAAwB,SAAUiE,CAAgB,CAAA,CAC1EwB,EAAuBzF,CAAAA,CAAwB,OAAA,CAASiE,CAAgB,CAAA,CACxEyB,CAAAA,CAA8B1F,EAAwB,cAAA,CAAgBiE,CAAgB,EAExF0B,CAAAA,CAASH,CAAAA,CAAsB,OAAO,CAACnF,CAAAA,CAAKyB,IACvC,CAAA,EAAGzB,CAAG,GAAGyB,CAAa;AAAA,EAAA,CAAA,CAC5B,EAAE,CAAA,CAEL,OAAA6D,CAAAA,EAAUF,CAAAA,CAAqB,MAAA,CAAO,CAACpF,CAAAA,CAAKyB,CAAAA,GACnC,CAAA,EAAGzB,CAAG,CAAA,IAAA,EAAOyB,CAAa,CAAA;AAAA;AAAA,QAAA,EAA4BtC,CAAK;AAAA;AAAA,EAAA,CAAA,CACjE,EAAE,CAAA,CAELmG,CAAAA,EAAUD,CAAAA,CAA4B,MAAA,CAAO,CAACrF,CAAAA,CAAKyB,CAAAA,GAA0B,CAC3E,IAAM8D,CAAAA,CAAwBvL,IAAAA,CAAKC,OAAOwH,CAAAA,CAAe,MAAM,CAAC,CAAA,CAAEmC,CAAgB,CAAA,CAC5E4B,CAAAA,CAAmBD,CAAAA,EAAuB,YAAA,EAAc,IAAA,EAAQ,QAAA,CAChEE,CAAAA,CAAyBF,CAAAA,EAAuB,YAAA,EAAc,MAAA,EAAU,EAAA,CAExEG,EAD2B1L,IAAAA,CAAKC,MAAAA,CAAOwL,CAAAA,CAAwB,MAAM,CAAC,CAAA,CAAElM,CAAM,CAAA,EACrB,UAAA,EAAc,EAAC,CACxE6H,CAAAA,CACJmE,CAAAA,EAAuB,YAAA,EAAc,KAAA,EAAS,6CAAA,CAE1CzD,EADmB9H,IAAAA,CAAKC,MAAAA,CAAOmH,CAAAA,CAAsB,MAAM,CAAC,CAAA,CAAEsE,CAA4B,CAAA,CACjD,MAC3CC,CAAAA,CAAO,EAAA,CAYX,GAVIH,CAAAA,GAAqB,QAAA,GACnB1D,CAAAA,GAA0B,QAAA,GAC5B6D,CAAAA,CAAO,KAAKlE,CAAa,CAAA;AAAA;AAAA,IAAA,EAAsBL,CAAoB;AAAA;AAAA,EAAA,CAAA,CAAA,CAGjEU,CAAAA,GAA0B,OAAA,GAC5B6D,CAAAA,CAAO,CAAA,EAAA,EAAKlE,CAAa,CAAA;AAAA;AAAA,MAAA,EAAwBL,CAAoB,CAAA;AAAA;AAAA;AAAA,QAAA,EAA6CjC,CAAK;AAAA;AAAA;AAAA,EAAA,CAAA,CAAA,CAAA,CAIvHqG,CAAAA,GAAqB,YAAcE,CAAAA,CAA6B,MAAA,CAAQ,CAC1E,IAAME,CAAAA,CAAiCF,CAAAA,CAA6B,MAAA,CAAO,CAACG,CAAAA,CAAK5F,IAAc,CAC7F,GAAIA,EAAU,KAAA,GAAU,OAAA,CACtB,OAAO,CAAA,EAAG4F,CAAG,CAAA,QAAA,EAAW5F,CAAAA,CAAU,IAAI,CAAA;AAAA;AAAA;AAAA,UAAA,EAAmDd,CAAK;AAAA;AAAA,CAAA,CAGhG,GAAIc,CAAAA,CAAU,KAAA,GAAU,cAAA,CAAgB,CACtC,IAAMS,CAAAA,CAAkBvB,CAAAA,GAAU,SAAA,CAAY,EAAA,CAAK,CAAA,EAAGA,CAAK;AAAA,IAAA,CAAA,CACrDwB,CAAAA,CAAqB3G,IAAAA,CAAKC,MAAAA,CAAOgG,CAAAA,CAAU,YAAA,EAAc,MAAA,CAAQ,MAAM,CAAC,CAAA,CAAE1G,CAAM,CAAA,CAIhFqH,CAAAA,CAHwB5G,IAAAA,CAAKC,OAAOgG,CAAAA,CAAU,YAAA,EAAc,KAAA,CAAO,MAAM,CAAC,CAAA,CAC9EU,CAAAA,EAAoB,UAAA,EAAc,EACpC,CAAA,CAEwB,KAAA,GAAU,OAAA,CAC5B,CAAA;AAAA;AAAA;AAAA,MAAA,EAAsCD,CAAe,CAAA;AAAA,QAAA,CAAA,CACrD,EAAA,CAEN,GAAIT,CAAAA,CAAU,YAAA,EAAc,IAAA,GAAS,QAAA,CACnC,OAAO,CAAA,EAAG4F,CAAG,CAAA,EAAA,EAAK5F,CAAAA,CAAU,IAAI,CAAA;AAAA,MAAA,EAAaA,CAAAA,CAAU,YAAA,CAAa,KAAK,CAAA,EAAA,EAAKW,CAAmB,CAAA;AAAA,IAAA,CAAA,CAGnG,GAAIX,EAAU,YAAA,EAAc,KAAA,CAC1B,OAAO,CAAA,EAAG4F,CAAG,CAAA,EAAA,EAAK5F,CAAAA,CAAU,IAAI,CAAA;AAAA,MAAA,EAA+CA,CAAAA,CAAU,YAAA,CAAa,KAAK,CAAA,EAAA,EAAKW,CAAmB,CAAA;AAAA,IAAA,CAEvI,CAEA,OAAIX,CAAAA,CAAU,SAAA,GAAc,QACnB,CAAA,EAAG4F,CAAG,CAAA,EAAA,EAAK5F,CAAAA,CAAU,IAAI,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAG3B,CAAA,EAAG4F,CAAG,CAAA,EAAA,EAAK5F,CAAAA,CAAU,IAAI;AAAA,EAAA,CAClC,CAAA,CAAG,EAAE,CAAA,CAEL0F,CAAAA,CACE,OAAOlE,CAAa,CAAA;AAAA;AAAA;AAAA,MAAA,EAGXA,CAAa,CAAA;AAAA,EAAyCmE,CAA8B,CAAA;AAAA,EAEjG,CAEA,OAAO,CAAA,EAAG5F,CAAG,GAAG2F,CAAI,CAAA,CACtB,CAAA,CAAG,EAAE,CAAA,CAEEL,CACT,CAKO,SAASQ,EAAAA,CAAwBvG,EAAoBhG,CAAAA,CAAgBgI,CAAAA,CAAqB,CAC/F,IAAMlC,CAAAA,CAAerF,IAAAA,CAAKC,MAAAA,CAAOsF,CAAAA,CAAY,MAAM,CAAC,CAAA,CAAEhG,CAAM,EACtDiG,CAAAA,CAAaH,CAAAA,EAAc,YAAc,EAAC,CAC1CwD,CAAAA,CAAuBC,EAAAA,CAAWzD,CAAAA,EAAc,MAAA,EAAU,EAAE,CAAA,CAC5DS,CAAAA,CAAkBiG,GAAsBvG,CAAAA,CAAY+B,CAAG,EAE7D,OAAIhC,CAAAA,GAAe,QAAA,CAEf,CAAA,8BAAA,EAAiCA,CAAU,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAY7C,iCAAiCA,CAAU,CAAA;AAAA,QAAA,EAChCsD,CAAoB,CAAA;AAAA;AAAA,EAE5B/C,CAAAA,CAAkB,CAAA;AAAA,KAAA,EAAuBA,CAAe;AAAA;AAAA,CAAA,CAAc,EAAE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAO/E,CAEA,SAASiG,EAAAA,CAAsBnC,CAAAA,CAA+BrC,CAAAA,CAAqB,CAejF,OAdwB5B,CAAAA,CAAwB,OAAA,CAASiE,CAAgB,EACxB,MAAA,CAAO,CAAC5D,CAAAA,CAAKyB,CAAAA,GAE1D,GAAGzB,CAAG;AAAA,MAAA,EACGyB,CAAa,CAAA;AAAA;AAAA;AAAA,kBAAA,EAGDF,CAAG,IAAIE,CAAa,CAAA;AAAA;AAAA;AAAA,OAAA,CAAA,CAK1C,EAAE,CAGP,CAEO,SAASuE,EAAAA,CACd9G,CAAAA,CACA3F,CAAAA,CACA0M,CAAAA,CACA1E,CAAAA,CACQ,CACR,IAAMlC,CAAAA,CAAeC,GAAgB/F,CAAAA,CAAQ2F,CAAgB,CAAA,CACvDM,CAAAA,CAAaH,CAAAA,EAAc,UAAA,EAAc,EAAC,CAC1CwD,CAAAA,CAAuBC,EAAAA,CAAWzD,CAAAA,EAAc,MAAA,EAAU,EAAE,CAAA,CAElE,GAAIG,CAAAA,CAAW,SAAW,CAAA,CACxB,OAAO,EAAA,CAGT,IAAM5N,CAAAA,CAAOmR,EAAAA,CAA2BvD,CAAAA,CAAYyG,CAAU,CAAA,CACxDzE,CAAAA,CAAmBwB,EAAAA,CAAuBxD,CAAAA,CAAY5N,CAAI,CAAA,CAC1DkO,CAAAA,CAAkBoG,EAAAA,CAAsB1G,EAAY5N,CAAAA,CAAM,SAAA,CAAW2P,CAAG,CAAA,CACxEG,CAAAA,CAAyByE,EAAAA,CAA6B3G,CAAAA,CAAY5N,CAAI,CAAA,CACtEwR,CAAAA,CAAelE,CAAAA,CACfmE,CAAAA,CAAqBC,EAAAA,CAAgC/J,CAAAA,CAAQ6J,CAAAA,CAAc,SAAS,EAE1F,OACE,CAAA;AAAA,QAAA,EACWP,CAAoB,CAAA;AAAA;AAAA,YAAA,EAEhBtB,CAAG,CAAA,OAAA,EACTC,CAAgB,CAAA,MAAA,EAChB1B,CAAe;AAAA,MAAA,EACf4B,CAAsB;AAAA;AAAA;AAAA,IAAA,EAGxB0B,CAAY,CAAA;AAAA,MAAA,EACVC,CAAkB,CAAA;AAAA;AAAA;AAAA,CAK/B,CAEA,SAAS6C,EAAAA,CACPtC,CAAAA,CACAhS,CAAAA,CACAyI,CAAAA,CACAkH,CAAAA,CACQ,CACR,IAAMzB,CAAAA,CAAkB2D,IAAAA,CAAK9D,CAAAA,CAAwB,OAAA,CAASiE,CAAgB,CAAA,CAAehS,CAAI,CAAA,CA0BjG,OAzBwBiS,OAAAA,CAAQ/D,CAAe,CAAA,CACE,MAAA,CAAO,CAACE,CAAAA,CAAK,CAACyB,CAAAA,CAAeuC,CAAc,CAAA,GAAM,CAChG,GAAI,CAACA,CAAAA,EAAgB,KAAA,CACnB,OAAOhE,CAAAA,CAGT,IAAMkC,CAAAA,CAAkBlI,IAAAA,CAAKC,MAAAA,CAAOwH,CAAAA,CAAe,MAAM,CAAC,CAAA,CAAEmC,CAAgB,CAAA,CACtEE,CAAAA,CAAa,KAAA,CAAM,OAAA,CAAQE,CAAAA,CAAe,KAAK,CAAA,CACjD,MAAA,CACAD,EAAAA,CAAe7B,CAAAA,CAAgB,QAAA,CAAU8B,CAAAA,CAAe,KAAK,CAAA,CAEjE,OACE,CAAA,EAAGhE,CAAG;AAAA,MAAA,EACGyB,CAAa,CAAA;AAAA;AAAA;AAAA,kBAAA,EAGDF,CAAG,IAAIE,CAAa,CAAA;AAAA,oBAAA,EAClBS,EAAgB,QAAQ,CAAA;AAAA,YAAA,EAChC7H,CAAY,KAAKyJ,CAAU;AAAA;AAAA;AAAA,OAAA,CAK9C,CAAA,CAAG,EAAE,CAGP,CAEA,SAASqC,GAA6BvC,CAAAA,CAA+BhS,CAAAA,CAA8B,CACjG,IAAM8P,CAAAA,CAAyB+B,IAAAA,CAAK9D,EAAwB,cAAA,CAAgBiE,CAAgB,CAAA,CAAehS,CAAI,CAAA,CAgC/G,OA/BwBiS,OAAAA,CAAQnC,CAAsB,CAAA,CACL,MAAA,CAAO,CAAC1B,CAAAA,CAAK,CAACyB,CAAAA,CAAeuC,CAAc,CAAA,GAAM,CAChG,IAAM9B,CAAAA,CAAkBlI,IAAAA,CAAKC,MAAAA,CAAOwH,CAAAA,CAAe,MAAM,CAAC,CAAA,CAAEmC,CAAgB,CAAA,CACtE,CAAE,SAAA,CAAAc,EAAW,YAAA,CAAAC,CAAa,CAAA,CAAIzC,CAAAA,CAEpC,GAAIwC,CAAAA,GAAc,cAAA,EAAkBC,CAAAA,EAAc,IAAA,GAAS,QAAA,CAAU,CACnE,IAAME,CAAAA,CAAU,CAAA;AAAA;AAAA;AAAA,oBAAA,EACdb,CAAAA,CAAe,KAAO,EACxB,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAEA,OAAO,GAAGhE,CAAG;AAAA,MAAA,EAAWyB,CAAa,CAAA;AAAA,QAAA,EAAgBoD,CAAO,CAAA,OAAA,CAC9D,CAEA,IAAMuB,CAAAA,CAAyB1B,IAAc,cAAA,EAAkBC,CAAAA,EAAc,IAAA,GAAS,UAAA,CAChF0B,EACJ,KAAA,CAAM,OAAA,CAAQrC,EAAe,aAAA,EAAe,OAAO,GAAKA,CAAAA,CAAe,aAAA,CAAc,OAAA,CAAQ,MAAA,CAAS,EACxG,GAAIoC,CAAAA,EAA0BC,CAAAA,CAAkB,CAE9C,IAAMrB,CAAAA,CAAAA,CADehB,CAAAA,CAAe,aAAA,EAAe,OAAA,EAAqD,EAAC,EAClD,MAAA,CAAO,CAACiB,CAAAA,CAAuBC,CAAAA,GAC7E,GAAGD,CAAa,CAAA;AAAA,wBAAA,EAA8CC,EAAK,GAAG,CAAA;AAAA;AAAA,CAAA,CAC5E,EAAE,CAAA,CACCL,CAAAA,CAAUG,CAAAA,CACZ,CAAA;AAAA;AAAA;AAAA;AAAA,EAA6EA,CAAc,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAC3F,EAAA,CAEJ,OAAO,CAAA,EAAGhF,CAAG;AAAA,MAAA,EAAWyB,CAAa,CAAA;AAAA,QAAA,EAAgBoD,CAAO,CAAA,OAAA,CAC9D,CAEA,OAAO,GAAG7E,CAAG;AAAA,CACf,EAAG,EAAE,CAGP,CAMA,SAAS6B,GAAoB+B,CAAAA,CAA0C,CACrE,OAAOA,CAAAA,CAAiB,KAAMrB,CAAAA,EAASA,CAAAA,CAAK,SAAS,CAAA,EAAKqB,EAAiB,CAAC,CAC9E,CAEO,SAAS0C,GAAqB,CACnC,aAAA,CAAA7E,CAAAA,CACA,iBAAA,CAAAE,EACA,KAAA,CAAAxC,CAAAA,CACA,MAAA,CAAA5F,CACF,EAKgB,CACd,IAAM6F,CAAAA,CAAU,oCAAA,CACVC,EAAerF,IAAAA,CAAKC,MAAAA,CAAO0H,CAAAA,CAAmB,MAAM,CAAC,CAAA,CAAEpI,CAAM,CAAA,CAC7DiG,CAAAA,CAAaH,GAAc,UAAA,EAAc,EAAC,CAC1CI,CAAAA,CAAU,WAAWkC,CAAiB,CAAA,iBAAA,EAAoBA,CAAiB,CAAA,OAAA,CAAA,CAC3E4E,EAAkBlH,CAAAA,EAAc,MAAA,EAAU,EAAA,CAEhD,GAAIG,EAAW,MAAA,GAAW,CAAA,CACxB,OAAO,CACL,gBAAiB,EAAA,CACjB,KAAA,CAAO,EACT,CAAA,CAGF,IAAME,CAAAA,CAA+BC,CAAAA,CAAwB,QAAA,CAAUH,CAAU,EAAE,IAAA,CAAK;AAAA,EAAA,CAAM,CAAA,CACxFM,CAAAA,CAAqCH,CAAAA,CAAwB,CAAC,OAAO,CAAA,CAAGH,CAAU,CAAA,CAClFO,CAAAA,CAAoBD,EAAgB,MAAA,CACxC,CAACE,CAAAA,CAAKC,CAAAA,GAAc,GAAGD,CAAG;AAAA,IAAA,EAASC,CAAS,CAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA,CAC5C,EACF,EACMC,CAAAA,CAAkBJ,CAAAA,CAAgB,OACtC,CAACE,CAAAA,CAAKC,CAAAA,GAAc,CAAA,EAAGD,CAAG;AAAA,IAAA,EAASC,CAAS,CAAA;AAAA;AAAA;AAAA,MAAA,EAAuCd,CAAK;AAAA;AAAA,EAAA,CAAA,CACxF,EACF,EACMgB,CAAAA,CAA8BhB,CAAAA,GAAU,UAAYY,CAAAA,CAAoBG,CAAAA,CAGxEG,EADyBC,MAAAA,CAAOrG,MAAAA,CAAO,eAAgB,OAAO,CAAC,EAAEuF,CAAU,CAAA,CACf,OAAO,CAACQ,CAAAA,CAAKC,IAAc,CAE3F,IAAMM,EADgBvG,IAAAA,CAAKC,MAAAA,CAAOgG,EAAU,YAAA,EAAc,MAAA,CAAQ,MAAM,CAAC,CAAA,CAAE1G,CAAM,CAAA,EACvC,UAAA,CAAW,OAAO,CAACiH,CAAAA,CAAYC,IAAqB,CAC5F,IAAMC,EAAkBvB,CAAAA,GAAU,SAAA,CAAY,EAAA,CAAK,CAAA,EAAGA,CAAK;AAAA,IAAA,CAAA,CAE3D,GAAIsB,CAAAA,CAAiB,KAAA,GAAU,OAAA,CAC7B,OAAO,GAAGD,CAAU;AAAA,MAAA,EAAWC,EAAiB,IAAI,CAAA;AAAA;AAAA;AAAA,MAAA,EAA2CC,CAAe,CAAA;AAAA,IAAA,CAAA,CAGhH,GAAID,CAAAA,CAAiB,KAAA,GAAU,cAAA,CAAgB,CAC7C,IAAME,CAAAA,CAAqB3G,IAAAA,CAAKC,MAAAA,CAAOwG,CAAAA,CAAiB,YAAA,EAAc,MAAA,CAAQ,MAAM,CAAC,CAAA,CAAElH,CAAM,CAAA,CAMvFqH,CAAAA,CAHwB5G,IAAAA,CAAKC,MAAAA,CAAOwG,CAAAA,CAAiB,YAAA,EAAc,MAAO,MAAM,CAAC,CAAA,CACrFE,CAAAA,EAAoB,UAAA,EAAc,EACpC,CAAA,CAEwB,QAAU,OAAA,CAC5B,CAAA;AAAA;AAAA;AAAA,MAAA,EAAsCD,CAAe,CAAA;AAAA,QAAA,CAAA,CACrD,EAAA,CAEN,GAAID,CAAAA,CAAiB,YAAA,EAAc,OAAS,QAAA,CAC1C,OAAO,GAAGD,CAAU;AAAA,MAAA,EAAWC,EAAiB,IAAI,CAAA;AAAA,MAAA,EAAaA,CAAAA,CAAiB,YAAA,CAAa,KAAK,CAAA,EAAA,EAAKG,CAAmB,CAAA;AAAA,IAAA,CAAA,CAG9H,GAAIH,CAAAA,CAAiB,YAAA,EAAc,KAAA,CACjC,OAAO,GAAGD,CAAU;AAAA,MAAA,EAAWC,EAAiB,IAAI,CAAA;AAAA,MAAA,EAA+CA,CAAAA,CAAiB,YAAA,CAAa,KAAK,CAAA,EAAA,EAAKG,CAAmB,CAAA;AAAA,IAAA,CAElK,CAEA,OAAO,CAAA,EAAGJ,CAAU;AAAA,MAAA,EAAWC,EAAiB,IAAI;AAAA,EAAA,CACtD,CAAA,CAAG,EAAE,CAAA,CAEL,OAAO,GAAGT,CAAG;AAAA,IAAA,EAASC,CAAAA,CAAU,IAAI,CAAA,0CAAA,EAA6CM,CAAAA,EAAsB,EAAE,CAAA;AAAA,CAC3G,CAAA,CAAG,EAAE,CAAA,CAEL,OAAO,CACL,eAAA,CAAAgG,CAAAA,CACA,KAAA,CACE,CAAA,gBAAA,EAAmB9G,CAAO,CAAA;AAAA,EAAA,EACrBgC,CAAa,CAAA;AAAA;AAAA;AAAA,EAAA,EAGb8E,CAAe,GAAGnH,CAAO,CAAA;AAAA;AAAA,IAAA,EAEvBM,CAAoB,CAAA,IAAA,EACpBS,CAAmB,CAAA,IAAA,EACnBE,CAA0B,CAAA;AAAA;AAAA,CAGrC,CACF,CAEO,SAASmG,GAAuBP,CAAAA,CAAgC,CACrE,IAAMzG,CAAAA,CAAaiH,GAAAA,CAAY,UAAA,CACzB5D,CAAAA,CAAuBC,GAAW2D,GAAAA,CAAY,MAAM,EACpDlF,CAAAA,CAAMmF,EAAAA,GACN9U,CAAAA,CAAOmR,EAAAA,CAA2BvD,CAAAA,CAAYyG,CAAU,EACxDzE,CAAAA,CAAmBwB,EAAAA,CAAuBxD,EAAY5N,CAAI,CAAA,CAC1DwR,EAAeqD,GAAAA,CAAY,MAAA,CAC3BpD,CAAAA,CAAqBC,EAAAA,CAAgC,CAACmD,GAAAA,CAAaE,GAAS,EAAGvD,CAAAA,CAAc,SAAS,EAE5G,OACE,CAAA;AAAA,QAAA,EACWP,CAAoB,CAAA;AAAA;AAAA,YAAA,EAEhBtB,CAAG,UACTC,CAAgB,CAAA;AAAA;AAAA,IAAA,EAGlB4B,CAAY,CAAA;AAAA,MAAA,EACVC,CAAkB,CAAA;AAAA;AAAA;AAAA,CAK/B,CAEA,IAAMP,EAAAA,CAAc+C,CAAAA,EACXA,CAAAA,CAAI,OAAO,CAAC,CAAA,CAAE,WAAA,EAAY,CAAIA,CAAAA,CAAI,KAAA,CAAM,CAAC,CAAA,CAG3C,SAASvG,EAAAA,CAAgB/F,CAAAA,CAAgB2F,CAAAA,CAA8C,CAC5F,OAAIA,CAAAA,GAAqB,SAAA,CAChBuH,GAAAA,CAGFzM,IAAAA,CAAKC,MAAAA,CAAOiF,CAAAA,CAAkB,QAAQ,CAAC,CAAA,CAAE3F,CAAM,CACxD,CCx8BO,SAASqN,IAAwE,CACtF,IAAMC,CAAAA,CAAeC,eAAAA,EAAgB,CAErC,aAAcb,CAAAA,EAA8C,CAC1D,IAAMc,CAAAA,CAAWP,EAAAA,CAAuBP,CAAmC,EAE3E,MAAMY,CAAAA,CAAa,MAAA,CAAO,CACxB,QAAA,CAAUG,GAAAA;AAAA,QAAA,EACND,CAAQ;AAAA,MAAA,CAEd,CAAC,EACH,CACF,CAeO,SAASE,EAAAA,EAA4C,CAC1D,GAAM,CAACC,EAAaC,CAAc,CAAA,CAAIlY,SAAS,KAAK,CAAA,CAC9C,CAAC8X,CAAAA,CAAUK,CAAW,EAAInY,QAAAA,CAAS+X,GAAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAIxC,CAAA,CACK,CAACxJ,CAAAA,CAAS6J,CAAU,CAAA,CAAIpY,QAAAA,CAA8B,EAAE,CAAA,CACxD,CAACqY,CAAAA,CAAgB,CAAE,IAAA,CAAA1V,EAAM,OAAA,CAAA2V,CAAAA,CAAS,KAAA,CAAA1V,CAAM,CAAC,CAAA,CAAI2V,WAAAA,CAAYT,CAAAA,CAAUvJ,CAAO,CAAA,CAG1E3B,CAAAA,CAAclB,EAAAA,CAAe9I,CAAK,CAAA,CAElC,CAAE,iBAAA,CAAA4V,CAAAA,CAAmB,iBAAA,CAAAC,CAAkB,CAAA,CAAA,CAAK,IAAM,CACtD,GAAI7L,CAAAA,EAAa,UAAA,GAAe,GAAA,CAAK,CACnC,IAAMC,CAAAA,CAAehB,GAAkCe,CAAAA,CAAY,QAAQ,CAAA,CAE3E,GAAIC,CAAAA,EAAgB,OAAOA,CAAAA,CAAa,IAAA,EAAS,QAAA,CAAU,CACzD,GAAIA,CAAAA,CAAa,IAAA,GAAS,gBAAA,CACxB,OAAO,CACL,iBAAA,CAAmB,IAAA,CACnB,iBAAA,CAAmB,KACrB,CAAA,CAGF,GAAIA,CAAAA,CAAa,IAAA,GAAS,gBAAA,CACxB,OAAO,CACL,iBAAA,CAAmB,KAAA,CACnB,kBAAmB,IACrB,CAEJ,CAEA,OAAO,CACL,iBAAA,CAAmB,IAAA,CACnB,iBAAA,CAAmB,KACrB,CACF,CAEA,OAAO,CACL,iBAAA,CAAmB,MACnB,iBAAA,CAAmB,KACrB,CACF,CAAA,GAAG,CAEH,OAAA5M,SAAAA,CAAU,IAAM,CACVgY,CAAAA,GACGI,CAAAA,EAAe,CACpBH,CAAAA,CAAe,KAAK,CAAA,EAExB,CAAA,CAAG,CAACD,CAAAA,CAAaI,CAAc,CAAC,CAAA,CAEzB,CAACH,CAAAA,CAAgBC,CAAAA,CAAaC,CAAAA,CAAY,CAAE,IAAA,CAAAzV,CAAAA,CAAM,OAAA,CAAA2V,CAAAA,CAAS,MAAA1V,CAAAA,CAAO,iBAAA,CAAA4V,CAAAA,CAAmB,iBAAA,CAAAC,CAAkB,CAAC,CACjH,CC1Ee,SAARC,GAAwB,CAAE,MAAA,CAAArJ,CAAO,CAAA,CAAuB,CAC7D,GAAM,CAAE,QAAA,CAAA/K,CAAAA,CAAU,gBAAA,CAAA0I,CAAiB,CAAA,CAAIzI,CAAAA,EAAU,CAC3C,CAAE,MAAA,CAAA+F,CAAO,CAAA,CAAIS,IAAAA,CAAKC,MAAAA,CAAOgC,CAAAA,EAAoB,EAAA,CAAI,WAAW,CAAC,CAAA,CAAE1I,CAAQ,CAAA,CACvE,CAAC2T,CAAAA,CAAaE,CAAAA,CAAaC,CAAU,CAAA,CAAIJ,EAAAA,EAAkB,CAC3D1H,CAAAA,CAAajB,CAAAA,CAAO,OAAA,CAAQ,UAAA,GAAe,QAAA,CAAW,OAAA,CAAUA,CAAAA,CAAO,OAAA,CAAQ,UAAA,CAAW,WAAA,EAAY,CAE5G,GAAIA,CAAAA,CAAO,OAAA,CAAQ,MAAA,CAEjB,OAAA,UAAA,CAAW,IAAM,CACVsJ,CAAAA,GACP,CAAA,CAAG,CAAC,CAAA,CAEGzY,GAAAA,CAAAE,QAAAA,CAAA,EAAE,EAGX,IAAMwY,CAAAA,CAAgB,CACpB,WAAA,CAAa,CAAA,OAAA,EAAUtI,CAAU,CAAA,CAAA,CACjC,aAAA,CAAe,CAAA,6CAAA,EAAgDA,CAAU,CAAA,uCAAA,CAAA,CACzE,iBAAA,CAAmB,QAAA,CACnB,iBAAA,CAAmB,SACnB,aAAA,CAAe,IAAA,CACf,kBAAA,CAAoB,IAAMqI,CAAAA,EAC5B,CAAA,CAEA,SAASA,CAAAA,EAAgC,CACvC,IAAMrG,CAAAA,CAAMjD,CAAAA,CAAO,OAAA,CAAQ,QAAA,CACrByI,CAAAA,CAAWjB,EAAAA,CAAwBxH,CAAAA,CAAO,OAAA,CAAQ,UAAA,CAAY/E,CAAAA,CAAQgI,CAAG,CAAA,CAE/E,OAAO,IAAI,OAAA,CAAeuG,CAAAA,EAAY,CACpCV,CAAAA,CAAYJ,GAAAA;AAAA,QAAA,EACRD,CAAQ;AAAA,MAAA,CACX,CAAA,CACDM,CAAAA,CAAW,CACT,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,GAAA,CAAA9F,CAAI,CAAE,CAAA,CAC5B,MAAA,CAAOwG,CAAAA,CAAkD,CACvDA,CAAAA,CAAM,KAAA,CAAM,CAAE,EAAA,CAAIxG,CAAI,CAAC,EACzB,CAAA,CACA,WAAA,CAAa,IAAM,CACjByG,KAAAA,CAAM,OAAA,CAAQ,4BAA4B,CAAA,CAC1CF,CAAAA,GACF,CACF,CAAC,CAAA,CACDZ,CAAAA,CAAY,IAAI,EAClB,CAAC,CACH,CAEA,OAAO/X,GAAAA,CAAC0N,EAAAA,CAAA,CAAY,OAAA,CAASgL,CAAAA,CAAe,CAC9C,CCzDA,SAASI,EAAAA,CAAO,CACd,qBAAA,CAAAC,CAAAA,CAAwB,IAAA,CACxB,GAAGpZ,CACL,CAAA,CAAmE,CACjE,OAAOK,GAAAA,CAACgZ,MAAAA,CAAgB,IAAA,CAAhB,CAAqB,SAAA,CAAU,OAAA,CAAQ,qBAAA,CAAuBD,CAAAA,CAAwB,GAAGpZ,CAAAA,CAAO,CAC1G,CAEAmZ,EAAAA,CAAO,WAAA,CAAc,QAAA,CAECE,MAAAA,CAAgB,OAAA,KAEhCC,EAAAA,CAAeD,MAAAA,CAAgB,MAAA,CAEjBA,MAAAA,CAAgB,KAAA,KAE9BE,EAAAA,CAAsBC,EAAA,CAAA,UAAA,CAG1B,CAAC,CAAE,SAAA,CAAAhY,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAG0B,CAAAA,GAC1BrB,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWsB,CAAAA,CAAG,qEAAA,CAAuEH,CAAS,CAAA,CAC9F,GAAA,CAAKE,CAAAA,CACJ,GAAG1B,CAAAA,CACN,CACD,EACDuZ,EAAAA,CAAc,WAAA,CAAcF,MAAAA,CAAgB,OAAA,CAAQ,WAAA,CAEpD,IAAMI,EAAAA,CAAsBD,EAAA,CAAA,UAAA,CAG1B,CAAC,CAAE,SAAA,CAAAhY,CAAAA,CAAW,QAAA,CAAAzB,CAAAA,CAAU,GAAGC,CAAM,CAAA,CAAG0B,CAAAA,GACpCd,IAAAA,CAAC0Y,EAAAA,CAAA,CACC,QAAA,CAAA,CAAAjZ,GAAAA,CAACkZ,EAAAA,CAAA,EAAc,CAAA,CACflZ,GAAAA,CAACgZ,MAAAA,CAAgB,QAAhB,CACC,SAAA,CAAW1X,CAAAA,CACT,sNAAA,CACAH,CACF,CAAA,CACA,GAAA,CAAKE,CAAAA,CACJ,GAAG1B,CAAAA,CAEJ,QAAA,CAAAY,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+EAAA,CAAgF,CAAA,CAC/FA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mEAAA,CAAqE,QAAA,CAAAN,CAAAA,CAAS,CAAA,CAAA,CAC/F,CAAA,CACF,CAAA,CAAA,CACF,CACD,CAAA,CACD0Z,EAAAA,CAAc,WAAA,CAAc,eAAA,CAE5B,SAASC,EAAAA,CAAa,CAAE,SAAA,CAAAlY,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAsD,CAChG,OAAOK,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWsB,CAAAA,CAAG,0DAAA,CAA4DH,CAAS,CAAA,CAAI,GAAGxB,CAAAA,CAAO,CAC/G,CAEA0Z,EAAAA,CAAa,WAAA,CAAc,cAAA,CAQ3B,IAAMC,EAAAA,CAAoBH,EAAA,CAAA,UAAA,CAGxB,CAAC,CAAE,SAAA,CAAAhY,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAG0B,CAAAA,GAC1BrB,GAAAA,CAACgZ,MAAAA,CAAgB,KAAA,CAAhB,CACC,SAAA,CAAW1X,CAAAA,CAAG,uFAAA,CAAyFH,CAAS,CAAA,CAChH,GAAA,CAAKE,CAAAA,CACJ,GAAG1B,CAAAA,CACN,CACD,CAAA,CACD2Z,EAAAA,CAAY,WAAA,CAAcN,MAAAA,CAAgB,KAAA,CAAM,WAAA,CAEhD,IAAMO,EAAAA,CAA0BJ,EAAA,CAAA,UAAA,CAG9B,CAAC,CAAE,SAAA,CAAAhY,CAAAA,CAAW,GAAGxB,CAAM,CAAA,CAAG0B,CAAAA,GAC1BrB,GAAAA,CAACgZ,MAAAA,CAAgB,WAAA,CAAhB,CAA4B,UAAW1X,CAAAA,CAAG,qCAAA,CAAuCH,CAAS,CAAA,CAAG,GAAA,CAAKE,CAAAA,CAAM,GAAG1B,CAAAA,CAAO,CACpH,CAAA,CACD4Z,EAAAA,CAAkB,WAAA,CAAcP,MAAAA,CAAgB,WAAA,CAAY,WAAA,CCjE7C,SAARQ,EAAAA,CAA6B,CAClC,OAAA,CAAAtK,CAAAA,CACA,WAAA,CAAAuK,CAAAA,CACA,QAAA,CAAA/Z,CAAAA,CACA,KAAA,CAAAga,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CACF,CAAA,CAAuB,CACrB,GAAM,CAACxL,CAAAA,CAAQC,CAAS,CAAA,CAAIzO,QAAAA,CAAS,KAAK,CAAA,CACpCia,CAAAA,CAASL,CAAAA,EAAS,EAAA,CAAKA,CAAAA,CAAAA,CAEvB9K,CAAAA,CAAcoL,WAAAA,CAAY,IAAM,CAAA,CAChB,CAAAP,CAAAA,EAAcA,CAAAA,EAAY,IAI9ClL,CAAAA,CAAU,KAAK,CAAA,CACf,WAAW,IAAM,CACfsL,CAAAA,GACF,CAAA,CAAG,GAAG,CAAA,EACR,CAAA,CAAG,CAACJ,CAAAA,CAAaI,CAAAA,CAAStL,CAAS,CAAC,CAAA,CAE9B0L,CAAAA,CAAqBD,WAAAA,CACxBtW,CAAAA,EAA+B,CAC1BA,CAAAA,CAAM,GAAA,GAAQ,QAAA,EAAYiW,CAAAA,EAC5B/K,CAAAA,GAEJ,CAAA,CACA,CAACA,CAAAA,CAAa+K,CAAS,CACzB,CAAA,CAEA,OAAA5Z,SAAAA,CAAU,IAAM,CACdwO,CAAAA,CAAU,IAAI,CAAA,CAEd,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,eAAe,EACxD,CAAA,CAAG,EAAE,CAAA,CAELxO,SAAAA,CAAU,KACR,UAAA,CAAW,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWka,CAAAA,CAAoB,KAAK,CAAA,CAElE,IAAM,CACX,UAAA,CAAW,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWA,CAAAA,CAAoB,KAAK,EAC9E,CAAA,CAAA,CACC,CAACA,CAAkB,CAAC,CAAA,CAGrBja,GAAAA,CAAC8Y,EAAAA,CAAA,CACC,WAAA,CAAa,KAAA,CACb,OAAA,CAAS,IAAM,CACblK,CAAAA,GACF,CAAA,CACA,IAAA,CAAMN,CAAAA,CAEN,QAAA,CAAA/N,IAAAA,CAAC6Y,EAAAA,CAAA,CAAc,KAAA,CAAOO,CAAAA,CAAY,EAAC,CAAI,CAAE,QAAA,CAAU,CAAA,YAAA,EAAeI,CAAAA,CAAO,QAAA,EAAU,CAAA,GAAA,CAAM,CAAA,CACvF,QAAA,CAAA,CAAAxZ,IAAAA,CAAC8Y,EAAAA,CAAA,CACC,QAAA,CAAA,CAAArZ,GAAAA,CAACsZ,EAAAA,CAAA,CAAY,SAAA,CAAU,WAAA,CACpB,QAAA,CAAAQ,CAAAA,EAAgB9Z,GAAAA,CAACka,GAAAA,CAAA,CAAS,SAAA,CAAU,qBAAA,CAAsB,CAAA,CAC7D,CAAA,CACAla,GAAAA,CAACuZ,EAAAA,CAAA,CAAkB,SAAA,CAAU,YAAA,CAAc,QAAA,CAAAO,CAAAA,EAAgB,cAAA,CAAe,CAAA,CACzE5K,CAAAA,CACD3O,KAACiD,GAAAA,CAAA,CAAO,SAAA,CAAU,EAAA,CAAG,OAAA,CAASoL,CAAAA,CAAa,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,OAAA,CAC7D,QAAA,CAAA,CAAA5O,GAAAA,CAACma,GAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACrCna,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAa,QAAA,CAAA,OAAA,CAAK,CAAA,CAAA,CACpC,CAAA,CAAA,CACF,CAAA,CACAA,GAAAA,CAACoa,GAAAA,CAAA,EAAU,CAAA,CACXpa,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qEAAA,CAAsE,mBAAA,CAAiB,IAAA,CACnG,QAAA,CAAAN,CAAAA,CACH,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CCxFO,IAAM2a,EAAAA,CAAqBvO,aAAAA,CAAsC,CACtE,OAAA,CAAS,KAAA,CACT,UAAA,CAAawO,CAAAA,EAAmB,CAEhC,CACF,CAAC,CAAA,CAEYC,EAAAA,CAAsB,CAAC,CAAE,QAAA,CAAA7a,CAAS,CAAA,GAA+B,CAC5E,GAAM,CAAC8a,CAAAA,CAAOC,CAAQ,CAAA,CAAI3a,QAAAA,CAAS,KAAK,CAAA,CAElC+S,CAAAA,CAAQrF,OAAAA,CAAQ,KAKb,CAAE,OAAA,CAASgN,CAAAA,CAAO,UAAA,CAJLE,CAAAA,EAAkB,CACpCD,CAAAA,CAASC,CAAI,EACf,CAEoC,CAAA,CAAA,CACnC,CAACF,CAAAA,CAAOC,CAAQ,CAAC,CAAA,CAEpB,OAAOza,GAAAA,CAACqa,EAAAA,CAAmB,QAAA,CAAnB,CAA4B,KAAA,CAAOxH,CAAAA,CAAQ,QAAA,CAAAnT,CAAAA,CAAS,CAC9D,CAAA,CAEO,SAASib,EAAAA,EAAgD,CAC9D,OAAO1O,UAAAA,CAAWoO,EAAkB,CACtC,CC1BA,IAAMO,EAAAA,CAAmC,EAAA,CAAA,IAAA,CAInC,CAAE,kBAAA,CAAAC,EAAmB,CAAA,CAAIC,GCLxB,SAASC,EAAAA,CACd1Z,CAAAA,CACA2Z,CAAAA,CACAC,CAAAA,CACM,CACNlb,SAAAA,CAAU,IAAM,CACd,SAASmb,CAAAA,CAAmBxX,CAAAA,CAAyB,CACnD,GAAIrC,CAAAA,CAAI,OAAA,EAAW,CAACA,CAAAA,CAAI,OAAA,CAAQ,QAAA,CAASqC,CAAAA,CAAM,MAAc,CAAA,CAAG,CAC9D,GAAIuX,CAAAA,CAAkB,CACpB,IAAME,CAAAA,CAAmB,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,gBAAA,CAAiBF,CAAgB,CAAC,EAE/E,IAAA,IAAWG,CAAAA,IAAWD,CAAAA,CACpB,GAAIC,CAAAA,CAAQ,QAAA,CAAS1X,CAAAA,CAAM,MAAc,CAAA,CACvC,MAGN,CACAsX,CAAAA,CAAS,KAAK,EAChB,CACF,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaE,CAAkB,CAAA,CAElD,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaA,CAAkB,EAC9D,CACF,CAAA,CAAG,CAACF,CAAAA,CAAU3Z,CAAAA,CAAK4Z,CAAgB,CAAC,CAAA,CAEpClb,SAAAA,CAAU,IAAM,CACd,SAASsb,CAAAA,CAAmB3X,CAAAA,CAAyB,CACnD,GAAIrC,CAAAA,CAAI,OAAA,EAAW,CAACA,CAAAA,CAAI,OAAA,CAAQ,QAAA,CAASqC,CAAAA,CAAM,MAAc,CAAA,CAAG,CAC9D,GAAIuX,CAAAA,CAAkB,CACpB,IAAME,CAAAA,CAAmB,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,gBAAA,CAAiBF,CAAgB,CAAC,CAAA,CAE/E,IAAA,IAAWG,CAAAA,IAAWD,CAAAA,CACpB,GAAIC,CAAAA,CAAQ,QAAA,CAAS1X,CAAAA,CAAM,MAAc,CAAA,CACvC,MAGN,CACAsX,CAAAA,CAAS,KAAK,EAChB,CACF,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWK,CAAkB,CAAA,CAEhD,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,WAAA,CAAaA,CAAkB,EAC9D,CACF,CAAA,CAAG,CAACL,CAAAA,CAAU3Z,CAAG,CAAC,EACpB,CCXA,IAAMia,EAAAA,CAAqBC,QAAAA,CAEpB,SAASC,EAAAA,CAAS,CAAE,OAAA,CAAAC,GAAAA,CAAS,WAAA,CAAAC,CAAAA,CAAa,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAA0C,CAC7G,GAAM,CAAE,IAAA,CAAAC,EAAM,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,CAAAA,CAAY,OAAA,CAAA1N,CAAQ,CAAA,CAAIqN,CAAAA,CACvC,CAAE,SAAA,CAAA/Z,CAAU,CAAA,CAAI0F,SAAAA,EAAU,CAC1B,CAACiH,GAAAA,CAAQC,GAAS,CAAA,CAAIzO,QAAAA,CAAS,KAAK,CAAA,CACpCkc,CAAAA,CAAY7U,MAAAA,CAAyB,IAAI,CAAA,CACzC8U,GAAAA,CAAa9U,MAAAA,CAAuB,IAAI,CAAA,CACxC,CAAC+U,GAAAA,CAAoBC,GAAqB,CAAA,CAAIrc,QAAAA,CAAwB,IAAI,CAAA,CAC1E,CAACsc,CAAAA,CAAYC,GAAa,CAAA,CAAIvc,QAAAA,CAAS,KAAK,CAAA,CAC5C,CAACwc,CAAAA,CAAQC,CAAS,CAAA,CAAIzc,QAAAA,CAAS,KAAK,CAAA,CACpCuF,CAAAA,CAAKmX,KAAAA,EAAM,CACjBzB,EAAAA,CAAckB,GAAAA,CAAY1N,GAAAA,CAAW,qCAAqC,CAAA,CAE1E,SAASkO,CAAAA,CAAqBC,CAAAA,CAA8C,CAC1E,GAAI,CAACA,EACH,OAGF,IAAMC,CAAAA,CAA8B,CAClC,iBAAA,CAAmB,KAAA,CACnB,iBAAA,CAAmB,KAAA,CACnB,8BAAA,CAAgC,KAAA,CAChC,kBAAA,CAAoB,MAAA,CACpB,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,2EAAA,CAA6E,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,KAAA,CACb,iBAAA,CAAmB,KAAA,CACnB,YAAA,CAAc,KAAA,CACd,WAAA,CAAa,KACf,CAAA,CAEA,GAAIA,CAAAA,CAAID,CAAI,CAAA,CACV,OAAOC,CAAAA,CAAID,CAAI,CAAA,CAGjB,IAAME,CAAAA,CAAQF,CAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAE5B,GAAIE,EAAM,MAAA,GAAW,CAAA,CAAG,CACtB,IAAMC,CAAAA,CAAMD,CAAAA,CAAM,CAAC,CAAA,CAEnB,OAAIC,CAAAA,CAAI,QAAA,CAAS,KAAK,CAAA,CACb,KAAA,CAGFA,CAAAA,CAAI,WAAA,EACb,CAGF,CAEA,SAASC,CAAAA,CAAiB5H,CAAAA,CAAsCwH,CAAAA,CAAkC,CAChG,GAAIxH,CAAAA,EAAoBA,CAAAA,CAAiB,QAAA,CAAS,GAAG,CAAA,CAAG,CACtD,IAAM6H,CAAAA,CAAM7H,CAAAA,CAAiB,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,CAE5C,GAAI6H,CAAAA,CACF,OAAOA,CAAAA,CAAI,WAAA,EAEf,CAEA,IAAMC,CAAAA,CAAWP,CAAAA,CAAqBC,CAAI,CAAA,CAE1C,OAAIM,CAAAA,EAIG,MACT,CAEA,eAAeC,CAAAA,CAAYC,CAAAA,CAAmBC,CAAAA,CAA0D,CACtG,GAAI,CAACD,CAAAA,CACH,OAGF,IAAME,CAAAA,CAAgBC,EAAAA,CAAM,KAAK,CAAA,CAEjC,GAAIH,CAAAA,CAAK,IAAA,EAAQE,CAAAA,EAAiB,CAAA,CAAA,CAAI,CACpCvE,KAAAA,CAAM,KAAA,CAAM,6BAA6B,CAAA,CACzC,MACF,CAEA,IAAMyE,CAAAA,CAAUJ,CAAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,CAE7C,GAAII,CAAAA,CAAS,CACX,IAAMC,EAAAA,CAAS,IAAI,UAAA,CAEnBA,EAAAA,CAAO,MAAA,CAAUC,EAAAA,EAAM,CACrB,IAAMC,EAAAA,CAAM,IAAI,KAAA,CAEhBtB,GAAAA,CAAsBqB,EAAAA,CAAE,MAAA,EAAQ,MAAgB,CAAA,CAEhDC,EAAAA,CAAI,MAAA,CAAS,UAAY,CACvB7B,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAIF,CAAAA,CAAUE,CAAI,CAAA,EAAG,KAAA,CACrB,KAAA,CAAO,CACL,GAAIF,CAAAA,CAAUE,CAAI,CAAA,EAAG,KAAA,CACrB,KAAA,CAAO4B,EAAAA,CAAI,MACX,MAAA,CAAQA,EAAAA,CAAI,MACd,CACF,CAAC,EACH,CAAA,CAEAA,EAAAA,CAAI,GAAA,CAAMF,EAAAA,CAAO,OACnB,CAAA,CAEAA,EAAAA,CAAO,aAAA,CAAcL,CAAI,EAC3B,CAAA,KACEf,GAAAA,CAAsB,IAAI,CAAA,CAG5BI,CAAAA,CAAU,IAAI,CAAA,CAEd,GAAI,CAOF,IAAM9Z,EAAAA,CAAO,KAAA,CANI,MAAM,KAAA,CAAMF,GAAAA,CAASZ,CAAS,CAAA,CAAE,MAAA,CAAQ,CACvD,MAAA,CAAQ,MAAA,CACR,OAAA,CAAS,CAAE,cAAA,CAAgBub,CAAAA,EAAM,IAAA,EAAQ,0BAA2B,CAAA,CACpE,IAAA,CAAMA,CACR,CAAC,CAAA,EAE2B,IAAA,EAAK,CAEjCtB,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAIF,CAAAA,CAAUE,CAAI,CAAA,EAAG,KAAA,CACrB,KAAA,CAAO,CACL,GAAIF,CAAAA,CAAUE,CAAI,CAAA,EAAG,MACrB,IAAA,CAAMpZ,EAAAA,CAAK,QAAA,CACX,gBAAA,CAAkBya,CAAAA,CAAK,IAAA,CACvB,IAAA,CAAMA,CAAAA,CAAK,IAAA,CACX,QAAA,CAAUA,CAAAA,CAAK,IAAA,CACf,IAAA,CAAMza,EAAAA,CAAK,IAAA,CACX,GAAI6a,CAAAA,CAAU,EAAC,CAAI,CAAE,KAAA,CAAO,KAAA,CAAA,CAAW,MAAA,CAAQ,KAAA,CAAU,CAC3D,CACF,CAAC,EACH,CAAA,MAAS5a,EAAAA,CAAO,CACd,OAAA,CAAQ,KAAA,CAAMA,EAAK,CAAA,CACnByZ,GAAAA,CAAsB,IAAI,CAAA,CAC1BP,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAIF,CAAAA,CAAUE,CAAI,CAAA,EAAG,KAAA,CACrB,KAAA,CAAO,CACL,GAAA,CAAMsB,CAAAA,EAAe,KAAA,EAAsB,GAC7C,CACF,CAAC,EACH,CAAA,OAAE,CACAZ,CAAAA,CAAU,KAAK,EACjB,CACF,CAEA,SAASmB,CAAAA,CAAeha,EAA6B,CACnDA,CAAAA,CAAM,eAAA,EAAgB,CACtBkY,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGF,CAAAA,CAAUE,CAAI,CAAA,CACjB,GAAA,CAAK,EAAA,CACL,KAAA,CAAO,CACL,GAAA,CAAMF,CAAAA,CAAUE,CAAI,CAAA,EAAG,KAAA,EAAsB,GAC/C,CACF,CAAC,EACH,CAEA,SAAS8B,CAAAA,CAAcja,CAAAA,CAAuBka,CAAAA,CAA8C,CAC1Fla,CAAAA,CAAM,eAAA,EAAgB,CAElBka,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,CAAapa,CAAAA,CAA6B,CACjDA,CAAAA,CAAM,cAAA,EAAe,CACrBA,CAAAA,CAAM,eAAA,EAAgB,CACtBsY,EAAU,OAAA,EAAS,KAAA,GACrB,CAEA,SAAS+B,CAAAA,CAAera,CAAAA,CAAuBka,CAAAA,CAA8C,CAC3Fla,CAAAA,CAAM,eAAA,EAAgB,CAElBka,CAAAA,EAAY,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,OACE5d,GAAAA,CAAC2D,CAAAA,CAAA,CACC,OAAA,CAAS8X,GAAAA,CACT,IAAA,CAAMI,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAjY,CAAM,CAAA,GACfrD,IAAAA,CAACsD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA7D,GAAAA,CAACge,CAAAA,CAAA,CAAU,OAAA,CAAS3Y,CAAAA,CAAK,QAAA,CAAAyW,CAAAA,CAAM,CAAA,CAC9BzN,CAAAA,EAAS,OAAA,CAAUrO,GAAAA,CAACie,GAAAA,CAAA,CAAiB,SAAA5P,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC3ErO,GAAAA,CAAC8D,CAAAA,CAAA,CAAY,SAAA,CAAU,4DAAA,CACrB,QAAA,CAAAvD,IAAAA,CAAC,KAAA,CAAA,CACC,eAAA,CAAe,CAAA,eAAA,EAAkBsb,CAAI,CAAA,CAAA,CACrC,eAAA,CAAevN,GAAAA,CACf,SAAA,CAAW,CAAA,+OAAA,EACTA,GAAAA,CAAS,yDAAA,CAA4D,EACvE,CAAA,CAAA,EAAI8N,CAAAA,CAAa,mEAAA,CAAsE,kCAAkC,CAAA,CAAA,CACzH,OAAA,CAAUoB,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClBvB,GAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1BA,GAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1B1N,GAAAA,CAAU,IAAI,EAChB,CAAA,CACA,SAAA,CAAYiP,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,OAAA,EACZjP,GAAAA,CAAU,IAAI,CAAA,CAGZiP,CAAAA,CAAE,GAAA,GAAQ,QAAA,GACZA,CAAAA,CAAE,cAAA,EAAe,CACjBA,EAAE,eAAA,EAAgB,CAClBvB,GAAAA,CAAW,OAAA,EAAS,IAAA,EAAK,CACzB1N,GAAAA,CAAU,KAAK,CAAA,EAEnB,CAAA,CACA,UAAA,CAAaiP,CAAAA,EAAM,CACjBA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClBnB,GAAAA,CAAc,IAAI,EACpB,CAAA,CACA,WAAA,CAAcmB,CAAAA,EAAM,CAClBA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClBnB,GAAAA,CAAc,IAAI,EACpB,CAAA,CACA,WAAA,CAAcmB,CAAAA,EAAM,CAClBA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClBnB,GAAAA,CAAc,KAAK,EACrB,CAAA,CACA,MAAA,CAASmB,CAAAA,EAAM,CACbA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClBnB,GAAAA,CAAc,KAAK,CAAA,CAEnB,IAAMa,CAAAA,CAAOM,CAAAA,CAAE,aAAa,KAAA,EAASA,CAAAA,CAAE,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA,CAE3DP,CAAAA,CAAYC,CAAAA,CAAMtZ,CAAAA,CAAM,KAAK,EAC/B,CAAA,CACA,GAAA,CAAKqY,GAAAA,CACL,IAAA,CAAK,UAAA,CACL,QAAA,CAAU,CAAA,CAEV,QAAA,CAAA,CAAA1b,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCAAA,CAEZ,QAAA,CAAA,CAAA,CAAEqD,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,EAAQ,CAACsY,GAAAA,CAC7C3b,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qFAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAACke,OAAAA,CAAA,CAAU,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAE,0BAAA,CAAA,CACjD,CAAA,CACA3d,IAAAA,CAACiD,GAAAA,CAAA,CACC,SAAA,CAAU,uDAAA,CACV,EAAA,CAAI6B,CAAAA,CACJ,OAAA,CAASyY,CAAAA,CACT,OAAA,CAAQ,OAAA,CAER,QAAA,CAAA,CAAA9d,GAAAA,CAACme,MAAAA,CAAA,CAAW,SAAA,CAAU,wBAAwB,CAAA,CAAE,QAAA,CAAA,CAElD,CAAA,CACA5d,IAAAA,CAACiD,GAAAA,CAAA,CAAO,SAAA,CAAU,oDAAA,CAAqD,OAAA,CAAQ,OAAA,CAC7E,QAAA,CAAA,CAAAxD,GAAAA,CAACoe,MAAAA,CAAA,CAAW,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAE,QAAA,CAAA,CAElD,CAAA,CAAA,CACF,CAAA,CACE,IAAA,CAEFxa,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAkC,IAAA,EAAQ,CAAC0K,GAAAA,CACxD/N,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CACX,QAAA,CAAA,CAAA,CAAA,IAAM,CACN,IAAMsS,CAAAA,CAAQjP,CAAAA,CAAM,KAAA,EAAO,KAAA,CACrB8Y,CAAAA,CAAO7J,CAAAA,EAAO,QAAA,CACdtG,CAAAA,CAAOsG,CAAAA,EAAO,IAAA,EAAQ,EAAA,CAK5B,GAJgB,CAAA,EACb6J,CAAAA,EAAQA,CAAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAM,mCAAA,CAAoC,IAAA,CAAKnQ,CAAI,CAAA,CAAA,CAIpF,OACEvM,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,uDAAA,CACV,GAAA,CAAK,CAAA,EAAG6d,GAAe,GAAGhL,CAAAA,CAAM,IAAI,CAAA,mBAAA,CAAA,CACpC,GAAA,CAAI,UAAA,CACN,CAAA,CAIJ,IAAMkK,EAAAA,CAAMD,CAAAA,CAAiBjK,CAAAA,CAAM,gBAAA,CAAkBA,CAAAA,CAAM,QAAQ,CAAA,CAC7DwL,EAAAA,CACJC,aAAAA,CACAvB,EAAG,CAAA,CAEL,OACE/c,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kIAAA,CACb,QAAA,CAAAA,GAAAA,CAACsb,EAAAA,CAAA,CAAmB,SAAA,CAAWyB,EAAAA,CAAM,GAAIsB,EAAAA,EAAS,EAAC,CAAI,CAAA,CACzD,CAEJ,CAAA,GAAG,CACFhB,EAAAA,CAAAA,CAAOzZ,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAqB,IAAI,CAAA,CAC9C5D,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8CAAA,CAA+C,CAAA,CAAA,CAC7D4D,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAqB,QAAA,CAAA,CAClCA,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAqB,KAAA,EAAA,CAAUA,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAqB,MAAA,CAC9ErD,IAAAA,CAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAF,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8CAAA,CAA+C,CAAA,CAAA,CAC7D4D,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,IAAA,CACH,CAAEA,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,EAAQsY,GAAAA,EAC5C3b,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKkc,GAAAA,CACL,GAAA,CAAI,SAAA,CACJ,SAAA,CAAU,oEAAA,CACZ,CAAA,CAAE,kBAAA,CAAA,CAEJ,CAAA,CAED,CAAEtY,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,EAAQ,CAACsY,GAAAA,EAAsBI,CAAAA,CACnE/b,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4DAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wFAAA,CACb,QAAA,CAAAA,GAAAA,CAACue,IAAAA,CAAA,CAAgB,SAAA,CAAU,wCAAA,CAAyC,CAAA,CACtE,EAAM,mBAAA,CAAA,CAER,CAAA,CACE,IAAA,CAEF3a,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,CACnC5D,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAAO,IAAAA,CAAC4H,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAnI,GAAAA,CAAC8H,GAAAA,CAAA,CACC,QAAA,CAAAvH,IAAAA,CAACwH,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA/H,GAAAA,CAACgI,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAhI,GAAAA,CAACoI,GAAAA,CAAA,CAAoB,OAAA,CAAO,IAAA,CAC1B,QAAA,CAAApI,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,uDAAA,CACV,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAAxD,GAAAA,CAACwe,QAAAA,CAAA,CAAa,SAAA,CAAU,eAAA,CAAgB,CAAA,CAC1C,CAAA,CACF,CAAA,CACF,CAAA,CACAxe,GAAAA,CAACkI,GAAAA,CAAA,CACC,QAAA,CAAAlI,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,cAAA,CAAY,CAAA,CACjB,CAAA,CAAA,CACF,EACF,CAAA,CACAO,IAAAA,CAAC+H,CAAAA,CAAA,CAAoB,SAAA,CAAU,SAAA,CAC7B,QAAA,CAAA,CAAA/H,IAAAA,CAACke,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAle,IAAAA,CAACgI,CAAAA,CAAA,CAAiB,OAAA,CAASuV,CAAAA,CACzB,QAAA,CAAA,CAAA9d,GAAAA,CAACme,MAAAA,CAAA,CAAW,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC9Cne,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,QAAA,CAAM,CAAA,CAAA,CACd,CAAA,CACAO,IAAAA,CAACgI,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAvI,GAAAA,CAACke,OAAAA,CAAA,CAAU,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC7Cle,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,aAAA,CAAW,CAAA,CAAA,CACnB,CAAA,CAAA,CACF,CAAA,CACAA,GAAAA,CAAC2I,CAAAA,CAAA,EAAsB,CAAA,CACvBpI,IAAAA,CAACke,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAle,IAAAA,CAACgI,CAAAA,CAAA,CAAiB,OAAA,CAAUiV,CAAAA,EAAMO,CAAAA,CAAeP,CAAAA,CAAG5Z,CAAAA,CAAM,KAAK,CAAA,CAC7D,QAAA,CAAA,CAAA5D,GAAAA,CAAC0e,SAAA,CAAa,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAChD1e,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CAChB,CAAA,CACAO,IAAAA,CAACgI,CAAAA,CAAA,CAAiB,OAAA,CAAUiV,CAAAA,EAAMG,CAAAA,CAAcH,CAAAA,CAAG5Z,CAAAA,CAAM,KAAK,CAAA,CAC5D,QAAA,CAAA,CAAA5D,GAAAA,CAAC2e,IAAAA,CAAA,CAAS,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC5C3e,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,UAAA,CAAQ,CAAA,CAAA,CAChB,CAAA,CAAA,CACF,CAAA,CACAA,GAAAA,CAAC2I,CAAAA,CAAA,EAAsB,CAAA,CACvBpI,IAAAA,CAACgI,CAAAA,CAAA,CAAiB,OAAA,CAASmV,CAAAA,CACzB,QAAA,CAAA,CAAA1d,GAAAA,CAAC4e,YAAAA,CAAA,CAAe,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAClD5e,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,aAAA,CAAW,CAAA,CAAA,CACnB,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACE,IAAA,CACJA,GAAAA,CAAAE,QAAAA,CAAA,CACG,QAAA,CAAA,CAACoO,GAAAA,GAAY1K,CAAAA,CAAM,KAAA,EAAO,OAAsB,IAAA,EAAQsY,GAAAA,CAAAA,CACvDlc,GAAAA,CAAC8H,GAAAA,CAAA,CACC,QAAA,CAAAvH,IAAAA,CAACwH,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA/H,GAAAA,CAACgI,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAhI,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,uGAAA,CACV,SAAA,CAAYga,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,OAAA,GACZvB,GAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1BA,GAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,EAE9B,CAAA,CACA,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAAjc,GAAAA,CAAC6e,SAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CACF,CAAA,CACA7e,GAAAA,CAACkI,GAAAA,CAAA,CACC,QAAA,CAAAlI,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,cAAA,CAAY,CAAA,CACjB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACE,IAAA,CACN,CAAA,CACCsO,GAAAA,GAAY1K,CAAAA,CAAM,OAAO,KAAA,EAAsB,IAAA,EAAQsY,GAAAA,CAAAA,CACtDlc,GAAAA,CAAC8H,GAAAA,CAAA,CACC,QAAA,CAAAvH,IAAAA,CAACwH,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA/H,GAAAA,CAACgI,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAhI,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,uGAAA,CACV,OAAA,CAAUga,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClBvB,GAAAA,CAAW,OAAA,EAAS,IAAA,EAAK,CACzB1N,GAAAA,CAAU,KAAK,EACjB,CAAA,CACA,SAAA,CAAYiP,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,OAAA,GACZA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,CAClBvB,GAAAA,CAAW,OAAA,EAAS,IAAA,EAAK,CACzB1N,GAAAA,CAAU,KAAK,CAAA,EAEnB,CAAA,CACA,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAAvO,IAAC8e,GAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CACF,CAAA,CACA9e,GAAAA,CAACkI,GAAAA,CAAA,CACC,QAAA,CAAAlI,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,OAAA,CAAK,CAAA,CACV,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACE,IAAA,CAAA,CACN,CAAA,CACAA,GAAAA,CAAC4a,EAAAA,CAAA,CACC,SAAA,CAAU,iCAAA,CACV,YAAA,CAAcrM,GAAAA,CACd,IAAA,CAAMD,GAAAA,GAAW,CAAA,CAAS1K,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAsB,IAAA,EAAS,CAAA,CAAQsY,GAAAA,CAAAA,CAE9E,QAAA,CAAAlc,GAAAA,CAAC6a,EAAAA,CAAA,CAAmB,SAAA,CAAU,WAAA,CAC5B,QAAA,CAAA7a,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+BAAA,CAAgC,EAAA,CAAI,CAAA,eAAA,EAAkB6b,CAAI,CAAA,CAAA,CACrE,QAAA,CAAAjY,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAkC,IAAA,CAAA,CAC5C,IAAM,CACL,IAAMiP,CAAAA,CAAQjP,CAAAA,CAAM,KAAA,EAAO,KAAA,CACrB8Y,CAAAA,CAAO7J,GAAO,QAAA,CACdtG,CAAAA,CAAOsG,CAAAA,EAAO,IAAA,EAAQ,EAAA,CAK5B,GAJgB,CAAA,EACb6J,CAAAA,EAAQA,CAAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAM,mCAAA,CAAoC,IAAA,CAAKnQ,CAAI,CAAA,CAAA,CAIpF,OACEvM,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,8CAAA,CACV,GAAA,CAAK,CAAA,EAAG6d,GAAe,CAAA,EAAGhL,CAAAA,CAAM,IAAI,CAAA,mBAAA,CAAA,CACpC,GAAA,CAAI,UAAA,CACN,CAAA,CAIJ,IAAMkK,EAAAA,CAAMD,CAAAA,CAAiBjK,CAAAA,CAAM,gBAAA,CAAkBA,CAAAA,CAAM,QAAQ,CAAA,CAC7DwL,EAAAA,CACJC,aAAAA,CACAvB,EAAG,CAAA,CAEL,OACExc,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iIAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4HAAA,CACb,QAAA,CAAAA,GAAAA,CAACsb,EAAAA,CAAA,CAAmB,SAAA,CAAWyB,EAAAA,CAAM,GAAIsB,EAAAA,EAAS,EAAC,CAAI,CAAA,CACzD,EACA9d,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oBAAA,CACZ,QAAA,CAAA,CAAAsS,CAAAA,CAAM,gBAAA,EAAoB,MAAA,CAAO,QAAA,CAAIwK,EAAAA,CAAMxK,CAAAA,CAAM,IAAI,CAAA,CAAE,QAAA,CAAIA,CAAAA,CAAM,QAAA,CAAA,CACpE,CAAA,CACA7S,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,CAAA,CACCsc,CAAAA,CACCtc,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,CAAQqO,CAAAA,EAAS,MAAA,CAASA,CAAAA,CAAQ,MAAA,CAAS,SAAA,CAC3C,SAAA,CAAU,WAAA,CACV,EAAA,CAAI,CAAA,YAAA,EAAewN,CAAI,CAAA,CAAA,CACvB,QAAA,CAAW2B,CAAAA,EAAM,CACf,IAAMN,CAAAA,CAAOM,EAAE,aAAA,CAAc,KAAA,EAASA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,CAAC,CAAA,CAE7DP,CAAAA,CAAYC,CAAAA,CAAMtZ,CAAAA,CAAM,KAAK,EAC/B,CAAA,CACA,GAAA,CAAKoY,CAAAA,CACL,IAAA,CAAK,MAAA,CACP,CAAA,CACAhc,GAAAA,CAACgE,GAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CC3iBO,SAAS+a,EAAAA,CAAO,CAAE,OAAA,CAAAtD,GAAAA,CAAS,WAAA,CAAAC,CAAAA,CAAa,QAAA,CAAAE,CAAS,CAAA,CAA2C,CACjG,GAAM,CAAE,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,CAAAA,CAAY,OAAA,CAAA1N,CAAAA,CAAS,QAAA,CAAAiH,CAAS,CAAA,CAAIoG,CAAAA,CACjDrW,CAAAA,CAAKmX,KAAAA,EAAM,CAEjB,SAASS,EACPvZ,CAAAA,CACAyZ,CAAAA,CACM,CACN,IAAM6B,CAAAA,CAAWtb,CAAAA,CAAM,aAAA,CAAc,KAAA,CACjCub,CAAAA,CAGAD,CAAAA,GAAa,EAAA,CACfC,CAAAA,CAAc,EAAA,EAGdA,CAAAA,CAAc3J,CAAAA,GAAa,OAAA,CAAU,UAAA,CAAW0J,CAAQ,CAAA,CAAI,QAAA,CAASA,CAAAA,CAAU,EAAE,CAAA,CAG7E,KAAA,CAAMC,CAAW,CAAA,GACnBA,CAAAA,CAAc,EAAA,CAAA,CAAA,CAIlBrD,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGsB,CAAAA,CACH,KAAA,CAAO8B,CACT,CAAC,EACH,CAEA,SAASC,GAAAA,CAAeC,CAAAA,CAAkBtM,CAAAA,CAAyC,CACjF+I,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGhJ,CAAAA,CACH,QAAA,CAAUsM,CACZ,CAAC,EACH,CAEA,OACEnf,GAAAA,CAAC2D,CAAAA,CAAA,CACC,OAAA,CAAS8X,GAAAA,CACT,IAAA,CAAMI,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,MAAAjY,CAAM,CAAA,GACfrD,IAAAA,CAACsD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA7D,GAAAA,CAACge,CAAAA,CAAA,CAAU,OAAA,CAAS3Y,CAAAA,CAAK,QAAA,CAAAyW,CAAAA,CAAM,CAAA,CAC9BzN,CAAAA,CAAQ,OAAA,CAAUrO,GAAAA,CAACie,GAAAA,CAAA,CAAiB,QAAA,CAAA5P,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC1ErO,GAAAA,CAAC8D,CAAAA,CAAA,CACC,QAAA,CAAA9D,GAAAA,CAAC+D,GAAAA,CAAA,CACC,SAAA,CAAW,CAAA,4BAAA,EACT,CAACH,CAAAA,CAAM,KAAA,EAAO,KAAA,EAASA,CAAAA,CAAM,KAAA,CAAM,KAAA,GAAU,SAAA,CAAY,SAAA,CAAY,EACvE,CAAA,CAAA,CACA,QAAA,CAAUmY,CAAAA,GAAe,KAAA,EAASnY,CAAAA,CAAM,KAAA,EAAO,QAAA,CAC/C,EAAA,CAAIyB,CAAAA,CACH,GAAGzB,CAAAA,CACJ,QAAA,CAAWF,CAAAA,EAAU,CACnBuZ,CAAAA,CAAYvZ,CAAAA,CAAOE,CAAAA,CAAM,KAAK,EAChC,CAAA,CACA,IAAA,CAAM0R,IAAa,OAAA,CAAU,KAAA,CAAQ,GAAA,CACrC,IAAA,CAAK,QAAA,CACL,KAAA,CAAQ1R,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAyC,EAAA,CAChE,CAAA,CACF,CAAA,CACA5D,GAAAA,CAACof,GAAAA,CAAA,CACC,OAAA,CAASxb,CAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,QAAA,CAAWub,CAAAA,EAAY,CACrBD,GAAAA,CAAeC,CAAAA,CAASvb,CAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,CAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACA5D,GAAAA,CAACgE,GAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CC1EA,IAAMqb,EAAAA,CAA2B,EAAA,CAAA,IAAA,CAE3BC,EAAAA,CAAkC,EAAA,CAAA,OAAA,CAElCC,EAAAA,CAAuBC,EAAA,CAAA,UAAA,CAG3B,CAAC,CAAE,SAAA,CAAAre,CAAAA,CAAW,KAAA,CAAAse,CAAAA,CAAQ,QAAA,CAAU,UAAA,CAAAC,CAAAA,CAAa,CAAA,CAAG,GAAG/f,CAAM,CAAA,CAAG0B,CAAAA,GAC5DrB,GAAAA,CAAkB,EAAA,CAAA,MAAA,CAAjB,CACC,QAAA,CAAAA,GAAAA,CAAkB,EAAA,CAAA,OAAA,CAAjB,CACC,GAAA,CAAKqB,CAAAA,CACL,KAAA,CAAOoe,CAAAA,CACP,UAAA,CAAYC,CAAAA,CACZ,SAAA,CAAWpe,CAAAA,CACT,sfAAA,CACAH,CACF,CAAA,CACC,GAAGxB,CAAAA,CACN,CAAA,CACF,CACD,CAAA,CACD4f,EAAAA,CAAe,WAAA,CAA+B,EAAA,CAAA,OAAA,CAAQ,WAAA,CCnBtD,SAASI,EAAAA,CAAS,CAChB,SAAA,CAAAxe,CAAAA,CACA,UAAA,CAAAye,CAAAA,CACA,eAAA,CAAAC,CAAAA,CAAkB,IAAA,CAClB,aAAA,CAAAC,CAAAA,CAAgB,OAAA,CAChB,aAAA,CAAAC,CAAAA,CAAgB,OAAA,CAChB,UAAA,CAAAC,GAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,GAAGtgB,CACL,CAAA,CAEG,CACD,IAAMugB,CAAAA,CAAoBC,oBAAAA,EAAqB,CAE/C,OACEngB,GAAAA,CAACogB,SAAAA,CAAA,CACC,eAAA,CAAiBP,CAAAA,CACjB,SAAA,CAAWve,CAAAA,CACT,+JAAA,CACA,MAAA,CAAO,GAAA,CAAA,4CAAA,CAAA,CACP,MAAA,CAAO,GAAA,CAAA,gDAAA,CAAA,CACPH,CACF,CAAA,CACA,aAAA,CAAe2e,CAAAA,CACf,UAAA,CAAY,CACV,mBAAA,CAAsBO,CAAAA,EAASA,CAAAA,CAAK,cAAA,CAAe,SAAA,CAAW,CAAE,KAAA,CAAO,OAAQ,CAAC,CAAA,CAChF,GAAGL,GACL,CAAA,CACA,UAAA,CAAY,CACV,KAAM1e,CAAAA,CAAG,UAAA,CAAY4e,CAAAA,CAAkB,IAAI,CAAA,CAC3C,MAAA,CAAQ5e,CAAAA,CAAG,yDAAA,CAA2D4e,CAAAA,CAAkB,MAAM,CAAA,CAC9F,KAAA,CAAO5e,CAAAA,CAAG,wCAAA,CAA0C4e,CAAAA,CAAkB,KAAK,CAAA,CAC3E,GAAA,CAAK5e,CAAAA,CACH,iGAAA,CACA4e,CAAAA,CAAkB,GACpB,CAAA,CACA,eAAA,CAAiB5e,CAAAA,CACf6M,GAAAA,CAAe,CAAE,OAAA,CAAS4R,CAAc,CAAC,CAAA,CACzC,iEAAA,CACAG,CAAAA,CAAkB,eACpB,CAAA,CACA,WAAA,CAAa5e,CAAAA,CACX6M,GAAAA,CAAe,CAAE,OAAA,CAAS4R,CAAc,CAAC,CAAA,CACzC,iEAAA,CACAG,CAAAA,CAAkB,WACpB,CAAA,CACA,aAAA,CAAe5e,CAAAA,CACb,4FAAA,CACA4e,CAAAA,CAAkB,aACpB,CAAA,CACA,SAAA,CAAW5e,CAAAA,CACT,6GAAA,CACA4e,CAAAA,CAAkB,SACpB,CAAA,CACA,aAAA,CAAe5e,CAAAA,CACb,6IAAA,CACA4e,CAAAA,CAAkB,aACpB,EACA,QAAA,CAAU5e,CAAAA,CAAG,mDAAA,CAAqD4e,CAAAA,CAAkB,QAAQ,CAAA,CAC5F,aAAA,CAAe5e,CAAAA,CACb,+BAAA,CACAwe,CAAAA,GAAkB,OAAA,CACd,YAAA,CACA,uIAAA,CACJI,CAAAA,CAAkB,aACpB,CAAA,CACA,KAAA,CAAO,8BAAA,CACP,QAAA,CAAU5e,CAAAA,CAAG,SAAA,CAAW4e,CAAAA,CAAkB,QAAQ,CAAA,CAClD,OAAA,CAAS5e,CAAAA,CACP,wGAAA,CACA4e,CAAAA,CAAkB,OACpB,CAAA,CACA,IAAA,CAAM5e,CAAAA,CAAG,2BAAA,CAA6B4e,CAAAA,CAAkB,IAAI,CAAA,CAC5D,kBAAA,CAAoB5e,CAAAA,CAAG,mCAAA,CAAqC4e,CAAAA,CAAkB,kBAAkB,CAAA,CAChG,WAAA,CAAa5e,CAAAA,CAAG,0DAAA,CAA4D4e,CAAAA,CAAkB,WAAW,CAAA,CACzG,GAAA,CAAK5e,CAAAA,CACH,yNAAA,CACA4e,CAAAA,CAAkB,GACpB,CAAA,CACA,WAAA,CAAa5e,CAAAA,CAAG,8BAAA,CAAgC4e,CAAAA,CAAkB,WAAW,CAAA,CAC7E,YAAA,CAAc5e,CAAAA,CAAG,iBAAA,CAAmB4e,CAAAA,CAAkB,YAAY,CAAA,CAClE,SAAA,CAAW5e,CAAAA,CAAG,8BAAA,CAAgC4e,CAAAA,CAAkB,SAAS,CAAA,CACzE,KAAA,CAAO5e,CAAAA,CACL,2FAAA,CACA4e,CAAAA,CAAkB,KACpB,CAAA,CACA,OAAA,CAAS5e,CAAAA,CAAG,iEAAA,CAAmE4e,CAAAA,CAAkB,OAAO,CAAA,CACxG,QAAA,CAAU5e,CAAAA,CAAG,wCAAA,CAA0C4e,CAAAA,CAAkB,QAAQ,CAAA,CACjF,MAAA,CAAQ5e,CAAAA,CAAG,cAAA,CAAgB4e,CAAAA,CAAkB,MAAM,CAAA,CACnD,GAAGN,CACL,CAAA,CACA,UAAA,CAAY,CACV,IAAA,CAAM,CAAC,CAAE,SAAA,CAAAze,CAAAA,CAAW,OAAA,CAAAmf,CAAAA,CAAS,GAAG3gB,CAAM,CAAA,GAC7BK,GAAAA,CAAC,KAAA,CAAA,CAAI,WAAA,CAAU,UAAA,CAAW,GAAA,CAAKsgB,CAAAA,CAAS,SAAA,CAAWhf,CAAAA,CAAGH,CAAS,CAAA,CAAI,GAAGxB,CAAAA,CAAO,CAAA,CAEtF,OAAA,CAAS,CAAC,CAAE,SAAA,CAAAwB,CAAAA,CAAW,YAAAof,CAAAA,CAAa,GAAG5gB,CAAM,CAAA,GACvC4gB,CAAAA,GAAgB,MAAA,CACXvgB,GAAAA,CAACwgB,eAAAA,CAAA,CAAgB,SAAA,CAAWlf,CAAAA,CAAG,WAAA,CAAaH,CAAS,CAAA,CAAI,GAAGxB,CAAAA,CAAO,CAAA,CAGxE4gB,CAAAA,GAAgB,OAAA,CACXvgB,GAAAA,CAACygB,gBAAAA,CAAA,CAAiB,SAAA,CAAWnf,CAAAA,CAAG,WAAA,CAAaH,CAAS,CAAA,CAAI,GAAGxB,CAAAA,CAAO,CAAA,CAGtEK,GAAAA,CAAC0gB,eAAAA,CAAA,CAAgB,SAAA,CAAWpf,CAAAA,CAAG,WAAA,CAAaH,CAAS,CAAA,CAAI,GAAGxB,CAAAA,CAAO,CAAA,CAE5E,SAAA,CAAWghB,EAAAA,CACX,UAAA,CAAY,CAAC,CAAE,QAAA,CAAAjhB,CAAAA,CAAU,GAAGC,CAAM,CAAA,GAE9BK,GAAAA,CAAC,IAAA,CAAA,CAAI,GAAGL,CAAAA,CACN,QAAA,CAAAK,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gFAAA,CACZ,QAAA,CAAAN,CAAAA,CACH,CAAA,CACF,CAAA,CAGJ,GAAGugB,CACL,CAAA,CACC,GAAGtgB,CAAAA,CACN,CAEJ,CAEA,SAASghB,EAAAA,CAAkB,CAAE,SAAA,CAAAxf,CAAAA,CAAW,GAAA,CAAAyf,CAAAA,CAAK,SAAA,CAAAC,CAAAA,CAAW,GAAGlhB,CAAM,CAAA,CAA2C,CAC1G,IAAMugB,CAAAA,CAAoBC,oBAAAA,EAAqB,CAEzC9e,GAAAA,CAAYyf,EAAA,CAAA,MAAA,CAA0B,IAAI,CAAA,CAChD,OAAMA,EAAA,CAAA,SAAA,CAAU,IAAM,CAChBD,CAAAA,CAAU,OAAA,EAASxf,GAAAA,CAAI,OAAA,EAAS,KAAA,GACtC,CAAA,CAAG,CAACwf,CAAAA,CAAU,OAAO,CAAC,CAAA,CAGpB7gB,GAAAA,CAACwD,GAAAA,CAAA,CACC,GAAA,CAAKnC,GAAAA,CACL,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,MAAA,CACL,UAAA,CAAUuf,CAAAA,CAAI,IAAA,CAAK,kBAAA,EAAmB,CACtC,sBAAA,CACEC,CAAAA,CAAU,QAAA,EAAY,CAACA,CAAAA,CAAU,WAAA,EAAe,CAACA,EAAU,SAAA,EAAa,CAACA,CAAAA,CAAU,YAAA,CAErF,kBAAA,CAAkBA,CAAAA,CAAU,WAAA,CAC5B,gBAAA,CAAgBA,CAAAA,CAAU,SAAA,CAC1B,mBAAA,CAAmBA,CAAAA,CAAU,YAAA,CAC7B,SAAA,CAAWvf,CAAAA,CACT,s1BAAA,CACA4e,CAAAA,CAAkB,GAAA,CAClB/e,CACF,CAAA,CACC,GAAGxB,CAAAA,CACN,CAEJ,CCjJO,SAAS+J,EAAAA,CAAS,CAAE,OAAA,CAAA+R,GAAAA,CAAS,WAAA,CAAAC,CAAAA,CAAa,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAA6C,CAChH,GAAM,CAAE,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAC,GAAAA,CAAO,UAAA,CAAAC,CAAAA,CAAY,OAAA,CAAA1N,CAAQ,CAAA,CAAIqN,CAAAA,CACvCrW,CAAAA,CAAKmX,KAAAA,EAAM,CAEjB,SAASuE,CAAAA,CAAaV,CAAAA,CAAwBlD,CAAAA,CAAiD,CAC7FvB,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGsB,CAAAA,CACH,KAAA,CAAOkD,CAAAA,CAAOA,CAAAA,CAAK,WAAA,EAAY,CAAI,EACrC,CAAC,EACH,CAEA,SAASnB,GAAAA,CAAeC,CAAAA,CAAkBtM,CAAAA,CAAyC,CACjF+I,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGhJ,CAAAA,CACH,QAAA,CAAUsM,CACZ,CAAC,EACH,CAEA,SAASzB,CAAAA,CAAeha,CAAAA,CAA6B,CACnDA,CAAAA,CAAM,cAAA,EAAe,CACrBkY,CAAAA,CAASC,CAAAA,CAAM,CAAE,GAAGF,CAAAA,CAAUE,CAAI,CAAA,CAAG,KAAA,CAAO,MAAU,CAAC,EACzD,CAEA,OACE7b,GAAAA,CAAC2D,CAAAA,CAAA,CACC,OAAA,CAAS8X,GAAAA,CACT,IAAA,CAAMI,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAjY,GAAM,CAAA,GACfrD,IAAAA,CAACsD,CAAAA,CAAA,CACC,SAAA,CAAY2Z,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,QAAA,GACZA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,eAAA,EAAgB,EAEtB,CAAA,CAEA,QAAA,CAAA,CAAAxd,GAAAA,CAACge,CAAAA,CAAA,CAAU,OAAA,CAAS3Y,CAAAA,CAAK,QAAA,CAAAyW,GAAAA,CAAM,CAAA,CAC9BzN,CAAAA,CAAQ,OAAA,CAAUrO,GAAAA,CAACie,GAAAA,CAAA,CAAiB,QAAA,CAAA5P,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC1ErO,GAAAA,CAAC8D,CAAAA,CAAA,CACC,QAAA,CAAAvD,IAAAA,CAAC8e,EAAAA,CAAA,CACC,QAAA,CAAA,CAAArf,GAAAA,CAACsf,EAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAtf,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAWlC,CAAAA,CACT,oGAAA,CACA,CAACsC,GAAAA,CAAM,KAAA,EAAO,KAAA,EAAS,0BAAA,CACvB,CAACA,GAAAA,CAAM,KAAA,EAAO,KAAA,EAASA,GAAAA,CAAM,KAAA,CAAM,KAAA,GAAU,SAAA,CAAY,SAAA,CAAY,EACvE,EACA,QAAA,CAAUmY,CAAAA,GAAe,KAAA,EAASnY,GAAAA,CAAM,KAAA,EAAO,QAAA,CAC/C,EAAA,CAAIyB,CAAAA,CACJ,OAAA,CAAQ,SAAA,CAER,QAAA,CAAA9E,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,cAAA,CACb,QAAA,CAAA4D,GAAAA,CAAM,KAAA,EAAO,KAAA,CACVod,MAAAA,CAAO,IAAI,IAAA,CAAKpd,GAAAA,CAAM,KAAA,CAAM,KAAe,CAAA,CAAG,KAAK,CAAA,CACnD,MAAA,CACAod,MAAAA,CAAO,IAAI,IAAA,CAAKpd,GAAAA,CAAM,KAAA,CAAM,KAAe,CAAA,CAAG,OAAO,CAAA,CACrD,sBAAA,CACN,CAAA,CACArD,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACZ,QAAA,CAAA,CAAAqD,GAAAA,CAAM,KAAA,EAAO,KAAA,EACZ5D,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,mFAAA,CACV,OAAA,CAAUwd,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,EAAgB,CAClBE,CAAAA,CAAeF,CAAC,EAClB,CAAA,CACA,IAAA,CAAK,QAAA,CACL,YAAA,CAAW,YAAA,CAEX,QAAA,CAAAxd,GAAAA,CAAC8e,GAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CAEF9e,GAAAA,CAACihB,QAAAA,CAAA,CAAa,SAAA,CAAU,wEAAA,CAAyE,CAAA,CAAA,CACnG,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CACA1gB,IAAAA,CAACgf,EAAAA,CAAA,CAAe,SAAA,CAAU,kBAAA,CAAmB,KAAA,CAAM,OAAA,CACjD,QAAA,CAAA,CAAAvf,GAAAA,CAAC2f,EAAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAA,CAAU/b,GAAAA,CAAM,KAAA,EAAO,KAAA,CAAQ,IAAI,IAAA,CAAKA,GAAAA,CAAM,KAAA,CAAM,KAAe,CAAA,CAAI,MAAA,CACvE,QAAA,CAAWyc,CAAAA,EAASU,CAAAA,CAAaV,CAAAA,CAAMzc,GAAAA,CAAM,KAAK,CAAA,CAClD,YAAA,CAAY,IAAA,CACd,CAAA,CACArD,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,SAAM,OAAA,CAAQ,MAAA,CAAO,SAAA,CAAU,2BAAA,CAA4B,QAAA,CAAA,MAAA,CAE5D,CAAA,CACAA,GAAAA,CAAC+D,GAAAA,CAAA,CACC,SAAA,CAAU,qBAAA,CACV,EAAA,CAAG,MAAA,CACH,QAAA,CAAWyZ,CAAAA,EAAM,CACf,IAAM0D,CAAAA,CAAY1D,CAAAA,CAAE,MAAA,CAAO,KAAA,CACrB,CAAC2D,CAAAA,CAAOC,CAAO,CAAA,CAAIF,CAAAA,CAAU,KAAA,CAAM,GAAG,CAAA,CAEtCb,CAAAA,CAAOzc,GAAAA,CAAM,KAAA,EAAO,KAAA,CAAQ,IAAI,IAAA,CAAKA,GAAAA,CAAM,KAAA,CAAM,KAAe,CAAA,CAAI,IAAI,IAAA,CAC9Eyc,CAAAA,CAAK,QAAA,CAAS,QAAA,CAASc,CAAK,CAAC,CAAA,CAC7Bd,CAAAA,CAAK,UAAA,CAAW,QAAA,CAASe,CAAO,CAAC,CAAA,CAEjCxF,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGjY,GAAAA,CAAM,KAAA,CACT,KAAA,CAAOyc,CAAAA,CAAK,WAAA,EACd,CAAC,EACH,CAAA,CACA,IAAA,CAAK,MAAA,CACL,KAAA,CAAOzc,GAAAA,CAAM,KAAA,EAAO,KAAA,CAAQod,MAAAA,CAAO,IAAI,IAAA,CAAKpd,GAAAA,CAAM,KAAA,CAAM,KAAe,CAAA,CAAG,OAAO,CAAA,CAAI,EAAA,CACvF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACA5D,GAAAA,CAACof,GAAAA,CAAA,CACC,OAAA,CAASxb,GAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,QAAA,CAAWub,CAAAA,EAAY,CACrBD,GAAAA,CAAeC,CAAAA,CAASvb,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACA5D,GAAAA,CAACgE,GAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CCxHO,IAAMqd,EAAAA,CAAkBC,qBAAAA,CAAsB,CACnD,CACE,KAAA,CAAO,MAAA,CACP,WAAA,CAAa,oCAAA,CACb,WAAA,CAAa,CAAC,IAAK,WAAW,CAAA,CAC9B,IAAA,CAAMthB,GAAAA,CAACqJ,IAAAA,CAAA,CAAK,IAAA,CAAM,EAAA,CAAI,CAAA,CACtB,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAkY,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GAAM,CAC9BD,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYC,CAAK,CAAA,CAAE,UAAA,CAAW,WAAA,CAAa,WAAW,CAAA,CAAE,GAAA,GACjF,CACF,CAAA,CACA,CACE,KAAA,CAAO,YAAA,CACP,WAAA,CAAa,gCAAA,CACb,WAAA,CAAa,CAAC,MAAA,CAAQ,MAAA,CAAQ,MAAA,CAAQ,OAAA,CAAS,UAAU,CAAA,CACzD,IAAA,CAAMxhB,GAAAA,CAACyhB,WAAAA,CAAA,CAAY,IAAA,CAAM,EAAA,CAAI,CAAA,CAC7B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAF,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GAAM,CAC9BD,CAAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYC,CAAK,CAAA,CAAE,cAAA,EAAe,CAAE,GAAA,GAC7D,CACF,CAAA,CACA,CACE,KAAA,CAAO,WAAA,CACP,WAAA,CAAa,sBAAA,CACb,WAAA,CAAa,CAAC,OAAA,CAAS,KAAA,CAAO,OAAO,CAAA,CACrC,IAAA,CAAMxhB,GAAAA,CAAC0hB,QAAAA,CAAA,CAAS,IAAA,CAAM,EAAA,CAAI,CAAA,CAC1B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAH,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GAAM,CAC9BD,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYC,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,CAAA,CAClC,IAAA,CAAMxhB,GAAAA,CAAC2hB,QAAAA,CAAA,CAAS,IAAA,CAAM,EAAA,CAAI,CAAA,CAC1B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAJ,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GAAM,CAC9BD,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYC,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,IAAA,CAAMxhB,GAAAA,CAAC4hB,QAAAA,CAAA,CAAS,IAAA,CAAM,EAAA,CAAI,CAAA,CAC1B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAL,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GAAM,CAC9BD,EAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYC,CAAK,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,CAAC,CAAA,CAAE,GAAA,GAC7E,CACF,CAAA,CACA,CACE,KAAA,CAAO,aAAA,CACP,WAAA,CAAa,8BAAA,CACb,WAAA,CAAa,CAAC,WAAA,CAAa,OAAO,CAAA,CAClC,IAAA,CAAMxhB,GAAAA,CAAC6hB,IAAAA,CAAA,CAAK,IAAA,CAAM,EAAA,CAAI,CAAA,CACtB,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAN,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GAAM,CAC9BD,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYC,CAAK,CAAA,CAAE,gBAAA,EAAiB,CAAE,GAAA,GAC/D,CACF,CAAA,CACA,CACE,KAAA,CAAO,eAAA,CACP,WAAA,CAAa,+BAAA,CACb,WAAA,CAAa,CAAC,SAAS,CAAA,CACvB,IAAA,CAAMxhB,GAAAA,CAAC8hB,WAAAA,CAAA,CAAY,IAAA,CAAM,EAAA,CAAI,CAAA,CAC7B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAP,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GAAM,CAC9BD,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYC,CAAK,CAAA,CAAE,iBAAA,EAAkB,CAAE,GAAA,GAChE,CACF,CAAA,CACA,CACE,KAAA,CAAO,OAAA,CACP,WAAA,CAAa,kBAAA,CACb,WAAA,CAAa,CAAC,YAAY,CAAA,CAC1B,IAAA,CAAMxhB,GAAAA,CAAC+hB,SAAAA,CAAA,CAAU,IAAA,CAAM,EAAA,CAAI,CAAA,CAC3B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAR,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GACxBD,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYC,CAAK,CAAA,CAAE,WAAW,WAAA,CAAa,WAAW,CAAA,CAAE,gBAAA,EAAiB,CAAE,GAAA,EACtG,CAAA,CACA,CACE,KAAA,CAAO,MAAA,CACP,WAAA,CAAa,yBAAA,CACb,WAAA,CAAa,CAAC,WAAW,CAAA,CACzB,IAAA,CAAMxhB,GAAAA,CAACgiB,IAAAA,CAAA,CAAK,IAAA,CAAM,EAAA,CAAI,CAAA,CACtB,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAT,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GAAMD,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYC,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,CAAMxhB,GAAAA,CAACke,SAAAA,CAAA,CAAU,IAAA,CAAM,EAAA,CAAI,CAAA,CAC3B,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAqD,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GAAM,CAC9BD,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,WAAA,CAAYC,CAAK,CAAA,CAAE,GAAA,EAAI,CAE9C,IAAMS,CAAAA,CAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA,CAC5CA,CAAAA,CAAM,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,KAAA,GACR,CACF,CAAA,CACA,CACE,KAAA,CAAO,SAAA,CACP,WAAA,CAAa,wBAAA,CACb,WAAA,CAAa,CAAC,OAAA,CAAS,SAAA,CAAW,OAAO,CAAA,CACzC,IAAA,CAAMjiB,GAAAA,CAACkiB,OAAAA,CAAA,CAAQ,IAAA,CAAM,EAAA,CAAI,CAAA,CACzB,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAX,EAAQ,KAAA,CAAAC,CAAM,CAAA,GAAM,CAC9B,IAAMW,CAAAA,CAAY,MAAA,CAAO,iCAAiC,CAAA,CAE1C,IAAI,MAAA,CAClB,6GACF,CAAA,CAEY,IAAA,CAAKA,CAAAA,EAAa,EAAE,CAAA,CAC9BZ,CAAAA,CACG,KAAA,EAAM,CACN,KAAA,EAAM,CACN,WAAA,CAAYC,CAAK,CAAA,CACjB,eAAA,CAAgB,CACf,GAAA,CAAKW,CAAAA,EAAa,EACpB,CAAC,CAAA,CACA,GAAA,EAAI,CAEHA,CAAAA,GAAc,IAAA,EAChB,KAAA,CAAM,2CAA2C,EAGvD,CACF,CAAA,CACA,CACE,KAAA,CAAO,SAAA,CACP,WAAA,CAAa,gBAAA,CACb,WAAA,CAAa,CAAC,SAAA,CAAW,OAAO,CAAA,CAChC,IAAA,CAAMniB,GAAAA,CAACoiB,OAAAA,CAAA,CAAQ,IAAA,CAAM,EAAA,CAAI,CAAA,CACzB,OAAA,CAAS,CAAC,CAAE,MAAA,CAAAb,CAAAA,CAAQ,KAAA,CAAAC,CAAM,CAAA,GAAM,CAC9B,IAAMa,CAAAA,CAAY,MAAA,CAAO,2BAA2B,CAAA,CACjC,IAAI,MAAA,CAAO,6EAA6E,CAAA,CAE5F,IAAA,CAAKA,CAAAA,EAAa,EAAE,CAAA,CACjCd,CAAAA,CACG,KAAA,EAAM,CACN,KAAA,EAAM,CACN,WAAA,CAAYC,CAAK,CAAA,CACjB,QAAA,CAAS,CACR,GAAA,CAAKa,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,SAAA,CAAU,CAC5C,UAAA,CAAY,CACV,KAAA,CAAO,IAAMlB,EAAAA,CACb,MAAA,CAAQmB,WACV,CACF,CAAC,CAAA,CCxKD,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,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,SACT,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,SACT,CACF,CAAA,CAEMC,EAAAA,CAA0C,CAC9C,CACE,IAAA,CAAM,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,IAAA,CAAM,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,CAAa,CAAA,GAA0B,CAC3E,GAAM,CAAE,MAAA,CAAAtB,CAAO,CAAA,CAAIuB,SAAAA,EAAU,CAE7B,GAAI,CAACvB,CAAAA,CAAQ,OAAO,IAAA,CAEpB,IAAMwB,CAAAA,CAAkBN,EAAAA,CAAY,IAAA,CAAK,CAAC,CAAE,KAAA,CAAAO,CAAM,CAAA,GAAMzB,CAAAA,CAAO,QAAA,CAAS,WAAA,CAAa,CAAE,KAAA,CAAAyB,CAAM,CAAC,CAAC,CAAA,CACzFC,CAAAA,CAAsBP,EAAAA,CAAiB,IAAA,CAAK,CAAC,CAAE,KAAA,CAAAM,CAAM,CAAA,GAAMzB,CAAAA,CAAO,QAAA,CAAS,WAAA,CAAa,CAAE,KAAA,CAAAyB,CAAM,CAAC,CAAC,CAAA,CAExG,OACEziB,IAAAA,CAAC8e,EAAAA,CAAA,CAAQ,KAAA,CAAO,IAAA,CAAM,IAAA,CAAMuD,CAAAA,CAAM,YAAA,CAAcC,CAAAA,CAC9C,QAAA,CAAA,CAAA7iB,GAAAA,CAACsf,EAAAA,CAAA,CAAe,OAAA,CAAO,KACrB,QAAA,CAAA/e,IAAAA,CAACiD,GAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,0BAAA,CAA2B,OAAA,CAAQ,OAAA,CAC7D,QAAA,CAAA,CAAAxD,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,uBAAA,CACV,KAAA,CAAO,CACL,KAAA,CAAO+iB,CAAAA,EAAiB,KAAA,CACxB,eAAA,CAAiBE,CAAAA,EAAqB,KACxC,CAAA,CACD,QAAA,CAAA,GAAA,CAED,CAAA,CACAjjB,GAAAA,CAACkjB,WAAAA,CAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,CAAA,CAAA,CACzC,CAAA,CACF,CAAA,CAEA3iB,IAAAA,CAACgf,EAAAA,CAAA,CACC,UAAA,CAAY,CAAA,CACZ,SAAA,CAAU,iIAAA,CACV,KAAA,CAAM,OAAA,CAEN,QAAA,CAAA,CAAAhf,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CAAuE,QAAA,CAAA,OAAA,CAAK,CAAA,CAC1FyiB,EAAAA,CAAY,GAAA,CAAI,CAAC,CAAE,IAAA,CAAA5G,CAAAA,CAAM,KAAA,CAAAmH,CAAM,CAAA,GAC9BhjB,IAACmjB,gBAAAA,CAAA,CAEC,QAAA,CAAU,IAAM,CACd5B,CAAAA,CAAO,QAAA,CAAS,UAAA,EAAW,CAC3B1F,CAAAA,GAAS,SAAA,EACP0F,CAAAA,CACG,KAAA,EAAM,CACN,KAAA,EAAM,CACN,QAAA,CAASyB,CAAAA,EAAS,EAAE,CAAA,CACpB,GAAA,EAAI,CACTH,CAAAA,CAAa,KAAK,EACpB,CAAA,CACA,SAAA,CAAU,2GAAA,CAEV,QAAA,CAAAtiB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yDAAA,CAA0D,KAAA,CAAO,CAAE,KAAA,CAAAgjB,CAAM,CAAA,CAAG,QAAA,CAAA,GAAA,CAE3F,CAAA,CACAhjB,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAA6b,CAAAA,CAAK,CAAA,CAAA,CACd,CAAA,CAAA,CAlBKA,CAmBP,CACD,CAAA,CAAA,CACH,CAAA,CACAtb,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CAAuE,QAAA,CAAA,YAAA,CAAU,CAAA,CAC/F0iB,GAAiB,GAAA,CAAI,CAAC,CAAE,IAAA,CAAA7G,CAAAA,CAAM,KAAA,CAAAmH,CAAM,CAAA,GACnCziB,IAAAA,CAAC4iB,gBAAAA,CAAA,CAEC,QAAA,CAAU,IAAM,CACd5B,CAAAA,CAAO,QAAA,CAAS,cAAA,EAAe,CAC/B1F,CAAAA,GAAS,SAAA,EAAa0F,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,YAAA,CAAa,CAAE,KAAA,CAAAyB,CAAM,CAAC,CAAA,CAAE,GAAA,EAAI,CACzEH,CAAAA,CAAa,KAAK,EACpB,CAAA,CACA,SAAA,CAAU,2GAAA,CAEV,QAAA,CAAA,CAAAtiB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,yDAAA,CACV,KAAA,CAAO,CAAE,eAAA,CAAiBgjB,CAAM,CAAA,CACjC,QAAA,CAAA,GAAA,CAED,CAAA,CACAhjB,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAA6b,CAAAA,CAAK,CAAA,CAAA,CACd,CAAA,CACC0F,CAAAA,CAAO,QAAA,CAAS,YAAa,CAAE,KAAA,CAAAyB,CAAM,CAAC,CAAA,EAAKhjB,GAAAA,CAACojB,KAAAA,CAAA,CAAM,SAAA,CAAU,eAAA,CAAgB,CAAA,CAAA,CAAA,CAjBxEvH,CAkBP,CACD,CAAA,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAAA,CCzKO,SAASwH,EAAAA,CAAWxgB,CAAAA,CAAa,CACtC,GAAI,CACF,OAAA,IAAI,GAAA,CAAIA,CAAG,CAAA,CACJ,CAAA,CACT,CAAA,KAAa,CACX,OAAO,MACT,CACF,CAEO,SAASygB,GAAiB5M,CAAAA,CAAa,CAC5C,GAAI2M,EAAAA,CAAW3M,CAAG,CAAA,CAAG,OAAOA,CAAAA,CAC5B,GAAI,CACF,GAAIA,CAAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAI,QAAA,CAAS,GAAG,CAAA,CACxC,OAAO,IAAI,GAAA,CAAI,CAAA,QAAA,EAAWA,CAAG,CAAA,CAAE,CAAA,CAAE,QAAA,EAErC,CAAA,KAAa,CACX,OAAO,IACT,CACF,CAOO,IAAM6M,EAAAA,CAAe,CAAC,CAAE,IAAA,CAAAX,CAAAA,CAAM,YAAA,CAAAC,CAAa,CAAA,GAAyB,CACzE,IAAMW,CAAAA,CAAWrc,MAAAA,CAAyB,IAAI,CAAA,CACxC,CAAE,MAAA,CAAAoa,CAAO,CAAA,CAAIuB,SAAAA,EAAU,CAO7B,OAJA/iB,SAAAA,CAAU,IAAM,CACdyjB,CAAAA,CAAS,OAAA,EAAS,KAAA,GACpB,CAAC,CAAA,CAEIjC,CAAAA,CAGHhhB,IAAAA,CAAC8e,OAAAA,CAAA,CAAQ,KAAA,CAAO,IAAA,CAAM,IAAA,CAAMuD,CAAAA,CAAM,YAAA,CAAcC,CAAAA,CAC9C,QAAA,CAAA,CAAA7iB,GAAAA,CAACsf,cAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAA/e,IAAAA,CAACiD,GAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAU,yCAAA,CAC1C,QAAA,CAAA,CAAAxD,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,cAAA,CAAe,QAAA,CAAA,QAAA,CAAC,CAAA,CAC7BA,GAAAA,CAAC,GAAA,CAAA,CACC,SAAA,CAAWsB,CAAAA,CAAG,4DAAA,CAA8D,CAC1E,kBAAA,CAAoBigB,CAAAA,CAAO,QAAA,CAAS,MAAM,CAC5C,CAAC,CAAA,CACF,QAAA,CAAA,MAAA,CAED,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACAvhB,GAAAA,CAACuf,EAAAA,CAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,gBAAA,CAAiB,UAAA,CAAY,EAAA,CACnE,QAAA,CAAAhf,IAAAA,CAAC,MAAA,CAAA,CACC,QAAA,CAAWid,GAAM,CACf,IAAMiG,CAAAA,CAASjG,CAAAA,CAAE,aAAA,CACjBA,CAAAA,CAAE,cAAA,EAAe,CACjB,IAAMyE,CAAAA,CAAQwB,CAAAA,CAAO,CAAC,CAAA,CAChB5gB,CAAAA,CAAMygB,EAAAA,CAAiBrB,CAAAA,CAAM,KAAK,CAAA,CACpCpf,CAAAA,GACF0e,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,OAAA,CAAQ,CAAE,IAAA,CAAM1e,CAAI,CAAC,CAAA,CAAE,GAAA,EAAI,CAClDggB,CAAAA,CAAa,KAAK,CAAA,EAEtB,CAAA,CACA,SAAA,CAAU,gBAAA,CAEV,QAAA,CAAA,CAAA7iB,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKwjB,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,WAAA,CAAY,cAAA,CACZ,SAAA,CAAU,8DAAA,CACV,YAAA,CAAcjC,CAAAA,CAAO,aAAA,CAAc,MAAM,CAAA,CAAE,IAAA,EAAQ,EAAA,CACrD,CAAA,CACCA,CAAAA,CAAO,aAAA,CAAc,MAAM,CAAA,CAAE,IAAA,CAC5BvhB,GAAAA,CAACwD,GAAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,SAAA,CACR,IAAA,CAAK,QAAA,CACL,SAAA,CAAU,oIAAA,CACV,OAAA,CAAS,IAAM,CACb+d,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,SAAA,EAAU,CAAE,GAAA,EAAI,CACnCiC,CAAAA,CAAS,OAAA,GAASA,CAAAA,CAAS,OAAA,CAAQ,KAAA,CAAQ,EAAA,CAAA,CAC/CX,CAAAA,CAAa,KAAK,EACpB,CAAA,CAEA,QAAA,CAAA7iB,GAAAA,CAAC0jB,KAAAA,CAAA,CAAM,SAAA,CAAU,eAAA,CAAgB,CAAA,CACnC,CAAA,CAEA1jB,GAAAA,CAACwD,GAAAA,CAAA,CAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,QAAA,CAC5B,QAAA,CAAAxD,GAAAA,CAACojB,KAAAA,CAAA,CAAM,SAAA,CAAU,eAAA,CAAgB,CAAA,CACnC,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CA1DkB,IA4DtB,CAAA,CC7EA,IAAMvR,EAAAA,CAAwB,CAC5B,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAM8R,QAAAA,CACN,OAAA,CAAUpC,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,CAAA,EAC7B,CAACA,EAAO,QAAA,CAAS,aAAa,CAClC,CAAA,CACA,CACE,IAAA,CAAM,WAAA,CACN,IAAA,CAAMG,QAAAA,CACN,OAAA,CAAUH,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,aAAA,CAAc,CAAE,KAAA,CAAO,CAAE,CAAC,CAAA,CAAE,GAAA,EAAI,CAC1F,QAAA,CAAWA,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,CAAMI,QAAAA,CACN,OAAA,CAAUJ,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,aAAA,CAAc,CAAE,KAAA,CAAO,CAAE,CAAC,CAAA,CAAE,GAAA,EAAI,CAC1F,QAAA,CAAWA,CAAAA,EAAWA,CAAAA,EAAU,MAAQA,CAAAA,CAAO,QAAA,CAAS,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,CAAC,CACjF,CAAA,CACA,CACE,IAAA,CAAM,WAAA,CACN,IAAA,CAAMK,QAAAA,CACN,OAAA,CAAUL,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,aAAA,CAAc,CAAE,KAAA,CAAO,CAAE,CAAC,CAAA,CAAE,GAAA,EAAI,CAC1F,QAAA,CAAWA,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,CAAC,CACjF,CAAA,CACA,CACE,IAAA,CAAM,YAAA,CACN,IAAA,CAAME,WAAAA,CACN,OAAA,CAAUF,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,cAAA,EAAe,CAAE,GAAA,EAAI,CAC/E,QAAA,CAAWA,CAAAA,EAAWA,GAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,UAAU,CACpE,CAAA,CACA,CACE,IAAA,CAAM,aAAA,CACN,IAAA,CAAMO,WAAAA,CACN,OAAA,CAAUP,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,gBAAA,EAAiB,CAAE,GAAA,EAAI,CACjF,QAAA,CAAWA,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,YAAY,CACtE,CAAA,CACA,CACE,IAAA,CAAM,eAAA,CACN,IAAA,CAAMO,WAAAA,CACN,OAAA,CAAUP,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,iBAAA,EAAkB,CAAE,GAAA,EAAI,CAClF,QAAA,CAAWA,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,aAAa,CACvE,CAAA,CACA,CACE,IAAA,CAAM,OAAA,CACN,IAAA,CAAMQ,UACN,OAAA,CAAUR,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,gBAAA,EAAiB,CAAE,GAAA,EAAI,CACjF,QAAA,CAAWA,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,YAAY,CACtE,CAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMS,IAAAA,CACN,OAAA,CAAUT,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,eAAA,EAAgB,CAAE,GAAA,EAAI,CAChF,QAAA,CAAWA,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,WAAW,CACrE,CACF,CAAA,CAMaqC,EAAAA,CAAe,CAAC,CAAE,IAAA,CAAAhB,CAAAA,CAAM,YAAA,CAAAC,CAAa,CAAA,GAAyB,CACzE,GAAM,CAAE,MAAA,CAAAtB,CAAO,CAAA,CAAIuB,WAAU,CAC7B,GAAI,CAACvB,CAAAA,CAAQ,OAAO,IAAA,CACpB,IAAMsC,CAAAA,CAAahS,EAAAA,CAAM,MAAA,CAAQrH,CAAAA,EAASA,CAAAA,CAAK,QAAA,CAAS+W,CAAM,CAAC,CAAA,CAAE,GAAA,EAAI,EAAK,CACxE,IAAA,CAAM,UACR,CAAA,CAEA,OACEhhB,IAAAA,CAAC8e,OAAAA,CAAA,CAAQ,KAAA,CAAO,IAAA,CAAM,IAAA,CAAMuD,CAAAA,CAAM,YAAA,CAAcC,CAAAA,CAC9C,QAAA,CAAA,CAAA7iB,GAAAA,CAACsf,EAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CAAC,SAAA,CAAU,2EAAA,CAChC,QAAA,CAAA/e,IAAAA,CAACiD,GAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAU,UAAA,CAC1C,QAAA,CAAA,CAAAxD,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,iCAAA,CAAmC,QAAA,CAAA6jB,CAAAA,CAAW,IAAA,CAAK,CAAA,CACnE7jB,GAAAA,CAACkjB,WAAAA,CAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,GACzC,CAAA,CACF,CAAA,CACAljB,GAAAA,CAACuf,EAAAA,CAAA,CAAe,UAAA,CAAY,CAAA,CAAG,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,gBAAA,CACpD,QAAA,CAAA1N,EAAAA,CAAM,GAAA,CAAKrH,CAAAA,EACVjK,IAAAA,CAAC4iB,gBAAAA,CAAA,CAEC,QAAA,CAAW5B,CAAAA,EAAW,CACpB/W,CAAAA,CAAK,OAAA,CAAQ+W,CAAM,CAAA,CACnBsB,CAAAA,CAAa,KAAK,EACpB,CAAA,CACA,SAAA,CAAU,yHAAA,CAEV,QAAA,CAAA,CAAAtiB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sCAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCAAA,CACb,QAAA,CAAAA,GAAAA,CAACwK,CAAAA,CAAK,IAAA,CAAL,CAAU,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CACAxK,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAwK,CAAAA,CAAK,IAAA,CAAK,CAAA,CAAA,CACnB,CAAA,CACCqZ,CAAAA,CAAW,IAAA,GAASrZ,CAAAA,CAAK,IAAA,EAAQxK,GAAAA,CAACojB,KAAAA,CAAA,CAAM,UAAU,eAAA,CAAgB,CAAA,CAAA,CAAA,CAb9D5Y,CAAAA,CAAK,IAcZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,CAAA,CC3HO,IAAMsZ,EAAAA,CAAe,IAAM,CAChC,GAAM,CAAE,MAAA,CAAAvC,CAAO,CAAA,CAAIuB,SAAAA,EAAU,CAE7B,OAAKvB,CAAAA,CAGHvhB,GAAAA,CAACwD,GAAAA,CAAA,CACC,OAAA,CAAQ,OAAA,CACR,IAAA,CAAK,IAAA,CACL,SAAA,CAAU,yBAAA,CACV,OAAA,CAAUugB,CAAAA,EAAQ,CAChB,GAAIxC,CAAAA,CAAO,QAAA,CAAS,MAAM,CAAA,CACxBA,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,GAAA,EAAI,CAAA,KACnC,CACL,GAAM,CAAE,IAAA,CAAAxU,CAAAA,CAAM,GAAAiX,CAAG,CAAA,CAAIzC,CAAAA,CAAO,KAAA,CAAM,SAAA,CAC5B0C,CAAAA,CAAQ1C,CAAAA,CAAO,KAAA,CAAM,GAAA,CAAI,WAAA,CAAYxU,CAAAA,CAAMiX,CAAE,CAAA,CAEnD,GAAI,CAACC,CAAAA,CAAO,OAEZ1C,CAAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,QAAA,CAAS,CAAE,KAAA,CAAA0C,CAAM,CAAC,CAAA,CAAE,GAAA,GAC7C,CACF,CAAA,CAEA,QAAA,CAAAjkB,GAAAA,CAACkkB,SAAAA,CAAA,CAAU,SAAA,CAAW5iB,CAAAA,CAAG,WAAA,CAAa,CAAE,kBAAA,CAAoBigB,CAAAA,CAAO,QAAA,CAAS,MAAM,CAAE,CAAC,CAAA,CAAG,WAAA,CAAa,GAAA,CAAK,CAAA,CAC5G,CAAA,CArBkB,IAuBtB,CAAA,CCzBO,IAAM4C,EAAAA,CAAc,IAAM,CAC/B,GAAM,CAAE,MAAA,CAAA5C,CAAO,CAAA,CAAIuB,SAAAA,EAAU,CAE7B,OAAKvB,CAAAA,CAoCHvhB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CACZ,QAAA,CAnCyB,CAC5B,CACE,IAAA,CAAM,MAAA,CACN,QAAA,CAAWuhB,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,MAAM,CAAA,CAC9D,OAAA,CAAUA,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,GAAA,EAAI,CAC9D,IAAA,CAAM6C,QACR,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,QAAA,CAAW7C,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAChE,QAAUA,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,YAAA,EAAa,CAAE,GAAA,EAAI,CAChE,IAAA,CAAM8C,UACR,CAAA,CACA,CACE,IAAA,CAAM,WAAA,CACN,QAAA,CAAW9C,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,CAAM+C,aACR,CAAA,CACA,CACE,IAAA,CAAM,QAAA,CACN,QAAA,CAAW/C,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAChE,OAAA,CAAUA,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,YAAA,EAAa,CAAE,GAAA,EAAI,CAChE,IAAA,CAAMgD,iBACR,CAAA,CACA,CACE,KAAM,MAAA,CACN,QAAA,CAAWhD,CAAAA,EAAWA,CAAAA,EAAU,IAAA,EAAQA,CAAAA,CAAO,QAAA,CAAS,MAAM,CAAA,CAC9D,OAAA,CAAUA,CAAAA,EAAWA,CAAAA,EAAQ,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,GAAA,EAAI,CAC9D,IAAA,CAAMiD,QACR,CACF,CAAA,CAIW,GAAA,CAAKha,CAAAA,EACVxK,GAAAA,CAACmjB,gBAAAA,CAAA,CAEC,QAAA,CAAW5B,CAAAA,EAAW,CACpB/W,CAAAA,CAAK,OAAA,CAAQ+W,CAAM,EACrB,CAAA,CAEA,QAAA,CAAAvhB,GAAAA,CAACwD,GAAAA,CAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,iBAAA,CAAkB,OAAA,CAAUga,CAAAA,EAAMA,CAAAA,CAAE,cAAA,EAAe,CAAG,OAAA,CAAQ,OAAA,CACxF,QAAA,CAAAxd,GAAAA,CAACwK,CAAAA,CAAK,IAAA,CAAL,CACC,SAAA,CAAWlJ,CAAAA,CAAG,eAAA,CAAiB,CAC7B,kBAAA,CAAoBkJ,CAAAA,CAAK,QAAA,CAAS+W,CAAM,CAC1C,CAAC,CAAA,CACH,CAAA,CACF,CAAA,CAAA,CAXK/W,CAAAA,CAAK,IAYZ,CACD,CAAA,CACH,CAAA,CArDkB,IAuDtB,CAAA,CChEe,SAARia,EAAAA,CAAuB,CAAE,SAAA,CAAAtjB,CAAU,CAAA,CAA0B,CAClE,OACEZ,IAAAA,CAAC,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,cAAA,CACP,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,WAAA,CAAY,KAAA,CACZ,UAAWY,CAAAA,CAEX,QAAA,CAAA,CAAAnB,GAAAA,CAAC,OAAA,CAAA,CAAM,QAAA,CAAA,eAAA,CAAa,CAAA,CAEpBA,GAAAA,CAAC,MAAA,CAAA,CACC,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,CAAA,CAAE,sqBAAA,CACF,IAAA,CAAK,cAAA,CACP,CAAA,CAAA,CACF,CAEJ,CC/BA,IAAM0kB,EAAAA,CAAe,IAEjBnkB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sDAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,+FAAA,CAAgG,CAAA,CAC/GA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gGAAA,CAAiG,CAAA,CAChHA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oEAAA,CAAqE,CAAA,CAAA,CACtF,CAAA,CAIG2kB,EAAAA,CAAQD,EAAAA,CCNA,SAARE,EAAAA,CAAsC,CAC3C,UAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,GACF,CAAA,CAGuB,CACrB,GAAM,CAAE,MAAA,CAAAvD,CAAO,CAAA,CAAIuB,SAAAA,EAAU,CAE7B,OAAKvB,CAAAA,CAGHhhB,IAAAA,CAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAK,IAAAA,CAACwkB,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAxkB,IAAAA,CAACykB,CAAAA,CAAA,CACC,SAAA,CAAU,kBAAA,CACV,KAAA,CAAM,SAAA,CACN,QAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAY1D,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAEpCA,CAAAA,CACG,KAAA,EAAM,CACN,KAAA,EAAM,CACN,eAAA,CACC,CACE,IAAA,CAAM0D,CAAAA,CAAU,IAAA,CAChB,EAAA,CAAIA,CAAAA,CAAU,EAChB,CAAA,CACAJ,CACF,CAAA,CACC,GAAA,GACL,CAAA,CAEA,QAAA,CAAA,CAAA7kB,GAAAA,CAACojB,KAAAA,CAAA,CAAM,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAAE,mBAAA,CAAA,CAE9D,CAAA,CACA7iB,IAAAA,CAACykB,CAAAA,CAAA,CACC,SAAA,CAAU,kBAAA,CACV,KAAA,CAAM,QAAA,CACN,QAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAY1D,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAM,UACpCA,CAAAA,CACG,KAAA,EAAM,CACN,KAAA,EAAM,CACN,eAAA,CAAgB0D,CAAAA,CAAU,EAAA,CAAK,CAAA,CAAGJ,CAAU,CAAA,CAC5C,GAAA,GACL,CAAA,CAEA,QAAA,CAAA,CAAA7kB,GAAAA,CAAC+hB,SAAAA,CAAA,CAAU,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAAE,cAAA,CAAA,CAElE,CAAA,CAAA,CACF,CAAA,CACA/hB,GAAAA,CAACklB,CAAAA,CAAA,EAAiB,CAAA,CAElBllB,GAAAA,CAAC+kB,CAAAA,CAAA,CACC,QAAA,CAAAxkB,IAAAA,CAACykB,CAAAA,CAAA,CAAY,QAAA,CAAUF,GAAAA,CAAW,KAAA,CAAM,QAAA,CAAS,SAAA,CAAU,kBAAA,CACzD,QAAA,CAAA,CAAA9kB,GAAAA,CAACmlB,SAAAA,CAAA,CAAU,SAAA,CAAU,wCAAA,CAAyC,CAAA,CAAE,SAAA,CAAA,CAElE,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAnDkB,IAqDtB,CC9DA,IAAM9W,EAAAA,CAAU,CACd,CACE,KAAA,CAAO,SAAA,CACP,KAAA,CAAO,iBAAA,CACP,IAAA,CAAM+W,aACR,CAAA,CAEA,CACE,KAAA,CAAO,KAAA,CACP,KAAA,CAAO,aAAA,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,KAAA,CAAO,aAAA,CACP,IAAA,CAAMC,QACR,CACF,CAAA,CAMe,SAARC,EAAAA,CAAoC,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAgD,CACpG,GAAM,CAAE,MAAA,CAAAlE,GAAO,CAAA,CAAIuB,SAAAA,EAAU,CAE7B,OAAKvB,GAAAA,CAGHhhB,IAAAA,CAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAF,GAAAA,CAAC+kB,CAAAA,CAAA,CAAa,OAAA,CAAQ,0BAAA,CACnB,QAAA,CAAA1W,EAAAA,CAAQ,GAAA,CAAKgF,CAAAA,EACZ9S,IAAAA,CAACykB,CAAAA,CAAA,CACC,QAAA,CAAWnS,CAAAA,EAAU,CACnB,IAAM6S,CAAAA,CAAQnE,GAAAA,CAAO,KAAA,CAAM,SAAA,CAAU,OAAA,EAAQ,CACvCoE,CAAAA,CAAOpE,GAAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,UAAA,CAAW,SAAA,CAAUmE,CAAAA,CAAM,OAAO,CAAA,CACvED,CAAAA,CAASE,CAAAA,CAAM9S,CAAK,EACtB,CAAA,CACA,SAAA,CAAU,0BAAA,CAEV,KAAA,CAAOQ,CAAAA,CAAO,KAAA,CAEd,QAAA,CAAA,CAAArT,GAAAA,CAACqT,CAAAA,CAAO,IAAA,CAAP,CAAY,SAAA,CAAU,kCAAA,CAAmC,CAAA,CACzDA,CAAAA,CAAO,KAAA,CAAA,CAAA,CAJHA,CAAAA,CAAO,KAKd,CACD,CAAA,CACH,CAAA,CACArT,GAAAA,CAACklB,CAAAA,CAAA,EAAiB,EAClBllB,GAAAA,CAAC+kB,CAAAA,CAAA,CAAa,OAAA,CAAQ,mBAAA,CACpB,QAAA,CAAAxkB,IAAAA,CAACykB,CAAAA,CAAA,CACC,QAAA,CAAU,IAAM,CACd,IAAMY,CAAAA,CAAMrE,GAAAA,CAAO,KAAA,CAAM,SAAA,CAAU,IAAA,CAE7BoE,CAAAA,CAAOE,WAAAA,CAAYtE,GAAAA,CAAQqE,CAAG,CAAA,CACpCH,CAAAA,CAASE,CAAAA,CAAM,UAAU,EAC3B,CAAA,CACA,KAAA,CAAM,UAAA,CACN,SAAA,CAAU,kBAAA,CAEV,QAAA,CAAA,CAAA3lB,GAAAA,CAAC8lB,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,CAAAlD,CAAa,CAAA,CAAwC,CAChF,GAAM,CAAE,MAAA,CAAAtB,CAAO,EAAIuB,SAAAA,EAAU,CACvB,CAACkD,GAAAA,CAAYC,CAAa,CAAA,CAAInmB,QAAAA,CAAS,EAAE,CAAA,CACzC,CAAE,SAAA,CAAA6B,CAAU,CAAA,CAAI0F,SAAAA,EAAU,CAE1B,CAAE,UAAA,CAAAwd,CAAAA,CAAY,QAAA,CAAAqB,CAAAA,CAAU,SAAA,CAAAvjB,CAAU,CAAA,CAAIwjB,aAAAA,CAAc,CACxD,GAAA,CAAK5jB,GAAAA,CAASZ,CAAS,CAAA,CAAE,UAAA,CACzB,KAAA,CAAO,MAAOsgB,CAAAA,CAAOmE,CAAAA,GAAS,CAC5B,IAAMC,CAAAA,CAAW,MAAM,KAAA,CAAMpE,CAAAA,CAAOmE,CAAI,CAAA,CAExC,GAAIC,CAAAA,CAAS,MAAA,GAAW,GAAA,CACtB,MAAAxN,KAAAA,CAAM,KAAA,CAAM,kDAAkD,CAAA,CAExD,IAAI,KAAA,CAAM,kBAAkB,CAAA,CAGpC,OAAOwN,CACT,CAAA,CACA,OAAA,CAAU7I,CAAAA,EAAM,CACVA,CAAAA,CAAE,OAAA,GAAY,kBAAA,EAIlB3E,MAAM,KAAA,CAAM2E,CAAAA,CAAE,OAAO,EACvB,CACF,CAAC,CAAA,CAEK8I,GAAAA,CAAgBzB,CAAAA,CAAW,MAAA,CAAS,CAAA,CAE1C,OAAKtD,CAAAA,CAKHhhB,IAAAA,CAACgiB,CAAAA,CAAA,CAAQ,SAAA,CAAU,cAAA,CAChB,QAAA,CAAA,CAAA+D,GAAAA,EACCtmB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CACb,QAAA,CAAAA,GAAAA,CAACumB,CAAAA,CAAA,CACC,QAAA,CAAAvmB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qCAAA,CACb,QAAA,CAAAA,GAAAA,CAACwmB,EAAAA,CAAA,CAAU,QAAA,CAAA3B,CAAAA,CAAW,CAAA,CACxB,CAAA,CACF,CAAA,CACF,CAAA,CAGDliB,CAAAA,EACCpC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uHAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAACykB,EAAAA,CAAA,CAAM,SAAA,CAAU,qCAAA,CAAsC,CAAA,CAAE,gBAAA,CAEzDzkB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBAAA,CACb,QAAA,CAAAA,GAAAA,CAAC2kB,EAAAA,CAAA,EAAa,EAChB,CAAA,CAAA,CACF,CAAA,CAED,CAAChiB,CAAAA,EACApC,IAAAA,CAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,aAAA,CACb,QAAA,CAAA,CAAAP,GAAAA,CAACymB,CAAAA,CAAA,CACC,KAAA,CAAOT,GAAAA,CACP,aAAA,CAAeC,CAAAA,CACf,SAAA,CAAS,IAAA,CACT,WAAA,CAAaK,GAAAA,CAAgB,yBAAA,CAA4B,+BAAA,CACzD,OAAA,CAAS,IAAMI,cAAAA,CAAenF,CAAM,CAAA,CACtC,CAAA,CACAvhB,GAAAA,CAACwD,GAAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,SAAA,CAAU,sHAAA,CACV,OAAA,CAAS,IAAM,CACb,GAAIqhB,CAAAA,CACF,OAAOqB,CAAAA,CAASrB,CAAAA,CAAY,CAC1B,IAAA,CAAM,CAAE,MAAA,CAAQ,KAAA,CAAO,OAAA,CAASmB,GAAW,CAC7C,CAAC,CAAA,CAAE,IAAA,CAAK,IAAMC,CAAAA,CAAc,EAAE,CAAC,CAAA,CAGjC,IAAMP,EAAQnE,CAAAA,CAAO,KAAA,CAAM,SAAA,CAAU,OAAA,EAAQ,CACvCoE,CAAAA,CAAOpE,CAAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,UAAA,CAAW,SAAA,CAAUmE,CAAAA,CAAM,OAAO,CAAA,CAEvEQ,CAAAA,CAASP,CAAAA,CAAM,CACb,IAAA,CAAM,CAAE,MAAA,CAAQ,KAAA,CAAO,OAAA,CAASK,GAAW,CAC7C,CAAC,CAAA,CAAE,IAAA,CAAK,IAAMC,CAAAA,CAAc,EAAE,CAAC,EACjC,CAAA,CAEA,QAAA,CAAAjmB,GAAAA,CAAC2mB,OAAAA,CAAA,CAAQ,SAAA,CAAU,eAAA,CAAgB,CAAA,CACrC,CAAA,CAAA,CACF,CAAA,CACA3mB,GAAAA,CAAC4mB,GAAAA,CAAA,CACE,QAAA,CAAAN,GAAAA,CACCtmB,GAAAA,CAAC4kB,EAAAA,CAAA,CACC,SAAA,CAAW,IAAM,CACfrD,CAAAA,CAAO,KAAA,EAAM,CAAE,cAAA,EAAe,CAAE,KAAA,EAAM,CAAE,GAAA,EAAI,CAC5CsB,CAAAA,CAAa,KAAK,EACpB,CAAA,CACA,UAAA,CAAYgC,CAAAA,CACd,CAAA,CAEA7kB,GAAAA,CAACwlB,EAAAA,CAAA,CAAmB,QAAA,CAAU,CAAC3S,CAAAA,CAAOQ,CAAAA,GAAW6S,CAAAA,CAASrT,CAAAA,CAAO,CAAE,IAAA,CAAM,CAAE,MAAA,CAAAQ,CAAO,CAAE,CAAC,CAAA,CAAG,CAAA,CAE5F,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAtEO,IAwEX,CCjHe,SAARwT,EAAAA,CAAsC,CAC3C,QAAA,CAAAnnB,CAAAA,CACA,IAAA,CAAAkjB,CAAAA,CACA,YAAA,CAAAC,CACF,CAAA,CAAkD,CAChD,GAAM,CAAE,MAAA,CAAAtB,CAAO,CAAA,CAAIuB,SAAAA,EAAU,CAQ7B,OANA/iB,SAAAA,CAAU,IAAM,CACTwhB,CAAAA,GAEAqB,CAAAA,EAAMkE,iBAAAA,CAAkBvF,CAAM,CAAA,EACrC,CAAA,CAAG,CAACA,CAAAA,CAAQqB,CAAI,CAAC,EAEZrB,CAAAA,CAGHhhB,IAAAA,CAACwmB,YAAAA,CAAA,CACC,YAAA,CAAc,CACZ,SAAA,CAAWnE,CAAAA,CAAO,cAAA,CAAiB,KAAA,CACnC,QAAA,CAAU,IAAM,CACdC,CAAAA,CAAa,KAAK,CAAA,CAClBtB,CAAAA,CAAO,KAAA,EAAM,CAAE,cAAA,EAAe,CAAE,GAAA,GAClC,CACF,CAAA,CACA,SAAA,CAAU,2HAAA,CAET,QAAA,CAAA,CAAAqB,CAAAA,EAAQ5iB,GAAAA,CAAC+lB,EAAAA,CAAA,CAAW,IAAA,CAAMnD,CAAAA,CAAM,YAAA,CAAcC,CAAAA,CAAc,CAAA,CAC5D,CAACD,CAAAA,EACAriB,IAAAA,CAACL,UAAAA,CAAA,CACC,QAAA,CAAA,CAAAK,IAAAA,CAACiD,GAAAA,CAAA,CACC,SAAA,CAAU,2CAAA,CACV,OAAA,CAAQ,OAAA,CACR,OAAA,CAAUga,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjBqF,CAAAA,CAAa,IAAI,EACnB,CAAA,CACA,IAAA,CAAK,IAAA,CAEL,QAAA,CAAA,CAAA7iB,GAAAA,CAACykB,GAAA,CAAM,SAAA,CAAU,eAAA,CAAgB,CAAA,CAAE,QAAA,CAAA,CAErC,CAAA,CACC/kB,CAAAA,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CA/BkB,IAiCtB,CCzBA,IAAM+M,EAAAA,CAAa,CAAC,GAAGua,GAAAA,CAAmB1E,EAAY,CAAA,CAEtD,SAAS2E,EAAAA,CAAcpU,CAAAA,CAAsC,CAC3D,GAAI,CAACA,CAAAA,EAAS,OAAOA,CAAAA,EAAU,QAAA,CAC7B,OAAO,MAAA,CAGT,IAAMqU,CAAAA,CAAQrU,CAAAA,CAMd,OAJI,EAAA,OAAOqU,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,CAAiBtU,CAAAA,CAAqE,CAC7F,GAAI,OAAOA,GAAU,QAAA,CAAU,CAC7B,IAAMuU,CAAAA,CAAUvU,CAAAA,CAAM,IAAA,EAAK,CAE3B,GAAI,CAACuU,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,CAAcpU,CAAK,CAAA,CACrB,OAAOA,CAIX,CAEe,SAARpJ,EAAAA,CAAwB,CAC7B,OAAA,CAAAgS,GAAAA,CACA,YAAA,CAAA6L,CAAAA,CACA,WAAA,CAAA5L,CAAAA,CACA,QAAA,CAAAE,CACF,CAAA,CAA2C,CACzC,GAAM,CAAE,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,CAAAA,CAAY,OAAA,CAAA1N,CAAQ,CAAA,CAAIqN,CAAAA,CACvC,CAAC6L,CAAAA,CAAQC,CAAS,CAAA,CAAI1nB,QAAAA,CAAS,KAAK,CAAA,CACpC,CAAC2nB,GAAAA,CAAUC,CAAW,CAAA,CAAI5nB,QAAAA,CAAS,KAAK,CAAA,CACxC,CAAC6nB,GAAAA,CAAUC,CAAW,CAAA,CAAI9nB,QAAAA,CAAS,KAAK,CAAA,CACxC,CAAC+nB,CAAAA,CAAWC,CAAY,CAAA,CAAIhoB,QAAAA,CAAS,KAAK,CAAA,CAE1CioB,GAAAA,CAAmBC,oBAAAA,CAAqB,CAACzG,CAAAA,CAAwBpE,CAAAA,GAA8C,CACnH,IAAM8K,CAAAA,CAAO1G,CAAAA,CAAO,OAAA,EAAQ,CAE5B3F,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGsB,CAAAA,CACH,KAAA,CAAO,IAAA,CAAK,SAAA,CAAU8K,CAAI,CAC5B,CAAC,EACH,CAAA,CAAG,GAAG,CAAA,CAEN,SAAS/I,CAAAA,CAAeC,CAAAA,CAAkBtM,CAAAA,CAAyC,CACjF+I,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGhJ,CAAAA,CACH,QAAA,CAAUsM,CACZ,CAAC,EACH,CAIA,IAAM+I,CAAAA,CAAYhL,CAAAA,GAEhB,OAAA,CAAQ,GAAA,CAAI,oCAAA,CAAsCA,CAAI,CAAA,CAE/C,OAAA,CAAQ,OAAA,CAAQ,iCAAiC,CAAA,CAAA,CAG1D,OACEld,GAAAA,CAAC2D,CAAAA,CAAA,CACC,OAAA,CAAS8X,GAAAA,CACT,IAAA,CAAMI,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAjY,CAAM,CAAA,GACfrD,IAAAA,CAACsD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA7D,GAAAA,CAACge,CAAAA,CAAA,CAAW,QAAA,CAAAlC,CAAAA,CAAM,CAAA,CACjBzN,CAAAA,EAAS,OAAA,CAAUrO,GAAAA,CAACie,GAAAA,CAAA,CAAiB,QAAA,CAAA5P,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAC3ErO,GAAAA,CAAC8D,CAAAA,CAAA,CACC,QAAA,CAAA9D,GAAAA,CAACmoB,UAAAA,CAAA,CACC,QAAA,CAAA5nB,IAAAA,CAAC6nB,aAAAA,CAAA,CAEC,SAAA,CAAU,wNAAA,CACV,QAAA,CAAUrM,CAAAA,GAAe,KAAA,EAAS,CAACnY,EAAM,KAAA,EAAO,QAAA,CAChD,WAAA,CAAa,CACX,eAAA,CAAiB,CACf,OAAA,CAAS,CAACykB,CAAAA,CAAO3kB,CAAAA,GAAU4kB,uBAAAA,CAAwB5kB,CAAK,CAC1D,CAAA,CACA,WAAA,CAAa,CAAC6kB,CAAAA,CAAM7kB,CAAAA,GAAU8kB,gBAAAA,CAAiBD,CAAAA,CAAM7kB,CAAAA,CAAOwkB,CAAQ,CAAA,CACpE,UAAA,CAAY,CAACK,CAAAA,CAAM7kB,CAAAA,CAAO+kB,CAAAA,CAAQC,CAAAA,GAAUC,eAAAA,CAAgBJ,CAAAA,CAAM7kB,CAAAA,CAAOglB,CAAAA,CAAOR,CAAQ,CAAA,CACxF,UAAA,CAAY,CACV,KAAA,CACE,0KAEJ,CACF,CAAA,CACA,UAAA,CAAYzb,EAAAA,CACZ,cAAA,CAAgB0a,EAAAA,CAAiBvjB,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAS0jB,CAAAA,CAAa,KAAK,CAAA,CACzE,iBAAA,CAAmB,IAAA,CACnB,QAAA,CAAU,CAAC,CAAE,MAAA,CAAA/F,CAAO,CAAA,GAAM,CACxBwG,GAAAA,CAAiBxG,CAAAA,CAAQ3d,CAAAA,CAAM,KAAK,EACtC,CAAA,CACA,SAAA,CAAW5D,GAAAA,CAAC4oB,YAAAA,CAAA,EAAa,CAAA,CAEzB,QAAA,CAAA,CAAAroB,IAAAA,CAACsoB,aAAAA,CAAA,CAAc,SAAA,CAAU,sLAAA,CACvB,QAAA,CAAA,CAAA7oB,GAAAA,CAAC8oB,kBAAAA,CAAA,CAAmB,SAAA,CAAU,kCAAA,CAAmC,QAAA,CAAA,YAAA,CAAU,CAAA,CAC3E9oB,GAAAA,CAAC+oB,iBAAAA,CAAA,CACE,QAAA,CAAA1H,EAAAA,CAAgB,GAAA,CAAK7W,CAAAA,EACpBjK,IAAAA,CAACyoB,iBAAAA,CAAA,CACC,KAAA,CAAOxe,CAAAA,CAAK,KAAA,CACZ,SAAA,CAAYye,CAAAA,EAAQze,CAAAA,CAAK,OAAA,GAAUye,CAAG,CAAA,CACtC,SAAA,CAAU,kJAAA,CAGV,QAAA,CAAA,CAAAjpB,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oHAAA,CACZ,QAAA,CAAAwK,CAAAA,CAAK,IAAA,CACR,CAAA,CACAjK,IAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAP,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gBAAA,CAAkB,QAAA,CAAAwK,CAAAA,CAAK,KAAA,CAAM,CAAA,CAC1CxK,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,sCAAuC,QAAA,CAAAwK,CAAAA,CAAK,WAAA,CAAY,CAAA,CAAA,CACvE,CAAA,CAAA,CAAA,CARKA,CAAAA,CAAK,KASZ,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACAjK,IAAAA,CAACsmB,EAAAA,CAAA,CAAqB,IAAA,CAAMU,CAAAA,CAAQ,YAAA,CAAcC,CAAAA,CAChD,QAAA,CAAA,CAAAxnB,GAAAA,CAACoa,GAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,CAAA,CAClCpa,GAAAA,CAAC4jB,EAAAA,CAAA,CAAa,IAAA,CAAM6D,GAAAA,CAAU,YAAA,CAAcC,CAAAA,CAAa,CAAA,CACzD1nB,GAAAA,CAACoa,GAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,CAAA,CAClCpa,GAAAA,CAACujB,EAAAA,CAAA,CAAa,IAAA,CAAMoE,GAAAA,CAAU,YAAA,CAAcC,CAAAA,CAAa,CAAA,CACzD5nB,GAAAA,CAACoa,GAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,CAAA,CAClCpa,GAAAA,CAAC8jB,EAAAA,CAAA,EAAa,CAAA,CACd9jB,GAAAA,CAACoa,GAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,CAAA,CAClCpa,GAAAA,CAACmkB,GAAA,EAAY,CAAA,CACbnkB,GAAAA,CAACoa,GAAAA,CAAA,CAAU,WAAA,CAAY,UAAA,CAAW,CAAA,CAClCpa,GAAAA,CAAC2iB,EAAAA,CAAA,CAAc,IAAA,CAAMkF,CAAAA,CAAW,YAAA,CAAcC,CAAAA,CAAc,CAAA,CAAA,CAC9D,CAAA,CAAA,CAAA,CAvDK,CAAA,EAAGjM,CAAI,CAAA,CAAA,EAAIjY,CAAAA,CAAM,KAAA,EAAO,KAAA,EAAS0jB,CAAAA,CAAa,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO1jB,CAAAA,CAAM,KAAA,EAAO,QAAA,EAAY0jB,CAAAA,CAAa,QAAQ,CAAC,CAAA,CAwDpH,CAAA,CACF,CAAA,CACF,CAAA,CACAtnB,GAAAA,CAACof,GAAAA,CAAA,CACC,OAAA,CAASxb,CAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,QAAA,CAAWub,CAAAA,EAAY,CACrBD,CAAAA,CAAeC,CAAAA,CAASvb,CAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,CAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACA5D,GAAAA,CAACgE,GAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ,CCpMO,SAASklB,EAAAA,CAAK,CAAE,KAAA,CAAArW,CAAM,CAAA,CAAsB,CACjD,OAAI,CAACA,CAAAA,EAAS,CAACA,CAAAA,CAAM,MAAM,GAAG,CAAA,CAAE,MAAA,CACvB,IAAA,CAIP7S,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sDAAA,CACZ,QAAA,CAAA6S,CAAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAKsW,CAAAA,EACrBnpB,GAAAA,CAACopB,GAAAA,CAAA,CACC,SAAA,CAAU,mEAAA,CAEV,OAAA,CAAQ,WAAA,CAEP,QAAA,CAAAD,CAAAA,CAAAA,CAHIA,CAIP,CACD,CAAA,CACH,CAEJ,CCCO,SAASE,EAAAA,CAA+D,CAC7E,gBAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CACF,CAAA,CAAoD,CAClD,GAAM,CAAE,0BAAA,CAAA3f,CAA2B,CAAA,CAAIxF,CAAAA,EAAU,CAC3ColB,CAAAA,CAA6B,CACjC,QAAA,CAAY,UAAA,CACZ,MAAA,CAAU,QAAA,CACV,KAAA,CAAS,OAAA,CACT,MAAA,CAAU,MAAA,CACV,YAAA,CAAgB,MAAA,CAChB,MAAA,CAAU,MAAA,CACV,OAAU,SAAA,CACV,IAAA,CAAQ,MAAA,CACR,QAAA,CAAY,MACd,CAAA,CACMC,CAAAA,CAA4B,CAChC,OAAA,CAAWngB,GAAAA,CACX,IAAA,CAAQF,GAAAA,CACR,QAAA,CAAYK,GAAAA,CACZ,MAAA,CAAUD,GAAAA,CACV,KAAA,CAASD,GAAAA,CACT,MAAA,CAAUH,GAAAA,CACV,YAAA,CAAgBA,GAAAA,CAChB,MAAA,CAAUA,GAAAA,CACV,MAAA,CAAUE,GAAAA,CACV,IAAA,CAAQF,GAAAA,CACR,QAAA,CAAYA,GAAAA,CACZ,IAAA,CAAQ6f,EACV,CAAA,CAEMS,CAAAA,CAAOL,CAAAA,CACV,GAAA,CAAKxY,CAAAA,EAAc,CAClB,IAAM8Y,CAAAA,CACJ9Y,CAAAA,CAAU,WAAA,EACV2Y,CAAAA,CAA2B3Y,CAAAA,CAAU,SAAoD,CAAA,CACrF+Y,CAAAA,CACHhgB,CAAAA,CAA2B,eAAA,CAAiB,CAAC+f,CAAW,CAAC,CAAA,GAAI,CAAC,CAAA,EAAG,SAAA,EAGlEF,CAAAA,CAA0BE,CAAqD,CAAA,EAC/EF,CAAAA,CAA0B,IAAA,CAE5B,GAAI5Y,CAAAA,CAAU,QAAA,CACZ,OAAO,IAAA,CAGT,IAAMgZ,CAAAA,CAAgBF,CAAAA,GAAgB,MAAA,CAEtC,OAAO,CACL,WAAA,CAAa9Y,CAAAA,CAAU,IAAA,CACvB,QAAA,CAAU,CAACiZ,CAAAA,CAAiB1kB,CAAAA,CAAYwN,CAAAA,GAClCiX,CAAAA,CACK,IAAA,CAAA,CAGc,KAAA,CAAM,OAAA,CAAQjX,CAAK,CAAA,CAAIA,CAAAA,CAAQ,CAACA,CAAK,CAAA,EAEtC,QAAA,CAASkX,CAAAA,CAAI,QAAA,CAAS1kB,CAAE,CAAC,CAAA,CAEjD,MAAA,CAAQ,IAAMrF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CAA2B,QAAA,CAAA8Q,CAAAA,CAAU,KAAA,CAAM,CAAA,CACxE,IAAA,CAAM,CAAC,CAAE,GAAA,CAAAiZ,CAAI,CAAA,GAKJ/pB,GAAAA,CAJkB6pB,CAAAA,CAIjB,CAAiB,KAAA,CAAOE,CAAAA,CAAI,QAAA,CAASjZ,CAAAA,CAAU,IAAI,CAAA,CAAG,CAAA,CAEhE,aAAA,CAAe,KAAA,CACf,YAAA,CAAc,IAAA,CACd,IAAA,CAAMA,CAAAA,CAAU,OAAA,EAAS,MAAQ,GACnC,CACF,CAAC,CAAA,CACA,MAAA,CAAQkZ,CAAAA,EAAWA,CAAAA,GAAW,IAAI,CAAA,CAE/B9a,CAAAA,CAAU,CACd,EAAA,CAAI,SAAA,CACJ,IAAA,CAAM,CAAC,CAAE,GAAA,CAAA6a,CAAI,CAAA,GAAmCP,CAAAA,CAAmBA,CAAAA,CAAiBO,CAAG,CAAA,CAAI,IAAA,CAC3F,IAAA,CAAM,EACR,CAAA,CAEME,CAAAA,CAAuB,CAC3B,EAAA,CAAI,QAAA,CACJ,IAAA,CAAM,CAAC,CAAE,GAAA,CAAAF,CAAAA,CAAK,KAAA,CAAAG,CAAM,CAAA,GAClBlqB,GAAAA,CAACmqB,GAAAA,CAAA,CACC,YAAA,CAAW,YAAA,CACX,OAAA,CAASJ,CAAAA,CAAI,aAAA,EAAc,CAC3B,eAAA,CAAkBlX,CAAAA,EAAU,CAC1BqX,CAAAA,CAAM,yBAAA,CAA0B,KAAK,CAAA,CACrCH,CAAAA,CAAI,cAAA,CAAe,CAAA,CAAQlX,CAAM,EACnC,CAAA,CACF,CAAA,CAEF,aAAA,CAAe,KAAA,CACf,aAAc,KAAA,CACd,IAAA,CAAM,EACR,CAAA,CAEMuX,CAAAA,CAAyB,CAC7B,EAAA,CAAI,QAAA,CACJ,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAF,CAAM,CAAA,GACflqB,GAAAA,CAACmqB,GAAAA,CAAA,CACC,YAAA,CAAW,YAAA,CACX,OAAA,CAASD,CAAAA,CAAM,wBAAA,EAAyB,EAAMA,CAAAA,CAAM,yBAAA,EAA0B,EAAK,eAAA,CACnF,eAAA,CAAkBrX,CAAAA,EAAU,CAC1BqX,CAAAA,CAAM,yBAAA,CAA0B,CAAA,CAAQrX,CAAM,EAChD,CAAA,CACF,CAAA,CAEF,IAAA,CAAM,CAAC,CAAE,GAAA,CAAAkX,CAAI,CAAA,GACX/pB,GAAAA,CAACmqB,GAAAA,CAAA,CACC,YAAA,CAAW,YAAA,CACX,OAAA,CAASJ,CAAAA,CAAI,aAAA,EAAc,CAC3B,eAAA,CAAkBlX,CAAAA,EAAU,CAC1BkX,CAAAA,CAAI,cAAA,CAAe,CAAA,CAAQlX,CAAM,EACnC,CAAA,CACF,CAAA,CAEF,aAAA,CAAe,KAAA,CACf,aAAc,KAAA,CACd,IAAA,CAAM,EACR,CAAA,CAEA,OAAO,CACL,GAAI0W,CAAAA,GAAmB,QAAA,CAAW,CAACU,CAAoB,CAAA,CAAI,EAAC,CAC5D,GAAIV,CAAAA,GAAmB,UAAA,CAAa,CAACa,CAAsB,CAAA,CAAI,EAAC,CAChE,GAAIZ,CAAAA,CAAmB,CAACta,CAAO,CAAA,CAAI,EAAC,CACpC,GAAGya,CACL,CACF,CC1FA,SAASU,EAAAA,CAAuBC,CAAAA,CAA2C,CACzE,GAAI,CAACA,CAAAA,CACH,OAKF,GAFeA,CAAAA,CAAa,KAAA,CAAM,KAAK,CAAA,CAE5B,QAAA,CAAS,SAAS,CAAA,CAC3B,OAAO,EAIX,CAEO,SAASC,EAAAA,CAAgD,CAC9D,UAAA,CAAA3K,CAAAA,CACA,OAAA,CAAA4K,CAAAA,CACA,IAAA,CAAA/nB,CAAAA,CACA,qBAAA,CAAAgoB,CAAAA,CACA,uBAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,GAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,iBAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CACF,CAAA,CAA+C,CAC7C,IAAMC,CAAAA,CAAY9jB,MAAAA,CAAuB,IAAI,CAAA,CACvC,CAAC+jB,CAAAA,CAAcC,CAAe,CAAA,CAAIrrB,QAAAA,CAAS2qB,CAAAA,EAAyB,EAAE,CAAA,CACtE,CAACW,CAAAA,CAAkBC,CAAmB,CAAA,CAAIvrB,QAAAA,CAA0B,EAAE,CAAA,CACtE,CAACwrB,CAAAA,CAAeC,CAAgB,CAAA,CAAIzrB,QAAAA,CAA6B,EAAE,CAAA,CACnE,CAAC0rB,CAAAA,CAASC,CAAU,CAAA,CAAI3rB,QAAAA,CAAuB,EAAE,CAAA,CAEjDoqB,CAAAA,CAAQwB,aAAAA,CAAc,CAC1B,IAAA,CAAAjpB,CAAAA,CACA,OAAA,CAAA+nB,CAAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAAgB,CAAAA,CACA,gBAAA,CAAAJ,CAAAA,CACA,YAAA,CAAAF,CAAAA,CACA,aAAA,CAAAI,CACF,CAAA,CACA,YAAA,CAAc,CACZ,UAAA,CAAY,CACV,QAAA,CAAUV,CAAAA,EAAY,EACxB,CACF,CAAA,CACA,kBAAA,CAAoB,IAAA,CACpB,oBAAA,CAAsBe,CAAAA,CACtB,eAAA,CAAiBF,CAAAA,CACjB,qBAAA,CAAuBF,CAAAA,CACvB,wBAAA,CAA0BF,CAAAA,CAC1B,eAAA,CAAiBO,eAAAA,EAAgB,CACjC,mBAAA,CAAqBC,mBAAAA,EAAoB,CACzC,sBAAuBC,qBAAAA,EAAsB,CAC7C,iBAAA,CAAmBC,iBAAAA,EAAkB,CACrC,kBAAA,CAAoBC,kBAAAA,EAAmB,CACvC,sBAAA,CAAwBC,sBAAAA,EAAuB,CAC/C,QAAA,CAAWlC,CAAAA,EAAQA,CAAAA,CAAI,GAAA,CACvB,gBAAA,CAAkB,IAAA,CAClB,IAAA,CAAM,CACJ,gBAAA,CAAmBA,CAAAA,EAA6BmC,EAAAA,CAAiBnC,CAAAA,CAAKgB,CAAAA,CAAkBD,CAAgB,CAC1G,CACF,CAAC,CAAA,CAEK,CAAE,IAAA,CAAAqB,CAAK,CAAA,CAAIjC,CAAAA,CAAM,WAAA,EAAY,CAC7BkC,CAAAA,CAAiBC,cAAAA,CAAe,CACpC,KAAA,CAAOF,CAAAA,CAAK,MAAA,CACZ,YAAA,CAAc,IAAMtB,CAAAA,EAAqBR,EAAAA,CAAuBzK,CAAAA,EAAY,GAAG,CAAA,EAAK,EAAA,CACpF,gBAAA,CAAkB,IAAMqL,CAAAA,CAAU,OAAA,CAElC,cAAA,CACE,OAAO,MAAA,CAAW,GAAA,EAAe,SAAA,CAAU,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA,CAClE7P,CAAAA,EAAYA,EAAQ,qBAAA,EAAsB,CAAE,MAAA,CAC7C,MAAA,CACN,QAAA,CAAU,CACZ,CAAC,CAAA,CAEKkR,CAAAA,CAAeF,CAAAA,CAAe,eAAA,EAAgB,CAC9CG,CAAAA,CAAYH,CAAAA,CAAe,YAAA,EAAa,CAE9C,SAAST,CAAAA,CAAyBa,CAAAA,CAA6C,CAC7E,IAAMC,CAAAA,CAAgD,MAAA,CAAO,IAAA,CAAzC,OAAOD,CAAAA,EAAc,UAAA,CAAyBA,CAAAA,CAAUtB,CAAY,CAAA,CAAiBsB,CAAhB,CAAA,CAEzFrB,CAAAA,CAAgBqB,CAAS,CAAA,CACzB9B,CAAAA,GAA0B+B,CAAW,EACvC,CAEA,OACElsB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWe,CAAAA,CAAG,kCAAA,CAAoCse,CAAAA,EAAY,OAAO,CAAA,CACvE,QAAA,CAAA,CAAAoL,CAAAA,EAAoBA,CAAAA,CAAiBd,CAAK,CAAA,CAC3C3pB,IAAAA,CAACmsB,GAAAA,CAAA,CAAe,SAAA,CAAWprB,CAAAA,CAAG,sBAAA,CAAwBse,CAAAA,EAAY,KAAK,CAAA,CAAG,QAAA,CAAU+K,GAAAA,CAAU,IAAKM,CAAAA,CACjG,QAAA,CAAA,CAAAjrB,GAAAA,CAAC2sB,GAAAA,CAAA,CAAY,SAAA,CAAU,SAAA,CACpB,QAAA,CAAAzC,CAAAA,CAAM,eAAA,EAAgB,CAAE,GAAA,CAAK0C,CAAAA,EAC5B5sB,GAAAA,CAAC6sB,CAAAA,CAAA,CAAS,SAAA,CAAU,mBAAA,CACjB,QAAA,CAAAD,CAAAA,CAAY,OAAA,CAAQ,GAAA,CAAKE,CAAAA,EAEtB9sB,GAAAA,CAAC+sB,GAAAA,CAAA,CACC,SAAA,CAAWzrB,CAAAA,CAAG,yBAAA,CAA2BwrB,CAAAA,CAAO,MAAA,CAAO,EAAA,GAAO,SAAA,EAAa,SAAS,CAAA,CACpF,OAAA,CAASA,CAAAA,CAAO,OAAA,CAEhB,KAAA,CAAOA,CAAAA,CAAO,OAAA,EAAQ,CAAI,CAAE,KAAA,CAAO,CAAA,EAAGA,CAAAA,CAAO,OAAA,EAAQ,CAAE,QAAA,EAAU,CAAA,EAAA,CAAK,CAAA,CAAI,EAAC,CAE1E,QAAA,CAAAA,CAAAA,CAAO,aAAA,CAAgB,IAAA,CAAOE,UAAAA,CAAWF,CAAAA,CAAO,MAAA,CAAO,SAAA,CAAU,MAAA,CAAQA,CAAAA,CAAO,YAAY,CAAA,CAAA,CAHxFA,CAAAA,CAAO,EAId,CAEH,CAAA,CAAA,CAZ0CF,CAAAA,CAAY,EAazD,CACD,CAAA,CACH,CAAA,CACA5sB,GAAAA,CAACitB,GAAAA,CAAA,CACC,SAAA,CAAU,qBAAA,CACV,KAAA,CAAO,CACL,MAAA,CAAQ,CAAA,EAAGV,CAAAA,CAAU,QAAA,EAAU,CAAA,EAAA,CACjC,CAAA,CAEC,QAAA,CAAAD,CAAAA,CAAa,MAAA,CACZA,CAAAA,CAAa,GAAA,CAAKY,CAAAA,EAAe,CAC/B,IAAMnD,CAAAA,CAAMoC,CAAAA,CAAKe,CAAAA,CAAW,KAAK,CAAA,CAEjC,OACEltB,GAAAA,CAAC6sB,CAAAA,CAAA,CACC,SAAA,CAAW,CAAA,EAAI3C,CAAAA,CAAM,OAAA,CAAQ,IAAA,CAA2B,gBAAA,CACtDH,CACF,CAAC,CAAA,+BAAA,EAAkCnK,CAAAA,EAAY,GAAA,EAAO,EAAE,CAAA,CAAA,CACxD,YAAA,CAAYsN,CAAAA,CAAW,KAAA,CACvB,YAAA,CAAYnD,CAAAA,CAAI,aAAA,EAAc,EAAK,UAAA,CAEnC,GAAA,CAAKqC,EAAe,cAAA,CACpB,KAAA,CAAO,CACL,SAAA,CAAW,CAAA,WAAA,EAAcc,CAAAA,CAAW,KAAA,CAAM,QAAA,EAAU,CAAA,GAAA,CACtD,CAAA,CAEC,QAAA,CAAAnD,CAAAA,CAAI,eAAA,EAAgB,CAAE,GAAA,CAAKoD,CAAAA,EAC1BntB,GAAAA,CAACotB,GAAAA,CAAA,CACC,SAAA,CAAW9rB,CAAAA,CAAG,qCAAA,CAAuC6rB,CAAAA,CAAK,MAAA,CAAO,EAAA,GAAO,SAAA,EAAa,UAAU,CAAA,CAE/F,KAAA,CAAO,CACL,KAAA,CAAOA,CAAAA,CAAK,MAAA,CAAO,OAAA,EACrB,CAAA,CAEC,QAAA,CAAAH,UAAAA,CAAWG,CAAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAA,CAAMA,CAAAA,CAAK,UAAA,EAAY,CAAA,CAAA,CALpDA,CAAAA,CAAK,EAMZ,CACD,CAAA,CAAA,CAhBID,CAAAA,CAAW,GAiBlB,CAEJ,CAAC,CAAA,CAEDltB,GAAAA,CAAC6sB,CAAAA,CAAA,CACC,QAAA,CAAA7sB,GAAAA,CAACotB,GAAAA,CAAA,CAAU,SAAA,CAAU,yBAAyB,OAAA,CAAS5C,CAAAA,CAAQ,MAAA,CAAQ,QAAA,CAAA,aAAA,CAEvE,CAAA,CACF,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,SAAS0B,EAAAA,CACPnC,CAAAA,CACAgB,CAAAA,CACAD,CAAAA,CACQ,CACR,OAAIC,CAAAA,EAAkB,QAAA,CAAShB,CAAAA,CAAI,QAAA,CAAS,GAAG,CAAA,CACtC,iDAAA,CAGLe,CAAAA,EAAkB,IAAA,CAAMuC,CAAAA,EAASA,CAAAA,CAAK,GAAA,GAAQtD,CAAAA,CAAI,QAAA,CAAS,GAAG,CAAA,CACzD,6CAAA,CAGF,EACT,CChOO,SAASuD,EAAAA,CAA2B,CAAE,MAAA,CAAAne,CAAAA,CAAQ,GAAA,CAAA4a,CAAI,CAAA,CAAiD,CAExG,IAAMxW,CAAAA,CAAWwW,CAAAA,CAAI,QAAA,CAAS,GAAA,CAE9B,SAASwD,CAAAA,EAAqB,CAC5Bpe,CAAAA,CAAOoE,CAAQ,EACjB,CAEA,OACEvT,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACb,QAAA,CAAAO,IAAAA,CAACiD,GAAAA,CAAA,CAAO,SAAA,CAAU,sCAAA,CAAuC,OAAA,CAAS+pB,CAAAA,CAAc,OAAA,CAAQ,OAAA,CACtF,QAAA,CAAA,CAAAvtB,GAAAA,CAACwtB,MAAAA,CAAA,CAAO,SAAA,CAAU,eAAA,CAAgB,CAAA,CAClCxtB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,YAAA,CAAa,QAAA,CAAA,QAAA,CAAM,CAAA,CAAA,CACrC,CAAA,CACF,CAEJ,CCSA,IAAMytB,EAAAA,CAAY,EAAA,CAEH,SAARC,EAAAA,CAAsC,CAC3C,OAAA,CAAAjS,GAAAA,CACA,YAAA,CAAAvQ,CAAAA,CACA,YAAA,CAAAoc,CAAAA,CACA,QAAA,CAAA/T,CAAAA,CACA,UAAA,CAAAnD,CAAAA,CACA,gBAAA,CAAAL,CAAAA,CACA,WAAA,CAAA2L,CAAAA,CACA,MAAA,CAAAtR,CAAAA,CACA,KAAA,CAAA4F,CAAAA,CACA,QAAA,CAAA4L,CACF,EAAiD,CAC/C,GAAM,CAACtN,GAAAA,CAAQC,CAAS,CAAA,CAAIzO,QAAAA,CAAS,KAAK,CAAA,CACpCmc,GAAAA,CAAa9U,MAAAA,CAAuB,IAAI,CAAA,CAC9C4T,EAAAA,CAAckB,GAAAA,CAAY1N,CAAS,CAAA,CACnC,GAAM,CAAC4d,CAAAA,CAAMwB,CAAO,CAAA,CAAI7tB,QAAAA,CAAgC,EAAE,CAAA,CACpD,CAAE,IAAA,CAAA+b,CAAAA,CAAM,KAAA,CAAAC,GAAAA,CAAO,OAAA,CAAAzN,CAAAA,CAAS,YAAA,CAAAmH,CAAa,CAAA,CAAIkG,CAAAA,CACzCpF,CAAAA,CAAiCd,CAAAA,EAAc,MAAA,EAAUqG,CAAAA,CACzD+R,CAAAA,CAAiBje,EAAAA,EAAY,CAC7B3E,CAAAA,CAAcC,GAAAA,EAAe,CAC7B,CAAE,aAAA,CAAA4iB,CAAc,CAAA,CAAIC,GAAAA,EAAc,CAClCC,CAAAA,CAAUvR,KAAAA,EAAM,CAChBwR,CAAAA,CAAiBxR,KAAAA,EAAM,CACvByR,CAAAA,CAA2BpjB,IAAAA,CAAKC,MAAAA,CAAOwL,CAAAA,CAAwB,MAAM,CAAC,CAAA,CAAElM,CAAM,CAAA,CAC9E8jB,CAAAA,CAAqCD,CAAAA,EAA0B,UAAA,EAAc,EAAC,CAE9EE,CAAAA,CADmBtjB,IAAAA,CAAKC,MAAAA,CAAOsF,CAAAA,CAAY,MAAM,CAAC,CAAA,CAAEhG,CAAM,CAAA,EACvB,IAAA,EAAQ,EAAA,CAC3CiM,CAAAA,CAAmBxL,IAAAA,CAAgBC,MAAAA,CAAOsF,CAAAA,CAAY,MAAM,CAAC,CAAA,CAAE8d,CAAkC,CAAA,EAAG,YAAA,EACtG,IAAA,CACAE,CAAAA,CASEC,EAAAA,CAHwBH,CAAAA,CAAmC,IAAA,CAC9D9a,CAAAA,EAASA,CAAAA,CAAK,YAAA,EAAc,MAAA,GAAW+a,CAC1C,CAAA,EACyD,YAAA,EAAc,IAAA,CACjEG,EAAAA,CAA0BjY,CAAAA,GAAqB,QAAA,CAAWjG,CAAAA,CAAaL,CAAAA,CAEzEse,EAAAA,GACFD,CAAAA,CACEC,EAAAA,GAA8B,QAAA,CAC1B,CAAA,EAAGC,EAAuB,CAAA,cAAA,CAAA,CAC1B,CAAA,EAAGA,EAAuB,CAAA,eAAA,CAAA,CAAA,CAGlC,IAAMrc,CAAAA,CAAuBsc,EAAAA,CAAwBL,CAAkC,CAAA,CACjFM,EAAAA,CAAchhB,OAAAA,CAClB,IACE8Z,CAAAA,CAAa,KAAA,CACTmH,EAAAA,CAAY,CAAE,IAAA,CAAMnH,CAAAA,CAAa,KAAA,CAAO,YAAA,CAAApc,CAAAA,CAAc,oBAAA,CAAA+G,CAAAA,CAAsB,wBAAA,CAAAgc,CAAAA,CAA0B,KAAA,CAAAje,CAAM,CAAC,CAAA,CAC7G,EAAC,CACP,CAAC9E,CAAAA,CAAcoc,CAAAA,CAAcrV,CAAAA,CAAsBgc,CAAAA,CAA0Bje,CAAK,CACpF,CAAA,CACM0e,EAAAA,CAAcvX,EAAAA,CAAqB,CACvC,aAAA,CAAe0E,CAAAA,CACf,iBAAA,CAAmBvF,CAAAA,CACnB,KAAA,CAAAtG,CAAAA,CACA,MAAA,CAAA5F,CACF,CAAC,CAAA,CACKukB,EAAAA,CAAexC,CAAAA,CAAK,MAAA,CAASA,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAG,EAAE,CAAA,CAAE,GAAA,CAAKpC,CAAAA,EAAQA,CAAAA,CAAI9X,CAAoB,CAAW,CAAA,CAAI,EAAC,CACpG,CAAC2c,EAAAA,CAAS,CAAE,OAAA,CAAAxW,CAAAA,CAAS,IAAA,CAAA3V,CAAK,CAAC,EAAIosB,YAAAA,CAAwDhX,GAAAA;AAAA,IAAA,EACzF6W,GAAY,KAAK;AAAA,EAAA,CACpB,EAEKlE,EAAAA,CAAUnB,EAAAA,CAAkD,CAChE,gBAAA,CAAkB4E,GAA0B,UAAA,EAAc,EAAC,CAC3D,gBAAA,CAAmBlE,GAAQ+E,EAAAA,CAAe,CAAE,WAAA,CAAA9jB,CAAAA,CAAa,eAAAgjB,CAAAA,CAAgB,aAAA,CAAAH,CAAAA,CAAe,GAAA,CAAA9D,EAAK,OAAA,CAAA4D,CAAQ,CAAC,CACxG,CAAC,CAAA,CAED5tB,SAAAA,CAAU,IAAM,CACd4tB,EAAQa,EAAW,CAAA,CAEflH,CAAAA,CAAa,KAAA,GAAU,IAK3Btc,CAAAA,CAAY,CACV,IAAA,CAAM,iBAAA,CACN,QAAS,CACP,CAACgjB,CAAc,EAAG,CAChB,OAAA,CAAS,EAAC,CACV,UAAA,CAAY,EACd,CACF,CACF,CAAC,EACH,CAAA,CAAG,CAAChjB,CAAAA,CAAavI,CAAAA,CAAM+rB,GAAaR,CAAAA,CAAgB1G,CAAAA,CAActX,CAAK,CAAC,EAOxEjQ,SAAAA,CAAU,IAAM,CACd6b,CAAAA,CAASC,EAAM,CAAE,GAAGyL,CAAAA,CAAc,aAAA,CAAeuG,EAAcG,CAAc,CAAE,CAAC,EAClF,EAAG,CAAC1G,CAAAA,CAAcuG,CAAAA,CAAeG,CAAAA,CAAgBpS,EAAUC,CAAI,CAAC,CAAA,CAKhE9b,SAAAA,CAAU,IAAM,CAEd,IAAMgvB,EAAAA,CAAAA,CADelB,CAAAA,CAAcG,CAAc,CAAA,EAAG,OAAA,EAAqD,EAAC,EACzE,IAAI,CAAC,CAAE,KAAA,CAAAnb,EAAM,IAAMA,EAAK,CAAA,CAEzD8a,CAAAA,CAAQte,MAAAA,CAAO2f,KAAK,KAAK,CAAA,CAAG,CAAC,GAAID,GAAqB,GAAGP,EAAW,CAAC,CAAC,EACxE,CAAA,CAAG,CAAC/rB,CAAAA,CAAM6kB,CAAAA,CAAa,MAAOkH,EAAAA,CAAaX,CAAAA,CAAeG,CAAc,CAAC,EAGzE,IAAMiB,EAAAA,CAA2BjV,WAAAA,CAC9BkV,CAAAA,EAAgD,CAC/C,IAAMC,EAAAA,CAAa7H,CAAAA,CAAa,KAAA,EAAS,EAEzC,GAAI,CAAC4H,CAAAA,EAAuBC,EAAAA,GAAe,GAAKhD,CAAAA,CAAK,MAAA,GAAW,CAAA,CAC9D,OAGF,GAAM,CAAE,YAAA,CAAAiD,EAAAA,CAAc,SAAA,CAAAC,GAAW,YAAA,CAAAC,EAAa,CAAA,CAAIJ,CAAAA,CAE9CE,GAAeC,EAAAA,CAAYC,EAAAA,CAAe,GAAA,EAAO,CAAClX,GAAW+T,CAAAA,CAAK,MAAA,CAASgD,EAAAA,EAC7EP,EAAAA,CAAQ,CACN,SAAA,CAAW,CACT,OAAA,CAAS,CACP,MAAOnB,EAAAA,CACP,MAAA,CAAQtB,CAAAA,CAAK,MACf,EACA,KAAA,CAAO,CACL,uBAAA,CAAyB,CACvB,KAAM,CACJ,GAAA,CAAK5Y,CACP,CACF,CACF,CACF,CACF,CAAC,CAAA,CACE,KAAK,CAAC,CAAE,IAAA,CAAMzQ,EAAI,IAAyE,CAC1F,GAAI,CAACA,EAAAA,CACH,OAGF,IAAMysB,EAAAA,CAAa7d,EAAAA,CAAeuc,CAAAA,EAA0B,QAAU,EAAA,CAAIje,CAAAA,CAAOlN,EAAAA,CAAKsH,CAAM,EAC5FujB,CAAAA,CAAQte,MAAAA,CAAO2f,IAAAA,CAAK,KAAK,EAAG,CAAC,GAAGR,EAAAA,CAAa,GAAIe,GAAW,OAAc,CAAC,CAAC,EAC9E,CAAC,CAAA,CACA,KAAA,CAAO7sB,EAAAA,EAAmB,CAEzB,QAAQ,KAAA,CAAM,2BAAA,CAA6BA,EAAK,EAClD,CAAC,EAEP,CAAA,CACA,CACE4kB,CAAAA,CAAa,MACb/T,CAAAA,CACAqb,EAAAA,CACAJ,EAAAA,CACApW,CAAAA,CACA6V,GAA0B,MAAA,CAC1B9B,CAAAA,CAAK,MAAA,CACL/hB,CAAAA,CACA4F,CACF,CACF,CAAA,CAEA,SAASwf,EAAAA,CAAgB9rB,EAA6B,CACpDA,CAAAA,CAAM,cAAA,EAAe,CACrBkqB,EAAe,CACb,IAAA,CAAM,kBAAA,CACN,OAAA,CAAS,CACP,sBAAA,CAAwBY,EAAAA,CAAY,MAAA,CACpC,cAAA,CAAAJ,EACA,UAAA,CAAY9X,CAAAA,CACZ,QAAA,CAAA/C,CAAAA,CACA,eAAAya,CAAAA,CACA,IAAA,CAAMxY,CAAAA,EAAc,IAAA,EAAQ,UAC9B,CACF,CAAC,EACH,CAEA,OACExV,GAAAA,CAAC2D,CAAAA,CAAA,CACC,OAAA,CAAS8X,IACT,YAAA,CAAc6L,CAAAA,CACd,IAAA,CAAMzL,CAAAA,CACN,OAAQ,IACNtb,IAAAA,CAACsD,CAAAA,CAAA,CACC,UAAA7D,GAAAA,CAACge,CAAAA,CAAA,CAAU,OAAA,CAAS+P,EAAU,QAAA,CAAAjS,GAAAA,CAAM,EACnCzN,CAAAA,EAAS,OAAA,CAAUrO,IAACie,GAAAA,CAAA,CAAiB,QAAA,CAAA5P,CAAAA,CAAQ,QAAQ,CAAA,CAAqB,IAAA,CAC3ErO,GAAAA,CAAC8D,CAAAA,CAAA,CAAY,SAAA,CAAU,yFAAA,CACrB,QAAA,CAAAvD,IAAAA,CAAC,OACC,eAAA,CAAe,CAAA,sBAAA,EAAyBsb,CAAI,CAAA,CAAA,CAC5C,gBAAevN,GAAAA,CACf,SAAA,CAAW,CAAA,6PAAA,EACTA,GAAAA,CAAS,0DAA4D,EACvE,CAAA,CAAA,CACA,OAAA,CAAUkP,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,iBAAgB,CAClBvB,GAAAA,CAAW,OAAA,EAAS,KAAA,GACpBA,GAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1B1N,EAAU,IAAI,EAChB,CAAA,CACA,SAAA,CAAYiP,GAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,OAAA,EACZjP,EAAU,IAAI,CAAA,CAGZiP,CAAAA,CAAE,GAAA,GAAQ,WACZA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,iBAAgB,CAClBvB,GAAAA,CAAW,OAAA,EAAS,IAAA,GACpB1N,CAAAA,CAAU,KAAK,CAAA,EAEnB,CAAA,CACA,IAAK0N,GAAAA,CACL,IAAA,CAAK,UAAA,CACL,QAAA,CAAU,EAEV,QAAA,CAAA,CAAA1b,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iCACZ,QAAA,CAAA,CAAC+N,GAAAA,CASA/N,IAAAA,CAACiD,GAAAA,CAAA,CAAO,SAAA,CAAU,2BAAA,CAA4B,OAAA,CAASgsB,EAAAA,CAAiB,QAAQ,SAAA,CAC9E,QAAA,CAAA,CAAAxvB,GAAAA,CAACyI,IAAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAE,wBAAA,CAAuB,IAChEwlB,CAAAA,EAA0B,IAAA,EAAM,KAAA,EAASA,CAAAA,EAA0B,QACtE,CAAA,CAXAjuB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,yCACb,QAAA,CAAA2uB,EAAAA,CAAa,GAAA,CAAKnkB,CAAAA,EACjBxK,IAACopB,GAAAA,CAAA,CAAM,SAAA,CAAU,iCAAA,CAA6C,QAAQ,WAAA,CACnE,QAAA,CAAA5e,CAAAA,CAAAA,CADqDA,CAExD,CACD,CAAA,CACH,CAAA,CAOA8D,GAAAA,CAyBAtO,GAAAA,CAAC8H,IAAA,CACC,QAAA,CAAAvH,IAAAA,CAACwH,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA/H,GAAAA,CAACgI,GAAAA,CAAA,CAAe,QAAO,IAAA,CACrB,QAAA,CAAAhI,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,uGAAA,CACV,OAAA,CAAUga,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,iBAAgB,CAClBvB,GAAAA,CAAW,OAAA,EAAS,IAAA,GACpB1N,CAAAA,CAAU,KAAK,EACjB,CAAA,CACA,UAAYiP,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,UACZA,CAAAA,CAAE,cAAA,EAAe,CACjBA,CAAAA,CAAE,iBAAgB,CAClBvB,GAAAA,CAAW,OAAA,EAAS,IAAA,GACpB1N,CAAAA,CAAU,KAAK,CAAA,EAEnB,CAAA,CACA,KAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAAvO,IAAC8e,GAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,EACvC,CAAA,CACF,CAAA,CACA9e,GAAAA,CAACkI,GAAAA,CAAA,CACC,QAAA,CAAAlI,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,OAAA,CAAK,EACV,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CArDAA,GAAAA,CAAC8H,IAAA,CACC,QAAA,CAAAvH,IAAAA,CAACwH,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA/H,GAAAA,CAACgI,GAAAA,CAAA,CAAe,QAAO,IAAA,CACrB,QAAA,CAAAhI,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,uGAAA,CACV,EAAA,CAAIuqB,CAAAA,CACJ,UAAYvQ,CAAAA,EAAM,CACZA,CAAAA,CAAE,GAAA,GAAQ,UACZvB,GAAAA,CAAW,OAAA,EAAS,KAAA,EAAM,CAC1BA,IAAW,OAAA,EAAS,KAAA,EAAM,EAE9B,CAAA,CACA,KAAK,MAAA,CACL,OAAA,CAAQ,OAAA,CAER,QAAA,CAAAjc,IAAC6e,SAAAA,CAAA,CAAU,SAAA,CAAU,eAAA,CAAgB,EACvC,CAAA,CACF,CAAA,CACA7e,GAAAA,CAACkI,GAAAA,CAAA,CACC,QAAA,CAAAlI,GAAAA,CAAC,GAAA,CAAA,CAAE,QAAA,CAAA,cAAA,CAAY,EACjB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAiCJ,CAAA,CACAA,IAAC4a,EAAAA,CAAA,CAAY,SAAA,CAAU,iCAAA,CAAkC,aAAcrM,CAAAA,CAAW,IAAA,CAAMD,GAAAA,CACtF,QAAA,CAAAtO,IAAC6a,EAAAA,CAAA,CAAmB,SAAA,CAAU,WAAA,CAC5B,SAAA7a,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAA,CAAoC,GAAI,CAAA,sBAAA,EAAyB6b,CAAI,CAAA,CAAA,CAClF,QAAA,CAAA7b,IAACuqB,EAAAA,CAAA,CACC,UAAA,CAAY,CAAE,MAAO,oBAAqB,CAAA,CAC1C,OAAA,CAASC,EAAAA,CACT,KAAM2B,CAAAA,CACN,UAAA,CAAY/b,CAAAA,CACZ,QAAA,CAAWoN,GAAM,CACfyR,EAAAA,CAAyBzR,EAAE,MAAwB,EACrD,EACA,gBAAA,CACEqQ,CAAAA,CAAcG,CAAc,CAAA,EAAG,QAEjC,gBAAA,CAAkBH,CAAAA,CAAcG,CAAc,CAAA,EAAG,WACnD,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,EACF,CAAA,CACAhuB,GAAAA,CAACgE,GAAAA,CAAA,EAAY,GACf,CAAA,CAEJ,CAEJ,CAUA,SAAS8qB,GAAe,CAAE,WAAA,CAAA9jB,CAAAA,CAAa,cAAA,CAAAgjB,EAAgB,aAAA,CAAAH,CAAAA,CAAe,GAAA,CAAA9D,CAAAA,CAAK,QAAA4D,CAAQ,CAAA,CAAgC,CACjH,SAAS8B,EAAiBlc,CAAAA,CAAwB,CAChD,IAAMmc,CAAAA,CAAqB7B,EAAcG,CAAc,CAAA,EAAG,OAAA,EAAqD,GACzG2B,CAAAA,CAA8B,OAAO9kB,IAAAA,CAAKC,MAAAA,CAAOyI,EAAU,KAAK,CAAA,CAAGmc,CAAiB,CAAA,EAAM,SAE1FE,CAAAA,CAA0B/B,CAAAA,CAAcG,CAAc,CAAA,EAAG,YAAY,QAAA,CAASza,CAAQ,CAAA,CACtFsc,CAAAA,CAAgBF,EACjB9B,CAAAA,CAAcG,CAAc,CAAA,EAAG,UAAA,EAAc,EAAC,CAC/C8B,IAAAA,CAAK,CAAC,GAAIjC,EAAcG,CAAc,CAAA,EAAG,UAAA,EAAc,GAAKza,CAAQ,CAAC,CAAA,CAErEoc,CAAAA,EACFhC,EAASxB,CAAAA,EAASA,CAAAA,CAAK,MAAA,CAAQ4D,CAAAA,EAAYA,EAAQ,GAAA,GAAQxc,CAAQ,CAAC,CAAA,CAGtEvI,EAAY,CACV,IAAA,CAAM,iBAAA,CACN,OAAA,CAAS,CACP,CAACgjB,CAAc,EAAG,CAChB,QAAS0B,CAAAA,CAAkB,MAAA,CAAQK,CAAAA,EAAYA,CAAAA,CAAQ,MAAQxc,CAAQ,CAAA,CACvE,UAAA,CAAYqc,CAAAA,CACP/B,EAAcG,CAAc,CAAA,EAAG,UAAA,EAAY,MAAA,CAAQ5b,GAAQA,CAAAA,GAAQmB,CAAQ,CAAA,EAAK,GACjFsc,CACN,CACF,CACF,CAAC,EACH,CAEA,OAAO7vB,GAAAA,CAACstB,EAAAA,CAAA,CAAoB,MAAA,CAAQmC,CAAAA,CAAkB,GAAA,CAAK1F,CAAAA,CAAK,CAClE,CAMA,SAASwE,EAAAA,CAAwB9Z,CAAAA,CAAuC,CACtE,OAAOA,CAAAA,CAAiB,IAAA,CAAMrB,CAAAA,EAASA,EAAK,SAAS,CAAA,EAAG,IAAA,EAAQqB,CAAAA,CAAiB,CAAC,CAAA,EAAG,IACvF,CAUA,SAASga,GAAY,CACnB,IAAA,CAAAhsB,CAAAA,CACA,YAAA,CAAAyI,EACA,oBAAA,CAAA+G,CAAAA,CACA,wBAAA,CAAAgc,CAAAA,CACA,MAAAje,CACF,CAAA,CAAkC,CAChC,OAAK,MAAM,OAAA,CAAQvN,CAAI,CAAA,CAIhBA,CAAAA,CAAK,IACTsnB,CAAAA,EACCpN,GAAAA,CAAK/Y,CAAAA,EAAU,CACb,GAAIA,CAAAA,EAAS,OAAOA,CAAAA,EAAU,QAAA,EAAY,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,EAAKA,EAAM,UAAA,CAAY,CAInF,IAAMosB,CAAAA,CAH0BnlB,KAAKC,MAAAA,CAAOlH,CAAAA,CAAM,UAAA,CAAY,MAAM,CAAC,CAAA,CACnEqqB,CAAAA,EAA0B,UAAA,EAAc,EAC1C,CAAA,EACuD,YAAA,EAAc,KAAA,EAAS,EAAA,CAE9E,OAAI+B,CAAAA,CAECpsB,CAAAA,CAAMosB,CAAqB,CAAA,GAAuBhgB,CAAK,CAAA,EACvDpM,CAAAA,CAAMosB,CAAqB,CAAA,GAAuB9kB,CAAY,CAAA,EAC/DtH,CAAAA,CAAMosB,CAAqB,CAAA,CAIxBpsB,EAAMoM,CAAK,CAAA,EAAKpM,CAAAA,CAAMsH,CAAY,CAC3C,CAEA,OAAI,KAAA,CAAM,OAAA,CAAQtH,CAAK,CAAA,CACHA,CAAAA,CAGf,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CACV,GAAA,CACE4G,CAAAA,EACEA,CAAAA,CAAKyH,CAAoB,CAAA,GAAmCjC,CAAK,CAAA,EACjExF,CAAAA,CAAKyH,CAAoB,CAAA,GAAmC/G,CAAY,CAC7E,CAAA,CACC,KAAK,IAAI,CAAA,CAGPtH,CACT,CAAA,CAAGmmB,CAAG,CACV,CAAA,CAtCS,EAuCX,CC3be,SAARkG,EAAAA,CAAoC,CACzC,OAAA,CAAAxU,IACA,YAAA,CAAAvQ,CAAAA,CACA,YAAA,CAAAoc,CAAAA,CACA,SAAA/T,CAAAA,CACA,WAAA,CAAAmI,CAAAA,CACA,SAAA,CAAAC,EACA,MAAA,CAAAvR,CAAAA,CACA,MAAA4F,CAAAA,CACA,QAAA,CAAA4L,CACF,CAAA,CAAiD,CAC/C,GAAM,CAACsU,EAAUC,GAAW,CAAA,CAAIrwB,QAAAA,CAAS,KAAK,EACxC,CAAE,IAAA,CAAA+b,CAAAA,CAAM,KAAA,CAAAC,IAAO,OAAA,CAAAzN,CAAAA,CAAS,YAAA,CAAAmH,CAAa,EAAIkG,CAAAA,CACzClK,CAAAA,CAA6BgE,CAAAA,EAAc,MAAA,EAAUqG,EACrD+R,GAAAA,CAAiBje,EAAAA,EAAY,CAC7B3E,CAAAA,CAAcC,KAAe,CAC7B8iB,CAAAA,CAAUvR,KAAAA,EAAM,CAChB,CAAE,aAAA,CAAAqR,CAAc,CAAA,CAAIC,GAAAA,GACpBE,CAAAA,CAAiBxR,KAAAA,EAAM,CACvByR,CAAAA,CAA2BpjB,KAAKC,MAAAA,CAAO0G,CAAAA,CAAoB,MAAM,CAAC,EAAEpH,CAAM,CAAA,CAE1E6H,CAAAA,CADmBS,EAAAA,CAAoBub,GAA0B,UAAA,EAAc,EAAE,CAAA,CACzC,KAE9CluB,SAAAA,CAAU,IAAM,CACVunB,CAAAA,CAAa,QAAU,EAAA,EAK3Btc,CAAAA,CAAY,CACV,IAAA,CAAM,kBACN,OAAA,CAAS,CACP,CAACgjB,CAAc,EAAG,CAChB,OAAA,CAAS,CAAE,GAAA,CAAK,OAAO1G,CAAAA,CAAa,GAAG,CAAA,CAAG,KAAA,CAAOA,EAAa,KAAM,CAAA,CACpE,UAAA,CAAY,EACd,CACF,CACF,CAAC,EACH,EAAG,CAACtc,CAAAA,CAAagjB,CAAAA,CAAgB1G,CAAAA,CAActX,CAAK,CAAC,CAAA,CAMrDjQ,SAAAA,CAAU,IAAM,CACd6b,CAAAA,CAASC,CAAAA,CAAM,CAAE,GAAGF,EAAUE,CAAI,CAAA,CAAG,GAAIgS,CAAAA,CAAcG,CAAc,CAAA,EAAG,OAAA,EAAW,EAAI,CAAC,EAC1F,CAAA,CAAG,CAAC1G,CAAAA,CAAczL,CAAAA,CAAMgS,EAAeG,CAAAA,CAAgBpS,CAAQ,CAAC,CAAA,CAEhE,SAAS4T,CAAAA,CAAgB9rB,CAAAA,CAA6B,CACpDA,CAAAA,CAAM,gBAAe,CACrBkqB,GAAAA,CAAe,CACb,IAAA,CAAM,mBACN,OAAA,CAAS,CACP,sBAAA,CAAwB,CAAA,CACxB,WAAYpc,CAAAA,CACZ,QAAA,CAAA+B,CAAAA,CACA,cAAA,CAAAya,EACA,IAAA,CAAMxY,CAAAA,EAAc,IAAA,EAAQ,QAC9B,CACF,CAAC,EACH,CAEA,SAASkI,EAAeha,CAAAA,CAA6B,CACnD,IAAMyL,CAAAA,CAAgC,CACpC,IAAA,CAAM,iBAAA,CACN,OAAA,CAAS,CACP,CAAC6e,CAAc,EAAG,CAChB,OAAA,CAAS,EAAC,CACV,UAAA,CAAY,EACd,CACF,CACF,CAAA,CAEAtqB,CAAAA,CAAM,cAAA,GACNsH,CAAAA,CAAYmE,CAAM,CAAA,CAClByM,CAAAA,CAASC,EAAM,CAAE,GAAGF,CAAAA,CAAUE,CAAI,EAAG,GAAA,CAAK,EAAA,CAAI,KAAA,CAAO,MAAU,CAAC,EAClE,CAEA,OACE7b,GAAAA,CAAC2D,EAAA,CACC,OAAA,CAAS8X,GAAAA,CACT,YAAA,CAAc6L,EACd,IAAA,CAAMzL,CAAAA,CACN,MAAA,CAAQ,CAAC,CACP,KAAA,CAAAjY,CACF,CAAA,GAMM,CACJ,IAAMiP,CAAAA,CAAQjP,CAAAA,CAAM,KAAA,EAAO,KAAA,CACvBwsB,EAAe,EAAA,CAEnB,OAAIvd,CAAAA,EAAS,OAAOA,GAAU,QAAA,EAAY,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,EAAKA,CAAAA,CAAMZ,CAAoB,CAAA,GAC3Fme,EACIvd,CAAAA,CAAMZ,CAAoB,CAAA,GAAuBjC,CAAK,GACvD6C,CAAAA,CAAMZ,CAAoB,CAAA,GAAuB/G,CAAY,GAC9D2H,CAAAA,CAAMZ,CAAoB,CAAA,CAAA,CAI5B1R,IAAAA,CAACsD,EAAA,CACC,QAAA,CAAA,CAAA7D,GAAAA,CAACge,CAAAA,CAAA,CAAU,OAAA,CAAS+P,CAAAA,CAAU,QAAA,CAAAjS,GAAAA,CAAM,EACnCzN,CAAAA,EAAS,OAAA,CAAUrO,GAAAA,CAACie,GAAAA,CAAA,CAAiB,QAAA,CAAA5P,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,KAC3ErO,GAAAA,CAAC8D,CAAAA,CAAA,CAAY,SAAA,CAAU,iDACrB,QAAA,CAAAvD,IAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAW,gJACT2vB,CAAAA,CAAW,yDAAA,CAA4D,EACzE,CAAA,CAAA,CAEA,UAAAlwB,GAAAA,CAAC+D,GAAAA,CAAA,CACC,SAAA,CAAU,4HACV,EAAA,CAAIgqB,CAAAA,CACJ,MAAA,CAAQ,IAAM,CACZoC,GAAAA,CAAY,KAAK,EACnB,CAAA,CACA,QAASX,CAAAA,CACT,OAAA,CAAS,IAAM,CACbW,IAAY,IAAI,EAClB,CAAA,CACA,SAAA,CAAY3S,GAAM,CACZA,CAAAA,CAAE,MAAQ,OAAA,EACZgS,CAAAA,CAAgBhS,CAAC,EAErB,CAAA,CACA,QAAA,CAAQ,IAAA,CACR,KAAK,MAAA,CACL,KAAA,CAAO4S,CAAAA,CACT,CAAA,CACCA,EACCpwB,GAAAA,CAAC8H,GAAAA,CAAA,CACC,QAAA,CAAAvH,KAACwH,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA/H,GAAAA,CAACgI,IAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAAhI,IAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,8FAAA,CACV,QAASka,CAAAA,CACT,IAAA,CAAK,MAAA,CACL,OAAA,CAAQ,QAER,QAAA,CAAA1d,GAAAA,CAAC8e,GAAAA,CAAA,CAAU,UAAU,eAAA,CAAgB,CAAA,CACvC,CAAA,CACF,CAAA,CACA9e,IAACkI,GAAAA,CAAA,CACC,QAAA,CAAAlI,GAAAA,CAAC,KAAE,QAAA,CAAA,OAAA,CAAK,CAAA,CACV,CAAA,CAAA,CACF,CAAA,CACF,EACE,IAAA,CACJA,GAAAA,CAAC8H,GAAAA,CAAA,CACC,SAAAvH,IAAAA,CAACwH,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA/H,IAACgI,GAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,SAAAhI,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,wGACV,OAAA,CAASgsB,CAAAA,CACT,IAAA,CAAK,MAAA,CACL,QAAQ,OAAA,CAER,QAAA,CAAAxvB,GAAAA,CAACqwB,cAAAA,CAAA,CAAe,SAAA,CAAU,eAAA,CAAgB,CAAA,CAC5C,CAAA,CACF,EACArwB,GAAAA,CAACkI,GAAAA,CAAA,CACC,QAAA,CAAAlI,IAAC,GAAA,CAAA,CAAE,QAAA,CAAA,MAAA,CAAI,CAAA,CACT,CAAA,CAAA,CACF,EACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CACAA,GAAAA,CAACgE,IAAA,EAAY,CAAA,CAAA,CACf,CAEJ,CAAA,CACF,CAEJ,CAMA,SAAS0O,EAAAA,CAAoB+B,CAAAA,CAA0C,CACrE,OAAOA,CAAAA,CAAiB,IAAA,CAAMrB,CAAAA,EAASA,EAAK,SAAS,CAAA,EAAKqB,CAAAA,CAAiB,CAAC,CAC9E,CC/Le,SAAR6b,EAAAA,CAA8BC,CAAAA,CAA+D,CAClG,GAAM,CAAE,WAAA,CAAA7U,CAAY,EAAI6U,CAAAA,CAClB,CAAE,YAAA,CAAA/a,CAAa,EAAIkG,CAAAA,CAEzB,GAAIlG,CAAAA,EAAc,IAAA,GAAS,SACzB,OAAOxV,GAAAA,CAACiwB,EAAAA,CAAA,CAAoB,GAAGM,CAAAA,CAAiB,CAAA,CAGlD,GAAI/a,CAAAA,EAAc,OAAS,UAAA,CAAY,CACrC,IAAM7V,CAAAA,CAAQ,CAAE,sBAAA,CAAwB+b,CAAAA,CAAY,YAAA,EAAc,MAAA,CAAQ,GAAG6U,CAAgB,CAAA,CAE7F,OAAOvwB,GAAAA,CAAC0tB,GAAA,CAAsB,GAAG/tB,CAAAA,CAAO,CAC1C,CAEA,OACEY,IAAAA,CAACU,CAAAA,CAAA,CAAM,QAAQ,aAAA,CACb,QAAA,CAAA,CAAAjB,GAAAA,CAACwwB,aAAAA,CAAA,CAAc,SAAA,CAAU,SAAA,CAAU,CAAA,CACnCxwB,GAAAA,CAACuB,GAAA,CAAW,QAAA,CAAA,OAAA,CAAK,CAAA,CACjBvB,GAAAA,CAACwB,EAAA,CACE,QAAA,CAAA,sHAAA,CACH,CAAA,CAAA,CACF,CAEJ,CCfO,SAAS4D,EAAAA,CAAO,CAAE,OAAA,CAAAqW,IAAS,WAAA,CAAAC,CAAAA,CAAa,QAAA,CAAAE,CAAS,EAA2C,CACjG,GAAM,CAAE,IAAA,CAAAC,EAAM,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,CAAAA,CAAY,QAAA1N,GAAQ,CAAA,CAAIqN,CAAAA,CAE7C,SAASuB,EAAYpK,CAAAA,CAAesK,CAAAA,CAAiD,CAEnF,IAAMsT,EADqB/U,CAAAA,CAAY,QAAA,GAAa,KAAA,EAAS,CAAC,MAAM,MAAA,CAAO7I,CAAK,CAAC,CAAA,CACxC,OAAOA,CAAK,CAAA,CAAIA,CAAAA,CAEzD+I,CAAAA,CAASC,EAAM,CACb,GAAGsB,CAAAA,CACH,KAAA,CAAOsT,CACT,CAAC,EACH,CAEA,SAASvR,EAAeC,CAAAA,CAAkBtM,CAAAA,CAAyC,CACjF+I,CAAAA,CAASC,EAAM,CACb,GAAGhJ,CAAAA,CACH,QAAA,CAAUsM,CACZ,CAAC,EACH,CAEA,OACEnf,IAAC2D,CAAAA,CAAA,CACC,OAAA,CAAS8X,GAAAA,CACT,KAAMI,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,MAAAjY,CAAM,CAAA,GACfrD,IAAAA,CAACsD,CAAAA,CAAA,CACC,QAAA,CAAA,CAAA7D,GAAAA,CAACge,CAAAA,CAAA,CAAW,SAAAlC,CAAAA,CAAM,CAAA,CACjBzN,GAAAA,EAAS,OAAA,CAAUrO,IAACie,GAAAA,CAAA,CAAiB,QAAA,CAAA5P,GAAAA,CAAQ,QAAQ,CAAA,CAAqB,IAAA,CAC3E9N,IAAAA,CAAC6E,GAAAA,CAAA,CACC,YAAA,CAAcxB,CAAAA,CAAM,OAAO,KAAA,CAAQ,MAAA,CAAOA,EAAM,KAAA,CAAM,KAAK,CAAA,CAAI,MAAA,CAC/D,SAAUmY,CAAAA,GAAe,KAAA,EAASnY,CAAAA,CAAM,KAAA,EAAO,SAC/C,aAAA,CAAgBiP,CAAAA,EAAU,CACxBoK,CAAAA,CAAYpK,EAAOjP,CAAAA,CAAM,KAAK,EAChC,CAAA,CAEA,UAAA5D,GAAAA,CAAC8D,CAAAA,CAAA,CACC,QAAA,CAAA9D,IAACsF,CAAAA,CAAA,CACC,QAAA,CAAAtF,GAAAA,CAACuF,IAAA,CAAY,WAAA,CAAa8I,GAAAA,EAAS,WAAA,CAAa,EAClD,CAAA,CACF,CAAA,CACArO,GAAAA,CAACwF,GAAAA,CAAA,CACE,QAAA,CAAA6I,GAAAA,EAAS,IAAA,EAAM,GAAA,CAAKgF,GACf,YAAA,GAAgBA,CAAAA,CAEhB9S,IAAAA,CAACmwB,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA1wB,GAAAA,CAAC2wB,GAAAA,CAAA,CAAa,SAAAtd,CAAAA,CAAO,UAAA,CAAW,CAAA,CAC/BA,CAAAA,CAAO,MAAM,GAAA,CAAK7I,CAAAA,EAEfxK,GAAAA,CAACyF,CAAAA,CAAA,CAA4B,KAAA,CAAO+E,CAAAA,CAAK,KAAA,CACtC,QAAA,CAAAA,EAAK,KAAA,CAAA,CADSA,CAAAA,CAAK,KAEtB,CAEH,IARe6I,CAAAA,CAAO,UASzB,CAAA,CAKFrT,GAAAA,CAACyF,EAAA,CAA8B,KAAA,CAAO4N,CAAAA,CAAO,KAAA,CAC1C,SAAAA,CAAAA,CAAO,KAAA,CAAA,CADOA,CAAAA,CAAO,KAExB,CAEH,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACArT,GAAAA,CAACof,IAAA,CACC,OAAA,CAASxb,CAAAA,CAAM,KAAA,EAAO,UAAY,KAAA,CAClC,QAAA,CAAWub,CAAAA,EAAY,CACrBD,EAAeC,CAAAA,CAASvb,CAAAA,CAAM,KAAK,EACrC,EACA,KAAA,CAAOA,CAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,EACA5D,GAAAA,CAACgE,GAAAA,CAAA,EAAY,CAAA,CAAA,CACf,EAEJ,CAEJ,CCnFe,SAAR4sB,EAAAA,CAAyC,CAAE,SAAA,CAAArb,CAAAA,CAAW,KAAA,CAAAuG,CAAM,EAAuB,CACxF,OACEvb,IAAAA,CAACU,CAAAA,CAAA,CAAM,OAAA,CAAQ,aAAA,CACb,QAAA,CAAA,CAAAjB,GAAAA,CAACwwB,cAAA,CAAc,SAAA,CAAU,SAAA,CAAU,CAAA,CACnCxwB,IAACuB,EAAAA,CAAA,CAAW,QAAA,CAAA,OAAA,CAAK,CAAA,CACjBvB,IAACwB,CAAAA,CAAA,CACE,QAAA,CAAA,CAAA,sBAAA,EAAyB+T,CAAS,cAAcuG,CAAK,CAAA,mDAAA,CAAA,CACxD,CAAA,CAAA,CACF,CAEJ,CCwBA,SAAS+U,EAAAA,CACP,CAAE,YAAA,CAAAC,EAAc,YAAA,CAAA5lB,CAAAA,CAAc,QAAA,CAAAqI,CAAAA,CAAU,WAAAnD,CAAAA,CAAY,gBAAA,CAAAL,CAAAA,CAAkB,QAAA,CAAAghB,EAAU,MAAA,CAAA3mB,CAAAA,CAAQ,UAAA,CAAA4mB,CAAAA,CAAY,SAAAC,CAAS,CAAA,CAC7G5vB,CAAAA,CACa,CACb,IAAM6O,CAAAA,CAAerF,IAAAA,CAAKC,MAAAA,CAAOsF,CAAAA,CAAY,MAAM,CAAC,CAAA,CAAEhG,CAAM,CAAA,CACtD3I,EAAayO,CAAAA,EAAc,UAAA,EAAc,EAAC,CAC1CghB,EAAmB1jB,OAAAA,CAAQ,IACxB2jB,GAAAA,CAAE,MAAA,CACP1vB,EAAW,MAAA,CAAO,CAACoP,CAAAA,CAAK6K,CAAAA,GAClB,OAAOA,CAAAA,CAAY,UAAA,CAAe,GAAA,CAAoB7K,CAAAA,CAGnD,CACL,GAAGA,CAAAA,CACH,CAAC6K,CAAAA,CAAY,IAAI,EAAGyV,GAAAA,CAAE,MAAA,CAAO,CAE3B,MAAOzV,CAAAA,CAAY,UAAA,CAAWyV,GAAC,CAAA,CAAE,GAC/BA,GAAAA,CAAE,GAAA,EAAI,CAAE,MAAA,CAAO,IAAM,KAAA,CAAO,CAC1B,OAAA,CAASzV,CAAAA,CAAY,MAAQ,CAAA,EAAGA,CAAAA,CAAY,KAAK,CAAA,YAAA,CAAA,CAAiB,gBACpE,CAAC,CACH,CACF,CAAC,CACH,CAAA,CACC,EAAE,CACP,EACC,CAACja,CAAU,CAAC,CAAA,CAGTU,EAAOC,OAAAA,CAAoB,CAC/B,QAAA,CAAUC,WAAAA,CAAY6uB,CAAgB,CAAA,CACtC,MAAA,CAAQH,CAAAA,CACR,IAAA,CAAM,SACN,YAAA,CAAc,KAChB,CAAC,CAAA,CAEK,CAAE,OAAA,CAAAtV,CAAAA,CAAS,SAAA,CAAAE,CAAAA,CAAW,aAAAyV,CAAAA,CAAc,QAAA,CAAAxV,GAAAA,CAAU,KAAA,CAAAyV,IAAO,OAAA,CAAAC,CAAAA,CAAS,SAAA,CAAAC,CAAU,EAAIpvB,CAAAA,CAC5E,CAAE,MAAA,CAAAqvB,CAAO,EAAID,CAAAA,CACb,CAAE,0BAAA,CAAA1nB,CAA2B,EAAIxF,CAAAA,EAAU,CAE3CotB,EAAyB,CAC7B,QAAA,CAAU/nB,GACV,MAAA,CAAQD,EAAAA,CACR,KAAA,CAAO+R,EAAAA,CACP,OAAQuD,EAAAA,CACR,YAAA,CAAcuR,EAAAA,CACd,MAAA,CAAQlrB,GACR,MAAA,CAAUgE,GAAAA,CACV,IAAA,CAAMC,GAAAA,CACN,SAAUC,GACZ,CAAA,CA8BA,OA5BAooB,mBAAAA,CAAoBrwB,EAAK,KAAO,CAC9B,MAAA,EAAS,CAEFiwB,GAAQ,CAAE,IAAA,CAAK,IAAM,CACnBF,EAAa,IAAM,CACtBJ,CAAAA,CAAW,KAAK,EAChBC,CAAAA,CAAStV,CAAAA,EAAU,CAAGoV,CAAQ,EAChC,CAAC,CAAA,GACH,CAAC,EACH,CAAA,CACA,SAAA,EAAY,CACVC,CAAAA,CAAW,IAAI,EACjB,CAAA,CACA,cAAA,EAAiB,CACf,OAAOW,EAAAA,CAAehW,CAAAA,EAAU,CAAGoV,CAAQ,CAC7C,CACF,CAAA,CAAE,CAAA,CAEFhxB,SAAAA,CAAU,IAAM,CACd,IAAM6xB,CAAAA,CAA0BP,GAAAA,CAAOQ,GAAgB,CACrDb,CAAAA,CAAWW,EAAAA,CAAeE,CAAAA,CAAad,CAAQ,CAAC,EAClD,CAAC,CAAA,CAED,OAAO,IAAM,CACXa,CAAAA,CAAwB,WAAA,GAC1B,CACF,CAAA,CAAG,CAACb,CAAAA,CAAUC,EAAYK,GAAK,CAAC,CAAA,CAE5B,CAACnhB,GAAgBA,CAAAA,CAAa,UAAA,CAAW,MAAA,GAAW,CAAA,CAEpD3P,KAACU,CAAAA,CAAA,CAAM,OAAA,CAAQ,aAAA,CACb,UAAAjB,GAAAA,CAACwwB,aAAAA,CAAA,CAAc,SAAA,CAAU,gBAAgB,CAAA,CACzCxwB,GAAAA,CAACuB,EAAAA,CAAA,CAAW,iBAAK,CAAA,CACjBhB,IAAAA,CAACiB,CAAAA,CAAA,CAAiB,0DAC6BxB,GAAAA,CAAC,QAAA,CAAA,CAAQ,QAAA,CAAAoQ,CAAAA,CAAW,GACnE,CAAA,CAAA,CACF,CAAA,CAKFpQ,GAAAA,CAACyD,CAAAA,CAAA,CAAM,GAAGtB,CAAAA,CACR,QAAA,CAAAnC,GAAAA,CAAC,QAAK,SAAA,CAAU,gCAAA,CACb,QAAA,CAAAyB,CAAAA,CAAW,IAAKmC,CAAAA,EAAU,CACzB,GAAIA,CAAAA,CAAM,OAAS,KAAA,CACjB,OAAO,IAAA,CAGT,IAAMkuB,EACHjoB,CAAAA,CAA2B,YAAA,CAAc,CAACjG,CAAAA,CAAM,SAAS,CAAC,CAAA,GAAI,CAAC,CAAA,EAAG,WAEjD6tB,CAAAA,CAAuB7tB,CAAAA,CAAM,SAAgD,CAAA,CAEjG,OAAOkuB,CAAAA,CACLC,aAAAA,CACED,CAAAA,CACA,CACE,IAAKluB,CAAAA,CAAM,IAAA,CACX,OAAA,CAAA6X,CAAAA,CACA,aAAAvQ,CAAAA,CACA,YAAA,CAAc6lB,CAAAA,CAAWA,CAAAA,CAASntB,EAAM,IAAI,CAAA,CAAI,CAAE,KAAA,CAAO,GAAI,QAAA,CAAU,KAAA,CAAO,KAAA,CAAOsH,CAAa,EAClG,QAAA,CAAAqI,CAAAA,CACA,UAAA,CAAAnD,CAAAA,CACA,iBAAAL,CAAAA,CACA,WAAA,CAAanM,CAAAA,CACb,SAAA,CAAA+X,EACA,MAAA,CAAAvR,CAAAA,CACA,KAAA,CAAO0mB,CAAAA,CACP,SAAAlV,GACF,CACF,CAAA,CAEA5b,GAAAA,CAAC4wB,GAAA,CAAwB,SAAA,CAAWhtB,CAAAA,CAAM,SAAA,CAA4B,MAAOA,CAAAA,CAAM,KAAA,CAAA,CAAzBA,CAAAA,CAAM,IAA0B,CAE9F,CAAC,CAAA,CACH,CAAA,CACF,CAEJ,CAEA,IAAOouB,EAAAA,CAAQC,IAAAA,CAAKC,UAAAA,CAAWrB,EAAW,CAAC,CAAA,CAE3C,SAASc,EAAAA,CACPE,EACAM,CAAAA,CACS,CACT,GAAI,CAACA,EAEH,OAAO,MAAA,CAAO,IAAA,CAAKN,CAAW,EAAE,IAAA,CAC7BjuB,CAAAA,EAAUiuB,CAAAA,CAAYjuB,CAAK,GAAG,KAAA,GAAU,EAAA,EAAMiuB,CAAAA,CAAYjuB,CAAK,GAAG,KAAA,GAAU,MAC/E,CAAA,CAQF,IAAMwuB,EAA4Bvf,CAAAA,EAC5B,OAAOA,CAAAA,EAAU,QAAA,EAAYA,IAAU,IAAA,CACrC,MAAA,GAAUA,CAAAA,CAELA,CAAAA,CAAM,KAGR,KAAA,GAASA,CAAAA,CAASA,CAAAA,CAA0B,GAAA,CAAM,GAGpDA,CAAAA,EAAS,EAAA,CAGZwf,CAAAA,CAAqB,CAACC,EAAWC,CAAAA,GAAuBD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAK,EACrE/e,CAAAA,CAAe,MAAA,CAAO,IAAA,CAAK2e,CAAgB,EAC9C,IAAA,CAAK,CAACG,CAAAA,CAAGC,CAAAA,GAAMF,EAAmBC,CAAAA,CAAGC,CAAC,CAAC,CAAA,CACvC,OAAQ3uB,CAAAA,EAAUA,CAAAA,GAAU,YAAY,CAAA,CACxC,OACC,CAACiN,CAAAA,CAAKjN,CAAAA,IAAW,CACf,GAAGiN,CAAAA,CACH,CAACjN,CAAK,EAAG,CACP,KAAA,CAAOwuB,CAAAA,CAAyBD,EAAiBvuB,CAAK,CAAA,CAAE,KAAK,CAAA,CAC7D,QAAA,CAAUuuB,CAAAA,CAAiBvuB,CAAK,EAAE,QAAA,CAClC,aAAA,CAAeuuB,CAAAA,CAAiBvuB,CAAK,EAAE,aACzC,CACF,CAAA,CAAA,CACA,EACF,CAAA,CACI4uB,CAAAA,CAAU,MAAA,CAAO,IAAA,CAAKX,CAAW,CAAA,CACpC,IAAA,CAAK,CAACS,CAAAA,CAAGC,IAAMF,CAAAA,CAAmBC,CAAAA,CAAGC,CAAC,CAAC,EACvC,MAAA,CAAQ3uB,CAAAA,EAAUA,CAAAA,GAAU,YAAY,EACxC,MAAA,CACC,CAACiN,CAAAA,CAAKjN,CAAAA,IAAW,CACf,GAAGiN,CAAAA,CACH,CAACjN,CAAK,EAAG,CACP,KAAA,CAAOwuB,CAAAA,CAAyBP,CAAAA,CAAYjuB,CAAK,CAAA,EAAG,KAAK,CAAA,CACzD,QAAA,CAAUiuB,EAAYjuB,CAAK,CAAA,EAAG,QAAA,EAAY,KAAA,CAC1C,cACU,MAAA,CAAO,IAAA,CAAKiuB,CAAAA,CAAYjuB,CAAK,GAAG,aAAA,EAAe,OAAA,EAAW,EAAE,EAAE,MAAA,EAC9DiuB,CAAAA,CAAYjuB,CAAK,CAAA,EAAG,eAAe,UAAA,EAAY,MAAA,CACnDiuB,CAAAA,CAAYjuB,CAAK,GAAG,aAAA,CACpB,MACR,CACF,CAAA,CAAA,CACA,EACF,CAAA,CAEF,OAAO,CAAC6uB,OAAOjf,CAAAA,CAAcgf,CAAO,CACtC,CClNe,SAARE,EAAAA,CAA2B,CAAE,MAAA,CAAAvjB,EAAQ,KAAA,CAAAuK,CAAAA,CAAO,SAAA,CAAAC,CAAU,EAAuB,CAClF,GAAM,CAAE,UAAA,CAAAvJ,CAAW,CAAA,CAAIjB,CAAAA,CAAO,OAAA,CACxB9N,CAAAA,CAAM8F,OAAqB,IAAI,CAAA,CAC/B,CAAE,QAAA,CAAA/C,EAAU,gBAAA,CAAA0I,CAAiB,CAAA,CAAIzI,CAAAA,GACjC,CAAE,MAAA,CAAA+F,CAAAA,CAAQ,MAAA,CAAAW,CAAO,CAAA,CAAIF,IAAAA,CAAKC,MAAAA,CAAOgC,CAAAA,EAAoB,GAAI,WAAW,CAAC,CAAA,CAAE1I,CAAQ,EAC/E8G,CAAAA,CAAeH,CAAAA,EAAQ,IAAA,CAAMI,CAAAA,EAAMA,EAAE,SAAS,CAAA,EAAG,IAAA,EAAQ,SAAA,CAEzD4E,EADelF,IAAAA,CAAKC,MAAAA,CAAOsF,EAAY,MAAM,CAAC,EAAEhG,CAAM,CAAA,EACrB,MAAA,EAAUgG,CAAAA,CAC3C,CAAE,KAAA,CAAAJ,CAAM,CAAA,CAAI8d,GAAAA,GACZ6E,CAAAA,CAAWhjB,EAAAA,EAAY,CACvB,CAACoI,EAAaE,CAAAA,CAAaC,CAAAA,CAAY0a,GAAY,CAAA,CAAI9a,IAAkB,CACzE,CAAE,UAAA,CAAAkZ,CAAW,EAAIrW,EAAAA,EAAsB,CAE7C5a,SAAAA,CAAU,IAAM,CACV6yB,GAAAA,CAAa,KAAA,EACfvxB,CAAAA,CAAI,OAAA,EAAS,YAEjB,CAAA,CAAG,CAACuxB,GAAAA,CAAa,KAAK,CAAC,CAAA,CAEvB,SAASC,CAAAA,EAA6B,CACpC,OAAIxxB,CAAAA,CAAI,OAAA,EAAS,cAAA,IACfsxB,CAAAA,CAAS,CACP,IAAA,CAAM,aAAA,CACN,IAAK,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,UAAW,GAAA,CAAK,gBAAA,CAAkB,OAAA,CAAS,EAAG,CAAC,EAClE,CAAA,CACA,kBAAA,CAAoB,IAAM,CACxBA,CAAAA,CAAS,CAAE,IAAA,CAAM,UAAW,GAAA,CAAKxjB,CAAAA,CAAO,GAAA,CAAK,OAAA,CAAS,EAAG,CAAC,EAC5D,CACF,CACF,CACF,CAAC,CAAA,CAEM,KAAA,EAGF,IACT,CAEA,IAAMP,CAAAA,CAAcoL,WAAAA,CACjB5H,GAAuB,CACtBugB,CAAAA,CAAS,CAAE,IAAA,CAAM,UAAW,GAAA,CAAAvgB,CAAAA,CAAK,OAAA,CAAS,EAAG,CAAC,EAChD,CAAA,CACA,CAACugB,CAAQ,CACX,CAAA,CAEMG,CAAAA,CAAa9Y,WAAAA,CAAY,IAAM,CACnC3Y,CAAAA,CAAI,OAAA,EAAS,MAAA,GACf,CAAA,CAAG,CAACA,CAAG,CAAC,EAEF0xB,CAAAA,CAAa/Y,WAAAA,CAChBwY,CAAAA,EAAwB,CACvB,IAAMpgB,CAAAA,CAAMmF,EAAAA,EAAO,CACbK,CAAAA,CAAWf,GAAwB9G,CAAAA,CAAkB3F,CAAAA,CAAQooB,CAAAA,CAASpgB,CAAG,EACzEsc,CAAAA,CAAc5e,EAAAA,CAAeC,EAAkBC,CAAAA,CAAO5F,CAAM,EAC5D4oB,CAAAA,CAAenb,GAAAA;AAAA,QAAA,EACjB6W,EAAY,KAAK;AAAA,MAAA,CAAA,CAGrBzW,CAAAA,CAAYJ,GAAAA;AAAA,QAAA,EACRD,CAAQ;AAAA,MAAA,CACX,CAAA,CACDM,EAAW,CACT,cAAA,CAAgB,CAAC8a,CAAY,CAAA,CAC7B,YAAa,IAAM,CACjBpkB,EAAYO,CAAAA,CAAO,GAAG,EACtB0J,KAAAA,CAAM,OAAA,CAAQ,+BAA+B,EAC/C,CACF,CAAC,CAAA,CACDd,CAAAA,CAAY,IAAI,EAClB,CAAA,CACA,CAAC5I,EAAO,GAAA,CAAKY,CAAAA,CAAkBnB,EAAamJ,CAAAA,CAAa3N,CAAAA,CAAQ6N,EAAajI,CAAAA,CAAOkI,CAAU,CACjG,CAAA,CAEA,OACElY,IAACwZ,EAAAA,CAAA,CACC,QACEjZ,IAAAA,CAACiD,GAAAA,CAAA,CACC,SAAA,CAAU,SAAA,CACV,OAAA,CAAS,IAAM,CACbsvB,CAAAA,GACF,CAAA,CACA,OAAA,CAAQ,UAEP,QAAA,CAAA,CAAAF,GAAAA,CAAa,QAAU5yB,GAAAA,CAACiE,OAAAA,CAAA,CAAQ,SAAA,CAAU,uCAAA,CAAwC,EAAK,IAAA,CAAK,MAAA,CAAA,CAE/F,EAEF,WAAA,CAAa4uB,CAAAA,CACb,KAAA,CAAOnZ,CAAAA,CACP,SAAA,CAAWC,CAAAA,CACX,QAAS,IAAM,CACb/K,EAAYO,CAAAA,CAAO,GAAG,EACxB,CAAA,CACA,KAAA,CAAO,CAAA,IAAA,EAAOiB,CAAU,CAAA,CAAA,CAExB,QAAA,CAAApQ,IAACgyB,EAAAA,CAAA,CACC,aAAchiB,CAAAA,CACd,YAAA,CAAc9E,EACd,UAAA,CAAYkF,CAAAA,CACZ,gBAAA,CAAkBL,CAAAA,CAClB,QAAA,CAAUgjB,CAAAA,CACV,IAAK1xB,CAAAA,CACL,MAAA,CAAQ+I,EACR,UAAA,CAAY4mB,CAAAA,CACd,EACF,CAEJ,CC7HO,SAASiC,EAAAA,CAAe,CAAE,gBAAA,CAAAljB,CAAAA,CAAkB,OAAA3F,CAAAA,CAAQ,KAAA,CAAA4F,EAAO,SAAA,CAAAkjB,CAAAA,CAAW,OAAAC,CAAO,CAAA,CAOlF,CACA,GAAM,CAAChgB,CAAAA,CAAQigB,CAAS,CAAA,CAAItzB,QAAAA,CAAkB,CAC5C,KAAA,CAAO,CAAA,CACP,QAAS,EACX,CAAC,CAAA,CACK4uB,CAAAA,CAAc5e,EAAAA,CAAeC,CAAAA,CAAkBC,CAAAA,CAAO5F,CAAM,EAC5D,CACJ,OAAA,CAASzH,EACT,IAAA,CAAAF,CAAAA,CACA,UAAW4wB,CAAAA,CACX,KAAA,CAAA3wB,CACF,CAAA,CAAI4wB,QAAAA,CACFzb,GAAAA;AAAA,MAAA,EACI6W,EAAY,KAAK;AAAA,IAAA,CAAA,CAErB,CAAE,SAAA,CAAAwE,CAAU,CACd,CAAA,CAGMxmB,CAAAA,CAAclB,GAAe9I,CAAK,CAAA,CAElC,CAAE,iBAAA,CAAA4V,CAAAA,CAAmB,kBAAAC,CAAkB,CAAA,CAAA,CAAK,IAAM,CACtD,GAAI7L,GAAa,UAAA,GAAe,GAAA,CAAK,CACnC,IAAMC,CAAAA,CAAehB,GAAkCe,CAAAA,CAAY,QAAQ,EAE3E,GAAIC,CAAAA,EAAgB,OAAOA,CAAAA,CAAa,IAAA,EAAS,SAAU,CACzD,GAAIA,EAAa,IAAA,GAAS,gBAAA,CACxB,OAAO,CACL,iBAAA,CAAmB,KACnB,iBAAA,CAAmB,KACrB,EAGF,GAAIA,CAAAA,CAAa,OAAS,gBAAA,CACxB,OAAO,CACL,iBAAA,CAAmB,KAAA,CACnB,kBAAmB,IACrB,CAEJ,CAEA,OAAO,CACL,kBAAmB,IAAA,CACnB,iBAAA,CAAmB,KACrB,CACF,CAEA,OAAO,CACL,iBAAA,CAAmB,MACnB,iBAAA,CAAmB,KACrB,CACF,CAAA,GAAG,CAEG4mB,EAAgBvZ,WAAAA,CACpB,IAAMwZ,GAAW,CAAE,IAAA,CAAA/wB,EAAM,gBAAA,CAAAsN,CAAAA,CAAkB,OAAAojB,CAAAA,CAAQ,MAAA,CAAA/oB,EAAQ,KAAA,CAAA4F,CAAM,CAAC,CAAA,CAClE,CAACvN,EAAMsN,CAAAA,CAAkBojB,CAAAA,CAAQ/oB,EAAQ4F,CAAK,CAChD,EAEA,SAASyjB,CAAAA,CAAUC,EAA8B,CAC/CL,CAAAA,CAAcK,CAAI,CAAA,CACf,IAAA,CAAK,CAAC,CAAE,IAAA,CAAM5wB,CAAI,CAAA,GAAM,CACvB,IAAM6wB,CAAAA,CAAyBH,EAAAA,CAAW,CAAE,IAAA,CAAM1wB,CAAAA,CAAK,iBAAAiN,CAAAA,CAAkB,MAAA,CAAAojB,EAAQ,MAAA,CAAA/oB,CAAAA,CAAQ,MAAA4F,CAAM,CAAC,EAEhGojB,CAAAA,CAAWQ,CAAAA,GACF,CACL,KAAA,CAAOD,CAAAA,CAAuB,MAC9B,OAAA,CAAStkB,MAAAA,CAAO2f,KAAK,KAAK,CAAA,CAAG,CAAC,GAAG4E,CAAAA,CAAS,QAAS,GAAGD,CAAAA,CAAuB,OAAO,CAAC,CACvF,EACD,EACH,CAAC,EACA,KAAA,CAAOjxB,CAAAA,EAAmB,CAEzB,OAAA,CAAQ,KAAA,CAAM,4BAA6BA,CAAK,EAClD,CAAC,EACL,CAEA,OAAA3C,SAAAA,CAAU,IAAM,CACdqzB,CAAAA,CAAUG,CAAa,EACzB,CAAA,CAAG,CAACA,CAAa,CAAC,CAAA,CAEX,CAAE,SAAA,CAAA5wB,CAAAA,CAAW,UAAA8wB,CAAAA,CAAW,KAAA,CAAOtgB,EAAO,KAAA,CAAO,IAAA,CAAMA,EAAO,OAAA,CAAS,iBAAA,CAAAmF,EAAmB,iBAAA,CAAAC,CAAkB,CACjH,CAEA,SAASib,GACPE,CAAAA,CAGyD,CACzD,IAAM3jB,CAAAA,CAAmB2jB,CAAAA,CAAK,iBAE9B,OAAKA,CAAAA,CAAK,OAAO3jB,CAAgB,CAAA,CAI1B2jB,EAAK,MAAA,CACR5gB,EAAAA,CAA4B4gB,EAAK,gBAAA,CAAkBA,CAAAA,CAAK,MAAOA,CAAAA,CAAK,IAAA,CAAMA,EAAK,MAAM,CAAA,CACrFhiB,GAAegiB,CAAAA,CAAK,gBAAA,CAAkBA,EAAK,KAAA,CAAOA,CAAAA,CAAK,KAAMA,CAAAA,CAAK,MAAM,EALnE,CAAE,KAAA,CAAO,EAAG,OAAA,CAAS,EAAG,CAMnC,CCzHO,SAASG,EAAAA,EAA4B,CAC1C,OACEtzB,IAAAA,CAACU,CAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,QAAQ,aAAA,CACjC,QAAA,CAAA,CAAAjB,IAAC8zB,WAAAA,CAAA,CAAY,UAAU,eAAA,CAAgB,CAAA,CACvC9zB,IAACuB,EAAAA,CAAA,CAAW,0BAAc,CAAA,CAC1BhB,IAAAA,CAACiB,EAAA,CAAiB,QAAA,CAAA,CAAA,6GAAA,CAC4F,IAC5GxB,GAAAA,CAAC,GAAA,CAAA,CACC,UAAU,+BAAA,CACV,IAAA,CAAK,gDACL,MAAA,CAAO,QAAA,CACP,IAAI,qBAAA,CACL,QAAA,CAAA,oBAAA,CAED,EAAI,GAAA,CAAA,CAEN,CAAA,CAAA,CACF,CAEJ,CClBe,SAAR+zB,EAAAA,CAA4B,CAAE,WAAAjB,CAAAA,CAAY,SAAA,CAAAnwB,CAAU,CAAA,CAAmD,CAC5G,GAAM,CAAE,OAAA,CAAAqxB,CAAQ,CAAA,CAAIrZ,EAAAA,GACpB,OACEpa,IAAAA,CAACiD,IAAA,CACC,SAAA,CAAU,UACV,QAAA,CAAU,CAACwwB,EACX,OAAA,CAAS,IAAM,CACblB,CAAAA,GACF,EACA,OAAA,CAAQ,SAAA,CAEP,UAAAnwB,CAAAA,CAAY3C,GAAAA,CAACiE,QAAA,CAAQ,SAAA,CAAU,wCAAwC,CAAA,CAAK,IAAA,CAAK,QAEpF,CAEJ,CCjBe,SAARpD,EAAAA,EAAwC,CAG7C,OACEb,GAAAA,CAAAE,SAAA,CAEG,QAAA,CAAA,KAAA,CAAM,KAAK,CAAE,MAAA,CAAQ,EAAuB,CAAA,CAAG,CAAC+zB,EAAGC,CAAAA,GAAMA,CAAAA,EAAG,EAAE,GAAA,CAAKA,CAAAA,EAClE3zB,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2BACb,QAAA,CAAA,CAAAP,GAAAA,CAACka,IAAA,CAAS,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC5C3Z,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACb,QAAA,CAAA,CAAAP,GAAAA,CAACka,IAAA,CAAS,SAAA,CAAU,wBAAwB,CAAA,CAC5Cla,GAAAA,CAACka,IAAA,CAAS,SAAA,CAAU,2BAA2B,CAAA,CAAA,CACjD,CAAA,CAAA,CAAA,CAL6Cga,CAM/C,CACD,CAAA,CACH,CAEJ,CCYe,SAARC,EAAAA,CAA4B,CAAE,OAAAhlB,CAAAA,CAAQ,KAAA,CAAAuK,EAAO,SAAA,CAAAC,CAAU,EAAuB,CACnF,GAAM,CAAE,QAAA,CAAApG,CAAAA,CAAU,iBAAAxD,CAAiB,CAAA,CAAIZ,EAAO,OAAA,CACxC9N,CAAAA,CAAM8F,OAAqB,IAAI,CAAA,CAC/B,CAAE,QAAA,CAAA/C,GAAAA,CAAU,iBAAA0I,CAAiB,CAAA,CAAIzI,GAAU,CAC3C,CAAE,OAAA+F,CAAAA,CAAQ,MAAA,CAAAW,CAAO,CAAA,CAAIiP,WAAAA,CACzB,IAAMnP,IAAAA,CAAKC,MAAAA,CAAOgC,GAAoB,EAAA,CAAI,WAAW,CAAC,CAAA,CAAE1I,GAAQ,EAChE,CAAC0I,CAAAA,CAAkB1I,GAAQ,CAC7B,CAAA,GACM8G,CAAAA,CAAeH,CAAAA,EAAQ,KAAMI,CAAAA,EAAMA,CAAAA,CAAE,SAAS,CAAA,EAAG,IAAA,EAAQ,UACzD+E,CAAAA,CAAerF,IAAAA,CAAKC,OAAOiF,CAAAA,CAAkB,QAAQ,CAAC,CAAA,CAAE3F,CAAM,EAC9DgG,CAAAA,CAAaF,CAAAA,EAAc,MAAQH,CAAAA,CACnC,CAAE,MAAAC,CAAM,CAAA,CAAI8d,KAAc,CAC1B,CAACgD,EAAcsD,GAAe,CAAA,CAAIt0B,SAASkQ,CAAK,CAAA,CAChD2iB,EAAWhjB,EAAAA,EAAY,CACvB3E,IAAcC,GAAAA,EAAe,CAC7B,CAAC8M,CAAAA,CAAaE,CAAAA,CAAaC,EAAY0a,CAAY,CAAA,CAAI9a,IAAkB,CACzE,CAAE,WAAAkZ,CAAW,CAAA,CAAIrW,IAAsB,CAEvC0Z,CAAAA,CAAiBra,YACpBga,CAAAA,EAAqB,CACpBhD,EAAWgD,CAAO,EACpB,EACA,CAAChD,CAAU,CACb,CAAA,CAEAjxB,SAAAA,CAAU,IAAM,CACV6yB,CAAAA,CAAa,OACfvxB,CAAAA,CAAI,OAAA,EAAS,YAEjB,CAAA,CAAG,CAACuxB,CAAAA,CAAa,KAAK,CAAC,CAAA,CAEvB,IAAMC,EAAoB7Y,WAAAA,CAAY,IAChC3Y,EAAI,OAAA,EAAS,cAAA,IACfsxB,CAAAA,CAAS,CACP,KAAM,aAAA,CACN,GAAA,CAAK,iBACL,OAAA,CAAS,CACP,QAAS,CACP,WAAA,CAAa,kBACb,aAAA,CACE,qGAAA,CACF,kBAAmB,WAAA,CACnB,iBAAA,CAAmB,kBACnB,kBAAA,CAAoB,IAAM,CACxBA,CAAAA,CAAS,CAAE,KAAM,SAAA,CAAW,GAAA,CAAK,iBAAkB,OAAA,CAAS,EAAG,CAAC,EAClE,EACA,kBAAA,CAAoB,IAAM,CACxBA,CAAAA,CAAS,CAAE,KAAM,SAAA,CAAW,GAAA,CAAKxjB,EAAO,GAAA,CAAK,OAAA,CAAS,EAAG,CAAC,EAC5D,CACF,CACF,CACF,CAAC,CAAA,CAEM,OAGF,IAAA,CACN,CAACwjB,EAAUxjB,CAAAA,CAAO,GAAG,CAAC,CAAA,CAEnBP,CAAAA,CAAcoL,YACjB5H,CAAAA,EAAuB,CACtBugB,EAAS,CAAE,IAAA,CAAM,UAAW,GAAA,CAAAvgB,CAAAA,CAAK,QAAS,EAAG,CAAC,EAChD,CAAA,CACA,CAACugB,CAAQ,CACX,EAEMG,CAAAA,CAAa9Y,WAAAA,CAAY,IAAM,CACnC3Y,CAAAA,CAAI,SAAS,MAAA,GACf,EAAG,CAACA,CAAG,CAAC,CAAA,CAER,SAASizB,EAAkBtkB,CAAAA,CAAqB,CAC9C,GAAI3O,CAAAA,CAAI,OAAA,EAAS,gBAAe,CAAG,CACjCsxB,EAAS,CACP,IAAA,CAAM,cACN,GAAA,CAAK,gBAAA,CACL,QAAS,CACP,OAAA,CAAS,CACP,WAAA,CAAa,iBAAA,CACb,cAAe,+DAAA,CACf,iBAAA,CAAmB,YACnB,iBAAA,CAAmB,iBAAA,CACnB,mBAAoB,IAAM,CACxByB,IAAgBtD,CAAY,CAAA,CAC5B6B,EAAS,CAAE,IAAA,CAAM,UAAW,GAAA,CAAK,gBAAA,CAAkB,QAAS,EAAG,CAAC,EAClE,CAAA,CACA,mBAAoB,IAAM,CACxByB,IAAgBpkB,CAAK,CAAA,CACrBhF,IAAY,CAAE,IAAA,CAAM,WAAY,OAAA,CAAS,CAAE,UAAW8B,CAAAA,CAAkB,KAAA,CAAAkD,CAAM,CAAE,CAAC,EACnF,CACF,CACF,CACF,CAAC,CAAA,CAED,MACF,CAEAokB,GAAAA,CAAgBpkB,CAAK,CAAA,CACrBhF,GAAAA,CAAY,CAAE,IAAA,CAAM,UAAA,CAAY,QAAS,CAAE,SAAA,CAAW8B,EAAkB,KAAA,CAAAkD,CAAM,CAAE,CAAC,EACnF,CAEA,IAAM+iB,CAAAA,CAAa/Y,YACjB,CAACwY,CAAAA,CAAqB+B,KAAkC,CACtD,GAAI,CAACA,EAAAA,CAAc,OAEnB,IAAM3c,EAAAA,CAAWtE,EAAAA,CAAwBvD,EAAkBwD,CAAAA,CAAUud,CAAAA,CAAc1mB,EAAQmqB,EAAAA,CAAc/B,CAAO,EAChHva,CAAAA,CAAYJ,GAAAA;AAAA,QAAA,EACRD,EAAQ;AAAA,MAAA,CACX,CAAA,CACDM,EAAW,CACT,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,GAAA,CAAK3E,CAAS,CAAE,CAAA,CACtC,YAAa,IAAM,CACjBsF,MAAM,OAAA,CAAQ,+BAA+B,EAC/C,CACF,CAAC,CAAA,CACDd,CAAAA,CAAY,IAAI,EAClB,EACA,CAAC5I,CAAAA,CAAO,IAAKoE,CAAAA,CAAUxD,CAAAA,CAAkB3F,EAAQ2N,CAAAA,CAAaE,CAAAA,CAAaC,CAAAA,CAAY4Y,CAAY,CACrG,CAAA,CAEM,CAAE,SAAA,CAAAnuB,CAAAA,CAAW,KAAMgP,CAAQ,CAAA,CAAIshB,GAAe,CAClD,gBAAA,CAAAljB,CAAAA,CACA,MAAA,CAAA3F,CAAAA,CACA,KAAA,CAAO0mB,EACP,SAAA,CAAW,CAAE,MAAO,CAAE,GAAA,CAAKvd,CAAS,CAAE,CAAA,CACtC,MAAA,CAAQ,IACV,CAAC,CAAA,CACK9Q,GAAOkP,CAAAA,CAEb,SAAS6iB,GAAoBtkB,CAAAA,CAAsBzN,EAAAA,CAAgC,CACjF,IAAMuP,EAAAA,CAAmB9B,CAAAA,EAAc,UAAA,CAAW,IAAA,CAAMkD,CAAAA,EAASA,EAAK,SAAS,CAAA,EAAKlD,GAAc,UAAA,CAAW,CAAC,EACxG+B,EAAAA,CAAuBD,EAAAA,CAAiB,IAAA,CACxCyiB,EAAAA,CAAiBziB,EAAAA,EAAkB,YAAA,EAAc,QAAU,MAAA,CAEjE,OAAIrP,CAAAA,EAAa,CAACF,EAAAA,CAAK,MAAA,CACd,GAGFgyB,EAAAA,EAAkBziB,EAAAA,EAAkB,YAAA,EAAc,KAAA,CACnDvP,EAAAA,CAAK,CAAC,EAAEwP,EAAoB,CAAA,EAAG,QAC/BD,EAAAA,CAAiB,YAAA,CAAa,KAChC,CAAA,CACCvP,EAAAA,CAAK,CAAC,CAAA,CAAEwP,EAAoB,CAAA,EAAG,KACtC,CAEA,IAAMyiB,GAAmB,CAAC/xB,CAAAA,EAAaF,GAAK,MAAA,EAAUyN,CAAAA,CAAeskB,EAAAA,CAAoBtkB,CAAAA,CAAczN,EAAI,CAAA,CAAI,GAE/G,OACEzC,GAAAA,CAACwZ,GAAA,CACC,OAAA,CACEjZ,KAAAL,QAAAA,CAAA,CACG,QAAA,CAAA,CAAA6K,CAAAA,EAAUA,CAAAA,CAAO,MAAA,CAAS,EACzBxK,IAAAA,CAAC6E,GAAAA,CAAA,CACC,aAAA,CAAgByN,CAAAA,EAAU,CACxByhB,CAAAA,CAAkBzhB,CAAK,EACzB,CAAA,CACA,KAAA,CAAOie,CAAAA,CAEP,UAAAvwB,IAAAA,CAAC+E,CAAAA,CAAA,CAAc,SAAA,CAAU,qBAAA,CAAsB,GAAG,SAAA,CAChD,QAAA,CAAA,CAAAtF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0BAAA,CAA2B,sBAAY,CAAA,CACvDA,GAAAA,CAACuF,IAAA,CACG,QAAA,CAAAsF,KAAKC,MAAAA,CAAOgmB,CAAAA,CAAc,MAAM,CAAC,CAAA,CAAE/lB,CAAM,EAAsC,KAAA,CACnF,CAAA,CAAA,CACF,EACA/K,GAAAA,CAACwF,GAAAA,CAAA,CACE,QAAA,CAAAuF,CAAAA,CAAO,GAAA,CAAK4pB,CAAAA,EACX30B,GAAAA,CAACyF,CAAAA,CAAA,CAAgC,KAAA,CAAOkvB,CAAAA,CAAU,IAAA,CAC/C,QAAA,CAAAA,CAAAA,CAAU,KAAA,CAAA,CADIA,EAAU,IAE3B,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACE,IAAA,CACJ30B,IAAC+zB,EAAAA,CAAA,CAAW,WAAYjB,CAAAA,CAAY,SAAA,CAAWF,EAAa,OAAA,CAAS,CAAA,CAAA,CACvE,CAAA,CAEF,WAAA,CAAaC,CAAAA,CACb,KAAA,CAAOnZ,EACP,SAAA,CAAWC,CAAAA,CACX,QAAS,IAAM,CACb/K,EAAYO,CAAAA,CAAO,GAAG,EACxB,CAAA,CACA,YAAA,CAAc,IAAM,CAAC,CAAA,CACrB,KAAA,CAAOulB,GAEN,QAAA,CAAA/xB,CAAAA,EAAa,CAACF,EAAAA,CAAK,MAAA,CAClBzC,GAAAA,CAACa,EAAAA,CAAA,EAAQ,CAAA,CAETN,KAAAL,QAAAA,CAAA,CACG,UAAA0yB,CAAAA,CAAa,iBAAA,CAAoB5yB,IAAC6zB,EAAAA,CAAA,EAAa,CAAA,CAAK,IAAA,CACrD7zB,GAAAA,CAACgyB,EAAAA,CAAA,CACC,YAAA,CAAclB,CAAAA,CACd,aAAc5lB,CAAAA,CACd,QAAA,CAAUqI,EACV,UAAA,CAAYnD,CAAAA,CACZ,gBAAA,CAAkBL,CAAAA,CAClB,QAAA,CAAUtN,EAAAA,CAAK,CAAC,CAAA,CAChB,QAAA,CAAUswB,EACV,GAAA,CAAK1xB,CAAAA,CACL,OAAQ+I,CAAAA,CACR,UAAA,CAAYiqB,CAAAA,CACd,CAAA,CAAA,CACF,CAAA,CAEJ,CAEJ,CC3MA,IAAM5G,EAAAA,CAAY,GAElB,SAASmH,EAAAA,CAAkBpK,CAAAA,CAAgD,CACzE,OAAOA,CAAAA,CAAQ,IAAKR,CAAAA,GAAY,CAC9B,GAAGA,CAAAA,CACH,IAAA,CAAM,IAAMhqB,GAAAA,CAACka,GAAAA,CAAA,CAAS,SAAA,CAAU,kBAAA,CAAmB,KAAA,CAAO,CAAE,SAAA,CAAW,KAAA,CAAO,aAAc,KAAM,CAAA,CAAG,CACvG,CAAA,CAAE,CACJ,CAEe,SAAR2a,EAAAA,CAAkC,CAAE,OAAA1lB,CAAAA,CAAQ,KAAA,CAAAuK,EAAO,SAAA,CAAAC,CAAU,EAAuB,CACzF,IAAMiU,CAAAA,CAAiBje,EAAAA,EAAY,CAC7B3E,CAAAA,CAAcC,KAAe,CAC7B,CAAE,cAAA4iB,CAAAA,CAAe,KAAA,CAAA7d,CAAM,CAAA,CAAI8d,GAAAA,EAAc,CACzC,CAAE,sBAAA,CAAAgH,CAAAA,CAAwB,eAAA1G,CAAAA,CAAgB,QAAA,CAAA7a,EAAU,UAAA,CAAAnD,CAAAA,CAAY,KAAA2kB,CAAAA,CAAM,cAAA,CAAA/G,CAAe,CAAA,CAAI7e,CAAAA,CAAO,OAAA,CAChG,CAAE,QAAA,CAAA/K,CAAAA,CAAU,iBAAA0I,CAAiB,CAAA,CAAIzI,GAAU,CAC3C,CAAE,MAAA,CAAA+F,CAAO,CAAA,CAAIS,IAAAA,CAAKC,OAAOgC,CAAAA,EAAoB,EAAA,CAAI,WAAW,CAAC,CAAA,CAAE1I,CAAQ,EACvE8L,CAAAA,CAAerF,IAAAA,CAAKC,MAAAA,CAAOsF,CAAAA,CAAY,MAAM,CAAC,EAAEhG,CAAM,CAAA,CACtD4qB,IAAc9kB,CAAAA,EAAc,IAAA,EAAM,OAASE,CAAAA,CAAW,WAAA,EAAY,CAClEL,CAAAA,CAAmBG,CAAAA,EAAc,MAAA,EAAU,GAC3C+kB,CAAAA,CAAsBpH,CAAAA,CAAcG,CAAc,CAAA,CAClD,CAACkH,EAAiBC,CAAkB,CAAA,CAAIr1B,QAAAA,CAA4B,EAAE,CAAA,CAEtE2qB,EACJsK,CAAAA,GAAS,QAAA,CACLE,GAAqB,OAAA,CACnB,CACE,CACE,EAAA,CAAKA,CAAAA,CAAoB,OAAA,CAAyC,GAAA,CAClE,KAAA,CAAQA,CAAAA,CAAoB,QAAyC,KACvE,CACF,EACA,EAAC,CACFA,GAAqB,OAAA,EAAwD,GAAA,CAAKzqB,CAAAA,GAAU,CAC3F,EAAA,CAAIA,CAAAA,CAAK,IACT,KAAA,CAAOA,CAAAA,CAAK,KACd,CAAA,CAAE,CAAA,EAAK,EAAC,CAER,CAACukB,CAAAA,CAAcqG,CAAe,CAAA,CAAIt1B,QAAAA,CAAS2qB,CAAqB,CAAA,CAChE4K,CAAAA,CAA6BjH,EAC/B,CACE,CAACA,CAAc,EAAG,CAChB,IAAA,CAAM,CACJ,GAAA,CAAK7a,CACP,CACF,CACF,CAAA,CACA,EAAC,CACC+hB,CAAAA,CACJP,IAAS,UAAA,CACL,CACE,GAAGM,CAAAA,CACH,EAAA,CAAIH,CACN,EACA,CACE,EAAA,CAAIA,CACN,CAAA,CAEA,CAAE,KAAA,CAAAtjB,EAAO,IAAA,CAAAnP,CAAAA,CAAM,SAAA,CAAAgxB,CAAAA,CAAW,SAAA,CAAA9wB,CAAU,EAAIswB,EAAAA,CAAe,CAC3D,iBAAAljB,CAAAA,CACA,MAAA,CAAA3F,EACA,KAAA,CAAA4F,CAAAA,CACA,SAAA,CAAW,CACT,OAAA,CAAS,CACP,OAAQ,CAAA,CACR,KAAA,CAAOyd,EACT,CAAA,CACA,KAAA,CAAO6H,CACT,CACF,CAAC,CAAA,CAEK9K,EAAAA,CAAUnB,EAAAA,CAAyB,CACvC,iBAAkBnZ,CAAAA,EAAc,UAAA,EAAc,EAAC,CAC/C,cAAA,CAAgB6kB,CAClB,CAAC,CAAA,CACKQ,EAAAA,CAAc,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,EAAE,EAC9BC,EAAAA,CAAiBZ,EAAAA,CAAkBpK,EAAO,CAAA,CAE1C5b,CAAAA,CAAcoL,WAAAA,CACjB5H,CAAAA,EAAuB,CACtBwb,CAAAA,CAAe,CAAE,IAAA,CAAM,SAAA,CAAW,IAAAxb,CAAAA,CAAK,OAAA,CAAS,EAAG,CAAC,EACtD,CAAA,CACA,CAACwb,CAAc,CACjB,CAAA,CAGMqB,EAAAA,CAA2BjV,YAC9BkV,CAAAA,EAAgD,CAC/C,IAAMuG,CAAAA,CAAYhzB,CAAAA,EAAM,MAAA,EAAU,CAAA,CAC5B0sB,EAAAA,CAAavd,CAAAA,CAAQkjB,EAE3B,GAAI5F,CAAAA,EAAuBC,GAAa,CAAA,EAAKsG,CAAAA,CAAY,EAAG,CAC1D,GAAM,CAAE,YAAA,CAAArG,EAAAA,CAAc,SAAA,CAAAC,GAAW,YAAA,CAAAC,CAAa,CAAA,CAAIJ,CAAAA,CAE9CE,EAAAA,CAAeC,EAAAA,CAAYC,EAAe,GAAA,EAAO,CAAC3sB,CAAAA,EAAa8yB,CAAAA,CAAYtG,EAAAA,EAC7EsE,CAAAA,CAAU,CACR,SAAA,CAAW,CACT,QAAS,CACP,MAAA,CAAQgC,EACR,KAAA,CAAOhI,EACT,CACF,CACF,CAAC,EAEL,CACF,CAAA,CACA,CAACqH,EAAwBljB,CAAAA,CAAOnP,CAAAA,EAAM,OAAQgxB,CAAAA,CAAW9wB,CAAS,CACpE,CAAA,CAEA,SAAS6sB,EAAAA,EAAwB,CAC/B,IAAI9Z,CAAAA,CAEJ,GAAIqf,CAAAA,GAAS,QAAA,CAAU,CACrB,IAAMW,CAAAA,CAAW3G,CAAAA,CAAa,CAAC,CAAA,CAE/BrZ,CAAAA,CAAU,CACR,GAAA,CAAKggB,CAAAA,CAAS,IAAM,EAAA,CACpB,KAAA,CAAOA,EAAS,KAClB,EACF,CAEIX,CAAAA,GAAS,UAAA,GACXrf,CAAAA,CAAUqZ,GAAc,GAAA,CAAK2G,CAAAA,GAAc,CACzC,GAAA,CAAKA,CAAAA,CAAS,IAAM,EAAA,CACpB,KAAA,CAAOA,CAAAA,CAAS,KAClB,CAAA,CAAE,CAAA,CAAA,CAGJ1qB,EAAY,CACV,IAAA,CAAM,kBACN,OAAA,CAAS,CACP,CAACgjB,CAAc,EAAG,CAChB,OAAA,CAAAtY,CAAAA,CACA,UAAA,CAAYuf,GAAqB,UAAA,EAAc,EACjD,CACF,CACF,CAAC,CAAA,CACDrmB,CAAAA,CAAYO,CAAAA,CAAO,GAAG,EACxB,CAEA,SAASwmB,EAAAA,CAAsBlJ,CAAAA,CAA6B,CAC1D,GAAIsI,CAAAA,GAAS,UAAA,CAAY,CAGvBK,CAAAA,CAAiBQ,EAAAA,EAAiB,CAEhC,IAAMC,EAAAA,CAAqB,IAAI,IAAID,EAAAA,CAAa,GAAA,CAAKprB,IAAS,CAACA,EAAAA,CAAK,GAAIA,EAAI,CAAC,CAAC,CAAA,CAG9E,OAAOiiB,CAAAA,CAAY,IAAKpnB,EAAAA,EAAO,CAE7B,GAAIwwB,EAAAA,CAAmB,GAAA,CAAIxwB,EAAE,CAAA,CAC3B,OAAOwwB,EAAAA,CAAmB,GAAA,CAAIxwB,EAAE,CAAA,CAIlC,IAAMywB,CAAAA,CAAgBrzB,CAAAA,EAAM,KAAMsnB,EAAAA,EAAQA,EAAAA,CAAI,MAAQ1kB,EAAE,CAAA,CACxD,OAAO,CACL,EAAA,CAAAA,EAAAA,CACA,MAAOywB,CAQT,CACF,CAAC,CACH,CAAC,EAED,MACF,CAGA,IAAMJ,CAAAA,CAAWjJ,CAAAA,CAAYA,CAAAA,CAAY,OAAS,CAAC,CAAA,CAEjD2I,EADEM,CAAAA,CACeE,EAAAA,EAAiB,CAEhC,GAAIA,EAAAA,CAAa,MAAA,GAAW,CAAA,EAAKA,EAAAA,CAAa,CAAC,EAAE,EAAA,GAAOF,CAAAA,CACtD,OAAOE,EAAAA,CAIT,IAAME,GAAgBrzB,CAAAA,EAAM,IAAA,CAAMsnB,EAAAA,EAAQA,EAAAA,CAAI,GAAA,GAAQ2L,CAAQ,EAC9D,OAAO,CACL,CACE,EAAA,CAAIA,CAAAA,CACJ,MAAOI,EAQT,CACF,CACF,CAAA,CAGgB,EAHf,EAKL,CAEA,SAASC,EAAAA,EAA2B,CAClCnI,CAAAA,CAAe,CAAE,KAAM,WAAA,CAAa,OAAA,CAAS,CAAE,UAAA,CAAAxd,CAAW,CAAE,CAAC,EAC/D,CAEA,OACEpQ,GAAAA,CAACwZ,EAAAA,CAAA,CACC,OAAA,CACEjZ,IAAAA,CAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAF,GAAAA,CAACwD,IAAA,CACC,SAAA,CAAU,UACV,OAAA,CAAS,IAAM,CACbgsB,EAAAA,GACF,CAAA,CACA,OAAA,CAAQ,SAAA,CACT,QAAA,CAAA,QAAA,CAED,EACAxvB,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,SAAA,CACV,QAAS,IAAM,CACbuyB,EAAAA,GACF,CAAA,CACA,OAAA,CAAQ,UAEP,QAAA,CAAA,CAAA,OAAA,EAAUf,GAAW,GACxB,CAAA,CAAA,CACF,CAAA,CAEF,MAAOtb,CAAAA,CACP,SAAA,CAAWC,CAAAA,CACX,OAAA,CAAS,IAAM,CACb/K,EAAYO,CAAAA,CAAO,GAAG,EACxB,CAAA,CACA,KAAA,CAAO,UAAU6lB,GAAW,CAAA,CAAA,CAE5B,QAAA,CAAAh1B,GAAAA,CAACuqB,EAAAA,CAAA,CACC,QAAS5nB,CAAAA,CAAY6yB,EAAAA,CAAiBhL,GACtC,IAAA,CAAM7nB,CAAAA,CAAY4yB,GAAe9yB,CAAAA,EAAQ,EAAC,CAC1C,UAAA,CAAYyN,CAAAA,EAAc,IAAA,EAAQ,GAClC,qBAAA,CACE6e,CAAAA,EAAc,OACZ,CAACle,CAAAA,CAAK6kB,KAAc,CAAE,GAAG7kB,CAAAA,CAAK,GAAI6kB,CAAAA,CAAS,EAAA,CAAK,CAAE,CAACA,CAAAA,CAAS,EAAE,EAAG,IAAK,CAAA,CAAI,EAAI,CAAA,CAAA,CAC9E,EACF,CAAA,CAIF,uBAAA,CAAyBC,GACzB,QAAA,CAAWnY,CAAAA,EAAM,CACfyR,EAAAA,CAAyBzR,CAAAA,CAAE,MAAwB,EACrD,CAAA,CACA,gBAAA,CAAkB,IAChBxd,GAAAA,CAACg2B,EAAAA,CAAA,CACC,gBAAA,CAAkBjmB,CAAAA,CAClB,UAAWjD,CAAAA,EAAoB,EAAA,CAC/B,mBAAoBqoB,CAAAA,CACtB,CAAA,CAEJ,CAAA,CACF,CAEJ,CAEA,SAASa,GAAU,CACjB,gBAAA,CAAAjmB,EACA,SAAA,CAAApO,CAAAA,CACA,mBAAAwzB,CACF,CAAA,CAIgB,CACd,GAAM,CAACc,CAAAA,CAAQC,CAAS,CAAA,CAAIp2B,QAAAA,CAAS,EAAE,CAAA,CAEvC,SAASq2B,GAA2C,CAClD,OAAO,CACL,cAAA,CAAgB,CACd,QAAA,CAAU,CACR,CACE,UAAA,CAAYpmB,CACd,CACF,CACF,EACA,YAAA,CAAc,CACZ,CAAA,CAAG,EACL,CACF,CACF,CAEA,IAAMqmB,CAAAA,CAAgBD,GAAqB,CACrC,CAACE,EAAaC,CAAc,CAAA,CAAIx2B,QAAAA,CAASs2B,CAAa,CAAA,CACtD,CAAE,QAAAzkB,CAAAA,CAAS,SAAA,CAAAhP,CAAU,CAAA,CAAI4zB,GAAAA,CAAU50B,EAAW00B,CAAW,CAAA,CACzDG,CAAAA,CAAiBrvB,MAAAA,CAAqB,IAAI,CAAA,CAE1CsvB,EAA0Bzc,WAAAA,CAC9B0c,EAAAA,CAAUC,CAAAA,EAAkB,CAC1BL,CAAAA,CAAe,CACb,GAAGF,CAAAA,CACH,YAAA,CAAc,CAAE,CAAA,CAAGO,CAAM,CAC3B,CAAC,EACH,CAAA,CAAG,GAAG,CAAA,CACN,CAACP,CAAa,CAChB,CAAA,CAEAr2B,SAAAA,CAAU,IAAM,CACd,GAAI4R,EAAS,CACX,IAAMilB,EAAuB,IAAA,CAAK,SAAA,CAAUjlB,EAAQ,GAAA,CAAKklB,CAAAA,EAAMA,CAAAA,CAAE,GAAG,CAAA,CAAE,IAAA,EAAM,CAAA,CACtEC,CAAAA,CAAoBN,EAAe,OAAA,CACrC,IAAA,CAAK,UAAUA,CAAAA,CAAe,OAAA,CAAQ,GAAA,CAAKK,CAAAA,EAAMA,CAAAA,CAAE,GAAG,EAAE,IAAA,EAAM,EAC9D,EAAA,CAEAD,CAAAA,GAAyBE,IAC3BN,CAAAA,CAAe,OAAA,CAAU,CAAC,GAAG7kB,CAAO,CAAA,CACpCwjB,EAAmBxjB,CAAAA,CAAQ,GAAA,CAAKwB,IAAY,CAAE,GAAA,CAAKA,EAAO,GAAI,CAAA,CAAE,CAAC,CAAA,EAErE,CACF,CAAA,CAAG,CAACxB,CAAAA,CAASwjB,CAAkB,CAAC,CAAA,CAEhC,SAAS4B,EAAmBvZ,CAAAA,CAA8C,CACxE,IAAM3K,CAAAA,CAAQ2K,CAAAA,CAAE,MAAA,CAAO,MACvB0Y,CAAAA,CAAUrjB,CAAK,EACf4jB,CAAAA,CAAwB5jB,CAAK,EAC/B,CAEA,OACEtS,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBAAA,CACZ,UAAAoC,CAAAA,CACC3C,GAAAA,CAACg3B,YAAAA,CAAA,CAAa,SAAA,CAAU,wFAAA,CAAyF,EAEjHh3B,GAAAA,CAACoe,MAAAA,CAAA,CAAW,SAAA,CAAU,wEAAA,CAAyE,CAAA,CAEjGpe,IAAC+D,GAAAA,CAAA,CAAM,UAAU,qBAAA,CAAsB,QAAA,CAAUgzB,EAAoB,WAAA,CAAY,QAAA,CAAS,KAAA,CAAOd,CAAAA,CAAQ,CAAA,CAAA,CAC3G,CAEJ,CAEA,SAASS,EAAAA,CAASO,EAAcC,CAAAA,CAAK,GAAA,CAAK,CACxC,IAAIC,CAAAA,CACJ,OAAO,SAAA,GAAwBzD,CAAAA,CAAa,CAC1C,aAAayD,CAAS,CAAA,CACtBA,EAAY,UAAA,CAAW,IAAMF,EAAG,KAAA,CAAM,IAAA,CAAMvD,CAAI,CAAA,CAAGwD,CAAE,EACvD,CACF,CClXO,SAASE,EAAAA,EAAqC,CACnD,IAAMloB,CAAAA,CAAUQ,EAAAA,GACV2nB,CAAAA,CAAcnoB,CAAAA,CAAQ,OAAQ1E,CAAAA,EAClC,CAAC,YAAa,YAAA,CAAc,kBAAkB,CAAA,CAAE,IAAA,CAAM4E,CAAAA,EAAeA,CAAAA,GAAe5E,EAAK,IAAI,CAC/F,EACM8sB,CAAAA,CAAgBD,CAAAA,CAAYA,EAAY,MAAA,CAAS,CAAC,CAAA,EAAG,GAAA,CAE3D,OACEr3B,GAAAA,CAAAE,SAAA,CACG,QAAA,CAAAgP,EAAQ,GAAA,CAAKC,CAAAA,EAAW,CACvB,OAAQA,CAAAA,CAAO,IAAA,EACb,KAAK,aAAA,CAAe,CAClB,GAAM,CAAE,OAAA,CAAAooB,CAAQ,CAAA,CAAIpoB,CAAAA,CAEpB,OAAOnP,GAAAA,CAAC0N,EAAAA,CAAA,CAA6B,OAAA,CAAS6pB,CAAAA,CAAQ,OAAA,CAAA,CAA7BpoB,EAAO,GAA+B,CACjE,CACA,KAAK,cAAA,CACH,OAAOnP,GAAAA,CAACwY,EAAAA,CAAA,CAAO,MAAA,CAAQrJ,CAAAA,CAAAA,CAAaA,CAAAA,CAAO,GAAK,CAAA,CAElD,KAAK,YACH,OACEnP,GAAAA,CAAC0yB,GAAA,CACC,MAAA,CAAQvjB,CAAAA,CACR,KAAA,CAAOkoB,CAAAA,CAAY,MAAA,CAAS,EAC5B,SAAA,CAAWloB,CAAAA,CAAO,MAAQmoB,CAAAA,CAAAA,CACrBnoB,CAAAA,CAAO,GACd,CAAA,CAGJ,KAAK,YAAA,CACH,OACEnP,GAAAA,CAACm0B,EAAAA,CAAA,CACC,MAAA,CAAQhlB,CAAAA,CACR,MAAOkoB,CAAAA,CAAY,MAAA,CAAS,EAC5B,SAAA,CAAWloB,CAAAA,CAAO,GAAA,GAAQmoB,CAAAA,CAAAA,CACrBnoB,CAAAA,CAAO,GACd,EAGJ,KAAK,kBAAA,CACH,OACEnP,GAAAA,CAAC60B,EAAAA,CAAA,CACC,MAAA,CAAQ1lB,CAAAA,CACR,KAAA,CAAOkoB,CAAAA,CAAY,MAAA,CAAS,CAAA,CAC5B,UAAWloB,CAAAA,CAAO,GAAA,GAAQmoB,GACrBnoB,CAAAA,CAAO,GACd,EAGJ,QACE,OAAO,IAEX,CACF,CAAC,CAAA,CACH,CAEJ,CCzDO,SAASqoB,EAAAA,CAAK,CAAE,MAAA,CAAAC,CAAO,EAA8C,CAC1E,GAAM,CAACC,CAAU,CAAA,CAAID,CAAAA,CACf,CAAE,QAAA,CAAA7xB,CAAAA,CAAU,SAAA,CAAAjE,CAAU,CAAA,CAAI+1B,CAAAA,CAEhC,OAAI,MAAA,CAAO,QAAA,CAAS,WAAa9xB,CAAAA,GAC/B,MAAA,CAAO,SAAS,IAAA,CAAO,CAAA,EAAGA,CAAQ,CAAA,CAAA,EAAIjE,CAAS,CAAA,CAAA,CAAA,CAI/C3B,IAAC23B,GAAAA,CAAA,CACC,SAAA33B,GAAAA,CAAC43B,GAAAA,CAAA,CAAe,MAAA,CAAQH,CAAAA,CACtB,QAAA,CAAAl3B,IAAAA,CAAC+M,EAAAA,CAAA,CACC,UAAAtN,GAAAA,CAACua,EAAAA,CAAA,CACC,QAAA,CAAAva,GAAAA,CAACo3B,GAAA,EAAe,CAAA,CAClB,CAAA,CACAp3B,GAAAA,CAACsL,MAAAA,CAAA,EAAO,GACV,CAAA,CACF,CAAA,CACF,CAEJ,CCtBO,SAASusB,IAA2B,CACzC,IAAMn1B,CAAAA,CAAQo1B,aAAAA,EAAc,CACtBjzB,CAAAA,CAAgB,IAAI,IAAA,EAAK,CAAE,aAAY,CAE7C,SAASkzB,GAAmC,CAC1C,OAAIC,oBAAAA,CAAqBt1B,CAAK,CAAA,CACxBA,CAAAA,CAAM,SAAW,GAAA,CAEjBnC,IAAAA,CAAAL,SAAA,CACE,QAAA,CAAA,CAAAF,IAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mEAAA,CAAoE,QAAA,CAAA,KAAA,CAAG,CAAA,CACrFA,GAAAA,CAAC,KAAE,SAAA,CAAU,sEAAA,CAAuE,QAAA,CAAA,gBAAA,CAAc,CAAA,CAAA,CACpG,CAAA,CAKFO,IAAAA,CAAAL,SAAA,CACE,QAAA,CAAA,CAAAF,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mEAAA,CAAoE,iBAAK,CAAA,CACvFA,GAAAA,CAAC,KAAE,SAAA,CAAU,sEAAA,CAAuE,oDAEpF,CAAA,CACAA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,6BAAA,CACX,QAAA,CAAAA,IAAC,GAAA,CAAA,CAAG,QAAA,CAAA0C,EAAM,UAAA,CAAW,CAAA,CACvB,GACF,CAAA,CAIA0D,EAAAA,CAAe1D,CAAK,CAAA,CACd4D,EAAAA,CAAoB5D,CAAK,IAC1B,mBAAA,CAEDnC,IAAAA,CAAAL,SAAA,CACE,QAAA,CAAA,CAAAF,IAAC,IAAA,CAAA,CAAG,SAAA,CAAU,mEAAA,CAAoE,QAAA,CAAA,mBAAA,CAAiB,CAAA,CACnGA,GAAAA,CAAC,KAAE,SAAA,CAAU,sEAAA,CAAuE,kDAEpF,CAAA,CAAA,CACF,CAAA,CAKAO,KAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAF,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,oEAAoE,QAAA,CAAA,OAAA,CAAK,CAAA,CACvFA,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,uEAAuE,QAAA,CAAA,4DAAA,CAEpF,CAAA,CAAA,CACF,CAAA,CAKJ0C,CAAAA,YAAiB,KAAA,CAEjBnC,IAAAA,CAAAL,SAAA,CACE,QAAA,CAAA,CAAAF,IAAC,IAAA,CAAA,CAAG,SAAA,CAAU,oEAAoE,QAAA,CAAA,OAAA,CAAK,CAAA,CACvFA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,sEAAA,CAAuE,oDAEpF,CAAA,CACAA,GAAAA,CAAC,KAAE,SAAA,CAAU,6BAAA,CACX,SAAAA,GAAAA,CAAC,GAAA,CAAA,CAAG,QAAA,CAAA0C,CAAAA,CAAM,OAAA,CAAQ,CAAA,CACpB,GACF,CAAA,CAIG,IACT,CAEA,OACEnC,IAAAA,CAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uGAAA,CACb,QAAA,CAAAA,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sBACb,QAAA,CAAAA,GAAAA,CAAC,OAAI,SAAA,CAAU,4EAAA,CACZ,QAAA,CAAA+3B,CAAAA,EAAa,CAChB,CAAA,CACF,EACF,CAAA,CACA/3B,GAAAA,CAAC,OAAI,SAAA,CAAU,oHAAA,CACb,SAAAO,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sBAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,oCAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CACC,UAAU,wDAAA,CACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,YACR,KAAA,CAAM,IAAA,CACN,KAAA,CAAM,4BAAA,CAEN,QAAA,CAAA,CAAAP,GAAAA,CAAC,QAAK,CAAA,CAAE,iBAAA,CAAkB,IAAA,CAAK,MAAA,CAAO,CAAA,CACtCA,GAAAA,CAAC,QACC,CAAA,CAAE,sRAAA,CACF,KAAK,cAAA,CACP,CAAA,CAAA,CACF,EACAO,IAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,yBAAA,CAA0B,QAAA,CAAA,CAAA,OAAA,CAAGsE,CAAAA,CAAAA,CAAc,GAC1D,CAAA,CACA7E,GAAAA,CAACG,GAAA,EAAe,CAAA,CAAA,CAClB,EACF,CAAA,CAAA,CACF,CAEJ,CCxGO,SAAS83B,EAAAA,EAAgB,CAC9B,IAAMv1B,CAAAA,CAAQo1B,aAAAA,EAAc,CACtBI,CAAAA,CACJx1B,CAAAA,YAAiB,MAAQA,CAAAA,CAAM,OAAA,CAAU,mEAAA,CAE3C,OACEnC,IAAAA,CAACU,CAAAA,CAAA,CAAM,OAAA,CAAQ,aAAA,CACb,UAAAjB,GAAAA,CAAC8zB,WAAAA,CAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC9zB,GAAAA,CAACuB,EAAAA,CAAA,CAAW,iBAAK,CAAA,CACjBvB,GAAAA,CAACwB,EAAA,CAAkB,QAAA,CAAA02B,EAAU,CAAA,CAAA,CAC/B,CAEJ,CCiBO,SAASC,EAAAA,CAAc,CAAE,OAAAV,CAAO,CAAA,CAA2C,CAChF,GAAM,CAAC73B,CAAAA,CAASC,CAAU,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CACtCs4B,CAAAA,CAAMC,MAAM,qBAAqB,CAAA,CACjCC,EAAgC,KAAA,CAAM,OAAA,CAAQb,CAAM,CAAA,CACtDA,CAAAA,CAAO,GAAA,CAAKjzB,GAAY+zB,EAAAA,CAAU/zB,CAAO,CAAC,CAAA,CAC1C,CAAC+zB,GAAUd,CAAM,CAAC,CAAA,CAChB/wB,CAAAA,CAAO8xB,GAAAA,CAAQF,CAAW,EAOhC,GALAv4B,SAAAA,CAAU,IAAM,CAEdF,CAAAA,CAAW,IAAI,EACjB,CAAA,CAAG,EAAE,CAAA,CAED,CAACD,EACH,OAAO,IAAA,CAGT,IAAM64B,CAAAA,CAASC,mBAAAA,CAAoB,CACjC,CACE,IAAA,CAAM,SAAA,CACN,OAAA,CAAS14B,GAAAA,CAACw3B,EAAAA,CAAA,CAAK,MAAA,CAAQc,CAAAA,CAAa,CAAA,CACpC,YAAA,CAAct4B,GAAAA,CAAC63B,EAAAA,CAAA,EAAY,CAAA,CAC3B,QAAA,CAAU,CACR,CACE,IAAA,CAAM,oBAAA,CACN,QAAS73B,GAAAA,CAAC2K,EAAAA,CAAA,CAAO,OAAA,CAAS,CAAE,QAAS,OAAA,CAAS,MAAA,CAAQ,OAAA,CAAS,SAAA,CAAW,IAAK,CAAA,CAAG,EAClF,QAAA,CAAUjE,CAAAA,CAAK,IAAKa,CAAAA,GAAS,CAC3B,KAAMA,CAAAA,CAAI,IAAA,CACV,OAAA,CAASA,CAAAA,CAAI,SAAA,CACb,YAAA,CAAcvH,IAACi4B,EAAAA,CAAA,EAAc,EAC7B,QAAA,CAAU1wB,CAAAA,CAAI,QAAQ,GAAA,CAAKoxB,CAAAA,GAAW,CACpC,IAAA,CAAMA,CAAAA,CAAM,IAAA,CACZ,QAASA,CAAAA,CAAM,SAAA,CACf,aAAc34B,GAAAA,CAACi4B,EAAAA,CAAA,EAAc,CAAA,CAC7B,QAAA,CAAUU,CAAAA,CAAM,QAAA,EAAU,GAAA,CAAKC,CAAAA,GAAW,CAAE,IAAA,CAAMA,CAAAA,CAAM,KAAM,OAAA,CAASA,CAAAA,CAAM,SAAU,CAAA,CAAE,CAC3F,CAAA,CAAE,CACJ,CAAA,CAAE,CACJ,CACF,CACF,CACF,CAAC,CAAA,CAED,OAAAR,EAAI,aAAa,CAAA,CAGfp4B,GAAAA,CAACP,EAAAA,CAAA,CAAc,SAAA,CAAU,QAAQ,YAAA,CAAa,QAAA,CAAS,0BAAyB,IAAA,CAAC,YAAA,CAAY,KAC3F,QAAA,CAAAO,GAAAA,CAAC64B,GAAAA,CAAA,CACC,QAAA,CAAA74B,GAAAA,CAACsP,GAAA,CACC,QAAA,CAAAtP,GAAAA,CAAC84B,cAAAA,CAAA,CAAe,MAAA,CAAQL,EAAQ,CAAA,CAClC,CAAA,CACF,CAAA,CACF,CAEJ,CAEA,SAASF,GAAU/zB,CAAAA,CAAyD,CAC1E,OAAO,CACL,QAAA,CAAUA,EAAQ,QAAA,EAAY,GAAA,CAC9B,UAAA,CAAYA,CAAAA,CAAQ,UAAA,EAAc,GAClC,IAAA,CAAMA,CAAAA,CAAQ,KACd,OAAA,CAASA,CAAAA,CAAQ,QACjB,SAAA,CAAWA,CAAAA,CAAQ,SAAA,CACnB,KAAA,CAAOA,CAAAA,CAAQ,KAAA,CACf,OAAQA,CAAAA,CAAQ,MAAA,CAChB,OAAQA,CAAAA,CAAQ,MAClB,CACF,CC9FO,IAAMu0B,GAAsB,CACjC,YAAA,CACA,YACA,YAAA,CACA,0BAAA,CACA,YACA,WAAA,CACA,YAAA,CACA,eAAA,CACA,YAAA,CACA,YAAA,CACA,YAAA,CACA,sBACA,qBAAA,CACA,YAAA,CACA,YACA,YAAA,CACA,WAAA,CACA,aACA,YAAA,CACA,cAAA,CACA,WAAA,CACA,iBAAA,CACA,WAAA,CACA,YAAA,CACA,aACA,iBAAA,CACA,WAAA,CACA,aACA,YAAA,CACA,aAAA,CACA,8BACA,iBAAA,CACA,8BAAA,CACA,0BAAA,CACA,sBAAA,CACA,iBAAA,CACA,oBAAA,CACA,0EACA,+BAAA,CACA,kBAAA,CACA,qBACA,0BAAA,CACA,kBAAA,CACA,sBACA,iBAAA,CACA,iDAAA,CACA,gDAAA,CACA,yCAAA,CACA,iBAAA,CACA,+BAAA,CACA,4EACA,qBAAA,CACA,mBAAA,CACA,uBAAA,CACA,uBAAA,CACA,0BAAA,CACA,mEAAA,CACA,iBACF,CAAA,CA6BA,eAAeC,EAAAA,CACb3qB,CAAAA,CACA4qB,CAAAA,CAC+B,CAC/B,GAAM,CAAE,SAAA,CAAAt3B,EAAW,MAAA,CAAAu3B,CAAAA,CAAQ,SAAAC,CAAAA,CAAW,IAAA,CAAM,QAAA,CAAAC,CAAAA,CAAW,CAAA,CAAI,IAAA,CAAO,IAAK,CAAA,CAAI/qB,CAAAA,CAErE4T,EAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA,CAC5CA,CAAAA,CAAM,IAAA,CAAO,MAAA,CACb,IAAMoX,CAAAA,CAAiBH,GAAUH,EAAAA,CAAoB,IAAA,CAAK,GAAG,CAAA,CAE7D9W,CAAAA,CAAM,OAASoX,CAAAA,CACfpX,CAAAA,CAAM,QAAA,CAAWkX,CAAAA,CACjBlX,CAAAA,CAAM,KAAA,CAAM,QAAU,MAAA,CACtB,QAAA,CAAS,KAAK,WAAA,CAAYA,CAAK,EAE/B,GAAI,CACF,IAAMqX,CAAAA,CAAQ,MAAM,IAAI,QAA0B3gB,CAAAA,EAAY,CAC5DsJ,EAAM,QAAA,CAAW,IAAMtJ,EAAQsJ,CAAAA,CAAM,KAAK,CAAA,CAC1CA,CAAAA,CAAM,KAAA,GACR,CAAC,CAAA,CAED,GAAI,CAACqX,CAAAA,EAASA,CAAAA,CAAM,SAAW,CAAA,CAC7B,OAAO,EAAC,CAGV,IAAMC,CAAAA,CAAqB,EAAC,CAE5B,IAAA,IAAWrc,KAAQ,KAAA,CAAM,IAAA,CAAKoc,CAAK,CAAA,CAAG,CACpC,GAAIpc,CAAAA,CAAK,IAAA,CAAOkc,CAAAA,CAAU,CACxBvgB,KAAAA,CAAM,KAAA,CAAM,CAAA,uBAAA,EAAA,CAA2BugB,CAAAA,EAAY,IAAA,CAAO,IAAA,CAAA,EAAO,QAAQ,CAAC,CAAC,CAAA,KAAA,EAAQlc,CAAAA,CAAK,IAAI,CAAA,CAAE,EAE9F,QACF,CAEAqc,EAAW,IAAA,CAAKrc,CAAI,EACtB,CAEA,IAAMsc,CAAAA,CAAYj3B,GAAAA,CAASZ,CAAS,CAAA,CAAE,OAChC83B,CAAAA,CAAU,MAAM,QAAQ,GAAA,CAC5BF,CAAAA,CAAW,IAAI,MAAOrc,CAAAA,EAAsC,CAC1D,IAAMwc,CAAAA,CAAa,MAAMC,GAAoBzc,CAAI,CAAA,CAE3CmJ,EAAW,MAAM,KAAA,CAAMmT,EAAW,CACtC,MAAA,CAAQ,MAAA,CACR,OAAA,CAAS,CAAE,cAAA,CAAgBtc,EAAK,IAAA,EAAQ,0BAA2B,EACnE,IAAA,CAAMA,CACR,CAAC,CAAA,CAED,GAAI,CAACmJ,CAAAA,CAAS,EAAA,CACZ,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqBnJ,EAAK,IAAI,CAAA,CAAE,EAGlD,IAAMza,CAAAA,CAAQ,MAAM4jB,CAAAA,CAAS,IAAA,EAAK,CAE5BlT,EAA6B,CACjC,QAAA,CAAU1Q,EAAK,QAAA,CACf,IAAA,CAAMA,EAAK,IAAA,CACX,gBAAA,CAAkBya,CAAAA,CAAK,IAAA,CACvB,IAAA,CAAMA,CAAAA,CAAK,KACX,QAAA,CAAUA,CAAAA,CAAK,KACf,KAAA,CAAOwc,CAAAA,EAAY,MACnB,MAAA,CAAQA,CAAAA,EAAY,MACtB,CAAA,CAEA,OAAIT,CAAAA,EACF,MAAMA,CAAAA,CAAgB9lB,CAAAA,CAAQxR,CAAS,CAAA,CAGlCwR,CACT,CAAC,CACH,CAAA,CAEA,OAAIsmB,CAAAA,CAAQ,MAAA,CAAS,CAAA,EACnB5gB,KAAAA,CAAM,QAAQ,CAAA,SAAA,EAAY4gB,CAAAA,CAAQ,MAAM,CAAA,KAAA,EAAQA,CAAAA,CAAQ,OAAS,CAAA,CAAI,GAAA,CAAM,EAAE,CAAA,CAAE,CAAA,CAG1EA,CACT,OAAS/2B,CAAAA,CAAO,CAEd,eAAQ,KAAA,CAAMA,CAAK,EACnBmW,KAAAA,CAAM,KAAA,CAAM,kCAAkC,CAAA,CAEvC,EACT,QAAE,CACA,QAAA,CAAS,KAAK,WAAA,CAAYoJ,CAAK,EACjC,CACF,CAEA,eAAe0X,EAAAA,CAAoBzc,CAAAA,CAA+D,CAGhG,OAFgBA,CAAAA,CAAK,IAAA,CAAK,WAAW,QAAQ,CAAA,CAMtC,IAAI,OAAA,CAASvE,CAAAA,EAAY,CAC9B,IAAM4E,CAAAA,CAAS,IAAI,WACnBA,CAAAA,CAAO,MAAA,CAAS,IAAM,CACpB,IAAME,EAAM,IAAI,KAAA,CAChBA,CAAAA,CAAI,MAAA,CAAS,IAAM,CACjB9E,EAAQ,CAAE,KAAA,CAAO8E,EAAI,KAAA,CAAO,MAAA,CAAQA,EAAI,MAAO,CAAC,EAClD,CAAA,CACAA,CAAAA,CAAI,OAAA,CAAU,IAAM9E,CAAAA,CAAQ,IAAI,EAChC8E,CAAAA,CAAI,GAAA,CAAMF,EAAO,OACnB,CAAA,CACAA,CAAAA,CAAO,OAAA,CAAU,IAAM5E,CAAAA,CAAQ,IAAI,CAAA,CACnC4E,CAAAA,CAAO,aAAA,CAAcL,CAAI,EAC3B,CAAC,EAfQ,IAgBX,CAIO,SAAS0c,EAAAA,EAA8F,CAC5G,IAAMC,EAAcpiB,EAAAA,EAAuB,CAE3C,OAAO,MAAOpJ,CAAAA,EACL2qB,GAAwB3qB,CAAAA,CAAS,MAAO6O,CAAAA,EAAS,CACtD,IAAMpG,CAAAA,CAA6B,CACjC,IAAA,CAAM,CAAE,IAAK,EAAA,CAAI,QAAA,CAAU,MAAO,KAAA,CAAO,SAAA,CAAW,KAAA,CAAOoG,CAAAA,CAAK,QAAS,CAAA,CACzE,iBAAkB,CAAE,GAAA,CAAK,GAAI,QAAA,CAAU,KAAA,CAAO,MAAO,SAAA,CAAW,KAAA,CAAOA,CAAAA,CAAK,gBAAiB,CAAA,CAC7F,IAAA,CAAM,CAAE,GAAA,CAAK,EAAA,CAAI,SAAU,KAAA,CAAO,KAAA,CAAO,UAAW,KAAA,CAAOA,CAAAA,CAAK,IAA0B,CAAA,CAC1F,IAAA,CAAM,CAAE,IAAK,EAAA,CAAI,QAAA,CAAU,MAAO,KAAA,CAAO,SAAA,CAAW,MAAOA,CAAAA,CAAK,IAAK,CAAA,CACrE,QAAA,CAAU,CAAE,GAAA,CAAK,GAAI,QAAA,CAAU,KAAA,CAAO,MAAO,SAAA,CAAW,KAAA,CAAOA,EAAK,QAAS,CAAA,CAC7E,GAAI,OAAOA,CAAAA,CAAK,KAAA,EAAU,SACtB,CAAE,KAAA,CAAO,CAAE,GAAA,CAAK,EAAA,CAAI,SAAU,KAAA,CAAO,KAAA,CAAO,SAAA,CAAW,KAAA,CAAOA,CAAAA,CAAK,KAA2B,CAAE,CAAA,CAChG,EAAC,CACL,GAAI,OAAOA,CAAAA,CAAK,QAAW,QAAA,CACvB,CAAE,MAAA,CAAQ,CAAE,GAAA,CAAK,EAAA,CAAI,SAAU,KAAA,CAAO,KAAA,CAAO,UAAW,KAAA,CAAOA,CAAAA,CAAK,MAA4B,CAAE,CAAA,CAClG,EACN,CAAA,CAEA,MAAM2c,EAAY/iB,CAAU,EAC9B,CAAC,CAEL,CChOO,SAASgjB,IAA+B,CAC7C,OACEv5B,KAACU,CAAAA,CAAA,CAAM,OAAA,CAAQ,aAAA,CACb,QAAA,CAAA,CAAAjB,GAAAA,CAAC8zB,YAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,CAAA,CACvC9zB,GAAAA,CAACuB,EAAAA,CAAA,CAAW,QAAA,CAAA,gBAAA,CAAc,CAAA,CAC1BhB,IAAAA,CAACiB,CAAAA,CAAA,CAAiB,QAAA,CAAA,CAAA,kEAAA,CACiD,IACjExB,GAAAA,CAAC,GAAA,CAAA,CACC,UAAU,+BAAA,CACV,IAAA,CAAK,gDACL,MAAA,CAAO,QAAA,CACP,GAAA,CAAI,qBAAA,CACL,QAAA,CAAA,oBAAA,CAED,CAAA,CAAI,KAEN,CAAA,CAAA,CACF,CAEJ,CClBO,SAAS+5B,IAA2B,CACzC,GAAM,CAAE,kBAAA,CAAAxsB,CAAmB,CAAA,CAAIxB,EAAAA,EAAgB,CAE/C,OAAKwB,EAKHhN,IAAAA,CAACU,CAAAA,CAAA,CAAM,SAAA,CAAU,SAAA,CAAU,OAAA,CAAQ,cACjC,QAAA,CAAA,CAAAjB,GAAAA,CAAC8zB,WAAAA,CAAA,CAAY,SAAA,CAAU,eAAA,CAAgB,EACvC9zB,GAAAA,CAACuB,EAAAA,CAAA,CAAW,QAAA,CAAA,cAAA,CAAY,CAAA,CACxBhB,KAACiB,CAAAA,CAAA,CAAiB,QAAA,CAAA,CAAA,iHAAA,CAEhBxB,GAAAA,CAAC,IAAA,CAAA,EAAG,CAAA,CACHuN,GACH,CAAA,CAAA,CACF,CAAA,CAZOvN,IAAAE,QAAAA,CAAA,EAAE,CAcb,CCpBO,SAAS85B,EAAAA,CAA+BvC,CAAAA,CAAc,CAC3D,OAAOA,CACT,CCFO,SAASwC,GAA+B9nB,CAAAA,CAAc,CAC3D,OAAOA,CACT,CCwBO,SAAS+nB,GAAsC,CACpD,MAAA,CAAAlQ,CAAAA,CACA,KAAA,CAAAlQ,GAAAA,CACA,OAAA,CAAAzL,GACF,CAAA,CAA+C,CAC7C,IAAM8rB,CAAAA,CAASnQ,CAAAA,EAAQ,sBAAA,GACjBoQ,GAAAA,CAAiB,IAAI,GAAA,CAAIpQ,CAAAA,EAAQ,cAAA,EAA4B,EAEnE,OACEzpB,IAAAA,CAAC8e,GAAA,CACC,QAAA,CAAA,CAAArf,IAACsf,EAAAA,CAAA,CAAe,OAAA,CAAO,IAAA,CACrB,QAAA,CAAA/e,IAAAA,CAACiD,IAAA,CAAO,OAAA,CAAQ,UAAU,IAAA,CAAK,IAAA,CAAK,UAAU,yBAAA,CAC5C,QAAA,CAAA,CAAAxD,GAAAA,CAACq6B,UAAAA,CAAA,CAAe,SAAA,CAAU,wBAAwB,CAAA,CACjDvgB,GAAAA,CACAsgB,KAAgB,IAAA,CAAO,CAAA,EACtB75B,KAAAL,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAF,GAAAA,CAACoa,GAAAA,CAAA,CAAU,YAAY,UAAA,CAAW,SAAA,CAAU,iBAAiB,CAAA,CAC7Dpa,GAAAA,CAACopB,IAAA,CAAM,OAAA,CAAQ,WAAA,CAAY,SAAA,CAAU,mDAAA,CAClC,QAAA,CAAAgR,IAAe,IAAA,CAClB,CAAA,CACAp6B,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BACZ,QAAA,CAAAo6B,GAAAA,CAAe,IAAA,CAAO,CAAA,CACrB75B,IAAAA,CAAC6oB,GAAAA,CAAA,CAAM,OAAA,CAAQ,WAAA,CAAY,UAAU,sCAAA,CAClC,QAAA,CAAA,CAAAgR,IAAe,IAAA,CAAK,WAAA,CAAA,CACvB,CAAA,CAEA/rB,GAAAA,CACG,MAAA,CAAQgF,CAAAA,EAAW+mB,IAAe,GAAA,CAAI/mB,CAAAA,CAAO,KAAK,CAAC,CAAA,CACnD,IAAKA,CAAAA,EACJrT,GAAAA,CAACopB,GAAAA,CAAA,CAAM,OAAA,CAAQ,WAAA,CAA+B,UAAU,sCAAA,CACrD,QAAA,CAAA/V,CAAAA,CAAO,KAAA,CAAA,CADsBA,CAAAA,CAAO,KAEvC,CACD,CAAA,CAEP,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,CACArT,GAAAA,CAACuf,GAAA,CAAe,SAAA,CAAU,sBAAsB,KAAA,CAAM,OAAA,CACpD,SAAAhf,IAAAA,CAACgiB,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAviB,GAAAA,CAACymB,CAAAA,CAAA,CAAa,WAAA,CAAa3M,GAAAA,CAAO,EAClCvZ,IAAAA,CAACqmB,GAAAA,CAAA,CACC,QAAA,CAAA,CAAA5mB,GAAAA,CAACs6B,CAAAA,CAAA,CAAa,QAAA,CAAA,mBAAA,CAAiB,CAAA,CAC/Bt6B,IAAC+kB,CAAAA,CAAA,CACE,SAAA1W,GAAAA,CAAQ,GAAA,CAAKgF,KAAW,CACvB,IAAMknB,CAAAA,CAAaH,GAAAA,CAAe,GAAA,CAAI/mB,GAAAA,CAAO,KAAK,CAAA,CAClD,OACE9S,KAACykB,CAAAA,CAAA,CAEC,SAAU,IAAM,CACVuV,CAAAA,CACFH,GAAAA,CAAe,MAAA,CAAO/mB,GAAAA,CAAO,KAAK,CAAA,CAElC+mB,GAAAA,CAAe,IAAI/mB,GAAAA,CAAO,KAAK,EAEjC,IAAMmnB,CAAAA,CAAe,KAAA,CAAM,IAAA,CAAKJ,GAAc,CAAA,CAC9CpQ,GAAQ,cAAA,CAAewQ,CAAAA,CAAa,OAASA,CAAAA,CAAe,MAAS,EACvE,CAAA,CAEA,QAAA,CAAA,CAAAx6B,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWsB,CAAAA,CACT,4GACAi5B,CAAAA,CAAa,0CAAA,CAA6C,oCAC5D,CAAA,CAEA,QAAA,CAAAv6B,IAACy6B,KAAAA,CAAA,CAAU,SAAA,CAAWn5B,CAAAA,CAAG,SAAS,CAAA,CAAG,EACvC,CAAA,CACC+R,GAAAA,CAAO,IAAA,EAAQrT,GAAAA,CAACqT,GAAAA,CAAO,IAAA,CAAP,CAAY,SAAA,CAAU,gDAAA,CAAiD,CAAA,CACxFrT,GAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAqT,IAAO,KAAA,CAAM,CAAA,CACnB8mB,GAAQ,GAAA,CAAI9mB,GAAAA,CAAO,KAAK,CAAA,EACvBrT,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,4FAAA,CACb,QAAA,CAAAm6B,EAAO,GAAA,CAAI9mB,GAAAA,CAAO,KAAK,CAAA,CAC1B,CAAA,CAAA,CAAA,CAxBGA,IAAO,KA0Bd,CAEJ,CAAC,CAAA,CACH,CAAA,CACC+mB,GAAAA,CAAe,KAAO,CAAA,EACrB75B,IAAAA,CAAAL,SAAA,CACE,QAAA,CAAA,CAAAF,IAACklB,CAAAA,CAAA,EAAiB,CAAA,CAClBllB,GAAAA,CAAC+kB,CAAAA,CAAA,CACC,SAAA/kB,GAAAA,CAACglB,CAAAA,CAAA,CACC,QAAA,CAAU,IAAMgF,GAAQ,cAAA,CAAe,MAAS,CAAA,CAChD,SAAA,CAAU,kCAAA,CACX,QAAA,CAAA,eAAA,CAED,EACF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,GACF,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CCrGO,SAASsD,EAAAA,CAA2B,CACzC,UAAA,CAAAld,EACA,gBAAA,CAAAL,CAAAA,CACA,IAAAga,CAAAA,CACA,OAAA,CAAA1b,EAAU,CAAE,SAAA,CAAW,IAAA,CAAM,OAAA,CAAS,IAAK,CAC7C,EAAiD,CAC/C,IAAMuf,CAAAA,CAAiBje,EAAAA,EAAY,CAE7B4D,CAAAA,CAAWwW,EAAI,QAAA,CAAS,GAAA,CAE9B,SAAS2Q,CAAAA,EAAmB,CAC1B9M,CAAAA,CAAe,CAAE,IAAA,CAAM,YAAA,CAAc,QAAS,CAAE,QAAA,CAAAra,EAAU,gBAAA,CAAAxD,CAAiB,CAAE,CAAC,EAChF,CAEA,SAASwd,CAAAA,EAAqB,CAC5BK,EAAe,CAAE,IAAA,CAAM,eAAgB,OAAA,CAAS,CAAE,QAAA,CAAAra,CAAAA,CAAU,UAAA,CAAAnD,CAAW,CAAE,CAAC,EAC5E,CAEA,OACE7P,IAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CACZ,QAAA,CAAA,CAAA8N,CAAAA,CAAQ,OAAA,EACP9N,IAAAA,CAACiD,IAAA,CAAO,SAAA,CAAU,uCAAuC,OAAA,CAASk3B,CAAAA,CAAY,QAAQ,OAAA,CACpF,QAAA,CAAA,CAAA16B,GAAAA,CAAC26B,MAAAA,CAAA,CAAO,SAAA,CAAU,gBAAgB,CAAA,CAClC36B,GAAAA,CAAC,QAAK,SAAA,CAAU,YAAA,CAAa,gBAAI,CAAA,CAAA,CACnC,CAAA,CAEDqO,CAAAA,CAAQ,SAAA,EAAa,CAACA,CAAAA,CAAQ,SAC7B9N,IAAAA,CAACiD,GAAAA,CAAA,CAAO,SAAA,CAAU,sCAAA,CAAuC,QAAS+pB,CAAAA,CAAc,OAAA,CAAQ,OAAA,CACtF,QAAA,CAAA,CAAAvtB,GAAAA,CAACwtB,MAAAA,CAAA,CAAO,SAAA,CAAU,eAAA,CAAgB,EAClCxtB,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,YAAA,CAAa,QAAA,CAAA,QAAA,CAAM,CAAA,CAAA,CACrC,CAAA,CAEDqO,CAAAA,CAAQ,OAAA,EAAWA,EAAQ,SAAA,EAC1B9N,IAAAA,CAAC4H,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAnI,GAAAA,CAACoI,IAAA,CAAoB,OAAA,CAAO,IAAA,CAC1B,QAAA,CAAA7H,IAAAA,CAACiD,GAAAA,CAAA,CAAO,SAAA,CAAU,8BAAA,CAA+B,QAAQ,OAAA,CACvD,QAAA,CAAA,CAAAxD,IAAC46B,QAAAA,CAAA,CAAS,SAAA,CAAU,eAAA,CAAgB,CAAA,CACpC56B,GAAAA,CAAC,QAAK,SAAA,CAAU,YAAA,CAAa,8BAAkB,CAAA,CAAA,CACjD,CAAA,CACF,EACAO,IAAAA,CAAC+H,CAAAA,CAAA,CAAoB,KAAA,CAAM,KAAA,CAAM,SAAA,CAAU,YACzC,QAAA,CAAA,CAAAtI,GAAAA,CAACuI,EAAA,CAAiB,OAAA,CAASmyB,EAAY,QAAA,CAAA,MAAA,CAAI,CAAA,CAC3C16B,GAAAA,CAAC2I,CAAAA,CAAA,EAAsB,CAAA,CACvB3I,IAACuI,CAAAA,CAAA,CAAiB,QAASglB,CAAAA,CAAc,QAAA,CAAA,QAAA,CAAM,GACjD,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAEJ,CCvDO,SAASsN,EAAAA,CAA4B,CAAE,KAAA,CAAA3Q,CAAM,CAAA,CAAkD,CACpG,OACE3pB,IAAAA,CAAC4H,GAAAA,CAAA,CACC,QAAA,CAAA,CAAAnI,GAAAA,CAACoI,GAAAA,CAAA,CAAoB,OAAA,CAAO,IAAA,CAC1B,QAAA,CAAA7H,IAAAA,CAACiD,GAAAA,CAAA,CAAO,UAAU,6BAAA,CAA8B,IAAA,CAAK,KAAK,OAAA,CAAQ,SAAA,CAChE,UAAAxD,GAAAA,CAAC86B,SAAAA,CAAA,CAAU,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAAE,QAEjD,CAAA,CACF,CAAA,CACAv6B,KAAC+H,CAAAA,CAAA,CAAoB,MAAM,KAAA,CAAM,SAAA,CAAU,cAAA,CACzC,QAAA,CAAA,CAAAtI,GAAAA,CAAC+6B,GAAAA,CAAA,CAAkB,QAAA,CAAA,gBAAA,CAAc,CAAA,CACjC/6B,IAAC2I,CAAAA,CAAA,EAAsB,EACtBuhB,CAAAA,CACE,aAAA,EAAc,CACd,MAAA,CAAQF,CAAAA,EAAW,OAAOA,EAAO,UAAA,CAAe,GAAA,EAAeA,EAAO,UAAA,EAAY,EAClF,GAAA,CAAKA,CAAAA,EAEFhqB,GAAAA,CAACg7B,GAAAA,CAAA,CACC,OAAA,CAAShR,EAAO,YAAA,EAAa,CAC7B,UAAU,YAAA,CAEV,eAAA,CAAkBnX,GAAU,CAC1BmX,CAAAA,CAAO,gBAAA,CAAiB,CAAA,CAAQnX,CAAM,EACxC,EAEC,QAAA,CAAAmX,CAAAA,CAAO,IALHA,CAAAA,CAAO,EAMd,CAEH,CAAA,CAAA,CACL,CAAA,CAAA,CACF,CAEJ,CC3BO,SAASiR,EAAAA,CAAwB,CAAE,UAAA,CAAA7qB,CAAAA,CAAY,KAAA,CAAA8Z,CAAM,CAAA,CAA8C,CACxG,IAAM0D,CAAAA,CAAiBje,EAAAA,EAAY,CAC7B3E,CAAAA,CAAcC,GAAAA,EAAe,CAC7BiwB,EAAapN,GAAAA,EAAc,CAC3B,CAAE,QAAA,CAAA1pB,CAAAA,CAAU,gBAAA,CAAA0I,GAAiB,CAAA,CAAIzI,CAAAA,GACjC,CAAE,MAAA,CAAA0G,CAAO,CAAA,CAAIF,IAAAA,CAAKC,MAAAA,CAAOgC,GAAAA,EAAoB,EAAA,CAAI,WAAW,CAAC,CAAA,CAAE1I,CAAQ,EACvE,CAAC2T,CAAAA,CAAaE,EAAaC,CAAU,CAAA,CAAIJ,EAAAA,EAAkB,CAC3D,CAACqjB,CAAAA,CAAYC,CAAa,CAAA,CAAIt7B,QAAAA,CAAS,KAAK,CAAA,CAI5C2sB,CAAAA,CAAwBvC,EAAM,mBAAA,EAAoB,CAAE,IAAA,CAAK,GAAA,CAAKH,CAAAA,EAAQA,CAAAA,CAAI,SAAS,GAAa,CAAA,CAEtG,SAASsR,CAAAA,EAAqB,CAC5BzN,CAAAA,CAAe,CAAE,IAAA,CAAM,WAAA,CAAa,OAAA,CAAS,CAAE,UAAA,CAAAxd,CAAW,CAAE,CAAC,EAC/D,CAEA,SAASkkB,GAAAA,CAAkBzhB,EAAqB,CAC9C7H,CAAAA,CAAY,CAAE,IAAA,CAAM,UAAA,CAAY,OAAA,CAAS,CAAE,SAAA,CAAW8B,GAAAA,CAAkB,MAAO+F,CAAM,CAAE,CAAC,EAC1F,CAEA,eAAeyoB,CAAAA,CAAUlpB,CAAAA,CAA4B,CACnD,GAAM,CAAE,MAAA,CAAAhI,CAAO,CAAA,CAAIS,IAAAA,CAAKC,OAAOgC,GAAAA,EAAoB,EAAA,CAAI,WAAW,CAAC,CAAA,CAAE1I,CAAQ,EACvEwT,CAAAA,CAAWjB,EAAAA,CAAwBvG,CAAAA,CAAYhG,CAAAA,CAAQgI,CAAG,CAAA,CAEhE,MAAM,IAAI,OAAA,CAAeuG,CAAAA,EAAY,CACnCV,CAAAA,CAAYJ,GAAAA;AAAA,QAAA,EACRD,CAAQ;AAAA,MAAA,CACX,CAAA,CAEDM,CAAAA,CAAW,CACT,SAAA,CAAW,CAAE,KAAA,CAAO,CAAE,GAAA,CAAA9F,CAAI,CAAE,CAAA,CAC5B,MAAA,CAAOwG,EAAkD,CACvDA,CAAAA,CAAM,KAAA,CAAM,CAAE,EAAA,CAAIxG,CAAI,CAAC,EACzB,EACA,WAAA,CAAa,IAAM,CACjBuG,CAAAA,GACF,CACF,CAAC,CAAA,CAEDZ,EAAY,IAAI,EAClB,CAAC,EACH,CAEA,SAASwjB,GAAAA,EAA0B,CACjC,IAAMC,CAAAA,CAAYprB,CAAAA,GAAe,QAAA,CAAW,OAAA,CAAUA,CAAAA,CAAW,WAAA,EAAY,CAE7Ewd,EAAe,CACb,IAAA,CAAM,aAAA,CACN,OAAA,CAAS,CACP,OAAA,CAAS,CACP,WAAA,CAAa,UAAUnB,CAAAA,CAAY,MAAM,CAAA,CAAA,EAAI+O,CAAS,CAAA,EAAG/O,CAAAA,CAAY,MAAA,CAAS,CAAA,CAAI,IAAM,EAAE,CAAA,CAAA,CAC1F,aAAA,CACEA,CAAAA,CAAY,MAAA,CAAS,CAAA,CACjB,CAAA,6CAAA,EAAgD+O,CAAS,CAAA,oCAAA,CAAA,CACzD,CAAA,6CAAA,EAAgDA,CAAS,CAAA,uCAAA,CAAA,CAC/D,iBAAA,CAAmB,QAAA,CACnB,iBAAA,CAAmB,QAAA,CACnB,cAAe,IAAA,CACf,kBAAA,CAAoB,SAAY,CAC9BJ,CAAAA,CAAc,IAAI,CAAA,CAClB,GAAI,CACF,IAAA,IAAW/1B,CAAAA,IAAMonB,CAAAA,CAEf,MAAM6O,CAAAA,CAAUj2B,CAAE,CAAA,CAGpB6kB,CAAAA,CAAM,mBAAkB,CAExBrR,KAAAA,CAAM,OAAA,CAAQ4T,CAAAA,CAAY,MAAA,CAAS,CAAA,CAAI,6BAAA,CAAgC,4BAA4B,EACrG,CAAA,KAAQ,CACN5T,KAAAA,CAAM,KAAA,CAAM,kCAAkC,EAChD,CAAA,OAAE,CACAuiB,CAAAA,CAAc,KAAK,EACrB,CACF,CAAA,CACA,kBAAA,CAAoB,IAAM,CAE1B,CACF,CACF,CACF,CAAC,EACH,CAEA,OACE76B,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,4CAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gDAAA,CACZ,QAAA,CAAA,CAAAwK,CAAAA,EAAUA,CAAAA,CAAO,MAAA,CAAS,CAAA,CACzBxK,IAAAA,CAAC6E,GAAAA,CAAA,CACC,YAAA,CAAc81B,CAAAA,CAAW,MACzB,aAAA,CAAgBroB,CAAAA,EAAU,CACxByhB,GAAAA,CAAkBzhB,CAAK,EACzB,CAAA,CACA,KAAA,CAAOqoB,EAAW,KAAA,CAElB,QAAA,CAAA,CAAA36B,IAAAA,CAAC+E,CAAAA,CAAA,CAAc,SAAA,CAAU,qBAAA,CAAsB,EAAA,CAAG,UAChD,QAAA,CAAA,CAAAtF,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0BAAA,CAA2B,QAAA,CAAA,QAAA,CAAM,CAAA,CACjDA,GAAAA,CAACuF,GAAAA,CAAA,CAEK,QAAA,CAAA,CAAAsF,IAAAA,CAAKC,MAAAA,CAAOowB,CAAAA,CAAW,KAAA,EAAS,EAAA,CAAI,MAAM,CAAC,CAAA,CAAEnwB,CAAM,CAAA,EAAyC,IAAA,GAC1F,KAAA,CAER,CAAA,CAAA,CACF,CAAA,CACA/K,IAACwF,GAAAA,CAAA,CACE,QAAA,CAAAuF,CAAAA,CAAO,GAAA,CAAK4pB,CAAAA,EACX30B,GAAAA,CAACyF,CAAAA,CAAA,CAAgC,KAAA,CAAOkvB,CAAAA,CAAU,IAAA,CAC/C,QAAA,CAAAA,CAAAA,CAAU,KAAA,CAAA,CADIA,CAAAA,CAAU,IAE3B,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CACE,IAAA,CACJ30B,GAAAA,CAAC66B,EAAAA,CAAA,CAAqB,MAAO3Q,CAAAA,CAAO,CAAA,CAAA,CACtC,CAAA,CACCuC,CAAAA,CAAY,MAAA,CAAS,CAAA,CACpBlsB,IAAAA,CAACiD,GAAAA,CAAA,CACC,SAAA,CAAU,2BAAA,CACV,QAAA,CAAU23B,CAAAA,CACV,OAAA,CAASI,GAAAA,CACT,IAAA,CAAK,IAAA,CACL,QAAQ,aAAA,CAEP,QAAA,CAAA,CAAAJ,CAAAA,CACCn7B,GAAAA,CAACiE,OAAAA,CAAA,CAAQ,SAAA,CAAU,uCAAA,CAAwC,EAE3DjE,GAAAA,CAACwtB,MAAAA,CAAA,CAAO,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC1C,UAAA,CACOf,CAAAA,CAAY,OAAO,GAAA,CAAA,CAC9B,CAAA,CACE,IAAA,CACJzsB,GAAAA,CAACwD,GAAAA,CAAA,CACC,SAAA,CAAU,8BAAA,CACV,SAAU23B,CAAAA,CACV,OAAA,CAASE,CAAAA,CACT,IAAA,CAAK,IAAA,CACL,OAAA,CAAQ,SAAA,CACT,QAAA,CAAA,QAAA,CAED,GACF,CAEJ","file":"index.js","sourcesContent":["'use client';\n\nimport { useState, useEffect } from 'react';\nimport { ThemeProvider as NextThemesProvider } from 'next-themes';\nimport { type ThemeProviderProps } from 'next-themes/dist/types';\n\nexport function ThemeProvider({ children, ...props }: ThemeProviderProps): JSX.Element {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) {\n return <>{children}</>;\n }\n\n return <NextThemesProvider {...props}>{children}</NextThemesProvider>;\n}\n","import { useState, useEffect } from 'react';\nimport { Monitor, Moon, Sun } from 'lucide-react';\nimport { useTheme } from 'next-themes';\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","import { useTheme } from 'next-themes';\n\nexport function Loading(): JSX.Element {\n const { resolvedTheme } = useTheme();\n\n return (\n <div className=\"fk-flex fk-w-full fk-h-full fk-justify-center fk-items-center fk-bg-background\">\n <div className=\"fk-flex fk-flex-col fk-items-center\">\n {resolvedTheme === 'dark' ? (\n <svg\n className=\"fk-h-8 fk-w-8 fk-animate-bounce\"\n fill=\"none\"\n viewBox=\"0 0 48 48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7 8H41V40H7V8Z\" fill=\"#020817\" />\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=\"white\"\n />\n </svg>\n ) : (\n <svg\n className=\"fk-h-8 fk-w-8 fk-animate-bounce\"\n fill=\"none\"\n viewBox=\"0 0 48 48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M7 8H41V40H7V8Z\" fill=\"white\" />\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=\"#020817\"\n />\n </svg>\n )}\n <div className=\"fk-text-foreground fk-text-center fk-mt-4 fk-animate-pulse\">Loading...</div>\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from 'src/ui/lib/utils';\n\nconst alertVariants = cva(\n 'fk-relative fk-w-full fk-rounded-lg fk-border fk-p-4 [&>svg~*]:fk-pl-7 [&>svg+div]:fk-translate-y-[-3px] [&>svg]:fk-absolute [&>svg]:fk-left-4 [&>svg]:fk-top-4 [&>svg]:fk-text-foreground',\n {\n variants: {\n variant: {\n 'default': 'fk-bg-background fk-text-foreground',\n destructive: 'fk-border-none fk-text-destructive fk-bg-destructive-foreground [&>svg]:fk-text-destructive',\n success: 'fk-border-none fk-text-success fk-bg-success-foreground [&>svg]:fk-text-success',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div className={cn(alertVariants({ variant }), className)} ref={ref} role=\"alert\" {...props} />\n));\nAlert.displayName = 'Alert';\n\nconst AlertTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n // eslint-disable-next-line jsx-a11y/heading-has-content -- intentional, content is set later\n <h5 className={cn('fk-mb-1 fk-font-medium fk-leading-none fk-tracking-tight', className)} ref={ref} {...props} />\n )\n);\nAlertTitle.displayName = 'AlertTitle';\n\nconst AlertDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <div className={cn('fk-text-sm [&_p]:fk-leading-relaxed', className)} ref={ref} {...props} />\n )\n);\nAlertDescription.displayName = 'AlertDescription';\n\nexport { Alert, AlertTitle, AlertDescription };\n","'use client';\n\nimport { useEffect, 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 } from '../core/api-paths';\n\nconst formSchema = z.object({\n email: z.string().email({ message: 'Please enter a valid email address' }),\n});\n\nexport default function EmailLogin({\n projectId,\n setIsEmailLogin,\n}: {\n projectId: string;\n setIsEmailLogin: Dispatch<SetStateAction<boolean>>;\n}): JSX.Element {\n const [hasOtpExpired, setHasOtpExpired] = useState(false);\n const [shouldSendOtp, setShouldSendOtp] = useState(false);\n const { mutate } = useSWRConfig();\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n email: '',\n },\n });\n const sendOtpUrl = new URL(apiPaths(projectId).loginOtpSend, baseApiUrl);\n const { data, error, isLoading } = useSWR(\n shouldSendOtp ? sendOtpUrl.href : null,\n (url: string) =>\n fetch(url, { method: 'POST', mode: 'cors', body: JSON.stringify({ email: form.getValues('email') }) }).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 confirmOtpUrl = new URL(apiPaths(projectId).loginOtpConfirm, baseApiUrl);\n const setTokenUrl = '/api/flexkit/set-token';\n fetch(`${confirmOtpUrl.href}?email=${form.getValues('email')}&token=${token}`)\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 window.location.reload();\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 }, [form, hasOtpBeenSent, projectId, token]);\n\n function handleEmailLogin(): void {\n setHasOtpExpired(false);\n setShouldSendOtp(true);\n void mutate(sendOtpUrl.href);\n }\n\n return (\n <div className=\"fk-w-full\">\n {hasOtpBeenSent ? (\n <Alert variant=\"success\">\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 hover:fk-underline dark:fk-text-background\"\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 dark:fk-text-white/90 fk-underline\"\n href={`https://flexkit.io/signup/email?email=${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 hover:fk-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 hover:fk-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 { useState } from 'react';\nimport useSWR from 'swr';\nimport { Navigate, 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 } from '../core/api-paths';\nimport { useConfig } from '../core/config/config-context';\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\nexport function Login({ projectId }: { projectId: string }): JSX.Element {\n const { projects } = useConfig();\n const [selectedProject, setSelectedProject] = useState(\n projects.find((project) => project.projectId === projectId) ?? projects[0]\n );\n const [isEmailLogin, setIsEmailLogin] = useState(false);\n const { data, error, isLoading } = useSWR(apiPaths(projectId).authProviders, (url: string) =>\n fetch(url, { mode: 'cors' }).then((res) => res.json() as Promise<{ providers: Provider[] }>)\n );\n const [isAuthLoading, auth] = useAuth();\n const copyrightYear = new Date().getFullYear();\n const currentRouterLocation = useLocation();\n const referal: string =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- generic \"any\" typing comes from react-router-dom\n currentRouterLocation.state?.from?.pathname ?? currentRouterLocation.pathname;\n\n const fromPath = referal.includes(selectedProject.projectId)\n ? `${location.origin}${referal}`\n : `${location.origin}${selectedProject.basePath}/${selectedProject.projectId}`;\n\n if (error) {\n throw new Error('Error fetching auth providers');\n }\n\n if (isLoading || isAuthLoading || !data) {\n return <Loading />;\n }\n\n if (auth.user?.id) {\n return <Navigate replace state={{ from: currentRouterLocation }} to={selectedProject.basePath} />;\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 lg:fk-px-0\">\n <div className=\"fk-w-full lg:fk-p-8\">\n <div className=\"fk-mx-auto fk-flex fk-flex-col fk-justify-center sm:fk-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 {projects.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={selectedProject.projectId}\n onValueChange={(id) => {\n setSelectedProject(projects.find((project) => project.projectId === id) ?? projects[0]);\n }}\n >\n <SelectTrigger className=\"fk-mb-4 fk-w-full fk-h-9 fk-py-1\" id=\"project\">\n <SelectValue aria-label={selectedProject.title}>{selectedProject.title}</SelectValue>\n </SelectTrigger>\n <SelectContent>\n {projects.map((project) => (\n <SelectItem key={project.projectId} value={project.projectId}>\n {project.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ) : null}\n {isEmailLogin ? (\n <EmailLogin projectId={projectId} setIsEmailLogin={setIsEmailLogin} />\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={`${provider.button.color} ${provider.button.backgroundColor} hover:${provider.button.colorHover} 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: selectedProject.projectId,\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-[7rem]\" 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 after:fk-content-['|'] after:fk-pl-6\">\n <a className=\"fk-underline-offset-4 hover:fk-text-primary\" href=\"https://www.flexkit.io\">\n flexkit.io\n </a>\n </li>\n <li className=\"fk-pr-6 after:fk-content-['|'] after:fk-pl-6\">\n <a className=\"fk-underline-offset-4 hover:fk-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 hover:fk-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 hover:!fk-bg-bitbucket-hover\" />\n <div className=\"fk-hidden !fk-bg-github hover:!fk-bg-github-hover\" />\n <div className=\"fk-hidden !fk-text-muted-foreground !fk-bg-white hover:!fk-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 dark:fk-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 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 params.set('projectId', projectId);\n params.set('redirect', fromPath);\n\n return `${url}?${params.toString()}`;\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","'use client';\n\nimport { useTheme } from 'next-themes';\nimport { Toaster as Sonner } from 'sonner';\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nfunction Toaster({ ...props }: ToasterProps): JSX.Element {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n className=\"toaster fk-group\"\n theme={theme as ToasterProps['theme']}\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:fk-bg-background group-[.toaster]:fk-text-foreground group-[.toaster]:fk-border-border group-[.toaster]:fk-shadow-lg',\n description: 'group-[.toast]:fk-text-muted-foreground',\n actionButton: 'group-[.toast]:fk-bg-primary group-[.toast]:fk-text-primary-foreground',\n cancelButton: 'group-[.toast]:fk-bg-muted group-[.toast]:fk-text-muted-foreground',\n success:\n 'group-[.toaster]:!fk-bg-emerald-500 group-[.toaster]:!fk-border-emerald-500 group-[.toaster]:!fk-text-white',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { Toaster };\n","import { useEffect, useRef, useState } from 'react';\nimport { MoreHorizontal, PackageCheck, PackageX, Settings, Wrench } from 'lucide-react';\nimport { Link, NavLink, Navigate, useLocation, useParams } from 'react-router-dom';\nimport { Button } from '../primitives/button';\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 apps: AppOptions[];\n version: {\n current: string;\n latest: string;\n isCurrent: boolean;\n };\n};\n\nexport function AppBar({ apps, 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 currentAppSegmentPath = apps.find((app) => location.pathname.includes(`/${projectId}/${app.name}`))?.name;\n const activeApp = apps.find((app) => location.pathname.includes(`/${projectId}/${app.name}`))?.name ?? apps[0]?.name;\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 }, [currentAppSegmentPath]);\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 if (currentAppSegmentPath === undefined && activeApp) {\n return <Navigate to={`${location.pathname}/${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 data-[state=active]:fk-border-l-current focus-visible:fk-outline-none focus-visible:fk-ring-0 focus-visible:fk-ring-offset-0 focus-visible:fk-border-2 focus-visible:fk-border-ring focus-visible:fk-rounded-sm\"\n >\n <NavLink\n className=\"fk-text-muted-foreground aria-[current]:fk-text-foreground aria-[current]:fk-bg-background aria-[current]:fk-border-l-white\"\n to={app.name}\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 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-none fk-focus-visible:border-2 fk-focus-visible:border-ring fk-focus-visible:rounded-sm\">\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={app.name}>{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-none fk-focus-visible:border-2 fk-focus-visible:border-ring fk-focus-visible:rounded-sm\">\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 { lazy } from 'react';\nimport type { ComponentType, LazyExoticComponent } from 'react';\nimport { useConfig } from './config/config-context';\nimport { PluginOptions } from './config/types';\nimport type { LogoProps, ProjectSelectorProps, SearchProps, UserNavProps } from './config/types';\nimport type { FormFieldParams } from '../form/types';\nimport type { Asset } from '../data-grid/preview-components/asset';\n\ninterface ContributionPointMap {\n 'navbar.logo': LazyExoticComponent<ComponentType<LogoProps>>;\n 'navbar.projectSelector': LazyExoticComponent<ComponentType<ProjectSelectorProps>>;\n 'navbar.search': LazyExoticComponent<ComponentType<SearchProps>>;\n 'navbar.userNav': LazyExoticComponent<ComponentType<UserNavProps>>;\n 'formFields.switch': LazyExoticComponent<ComponentType<FormFieldParams<'switch'>>>;\n 'formFields.text': LazyExoticComponent<ComponentType<FormFieldParams<'text'>>>;\n 'formFields.textarea': LazyExoticComponent<ComponentType<FormFieldParams<'textarea'>>>;\n 'previewFields.boolean': LazyExoticComponent<ComponentType<{ value: boolean }>>;\n 'previewFields.asset': LazyExoticComponent<ComponentType<{ value: Asset }>>;\n 'previewFields.text': LazyExoticComponent<ComponentType<{ value: string }>>;\n 'previewFields.editor': LazyExoticComponent<ComponentType<{ value: string }>>;\n 'previewFields.datetime': LazyExoticComponent<ComponentType<{ value: string }>>;\n}\n\nconst contributionPointMap: ContributionPointMap = {\n // navbar\n 'navbar.logo': lazy(() => import('../ui/components/logo.js').then(({ Logo }) => ({ 'default': Logo }))),\n 'navbar.projectSelector': lazy(() =>\n import('../ui/components/project-selector.js').then(({ ProjectSelector }) => ({ 'default': ProjectSelector }))\n ),\n 'navbar.search': lazy(() => import('../ui/components/search.js').then(({ Search }) => ({ 'default': Search }))),\n 'navbar.userNav': lazy(() => import('../ui/components/user-nav.js').then(({ UserNav }) => ({ 'default': UserNav }))),\n // form fields\n 'formFields.switch': lazy(() => import('../form/fields/switch.js').then(({ Switch }) => ({ 'default': Switch }))),\n 'formFields.text': lazy(() => import('../form/fields/text.js').then(({ Text }) => ({ 'default': Text }))),\n 'formFields.textarea': lazy(() =>\n import('../form/fields/textarea.js').then(({ Textarea }) => ({ 'default': Textarea }))\n ),\n // preview fields\n 'previewFields.boolean': lazy(() =>\n import('../data-grid/preview-components/boolean.js').then(({ Boolean }) => ({ 'default': Boolean }))\n ),\n 'previewFields.asset': lazy(() =>\n import('../data-grid/preview-components/asset.js').then(({ Asset }) => ({ 'default': Asset }))\n ),\n 'previewFields.text': lazy(() =>\n import('../data-grid/preview-components/text.js').then(({ Text }) => ({ 'default': Text }))\n ),\n 'previewFields.editor': lazy(() =>\n import('../data-grid/preview-components/editor.js').then(({ Editor }) => ({ 'default': Editor }))\n ),\n 'previewFields.datetime': lazy(() =>\n import('../data-grid/preview-components/datetime.js').then(({ DateTime }) => ({ 'default': DateTime }))\n ),\n};\n\nexport function useContributedComponent<T extends keyof ContributionPointMap>(\n contributionPoint: T\n): ContributionPointMap[T] {\n const { getContributionPointConfig } = useConfig();\n const [section, ...pathParts] = contributionPoint.split('.');\n const defaultComponent = contributionPointMap[contributionPoint];\n const contributionPointConfig = getContributionPointConfig(\n section as keyof PluginOptions['contributes'],\n pathParts\n ) as unknown as { component: ContributionPointMap[T] }[];\n\n return contributionPointConfig?.length > 0 ? contributionPointConfig[0]?.component : defaultComponent;\n}\n","import { useNavigate } from 'react-router-dom';\nimport { Suspense, startTransition } from 'react';\nimport { useTheme } from 'next-themes';\nimport type { ProjectOptions } from '../../core/config/types';\nimport { useContributedComponent } from '../../core/use-contributed-component';\n\ntype Props = {\n projectId: string;\n projects: ProjectOptions[];\n};\n\nexport function Navbar({ projectId, projects }: Props): JSX.Element {\n const { resolvedTheme } = useTheme();\n const Logo = useContributedComponent('navbar.logo');\n const ProjectSelector = useContributedComponent('navbar.projectSelector');\n const Search = useContributedComponent('navbar.search');\n const UserNav = useContributedComponent('navbar.userNav');\n const currentProject = projects.find((project) => project.projectId === projectId) ?? projects[0];\n const { basePath, schema } = currentProject;\n const navigate = useNavigate();\n\n function handleSearchSelection(item: { entityName: string; entityNamePlural: string; entityId: string }) {\n startTransition(() => {\n navigate(`${basePath}/${projectId}/desk/list/${item.entityNamePlural}?id=${item.entityId}`);\n });\n }\n\n return (\n <div className=\"fk-flex fk-basis-14 fk-min-h-[3.5rem] fk-px-3 fk-gap-x-4 fk-border-b fk-border-border fk-z-20\">\n <Suspense fallback={null}>\n <Logo theme={resolvedTheme} title=\"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 projectId={projectId} projects={projects} />\n </Suspense>\n <Suspense fallback={null}>\n <Search onSelect={handleSearchSelection} projectId={projectId} schema={schema} />\n </Suspense>\n </div>\n <div className=\"fk-flex fk-items-center\">\n <Suspense fallback={null}>\n <UserNav projectId={projectId} />\n </Suspense>\n </div>\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { Outlet, useParams, useLocation } from 'react-router-dom';\nimport { find, propEq } from 'ramda';\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 type { SingleProject } from '../../core/config/types';\nimport { FlexkitError } from '../../core/error/errors';\nimport { Loading } from '../components/loading';\nimport { Toaster } from '../primitives/sonner';\nimport { AppBar } from './appbar';\nimport { Navbar } from './navbar';\n\ntype Props = {\n version: {\n current: string;\n latest: string;\n isCurrent: boolean;\n };\n};\n\nexport function Layout({ version }: Props): JSX.Element {\n const { contributions, projects } = useConfig();\n const [isLoading, auth] = useAuth();\n const { projectId } = useParams();\n\n const project = find(propEq(projectId ?? '', 'projectId'))(projects) as SingleProject | undefined;\n\n if (!project) {\n throw new FlexkitError('PROJECT_NOT_FOUND');\n }\n\n const { scopes } = project;\n const { apps } = contributions;\n const appDispatch = useAppDispatch();\n const location = useLocation();\n\n useEffect(() => {\n if (scopes) {\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 }, [location]);\n\n if (isLoading) {\n return <Loading />;\n }\n\n if (!auth.user?.id) {\n return <Login projectId={projectId ?? ''} />;\n }\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 ?? ''} 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} />\n <Outlet />\n </div>\n </div>\n <Toaster />\n </>\n );\n}\n","import type { ErrorLike } from '@apollo/client';\nimport { ServerError } from '@apollo/client/errors';\n\ntype ErrorWithCause = ErrorLike & { cause?: unknown };\n\nfunction hasCause(error: ErrorLike): error is ErrorWithCause {\n if (!error) {\n return false;\n }\n\n return 'cause' in (error as ErrorWithCause);\n}\n\nexport function getServerError(error?: ErrorLike): ServerError | null {\n if (!error) {\n return null;\n }\n\n if (ServerError.is(error)) {\n return error;\n }\n\n if (hasCause(error)) {\n const possibleServerError = error.cause;\n\n if (ServerError.is(possibleServerError)) {\n return possibleServerError;\n }\n }\n\n return null;\n}\n\nexport function parseErrorBody<T>(bodyText: string | undefined): T | null {\n if (!bodyText) {\n return null;\n }\n\n try {\n return JSON.parse(bodyText) as T;\n } catch {\n return null;\n }\n}\n","'use client';\n\nimport { ApolloClient, InMemoryCache, defaultDataIdFromObject, from, HttpLink } from '@apollo/client';\nimport type { ApolloLink } from '@apollo/client';\nimport { ApolloProvider } from '@apollo/client/react';\nimport { ErrorLink } from '@apollo/client/link/error';\nimport { CombinedGraphQLErrors, CombinedProtocolErrors } from '@apollo/client/errors';\nimport { getServerError, parseErrorBody } from './error-utils';\nimport { useConfig } from '../core/config/config-context';\nimport React, { createContext, useContext, useMemo, useState } from 'react';\n\ntype GraphQLErrorContextValue = {\n schemaErrorMessage: string | null;\n setSchemaErrorMessage: React.Dispatch<React.SetStateAction<string | null>>;\n};\n\nconst GraphQLErrorContext = createContext<GraphQLErrorContextValue | undefined>(undefined);\n\nfunction useGraphQLError(): GraphQLErrorContextValue {\n const ctx = useContext(GraphQLErrorContext);\n\n if (!ctx) {\n throw new Error('useGraphQLError must be used within GraphQLProvider');\n }\n\n return ctx;\n}\n\nfunction createErrorLink(setSchemaErrorMessage: (msg: string | null) => void): ApolloLink {\n return new ErrorLink(({ error }) => {\n if (CombinedGraphQLErrors.is(error)) {\n error.errors.forEach(({ message, locations, path }) => {\n console.log(`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`);\n });\n } else if (CombinedProtocolErrors.is(error)) {\n error.errors.forEach(({ message, extensions }) => {\n console.log(`[Protocol error]: Message: ${message}, Extensions: ${JSON.stringify(extensions)}`);\n });\n }\n\n const serverError = getServerError(error);\n\n if (serverError?.statusCode === 400) {\n const responseBody = parseErrorBody<Record<string, unknown>>(serverError.bodyText);\n let message: string | null = null;\n\n if (responseBody && typeof responseBody === 'object') {\n if (typeof responseBody.message === 'string') {\n message = responseBody.message;\n } else if (Array.isArray((responseBody as { errors?: unknown }).errors)) {\n const errorsArray = (responseBody as { errors?: unknown }).errors as unknown[];\n const firstError = errorsArray[0] as { message?: unknown } | undefined;\n\n if (firstError && typeof firstError.message === 'string') {\n message = firstError.message;\n }\n } else if (typeof (responseBody as { error?: unknown }).error === 'string') {\n message = (responseBody as { error?: unknown }).error as string;\n } else {\n message = JSON.stringify(responseBody);\n }\n } else {\n message = serverError.bodyText;\n }\n\n setSchemaErrorMessage(message ?? 'There is an error in your Flexkit schema (flexkit.config.ts).');\n }\n\n if (serverError) {\n console.log(`[Network error]: ${serverError.message}`);\n\n return;\n }\n\n if (error) {\n console.log(`[Network error]: ${error.message}`);\n }\n });\n}\n\nfunction additiveLink(currentProjectId: string, setSchemaErrorMessage: (msg: string | null) => void): ApolloLink {\n return from([\n createErrorLink(setSchemaErrorMessage),\n new HttpLink({ uri: `/api/flexkit/${currentProjectId}/graphql` }),\n ]);\n}\n\nfunction client(\n currentProjectId: string | undefined,\n setSchemaErrorMessage: (msg: string | null) => void\n): ApolloClient {\n return new ApolloClient({\n link: additiveLink(currentProjectId ?? '', setSchemaErrorMessage),\n cache: new InMemoryCache({\n dataIdFromObject: (responseObject) => {\n return responseObject._id ? (responseObject._id as string) : defaultDataIdFromObject(responseObject);\n },\n }),\n });\n}\n\nexport function GraphQLProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const { currentProjectId } = useConfig();\n const [schemaErrorMessage, setSchemaErrorMessage] = useState<string | null>(null);\n const ctx = useMemo(() => ({ schemaErrorMessage, setSchemaErrorMessage }), [schemaErrorMessage]);\n\n return (\n <GraphQLErrorContext.Provider value={ctx}>\n <ApolloProvider client={client(currentProjectId, setSchemaErrorMessage)}>{children}</ApolloProvider>\n </GraphQLErrorContext.Provider>\n );\n}\n\nexport { useGraphQLError };\n","'use client';\n\nimport * as React from 'react';\nimport * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';\nimport { cn } from 'src/ui/lib/utils';\nimport { buttonVariants } from './button';\n\nconst AlertDialog = AlertDialogPrimitive.Root;\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger;\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal;\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n 'fk-fixed fk-inset-0 fk-z-50 fk-bg-overlay/75 fk-backdrop-blur-[1px] fk- data-[state=open]:fk-animate-in data-[state=closed]:fk-animate-out data-[state=closed]:fk-fade-out-0 data-[state=open]:fk-fade-in-0',\n className\n )}\n {...props}\n ref={ref}\n />\n));\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n className={cn(\n 'fk-fixed fk-left-[50%] fk-top-[50%] fk-z-50 fk-grid fk-w-full fk-max-w-lg fk-translate-x-[-50%] fk-translate-y-[-50%] fk-gap-4 fk-border fk-bg-background fk-p-6 fk-shadow-lg fk-duration-200 data-[state=open]:fk-animate-in data-[state=closed]:fk-animate-out data-[state=closed]:fk-fade-out-0 data-[state=open]:fk-fade-in-0 data-[state=closed]:fk-zoom-out-95 data-[state=open]:fk-zoom-in-95 data-[state=closed]:fk-slide-out-to-left-1/2 data-[state=closed]:fk-slide-out-to-top-[48%] data-[state=open]:fk-slide-in-from-left-1/2 data-[state=open]:fk-slide-in-from-top-[48%] sm:fk-rounded-lg',\n className\n )}\n ref={ref}\n {...props}\n />\n </AlertDialogPortal>\n));\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;\n\nfunction AlertDialogHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): JSX.Element {\n return (\n <div className={cn('fk-flex fk-flex-col fk-space-y-2 fk-text-center sm:fk-text-left', className)} {...props} />\n );\n}\nAlertDialogHeader.displayName = 'AlertDialogHeader';\n\nfunction AlertDialogFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): JSX.Element {\n return (\n <div\n className={cn('fk-flex fk-flex-col-reverse sm:fk-flex-row sm:fk-justify-end sm:fk-space-x-2', className)}\n {...props}\n />\n );\n}\nAlertDialogFooter.displayName = 'AlertDialogFooter';\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title className={cn('fk-text-lg fk-font-semibold', className)} ref={ref} {...props} />\n));\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n className={cn('fk-text-sm fk-text-muted-foreground', className)}\n ref={ref}\n {...props}\n />\n));\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action className={cn(buttonVariants(), className)} ref={ref} {...props} />\n));\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n className={cn(buttonVariants({ variant: 'outline' }), 'fk-mt-2 sm:fk-mt-0', className)}\n ref={ref}\n {...props}\n />\n));\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n};\n","'use client';\n\nimport { useEffect, useState } 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\n try {\n const maybePromise = options.dialogActionSubmit?.();\n\n if (maybePromise && typeof (maybePromise as Promise<void>).then === 'function') {\n await (maybePromise as Promise<void>);\n }\n } finally {\n setIsClosingFromSubmit(true);\n setIsOpen(false);\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 { createContext, useContext, useReducer } from 'react';\nimport type { Dispatch, ReactNode } from 'react';\nimport { props, uniqBy } from 'ramda';\nimport type {\n Action,\n ActionAddEntity,\n ActionAlertDialog,\n ActionDeleteEntity,\n ActionEditEntity,\n ActionEditRelationship,\n} from './types';\n\nconst ActionsContext = createContext<Action[] | []>([]);\nconst EntityDispatchContext = createContext<Dispatch<Action>>(() => undefined);\n\nfunction actionsReducer(actions: Action[], action: Action): Action[] {\n const actionType = action.type;\n\n if (!action._id) {\n action._id = Date.now().toString();\n }\n\n switch (actionType) {\n case 'DeleteEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionDeleteEntity[]), action]);\n }\n case 'AddEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionAddEntity[]), action]);\n }\n case 'EditEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionEditEntity[]), action]);\n }\n case 'EditRelationship': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionEditRelationship[]), action]);\n }\n case 'AlertDialog': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionAlertDialog[]), action]);\n }\n case 'Dismiss': {\n return actions.filter((item) => item._id !== action._id);\n }\n default: {\n throw Error(`Unknown action: ${actionType as string}`);\n }\n }\n}\n\nfunction ActionsProvider({ children }: { children: ReactNode }): JSX.Element {\n const [entityActions, dispatchEntityActions] = useReducer(actionsReducer, []);\n\n return (\n <ActionsContext.Provider value={entityActions}>\n <EntityDispatchContext.Provider value={dispatchEntityActions}>{children}</EntityDispatchContext.Provider>\n </ActionsContext.Provider>\n );\n}\n\nfunction useActions(): Action[] {\n return useContext(ActionsContext);\n}\n\nfunction useDispatch(): Dispatch<Action> {\n return useContext(EntityDispatchContext);\n}\n\nexport { ActionsProvider, useActions, useDispatch };\n","import { filter, find, pick, propEq, toPairs, omit } from 'ramda';\nimport { v4 as uuidv4 } from 'uuid';\nimport { assetSchema } from '../entities/assets-schema';\nimport { tagSchema } from '../entities/tags-schema';\nimport type { Attribute, Entity, DataType, Schema, ScopeType, MultipleRelationshipConnection } from '../core/types';\nimport type {\n AttributeValue,\n EntityData,\n EntityItem,\n EntityQueryAggregate,\n EntityQueryResults,\n FormEntityItem,\n FormFieldValue,\n MappedEntityItem,\n MappedEntityQueryResults,\n MappedFormEntityQueryResults,\n EntityQueryResult,\n ImageValue,\n} from './types';\n\ntype EntityQuery = {\n queryEntityName: string;\n query: string;\n};\n\nconst stringTypes: DataType[] = ['id', 'string'];\nconst temporalTypes: DataType[] = ['date', 'datetime', 'duration', 'time'];\n\nexport function getEntityQuery(entityNamePlural: string, scope: string, schema: Schema): EntityQuery {\n const filters = `(where: $where, options: $options)`;\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const entityName = entitySchema?.name ?? entityNamePlural;\n const attributes = entitySchema?.attributes ?? [];\n const heading = `$where: ${entityName}Where, $options: ${entityName}Options`;\n\n if (!entitySchema) {\n throw new Error(`Entity '${entityName}' not found in the schema`);\n }\n\n if (attributes.length === 0) {\n throw new Error(`Entity '${entityName}' has no attributes defined in the schema`);\n }\n\n const globalAttributesList: string = getAttributeListByScope('global', attributes).join('\\n ');\n const imageAttributes: string[] = getImageAttributes(attributes);\n const localAttributes: readonly string[] = getAttributeListByScope(['local'], attributes);\n const defaultScopedAttr = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n }\\n `,\n ''\n );\n const scopedAttribute = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n ${scope}\\n }\\n `,\n ''\n );\n const localAttributesList: string = scope === 'default' ? defaultScopedAttr : scopedAttribute;\n const imageAttributesList: string = imageAttributes.reduce((acc, attribute) => {\n return `${acc}\\n ${attribute} {\\n _id\\n originalFilename\\n mimeType\\n path\\n size\\n height\\n width\\n lqip\\n }\\n `;\n }, '');\n\n const relationshipAttributes = filter(propEq('relationship', 'scope'))(attributes);\n const relationshipAttributesList: string = relationshipAttributes.reduce((acc, attribute) => {\n const relatedEntity = find(propEq(attribute.relationship?.entity, 'name'))(schema) as Entity | undefined;\n const attributesNameList = relatedEntity?.attributes.reduce((relatedAcc, relatedAttribute) => {\n const additionalScope = scope === 'default' ? '' : `${scope}\\n `;\n\n if (relatedAttribute.dataType === 'asset') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n _id\\n originalFilename\\n mimeType\\n path\\n size\\n height\\n width\\n lqip\\n }\\n `;\n }\n\n if (relatedAttribute.scope === 'local') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n _id\\n default\\n ${additionalScope}\\n}\\n `;\n }\n\n if (relatedAttribute.scope === 'relationship') {\n const relationshipEntity = find(propEq(relatedAttribute.relationship?.entity, 'name'))(schema) as\n | Entity\n | undefined;\n const relationshipAttribute = find(propEq(relatedAttribute.relationship?.field, 'name'))(\n relationshipEntity?.attributes ?? []\n ) as Attribute;\n const localAttributeQuery =\n relationshipAttribute.scope === 'local'\n ? `{\\n _id\\n default\\n ${additionalScope}}\\n `\n : '';\n\n if (relatedAttribute.relationship?.mode === 'single') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n\n if (relatedAttribute.relationship?.field) {\n return `${relatedAcc}\\n ${relatedAttribute.name} (options: {limit: 25, offset: 0}) {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n }\n\n return `${relatedAcc}\\n ${relatedAttribute.name}\\n `;\n }, '');\n\n return (\n `${attribute.name}Aggregate {\\n` +\n ` count\\n` +\n ` }` +\n `${acc}\\n ${attribute.name} (options: {limit: 25, offset: 0}) { _id ${attributesNameList ?? ''}` +\n `}\\n `\n );\n }, '');\n\n return {\n queryEntityName: entityNamePlural,\n query:\n `query getEntity(${heading}) {\\n` +\n ` ${entityNamePlural}Aggregate {\\n` +\n ` count\\n` +\n ` }\\n` +\n ` ${entityNamePlural}${filters} {\\n` +\n ` _id\\n` +\n ` ${globalAttributesList}` +\n ` ${localAttributesList}` +\n ` ${imageAttributesList}` +\n ` ${relationshipAttributesList}` +\n `}\\n` +\n `}\\n`,\n };\n}\n\n/**\n * Map the GraphQl results JSON to a key-value pair array. The values inside the scopedAttributes key are flattened to the first level.\n */\nexport function mapQueryResult(\n entityNamePlural: string,\n scope: string,\n results: EntityQueryResults,\n schema: Schema\n): MappedEntityQueryResults {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const attributes = entitySchema?.attributes ?? [];\n\n if (attributes.length === 0) {\n return {\n count: 0,\n results: [],\n };\n }\n\n const { count } = results[`${entityNamePlural}Aggregate`] as EntityQueryAggregate;\n const items = results[entityNamePlural] as EntityQueryResult[];\n const sliceFirstThreeItems = (values: EntityItem[], primaryAttribute: Attribute): string => {\n const primaryAttributeName = primaryAttribute.name;\n\n return values\n .slice(0, 3)\n .map((item) =>\n primaryAttribute.scope === 'local'\n ? (item[primaryAttributeName]?.[scope] ?? item[primaryAttributeName].default)\n : item[primaryAttributeName]\n )\n .join(', ');\n };\n const mappedQueryResult = items.map((entity) => {\n const { _id } = entity;\n const globalAttributes = getAttributeListByScope('global', attributes).reduce(\n (acc, attributeName) => ({ ...acc, [attributeName]: entity[attributeName] }),\n {}\n );\n const localAttributes = getAttributeListByScope('local', attributes).reduce((acc, attributeName) => {\n const scopedAttribute = entity[attributeName] as AttributeValue | null;\n\n return {\n ...acc,\n [attributeName]: scopedAttribute?.[scope] ? scopedAttribute[scope] : scopedAttribute?.default,\n };\n }, {});\n const imageAttributes = getImageAttributes(attributes).reduce(\n (acc, attributeName) => ({ ...acc, [attributeName]: entity[attributeName] }),\n {}\n );\n const relationshipAttributes = getAttributeListByScope(['relationship'], attributes).reduce(\n (acc, attributeName) => {\n const relationshipAttribute = find(propEq(attributeName, 'name'))(attributes) as Attribute;\n const relatedEntityName = relationshipAttribute.relationship?.entity ?? '';\n const relatedEntity = find(propEq(relatedEntityName, 'name'))(schema) as Entity | undefined;\n const primaryAttribute = getPrimaryAttribute(relatedEntity?.attributes ?? []);\n const primaryAttributeName = primaryAttribute?.name ?? '';\n const primaryAttributeScope = primaryAttribute?.scope ?? 'global';\n const localValue = entity[attributeName] as AttributeValue | null;\n\n if (!primaryAttributeName) {\n throw new Error(`There is an error in the schema for the relationship attribute \"${attributeName}\"`);\n }\n\n if (Array.isArray(localValue)) {\n return {\n ...acc,\n [attributeName]: sliceFirstThreeItems(localValue, primaryAttribute),\n };\n }\n\n const value =\n primaryAttributeScope === 'global'\n ? localValue?.[primaryAttributeName]\n : ((localValue?.[primaryAttributeName] as AttributeValue | undefined)?.[scope] ??\n (localValue?.[primaryAttributeName] as AttributeValue | undefined)?.default);\n\n return {\n ...acc,\n [attributeName]: value,\n };\n },\n {}\n );\n\n return { _id, ...globalAttributes, ...localAttributes, ...imageAttributes, ...relationshipAttributes };\n });\n\n return {\n count,\n results: mappedQueryResult,\n };\n}\n\n/**\n * Like mapQueryResult but the local attribute values are returned as an object:\n * \\{_id: string, value: string, disabled: boolean, scope: string\\}.\n */\nexport function mapQueryResultForFormFields(\n entityNamePlural: string,\n scope: string,\n results: EntityQueryResults,\n schema: Schema\n): MappedFormEntityQueryResults {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const attributes = entitySchema?.attributes ?? [];\n\n if (attributes.length === 0) {\n return {\n count: 0,\n results: [],\n };\n }\n\n const { count } = results[`${entityNamePlural}Aggregate`] as EntityQueryAggregate;\n const items = results[entityNamePlural] as EntityQueryResult[];\n const mappedQueryResult = items.map((entity) => {\n const globalAttributes = getAttributeListByScope('global', attributes).reduce(\n (acc, attribute) => ({\n ...acc,\n [attribute]: {\n value: entity[attribute],\n disabled: false,\n scope: 'default',\n _id: '',\n },\n }),\n {}\n );\n const localAttributes = getAttributeListByScope('local', attributes).reduce((acc, attributeName) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(attributes) as Attribute;\n const localAttribute = entity[attributeName] as AttributeValue | null;\n\n return {\n ...acc,\n [attributeName]: {\n value: localAttribute ? getValueByScope(localAttribute, scope) : null,\n disabled: Boolean(\n localAttribute && localAttribute[scope] === null && attributeSchema.scope === 'local' && scope !== 'default'\n ),\n scope,\n _id: localAttribute ? localAttribute._id : null,\n },\n };\n }, {});\n const imageAttributes = getImageAttributes(attributes).reduce(\n (acc, attribute) => ({\n ...acc,\n [attribute]: {\n value: entity[attribute],\n disabled: false,\n scope: 'default',\n _id: '',\n },\n }),\n {}\n );\n const relationshipAttributes = getAttributeListByScope(['relationship'], attributes).reduce(\n (acc, attributeName) => {\n const value = entity[attributeName] as AttributeValue | null;\n const _id = value?._id;\n const aggregateCount = (entity[`${attributeName}Aggregate`] as AttributeValue).count;\n\n return {\n ...acc,\n [attributeName]: {\n count: aggregateCount,\n _id,\n value,\n disabled: false,\n scope,\n },\n };\n },\n {}\n );\n\n return { ...globalAttributes, ...localAttributes, ...imageAttributes, ...relationshipAttributes };\n });\n\n return {\n count,\n results: mappedQueryResult,\n };\n}\n\n/**\n * Attribute values can be an object or an array of objects if the attribute is a multi-select.\n */\nfunction getValueByScope(\n attribute: AttributeValue | AttributeValue[],\n scope: string\n): FormFieldValue[] | AttributeValue | string | null {\n if (Array.isArray(attribute)) {\n return attribute.reduce((result: FormFieldValue[], attr: AttributeValue) => {\n if (attr[scope] ?? attr.default) {\n const option = {\n _id: attr._id,\n disabled: Boolean(attr.scope === null && scope !== 'default'),\n scope,\n value: attr[scope] ?? attr.default,\n };\n\n result.push(option);\n }\n\n return result;\n }, []);\n }\n\n return attribute[scope] ?? attribute.default ?? null;\n}\n\n/**\n * Returns a string with the GraphQl query needed to mutate the dataToMutate object for the given entity and scope.\n */\nexport function getEntityUpdateMutation(\n entityNamePlural: string,\n entityId: string,\n scope: string,\n schema: Schema,\n originalData: FormEntityItem,\n dataToMutate: EntityData\n): string {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const entityName = entitySchema?.name ?? entityNamePlural;\n const attributes = entitySchema?.attributes ?? [];\n const pluralizedEntityName = capitalize(entityNamePlural);\n\n if (attributes.length === 0) {\n return '';\n }\n\n const data = filterOutInvalidAttributes(attributes, dataToMutate);\n const globalAttributes = globalAttributesUpdate(attributes, data);\n const localAttributes = localAttributesUpdate(entityId, attributes, data, scope);\n const imageAttributes = imageAttributesUpdate(entityId, attributes, data);\n const relationshipAttributes = relationshipAttributesUpdate(attributes, originalData, data);\n const responseType = entityNamePlural;\n const attributeNamesList = formatResponseFieldsForMutation(schema, entityNamePlural, scope);\n\n return (\n `mutation updateEntity($where: ${entityName}Where) {\\n` +\n ` update${pluralizedEntityName}(\\n` +\n ` where: $where\\n` +\n ` update: {${globalAttributes}${localAttributes}${imageAttributes}${relationshipAttributes}\\n }\\n` +\n ` ) {\\n` +\n ` ${responseType} {\\n` +\n ` _id\\n` +\n ` ${attributeNamesList}` +\n ` }\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\n/**\n * Filter out any attribute received from the form that does not exist in the schema.\n */\nfunction filterOutInvalidAttributes(attributes: Attribute[], dataToMutate: EntityData): FormEntityItem {\n const nonUpdatableAttributes: readonly string[] = attributes\n .map((attribute) => {\n if (attribute.isEditable === false) {\n return attribute.name;\n }\n\n return '';\n })\n .filter(Boolean);\n const data = omit(nonUpdatableAttributes, dataToMutate);\n\n return pick(\n attributes.map((attribute) => attribute.name) as unknown as readonly [number, ...number[]],\n data\n ) as unknown as FormEntityItem;\n}\n\n/**\n * Filter attributes by scope: local, global or relationship.\n */\nfunction getAttributeListByScope(type: ScopeType | ScopeType[], attributes: Attribute[]): Attribute['name'][] {\n if (Array.isArray(type)) {\n return type.reduce((acc: Attribute['name'][], attributeType: ScopeType) => {\n return acc.concat(getAttributeListByScope(attributeType, attributes));\n }, []);\n }\n\n const filteredAttributes = attributes.filter(\n (attribute) => attribute.scope === type && attribute.inputType !== 'asset'\n );\n\n return filteredAttributes.map((attribute) => attribute.name);\n}\n\n/**\n * Get all attributes that are of type image.\n */\nfunction getImageAttributes(attributes: Attribute[]): Attribute['name'][] {\n const filteredAttributes = filter(propEq('asset', 'dataType'))(attributes);\n\n return filteredAttributes.map((attribute) => attribute.name);\n}\n\nfunction globalAttributesUpdate(schemaAttributes: Attribute[], data: FormEntityItem): string {\n const globalAttributes = pick(getAttributeListByScope('global', schemaAttributes) as [string], data);\n const attributesString = toPairs(globalAttributes).reduce((acc, [attributeName, value]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const typedValue = stringifyValue(attributeSchema.dataType, value?.value ?? null);\n\n return `${acc}\\n ${attributeName}: ${typedValue}`;\n }, '');\n\n return attributesString;\n}\n\nfunction imageAttributesUpdate(entityId: string, schemaAttributes: Attribute[], data: FormEntityItem): string {\n const imageAttributes = pick(getImageAttributes(schemaAttributes) as [string], data);\n const attributesArray: [string, FormFieldValue][] = toPairs(imageAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const imageValue = attributeValue.value as ImageValue | null;\n const imagePath = imageValue?.path ? `\"${imageValue.path}\"` : 'null';\n const imageSize = imageValue?.size ? imageValue.size : 'null';\n const imageMimeType = imageValue?.mimeType ? `\"${imageValue.mimeType}\"` : 'null';\n const originalFilename = imageValue?.originalFilename ? `\"${imageValue.originalFilename}\"` : 'null';\n const height = imageValue?.height ? imageValue.height : 'null';\n const width = imageValue?.width ? imageValue.width : 'null';\n const lqip = imageValue?.lqip ? `\"${imageValue.lqip}\"` : 'null';\n\n if (!imagePath) {\n return acc;\n }\n\n if ((attributeValue.value as ImageValue)?._id) {\n return (\n `${acc}\\n ${attributeName}: {\\n` +\n ` update: {\\n` +\n ` node: {\\n` +\n ` mimeType: ${imageMimeType}\\n` +\n ` originalFilename: ${originalFilename}\\n` +\n ` path: ${imagePath}\\n` +\n ` size: ${imageSize}\\n` +\n ` height: ${height}\\n` +\n ` width: ${width}\\n` +\n ` lqip: ${lqip}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }\n\n return (\n `${acc}\\n ${attributeName}: {\\n` +\n ` create: {\\n` +\n ` node: {\\n` +\n ` _id: \"${entityId}:${attributeName}\"\\n` +\n ` mimeType: ${imageMimeType}\\n` +\n ` originalFilename: ${originalFilename}\\n` +\n ` path: ${imagePath}\\n` +\n ` size: ${imageSize}\\n` +\n ` height: ${height}\\n` +\n ` width: ${width}\\n` +\n ` lqip: ${lqip}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nfunction localAttributesUpdate(\n entityId: string,\n schemaAttributes: Attribute[],\n data: FormEntityItem,\n scope: string\n): string {\n const localAttributes = pick(getAttributeListByScope('local', schemaAttributes) as [string], data);\n const attributesArray: [string, FormFieldValue][] = toPairs(localAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const { dataType } = attributeSchema;\n const typedValue =\n attributeValue.disabled || Array.isArray(attributeValue.value)\n ? 'null'\n : stringifyValue(dataType, attributeValue.value);\n\n if (attributeValue._id) {\n return `${acc}\\n ${attributeName}: {\\n update: {\\n node: {\\n ${scope}: ${typedValue}\\n }\\n }\\n }`;\n }\n\n if (!typedValue) {\n return acc;\n }\n\n return (\n `${acc}\\n ${attributeName}: {\\n` +\n ` create: {\\n` +\n ` node: {\\n` +\n ` _id: \"${entityId}:${attributeName}\"\\n` +\n ` _type: \"${dataType}\"\\n` +\n ` ${scope}: ${typedValue}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nfunction relationshipAttributesUpdate(\n schemaAttributes: Attribute[],\n originalData: FormEntityItem,\n data: FormEntityItem\n): string {\n const relationshipAttributes = pick(getAttributeListByScope('relationship', schemaAttributes) as [string], data);\n const attributesArray = toPairs(relationshipAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const { inputType, relationship } = attributeSchema;\n\n if (inputType === 'relationship' && relationship?.mode === 'single') {\n const disconnect = `disconnect: {\\n where: {\\n node: {\\n _id: \"${\n originalData[attributeName]._id ?? ''\n }\"\\n }\\n }\\n }\\n`;\n const connect = `connect: {\\n where: {\\n node: {\\n _id: \"${\n attributeValue._id ?? ''\n }\"\\n }\\n }\\n }\\n`;\n\n return `${acc}\\n ${attributeName}: {\\n ${connect} ${disconnect} }`;\n }\n\n if (inputType === 'relationship' && relationship?.mode === 'multiple') {\n const nodesToDisconnect: string | undefined = attributeValue.relationships?.disconnect?.reduce(\n (disconnectString: string, _id: string) => {\n return `${disconnectString} {\\n node: {\\n _id: \"${_id}\"\\n }\\n }\\n`;\n },\n ''\n );\n const connections = (attributeValue.relationships?.connect as MultipleRelationshipConnection | null) ?? [];\n const nodesToConnect: string | undefined = connections.reduce((connectString: string, node) => {\n return `${connectString} {\\n _id: \"${node._id}\"\\n }\\n`;\n }, '');\n const disconnect = nodesToDisconnect\n ? `disconnect: {\\n where: {\\n OR: [\\n${nodesToDisconnect} ]\\n }\\n }\\n`\n : '';\n const connect = nodesToConnect\n ? `connect: {\\n where: {\\n node: {\\n OR: [\\n${nodesToConnect} ]\\n }\\n }\\n }\\n`\n : '';\n\n return `${acc}\\n ${attributeName}: {\\n ${disconnect} ${connect} }`;\n }\n\n return `${acc}\\n`;\n }, '');\n\n return attributesString;\n}\n\nfunction stringifyValue(\n type: DataType,\n value: string | MappedEntityItem | EntityItem | AttributeValue | ImageValue | null | undefined\n): string | null {\n if (temporalTypes.includes(type)) {\n return value?.toString().replace(/\"/g, '\\\\\"') ? `\"${value?.toString().replace(/\"/g, '\\\\\"')}\"` : null;\n }\n\n return stringTypes.includes(type)\n ? `\"${value?.toString().replace(/\"/g, '\\\\\"') ?? 'null'}\"`\n : (value?.toString() ?? null);\n}\n\nfunction formatResponseFieldsForMutation(schema: Schema, entityNamePlural: string, scope: string): string {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const schemaAttributes = entitySchema?.attributes ?? [];\n const globalAttributesArray = getAttributeListByScope('global', schemaAttributes);\n const localAttributesArray = getAttributeListByScope('local', schemaAttributes);\n const relationshipAttributesArray = getAttributeListByScope('relationship', schemaAttributes);\n\n let fields = globalAttributesArray.reduce((acc, attributeName: string) => {\n return `${acc}${attributeName}\\n `;\n }, '');\n\n fields += localAttributesArray.reduce((acc, attributeName: string) => {\n return `${acc} ${attributeName} {\\n _id\\n ${scope}\\n }\\n `;\n }, '');\n\n fields += relationshipAttributesArray.reduce((acc, attributeName: string) => {\n const relationshipAttribute = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute | undefined;\n const relationshipMode = relationshipAttribute?.relationship?.mode ?? 'single';\n const relationshipEntityName = relationshipAttribute?.relationship?.entity ?? '';\n const relationshipEntitySchema = find(propEq(relationshipEntityName, 'name'))(schema) as Entity | undefined;\n const relationshipEntityAttributes = relationshipEntitySchema?.attributes ?? [];\n const primaryAttributeName =\n relationshipAttribute?.relationship?.field ?? '[invalid_relationship_field_name_in_schema]';\n const primaryAttribute = find(propEq(primaryAttributeName, 'name'))(relationshipEntityAttributes) as Attribute;\n const primaryAttributeScope = primaryAttribute.scope;\n let list = '';\n\n if (relationshipMode === 'single') {\n if (primaryAttributeScope === 'global') {\n list = ` ${attributeName} {\\n _id\\n ${primaryAttributeName}\\n }\\n `;\n }\n\n if (primaryAttributeScope === 'local') {\n list = ` ${attributeName} {\\n _id\\n ${primaryAttributeName} {\\n _id\\n default\\n ${scope}\\n }\\n }\\n `;\n }\n }\n\n if (relationshipMode === 'multiple' && relationshipEntityAttributes.length) {\n const multipleRelationshipAttributes = relationshipEntityAttributes.reduce((str, attribute) => {\n if (attribute.scope === 'local') {\n return `${str} ${attribute.name} {\\n _id\\n default\\n ${scope}\\n }\\n`;\n }\n\n if (attribute.scope === 'relationship') {\n const additionalScope = scope === 'default' ? '' : `${scope}\\n `;\n const relationshipEntity = find(propEq(attribute.relationship?.entity, 'name'))(schema) as Entity | undefined;\n const relationshipAttribute = find(propEq(attribute.relationship?.field, 'name'))(\n relationshipEntity?.attributes ?? []\n ) as Attribute;\n const localAttributeQuery =\n relationshipAttribute.scope === 'local'\n ? `{\\n _id\\n default\\n ${additionalScope}}\\n `\n : '';\n\n if (attribute.relationship?.mode === 'single') {\n return `${str} ${attribute.name} {\\n ${attribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n\n if (attribute.relationship?.field) {\n return `${str} ${attribute.name} (options: {limit: 25, offset: 0}) {\\n ${attribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n }\n\n if (attribute.inputType === 'asset') {\n return `${str} ${attribute.name} {\\n _id\\n originalFilename\\n mimeType\\n path\\n size\\n height\\n width\\n lqip\\n }\\n`;\n }\n\n return `${str} ${attribute.name}\\n `;\n }, '');\n\n list =\n ` ${attributeName}Aggregate {\\n` +\n ` count\\n` +\n ` }\\n` +\n ` ${attributeName} (options: {limit: 25, offset: 0}) {\\n${multipleRelationshipAttributes}` +\n ` }\\n`;\n }\n\n return `${acc}${list}`;\n }, '');\n\n return fields;\n}\n\n/**\n * Returns a string with the GraphQl mutation needed to delete an entity.\n */\nexport function getEntityDeleteMutation(entityName: string, schema: Schema, _id: string): string {\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const attributes = entitySchema?.attributes ?? [];\n const pluralizedEntityName = capitalize(entitySchema?.plural ?? '');\n const localAttributes = localAttributesDelete(attributes, _id);\n\n if (entityName === '_asset') {\n return (\n `mutation deleteEntity($where: ${entityName}Where) {\\n` +\n ` delete_assets(\\n` +\n ` where: $where\\n` +\n ` ) {\\n` +\n ` nodesDeleted\\n` +\n ` relationshipsDeleted\\n` +\n ` }\\n` +\n `}\\n`\n );\n }\n\n return (\n `mutation deleteEntity($where: ${entityName}Where) {\\n` +\n ` delete${pluralizedEntityName}(\\n` +\n ` where: $where\\n` +\n `${localAttributes ? ` delete: {\\n ${localAttributes}\\n }\\n` : ''}` +\n ` ) {\\n` +\n ` nodesDeleted\\n` +\n ` relationshipsDeleted\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\nfunction localAttributesDelete(schemaAttributes: Attribute[], _id: string): string {\n const localAttributes = getAttributeListByScope('local', schemaAttributes);\n const attributesString: string = localAttributes.reduce((acc, attributeName) => {\n return (\n `${acc}\\n` +\n ` ${attributeName}: {\\n` +\n ` where: {\\n` +\n ` node: {\\n` +\n ` _id: \"${_id}:${attributeName}\"\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nexport function getEntityCreateMutation(\n entityNamePlural: string,\n schema: Schema,\n entityData: EntityData,\n _id: string\n): string {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const attributes = entitySchema?.attributes ?? [];\n const pluralizedEntityName = capitalize(entitySchema?.plural ?? '');\n\n if (attributes.length === 0) {\n return '';\n }\n\n const data = filterOutInvalidAttributes(attributes, entityData);\n const globalAttributes = globalAttributesUpdate(attributes, data);\n const localAttributes = localAttributesCreate(attributes, data, 'default', _id);\n const relationshipAttributes = relationshipAttributesCreate(attributes, data);\n const responseType = entityNamePlural;\n const attributeNamesList = formatResponseFieldsForMutation(schema, responseType, 'default');\n\n return (\n `mutation {\\n` +\n ` create${pluralizedEntityName}(\\n` +\n ` input: [{\\n` +\n ` _id: \"${_id}\"` +\n ` ${globalAttributes}` +\n ` ${localAttributes}\\n` +\n ` ${relationshipAttributes}\\n` +\n ` }]\\n` +\n ` ) {\\n` +\n ` ${responseType} {\\n` +\n ` ${attributeNamesList}` +\n ` }\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\nfunction localAttributesCreate(\n schemaAttributes: Attribute[],\n data: FormEntityItem,\n defaultScope: string,\n _id: string\n): string {\n const localAttributes = pick(getAttributeListByScope('local', schemaAttributes) as [string], data);\n const attributesArray = toPairs(localAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n if (!attributeValue?.value) {\n return acc;\n }\n\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const typedValue = Array.isArray(attributeValue.value)\n ? 'null'\n : stringifyValue(attributeSchema.dataType, attributeValue.value);\n\n return (\n `${acc}\\n` +\n ` ${attributeName}: {\\n` +\n ` create: {\\n` +\n ` node: {\\n` +\n ` _id: \"${_id}:${attributeName}\"\\n` +\n ` _type: \"${attributeSchema.dataType}\"\\n` +\n ` ${defaultScope}: ${typedValue}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nfunction relationshipAttributesCreate(schemaAttributes: Attribute[], data: FormEntityItem): string {\n const relationshipAttributes = pick(getAttributeListByScope('relationship', schemaAttributes) as [string], data);\n const attributesArray = toPairs(relationshipAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const { inputType, relationship } = attributeSchema;\n\n if (inputType === 'relationship' && relationship?.mode === 'single') {\n const connect = `connect: {\\n where: {\\n node: {\\n _id: \"${\n attributeValue._id ?? ''\n }\"\\n }\\n }\\n }\\n`;\n\n return `${acc}\\n ${attributeName}: {\\n ${connect} }`;\n }\n\n const isMultipleRelationship = inputType === 'relationship' && relationship?.mode === 'multiple';\n const hasRelationships =\n Array.isArray(attributeValue.relationships?.connect) && attributeValue.relationships.connect.length > 0;\n if (isMultipleRelationship && hasRelationships) {\n const connections = (attributeValue.relationships?.connect as MultipleRelationshipConnection | null) ?? [];\n const nodesToConnect: string | undefined = connections.reduce((connectString: string, node) => {\n return `${connectString} {\\n _id: \"${node._id}\"\\n }\\n`;\n }, '');\n const connect = nodesToConnect\n ? `connect: {\\n where: {\\n node: {\\n OR: [\\n${nodesToConnect} ]\\n }\\n }\\n }\\n`\n : '';\n\n return `${acc}\\n ${attributeName}: {\\n ${connect} }`;\n }\n\n return `${acc}\\n`;\n }, '');\n\n return attributesString;\n}\n\n/**\n * Find the attribute of an entity with isPrimary === true.\n * if none is found, return the first attribute.\n */\nfunction getPrimaryAttribute(schemaAttributes: Attribute[]): Attribute {\n return schemaAttributes.find((attr) => attr.isPrimary) ?? schemaAttributes[0];\n}\n\nexport function getRelatedItemsQuery({\n attributeName,\n relatedEntityName,\n scope,\n schema,\n}: {\n attributeName: string;\n relatedEntityName: string;\n scope: string;\n schema: Schema;\n}): EntityQuery {\n const filters = `(where: $where, options: $options)`;\n const entitySchema = find(propEq(relatedEntityName, 'name'))(schema) as Entity | undefined;\n const attributes = entitySchema?.attributes ?? [];\n const heading = `$where: ${relatedEntityName}Where, $options: ${relatedEntityName}Options`;\n const queryEntityName = entitySchema?.plural ?? '';\n\n if (attributes.length === 0) {\n return {\n queryEntityName: '',\n query: '',\n };\n }\n\n const globalAttributesList: string = getAttributeListByScope('global', attributes).join('\\n ');\n const localAttributes: readonly string[] = getAttributeListByScope(['local'], attributes);\n const defaultScopedAttr = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n }\\n `,\n ''\n );\n const scopedAttribute = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n ${scope}\\n }\\n `,\n ''\n );\n const localAttributesList: string = scope === 'default' ? defaultScopedAttr : scopedAttribute;\n\n const relationshipAttributes = filter(propEq('relationship', 'scope'))(attributes);\n const relationshipAttributesList: string = relationshipAttributes.reduce((acc, attribute) => {\n const relatedEntity = find(propEq(attribute.relationship?.entity, 'name'))(schema) as Entity | undefined;\n const attributesNameList = relatedEntity?.attributes.reduce((relatedAcc, relatedAttribute) => {\n const additionalScope = scope === 'default' ? '' : `${scope}\\n `;\n\n if (relatedAttribute.scope === 'local') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n _id\\n default\\n ${additionalScope}}\\n `;\n }\n\n if (relatedAttribute.scope === 'relationship') {\n const relationshipEntity = find(propEq(relatedAttribute.relationship?.entity, 'name'))(schema) as\n | Entity\n | undefined;\n const relationshipAttribute = find(propEq(relatedAttribute.relationship?.field, 'name'))(\n relationshipEntity?.attributes ?? []\n ) as Attribute;\n const localAttributeQuery =\n relationshipAttribute.scope === 'local'\n ? `{\\n _id\\n default\\n ${additionalScope}}\\n `\n : '';\n\n if (relatedAttribute.relationship?.mode === 'single') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n\n if (relatedAttribute.relationship?.field) {\n return `${relatedAcc}\\n ${relatedAttribute.name} (options: {limit: 25, offset: 0}) {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n }\n\n return `${relatedAcc}\\n ${relatedAttribute.name}\\n `;\n }, '');\n\n return `${acc}\\n ${attribute.name} (options: {limit: 25, offset: 0}) { _id ${attributesNameList ?? ''}}\\n`;\n }, '');\n\n return {\n queryEntityName,\n query:\n `query getEntity(${heading}) {\\n` +\n ` ${attributeName}Aggregate(where: $where) {\\n` +\n ` count\\n` +\n ` }\\n` +\n ` ${queryEntityName}${filters} {\\n` +\n ` _id\\n` +\n ` ${globalAttributesList}` +\n ` ${localAttributesList}` +\n ` ${relationshipAttributesList}` +\n ` }\\n` +\n `}\\n`,\n };\n}\n\nexport function getAssetCreateMutation(entityData: EntityData): string {\n const attributes = assetSchema.attributes;\n const pluralizedEntityName = capitalize(assetSchema.plural);\n const _id = uuidv4();\n const data = filterOutInvalidAttributes(attributes, entityData);\n const globalAttributes = globalAttributesUpdate(attributes, data);\n const responseType = assetSchema.plural;\n const attributeNamesList = formatResponseFieldsForMutation([assetSchema, tagSchema], responseType, 'default');\n\n return (\n `mutation {\\n` +\n ` create${pluralizedEntityName}(\\n` +\n ` input: [{\\n` +\n ` _id: \"${_id}\"` +\n ` ${globalAttributes}` +\n ` }]\\n` +\n ` ) {\\n` +\n ` ${responseType} {\\n` +\n ` ${attributeNamesList}` +\n ` }\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\nconst capitalize = (str: string): string => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nexport function getEntitySchema(schema: Schema, entityNamePlural: string): Entity | undefined {\n if (entityNamePlural === '_assets') {\n return assetSchema;\n }\n\n return find(propEq(entityNamePlural, 'plural'))(schema) as Entity | undefined;\n}\n","import { useEffect, useState } from 'react';\nimport type { Dispatch, SetStateAction } from 'react';\nimport { gql } from '@apollo/client';\nimport type { DocumentNode, ErrorLike } from '@apollo/client';\nimport { useApolloClient, useMutation } from '@apollo/client/react';\nimport type { MutationHookOptions } from '@apollo/client/react';\nimport { getAssetCreateMutation } from './queries';\nimport type { FormEntityItem, EntityData } from './types';\nimport { getServerError, parseErrorBody } from './error-utils';\n\nexport function useCreateAssetMutation(): (entityData: FormEntityItem) => Promise<void> {\n const apolloClient = useApolloClient();\n\n return async (entityData: FormEntityItem): Promise<void> => {\n const mutation = getAssetCreateMutation(entityData as unknown as EntityData);\n\n await apolloClient.mutate({\n mutation: gql`\n ${mutation}\n `,\n });\n };\n}\n\ntype EntityMutationResponse = [\n Dispatch<SetStateAction<boolean>>,\n Dispatch<SetStateAction<DocumentNode>>,\n Dispatch<SetStateAction<object>>,\n {\n data: unknown;\n loading: boolean;\n error: ErrorLike | undefined;\n isProjectDisabled: boolean;\n isProjectReadOnly: boolean;\n },\n];\n\nexport function useEntityMutation(): EntityMutationResponse {\n const [runMutation, setRunMutation] = useState(false);\n const [mutation, setMutation] = useState(gql`\n mutation updateEntity($any: Any) {\n any\n }\n `);\n const [options, setOptions] = useState<MutationHookOptions>({});\n const [mutateFunction, { data, loading, error }] = useMutation(mutation, options);\n\n // Parse 403 error response to determine the specific error code\n const serverError = getServerError(error);\n\n const { isProjectDisabled, isProjectReadOnly } = (() => {\n if (serverError?.statusCode === 403) {\n const responseBody = parseErrorBody<{ code?: string }>(serverError.bodyText);\n\n if (responseBody && typeof responseBody.code === 'string') {\n if (responseBody.code === 'PROJECT_PAUSED') {\n return {\n isProjectDisabled: true,\n isProjectReadOnly: false,\n };\n }\n\n if (responseBody.code === 'READ_ONLY_MODE') {\n return {\n isProjectDisabled: false,\n isProjectReadOnly: true,\n };\n }\n }\n\n return {\n isProjectDisabled: true,\n isProjectReadOnly: false,\n };\n }\n\n return {\n isProjectDisabled: false,\n isProjectReadOnly: false,\n };\n })();\n\n useEffect(() => {\n if (runMutation) {\n void mutateFunction();\n setRunMutation(false);\n }\n }, [runMutation, mutateFunction]);\n\n return [setRunMutation, setMutation, setOptions, { data, loading, error, isProjectDisabled, isProjectReadOnly }];\n}\n","'use client';\n\nimport { find, propEq } from 'ramda';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityDeleteMutation } from '../graphql-client/queries';\nimport AlertDialog from '../ui/components/alert-dialog';\nimport { useConfig } from '../core/config/config-context';\nimport type { SingleProject } from '../core/config/types';\nimport type { ActionDeleteEntity } from './types';\n\ntype Props = {\n action: ActionDeleteEntity;\n};\n\nexport default function Delete({ action }: Props): JSX.Element {\n const { projects, currentProjectId } = useConfig();\n const { schema } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const [runMutation, setMutation, setOptions] = useEntityMutation();\n const entityName = action.payload.entityName === '_asset' ? 'asset' : action.payload.entityName.toLowerCase();\n\n if (action.payload.silent) {\n // fire immediately without confirmation\n setTimeout(() => {\n void handleDeletion();\n }, 0);\n\n return <></>;\n }\n\n const dialogOptions = {\n dialogTitle: `Delete ${entityName}`,\n dialogMessage: `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 _id = action.payload.entityId;\n const mutation = getEntityDeleteMutation(action.payload.entityName, schema, _id);\n\n return new Promise<void>((resolve) => {\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n variables: { where: { _id } },\n update(cache: { evict: (arg0: { id: string }) => void }) {\n cache.evict({ id: _id });\n },\n onCompleted: () => {\n toast.success('Item successfully deleted.');\n resolve();\n },\n });\n runMutation(true);\n });\n }\n\n return <AlertDialog options={dialogOptions} />;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Drawer as DrawerPrimitive } from 'vaul';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction Drawer({\n shouldScaleBackground = true,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>): JSX.Element {\n return <DrawerPrimitive.Root direction=\"right\" shouldScaleBackground={shouldScaleBackground} {...props} />;\n}\n\nDrawer.displayName = 'Drawer';\n\nconst DrawerTrigger = DrawerPrimitive.Trigger;\n\nconst DrawerPortal = DrawerPrimitive.Portal;\n\nconst DrawerClose = DrawerPrimitive.Close;\n\nconst DrawerOverlay = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <div // DrawerPrimitive.Overlay replaced here with a div to fix issue with RemoveScroll used in DrawerPrimitive.Overlay\n className={cn('fk-fixed fk-inset-0 fk-z-50 fk-bg-overlay/75 fk-backdrop-blur-[1px]', className)}\n ref={ref}\n {...props}\n />\n));\nDrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;\n\nconst DrawerContent = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n className={cn(\n 'fk-fixed fk-w-full fk-max-w-[clamp(40vw,95vw,60rem)] fk-right-0 fk-bottom-0 fk-z-50 fk-flex fk-h-full fk-flex-col !fk-transition-all fk-duration-500 fk-rounded-l-[20px] fk-border fk-border-border fk-bg-background',\n className\n )}\n ref={ref}\n {...props}\n >\n <div className=\"fk-flex fk-w-full fk-h-full fk-pr-4\">\n <div className=\"fk-my-auto fk-ml-2 fk-h-[100px] fk-w-2 fk-min-w-2 fk-rounded-full fk-bg-muted\" />\n <div className=\"fk-flex fk-flex-col fk-w-full fk-max-w-[calc(100%-1rem)] fk-pb-12\">{children}</div>\n </div>\n </DrawerPrimitive.Content>\n </DrawerPortal>\n));\nDrawerContent.displayName = 'DrawerContent';\n\nfunction DrawerHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): JSX.Element {\n return <div className={cn('fk-flex fk-gap-2.5 fk-p-4 fk-text-center sm:fk-text-left', className)} {...props} />;\n}\n\nDrawerHeader.displayName = 'DrawerHeader';\n\nfunction DrawerFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): JSX.Element {\n return <div className={cn('fk-mt-auto fk-flex fk-flex-col fk-gap-2 fk-p-4', className)} {...props} />;\n}\n\nDrawerFooter.displayName = 'DrawerFooter';\n\nconst DrawerTitle = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Title\n className={cn('fk-flex fk-items-center fk-text-lg fk-font-semibold fk-leading-none fk-tracking-tight', className)}\n ref={ref}\n {...props}\n />\n));\nDrawerTitle.displayName = DrawerPrimitive.Title.displayName;\n\nconst DrawerDescription = React.forwardRef<\n React.ElementRef<typeof DrawerPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DrawerPrimitive.Description className={cn('fk-text-sm fk-text-muted-foreground', className)} ref={ref} {...props} />\n));\nDrawerDescription.displayName = DrawerPrimitive.Description.displayName;\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n};\n","'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\nimport type { Dispatch, ReactNode, SetStateAction } from 'react';\nimport { X as CloseIcon } from 'lucide-react';\nimport { Button } from '../primitives/button';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from '../primitives/drawer';\nimport { Separator } from '../primitives/separator';\nimport { Skeleton } from '../primitives/skeleton';\n\ntype Props = {\n actions: ReactNode;\n beforeClose?: () => boolean;\n children: ReactNode;\n depth: number; // how many drawers are open, to control the width of the drawers\n isFocused: boolean; // whether the drawer is the last one open\n onFormChange?: Dispatch<SetStateAction<boolean>>; // a callback executed everyt time the form changes its state\n onClose: () => void;\n title: string;\n};\n\nexport default function DrawerModal({\n actions,\n beforeClose,\n children,\n depth,\n isFocused,\n onFormChange,\n onClose,\n title,\n}: Props): JSX.Element {\n const [isOpen, setIsOpen] = useState(false);\n const gutter = depth * (50 / depth);\n\n const handleClose = useCallback(() => {\n const shouldClose = beforeClose ? beforeClose() : true;\n\n if (!shouldClose) return;\n\n setIsOpen(false);\n setTimeout(() => {\n onClose();\n }, 150);\n }, [beforeClose, onClose, setIsOpen]);\n\n const onEscapeKeyPressed = useCallback(\n (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && isFocused) {\n handleClose();\n }\n },\n [handleClose, isFocused]\n );\n\n useEffect(() => {\n setIsOpen(true);\n // overwrite \"background: black\" set by Vaul in the body, and add missing bottom: 0 style\n globalThis.document.body.classList.add('fk-drawer-fix');\n }, []);\n\n useEffect(() => {\n globalThis.document.addEventListener('keydown', onEscapeKeyPressed, false);\n\n return () => {\n globalThis.document.removeEventListener('keydown', onEscapeKeyPressed, false);\n };\n }, [onEscapeKeyPressed]);\n\n return (\n <Drawer\n dismissible={false}\n onClose={() => {\n handleClose();\n }}\n open={isOpen}\n >\n <DrawerContent style={isFocused ? {} : { maxWidth: `calc(100% - ${gutter.toString()}px)` }}>\n <DrawerHeader>\n <DrawerTitle className=\"fk-w-full\">\n {title ? title : <Skeleton className=\"fk-h-5 fk-w-[120px]\" />}\n </DrawerTitle>\n <DrawerDescription className=\"fk-sr-only\">{title ? title : 'Loading form'}</DrawerDescription>\n {actions}\n <Button className=\"\" onClick={handleClose} size=\"icon\" variant=\"ghost\">\n <CloseIcon className=\"fk-h-4 fk-w-4\" />\n <span className=\"fk-sr-only\">Close</span>\n </Button>\n </DrawerHeader>\n <Separator />\n <div className=\"fk-px-4 fk-pt-6 fk-h-full fk-min-h-full fk-overflow-y-auto fk-pb-16\" data-vaul-no-drag>\n {children}\n </div>\n </DrawerContent>\n </Drawer>\n );\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","'use client';\n\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\n\nconst Collapsible = CollapsiblePrimitive.Root;\n\nconst { CollapsibleTrigger } = CollapsiblePrimitive;\n\nconst { CollapsibleContent } = CollapsiblePrimitive;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\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 { useId, useRef, useState } from 'react';\nimport type { ComponentType } from 'react';\nimport type { 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 { apiPaths, IMAGES_BASE_URL } from '../../core/api-paths';\nimport { useOuterClick } from '../../ui/hooks/use-outer-click';\nimport type { FormFieldParams } from '../types';\n\n// Temporary fix due to runtime mismatch between React 18 and React 19 types\ntype FileTypeIconCompatProps = {\n extension: string;\n [key: string]: string | number | boolean | undefined;\n};\n\nconst FileTypeIconCompat = FileTypeIcon as unknown as ComponentType<FileTypeIconCompatProps>;\n\nexport function Uploader({ control, fieldSchema, getValues, setValue }: FormFieldParams<'asset'>): JSX.Element {\n const { name, label, isEditable, options } = fieldSchema;\n const { projectId } = useParams();\n const [isOpen, setIsOpen] = useState(false);\n const inputFile = useRef<HTMLInputElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(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 useOuterClick(wrapperRef, setIsOpen, '[data-radix-popper-content-wrapper]');\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[1];\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 (!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 if (isImage) {\n const reader = new FileReader();\n\n reader.onload = (e) => {\n const img = new Image();\n\n setBase64PreviewImage(e.target?.result as string);\n\n img.onload = function () {\n setValue(name, {\n ...(getValues(name)?.value as ImageValue),\n value: {\n ...(getValues(name)?.value as ImageValue),\n width: img.width,\n height: img.height,\n },\n });\n };\n\n img.src = reader.result as string;\n };\n\n reader.readAsDataURL(file);\n } else {\n setBase64PreviewImage(null);\n }\n\n setSaving(true);\n\n try {\n const response = await fetch(apiPaths(projectId).upload, {\n method: 'POST',\n headers: { 'Content-Type': file?.type || 'application/octet-stream' },\n body: file,\n });\n\n const data = await response.json();\n\n setValue(name, {\n ...(getValues(name)?.value as ImageValue),\n value: {\n ...(getValues(name)?.value as ImageValue),\n path: data.pathname,\n originalFilename: file.name,\n size: file.size,\n mimeType: file.type,\n lqip: data.lqip,\n ...(isImage ? {} : { width: undefined, height: undefined }),\n },\n });\n } catch (error) {\n console.error(error);\n setBase64PreviewImage(null);\n setValue(name, {\n ...(getValues(name)?.value as ImageValue),\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 event.stopPropagation();\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 inputFile.current?.click();\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 focus-visible:fk-outline-none fk-ring-offset-background focus-visible:fk-ring-2 focus-visible:fk-ring-ring focus-visible:fk-ring-offset-2 ${\n isOpen ? 'fk-outline-none 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'}`}\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 e.preventDefault();\n e.stopPropagation();\n setDragActive(true);\n }}\n onDragEnter={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(true);\n }}\n onDragLeave={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setDragActive(false);\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 fk-text-muted-foreground\"\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 className=\"fk-ml-2 fk-h-7 fk-rounded fk-text-muted-foreground\" variant=\"ghost\">\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 fk-object-scale-down\"\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 fk-bg-transparent fk-flex fk-items-center fk-justify-center [&>svg]:fk-h-full [&>svg]:fk-w-auto\">\n <FileTypeIconCompat 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 fk-h-7 fk-w-7 rounded-md object-cover\"\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 fk-bg-muted fk-flex fk-items-center fk-justify-center\">\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>\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\"\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 onClick={handleUpload}>\n <UploadIcon className=\"fk-mr-2 fk-h-4 fk-w-4\" />\n <span>Upload</span>\n </DropdownMenuItem>\n <DropdownMenuItem>\n <ImageIcon className=\"fk-mr-2 fk-h-4 fk-w-4\" />\n <span>Select file</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 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 fk-text-muted-foreground\"\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 fk-text-muted-foreground\"\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\"\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\">\n <div className=\"fk-w-16 fk-h-16 fk-rounded fk-bg-transparent fk-flex fk-items-center fk-justify-center [&>svg]:fk-h-full [&>svg]:fk-w-auto\">\n <FileTypeIconCompat 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 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","import { useId } 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, setValue }: FormFieldParams<'number'>): JSX.Element {\n const { name, label, isEditable, 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.1875rem] ${\n !field.value?.scope || field.value.scope === 'default' ? 'fk-mb-3' : ''\n }`}\n disabled={isEditable === false || 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 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 * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { cn } from 'src/ui/lib/utils';\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'fk-z-50 fk-w-72 fk-rounded-md fk-border fk-border-border fk-bg-popover fk-p-4 fk-text-popover-foreground fk-shadow-md fk-outline-none data-[state=open]:fk-animate-in data-[state=closed]:fk-animate-out data-[state=closed]:fk-fade-out-0 data-[state=open]:fk-fade-in-0 data-[state=closed]:fk-zoom-out-95 data-[state=open]:fk-zoom-in-95 data-[side=bottom]:fk-slide-in-from-top-2 data-[side=left]:fk-slide-in-from-right-2 data-[side=right]:fk-slide-in-from-left-2 data-[side=top]:fk-slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent };\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-bg-background fk-group/calendar fk-p-3 [--cell-size:2rem] [[data-slot=card-content]_&]:fk-bg-transparent [[data-slot=popover-content]_&]:fk-bg-transparent',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:fk-rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:fk-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('fk-w-fit', defaultClassNames.root),\n months: cn('fk-relative fk-flex fk-flex-col fk-gap-4 md:fk-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-h-7 fk-w-7 fk-select-none fk-p-0 aria-disabled:fk-opacity-50',\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'fk-h-7 fk-w-7 fk-select-none fk-p-0 aria-disabled:fk-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 'has-focus:fk-border-ring fk-border-input fk-shadow-xs has-focus:fk-ring-ring/50 has-focus:fk-ring-[3px] fk-relative fk-rounded-md fk-border',\n defaultClassNames.dropdown_root\n ),\n dropdown: cn('fk-bg-popover fk-absolute fk-inset-0 fk-opacity-0', defaultClassNames.dropdown),\n caption_label: cn(\n 'fk-select-none fk-font-medium',\n captionLayout === 'label'\n ? 'fk-text-sm'\n : '[&>svg]:fk-text-muted-foreground fk-flex fk-h-8 fk-items-center fk-gap-1 fk-rounded-md fk-pl-2 fk-pr-1 fk-text-sm [&>svg]:fk-size-3.5',\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-text-muted-foreground fk-flex-1 fk-w-9 fk-select-none fk-rounded-md fk-text-[0.8rem] fk-font-normal',\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-muted-foreground fk-select-none fk-text-[0.8rem]', defaultClassNames.week_number),\n day: cn(\n 'fk-group/day fk-relative fk-aspect-square fk-h-full fk-w-full fk-select-none fk-p-0 fk-text-center [&:first-child[data-selected=true]_button]:fk-rounded-l-md [&:last-child[data-selected=true]_button]:fk-rounded-r-md',\n defaultClassNames.day\n ),\n range_start: cn('fk-bg-accent fk-rounded-l-md', defaultClassNames.range_start),\n range_middle: cn('fk-rounded-none', defaultClassNames.range_middle),\n range_end: cn('fk-bg-accent fk-rounded-r-md', defaultClassNames.range_end),\n today: cn(\n 'fk-bg-accent fk-text-accent-foreground fk-rounded-md data-[selected=true]:fk-rounded-none',\n defaultClassNames.today\n ),\n outside: cn('fk-text-muted-foreground aria-selected:fk-text-muted-foreground', defaultClassNames.outside),\n disabled: cn('fk-text-muted-foreground fk-opacity-50', defaultClassNames.disabled),\n hidden: cn('fk-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('fk-size-4', className)} {...props} />;\n }\n\n if (orientation === 'right') {\n return <ChevronRightIcon className={cn('fk-size-4', className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn('fk-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 'data-[selected-single=true]:fk-bg-primary data-[selected-single=true]:fk-text-primary-foreground data-[range-middle=true]:fk-bg-accent data-[range-middle=true]:fk-text-accent-foreground data-[range-start=true]:fk-bg-primary data-[range-start=true]:fk-text-primary-foreground data-[range-end=true]:fk-bg-primary data-[range-end=true]:fk-text-primary-foreground group-data-[focused=true]/day:fk-border-ring group-data-[focused=true]/day:fk-ring-ring/50 fk-flex fk-aspect-square fk-h-auto fk-w-full fk-min-w-[--cell-size] fk-flex-col fk-gap-1 fk-font-normal fk-leading-none data-[range-end=true]:fk-rounded-md data-[range-middle=true]:fk-rounded-none data-[range-start=true]:fk-rounded-md group-data-[focused=true]/day:fk-relative group-data-[focused=true]/day:fk-z-10 group-data-[focused=true]/day:fk-ring-[3px] [&>span]:fk-text-xs [&>span]:fk-opacity-70',\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","import { useId } from 'react';\nimport type { 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({ control, fieldSchema, getValues, setValue }: FormFieldParams<'datetime'>): JSX.Element {\n const { name, label, isEditable, 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 hover:fk-bg-transparent fk-relative',\n !field.value?.value && 'fk-text-muted-foreground',\n !field.value?.scope || field.value.scope === 'default' ? 'fk-mb-3' : ''\n )}\n disabled={isEditable === false || 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-flex-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 hover:fk-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 hover:fk-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 onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\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';\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 editor.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 editor.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 editor.chain().focus().deleteRange(range).toggleNode('paragraph', 'paragraph').toggleBlockquote().run(),\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\" variant=\"ghost\">\n <span\n className=\"fk-rounded-sm fk-px-1\"\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 fk-border fk-p-1 fk-shadow-xl \"\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 hover:fk-bg-muted\"\n >\n <div className=\"fk-flex fk-items-center fk-gap-2\">\n <div className=\"fk-rounded-sm fk-border fk-px-2 fk-py-px fk-font-medium\" 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 hover:fk-bg-muted\"\n >\n <div className=\"fk-flex fk-items-center fk-gap-2\">\n <div\n className=\"fk-rounded-sm fk-border fk-px-2 fk-py-px fk-font-medium\"\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, PopoverTrigger } from '@radix-ui/react-popover';\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 modal={true} open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Button size=\"sm\" variant=\"ghost\" className=\"fk-gap-2 fk-rounded-none fk-border-none\">\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 </PopoverTrigger>\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-none\"\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-sm fk-p-1 fk-text-red-600 fk-transition-all hover:fk-bg-red-100 dark:hover:fk-bg-red-800\"\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>\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 { PopoverContent, PopoverTrigger } from '../../../../ui/primitives/popover';\nimport { Popover } from '@radix-ui/react-popover';\n\nexport type SelectorItem = {\n name: string;\n icon: LucideIcon;\n command: (editor: ReturnType<typeof useEditor>['editor']) => void;\n isActive: (editor: ReturnType<typeof useEditor>['editor']) => 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) => editor?.chain().focus().clearNodes().toggleHeading({ level: 1 }).run(),\n isActive: (editor) => editor != null && editor.isActive('heading', { level: 1 }),\n },\n {\n name: 'Heading 2',\n icon: Heading2,\n command: (editor) => editor?.chain().focus().clearNodes().toggleHeading({ level: 2 }).run(),\n isActive: (editor) => editor != null && editor.isActive('heading', { level: 2 }),\n },\n {\n name: 'Heading 3',\n icon: Heading3,\n command: (editor) => editor?.chain().focus().clearNodes().toggleHeading({ level: 3 }).run(),\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) => editor?.chain().focus().clearNodes().toggleBulletList().run(),\n isActive: (editor) => editor != null && editor.isActive('bulletList'),\n },\n {\n name: 'Numbered List',\n icon: ListOrdered,\n command: (editor) => editor?.chain().focus().clearNodes().toggleOrderedList().run(),\n isActive: (editor) => editor != null && editor.isActive('orderedList'),\n },\n {\n name: 'Quote',\n icon: TextQuote,\n command: (editor) => editor?.chain().focus().clearNodes().toggleBlockquote().run(),\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 modal={true} open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild className=\"fk-gap-2 fk-rounded-none fk-border-none hover:fk-bg-muted focus:fk-ring-0\">\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 </PopoverTrigger>\n <PopoverContent 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-sm fk-px-2 fk-py-1 fk-text-sm hover:fk-bg-muted\"\n >\n <div className=\"fk-flex fk-items-center fk-space-x-2\">\n <div className=\"fk-rounded-sm fk-border fk-p-1\">\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 </PopoverContent>\n </Popover>\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\"\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';\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) => editor?.chain().focus().toggleBold().run(),\n icon: BoldIcon,\n },\n {\n name: 'italic',\n isActive: (editor) => editor != null && editor.isActive('italic'),\n command: (editor) => editor?.chain().focus().toggleItalic().run(),\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) => editor?.chain().focus().toggleStrike().run(),\n icon: StrikethroughIcon,\n },\n {\n name: 'code',\n isActive: (editor) => editor != null && editor.isActive('code'),\n command: (editor) => editor?.chain().focus().toggleCode().run(),\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\" 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 [fk-animation-delay:-0.3s]\" />\n <div className=\"fk-h-1.5 fk-w-1.5 fk-animate-bounce fk-rounded-full fk-bg-pink-600 [fk-animation-delay:-0.15s]\" />\n <div className=\"fk-h-1.5 fk-w-1.5 fk-animate-bounce fk-rounded-full fk-bg-pink-600\" />\n </div>\n );\n};\n\nexport default CrazySpinner;\n","import { 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.selection;\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.selection;\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 { 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 { 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 hover:fk-bg-pink-800\"\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 { EditorBubble, useEditor } from 'novel';\nimport { removeAIHighlight } from 'novel';\nimport { Fragment, type ReactNode, useEffect } from 'react';\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\"\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\"\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 } 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 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];\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 setValue,\n}: FormFieldParams<'editor'>): JSX.Element {\n const { name, label, isEditable, 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-screen-lg fk-rounded-md fk-border fk-border-input fk-ring-offset-background focus-within:fk-outline-none focus-within:fk-ring-2 focus-within:fk-ring-ring focus-within:fk-ring-offset-2\"\n editable={isEditable !== false && !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 dark:fk-prose-invert prose-headings:fk-font-title fk-min-h-[150px] fk-font-default fk-rounded-md ' +\n 'focus:fk-outline-none 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\">\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 hover:fk-bg-muted aria-selected:fk-bg-muted\"\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\">\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 onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n","import { Badge } from '../../ui/primitives/badge';\n\nexport function Tags({ value }: { value: string }) {\n if (!value || !value.split(',').length) {\n return null;\n }\n\n return (\n <div className=\"fk-flex fk-flex-wrap fk-gap-1 fk-max-w-full truncate\">\n {value.split(',').map((tag) => (\n <Badge\n className=\"fk-px-2.5 fk-py-0 fk-font-normal fk-text-[0.6875rem] fk-leading-4\"\n key={tag}\n variant=\"secondary\"\n >\n {tag}\n </Badge>\n ))}\n </div>\n );\n}\n","import { ComponentType } from 'react';\nimport type { CellContext, ColumnDef, Row, Table } from '@tanstack/react-table';\nimport type { Attribute } from '../core/types';\nimport type { AttributeValue } from '../graphql-client/types';\nimport { useConfig } from '../core/config/config-context';\nimport { Checkbox } from '../ui/primitives/checkbox';\nimport { Boolean as BooleanPrefiewField } from './preview-components/boolean';\nimport { Text as TextPreviewField } from './preview-components/text';\nimport { Editor as EditorPreviewField } from './preview-components/editor';\nimport { Asset as AssetPreviewField } from './preview-components/asset';\nimport { DateTime as DateTimePreviewField } from './preview-components/datetime';\nimport { Tags as TagsPreviewField } from './preview-components/tags';\n\ntype Props<TData> = {\n attributesSchema: Attribute[];\n checkboxSelect?: 'single' | 'multiple'; // whether to include a checkbox column for row selection\n actionsComponent?: (row: Row<TData>) => JSX.Element; // a component to be displayed in the actions column of the grid\n};\n\ntype ColumnDefinition<TData extends AttributeValue, TValue> = ColumnDef<TData, TValue> & { id?: string; size: number };\n\nexport function useGridColumnsDefinition<TData extends AttributeValue, TValue>({\n attributesSchema,\n checkboxSelect,\n actionsComponent,\n}: Props<TData>): ColumnDefinition<TData, TValue>[] {\n const { getContributionPointConfig } = useConfig();\n const inputTypeToPreviewFieldMap = {\n 'datetime': 'datetime',\n 'editor': 'editor',\n 'asset': 'asset',\n 'number': 'text',\n 'relationship': 'text',\n 'select': 'text',\n 'switch': 'boolean',\n 'text': 'text',\n 'textarea': 'text',\n };\n const previewFieldComponentsMap = {\n 'boolean': BooleanPrefiewField,\n 'date': TextPreviewField,\n 'datetime': DateTimePreviewField,\n 'editor': EditorPreviewField,\n 'asset': AssetPreviewField,\n 'number': TextPreviewField,\n 'relationship': TextPreviewField,\n 'select': TextPreviewField,\n 'switch': BooleanPrefiewField,\n 'text': TextPreviewField,\n 'textarea': TextPreviewField,\n 'tags': TagsPreviewField,\n };\n\n const cols = attributesSchema\n .map((attribute) => {\n const previewType =\n attribute.previewType ??\n inputTypeToPreviewFieldMap[attribute.inputType as keyof typeof inputTypeToPreviewFieldMap];\n const previewComponent =\n (getContributionPointConfig('previewFields', [previewType])?.[0]?.component as unknown as\n | ComponentType<{ value: TData }>\n | undefined) ??\n previewFieldComponentsMap[previewType as keyof typeof previewFieldComponentsMap] ??\n previewFieldComponentsMap['text'];\n\n if (attribute.isHidden) {\n return null;\n }\n\n const isTagsPreview = previewType === 'tags';\n\n return {\n accessorKey: attribute.name,\n filterFn: (row: Row<TData>, id: string, value: string | string[]) => {\n if (isTagsPreview) {\n return true;\n }\n\n const selectedValues = Array.isArray(value) ? value : [value];\n\n return selectedValues.includes(row.getValue(id));\n },\n header: () => <div className=\"fk-flex fk-items-center\">{attribute.label}</div>,\n cell: ({ row }: CellContext<TData, TValue>) => {\n const PreviewComponent = previewComponent as ComponentType<{ value: TData }>;\n\n // TODO: Pass the complete row data to the preview component, so it can concatenate values from other attributes (i.e. for the \"image dimensions\" column)\n // console.log(row.getAllCells());\n return <PreviewComponent value={row.getValue(attribute.name)} />;\n },\n enableSorting: false,\n enableHiding: true,\n size: attribute.options?.size ?? 150,\n };\n })\n .filter((column) => column !== null);\n\n const actions = {\n id: 'actions',\n cell: ({ row }: CellContext<TData, TValue>) => (actionsComponent ? actionsComponent(row) : null),\n size: 80,\n };\n\n const singleCheckboxSelect = {\n id: 'select',\n cell: ({ row, table }: CellContext<TData, TValue>) => (\n <Checkbox\n aria-label=\"Select row\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => {\n table.toggleAllPageRowsSelected(false);\n row.toggleSelected(Boolean(value));\n }}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n size: 50,\n };\n\n const multipleCheckboxSelect = {\n id: 'select',\n header: ({ table }: { table: Table<unknown> }) => (\n <Checkbox\n aria-label=\"Select all\"\n checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate')}\n onCheckedChange={(value) => {\n table.toggleAllPageRowsSelected(Boolean(value));\n }}\n />\n ),\n cell: ({ row }: CellContext<TData, TValue>) => (\n <Checkbox\n aria-label=\"Select row\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => {\n row.toggleSelected(Boolean(value));\n }}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n size: 50,\n };\n\n return [\n ...(checkboxSelect === 'single' ? [singleCheckboxSelect] : []),\n ...(checkboxSelect === 'multiple' ? [multipleCheckboxSelect] : []),\n ...(actionsComponent ? [actions] : []),\n ...cols,\n ];\n}\n","'use client';\n\nimport { useRef, useState } from 'react';\nimport type { ReactElement, UIEvent } from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\nimport type {\n ColumnDef,\n ColumnFiltersState,\n Updater,\n Row,\n RowSelectionState,\n SortingState,\n Table,\n TableMeta,\n VisibilityState,\n} from '@tanstack/react-table';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport {\n Table as TablePrimitive,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../ui/primitives/table';\nimport { cn } from '../ui/lib/utils';\nimport type { AttributeValue } from '../graphql-client/types';\nimport type { MultipleRelationshipConnection } from '../core/types';\n\ninterface DataTableProps<TData extends AttributeValue, TValue> {\n classNames?: {\n wrapper?: string;\n table?: string;\n row?: string;\n };\n columns: ColumnDef<AttributeValue, TValue>[];\n data: TData[];\n entityName: string;\n initialSelectionState?: RowSelectionState;\n onEntitySelectionChange?: (rowSelection: string[]) => void;\n onScroll?: (event: UIEvent<HTMLDivElement>) => void;\n pageSize?: number;\n rowHeightEstimate?: number;\n rowAdditionState?: MultipleRelationshipConnection;\n rowDeletionState?: string[];\n toolbarComponent?: (table: Table<AttributeValue>) => ReactElement;\n}\n\ninterface ExtendedDataTable extends TableMeta<unknown> {\n getRowBackground: (row: Row<AttributeValue>) => string;\n}\n\nfunction inferRowHeightEstimate(rowClassName?: string): number | undefined {\n if (!rowClassName) {\n return undefined;\n }\n\n const tokens = rowClassName.split(/\\s+/);\n\n if (tokens.includes('fk-h-20')) {\n return 80;\n }\n\n return undefined;\n}\n\nexport function DataTable<TData extends AttributeValue, TValue>({\n classNames,\n columns,\n data,\n initialSelectionState,\n onEntitySelectionChange,\n onScroll,\n pageSize,\n rowHeightEstimate,\n rowAdditionState,\n rowDeletionState,\n toolbarComponent,\n}: DataTableProps<TData, TValue>): JSX.Element {\n const scrollRef = useRef<HTMLDivElement>(null);\n const [rowSelection, setRowSelection] = useState(initialSelectionState ?? {});\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({});\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n const [sorting, setSorting] = useState<SortingState>([]);\n\n const table = useReactTable({\n data,\n columns,\n state: {\n sorting,\n columnVisibility,\n rowSelection,\n columnFilters,\n },\n initialState: {\n pagination: {\n pageSize: pageSize ?? 25,\n },\n },\n enableRowSelection: true,\n onRowSelectionChange: handleRowSelectionChange,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getRowId: (row) => row._id,\n manualPagination: true,\n meta: {\n getRowBackground: (row: Row<AttributeValue>) => getRowClassnames(row, rowDeletionState, rowAdditionState),\n },\n });\n\n const { rows } = table.getRowModel();\n const rowVirtualizer = useVirtualizer({\n count: rows.length,\n estimateSize: () => rowHeightEstimate ?? inferRowHeightEstimate(classNames?.row) ?? 45, // estimate row height for accurate scrollbar dragging\n getScrollElement: () => scrollRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.includes('Firefox')\n ? (element) => element.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n });\n\n const virtualItems = rowVirtualizer.getVirtualItems();\n const totalSize = rowVirtualizer.getTotalSize();\n\n function handleRowSelectionChange(updaterFn: Updater<RowSelectionState>): void {\n const selectedIds = typeof updaterFn === 'function' ? Object.keys(updaterFn(rowSelection)) : Object.keys(updaterFn);\n\n setRowSelection(updaterFn);\n onEntitySelectionChange?.(selectedIds);\n }\n\n return (\n <div className={cn('fk-w-full fk-h-full fk-space-y-4', classNames?.wrapper)}>\n {toolbarComponent && toolbarComponent(table)}\n <TablePrimitive className={cn('fk-grid fk-pb-[5rem]', classNames?.table)} onScroll={onScroll} ref={scrollRef}>\n <TableHeader className=\"fk-grid\">\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow className=\"fk-flex fk-w-full\" key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n return (\n <TableHead\n className={cn('fk-flex fk-items-center', header.column.id === 'actions' && 'fk-pl-0')}\n colSpan={header.colSpan}\n key={header.id}\n style={header.getSize() ? { width: `${header.getSize().toString()}px` } : {}}\n >\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody\n className=\"fk-grid fk-relative\"\n style={{\n height: `${totalSize.toString()}px`, //tells scrollbar how big the table is\n }}\n >\n {virtualItems.length ? (\n virtualItems.map((virtualRow) => {\n const row = rows[virtualRow.index];\n\n return (\n <TableRow\n className={`${(table.options.meta as ExtendedDataTable).getRowBackground(\n row\n )} fk-flex fk-absolute fk-w-full ${classNames?.row ?? ''}`}\n data-index={virtualRow.index}\n data-state={row.getIsSelected() && 'selected'}\n key={virtualRow.key}\n ref={rowVirtualizer.measureElement}\n style={{\n transform: `translateY(${virtualRow.start.toString()}px)`,\n }}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n className={cn('fk-flex fk-items-center fk-truncate', cell.column.id === 'actions' && '!fk-pl-0')}\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n );\n })\n ) : (\n <TableRow>\n <TableCell className=\"fk-h-24 fk-text-center\" colSpan={columns.length}>\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </TablePrimitive>\n </div>\n );\n}\n\nfunction getRowClassnames(\n row: Row<AttributeValue>,\n rowDeletionState?: string[],\n rowAdditionState?: MultipleRelationshipConnection\n): string {\n if (rowDeletionState?.includes(row.original._id)) {\n return 'fk-bg-row-removed hover:fk-bg-row-removed-hover';\n }\n\n if (rowAdditionState?.some((line) => line._id === row.original._id)) {\n return 'fk-bg-row-added hover:fk-bg-row-added-hover';\n }\n\n return '';\n}\n","'use client';\n\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, 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 ImageValue,\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 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 entityNamePlural,\n fieldSchema,\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, 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 const relationshipMode = find<Attribute>(propEq(entityName, 'name'))(relationshipEntityAttributesSchema)?.relationship\n ?.mode;\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 connection name to filter out the related items already connected when showing the list (i.e. productsConnection_NONE)\n * */\n const relationshipAttribute = relationshipEntityAttributesSchema.find(\n (attr) => attr.relationship?.entity === baseEntityName\n );\n const relationshipAttributeMode = relationshipAttribute?.relationship?.mode;\n const connectionAttributeName = relationshipMode === 'single' ? entityName : entityNamePlural;\n\n if (relationshipAttributeMode) {\n connectionName =\n relationshipAttributeMode === 'single'\n ? `${connectionAttributeName}Connection_NOT`\n : `${connectionAttributeName}Connection_NONE`;\n }\n\n const primaryAttributeName = getPrimaryAttributeName(relationshipEntityAttributesSchema);\n const initialRows = useMemo(\n () =>\n defaultValue.value\n ? dataAdapter({ data: defaultValue.value, defaultScope, primaryAttributeName, relationshipEntitySchema, scope })\n : [],\n [defaultScope, defaultValue, primaryAttributeName, relationshipEntitySchema, scope]\n );\n const entityQuery = getRelatedItemsQuery({\n attributeName: name,\n relatedEntityName: relationshipEntityName,\n scope,\n schema,\n });\n const previewItems = rows.length ? rows.slice(0, 12).map((row) => row[primaryAttributeName] as string) : [];\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: (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 // called on scroll and possibly on mount to fetch more data as the user scrolls and reaches bottom of table\n const fetchMoreOnBottomReached = useCallback(\n (containerRefElement?: HTMLDivElement | null) => {\n const totalCount = defaultValue.count ?? 0;\n\n if (!containerRefElement || totalCount === 0 || rows.length === 0) {\n return;\n }\n\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n //once the user has scrolled within 200px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 200 && !loading && rows.length < totalCount) {\n getData({\n variables: {\n options: {\n limit: PAGE_SIZE,\n offset: rows.length,\n },\n where: {\n productsConnection_SOME: {\n node: {\n _id: entityId,\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 // eslint-disable-next-line no-console -- show the error to the user\n console.error('Error fetching more data:', error);\n });\n }\n },\n [\n defaultValue.count,\n entityId,\n getData,\n initialRows,\n loading,\n relationshipEntitySchema?.plural,\n rows.length,\n schema,\n scope,\n ]\n );\n\n function handleSelection(event: SyntheticEvent): void {\n event.preventDefault();\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>\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-[2.375rem] fk-pl-3 fk-pr-10 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-items-start fk-space-x-2 fk-rounded-md fk-border fk-border-input fk-bg-background focus-visible:fk-outline-none fk-ring-offset-background focus-visible:fk-ring-2 focus-visible:fk-ring-ring focus-visible:fk-ring-offset-2 ${\n isOpen ? 'fk-outline-none fk-ring-2 fk-ring-ring fk-ring-offset-2' : ''\n }`}\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-space-x-2\">\n {!isOpen ? (\n <span className=\"fk-flex fk-flex-wrap fk-grow fk-pb-1.5\">\n {previewItems.map((item) => (\n <Badge className=\"fk-mr-2 fk-mt-1.5 fk-rounded-sm\" key={item} variant=\"secondary\">\n {item}\n </Badge>\n ))}\n </span>\n ) : (\n <Button className=\"fk-h-8 fk-mr-auto fk-mt-2\" onClick={handleSelection} variant=\"outline\">\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 {!isOpen ? (\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 fk-text-muted-foreground\"\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-absolute fk-right-[0.1875rem] fk-top-[0.1875rem] fk-h-8 fk-w-8 fk-rounded fk-text-muted-foreground\"\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 <Collapsible className=\"fk-w-full fk-space-y-2 !fk-ml-0\" onOpenChange={setIsOpen} open={isOpen}>\n <CollapsibleContent className=\"fk-w-full\">\n <div className=\"fk-flex fk-w-full fk-mt-3 fk-mb-2\" id={`relationship-dropdown-${name}`}>\n <DataTable\n classNames={{ table: 'fk-max-h-[17.5rem]' }}\n columns={columns}\n data={rows}\n entityName={entityName}\n onScroll={(e) => {\n fetchMoreOnBottomReached(e.target as HTMLDivElement);\n }}\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 </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\n/**\n * Find the name of the attribute of an entity with isPrimary === true.\n * The value of that attribute is returned as the value for the relationship attribute\n */\nfunction getPrimaryAttributeName(schemaAttributes: Attribute[]): string {\n return schemaAttributes.find((attr) => attr.isPrimary)?.name ?? schemaAttributes[0]?.name;\n}\n\ntype DataAdapter = {\n data: string | MappedEntityItem | EntityItem | AttributeValue | ImageValue;\n defaultScope: string;\n primaryAttributeName: string;\n relationshipEntitySchema: Entity | undefined;\n scope: string;\n};\n\nfunction dataAdapter({\n data,\n defaultScope,\n primaryAttributeName,\n relationshipEntitySchema,\n scope,\n}: DataAdapter): AttributeValue[] {\n if (!Array.isArray(data)) {\n return [];\n }\n\n return data.map(\n (row: MappedEntityItem | EntityItem) =>\n map((field) => {\n if (field && typeof field !== 'string' && !Array.isArray(field) && field.__typename) {\n const relationshipFieldSchema = find(propEq(field.__typename, 'name'))(\n relationshipEntitySchema?.attributes ?? []\n ) as Attribute | undefined;\n const relationshipFieldName = relationshipFieldSchema?.relationship?.field ?? '';\n\n if (relationshipFieldName) {\n return (\n (field[relationshipFieldName] as AttributeValue)?.[scope] ??\n (field[relationshipFieldName] as AttributeValue)?.[defaultScope] ??\n field[relationshipFieldName]\n );\n }\n\n return field[scope] ?? field[defaultScope];\n }\n\n if (Array.isArray(field)) {\n const attrField = field as AttributeValue[];\n\n return attrField\n .slice(0, 3)\n .map(\n (item) =>\n (item[primaryAttributeName] as AttributeValue | undefined)?.[scope] ??\n (item[primaryAttributeName] as AttributeValue | undefined)?.[defaultScope]\n )\n .join(', ');\n }\n\n return field;\n }, row) as AttributeValue\n );\n}\n","import { useEffect, useId, useState } from 'react';\nimport type { 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 type { ActionSetRelationship, Attribute, Entity } 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 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 primaryAttribute = getPrimaryAttribute(relationshipEntitySchema?.attributes ?? []);\n const primaryAttributeName = primaryAttribute.name;\n\n useEffect(() => {\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: { _id: String(defaultValue._id), value: defaultValue.value },\n disconnect: [],\n },\n },\n });\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 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 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 (value && typeof value === 'object' && !Array.isArray(value) && value[primaryAttributeName]) {\n displayValue =\n ((value[primaryAttributeName] as AttributeValue)?.[scope] as string) ??\n (value[primaryAttributeName] as AttributeValue)?.[defaultScope] ??\n value[primaryAttributeName];\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-none fk-ring-2 fk-ring-ring fk-ring-offset-2' : ''\n }`}\n >\n <Input\n className=\"fk-h-[2.375rem] fk-py-[0.4375rem] fk-caret-transparent fk-border-0 focus-visible:fk-ring-0 focus-visible:fk-ring-offset-0\"\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.1875rem] fk-h-8 fk-w-8 fk-rounded fk-text-muted-foreground\"\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.1875rem] fk-top-[0.1875rem] fk-h-8 fk-w-8 fk-rounded fk-text-muted-foreground\"\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\n/**\n * Find the attribute of an entity with isPrimary === true.\n * if none is found, return the first attribute.\n */\nfunction getPrimaryAttribute(schemaAttributes: Attribute[]): Attribute {\n return schemaAttributes.find((attr) => attr.isPrimary) ?? schemaAttributes[0];\n}\n","import { AlertTriangle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../../ui/primitives/alert';\nimport type { FormFieldParams } from '../../types';\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 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 { 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\nexport function Select({ control, fieldSchema, setValue }: FormFieldParams<'select'>): JSX.Element {\n const { name, label, isEditable, 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={field.value?.value ? String(field.value.value) : undefined}\n disabled={isEditable === false || field.value?.disabled}\n onValueChange={(value) => {\n handleInput(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={item.value}>\n {item.label}\n </SelectItem>\n );\n })}\n </SelectGroup>\n );\n }\n\n return (\n <SelectItem key={option.label} value={option.value}>\n {option.label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </SelectPrimitive>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\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 { AlertTriangle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\n\ntype Props = {\n inputType: string;\n label: string;\n};\n\nexport default function UndefinedFieldTypeError({ inputType, label }: Props): JSX.Element {\n return (\n <Alert variant=\"destructive\">\n <AlertTriangle className=\"h-4 w-4\" />\n <AlertTitle>Error</AlertTitle>\n <AlertDescription>\n {`Incorrect inputType: \"${inputType}\" for the \"${label}\" attribute. Please check the schema configuration.`}\n </AlertDescription>\n </Alert>\n );\n}\n","import { createElement, forwardRef, memo, useEffect, useImperativeHandle, useMemo } from 'react';\nimport type { ComponentType, ForwardedRef } from 'react';\nimport { useForm } 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 { Alert, AlertDescription, AlertTitle } from '../ui/primitives/alert';\nimport { Form } from '../ui/primitives/form';\nimport type { Entity, Schema } from '../core/types';\nimport type { EntityData, FormEntityItem } from '../graphql-client/types';\nimport { useConfig } from '../core/config/config-context';\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 UndefinedFieldTypeError from './fields/undefined-field-type-error';\nimport type { FormFieldParams } from './types';\n\nexport type SubmitHandle = {\n submit: () => void;\n hasErrors: () => void;\n hasDataChanged: () => boolean;\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: EntityData, previousData?: FormEntityItem) => void;\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 formSchema = entitySchema?.attributes ?? [];\n const validationSchema = useMemo(() => {\n return z.object(\n formSchema.reduce((acc, fieldSchema) => {\n if (typeof fieldSchema.validation === 'undefined') return acc;\n\n // Create a clearer validation schema for each field\n return {\n ...acc,\n [fieldSchema.name]: z.object({\n // Pass through the validation with more detailed error\n value: fieldSchema.validation(z).or(\n z.any().refine(() => false, {\n message: fieldSchema.label ? `${fieldSchema.label} is required` : 'Required field',\n })\n ),\n }),\n };\n }, {})\n );\n }, [formSchema]);\n type UserSchema = z.infer<typeof validationSchema>;\n\n const form = useForm<UserSchema>({\n resolver: zodResolver(validationSchema),\n values: formData,\n mode: 'onBlur',\n criteriaMode: 'all',\n });\n\n const { control, getValues, handleSubmit, setValue, watch, trigger, formState } = form;\n const { errors } = formState;\n const { getContributionPointConfig } = useConfig();\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 setIsDirty(false);\n onSubmit(getValues(), formData);\n })();\n });\n },\n hasErrors() {\n setIsDirty(true);\n },\n hasDataChanged() {\n return hasDataChanged(getValues(), formData);\n },\n }));\n\n useEffect(() => {\n const formChangesSubscription = watch((changedData) => {\n setIsDirty(hasDataChanged(changedData, formData));\n });\n\n return () => {\n formChangesSubscription.unsubscribe();\n };\n }, [formData, setIsDirty, watch]);\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 return (\n <Form {...form}>\n <form className=\"fk-flex fk-flex-col fk-gap-y-5\">\n {formSchema.map((field) => {\n if (field.name === '_id') {\n return null;\n }\n\n const fieldComponent =\n (getContributionPointConfig('formFields', [field.inputType])?.[0]?.component as unknown as\n | ComponentType<FormFieldParams<typeof field.inputType>>\n | undefined) ?? formFieldComponentsMap[field.inputType as keyof typeof formFieldComponentsMap];\n\n return fieldComponent ? (\n createElement(\n fieldComponent as ComponentType<FormFieldParams<typeof field.inputType>>,\n {\n key: field.name,\n control,\n defaultScope,\n defaultValue: formData ? formData[field.name] : { value: '', disabled: false, scope: defaultScope },\n entityId,\n entityName,\n entityNamePlural,\n fieldSchema: field,\n getValues,\n schema,\n scope: currentScope,\n setValue,\n } as FormFieldParams<typeof field.inputType>\n )\n ) : (\n <UndefinedFieldTypeError inputType={field.inputType} key={field.name} label={field.label} />\n );\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, useRef } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { find, propEq } from 'ramda';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { Loader2 } from 'lucide-react';\nimport { useAppContext } from '../core/app-context';\nimport type { SingleProject } from '../core/config/types';\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 FormBuilder from '../form/form-builder';\nimport type { SubmitHandle } from '../form/form-builder';\nimport type { Entity } from '../core/types';\nimport { getEntityCreateMutation, getEntityQuery } from '../graphql-client/queries';\nimport type { EntityData } from '../graphql-client/types';\nimport { Button } from '../ui/primitives/button';\nimport { useDispatch } from './actions-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 { projects, currentProjectId } = useConfig();\n const { schema, scopes } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\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 [runMutation, setMutation, setOptions, mutationData] = useEntityMutation();\n const { setIsDirty } = useDrawerModalContext();\n\n useEffect(() => {\n if (mutationData.error) {\n ref.current?.hasErrors();\n }\n }, [mutationData.error]);\n\n function handleBeforeClose(): boolean {\n if (ref.current?.hasDataChanged()) {\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 dispatch({ type: 'Dismiss', _id: action._id, payload: {} });\n },\n },\n },\n });\n\n return false;\n }\n\n return true;\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: EntityData) => {\n const _id = uuidv4();\n const mutation = getEntityCreateMutation(entityNamePlural, schema, newData, _id);\n const entityQuery = getEntityQuery(entityNamePlural, scope, schema);\n const refreshQuery = gql`\n ${entityQuery.query}\n `;\n\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n refetchQueries: [refreshQuery],\n onCompleted: () => {\n handleClose(action._id);\n toast.success('Your changes have been saved.');\n },\n });\n runMutation(true);\n },\n [action._id, entityNamePlural, handleClose, runMutation, schema, setMutation, scope, setOptions]\n );\n\n return (\n <DrawerModal\n actions={\n <Button\n className=\"fk-px-8\"\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 }\n beforeClose={handleBeforeClose}\n depth={depth}\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 { useEffect, useCallback, useState } from 'react';\nimport { prop, uniqBy } from 'ramda';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { getServerError, parseErrorBody } from './error-utils';\nimport { getEntityQuery, mapQueryResult, mapQueryResultForFormFields } from './queries';\nimport type {\n EntityQueryAggregate,\n EntityQueryResults,\n FormEntityItem,\n MappedEntityQueryResults,\n MappedEntityItem,\n MappedFormEntityQueryResults,\n UseEntityQueryParams,\n ImageValue,\n} from './types';\n\ntype FetchMoreOptions = { variables: { options: { offset: number; limit: number } } };\ntype Results = (MappedEntityQueryResults | MappedFormEntityQueryResults) | { count: 0; results: [] };\n\nexport function useEntityQuery({ entityNamePlural, schema, scope, variables, isForm }: UseEntityQueryParams): {\n count: number;\n data: MappedEntityItem[] | FormEntityItem[] | ImageValue[] | undefined;\n fetchMore: (args: FetchMoreOptions) => void;\n isLoading: boolean;\n isProjectDisabled: boolean;\n isProjectReadOnly: boolean;\n} {\n const [result, setResult] = useState<Results>({\n count: 0,\n results: [],\n });\n const entityQuery = getEntityQuery(entityNamePlural, scope, schema);\n const {\n loading: isLoading,\n data,\n fetchMore: fetchNextPage,\n error,\n } = useQuery<EntityQueryResults & EntityQueryAggregate>(\n gql`\n ${entityQuery.query}\n `,\n { variables }\n );\n\n // Parse 403 error response to determine the specific error code\n const serverError = getServerError(error);\n\n const { isProjectDisabled, isProjectReadOnly } = (() => {\n if (serverError?.statusCode === 403) {\n const responseBody = parseErrorBody<{ code?: string }>(serverError.bodyText);\n\n if (responseBody && typeof responseBody.code === 'string') {\n if (responseBody.code === 'PROJECT_PAUSED') {\n return {\n isProjectDisabled: true,\n isProjectReadOnly: false,\n };\n }\n\n if (responseBody.code === 'READ_ONLY_MODE') {\n return {\n isProjectDisabled: false,\n isProjectReadOnly: true,\n };\n }\n }\n\n return {\n isProjectDisabled: true,\n isProjectReadOnly: false,\n };\n }\n\n return {\n isProjectDisabled: false,\n isProjectReadOnly: false,\n };\n })();\n\n const mappedResults = useCallback(\n () => mapResults({ data, entityNamePlural, isForm, schema, scope }),\n [data, entityNamePlural, isForm, schema, scope]\n );\n\n function fetchMore(args: FetchMoreOptions): void {\n fetchNextPage(args)\n .then(({ data: res }) => {\n const mappedFetchMoreResults = mapResults({ data: res, entityNamePlural, isForm, schema, scope });\n\n setResult((prevRows) => {\n return {\n count: mappedFetchMoreResults.count,\n results: uniqBy(prop('_id'), [...prevRows.results, ...mappedFetchMoreResults.results]),\n } as Results;\n });\n })\n .catch((error: unknown) => {\n // eslint-disable-next-line no-console -- show the error to the user\n console.error('Error fetching more data:', error);\n });\n }\n\n useEffect(() => {\n setResult(mappedResults);\n }, [mappedResults]);\n\n return { isLoading, fetchMore, count: result.count, data: result.results, isProjectDisabled, isProjectReadOnly };\n}\n\nfunction mapResults(\n args: {\n data: (EntityQueryResults & EntityQueryAggregate) | undefined;\n } & UseEntityQueryParams\n): MappedEntityQueryResults | MappedFormEntityQueryResults {\n const entityNamePlural = args.entityNamePlural as keyof FormEntityItem;\n\n if (!args.data?.[entityNamePlural]) {\n return { count: 0, results: [] };\n }\n\n return args.isForm\n ? mapQueryResultForFormFields(args.entityNamePlural, args.scope, args.data, args.schema)\n : mapQueryResult(args.entityNamePlural, args.scope, args.data, args.schema);\n}\n","import { 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 { useDrawerModalContext } from '../ui/drawer-modal-context';\n\nexport default function SaveButton({ handleSave, isLoading }: { handleSave: () => void; isLoading: boolean }) {\n const { isDirty } = useDrawerModalContext();\n return (\n <Button\n className=\"fk-px-8\"\n disabled={!isDirty}\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 );\n}\n","import { Skeleton } from '../ui/primitives/skeleton';\n\nexport default function Loading(): JSX.Element {\n const numberOfSkeletonFields = 10;\n\n return (\n <>\n {/* eslint-disable-next-line no-param-reassign -- allowed for simplicity */}\n {Array.from({ length: numberOfSkeletonFields }, (_, i) => i++).map((i) => (\n <div className=\"fk-mt-3 fk-mb-[1.625rem]\" 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-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, useRef, useState } from 'react';\nimport { find, propEq } from 'ramda';\nimport { toast } from 'sonner';\nimport { gql } from '@apollo/client';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport type { SingleProject } from '../core/config/types';\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 { getEntityUpdateMutation } from '../graphql-client/queries';\nimport type { EntityData, 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 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 { 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 { projects, currentProjectId } = useConfig();\n const { schema, scopes } = useCallback(\n () => find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject,\n [currentProjectId, projects]\n )();\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 [runMutation, setMutation, setOptions, mutationData] = useEntityMutation();\n const { setIsDirty } = useDrawerModalContext();\n\n const setFormIsDirty = useCallback(\n (isDirty: boolean) => {\n setIsDirty(isDirty);\n },\n [setIsDirty]\n );\n\n useEffect(() => {\n if (mutationData.error) {\n ref.current?.hasErrors();\n }\n }, [mutationData.error]);\n\n const handleBeforeClose = useCallback(() => {\n if (ref.current?.hasDataChanged()) {\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 dispatch({ type: 'Dismiss', _id: action._id, payload: {} });\n },\n },\n },\n });\n\n return false;\n }\n\n return true;\n }, [dispatch, action._id]);\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(scope: string): void {\n if (ref.current?.hasDataChanged()) {\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 setCurrentScope(scope);\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope } });\n },\n },\n },\n });\n\n return;\n }\n\n setCurrentScope(scope);\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope } });\n }\n\n const saveEntity = useCallback(\n (newData: EntityData, previousData?: FormEntityItem) => {\n if (!previousData) return;\n\n const mutation = getEntityUpdateMutation(entityNamePlural, entityId, currentScope, schema, previousData, newData);\n setMutation(gql`\n ${mutation}\n `);\n setOptions({\n variables: { where: { _id: entityId } },\n onCompleted: () => {\n toast.success('Your changes have been saved.');\n },\n });\n runMutation(true);\n },\n [action._id, entityId, entityNamePlural, schema, runMutation, setMutation, setOptions, currentScope]\n );\n\n const { isLoading, data: results } = useEntityQuery({\n entityNamePlural,\n schema,\n scope: currentScope,\n variables: { where: { _id: entityId } },\n isForm: true,\n });\n const data = results as FormEntityItem[];\n\n function getEntityIdentifier(entitySchema: Entity, data: FormEntityItem[]): string {\n const primaryAttribute = entitySchema?.attributes.find((attr) => attr.isPrimary) ?? entitySchema?.attributes[0];\n const primaryAttributeName = primaryAttribute.name;\n const isRelationship = primaryAttribute?.relationship?.field !== undefined;\n\n if (isLoading || !data.length) {\n return '';\n }\n\n return isRelationship && primaryAttribute?.relationship?.field\n ? ((data[0][primaryAttributeName]?.value as Record<string, unknown>)?.[\n primaryAttribute.relationship.field\n ] as string)\n : (data[0][primaryAttributeName]?.value as string);\n }\n\n const entityIdentifier = !isLoading && data.length && 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: </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 isFocused={isFocused}\n onClose={() => {\n handleClose(action._id);\n }}\n onFormChange={() => {}}\n title={entityIdentifier as string}\n >\n {isLoading || !data.length ? (\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, useState, useRef } from 'react';\nimport { find, propEq } from 'ramda';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport { LoaderCircle, Search as SearchIcon } 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 type { SingleProject } from '../core/config/types';\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';\n\ntype Props = {\n action: ActionEditRelationship;\n depth: number;\n isFocused: boolean;\n};\n\nconst PAGE_SIZE = 25;\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 { connectedEntitiesCount, connectionName, entityId, entityName, mode, relationshipId } = action.payload;\n const { projects, currentProjectId } = useConfig();\n const { schema } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const entityLabel = entitySchema?.menu?.label ?? entityName.toLowerCase();\n const entityNamePlural = entitySchema?.plural ?? '';\n const relationshipContext = relationships[relationshipId];\n const [searchResultIds, setSearchResultIds] = useState<{ _id: string }[]>([]);\n\n const initialSelectionState =\n mode === 'single'\n ? relationshipContext?.connect\n ? [\n {\n id: (relationshipContext.connect as SingleRelationshipConnection)._id,\n value: (relationshipContext.connect as SingleRelationshipConnection).value,\n },\n ]\n : []\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 filterOutConnectedEntities = connectionName\n ? {\n [connectionName]: {\n node: {\n _id: entityId,\n },\n },\n }\n : {};\n const conditionalWhereClause =\n mode === 'multiple'\n ? {\n ...filterOutConnectedEntities,\n OR: searchResultIds,\n }\n : {\n OR: searchResultIds,\n };\n\n const { count, data, fetchMore, isLoading } = useEntityQuery({\n entityNamePlural,\n schema,\n scope,\n variables: {\n options: {\n offset: 0,\n limit: PAGE_SIZE,\n },\n where: conditionalWhereClause,\n },\n });\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 const handleClose = useCallback(\n (_id: Action['_id']) => {\n actionDispatch({ type: 'Dismiss', _id, payload: {} });\n },\n [actionDispatch]\n );\n\n // called on scroll and possibly on mount to fetch more data as the user scrolls and reaches bottom of table\n const fetchMoreOnBottomReached = useCallback(\n (containerRefElement?: HTMLDivElement | null) => {\n const rowsCount = data?.length ?? 0;\n const totalCount = count - connectedEntitiesCount;\n\n if (containerRefElement && totalCount > 0 && rowsCount > 0) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n //once the user has scrolled within 500px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 500 && !isLoading && rowsCount < totalCount) {\n fetchMore({\n variables: {\n options: {\n offset: rowsCount,\n limit: PAGE_SIZE,\n },\n },\n });\n }\n }\n },\n [connectedEntitiesCount, count, data?.length, fetchMore, isLoading]\n );\n\n function handleSelection(): void {\n let connect;\n\n if (mode === 'single') {\n const selected = selectedRows[0];\n\n connect = {\n _id: selected.id ?? '',\n value: selected.value,\n } as SingleRelationshipConnection;\n }\n\n if (mode === 'multiple') {\n connect = selectedRows?.map((selected) => ({\n _id: selected.id ?? '',\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 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 <Button\n className=\"fk-px-8\"\n onClick={() => {\n handleCreateEntity();\n }}\n variant=\"outline\"\n >\n {`Create ${entityLabel}`}\n </Button>\n </>\n }\n depth={depth}\n isFocused={isFocused}\n onClose={() => {\n handleClose(action._id);\n }}\n title={`Select ${entityLabel}`}\n >\n <DataTable\n columns={isLoading ? loadingColumns : columns}\n data={isLoading ? loadingData : (data ?? [])}\n entityName={entitySchema?.name ?? ''}\n initialSelectionState={\n selectedRows?.reduce(\n (acc, selected) => ({ ...acc, ...(selected.id ? { [selected.id]: true } : {}) }),\n {}\n ) as {\n [_id: string]: boolean;\n }\n }\n onEntitySelectionChange={handleSelectionChange}\n onScroll={(e) => {\n fetchMoreOnBottomReached(e.target as HTMLDivElement);\n }}\n toolbarComponent={() => (\n <SearchBar\n entityNamePlural={entityNamePlural}\n projectId={currentProjectId ?? ''}\n setSearchResultIds={setSearchResultIds}\n />\n )}\n />\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 function getBaseSearchRequest(): SearchRequestProps {\n return {\n searchRequests: {\n searches: [\n {\n collection: entityNamePlural,\n },\n ],\n },\n commonParams: {\n q: '',\n },\n };\n }\n\n const searchRequest = getBaseSearchRequest();\n const [searchQuery, setSearchQuery] = useState(searchRequest);\n const { results, isLoading } = useSearch(projectId, searchQuery);\n const prevResultsRef = useRef<any[] | null>(null);\n\n const debouncedSetSearchQuery = useCallback(\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.value;\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(fn: Function, ms = 300) {\n let timeoutId: ReturnType<typeof setTimeout>;\n return function (this: any, ...args: any[]) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn.apply(this, args), ms);\n };\n}\n","'use client';\n\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 { Outlet } from 'react-router-dom';\nimport { AuthProvider } from '../../auth/auth-context';\nimport { ConfigProvider } from '../../core/config/config-context';\nimport { GraphQLProvider } from '../../graphql-client/graphql-context';\nimport { ActionsManager } from '../../entities/actions-manager';\nimport type { ProjectOptions } from '../../core/config/types';\nimport { DrawerModalProvider } from '../drawer-modal-context';\n\nexport function Root({ config }: { config: ProjectOptions[] }): JSX.Element {\n const [defaultApp] = config;\n const { basePath, projectId } = defaultApp;\n\n if (window.location.pathname === basePath) {\n window.location.href = `${basePath}/${projectId}`;\n }\n\n return (\n <AuthProvider>\n <ConfigProvider config={config}>\n <GraphQLProvider>\n <DrawerModalProvider>\n <ActionsManager />\n </DrawerModalProvider>\n <Outlet />\n </GraphQLProvider>\n </ConfigProvider>\n </AuthProvider>\n );\n}\n","'use client';\n\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 lg:fk-px-0\">\n <div className=\"fk-w-full lg:fk-p-8\">\n <div className=\"fk-mx-auto fk-flex fk-w-full fk-flex-col fk-justify-center sm:fk-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 dark:fk-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","import { AlertCircle } from 'lucide-react';\nimport { useRouteError } from 'react-router-dom';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\n\nexport function ErrorBoundary() {\n const error = useRouteError();\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","'use client';\n\nimport { useEffect, useState } from 'react';\nimport { debug } from 'debug';\nimport { createBrowserRouter, RouterProvider } 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 { getApps } from './config/config-context';\nimport { GlobalError } from './error/global-error';\nimport { ErrorBoundary } from './error/error-boundary';\nimport type { Config, ProjectOptions, SingleProject } from './config/types';\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\nexport function FlexkitStudio({ config }: { config: Config }): JSX.Element | null {\n const [mounted, setMounted] = useState(false);\n const log = debug('core:flexkit-studio');\n const configArray: ProjectOptions[] = Array.isArray(config)\n ? config.map((project) => mapConfig(project))\n : [mapConfig(config)];\n const apps = getApps(configArray);\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 const router = createBrowserRouter([\n {\n path: '/studio',\n element: <Root config={configArray} />,\n errorElement: <GlobalError />,\n children: [\n {\n path: '/studio/:projectId',\n element: <Layout version={{ current: '1.0.0', latest: '1.0.0', isCurrent: true }} />,\n children: apps.map((app) => ({\n path: app.name,\n element: app.component,\n errorElement: <ErrorBoundary />,\n children: app.routes?.map((route) => ({\n path: route.path,\n element: route.component,\n errorElement: <ErrorBoundary />,\n children: route.children?.map((child) => ({ path: child.path, element: child.component })),\n })),\n })),\n },\n ],\n },\n ]);\n\n log('Init Studio');\n\n return (\n <ThemeProvider attribute=\"class\" defaultTheme=\"system\" disableTransitionOnChange enableSystem>\n <AppProvider>\n <ActionsProvider>\n <RouterProvider router={router} />\n </ActionsProvider>\n </AppProvider>\n </ThemeProvider>\n );\n}\n\nfunction mapConfig(project: SingleProject | ProjectOptions): ProjectOptions {\n return {\n basePath: project.basePath ?? '/',\n menuGroups: project.menuGroups ?? [],\n icon: project.icon,\n plugins: project.plugins,\n projectId: project.projectId,\n title: project.title,\n schema: project.schema,\n scopes: project.scopes,\n };\n}\n","import { toast } from 'sonner';\nimport { apiPaths } from './api-paths';\nimport { useCreateAssetMutation } from '../graphql-client/use-entity-mutation';\nimport type { FormEntityItem } from '../graphql-client/types';\n\nexport const ACCEPTED_MIME_TYPES = [\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'image/vnd.microsoft.icon',\n 'image/bmp',\n 'image/gif',\n 'image/tiff',\n 'image/svg+xml',\n 'image/avif',\n 'image/heic',\n 'image/heif',\n 'image/heic-sequence',\n 'image/heif-sequence',\n 'image/apng',\n 'audio/aac',\n 'audio/mpeg',\n 'audio/wav',\n 'audio/webm',\n 'audio/midi',\n 'audio/x-midi',\n 'audio/ogg',\n 'video/x-msvideo',\n 'video/mp4',\n 'video/mpeg',\n 'video/webm',\n 'video/quicktime',\n 'video/ogg',\n 'video/mp2t',\n 'video/3gpp',\n 'video/3gpp2',\n 'application/x-7z-compressed',\n 'application/zip',\n 'application/vnd.amazon.ebook',\n 'application/octet-stream',\n 'application/epub+zip',\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-fontobject',\n 'application/gzip',\n 'application/x-gzip',\n 'application/java-archive',\n 'application/json',\n 'application/ld+json',\n 'text/javascript',\n 'application/vnd.oasis.opendocument.presentation',\n 'application/vnd.oasis.opendocument.spreadsheet',\n 'application/vnd.oasis.opendocument.text',\n 'application/ogg',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.rar',\n 'application/x-tar',\n 'application/vnd.visio',\n 'application/xhtml+xml',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/xml',\n];\n\nexport type UploadedFileResult = {\n pathname: string;\n lqip?: string;\n size: number;\n mimeType: string;\n originalFilename: string;\n width?: number;\n height?: number;\n};\n\ntype UploadResponse = {\n pathname: string;\n lqip?: string;\n};\n\nexport type OpenFileDialogAndUploadOptions = {\n projectId: string | undefined;\n accept?: string;\n multiple?: boolean;\n maxBytes?: number;\n};\n\n/**\n * Opens a native file picker and uploads selected files to the Flexkit upload endpoint.\n * It also creates an asset node in the database.\n * Returns a list of uploaded file results. Skips files that exceed maxBytes.\n */\nasync function openFileDialogAndUpload(\n options: OpenFileDialogAndUploadOptions,\n createAssetNode?: (file: UploadedFileResult, projectId?: string) => Promise<void>\n): Promise<UploadedFileResult[]> {\n const { projectId, accept, multiple = true, maxBytes = 4 * 1024 * 1024 } = options;\n\n const input = document.createElement('input');\n input.type = 'file';\n const resolvedAccept = accept ?? ACCEPTED_MIME_TYPES.join(',');\n\n input.accept = resolvedAccept;\n input.multiple = multiple;\n input.style.display = 'none';\n document.body.appendChild(input);\n\n try {\n const files = await new Promise<FileList | null>((resolve) => {\n input.onchange = () => resolve(input.files);\n input.click();\n });\n\n if (!files || files.length === 0) {\n return [];\n }\n\n const validFiles: File[] = [];\n\n for (const file of Array.from(files)) {\n if (file.size > maxBytes) {\n toast.error(`File size too big (max ${(maxBytes / (1024 * 1024)).toFixed(0)}MB): ${file.name}`);\n\n continue;\n }\n\n validFiles.push(file);\n }\n\n const uploadUrl = apiPaths(projectId).upload;\n const uploads = await Promise.all(\n validFiles.map(async (file): Promise<UploadedFileResult> => {\n const dimensions = await readImageDimensions(file);\n\n const response = await fetch(uploadUrl, {\n method: 'POST',\n headers: { 'Content-Type': file.type || 'application/octet-stream' },\n body: file,\n });\n\n if (!response.ok) {\n throw new Error(`Upload failed for ${file.name}`);\n }\n\n const data = (await response.json()) as UploadResponse;\n\n const result: UploadedFileResult = {\n pathname: data.pathname,\n lqip: data.lqip,\n originalFilename: file.name,\n size: file.size,\n mimeType: file.type,\n width: dimensions?.width,\n height: dimensions?.height,\n };\n\n if (createAssetNode) {\n await createAssetNode(result, projectId);\n }\n\n return result;\n })\n );\n\n if (uploads.length > 0) {\n toast.success(`Uploaded ${uploads.length} file${uploads.length > 1 ? 's' : ''}`);\n }\n\n return uploads;\n } catch (error) {\n // eslint-disable-next-line no-console -- surface error for debugging\n console.error(error);\n toast.error('Upload failed. Please try again.');\n\n return [];\n } finally {\n document.body.removeChild(input);\n }\n}\n\nasync function readImageDimensions(file: File): Promise<{ width: number; height: number } | null> {\n const isImage = file.type.startsWith('image/');\n\n if (!isImage) {\n return null;\n }\n\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n const img = new Image();\n img.onload = () => {\n resolve({ width: img.width, height: img.height });\n };\n img.onerror = () => resolve(null);\n img.src = reader.result as string;\n };\n reader.onerror = () => resolve(null);\n reader.readAsDataURL(file);\n });\n}\n\n// Asset creation is delegated via the createAssetNode callback so callers can use Apollo useMutation\n\nexport function useUploadAssets(): (options: OpenFileDialogAndUploadOptions) => Promise<UploadedFileResult[]> {\n const createAsset = useCreateAssetMutation();\n\n return async (options: OpenFileDialogAndUploadOptions): Promise<UploadedFileResult[]> => {\n return openFileDialogAndUpload(options, async (file) => {\n const entityData: FormEntityItem = {\n path: { _id: '', disabled: false, scope: 'default', value: file.pathname },\n originalFilename: { _id: '', disabled: false, scope: 'default', value: file.originalFilename },\n size: { _id: '', disabled: false, scope: 'default', value: file.size as unknown as string },\n lqip: { _id: '', disabled: false, scope: 'default', value: file.lqip },\n mimeType: { _id: '', disabled: false, scope: 'default', value: file.mimeType },\n ...(typeof file.width === 'number'\n ? { width: { _id: '', disabled: false, scope: 'default', value: file.width as unknown as string } }\n : {}),\n ...(typeof file.height === 'number'\n ? { height: { _id: '', disabled: false, scope: 'default', value: file.height as unknown as string } }\n : {}),\n };\n\n await createAsset(entityData);\n });\n };\n}\n","import { AlertCircle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\n\nexport function ProjectDisabled(): JSX.Element {\n return (\n <Alert variant=\"destructive\">\n <AlertCircle className=\"fk-h-4 fk-w-4\" />\n <AlertTitle>Project Paused</AlertTitle>\n <AlertDescription>\n This project has been paused. To troubleshoot this error, please{' '}\n <a\n className=\"fk-text-blue-500 fk-underline\"\n href=\"https://flexkit.io/docs/errors/project-paused\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n follow these steps\n </a>\n .\n </AlertDescription>\n </Alert>\n );\n}\n","import { AlertCircle } from 'lucide-react';\nimport { Alert, AlertDescription, AlertTitle } from '../../ui/primitives/alert';\nimport { useGraphQLError } from '../../graphql-client/graphql-context';\n\nexport function SchemaError(): JSX.Element {\n const { schemaErrorMessage } = useGraphQLError();\n\n if (!schemaErrorMessage) {\n return <></>;\n }\n\n return (\n <Alert className=\"fk-mb-4\" variant=\"destructive\">\n <AlertCircle className=\"fk-h-4 fk-w-4\" />\n <AlertTitle>Schema Error</AlertTitle>\n <AlertDescription>\n There is an error in your Flexkit schema. Please check the schema configuration in your flexkit.config.ts file.\n <br />\n {schemaErrorMessage}\n </AlertDescription>\n </Alert>\n );\n}\n","import type { Config } from './types';\n\nexport function defineConfig<T extends Config>(config: T): T {\n return config;\n}\n","import type { Entity } from '../types';\n\nexport function defineEntity<T extends Entity>(entity: T): T {\n return entity;\n}\n","import * as React from 'react';\nimport { Check as CheckIcon, CirclePlus as CirclePlusIcon } from 'lucide-react';\nimport { Column } from '@tanstack/react-table';\nimport { cn } from '../ui/lib/utils';\nimport { Badge } from '../ui/primitives/badge';\nimport { Button } from '../ui/primitives/button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from '../ui/primitives/command';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/primitives/popover';\nimport { Separator } from '../ui/primitives/separator';\n\ninterface DataTableFacetedFilterProps<TData, TValue> {\n column?: Column<TData, TValue>;\n title?: string;\n options: {\n label: string;\n value: string;\n icon?: React.ComponentType<{ className?: string }>;\n }[];\n}\n\nexport function DataTableFacetedFilter<TData, TValue>({\n column,\n title,\n options,\n}: DataTableFacetedFilterProps<TData, TValue>) {\n const facets = column?.getFacetedUniqueValues();\n const selectedValues = new Set(column?.getFilterValue() as string[]);\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"fk-h-8 fk-border-dashed\">\n <CirclePlusIcon className=\"fk-mr-2 fk-h-4 fk-w-4\" />\n {title}\n {selectedValues?.size > 0 && (\n <>\n <Separator orientation=\"vertical\" className=\"fk-mx-2 fk-h-4\" />\n <Badge variant=\"secondary\" className=\"fk-rounded-sm fk-px-1 fk-font-normal lg:fk-hidden\">\n {selectedValues.size}\n </Badge>\n <div className=\"fk-space-x-1 lg:fk-flex\">\n {selectedValues.size > 2 ? (\n <Badge variant=\"secondary\" className=\"fk-rounded-sm fk-px-1 fk-font-normal\">\n {selectedValues.size} selected\n </Badge>\n ) : (\n options\n .filter((option) => selectedValues.has(option.value))\n .map((option) => (\n <Badge variant=\"secondary\" key={option.value} className=\"fk-rounded-sm fk-px-1 fk-font-normal\">\n {option.label}\n </Badge>\n ))\n )}\n </div>\n </>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"fk-w-[200px] fk-p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder={title} />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n <CommandGroup>\n {options.map((option) => {\n const isSelected = selectedValues.has(option.value);\n return (\n <CommandItem\n key={option.value}\n onSelect={() => {\n if (isSelected) {\n selectedValues.delete(option.value);\n } else {\n selectedValues.add(option.value);\n }\n const filterValues = Array.from(selectedValues);\n column?.setFilterValue(filterValues.length ? filterValues : undefined);\n }}\n >\n <div\n className={cn(\n 'fk-mr-2 fk-flex fk-h-4 fk-w-4 fk-items-center fk-justify-center fk-rounded-sm fk-border fk-border-primary',\n isSelected ? 'fk-bg-primary fk-text-primary-foreground' : 'fk-opacity-50 [&_svg]:fk-invisible'\n )}\n >\n <CheckIcon className={cn('h-4 w-4')} />\n </div>\n {option.icon && <option.icon className=\"fk-mr-2 fk-h-4 fk-w-4 fk-text-muted-foreground\" />}\n <span>{option.label}</span>\n {facets?.get(option.value) && (\n <span className=\"fk-ml-auto fk-flex fk-h-4 fk-w-4 fk-items-center fk-justify-center fk-font-mono fk-text-xs\">\n {facets.get(option.value)}\n </span>\n )}\n </CommandItem>\n );\n })}\n </CommandGroup>\n {selectedValues.size > 0 && (\n <>\n <CommandSeparator />\n <CommandGroup>\n <CommandItem\n onSelect={() => column?.setFilterValue(undefined)}\n className=\"fk-justify-center fk-text-center\"\n >\n Clear filters\n </CommandItem>\n </CommandGroup>\n </>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n}\n","'use client';\n\nimport { Ellipsis, Pencil, Trash2 } from 'lucide-react';\nimport type { Row } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\nimport { useDispatch } from '../entities/actions-context';\n\ninterface DataTableRowActionsProps<TData> {\n entityName: string;\n entityNamePlural: string;\n row: Row<TData>;\n options?: {\n canDelete?: boolean;\n canEdit?: boolean;\n };\n}\n\nexport function DataTableRowActions<TData>({\n entityName,\n entityNamePlural,\n row,\n options = { canDelete: true, canEdit: true },\n}: DataTableRowActionsProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const entityId = row.original._id;\n\n function handleEdit(): void {\n actionDispatch({ type: 'EditEntity', payload: { entityId, entityNamePlural } });\n }\n\n function handleDelete(): void {\n actionDispatch({ type: 'DeleteEntity', payload: { entityId, entityName } });\n }\n\n return (\n <div className=\"fk-flex\">\n {options.canEdit && (\n <Button className=\"fk-flex fk-h-7 fk-w-7 fk-p-0 fk-mr-1\" onClick={handleEdit} variant=\"ghost\">\n <Pencil className=\"fk-h-4 fk-w-4\" />\n <span className=\"fk-sr-only\">Edit</span>\n </Button>\n )}\n {options.canDelete && !options.canEdit && (\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 )}\n {options.canEdit && options.canDelete && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk-flex fk-h-7 fk-w-7 fk-p-0\" variant=\"ghost\">\n <Ellipsis className=\"fk-h-4 fk-w-4\" />\n <span className=\"fk-sr-only\">Additional actions</span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[160px]\">\n <DropdownMenuItem onClick={handleEdit}>Edit</DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={handleDelete}>Delete</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { Settings2 } from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\nimport { Button } from '../ui/primitives/button';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../ui/primitives/dropdown-menu';\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTableViewOptions<TData>({ table }: DataTableViewOptionsProps<TData>): JSX.Element {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk-hidden fk-h-8 lg:fk-flex\" size=\"sm\" variant=\"outline\">\n <Settings2 className=\"fk-mr-2 fk-h-4 fk-w-4\" />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk-w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n checked={column.getIsVisible()}\n className=\"capitalize\"\n key={column.id}\n onCheckedChange={(value) => {\n column.toggleVisibility(Boolean(value));\n }}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { find, propEq } from 'ramda';\nimport type { Table } from '@tanstack/react-table';\nimport { Loader2, Trash2 } from 'lucide-react';\nimport { gql } from '@apollo/client';\nimport { toast } from 'sonner';\nimport { Button } from '../ui/primitives/button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/primitives/select';\nimport { useDispatch } from '../entities/actions-context';\nimport { useAppContext, useAppDispatch } from '../core/app-context';\nimport { useConfig } from '../core/config/config-context';\nimport type { SingleProject } from '../core/config/types';\nimport { DataTableViewOptions } from './data-table-view-options';\nimport { useEntityMutation } from '../graphql-client/use-entity-mutation';\nimport { getEntityDeleteMutation } from '../graphql-client/queries';\n\ninterface DataTableToolbarProps<TData> {\n entityName: string;\n table: Table<TData>;\n}\n\nexport function DataTableToolbar<TData>({ entityName, table }: DataTableToolbarProps<TData>): JSX.Element {\n const actionDispatch = useDispatch();\n const appDispatch = useAppDispatch();\n const appContext = useAppContext();\n const { projects, currentProjectId } = useConfig();\n const { scopes } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const [runMutation, setMutation, setOptions] = useEntityMutation();\n const [isDeleting, setIsDeleting] = useState(false);\n\n // Collect selected entity ids from the table\n // @ts-expect-error -- the DataGrid's original type doesn't know about the _id property\n const selectedIds: string[] = table.getSelectedRowModel().rows.map((row) => row.original._id as string);\n\n function handleCreate(): void {\n actionDispatch({ type: 'AddEntity', payload: { entityName } });\n }\n\n function handleScopeChange(value: string): void {\n appDispatch({ type: 'setScope', payload: { projectId: currentProjectId, scope: value } });\n }\n\n async function deleteOne(_id: string): Promise<void> {\n const { schema } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const mutation = getEntityDeleteMutation(entityName, schema, _id);\n\n await new Promise<void>((resolve) => {\n setMutation(gql`\n ${mutation}\n `);\n\n setOptions({\n variables: { where: { _id } },\n update(cache: { evict: (arg0: { id: string }) => void }) {\n cache.evict({ id: _id });\n },\n onCompleted: () => {\n resolve();\n },\n });\n\n runMutation(true);\n });\n }\n\n function handleBatchDelete(): void {\n const itemLabel = entityName === '_asset' ? 'asset' : entityName.toLowerCase();\n\n actionDispatch({\n type: 'AlertDialog',\n payload: {\n options: {\n dialogTitle: `Delete ${selectedIds.length} ${itemLabel}${selectedIds.length > 1 ? 's' : ''}`,\n dialogMessage:\n selectedIds.length > 1\n ? `Are you sure you want to delete the selected ${itemLabel}s? They will be deleted permanently.`\n : `Are you sure you want to delete the selected ${itemLabel}? The item will be deleted permanently.`,\n dialogCancelTitle: 'Cancel',\n dialogActionLabel: 'Delete',\n isDestructive: true,\n dialogActionSubmit: async () => {\n setIsDeleting(true);\n try {\n for (const id of selectedIds) {\n // eslint-disable-next-line no-await-in-loop\n await deleteOne(id);\n }\n\n table.resetRowSelection();\n\n toast.success(selectedIds.length > 1 ? 'Items successfully deleted.' : 'Item successfully deleted.');\n } catch {\n toast.error('Failed to delete selected items.');\n } finally {\n setIsDeleting(false);\n }\n },\n dialogActionCancel: () => {\n // no-op\n },\n },\n },\n });\n }\n\n return (\n <div className=\"fk-flex fk-items-center fk-justify-between\">\n <div className=\"fk-flex fk-flex-1 fk-items-center fk-space-x-2\">\n {scopes && scopes.length > 0 ? (\n <Select\n defaultValue={appContext.scope}\n onValueChange={(value) => {\n handleScopeChange(value);\n }}\n value={appContext.scope}\n >\n <SelectTrigger className=\"fk-w-[12rem] fk-h-8\" id=\"project\">\n <span className=\"fk-text-muted-foreground\">Scope:</span>\n <SelectValue>\n {\n ((find(propEq(appContext.scope ?? '', 'name'))(scopes) as { name: string; label: string }) || null)\n ?.label\n }\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 <DataTableViewOptions table={table} />\n </div>\n {selectedIds.length > 0 ? (\n <Button\n className=\"fk-h-8 fk-mr-2 lg:fk-flex\"\n disabled={isDeleting}\n onClick={handleBatchDelete}\n size=\"sm\"\n variant=\"destructive\"\n >\n {isDeleting ? (\n <Loader2 className=\"fk-mr-2 fk-h-4 fk-w-4 fk-animate-spin\" />\n ) : (\n <Trash2 className=\"fk-mr-2 fk-h-4 fk-w-4\" />\n )}\n Delete ({selectedIds.length})\n </Button>\n ) : null}\n <Button\n className=\"fk-ml-auto fk-h-8 lg:fk-flex\"\n disabled={isDeleting}\n onClick={handleCreate}\n size=\"sm\"\n variant=\"default\"\n >\n Create\n </Button>\n </div>\n );\n}\n"]}
|