@nubase/frontend 0.1.2 → 0.1.5
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/index.css +352 -34
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +3391 -393
- package/dist/index.d.ts +3391 -393
- package/dist/index.js +17507 -6905
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17424 -6962
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +2152 -511
- package/package.json +54 -29
- package/README.md +0 -127
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","../src/components/dock/Dock.tsx","../src/components/dock/ResizeHandle.tsx","../src/components/dock/useResize.ts","../src/components/form/SchemaForm.tsx","../src/hooks/useComputedMetadata.ts","../src/hooks/useLayout.ts","../src/components/buttons/Button/Button.tsx","../src/utils.ts","../src/components/form/FormFieldRenderer.tsx","../src/components/form-controls/FormControl/FormControl.tsx","../src/components/form-controls/Label/Label.tsx","../src/components/form-controls/TextInput/TextInput.tsx","../src/components/form/SchemaFormLayout.tsx","../src/components/form-controls/SearchTextInput/SearchTextInput.tsx","../src/components/form-controls/Select/Select.tsx","../src/components/floating/dialog/Dialog.tsx","../src/components/buttons/ButtonBar/ButtonBar.tsx","../src/components/floating/modal/Modal.tsx","../src/components/floating/dialog/useDialog.tsx","../src/components/floating/modal/useModal.tsx","../src/components/floating/toast/Toast.tsx","../src/components/floating/toast/ToastContext.tsx","../src/components/floating/toast/toastUtils.ts","../src/components/floating/toast/ToastContainer.tsx","../src/components/theme-toggle/ThemeToggle.tsx","../src/components/nubase-app/NubaseContextProvider.tsx","../src/components/navigation/main-nav/MainNav.tsx","../src/components/navigation/searchable-tree-navigator/SearchableTreeNavigator.tsx","../src/components/navigation/searchable-tree-navigator/TreeNavigator.tsx","../src/components/navigation/searchable-tree-navigator/TreeNavigatorItem.tsx","../src/components/navigation/main-nav/NavItemComponent.tsx","../src/components/navigation/main-nav/SafeLink.tsx","../src/components/navigation/main-nav/NavItems.tsx","../src/components/navigation/main-nav/types.ts","../src/components/nubase-app/NubaseApp.tsx","../src/http/http-client.ts","../src/routes/router.ts","../src/routes/dev/colors/colors-route.tsx","../src/routes/dev/dev-route.tsx","../src/routes/root.tsx","../src/routes/dev/colors/colors-screen.tsx","../src/routes/dev/index/index-route.tsx","../src/routes/dev/index/index-screen.tsx","../src/routes/view/view-route.tsx","../src/routes/view/view-screen.tsx","../src/components/views/ViewRenderer/CreateViewRenderer.tsx","../src/components/views/ViewRenderer/ViewRenderer.tsx","../src/routes/routes.ts","../src/components/monaco/monaco-editor.ts","../../../node_modules/zod/v3/external.js","../../../node_modules/zod/v3/helpers/util.js","../../../node_modules/zod/v3/ZodError.js","../../../node_modules/zod/v3/locales/en.js","../../../node_modules/zod/v3/errors.js","../../../node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/zod/v3/types.js","../src/components/nubase-app/useCreateNubaseContext.ts","../src/commands/CommandRegistry.ts","../src/commands/definitions/workbench.runCommand.tsx","../src/http/typed-api-client.ts","../src/keybindings/keyParser.ts","../src/keybindings/KeybindingManager.ts","../src/keybindings/registerKeybindings.ts","../src/commands/definitions/workbench.setTheme.tsx","../src/theming/themes/dark.ts","../src/theming/themes/darkhc.ts","../src/theming/themes/light.ts","../src/theming/themes/lighthc.ts","../src/theming/themes/index.ts","../src/theming/runtime-theme-generator.ts","../src/components/nubase-app/validateStyles.ts","../src/components/nubase-app/initializeStyles.ts","../src/components/nubase-app/initializeNubaseApp.ts","../src/components/nubase-app/ServicesProvider.tsx","../src/components/table/Table.tsx","../src/components/table/Pagination.tsx"],"sourcesContent":["// Export all components\nexport * from \"./components\";\n\n// Export all hooks\nexport * from \"./hooks\";\n\n// Export utilities\nexport * from \"./utils\";\n\n// Export table components\nexport * from \"./table\";\n\n// Export NubaseFrontendConfig\nexport * from \"./config\";\n\n// Export HTTP client and typed API client\nexport * from \"./http/http-client\";\nexport * from \"./http/typed-api-client\";\nexport * from \"./http/api-client-factory\";\n\n// Export any other specific exports you might have\n// Add more exports as needed\n","import type React from \"react\";\nimport {\n createContext,\n useCallback,\n useContext,\n useRef,\n useState,\n} from \"react\";\nimport { ResizeHandle } from \"./ResizeHandle\";\nimport { useResize } from \"./useResize\";\n\n// Context to track Dock nesting\nconst DockContext = createContext<boolean>(false);\n\nexport interface DockProps {\n center: React.ReactNode;\n left?: React.ReactNode;\n right?: React.ReactNode;\n top?: React.ReactNode;\n defaultLeftWidth?: number;\n defaultRightWidth?: number;\n}\n\nexport const Dock: React.FC<DockProps> = ({\n center,\n left,\n right,\n top,\n defaultLeftWidth = 300,\n defaultRightWidth = 300,\n}) => {\n const [leftWidth, setLeftWidth] = useState(defaultLeftWidth);\n const [rightWidth, setRightWidth] = useState(defaultRightWidth);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Auto-detect if this Dock is nested inside another Dock\n const isNested = useContext(DockContext);\n\n const getLeftConstraints = useCallback(() => {\n if (containerRef.current) {\n const maxWidth =\n containerRef.current.offsetWidth - (right ? rightWidth : 0) - 100;\n return { min: 100, max: maxWidth };\n }\n return { min: 100, max: Number.POSITIVE_INFINITY };\n }, [rightWidth, right]);\n\n const getRightConstraints = useCallback(() => {\n if (containerRef.current) {\n const maxWidth =\n containerRef.current.offsetWidth - (left ? leftWidth : 0) - 100;\n return { min: 100, max: maxWidth };\n }\n return { min: 100, max: Number.POSITIVE_INFINITY };\n }, [leftWidth, left]);\n\n const handleLeftResize = useResize(\n setLeftWidth,\n () => leftWidth,\n getLeftConstraints,\n );\n const handleRightResize = useResize(\n setRightWidth,\n () => rightWidth,\n getRightConstraints,\n true,\n );\n\n return (\n <DockContext.Provider value={true}>\n <div\n ref={containerRef}\n className={`flex flex-col h-full w-full min-h-0 min-w-0 ${isNested ? \"h-auto w-auto border border-outline\" : \"h-screen w-screen\"}`}\n >\n {top && (\n <div className=\"bg-surface border-b border-outline flex-shrink-0\">\n {top}\n </div>\n )}\n <div className=\"flex flex-1 min-h-0\">\n {left && (\n <div\n className=\"flex flex-col relative bg-surface border-r border-outline\"\n style={{\n width: leftWidth,\n }}\n >\n <div className=\"flex-1 bg-surface relative overflow-y-auto\">\n {left}\n </div>\n <div className=\"absolute top-0 bottom-0 w-0 right-0 z-10\">\n <ResizeHandle\n direction=\"vertical\"\n onMouseDown={handleLeftResize}\n />\n </div>\n </div>\n )}\n <div className=\"flex-1 flex flex-col relative\">\n <div className=\"flex-1 bg-surface relative overflow-y-auto\">\n {center}\n </div>\n </div>\n {right && (\n <div\n className=\"flex flex-col relative bg-surface border-l border-outline\"\n style={{\n width: rightWidth,\n }}\n >\n <div className=\"flex-1 bg-surface relative overflow-y-auto\">\n {right}\n </div>\n <div className=\"absolute top-0 bottom-0 w-0 left-0 z-10\">\n <ResizeHandle\n direction=\"vertical\"\n onMouseDown={handleRightResize}\n />\n </div>\n </div>\n )}\n </div>\n </div>\n </DockContext.Provider>\n );\n};\n","import type React from \"react\";\nimport { useState } from \"react\";\n\n// Constants for resize handle sizing\nconst INTERACTION_AREA_SIZE = 2; // px on each side\nconst HANDLE_SIZE_NORMAL = 1; // w-1, h-1\nconst HANDLE_SIZE_HOVER = 2; // w-5, h-5\n\ninterface ResizeHandleProps {\n direction: \"horizontal\" | \"vertical\";\n onMouseDown: (e: React.MouseEvent) => void;\n}\n\nexport const ResizeHandle: React.FC<ResizeHandleProps> = ({\n direction,\n onMouseDown,\n}) => {\n const [isHovering, setIsHovering] = useState(false);\n\n const interactionAreaClasses = `absolute ${\n direction === \"vertical\"\n ? `top-0 bottom-0 -left-[${INTERACTION_AREA_SIZE}px] -right-[${INTERACTION_AREA_SIZE}px]`\n : `left-0 right-0 -top-[${INTERACTION_AREA_SIZE}px] -bottom-[${INTERACTION_AREA_SIZE}px]`\n }`;\n\n return (\n <div\n className={interactionAreaClasses}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => setIsHovering(false)}\n onMouseDown={onMouseDown}\n >\n <div\n className={`absolute z-10 transition-all duration-200 ${\n direction === \"vertical\"\n ? `cursor-col-resize top-0 bottom-0 left-1/2 -translate-x-1/2 ${isHovering ? `bg-primary/30 w-${HANDLE_SIZE_HOVER}` : `bg-outline/20 w-${HANDLE_SIZE_NORMAL}`}`\n : `cursor-row-resize left-0 right-0 top-1/2 -translate-y-1/2 ${isHovering ? `bg-primary/30 h-${HANDLE_SIZE_HOVER}` : `bg-outline/20 h-${HANDLE_SIZE_NORMAL}`}`\n }`}\n />\n </div>\n );\n};\n","import { useCallback } from \"react\";\n\ntype GetConstraints = () => { min: number; max: number };\n\nexport const useResize = (\n onResize: (newSize: number) => void,\n getStartSize: () => number,\n getConstraints: GetConstraints,\n isReverse = false,\n isHorizontal = false,\n) => {\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n const startCoordinate = isHorizontal ? e.clientY : e.clientX;\n const startSize = getStartSize();\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const currentCoordinate = isHorizontal\n ? moveEvent.clientY\n : moveEvent.clientX;\n const delta = currentCoordinate - startCoordinate;\n const newSize = startSize + (isReverse ? -delta : delta);\n const { min, max } = getConstraints();\n onResize(Math.max(min, Math.min(newSize, max)));\n };\n\n const handleMouseUp = () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n },\n [onResize, getStartSize, getConstraints, isReverse, isHorizontal],\n );\n\n return handleMouseDown;\n};\n","import {\n type BaseSchema,\n BooleanSchema,\n type Infer,\n type LayoutField,\n NumberSchema,\n type ObjectSchema,\n StringSchema,\n} from \"@nubase/core\";\nimport { OptionalSchema } from \"@nubase/core\";\nimport { type ReactFormExtendedApi, useForm } from \"@tanstack/react-form\";\nimport type React from \"react\";\nimport { forwardRef, useImperativeHandle, useState } from \"react\";\nimport { useComputedMetadata } from \"../../hooks/useComputedMetadata\";\nimport { useLayout } from \"../../hooks/useLayout\";\nimport { Button } from \"../buttons/Button/Button\";\nimport { FormFieldRenderer } from \"./FormFieldRenderer\";\nimport { SchemaFormLayout } from \"./SchemaFormLayout\";\n\nexport type SchemaFormProps<\n TSchema extends ObjectSchema<any>,\n TData extends Infer<TSchema> = Infer<TSchema>,\n> = {\n schema: TSchema;\n onSubmit: (data: TData) => void | Promise<void>;\n submitText?: string;\n className?: string;\n /** Specify which layout to use (if schema has layouts defined) */\n layoutName?: string;\n /** Options for computed metadata behavior */\n computedMetadata?: {\n /** Debounce delay in milliseconds for computed metadata updates (default: 300ms) */\n debounceMs?: number;\n };\n};\n\nexport type SchemaFormRef<TSchema extends ObjectSchema<any>> =\n ReactFormExtendedApi<\n Infer<TSchema>,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >;\n\n// Helper function to get the default value for a schema\nfunction getDefaultValue(schema: BaseSchema<any>): any {\n if (schema._meta?.defaultValue !== undefined) {\n return schema._meta.defaultValue;\n }\n if (schema instanceof StringSchema) {\n return \"\";\n }\n if (schema instanceof NumberSchema) {\n return 0;\n }\n if (schema instanceof BooleanSchema) {\n return false;\n }\n // For complex types, return undefined and let the form handle it\n return undefined;\n}\n\n// Helper function to transform empty values to null AFTER validation\nfunction transformEmptyToNull(\n values: Record<string, any>,\n schema: ObjectSchema<any>,\n): Record<string, any> {\n const transformed = { ...values };\n\n for (const [key, value] of Object.entries(transformed)) {\n const fieldSchema = schema._shape[key];\n const isRequired = fieldSchema && !(fieldSchema instanceof OptionalSchema);\n\n // Convert empty values to null for consistency, but only for non-required fields\n if (!isRequired) {\n if (value === \"\" || (typeof value === \"string\" && value.trim() === \"\")) {\n transformed[key] = null;\n } else if (value === 0 && fieldSchema instanceof NumberSchema) {\n // Only convert 0 to null if it's not a required field and you want this behavior\n // transformed[key] = null;\n }\n }\n // Note: We don't transform false to null for booleans as false is a valid value\n }\n\n return transformed;\n}\n\n// Helper function to process form data - validate first, then transform\nfunction processFormData(\n values: Record<string, any>,\n schema: ObjectSchema<any>,\n): Record<string, any> {\n // First, validate the raw values with the schema\n const validatedValues = schema.parse(values);\n\n // Then apply transformations to the validated data\n const processedValues = transformEmptyToNull(validatedValues, schema);\n\n // Future transformations can be added here\n // processedValues = someOtherTransformation(processedValues);\n\n return processedValues;\n}\n\nexport const SchemaForm = forwardRef(\n <TSchema extends ObjectSchema<any>>(\n {\n schema,\n onSubmit,\n submitText = \"Submit\",\n className = \"\",\n layoutName,\n computedMetadata,\n }: SchemaFormProps<TSchema>,\n ref: React.Ref<SchemaFormRef<TSchema>>,\n ) => {\n // Create default values from schema\n const defaultValues = Object.entries(schema._shape).reduce(\n (acc, [key, fieldSchema]) => {\n acc[key] = getDefaultValue(fieldSchema as BaseSchema<any>);\n return acc;\n },\n {} as any,\n );\n\n // Initialize form state that will be updated when the form changes\n const [formState, setFormState] = useState(defaultValues);\n\n const form = useForm({\n defaultValues,\n listeners: {\n onChange: (formStateEvent) => {\n setFormState(formStateEvent.formApi.state.values);\n },\n onChangeDebounceMs: 200,\n },\n onSubmit: async ({ value }) => {\n try {\n // Process form data (validate and transform empty values to null, etc.)\n const processedData = processFormData(value, schema);\n await onSubmit(processedData);\n } catch (error) {\n console.error(\"Form validation error:\", error);\n // In a real app, you might want to handle this error differently\n throw error;\n }\n },\n });\n\n // Use computed metadata hook to get merged metadata\n const {\n metadata: mergedMetadata,\n isComputing,\n error: metadataError,\n } = useComputedMetadata(schema, formState, computedMetadata);\n\n // Use layout hook to get the layout (either specified or default)\n const layout = useLayout(schema, layoutName);\n\n // Expose form API through ref\n useImperativeHandle(ref, () => form, [form]);\n\n return (\n <div className={className}>\n {metadataError && (\n <div className=\"mb-4 p-3 bg-errorContainer border border-error rounded-md text-onErrorContainer text-sm\">\n <strong>Metadata Error:</strong> {metadataError.message}\n </div>\n )}\n\n <form\n onSubmit={(e) => {\n e.preventDefault();\n e.stopPropagation();\n form.handleSubmit();\n }}\n className=\"space-y-4\"\n >\n <SchemaFormLayout\n layout={layout}\n renderField={(field: LayoutField<any>) => {\n const fieldName = field.name as string;\n const currentSchema = schema._shape[fieldName] as BaseSchema<any>;\n const fieldMetadata =\n mergedMetadata[fieldName] ?? currentSchema._meta;\n\n // Validation function for submit - includes required field check\n const validateFieldOnSubmit = ({ value }: { value: any }) => {\n // Check if field is required and empty\n const isFieldRequired =\n currentSchema && !(currentSchema instanceof OptionalSchema);\n if (isFieldRequired) {\n if (value === undefined || value === null || value === \"\") {\n return \"This field is required\";\n }\n }\n\n try {\n currentSchema.parse(value);\n return undefined;\n } catch (error) {\n return error instanceof Error\n ? error.message\n : \"Invalid value\";\n }\n };\n\n // Validation function for blur - only schema validation, no required check\n const validateFieldOnBlur = ({ value }: { value: any }) => {\n // Skip validation if field is empty (let submit handle required validation)\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n\n try {\n currentSchema.parse(value);\n return undefined;\n } catch (error) {\n return error instanceof Error\n ? error.message\n : \"Invalid value\";\n }\n };\n\n return (\n <form.Field\n name={fieldName}\n validators={{\n // Validate format on blur, but allow empty values\n onBlur: validateFieldOnBlur,\n // Full validation (including required) only on submit\n onSubmit: validateFieldOnSubmit,\n }}\n >\n {(fieldState) => (\n <FormFieldRenderer\n schema={currentSchema}\n fieldState={fieldState}\n metadata={fieldMetadata}\n />\n )}\n </form.Field>\n );\n }}\n />\n\n <form.Subscribe\n selector={(state) => [state.canSubmit, state.isSubmitting]}\n >\n {([canSubmit, isSubmitting]) => (\n <Button type=\"submit\" disabled={!canSubmit || isComputing}>\n {isSubmitting\n ? \"Submitting...\"\n : isComputing\n ? \"Computing...\"\n : submitText}\n </Button>\n )}\n </form.Subscribe>\n </form>\n </div>\n );\n },\n) as <TSchema extends ObjectSchema<any>>(\n props: SchemaFormProps<TSchema> & { ref?: React.Ref<SchemaFormRef<TSchema>> },\n) => React.ReactElement;\n","import type {\n ObjectOutput,\n ObjectSchema,\n ObjectShape,\n SchemaMetadata,\n} from \"@nubase/core\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport interface UseComputedMetadataOptions {\n /** Debounce delay in milliseconds (default: 300ms) */\n debounceMs?: number;\n}\n\nexport interface UseComputedMetadataResult<TShape extends ObjectShape> {\n /** Merged metadata for all properties (static + computed) */\n metadata: Record<keyof TShape, SchemaMetadata<any>>;\n /** Whether metadata is currently being computed */\n isComputing: boolean;\n /** Error that occurred during computation, if any */\n error: Error | null;\n}\n\n/**\n * Hook that provides debounced computed metadata for a form schema.\n *\n * This hook:\n * 1. Watches for changes in form data\n * 2. Debounces the computation to avoid excessive recalculation\n * 3. Merges static metadata with computed metadata\n * 4. Returns the final merged metadata for all properties\n *\n * @param schema The ObjectSchema with potential computed metadata\n * @param formData Current form data (partial object)\n * @param options Configuration options\n * @returns Object with merged metadata, loading state, and error state\n */\nexport function useComputedMetadata<TShape extends ObjectShape>(\n schema: ObjectSchema<TShape>,\n formData: Partial<ObjectOutput<TShape>>,\n options: UseComputedMetadataOptions = {},\n): UseComputedMetadataResult<TShape> {\n const { debounceMs = 300 } = options;\n\n // State for the computed metadata\n const [metadata, setMetadata] = useState<\n Record<keyof TShape, SchemaMetadata<any>>\n >(() => {\n // Initialize with static metadata only\n const initialMeta: any = {};\n for (const key in schema._shape) {\n if (Object.prototype.hasOwnProperty.call(schema._shape, key)) {\n const fieldSchema = schema._shape[key];\n if (fieldSchema) {\n initialMeta[key] = { ...fieldSchema._meta };\n }\n }\n }\n return initialMeta;\n });\n\n const [isComputing, setIsComputing] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Refs for debouncing\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n const computingRef = useRef(false);\n\n // Compute metadata function\n const computeMetadata = useCallback(\n async (data: Partial<ObjectOutput<TShape>>) => {\n // Prevent concurrent computations\n if (computingRef.current) return;\n\n try {\n computingRef.current = true;\n setError(null);\n setIsComputing(true);\n\n const mergedMeta = await schema.getAllMergedMeta(data);\n\n // Always update metadata since we want reactive updates\n setMetadata(mergedMeta);\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error(\"Unknown error during metadata computation\");\n setError(error);\n console.warn(\"Failed to compute metadata:\", error);\n } finally {\n computingRef.current = false;\n setIsComputing(false);\n }\n },\n [schema],\n );\n\n // Create a stable key for formData changes to trigger effect properly\n const formDataKey = JSON.stringify(formData);\n\n // Debounced computation effect\n useEffect(() => {\n // Clear existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Only compute if we have computed metadata definitions\n if (Object.keys(schema._computedMeta).length > 0) {\n // Set up new debounced computation\n timeoutRef.current = setTimeout(() => {\n computeMetadata(formData);\n }, debounceMs);\n } else {\n // No computed metadata, just use static metadata\n const staticMeta: any = {};\n for (const key in schema._shape) {\n if (Object.prototype.hasOwnProperty.call(schema._shape, key)) {\n const fieldSchema = schema._shape[key];\n if (fieldSchema) {\n staticMeta[key] = { ...fieldSchema._meta };\n }\n }\n }\n setMetadata(staticMeta);\n setIsComputing(false);\n setError(null);\n }\n\n // Cleanup timeout on unmount\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [formData, computeMetadata, debounceMs, schema]);\n\n return {\n metadata,\n isComputing,\n error,\n };\n}\n","import type { Layout, ObjectSchema, ObjectShape } from \"@nubase/core\";\nimport { useMemo } from \"react\";\n\n/**\n * Pure function version of useLayout for testing and non-React contexts.\n * This function has the same logic as useLayout but without React hooks.\n */\nexport function getLayout<TShape extends ObjectShape>(\n schema: ObjectSchema<TShape>,\n layoutName?: string,\n): Layout<TShape> {\n // If a layout name is provided and the layout exists, use it\n if (layoutName && schema.hasLayout(layoutName)) {\n const layout = schema.getLayout(layoutName);\n if (layout) {\n return layout;\n }\n }\n\n // Create a default layout with all fields in a single group\n const fieldNames = Object.keys(schema._shape) as (keyof TShape)[];\n\n const defaultLayout: Layout<TShape> = {\n type: \"form\",\n groups: [\n {\n fields: fieldNames.map((name) => ({\n name,\n size: 12, // Full width for all fields\n })),\n },\n ],\n };\n\n return defaultLayout;\n}\n\n/**\n * Hook to get a layout for a schema. If a layoutName is provided and exists in the schema,\n * returns that layout. Otherwise, returns a default layout with all fields in a single group\n * with size 12 (full width).\n */\nexport function useLayout<TShape extends ObjectShape>(\n schema: ObjectSchema<TShape>,\n layoutName?: string,\n): Layout<TShape> {\n return useMemo(() => getLayout(schema, layoutName), [schema, layoutName]);\n}\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md font-medium transition-all duration-200 focus:outline-none focus:ring-4 disabled:cursor-not-allowed disabled:opacity-60 active:scale-95 text-sm px-4 py-3\",\n {\n variants: {\n variant: {\n primary:\n \"bg-primary text-onPrimary hover:bg-primary/90 focus:ring-primary/20 shadow-sm hover:-translate-y-0.5 active:translate-y-0\",\n secondary:\n \"bg-secondaryContainer text-onSecondaryContainer border border-outline hover:bg-secondaryContainer/80 hover:border-outline/80 focus:ring-outline/20 shadow-sm\",\n danger:\n \"bg-error text-onError hover:bg-error/90 focus:ring-error/20 shadow-sm hover:-translate-y-0.5 active:translate-y-0\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, asChild = false, ...props }, ref) => {\n return (\n <button\n className={cn(buttonVariants({ variant }), className)}\n ref={ref}\n {...props}\n />\n );\n },\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function for merging Tailwind CSS classes with conditional logic.\n *\n * This function combines clsx for conditional class handling with tailwind-merge\n * to resolve Tailwind class conflicts. It's commonly used throughout the component\n * library to merge default component styles with user-provided className props.\n *\n * @param inputs - Array of class values (strings, objects, arrays, etc.)\n * @returns A string of merged and deduplicated Tailwind classes\n *\n * @example\n * cn(\"px-4 py-2\", \"bg-blue-500\", { \"text-white\": isActive })\n * // Returns: \"px-4 py-2 bg-blue-500 text-white\" (if isActive is true)\n *\n * @example\n * cn(\"bg-red-500\", \"bg-blue-500\")\n * // Returns: \"bg-blue-500\" (tailwind-merge resolves the conflict)\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import type { BaseSchema, SchemaMetadata } from \"@nubase/core\";\nimport { OptionalSchema } from \"@nubase/core\";\nimport type React from \"react\";\nimport { FormControl } from \"../form-controls/FormControl/FormControl\";\nimport { TextInput } from \"../form-controls/TextInput/TextInput\";\n\n// Field interface that defines exactly what our component needs\nexport interface FieldApi {\n name: string;\n state: {\n value: any;\n meta: {\n isValidating: boolean;\n isTouched: boolean;\n isValid: boolean;\n errors: (string | undefined)[];\n };\n };\n handleChange: (value: any) => void;\n handleBlur: () => void;\n}\n\nexport interface FormFieldRendererProps {\n schema: BaseSchema<any>;\n fieldState: FieldApi;\n metadata: SchemaMetadata<any>;\n}\n\ntype FieldRendererProps = {\n schema: BaseSchema<any>;\n fieldState: FieldApi;\n hasError: boolean;\n metadata: SchemaMetadata<any>;\n};\n\ntype FieldRenderer = (\n props: FieldRendererProps,\n) => React.ReactElement<{ id?: string; hasError?: boolean }>;\n\nconst fieldRenderers: Record<string, FieldRenderer> = {\n string: ({ fieldState, hasError, metadata }) => {\n return (\n <TextInput\n id={fieldState.name}\n name={fieldState.name}\n onBlur={fieldState.handleBlur}\n type=\"text\"\n value={fieldState.state.value || \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n fieldState.handleChange(e.target.value)\n }\n placeholder={metadata.description}\n hasError={hasError}\n />\n );\n },\n\n number: ({ fieldState, hasError, metadata }) => {\n return (\n <TextInput\n id={fieldState.name}\n name={fieldState.name}\n onBlur={fieldState.handleBlur}\n type=\"number\"\n value={fieldState.state.value || 0}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n fieldState.handleChange(Number(e.target.value))\n }\n placeholder={metadata.description}\n hasError={hasError}\n />\n );\n },\n\n boolean: ({ fieldState, hasError }) => {\n return (\n <input\n id={fieldState.name}\n name={fieldState.name}\n onBlur={fieldState.handleBlur}\n type=\"checkbox\"\n checked={fieldState.state.value || false}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n fieldState.handleChange(e.target.checked)\n }\n className={`w-4 h-4 rounded focus:ring-2 ${\n hasError\n ? \"border-error focus:ring-error/20\"\n : \"border-outline focus:ring-primary/20\"\n }`}\n />\n );\n },\n};\n\nconst defaultRenderer: FieldRenderer = ({ fieldState, hasError }) => {\n return (\n <TextInput\n id={fieldState.name}\n name={fieldState.name}\n onBlur={fieldState.handleBlur}\n type=\"text\"\n value={String(fieldState.state.value || \"\")}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n fieldState.handleChange(e.target.value)\n }\n placeholder=\"Unsupported field type\"\n hasError={hasError}\n />\n );\n};\n\nexport const FormFieldRenderer: React.FC<FormFieldRendererProps> = ({\n schema,\n fieldState,\n metadata,\n}) => {\n // Calculate hasError from field state\n const hasError =\n fieldState.state.meta.isTouched && !fieldState.state.meta.isValid;\n\n const isRequired = !(schema instanceof OptionalSchema);\n\n // For optional schemas, we need to get the wrapped schema type\n const schemaToRender =\n schema instanceof OptionalSchema ? schema.unwrap() : schema;\n const renderer = fieldRenderers[schemaToRender.type] || defaultRenderer;\n const fieldElement = renderer({\n schema: schemaToRender,\n fieldState,\n hasError,\n metadata,\n });\n\n return (\n <FormControl\n label={metadata.label}\n hint={metadata.description}\n field={fieldState}\n required={isRequired}\n >\n {fieldElement}\n </FormControl>\n );\n};\n","import type { AnyFieldApi } from \"@tanstack/react-form\";\nimport { cva } from \"class-variance-authority\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../../utils\";\nimport type { FieldApi } from \"../../form/FormFieldRenderer\";\nimport { Label } from \"../Label/Label\";\n\nconst formControlVariants = cva(\"flex flex-col gap-1\", {\n variants: {\n spacing: {\n sm: \"gap-1\",\n md: \"gap-2\",\n lg: \"gap-3\",\n },\n },\n defaultVariants: {\n spacing: \"sm\",\n },\n});\n\nexport interface FormControlProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: string;\n hint?: string;\n error?: string;\n required?: boolean;\n spacing?: \"sm\" | \"md\" | \"lg\";\n children: React.ReactElement<{ id?: string; hasError?: boolean }>;\n field?: AnyFieldApi | FieldApi; // Optional field for TanStack form integration\n}\n\nconst FormControl = forwardRef<HTMLDivElement, FormControlProps>(\n (\n {\n className,\n label,\n hint,\n error,\n required,\n spacing,\n children,\n field,\n ...props\n },\n ref,\n ) => {\n // Determine error state - prioritize explicit error, then field errors\n let displayError = error;\n let hasError = !!error;\n let isValidating = false;\n\n if (field) {\n isValidating = field.state.meta.isValidating;\n if (!error && field.state.meta.isTouched && !field.state.meta.isValid) {\n displayError = field.state.meta.errors\n .filter((e): e is string => e !== undefined)\n .join(\", \");\n hasError = true;\n }\n }\n\n const childId = children.props.id;\n\n // Clone the child element and pass hasError prop if it accepts it\n const childWithError = React.cloneElement(children, {\n hasError,\n \"aria-invalid\": hasError ? \"true\" : undefined,\n \"aria-describedby\": displayError\n ? `${childId}-error`\n : hint\n ? `${childId}-hint`\n : undefined,\n } as React.HTMLAttributes<HTMLElement>);\n\n return (\n <div\n ref={ref}\n className={cn(formControlVariants({ spacing }), className)}\n {...props}\n >\n {label && (\n <Label htmlFor={childId} required={required}>\n {label}\n </Label>\n )}\n {childWithError}\n {hint && !hasError && !isValidating && (\n <div id={`${childId}-hint`} className=\"text-xs text-onSurfaceVariant\">\n {hint}\n </div>\n )}\n {isValidating && (\n <div className=\"text-xs text-onSurfaceVariant\">Validating...</div>\n )}\n {hasError && displayError && (\n <div id={`${childId}-error`} className=\"text-xs text-error\">\n {displayError}\n </div>\n )}\n </div>\n );\n },\n);\n\nFormControl.displayName = \"FormControl\";\n\nexport { FormControl };\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../utils\";\n\nconst labelVariants = cva(\"block text-sm font-medium text-onSurface\", {\n variants: {\n variant: {\n default: \"\",\n required: \"after:content-['*'] after:text-error after:ml-1\",\n muted: \"text-onSurfaceVariant font-normal\",\n },\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement>,\n VariantProps<typeof labelVariants> {\n required?: boolean;\n}\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, variant, size, required, children, ...props }, ref) => {\n const finalVariant = required ? \"required\" : variant;\n\n return (\n <label\n ref={ref}\n className={cn(\n labelVariants({ variant: finalVariant, size }),\n className,\n )}\n {...props}\n >\n {children}\n </label>\n );\n },\n);\n\nLabel.displayName = \"Label\";\n\nexport { Label, labelVariants };\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../utils\";\n\nconst inputVariants = cva(\n \"w-full appearance-none bg-surface border border-outline rounded-md text-onSurface text-sm leading-normal outline-none transition-all duration-200 placeholder:text-onSurfaceVariant placeholder:opacity-40 focus:border-primary focus:ring-4 focus:ring-primary/10 disabled:bg-surfaceVariant disabled:cursor-not-allowed disabled:opacity-60 px-4 py-3\",\n {\n variants: {\n hasError: {\n true: \"border-error focus:border-error focus:ring-error/10\",\n false: \"\",\n },\n },\n defaultVariants: {\n hasError: false,\n },\n },\n);\n\nexport interface TextInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n VariantProps<typeof inputVariants> {\n hasError?: boolean;\n}\n\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n ({ className, hasError, ...props }, ref) => {\n return (\n <input\n ref={ref}\n className={cn(inputVariants({ hasError }), className)}\n {...props}\n />\n );\n },\n);\n\nTextInput.displayName = \"TextInput\";\n\nexport { TextInput, inputVariants };\n","import type { Layout, LayoutField, ObjectShape } from \"@nubase/core\";\nimport type React from \"react\";\n\nexport interface SchemaFormLayoutProps<TShape extends ObjectShape = any> {\n layout: Layout<TShape>;\n renderField: (field: LayoutField<TShape>) => React.ReactNode;\n}\n\n// Generate the correct col-span class based on size\nconst getColSpanClass = (size: number) => {\n const colSpanMap: Record<number, string> = {\n 1: \"col-span-1\",\n 2: \"col-span-2\",\n 3: \"col-span-3\",\n 4: \"col-span-4\",\n 5: \"col-span-5\",\n 6: \"col-span-6\",\n 7: \"col-span-7\",\n 8: \"col-span-8\",\n 9: \"col-span-9\",\n 10: \"col-span-10\",\n 11: \"col-span-11\",\n 12: \"col-span-12\",\n };\n return colSpanMap[size] || \"col-span-12\";\n};\n\n// Group fields into rows based on their sizes\nconst groupFieldsIntoRows = <TShape extends ObjectShape>(\n fields: LayoutField<TShape>[],\n): LayoutField<TShape>[][] => {\n const rows: LayoutField<TShape>[][] = [];\n let currentRow: LayoutField<TShape>[] = [];\n let currentRowWidth = 0;\n\n for (const field of fields) {\n if (field.hidden) continue;\n\n const fieldSize = field.size || 12;\n\n // If adding this field would exceed 12, start a new row\n if (currentRowWidth + fieldSize > 12 && currentRow.length > 0) {\n rows.push([...currentRow]);\n currentRow = [field];\n currentRowWidth = fieldSize;\n } else {\n currentRow.push(field);\n currentRowWidth += fieldSize;\n }\n\n // If this field exactly fills the row, start a new row\n if (currentRowWidth === 12) {\n rows.push([...currentRow]);\n currentRow = [];\n currentRowWidth = 0;\n }\n }\n\n // Add any remaining fields in the last row\n if (currentRow.length > 0) {\n rows.push([...currentRow]);\n }\n\n return rows;\n};\n\nexport const SchemaFormLayout = <TShape extends ObjectShape = any>({\n layout,\n renderField,\n}: SchemaFormLayoutProps<TShape>) => {\n return (\n <div className={`layout-${layout.type} ${layout.className || \"\"}`}>\n {layout.groups.map((group, groupIndex) => (\n <div\n key={groupIndex}\n className={`form-group ${group.className || \"\"} mb-6`}\n >\n {group.label && (\n <h3 className=\"text-lg font-medium mb-3 text-onSurface\">\n {group.label}\n </h3>\n )}\n {group.description && (\n <p className=\"text-sm text-onSurfaceVariant mb-3\">\n {group.description}\n </p>\n )}\n <div className=\"space-y-4\">\n {groupFieldsIntoRows<TShape>(group.fields).map((row, rowIndex) => (\n <div key={rowIndex} className=\"grid grid-cols-12 gap-4 w-full\">\n {row.map((field) => (\n <div\n key={String(field.name)}\n className={`${getColSpanClass(field.size || 12)} ${field.className || \"\"}`}\n >\n {renderField(field)}\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n};\n","import { IconSearch } from \"@tabler/icons-react\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../utils\";\n\nconst searchInputVariants = cva(\n \"w-full appearance-none bg-surface border border-outline rounded-md text-onSurface text-sm leading-normal outline-none transition-all duration-200 placeholder:text-onSurfaceVariant focus:border-primary focus:ring-4 focus:ring-primary/10 disabled:bg-surfaceVariant disabled:cursor-not-allowed disabled:opacity-60 px-4 py-3 pl-10\",\n {\n variants: {\n hasError: {\n true: \"border-error focus:border-error focus:ring-error/10\",\n false: \"\",\n },\n },\n defaultVariants: {\n hasError: false,\n },\n },\n);\n\nexport interface SearchTextInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n VariantProps<typeof searchInputVariants> {\n hasError?: boolean;\n}\n\nconst SearchTextInput = forwardRef<HTMLInputElement, SearchTextInputProps>(\n ({ className, hasError, ...props }, ref) => {\n return (\n <div className=\"relative\">\n <input\n ref={ref}\n type=\"search\"\n className={cn(searchInputVariants({ hasError }), className)}\n {...props}\n />\n <div className=\"absolute top-1/2 left-3 transform -translate-y-1/2 text-onSurfaceVariant pointer-events-none\">\n <IconSearch className=\"h-4 w-4\" />\n </div>\n </div>\n );\n },\n);\n\nSearchTextInput.displayName = \"SearchTextInput\";\n\nexport { SearchTextInput, searchInputVariants };\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport { useCombobox, useSelect } from \"downshift\";\nimport type React from \"react\";\nimport { forwardRef, useMemo, useState } from \"react\";\nimport { cn } from \"../../../utils\";\n\nconst selectVariants = cva(\n \"w-full appearance-none bg-surface border border-outline rounded-md text-onSurface outline-none transition-all duration-200 cursor-pointer focus:border-primary focus:ring-4 focus:ring-primary/10 disabled:bg-surfaceVariant disabled:cursor-not-allowed disabled:opacity-60 px-4 py-3 text-sm\",\n {\n variants: {\n hasError: {\n true: \"border-error focus:border-error focus:ring-error/10\",\n false: \"\",\n },\n },\n defaultVariants: {\n hasError: false,\n },\n },\n);\n\nconst menuVariants = cva(\n \"absolute z-50 w-full mt-1 bg-surface border border-outline rounded-md shadow-lg max-h-60 overflow-auto text-sm\",\n);\n\nconst optionVariants = cva(\n \"px-4 py-2 cursor-pointer transition-colors select-none\",\n {\n variants: {\n isHighlighted: {\n true: \"bg-primaryContainer text-onPrimaryContainer\",\n false: \"text-onSurface hover:bg-surfaceVariant\",\n },\n isSelected: {\n true: \"bg-primary text-onPrimary\",\n false: \"\",\n },\n },\n defaultVariants: {\n isHighlighted: false,\n isSelected: false,\n },\n },\n);\n\nexport interface SelectOption<T = unknown> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps<T = unknown>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"onSelect\">,\n VariantProps<typeof selectVariants> {\n options: SelectOption<T>[];\n value?: T;\n onChange?: (value: T | null) => void;\n onSelectionChange?: (selectedItem: SelectOption<T> | null) => void;\n placeholder?: string;\n disabled?: boolean;\n hasError?: boolean;\n loading?: boolean;\n loadingMessage?: string;\n emptyMessage?: string;\n clearable?: boolean;\n searchable?: boolean;\n filterOptions?: (\n options: SelectOption<T>[],\n inputValue: string,\n ) => SelectOption<T>[];\n}\n\nconst Select = forwardRef<HTMLDivElement, SelectProps<any>>(\n <T,>(\n {\n className,\n hasError,\n options = [],\n value,\n onChange,\n onSelectionChange,\n placeholder = \"Select an option...\",\n disabled = false,\n loading = false,\n loadingMessage = \"Loading...\",\n emptyMessage = \"No options available\",\n clearable = false,\n searchable = false,\n filterOptions,\n ...props\n }: SelectProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>,\n ) => {\n // Find selected item based on value\n const selectedItem = useMemo(() => {\n return options.find((option) => option.value === value) || null;\n }, [options, value]);\n\n // State for searchable input\n const [inputValue, setInputValue] = useState(\"\");\n\n // Default filter function for searchable selects\n const defaultFilterOptions = (\n opts: SelectOption<T>[],\n inputValue: string,\n ) => {\n return opts.filter((option) =>\n option.label.toLowerCase().includes(inputValue.toLowerCase()),\n );\n };\n\n const actualFilterOptions = filterOptions || defaultFilterOptions;\n\n // Filter options when searchable\n const filteredOptions = useMemo(() => {\n if (!searchable || !inputValue) return options;\n return actualFilterOptions(options, inputValue);\n }, [searchable, inputValue, options, actualFilterOptions]);\n\n const displayOptions = loading ? [] : filteredOptions;\n\n // Use different downshift hooks based on searchable mode\n const selectHook = useSelect({\n items: displayOptions,\n selectedItem,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n if (newSelectedItem) {\n onChange?.(newSelectedItem.value);\n onSelectionChange?.(newSelectedItem);\n } else if (clearable) {\n onChange?.(null);\n onSelectionChange?.(null);\n }\n },\n itemToString: (item) => item?.label || \"\",\n });\n\n const comboboxHook = useCombobox({\n items: displayOptions,\n selectedItem,\n inputValue,\n onInputValueChange: ({ inputValue }) => {\n setInputValue(inputValue || \"\");\n },\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n if (newSelectedItem) {\n onChange?.(newSelectedItem.value);\n onSelectionChange?.(newSelectedItem);\n setInputValue(newSelectedItem.label);\n } else if (clearable) {\n onChange?.(null);\n onSelectionChange?.(null);\n setInputValue(\"\");\n }\n },\n itemToString: (item) => item?.label || \"\",\n });\n\n // Use appropriate hook based on searchable mode\n const hook = searchable ? comboboxHook : selectHook;\n const {\n isOpen,\n getToggleButtonProps,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n } = hook;\n\n // Get input props for searchable mode\n const getInputProps = searchable ? comboboxHook.getInputProps : undefined;\n\n const ChevronIcon = ({ isOpen }: { isOpen: boolean }) => (\n <svg\n className={cn(\n \"w-5 h-5 transition-transform duration-200\",\n isOpen ? \"rotate-180\" : \"rotate-0\",\n )}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <title>Toggle dropdown</title>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n );\n\n const ClearIcon = () => (\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <title>Clear selection</title>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n );\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(null);\n onSelectionChange?.(null);\n };\n\n return (\n <div ref={ref} className={cn(\"relative\", className)} {...props}>\n <div className=\"relative\">\n {searchable ? (\n <input\n {...(getInputProps?.({\n className: cn(selectVariants({ hasError }), \"pr-10\"),\n disabled,\n placeholder: selectedItem?.label || placeholder,\n }) || {})}\n />\n ) : (\n <button\n type=\"button\"\n {...getToggleButtonProps({\n className: cn(\n selectVariants({ hasError }),\n \"flex items-center justify-between pr-10\",\n !selectedItem && \"text-onSurfaceVariant\",\n ),\n disabled: disabled || loading,\n })}\n >\n <span className=\"truncate\">\n {loading ? loadingMessage : selectedItem?.label || placeholder}\n </span>\n </button>\n )}\n\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none\">\n {loading ? (\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-primary border-t-transparent\" />\n ) : (\n <ChevronIcon isOpen={isOpen} />\n )}\n </div>\n\n {clearable && selectedItem && !disabled && !loading && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"absolute inset-y-0 right-8 flex items-center pr-2 text-onSurfaceVariant hover:text-onSurface transition-colors\"\n aria-label=\"Clear selection\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n\n <ul\n {...getMenuProps({\n className: cn(menuVariants(), !isOpen && \"hidden\"),\n })}\n >\n {isOpen &&\n (displayOptions.length === 0 ? (\n <li className=\"px-4 py-2 text-onSurfaceVariant text-center\">\n {loading ? loadingMessage : emptyMessage}\n </li>\n ) : (\n displayOptions.map((option, index) => (\n <li\n key={`${option.value}-${index}`}\n {...getItemProps({\n item: option,\n index,\n className: cn(\n optionVariants({\n isHighlighted: highlightedIndex === index,\n isSelected: selectedItem?.value === option.value,\n }),\n option.disabled && \"opacity-50 cursor-not-allowed\",\n ),\n style: option.disabled\n ? { pointerEvents: \"none\" }\n : undefined,\n })}\n >\n <span className=\"block truncate\">{option.label}</span>\n {selectedItem?.value === option.value && (\n <span className=\"absolute inset-y-0 right-0 flex items-center pr-3\">\n <svg\n className=\"w-4 h-4\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <title>Selected</title>\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </span>\n )}\n </li>\n ))\n ))}\n </ul>\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n\nexport { Select, selectVariants };\n","import { DialogTitle } from \"@headlessui/react\";\nimport { IconX } from \"@tabler/icons-react\";\nimport type { FC, ReactNode } from \"react\";\nimport { Button } from \"../../buttons/Button/Button\";\nimport { ButtonBar } from \"../../buttons/ButtonBar/ButtonBar\";\nimport { Modal, type ModalAlignment } from \"../modal/Modal\";\n\nexport type DialogProps = {\n open: boolean;\n onClose: () => void;\n onConfirm?: () => void;\n title?: string;\n children: ReactNode;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n showCloseButton?: boolean;\n className?: string;\n alignment?: ModalAlignment;\n confirmText?: string;\n cancelText?: string;\n confirmVariant?: \"primary\" | \"danger\";\n showBackdrop?: boolean;\n zIndex?: number;\n};\n\nexport const Dialog: FC<DialogProps> = ({\n open,\n onClose,\n onConfirm,\n title,\n children,\n size = \"md\",\n showCloseButton = true,\n className = \"\",\n alignment = \"center\",\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n confirmVariant = \"primary\",\n showBackdrop = true,\n zIndex,\n}) => {\n const handleConfirm = () => {\n onConfirm?.();\n onClose();\n };\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n size={size}\n alignment={alignment}\n showBackdrop={showBackdrop}\n className={className}\n zIndex={zIndex}\n >\n {(title || showCloseButton) && (\n <div className=\"flex items-center justify-between border-b border-outline px-6 py-4\">\n {title && (\n <DialogTitle className=\"text-lg font-semibold text-onSurface\">\n {title}\n </DialogTitle>\n )}\n {showCloseButton && (\n <Button variant=\"secondary\" onClick={onClose}>\n <IconX className=\"h-5 w-5\" />\n </Button>\n )}\n </div>\n )}\n\n <div className=\"px-6 py-4\">{children}</div>\n\n {onConfirm && (\n <div className=\"border-t border-outline px-6 py-4\">\n <ButtonBar>\n <Button variant=\"secondary\" onClick={onClose}>\n {cancelText}\n </Button>\n <Button variant={confirmVariant} onClick={handleConfirm}>\n {confirmText}\n </Button>\n </ButtonBar>\n </div>\n )}\n </Modal>\n );\n};\n","import type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../utils\";\n\nexport interface ButtonBarProps extends React.HTMLAttributes<HTMLDivElement> {\n alignment?: \"left\" | \"center\" | \"right\";\n}\n\nconst ButtonBar = forwardRef<HTMLDivElement, ButtonBarProps>(\n ({ className, alignment = \"right\", children, ...props }, ref) => {\n return (\n <div\n className={cn(\n \"flex gap-2\",\n {\n \"justify-start\": alignment === \"left\",\n \"justify-center\": alignment === \"center\",\n \"justify-end\": alignment === \"right\",\n },\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nButtonBar.displayName = \"ButtonBar\";\n\nexport { ButtonBar };\n","import {\n DialogBackdrop,\n DialogPanel,\n Dialog as HeadlessDialog,\n} from \"@headlessui/react\";\nimport { IconX } from \"@tabler/icons-react\";\nimport type { FC, ReactNode } from \"react\";\nimport { Button } from \"../../buttons/Button/Button\";\n\nexport type ModalAlignment = \"center\" | \"top\";\n\nexport type ModalProps = {\n open: boolean;\n onClose: () => void;\n children: ReactNode;\n alignment?: ModalAlignment;\n showBackdrop?: boolean;\n showCloseButton?: boolean;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n zIndex?: number;\n initialFocus?: React.RefObject<HTMLElement | null>;\n};\n\nconst sizeClasses = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n \"2xl\": \"max-w-2xl\",\n full: \"max-w-full\",\n};\n\nconst alignmentClasses = {\n center: \"items-center justify-center\",\n top: \"items-start justify-center pt-16\",\n};\n\nexport const Modal: FC<ModalProps> = ({\n open,\n onClose,\n children,\n alignment = \"center\",\n showBackdrop = true,\n showCloseButton = false,\n className = \"\",\n size = \"md\",\n zIndex = 50,\n initialFocus,\n}) => {\n return (\n <HeadlessDialog\n open={open}\n onClose={onClose}\n className=\"relative\"\n style={{ zIndex }}\n initialFocus={initialFocus}\n >\n {showBackdrop && (\n <DialogBackdrop className=\"fixed inset-0 bg-scrim/30 backdrop-blur-xxs transition-opacity duration-300 ease-out data-[closed]:opacity-0\" />\n )}\n\n <div className={`fixed inset-0 flex p-4 ${alignmentClasses[alignment]}`}>\n <DialogPanel\n className={`w-full ${sizeClasses[size]} rounded-lg bg-surface shadow-xl ring-1 ring-outline/20 transition-all duration-300 ease-out data-[closed]:scale-95 data-[closed]:opacity-0 ${className}`}\n >\n {showCloseButton && (\n <div className=\"flex justify-end p-2\">\n <Button variant=\"secondary\" onClick={onClose}>\n <IconX className=\"h-5 w-5\" />\n </Button>\n </div>\n )}\n\n <div className={showCloseButton ? \"px-4 pb-4\" : \"p-4\"}>\n {children}\n </div>\n </DialogPanel>\n </div>\n </HeadlessDialog>\n );\n};\n","import { type ReactNode, useCallback, useState } from \"react\";\nimport { Dialog, type DialogProps } from \"./Dialog\";\n\ntype DialogConfig = Omit<\n DialogProps,\n \"open\" | \"onClose\" | \"onConfirm\" | \"children\"\n> & {\n title?: string;\n content: ReactNode;\n onConfirm?: () => void;\n};\n\nexport const useDialog = () => {\n const [isOpen, setIsOpen] = useState(false);\n const [config, setConfig] = useState<DialogConfig | null>(null);\n\n const show = useCallback((dialogConfig: DialogConfig) => {\n setConfig(dialogConfig);\n setIsOpen(true);\n }, []);\n\n const hide = useCallback(() => {\n setIsOpen(false);\n // Clear config after animation completes\n setTimeout(() => setConfig(null), 300);\n }, []);\n\n const handleConfirm = useCallback(() => {\n config?.onConfirm?.();\n hide();\n }, [config, hide]);\n\n const DialogComponent = config ? (\n <Dialog\n {...config}\n open={isOpen}\n onClose={hide}\n onConfirm={config.onConfirm ? handleConfirm : undefined}\n >\n {config.content}\n </Dialog>\n ) : null;\n\n return {\n show,\n hide,\n isOpen,\n DialogComponent,\n };\n};\n","import {\n type FC,\n type ReactNode,\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\nimport { Modal, type ModalProps } from \"./Modal\";\n\ntype ModalConfig = Omit<ModalProps, \"open\" | \"onClose\" | \"children\"> & {\n component: ReactNode;\n id: string;\n onDismiss?: () => void;\n};\n\ntype ModalContextType = {\n openModal: (config: Omit<ModalConfig, \"id\">) => string;\n closeModal: (id?: string) => void;\n closeAllModals: () => void;\n modals: ModalConfig[];\n};\n\nconst ModalContext = createContext<ModalContextType | null>(null);\n\nexport const ModalProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [modals, setModals] = useState<ModalConfig[]>([]);\n\n const openModal = useCallback((config: Omit<ModalConfig, \"id\">) => {\n const id = Math.random().toString(36).substr(2, 9);\n const newModal: ModalConfig = { ...config, id };\n\n setModals((prev) => [...prev, newModal]);\n return id;\n }, []);\n\n const closeModal = useCallback((id?: string) => {\n setModals((prev) => {\n if (id) {\n return prev.filter((modal) => modal.id !== id);\n }\n return prev.slice(0, -1);\n });\n }, []);\n\n const closeAllModals = useCallback(() => {\n setModals([]);\n }, []);\n\n const handleModalClose = useCallback(\n (modalId: string) => {\n const modal = modals.find((m) => m.id === modalId);\n if (modal?.onDismiss) {\n modal.onDismiss();\n }\n closeModal(modalId);\n },\n [closeModal, modals],\n );\n\n return (\n <ModalContext.Provider\n value={{ openModal, closeModal, closeAllModals, modals }}\n >\n {children}\n {modals.map((modal, index) => (\n <Modal\n key={modal.id}\n open={true}\n onClose={() => handleModalClose(modal.id)}\n zIndex={50 + index}\n {...modal}\n >\n {modal.component}\n </Modal>\n ))}\n </ModalContext.Provider>\n );\n};\n\nexport const useModal = () => {\n const context = useContext(ModalContext);\n if (!context) {\n throw new Error(\"useModal must be used within a ModalProvider\");\n }\n\n const { openModal: contextOpenModal, closeModal, closeAllModals } = context;\n\n const openModal = useCallback(\n (component: ReactNode, options?: Omit<ModalConfig, \"id\" | \"component\">) => {\n return contextOpenModal({ component, ...options });\n },\n [contextOpenModal],\n );\n\n const result = useMemo(() => {\n return {\n openModal,\n closeModal,\n closeAllModals,\n modalCount: context.modals.length,\n };\n }, [openModal, closeModal, closeAllModals, context.modals.length]);\n\n return result;\n};\n","import {\n IconAlertTriangle,\n IconCheck,\n IconInfoCircle,\n IconLoader2,\n IconX,\n} from \"@tabler/icons-react\";\nimport type { FC } from \"react\";\nimport { cn } from \"../../../utils\";\nimport { Button } from \"../../buttons/Button/Button\";\nimport type { ToastData } from \"./types\";\n\nexport interface ToastProps {\n toast: ToastData;\n onClose: () => void;\n}\n\nconst typeConfig = {\n default: {\n icon: null,\n className: \"bg-surface border-border text-text\",\n },\n success: {\n icon: IconCheck,\n className:\n \"bg-secondary/10 border-secondary/20 text-secondary dark:bg-secondary/20 dark:border-secondary/30 dark:text-secondary\",\n },\n error: {\n icon: IconX,\n className:\n \"bg-error/10 border-error/20 text-error dark:bg-error/20 dark:border-error/30 dark:text-error\",\n },\n warning: {\n icon: IconAlertTriangle,\n className:\n \"bg-primary/10 border-primary/20 text-primary dark:bg-primary/20 dark:border-primary/30 dark:text-primary\",\n },\n info: {\n icon: IconInfoCircle,\n className:\n \"bg-primary/10 border-primary/20 text-primary dark:bg-primary/20 dark:border-primary/30 dark:text-primary\",\n },\n};\n\nexport const Toast: FC<ToastProps> = ({ toast, onClose }) => {\n const config = typeConfig[toast.type];\n const Icon = toast.promise ? IconLoader2 : config.icon;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-3 p-4 rounded-lg border shadow-lg min-w-80 max-w-md\",\n \"transform transition-all duration-300 ease-out\",\n config.className,\n )}\n >\n {Icon && (\n <Icon\n className={cn(\n \"h-5 w-5 flex-shrink-0\",\n toast.promise && \"animate-spin\",\n )}\n />\n )}\n\n <div className=\"flex-1 text-sm\">\n {toast.promise && toast.loadingText ? toast.loadingText : toast.message}\n </div>\n\n {toast.closable && (\n <Button variant=\"secondary\" onClick={onClose} className=\"h-6 w-6 p-0\">\n <IconX className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n );\n};\n","import {\n type ReactNode,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { setGlobalToastFunctions } from \"./toastUtils\";\nimport type {\n PromiseToastCallback,\n PromiseToastOptions,\n ToastContextType,\n ToastData,\n ToastOptions,\n ToastType,\n} from \"./types\";\n\nconst ToastContext = createContext<ToastContextType | null>(null);\n\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return context;\n};\n\ninterface ToastProviderProps {\n children: ReactNode;\n}\n\nexport const ToastProvider = ({ children }: ToastProviderProps) => {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n\n const generateId = useCallback(\n () => Math.random().toString(36).substring(2, 9),\n [],\n );\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const updateToast = useCallback((id: string, updates: Partial<ToastData>) => {\n setToasts((prev) =>\n prev.map((toast) => (toast.id === id ? { ...toast, ...updates } : toast)),\n );\n }, []);\n\n const addToast = useCallback(\n (message: ReactNode, type: ToastType, options: ToastOptions = {}) => {\n const id = generateId();\n const { duration = 4000, closable = true } = options;\n\n const newToast: ToastData = {\n id,\n message,\n type,\n duration,\n closable,\n };\n\n setToasts((prev) => [...prev, newToast]);\n\n if (duration > 0) {\n // Auto-remove toast after duration\n setTimeout(() => removeToast(id), duration);\n }\n\n return id;\n },\n [generateId, removeToast],\n );\n\n const addPromiseToast = useCallback(\n <T,>(\n promise: Promise<T>,\n callback: PromiseToastCallback<T>,\n options: PromiseToastOptions = {},\n ) => {\n const id = generateId();\n const {\n duration = 0, // Don't auto-close promise toasts during loading\n closable = true,\n loadingText = \"Loading...\",\n } = options;\n\n const newToast: ToastData = {\n id,\n message: loadingText,\n type: \"default\",\n duration,\n closable,\n promise,\n loadingText,\n };\n\n setToasts((prev) => [...prev, newToast]);\n\n // Handle promise resolution/rejection\n promise\n .then((data) => {\n const result = callback({ success: true, data });\n updateToast(id, {\n type: result.type,\n message: result.message,\n duration: result.duration || 3000,\n promise: undefined, // Clear the promise to exit loading state\n });\n setTimeout(() => removeToast(id), result.duration || 3000);\n })\n .catch((error) => {\n const result = callback({ success: false, error });\n updateToast(id, {\n type: result.type,\n message: result.message,\n duration: result.duration || 5000,\n promise: undefined, // Clear the promise to exit loading state\n });\n setTimeout(() => removeToast(id), result.duration || 5000);\n });\n\n return id;\n },\n [generateId, removeToast, updateToast],\n );\n\n // Initialize global toast functions\n useEffect(() => {\n setGlobalToastFunctions(addToast, addPromiseToast);\n }, [addToast, addPromiseToast]);\n\n const value: ToastContextType = {\n toasts,\n addToast,\n addPromiseToast,\n removeToast,\n updateToast,\n };\n\n return (\n <ToastContext.Provider value={value}>{children}</ToastContext.Provider>\n );\n};\n","import type { ReactNode } from \"react\";\nimport type {\n PromiseToastCallback,\n PromiseToastOptions,\n ToastContextType,\n ToastOptions,\n ToastType,\n} from \"./types\";\n\n// Global toast functions - will be initialized by ToastProvider\nlet globalAddToast: ToastContextType[\"addToast\"] | null = null;\nlet globalAddPromiseToast: ToastContextType[\"addPromiseToast\"] | null = null;\n\nexport const setGlobalToastFunctions = (\n addToast: ToastContextType[\"addToast\"],\n addPromiseToast: ToastContextType[\"addPromiseToast\"],\n) => {\n globalAddToast = addToast;\n globalAddPromiseToast = addPromiseToast;\n};\n\n// Simple toast function - just message and type\nexport const showToast = (\n message: ReactNode,\n type: ToastType = \"default\",\n options?: ToastOptions,\n): string => {\n if (!globalAddToast) {\n console.warn(\"Toast function called before ToastProvider is initialized\");\n return \"\";\n }\n return globalAddToast(message, type, options);\n};\n\n// Promise toast function with callback\nexport const showPromiseToast = <T>(\n promise: Promise<T>,\n callback: PromiseToastCallback<T>,\n options?: PromiseToastOptions,\n): string => {\n if (!globalAddPromiseToast) {\n console.warn(\n \"Promise toast function called before ToastProvider is initialized\",\n );\n return \"\";\n }\n return globalAddPromiseToast(promise, callback, options);\n};\n","import type { FC } from \"react\";\nimport { Toast } from \"./Toast\";\nimport { useToast } from \"./ToastContext\";\n\nexport interface ToastContainerProps {\n className?: string;\n}\n\nexport const ToastContainer: FC<ToastContainerProps> = ({ className = \"\" }) => {\n const { toasts, removeToast } = useToast();\n\n if (toasts.length === 0) return null;\n\n return (\n <div\n className={`\n fixed bottom-4 right-4 z-50 flex flex-col gap-2\n ${className}\n `}\n >\n {toasts.map((toast) => (\n <div\n key={toast.id}\n className=\"animate-in slide-in-from-right-full fade-in duration-300\"\n >\n <Toast toast={toast} onClose={() => removeToast(toast.id)} />\n </div>\n ))}\n </div>\n );\n};\n","import { IconMoon, IconSun } from \"@tabler/icons-react\";\nimport { useEffect, useState } from \"react\";\nimport { Button } from \"../buttons/Button/Button\";\nimport { useNubaseContext } from \"../nubase-app/NubaseContextProvider\";\n\nexport interface ThemeToggleProps {\n className?: string;\n defaultTheme: \"light\" | \"dark\";\n}\n\nexport const ThemeToggle = ({ className }: ThemeToggleProps) => {\n const context = useNubaseContext();\n\n const toggleTheme = () => {\n context.commands.execute(\"workbench.setTheme\");\n };\n\n return (\n <Button\n variant=\"secondary\"\n onClick={toggleTheme}\n className={className}\n aria-label={`Switch to ${context.theming.activeThemeId === \"light\" ? \"dark\" : \"light\"} mode`}\n >\n {context.theming.activeThemeId === \"light\" ? (\n <IconMoon size={16} />\n ) : (\n <IconSun size={16} />\n )}\n </Button>\n );\n};\n","import { type ReactNode, createContext, useContext } from \"react\";\nimport type { NubaseContextData } from \"../../context/types\";\n\nconst NubaseContext = createContext<NubaseContextData | undefined>(undefined);\n\nexport interface NubaseContextProviderProps {\n context: NubaseContextData;\n children: ReactNode;\n}\n\nexport const NubaseContextProvider = ({\n context,\n children,\n}: NubaseContextProviderProps) => {\n return (\n <NubaseContext.Provider value={context}>{children}</NubaseContext.Provider>\n );\n};\n\nexport function useNubaseContext(): NubaseContextData {\n const context = useContext(NubaseContext);\n if (context === undefined) {\n throw new Error(\n \"useNubaseContext must be used within a NubaseContextProvider\",\n );\n }\n return context;\n}\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils\";\nimport { SearchableTreeNavigator } from \"../searchable-tree-navigator/SearchableTreeNavigator\";\nimport type { TreeNavigatorItem } from \"../searchable-tree-navigator/TreeNavigatorItem\";\n\nexport interface MainNavProps extends React.HTMLAttributes<HTMLDivElement> {\n items: TreeNavigatorItem[];\n searchPlaceholder?: string;\n}\n\nexport const MainNav = forwardRef<HTMLDivElement, MainNavProps>(\n (\n { className, items, searchPlaceholder = \"Search navigation...\", ...props },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col h-full bg-surface w-full p-2\", className)}\n {...props}\n >\n <SearchableTreeNavigator\n items={items}\n placeHolder={searchPlaceholder}\n height=\"full\"\n />\n </div>\n );\n },\n);\n\nMainNav.displayName = \"MainNav\";\n","import {\n type RefObject,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { SearchTextInput } from \"../../form-controls/SearchTextInput/SearchTextInput\";\nimport { TreeNavigator, type TreeNavigatorItem } from \"./TreeNavigator\";\n\nexport type SearchableTreeNavigatorProps = {\n items: TreeNavigatorItem[];\n placeHolder: string;\n height?: \"full\" | number | string;\n};\n\nexport const SearchableTreeNavigator = forwardRef<\n HTMLInputElement,\n SearchableTreeNavigatorProps\n>((props, ref) => {\n const internalRef = useRef<HTMLInputElement>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n // Expose the internal ref through the forwarded ref\n useImperativeHandle(ref, () => internalRef.current as HTMLInputElement, []);\n\n // Focus the search input when the component comes into view\n useEffect(() => {\n if (internalRef.current) {\n internalRef.current.focus();\n }\n }, []);\n\n // Filter items based on search query (flattens tree structure for search)\n const filteredItems = useMemo(() => {\n if (!searchQuery.trim()) {\n return props.items;\n }\n\n const query = searchQuery.toLowerCase();\n\n const flattenAndFilter = (\n items: TreeNavigatorItem[],\n ): TreeNavigatorItem[] => {\n const result: TreeNavigatorItem[] = [];\n\n for (const item of items) {\n const matchesSearch =\n item.title.toLowerCase().includes(query) ||\n item.subtitle?.toLowerCase().includes(query);\n\n if (matchesSearch) {\n result.push({ ...item, children: undefined }); // Remove children for search results\n }\n\n if (item.children) {\n result.push(...flattenAndFilter(item.children));\n }\n }\n\n return result;\n };\n\n return flattenAndFilter(props.items);\n }, [props.items, searchQuery]);\n\n // Calculate container height and styles\n const getContainerStyle = () => {\n if (props.height === \"full\") {\n return { height: \"100%\" };\n }\n if (typeof props.height === \"number\") {\n return { height: `${props.height}px` };\n }\n if (typeof props.height === \"string\") {\n return { height: props.height };\n }\n return {};\n };\n\n return (\n <div\n className={props.height ? \"flex flex-col gap-2\" : \"space-y-2\"}\n style={getContainerStyle()}\n >\n {/* Search Input - Always visible */}\n <div className=\"flex-shrink-0\">\n <SearchTextInput\n ref={internalRef}\n placeholder={props.placeHolder}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n\n {/* Navigator List - Scrollable */}\n <div className={props.height ? \"flex-1 overflow-y-auto min-h-0\" : \"\"}>\n <TreeNavigator\n items={filteredItems}\n searchInputRef={internalRef as RefObject<HTMLInputElement>}\n />\n </div>\n </div>\n );\n});\n\nSearchableTreeNavigator.displayName = \"SearchableTreeNavigator\";\n\n// Backward compatibility export\nexport const SearchableListNavigator = SearchableTreeNavigator;\nexport type SearchableListNavigatorProps = SearchableTreeNavigatorProps;\n","import type { RefObject } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n type FlatItem,\n type TreeNavigatorItem,\n TreeNavigatorItemComponent,\n} from \"./TreeNavigatorItem\";\n\nexport interface TreeNavigatorProps {\n items: TreeNavigatorItem[];\n searchInputRef?: RefObject<HTMLInputElement>;\n}\n\nconst TreeNavigatorComponent = ({\n items,\n searchInputRef,\n}: TreeNavigatorProps) => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n // Flatten tree structure for keyboard navigation\n const flattenItems = useCallback(\n (items: TreeNavigatorItem[], level = 0, parentId?: string): FlatItem[] => {\n const result: FlatItem[] = [];\n\n for (const item of items) {\n const hasChildren = Boolean(item.children?.length);\n const isExpanded = expandedItems.has(item.id);\n\n result.push({\n ...item,\n level,\n parentId,\n hasChildren,\n isExpanded,\n });\n\n if (hasChildren && isExpanded && item.children) {\n result.push(...flattenItems(item.children, level + 1, item.id));\n }\n }\n\n return result;\n },\n [expandedItems],\n );\n\n const flatItems = flattenItems(items);\n const itemsLength = flatItems.length;\n\n const toggleExpanded = useCallback((itemId: string) => {\n setExpandedItems((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(itemId)) {\n newSet.delete(itemId);\n } else {\n newSet.add(itemId);\n }\n return newSet;\n });\n }, []);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!itemsLength) return;\n\n const currentItem = flatItems[selectedIndex];\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setSelectedIndex((prev) => (prev + 1) % itemsLength);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setSelectedIndex((prev) => (prev - 1 + itemsLength) % itemsLength);\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n if (currentItem?.hasChildren && !currentItem.isExpanded) {\n toggleExpanded(currentItem.id);\n }\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n if (currentItem?.hasChildren && currentItem.isExpanded) {\n toggleExpanded(currentItem.id);\n }\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n if (currentItem?.hasChildren) {\n toggleExpanded(currentItem.id);\n } else {\n currentItem?.onNavigate?.();\n }\n }\n },\n [flatItems, selectedIndex, itemsLength, toggleExpanded],\n );\n\n useEffect(() => {\n const searchInput = searchInputRef?.current;\n if (searchInput) {\n searchInput.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n searchInput.removeEventListener(\"keydown\", handleKeyDown);\n };\n }\n }, [handleKeyDown, searchInputRef]);\n\n useEffect(() => {\n const currentItem = itemRefs.current[selectedIndex];\n if (currentItem) {\n currentItem.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n // Call onFocus when item gets selected via keyboard\n flatItems[selectedIndex]?.onFocus?.();\n }, [selectedIndex, flatItems]);\n\n useEffect(() => {\n if (selectedIndex >= itemsLength) {\n setSelectedIndex(0);\n }\n }, [selectedIndex, itemsLength]);\n\n if (!items.length) {\n return (\n <div className=\"py-8 text-center text-sm text-text-muted\">\n No items found\n </div>\n );\n }\n\n return (\n <div className=\"space-y-1\">\n {flatItems.map((item, index) => (\n <TreeNavigatorItemComponent\n key={item.id}\n item={item}\n index={index}\n isSelected={index === selectedIndex}\n onToggleExpanded={toggleExpanded}\n itemRef={(el) => {\n itemRefs.current[index] = el;\n }}\n />\n ))}\n </div>\n );\n};\n\n// Export both names for backward compatibility and new functionality\nexport const TreeNavigator = TreeNavigatorComponent;\nexport const ListNavigator = TreeNavigatorComponent;\nexport type ListNavigatorItem = TreeNavigatorItem;\nexport type ListNavigatorProps = TreeNavigatorProps;\n\n// Re-export types from TreeNavigatorItem\nexport type { TreeNavigatorItem, FlatItem } from \"./TreeNavigatorItem\";\n","import { IconChevronRight } from \"@tabler/icons-react\";\nimport { Link } from \"@tanstack/react-router\";\nimport type { RefObject } from \"react\";\nimport { cn } from \"../../../utils\";\n\nexport interface TreeNavigatorItem {\n id: string;\n icon: React.ReactNode;\n title: string;\n subtitle?: string;\n onNavigate?: () => void;\n href?: string;\n onFocus?: () => void;\n children?: TreeNavigatorItem[];\n}\n\nexport interface FlatItem extends TreeNavigatorItem {\n level: number;\n parentId?: string;\n isExpanded?: boolean;\n hasChildren: boolean;\n}\n\ninterface TreeNavigatorItemComponentProps {\n item: FlatItem;\n index: number;\n isSelected: boolean;\n onToggleExpanded: (itemId: string) => void;\n itemRef: (el: HTMLButtonElement | null) => void;\n}\n\nexport const TreeNavigatorItemComponent = ({\n item,\n index,\n isSelected,\n onToggleExpanded,\n itemRef,\n}: TreeNavigatorItemComponentProps) => {\n const handleClick = () => {\n if (item.hasChildren) {\n onToggleExpanded(item.id);\n } else if (item.onNavigate) {\n item.onNavigate();\n }\n };\n\n const commonClassName = cn(\n \"flex items-center gap-3 rounded-md py-2 pr-3 text-sm cursor-pointer w-full text-left transition-colors\",\n isSelected\n ? \"bg-primary text-onPrimary\"\n : \"hover:bg-surfaceVariant hover:text-onSurfaceVariant\",\n );\n\n const commonStyle = { paddingLeft: `${12 + item.level * 16}px` };\n\n const content = (\n <>\n <div className=\"flex-shrink-0\">{item.icon}</div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">{item.title}</div>\n {item.subtitle && (\n <div\n className={cn(\n \"text-xs truncate\",\n isSelected ? \"text-primary-foreground/80\" : \"text-text-muted\",\n )}\n >\n {item.subtitle}\n </div>\n )}\n </div>\n {item.hasChildren && (\n <div className=\"flex-shrink-0\">\n <div className=\"w-4 h-4 flex items-center justify-center\">\n <IconChevronRight\n size={12}\n className={cn(\n \"transition-transform\",\n item.isExpanded ? \"rotate-90\" : \"rotate-0\",\n )}\n title={item.isExpanded ? \"Collapse\" : \"Expand\"}\n />\n </div>\n </div>\n )}\n </>\n );\n\n // Use Link for href navigation, button for everything else\n if (item.href && !item.hasChildren) {\n return (\n <Link\n key={item.id}\n ref={itemRef as any}\n to={item.href}\n className={commonClassName}\n style={commonStyle}\n >\n {content}\n </Link>\n );\n }\n\n return (\n <button\n key={item.id}\n ref={itemRef}\n type=\"button\"\n className={commonClassName}\n style={commonStyle}\n onClick={handleClick}\n >\n {content}\n </button>\n );\n};\n","import { cva } from \"class-variance-authority\";\nimport type { FC } from \"react\";\nimport type { NavItem } from \"../../../config/nav-item\";\nimport { cn } from \"../../../utils\";\nimport { SafeLink } from \"./SafeLink\";\n\nconst navItemVariants = cva(\n \"flex items-center gap-3 px-3 py-2 text-sm font-medium transition-all duration-200 rounded-md group\",\n {\n variants: {\n variant: {\n default:\n \"text-onSurfaceVariant hover:text-onSurface hover:bg-surfaceVariant\",\n active: \"text-onSurface bg-surfaceVariant border-l-2 border-l-primary\",\n disabled: \"text-onSurfaceVariant cursor-not-allowed opacity-50\",\n },\n level: {\n 0: \"ml-0\",\n 1: \"ml-4\",\n 2: \"ml-8\",\n 3: \"ml-12\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n level: 0,\n },\n },\n);\n\n// NavItem component\ninterface NavItemComponentProps {\n item: NavItem;\n level: number;\n isExpanded: boolean;\n isActive: boolean;\n onToggle: (id: string) => void;\n onItemClick?: (item: NavItem) => void;\n}\n\nexport const NavItemComponent: FC<NavItemComponentProps> = ({\n item,\n level,\n isExpanded,\n isActive,\n onToggle,\n onItemClick,\n}) => {\n const hasChildren = item.children && item.children.length > 0;\n const isLeaf = !hasChildren;\n\n const handleClick = () => {\n if (hasChildren) {\n onToggle(item.id);\n } else if (item.onClick) {\n item.onClick();\n onItemClick?.(item);\n }\n };\n\n const content = (\n <>\n <div className=\"flex items-center gap-2 flex-1\">\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.badge && (\n <span className=\"ml-auto px-2 py-0.5 text-xs bg-primaryContainer text-onPrimaryContainer rounded-full\">\n {item.badge}\n </span>\n )}\n </div>\n {hasChildren && (\n <span\n className={cn(\n \"flex-shrink-0 w-4 h-4 transition-transform duration-200\",\n isExpanded ? \"transform rotate-90\" : \"\",\n )}\n >\n ▶\n </span>\n )}\n </>\n );\n\n const variant = item.disabled ? \"disabled\" : isActive ? \"active\" : \"default\";\n const className = navItemVariants({\n variant,\n level: Math.min(level, 3) as 0 | 1 | 2 | 3,\n });\n\n if (isLeaf && item.href && !item.disabled) {\n return (\n <SafeLink\n to={item.href}\n className={className}\n onClick={() => onItemClick?.(item)}\n >\n {content}\n </SafeLink>\n );\n }\n\n return (\n <button\n type=\"button\"\n className={className}\n onClick={handleClick}\n disabled={item.disabled}\n >\n {content}\n </button>\n );\n};\n","import type { FC, ReactNode } from \"react\";\n\n// Safe Link component that handles router context availability\ninterface SafeLinkProps {\n to: string;\n className?: string;\n onClick?: () => void;\n children: ReactNode;\n}\n\nconst SafeLink: FC<SafeLinkProps> = ({ to, className, onClick, children }) => {\n // Simple fallback for non-router environments like Storybook\n return (\n <button\n type=\"button\"\n className={className}\n onClick={(e) => {\n e.preventDefault();\n onClick?.();\n // In a real app, you'd navigate to the route\n console.log(`Navigate to: ${to}`);\n }}\n >\n {children}\n </button>\n );\n};\n\nexport { SafeLink, type SafeLinkProps };\n","import type { FC } from \"react\";\nimport type { NavItem } from \"../../../config/nav-item\";\nimport { NavItemComponent } from \"./NavItemComponent\";\n\n// Main NavItems component\ninterface NavItemsProps {\n items: NavItem[];\n level?: number;\n expandedItems: string[];\n activeItemId?: string;\n onToggle: (id: string) => void;\n onItemClick?: (item: NavItem) => void;\n}\n\nexport const NavItems: FC<NavItemsProps> = ({\n items,\n level = 0,\n expandedItems,\n activeItemId,\n onToggle,\n onItemClick,\n}) => {\n return (\n <div className=\"space-y-1\">\n {items.map((item) => {\n const isExpanded = expandedItems.includes(item.id);\n const isActive = activeItemId === item.id;\n\n return (\n <div key={item.id}>\n <NavItemComponent\n item={item}\n level={level}\n isExpanded={isExpanded}\n isActive={isActive}\n onToggle={onToggle}\n onItemClick={onItemClick}\n />\n {isExpanded && item.children && (\n <NavItems\n items={item.children}\n level={level + 1}\n expandedItems={expandedItems}\n activeItemId={activeItemId}\n onToggle={onToggle}\n onItemClick={onItemClick}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n};\n","import type { NavItem } from \"../../../config/nav-item\";\n\n// Helper function to flatten items for search\nexport const flattenNavItems = (\n items: NavItem[],\n level = 0,\n): (NavItem & { level: number })[] => {\n return items.reduce(\n (acc, item) => {\n acc.push({ ...item, level });\n if (item.children) {\n acc.push(...flattenNavItems(item.children, level + 1));\n }\n return acc;\n },\n [] as (NavItem & { level: number })[],\n );\n};\n\n// Helper function to filter items based on search query\nexport const filterNavItems = (items: NavItem[], query: string): NavItem[] => {\n if (!query.trim()) return items;\n\n const lowerQuery = query.toLowerCase();\n\n return items.reduce((acc, item) => {\n const matchesLabel = item.label.toLowerCase().includes(lowerQuery);\n const filteredChildren = item.children\n ? filterNavItems(item.children, query)\n : [];\n\n if (matchesLabel || filteredChildren.length > 0) {\n acc.push({\n ...item,\n children:\n filteredChildren.length > 0 ? filteredChildren : item.children,\n });\n }\n\n return acc;\n }, [] as NavItem[]);\n};\n","import { RouterProvider } from \"@tanstack/react-router\";\nimport { type FC, useMemo } from \"react\";\nimport type { NubaseFrontendConfig } from \"../../config/nubase-frontend-config\";\nimport { HttpClient } from \"../../http/http-client\";\nimport { router } from \"../../routes/router\";\nimport { ModalProvider } from \"../floating/modal/useModal\";\nimport { initializeMonaco } from \"../monaco/monaco-editor\";\nimport { ServicesProvider } from \"./ServicesProvider\";\n\nexport type NubaseAppProps = {\n config: NubaseFrontendConfig;\n};\n\ninitializeMonaco();\n\nexport const NubaseApp: FC<NubaseAppProps> = ({ config }) => {\n const httpClient = useMemo<HttpClient>(() => {\n return new HttpClient({\n baseUrl: config.apiBaseUrl,\n });\n }, [config]);\n\n return (\n <ModalProvider>\n <ServicesProvider config={config} httpClient={httpClient}>\n <RouterProvider router={router} />\n </ServicesProvider>\n </ModalProvider>\n );\n};\n","import axios from \"axios\";\n\nexport interface HttpResponse<T = any> {\n status: number;\n data: T;\n}\n\nexport interface HttpRequestConfig {\n headers?: Record<string, string>;\n timeout?: number;\n params?: Record<string, any>;\n}\n\nexport class HttpClient {\n private baseUrl: string;\n\n constructor({ baseUrl = \"\" }: { baseUrl?: string }) {\n this.baseUrl = baseUrl;\n }\n\n private async request<T>(\n url: string,\n method: string,\n data?: any,\n config: HttpRequestConfig = {},\n ): Promise<HttpResponse<T>> {\n const fullUrl = this.baseUrl ? `${this.baseUrl}${url}` : url;\n\n const response = await axios({\n url: fullUrl,\n method,\n data,\n headers: config.headers,\n timeout: config.timeout,\n params: config.params,\n });\n\n return {\n status: response.status,\n data: response.data,\n };\n }\n\n async get<T>(\n url: string,\n config?: HttpRequestConfig,\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"GET\", undefined, config);\n }\n\n async post<T>(\n url: string,\n data?: any,\n config?: HttpRequestConfig,\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"POST\", data, config);\n }\n\n async put<T>(\n url: string,\n data?: any,\n config?: HttpRequestConfig,\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"PUT\", data, config);\n }\n\n async patch<T>(\n url: string,\n data?: any,\n config?: HttpRequestConfig,\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"PATCH\", data, config);\n }\n\n async delete<T>(\n url: string,\n config?: HttpRequestConfig,\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"DELETE\", undefined, config);\n }\n}\n","import { createRouter } from \"@tanstack/react-router\";\nimport { routeTree } from \"./routes\";\n\nexport const router = createRouter({\n routeTree: routeTree,\n});\n","import { createRoute } from \"@tanstack/react-router\";\nimport { devRoute } from \"../dev-route\";\nimport ColorsScreen from \"./colors-screen\";\n\nexport const colorsRoute = createRoute({\n getParentRoute: () => devRoute,\n path: \"/colors\",\n component: ColorsScreen,\n});\n","import { Outlet, createRoute } from \"@tanstack/react-router\";\nimport { rootRoute } from \"../root\";\n\nfunction DevLayout() {\n return (\n <div className=\"space-y-6\">\n <div className=\"border-b border-outline pb-4\">\n <h1 className=\"text-2xl font-bold text-onSurface\">Development Tools</h1>\n <p className=\"text-onSurfaceVariant mt-1\">\n Development utilities and debugging tools for the Nubase design system\n </p>\n </div>\n <Outlet />\n </div>\n );\n}\n\nexport const devRoute = createRoute({\n getParentRoute: () => rootRoute,\n path: \"/dev\",\n component: DevLayout,\n});\n","import { Outlet, createRootRoute } from \"@tanstack/react-router\";\nimport { TanStackRouterDevtools } from \"@tanstack/react-router-devtools\";\nimport { Dock } from \"../components\";\nimport { MainNav } from \"../components/navigation/main-nav/MainNav\";\nimport { useNubaseContext } from \"../components/nubase-app/NubaseContextProvider\";\n\nfunction RootComponent() {\n const context = useNubaseContext();\n\n return (\n <div className=\"bg-background text-text h-screen w-screen\">\n <Dock\n center={<Outlet />}\n left={<MainNav items={context.config.mainMenu} />}\n />\n {/* Development Tools - Top Right */}\n <TanStackRouterDevtools position=\"top-right\" />\n </div>\n );\n}\n\nexport const rootRoute = createRootRoute({\n component: RootComponent,\n});\n","import { useNubaseContext } from \"../../../components/nubase-app/NubaseContextProvider\";\nimport type { NubaseThemeColors } from \"../../../theming/theme\";\n\ninterface ColorSwatchProps {\n name: string;\n value: string;\n description: string;\n}\n\nfunction ColorSwatch({ name, value, description }: ColorSwatchProps) {\n return (\n <div className=\"flex items-center gap-4 p-3 border border-outline rounded-lg bg-surface\">\n <div\n className=\"w-12 h-12 rounded-md border border-outline shadow-sm flex-shrink-0\"\n style={{ backgroundColor: value }}\n />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <code className=\"text-sm font-mono text-onSurface bg-surfaceVariant px-2 py-1 rounded\">\n {name}\n </code>\n <code className=\"text-xs font-mono text-onSurfaceVariant bg-surfaceVariant px-2 py-1 rounded\">\n {value}\n </code>\n </div>\n <p className=\"text-sm text-onSurfaceVariant mt-1\">{description}</p>\n </div>\n </div>\n );\n}\n\ninterface ColorGroupProps {\n title: string;\n colors: Array<{ name: keyof NubaseThemeColors; description: string }>;\n themeColors: NubaseThemeColors;\n}\n\nfunction ColorGroup({ title, colors, themeColors }: ColorGroupProps) {\n return (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold text-onSurface border-b border-outline pb-2\">\n {title}\n </h3>\n <div className=\"grid gap-3\">\n {colors.map(({ name, description }) => (\n <ColorSwatch\n key={name}\n name={name}\n value={themeColors[name]}\n description={description}\n />\n ))}\n </div>\n </div>\n );\n}\n\nexport default function ColorsScreen() {\n const context = useNubaseContext();\n const currentTheme = context.theming.themeMap[context.theming.activeThemeId];\n\n if (!currentTheme) {\n return (\n <div className=\"text-center py-8\">\n <p className=\"text-onSurfaceVariant\">No theme loaded</p>\n </div>\n );\n }\n\n const colorGroups = [\n {\n title: \"Primary Colors\",\n colors: [\n {\n name: \"primary\" as const,\n description: \"Main brand color for prominent actions\",\n },\n {\n name: \"onPrimary\" as const,\n description: \"Text/icons on primary surfaces\",\n },\n {\n name: \"primaryContainer\" as const,\n description: \"Emphasized containers and badges\",\n },\n {\n name: \"onPrimaryContainer\" as const,\n description: \"Text/icons on primary containers\",\n },\n ],\n },\n {\n title: \"Secondary Colors\",\n colors: [\n {\n name: \"secondary\" as const,\n description: \"Supporting brand color for less prominent actions\",\n },\n {\n name: \"onSecondary\" as const,\n description: \"Text/icons on secondary surfaces\",\n },\n {\n name: \"secondaryContainer\" as const,\n description: \"Secondary buttons and containers\",\n },\n {\n name: \"onSecondaryContainer\" as const,\n description: \"Text/icons on secondary containers\",\n },\n ],\n },\n {\n title: \"Tertiary Colors\",\n colors: [\n {\n name: \"tertiary\" as const,\n description: \"Accent color for balance and contrast\",\n },\n {\n name: \"onTertiary\" as const,\n description: \"Text/icons on tertiary surfaces\",\n },\n {\n name: \"tertiaryContainer\" as const,\n description: \"Tertiary containers and highlights\",\n },\n {\n name: \"onTertiaryContainer\" as const,\n description: \"Text/icons on tertiary containers\",\n },\n ],\n },\n {\n title: \"Error Colors\",\n colors: [\n {\n name: \"error\" as const,\n description: \"Error states and destructive actions\",\n },\n {\n name: \"onError\" as const,\n description: \"Text/icons on error surfaces\",\n },\n {\n name: \"errorContainer\" as const,\n description: \"Error containers and alerts\",\n },\n {\n name: \"onErrorContainer\" as const,\n description: \"Text/icons on error containers\",\n },\n ],\n },\n {\n title: \"Surface Colors\",\n colors: [\n {\n name: \"surface\" as const,\n description: \"Default background surfaces\",\n },\n { name: \"onSurface\" as const, description: \"Primary text color\" },\n {\n name: \"surfaceVariant\" as const,\n description: \"Subtle background variations\",\n },\n {\n name: \"onSurfaceVariant\" as const,\n description: \"Secondary text and placeholders\",\n },\n ],\n },\n {\n title: \"Other Colors\",\n colors: [\n { name: \"outline\" as const, description: \"Borders and dividers\" },\n { name: \"outlineVariant\" as const, description: \"Subtle borders\" },\n { name: \"shadow\" as const, description: \"Drop shadows\" },\n { name: \"scrim\" as const, description: \"Modal backdrops\" },\n {\n name: \"inverseSurface\" as const,\n description: \"High contrast surfaces\",\n },\n {\n name: \"onInverseSurface\" as const,\n description: \"Text on inverse surfaces\",\n },\n ],\n },\n ];\n\n return (\n <div className=\"space-y-8\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h2 className=\"text-xl font-semibold text-onSurface\">Theme Colors</h2>\n <p className=\"text-onSurfaceVariant mt-1\">\n Current theme:{\" \"}\n <span className=\"font-medium\">{currentTheme.name}</span> (\n {currentTheme.type})\n </p>\n </div>\n <div className=\"flex items-center gap-2 text-sm text-onSurfaceVariant\">\n <span>Theme ID:</span>\n <code className=\"bg-surfaceVariant px-2 py-1 rounded font-mono\">\n {currentTheme.id}\n </code>\n </div>\n </div>\n\n <div className=\"grid gap-8\">\n {colorGroups.map((group) => (\n <ColorGroup\n key={group.title}\n title={group.title}\n colors={group.colors}\n themeColors={currentTheme.colors}\n />\n ))}\n </div>\n\n <div className=\"mt-12 p-6 bg-surfaceVariant rounded-lg\">\n <h3 className=\"text-lg font-semibold text-onSurface mb-4\">\n Usage Examples\n </h3>\n <div className=\"space-y-3\">\n <div className=\"font-mono text-sm\">\n <span className=\"text-primary\">bg-primary</span>{\" \"}\n <span className=\"text-onSurfaceVariant\">→</span>{\" \"}\n <span className=\"text-onSurface\">\n {currentTheme.colors.primary}\n </span>\n </div>\n <div className=\"font-mono text-sm\">\n <span className=\"text-secondary\">text-onSurface</span>{\" \"}\n <span className=\"text-onSurfaceVariant\">→</span>{\" \"}\n <span className=\"text-onSurface\">\n {currentTheme.colors.onSurface}\n </span>\n </div>\n <div className=\"font-mono text-sm\">\n <span className=\"text-tertiary\">border-outline</span>{\" \"}\n <span className=\"text-onSurfaceVariant\">→</span>{\" \"}\n <span className=\"text-onSurface\">\n {currentTheme.colors.outline}\n </span>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { createRoute } from \"@tanstack/react-router\";\nimport { devRoute } from \"../dev-route\";\nimport IndexScreen from \"./index-screen\";\n\nexport const devIndexRoute = createRoute({\n getParentRoute: () => devRoute,\n path: \"/\",\n component: IndexScreen,\n});\n","import { Link } from \"@tanstack/react-router\";\n\ninterface DevToolCardProps {\n title: string;\n description: string;\n href: string;\n}\n\nfunction DevToolCard({ title, description, href }: DevToolCardProps) {\n return (\n <Link\n to={href}\n className=\"block p-6 border border-outline rounded-lg bg-surface hover:bg-surfaceVariant transition-colors\"\n >\n <h3 className=\"text-lg font-semibold text-onSurface mb-2\">{title}</h3>\n <p className=\"text-onSurfaceVariant\">{description}</p>\n </Link>\n );\n}\n\nexport default function IndexScreen() {\n const devTools = [\n {\n title: \"Colors\",\n description:\n \"View all Material Design 3 color tokens for the current theme\",\n href: \"/dev/colors\",\n },\n // Future dev tools can be added here\n ];\n\n return (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-xl font-semibold text-onSurface mb-2\">\n Available Tools\n </h2>\n <p className=\"text-onSurfaceVariant\">\n Development utilities to help you work with the Nubase design system\n </p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {devTools.map((tool) => (\n <DevToolCard\n key={tool.href}\n title={tool.title}\n description={tool.description}\n href={tool.href}\n />\n ))}\n </div>\n\n <div className=\"mt-8 p-4 bg-surfaceVariant rounded-lg\">\n <h3 className=\"text-lg font-semibold text-onSurface mb-2\">\n Need more tools?\n </h3>\n <p className=\"text-onSurfaceVariant text-sm\">\n This development section can be extended with additional debugging and\n development utilities like component showcases, typography scales,\n spacing guides, and more.\n </p>\n </div>\n </div>\n );\n}\n","import { createRoute } from \"@tanstack/react-router\";\nimport { rootRoute } from \"../root\";\nimport ViewScreen from \"./view-screen\";\n\nexport const viewRoute = createRoute({\n getParentRoute: () => rootRoute,\n path: \"/v/$view\",\n validateSearch: (search: Record<string, unknown>) => ({\n id: search.id as string | undefined,\n }),\n component: ViewScreen,\n});\n","import { useParams } from \"@tanstack/react-router\";\nimport { useNubaseContext } from \"../../components/nubase-app/NubaseContextProvider\";\nimport { ViewRenderer } from \"../../components/views/ViewRenderer/ViewRenderer\";\n\nexport default function ViewScreen() {\n const { view } = useParams({ from: \"/v/$view\" });\n const context = useNubaseContext();\n\n // we need to make sure that the view is in the config.views object\n if (!context.config.views[view]) {\n return <div>View not found</div>;\n }\n\n return <ViewRenderer view={context.config.views[view]} />;\n}\n","import type { ObjectOutput } from \"@nubase/core\";\nimport type { FC } from \"react\";\nimport type { CreateView } from \"../../../config/view\";\nimport { SchemaForm } from \"../../form\";\nimport { useNubaseContext } from \"../../nubase-app/NubaseContextProvider\";\n\nexport type CreateViewRendererProps = {\n view: CreateView;\n};\n\nexport const CreateViewRenderer: FC<CreateViewRendererProps> = ({ view }) => {\n const context = useNubaseContext();\n return (\n <SchemaForm\n schema={view.schema}\n onSubmit={(data: ObjectOutput<any>) => {\n view.onSubmit({\n data,\n http: context.typedApiClient || context.httpClient,\n });\n }}\n />\n );\n};\n","import type { FC } from \"react\";\nimport type { View } from \"../../../config/view\";\nimport { CreateViewRenderer } from \"./CreateViewRenderer\";\n\nexport type ViewRendererProps = {\n view: View;\n};\n\nexport const ViewRenderer: FC<ViewRendererProps> = (props) => {\n const { view } = props;\n\n switch (view.type) {\n case \"create\":\n return <CreateViewRenderer view={view} />;\n default:\n return null;\n }\n};\n","import { colorsRoute } from \"./dev/colors/colors-route\";\nimport { devRoute } from \"./dev/dev-route\";\nimport { devIndexRoute } from \"./dev/index/index-route\";\nimport { rootRoute } from \"./root\";\nimport { viewRoute } from \"./view/view-route\";\n\nexport const routeTree = rootRoute.addChildren([\n viewRoute,\n devRoute.addChildren([devIndexRoute, colorsRoute]),\n]);\n","import loader from \"@monaco-editor/loader\";\nimport * as monaco from \"monaco-editor\";\nimport { z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\n\n// Simple example schema - replace with your actual schema\nconst exampleSchema = z.object({\n name: z.string(),\n version: z.string(),\n description: z.string().optional(),\n});\n\nexport async function initializeJsonSchema(): Promise<void> {\n try {\n // Convert the Zod schema to JSON Schema using the library\n const jsonSchema = zodToJsonSchema(exampleSchema, \"exampleSchema\");\n\n // Configure JSON language settings\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n validate: true,\n allowComments: true,\n schemas: [\n {\n uri: \"project-schema.json\", // A unique URI for the schema itself\n schema: jsonSchema,\n fileMatch: [\"*\"], // Match all JSON files\n },\n ],\n enableSchemaRequest: true,\n schemaValidation: \"error\",\n schemaRequest: \"error\",\n });\n\n // Configure completion and formatting settings\n monaco.languages.json.jsonDefaults.setModeConfiguration({\n documentFormattingEdits: true,\n documentRangeFormattingEdits: true,\n completionItems: true,\n hovers: true,\n documentSymbols: true,\n tokens: true,\n colors: true,\n foldingRanges: true,\n diagnostics: true,\n selectionRanges: true,\n });\n\n // JSON schema validation configured successfully\n } catch (error) {\n console.error(\"Error configuring JSON schema validation:\", error);\n }\n}\n\nexport async function initializeMonaco(): Promise<typeof monaco> {\n loader.config({ monaco });\n await initializeJsonSchema();\n\n return loader.init();\n}\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { commandRegistry } from \"../../commands\";\nimport type { NubaseFrontendConfig } from \"../../config/nubase-frontend-config\";\nimport type { NubaseContextData } from \"../../context/types\";\nimport type { HttpClient } from \"../../http/http-client\";\nimport { createTypedApiClient } from \"../../http/typed-api-client\";\nimport { cleanupKeybindings, registerKeybindings } from \"../../keybindings\";\nimport { useModal } from \"../floating/modal/useModal\";\nimport {\n type NubaseInitializationData,\n initializeNubaseApp,\n} from \"./initializeNubaseApp\";\n\nexport interface UseNubaseContextOptions {\n config: NubaseFrontendConfig;\n httpClient: HttpClient;\n}\n\nexport interface UseNubaseContextResult {\n data: NubaseContextData | null;\n isLoading: boolean;\n error: Error | null;\n retry: () => void;\n}\n\n/**\n * Hook that manages the initialization of the Nubase app context\n * Handles async theme loading and other initialization tasks\n */\nexport function useCreateNubaseContext({\n config,\n httpClient,\n}: UseNubaseContextOptions): UseNubaseContextResult {\n const [initializationData, setInitializationData] =\n useState<NubaseInitializationData | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const [activeThemeId, setActiveThemeId] = useState<string>(\"\");\n const modal = useModal();\n\n const initialize = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const initData = await initializeNubaseApp({ config, httpClient });\n setInitializationData(initData);\n setActiveThemeId(initData.defaultThemeId);\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error(\"Failed to initialize Nubase app\");\n setError(error);\n console.error(\"Failed to initialize Nubase app:\", error);\n } finally {\n setIsLoading(false);\n }\n }, [config, httpClient]);\n\n useEffect(() => {\n initialize();\n }, [initialize]);\n\n // Create the mutable, stateful NubaseContextData\n const nubaseContextData = useMemo(() => {\n if (!initializationData) return null;\n\n // Create typed API client if endpoints are provided\n let typedApiClient: any = undefined;\n if (initializationData.config.apiEndpoints) {\n try {\n typedApiClient = createTypedApiClient(\n httpClient,\n initializationData.config.apiEndpoints,\n );\n } catch (error) {\n console.warn(\"Failed to create typed API client:\", error);\n }\n }\n\n const nubaseContextDataInternal: NubaseContextData = {\n config: initializationData.config,\n commands: commandRegistry,\n keybindings: [\n {\n key: [\"meta+k\", \"ctrl+k\"],\n command: \"workbench.runCommand\",\n args: {},\n },\n {\n key: [\"meta+/\", \"ctrl+/\"],\n command: \"workbench.setTheme\",\n args: {},\n },\n ],\n httpClient,\n typedApiClient,\n modal,\n theming: {\n themeIds: initializationData.themeIds,\n themeMap: initializationData.themeMap,\n activeThemeId,\n setActiveThemeId: (themeId: string) => {\n if (initializationData.themeIds.includes(themeId)) {\n setActiveThemeId(themeId);\n } else {\n console.warn(`Theme ID \"${themeId}\" is not defined in the config.`);\n }\n },\n },\n };\n\n return nubaseContextDataInternal;\n }, [initializationData, modal, activeThemeId, httpClient]);\n\n // Initialize command system and register keybindings when nubaseContextData is available\n useEffect(() => {\n if (nubaseContextData) {\n // Set command registry context\n commandRegistry.setContext(nubaseContextData);\n\n // Register keybindings\n registerKeybindings(nubaseContextData.keybindings);\n }\n }, [nubaseContextData]);\n\n // Update DOM attribute when activeThemeId changes\n useEffect(() => {\n if (activeThemeId) {\n document.documentElement.setAttribute(\"data-theme\", activeThemeId);\n }\n }, [activeThemeId]);\n\n // Cleanup function to remove theme variables and keybindings when unmounting\n useEffect(() => {\n return () => {\n const existingStyle = document.getElementById(\"nubase-theme-variables\");\n if (existingStyle) {\n existingStyle.remove();\n }\n cleanupKeybindings();\n };\n }, []);\n\n return {\n data: nubaseContextData,\n isLoading,\n error,\n retry: initialize,\n };\n}\n","import type {\n CommandDefinition,\n CommandRegistry,\n NubaseContextData,\n} from \"./types\";\n\nclass CommandRegistryImpl implements CommandRegistry {\n private commands = new Map<string, CommandDefinition>();\n private context: NubaseContextData | null = null;\n\n setContext(context: NubaseContextData) {\n this.context = context;\n }\n\n register(command: CommandDefinition) {\n this.commands.set(command.id, command);\n }\n\n async execute(\n commandId: string,\n args?: Record<string, unknown>,\n ): Promise<void> {\n if (!this.context) {\n throw new Error(\n \"Command context not set. Make sure to initialize the command system.\",\n );\n }\n\n const command = this.commands.get(commandId);\n if (!command) {\n console.warn(`Command \"${commandId}\" not found`);\n return;\n }\n\n try {\n await command.execute(this.context, args);\n } catch (error) {\n console.error(`Error executing command \"${commandId}\":`, error);\n }\n }\n\n getCommand(commandId: string): CommandDefinition | undefined {\n return this.commands.get(commandId);\n }\n\n getAllCommands(): CommandDefinition[] {\n return Array.from(this.commands.values());\n }\n\n clear() {\n this.commands.clear();\n }\n}\n\nexport const commandRegistry = new CommandRegistryImpl();\n","import { IconCommand } from \"@tabler/icons-react\";\nimport { SearchableTreeNavigator } from \"../../components/navigation/searchable-tree-navigator/SearchableTreeNavigator\";\nimport type { TreeNavigatorItem } from \"../../components/navigation/searchable-tree-navigator/TreeNavigator\";\nimport type { CommandDefinition } from \"../types\";\n\nexport const workbenchRunCommand: CommandDefinition = {\n id: \"workbench.runCommand\",\n name: \"Run Command\",\n execute: (context) => {\n const commands = context.commands.getAllCommands();\n const commandItems: TreeNavigatorItem[] = commands.map((command) => ({\n id: command.id,\n icon: <IconCommand className=\"h-4 w-4\" />,\n title: command.name,\n onNavigate: () => {\n context.modal.closeModal();\n context.commands.execute(command.id);\n },\n }));\n context.modal.openModal(\n <SearchableTreeNavigator\n items={commandItems}\n placeHolder=\"Search in commands...\"\n />,\n {\n alignment: \"top\",\n size: \"lg\",\n showBackdrop: true,\n showCloseButton: false,\n },\n );\n },\n};\n","import type {\n InferRequestBody,\n InferRequestParams,\n InferResponseBody,\n RequestSchema,\n} from \"@nubase/core\";\nimport type {\n HttpClient,\n HttpRequestConfig,\n HttpResponse,\n} from \"./http-client\";\n\ntype TypedMethodOptions<T extends RequestSchema> = {\n params?: InferRequestParams<T>;\n data?: InferRequestBody<T>;\n config?: HttpRequestConfig;\n};\n\n// Helper type to create method signature based on HTTP method\ntype MethodSignature<T extends RequestSchema> = T[\"method\"] extends \"GET\"\n ? (\n options?: Omit<TypedMethodOptions<T>, \"data\">,\n ) => Promise<HttpResponse<InferResponseBody<T>>>\n : (\n options?: TypedMethodOptions<T>,\n ) => Promise<HttpResponse<InferResponseBody<T>>>;\n\n// Main typed API client structure - simple flat endpoints\ntype TypedApiMethods<T> = {\n [K in keyof T]: T[K] extends RequestSchema ? MethodSignature<T[K]> : never;\n};\n\nexport class TypedApiClient<T> {\n private httpClient: HttpClient;\n private endpoints: T;\n\n constructor(httpClient: HttpClient, endpoints: T) {\n this.httpClient = httpClient;\n this.endpoints = endpoints;\n\n // Create flattened API client structure\n this.createFlatApiClient();\n }\n\n private createFlatApiClient() {\n for (const [key, schema] of Object.entries(\n this.endpoints as Record<string, any>,\n )) {\n if (this.isRequestSchema(schema)) {\n (this as any)[key] = async (options: TypedMethodOptions<any> = {}) => {\n return this.executeRequest(schema as RequestSchema, options);\n };\n }\n }\n }\n\n private async executeRequest(\n schema: RequestSchema,\n options: TypedMethodOptions<any>,\n ): Promise<HttpResponse<any>> {\n const { params, data, config } = options;\n\n // Replace path parameters if they exist\n let path = schema.path;\n if (params && typeof params === \"object\") {\n for (const [key, value] of Object.entries(params)) {\n path = path.replace(`:${key}`, String(value));\n }\n }\n\n // Validate request body if provided\n if (data && schema.requestBody) {\n try {\n schema.requestBody.parse(data);\n } catch (error) {\n throw new Error(`Request body validation failed: ${error}`);\n }\n }\n\n // Make the HTTP request\n switch (schema.method) {\n case \"GET\":\n return this.httpClient.get(path, config);\n case \"POST\":\n return this.httpClient.post(path, data, config);\n case \"PUT\":\n return this.httpClient.put(path, data, config);\n case \"PATCH\":\n return this.httpClient.patch(path, data, config);\n case \"DELETE\":\n return this.httpClient.delete(path, config);\n default:\n throw new Error(`Unsupported HTTP method: ${schema.method}`);\n }\n }\n\n private isRequestSchema(obj: any): obj is RequestSchema {\n return (\n obj &&\n typeof obj === \"object\" &&\n \"method\" in obj &&\n \"path\" in obj &&\n \"requestParams\" in obj &&\n \"requestBody\" in obj &&\n \"responseBody\" in obj\n );\n }\n\n private capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n}\n\nexport function createTypedApiClient<T>(\n httpClient: HttpClient,\n endpoints: T,\n): TypedApiClient<T> & TypedApiMethods<T> {\n return new TypedApiClient(httpClient, endpoints) as TypedApiClient<T> &\n TypedApiMethods<T>;\n}\n","import type { Keybinding } from \"../commands/types\";\nimport type { KeySequence, ParsedKeybinding } from \"./types\";\n\n/**\n * Parses a key string into a KeySequence\n * Supports VS Code format: \"ctrl+alt+k\", \"meta+shift+p\", etc.\n */\nexport function parseKeySequence(keyString: string): KeySequence {\n const parts = keyString.toLowerCase().split(\"+\");\n const sequence: KeySequence = {\n key: \"\",\n };\n\n for (const part of parts) {\n switch (part.trim()) {\n case \"ctrl\":\n case \"control\":\n sequence.ctrl = true;\n break;\n case \"meta\":\n case \"cmd\":\n case \"command\":\n sequence.meta = true;\n break;\n case \"alt\":\n case \"option\":\n sequence.alt = true;\n break;\n case \"shift\":\n sequence.shift = true;\n break;\n default:\n sequence.key = part.trim();\n }\n }\n\n return sequence;\n}\n\n/**\n * Parses a keybinding definition into ParsedKeybinding\n * Supports chords like \"ctrl+k ctrl+c\" (space-separated sequences)\n * Supports alternative keys as array: [\"meta+k\", \"ctrl+k\"]\n */\nexport function parseKeybinding(keybinding: Keybinding): ParsedKeybinding[] {\n const keys = Array.isArray(keybinding.key)\n ? keybinding.key\n : [keybinding.key];\n\n return keys.map((keyString) => {\n // Split by spaces for chord sequences\n const sequences = keyString\n .split(/\\s+/)\n .map((seq) => seq.trim())\n .filter((seq) => seq.length > 0);\n\n return {\n key: keyString,\n sequences,\n command: keybinding.command,\n args: keybinding.args,\n };\n });\n}\n\n/**\n * Creates a normalized key string from a KeyboardEvent\n * Matches VS Code's key format\n */\nexport function normalizeEventKey(event: KeyboardEvent): string {\n const parts: string[] = [];\n\n if (event.metaKey) parts.push(\"meta\");\n if (event.ctrlKey) parts.push(\"ctrl\");\n if (event.altKey) parts.push(\"alt\");\n if (event.shiftKey) parts.push(\"shift\");\n\n // Handle special keys\n let key = event.key.toLowerCase();\n\n // Map special keys to VS Code format\n switch (key) {\n case \" \":\n key = \"space\";\n break;\n case \"arrowup\":\n key = \"up\";\n break;\n case \"arrowdown\":\n key = \"down\";\n break;\n case \"arrowleft\":\n key = \"left\";\n break;\n case \"arrowright\":\n key = \"right\";\n break;\n case \"escape\":\n key = \"escape\";\n break;\n case \"enter\":\n key = \"enter\";\n break;\n case \"backspace\":\n key = \"backspace\";\n break;\n case \"delete\":\n key = \"delete\";\n break;\n case \"tab\":\n key = \"tab\";\n break;\n }\n\n parts.push(key);\n return parts.join(\"+\");\n}\n\n/**\n * Checks if a key sequence matches a parsed sequence\n */\nexport function matchesKeySequence(\n eventKey: string,\n targetSequence: string,\n): boolean {\n return eventKey === targetSequence.toLowerCase();\n}\n","import { commandRegistry } from \"../commands/CommandRegistry\";\nimport type { Keybinding } from \"../commands/types\";\nimport {\n matchesKeySequence,\n normalizeEventKey,\n parseKeybinding,\n} from \"./keyParser\";\nimport type { KeybindingState, ParsedKeybinding } from \"./types\";\n\n/**\n * Manages keybindings with VS Code-style syntax support including chords\n */\nclass KeybindingManager {\n private keybindings: ParsedKeybinding[] = [];\n private state: KeybindingState = {\n currentChord: [],\n chordTimeout: null,\n waitingForChord: false,\n };\n\n // Chord timeout duration (ms) - matches VS Code's behavior\n private readonly CHORD_TIMEOUT = 1000;\n\n /**\n * Registers an array of keybindings\n */\n registerKeybindings(keybindings: Keybinding[]): void {\n // Clear existing keybindings\n this.keybindings = [];\n this.resetChordState();\n\n // Parse and register new keybindings\n for (const keybinding of keybindings) {\n const parsedKeybindings = parseKeybinding(keybinding);\n this.keybindings.push(...parsedKeybindings);\n }\n }\n\n /**\n * Handles keyboard events and executes matching commands\n */\n async handleKeyboardEvent(event: KeyboardEvent): Promise<boolean> {\n // Don't handle events in input fields unless specifically configured\n const target = event.target as HTMLElement;\n if (this.shouldIgnoreEvent(target)) {\n return false;\n }\n\n const eventKey = normalizeEventKey(event);\n\n // If we're waiting for a chord, try to complete it\n if (this.state.waitingForChord) {\n return await this.handleChordCompletion(event, eventKey);\n }\n\n // Look for matching keybindings\n const matches = this.findMatches(eventKey);\n\n if (matches.length === 0) {\n return false;\n }\n\n // If there's an exact single-sequence match, execute it\n const exactMatch = matches.find(\n (match) =>\n match.sequences.length === 1 &&\n match.sequences[0] &&\n matchesKeySequence(eventKey, match.sequences[0]),\n );\n\n if (exactMatch && matches.length === 1) {\n event.preventDefault();\n event.stopPropagation();\n await this.executeCommand(exactMatch);\n return true;\n }\n\n // Check if any matches require multiple sequences (chords)\n const chordMatches = matches.filter((match) => match.sequences.length > 1);\n\n if (chordMatches.length > 0) {\n // Start chord sequence\n event.preventDefault();\n event.stopPropagation();\n this.startChordSequence(eventKey);\n return true;\n }\n\n // If we have an exact single match among multiple possibilities\n if (exactMatch) {\n event.preventDefault();\n event.stopPropagation();\n await this.executeCommand(exactMatch);\n return true;\n }\n\n return false;\n }\n\n /**\n * Finds all keybindings that could match the current key\n */\n private findMatches(eventKey: string): ParsedKeybinding[] {\n return this.keybindings.filter((binding) =>\n binding.sequences.some((seq, index) => {\n if (index === 0) {\n return matchesKeySequence(eventKey, seq);\n }\n return false;\n }),\n );\n }\n\n /**\n * Handles completion of a chord sequence\n */\n private async handleChordCompletion(\n event: KeyboardEvent,\n eventKey: string,\n ): Promise<boolean> {\n const currentSequenceIndex = this.state.currentChord.length;\n\n // Find keybindings that match our current chord progress\n const potentialMatches = this.keybindings.filter((binding) => {\n // Must have more sequences than our current progress\n if (binding.sequences.length <= currentSequenceIndex) {\n return false;\n }\n\n // All previous sequences must match our chord history\n for (let i = 0; i < currentSequenceIndex; i++) {\n const chordKey = this.state.currentChord[i];\n const bindingSeq = binding.sequences[i];\n if (\n !chordKey ||\n !bindingSeq ||\n !matchesKeySequence(chordKey, bindingSeq)\n ) {\n return false;\n }\n }\n\n // Current key must match the next sequence\n const nextSequence = binding.sequences[currentSequenceIndex];\n return nextSequence ? matchesKeySequence(eventKey, nextSequence) : false;\n });\n\n if (potentialMatches.length === 0) {\n // No matches, reset chord state\n this.resetChordState();\n return false;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n // Add current key to chord history\n this.state.currentChord.push(eventKey);\n\n // Check if any match is complete\n const completeMatch = potentialMatches.find(\n (match) => match.sequences.length === this.state.currentChord.length,\n );\n\n if (completeMatch) {\n // Execute the completed chord\n await this.executeCommand(completeMatch);\n this.resetChordState();\n return true;\n }\n\n // Continue waiting for more keys in the chord\n this.resetChordTimeout();\n return true;\n }\n\n /**\n * Starts a new chord sequence\n */\n private startChordSequence(eventKey: string): void {\n this.state.currentChord = [eventKey];\n this.state.waitingForChord = true;\n this.resetChordTimeout();\n }\n\n /**\n * Resets the chord timeout\n */\n private resetChordTimeout(): void {\n if (this.state.chordTimeout) {\n window.clearTimeout(this.state.chordTimeout);\n }\n\n this.state.chordTimeout = window.setTimeout(() => {\n this.resetChordState();\n }, this.CHORD_TIMEOUT);\n }\n\n /**\n * Resets the chord state\n */\n private resetChordState(): void {\n this.state.currentChord = [];\n this.state.waitingForChord = false;\n\n if (this.state.chordTimeout) {\n window.clearTimeout(this.state.chordTimeout);\n this.state.chordTimeout = null;\n }\n }\n\n /**\n * Executes a command for a matching keybinding\n */\n private async executeCommand(keybinding: ParsedKeybinding): Promise<void> {\n try {\n await commandRegistry.execute(keybinding.command, keybinding.args);\n } catch (error) {\n console.error(\n `Failed to execute command \"${keybinding.command}\":`,\n error,\n );\n }\n }\n\n /**\n * Determines if we should ignore a keyboard event based on the target element\n */\n private shouldIgnoreEvent(target: HTMLElement): boolean {\n // Ignore events in input fields, textareas, and contenteditable elements\n const tagName = target.tagName.toLowerCase();\n\n if (tagName === \"input\" || tagName === \"textarea\") {\n return true;\n }\n\n if (target.contentEditable === \"true\") {\n return true;\n }\n\n // Ignore if any parent has contenteditable\n let parent = target.parentElement;\n while (parent) {\n if (parent.contentEditable === \"true\") {\n return true;\n }\n parent = parent.parentElement;\n }\n\n return false;\n }\n\n /**\n * Clears all registered keybindings\n */\n clear(): void {\n this.keybindings = [];\n this.resetChordState();\n }\n\n /**\n * Gets all registered keybindings\n */\n getKeybindings(): ParsedKeybinding[] {\n return [...this.keybindings];\n }\n}\n\nexport const keybindingManager = new KeybindingManager();\n","import type { Keybinding } from \"../commands/types\";\nimport { keybindingManager } from \"./KeybindingManager\";\n\nlet isListenerAttached = false;\n\n/**\n * Registers keybindings and sets up the global keyboard event listener\n * This replaces the hook-based approach with a centralized system\n */\nexport function registerKeybindings(keybindings: Keybinding[]): void {\n // Register the keybindings with the manager\n keybindingManager.registerKeybindings(keybindings);\n\n // Attach global keyboard listener if not already attached\n if (!isListenerAttached) {\n document.addEventListener(\"keydown\", handleGlobalKeydown, true);\n isListenerAttached = true;\n }\n}\n\n/**\n * Global keyboard event handler\n */\nasync function handleGlobalKeydown(event: KeyboardEvent): Promise<void> {\n await keybindingManager.handleKeyboardEvent(event);\n}\n\n/**\n * Cleans up the keybinding system\n * Call this when unmounting the app or when you want to remove all keybindings\n */\nexport function cleanupKeybindings(): void {\n keybindingManager.clear();\n\n if (isListenerAttached) {\n document.removeEventListener(\"keydown\", handleGlobalKeydown, true);\n isListenerAttached = false;\n }\n}\n\n/**\n * Updates keybindings without removing the global listener\n * Useful for hot-reloading keybinding configurations\n */\nexport function updateKeybindings(keybindings: Keybinding[]): void {\n keybindingManager.registerKeybindings(keybindings);\n}\n","import { IconMoon, IconSun } from \"@tabler/icons-react\";\nimport { SearchableTreeNavigator } from \"../../components/navigation/searchable-tree-navigator/SearchableTreeNavigator\";\nimport type { TreeNavigatorItem } from \"../../components/navigation/searchable-tree-navigator/TreeNavigator\";\nimport type { CommandDefinition } from \"../types\";\n\nexport const workbenchSetTheme: CommandDefinition = {\n id: \"workbench.setTheme\",\n name: \"Set Theme\",\n execute: (context) => {\n // Get available themes from context or use defaults\n const availableThemes = context.config?.themeIds || [\"light\", \"dark\"];\n\n // We need the original theme to revert back if the modal is dismissed\n const originalTheme = context.theming.activeThemeId;\n\n // Sort themes: current theme first, then others alphabetically\n const currentTheme = context.theming.activeThemeId;\n const otherThemes = availableThemes\n .filter((themeId) => themeId !== currentTheme)\n .sort((a, b) => a.localeCompare(b));\n const sortedThemes = [currentTheme, ...otherThemes];\n\n const themeItems: TreeNavigatorItem[] = sortedThemes.map((themeId) => {\n const theme = context.theming.themeMap[themeId];\n return {\n id: themeId,\n icon: theme?.type === \"dark\" ? <IconMoon /> : <IconSun />,\n title: theme?.name || themeId,\n subtitle: `Switch to ${themeId} theme`,\n onNavigate: () => {\n context.modal.closeModal();\n context.theming.setActiveThemeId(themeId);\n },\n onFocus: () => {\n // Preview the theme when focused\n context.theming.setActiveThemeId(themeId);\n },\n };\n });\n\n context.modal.openModal(\n <SearchableTreeNavigator\n items={themeItems}\n placeHolder=\"Search themes...\"\n />,\n {\n alignment: \"top\",\n size: \"lg\",\n showBackdrop: true,\n showCloseButton: false,\n onDismiss: () => {\n // Revert to the original theme if modal is dismissed\n context.theming.setActiveThemeId(originalTheme);\n },\n },\n );\n },\n};\n","import type { NubaseTheme } from \"../theme\";\n\nexport const dark: NubaseTheme = {\n name: \"Dark\",\n type: \"dark\",\n id: \"dark\",\n colors: {\n // Primary colors - Bright modern indigo\n primary: \"#818CF8\",\n onPrimary: \"#1E1B4B\",\n primaryContainer: \"#312E81\",\n onPrimaryContainer: \"#E0E7FF\",\n\n // Secondary colors - Cool slate tones\n secondary: \"#94A3B8\",\n onSecondary: \"#1E293B\",\n secondaryContainer: \"#334155\",\n onSecondaryContainer: \"#E2E8F0\",\n\n // Tertiary colors - Vibrant emerald\n tertiary: \"#34D399\",\n onTertiary: \"#064E3B\",\n tertiaryContainer: \"#065F46\",\n onTertiaryContainer: \"#D1FAE5\",\n\n // Error colors - Soft red for dark mode\n error: \"#F87171\",\n onError: \"#7F1D1D\",\n errorContainer: \"#991B1B\",\n onErrorContainer: \"#FEE2E2\",\n\n // Surface colors - Rich dark base\n surface: \"#0F172A\",\n onSurface: \"#F8FAFC\",\n surfaceVariant: \"#1E293B\",\n onSurfaceVariant: \"#CBD5E1\",\n\n // Other colors\n outline: \"#475569\",\n outlineVariant: \"#64748B\",\n shadow: \"#000000\",\n scrim: \"#000000\",\n inverseSurface: \"#F8FAFC\",\n onInverseSurface: \"#0F172A\",\n },\n};\n","import type { NubaseTheme } from \"../theme\";\n\nexport const darkhc: NubaseTheme = {\n name: \"Dark High Contrast\",\n type: \"dark\",\n id: \"darkhc\",\n colors: {\n // Primary colors - Maximum contrast bright cyan\n primary: \"#00FFFF\",\n onPrimary: \"#000000\",\n primaryContainer: \"#003333\",\n onPrimaryContainer: \"#00FFFF\",\n\n // Secondary colors - High contrast yellow\n secondary: \"#FFFF00\",\n onSecondary: \"#000000\",\n secondaryContainer: \"#333300\",\n onSecondaryContainer: \"#FFFF00\",\n\n // Tertiary colors - Bright magenta\n tertiary: \"#FF00FF\",\n onTertiary: \"#000000\",\n tertiaryContainer: \"#330033\",\n onTertiaryContainer: \"#FF00FF\",\n\n // Error colors - Pure red with maximum contrast\n error: \"#FF0000\",\n onError: \"#000000\",\n errorContainer: \"#330000\",\n onErrorContainer: \"#FF0000\",\n\n // Surface colors - Pure black base with white text\n surface: \"#000000\",\n onSurface: \"#FFFFFF\",\n surfaceVariant: \"#1A1A1A\",\n onSurfaceVariant: \"#FFFFFF\",\n\n // Other colors - Maximum contrast outlines\n outline: \"#FFFFFF\",\n outlineVariant: \"#CCCCCC\",\n shadow: \"#000000\",\n scrim: \"#000000\",\n inverseSurface: \"#FFFFFF\",\n onInverseSurface: \"#000000\",\n },\n};\n","import type { NubaseTheme } from \"../theme\";\n\nexport const light: NubaseTheme = {\n name: \"Light\",\n type: \"light\",\n id: \"light\",\n colors: {\n // Primary colors - Modern vibrant blue-purple\n primary: \"#6366F1\",\n onPrimary: \"#FFFFFF\",\n primaryContainer: \"#E0E7FF\",\n onPrimaryContainer: \"#1E1B4B\",\n\n // Secondary colors - Sophisticated slate\n secondary: \"#64748B\",\n onSecondary: \"#FFFFFF\",\n secondaryContainer: \"#E2E8F0\",\n onSecondaryContainer: \"#0F172A\",\n\n // Tertiary colors - Warm emerald accent\n tertiary: \"#059669\",\n onTertiary: \"#FFFFFF\",\n tertiaryContainer: \"#D1FAE5\",\n onTertiaryContainer: \"#064E3B\",\n\n // Error colors - Modern red\n error: \"#DC2626\",\n onError: \"#FFFFFF\",\n errorContainer: \"#FEE2E2\",\n onErrorContainer: \"#7F1D1D\",\n\n // Surface colors - Clean neutral base\n surface: \"#FFFFFF\",\n onSurface: \"#0F172A\",\n surfaceVariant: \"#F8FAFC\",\n onSurfaceVariant: \"#475569\",\n\n // Other colors\n outline: \"#CBD5E1\",\n outlineVariant: \"#E2E8F0\",\n shadow: \"#000000\",\n scrim: \"#000000\",\n inverseSurface: \"#0F172A\",\n onInverseSurface: \"#F8FAFC\",\n },\n};\n","import type { NubaseTheme } from \"../theme\";\n\nexport const lighthc: NubaseTheme = {\n name: \"Light High Contrast\",\n type: \"light\",\n id: \"lighthc\",\n colors: {\n // Primary colors - Deep blue with maximum contrast\n primary: \"#0000FF\",\n onPrimary: \"#FFFFFF\",\n primaryContainer: \"#E6F3FF\",\n onPrimaryContainer: \"#000066\",\n\n // Secondary colors - Deep purple\n secondary: \"#800080\",\n onSecondary: \"#FFFFFF\",\n secondaryContainer: \"#F3E6F3\",\n onSecondaryContainer: \"#330033\",\n\n // Tertiary colors - Deep green\n tertiary: \"#008000\",\n onTertiary: \"#FFFFFF\",\n tertiaryContainer: \"#E6F3E6\",\n onTertiaryContainer: \"#003300\",\n\n // Error colors - Pure red with maximum contrast\n error: \"#FF0000\",\n onError: \"#FFFFFF\",\n errorContainer: \"#FFE6E6\",\n onErrorContainer: \"#660000\",\n\n // Surface colors - Pure white base with black text\n surface: \"#FFFFFF\",\n onSurface: \"#000000\",\n surfaceVariant: \"#F5F5F5\",\n onSurfaceVariant: \"#000000\",\n\n // Other colors - Maximum contrast outlines\n outline: \"#000000\",\n outlineVariant: \"#666666\",\n shadow: \"#000000\",\n scrim: \"#000000\",\n inverseSurface: \"#000000\",\n onInverseSurface: \"#FFFFFF\",\n },\n};\n","import { dark } from \"./dark\";\nimport { darkhc } from \"./darkhc\";\nimport { light } from \"./light\";\nimport { lighthc } from \"./lighthc\";\n\nexport const themeMap = {\n light: light,\n dark: dark,\n darkhc: darkhc,\n lighthc: lighthc,\n} as const;\n\nexport type AvailableThemeId = keyof typeof themeMap;\n","import type { NubaseTheme } from \"./theme\";\n\n/**\n * Converts a VS Code theme property name to a CSS variable name\n * Example: \"diffEditor.insertedTextBackground\" -> \"--theme-diffEditor-insertedTextBackground\"\n */\nexport function themePropertyToCSSVariable(property: string): string {\n return `--theme-color-${property.replace(/\\./g, \"-\")}`;\n}\n\n/**\n * Converts VS Code theme colors object to CSS variable declarations\n */\nexport function generateCSSVariables(colors: Record<string, string>): string {\n return Object.entries(colors)\n .map(\n ([property, value]) =>\n ` ${themePropertyToCSSVariable(property)}: ${value};`,\n )\n .join(\"\\n\");\n}\n\n/**\n * Generates CSS rule for a theme with all its variables\n */\nexport function generateThemeCSS(theme: NubaseTheme): string {\n const cssVariables = generateCSSVariables(theme.colors);\n return ` [data-theme=\"${theme.id}\"] {\\n${cssVariables}\\n }`;\n}\n\n/**\n * Generates CSS for multiple themes\n */\nexport function generateThemesCSS(themes: NubaseTheme[]): string {\n return themes.map((theme) => generateThemeCSS(theme)).join(\"\\n\\n\");\n}\n\n/**\n * Injects theme CSS variables into the DOM\n */\nexport function injectThemeVariables(themes: NubaseTheme[]): void {\n const css = generateThemesCSS(themes);\n\n if (!css.trim()) {\n console.warn(\"No theme CSS generated\");\n return;\n }\n\n // Remove existing theme variables style element if it exists\n const existingStyle = document.getElementById(\"nubase-theme-variables\");\n if (existingStyle) {\n existingStyle.remove();\n }\n\n // Create new style element\n const style = document.createElement(\"style\");\n style.id = \"nubase-theme-variables\";\n style.type = \"text/css\";\n style.textContent = css;\n\n // Insert into document head\n document.head.appendChild(style);\n\n console.log(`Injected ${themes.length} VS Code theme(s) into DOM`);\n}\n","import type { NubaseTheme } from \"../../theming/theme\";\n\n// WCAG Contrast Requirements - Centralized Configuration\n// WCAG Level A: No specific contrast requirements\n// WCAG Level AA: 4.5:1 for normal text, 3:1 for large text (18pt+ or 14pt+ bold), 3:1 for UI components\n// WCAG Level AAA: 7:1 for normal text, 4.5:1 for large text, 3:1 for UI components\n\n/** Normal text contrast (WCAG AA: 4.5:1, WCAG AAA: 7:1) */\nconst TEXT_CONTRAST_MIN = 3.5;\n\n/** Large text contrast - 18pt+ or 14pt+ bold (WCAG AA: 3:1, WCAG AAA: 4.5:1) */\nconst LARGE_TEXT_CONTRAST_MIN = 2.5;\n\n/** UI components and interactive elements (WCAG AA: 3:1, WCAG AAA: 3:1) */\nconst UI_CONTRAST_MIN = 2.5;\n\n/**\n * Converts a hex color to RGB values\n */\nfunction hexToRgb(hex: string): [number, number, number] | null {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (!result || !result[1] || !result[2] || !result[3]) {\n return null;\n }\n return [\n Number.parseInt(result[1], 16),\n Number.parseInt(result[2], 16),\n Number.parseInt(result[3], 16),\n ];\n}\n\n/**\n * Calculates the relative luminance of a color\n * Based on WCAG 2.1 formula: https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html\n */\nfunction getLuminance(r: number, g: number, b: number): number {\n const [rs, gs, bs] = [r, g, b].map((c) => {\n const normalized = c / 255;\n return normalized <= 0.03928\n ? normalized / 12.92\n : ((normalized + 0.055) / 1.055) ** 2.4;\n }) as [number, number, number];\n\n return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;\n}\n\n/**\n * Calculates the contrast ratio between two colors\n * Returns a value between 1 and 21\n */\nfunction getContrastRatio(color1: string, color2: string): number | null {\n const rgb1 = hexToRgb(color1);\n const rgb2 = hexToRgb(color2);\n\n if (!rgb1 || !rgb2) return null;\n\n const lum1 = getLuminance(rgb1[0], rgb1[1], rgb1[2]);\n const lum2 = getLuminance(rgb2[0], rgb2[1], rgb2[2]);\n\n const brightest = Math.max(lum1, lum2);\n const darkest = Math.min(lum1, lum2);\n\n return (brightest + 0.05) / (darkest + 0.05);\n}\n\n/**\n * Validates Material Design 3 theme colors against WCAG contrast requirements\n * Shows console errors for non-compliant color pairs\n */\nexport function validateThemeColors(theme: NubaseTheme): void {\n const { colors } = theme;\n\n // Define color pairs to validate based on Material Design 3 usage patterns\n const textColorPairs = [\n // Primary text pairs\n {\n background: colors.primary,\n foreground: colors.onPrimary,\n name: \"primary/onPrimary\",\n },\n {\n background: colors.primaryContainer,\n foreground: colors.onPrimaryContainer,\n name: \"primaryContainer/onPrimaryContainer\",\n },\n\n // Secondary text pairs\n {\n background: colors.secondary,\n foreground: colors.onSecondary,\n name: \"secondary/onSecondary\",\n },\n {\n background: colors.secondaryContainer,\n foreground: colors.onSecondaryContainer,\n name: \"secondaryContainer/onSecondaryContainer\",\n },\n\n // Tertiary text pairs\n {\n background: colors.tertiary,\n foreground: colors.onTertiary,\n name: \"tertiary/onTertiary\",\n },\n {\n background: colors.tertiaryContainer,\n foreground: colors.onTertiaryContainer,\n name: \"tertiaryContainer/onTertiaryContainer\",\n },\n\n // Error text pairs\n {\n background: colors.error,\n foreground: colors.onError,\n name: \"error/onError\",\n },\n {\n background: colors.errorContainer,\n foreground: colors.onErrorContainer,\n name: \"errorContainer/onErrorContainer\",\n },\n\n // Surface text pairs\n {\n background: colors.surface,\n foreground: colors.onSurface,\n name: \"surface/onSurface\",\n },\n {\n background: colors.surfaceVariant,\n foreground: colors.onSurfaceVariant,\n name: \"surfaceVariant/onSurfaceVariant\",\n },\n {\n background: colors.inverseSurface,\n foreground: colors.onInverseSurface,\n name: \"inverseSurface/onInverseSurface\",\n },\n ];\n\n // UI component color pairs (buttons, form elements, etc.)\n const uiColorPairs = [\n {\n background: colors.surface,\n foreground: colors.outline,\n name: \"surface/outline (borders)\",\n },\n {\n background: colors.surface,\n foreground: colors.outlineVariant,\n name: \"surface/outlineVariant (subtle borders)\",\n },\n {\n background: colors.surfaceVariant,\n foreground: colors.outline,\n name: \"surfaceVariant/outline\",\n },\n ];\n\n console.group(`🎨 Validating theme colors: ${theme.name} (${theme.id})`);\n\n let hasErrors = false;\n\n // Validate text contrast ratios\n for (const pair of textColorPairs) {\n const ratio = getContrastRatio(pair.background, pair.foreground);\n if (ratio === null) {\n console.error(\n `⚠️ Invalid color format in ${pair.name}: ${pair.background} / ${pair.foreground}`,\n );\n hasErrors = true;\n continue;\n }\n\n if (ratio < TEXT_CONTRAST_MIN) {\n console.error(\n `⚠️ Text contrast too low for ${pair.name}: ${ratio.toFixed(2)}:1 (minimum: ${TEXT_CONTRAST_MIN}:1)\\n` +\n ` Background: ${pair.background} | Foreground: ${pair.foreground}`,\n );\n hasErrors = true;\n } else if (ratio < LARGE_TEXT_CONTRAST_MIN * 1.5) {\n // Show info for borderline cases\n console.info(\n `ℹ️ Text contrast borderline for ${pair.name}: ${ratio.toFixed(2)}:1\\n` +\n ` Background: ${pair.background} | Foreground: ${pair.foreground}`,\n );\n }\n }\n\n // Validate UI component contrast ratios\n for (const pair of uiColorPairs) {\n const ratio = getContrastRatio(pair.background, pair.foreground);\n if (ratio === null) {\n console.error(\n `⚠️ Invalid color format in ${pair.name}: ${pair.background} / ${pair.foreground}`,\n );\n hasErrors = true;\n continue;\n }\n\n if (ratio < UI_CONTRAST_MIN) {\n console.error(\n `⚠️ UI component contrast too low for ${pair.name}: ${ratio.toFixed(2)}:1 (minimum: ${UI_CONTRAST_MIN}:1)\\n` +\n ` Background: ${pair.background} | Foreground: ${pair.foreground}`,\n );\n hasErrors = true;\n }\n }\n\n if (!hasErrors) {\n console.log(\n \"✅ All color contrasts meet custom accessibility standards (relaxed from WCAG AA)\",\n );\n }\n\n console.groupEnd();\n}\n","import { injectThemeVariables } from \"../../theming/runtime-theme-generator\";\nimport type { NubaseTheme } from \"../../theming/theme\";\nimport { validateThemeColors } from \"./validateStyles\";\n\n/**\n * Initializes styles by injecting CSS variables derived from themes\n */\nexport async function initializeStyles(themes: NubaseTheme[]): Promise<void> {\n try {\n // Validate theme colors for accessibility compliance\n for (const theme of themes) {\n validateThemeColors(theme);\n }\n\n // Inject the CSS variables into the DOM\n injectThemeVariables(themes);\n } catch (error) {\n console.error(\"Failed to initialize styles:\", error);\n throw error;\n }\n}\n","import { commandRegistry } from \"../../commands\";\nimport { workbenchRunCommand } from \"../../commands/definitions/workbench.runCommand\";\nimport { workbenchSetTheme } from \"../../commands/definitions/workbench.setTheme\";\nimport type { NubaseFrontendConfig } from \"../../config/nubase-frontend-config\";\nimport type { HttpClient } from \"../../http/http-client\";\nimport type { NubaseTheme } from \"../../theming/theme\";\nimport { themeMap } from \"../../theming/themes\";\nimport { initializeStyles } from \"./initializeStyles\";\n\nexport interface InitializeNubaseAppOptions {\n config: NubaseFrontendConfig;\n httpClient: HttpClient;\n}\n\nexport interface NubaseInitializationData {\n config: NubaseFrontendConfig;\n themeIds: string[];\n themeMap: Record<string, NubaseTheme>;\n defaultThemeId: string;\n}\n\n/**\n * Initializes the Nubase app with all required services and themes\n */\nexport async function initializeNubaseApp({\n config,\n}: InitializeNubaseAppOptions): Promise<NubaseInitializationData> {\n console.info(\"Initializing Nubase app...\");\n\n // Get theme configuration\n const themeIds = config.themeIds || [\"light\", \"dark\"];\n const defaultThemeId = config.defaultThemeId || \"dark\";\n\n // Filter available themes based on config\n const themesToBeImported = themeIds\n .map((id) => themeMap[id as keyof typeof themeMap])\n .filter((theme): theme is NubaseTheme => theme !== undefined);\n\n // Initialize styles with the loaded themes (one-time injection)\n await initializeStyles(themesToBeImported);\n\n // Register default commands (one-time registration)\n commandRegistry.register(workbenchRunCommand);\n commandRegistry.register(workbenchSetTheme);\n\n console.info(\"Nubase app initialized\");\n\n return {\n config,\n themeIds,\n themeMap,\n defaultThemeId,\n };\n}\n","import type React from \"react\";\nimport type { FC } from \"react\";\nimport type { NubaseFrontendConfig } from \"../../config/nubase-frontend-config\";\nimport type { HttpClient } from \"../../http/http-client\";\nimport { NubaseContextProvider } from \"./NubaseContextProvider\";\nimport { useCreateNubaseContext } from \"./useCreateNubaseContext\";\n\nexport type ServicesProviderProps = {\n config: NubaseFrontendConfig;\n httpClient: HttpClient;\n};\n\nexport const ServicesProvider: FC<\n React.PropsWithChildren<ServicesProviderProps>\n> = ({ config, httpClient, children }) => {\n const {\n data: nubaseContext,\n isLoading,\n error,\n } = useCreateNubaseContext({\n config,\n httpClient,\n });\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center min-h-screen\">\n <div className=\"text-center\">\n <h2 className=\"text-lg font-semibold text-red-600 mb-2\">\n Failed to initialize Nubase app\n </h2>\n <p className=\"text-sm text-gray-600\">{error.message}</p>\n </div>\n </div>\n );\n }\n\n if (isLoading || !nubaseContext) {\n return (\n <div className=\"flex items-center justify-center min-h-screen\">\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto mb-2\" />\n <p className=\"text-sm text-gray-600\">Initializing Nubase app...</p>\n </div>\n </div>\n );\n }\n\n return (\n <NubaseContextProvider context={nubaseContext}>\n {children}\n </NubaseContextProvider>\n );\n};\n","import {\n type ColumnDef,\n type OnChangeFn,\n type SortingState,\n type Table as TanStackTable,\n flexRender,\n getCoreRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../utils\";\n\nconst tableVariants = cva(\"w-full border-collapse border-spacing-0 text-sm\");\n\nconst tableContainerVariants = cva(\n \"relative overflow-auto border border-outline rounded-lg bg-surface\",\n {\n variants: {\n loading: {\n true: \"relative\",\n false: \"\",\n },\n },\n defaultVariants: {\n loading: false,\n },\n },\n);\n\nexport interface TableProps<TData>\n extends React.TableHTMLAttributes<HTMLTableElement> {\n data: TData[];\n columns: ColumnDef<TData>[];\n loading?: boolean;\n sorting?: SortingState;\n onSortingChange?: OnChangeFn<SortingState>;\n enableSorting?: boolean;\n emptyMessage?: string;\n loadingMessage?: string;\n containerClassName?: string;\n}\n\nconst Table = forwardRef<HTMLTableElement, TableProps<any>>(\n <TData,>(\n {\n className,\n containerClassName,\n data,\n columns,\n loading = false,\n sorting = [],\n onSortingChange,\n enableSorting = true,\n emptyMessage = \"No data available\",\n loadingMessage = \"Loading...\",\n ...props\n }: TableProps<TData>,\n ref: React.ForwardedRef<HTMLTableElement>,\n ) => {\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n manualSorting: true,\n enableSorting,\n state: {\n sorting,\n },\n onSortingChange,\n });\n\n const getSortIcon = (column: any) => {\n const sortDirection = column.getIsSorted();\n if (sortDirection === \"asc\") {\n return (\n <svg\n className=\"w-4 h-4 ml-1 inline\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-label=\"Sorted ascending\"\n >\n <title>Sorted ascending</title>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n );\n }\n if (sortDirection === \"desc\") {\n return (\n <svg\n className=\"w-4 h-4 ml-1 inline\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-label=\"Sorted descending\"\n >\n <title>Sorted descending</title>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n );\n }\n return (\n <svg\n className=\"w-4 h-4 ml-1 inline opacity-30\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-label=\"Sortable\"\n >\n <title>Sortable</title>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8 9l4-4 4 4m0 6l-4 4-4-4\"\n />\n </svg>\n );\n };\n\n return (\n <div\n className={cn(tableContainerVariants({ loading }), containerClassName)}\n >\n {loading && (\n <div className=\"absolute inset-0 bg-surface/80 backdrop-blur-sm flex items-center justify-center z-10\">\n <div className=\"flex items-center gap-3 bg-surface border border-outline rounded-lg px-4 py-3 shadow-lg\">\n <div className=\"animate-spin rounded-full h-5 w-5 border-2 border-primary border-t-transparent\" />\n <span className=\"text-onSurface font-medium\">\n {loadingMessage}\n </span>\n </div>\n </div>\n )}\n\n <table ref={ref} className={cn(tableVariants(), className)} {...props}>\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} className=\"border-b border-outline\">\n {headerGroup.headers.map((header) => (\n <th\n key={header.id}\n className={cn(\n \"px-4 py-3 text-left font-semibold text-onSurface bg-surfaceVariant\",\n header.column.getCanSort() && enableSorting\n ? \"cursor-pointer select-none hover:bg-surfaceVariant/80 transition-colors focus:outline-none focus:ring-2 focus:ring-primary/20\"\n : \"\",\n )}\n tabIndex={\n header.column.getCanSort() && enableSorting\n ? 0\n : undefined\n }\n role={\n header.column.getCanSort() && enableSorting\n ? \"button\"\n : undefined\n }\n onClick={\n header.column.getCanSort() && enableSorting\n ? header.column.getToggleSortingHandler()\n : undefined\n }\n onKeyDown={\n header.column.getCanSort() && enableSorting\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n header.column.getToggleSortingHandler()?.(e);\n }\n }\n : undefined\n }\n style={{\n width:\n header.getSize() !== 150 ? header.getSize() : undefined,\n }}\n >\n <div className=\"flex items-center\">\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n {header.column.getCanSort() &&\n enableSorting &&\n getSortIcon(header.column)}\n </div>\n </th>\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n className=\"px-4 py-8 text-center text-onSurfaceVariant\"\n >\n {emptyMessage}\n </td>\n </tr>\n ) : (\n table.getRowModel().rows.map((row, index) => (\n <tr\n key={row.id}\n className={cn(\n \"border-b border-outline/50 hover:bg-surfaceVariant/30 transition-colors\",\n index % 2 === 0 ? \"bg-surface\" : \"bg-surfaceVariant/20\",\n )}\n >\n {row.getVisibleCells().map((cell) => (\n <td key={cell.id} className=\"px-4 py-3 text-onSurface\">\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </td>\n ))}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n },\n);\n\nTable.displayName = \"Table\";\n\nexport { Table, tableVariants };\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../utils\";\nimport { Button } from \"../buttons/Button/Button\";\n\nconst paginationVariants = cva(\n \"flex items-center justify-between gap-4 p-4 bg-surface border-t border-outline text-sm\",\n);\n\nexport interface PaginationProps extends React.HTMLAttributes<HTMLDivElement> {\n currentPage: number;\n totalPages: number;\n pageSize: number;\n totalItems: number;\n onPageChange: (page: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n pageSizeOptions?: number[];\n showPageSizeSelector?: boolean;\n showInfo?: boolean;\n}\n\nconst Pagination = forwardRef<HTMLDivElement, PaginationProps>(\n (\n {\n className,\n currentPage,\n totalPages,\n pageSize,\n totalItems,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 25, 50, 100],\n showPageSizeSelector = true,\n showInfo = true,\n ...props\n },\n ref,\n ) => {\n const startItem = Math.min((currentPage - 1) * pageSize + 1, totalItems);\n const endItem = Math.min(currentPage * pageSize, totalItems);\n\n const getVisiblePages = () => {\n const delta = 2;\n const range = [];\n const rangeWithDots = [];\n\n for (\n let i = Math.max(2, currentPage - delta);\n i <= Math.min(totalPages - 1, currentPage + delta);\n i++\n ) {\n range.push(i);\n }\n\n if (currentPage - delta > 2) {\n rangeWithDots.push(1, \"...\");\n } else {\n rangeWithDots.push(1);\n }\n\n rangeWithDots.push(...range);\n\n if (currentPage + delta < totalPages - 1) {\n rangeWithDots.push(\"...\", totalPages);\n } else if (totalPages > 1) {\n rangeWithDots.push(totalPages);\n }\n\n return rangeWithDots;\n };\n\n return (\n <div ref={ref} className={cn(paginationVariants(), className)} {...props}>\n <div className=\"flex items-center gap-4\">\n {showInfo && (\n <span className=\"text-onSurfaceVariant\">\n Showing {startItem}-{endItem} of {totalItems} items\n </span>\n )}\n\n {showPageSizeSelector && onPageSizeChange && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-onSurfaceVariant\">Items per page:</span>\n <select\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n className=\"bg-surface border border-outline rounded px-2 py-1 text-onSurface text-sm focus:border-primary focus:ring-2 focus:ring-primary/10 outline-none\"\n >\n {pageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n )}\n </div>\n\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"secondary\"\n onClick={() => onPageChange(1)}\n disabled={currentPage === 1}\n aria-label=\"Go to first page\"\n >\n ««\n </Button>\n\n <Button\n variant=\"secondary\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage === 1}\n aria-label=\"Go to previous page\"\n >\n ‹\n </Button>\n\n <div className=\"flex items-center gap-1 mx-2\">\n {getVisiblePages().map((page, index) => (\n <div key={index}>\n {page === \"...\" ? (\n <span className=\"px-2 py-1 text-onSurfaceVariant\">...</span>\n ) : (\n <Button\n variant={currentPage === page ? \"primary\" : \"secondary\"}\n onClick={() => onPageChange(page as number)}\n className=\"min-w-[32px]\"\n aria-label={`Go to page ${page}`}\n aria-current={currentPage === page ? \"page\" : undefined}\n >\n {page}\n </Button>\n )}\n </div>\n ))}\n </div>\n\n <Button\n variant=\"secondary\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n aria-label=\"Go to next page\"\n >\n ›\n </Button>\n\n <Button\n variant=\"secondary\"\n onClick={() => onPageChange(totalPages)}\n disabled={currentPage === totalPages}\n aria-label=\"Go to last page\"\n >\n »»\n </Button>\n </div>\n </div>\n );\n },\n);\n\nPagination.displayName = \"Pagination\";\n\nexport { Pagination, paginationVariants };\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_core","import_react","import_react","error","import_react","import_react","import_jsx_runtime","import_class_variance_authority","import_react","import_class_variance_authority","import_react","import_jsx_runtime","import_jsx_runtime","React","import_class_variance_authority","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime","inputValue","isOpen","import_react","import_icons_react","import_react","import_jsx_runtime","import_react","import_icons_react","import_jsx_runtime","HeadlessDialog","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_icons_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_icons_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_react","import_icons_react","import_jsx_runtime","import_jsx_runtime","items","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_router","import_react","axios","import_react_router","import_react_router","import_react_router","import_react_router","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react_router","import_react_router","import_jsx_runtime","import_react_router","import_react_router","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","util","objectUtil","errorUtil","errorMap","ctx","result","issues","elements","processed","result","r","ZodFirstPartyTypeKind","zodToJsonSchema","loader","import_react","import_icons_react","import_jsx_runtime","import_icons_react","import_jsx_runtime","error","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/zod/v3/helpers/util.js","../../../node_modules/zod/v3/ZodError.js","../../../node_modules/zod/v3/locales/en.js","../../../node_modules/zod/v3/errors.js","../../../node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/zod/v3/helpers/typeAliases.js","../../../node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/zod/v3/types.js","../../../node_modules/zod/v3/external.js","../../../node_modules/zod/index.js","../src/components/monaco/monaco-editor.ts","../src/components/monaco/MonacoEditor.tsx","../src/index.tsx","../src/actions/createResourceAction.ts","../src/actions/useActionExecutor.ts","../src/components/nubase-app/NubaseContextProvider.tsx","../src/context/ResourceContext.tsx","../src/actions/executeAction.ts","../src/actions/utils.ts","../src/components/floating/toast/Toast.tsx","../src/styling/cn.ts","../src/components/activity-indicator/ActivityIndicator.tsx","../src/components/buttons/Button/Button.tsx","../src/components/floating/toast/ToastContext.tsx","../src/components/floating/toast/toastUtils.ts","../src/components/floating/toast/ToastContainer.tsx","../src/commands/CommandRegistry.ts","../src/commands/defineCommand.ts","../src/commands/definitions/workbench.openResource.tsx","../src/components/floating/modal/Modal.tsx","../src/components/floating/modal/ModalFrame.tsx","../src/components/form/SchemaForm/SchemaForm.tsx","../src/components/form/SchemaForm/SchemaFormBody.tsx","../src/hooks/useComputedMetadata.ts","../src/hooks/useLayout.ts","../src/components/form/FormFieldRenderer/FormFieldRenderer.tsx","../src/components/form-controls/FormControl/FormControl.tsx","../src/components/form-controls/Label/Label.tsx","../src/components/form-controls/controls/Checkbox/Checkbox.tsx","../src/components/form/renderers/boolean/BooleanEditFieldRenderer.tsx","../src/components/form/renderers/ViewFieldWrapper.tsx","../src/components/form/renderers/boolean/BooleanViewFieldRenderer.tsx","../src/components/form/renderers/multiline/MultilineEditFieldRenderer.tsx","../src/components/form-controls/controls/TextInput/TextInput.tsx","../src/components/form/renderers/multiline/MultilineViewFieldRenderer.tsx","../src/components/form/renderers/number/NumberEditFieldRenderer.tsx","../src/components/form/renderers/number/NumberViewFieldRenderer.tsx","../src/components/form/renderers/string/StringEditFieldRenderer.tsx","../src/components/form/renderers/string/StringViewFieldRenderer.tsx","../src/components/form/renderers/unsupported/UnsupportedEditFieldRenderer.tsx","../src/components/form/renderers/unsupported/UnsupportedViewFieldRenderer.tsx","../src/components/form/FormFieldRenderer/PatchWrapper.tsx","../src/components/form/FormFieldRenderer/renderer-factory.tsx","../src/components/form/SchemaForm/SchemaFormVerticalLayout.tsx","../src/components/buttons/ButtonBar/ButtonBar.tsx","../src/components/form/SchemaForm/SchemaFormButtonBar.tsx","../src/components/callout/Callout.tsx","../src/components/form/FormValidationErrors/FormValidationErrors.tsx","../src/components/form/SchemaForm/SchemaFormValidationErrors.tsx","../src/components/floating/modal/ModalFrameStructured.tsx","../src/components/floating/modal/ModalFrameSchemaForm.tsx","../src/components/floating/modal/useModal.tsx","../src/components/navigation/searchable-tree-navigator/SearchableTreeNavigator.tsx","../src/components/form-controls/controls/SearchTextInput/SearchTextInput.tsx","../src/components/navigation/searchable-tree-navigator/TreeNavigator.tsx","../src/components/navigation/searchable-tree-navigator/TreeNavigatorItem.tsx","../src/config/resource-link.ts","../src/context/WorkspaceContext.tsx","../src/commands/definitions/workbench.openResourceInModal.tsx","../src/components/form/SchemaForm/useSchemaForm.ts","../src/hooks/useNubaseMutation.ts","../src/hooks/useNubaseQuery.ts","../src/components/views/ViewRenderer/modal/ResourceCreateViewModalRenderer.tsx","../src/components/views/ViewRenderer/modal/ResourceSearchViewModalRenderer.tsx","../src/components/data-grid/DataGrid.tsx","../src/components/data-grid/Cell.tsx","../src/components/data-grid/hooks/useRovingTabIndex.ts","../src/components/data-grid/styles.ts","../src/components/data-grid/utils/colSpanUtils.ts","../src/components/data-grid/utils/domUtils.ts","../src/components/data-grid/utils/eventUtils.ts","../src/components/data-grid/utils/keyboardUtils.ts","../src/components/data-grid/utils/renderMeasuringCells.tsx","../src/components/data-grid/utils/selectedCellUtils.ts","../src/components/data-grid/utils/styleUtils.ts","../src/components/data-grid/utils/index.ts","../src/components/data-grid/cellRenderers/ActionCellFormatter.tsx","../src/components/dropdown-menu/DropdownMenu.tsx","../src/components/form-controls/controls/Select/Select.tsx","../src/components/data-grid/cellRenderers/renderCheckbox.tsx","../src/components/data-grid/cellRenderers/renderToggleGroup.tsx","../src/components/data-grid/cellRenderers/renderValue.tsx","../src/components/data-grid/DataGridDefaultRenderersContext.ts","../src/components/data-grid/cellRenderers/SelectCellFormatter.tsx","../src/components/data-grid/EditCell.tsx","../src/components/data-grid/hooks/useLatestFunc.ts","../src/components/data-grid/GroupedColumnHeaderRow.tsx","../src/components/data-grid/GroupedColumnHeaderCell.tsx","../src/components/data-grid/HeaderRow.tsx","../src/components/data-grid/HeaderCell.tsx","../src/components/data-grid/hooks/useCalculatedColumns.ts","../src/components/data-grid/hooks/useRowSelection.ts","../src/components/data-grid/Columns.tsx","../src/components/data-grid/renderHeaderCell.tsx","../src/components/data-grid/hooks/useColumnWidths.ts","../src/components/data-grid/hooks/useGridDimensions.ts","../src/components/data-grid/hooks/useViewportColumns.ts","../src/components/data-grid/hooks/useViewportRows.ts","../src/components/data-grid/Row.tsx","../src/components/data-grid/ScrollToCell.tsx","../src/components/data-grid/SummaryRow.tsx","../src/components/data-grid/SummaryCell.tsx","../src/components/data-grid/sortStatus.tsx","../src/components/views/ViewRenderer/modal/ResourceViewViewModalRenderer.tsx","../src/components/views/ViewRenderer/modal/ModalViewRenderer.tsx","../src/commands/definitions/workbench.runCommand.tsx","../src/commands/definitions/workbench.setTheme.tsx","../src/commands/definitions/workbench.viewHistory.tsx","../src/commands/definitions/index.ts","../src/components/buttons/ActionBar/ActionBar.tsx","../src/components/buttons/ActionBar/ActionBarContainer.tsx","../src/components/card/Card.tsx","../src/components/charts/Chart.tsx","../src/components/dashboard/ConnectedWidget.tsx","../src/components/dashboard/content/KpiContent.tsx","../src/components/dashboard/content/ProportionalChartContent.tsx","../src/components/dashboard/content/SeriesChartContent.tsx","../src/components/dashboard/content/TableContent.tsx","../src/components/dashboard/DashboardWidget.tsx","../src/components/dashboard/Dashboard.tsx","../src/components/dashboard/DashboardRenderer.tsx","../src/components/data-grid/editors/textEditor.tsx","../src/components/data-grid/TreeDataGrid.tsx","../src/components/data-grid/GroupRow.tsx","../src/components/data-grid/GroupCell.tsx","../src/components/data-state/DataState.tsx","../src/components/dock/Dock.tsx","../src/components/resize-handle/HorizontalResizeHandle.tsx","../src/components/dock/useResize.ts","../src/components/dropdown-menu/ActionDropdownMenu.tsx","../src/components/theme-toggle/ThemeToggle.tsx","../src/components/floating/dialog/Dialog.tsx","../src/components/floating/dialog/useDialog.tsx","../src/components/markdown-textarea/text-helpers.ts","../src/components/markdown-textarea/commands.ts","../src/components/markdown-textarea/MarkdownTextArea.tsx","../src/components/markdown-textarea/text-controller.ts","../src/components/navigation/breadcrumb/Breadcrumb.tsx","../src/components/navigation/breadcrumb/BreadcrumbBar.tsx","../src/components/navigation/main-nav/MainNav.tsx","../src/components/navigation/main-nav/NavItemComponent.tsx","../src/components/navigation/main-nav/SafeLink.tsx","../src/components/navigation/main-nav/NavItems.tsx","../src/components/navigation/main-nav/types.ts","../src/components/navigation/searchable-tree-navigator/ControllableSearchableTree.tsx","../src/components/nubase-app/NubaseApp.tsx","../src/routes/router.ts","../src/routes/index/index-route.tsx","../src/routes/root.tsx","../src/routes/index/index-screen.tsx","../src/routes/resources/resource-route.tsx","../src/routes/resources/resource-screen.tsx","../src/components/page-headers/PageHeader/PageHeader.tsx","../src/components/page-layouts/FullScreenFixedHeaderLayout.tsx","../src/components/views/ViewRenderer/screen/ResourceCreateViewRenderer.tsx","../src/components/views/ViewRenderer/screen/ResourceSearchViewRenderer.tsx","../src/components/views/ViewRenderer/screen/ResourceViewViewRenderer.tsx","../src/routes/signin/signin-route.ts","../src/routes/signin/signin-screen.tsx","../src/routes/signup/signup-route.ts","../src/routes/signup/signup-screen.tsx","../src/routes/tools/http-tool-route.tsx","../src/routes/tools/http-tool-screen.tsx","../src/routes/tools/components/RequestPanel.tsx","../src/routes/tools/components/PathParamEditor.tsx","../src/routes/tools/components/ResponsePanel.tsx","../src/routes/tools/hooks/useHttpToolRequest.ts","../src/routes/routes.ts","../src/components/nubase-app/useCreateNubaseContext.ts","../src/actions/ResourceActionsExecutor.ts","../src/http/http-client.ts","../src/utils/network-errors.ts","../src/http/typed-api-client.ts","../src/keybindings/defaultKeybindings.ts","../src/keybindings/keyParser.ts","../src/keybindings/types.ts","../src/keybindings/KeybindingManager.ts","../src/keybindings/registerKeybindings.ts","../src/navigation/navigation-history-tracker.ts","../src/theming/themes/dark.ts","../src/theming/themes/dracula.ts","../src/theming/themes/light.ts","../src/theming/themes/terminal.ts","../src/theming/themes/index.ts","../src/theming/runtime-theme-generator.ts","../src/components/nubase-app/initializeStyles.ts","../src/components/nubase-app/initializeNubaseApp.ts","../src/components/nubase-app/ServicesProvider.tsx","../src/components/table/Pagination.tsx","../src/components/table/Table.tsx","../src/components/tabs/Tabs.tsx","../src/components/top-bar/SearchBar.tsx","../src/components/top-bar/TopBar.tsx","../src/components/user-avatar/UserAvatar.tsx","../src/components/user-avatar/UserMenu.tsx","../src/components/widget/Widget.tsx","../src/config/create-dashboard-factory.ts","../src/config/create-resource-factory.ts","../src/config/create-view-factory.ts","../src/config/view-factory.ts","../src/config/view-helpers.ts","../src/menu/resolveMenuItem.ts"],"sourcesContent":["export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export {};\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n","import loader from \"@monaco-editor/loader\";\nimport * as monaco from \"monaco-editor\";\nimport { z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\n\n// Simple example schema - replace with your actual schema\nconst exampleSchema = z.object({\n name: z.string(),\n version: z.string(),\n description: z.string().optional(),\n});\n\nexport async function initializeJsonSchema(): Promise<void> {\n try {\n // Convert the Zod schema to JSON Schema using the library\n const jsonSchema = zodToJsonSchema(exampleSchema, \"exampleSchema\");\n\n // Configure JSON language settings\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n validate: true,\n allowComments: true,\n schemas: [\n {\n uri: \"project-schema.json\", // A unique URI for the schema itself\n schema: jsonSchema,\n fileMatch: [\"*\"], // Match all JSON files\n },\n ],\n enableSchemaRequest: true,\n schemaValidation: \"error\",\n schemaRequest: \"error\",\n });\n\n // Configure completion and formatting settings\n monaco.languages.json.jsonDefaults.setModeConfiguration({\n documentFormattingEdits: true,\n documentRangeFormattingEdits: true,\n completionItems: true,\n hovers: true,\n documentSymbols: true,\n tokens: true,\n colors: true,\n foldingRanges: true,\n diagnostics: true,\n selectionRanges: true,\n });\n\n // JSON schema validation configured successfully\n } catch (error) {\n console.error(\"Error configuring JSON schema validation:\", error);\n }\n}\n\nexport async function initializeMonaco(): Promise<typeof monaco> {\n loader.config({ monaco });\n await initializeJsonSchema();\n\n return loader.init();\n}\n","import type * as monacoEditor from \"monaco-editor/esm/vs/editor/editor.api\";\nimport type React from \"react\";\nimport { useEffect, useRef } from \"react\";\nimport ReactMonacoEditor, {\n type EditorDidMount,\n monaco,\n} from \"react-monaco-editor\";\n\nimport \"monaco-editor/esm/vs/language/json/monaco.contribution\"; // Import JSON language features\nimport \"monaco-editor/esm/vs/basic-languages/markdown/markdown.contribution\"; // Import Markdown language features\nimport \"monaco-editor/esm/vs/language/typescript/monaco.contribution\"; // Import JavaScript/TypeScript language features\n// import 'monaco-editor/esm/vs/editor/contrib/find/browser/findController.js'\n\n// --- Other Imports ---\nimport { debounce } from \"lodash-es\";\nimport { getSpellchecker } from \"monaco-spellchecker\";\nimport Typo from \"typo-js\";\nimport { initializeMonaco } from \"./monaco-editor\";\n\n// Define a custom theme\nmonaco.editor.defineTheme(\"myCustomTheme\", {\n base: \"vs-dark\", // can be 'vs', 'vs-dark', 'hc-black'\n inherit: true, // inherit default rules\n rules: [\n { token: \"comment\", foreground: \"ffa500\", fontStyle: \"italic underline\" }, // orange comments\n { token: \"keyword\", foreground: \"00ff00\" }, // green keywords\n { token: \"string\", foreground: \"ff00ff\" }, // magenta strings\n // Add more rules as needed\n ],\n colors: {\n // 'editor.background': '#264f78', // Dark background\n // 'editor.foreground': '#d4d4d4', // Default text color\n // 'editorCursor.foreground': '#aeafad', // Cursor color\n // 'editor.lineHighlightBackground': '#3c3c3c', // Line highlight color\n // 'editorLineNumber.foreground': '#858585', // Line number color\n // 'editor.selectionBackground': '#FFFF00' // Bright yellow selection for visibility\n // Add more color customizations as needed\n },\n});\n\n// Define props interface\ninterface MonacoEditorProps {\n value: string;\n onChange: (newValue: string) => void;\n language?: \"markdown\" | \"json\" | \"javascript\"; // Add language prop with support for 3 languages\n}\n\n// Use ComponentNameProps type for the component's props\nfunction MonacoEditor({\n value,\n onChange,\n language = \"markdown\",\n}: MonacoEditorProps): React.ReactElement {\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<monacoEditor.editor.IStandaloneCodeEditor | null>(\n null,\n );\n const spellcheckerRef = useRef<ReturnType<typeof getSpellchecker> | null>(\n null,\n );\n\n // Handler for when the editor mounts\n const handleEditorDidMount: EditorDidMount = async (editor) => {\n // Store editor reference\n editorRef.current = editor;\n\n // Initialize Monaco with JSON schema support\n try {\n await initializeMonaco();\n } catch (error) {\n console.error(\"Failed to initialize Monaco:\", error);\n }\n\n // Initialize spellchecker for markdown only\n if (language === \"markdown\") {\n try {\n // Load dictionary files\n const [affResponse, dicResponse] = await Promise.all([\n fetch(\"/dictionaries/en_US.aff\"),\n fetch(\"/dictionaries/en_US.dic\"),\n ]);\n\n const affData = await affResponse.text();\n const dicData = await dicResponse.text();\n\n // Create dictionary\n const dictionary = new Typo(\"en_US\", affData, dicData);\n\n // Get spellchecker\n const spellchecker = getSpellchecker(monaco, editor, {\n check: (word: string) => dictionary.check(word),\n suggest: (word: string) => dictionary.suggest(word),\n ignore: (_word: string) => {\n // Word ignored from spellcheck\n },\n addWord: (_word: string) => {\n // Word added to custom dictionary\n },\n });\n\n spellcheckerRef.current = spellchecker;\n\n // Process spellcheck with debounce\n const processSpellcheck = debounce(() => {\n spellchecker.process();\n }, 500);\n\n // Process on content changes\n editor.onDidChangeModelContent(() => {\n processSpellcheck();\n });\n\n // Register code action provider for suggestions\n monaco.languages.registerCodeActionProvider(\n \"markdown\",\n (spellchecker as any).codeActionProvider,\n );\n\n // Initial spellcheck\n processSpellcheck();\n } catch (error) {\n console.error(\"Failed to initialize spellchecker:\", error);\n }\n }\n };\n // Handler for editor content changes\n const handleEditorChange = (newValue: string): void => {\n onChange(newValue); // Call the passed-in onChange handler\n };\n\n // Effect to handle resizing with debouncing\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n // Debounce the layout call\n const debouncedLayout = debounce(() => {\n editorRef.current?.layout();\n }, 100); // Debounce time in ms (e.g., 100ms)\n\n const resizeObserver = new ResizeObserver(() => {\n debouncedLayout(); // Call the debounced function\n });\n\n resizeObserver.observe(container);\n\n // Cleanup function\n return (): void => {\n debouncedLayout.cancel(); // Cancel any pending debounced calls\n resizeObserver.disconnect();\n };\n }, []); // Empty dependency array ensures this runs only once on mount\n\n return (\n <div\n ref={containerRef}\n style={{ width: \"100%\", height: \"100%\", overflow: \"hidden\" }}\n >\n <ReactMonacoEditor\n width=\"100%\" // These might not be strictly necessary anymore with the container div\n height=\"100%\" // but leaving them doesn't hurt\n language={language} // Use language prop to set the editor language\n theme=\"myCustomTheme\" // Use the custom theme name\n value={value} // Use the value prop\n onChange={handleEditorChange} // Use the onChange prop\n editorDidMount={handleEditorDidMount} // Get editor instance\n options={{\n selectOnLineNumbers: true,\n fontSize: 14, // Set the font size (e.g., 14px)\n // automaticLayout: true, // We are handling layout manually now\n scrollBeyondLastLine: false,\n wordWrap: \"on\",\n wrappingIndent: \"same\",\n minimap: {\n enabled: false,\n },\n // JSON-specific formatting options\n formatOnPaste: true,\n formatOnType: true,\n autoIndent: \"full\",\n tabSize: 2,\n insertSpaces: true,\n // Enable find widget and other editor features\n find: {\n addExtraSpaceOnTop: false,\n autoFindInSelection: \"never\",\n seedSearchStringFromSelection: \"selection\",\n },\n }}\n />\n </div>\n );\n}\n\nexport default MonacoEditor;\n","// Export all components\n\nexport { createResourceAction } from \"./actions/createResourceAction\";\n// Export actions system\nexport type {\n Action,\n ActionOrSeparator,\n BaseAction,\n CommandAction,\n HandlerAction,\n ResourceAction,\n ResourceActionExecutionContext,\n} from \"./actions/types\";\nexport { useActionExecutor } from \"./actions/useActionExecutor\";\nexport * from \"./actions/utils\";\n// Export authentication types\nexport type {\n AuthenticatedUser,\n AuthenticationController,\n AuthenticationState,\n AuthenticationStateListener,\n LoginCompleteCredentials,\n LoginCredentials,\n LoginStartResponse,\n SignupCredentials,\n WorkspaceInfo,\n} from \"./authentication\";\nexport * from \"./commands\";\n// Export commands namespace for easier importing\nexport * as commands from \"./commands/definitions\";\n// Export commands and keybindings\nexport type { Keybinding } from \"./commands/types\";\nexport * from \"./components\";\n// Export NubaseFrontendConfig\nexport * from \"./config\";\n// Export context types\nexport * from \"./context/types\";\n// Export workspace hooks for path-based multi-workspace\nexport {\n getWorkspaceFromRouter,\n useWorkspace,\n useWorkspaceOptional,\n type WorkspaceContext,\n} from \"./context/WorkspaceContext\";\n// Export all hooks\nexport * from \"./hooks\";\nexport * from \"./http/api-client-factory\";\n// Export HTTP client and typed API client\nexport * from \"./http/http-client\";\nexport * from \"./http/typed-api-client\";\n// Export keybinding utilities\nexport * from \"./keybindings\";\n// Export menu types\nexport * from \"./menu\";\n// Export utilities\nexport * from \"./utils/network-errors\";\n\n// Export any other specific exports you might have\n// Add more exports as needed\n","import type React from \"react\";\nimport type { ResourceAction, ResourceActionExecutionContext } from \"./types\";\n\n/**\n * Configuration for creating a resource action\n */\nexport interface CreateResourceActionConfig {\n id: string;\n label?: string;\n icon?: React.ComponentType<{ size?: number; className?: string }>;\n disabled?: boolean;\n variant?: \"default\" | \"destructive\";\n onExecute: (context: ResourceActionExecutionContext) => void | Promise<void>;\n}\n\n/**\n * Helper function to create a type-safe resource action.\n * Resource actions operate on selected resources and receive the resource type and selected IDs.\n *\n * @param config - Configuration for the resource action\n * @returns A properly typed ResourceAction\n *\n * @example\n * ```typescript\n * const deleteTicketsAction = createResourceAction({\n * id: \"delete-tickets\",\n * label: \"Delete Selected\",\n * icon: TrashIcon,\n * variant: \"destructive\",\n * onExecute: async ({ selectedIds, context }) => {\n * // Bulk delete the selected tickets\n * await Promise.all(\n * selectedIds.map(id => context.http.deleteTicket({ params: { id } }))\n * );\n * showToast(`Deleted ${selectedIds.length} tickets`, \"success\");\n * },\n * });\n * ```\n */\nexport function createResourceAction(\n config: CreateResourceActionConfig,\n): ResourceAction {\n return {\n type: \"resource\",\n id: config.id,\n label: config.label,\n icon: config.icon,\n disabled: config.disabled,\n variant: config.variant || \"default\",\n onExecute: config.onExecute,\n };\n}\n","import { useContext } from \"react\";\nimport { NubaseContext } from \"../components/nubase-app/NubaseContextProvider\";\nimport { useResourceContext } from \"../context/ResourceContext\";\nimport { executeAction as executeActionUtil } from \"./executeAction\";\nimport type { Action } from \"./types\";\n\n/**\n * Hook for executing actions in a standardized way.\n * Gracefully handles missing Nubase context (for Storybook compatibility).\n * Also handles resource context for resource actions.\n *\n * @returns An object with an executeAction function\n */\nexport function useActionExecutor() {\n // Use useContext directly - this won't throw, just return undefined if context not provided\n const context = useContext(NubaseContext);\n const resourceContext = useResourceContext();\n\n const executeAction = async (action: Action): Promise<void> => {\n await executeActionUtil(action, context, resourceContext);\n };\n\n return {\n executeAction,\n /**\n * Whether command execution is available (context is present).\n * Useful for components that want to show different UI based on availability.\n */\n hasCommandSupport: !!context,\n /**\n * Whether resource execution is available (both contexts are present).\n * Useful for components that want to show different UI based on availability.\n */\n hasResourceSupport: !!context && !!resourceContext,\n };\n}\n","import { createContext, type ReactNode, useContext } from \"react\";\nimport type { NubaseContextData } from \"../../context/types\";\n\nconst NubaseContext = createContext<NubaseContextData | undefined>(undefined);\n\n// Export the context for use in other hooks\nexport { NubaseContext };\n\nexport interface NubaseContextProviderProps {\n context: NubaseContextData;\n children: ReactNode;\n}\n\nexport const NubaseContextProvider = ({\n context,\n children,\n}: NubaseContextProviderProps) => {\n return (\n <NubaseContext.Provider value={context}>{children}</NubaseContext.Provider>\n );\n};\n\nexport function useNubaseContext(): NubaseContextData {\n const context = useContext(NubaseContext);\n if (context === undefined) {\n throw new Error(\n \"useNubaseContext must be used within a NubaseContextProvider\",\n );\n }\n return context;\n}\n","import type React from \"react\";\nimport { createContext, useContext } from \"react\";\n\n/**\n * Data structure for resource context that tracks the current resource and selected IDs\n */\nexport interface ResourceContextData {\n /**\n * The type/name of the current resource (e.g., \"ticket\", \"user\")\n */\n resourceType: string;\n /**\n * Set of selected resource IDs from the DataGrid\n */\n selectedIds: ReadonlySet<string | number>;\n}\n\n/**\n * React context for resource selection state\n */\nexport const ResourceContext = createContext<ResourceContextData | null>(null);\n\n/**\n * Provider component for resource context\n */\nexport interface ResourceContextProviderProps {\n children: React.ReactNode;\n resourceType: string;\n selectedIds: ReadonlySet<string | number>;\n}\n\nexport function ResourceContextProvider({\n children,\n resourceType,\n selectedIds,\n}: ResourceContextProviderProps) {\n const value: ResourceContextData = {\n resourceType,\n selectedIds,\n };\n\n return (\n <ResourceContext.Provider value={value}>\n {children}\n </ResourceContext.Provider>\n );\n}\n\n/**\n * Hook to access the resource context\n * @returns ResourceContextData or null if not within a ResourceContextProvider\n */\nexport function useResourceContext(): ResourceContextData | null {\n return useContext(ResourceContext);\n}\n\n/**\n * Hook to access the resource context with error throwing if not available\n * @returns ResourceContextData\n * @throws Error if not within a ResourceContextProvider\n */\nexport function useRequiredResourceContext(): ResourceContextData {\n const context = useContext(ResourceContext);\n if (!context) {\n throw new Error(\n \"useRequiredResourceContext must be used within a ResourceContextProvider\",\n );\n }\n return context;\n}\n","import type { ResourceContextData } from \"../context/ResourceContext\";\nimport type { NubaseContextData } from \"../context/types\";\nimport type {\n Action,\n CommandAction,\n HandlerAction,\n ResourceAction,\n} from \"./types\";\n\n/**\n * Standalone action executor that can be used outside of React components.\n * This is the core logic extracted from useActionExecutor for use in KeybindingManager.\n *\n * @param action - The action to execute\n * @param context - The Nubase context (optional, required for command actions)\n * @param resourceContext - The resource context (optional, required for resource actions)\n * @returns Promise that resolves when action completes\n */\nexport async function executeAction(\n action: Action,\n context?: NubaseContextData | null,\n resourceContext?: ResourceContextData | null,\n): Promise<void> {\n if (action.disabled) {\n return;\n }\n\n switch (action.type) {\n case \"handler\": {\n const handlerAction = action as HandlerAction;\n try {\n await handlerAction.onExecute();\n } catch (error) {\n console.error(`Error executing handler action \"${action.id}\":`, error);\n }\n break;\n }\n case \"command\": {\n const commandAction = action as CommandAction;\n\n // Check if context is available for command execution\n if (!context) {\n throw new Error(\n `Cannot execute command \"${commandAction.command}\" - NubaseContext not available. Make sure you're running within a NubaseApp or provide a handler action for standalone usage.`,\n );\n }\n\n try {\n await context.commands.execute(\n commandAction.command,\n commandAction.commandArgs,\n );\n } catch (error) {\n console.error(`Error executing command action \"${action.id}\":`, error);\n }\n break;\n }\n case \"resource\": {\n const resourceAction = action as ResourceAction;\n\n // Check if context is available for resource execution\n if (!context) {\n throw new Error(\n `Cannot execute resource action \"${resourceAction.id}\" - NubaseContext not available. Make sure you're running within a NubaseApp.`,\n );\n }\n\n // Check if resource context is available for resource execution\n if (!resourceContext) {\n throw new Error(\n `Cannot execute resource action \"${resourceAction.id}\" - ResourceContext not available. Make sure you're running within a ResourceContextProvider.`,\n );\n }\n\n try {\n const selectedIds = Array.from(resourceContext.selectedIds);\n await context.resourceActions.execute(\n resourceAction,\n resourceContext.resourceType,\n selectedIds,\n );\n } catch (error) {\n console.error(`Error executing resource action \"${action.id}\":`, error);\n }\n break;\n }\n default: {\n // TypeScript exhaustiveness check - this should never be reached\n const _exhaustiveCheck: never = action;\n console.error(`Unknown action type:`, _exhaustiveCheck);\n break;\n }\n }\n}\n","import type { TypedCommandDefinition } from \"../commands/types\";\nimport type {\n Action,\n ActionOrSeparator,\n BaseAction,\n CommandAction,\n HandlerAction,\n} from \"./types\";\n\n/**\n * Type guard to check if an action is a HandlerAction.\n */\nexport function isHandlerAction(action: Action): action is HandlerAction {\n return action.type === \"handler\";\n}\n\n/**\n * Type guard to check if an action is a CommandAction.\n */\nexport function isCommandAction(action: Action): action is CommandAction {\n return action.type === \"command\";\n}\n\n/**\n * Factory function for creating handler-based actions.\n */\nexport function createHandlerAction(\n base: BaseAction,\n onExecute: () => void | Promise<void>,\n): HandlerAction {\n return {\n ...base,\n type: \"handler\",\n onExecute,\n };\n}\n\n/**\n * Factory function for creating type-safe command-based actions.\n * Supports both typed command definitions and legacy string commands.\n */\nexport function createCommandAction<\n TCommand extends TypedCommandDefinition<any>,\n>(\n base: BaseAction,\n command: TCommand,\n commandArgs?: TCommand extends TypedCommandDefinition<infer TSchema>\n ? TSchema extends import(\"@nubase/core\").BaseSchema<any>\n ? import(\"@nubase/core\").Infer<TSchema>\n : undefined\n : never,\n): CommandAction<TCommand>;\n\nexport function createCommandAction(\n base: BaseAction,\n command: string,\n commandArgs?: Record<string, unknown>,\n): CommandAction<any>;\n\nexport function createCommandAction(\n base: BaseAction,\n command: string | TypedCommandDefinition<any>,\n commandArgs?: any,\n): CommandAction<any> {\n const commandId = typeof command === \"string\" ? command : command.id;\n\n return {\n ...base,\n type: \"command\",\n command: commandId,\n commandArgs,\n };\n}\n\n/**\n * Utility to convert a list of actions with separators into grouped structure.\n * Splits actions at \"separator\" markers into separate arrays.\n */\nexport function groupActionsBySeparators(\n actionsConfig: ActionOrSeparator[],\n): Action[][] {\n const groups: Action[][] = [];\n let currentGroup: Action[] = [];\n\n for (const item of actionsConfig) {\n if (item === \"separator\") {\n if (currentGroup.length > 0) {\n groups.push(currentGroup);\n currentGroup = [];\n }\n } else {\n currentGroup.push(item);\n }\n }\n\n // Add remaining actions as the last group\n if (currentGroup.length > 0) {\n groups.push(currentGroup);\n }\n\n return groups;\n}\n","import { X } from \"lucide-react\";\nimport type { FC } from \"react\";\nimport { cn } from \"../../../styling/cn\";\nimport { ActivityIndicator } from \"../../activity-indicator\";\nimport { Button } from \"../../buttons/Button/Button\";\nimport type { ToastData } from \"./types\";\n\nexport interface ToastProps {\n toast: ToastData;\n onClose: () => void;\n}\n\nconst typeConfig = {\n default: {\n icon: null,\n className: \"bg-card border-border text-card-foreground\",\n },\n error: {\n icon: X,\n className: \"bg-destructive border-destructive text-background\",\n },\n};\n\nexport const Toast: FC<ToastProps> = ({ toast, onClose }) => {\n const config = typeConfig[toast.type];\n const Icon = config.icon;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-3 p-4 rounded-lg border shadow-lg min-w-80 max-w-md\",\n \"transform transition-all duration-300 ease-out\",\n config.className,\n )}\n >\n {toast.promise ? (\n <ActivityIndicator\n size=\"md\"\n color=\"inherit\"\n aria-label=\"Loading\"\n className=\"flex-shrink-0\"\n />\n ) : (\n Icon && <Icon className=\"h-5 w-5 flex-shrink-0\" />\n )}\n\n <div className=\"flex-1 text-sm\">\n {toast.promise && toast.loadingText ? toast.loadingText : toast.message}\n </div>\n\n {toast.closable && (\n <Button variant=\"secondary\" onClick={onClose} className=\"h-6 w-6 p-0\">\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n );\n};\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Utility function for merging Tailwind CSS classes with conditional logic.\n *\n * This function combines clsx for conditional class handling with tailwind-merge\n * to resolve Tailwind class conflicts. It's commonly used throughout the component\n * library to merge default component styles with user-provided className props.\n *\n * @param inputs - Array of class values (strings, objects, arrays, etc.)\n * @returns A string of merged and deduplicated Tailwind classes\n *\n * @example\n * cn(\"px-4 py-2\", \"bg-blue-500\", { \"text-white\": isActive })\n * // Returns: \"px-4 py-2 bg-blue-500 text-white\" (if isActive is true)\n *\n * @example\n * cn(\"bg-red-500\", \"bg-blue-500\")\n * // Returns: \"bg-blue-500\" (tailwind-merge resolves the conflict)\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Loader2 } from \"lucide-react\";\nimport type React from \"react\";\n\nconst activityIndicatorVariants = cva(\"animate-spin\", {\n variants: {\n size: {\n xs: \"w-3 h-3\",\n sm: \"w-4 h-4\",\n md: \"w-5 h-5\",\n lg: \"w-6 h-6\",\n xl: \"w-8 h-8\",\n },\n color: {\n primary: \"text-primary\",\n secondary: \"text-secondary\",\n surface: \"text-foreground\",\n surfaceVariant: \"text-muted-foreground\",\n inherit: \"text-inherit\",\n },\n },\n defaultVariants: {\n size: \"md\",\n color: \"inherit\",\n },\n});\n\nexport interface ActivityIndicatorProps\n extends VariantProps<typeof activityIndicatorVariants> {\n className?: string;\n \"aria-label\"?: string;\n}\n\nexport const ActivityIndicator: React.FC<ActivityIndicatorProps> = ({\n size,\n color,\n className,\n \"aria-label\": ariaLabel = \"Loading...\",\n}) => {\n return (\n <Loader2\n className={activityIndicatorVariants({ size, color, className })}\n aria-label={ariaLabel}\n />\n );\n};\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../styling/cn\";\nimport { ActivityIndicator } from \"../../activity-indicator\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive h-9 px-4 py-2 has-[>svg]:px-3 cursor-pointer\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ComponentProps<\"button\">,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n isLoading?: boolean;\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n asChild = false,\n isLoading = false,\n children,\n disabled,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, className }))}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading && (\n <ActivityIndicator\n size=\"sm\"\n color=\"inherit\"\n aria-label=\"Loading...\"\n />\n )}\n {children}\n </Comp>\n );\n },\n);\n\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { setGlobalToastFunctions } from \"./toastUtils\";\nimport type {\n PromiseToastCallback,\n PromiseToastOptions,\n ToastContextType,\n ToastData,\n ToastOptions,\n ToastType,\n} from \"./types\";\n\nconst ToastContext = createContext<ToastContextType | null>(null);\n\nexport const useToast = () => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return context;\n};\n\ninterface ToastProviderProps {\n children: ReactNode;\n}\n\nexport const ToastProvider = ({ children }: ToastProviderProps) => {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n\n const generateId = useCallback(\n () => Math.random().toString(36).substring(2, 9),\n [],\n );\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const updateToast = useCallback((id: string, updates: Partial<ToastData>) => {\n setToasts((prev) =>\n prev.map((toast) => (toast.id === id ? { ...toast, ...updates } : toast)),\n );\n }, []);\n\n const addToast = useCallback(\n (message: ReactNode, type: ToastType, options: ToastOptions = {}) => {\n const id = generateId();\n const { duration = 10000, closable = true } = options;\n\n const newToast: ToastData = {\n id,\n message,\n type,\n duration,\n closable,\n };\n\n setToasts((prev) => [...prev, newToast]);\n\n if (duration > 0) {\n // Auto-remove toast after duration\n setTimeout(() => removeToast(id), duration);\n }\n\n return id;\n },\n [generateId, removeToast],\n );\n\n const addPromiseToast = useCallback(\n <T,>(\n promise: Promise<T>,\n callback: PromiseToastCallback<T>,\n options: PromiseToastOptions = {},\n ) => {\n const id = generateId();\n const {\n duration = 0, // Don't auto-close promise toasts during loading\n closable = true,\n loadingText = \"Loading...\",\n } = options;\n\n const newToast: ToastData = {\n id,\n message: loadingText,\n type: \"default\",\n duration,\n closable,\n promise,\n loadingText,\n };\n\n setToasts((prev) => [...prev, newToast]);\n\n // Handle promise resolution/rejection\n promise\n .then((data) => {\n const result = callback({ success: true, data });\n updateToast(id, {\n type: result.type,\n message: result.message,\n duration: result.duration || 3000,\n promise: undefined, // Clear the promise to exit loading state\n });\n setTimeout(() => removeToast(id), result.duration || 3000);\n })\n .catch((error) => {\n const result = callback({ success: false, error });\n updateToast(id, {\n type: result.type,\n message: result.message,\n duration: result.duration || 5000,\n promise: undefined, // Clear the promise to exit loading state\n });\n setTimeout(() => removeToast(id), result.duration || 5000);\n });\n\n return id;\n },\n [generateId, removeToast, updateToast],\n );\n\n // Initialize global toast functions\n useEffect(() => {\n setGlobalToastFunctions(addToast, addPromiseToast);\n }, [addToast, addPromiseToast]);\n\n const value: ToastContextType = {\n toasts,\n addToast,\n addPromiseToast,\n removeToast,\n updateToast,\n };\n\n return (\n <ToastContext.Provider value={value}>{children}</ToastContext.Provider>\n );\n};\n","import type { ReactNode } from \"react\";\nimport type {\n PromiseToastCallback,\n PromiseToastOptions,\n ToastContextType,\n ToastOptions,\n ToastType,\n} from \"./types\";\n\n// Global toast functions - will be initialized by ToastProvider\nlet globalAddToast: ToastContextType[\"addToast\"] | null = null;\nlet globalAddPromiseToast: ToastContextType[\"addPromiseToast\"] | null = null;\n\nexport const setGlobalToastFunctions = (\n addToast: ToastContextType[\"addToast\"],\n addPromiseToast: ToastContextType[\"addPromiseToast\"],\n) => {\n globalAddToast = addToast;\n globalAddPromiseToast = addPromiseToast;\n};\n\n// Simple toast function - just message and type\nexport const showToast = (\n message: ReactNode,\n type: ToastType = \"default\",\n options?: ToastOptions,\n): string => {\n if (!globalAddToast) {\n console.warn(\"Toast function called before ToastProvider is initialized\");\n return \"\";\n }\n return globalAddToast(message, type, options);\n};\n\n// Promise toast function with callback\nexport const showPromiseToast = <T>(\n promise: Promise<T>,\n callback: PromiseToastCallback<T>,\n options?: PromiseToastOptions,\n): string => {\n if (!globalAddPromiseToast) {\n console.warn(\n \"Promise toast function called before ToastProvider is initialized\",\n );\n return \"\";\n }\n return globalAddPromiseToast(promise, callback, options);\n};\n","import type { FC } from \"react\";\nimport { Toast } from \"./Toast\";\nimport { useToast } from \"./ToastContext\";\n\nexport interface ToastContainerProps {\n className?: string;\n}\n\nexport const ToastContainer: FC<ToastContainerProps> = ({ className = \"\" }) => {\n const { toasts, removeToast } = useToast();\n\n if (toasts.length === 0) return null;\n\n return (\n <div\n className={`\n fixed bottom-4 right-4 z-50 flex flex-col gap-2\n ${className}\n `}\n >\n {toasts.map((toast) => (\n <div\n key={toast.id}\n className=\"animate-in slide-in-from-right-full fade-in duration-300\"\n >\n <Toast toast={toast} onClose={() => removeToast(toast.id)} />\n </div>\n ))}\n </div>\n );\n};\n","import { showToast } from \"../components/floating/toast\";\nimport type {\n CommandRegistry,\n NubaseContextData,\n TypedCommandDefinition,\n} from \"./types\";\n\nclass CommandRegistryImpl implements CommandRegistry {\n private commands = new Map<string, TypedCommandDefinition<any>>();\n private context: NubaseContextData | null = null;\n\n setContext(context: NubaseContextData) {\n this.context = context;\n }\n\n register(command: TypedCommandDefinition<any>) {\n this.commands.set(command.id, command);\n }\n\n async execute(commandId: string, args?: unknown): Promise<void> {\n if (!this.context) {\n throw new Error(\n \"Command context not set. Make sure to initialize the command system.\",\n );\n }\n\n const command = this.commands.get(commandId);\n if (!command) {\n showToast(`Command \"${commandId}\" not found`, \"error\");\n return;\n }\n\n try {\n // Handle typed commands with optional schema validation\n if (command.argsSchema) {\n try {\n // Validate and parse arguments using the schema\n const validatedArgs = command.argsSchema.toZod().parse(args);\n await command.execute(this.context, validatedArgs);\n } catch (validationError) {\n console.error(\n `Invalid arguments for command \"${commandId}\":`,\n validationError,\n );\n\n // Show user-friendly error message\n const errorMessage =\n validationError instanceof Error &&\n \"issues\" in validationError &&\n Array.isArray((validationError as any).issues)\n ? `Invalid arguments for \"${command.name}\": ${(validationError as any).issues[0]?.message || \"Unknown validation error\"}`\n : `Invalid arguments for \"${command.name}\"`;\n\n showToast(errorMessage, \"error\");\n return;\n }\n } else {\n // Handle typed commands without schema\n await command.execute(this.context, args as any);\n }\n } catch (error) {\n console.error(`Error executing command \"${commandId}\":`, error);\n }\n }\n\n getCommand(commandId: string): TypedCommandDefinition<any> | undefined {\n return this.commands.get(commandId);\n }\n\n getAllCommands(): TypedCommandDefinition<any>[] {\n return Array.from(this.commands.values());\n }\n\n clear() {\n this.commands.clear();\n }\n}\n\nexport const commandRegistry = new CommandRegistryImpl();\n","import type { BaseSchema } from \"@nubase/core\";\nimport type { TypedCommandDefinition } from \"./types\";\n\n/**\n * Factory function for creating type-safe command definitions.\n *\n * This function provides full TypeScript type inference for command arguments\n * based on the provided schema. Use this instead of directly creating\n * TypedCommandDefinition objects for better type safety.\n *\n * @param definition - The command definition with optional args schema\n * @returns A typed command definition with inferred argument types\n *\n * @example\n * ```typescript\n * // Command with no arguments\n * const simpleCommand = defineCommand({\n * id: \"example.simple\",\n * name: \"Simple Command\",\n * execute: (context) => {\n * // context is typed, args is undefined\n * },\n * });\n *\n * // Command with typed arguments\n * const typedCommand = defineCommand({\n * id: \"example.typed\",\n * name: \"Typed Command\",\n * argsSchema: nu.object({\n * resourceId: nu.string(),\n * count: nu.number().optional(),\n * }),\n * execute: (context, args) => {\n * // args is typed as { resourceId: string; count?: number | undefined }\n * console.log(args.resourceId); // Type-safe access\n * },\n * });\n * ```\n */\nexport function createCommand<TArgsSchema extends BaseSchema<any> | undefined>(\n definition: TypedCommandDefinition<TArgsSchema>,\n): TypedCommandDefinition<TArgsSchema> {\n return definition;\n}\n","import { nu } from \"@nubase/core\";\nimport { Database, Folder } from \"lucide-react\";\nimport { ModalFrame } from \"../../components/floating/modal\";\nimport { SearchableTreeNavigator } from \"../../components/navigation/searchable-tree-navigator/SearchableTreeNavigator\";\nimport { getWorkspaceFromRouter } from \"../../context/WorkspaceContext\";\nimport type { MenuItem } from \"../../menu/types\";\nimport { createCommand } from \"../defineCommand\";\n\n// Schema for command arguments\nconst workbenchOpenResourceOperationArgsSchema = nu.object({\n resourceId: nu\n .string()\n .withMeta({\n label: \"Resource ID\",\n description: \"The ID of the resource to open\",\n })\n .optional(),\n operation: nu\n .string()\n .withMeta({\n label: \"Operation\",\n description: \"The operation to perform on the resource\",\n })\n .optional(),\n});\n\nexport const workbenchOpenResourceOperation = createCommand({\n id: \"workbench.openResourceOperation\",\n name: \"Open Resource Operation\",\n icon: Database,\n argsSchema: workbenchOpenResourceOperationArgsSchema.optional(),\n execute: (context, args) => {\n // Get current workspace from router state for path-based multi-workspace\n const workspace = getWorkspaceFromRouter(context.router);\n\n // If both resourceId and operation are provided, navigate directly\n if (args?.resourceId && args?.operation) {\n const { resourceId, operation } = args;\n\n // Validate that the resource and view exist\n const resource = context.config?.resources?.[resourceId];\n if (resource?.views?.[operation]) {\n context.router.navigate({\n to: \"/$workspace/r/$resourceName/$operation\",\n params: {\n workspace: workspace || \"\",\n resourceName: resourceId,\n operation: operation,\n },\n });\n return;\n }\n console.warn(`Resource \"${resourceId}\" or view \"${operation}\" not found`);\n }\n const resources = context.config?.resources || {};\n const resourceEntries = Object.entries(resources);\n\n if (resourceEntries.length === 0) {\n context.modal.openModal({\n content: (\n <ModalFrame>\n <div className=\"p-4 text-center\">\n <p className=\"text-foreground\">No resources available</p>\n </div>\n </ModalFrame>\n ),\n alignment: \"top\",\n size: \"md\",\n showBackdrop: true,\n });\n return;\n }\n\n // Create flat list of resource operations\n const resourceItems: MenuItem[] = [];\n const filterOperation = args?.operation; // Filter by operation if provided\n\n for (const [resourceId, resource] of resourceEntries) {\n const views = Object.entries(resource.views || {});\n\n if (views.length === 0) {\n // Skip resources with no views when filtering\n if (!filterOperation) {\n resourceItems.push({\n id: resourceId,\n icon: Database,\n label: resourceId,\n subtitle: \"No views available\",\n });\n }\n } else {\n // Add views as separate items, filtered if operation is specified\n for (const [viewId, _view] of views) {\n // Apply filter if operation is specified\n if (!filterOperation || viewId === filterOperation) {\n resourceItems.push({\n id: `${resourceId}.${viewId}`,\n icon: Folder,\n label: `${resourceId} - ${viewId}`,\n subtitle: `${viewId} view for ${resourceId}`,\n onExecute: () => {\n context.modal.closeModal();\n context.router.navigate({\n to: \"/$workspace/r/$resourceName/$operation\",\n params: {\n workspace: workspace || \"\",\n resourceName: resourceId,\n operation: viewId,\n },\n });\n },\n });\n }\n }\n }\n }\n\n // Show empty state if filter results in no items\n if (resourceItems.length === 0 && filterOperation) {\n context.modal.openModal({\n content: (\n <ModalFrame>\n <div className=\"p-4 text-center\">\n <p className=\"text-foreground\">\n No \"{filterOperation}\" views available\n </p>\n </div>\n </ModalFrame>\n ),\n alignment: \"top\",\n size: \"md\",\n showBackdrop: true,\n });\n return;\n }\n\n const placeholder = filterOperation\n ? `Search ${filterOperation} views...`\n : \"Search resources...\";\n\n context.modal.openModal({\n content: (\n <ModalFrame>\n <SearchableTreeNavigator\n items={resourceItems}\n placeHolder={placeholder}\n />\n </ModalFrame>\n ),\n alignment: \"top\",\n size: \"lg\",\n showBackdrop: true,\n });\n },\n});\n","import {\n DialogBackdrop,\n DialogPanel,\n Dialog as HeadlessDialog,\n} from \"@headlessui/react\";\nimport type { FC, ReactElement } from \"react\";\nimport { cloneElement } from \"react\";\nimport type { BaseModalFrameProps, ModalAlignment, ModalSize } from \"./types\";\n\nexport type ModalProps = {\n open: boolean;\n onClose: () => void;\n content: ReactElement<BaseModalFrameProps>;\n alignment?: ModalAlignment;\n showBackdrop?: boolean;\n size?: ModalSize;\n zIndex?: number;\n};\n\nconst sizeClasses = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n \"2xl\": \"max-w-2xl\",\n full: \"max-w-full\",\n};\n\nconst alignmentClasses = {\n center: \"items-center justify-center\",\n top: \"items-start justify-center pt-16\",\n};\n\nexport const Modal: FC<ModalProps> = ({\n open,\n onClose,\n content,\n alignment = \"center\",\n showBackdrop = true,\n size = \"md\",\n zIndex = 50,\n}) => {\n return (\n <HeadlessDialog\n open={open}\n onClose={onClose}\n className=\"relative\"\n style={{ zIndex }}\n >\n {showBackdrop && (\n <DialogBackdrop className=\"fixed inset-0 bg-scrim/30 backdrop-blur-xxs transition-opacity duration-300 ease-out data-[closed]:opacity-0\" />\n )}\n\n <div className={`fixed inset-0 flex p-4 ${alignmentClasses[alignment]}`}>\n <DialogPanel\n className={`w-full ${sizeClasses[size]} transition-all duration-300 ease-out data-[closed]:scale-95 data-[closed]:opacity-0`}\n >\n {cloneElement(content, { onClose })}\n </DialogPanel>\n </div>\n </HeadlessDialog>\n );\n};\n","import type { FC, ReactNode } from \"react\";\n\nexport type ModalFrameProps = {\n onClose?: () => void;\n children: ReactNode;\n className?: string;\n \"data-testid\"?: string;\n};\n\nexport const ModalFrame: FC<ModalFrameProps> = ({\n children,\n className = \"\",\n \"data-testid\": testId,\n}) => {\n return (\n <div\n className={`rounded-xl bg-card text-card-foreground shadow-sm border p-4 overflow-y-auto ${className}`}\n style={{\n minHeight: \"100px\",\n maxHeight: \"min(600px, calc(100vh - 2rem))\",\n }}\n data-testid={testId}\n >\n {children}\n </div>\n );\n};\n","import type React from \"react\";\nimport { forwardRef } from \"react\";\nimport type { SchemaFormConfiguration } from \"../../../hooks\";\n\nexport interface SchemaFormProps\n extends React.FormHTMLAttributes<HTMLFormElement> {\n form: SchemaFormConfiguration<any>;\n className?: string;\n children?: React.ReactNode;\n onSubmit?: (e: React.FormEvent) => void;\n}\n\n// Form component - wraps the form element\nexport const SchemaForm = forwardRef<HTMLFormElement, SchemaFormProps>(\n ({ form, className = \"\", children, onSubmit, ...formProps }, ref) => {\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (onSubmit) {\n onSubmit(e);\n } else {\n await form.api.handleSubmit();\n }\n };\n\n return (\n <form\n ref={ref}\n onSubmit={handleSubmit}\n className={className}\n {...formProps}\n >\n {children}\n </form>\n );\n },\n);\n","import {\n type BaseSchema,\n type FormLayoutField,\n OptionalSchema,\n} from \"@nubase/core\";\nimport type React from \"react\";\nimport type { SchemaFormConfiguration } from \"../../../hooks\";\nimport { useComputedMetadata } from \"../../../hooks/useComputedMetadata\";\nimport { useLayout } from \"../../../hooks/useLayout\";\nimport { FormFieldRenderer } from \"../FormFieldRenderer/FormFieldRenderer\";\nimport type { PatchResult } from \"../FormFieldRenderer/PatchWrapper\";\nimport { SchemaFormVerticalLayout } from \"./SchemaFormVerticalLayout\";\n\nexport interface SchemaFormBodyProps {\n form: SchemaFormConfiguration<any>;\n className?: string;\n layoutName?: string;\n computedMetadata?: {\n debounceMs?: number;\n };\n}\n\n// Body component - renders the form fields\nexport const SchemaFormBody: React.FC<SchemaFormBodyProps> = ({\n form,\n className = \"\",\n layoutName,\n computedMetadata,\n}) => {\n const { schema, mode, onPatch } = form;\n\n // Use computed metadata hook to get merged metadata\n const { metadata: mergedMetadata, error: metadataError } =\n useComputedMetadata(schema, form.formState, computedMetadata);\n\n // Use layout hook to get the layout (either specified or default)\n const layout = useLayout(schema, layoutName);\n\n return (\n <div className={`flex flex-col ${className}`}>\n {metadataError && (\n <div className=\"mb-4 p-3 bg-destructive/10 border border-destructive rounded-md text-destructive-foreground text-sm\">\n <strong>Metadata Error:</strong> {metadataError.message}\n </div>\n )}\n\n <div className=\"flex-1 space-y-4\">\n <SchemaFormVerticalLayout\n layout={layout}\n renderField={(field: FormLayoutField<any>) => {\n const fieldName = field.name as string;\n const currentSchema = schema._shape[fieldName] as BaseSchema<any>;\n const fieldMetadata =\n mergedMetadata[fieldName] ?? currentSchema._meta;\n\n // TanStack Form validation function\n const validateFieldOnSubmit = ({ value }: { value: any }) => {\n // Check if field is required and empty\n const isFieldRequired =\n currentSchema && !(currentSchema instanceof OptionalSchema);\n if (isFieldRequired) {\n if (value === undefined || value === null || value === \"\") {\n return `${fieldName} is required and cannot be empty`;\n }\n }\n\n // Then run schema validation\n if (fieldMetadata?.validateOnSubmit) {\n const error = fieldMetadata.validateOnSubmit(value);\n if (error) {\n return error;\n }\n }\n\n return undefined;\n };\n\n // Async validation function for submit\n const validateFieldOnSubmitAsync = async ({\n value,\n }: {\n value: any;\n }) => {\n if (fieldMetadata?.validateOnSubmitAsync) {\n const error = await fieldMetadata.validateOnSubmitAsync(value);\n if (error) {\n return error;\n }\n }\n return undefined;\n };\n\n // Build field validators object\n const fieldValidators: any = {};\n\n // Use TanStack Form validation for all scenarios\n fieldValidators.onSubmit = validateFieldOnSubmit;\n // Also validate on blur for immediate feedback\n fieldValidators.onBlur = validateFieldOnSubmit;\n\n // Add async validators if they exist\n if (fieldMetadata?.validateOnSubmitAsync) {\n fieldValidators.onSubmitAsync = validateFieldOnSubmitAsync;\n }\n // Add custom onBlur validation if specified in metadata\n if (fieldMetadata?.validateOnBlur) {\n const customBlurValidation = fieldMetadata.validateOnBlur;\n fieldValidators.onBlur = ({ value }: { value: any }) => {\n // Run base validation first\n const baseError = validateFieldOnSubmit({ value });\n if (baseError) return baseError;\n\n // Then run custom blur validation\n return customBlurValidation(value);\n };\n }\n if (fieldMetadata?.validateOnBlurAsync) {\n fieldValidators.onBlurAsync = async ({\n value,\n }: {\n value: any;\n }) => {\n return fieldMetadata.validateOnBlurAsync?.(value);\n };\n }\n\n const handleFieldPatch = async (\n value: any,\n fieldState?: any, // Will receive fieldState from FormFieldRenderer\n ): Promise<PatchResult> => {\n if (mode === \"patch\" && onPatch && fieldState) {\n // Force validation to run on the current value\n await fieldState.validate(\"submit\");\n\n // Check TanStack Form's validation state\n // Don't return validation errors - FormControl already shows them\n if (fieldState.state.meta.errors.length > 0) {\n // Just prevent the network call, don't return errors for PatchWrapper to show\n return { success: false, errors: [] };\n }\n\n try {\n // Transform empty values to null for network call\n const transformedValue =\n value === \"\" || value === undefined ? null : value;\n await onPatch(fieldName, transformedValue);\n return { success: true };\n } catch (error) {\n return {\n success: false,\n errors: [\n `Failed to update ${fieldName}: ${(error as Error).message}`,\n ],\n };\n }\n }\n\n return { success: true };\n };\n\n return (\n <form.api.Field\n key={fieldName}\n name={fieldName}\n validators={fieldValidators}\n >\n {(fieldState) => (\n <FormFieldRenderer\n schema={currentSchema}\n fieldState={fieldState}\n metadata={fieldMetadata}\n mode={mode}\n onPatch={handleFieldPatch}\n />\n )}\n </form.api.Field>\n );\n }}\n />\n </div>\n </div>\n );\n};\n","import {\n type ObjectOutput,\n type ObjectSchema,\n type ObjectShape,\n OptionalSchema,\n type SchemaMetadata,\n} from \"@nubase/core\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\n/**\n * Helper to get metadata from a field schema, unwrapping OptionalSchema if needed.\n * Handles nested OptionalSchemas (e.g., from calling .partial() on an already optional field).\n *\n * Metadata can be attached at any level of wrapping:\n * - nu.string().withMeta({ label: \"Name\" }) - metadata on base schema\n * - nu.string().optional().withMeta({ label: \"Name\" }) - metadata on OptionalSchema\n * - nu.string().withMeta({ label: \"Name\" }).optional() - metadata on inner schema\n *\n * This function collects metadata from all layers, with outer layers taking precedence.\n */\nexport function getFieldMeta(fieldSchema: any): any {\n const metadataLayers: any[] = [];\n let schema = fieldSchema;\n\n // Collect metadata from all layers (outer to inner)\n while (schema) {\n if (schema._meta && Object.keys(schema._meta).length > 0) {\n metadataLayers.push(schema._meta);\n }\n if (schema instanceof OptionalSchema) {\n schema = schema._wrapped;\n } else {\n break;\n }\n }\n\n // Merge metadata with inner layers first, outer layers override\n // Object.assign avoids O(n^2) spread in reduce\n const merged = {};\n for (let i = metadataLayers.length - 1; i >= 0; i--) {\n Object.assign(merged, metadataLayers[i]);\n }\n return merged;\n}\n\nexport interface UseComputedMetadataOptions {\n /** Debounce delay in milliseconds (default: 300ms) */\n debounceMs?: number;\n}\n\nexport interface UseComputedMetadataResult<TShape extends ObjectShape> {\n /** Merged metadata for all properties (static + computed) */\n metadata: Record<keyof TShape, SchemaMetadata<any>>;\n /** Whether metadata is currently being computed */\n isComputing: boolean;\n /** Error that occurred during computation, if any */\n error: Error | null;\n}\n\n/**\n * Hook that provides debounced computed metadata for a form schema.\n *\n * This hook:\n * 1. Watches for changes in form data\n * 2. Debounces the computation to avoid excessive recalculation\n * 3. Merges static metadata with computed metadata\n * 4. Returns the final merged metadata for all properties\n *\n * @param schema The ObjectSchema with potential computed metadata\n * @param formData Current form data (partial object)\n * @param options Configuration options\n * @returns Object with merged metadata, loading state, and error state\n */\nexport function useComputedMetadata<TShape extends ObjectShape>(\n schema: ObjectSchema<TShape>,\n formData: Partial<ObjectOutput<TShape>>,\n options: UseComputedMetadataOptions = {},\n): UseComputedMetadataResult<TShape> {\n const { debounceMs = 300 } = options;\n\n // State for the computed metadata\n const [metadata, setMetadata] = useState<\n Record<keyof TShape, SchemaMetadata<any>>\n >(() => {\n // Initialize with static metadata only\n const initialMeta: any = {};\n for (const key in schema._shape) {\n if (Object.hasOwn(schema._shape, key)) {\n const fieldSchema = schema._shape[key];\n if (fieldSchema) {\n initialMeta[key] = getFieldMeta(fieldSchema);\n }\n }\n }\n return initialMeta;\n });\n\n const [isComputing, setIsComputing] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Refs for debouncing\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n const computingRef = useRef(false);\n\n // Compute metadata function\n const computeMetadata = useCallback(\n async (data: Partial<ObjectOutput<TShape>>) => {\n // Prevent concurrent computations\n if (computingRef.current) return;\n\n try {\n computingRef.current = true;\n setError(null);\n setIsComputing(true);\n\n const mergedMeta = await schema.getAllMergedMeta(data);\n\n // Always update metadata since we want reactive updates\n setMetadata(mergedMeta);\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error(\"Unknown error during metadata computation\");\n setError(error);\n console.warn(\"Failed to compute metadata:\", error);\n } finally {\n computingRef.current = false;\n setIsComputing(false);\n }\n },\n [schema],\n );\n\n // Create a stable key for formData changes to trigger effect properly\n const _formDataKey = JSON.stringify(formData);\n\n // Debounced computation effect\n useEffect(() => {\n // Clear existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Only compute if we have computed metadata definitions\n if (Object.keys(schema._computedMeta).length > 0) {\n // Set up new debounced computation\n timeoutRef.current = setTimeout(() => {\n computeMetadata(formData);\n }, debounceMs);\n } else {\n // No computed metadata, just use static metadata\n const staticMeta: any = {};\n for (const key in schema._shape) {\n if (Object.hasOwn(schema._shape, key)) {\n const fieldSchema = schema._shape[key];\n if (fieldSchema) {\n staticMeta[key] = getFieldMeta(fieldSchema);\n }\n }\n }\n setMetadata(staticMeta);\n setIsComputing(false);\n setError(null);\n }\n\n // Cleanup timeout on unmount\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [formData, computeMetadata, debounceMs, schema]);\n\n return {\n metadata,\n isComputing,\n error,\n };\n}\n","import type { Layout, ObjectSchema, ObjectShape } from \"@nubase/core\";\nimport { useMemo } from \"react\";\n\n/**\n * Pure function version of useLayout for testing and non-React contexts.\n * This function has the same logic as useLayout but without React hooks.\n */\nexport function getLayout<TShape extends ObjectShape>(\n schema: ObjectSchema<TShape>,\n layoutName?: string,\n): Layout<TShape> {\n // If a layout name is provided and the layout exists, use it\n if (layoutName && schema.hasLayout(layoutName)) {\n const layout = schema.getLayout(layoutName);\n if (layout) {\n return layout;\n }\n }\n\n // Create a default layout with all fields in a single group\n const fieldNames = Object.keys(schema._shape) as (keyof TShape)[];\n\n const defaultLayout: Layout<TShape> = {\n type: \"form\",\n groups: [\n {\n fields: fieldNames.map((name) => ({\n name,\n fieldWidth: 12, // Full width for all fields\n })),\n },\n ],\n };\n\n return defaultLayout;\n}\n\n/**\n * Hook to get a layout for a schema. If a layoutName is provided and exists in the schema,\n * returns that layout. Otherwise, returns a default layout with all fields in a single group\n * with size 12 (full width).\n */\nexport function useLayout<TShape extends ObjectShape>(\n schema: ObjectSchema<TShape>,\n layoutName?: string,\n): Layout<TShape> {\n return useMemo(() => getLayout(schema, layoutName), [schema, layoutName]);\n}\n","import type { BaseSchema, SchemaMetadata } from \"@nubase/core\";\nimport { OptionalSchema } from \"@nubase/core\";\nimport type { AnyFieldApi } from \"@tanstack/react-form\";\nimport type React from \"react\";\nimport { useState } from \"react\";\nimport type { PatchResult } from \"./PatchWrapper\";\nimport {\n createFieldRenderer,\n type FormFieldRendererContext,\n} from \"./renderer-factory\";\n\nexport interface FormFieldRendererProps {\n schema: BaseSchema<any>;\n fieldState: AnyFieldApi;\n metadata: SchemaMetadata<any>;\n mode?: \"edit\" | \"view\" | \"patch\";\n onPatch?: (value: any, fieldState?: AnyFieldApi) => Promise<PatchResult>;\n}\n\nexport const FormFieldRenderer: React.FC<FormFieldRendererProps> = ({\n schema,\n fieldState,\n metadata,\n mode = \"edit\",\n onPatch,\n}) => {\n const [isPatching, setIsPatching] = useState(false);\n const [originalValue, setOriginalValue] = useState(fieldState.state.value);\n\n const hasError =\n fieldState.state.meta.isTouched && !fieldState.state.meta.isValid;\n const isRequired = !(schema instanceof OptionalSchema);\n const schemaToRender =\n schema instanceof OptionalSchema ? schema.unwrap() : schema;\n\n const context: FormFieldRendererContext = {\n schema: schemaToRender,\n fieldState,\n metadata,\n hasError,\n isRequired,\n };\n\n // Compute validation error for patch mode\n const isValidating = fieldState.state.meta.isValidating;\n let validationError: string | undefined;\n if (fieldState.state.meta.isTouched && !fieldState.state.meta.isValid) {\n const uniqueErrors = [...new Set(fieldState.state.meta.errors)].filter(\n (e): e is string => typeof e === \"string\" && e !== undefined,\n );\n validationError = uniqueErrors.join(\", \");\n }\n\n const patchContext = {\n isPatching,\n onStartPatch: () => {\n setOriginalValue(fieldState.state.value);\n setIsPatching(true);\n },\n onApplyPatch: async (): Promise<PatchResult> => {\n if (onPatch) {\n const result = await onPatch(fieldState.state.value, fieldState);\n if (result.success) {\n setIsPatching(false);\n }\n return result;\n }\n setIsPatching(false);\n return { success: true };\n },\n onCancelPatch: () => {\n fieldState.handleChange(originalValue);\n setIsPatching(false);\n },\n validationError,\n isValidating,\n };\n\n // Each mode (edit, view, patch) handles its own FormControl wrapping\n return createFieldRenderer(mode, context, patchContext);\n};\n","import type { AnyFieldApi } from \"@tanstack/react-form\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../styling/cn\";\nimport { Label } from \"../Label/Label\";\n\nexport interface FormControlProps extends React.HTMLAttributes<HTMLDivElement> {\n label?: string;\n hint?: string;\n error?: string;\n required?: boolean;\n children: React.ReactElement<{ id?: string }>;\n field?: AnyFieldApi; // Optional field for TanStack form integration\n}\n\nconst FormControl = forwardRef<HTMLDivElement, FormControlProps>(\n (\n { className, label, hint, error, required, children, field, ...props },\n ref,\n ) => {\n // Determine error state - prioritize explicit error, then field errors\n let displayError = error;\n let hasError = !!error;\n let isValidating = false;\n\n if (field) {\n isValidating = field.state.meta.isValidating;\n if (!error && field.state.meta.isTouched && !field.state.meta.isValid) {\n // Deduplicate errors to avoid showing the same message multiple times\n // TanStack Form can add duplicate errors when multiple validators run\n const uniqueErrors = [...new Set(field.state.meta.errors)].filter(\n (e): e is string => typeof e === \"string\" && e !== undefined,\n );\n\n displayError = uniqueErrors.join(\", \");\n hasError = true;\n }\n }\n\n const childId = children.props.id;\n\n return (\n <div\n ref={ref}\n className={cn(\"flex items-start gap-4\", className)}\n data-component=\"FormControl\"\n {...props}\n >\n {label && (\n <div className=\"w-32 shrink-0 pt-2\">\n <Label htmlFor={childId} required={required}>\n {label}\n </Label>\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n {children}\n {hint && !hasError && !isValidating && (\n <div\n id={`${childId}-hint`}\n className=\"mt-1 text-xs text-muted-foreground\"\n >\n {hint}\n </div>\n )}\n {isValidating && (\n <div className=\"mt-1 text-xs text-muted-foreground\">\n Validating...\n </div>\n )}\n {hasError && displayError && (\n <div\n id={`${childId}-error`}\n className=\"mt-1 text-xs text-destructive\"\n >\n {displayError}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nFormControl.displayName = \"FormControl\";\n\nexport { FormControl };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../styling/cn\";\n\nconst labelVariants = cva(\"block text-sm font-medium text-foreground\", {\n variants: {\n variant: {\n default: \"\",\n required: \"after:content-['*'] after:text-destructive after:ml-1\",\n muted: \"text-muted-foreground font-normal\",\n },\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement>,\n VariantProps<typeof labelVariants> {\n required?: boolean;\n}\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, variant, size, required, children, ...props }, ref) => {\n const finalVariant = required ? \"required\" : variant;\n\n return (\n <label\n ref={ref}\n className={cn(\n labelVariants({ variant: finalVariant, size }),\n className,\n )}\n {...props}\n >\n {children}\n </label>\n );\n },\n);\n\nLabel.displayName = \"Label\";\n\nexport { Label, labelVariants };\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../../styling/cn\";\n\nexport interface CheckboxProps\n extends React.ComponentProps<typeof CheckboxPrimitive.Root> {\n hasError?: boolean;\n}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, hasError, ...props }, ref) => {\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n hasError &&\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border-destructive ring-destructive/20\",\n className,\n )}\n aria-invalid={hasError}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n});\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n","import { Checkbox } from \"../../../form-controls/controls/Checkbox/Checkbox\";\nimport type { EditFieldRendererProps, EditFieldRendererResult } from \"../types\";\n\nexport const BooleanEditFieldRenderer = ({\n fieldState,\n hasError,\n}: EditFieldRendererProps): EditFieldRendererResult => {\n const element = (\n <Checkbox\n id={fieldState.name}\n name={fieldState.name}\n onBlur={fieldState.handleBlur}\n checked={fieldState.state.value ?? false}\n onCheckedChange={(checked: boolean) => fieldState.handleChange(checked)}\n hasError={hasError}\n />\n );\n\n return { element };\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { cn } from \"@/styling/cn\";\n\nconst viewFieldWrapperVariants = cva(\n [\n // Base styles shared by all view field renderers\n \"flex w-full min-w-0 px-3 py-1 rounded-md\",\n \"border border-transparent\",\n \"text-base text-foreground\",\n ],\n {\n variants: {\n variant: {\n // Single line fields (string, number, boolean) - fixed height to match TextInput\n singleLine: \"items-center h-9\",\n // Multi-line fields - flexible height with whitespace preservation\n multiLine: \"whitespace-pre-wrap\",\n },\n },\n defaultVariants: {\n variant: \"singleLine\",\n },\n },\n);\n\nexport interface ViewFieldWrapperProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof viewFieldWrapperVariants> {\n children: React.ReactNode;\n}\n\nexport const ViewFieldWrapper: React.FC<ViewFieldWrapperProps> = ({\n children,\n variant,\n className,\n ...props\n}) => {\n return (\n <div\n className={cn(viewFieldWrapperVariants({ variant }), className)}\n {...props}\n >\n {children}\n </div>\n );\n};\n\nexport const EmptyValue: React.FC = () => (\n <span className=\"text-muted-foreground italic\">Empty</span>\n);\n","import type { ViewFieldRendererProps } from \"../types\";\nimport { ViewFieldWrapper } from \"../ViewFieldWrapper\";\n\nexport const BooleanViewFieldRenderer = ({\n fieldState,\n}: ViewFieldRendererProps) => {\n const value = fieldState.state.value;\n return (\n <ViewFieldWrapper variant=\"singleLine\">\n {value ? \"Yes\" : \"No\"}\n </ViewFieldWrapper>\n );\n};\n","import type React from \"react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { cn } from \"@/styling/cn\";\nimport { textInputVariants } from \"../../../form-controls/controls/TextInput/TextInput\";\nimport type { EditFieldLifecycle } from \"../../FormFieldRenderer/renderer-factory\";\nimport type { EditFieldRendererProps, EditFieldRendererResult } from \"../types\";\n\n/**\n * Adjusts the textarea height to fit its content without scrollbars.\n */\nconst adjustTextareaHeight = (textarea: HTMLTextAreaElement) => {\n textarea.style.height = \"auto\";\n textarea.style.height = `${textarea.scrollHeight}px`;\n};\n\nexport const MultilineEditFieldRenderer = ({\n fieldState,\n hasError,\n metadata,\n}: EditFieldRendererProps): EditFieldRendererResult => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // Auto-resize on initial render - useLayoutEffect runs synchronously before paint to prevent flicker\n useLayoutEffect(() => {\n if (textareaRef.current) {\n adjustTextareaHeight(textareaRef.current);\n }\n }, []);\n\n const lifecycle: EditFieldLifecycle = {\n onEnterEdit: () => {\n setTimeout(() => {\n if (textareaRef.current) {\n textareaRef.current.focus();\n // Move cursor to the end\n const length = textareaRef.current.value.length;\n textareaRef.current.setSelectionRange(length, length);\n adjustTextareaHeight(textareaRef.current);\n }\n }, 0);\n },\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n fieldState.handleChange(e.target.value);\n adjustTextareaHeight(e.target);\n };\n\n const element = (\n <textarea\n ref={textareaRef}\n id={fieldState.name}\n name={fieldState.name}\n onBlur={fieldState.handleBlur}\n value={fieldState.state.value ?? \"\"}\n onChange={handleChange}\n placeholder={metadata.description}\n aria-invalid={hasError}\n className={cn(\n textInputVariants(),\n \"min-h-24 resize-none overflow-hidden\",\n )}\n rows={3}\n />\n );\n\n return { element, lifecycle };\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"@/styling/cn\";\n\nconst textInputVariants = cva([\n // Layout & Sizing\n \"flex h-9 w-full min-w-0\",\n\n // Spacing & Borders\n \"px-3 py-1 rounded-md border border-input\",\n\n // Background & Text\n \"bg-transparent text-base\",\n\n // Visual Effects\n \"shadow-xs outline-none\",\n \"transition-[color,box-shadow]\",\n\n // Placeholder & Selection\n \"placeholder:text-muted-foreground\",\n \"selection:bg-primary selection:text-primary-foreground\",\n\n // Focus State\n \"focus-visible:border-ring\",\n \"focus-visible:ring-ring/50\",\n\n // Invalid State\n \"aria-invalid:border-destructive\",\n \"aria-invalid:ring-destructive/20\",\n \"dark:aria-invalid:ring-destructive/40\",\n\n // Disabled State\n \"disabled:pointer-events-none\",\n \"disabled:cursor-not-allowed\",\n \"disabled:opacity-50\",\n]);\n\nexport interface TextInputProps\n extends Omit<React.ComponentProps<\"input\">, \"size\">,\n VariantProps<typeof textInputVariants> {\n hasError?: boolean;\n}\n\nconst TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n ({ className, type, hasError, ...props }, ref) => {\n return (\n <input\n ref={ref}\n type={type}\n data-slot=\"input\"\n aria-invalid={hasError}\n className={cn(textInputVariants({ className }))}\n {...props}\n />\n );\n },\n);\n\nTextInput.displayName = \"TextInput\";\n\nexport { TextInput, textInputVariants };\n","import type { ViewFieldRendererProps } from \"../types\";\nimport { EmptyValue, ViewFieldWrapper } from \"../ViewFieldWrapper\";\n\nexport const MultilineViewFieldRenderer = ({\n fieldState,\n}: ViewFieldRendererProps) => {\n const value = fieldState.state.value || \"\";\n return (\n <ViewFieldWrapper variant=\"multiLine\">\n {value || <EmptyValue />}\n </ViewFieldWrapper>\n );\n};\n","import type React from \"react\";\nimport { useRef } from \"react\";\nimport { TextInput } from \"../../../form-controls/controls/TextInput/TextInput\";\nimport type { EditFieldLifecycle } from \"../../FormFieldRenderer/renderer-factory\";\nimport type { EditFieldRendererProps, EditFieldRendererResult } from \"../types\";\n\nexport const NumberEditFieldRenderer = ({\n fieldState,\n hasError,\n metadata,\n}: EditFieldRendererProps): EditFieldRendererResult => {\n const inputRef = useRef<HTMLInputElement>(null);\n const hasSelectedRef = useRef(false);\n\n const lifecycle: EditFieldLifecycle = {\n onEnterEdit: () => {\n setTimeout(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n if (!hasSelectedRef.current) {\n inputRef.current.select();\n hasSelectedRef.current = true;\n }\n }\n }, 0);\n },\n onExitEdit: () => {\n hasSelectedRef.current = false;\n },\n };\n\n const element = (\n <TextInput\n ref={inputRef}\n id={fieldState.name}\n name={fieldState.name}\n onBlur={fieldState.handleBlur}\n type=\"number\"\n value={fieldState.state.value ?? 0}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n fieldState.handleChange(Number(e.target.value))\n }\n placeholder={metadata.description}\n hasError={hasError}\n />\n );\n\n return { element, lifecycle };\n};\n","import type { ViewFieldRendererProps } from \"../types\";\nimport { EmptyValue, ViewFieldWrapper } from \"../ViewFieldWrapper\";\n\nexport const NumberViewFieldRenderer = ({\n fieldState,\n}: ViewFieldRendererProps) => {\n const value = fieldState.state.value;\n return (\n <ViewFieldWrapper variant=\"singleLine\">\n {value != null ? value.toString() : <EmptyValue />}\n </ViewFieldWrapper>\n );\n};\n","import type React from \"react\";\nimport { useRef } from \"react\";\nimport { TextInput } from \"../../../form-controls/controls/TextInput/TextInput\";\nimport type { EditFieldLifecycle } from \"../../FormFieldRenderer/renderer-factory\";\nimport type { EditFieldRendererProps, EditFieldRendererResult } from \"../types\";\n\nexport const StringEditFieldRenderer = ({\n fieldState,\n hasError,\n metadata,\n}: EditFieldRendererProps): EditFieldRendererResult => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const lifecycle: EditFieldLifecycle = {\n onEnterEdit: () => {\n setTimeout(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n }\n }, 0);\n },\n };\n\n const element = (\n <TextInput\n ref={inputRef}\n id={fieldState.name}\n name={fieldState.name}\n onBlur={fieldState.handleBlur}\n type=\"text\"\n value={fieldState.state.value ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n fieldState.handleChange(e.target.value)\n }\n placeholder={metadata.description}\n hasError={hasError}\n />\n );\n\n return { element, lifecycle };\n};\n","import type { ViewFieldRendererProps } from \"../types\";\nimport { EmptyValue, ViewFieldWrapper } from \"../ViewFieldWrapper\";\n\nexport const StringViewFieldRenderer = ({\n fieldState,\n}: ViewFieldRendererProps) => {\n const value = fieldState.state.value || \"\";\n return (\n <ViewFieldWrapper variant=\"singleLine\">\n {value || <EmptyValue />}\n </ViewFieldWrapper>\n );\n};\n","import type { EditFieldRendererProps, EditFieldRendererResult } from \"../types\";\n\nexport const UnsupportedEditFieldRenderer = ({\n schema,\n}: EditFieldRendererProps): EditFieldRendererResult => {\n const element = (\n <div className=\"px-3 py-2 bg-destructive/10 text-destructive-foreground rounded-md\">\n <div>Unsupported field type: {schema.type}</div>\n </div>\n );\n\n return { element };\n};\n","import type { ViewFieldRendererProps } from \"../types\";\n\nexport const UnsupportedViewFieldRenderer = ({\n schema,\n}: ViewFieldRendererProps) => {\n return (\n <div className=\"px-3 py-2 bg-destructive/10 text-destructive-foreground rounded-md\">\n <div>Unsupported field type: {schema.type}</div>\n </div>\n );\n};\n","import { Check, X } from \"lucide-react\";\nimport type React from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { ActivityIndicator } from \"../../activity-indicator\";\nimport { Button } from \"../../buttons/Button/Button\";\nimport type { EditFieldLifecycle } from \"./renderer-factory\";\n\n// Types for patch operations\nexport interface PatchResult {\n success: boolean;\n errors?: string[];\n}\n\nexport type PatchFunction = () => Promise<PatchResult>;\n\nexport type EditComponentRenderer = (errors: string[]) => React.ReactNode;\n\ninterface PatchWrapperProps {\n children: React.ReactNode;\n isEditing: boolean;\n onStartEdit: () => void;\n onPatch: PatchFunction;\n onCancel: () => void;\n editComponent: EditComponentRenderer;\n editFieldLifecycle?: EditFieldLifecycle;\n id?: string;\n hint?: string;\n validationError?: string;\n isValidating?: boolean;\n}\n\n// Threshold in pixels - if mouse moves more than this, it's a selection not a click\nconst SELECTION_THRESHOLD = 5;\n\nexport const PatchWrapper: React.FC<PatchWrapperProps> = ({\n children,\n isEditing,\n onStartEdit,\n onPatch,\n onCancel,\n editComponent,\n editFieldLifecycle,\n id,\n hint,\n validationError,\n isValidating,\n}) => {\n const [isPatching, setIsPatching] = useState(false);\n const [validationErrors, setValidationErrors] = useState<string[]>([]);\n const [hasUserModified, setHasUserModified] = useState(false);\n const prevIsEditingRef = useRef(isEditing);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const mouseDownPosRef = useRef<{ x: number; y: number } | null>(null);\n\n /**\n * Resets the local state and delegates to the parent's cancel handler.\n * Called when user clicks outside, presses ESC, or clicks the cancel button.\n */\n const handleCancel = useCallback(() => {\n setValidationErrors([]);\n setHasUserModified(false);\n onCancel();\n }, [onCancel]);\n\n // Trigger lifecycle callbacks when entering/exiting edit mode\n useEffect(() => {\n const prevIsEditing = prevIsEditingRef.current;\n prevIsEditingRef.current = isEditing;\n\n // Entering edit mode\n if (isEditing && !prevIsEditing) {\n setValidationErrors([]);\n setHasUserModified(false);\n if (editFieldLifecycle?.onEnterEdit) {\n editFieldLifecycle.onEnterEdit();\n }\n }\n\n // Exiting edit mode\n if (!isEditing && prevIsEditing) {\n setValidationErrors([]);\n setHasUserModified(false);\n if (editFieldLifecycle?.onExitEdit) {\n editFieldLifecycle.onExitEdit();\n }\n }\n }, [isEditing, editFieldLifecycle]);\n\n // Handle click outside and ESC key to cancel\n useEffect(() => {\n if (!isEditing) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n wrapperRef.current &&\n !wrapperRef.current.contains(event.target as Node)\n ) {\n handleCancel();\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n handleCancel();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isEditing, handleCancel]);\n\n /**\n * Submits the current field value to the server via the onPatch callback.\n * Handles loading state, success/error responses, and displays validation errors.\n */\n const handlePatch = async () => {\n setIsPatching(true);\n setHasUserModified(false);\n\n try {\n const result = await onPatch();\n\n if (result.success) {\n setValidationErrors([]);\n // Component will exit edit mode via parent state change\n } else {\n setValidationErrors(result.errors || []);\n }\n } catch (_error) {\n // Handle promise rejection with generic error\n setValidationErrors([\"An unexpected error occurred. Please try again.\"]);\n } finally {\n setIsPatching(false);\n }\n };\n\n /**\n * Tracks when the user starts modifying the field value.\n * Clears any existing validation errors to give the user a fresh start.\n */\n const handleUserModification = () => {\n if (!hasUserModified) {\n setHasUserModified(true);\n setValidationErrors([]); // Clear errors when user starts modifying\n }\n };\n\n if (isEditing) {\n const errorsToShow = hasUserModified ? [] : validationErrors;\n // Determine what message to show in the floating bar (priority: network errors > validation > validating > hint)\n const showNetworkErrors = errorsToShow.length > 0;\n const showValidationError =\n !showNetworkErrors && validationError && !hasUserModified;\n const showValidating =\n !showNetworkErrors && !showValidationError && isValidating;\n const showHint =\n !showNetworkErrors && !showValidationError && !showValidating && hint;\n\n return (\n <div ref={wrapperRef} id={id} className=\"relative\">\n <div onInput={handleUserModification} onChange={handleUserModification}>\n {editComponent(errorsToShow)}\n </div>\n\n {/* Floating action bar with hint/validation/errors */}\n <div className=\"absolute left-0 top-full mt-2 flex items-center gap-2 p-2 bg-muted rounded-lg shadow-xl z-10\">\n <Button variant=\"default\" onClick={handlePatch} disabled={isPatching}>\n {isPatching ? (\n <ActivityIndicator\n size=\"sm\"\n color=\"inherit\"\n aria-label=\"Patching...\"\n />\n ) : (\n <Check className=\"w-4 h-4\" aria-label=\"Apply changes\" />\n )}\n </Button>\n <Button\n variant=\"secondary\"\n onClick={handleCancel}\n disabled={isPatching}\n >\n <X className=\"w-4 h-4\" aria-label=\"Cancel changes\" />\n </Button>\n\n {/* Hint, validation, or error message */}\n {showNetworkErrors && (\n <div className=\"text-destructive text-xs\">\n {errorsToShow.join(\", \")}\n </div>\n )}\n {showValidationError && (\n <div className=\"text-destructive text-xs\">{validationError}</div>\n )}\n {showValidating && (\n <div className=\"text-muted-foreground text-xs\">Validating...</div>\n )}\n {showHint && (\n <div className=\"text-muted-foreground text-xs\">{hint}</div>\n )}\n </div>\n </div>\n );\n }\n\n /**\n * Records the mouse position when the user starts pressing.\n * Used to distinguish between a click and a text selection drag.\n */\n const handleMouseDown = (e: React.MouseEvent) => {\n mouseDownPosRef.current = { x: e.clientX, y: e.clientY };\n };\n\n /**\n * Determines whether the user clicked or dragged to select text.\n * If the mouse moved less than SELECTION_THRESHOLD pixels, it's a click and we enter edit mode.\n * If the mouse moved more, the user is selecting text, so we don't enter edit mode.\n * This mimics Jira's inline edit behavior.\n */\n const handleMouseUp = (e: React.MouseEvent) => {\n if (!mouseDownPosRef.current) return;\n\n const deltaX = Math.abs(e.clientX - mouseDownPosRef.current.x);\n const deltaY = Math.abs(e.clientY - mouseDownPosRef.current.y);\n const didMove =\n deltaX > SELECTION_THRESHOLD || deltaY > SELECTION_THRESHOLD;\n\n mouseDownPosRef.current = null;\n\n // Only enter edit mode if it was a click (no significant mouse movement)\n if (!didMove) {\n onStartEdit();\n }\n };\n\n // Using div instead of button to allow text selection while still supporting click-to-edit\n return (\n // biome-ignore lint/a11y/useSemanticElements: div required for text selection, button would prevent it\n <div\n className=\"w-full text-left cursor-text rounded hover:bg-muted transition-colors duration-200 select-text\"\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n role=\"button\"\n tabIndex={0}\n aria-label=\"Click to edit\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n onStartEdit();\n }\n }}\n id={id}\n >\n {children}\n </div>\n );\n};\n","import type { BaseSchema, SchemaMetadata } from \"@nubase/core\";\nimport type { AnyFieldApi } from \"@tanstack/react-form\";\nimport { FormControl } from \"../../form-controls/FormControl/FormControl\";\nimport { BooleanEditFieldRenderer } from \"../renderers/boolean/BooleanEditFieldRenderer\";\nimport { BooleanViewFieldRenderer } from \"../renderers/boolean/BooleanViewFieldRenderer\";\nimport { MultilineEditFieldRenderer } from \"../renderers/multiline/MultilineEditFieldRenderer\";\nimport { MultilineViewFieldRenderer } from \"../renderers/multiline/MultilineViewFieldRenderer\";\nimport { NumberEditFieldRenderer } from \"../renderers/number/NumberEditFieldRenderer\";\nimport { NumberViewFieldRenderer } from \"../renderers/number/NumberViewFieldRenderer\";\nimport { StringEditFieldRenderer } from \"../renderers/string/StringEditFieldRenderer\";\nimport { StringViewFieldRenderer } from \"../renderers/string/StringViewFieldRenderer\";\nimport type {\n EditFieldRenderer,\n EditFieldRendererMap,\n ViewFieldRenderer,\n ViewFieldRendererMap,\n} from \"../renderers/types\";\nimport { UnsupportedEditFieldRenderer } from \"../renderers/unsupported/UnsupportedEditFieldRenderer\";\nimport { UnsupportedViewFieldRenderer } from \"../renderers/unsupported/UnsupportedViewFieldRenderer\";\nimport { type PatchResult, PatchWrapper } from \"./PatchWrapper\";\n\n// Renderers by custom renderer name (from metadata.renderer)\n// Note: If a view renderer is not defined for a custom renderer name,\n// the system will fall back to the type-based renderer\nconst viewRenderersByName: Record<string, ViewFieldRenderer> = {\n multiline: MultilineViewFieldRenderer,\n};\n\nconst editRenderersByName: Record<string, EditFieldRenderer> = {\n multiline: MultilineEditFieldRenderer,\n};\n\n// Renderers by schema type\nconst viewFieldRenderers: ViewFieldRendererMap = {\n string: StringViewFieldRenderer,\n number: NumberViewFieldRenderer,\n boolean: BooleanViewFieldRenderer,\n};\n\nconst editFieldRenderers: EditFieldRendererMap = {\n string: StringEditFieldRenderer,\n number: NumberEditFieldRenderer,\n boolean: BooleanEditFieldRenderer,\n};\n\nconst unsupportedViewRenderer = UnsupportedViewFieldRenderer;\nconst unsupportedEditRenderer: EditFieldRenderer = UnsupportedEditFieldRenderer;\n\n/**\n * Resolves the appropriate edit renderer based on priority:\n * 1. Custom renderer from metadata.renderer\n * 2. Type-based renderer from schema.type\n * 3. Unsupported fallback\n */\nconst resolveEditRenderer = (\n rendererName: string | undefined,\n schemaType: string,\n): EditFieldRenderer => {\n if (rendererName && editRenderersByName[rendererName]) {\n return editRenderersByName[rendererName];\n }\n if (editFieldRenderers[schemaType]) {\n return editFieldRenderers[schemaType];\n }\n return unsupportedEditRenderer;\n};\n\n/**\n * Resolves the appropriate view renderer based on priority:\n * 1. Custom renderer from metadata.renderer\n * 2. Type-based renderer from schema.type\n * 3. Unsupported fallback\n */\nconst resolveViewRenderer = (\n rendererName: string | undefined,\n schemaType: string,\n): ViewFieldRenderer => {\n if (rendererName && viewRenderersByName[rendererName]) {\n return viewRenderersByName[rendererName];\n }\n if (viewFieldRenderers[schemaType]) {\n return viewFieldRenderers[schemaType];\n }\n return unsupportedViewRenderer;\n};\n\nexport interface EditFieldLifecycle {\n onEnterEdit?: () => void;\n onExitEdit?: () => void;\n}\n\nexport interface FormFieldRendererContext {\n schema: BaseSchema<any>;\n fieldState: AnyFieldApi;\n metadata: SchemaMetadata<any>;\n hasError: boolean;\n isRequired: boolean;\n}\n\nexport interface PatchContext extends FormFieldRendererContext {\n isPatching: boolean;\n onStartPatch: () => void;\n onApplyPatch: () => Promise<PatchResult>;\n onCancelPatch: () => void;\n editFieldLifecycle?: EditFieldLifecycle;\n validationError?: string;\n isValidating?: boolean;\n}\n\n/**\n * Creates the raw edit field element (without FormControl wrapper).\n * Used internally by the wrapped renderers.\n */\nconst createRawEditRenderer = (context: FormFieldRendererContext) => {\n const renderer = resolveEditRenderer(\n context.metadata.renderer,\n context.schema.type,\n );\n return renderer({\n schema: context.schema,\n fieldState: context.fieldState,\n hasError: context.hasError,\n metadata: context.metadata,\n });\n};\n\n/**\n * Creates the raw view field element (without FormControl wrapper).\n * Used internally by the wrapped renderers.\n */\nconst createRawViewRenderer = (context: FormFieldRendererContext) => {\n const renderer = resolveViewRenderer(\n context.metadata.renderer,\n context.schema.type,\n );\n return renderer({\n schema: context.schema,\n fieldState: context.fieldState,\n metadata: context.metadata,\n });\n};\n\n/**\n * Creates an edit field wrapped in FormControl with label, hint, and validation.\n */\nexport const createEditRenderer = (context: FormFieldRendererContext) => {\n const result = createRawEditRenderer(context);\n\n const element = (\n <FormControl\n label={context.metadata.label}\n hint={context.metadata.description}\n field={context.fieldState}\n required={context.isRequired}\n >\n {result.element}\n </FormControl>\n );\n\n return { element, lifecycle: result.lifecycle };\n};\n\n/**\n * Creates a view field wrapped in FormControl with label only (no hint/validation).\n */\nexport const createViewRenderer = (context: FormFieldRendererContext) => {\n const viewElement = createRawViewRenderer(context);\n\n return (\n <FormControl label={context.metadata.label} required={context.isRequired}>\n {viewElement}\n </FormControl>\n );\n};\n\n/**\n * Creates a patch field with:\n * - View mode: Label + view element (no hint)\n * - Edit mode: Label + edit element + floating action bar with hint/validation\n */\nexport const createPatchRenderer = (context: PatchContext) => {\n const viewElement = createRawViewRenderer(context);\n const editResult = createRawEditRenderer(context);\n\n // Use FormControl for layout (label + field), but don't pass hint/field\n // so it won't render hint/validation - PatchWrapper handles those in the floating bar\n return (\n <FormControl label={context.metadata.label} required={context.isRequired}>\n <PatchWrapper\n isEditing={context.isPatching}\n onStartEdit={context.onStartPatch}\n onPatch={context.onApplyPatch}\n onCancel={context.onCancelPatch}\n editComponent={(_errors) => editResult.element}\n editFieldLifecycle={editResult.lifecycle}\n id={context.fieldState.name}\n hint={context.metadata.description}\n validationError={context.validationError}\n isValidating={context.isValidating}\n >\n {viewElement}\n </PatchWrapper>\n </FormControl>\n );\n};\n\nexport const createFieldRenderer = (\n mode: string,\n context: FormFieldRendererContext,\n patchContext?: Partial<PatchContext>,\n) => {\n switch (mode) {\n case \"edit\":\n return createEditRenderer(context).element;\n case \"view\":\n return createViewRenderer(context);\n case \"patch\":\n if (!patchContext)\n throw new Error(\"Patch context required for patch mode\");\n return createPatchRenderer({\n ...context,\n ...patchContext,\n } as PatchContext);\n default:\n return createEditRenderer(context).element;\n }\n};\n","import type { FormLayoutField, Layout, ObjectShape } from \"@nubase/core\";\nimport type React from \"react\";\n\nexport interface SchemaFormVerticalLayoutProps<\n TShape extends ObjectShape = any,\n> {\n layout: Layout<TShape>;\n renderField: (field: FormLayoutField<TShape>) => React.ReactNode;\n}\n\nexport const SchemaFormVerticalLayout = <TShape extends ObjectShape = any>({\n layout,\n renderField,\n}: SchemaFormVerticalLayoutProps<TShape>) => {\n return (\n <div className={`layout-${layout.type} ${layout.className || \"\"}`}>\n {layout.groups.map((group, groupIndex) => (\n <div key={groupIndex} className={`form-group ${group.className || \"\"}`}>\n {group.label && (\n <h3 className=\"text-lg font-medium mb-3 text-foreground bg-background py-2 rounded\">\n {group.label}\n </h3>\n )}\n {group.description && (\n <p className=\"text-sm text-muted-foreground mb-3\">\n {group.description}\n </p>\n )}\n <div>\n {group.fields\n .filter((field) => !field.hidden)\n .map((field, fieldIndex, visibleFields) => (\n <div key={String(field.name)}>\n <div className={`w-full ${field.className || \"\"}`}>\n {renderField(field)}\n </div>\n {fieldIndex < visibleFields.length - 1 && (\n // This is the separator between fields\n <div className=\"border-t border-border my-2\" />\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../styling/cn\";\n\nconst buttonBarVariants = cva(\"flex gap-3 p-3\", {\n variants: {\n alignment: {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n },\n variant: {\n transparent: \"\",\n muted: \"bg-muted rounded-lg\",\n },\n },\n defaultVariants: {\n alignment: \"right\",\n variant: \"transparent\",\n },\n});\n\nexport interface ButtonBarProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof buttonBarVariants> {}\n\nconst ButtonBar = forwardRef<HTMLDivElement, ButtonBarProps>(\n ({ className, alignment, variant, children, ...props }, ref) => {\n return (\n <div\n className={cn(buttonBarVariants({ alignment, variant }), className)}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nButtonBar.displayName = \"ButtonBar\";\n\nexport { ButtonBar, buttonBarVariants };\n","import type React from \"react\";\nimport type { SchemaFormConfiguration } from \"../../../hooks\";\nimport { Button } from \"../../buttons/Button/Button\";\nimport { ButtonBar } from \"../../buttons/ButtonBar/ButtonBar\";\n\nexport interface SchemaFormButtonBarProps {\n form: SchemaFormConfiguration<any>;\n submitText?: string;\n isComputing?: boolean;\n className?: string;\n alignment?: \"left\" | \"center\" | \"right\";\n variant?: \"transparent\" | \"muted\";\n}\n\n// ButtonBar component\nexport const SchemaFormButtonBar: React.FC<SchemaFormButtonBarProps> = ({\n form,\n submitText = \"Submit\",\n isComputing,\n className,\n alignment,\n variant,\n}) => {\n return (\n <form.api.Subscribe\n selector={(state) => [\n state.canSubmit,\n state.isSubmitting,\n state.isValidating,\n state.errors,\n ]}\n >\n {([canSubmit, isSubmitting, _isValidating, _errors]) => (\n <ButtonBar\n alignment={alignment}\n className={className}\n variant={variant || \"transparent\"}\n >\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n isLoading={Boolean(isSubmitting || isComputing)}\n data-testid=\"form-submit-button\"\n >\n {isSubmitting\n ? \"Submitting...\"\n : isComputing\n ? \"Computing...\"\n : submitText}\n </Button>\n </ButtonBar>\n )}\n </form.api.Subscribe>\n );\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type React from \"react\";\n\nconst calloutVariants = cva(\n \"rounded-md px-4 py-3 text-sm flex items-start gap-3\",\n {\n variants: {\n variant: {\n info: \"bg-muted text-foreground\",\n danger: \"bg-destructive/10 text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n },\n);\n\nexport interface CalloutProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof calloutVariants> {\n /** The content to display in the callout */\n children: React.ReactNode;\n /** Optional icon to display */\n icon?: React.ReactNode;\n}\n\nexport const Callout: React.FC<CalloutProps> = ({\n className,\n variant,\n children,\n icon,\n ...props\n}) => {\n const defaultIcon =\n variant === \"danger\" ? (\n <svg\n className=\"h-5 w-5 flex-shrink-0 mt-0.5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ) : (\n <svg\n className=\"h-5 w-5 flex-shrink-0 mt-0.5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n\n return (\n <div className={calloutVariants({ variant, className })} {...props}>\n {icon || defaultIcon}\n <div className=\"flex-1\">{children}</div>\n </div>\n );\n};\n","import type { ReactFormExtendedApi } from \"@tanstack/react-form\";\nimport type React from \"react\";\nimport { Callout } from \"../../callout/Callout\";\n\nexport type FormValidationErrorsProps = {\n form: ReactFormExtendedApi<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >;\n className?: string;\n testId?: string;\n};\n\n/**\n * Extracts the error message from onSubmit error which can be:\n * - A string (from validators)\n * - A GlobalFormValidationError object with { form?: string, fields: {} }\n * - undefined/null\n */\nfunction extractErrorMessage(onSubmitError: unknown): string | string[] | null {\n if (!onSubmitError) return null;\n\n // Handle GlobalFormValidationError format: { form: \"message\", fields: {} }\n if (\n typeof onSubmitError === \"object\" &&\n \"form\" in onSubmitError &&\n onSubmitError.form\n ) {\n const formError = onSubmitError.form;\n if (typeof formError === \"string\") return formError;\n if (Array.isArray(formError)) return formError;\n }\n\n // Handle direct string/string array\n if (typeof onSubmitError === \"string\") return onSubmitError;\n if (Array.isArray(onSubmitError)) return onSubmitError;\n\n return null;\n}\n\n/**\n * Component to display form-level validation errors.\n * Subscribes to form state and displays onSubmit errors.\n */\nexport const FormValidationErrors: React.FC<FormValidationErrorsProps> = ({\n form,\n className = \"\",\n testId,\n}) => {\n return (\n <form.Subscribe selector={(state) => [state.errorMap]}>\n {([errorMap]) => {\n const errors = extractErrorMessage(errorMap?.onSubmit);\n\n if (!errors) return null;\n\n const errorArray = Array.isArray(errors) ? errors : [errors];\n\n if (errorArray.length === 0) return null;\n\n return (\n <Callout variant=\"danger\" className={className} data-testid={testId}>\n {errorArray.length === 1 ? (\n errorArray[0]\n ) : (\n <ul className=\"list-disc list-inside space-y-1\">\n {errorArray.map((error, index) => (\n <li key={index}>{error}</li>\n ))}\n </ul>\n )}\n </Callout>\n );\n }}\n </form.Subscribe>\n );\n};\n","import type React from \"react\";\nimport type { SchemaFormConfiguration } from \"../../../hooks\";\nimport { FormValidationErrors } from \"../FormValidationErrors\";\n\nexport type SchemaFormValidationErrorsProps = {\n form: SchemaFormConfiguration<any>;\n className?: string;\n};\n\n/**\n * Component to display form-level validation errors for SchemaForm.\n * Only renders in edit/create modes, not in view mode.\n */\nexport const SchemaFormValidationErrors: React.FC<\n SchemaFormValidationErrorsProps\n> = ({ form, className = \"\" }) => {\n const { mode } = form;\n\n if (mode === \"view\") return null;\n\n return <FormValidationErrors form={form.api} className={className} />;\n};\n","import type { FC, ReactNode } from \"react\";\n\nexport type ModalFrameStructuredProps = {\n onClose?: () => void;\n header?: ReactNode;\n body?: ReactNode;\n footer?: ReactNode;\n className?: string;\n};\n\nexport const ModalFrameStructured: FC<ModalFrameStructuredProps> = ({\n header,\n body,\n footer,\n className = \"\",\n}) => {\n return (\n <div\n className={`rounded-lg bg-card border shadow-sm flex flex-col overflow-hidden ${className}`}\n style={{ maxHeight: \"calc(100vh - 2rem)\" }}\n >\n {header && <div className=\"flex-shrink-0 p-4 pb-3\">{header}</div>}\n\n {body && (\n <div\n className={`flex-1 overflow-y-auto min-h-0 pb-4 ${!header ? \"p-4\" : \"px-4\"}`}\n >\n {body}\n </div>\n )}\n\n {footer && <div className=\"flex-shrink-0 border-t\">{footer}</div>}\n </div>\n );\n};\n","import type { ObjectSchema } from \"@nubase/core\";\nimport type { FC, ReactNode } from \"react\";\nimport type { SchemaFormConfiguration } from \"../../../hooks\";\nimport { SchemaForm } from \"../../form/SchemaForm/SchemaForm\";\nimport {\n SchemaFormBody,\n type SchemaFormBodyProps,\n} from \"../../form/SchemaForm/SchemaFormBody\";\nimport { SchemaFormButtonBar } from \"../../form/SchemaForm/SchemaFormButtonBar\";\nimport { SchemaFormValidationErrors } from \"../../form/SchemaForm/SchemaFormValidationErrors\";\nimport { ModalFrameStructured } from \"./ModalFrameStructured\";\n\nexport type ModalFrameSchemaFormProps<TSchema extends ObjectSchema<any>> = {\n onClose?: () => void;\n title?: ReactNode;\n form: SchemaFormConfiguration<TSchema>;\n schemaFormProps?: Omit<SchemaFormBodyProps, \"form\">;\n submitText?: string;\n renderCustomFooter?: (form: SchemaFormConfiguration<TSchema>) => ReactNode;\n className?: string;\n};\n\nexport const ModalFrameSchemaForm = <TSchema extends ObjectSchema<any>>({\n onClose,\n title,\n form,\n schemaFormProps,\n submitText = \"Submit\",\n renderCustomFooter,\n className,\n}: ModalFrameSchemaFormProps<TSchema>): ReturnType<FC> => {\n return (\n <SchemaForm form={form}>\n <ModalFrameStructured\n onClose={onClose}\n className={className}\n header={\n title ? (\n <h2 className=\"text-lg font-semibold text-foreground\">{title}</h2>\n ) : undefined\n }\n body={\n <>\n <SchemaFormBody\n form={form}\n className=\"h-full\"\n {...schemaFormProps}\n />\n <SchemaFormValidationErrors form={form} className=\"mt-4\" />\n </>\n }\n footer={\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex-1\">{renderCustomFooter?.(form)}</div>\n <div className=\"flex-shrink-0\">\n <SchemaFormButtonBar\n form={form}\n submitText={submitText}\n alignment=\"right\"\n variant=\"transparent\"\n />\n </div>\n </div>\n }\n />\n </SchemaForm>\n );\n};\n","import {\n createContext,\n type FC,\n type ReactNode,\n useCallback,\n useContext,\n useRef,\n useState,\n} from \"react\";\nimport { Modal } from \"./Modal\";\nimport type { ModalConfig, ModalInstance } from \"./types\";\n\ntype ModalContextType = {\n openModal: (config: ModalConfig) => string;\n closeModal: (id?: string) => void;\n closeAllModals: () => void;\n modals: ModalInstance[];\n};\n\nexport const ModalContext = createContext<ModalContextType | null>(null);\n\nexport const ModalProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [modals, setModals] = useState<ModalInstance[]>([]);\n\n const openModal = useCallback((config: ModalConfig) => {\n const id = Math.random().toString(36).substr(2, 9);\n const newModal: ModalInstance = {\n id,\n config,\n };\n\n setModals((prev) => [...prev, newModal]);\n return id;\n }, []);\n\n const closeModal = useCallback((id?: string) => {\n setModals((prev) => {\n if (id) {\n return prev.filter((modal) => modal.id !== id);\n }\n return prev.slice(0, -1);\n });\n }, []);\n\n const closeAllModals = useCallback(() => {\n setModals([]);\n }, []);\n\n const handleModalClose = useCallback(\n (modalId: string) => {\n const modal = modals.find((m) => m.id === modalId);\n if (modal?.config.onDismiss) {\n modal.config.onDismiss();\n }\n closeModal(modalId);\n },\n [closeModal, modals],\n );\n\n return (\n <ModalContext.Provider\n value={{\n openModal,\n closeModal,\n closeAllModals,\n modals,\n }}\n >\n {children}\n {modals.map((modal, index) => {\n const { content, ...modalProps } = modal.config;\n return (\n <Modal\n key={modal.id}\n open={true}\n onClose={() => handleModalClose(modal.id)}\n content={content}\n zIndex={(modalProps.zIndex || 50) + index}\n {...modalProps}\n />\n );\n })}\n </ModalContext.Provider>\n );\n};\n\nexport type UseModalResult = {\n openModal: (config: ModalConfig) => string;\n closeModal: (id?: string) => void;\n closeAllModals: () => void;\n modalCount: number;\n};\n\nexport const useModal = (): UseModalResult => {\n const context = useContext(ModalContext);\n if (!context) {\n throw new Error(\"useModal must be used within a ModalProvider\");\n }\n\n const { openModal, closeModal, closeAllModals, modals } = context;\n const modalApiRef = useRef<UseModalResult | null>(null);\n\n if (!modalApiRef.current) {\n modalApiRef.current = {\n openModal,\n closeModal,\n closeAllModals,\n modalCount: modals.length,\n };\n } else {\n modalApiRef.current.openModal = openModal;\n modalApiRef.current.closeModal = closeModal;\n modalApiRef.current.closeAllModals = closeAllModals;\n modalApiRef.current.modalCount = modals.length;\n }\n\n return modalApiRef.current;\n};\n","import {\n forwardRef,\n type RefObject,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { MenuItem } from \"../../../menu/types\";\nimport { SearchTextInput } from \"../../form-controls/controls/SearchTextInput/SearchTextInput\";\nimport { TreeNavigator } from \"./TreeNavigator\";\n\nexport type SearchableTreeNavigatorProps = {\n items: MenuItem[];\n placeHolder: string;\n height?: \"full\" | number | string;\n /** Test ID for the navigator container */\n \"data-testid\"?: string;\n};\n\nexport const SearchableTreeNavigator = forwardRef<\n HTMLInputElement,\n SearchableTreeNavigatorProps\n>((props, ref) => {\n const internalRef = useRef<HTMLInputElement>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n // Expose the internal ref through the forwarded ref\n useImperativeHandle(ref, () => internalRef.current as HTMLInputElement, []);\n\n // Focus the search input when the component comes into view.\n // We use a double requestAnimationFrame to ensure focus happens after any\n // HeadlessUI focus restoration from a previous modal closing.\n //\n // The problem: When a user clicks an item in a modal (e.g., \"Set Theme\" in the\n // command palette), the click handler closes the current modal and opens a new one.\n // HeadlessUI's Dialog restores focus to where it was before the modal opened,\n // which can race with our focus() call. A single rAF isn't enough because:\n // 1st rAF: React has rendered, but HeadlessUI focus trap may still be initializing\n // 2nd rAF: HeadlessUI has completed its focus management, we can safely focus\n //\n // This ensures keyboard navigation works whether the modal was opened via\n // keyboard shortcut (Cmd+K) or mouse click.\n useEffect(() => {\n const focusInput = () => {\n if (internalRef.current) {\n internalRef.current.focus();\n }\n };\n requestAnimationFrame(() => {\n requestAnimationFrame(focusInput);\n });\n }, []);\n\n // Filter items based on search query (flattens tree structure for search)\n const filteredItems = useMemo(() => {\n if (!searchQuery.trim()) {\n return props.items;\n }\n\n const query = searchQuery.toLowerCase();\n\n const flattenAndFilter = (items: MenuItem[]): MenuItem[] => {\n const result: MenuItem[] = [];\n\n for (const item of items) {\n const matchesSearch =\n item.label?.toLowerCase().includes(query) ||\n item.subtitle?.toLowerCase().includes(query);\n\n if (matchesSearch) {\n result.push({ ...item, children: undefined }); // Remove children for search results\n }\n\n if (item.children) {\n result.push(...flattenAndFilter(item.children));\n }\n }\n\n return result;\n };\n\n return flattenAndFilter(props.items);\n }, [props.items, searchQuery]);\n\n // Calculate container height and styles\n const getContainerStyle = () => {\n if (props.height === \"full\") {\n return { height: \"100%\" };\n }\n if (typeof props.height === \"number\") {\n return { height: `${props.height}px` };\n }\n if (typeof props.height === \"string\") {\n return { height: props.height };\n }\n return {};\n };\n\n const testId = props[\"data-testid\"];\n\n return (\n <div\n className={props.height ? \"flex flex-col gap-2\" : \"space-y-2\"}\n style={getContainerStyle()}\n data-testid={testId}\n >\n {/* Search Input - Always visible */}\n <div className=\"flex-shrink-0\">\n <SearchTextInput\n ref={internalRef}\n placeholder={props.placeHolder}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n data-testid={testId ? `${testId}-search` : undefined}\n />\n </div>\n\n {/* Navigator List - Scrollable */}\n <div className={props.height ? \"flex-1 overflow-y-auto min-h-0\" : \"\"}>\n <TreeNavigator\n items={filteredItems}\n searchInputRef={internalRef as RefObject<HTMLInputElement>}\n data-testid={testId ? `${testId}-list` : undefined}\n />\n </div>\n </div>\n );\n});\n\nSearchableTreeNavigator.displayName = \"SearchableTreeNavigator\";\n\n// Backward compatibility export\nexport const SearchableListNavigator = SearchableTreeNavigator;\nexport type SearchableListNavigatorProps = SearchableTreeNavigatorProps;\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Search } from \"lucide-react\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../../styling/cn\";\n\nconst searchTextInputVariants = cva(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent pl-10 pr-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n);\n\nexport interface SearchTextInputProps\n extends Omit<React.ComponentProps<\"input\">, \"size\">,\n VariantProps<typeof searchTextInputVariants> {\n hasError?: boolean;\n}\n\nconst SearchTextInput = forwardRef<HTMLInputElement, SearchTextInputProps>(\n ({ className, type = \"search\", hasError, ...props }, ref) => {\n return (\n <div className=\"relative\">\n <input\n ref={ref}\n type={type}\n data-slot=\"input\"\n aria-invalid={hasError}\n className={cn(searchTextInputVariants({ className }))}\n {...props}\n />\n <div className=\"absolute top-1/2 left-3 transform -translate-y-1/2 text-muted-foreground pointer-events-none\">\n <Search className=\"h-4 w-4\" />\n </div>\n </div>\n );\n },\n);\n\nSearchTextInput.displayName = \"SearchTextInput\";\n\nexport { SearchTextInput, searchTextInputVariants };\n","import type { RefObject } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { MenuItem } from \"../../../menu/types\";\nimport { type FlatMenuItem, MenuItemComponent } from \"./TreeNavigatorItem\";\n\nexport interface TreeNavigatorProps {\n items: MenuItem[];\n searchInputRef?: RefObject<HTMLInputElement>;\n selectedItemId?: string;\n onSelectionChange?: (itemId: string) => void;\n /** Test ID for the navigator container */\n \"data-testid\"?: string;\n}\n\nconst TreeNavigatorComponent = ({\n items,\n searchInputRef,\n \"data-testid\": testId,\n}: TreeNavigatorProps) => {\n const [selectedIndex, setSelectedIndex] = useState(-1);\n const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n // Flatten tree structure for keyboard navigation\n const flattenItems = useCallback(\n (items: MenuItem[], level = 0, parentId?: string): FlatMenuItem[] => {\n const result: FlatMenuItem[] = [];\n\n for (const item of items) {\n const hasChildren = Boolean(item.children?.length);\n const isExpanded = expandedItems.has(item.id);\n\n result.push({\n ...item,\n level,\n parentId,\n hasChildren,\n isExpanded,\n });\n\n if (hasChildren && isExpanded && item.children) {\n result.push(...flattenItems(item.children, level + 1, item.id));\n }\n }\n\n return result;\n },\n [expandedItems],\n );\n\n const flatItems = flattenItems(items);\n const itemsLength = flatItems.length;\n\n const toggleExpanded = useCallback((itemId: string) => {\n setExpandedItems((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(itemId)) {\n newSet.delete(itemId);\n } else {\n newSet.add(itemId);\n }\n return newSet;\n });\n }, []);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!itemsLength) return;\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setSelectedIndex((prev) =>\n prev === -1 ? 0 : (prev + 1) % itemsLength,\n );\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setSelectedIndex((prev) =>\n prev === -1\n ? itemsLength - 1\n : (prev - 1 + itemsLength) % itemsLength,\n );\n } else if (selectedIndex >= 0) {\n // Only handle other keys if an item is selected\n const currentItem = flatItems[selectedIndex];\n\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n if (currentItem?.hasChildren && !currentItem.isExpanded) {\n toggleExpanded(currentItem.id);\n }\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n if (currentItem?.hasChildren && currentItem.isExpanded) {\n toggleExpanded(currentItem.id);\n }\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n if (currentItem?.hasChildren) {\n toggleExpanded(currentItem.id);\n } else {\n currentItem?.onExecute?.();\n }\n }\n }\n },\n [flatItems, selectedIndex, itemsLength, toggleExpanded],\n );\n\n useEffect(() => {\n const searchInput = searchInputRef?.current;\n if (searchInput) {\n searchInput.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n searchInput.removeEventListener(\"keydown\", handleKeyDown);\n };\n }\n }, [handleKeyDown, searchInputRef]);\n\n useEffect(() => {\n if (selectedIndex >= 0) {\n const currentItem = itemRefs.current[selectedIndex];\n if (currentItem) {\n currentItem.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n // Call onFocus when item gets selected via keyboard\n flatItems[selectedIndex]?.onFocus?.();\n }\n }, [selectedIndex, flatItems]);\n\n useEffect(() => {\n if (selectedIndex >= itemsLength && itemsLength > 0) {\n setSelectedIndex(-1);\n }\n }, [selectedIndex, itemsLength]);\n\n if (!items.length) {\n return (\n <div className=\"py-8 text-center text-sm text-text-muted\">\n No items found\n </div>\n );\n }\n\n return (\n <div className=\"space-y-1\" data-testid={testId}>\n {flatItems.map((item, index) => (\n <MenuItemComponent\n key={item.id}\n item={item}\n index={index}\n isSelected={selectedIndex >= 0 && index === selectedIndex}\n onToggleExpanded={toggleExpanded}\n itemRef={(el) => {\n itemRefs.current[index] = el;\n }}\n data-testid={testId ? `${testId}-item-${item.id}` : undefined}\n />\n ))}\n </div>\n );\n};\n\n// Export both names for backward compatibility and new functionality\nexport const TreeNavigator = TreeNavigatorComponent;\n/** @deprecated Use TreeNavigator instead */\nexport const ListNavigator = TreeNavigatorComponent;\n/** @deprecated Use MenuItem from '../../menu/types' instead */\nexport type ListNavigatorItem = MenuItem;\nexport type ListNavigatorProps = TreeNavigatorProps;\n\n// Re-export types from TreeNavigatorItem for backward compatibility\nexport type {\n FlatItem,\n FlatMenuItem,\n TreeNavigatorItem,\n} from \"./TreeNavigatorItem\";\n","import { Link } from \"@tanstack/react-router\";\nimport { ChevronRight } from \"lucide-react\";\nimport {\n isResourceLink,\n resolveResourceLink,\n} from \"../../../config/resource-link\";\nimport { useWorkspaceOptional } from \"../../../context/WorkspaceContext\";\nimport type { MenuItem } from \"../../../menu/types\";\nimport { cn } from \"../../../styling/cn\";\n\n/**\n * Internal flattened representation of a MenuItem for rendering.\n * Adds hierarchy metadata needed for tree display.\n */\nexport interface FlatMenuItem extends MenuItem {\n level: number;\n parentId?: string;\n isExpanded?: boolean;\n hasChildren: boolean;\n}\n\ninterface MenuItemComponentProps {\n item: FlatMenuItem;\n index: number;\n isSelected: boolean;\n onToggleExpanded: (itemId: string) => void;\n itemRef: (el: HTMLButtonElement | null) => void;\n \"data-testid\"?: string;\n}\n\nexport const MenuItemComponent = ({\n item,\n isSelected,\n onToggleExpanded,\n itemRef,\n \"data-testid\": testId,\n}: MenuItemComponentProps) => {\n const workspace = useWorkspaceOptional();\n\n const handleClick = () => {\n if (item.hasChildren) {\n onToggleExpanded(item.id);\n } else if (item.onExecute) {\n item.onExecute();\n }\n };\n\n // Build workspace-aware href if workspace is available\n const resolvedHref = (() => {\n if (!item.href) return undefined;\n\n // Handle ResourceLink objects\n if (isResourceLink(item.href)) {\n return resolveResourceLink(item.href, workspace?.slug);\n }\n\n // Handle string hrefs\n if (!workspace?.slug) return item.href;\n // If href already starts with /$workspace pattern, use as-is\n if (item.href.startsWith(`/${workspace.slug}`)) return item.href;\n // Prepend workspace to relative paths that look like resource/view paths\n if (item.href.startsWith(\"/r/\") || item.href.startsWith(\"/v/\")) {\n return `/${workspace.slug}${item.href}`;\n }\n // For other paths starting with /, prepend workspace\n if (item.href.startsWith(\"/\")) {\n return `/${workspace.slug}${item.href}`;\n }\n return item.href;\n })();\n\n // Get search params from ResourceLink if applicable\n const searchParams = isResourceLink(item.href) ? item.href.search : undefined;\n\n const commonClassName = cn(\n \"flex items-center gap-3 rounded-md py-2 pr-3 text-sm cursor-pointer w-full text-left transition-colors\",\n isSelected\n ? \"bg-primary text-primary-foreground\"\n : \"hover:bg-muted hover:text-muted-foreground\",\n );\n\n const commonStyle = { paddingLeft: `${12 + item.level * 16}px` };\n\n // Instantiate icon if it's a component type\n const IconComponent = item.icon;\n const iconElement = IconComponent ? (\n <IconComponent size={16} className=\"flex-shrink-0\" />\n ) : null;\n\n const content = (\n <>\n {iconElement && <div className=\"flex-shrink-0\">{iconElement}</div>}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">{item.label}</div>\n {item.subtitle && (\n <div\n className={cn(\n \"text-xs truncate\",\n isSelected ? \"text-primary-foreground/80\" : \"text-text-muted\",\n )}\n >\n {item.subtitle}\n </div>\n )}\n </div>\n {item.hasChildren && (\n <div className=\"flex-shrink-0\">\n <div className=\"w-4 h-4 flex items-center justify-center\">\n <ChevronRight\n size={12}\n className={cn(\n \"transition-transform\",\n item.isExpanded ? \"rotate-90\" : \"rotate-0\",\n )}\n />\n </div>\n </div>\n )}\n </>\n );\n\n // Use Link for href navigation, button for everything else\n if (resolvedHref && !item.hasChildren) {\n return (\n <Link\n key={item.id}\n ref={itemRef as any}\n to={resolvedHref}\n search={searchParams}\n className={commonClassName}\n style={commonStyle}\n data-testid={testId}\n >\n {content}\n </Link>\n );\n }\n\n return (\n <button\n key={item.id}\n ref={itemRef}\n type=\"button\"\n className={commonClassName}\n style={commonStyle}\n onClick={handleClick}\n data-testid={testId}\n >\n {content}\n </button>\n );\n};\n\n// Legacy exports for backward compatibility during migration\n// TODO: Remove these after full migration\n/** @deprecated Use MenuItem from '../../menu/types' instead */\nexport type TreeNavigatorItem = MenuItem;\n/** @deprecated Use FlatMenuItem instead */\nexport type FlatItem = FlatMenuItem;\n/** @deprecated Use MenuItemComponent instead */\nexport const TreeNavigatorItemComponent = MenuItemComponent;\n","import type { ResourceDescriptor } from \"./resource\";\n\n/**\n * A type-safe link to a resource view.\n *\n * ResourceLink objects are resolved at runtime to include the current workspace.\n * This enables type-safe navigation to resource views without hardcoding paths.\n *\n * @example\n * ```typescript\n * // Create a link to the ticket search view\n * const link = resourceLink(ticketResource, \"search\");\n *\n * // Use in menu configuration\n * mainMenu: [\n * { id: \"tickets\", label: \"Tickets\", href: resourceLink(ticketResource, \"search\") }\n * ]\n * ```\n */\nexport interface ResourceLink<\n TResourceId extends string = string,\n TViewName extends string = string,\n> {\n /** Discriminator for identifying ResourceLink objects */\n readonly __type: \"resourceLink\";\n /** The resource ID (e.g., \"ticket\") */\n readonly resourceId: TResourceId;\n /** The view name on the resource (e.g., \"search\", \"create\", \"view\") */\n readonly viewName: TViewName;\n /** Optional search params to include in the URL */\n readonly search?: Record<string, unknown>;\n}\n\n/**\n * Creates a type-safe link to a resource view.\n *\n * The link is resolved at runtime to include the current workspace prefix.\n * This ensures links work correctly across different workspaces without\n * hardcoding the workspace slug.\n *\n * @param resource - The resource descriptor containing the view\n * @param viewName - The name of the view to link to (type-safe based on resource's views)\n * @param search - Optional search parameters to include in the URL\n * @returns A ResourceLink object that can be used as a MenuItem href\n *\n * @example\n * ```typescript\n * const ticketResource = createResource(\"ticket\")\n * .withViews({\n * search: { type: \"resource-search\", ... },\n * create: { type: \"resource-create\", ... },\n * view: { type: \"resource-view\", ... }\n * });\n *\n * // Type-safe: only \"search\", \"create\", or \"view\" are valid\n * resourceLink(ticketResource, \"search\")\n *\n * // With search params\n * resourceLink(ticketResource, \"view\", { id: 123 })\n *\n * // TypeScript error: \"invalid\" is not a valid view name\n * resourceLink(ticketResource, \"invalid\") // ❌ Type error\n * ```\n */\nexport function resourceLink<\n TResource extends ResourceDescriptor<any, any>,\n TViewName extends keyof TResource[\"views\"] & string,\n>(\n resource: TResource,\n viewName: TViewName,\n search?: Record<string, unknown>,\n): ResourceLink<string, TViewName> {\n return {\n __type: \"resourceLink\",\n resourceId: resource.id,\n viewName,\n search,\n };\n}\n\n/**\n * Type guard to check if a value is a ResourceLink.\n */\nexport function isResourceLink(value: unknown): value is ResourceLink {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"__type\" in value &&\n (value as ResourceLink).__type === \"resourceLink\"\n );\n}\n\n/**\n * Resolves a ResourceLink to a URL path.\n *\n * @param link - The ResourceLink to resolve\n * @param workspaceSlug - The current workspace slug (optional)\n * @returns The resolved URL path\n *\n * @example\n * ```typescript\n * const link = resourceLink(ticketResource, \"search\");\n * resolveResourceLink(link, \"tavern\")\n * // Returns: \"/tavern/r/ticket/search\"\n *\n * resolveResourceLink(link)\n * // Returns: \"/r/ticket/search\"\n * ```\n */\nexport function resolveResourceLink(\n link: ResourceLink,\n workspaceSlug?: string,\n): string {\n const basePath = `/r/${link.resourceId}/${link.viewName}`;\n\n if (workspaceSlug) {\n return `/${workspaceSlug}${basePath}`;\n }\n\n return basePath;\n}\n\n/**\n * Resolves a ResourceLink's search params to a query string object.\n */\nexport function getResourceLinkSearch(\n link: ResourceLink,\n): Record<string, unknown> | undefined {\n return link.search;\n}\n","import { createContext, useContext } from \"react\";\n\n/**\n * Workspace context for path-based multi-workspace.\n * This file is intentionally separate from routes/root.tsx to avoid circular dependencies.\n * Components can safely import from here without creating import cycles.\n */\nexport interface WorkspaceContext {\n slug: string;\n}\n\nexport const WorkspaceContextValue = createContext<WorkspaceContext | null>(\n null,\n);\n\n/**\n * Hook to get the current workspace context.\n * Must be used within a route nested under /$workspace.\n * @throws Error if used outside of workspace route\n */\nexport function useWorkspace(): WorkspaceContext {\n const context = useContext(WorkspaceContextValue);\n if (!context) {\n throw new Error(\n \"useWorkspace must be used within a WorkspaceProvider (inside /$workspace route)\",\n );\n }\n return context;\n}\n\n/**\n * Hook to optionally get the current workspace context.\n * Returns null if not within a workspace route.\n */\nexport function useWorkspaceOptional(): WorkspaceContext | null {\n return useContext(WorkspaceContextValue);\n}\n\n/**\n * Extract workspace slug from router state.\n * Use this in commands and other non-React contexts where hooks aren't available.\n */\nexport function getWorkspaceFromRouter(router: {\n state: { matches: Array<{ params: Record<string, string> }> };\n}): string | null {\n // Find the workspace param from route matches\n for (const match of router.state.matches) {\n if (match.params && \"workspace\" in match.params) {\n return match.params.workspace;\n }\n }\n return null;\n}\n","import { nu } from \"@nubase/core\";\nimport { Settings } from \"lucide-react\";\nimport { ModalFrame } from \"../../components/floating/modal\";\nimport { showToast } from \"../../components/floating/toast\";\nimport { SearchableTreeNavigator } from \"../../components/navigation/searchable-tree-navigator/SearchableTreeNavigator\";\nimport { ModalViewRenderer } from \"../../components/views/ViewRenderer/modal\";\nimport type { View } from \"../../config/view\";\nimport type { MenuItem } from \"../../menu/types\";\nimport { createCommand } from \"../defineCommand\";\n\n// Schema for command arguments\nconst workbenchOpenResourceOperationInModalArgsSchema = nu.object({\n resourceId: nu\n .string()\n .withMeta({\n label: \"Resource ID\",\n description: \"The ID of the resource to open\",\n })\n .optional(),\n operation: nu\n .string()\n .withMeta({\n label: \"Operation\",\n description: \"The operation to perform on the resource\",\n })\n .optional(),\n});\n\nexport const workbenchOpenResourceOperationInModal = createCommand({\n id: \"workbench.openResourceOperationInModal\",\n name: \"Open Resource Operation in Modal\",\n icon: Settings,\n argsSchema: workbenchOpenResourceOperationInModalArgsSchema.optional(),\n execute: (context, args) => {\n // If both resourceId and operation are provided, open the specific operation directly\n if (args?.resourceId && args?.operation) {\n const { resourceId, operation } = args;\n\n // Validate that the resource and view exist\n const resource = context.config?.resources?.[resourceId];\n const resourceView = resource?.views?.[operation];\n\n if (resourceView) {\n context.modal.openModal({\n content: (\n <ModalViewRenderer\n view={resourceView}\n context={context}\n resourceName={resourceId}\n onClose={() => context.modal.closeModal()}\n onError={(error) => {\n showToast(\n `Error in ${resourceId} ${operation}: ${error.message}`,\n \"error\",\n );\n }}\n />\n ),\n alignment: \"top\",\n size: \"lg\",\n showBackdrop: true,\n });\n return;\n }\n console.warn(`Resource \"${resourceId}\" or view \"${operation}\" not found`);\n }\n const resources = context.config?.resources || {};\n const resourceEntries = Object.entries(resources);\n\n if (resourceEntries.length === 0) {\n context.modal.openModal({\n content: (\n <ModalFrame>\n <div className=\"p-4 text-center\">\n <p className=\"text-foreground\">No resources available</p>\n </div>\n </ModalFrame>\n ),\n alignment: \"top\",\n size: \"md\",\n showBackdrop: true,\n });\n return;\n }\n\n // Create flat list of resource views\n const viewItems: MenuItem[] = [];\n const filterView = args?.operation; // Filter by view if provided\n\n for (const [resourceId, resource] of resourceEntries) {\n const viewEntries = Object.entries(resource.views);\n\n for (const [viewId, view] of viewEntries as [string, View][]) {\n // Apply filter if view is specified\n if (!filterView || viewId === filterView) {\n viewItems.push({\n id: `${resourceId}-${viewId}`,\n icon: Settings,\n label: `${resource.id} → ${view.title}`,\n subtitle: `Open ${resourceId} ${viewId} view in modal`,\n onExecute: () => {\n // Close the current modal (the resource selector)\n context.modal.closeModal();\n\n // Open the actual resource view in a new modal\n context.modal.openModal({\n content: (\n <ModalViewRenderer\n view={view}\n context={context}\n resourceName={resourceId}\n onClose={() => context.modal.closeModal()}\n onError={(error) => {\n showToast(\n `Error in ${resourceId} ${viewId}: ${error.message}`,\n \"error\",\n );\n }}\n />\n ),\n alignment: \"top\",\n size: \"lg\",\n showBackdrop: true,\n });\n },\n });\n }\n }\n }\n\n // Show empty state if filter results in no items\n if (viewItems.length === 0 && filterView) {\n context.modal.openModal({\n content: (\n <ModalFrame>\n <div className=\"p-4 text-center\">\n <p className=\"text-foreground\">\n No \"{filterView}\" views available\n </p>\n </div>\n </ModalFrame>\n ),\n alignment: \"top\",\n size: \"md\",\n showBackdrop: true,\n });\n return;\n }\n\n const placeholder = filterView\n ? `Search ${filterView} views...`\n : \"Search resource views...\";\n\n context.modal.openModal({\n content: (\n <ModalFrame>\n <SearchableTreeNavigator\n items={viewItems}\n placeHolder={placeholder}\n />\n </ModalFrame>\n ),\n alignment: \"top\",\n size: \"lg\",\n showBackdrop: true,\n });\n },\n});\n","import {\n type BaseSchema,\n BooleanSchema,\n type Infer,\n NumberSchema,\n type ObjectSchema,\n OptionalSchema,\n} from \"@nubase/core\";\nimport { type ReactFormExtendedApi, useForm } from \"@tanstack/react-form\";\nimport { useMemo, useState } from \"react\";\n\nexport interface SchemaFormConfiguration<\n TSchema extends ObjectSchema<any> = ObjectSchema<any>,\n TData = any,\n> {\n api: ReactFormExtendedApi<\n TData,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >;\n schema: TSchema;\n mode: \"edit\" | \"view\" | \"patch\";\n onPatch?: (fieldName: string, value: any) => Promise<void>;\n formState: Record<string, any>;\n}\n\nexport type UseSchemaFormOptions<\n TSchema extends ObjectSchema<any>,\n TData extends Infer<TSchema> = Infer<TSchema>,\n> = {\n schema: TSchema;\n onSubmit: (data: TData) => void | Promise<void>;\n /** Form mode - edit, view, or patch. Defaults to edit. When patch mode is used, onPatch is required. */\n mode?: \"edit\" | \"view\" | \"patch\";\n /** Callback for patching individual fields in patch mode */\n onPatch?: (fieldName: string, value: any) => Promise<void>;\n /** Initial values for the form fields */\n initialValues?: Partial<TData>;\n};\n\n// Helper function to transform empty strings and 0 to null for optional fields\nfunction transformEmptyToNull(\n values: Record<string, any>,\n schema: ObjectSchema<any>,\n): Record<string, any> {\n const transformed = { ...values };\n\n for (const [key, value] of Object.entries(values)) {\n const fieldSchema = schema._shape[key] as BaseSchema<any>;\n\n // Check if the field is optional\n if (fieldSchema instanceof OptionalSchema) {\n // Transform empty strings to null for optional fields\n if (value === \"\" || (typeof value === \"string\" && value.trim() === \"\")) {\n transformed[key] = null;\n } else if (value === 0 && fieldSchema instanceof NumberSchema) {\n // Only convert 0 to null if it's not a required field and you want this behavior\n // transformed[key] = null;\n }\n }\n // Note: We don't transform false to null for booleans as false is a valid value\n }\n\n return transformed;\n}\n\n// Helper function to process form data - validate first, then transform\nfunction processFormData(\n values: Record<string, any>,\n schema: ObjectSchema<any>,\n): Record<string, any> {\n // First, validate the raw values with the schema\n const validatedValues = schema.toZod().parse(values);\n\n // Then apply transformations to the validated data\n const processedValues = transformEmptyToNull(validatedValues, schema);\n\n // Future transformations can be added here\n // processedValues = someOtherTransformation(processedValues);\n\n return processedValues;\n}\n\nexport function useSchemaForm<\n TSchema extends ObjectSchema<any>,\n TData extends Infer<TSchema> = Infer<TSchema>,\n>(\n options: UseSchemaFormOptions<TSchema, TData>,\n): SchemaFormConfiguration<TSchema> {\n const { schema, onSubmit, mode = \"edit\", onPatch, initialValues } = options;\n\n // Validate mode and onPatch combination\n if (mode === \"patch\" && !onPatch) {\n throw new Error(\"onPatch is required when mode is 'patch'\");\n }\n\n // Create default values from schema and merge with initial values\n const defaultValues = Object.entries(schema._shape).reduce(\n (acc, [key, fieldSchema]) => {\n const baseFieldSchema = fieldSchema as BaseSchema<any>;\n const defaultValue = baseFieldSchema._meta?.defaultValue;\n\n // Use initial value if provided, otherwise use schema default or type default\n acc[key] =\n initialValues?.[key as keyof TData] ??\n defaultValue ??\n (baseFieldSchema instanceof BooleanSchema ? false : \"\");\n\n return acc;\n },\n {} as Record<string, any>,\n ) as TData;\n\n // Keep track of form state for computed metadata\n const [formState, setFormState] =\n useState<Record<string, any>>(defaultValues);\n\n // Create validators for the form level\n const formValidators: any = {};\n\n // Only add validators if they exist\n if (schema._meta?.validateOnSubmit || schema._meta?.validateOnSubmitAsync) {\n formValidators.onSubmit = ({ value }: { value: TData }) => {\n // Run form-level sync validation\n if (schema._meta?.validateOnSubmit) {\n const error = schema._meta.validateOnSubmit(value);\n if (error) {\n return error;\n }\n }\n return undefined;\n };\n\n const validateOnSubmitAsync = schema._meta?.validateOnSubmitAsync;\n if (validateOnSubmitAsync) {\n formValidators.onSubmitAsync = async ({ value }: { value: TData }) => {\n const error = await validateOnSubmitAsync(value);\n if (error) {\n return error;\n }\n return undefined;\n };\n }\n }\n\n const form = useForm({\n defaultValues,\n listeners: {\n onChange: (formStateEvent) => {\n setFormState(formStateEvent.formApi.state.values);\n },\n onChangeDebounceMs: 200,\n },\n validators:\n Object.keys(formValidators).length > 0 ? formValidators : undefined,\n onSubmit: async ({ value }) => {\n try {\n // Process form data (validate and transform empty values to null, etc.)\n const processedData = processFormData(value, schema) as TData;\n await onSubmit(processedData);\n } catch (error) {\n console.error(\"Form validation error:\", error);\n // In a real app, you might want to handle this error differently\n throw error;\n }\n },\n });\n\n // Return the configuration object\n return useMemo(\n (): SchemaFormConfiguration<TSchema> => ({\n api: form,\n schema,\n mode,\n onPatch,\n formState,\n }),\n [form, schema, mode, onPatch, formState],\n );\n}\n","import {\n type UseMutationOptions,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\nimport { useNubaseContext } from \"../components/nubase-app/NubaseContextProvider\";\nimport type { HttpResponse } from \"../http/http-client\";\n\nexport interface UseNubaseMutationOptions<TData = any, TVariables = any> {\n /**\n * Function that performs the mutation\n * Should use the view's onSubmit function or similar\n */\n mutationFn: (\n variables: TVariables,\n context: any,\n ) => Promise<HttpResponse<TData>>;\n\n /**\n * Query keys to invalidate after successful mutation\n * Can be a string pattern or array of exact keys\n */\n invalidateQueries?: (string | readonly unknown[])[];\n\n /**\n * Standard React Query mutation options\n */\n options?: Omit<\n UseMutationOptions<HttpResponse<TData>, Error, TVariables>,\n \"mutationFn\"\n >;\n}\n\n/**\n * Custom hook that integrates React Query mutations with Nubase's context system\n * Automatically handles query invalidation after successful mutations\n *\n * @example\n * ```typescript\n * const createTicketMutation = useNubaseMutation({\n * mutationFn: (data, context) => view.onSubmit({ data, context }),\n * invalidateQueries: [\n * ['resource', 'ticket', 'search'],\n * ['resource', 'ticket', 'view']\n * ],\n * options: {\n * onSuccess: (data) => {\n * showToast('Ticket created successfully', 'success');\n * }\n * }\n * });\n * ```\n */\nexport function useNubaseMutation<TData = any, TVariables = any>({\n mutationFn,\n invalidateQueries = [],\n options = {},\n}: UseNubaseMutationOptions<TData, TVariables>) {\n const context = useNubaseContext();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (variables: TVariables) => {\n return mutationFn(variables, context);\n },\n onSuccess: async (data, variables, onMutateResult, mutationContext) => {\n // Invalidate specified queries\n for (const queryKey of invalidateQueries) {\n if (typeof queryKey === \"string\") {\n // If it's a string, treat it as a query key pattern\n await queryClient.invalidateQueries({\n predicate: (query) => {\n const key = query.queryKey[0];\n return typeof key === \"string\" && key.includes(queryKey);\n },\n });\n } else {\n // If it's an array, treat it as an exact query key\n await queryClient.invalidateQueries({ queryKey });\n }\n }\n\n // Call the original onSuccess if provided\n if (options.onSuccess) {\n await options.onSuccess(\n data,\n variables,\n onMutateResult,\n mutationContext,\n );\n }\n },\n ...options,\n });\n}\n\n/**\n * Hook specifically designed for resource creation operations\n * Automatically invalidates related resource queries\n */\nexport function useResourceCreateMutation<TData = any, TVariables = any>(\n resourceId: string,\n view: {\n onSubmit: (args: {\n data: TVariables;\n context: any;\n }) => Promise<HttpResponse<TData>>;\n },\n options?: Omit<\n UseMutationOptions<HttpResponse<TData>, Error, TVariables>,\n \"mutationFn\"\n >,\n) {\n return useNubaseMutation({\n mutationFn: (data, context) => view.onSubmit({ data, context }),\n invalidateQueries: [\n [\"resource\", resourceId, \"search\"],\n [\"resource\", resourceId, \"view\"],\n ],\n options,\n });\n}\n\n/**\n * Hook specifically designed for resource update/patch operations\n * Automatically invalidates related resource queries\n */\nexport function useResourceUpdateMutation<TData = any, TVariables = any>(\n resourceId: string,\n view: {\n onPatch: (args: {\n data: TVariables;\n context: any;\n }) => Promise<HttpResponse<TData>>;\n },\n options?: Omit<\n UseMutationOptions<HttpResponse<TData>, Error, TVariables>,\n \"mutationFn\"\n >,\n) {\n return useNubaseMutation({\n mutationFn: (data, context) => view.onPatch({ data, context }),\n invalidateQueries: [\n [\"resource\", resourceId, \"search\"],\n [\"resource\", resourceId, \"view\"],\n ],\n options,\n });\n}\n\n/**\n * Hook specifically designed for resource deletion operations\n * Automatically invalidates related resource queries\n */\nexport function useResourceDeleteMutation<TData = any, TVariables = any>(\n _resourceId: string,\n view: {\n onDelete: (args: {\n data: TVariables;\n context: any;\n }) => Promise<HttpResponse<TData>>;\n },\n options?: Omit<\n UseMutationOptions<HttpResponse<TData>, Error, TVariables>,\n \"mutationFn\"\n >,\n) {\n return useNubaseMutation({\n mutationFn: (data, context) => view.onDelete({ data, context }),\n invalidateQueries: [], // We use manual invalidation in the component\n options,\n });\n}\n\n/**\n * Hook for invalidating specific resource queries manually\n * Useful for custom invalidation scenarios\n */\nexport function useResourceInvalidation() {\n const queryClient = useQueryClient();\n\n return {\n /**\n * Invalidate all queries for a specific resource\n */\n invalidateResource: async (resourceId: string) => {\n await queryClient.invalidateQueries({\n queryKey: [\"resource\", resourceId],\n });\n },\n\n /**\n * Invalidate search queries for a specific resource\n */\n invalidateResourceSearch: async (resourceId: string) => {\n // Use predicate to match queries that start with [\"resource\", resourceId, \"search\"]\n // This will match both 3-element and 4-element (with params) keys\n await queryClient.invalidateQueries({\n predicate: (query) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key.length >= 3 &&\n key[0] === \"resource\" &&\n key[1] === resourceId &&\n key[2] === \"search\"\n );\n },\n });\n },\n\n /**\n * Invalidate view queries for a specific resource\n */\n invalidateResourceView: async (\n resourceId: string,\n params?: Record<string, any>,\n ) => {\n await queryClient.invalidateQueries({\n queryKey: [\"resource\", resourceId, \"view\", params],\n });\n },\n\n /**\n * Invalidate all queries matching a pattern\n */\n invalidateByPattern: async (pattern: string) => {\n await queryClient.invalidateQueries({\n predicate: (query) => {\n const key = query.queryKey[0];\n return typeof key === \"string\" && key.includes(pattern);\n },\n });\n },\n };\n}\n","import { type UseQueryOptions, useQuery } from \"@tanstack/react-query\";\nimport { useNubaseContext } from \"../components/nubase-app/NubaseContextProvider\";\nimport type { HttpResponse } from \"../http/http-client\";\n\nexport interface UseNubaseQueryOptions<TData = any> {\n /**\n * Unique query key for this data fetching operation\n * Should include relevant parameters that affect the data\n */\n queryKey: readonly unknown[];\n\n /**\n * Function that returns a promise with the data\n * Should use the view's onLoad function or similar\n */\n queryFn: (context: any) => Promise<HttpResponse<TData>>;\n\n /**\n * Parameters that will be passed to the context\n */\n params?: Record<string, any>;\n\n /**\n * Standard React Query options\n */\n options?: Omit<UseQueryOptions<HttpResponse<TData>>, \"queryKey\" | \"queryFn\">;\n}\n\n/**\n * Custom hook that integrates React Query with Nubase's context and view system\n *\n * @example\n * ```typescript\n * const { data, isLoading, error } = useNubaseQuery({\n * queryKey: ['tickets', 'search', params],\n * queryFn: (context) => view.onLoad({ context }),\n * params: searchParams,\n * options: {\n * enabled: !!searchParams,\n * }\n * });\n * ```\n */\nexport function useNubaseQuery<TData = any>({\n queryKey,\n queryFn,\n params,\n options = {},\n}: UseNubaseQueryOptions<TData>) {\n const context = useNubaseContext();\n\n return useQuery({\n queryKey,\n queryFn: async () => {\n const contextWithParams = {\n ...context,\n params: params || undefined,\n };\n return queryFn(contextWithParams);\n },\n ...options,\n });\n}\n\n/**\n * Hook specifically designed for resource search views\n * Automatically generates query keys and integrates with the view pattern\n */\nexport function useResourceSearchQuery<TData = any>(\n resourceId: string,\n view: { onLoad: (args: { context: any }) => Promise<HttpResponse<TData>> },\n params?: Record<string, any>,\n options?: Omit<UseQueryOptions<HttpResponse<TData>>, \"queryKey\" | \"queryFn\">,\n) {\n return useNubaseQuery({\n queryKey: [\"resource\", resourceId, \"search\", params],\n queryFn: (context) => view.onLoad({ context }),\n params,\n options,\n });\n}\n\n/**\n * Hook specifically designed for resource view operations\n * Automatically generates query keys and integrates with the view pattern\n */\nexport function useResourceViewQuery<TData = any>(\n resourceId: string,\n view: { onLoad: (args: { context: any }) => Promise<HttpResponse<TData>> },\n params?: Record<string, any>,\n options?: Omit<UseQueryOptions<HttpResponse<TData>>, \"queryKey\" | \"queryFn\">,\n) {\n return useNubaseQuery({\n queryKey: [\"resource\", resourceId, \"view\", params],\n queryFn: (context) => view.onLoad({ context }),\n params,\n options: {\n enabled: !!params, // Only fetch if we have the required params\n ...options,\n },\n });\n}\n","import type { ObjectOutput } from \"@nubase/core\";\nimport type { FC } from \"react\";\nimport type { ResourceCreateView } from \"../../../../config/view\";\nimport type { NubaseContextData } from \"../../../../context/types\";\nimport { useSchemaForm } from \"../../../../hooks\";\nimport { useResourceInvalidation } from \"../../../../hooks/useNubaseMutation\";\nimport { ModalFrameSchemaForm } from \"../../../floating/modal/ModalFrameSchemaForm\";\n\nexport type ResourceCreateViewModalRendererProps = {\n view: ResourceCreateView;\n context: NubaseContextData;\n resourceName?: string;\n onClose?: () => void;\n onCreate?: (data: ObjectOutput<any>) => void;\n onError?: (error: Error) => void;\n};\n\nexport const ResourceCreateViewModalRenderer: FC<\n ResourceCreateViewModalRendererProps\n> = (props) => {\n const { view, context, resourceName, onClose, onCreate, onError } = props;\n const { invalidateResourceSearch } = useResourceInvalidation();\n\n const form = useSchemaForm({\n schema: view.schemaPost,\n onSubmit: async (data: ObjectOutput<any>) => {\n try {\n const result = await view.onSubmit({\n data,\n context,\n });\n\n // Invalidate resource search queries to refresh the list\n if (resourceName) {\n await invalidateResourceSearch(resourceName);\n }\n\n onCreate?.(result);\n onClose?.(); // Close modal on successful creation\n } catch (error) {\n onError?.(error as Error);\n }\n },\n });\n\n return (\n <ModalFrameSchemaForm\n title={view.title}\n form={form}\n onClose={onClose}\n submitText=\"Create\"\n />\n );\n};\n","import type { ObjectSchema } from \"@nubase/core\";\nimport type { FC } from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport type { ResourceSearchView } from \"../../../../config/view\";\nimport type { NubaseContextData } from \"../../../../context/types\";\nimport { ActivityIndicator } from \"../../../activity-indicator/ActivityIndicator\";\nimport { DataGrid } from \"../../../data-grid/DataGrid\";\nimport type { Column } from \"../../../data-grid/types\";\nimport { ModalFrameStructured } from \"../../../floating/modal/ModalFrameStructured\";\n\nexport type ResourceSearchViewModalRendererProps = {\n view: ResourceSearchView;\n context: NubaseContextData;\n params?: Record<string, any>;\n resourceName?: string;\n onClose?: () => void;\n onRowClick?: (row: any) => void; // Callback for when a row is clicked\n onError?: (error: Error) => void;\n};\n\nexport const ResourceSearchViewModalRenderer: FC<\n ResourceSearchViewModalRendererProps\n> = (props) => {\n const { view, context, params, onClose, onRowClick, onError } = props;\n const [isLoading, setIsLoading] = useState(true);\n const [data, setData] = useState<any[]>([]);\n\n // Load data function that can be called from effects\n const loadData = useCallback(async () => {\n try {\n setIsLoading(true);\n const contextWithParams = {\n ...context,\n params: params || undefined,\n };\n const response = await view.onLoad({\n context: contextWithParams as any,\n });\n setData(response.data);\n } catch (error) {\n onError?.(error as Error);\n setData([]);\n } finally {\n setIsLoading(false);\n }\n }, [context, params, onError, view.onLoad]);\n\n useEffect(() => {\n loadData();\n }, [loadData]);\n\n // Get the element schema from the array schema to access table layouts\n const elementSchema = (view.schemaGet as any)?._element as\n | ObjectSchema<any>\n | undefined;\n const tableLayout =\n elementSchema?.getLayout(\"default\") || elementSchema?.getLayout(\"table\");\n const linkFields = tableLayout?.metadata?.linkFields as string[] | undefined;\n\n // Create columns from table layout or dynamically from data\n const columns: Column<any>[] = (() => {\n if (tableLayout && tableLayout.type === \"table\" && tableLayout.groups[0]) {\n // Use table layout to define columns\n return tableLayout.groups[0].fields\n .filter((field) => !field.hidden)\n .map((field) => {\n const fieldName = field.name as string;\n const isLinkField = linkFields?.includes(fieldName);\n\n return {\n key: fieldName,\n name: fieldName.charAt(0).toUpperCase() + fieldName.slice(1),\n width: (field as any).columnWidthPx || 150,\n resizable: true,\n renderCell: ({ row }) => {\n const value = row[fieldName];\n const displayValue = value?.toString() || \"\";\n\n if (isLinkField && row.id) {\n // Make this field a clickable link, but in modal context\n // Instead of navigating, trigger the onRowClick callback\n return (\n <button\n type=\"button\"\n className=\"text-primary hover:underline text-left\"\n onClick={() => {\n onRowClick?.(row);\n }}\n >\n {displayValue}\n </button>\n );\n }\n\n return displayValue;\n },\n };\n });\n } else if (data.length > 0) {\n // Fallback: create columns dynamically from the first data item\n return Object.keys(data[0]).map((key) => ({\n key: key,\n name: key.charAt(0).toUpperCase() + key.slice(1),\n width: 150,\n resizable: true,\n renderCell: ({ row }) => {\n const value = row[key];\n return value?.toString() || \"\";\n },\n }));\n }\n return [];\n })();\n\n // No actions column for modal view - actions should be handled at the resource level\n\n const renderBody = () => {\n if (isLoading) {\n return (\n <div className=\"flex justify-center py-8\">\n <ActivityIndicator size=\"lg\" aria-label=\"Loading search results...\" />\n </div>\n );\n }\n\n return (\n <div className=\"h-full\">\n <DataGrid\n columns={columns}\n rows={data}\n className=\"h-full w-full\"\n rowKeyGetter={(row) => row.id || row}\n />\n </div>\n );\n };\n\n return (\n <ModalFrameStructured\n onClose={onClose}\n header={\n <h2 className=\"text-lg font-semibold text-foreground\">{view.title}</h2>\n }\n body={renderBody()}\n />\n );\n};\n","import clsx from \"clsx\";\nimport type { Key, KeyboardEvent } from \"react\";\nimport {\n useCallback,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { defaultRenderCell } from \"./Cell\";\nimport { renderCheckbox as defaultRenderCheckbox } from \"./cellRenderers\";\nimport {\n DataGridDefaultRenderersContext,\n useDefaultRenderers,\n} from \"./DataGridDefaultRenderersContext\";\nimport EditCell from \"./EditCell\";\nimport GroupedColumnHeaderRow from \"./GroupedColumnHeaderRow\";\nimport HeaderRow from \"./HeaderRow\";\nimport { useCalculatedColumns } from \"./hooks/useCalculatedColumns\";\nimport { useColumnWidths } from \"./hooks/useColumnWidths\";\nimport { useGridDimensions } from \"./hooks/useGridDimensions\";\nimport { useLatestFunc } from \"./hooks/useLatestFunc\";\nimport {\n HeaderRowSelectionChangeContext,\n HeaderRowSelectionContext,\n type HeaderRowSelectionContextValue,\n RowSelectionChangeContext,\n} from \"./hooks/useRowSelection\";\nimport { useViewportColumns } from \"./hooks/useViewportColumns\";\nimport { useViewportRows } from \"./hooks/useViewportRows\";\nimport { defaultRenderRow } from \"./Row\";\nimport type { PartialPosition } from \"./ScrollToCell\";\nimport ScrollToCell from \"./ScrollToCell\";\nimport SummaryRow from \"./SummaryRow\";\nimport { default as defaultRenderSortStatus } from \"./sortStatus\";\nimport {\n cellDragHandleClassname,\n cellDragHandleFrozenClassname,\n focusSinkClassname,\n focusSinkHeaderAndSummaryClassname,\n rootClassname,\n rowSelected,\n rowSelectedWithFrozenCell,\n viewportDraggingClassname,\n} from \"./styles\";\nimport type {\n CalculatedColumn,\n CellClipboardEvent,\n CellCopyArgs,\n CellKeyboardEvent,\n CellKeyDownArgs,\n CellMouseEventHandler,\n CellNavigationMode,\n CellPasteArgs,\n CellSelectArgs,\n Column,\n ColumnOrColumnGroup,\n ColumnWidths,\n Direction,\n FillEvent,\n Maybe,\n Position,\n Renderers,\n RowsChangeData,\n SelectCellOptions,\n SelectHeaderRowEvent,\n SelectRowEvent,\n SortColumn,\n} from \"./types\";\nimport {\n abs,\n assertIsValidKeyGetter,\n canExitGrid,\n createCellEvent,\n getCellStyle,\n getColSpan,\n getLeftRightKey,\n getNextSelectedCellPosition,\n isCtrlKeyHeldDown,\n isDefaultCellInput,\n isSelectedCellEditable,\n renderMeasuringCells,\n scrollIntoView,\n sign,\n} from \"./utils\";\n\nexport interface SelectCellState extends Position {\n readonly mode: \"SELECT\";\n}\n\ninterface EditCellState<R> extends Position {\n readonly mode: \"EDIT\";\n readonly row: R;\n readonly originalRow: R;\n}\n\nexport type DefaultColumnOptions<R, SR> = Pick<\n Column<R, SR>,\n | \"renderCell\"\n | \"renderHeaderCell\"\n | \"width\"\n | \"minWidth\"\n | \"maxWidth\"\n | \"resizable\"\n | \"sortable\"\n | \"draggable\"\n>;\n\nexport interface DataGridHandle {\n element: HTMLDivElement | null;\n scrollToCell: (position: PartialPosition) => void;\n selectCell: (position: Position, options?: SelectCellOptions) => void;\n}\n\nconst DEFAULT_VIRTUALIZED_VIEWPORT_HEIGHT = 600;\n\ntype SharedDivProps = Pick<\n React.ComponentProps<\"div\">,\n | \"role\"\n | \"aria-label\"\n | \"aria-labelledby\"\n | \"aria-description\"\n | \"aria-describedby\"\n | \"aria-rowcount\"\n | \"className\"\n | \"style\"\n>;\n\nexport interface DataGridProps<R, SR = unknown, K extends Key = Key>\n extends SharedDivProps {\n ref?: Maybe<React.Ref<DataGridHandle>>;\n /**\n * Grid and data Props\n */\n /** An array of column definitions */\n columns: readonly ColumnOrColumnGroup<NoInfer<R>, NoInfer<SR>>[];\n /** A function called for each rendered row that should return a plain key/value pair object */\n rows: readonly R[];\n /** Rows pinned at the top of the grid for summary purposes */\n topSummaryRows?: Maybe<readonly SR[]>;\n /** Rows pinned at the bottom of the grid for summary purposes */\n bottomSummaryRows?: Maybe<readonly SR[]>;\n /** Function to return a unique key/identifier for each row */\n rowKeyGetter?: Maybe<(row: NoInfer<R>) => K>;\n /** Callback triggered when rows are changed */\n onRowsChange?: Maybe<\n (rows: NoInfer<R>[], data: RowsChangeData<NoInfer<R>, NoInfer<SR>>) => void\n >;\n\n /**\n * Dimensions props\n */\n /**\n * Height of each row in pixels\n * @default 35\n */\n rowHeight?: Maybe<number | ((row: NoInfer<R>) => number)>;\n /**\n * Height of the header row in pixels\n * @default 35\n */\n headerRowHeight?: Maybe<number>;\n /**\n * Height of each summary row in pixels\n * @default 35\n */\n summaryRowHeight?: Maybe<number>;\n /** A map of column widths */\n columnWidths?: Maybe<ColumnWidths>;\n /** Callback triggered when column widths change */\n onColumnWidthsChange?: Maybe<(columnWidths: ColumnWidths) => void>;\n\n /**\n * Feature props\n */\n /** A set of selected row keys */\n selectedRows?: Maybe<ReadonlySet<K>>;\n /** Function to determine if row selection is disabled for a specific row */\n isRowSelectionDisabled?: Maybe<(row: NoInfer<R>) => boolean>;\n /** Callback triggered when the selection changes */\n onSelectedRowsChange?: Maybe<(selectedRows: Set<NoInfer<K>>) => void>;\n /** An array of sorted columns */\n sortColumns?: Maybe<readonly SortColumn[]>;\n /** Callback triggered when sorting changes */\n onSortColumnsChange?: Maybe<(sortColumns: SortColumn[]) => void>;\n /** Default options applied to all columns */\n defaultColumnOptions?: Maybe<DefaultColumnOptions<NoInfer<R>, NoInfer<SR>>>;\n onFill?: Maybe<(event: FillEvent<NoInfer<R>>) => NoInfer<R>>;\n\n /**\n * Event props\n */\n /** Callback triggered when a pointer becomes active in a cell */\n onCellMouseDown?: CellMouseEventHandler<R, SR>;\n /** Callback triggered when a cell is clicked */\n onCellClick?: CellMouseEventHandler<R, SR>;\n /** Callback triggered when a cell is double-clicked */\n onCellDoubleClick?: CellMouseEventHandler<R, SR>;\n /** Callback triggered when a cell is right-clicked */\n onCellContextMenu?: CellMouseEventHandler<R, SR>;\n /** Callback triggered when a key is pressed in a cell */\n onCellKeyDown?: Maybe<\n (\n args: CellKeyDownArgs<NoInfer<R>, NoInfer<SR>>,\n event: CellKeyboardEvent,\n ) => void\n >;\n /** Callback triggered when a cell's content is copied */\n onCellCopy?: Maybe<\n (\n args: CellCopyArgs<NoInfer<R>, NoInfer<SR>>,\n event: CellClipboardEvent,\n ) => void\n >;\n /** Callback triggered when content is pasted into a cell */\n onCellPaste?: Maybe<\n (\n args: CellPasteArgs<NoInfer<R>, NoInfer<SR>>,\n event: CellClipboardEvent,\n ) => NoInfer<R>\n >;\n /** Function called whenever cell selection is changed */\n onSelectedCellChange?: Maybe<\n (args: CellSelectArgs<NoInfer<R>, NoInfer<SR>>) => void\n >;\n /** Callback triggered when the grid is scrolled */\n onScroll?: Maybe<(event: React.UIEvent<HTMLDivElement>) => void>;\n /** Callback triggered when column is resized */\n onColumnResize?: Maybe<\n (column: CalculatedColumn<R, SR>, width: number) => void\n >;\n /** Callback triggered when columns are reordered */\n onColumnsReorder?: Maybe<\n (sourceColumnKey: string, targetColumnKey: string) => void\n >;\n\n /**\n * Toggles and modes\n */\n /** @default true */\n enableVirtualization?: Maybe<boolean>;\n\n /**\n * Miscellaneous\n */\n /** Custom renderers for cells, rows, and other components */\n renderers?: Maybe<Renderers<NoInfer<R>, NoInfer<SR>>>;\n /** Function to apply custom class names to rows */\n rowClass?: Maybe<(row: NoInfer<R>, rowIdx: number) => Maybe<string>>;\n /** Custom class name for the header row */\n headerRowClass?: Maybe<string>;\n /**\n * Text direction of the grid ('ltr' or 'rtl')\n * @default 'ltr'\n */\n direction?: Maybe<Direction>;\n \"data-testid\"?: Maybe<string>;\n \"data-cy\"?: Maybe<string>;\n}\n\n/**\n * Main API Component to render a data grid of rows and columns\n *\n * @example\n *\n * <DataGrid columns={columns} rows={rows} />\n */\nexport function DataGrid<R, SR = unknown, K extends Key = Key>(\n props: DataGridProps<R, SR, K>,\n) {\n const {\n ref,\n // Grid and data Props\n columns: rawColumns,\n rows,\n topSummaryRows,\n bottomSummaryRows,\n rowKeyGetter,\n onRowsChange,\n // Dimensions props\n rowHeight: rawRowHeight,\n headerRowHeight: rawHeaderRowHeight,\n summaryRowHeight: rawSummaryRowHeight,\n columnWidths: columnWidthsRaw,\n onColumnWidthsChange: onColumnWidthsChangeRaw,\n // Feature props\n selectedRows,\n isRowSelectionDisabled,\n onSelectedRowsChange,\n sortColumns,\n onSortColumnsChange,\n defaultColumnOptions,\n // Event props\n onCellMouseDown,\n onCellClick,\n onCellDoubleClick,\n onCellContextMenu,\n onCellKeyDown,\n onSelectedCellChange,\n onScroll,\n onColumnResize,\n onColumnsReorder,\n onFill,\n onCellCopy,\n onCellPaste,\n // Toggles and modes\n enableVirtualization: rawEnableVirtualization,\n // Miscellaneous\n renderers,\n className,\n style,\n rowClass,\n headerRowClass,\n direction: rawDirection,\n // ARIA\n role: rawRole,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-description\": ariaDescription,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-rowcount\": rawAriaRowCount,\n \"data-testid\": testId,\n \"data-cy\": dataCy,\n } = props;\n\n /**\n * defaults\n */\n const defaultRenderers = useDefaultRenderers<R, SR>();\n const role = rawRole ?? \"grid\";\n const rowHeight = rawRowHeight ?? 35;\n const headerRowHeight =\n rawHeaderRowHeight ?? (typeof rowHeight === \"number\" ? rowHeight : 35);\n const summaryRowHeight =\n rawSummaryRowHeight ?? (typeof rowHeight === \"number\" ? rowHeight : 35);\n const renderRow =\n renderers?.renderRow ?? defaultRenderers?.renderRow ?? defaultRenderRow;\n const renderCell =\n renderers?.renderCell ?? defaultRenderers?.renderCell ?? defaultRenderCell;\n const renderSortStatus =\n renderers?.renderSortStatus ??\n defaultRenderers?.renderSortStatus ??\n defaultRenderSortStatus;\n const renderCheckbox =\n renderers?.renderCheckbox ??\n defaultRenderers?.renderCheckbox ??\n defaultRenderCheckbox;\n const noRowsFallback =\n renderers?.noRowsFallback ?? defaultRenderers?.noRowsFallback;\n const enableVirtualization = rawEnableVirtualization ?? true;\n const direction = rawDirection ?? \"ltr\";\n\n /**\n * states\n */\n const [scrollTop, setScrollTop] = useState(0);\n const [scrollLeft, setScrollLeft] = useState(0);\n const [columnWidthsInternal, setColumnWidthsInternal] = useState(\n (): ColumnWidths => columnWidthsRaw ?? new Map(),\n );\n const [isColumnResizing, setColumnResizing] = useState(false);\n const [isDragging, setDragging] = useState(false);\n const [draggedOverRowIdx, setDraggedOverRowIdx] = useState<\n number | undefined\n >(undefined);\n const [scrollToPosition, setScrollToPosition] =\n useState<PartialPosition | null>(null);\n const [shouldFocusCell, setShouldFocusCell] = useState(false);\n const [previousRowIdx, setPreviousRowIdx] = useState(-1);\n\n const isColumnWidthsControlled =\n columnWidthsRaw != null &&\n onColumnWidthsChangeRaw != null &&\n !isColumnResizing;\n const columnWidths = isColumnWidthsControlled\n ? columnWidthsRaw\n : columnWidthsInternal;\n const onColumnWidthsChange = isColumnWidthsControlled\n ? (columnWidths: ColumnWidths) => {\n // we keep the internal state in sync with the prop but this prevents an extra render\n setColumnWidthsInternal(columnWidths);\n onColumnWidthsChangeRaw(columnWidths);\n }\n : setColumnWidthsInternal;\n\n const getColumnWidth = useCallback(\n (column: CalculatedColumn<R, SR>) => {\n return columnWidths.get(column.key)?.width ?? column.width;\n },\n [columnWidths],\n );\n\n const [gridRef, gridWidth, gridHeight, horizontalScrollbarHeight] =\n useGridDimensions();\n const {\n columns,\n colSpanColumns,\n lastFrozenColumnIndex,\n headerRowsCount,\n colOverscanStartIdx,\n colOverscanEndIdx,\n templateColumns,\n layoutCssVars,\n totalFrozenColumnWidth,\n } = useCalculatedColumns({\n rawColumns,\n defaultColumnOptions,\n getColumnWidth,\n scrollLeft,\n viewportWidth: gridWidth,\n enableVirtualization,\n });\n\n const topSummaryRowsCount = topSummaryRows?.length ?? 0;\n const bottomSummaryRowsCount = bottomSummaryRows?.length ?? 0;\n const summaryRowsCount = topSummaryRowsCount + bottomSummaryRowsCount;\n const headerAndTopSummaryRowsCount = headerRowsCount + topSummaryRowsCount;\n const groupedColumnHeaderRowsCount = headerRowsCount - 1;\n const minRowIdx = -headerAndTopSummaryRowsCount;\n const mainHeaderRowIdx = minRowIdx + groupedColumnHeaderRowsCount;\n const maxRowIdx = rows.length + bottomSummaryRowsCount - 1;\n\n const [selectedPosition, setSelectedPosition] = useState(\n (): SelectCellState | EditCellState<R> => ({\n idx: -1,\n rowIdx: minRowIdx - 1,\n mode: \"SELECT\",\n }),\n );\n\n /**\n * refs\n */\n const focusSinkRef = useRef<HTMLDivElement>(null);\n\n /**\n * computed values\n */\n const isTreeGrid = role === \"treegrid\";\n const headerRowsHeight = headerRowsCount * headerRowHeight;\n const summaryRowsHeight = summaryRowsCount * summaryRowHeight;\n const clientHeight = gridHeight - headerRowsHeight - summaryRowsHeight;\n const isSelectable = selectedRows != null && onSelectedRowsChange != null;\n const { leftKey, rightKey } = getLeftRightKey(direction);\n const ariaRowCount =\n rawAriaRowCount ?? headerRowsCount + rows.length + summaryRowsCount;\n\n const defaultGridComponents = useMemo(\n () => ({\n renderCheckbox,\n renderSortStatus,\n renderCell,\n }),\n [renderCheckbox, renderSortStatus, renderCell],\n );\n\n const headerSelectionValue = useMemo((): HeaderRowSelectionContextValue => {\n // no rows to select = explicitely unchecked\n let hasSelectedRow = false;\n let hasUnselectedRow = false;\n\n if (rowKeyGetter != null && selectedRows != null && selectedRows.size > 0) {\n for (const row of rows) {\n if (selectedRows.has(rowKeyGetter(row))) {\n hasSelectedRow = true;\n } else {\n hasUnselectedRow = true;\n }\n\n if (hasSelectedRow && hasUnselectedRow) break;\n }\n }\n\n return {\n isRowSelected: hasSelectedRow && !hasUnselectedRow,\n isIndeterminate: hasSelectedRow && hasUnselectedRow,\n };\n }, [rows, selectedRows, rowKeyGetter]);\n\n const {\n rowOverscanStartIdx,\n rowOverscanEndIdx,\n totalRowHeight,\n gridTemplateRows,\n getRowTop,\n getRowHeight,\n findRowIdx,\n } = useViewportRows({\n rows,\n rowHeight,\n clientHeight,\n scrollTop,\n enableVirtualization,\n });\n\n const viewportColumns = useViewportColumns({\n columns,\n colSpanColumns,\n colOverscanStartIdx,\n colOverscanEndIdx,\n lastFrozenColumnIndex,\n rowOverscanStartIdx,\n rowOverscanEndIdx,\n rows,\n topSummaryRows,\n bottomSummaryRows,\n });\n\n const { gridTemplateColumns, handleColumnResize } = useColumnWidths(\n columns,\n viewportColumns,\n templateColumns,\n gridRef,\n gridWidth,\n columnWidths,\n onColumnWidthsChange,\n onColumnResize,\n setColumnResizing,\n );\n\n const minColIdx = isTreeGrid ? -1 : 0;\n const maxColIdx = columns.length - 1;\n const selectedCellIsWithinSelectionBounds =\n isCellWithinSelectionBounds(selectedPosition);\n const selectedCellIsWithinViewportBounds =\n isCellWithinViewportBounds(selectedPosition);\n const scrollHeight =\n headerRowHeight +\n totalRowHeight +\n summaryRowsHeight +\n horizontalScrollbarHeight;\n\n const fallbackViewportHeight =\n enableVirtualization && style?.height == null\n ? Math.min(scrollHeight, DEFAULT_VIRTUALIZED_VIEWPORT_HEIGHT)\n : undefined;\n\n /**\n * The identity of the wrapper function is stable so it won't break memoization\n */\n const handleColumnResizeLatest = useLatestFunc(handleColumnResize);\n const handleColumnResizeEndLatest = useLatestFunc(handleColumnResizeEnd);\n const onColumnsReorderLastest = useLatestFunc(onColumnsReorder);\n const onSortColumnsChangeLatest = useLatestFunc(onSortColumnsChange);\n const onCellMouseDownLatest = useLatestFunc(onCellMouseDown);\n const onCellClickLatest = useLatestFunc(onCellClick);\n const onCellDoubleClickLatest = useLatestFunc(onCellDoubleClick);\n const onCellContextMenuLatest = useLatestFunc(onCellContextMenu);\n const selectHeaderRowLatest = useLatestFunc(selectHeaderRow);\n const selectRowLatest = useLatestFunc(selectRow);\n const handleFormatterRowChangeLatest = useLatestFunc(updateRow);\n const selectCellLatest = useLatestFunc(selectCell);\n const selectHeaderCellLatest = useLatestFunc(selectHeaderCell);\n\n /**\n * callbacks\n */\n const focusCell = useCallback(\n (shouldScroll = true) => {\n const cell = getCellToScroll(gridRef.current!);\n if (cell === null) return;\n\n if (shouldScroll) {\n scrollIntoView(cell);\n }\n\n cell.focus({ preventScroll: true });\n },\n [gridRef],\n );\n\n /**\n * effects\n */\n useLayoutEffect(() => {\n if (shouldFocusCell) {\n if (focusSinkRef.current !== null && selectedPosition.idx === -1) {\n focusSinkRef.current.focus({ preventScroll: true });\n scrollIntoView(focusSinkRef.current);\n } else {\n focusCell();\n }\n setShouldFocusCell(false);\n }\n }, [shouldFocusCell, focusCell, selectedPosition.idx]);\n\n useImperativeHandle(ref, () => ({\n element: gridRef.current,\n scrollToCell({ idx, rowIdx }) {\n const scrollToIdx =\n idx !== undefined && idx > lastFrozenColumnIndex && idx < columns.length\n ? idx\n : undefined;\n const scrollToRowIdx =\n rowIdx !== undefined && isRowIdxWithinViewportBounds(rowIdx)\n ? rowIdx\n : undefined;\n\n if (scrollToIdx !== undefined || scrollToRowIdx !== undefined) {\n setScrollToPosition({ idx: scrollToIdx, rowIdx: scrollToRowIdx });\n }\n },\n selectCell,\n }));\n\n /**\n * event handlers\n */\n function selectHeaderRow(args: SelectHeaderRowEvent) {\n if (!onSelectedRowsChange) return;\n\n assertIsValidKeyGetter<R, K>(rowKeyGetter);\n\n const newSelectedRows = new Set(selectedRows);\n for (const row of rows) {\n if (isRowSelectionDisabled?.(row) === true) continue;\n const rowKey = rowKeyGetter(row);\n if (args.checked) {\n newSelectedRows.add(rowKey);\n } else {\n newSelectedRows.delete(rowKey);\n }\n }\n onSelectedRowsChange(newSelectedRows);\n }\n\n function selectRow(args: SelectRowEvent<R>) {\n if (!onSelectedRowsChange) return;\n\n assertIsValidKeyGetter<R, K>(rowKeyGetter);\n const { row, checked, isShiftClick } = args;\n if (isRowSelectionDisabled?.(row) === true) return;\n const newSelectedRows = new Set(selectedRows);\n const rowKey = rowKeyGetter(row);\n const rowIdx = rows.indexOf(row);\n setPreviousRowIdx(rowIdx);\n\n if (checked) {\n newSelectedRows.add(rowKey);\n } else {\n newSelectedRows.delete(rowKey);\n }\n\n if (\n isShiftClick &&\n previousRowIdx !== -1 &&\n previousRowIdx !== rowIdx &&\n previousRowIdx < rows.length\n ) {\n const step = sign(rowIdx - previousRowIdx);\n for (let i = previousRowIdx + step; i !== rowIdx; i += step) {\n const row = rows[i];\n if (!row || isRowSelectionDisabled?.(row) === true) continue;\n if (checked) {\n newSelectedRows.add(rowKeyGetter(row));\n } else {\n newSelectedRows.delete(rowKeyGetter(row));\n }\n }\n }\n\n onSelectedRowsChange(newSelectedRows);\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const { idx, rowIdx, mode } = selectedPosition;\n if (mode === \"EDIT\") return;\n\n if (onCellKeyDown && isRowIdxWithinViewportBounds(rowIdx)) {\n const row = rows[rowIdx];\n const column = columns[idx];\n if (!row || !column) return;\n const cellEvent = createCellEvent(event);\n onCellKeyDown(\n {\n mode: \"SELECT\",\n row,\n column,\n rowIdx,\n selectCell,\n },\n cellEvent,\n );\n if (cellEvent.isGridDefaultPrevented()) return;\n }\n\n if (!(event.target instanceof Element)) return;\n const isCellEvent = event.target.closest(\".rdg-cell\") !== null;\n const isRowEvent = isTreeGrid && event.target === focusSinkRef.current;\n if (!isCellEvent && !isRowEvent) return;\n\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n case \"ArrowLeft\":\n case \"ArrowRight\":\n case \"Tab\":\n case \"Home\":\n case \"End\":\n case \"PageUp\":\n case \"PageDown\":\n navigate(event);\n break;\n default:\n handleCellInput(event);\n break;\n }\n }\n\n function handleScroll(event: React.UIEvent<HTMLDivElement>) {\n const { scrollTop, scrollLeft } = event.currentTarget;\n flushSync(() => {\n setScrollTop(scrollTop);\n // scrollLeft is nagative when direction is rtl\n setScrollLeft(abs(scrollLeft));\n });\n onScroll?.(event);\n }\n\n function updateRow(column: CalculatedColumn<R, SR>, rowIdx: number, row: R) {\n if (typeof onRowsChange !== \"function\") return;\n if (row === rows[rowIdx]) return;\n const updatedRows = [\n ...rows.slice(0, rowIdx),\n row,\n ...rows.slice(rowIdx + 1),\n ];\n onRowsChange(updatedRows, {\n indexes: [rowIdx],\n column,\n });\n }\n\n function commitEditorChanges() {\n if (selectedPosition.mode !== \"EDIT\") return;\n const column = columns[selectedPosition.idx];\n if (!column) return;\n updateRow(column, selectedPosition.rowIdx, selectedPosition.row);\n }\n\n function handleCellCopy(event: CellClipboardEvent) {\n if (!selectedCellIsWithinViewportBounds) return;\n const { idx, rowIdx } = selectedPosition;\n const row = rows[rowIdx];\n const column = columns[idx];\n if (!row || !column) return;\n onCellCopy?.({ row, column }, event);\n }\n\n function handleCellPaste(event: CellClipboardEvent) {\n if (!onCellPaste || !onRowsChange || !isCellEditable(selectedPosition)) {\n return;\n }\n\n const { idx, rowIdx } = selectedPosition;\n const column = columns[idx];\n const row = rows[rowIdx];\n if (!column || !row) return;\n const updatedRow = onCellPaste({ row, column }, event);\n updateRow(column, rowIdx, updatedRow);\n }\n\n function handleCellInput(event: KeyboardEvent<HTMLDivElement>) {\n if (!selectedCellIsWithinViewportBounds) return;\n const row = rows[selectedPosition.rowIdx];\n if (!row) return;\n const { key, shiftKey } = event;\n\n // Select the row on Shift + Space\n if (isSelectable && shiftKey && key === \" \") {\n assertIsValidKeyGetter<R, K>(rowKeyGetter);\n const rowKey = rowKeyGetter(row);\n selectRow({\n row,\n checked: !selectedRows.has(rowKey),\n isShiftClick: false,\n });\n // prevent scrolling\n event.preventDefault();\n return;\n }\n\n if (\n isCellEditable(selectedPosition) &&\n isDefaultCellInput(event, onCellPaste != null)\n ) {\n setSelectedPosition(({ idx, rowIdx }) => ({\n idx,\n rowIdx,\n mode: \"EDIT\",\n row,\n originalRow: row,\n }));\n }\n }\n\n function handleColumnResizeEnd() {\n // This check is needed as double click on the resize handle triggers onPointerMove\n if (isColumnResizing) {\n onColumnWidthsChangeRaw?.(columnWidths);\n setColumnResizing(false);\n }\n }\n\n function handleDragHandlePointerDown(\n event: React.PointerEvent<HTMLDivElement>,\n ) {\n // keep the focus on the cell\n event.preventDefault();\n if (event.pointerType === \"mouse\" && event.buttons !== 1) {\n return;\n }\n setDragging(true);\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n\n function handleDragHandlePointerMove(\n event: React.PointerEvent<HTMLDivElement>,\n ) {\n // find dragged over row using the pointer position\n const gridEl = gridRef.current!;\n const headerAndTopSummaryRowsHeight =\n headerRowsHeight + topSummaryRowsCount * summaryRowHeight;\n const offset =\n scrollTop -\n headerAndTopSummaryRowsHeight +\n event.clientY -\n gridEl.getBoundingClientRect().top;\n const overRowIdx = findRowIdx(offset);\n setDraggedOverRowIdx(overRowIdx);\n const ariaRowIndex = headerAndTopSummaryRowsCount + overRowIdx + 1;\n const el = gridEl.querySelector(\n `:scope > [aria-rowindex=\"${ariaRowIndex}\"] > [aria-colindex=\"${selectedPosition.idx + 1}\"]`,\n );\n scrollIntoView(el);\n }\n\n function handleDragHandleLostPointerCapture() {\n setDragging(false);\n if (draggedOverRowIdx === undefined) return;\n\n const { rowIdx } = selectedPosition;\n const [startRowIndex, endRowIndex] =\n rowIdx < draggedOverRowIdx\n ? [rowIdx + 1, draggedOverRowIdx + 1]\n : [draggedOverRowIdx, rowIdx];\n updateRows(startRowIndex, endRowIndex);\n setDraggedOverRowIdx(undefined);\n }\n\n function handleDragHandleClick() {\n // keep the focus on the cell but do not scroll\n focusCell(false);\n }\n\n function handleDragHandleDoubleClick(\n event: React.MouseEvent<HTMLDivElement>,\n ) {\n event.stopPropagation();\n updateRows(selectedPosition.rowIdx + 1, rows.length);\n }\n\n function updateRows(startRowIdx: number, endRowIdx: number) {\n if (onRowsChange == null) return;\n\n const { rowIdx, idx } = selectedPosition;\n const column = columns[idx];\n const sourceRow = rows[rowIdx];\n if (!column || !sourceRow) return;\n const updatedRows = [...rows];\n const indexes: number[] = [];\n for (let i = startRowIdx; i < endRowIdx; i++) {\n if (isCellEditable({ rowIdx: i, idx })) {\n const targetRow = safeGet(rows, i);\n if (!targetRow) continue;\n\n const updatedRow = onFill?.({\n columnKey: column.key,\n sourceRow,\n targetRow,\n });\n if (updatedRow && updatedRow !== targetRow) {\n updatedRows[i] = updatedRow;\n indexes.push(i);\n }\n }\n }\n\n if (indexes.length > 0) {\n onRowsChange(updatedRows, { indexes, column });\n }\n }\n\n /**\n * utils\n */\n function isColIdxWithinSelectionBounds(idx: number) {\n return idx >= minColIdx && idx <= maxColIdx;\n }\n\n function isRowIdxWithinViewportBounds(rowIdx: number) {\n return rowIdx >= 0 && rowIdx < rows.length;\n }\n\n function isCellWithinSelectionBounds({ idx, rowIdx }: Position): boolean {\n return (\n rowIdx >= minRowIdx &&\n rowIdx <= maxRowIdx &&\n isColIdxWithinSelectionBounds(idx)\n );\n }\n\n function isCellWithinEditBounds({ idx, rowIdx }: Position): boolean {\n return isRowIdxWithinViewportBounds(rowIdx) && idx >= 0 && idx <= maxColIdx;\n }\n\n function isCellWithinViewportBounds({ idx, rowIdx }: Position): boolean {\n return (\n isRowIdxWithinViewportBounds(rowIdx) && isColIdxWithinSelectionBounds(idx)\n );\n }\n\n function isCellEditable(position: Position): boolean {\n return (\n isCellWithinEditBounds(position) &&\n isSelectedCellEditable({ columns, rows, selectedPosition: position })\n );\n }\n\n function selectCell(position: Position, options?: SelectCellOptions): void {\n if (!isCellWithinSelectionBounds(position)) return;\n commitEditorChanges();\n\n const samePosition = isSamePosition(selectedPosition, position);\n\n if (options?.enableEditor && isCellEditable(position)) {\n const row = rows[position.rowIdx];\n if (!row) return;\n setSelectedPosition({ ...position, mode: \"EDIT\", row, originalRow: row });\n } else if (samePosition) {\n // Avoid re-renders if the selected cell state is the same\n scrollIntoView(getCellToScroll(gridRef.current!));\n } else {\n setShouldFocusCell(options?.shouldFocusCell === true);\n setSelectedPosition({ ...position, mode: \"SELECT\" });\n }\n\n if (onSelectedCellChange && !samePosition) {\n const column = columns[position.idx];\n if (column) {\n onSelectedCellChange({\n rowIdx: position.rowIdx,\n row: isRowIdxWithinViewportBounds(position.rowIdx)\n ? rows[position.rowIdx]\n : undefined,\n column,\n });\n }\n }\n }\n\n function selectHeaderCell({ idx, rowIdx }: Position): void {\n selectCell({ rowIdx: minRowIdx + rowIdx - 1, idx });\n }\n\n function getNextPosition(\n key: string,\n ctrlKey: boolean,\n shiftKey: boolean,\n ): Position {\n const { idx, rowIdx } = selectedPosition;\n const isRowSelected = selectedCellIsWithinSelectionBounds && idx === -1;\n\n switch (key) {\n case \"ArrowUp\":\n return { idx, rowIdx: rowIdx - 1 };\n case \"ArrowDown\":\n return { idx, rowIdx: rowIdx + 1 };\n case leftKey:\n return { idx: idx - 1, rowIdx };\n case rightKey:\n return { idx: idx + 1, rowIdx };\n case \"Tab\":\n return { idx: idx + (shiftKey ? -1 : 1), rowIdx };\n case \"Home\":\n // If row is selected then move focus to the first row\n if (isRowSelected) return { idx, rowIdx: minRowIdx };\n return { idx: 0, rowIdx: ctrlKey ? minRowIdx : rowIdx };\n case \"End\":\n // If row is selected then move focus to the last row.\n if (isRowSelected) return { idx, rowIdx: maxRowIdx };\n return { idx: maxColIdx, rowIdx: ctrlKey ? maxRowIdx : rowIdx };\n case \"PageUp\": {\n if (selectedPosition.rowIdx === minRowIdx) return selectedPosition;\n const nextRowY =\n getRowTop(rowIdx) + getRowHeight(rowIdx) - clientHeight;\n return { idx, rowIdx: nextRowY > 0 ? findRowIdx(nextRowY) : 0 };\n }\n case \"PageDown\": {\n if (selectedPosition.rowIdx >= rows.length) return selectedPosition;\n const nextRowY = getRowTop(rowIdx) + clientHeight;\n return {\n idx,\n rowIdx:\n nextRowY < totalRowHeight ? findRowIdx(nextRowY) : rows.length - 1,\n };\n }\n default:\n return selectedPosition;\n }\n }\n\n function navigate(event: KeyboardEvent<HTMLDivElement>) {\n const { key, shiftKey } = event;\n let cellNavigationMode: CellNavigationMode = \"NONE\";\n if (key === \"Tab\") {\n if (\n canExitGrid({\n shiftKey,\n maxColIdx,\n minRowIdx,\n maxRowIdx,\n selectedPosition,\n })\n ) {\n commitEditorChanges();\n // Allow focus to leave the grid so the next control in the tab order can be focused\n return;\n }\n\n cellNavigationMode = \"CHANGE_ROW\";\n }\n\n // prevent scrolling and do not allow focus to leave\n event.preventDefault();\n\n const ctrlKey = isCtrlKeyHeldDown(event);\n const nextPosition = getNextPosition(key, ctrlKey, shiftKey);\n if (isSamePosition(selectedPosition, nextPosition)) return;\n\n const nextSelectedCellPosition = getNextSelectedCellPosition({\n moveUp: key === \"ArrowUp\",\n moveNext: key === rightKey || (key === \"Tab\" && !shiftKey),\n columns,\n colSpanColumns,\n rows,\n topSummaryRows,\n bottomSummaryRows,\n minRowIdx,\n mainHeaderRowIdx,\n maxRowIdx,\n lastFrozenColumnIndex,\n cellNavigationMode,\n currentPosition: selectedPosition,\n nextPosition,\n isCellWithinBounds: isCellWithinSelectionBounds,\n });\n\n selectCell(nextSelectedCellPosition, { shouldFocusCell: true });\n }\n\n function getDraggedOverCellIdx(currentRowIdx: number): number | undefined {\n if (draggedOverRowIdx === undefined) return;\n const { rowIdx } = selectedPosition;\n\n const isDraggedOver =\n rowIdx < draggedOverRowIdx\n ? rowIdx < currentRowIdx && currentRowIdx <= draggedOverRowIdx\n : rowIdx > currentRowIdx && currentRowIdx >= draggedOverRowIdx;\n\n return isDraggedOver ? selectedPosition.idx : undefined;\n }\n\n function getDragHandle() {\n if (\n onFill == null ||\n selectedPosition.mode === \"EDIT\" ||\n !isCellWithinViewportBounds(selectedPosition)\n ) {\n return;\n }\n\n const { idx, rowIdx } = selectedPosition;\n const column = columns[idx];\n if (!column || column.renderEditCell == null || column.editable === false) {\n return;\n }\n\n const isLastRow = rowIdx === maxRowIdx;\n const columnWidth = getColumnWidth(column);\n const row = rows[rowIdx];\n if (!row) return;\n const colSpan = column.colSpan?.({ type: \"ROW\", row }) ?? 1;\n const { insetInlineStart, ...style } = getCellStyle(column, colSpan);\n const marginEnd = \"calc(var(--rdg-drag-handle-size) * -0.5 + 1px)\";\n const isLastColumn = column.idx + colSpan - 1 === maxColIdx;\n const dragHandleStyle: React.CSSProperties = {\n ...style,\n gridRowStart: headerAndTopSummaryRowsCount + rowIdx + 1,\n marginInlineEnd: isLastColumn ? undefined : marginEnd,\n marginBlockEnd: isLastRow ? undefined : marginEnd,\n insetInlineStart: insetInlineStart\n ? `calc(${insetInlineStart} + ${columnWidth}px + var(--rdg-drag-handle-size) * -0.5 - 1px)`\n : undefined,\n };\n\n return (\n <div\n style={dragHandleStyle}\n className={clsx(\n cellDragHandleClassname,\n column.frozen && cellDragHandleFrozenClassname,\n )}\n onPointerDown={handleDragHandlePointerDown}\n onPointerMove={isDragging ? handleDragHandlePointerMove : undefined}\n onLostPointerCapture={\n isDragging ? handleDragHandleLostPointerCapture : undefined\n }\n onClick={handleDragHandleClick}\n onDoubleClick={handleDragHandleDoubleClick}\n />\n );\n }\n\n function getCellEditor(rowIdx: number) {\n if (\n selectedPosition.rowIdx !== rowIdx ||\n selectedPosition.mode === \"SELECT\"\n )\n return;\n\n const { idx, row } = selectedPosition;\n const column = columns[idx];\n if (!column) return undefined;\n const colSpan = getColSpan(column, lastFrozenColumnIndex, {\n type: \"ROW\",\n row,\n });\n const closeOnExternalRowChange =\n column.editorOptions?.closeOnExternalRowChange ?? true;\n\n const closeEditor = (shouldFocusCell: boolean) => {\n setShouldFocusCell(shouldFocusCell);\n setSelectedPosition(({ idx, rowIdx }) => ({\n idx,\n rowIdx,\n mode: \"SELECT\",\n }));\n };\n\n const onRowChange = (\n row: R,\n commitChanges: boolean,\n shouldFocusCell: boolean,\n ) => {\n if (commitChanges) {\n // Prevents two issues when editor is closed by clicking on a different cell\n //\n // Otherwise commitEditorChanges may be called before the cell state is changed to\n // SELECT and this results in onRowChange getting called twice.\n flushSync(() => {\n updateRow(column, selectedPosition.rowIdx, row);\n closeEditor(shouldFocusCell);\n });\n } else {\n setSelectedPosition((position) => ({ ...position, row }));\n }\n };\n\n if (\n closeOnExternalRowChange &&\n rows[selectedPosition.rowIdx] !== selectedPosition.originalRow\n ) {\n // Discard changes if rows are updated from outside\n closeEditor(false);\n }\n\n return (\n <EditCell\n key={column.key}\n column={column}\n colSpan={colSpan}\n row={row}\n rowIdx={rowIdx}\n onRowChange={onRowChange}\n closeEditor={closeEditor}\n onKeyDown={onCellKeyDown}\n navigate={navigate}\n />\n );\n }\n\n function getRowViewportColumns(rowIdx: number) {\n // idx can be -1 if grouping is enabled\n const selectedColumn =\n selectedPosition.idx === -1 ? undefined : columns[selectedPosition.idx];\n if (\n selectedColumn !== undefined &&\n selectedPosition.rowIdx === rowIdx &&\n !viewportColumns.includes(selectedColumn)\n ) {\n // Add the selected column to viewport columns if the cell is not within the viewport\n return selectedPosition.idx > colOverscanEndIdx\n ? [...viewportColumns, selectedColumn]\n : [\n ...viewportColumns.slice(0, lastFrozenColumnIndex + 1),\n selectedColumn,\n ...viewportColumns.slice(lastFrozenColumnIndex + 1),\n ];\n }\n return viewportColumns;\n }\n\n function getViewportRows() {\n const rowElements: React.ReactNode[] = [];\n\n const { idx: selectedIdx, rowIdx: selectedRowIdx } = selectedPosition;\n\n const startRowIdx =\n selectedCellIsWithinViewportBounds && selectedRowIdx < rowOverscanStartIdx\n ? rowOverscanStartIdx - 1\n : rowOverscanStartIdx;\n const endRowIdx =\n selectedCellIsWithinViewportBounds && selectedRowIdx > rowOverscanEndIdx\n ? rowOverscanEndIdx + 1\n : rowOverscanEndIdx;\n\n for (\n let viewportRowIdx = startRowIdx;\n viewportRowIdx <= endRowIdx;\n viewportRowIdx++\n ) {\n const isRowOutsideViewport =\n viewportRowIdx === rowOverscanStartIdx - 1 ||\n viewportRowIdx === rowOverscanEndIdx + 1;\n const rowIdx = isRowOutsideViewport ? selectedRowIdx : viewportRowIdx;\n\n let rowColumns = viewportColumns;\n const selectedColumn =\n selectedIdx === -1 ? undefined : columns[selectedIdx];\n if (selectedColumn !== undefined) {\n if (isRowOutsideViewport) {\n // if the row is outside the viewport then only render the selected cell\n rowColumns = [selectedColumn];\n } else {\n // if the row is within the viewport and cell is not, add the selected column to viewport columns\n rowColumns = getRowViewportColumns(rowIdx);\n }\n }\n\n const row = rows[rowIdx];\n if (!row) continue;\n const gridRowStart = headerAndTopSummaryRowsCount + rowIdx + 1;\n let key: K | number = rowIdx;\n let isRowSelected = false;\n if (typeof rowKeyGetter === \"function\") {\n key = rowKeyGetter(row);\n isRowSelected = selectedRows?.has(key) ?? false;\n }\n\n rowElements.push(\n renderRow(key, {\n // aria-rowindex is 1 based\n \"aria-rowindex\": headerAndTopSummaryRowsCount + rowIdx + 1,\n \"aria-selected\": isSelectable ? isRowSelected : undefined,\n rowIdx,\n row,\n viewportColumns: rowColumns,\n isRowSelectionDisabled: isRowSelectionDisabled?.(row) ?? false,\n isRowSelected,\n onCellMouseDown: onCellMouseDownLatest,\n onCellClick: onCellClickLatest,\n onCellDoubleClick: onCellDoubleClickLatest,\n onCellContextMenu: onCellContextMenuLatest,\n rowClass,\n gridRowStart,\n selectedCellIdx: selectedRowIdx === rowIdx ? selectedIdx : undefined,\n draggedOverCellIdx: getDraggedOverCellIdx(rowIdx),\n lastFrozenColumnIndex,\n onRowChange: handleFormatterRowChangeLatest,\n selectCell: selectCellLatest,\n selectedCellEditor: getCellEditor(rowIdx),\n }),\n );\n }\n return rowElements;\n }\n\n // Reset the positions if the current values are no longer valid. This can happen if a column or row is removed\n if (selectedPosition.idx > maxColIdx || selectedPosition.rowIdx > maxRowIdx) {\n setSelectedPosition({ idx: -1, rowIdx: minRowIdx - 1, mode: \"SELECT\" });\n setDraggedOverRowIdx(undefined);\n }\n\n // Keep the state and prop in sync\n if (isColumnWidthsControlled && columnWidthsInternal !== columnWidthsRaw) {\n setColumnWidthsInternal(columnWidthsRaw);\n }\n\n let templateRows = `repeat(${headerRowsCount}, ${headerRowHeight}px)`;\n if (topSummaryRowsCount > 0) {\n templateRows += ` repeat(${topSummaryRowsCount}, ${summaryRowHeight}px)`;\n }\n if (rows.length > 0) {\n templateRows += gridTemplateRows;\n }\n if (bottomSummaryRowsCount > 0) {\n templateRows += ` repeat(${bottomSummaryRowsCount}, ${summaryRowHeight}px)`;\n }\n\n const isGroupRowFocused =\n selectedPosition.idx === -1 && selectedPosition.rowIdx !== minRowIdx - 1;\n\n return (\n <div\n role={role}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-description={ariaDescription}\n aria-describedby={ariaDescribedBy}\n aria-multiselectable={isSelectable ? true : undefined}\n aria-colcount={columns.length}\n aria-rowcount={ariaRowCount}\n // Scrollable containers without tabIndex are keyboard focusable in Chrome only if there is no focusable element inside\n // whereas they are always focusable in Firefox. We need to set tabIndex to have a consistent behavior across browsers.\n tabIndex={-1}\n className={clsx(\n rootClassname,\n {\n [viewportDraggingClassname]: isDragging,\n },\n className,\n )}\n style={\n {\n ...(fallbackViewportHeight !== undefined\n ? { height: `${fallbackViewportHeight}px` }\n : {}),\n ...style,\n // set scrollPadding to correctly position non-sticky cells after scrolling\n scrollPaddingInlineStart:\n selectedPosition.idx > lastFrozenColumnIndex ||\n scrollToPosition?.idx !== undefined\n ? `${totalFrozenColumnWidth}px`\n : undefined,\n scrollPaddingBlock:\n isRowIdxWithinViewportBounds(selectedPosition.rowIdx) ||\n scrollToPosition?.rowIdx !== undefined\n ? `${headerRowsHeight + topSummaryRowsCount * summaryRowHeight}px ${\n bottomSummaryRowsCount * summaryRowHeight\n }px`\n : undefined,\n gridTemplateColumns,\n gridTemplateRows: templateRows,\n \"--rdg-header-row-height\": `${headerRowHeight}px`,\n \"--rdg-scroll-height\": `${scrollHeight}px`,\n ...layoutCssVars,\n } as unknown as React.CSSProperties\n }\n dir={direction}\n ref={gridRef}\n onScroll={handleScroll}\n onKeyDown={handleKeyDown}\n onCopy={handleCellCopy}\n onPaste={handleCellPaste}\n data-testid={testId}\n data-cy={dataCy}\n >\n <DataGridDefaultRenderersContext value={defaultGridComponents}>\n <HeaderRowSelectionChangeContext value={selectHeaderRowLatest}>\n <HeaderRowSelectionContext value={headerSelectionValue}>\n {Array.from(\n { length: groupedColumnHeaderRowsCount },\n (_, index) => (\n <GroupedColumnHeaderRow\n key={index}\n rowIdx={index + 1}\n level={-groupedColumnHeaderRowsCount + index}\n columns={getRowViewportColumns(minRowIdx + index)}\n selectedCellIdx={\n selectedPosition.rowIdx === minRowIdx + index\n ? selectedPosition.idx\n : undefined\n }\n selectCell={selectHeaderCellLatest}\n />\n ),\n )}\n <HeaderRow\n headerRowClass={headerRowClass}\n rowIdx={headerRowsCount}\n columns={getRowViewportColumns(mainHeaderRowIdx)}\n onColumnResize={handleColumnResizeLatest}\n onColumnResizeEnd={handleColumnResizeEndLatest}\n onColumnsReorder={onColumnsReorderLastest}\n sortColumns={sortColumns}\n onSortColumnsChange={onSortColumnsChangeLatest}\n lastFrozenColumnIndex={lastFrozenColumnIndex}\n selectedCellIdx={\n selectedPosition.rowIdx === mainHeaderRowIdx\n ? selectedPosition.idx\n : undefined\n }\n selectCell={selectHeaderCellLatest}\n shouldFocusGrid={!selectedCellIsWithinSelectionBounds}\n direction={direction}\n />\n </HeaderRowSelectionContext>\n </HeaderRowSelectionChangeContext>\n {rows.length === 0 && noRowsFallback ? (\n noRowsFallback\n ) : (\n <>\n {topSummaryRows?.map((row, rowIdx) => {\n const gridRowStart = headerRowsCount + 1 + rowIdx;\n const summaryRowIdx = mainHeaderRowIdx + 1 + rowIdx;\n const isSummaryRowSelected =\n selectedPosition.rowIdx === summaryRowIdx;\n const top = headerRowsHeight + summaryRowHeight * rowIdx;\n\n return (\n <SummaryRow\n key={rowIdx}\n aria-rowindex={gridRowStart}\n rowIdx={summaryRowIdx}\n gridRowStart={gridRowStart}\n row={row}\n top={top}\n bottom={undefined}\n viewportColumns={getRowViewportColumns(summaryRowIdx)}\n lastFrozenColumnIndex={lastFrozenColumnIndex}\n selectedCellIdx={\n isSummaryRowSelected ? selectedPosition.idx : undefined\n }\n isTop\n selectCell={selectCellLatest}\n />\n );\n })}\n <RowSelectionChangeContext value={selectRowLatest}>\n {getViewportRows()}\n </RowSelectionChangeContext>\n {bottomSummaryRows?.map((row, rowIdx) => {\n const gridRowStart =\n headerAndTopSummaryRowsCount + rows.length + rowIdx + 1;\n const summaryRowIdx = rows.length + rowIdx;\n const isSummaryRowSelected =\n selectedPosition.rowIdx === summaryRowIdx;\n const top =\n clientHeight > totalRowHeight\n ? gridHeight -\n summaryRowHeight * (bottomSummaryRows.length - rowIdx)\n : undefined;\n const bottom =\n top === undefined\n ? summaryRowHeight * (bottomSummaryRows.length - 1 - rowIdx)\n : undefined;\n\n return (\n <SummaryRow\n aria-rowindex={\n ariaRowCount - bottomSummaryRowsCount + rowIdx + 1\n }\n key={rowIdx}\n rowIdx={summaryRowIdx}\n gridRowStart={gridRowStart}\n row={row}\n top={top}\n bottom={bottom}\n viewportColumns={getRowViewportColumns(summaryRowIdx)}\n lastFrozenColumnIndex={lastFrozenColumnIndex}\n selectedCellIdx={\n isSummaryRowSelected ? selectedPosition.idx : undefined\n }\n isTop={false}\n selectCell={selectCellLatest}\n />\n );\n })}\n </>\n )}\n </DataGridDefaultRenderersContext>\n\n {getDragHandle()}\n\n {/* render empty cells that span only 1 column so we can safely measure column widths, regardless of colSpan */}\n {renderMeasuringCells(viewportColumns)}\n\n {/* extra div is needed for row navigation in a treegrid */}\n {isTreeGrid && (\n <div\n ref={focusSinkRef}\n tabIndex={isGroupRowFocused ? 0 : -1}\n className={clsx(focusSinkClassname, {\n [focusSinkHeaderAndSummaryClassname]: !isRowIdxWithinViewportBounds(\n selectedPosition.rowIdx,\n ),\n [rowSelected]: isGroupRowFocused,\n [rowSelectedWithFrozenCell]:\n isGroupRowFocused && lastFrozenColumnIndex !== -1,\n })}\n style={{\n gridRowStart:\n selectedPosition.rowIdx + headerAndTopSummaryRowsCount + 1,\n }}\n />\n )}\n\n {scrollToPosition !== null && (\n <ScrollToCell\n scrollToPosition={scrollToPosition}\n setScrollToCellPosition={setScrollToPosition}\n gridRef={gridRef}\n />\n )}\n </div>\n );\n}\n\nfunction getCellToScroll(gridEl: HTMLDivElement) {\n return gridEl.querySelector<HTMLDivElement>(\n ':scope > [role=\"row\"] > [tabindex=\"0\"]',\n );\n}\n\nfunction isSamePosition(p1: Position, p2: Position) {\n return p1.idx === p2.idx && p1.rowIdx === p2.rowIdx;\n}\n\n// Utility to safely access array elements with bounds checking\nfunction safeGet<T>(arr: readonly T[], index: number): T | undefined {\n return index >= 0 && index < arr.length ? arr[index] : undefined;\n}\n\n// Export the Column type as DataGridColumnDef for compatibility\nexport type { Column as DataGridColumnDef } from \"./types\";\n\n// Default export\nexport default DataGrid;\n","import { type MouseEvent, memo } from \"react\";\n\nimport { useRovingTabIndex } from \"./hooks/useRovingTabIndex\";\nimport { cellDraggedOverClassname } from \"./styles\";\nimport type { CellMouseEventHandler, CellRendererProps } from \"./types\";\nimport {\n createCellEvent,\n getCellClassname,\n getCellStyle,\n isCellEditableUtil,\n} from \"./utils\";\n\nfunction Cell<R, SR>({\n column,\n colSpan,\n isCellSelected,\n isDraggedOver,\n row,\n rowIdx,\n className,\n onMouseDown,\n onCellMouseDown,\n onClick,\n onCellClick,\n onDoubleClick,\n onCellDoubleClick,\n onContextMenu,\n onCellContextMenu,\n onRowChange,\n selectCell,\n style,\n ...props\n}: CellRendererProps<R, SR>) {\n const { tabIndex, childTabIndex, onFocus } =\n useRovingTabIndex(isCellSelected);\n\n const { cellClass } = column;\n className = getCellClassname(\n column,\n {\n [cellDraggedOverClassname]: isDraggedOver,\n },\n typeof cellClass === \"function\" ? cellClass(row) : cellClass,\n className,\n );\n const isEditable = isCellEditableUtil(column, row);\n\n function selectCellWrapper(enableEditor?: boolean) {\n selectCell({ rowIdx, idx: column.idx }, { enableEditor });\n }\n\n function handleMouseEvent(\n event: React.MouseEvent<HTMLDivElement>,\n eventHandler?: CellMouseEventHandler<R, SR>,\n ) {\n let eventHandled = false;\n if (eventHandler) {\n const cellEvent = createCellEvent(event);\n eventHandler(\n { rowIdx, row, column, selectCell: selectCellWrapper },\n cellEvent,\n );\n eventHandled = cellEvent.isGridDefaultPrevented();\n }\n return eventHandled;\n }\n\n function handleMouseDown(event: MouseEvent<HTMLDivElement>) {\n onMouseDown?.(event);\n if (!handleMouseEvent(event, onCellMouseDown)) {\n // select cell if the event is not prevented\n selectCellWrapper();\n }\n }\n\n function handleClick(event: MouseEvent<HTMLDivElement>) {\n onClick?.(event);\n handleMouseEvent(event, onCellClick);\n }\n\n function handleDoubleClick(event: MouseEvent<HTMLDivElement>) {\n onDoubleClick?.(event);\n if (!handleMouseEvent(event, onCellDoubleClick)) {\n // go into edit mode if the event is not prevented\n selectCellWrapper(true);\n }\n }\n\n function handleContextMenu(event: MouseEvent<HTMLDivElement>) {\n onContextMenu?.(event);\n handleMouseEvent(event, onCellContextMenu);\n }\n\n function handleRowChange(newRow: R) {\n onRowChange(column, newRow);\n }\n\n return (\n <div\n role=\"gridcell\"\n aria-colindex={column.idx + 1} // aria-colindex is 1-based\n aria-colspan={colSpan}\n aria-selected={isCellSelected}\n aria-readonly={!isEditable || undefined}\n tabIndex={tabIndex}\n className={className}\n style={{\n ...getCellStyle(column, colSpan),\n ...style,\n }}\n onClick={handleClick}\n onMouseDown={handleMouseDown}\n onDoubleClick={handleDoubleClick}\n onContextMenu={handleContextMenu}\n onFocus={onFocus}\n {...props}\n >\n {column.renderCell({\n column,\n row,\n rowIdx,\n isCellEditable: isEditable,\n tabIndex: childTabIndex,\n onRowChange: handleRowChange,\n })}\n </div>\n );\n}\n\nconst CellComponent = memo(Cell) as <R, SR>(\n props: CellRendererProps<R, SR>,\n) => React.JSX.Element;\n\nexport default CellComponent;\n\nexport function defaultRenderCell<R, SR>(\n key: React.Key,\n props: CellRendererProps<R, SR>,\n) {\n return <CellComponent key={key} {...props} />;\n}\n","import { useState } from \"react\";\n\n// https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_general_within\nexport function useRovingTabIndex(isSelected: boolean) {\n // https://www.w3.org/WAI/ARIA/apg/patterns/grid/#keyboardinteraction-settingfocusandnavigatinginsidecells\n const [isChildFocused, setIsChildFocused] = useState(false);\n\n if (isChildFocused && !isSelected) {\n setIsChildFocused(false);\n }\n\n function onFocus(event: React.FocusEvent<HTMLDivElement>) {\n // Do not steal focus if event originates from a focusable child\n if (event.target === event.currentTarget) {\n const elementToFocus = event.currentTarget.querySelector<\n Element & HTMLOrSVGElement\n >('[tabindex=\"0\"]');\n\n // Focus cell content when available instead of the cell itself\n if (elementToFocus !== null) {\n elementToFocus.focus({ preventScroll: true });\n setIsChildFocused(true);\n } else {\n setIsChildFocused(false);\n }\n } else {\n setIsChildFocused(true);\n }\n }\n\n const isFocusable = isSelected && !isChildFocused;\n\n return {\n tabIndex: isFocusable ? 0 : -1,\n childTabIndex: isSelected ? 0 : -1,\n onFocus: isSelected ? onFocus : undefined,\n };\n}\n","// CSS class names for React Data Grid components\n// Import the CSS file\nimport \"./styles/data-grid.css\";\n\n// Cell class names\nexport const cellClassname = \"rdg-cell\";\nexport const cellFrozenClassname = \"rdg-cell-frozen\";\nexport const cellDragHandleClassname = \"rdg-cell-drag-handle\";\nexport const cellDragHandleFrozenClassname = \"rdg-cell-drag-handle-frozen\";\nexport const cellDraggedOverClassname = \"rdg-cell-dragged-over\";\nexport const cellEditingClassname = \"rdg-cell-editing\";\nexport const cellSortableClassname = \"rdg-cell-sortable\";\nexport const cellResizableClassname = \"rdg-cell-resizable\";\nexport const cellDraggingClassname = \"rdg-cell-dragging\";\nexport const cellOverClassname = \"rdg-cell-over\";\nexport const resizeHandleClassname = \"rdg-resize-handle\";\nexport const dragImageClassname = \"rdg-drag-image\";\n\n// Row class names\nexport const rowClassname = \"rdg-row\";\nexport const rowSelectedClassname = \"rdg-row-selected\";\nexport const rowSelectedWithFrozenCell = \"rdg-row-selected-with-frozen-cell\";\nexport const headerRowClassname = \"rdg-header-row\";\nexport const summaryRowClassname = \"rdg-summary-row\";\nexport const topSummaryRowClassname = \"rdg-top-summary-row\";\nexport const bottomSummaryRowClassname = \"rdg-bottom-summary-row\";\nexport const groupRowClassname = \"rdg-group-row\";\n\n// Root class names\nexport const rootClassname = \"rdg\";\nexport const viewportDraggingClassname = \"rdg-viewport-dragging\";\nexport const focusSinkClassname = \"rdg-focus-sink\";\nexport const focusSinkHeaderAndSummaryClassname =\n \"rdg-focus-sink-header-and-summary\";\n\n// Other component class names\nexport const summaryCellClassname = \"rdg-summary-cell\";\nexport const measuringCellClassname = \"rdg-measuring-cell\";\nexport const textEditorClassname = \"rdg-text-editor\";\nexport const groupCellContentClassname = \"rdg-group-cell-content\";\nexport const groupCellCaretClassname = \"rdg-group-cell-caret\";\nexport const sortArrowClassname = \"rdg-sort-arrow\";\nexport const headerSortCellClassname = \"rdg-header-sort-cell\";\nexport const headerSortNameClassname = \"rdg-header-sort-name\";\n\n// Re-export individual class components for compatibility\nexport const cell = \"\";\nexport const cellFrozen = \"\";\nexport const cellDragHandle = \"\";\nexport const row = \"\";\nexport const rowSelected = \"\";\nexport const root = \"\";\nexport const viewportDragging = \"\";\nexport const focusSink = \"\";\nexport const focusSinkHeaderAndSummary = \"\";\nexport const summaryRow = \"\";\nexport const topSummaryRow = \"\";\nexport const bottomSummaryRow = \"\";\nexport const headerRow = \"\";\nexport const groupRow = \"\";\nexport const cellSortable = \"\";\nexport const cellResizable = \"\";\nexport const cellDragging = \"\";\nexport const cellOver = \"\";\nexport const headerSortCell = \"\";\nexport const headerSortName = \"\";\nexport const arrow = \"\";\nexport const groupCellContent = \"\";\nexport const caret = \"\";\nexport const checkbox = \"\";\nexport const textEditorInternal = \"\";\nexport const measuringCell = \"\";\n","import type { CalculatedColumn, ColSpanArgs } from \"../types\";\n\nexport function getColSpan<R, SR>(\n column: CalculatedColumn<R, SR>,\n lastFrozenColumnIndex: number,\n args: ColSpanArgs<R, SR>,\n): number | undefined {\n const colSpan =\n typeof column.colSpan === \"function\" ? column.colSpan(args) : 1;\n if (\n Number.isInteger(colSpan) &&\n colSpan! > 1 &&\n // ignore colSpan if it spans over both frozen and regular columns\n (!column.frozen || column.idx + colSpan! - 1 <= lastFrozenColumnIndex)\n ) {\n return colSpan!;\n }\n return undefined;\n}\n","import type { Maybe } from \"../types\";\n\nexport function stopPropagation(event: React.SyntheticEvent) {\n event.stopPropagation();\n}\n\nexport function scrollIntoView(\n element: Maybe<Element>,\n behavior: ScrollBehavior = \"instant\",\n) {\n element?.scrollIntoView({ inline: \"nearest\", block: \"nearest\", behavior });\n}\n","import type { CellEvent } from \"../types\";\n\nexport function createCellEvent<E extends React.SyntheticEvent<HTMLDivElement>>(\n event: E,\n): CellEvent<E> {\n let defaultPrevented = false;\n const cellEvent = {\n ...event,\n preventGridDefault() {\n defaultPrevented = true;\n },\n isGridDefaultPrevented() {\n return defaultPrevented;\n },\n };\n\n Object.setPrototypeOf(cellEvent, Object.getPrototypeOf(event));\n\n return cellEvent;\n}\n","import type { Direction, Maybe } from \"../types\";\n\n// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\nconst nonInputKeys = new Set([\n // Special keys\n \"Unidentified\",\n // Modifier keys\n \"Alt\",\n \"AltGraph\",\n \"CapsLock\",\n \"Control\",\n \"Fn\",\n \"FnLock\",\n \"Meta\",\n \"NumLock\",\n \"ScrollLock\",\n \"Shift\",\n // Whitespace keys\n \"Tab\",\n // Navigation keys\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"End\",\n \"Home\",\n \"PageDown\",\n \"PageUp\",\n // Editing\n \"Insert\",\n // UI keys\n \"ContextMenu\",\n \"Escape\",\n \"Pause\",\n \"Play\",\n // Device keys\n \"PrintScreen\",\n // Function keys\n \"F1\",\n // 'F2', /!\\ specifically allowed, do not edit\n \"F3\",\n \"F4\",\n \"F5\",\n \"F6\",\n \"F7\",\n \"F8\",\n \"F9\",\n \"F10\",\n \"F11\",\n \"F12\",\n]);\n\nexport function isCtrlKeyHeldDown(e: React.KeyboardEvent): boolean {\n return (e.ctrlKey || e.metaKey) && e.key !== \"Control\";\n}\n\n// event.key may differ by keyboard input language, so we use event.keyCode instead\n// event.nativeEvent.code cannot be used either as it would break copy/paste for the DVORAK layout\nconst vKey = 86;\n\nexport function isDefaultCellInput(\n event: React.KeyboardEvent<HTMLDivElement>,\n isUserHandlingPaste: boolean,\n): boolean {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n if (\n isCtrlKeyHeldDown(event) &&\n (event.keyCode !== vKey || isUserHandlingPaste)\n )\n return false;\n return !nonInputKeys.has(event.key);\n}\n\n/**\n * By default, the following navigation keys are enabled while an editor is open, under specific conditions:\n * - Tab:\n * - The editor must be an <input>, a <textarea>, or a <select> element.\n * - The editor element must be the only immediate child of the editor container/a label.\n */\nexport function onEditorNavigation({\n key,\n target,\n}: React.KeyboardEvent<HTMLDivElement>): boolean {\n if (\n key === \"Tab\" &&\n (target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement)\n ) {\n return (\n target\n .closest(\".rdg-editor-container\")\n ?.querySelectorAll(\"input, textarea, select\").length === 1\n );\n }\n return false;\n}\n\nexport function getLeftRightKey(direction: Maybe<Direction>) {\n const isRtl = direction === \"rtl\";\n\n return {\n leftKey: isRtl ? \"ArrowRight\" : \"ArrowLeft\",\n rightKey: isRtl ? \"ArrowLeft\" : \"ArrowRight\",\n } as const;\n}\n","import { measuringCellClassname } from \"../styles\";\nimport type { CalculatedColumn } from \"../types\";\n\nexport function renderMeasuringCells<R, SR>(\n viewportColumns: readonly CalculatedColumn<R, SR>[],\n) {\n return viewportColumns.map(({ key, idx, minWidth, maxWidth }) => (\n <div\n key={key}\n className={measuringCellClassname}\n style={{ gridColumnStart: idx + 1, minWidth, maxWidth }}\n data-measuring-cell-key={key}\n />\n ));\n}\n","import type {\n CalculatedColumn,\n CalculatedColumnParent,\n CellNavigationMode,\n Maybe,\n Position,\n} from \"../types\";\nimport { getColSpan } from \"./colSpanUtils\";\n\ninterface IsSelectedCellEditableOpts<R, SR> {\n selectedPosition: Position;\n columns: readonly CalculatedColumn<R, SR>[];\n rows: readonly R[];\n}\n\nexport function isSelectedCellEditable<R, SR>({\n selectedPosition,\n columns,\n rows,\n}: IsSelectedCellEditableOpts<R, SR>): boolean {\n const column = columns[selectedPosition.idx];\n const row = rows[selectedPosition.rowIdx];\n if (!column || !row) return false;\n return isCellEditableUtil(column, row);\n}\n\n// https://github.com/vercel/next.js/issues/56480\nexport function isCellEditableUtil<R, SR>(\n column: CalculatedColumn<R, SR>,\n row: R,\n): boolean {\n return (\n column.renderEditCell != null &&\n (typeof column.editable === \"function\"\n ? column.editable(row)\n : column.editable) !== false\n );\n}\n\ninterface GetNextSelectedCellPositionOpts<R, SR> {\n moveUp: boolean;\n moveNext: boolean;\n cellNavigationMode: CellNavigationMode;\n columns: readonly CalculatedColumn<R, SR>[];\n colSpanColumns: readonly CalculatedColumn<R, SR>[];\n rows: readonly R[];\n topSummaryRows: Maybe<readonly SR[]>;\n bottomSummaryRows: Maybe<readonly SR[]>;\n minRowIdx: number;\n mainHeaderRowIdx: number;\n maxRowIdx: number;\n currentPosition: Position;\n nextPosition: Position;\n lastFrozenColumnIndex: number;\n isCellWithinBounds: (position: Position) => boolean;\n}\n\nfunction getSelectedCellColSpan<R, SR>({\n rows,\n topSummaryRows,\n bottomSummaryRows,\n rowIdx,\n mainHeaderRowIdx,\n lastFrozenColumnIndex,\n column,\n}: Pick<\n GetNextSelectedCellPositionOpts<R, SR>,\n | \"rows\"\n | \"topSummaryRows\"\n | \"bottomSummaryRows\"\n | \"lastFrozenColumnIndex\"\n | \"mainHeaderRowIdx\"\n> & {\n rowIdx: number;\n column: CalculatedColumn<R, SR>;\n}) {\n const topSummaryRowsCount = topSummaryRows?.length ?? 0;\n if (rowIdx === mainHeaderRowIdx) {\n return getColSpan(column, lastFrozenColumnIndex, { type: \"HEADER\" });\n }\n\n if (\n topSummaryRows &&\n rowIdx > mainHeaderRowIdx &&\n rowIdx <= topSummaryRowsCount + mainHeaderRowIdx\n ) {\n const summaryRow = topSummaryRows[rowIdx + topSummaryRowsCount];\n if (summaryRow) {\n return getColSpan(column as any, lastFrozenColumnIndex, {\n type: \"SUMMARY\",\n row: summaryRow,\n });\n }\n }\n\n if (rowIdx >= 0 && rowIdx < rows.length) {\n const row = rows[rowIdx];\n if (row) {\n return getColSpan(column as any, lastFrozenColumnIndex, {\n type: \"ROW\",\n row,\n });\n }\n }\n\n if (bottomSummaryRows) {\n const summaryRow = bottomSummaryRows[rowIdx - rows.length];\n if (summaryRow) {\n return getColSpan(column as any, lastFrozenColumnIndex, {\n type: \"SUMMARY\",\n row: summaryRow,\n });\n }\n }\n\n return undefined;\n}\n\nexport function getNextSelectedCellPosition<R, SR>({\n moveUp,\n moveNext,\n cellNavigationMode,\n columns,\n colSpanColumns,\n rows,\n topSummaryRows,\n bottomSummaryRows,\n minRowIdx,\n mainHeaderRowIdx,\n maxRowIdx,\n currentPosition: { idx: currentIdx, rowIdx: currentRowIdx },\n nextPosition,\n lastFrozenColumnIndex,\n isCellWithinBounds,\n}: GetNextSelectedCellPositionOpts<R, SR>): Position {\n let { idx: nextIdx, rowIdx: nextRowIdx } = nextPosition;\n const columnsCount = columns.length;\n\n const setColSpan = (moveNext: boolean) => {\n // If a cell within the colspan range is selected then move to the\n // previous or the next cell depending on the navigation direction\n for (const column of colSpanColumns) {\n const colIdx = column.idx;\n if (colIdx > nextIdx) break;\n const colSpan = getSelectedCellColSpan({\n rows,\n topSummaryRows,\n bottomSummaryRows,\n rowIdx: nextRowIdx,\n mainHeaderRowIdx,\n lastFrozenColumnIndex,\n column,\n });\n\n if (colSpan && nextIdx > colIdx && nextIdx < colSpan + colIdx) {\n nextIdx = colIdx + (moveNext ? colSpan : 0);\n break;\n }\n }\n };\n\n const getParentRowIdx = (parent: CalculatedColumnParent<R, SR>) => {\n return parent.level + mainHeaderRowIdx;\n };\n\n const setHeaderGroupColAndRowSpan = () => {\n if (moveNext) {\n // find the parent at the same row level\n const nextColumn = columns[nextIdx];\n if (!nextColumn) return { idx: nextIdx, rowIdx: nextRowIdx };\n let parent = nextColumn.parent;\n while (parent !== undefined) {\n const parentRowIdx = getParentRowIdx(parent);\n if (nextRowIdx === parentRowIdx) {\n nextIdx = parent.idx + parent.colSpan;\n break;\n }\n parent = parent.parent;\n }\n } else if (moveUp) {\n // find the first reachable parent\n const nextColumn = columns[nextIdx];\n if (!nextColumn) return { idx: nextIdx, rowIdx: nextRowIdx };\n let parent = nextColumn.parent;\n let found = false;\n while (parent !== undefined) {\n const parentRowIdx = getParentRowIdx(parent);\n if (nextRowIdx >= parentRowIdx) {\n nextIdx = parent.idx;\n nextRowIdx = parentRowIdx;\n found = true;\n break;\n }\n parent = parent.parent;\n }\n\n // keep the current position if there is no parent matching the new row position\n if (!found) {\n nextIdx = currentIdx;\n nextRowIdx = currentRowIdx;\n }\n }\n };\n\n if (isCellWithinBounds(nextPosition)) {\n setColSpan(moveNext);\n\n if (nextRowIdx < mainHeaderRowIdx) {\n setHeaderGroupColAndRowSpan();\n }\n }\n\n if (cellNavigationMode === \"CHANGE_ROW\") {\n const isAfterLastColumn = nextIdx === columnsCount;\n const isBeforeFirstColumn = nextIdx === -1;\n\n if (isAfterLastColumn) {\n const isLastRow = nextRowIdx === maxRowIdx;\n if (!isLastRow) {\n nextIdx = 0;\n nextRowIdx += 1;\n }\n } else if (isBeforeFirstColumn) {\n const isFirstRow = nextRowIdx === minRowIdx;\n if (!isFirstRow) {\n nextRowIdx -= 1;\n nextIdx = columnsCount - 1;\n }\n setColSpan(false);\n }\n }\n\n if (nextRowIdx < mainHeaderRowIdx && nextIdx > -1 && nextIdx < columnsCount) {\n // Find the last reachable parent for the new rowIdx\n // This check is needed when navigating to a column\n // that does not have a parent matching the new rowIdx\n const nextColumn = columns[nextIdx];\n if (!nextColumn) return { idx: nextIdx, rowIdx: nextRowIdx };\n let parent = nextColumn.parent;\n const nextParentRowIdx = nextRowIdx;\n nextRowIdx = mainHeaderRowIdx;\n while (parent !== undefined) {\n const parentRowIdx = getParentRowIdx(parent);\n if (parentRowIdx >= nextParentRowIdx) {\n nextRowIdx = parentRowIdx;\n nextIdx = parent.idx;\n }\n parent = parent.parent;\n }\n }\n\n return { idx: nextIdx, rowIdx: nextRowIdx };\n}\n\ninterface CanExitGridOpts {\n maxColIdx: number;\n minRowIdx: number;\n maxRowIdx: number;\n selectedPosition: Position;\n shiftKey: boolean;\n}\n\nexport function canExitGrid({\n maxColIdx,\n minRowIdx,\n maxRowIdx,\n selectedPosition: { rowIdx, idx },\n shiftKey,\n}: CanExitGridOpts): boolean {\n // Exit the grid if we're at the first or last cell of the grid\n const atLastCellInRow = idx === maxColIdx;\n const atFirstCellInRow = idx === 0;\n const atLastRow = rowIdx === maxRowIdx;\n const atFirstRow = rowIdx === minRowIdx;\n\n return shiftKey\n ? atFirstCellInRow && atFirstRow\n : atLastCellInRow && atLastRow;\n}\n","import clsx from \"clsx\";\nimport type { CSSProperties } from \"react\";\nimport { cellClassname, cellFrozenClassname } from \"../styles\";\nimport type { CalculatedColumn, CalculatedColumnOrColumnGroup } from \"../types\";\n\nexport function getRowStyle(rowIdx: number): CSSProperties {\n return { \"--rdg-grid-row-start\": rowIdx } as unknown as CSSProperties;\n}\n\nexport function getHeaderCellStyle<R, SR>(\n column: CalculatedColumnOrColumnGroup<R, SR>,\n rowIdx: number,\n rowSpan: number,\n): React.CSSProperties {\n const gridRowEnd = rowIdx + 1;\n const paddingBlockStart = `calc(${rowSpan - 1} * var(--rdg-header-row-height))`;\n\n if (column.parent === undefined) {\n return {\n insetBlockStart: 0,\n gridRowStart: 1,\n gridRowEnd,\n paddingBlockStart,\n };\n }\n\n return {\n insetBlockStart: `calc(${rowIdx - rowSpan} * var(--rdg-header-row-height))`,\n gridRowStart: gridRowEnd - rowSpan,\n gridRowEnd,\n paddingBlockStart,\n };\n}\n\nexport function getCellStyle<R, SR>(\n column: CalculatedColumn<R, SR>,\n colSpan = 1,\n): React.CSSProperties {\n const index = column.idx + 1;\n return {\n gridColumnStart: index,\n gridColumnEnd: index + colSpan,\n insetInlineStart: column.frozen\n ? `var(--rdg-frozen-left-${column.idx})`\n : undefined,\n };\n}\n\nexport function getCellClassname<R, SR>(\n column: CalculatedColumn<R, SR>,\n ...extraClasses: Parameters<typeof clsx>\n): string {\n return clsx(\n cellClassname,\n {\n [cellFrozenClassname]: column.frozen,\n },\n ...extraClasses,\n );\n}\n","import type {\n CalculatedColumn,\n CalculatedColumnOrColumnGroup,\n Maybe,\n} from \"../types\";\n\nexport { getColSpan } from \"./colSpanUtils\";\nexport { scrollIntoView, stopPropagation } from \"./domUtils\";\nexport { createCellEvent } from \"./eventUtils\";\nexport {\n getLeftRightKey,\n isCtrlKeyHeldDown,\n isDefaultCellInput,\n onEditorNavigation,\n} from \"./keyboardUtils\";\nexport { renderMeasuringCells } from \"./renderMeasuringCells\";\nexport {\n canExitGrid,\n getNextSelectedCellPosition,\n isCellEditableUtil,\n isSelectedCellEditable,\n} from \"./selectedCellUtils\";\nexport {\n getCellClassname,\n getCellStyle,\n getHeaderCellStyle,\n getRowStyle,\n} from \"./styleUtils\";\n\nexport const { min, max, floor, sign, abs } = Math;\n\nexport function assertIsValidKeyGetter<R, K extends React.Key>(\n keyGetter: Maybe<(row: NoInfer<R>) => K>,\n): asserts keyGetter is (row: R) => K {\n if (typeof keyGetter !== \"function\") {\n throw new Error(\"Please specify the rowKeyGetter prop to use selection\");\n }\n}\n\nexport function clampColumnWidth<R, SR>(\n width: number,\n { minWidth, maxWidth }: CalculatedColumn<R, SR>,\n): number {\n width = max(width, minWidth);\n\n // ignore maxWidth if it less than minWidth\n if (typeof maxWidth === \"number\" && maxWidth >= minWidth) {\n return min(width, maxWidth);\n }\n\n return width;\n}\n\nexport function getHeaderCellRowSpan<R, SR>(\n column: CalculatedColumnOrColumnGroup<R, SR>,\n rowIdx: number,\n) {\n return column.parent === undefined\n ? rowIdx\n : column.level - column.parent.level;\n}\n","import { MoreHorizontalIcon } from \"lucide-react\";\nimport { executeAction } from \"../../../actions/executeAction\";\nimport type { ActionOrSeparator } from \"../../../actions/types\";\nimport { useResourceContext } from \"../../../context/ResourceContext\";\nimport { Button } from \"../../buttons/Button/Button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../../dropdown-menu/DropdownMenu\";\nimport type { RenderCellProps, RenderGroupCellProps } from \"../types\";\n\ninterface ActionCellFormatterProps<R> {\n actions: ActionOrSeparator[];\n row?: R;\n context?: any;\n}\n\nexport function ActionCellFormatter<R>({\n row,\n actions,\n context,\n idField = \"id\",\n}: ActionCellFormatterProps<R> & { idField?: string }) {\n const resourceContext = useResourceContext();\n\n // Don't show actions if there's no row data or no actions\n if (!row || !actions || actions.length === 0) {\n return null;\n }\n\n const handleActionClick = async (action: ActionOrSeparator) => {\n if (action === \"separator\") return;\n\n try {\n if (action.type === \"handler\") {\n // For handler actions, pass both rowData and context\n await action.onExecute({\n rowData: row,\n context: context,\n });\n } else if (action.type === \"resource\") {\n // For resource actions on single rows, create a temporary context with just this row\n if (!resourceContext) {\n console.error(\"Resource action executed outside ResourceContext\");\n return;\n }\n\n const rowId = (row as any)[idField];\n if (!rowId) {\n console.error(`Row missing ID field \"${idField}\"`);\n return;\n }\n\n // Create single-item resource context for this row action\n const singleRowResourceContext = {\n resourceType: resourceContext.resourceType,\n selectedIds: new Set([rowId]) as ReadonlySet<string | number>,\n };\n\n await executeAction(action, context, singleRowResourceContext);\n } else {\n // For command actions\n await executeAction(action, context);\n }\n } catch (error) {\n console.error(\"Error executing row action:\", error);\n }\n };\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n className=\"h-8 w-8 p-0 !bg-transparent hover:!bg-transparent !shadow-none !text-muted-foreground hover:!text-foreground\"\n >\n <span className=\"sr-only\">Open actions menu</span>\n <MoreHorizontalIcon className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" side=\"bottom\" className=\"w-48\">\n {actions.map((action, index) => {\n if (action === \"separator\") {\n return <DropdownMenuSeparator key={`separator-${index}`} />;\n }\n\n return (\n <DropdownMenuItem\n key={action.id}\n variant={\n action.variant === \"destructive\" ? \"destructive\" : \"default\"\n }\n onClick={() => handleActionClick(action)}\n disabled={action.disabled}\n >\n {action.icon && <action.icon className=\"mr-2 h-4 w-4\" />}\n {action.label}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n// Wrapper for regular cell renderer\nexport function ActionCellRendererCell<R>(\n props: RenderCellProps<R> & {\n actions: ActionOrSeparator[];\n context?: any;\n idField?: string;\n },\n) {\n return (\n <ActionCellFormatter\n row={props.row}\n actions={props.actions}\n context={props.context}\n idField={props.idField}\n />\n );\n}\n\n// Wrapper for group cell renderer\nexport function ActionCellRendererGroup<R>(\n _props: RenderGroupCellProps<R> & {\n actions: ActionOrSeparator[];\n context?: any;\n },\n) {\n // For group cells, we don't show actions as they don't represent individual data items\n return null;\n}\n","import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../../styling/cn\";\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n );\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n );\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n side = \"bottom\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n side={side}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n );\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n );\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { useCombobox, useSelect } from \"downshift\";\nimport type React from \"react\";\nimport { forwardRef, useMemo, useState } from \"react\";\nimport { cn } from \"../../../../styling/cn\";\n\nconst selectVariants = cva(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n);\n\nconst menuVariants = cva(\n \"absolute z-50 w-full mt-1 bg-background border border-border rounded-md shadow-lg max-h-60 overflow-auto text-sm\",\n);\n\nconst optionVariants = cva(\n \"px-4 py-2 cursor-pointer transition-colors select-none\",\n {\n variants: {\n isHighlighted: {\n true: \"bg-secondary text-secondary-foreground\",\n false: \"text-foreground hover:bg-muted\",\n },\n isSelected: {\n true: \"bg-primary text-primary-foreground\",\n false: \"\",\n },\n },\n defaultVariants: {\n isHighlighted: false,\n isSelected: false,\n },\n },\n);\n\nexport interface SelectOption<T = unknown> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps<T = unknown>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"onSelect\">,\n VariantProps<typeof selectVariants> {\n options: SelectOption<T>[];\n value?: T;\n onChange?: (value: T | null) => void;\n onSelectionChange?: (selectedItem: SelectOption<T> | null) => void;\n placeholder?: string;\n disabled?: boolean;\n hasError?: boolean;\n loading?: boolean;\n loadingMessage?: string;\n emptyMessage?: string;\n clearable?: boolean;\n searchable?: boolean;\n filterOptions?: (\n options: SelectOption<T>[],\n inputValue: string,\n ) => SelectOption<T>[];\n}\n\nconst Select = forwardRef<HTMLDivElement, SelectProps<any>>(\n <T,>(\n {\n className,\n hasError,\n options = [],\n value,\n onChange,\n onSelectionChange,\n placeholder = \"Select an option...\",\n disabled = false,\n loading = false,\n loadingMessage = \"Loading...\",\n emptyMessage = \"No options available\",\n clearable = false,\n searchable = false,\n filterOptions,\n ...props\n }: SelectProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>,\n ) => {\n // Find selected item based on value\n const selectedItem = useMemo(() => {\n return options.find((option) => option.value === value) || null;\n }, [options, value]);\n\n // State for searchable input\n const [inputValue, setInputValue] = useState(\"\");\n\n // Default filter function for searchable selects\n const defaultFilterOptions = (\n opts: SelectOption<T>[],\n inputValue: string,\n ) => {\n return opts.filter((option) =>\n option.label.toLowerCase().includes(inputValue.toLowerCase()),\n );\n };\n\n const actualFilterOptions = filterOptions || defaultFilterOptions;\n\n // Filter options when searchable\n const filteredOptions = useMemo(() => {\n if (!searchable || !inputValue) return options;\n return actualFilterOptions(options, inputValue);\n }, [searchable, inputValue, options, actualFilterOptions]);\n\n const displayOptions = loading ? [] : filteredOptions;\n\n // Use different downshift hooks based on searchable mode\n const selectHook = useSelect({\n items: displayOptions,\n selectedItem,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n if (newSelectedItem) {\n onChange?.(newSelectedItem.value);\n onSelectionChange?.(newSelectedItem);\n } else if (clearable) {\n onChange?.(null);\n onSelectionChange?.(null);\n }\n },\n itemToString: (item) => item?.label || \"\",\n });\n\n const comboboxHook = useCombobox({\n items: displayOptions,\n selectedItem,\n inputValue,\n onInputValueChange: ({ inputValue }) => {\n setInputValue(inputValue || \"\");\n },\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n if (newSelectedItem) {\n onChange?.(newSelectedItem.value);\n onSelectionChange?.(newSelectedItem);\n setInputValue(newSelectedItem.label);\n } else if (clearable) {\n onChange?.(null);\n onSelectionChange?.(null);\n setInputValue(\"\");\n }\n },\n itemToString: (item) => item?.label || \"\",\n });\n\n // Use appropriate hook based on searchable mode\n const hook = searchable ? comboboxHook : selectHook;\n const {\n isOpen,\n getToggleButtonProps,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n } = hook;\n\n // Get input props for searchable mode\n const getInputProps = searchable ? comboboxHook.getInputProps : undefined;\n\n const ChevronIcon = ({ isOpen }: { isOpen: boolean }) => (\n <svg\n className={cn(\n \"w-5 h-5 transition-transform duration-200\",\n isOpen ? \"rotate-180\" : \"rotate-0\",\n )}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <title>Toggle dropdown</title>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n );\n\n const ClearIcon = () => (\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <title>Clear selection</title>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n );\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(null);\n onSelectionChange?.(null);\n };\n\n return (\n <div ref={ref} className={cn(\"relative\", className)} {...props}>\n <div className=\"relative\">\n {searchable ? (\n <input\n {...(getInputProps?.({\n className: cn(selectVariants(), \"pr-10\"),\n disabled,\n placeholder: selectedItem?.label || placeholder,\n \"aria-invalid\": hasError,\n \"data-slot\": \"input\",\n }) || {})}\n />\n ) : (\n <button\n type=\"button\"\n {...getToggleButtonProps({\n className: cn(\n selectVariants(),\n \"items-center justify-between pr-10 cursor-pointer\",\n !selectedItem && \"text-muted-foreground\",\n ),\n disabled: disabled || loading,\n \"aria-invalid\": hasError,\n \"data-slot\": \"input\",\n })}\n >\n <span className=\"truncate\">\n {loading ? loadingMessage : selectedItem?.label || placeholder}\n </span>\n </button>\n )}\n\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none\">\n {loading ? (\n <div className=\"animate-spin rounded-full h-4 w-4 border-2 border-primary border-t-transparent\" />\n ) : (\n <ChevronIcon isOpen={isOpen} />\n )}\n </div>\n\n {clearable && selectedItem && !disabled && !loading && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"absolute inset-y-0 right-8 flex items-center pr-2 text-muted-foreground hover:text-foreground transition-colors\"\n aria-label=\"Clear selection\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n\n <ul\n {...getMenuProps({\n className: cn(menuVariants(), !isOpen && \"hidden\"),\n })}\n >\n {isOpen &&\n (displayOptions.length === 0 ? (\n <li className=\"px-4 py-2 text-muted-foreground text-center\">\n {loading ? loadingMessage : emptyMessage}\n </li>\n ) : (\n displayOptions.map((option, index) => (\n <li\n key={`${option.value}-${index}`}\n {...getItemProps({\n item: option,\n index,\n className: cn(\n optionVariants({\n isHighlighted: highlightedIndex === index,\n isSelected: selectedItem?.value === option.value,\n }),\n option.disabled && \"opacity-50 cursor-not-allowed\",\n ),\n style: option.disabled\n ? { pointerEvents: \"none\" }\n : undefined,\n })}\n >\n <span className=\"block truncate\">{option.label}</span>\n {selectedItem?.value === option.value && (\n <span className=\"absolute inset-y-0 right-0 flex items-center pr-3\">\n <svg\n className=\"w-4 h-4\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <title>Selected</title>\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </span>\n )}\n </li>\n ))\n ))}\n </ul>\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n\nexport { Select, selectVariants };\n","import { Checkbox } from \"../../form-controls\";\nimport type { RenderCheckboxProps } from \"../types\";\n\nexport function renderCheckbox({\n onChange,\n indeterminate,\n ...props\n}: RenderCheckboxProps) {\n function handleClick(event: React.MouseEvent<HTMLButtonElement>) {\n const checked = !props.checked;\n onChange(checked, event.shiftKey);\n }\n\n return (\n <div className=\"flex items-center justify-center\">\n <Checkbox\n data-indeterminate={indeterminate}\n className={\n indeterminate\n ? \"data-[indeterminate=true]:bg-primary data-[indeterminate=true]:border-primary\"\n : \"\"\n }\n onClick={handleClick}\n {...props}\n />\n </div>\n );\n}\n","import { groupCellCaretClassname, groupCellContentClassname } from \"../styles\";\nimport type { RenderGroupCellProps } from \"../types\";\n\nconst caretClassname = groupCellCaretClassname;\n\nexport function renderToggleGroup<R, SR>(props: RenderGroupCellProps<R, SR>) {\n return <ToggleGroup {...props} />;\n}\n\nexport function ToggleGroup<R, SR>({\n groupKey,\n isExpanded,\n tabIndex,\n toggleGroup,\n}: RenderGroupCellProps<R, SR>) {\n function handleKeyDown({ key }: React.KeyboardEvent<HTMLSpanElement>) {\n if (key === \"Enter\") {\n toggleGroup();\n }\n }\n\n const d = isExpanded ? \"M1 1 L 7 7 L 13 1\" : \"M1 7 L 7 1 L 13 7\";\n\n return (\n <span\n className={groupCellContentClassname}\n tabIndex={tabIndex}\n onKeyDown={handleKeyDown}\n >\n {groupKey as string}\n <svg\n viewBox=\"0 0 14 8\"\n width=\"14\"\n height=\"8\"\n className={caretClassname}\n aria-hidden\n >\n <path d={d} />\n </svg>\n </span>\n );\n}\n","import type { RenderCellProps } from \"../types\";\n\nexport function renderValue<R, SR>(props: RenderCellProps<R, SR>) {\n try {\n return props.row[props.column.key as keyof R] as React.ReactNode;\n } catch {\n return null;\n }\n}\n","import { createContext, useContext } from \"react\";\n\nimport type { Maybe, Renderers } from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const DataGridDefaultRenderersContext =\n createContext<Maybe<Renderers<any, any>>>(undefined);\n\nexport function useDefaultRenderers<R, SR>(): Maybe<Renderers<R, SR>> {\n return useContext(DataGridDefaultRenderersContext);\n}\n","import { useDefaultRenderers } from \"../DataGridDefaultRenderersContext\";\nimport type { RenderCheckboxProps } from \"../types\";\n\ntype SharedInputProps = Pick<\n RenderCheckboxProps,\n | \"disabled\"\n | \"tabIndex\"\n | \"aria-label\"\n | \"aria-labelledby\"\n | \"indeterminate\"\n | \"onChange\"\n>;\n\ninterface SelectCellFormatterProps extends SharedInputProps {\n value: boolean;\n}\n\nexport function SelectCellFormatter({\n value,\n tabIndex,\n indeterminate,\n disabled,\n onChange,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n}: SelectCellFormatterProps) {\n const defaultRenderers = useDefaultRenderers();\n if (!defaultRenderers?.renderCheckbox) {\n throw new Error(\"DataGrid default renderCheckbox renderer is missing.\");\n }\n const { renderCheckbox } = defaultRenderers;\n\n return renderCheckbox({\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n tabIndex,\n indeterminate,\n disabled,\n checked: value,\n onChange,\n });\n}\n","import { useLayoutEffect, useRef } from \"react\";\n\nimport { useLatestFunc } from \"./hooks/useLatestFunc\";\nimport { cellEditingClassname } from \"./styles\";\nimport type {\n CellKeyboardEvent,\n CellRendererProps,\n EditCellKeyDownArgs,\n Maybe,\n Omit,\n RenderEditCellProps,\n} from \"./types\";\nimport {\n createCellEvent,\n getCellClassname,\n getCellStyle,\n onEditorNavigation,\n} from \"./utils\";\n\ndeclare global {\n const scheduler: Scheduler | undefined;\n}\n\ninterface Scheduler {\n readonly postTask?: (\n callback: () => void,\n options?: {\n priority?: \"user-blocking\" | \"user-visible\" | \"background\";\n signal?: AbortSignal;\n delay?: number;\n },\n ) => Promise<unknown>;\n}\n\n/*\n * To check for outside `mousedown` events, we listen to all `mousedown` events at their birth,\n * i.e. on the window during the capture phase, and at their death, i.e. on the window during the bubble phase.\n *\n * We schedule a check at the birth of the event, cancel the check when the event reaches the \"inside\" container,\n * and trigger the \"outside\" callback when the event bubbles back up to the window.\n *\n * The event can be `stopPropagation()`ed halfway through, so they may not always bubble back up to the window,\n * so an alternative check must be used. The check must happen after the event can reach the \"inside\" container,\n * and not before it run to completion. `postTask`/`requestAnimationFrame` are the best way we know to achieve this.\n * Usually we want click event handlers from parent components to access the latest commited values,\n * so `mousedown` is used instead of `click`.\n *\n * We must also rely on React's event capturing/bubbling to handle elements rendered in a portal.\n */\n\nconst canUsePostTask =\n typeof scheduler === \"object\" && typeof scheduler.postTask === \"function\";\n\ntype SharedCellRendererProps<R, SR> = Pick<CellRendererProps<R, SR>, \"colSpan\">;\n\ninterface EditCellProps<R, SR>\n extends Omit<RenderEditCellProps<R, SR>, \"onRowChange\" | \"onClose\">,\n SharedCellRendererProps<R, SR> {\n rowIdx: number;\n onRowChange: (\n row: R,\n commitChanges: boolean,\n shouldFocusCell: boolean,\n ) => void;\n closeEditor: (shouldFocusCell: boolean) => void;\n navigate: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n onKeyDown: Maybe<\n (args: EditCellKeyDownArgs<R, SR>, event: CellKeyboardEvent) => void\n >;\n}\n\nexport default function EditCell<R, SR>({\n column,\n colSpan,\n row,\n rowIdx,\n onRowChange,\n closeEditor,\n onKeyDown,\n navigate,\n}: EditCellProps<R, SR>) {\n const captureEventRef = useRef<MouseEvent | undefined>(undefined);\n const abortControllerRef = useRef<AbortController>(undefined);\n const frameRequestRef = useRef<number>(undefined);\n const commitOnOutsideClick =\n column.editorOptions?.commitOnOutsideClick ?? true;\n\n // We need to prevent the `useLayoutEffect` from cleaning up between re-renders,\n // as `onWindowCaptureMouseDown` might otherwise miss valid mousedown events.\n // To that end we instead access the latest props via useLatestFunc.\n const commitOnOutsideMouseDown = useLatestFunc(() => {\n onClose(true, false);\n });\n\n useLayoutEffect(() => {\n if (!commitOnOutsideClick) return;\n\n function onWindowCaptureMouseDown(event: MouseEvent) {\n captureEventRef.current = event;\n\n if (canUsePostTask) {\n const abortController = new AbortController();\n const { signal } = abortController;\n abortControllerRef.current = abortController;\n // Use postTask to ensure that the event is not called in the middle of a React render\n // and that it is called before the next paint.\n scheduler\n .postTask(commitOnOutsideMouseDown, {\n priority: \"user-blocking\",\n signal,\n })\n // ignore abort errors\n .catch(() => {});\n } else {\n frameRequestRef.current = requestAnimationFrame(\n commitOnOutsideMouseDown,\n );\n }\n }\n\n function onWindowMouseDown(event: MouseEvent) {\n if (captureEventRef.current === event) {\n commitOnOutsideMouseDown();\n }\n }\n\n addEventListener(\"mousedown\", onWindowCaptureMouseDown, { capture: true });\n addEventListener(\"mousedown\", onWindowMouseDown);\n\n return () => {\n removeEventListener(\"mousedown\", onWindowCaptureMouseDown, {\n capture: true,\n });\n removeEventListener(\"mousedown\", onWindowMouseDown);\n cancelTask();\n };\n }, [commitOnOutsideClick, commitOnOutsideMouseDown, cancelTask]);\n\n function cancelTask() {\n captureEventRef.current = undefined;\n if (abortControllerRef.current !== undefined) {\n abortControllerRef.current.abort();\n abortControllerRef.current = undefined;\n }\n if (frameRequestRef.current !== undefined) {\n cancelAnimationFrame(frameRequestRef.current);\n frameRequestRef.current = undefined;\n }\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLDivElement>) {\n if (onKeyDown) {\n const cellEvent = createCellEvent(event);\n onKeyDown(\n {\n mode: \"EDIT\",\n row,\n column,\n rowIdx,\n navigate() {\n navigate(event);\n },\n onClose,\n },\n cellEvent,\n );\n if (cellEvent.isGridDefaultPrevented()) return;\n }\n\n if (event.key === \"Escape\") {\n // Discard changes\n onClose();\n } else if (event.key === \"Enter\") {\n onClose(true);\n } else if (onEditorNavigation(event)) {\n navigate(event);\n }\n }\n\n function onClose(commitChanges = false, shouldFocusCell = true) {\n if (commitChanges) {\n onRowChange(row, true, shouldFocusCell);\n } else {\n closeEditor(shouldFocusCell);\n }\n }\n\n function onEditorRowChange(row: R, commitChangesAndFocus = false) {\n onRowChange(row, commitChangesAndFocus, commitChangesAndFocus);\n }\n\n const { cellClass } = column;\n const className = getCellClassname(\n column,\n \"rdg-editor-container\",\n !column.editorOptions?.displayCellContent && cellEditingClassname,\n typeof cellClass === \"function\" ? cellClass(row) : cellClass,\n );\n\n return (\n <div\n role=\"gridcell\"\n aria-colindex={column.idx + 1} // aria-colindex is 1-based\n aria-colspan={colSpan}\n aria-selected\n className={className}\n style={getCellStyle(column, colSpan)}\n onKeyDown={handleKeyDown}\n onMouseDownCapture={cancelTask}\n >\n {column.renderEditCell != null && (\n <>\n {column.renderEditCell({\n column,\n row,\n rowIdx,\n onRowChange: onEditorRowChange,\n onClose,\n })}\n {column.editorOptions?.displayCellContent &&\n column.renderCell({\n column,\n row,\n rowIdx,\n isCellEditable: true,\n tabIndex: -1,\n onRowChange: onEditorRowChange,\n })}\n </>\n )}\n </div>\n );\n}\n","import { useCallback, useLayoutEffect, useRef } from \"react\";\n\nimport type { Maybe } from \"../types\";\n\n// https://reactjs.org/docs/hooks-faq.html#what-can-i-do-if-my-effect-dependencies-change-too-often\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useLatestFunc<T extends Maybe<(...args: any[]) => any>>(\n fn: T,\n): T {\n const ref = useRef(fn);\n\n useLayoutEffect(() => {\n ref.current = fn;\n });\n\n const callbackFn = useCallback((...args: Parameters<NonNullable<T>>) => {\n ref.current?.(...args);\n }, []);\n\n // @ts-expect-error\n return fn ? callbackFn : fn;\n}\n","import { memo } from \"react\";\nimport GroupedColumnHeaderCell from \"./GroupedColumnHeaderCell\";\nimport { headerRowClassname } from \"./styles\";\nimport type {\n CalculatedColumn,\n CalculatedColumnParent,\n Position,\n} from \"./types\";\n\nexport interface GroupedColumnHeaderRowProps<R, SR> {\n rowIdx: number;\n level: number;\n columns: readonly CalculatedColumn<R, SR>[];\n selectCell: (position: Position) => void;\n selectedCellIdx: number | undefined;\n}\n\nfunction GroupedColumnHeaderRow<R, SR>({\n rowIdx,\n level,\n columns,\n selectedCellIdx,\n selectCell,\n}: GroupedColumnHeaderRowProps<R, SR>) {\n const cells = [];\n const renderedParents = new Set<CalculatedColumnParent<R, SR>>();\n\n for (const column of columns) {\n let { parent } = column;\n\n if (parent === undefined) continue;\n\n while (parent.level > level) {\n if (parent.parent === undefined) break;\n parent = parent.parent;\n }\n\n if (parent.level === level && !renderedParents.has(parent)) {\n renderedParents.add(parent);\n const { idx } = parent;\n cells.push(\n <GroupedColumnHeaderCell<R, SR>\n key={idx}\n column={parent}\n rowIdx={rowIdx}\n isCellSelected={selectedCellIdx === idx}\n selectCell={selectCell}\n />,\n );\n }\n }\n\n return (\n <div\n role=\"row\"\n aria-rowindex={rowIdx} // aria-rowindex is 1 based\n className={headerRowClassname}\n >\n {cells}\n </div>\n );\n}\n\nexport default memo(GroupedColumnHeaderRow) as <R, SR>(\n props: GroupedColumnHeaderRowProps<R, SR>,\n) => React.JSX.Element;\n","import clsx from \"clsx\";\nimport type { GroupedColumnHeaderRowProps } from \"./GroupedColumnHeaderRow\";\nimport { useRovingTabIndex } from \"./hooks/useRovingTabIndex\";\nimport { cellClassname } from \"./styles\";\nimport type { CalculatedColumnParent } from \"./types\";\nimport { getHeaderCellRowSpan, getHeaderCellStyle } from \"./utils\";\n\ntype SharedGroupedColumnHeaderRowProps<R, SR> = Pick<\n GroupedColumnHeaderRowProps<R, SR>,\n \"rowIdx\" | \"selectCell\"\n>;\n\ninterface GroupedColumnHeaderCellProps<R, SR>\n extends SharedGroupedColumnHeaderRowProps<R, SR> {\n column: CalculatedColumnParent<R, SR>;\n isCellSelected: boolean;\n}\n\nexport default function GroupedColumnHeaderCell<R, SR>({\n column,\n rowIdx,\n isCellSelected,\n selectCell,\n}: GroupedColumnHeaderCellProps<R, SR>) {\n const { tabIndex, onFocus } = useRovingTabIndex(isCellSelected);\n const { colSpan } = column;\n const rowSpan = getHeaderCellRowSpan(column, rowIdx);\n const index = column.idx + 1;\n\n function onMouseDown() {\n selectCell({ idx: column.idx, rowIdx });\n }\n\n return (\n <div\n role=\"columnheader\"\n aria-colindex={index}\n aria-colspan={colSpan}\n aria-rowspan={rowSpan}\n aria-selected={isCellSelected}\n tabIndex={tabIndex}\n className={clsx(cellClassname, column.headerCellClass)}\n style={{\n ...getHeaderCellStyle(column, rowIdx, rowSpan),\n gridColumnStart: index,\n gridColumnEnd: index + colSpan,\n }}\n onFocus={onFocus}\n onMouseDown={onMouseDown}\n >\n {column.name}\n </div>\n );\n}\n","import clsx from \"clsx\";\nimport { memo, useState } from \"react\";\nimport type { DataGridProps } from \"./DataGrid\";\nimport HeaderCell from \"./HeaderCell\";\nimport { headerRowClassname, rowSelectedClassname } from \"./styles\";\nimport type {\n CalculatedColumn,\n Direction,\n Maybe,\n Position,\n ResizedWidth,\n} from \"./types\";\nimport { getColSpan } from \"./utils\";\n\ntype SharedDataGridProps<R, SR, K extends React.Key> = Pick<\n DataGridProps<R, SR, K>,\n \"sortColumns\" | \"onSortColumnsChange\" | \"onColumnsReorder\"\n>;\n\nexport interface HeaderRowProps<R, SR, K extends React.Key>\n extends SharedDataGridProps<R, SR, K> {\n rowIdx: number;\n columns: readonly CalculatedColumn<R, SR>[];\n onColumnResize: (\n column: CalculatedColumn<R, SR>,\n width: ResizedWidth,\n ) => void;\n onColumnResizeEnd: () => void;\n selectCell: (position: Position) => void;\n lastFrozenColumnIndex: number;\n selectedCellIdx: number | undefined;\n shouldFocusGrid: boolean;\n direction: Direction;\n headerRowClass: Maybe<string>;\n}\n\nexport function HeaderRow<R, SR, K extends React.Key>({\n headerRowClass,\n rowIdx,\n columns,\n onColumnResize,\n onColumnResizeEnd,\n onColumnsReorder,\n sortColumns,\n onSortColumnsChange,\n lastFrozenColumnIndex,\n selectedCellIdx,\n selectCell,\n shouldFocusGrid,\n direction,\n}: HeaderRowProps<R, SR, K>) {\n const [draggedColumnKey, setDraggedColumnKey] = useState<string>();\n\n const cells = [];\n for (let index = 0; index < columns.length; index++) {\n const column = columns[index];\n if (!column) continue;\n const colSpan = getColSpan(column, lastFrozenColumnIndex, {\n type: \"HEADER\",\n });\n if (colSpan !== undefined) {\n index += colSpan - 1;\n }\n\n cells.push(\n <HeaderCell<R, SR>\n key={column.key}\n column={column}\n colSpan={colSpan}\n rowIdx={rowIdx}\n isCellSelected={selectedCellIdx === column.idx}\n onColumnResize={onColumnResize}\n onColumnResizeEnd={onColumnResizeEnd}\n onColumnsReorder={onColumnsReorder}\n onSortColumnsChange={onSortColumnsChange}\n sortColumns={sortColumns}\n selectCell={selectCell}\n shouldFocusGrid={shouldFocusGrid && index === 0}\n direction={direction}\n draggedColumnKey={draggedColumnKey}\n setDraggedColumnKey={setDraggedColumnKey}\n />,\n );\n }\n\n return (\n <div\n role=\"row\"\n aria-rowindex={rowIdx} // aria-rowindex is 1 based\n className={clsx(\n headerRowClassname,\n {\n [rowSelectedClassname]: selectedCellIdx === -1,\n },\n headerRowClass,\n )}\n >\n {cells}\n </div>\n );\n}\n\nexport default memo(HeaderRow) as <R, SR, K extends React.Key>(\n props: HeaderRowProps<R, SR, K>,\n) => React.JSX.Element;\n","import { useRef, useState } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport type { HeaderRowProps } from \"./HeaderRow\";\nimport { useRovingTabIndex } from \"./hooks/useRovingTabIndex\";\nimport {\n cellDraggingClassname,\n cellOverClassname,\n cellResizableClassname,\n cellSortableClassname,\n dragImageClassname,\n resizeHandleClassname,\n} from \"./styles\";\nimport type { CalculatedColumn, SortColumn } from \"./types\";\nimport {\n clampColumnWidth,\n getCellClassname,\n getCellStyle,\n getHeaderCellRowSpan,\n getHeaderCellStyle,\n getLeftRightKey,\n isCtrlKeyHeldDown,\n stopPropagation,\n} from \"./utils\";\n\nconst cellDraggableClassname = \"rdg-cell-draggable\";\n\ntype SharedHeaderRowProps<R, SR> = Pick<\n HeaderRowProps<R, SR, React.Key>,\n | \"sortColumns\"\n | \"onSortColumnsChange\"\n | \"selectCell\"\n | \"onColumnResize\"\n | \"onColumnResizeEnd\"\n | \"shouldFocusGrid\"\n | \"direction\"\n | \"onColumnsReorder\"\n>;\n\nexport interface HeaderCellProps<R, SR> extends SharedHeaderRowProps<R, SR> {\n column: CalculatedColumn<R, SR>;\n colSpan: number | undefined;\n rowIdx: number;\n isCellSelected: boolean;\n draggedColumnKey: string | undefined;\n setDraggedColumnKey: (draggedColumnKey: string | undefined) => void;\n}\n\nexport default function HeaderCell<R, SR>({\n column,\n colSpan,\n rowIdx,\n isCellSelected,\n onColumnResize,\n onColumnResizeEnd,\n onColumnsReorder,\n sortColumns,\n onSortColumnsChange,\n selectCell,\n shouldFocusGrid,\n direction,\n draggedColumnKey,\n setDraggedColumnKey,\n}: HeaderCellProps<R, SR>) {\n const [isOver, setIsOver] = useState(false);\n const dragImageRef = useRef<HTMLDivElement>(null);\n const isDragging = draggedColumnKey === column.key;\n const rowSpan = getHeaderCellRowSpan(column, rowIdx);\n // set the tabIndex to 0 when there is no selected cell so grid can receive focus\n const { tabIndex, childTabIndex, onFocus } = useRovingTabIndex(\n shouldFocusGrid || isCellSelected,\n );\n const sortIndex = sortColumns?.findIndex(\n (sort) => sort.columnKey === column.key,\n );\n const sortColumn =\n sortIndex !== undefined && sortIndex > -1\n ? sortColumns?.[sortIndex]\n : undefined;\n const sortDirection = sortColumn?.direction;\n const priority =\n sortColumn !== undefined && (sortColumns?.length ?? 0) > 1\n ? sortIndex! + 1\n : undefined;\n const ariaSort =\n sortDirection && !priority\n ? sortDirection === \"ASC\"\n ? \"ascending\"\n : \"descending\"\n : undefined;\n const { sortable, resizable, draggable } = column;\n\n const className = getCellClassname(column, column.headerCellClass, {\n [cellSortableClassname]: sortable,\n [cellResizableClassname]: resizable,\n [cellDraggableClassname]: draggable,\n [cellDraggingClassname]: isDragging,\n [cellOverClassname]: isOver,\n });\n\n function onSort(ctrlClick: boolean) {\n if (onSortColumnsChange == null) return;\n const { sortDescendingFirst } = column;\n if (sortColumn === undefined) {\n // not currently sorted\n const nextSort: SortColumn = {\n columnKey: column.key,\n direction: sortDescendingFirst ? \"DESC\" : \"ASC\",\n };\n onSortColumnsChange(\n sortColumns && ctrlClick ? [...sortColumns, nextSort] : [nextSort],\n );\n } else {\n let nextSortColumn: SortColumn | undefined;\n if (\n (sortDescendingFirst === true && sortDirection === \"DESC\") ||\n (sortDescendingFirst !== true && sortDirection === \"ASC\")\n ) {\n nextSortColumn = {\n columnKey: column.key,\n direction: sortDirection === \"ASC\" ? \"DESC\" : \"ASC\",\n };\n }\n if (ctrlClick) {\n const nextSortColumns = [...sortColumns!];\n if (nextSortColumn) {\n // swap direction\n nextSortColumns[sortIndex!] = nextSortColumn;\n } else {\n // remove sort\n nextSortColumns.splice(sortIndex!, 1);\n }\n onSortColumnsChange(nextSortColumns);\n } else {\n onSortColumnsChange(nextSortColumn ? [nextSortColumn] : []);\n }\n }\n }\n\n function handleFocus(event: React.FocusEvent<HTMLDivElement>) {\n onFocus?.(event);\n if (shouldFocusGrid) {\n // Select the first header cell if there is no selected cell\n selectCell({ idx: 0, rowIdx });\n }\n }\n\n function onMouseDown() {\n selectCell({ idx: column.idx, rowIdx });\n }\n\n function onClick(event: React.MouseEvent<HTMLSpanElement>) {\n if (sortable) {\n onSort(event.ctrlKey || event.metaKey);\n }\n }\n\n function onKeyDown(event: React.KeyboardEvent<HTMLSpanElement>) {\n const { key } = event;\n if (sortable && (key === \" \" || key === \"Enter\")) {\n // prevent scrolling\n event.preventDefault();\n onSort(event.ctrlKey || event.metaKey);\n } else if (\n resizable &&\n isCtrlKeyHeldDown(event) &&\n (key === \"ArrowLeft\" || key === \"ArrowRight\")\n ) {\n // prevent navigation\n // TODO: check if we can use `preventDefault` instead\n event.stopPropagation();\n const { width } = event.currentTarget.getBoundingClientRect();\n const { leftKey } = getLeftRightKey(direction);\n const offset = key === leftKey ? -10 : 10;\n const newWidth = clampColumnWidth(width + offset, column);\n if (newWidth !== width) {\n onColumnResize(column, newWidth);\n }\n }\n }\n\n function onDragStart(event: React.DragEvent<HTMLDivElement>) {\n // need flushSync to make sure the drag image is rendered before the drag starts\n flushSync(() => {\n setDraggedColumnKey(column.key);\n });\n event.dataTransfer.setDragImage(dragImageRef.current!, 0, 0);\n event.dataTransfer.dropEffect = \"move\";\n }\n\n function onDragEnd() {\n setDraggedColumnKey(undefined);\n }\n\n function onDragOver(event: React.DragEvent<HTMLDivElement>) {\n // prevent default to allow drop\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n }\n\n function onDrop(event: React.DragEvent<HTMLDivElement>) {\n setIsOver(false);\n // prevent the browser from redirecting in some cases\n event.preventDefault();\n onColumnsReorder?.(draggedColumnKey!, column.key);\n }\n\n function onDragEnter(event: React.DragEvent<HTMLDivElement>) {\n if (isEventPertinent(event)) {\n setIsOver(true);\n }\n }\n\n function onDragLeave(event: React.DragEvent<HTMLDivElement>) {\n if (isEventPertinent(event)) {\n setIsOver(false);\n }\n }\n\n let dragTargetProps: React.ComponentProps<\"div\"> | undefined;\n let dropTargetProps: React.ComponentProps<\"div\"> | undefined;\n if (draggable) {\n dragTargetProps = {\n draggable: true,\n onDragStart,\n onDragEnd,\n };\n\n if (draggedColumnKey !== undefined && draggedColumnKey !== column.key) {\n dropTargetProps = {\n onDragOver,\n onDragEnter,\n onDragLeave,\n onDrop,\n };\n }\n }\n\n const style: React.CSSProperties = {\n ...getHeaderCellStyle(column, rowIdx, rowSpan),\n ...getCellStyle(column, colSpan),\n };\n\n const content = column.renderHeaderCell({\n column,\n sortDirection,\n priority,\n tabIndex: childTabIndex,\n });\n\n return (\n <>\n {isDragging && (\n <div\n ref={dragImageRef}\n style={style}\n className={getCellClassname(\n column,\n column.headerCellClass,\n dragImageClassname,\n )}\n >\n {content}\n </div>\n )}\n <div\n role=\"columnheader\"\n aria-colindex={column.idx + 1}\n aria-colspan={colSpan}\n aria-rowspan={rowSpan}\n aria-selected={isCellSelected}\n aria-sort={ariaSort}\n tabIndex={tabIndex}\n className={className}\n style={style}\n onMouseDown={onMouseDown}\n onFocus={handleFocus}\n onClick={onClick}\n onKeyDown={onKeyDown}\n {...dragTargetProps}\n {...dropTargetProps}\n >\n {content}\n\n {resizable && (\n <ResizeHandle\n direction={direction}\n column={column}\n onColumnResize={onColumnResize}\n onColumnResizeEnd={onColumnResizeEnd}\n />\n )}\n </div>\n </>\n );\n}\n\ntype ResizeHandleProps<R, SR> = Pick<\n HeaderCellProps<R, SR>,\n \"direction\" | \"column\" | \"onColumnResize\" | \"onColumnResizeEnd\"\n>;\n\nfunction ResizeHandle<R, SR>({\n direction,\n column,\n onColumnResize,\n onColumnResizeEnd,\n}: ResizeHandleProps<R, SR>) {\n const resizingOffsetRef = useRef<number>(undefined);\n const isRtl = direction === \"rtl\";\n\n function onPointerDown(event: React.PointerEvent<HTMLDivElement>) {\n if (event.pointerType === \"mouse\" && event.buttons !== 1) {\n return;\n }\n\n // Fix column resizing on a draggable column in FF\n event.preventDefault();\n\n const { currentTarget, pointerId } = event;\n currentTarget.setPointerCapture(pointerId);\n const headerCell = currentTarget.parentElement!;\n const { right, left } = headerCell.getBoundingClientRect();\n resizingOffsetRef.current = isRtl\n ? event.clientX - left\n : right - event.clientX;\n }\n\n function onPointerMove(event: React.PointerEvent<HTMLDivElement>) {\n const offset = resizingOffsetRef.current;\n if (offset === undefined) return;\n const parentElement = event.currentTarget.parentElement;\n if (!parentElement) return;\n const { width, right, left } = parentElement.getBoundingClientRect();\n let newWidth = isRtl\n ? right + offset - event.clientX\n : event.clientX + offset - left;\n newWidth = clampColumnWidth(newWidth, column);\n if (width > 0 && newWidth !== width) {\n onColumnResize(column, newWidth);\n }\n }\n\n function onLostPointerCapture() {\n onColumnResizeEnd();\n resizingOffsetRef.current = undefined;\n }\n\n function onDoubleClick() {\n onColumnResize(column, \"max-content\");\n }\n\n return (\n <div\n aria-hidden\n className={resizeHandleClassname}\n onClick={stopPropagation}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n // we are not using pointerup because it does not fire in some cases\n // pointer down -> alt+tab -> pointer up over another window -> pointerup event not fired\n onLostPointerCapture={onLostPointerCapture}\n onDoubleClick={onDoubleClick}\n />\n );\n}\n\n// only accept pertinent drag events:\n// - ignore drag events going from the container to an element inside the container\n// - ignore drag events going from an element inside the container to the container\nfunction isEventPertinent(event: React.DragEvent) {\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n return !event.currentTarget.contains(relatedTarget);\n}\n","import { useMemo } from \"react\";\nimport { SELECT_COLUMN_KEY } from \"../Columns\";\nimport { renderValue } from \"../cellRenderers\";\nimport type { DataGridProps } from \"../DataGrid\";\nimport renderHeaderCell from \"../renderHeaderCell\";\nimport type {\n CalculatedColumn,\n CalculatedColumnParent,\n ColumnOrColumnGroup,\n Omit,\n} from \"../types\";\nimport { clampColumnWidth, max, min } from \"../utils\";\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P] extends ReadonlyArray<infer V>\n ? Mutable<V>[]\n : T[P];\n};\n\ninterface WithParent<R, SR> {\n readonly parent: MutableCalculatedColumnParent<R, SR> | undefined;\n}\n\ntype MutableCalculatedColumnParent<R, SR> = Omit<\n Mutable<CalculatedColumnParent<R, SR>>,\n \"parent\"\n> &\n WithParent<R, SR>;\ntype MutableCalculatedColumn<R, SR> = Omit<\n Mutable<CalculatedColumn<R, SR>>,\n \"parent\"\n> &\n WithParent<R, SR>;\n\ninterface ColumnMetric {\n width: number;\n left: number;\n}\n\nconst DEFAULT_COLUMN_WIDTH = \"auto\";\nconst DEFAULT_COLUMN_MIN_WIDTH = 50;\n\ninterface CalculatedColumnsArgs<R, SR> {\n rawColumns: readonly ColumnOrColumnGroup<R, SR>[];\n defaultColumnOptions: DataGridProps<R, SR>[\"defaultColumnOptions\"];\n viewportWidth: number;\n scrollLeft: number;\n getColumnWidth: (column: CalculatedColumn<R, SR>) => string | number;\n enableVirtualization: boolean;\n}\n\nexport function useCalculatedColumns<R, SR>({\n rawColumns,\n defaultColumnOptions,\n getColumnWidth,\n viewportWidth,\n scrollLeft,\n enableVirtualization,\n}: CalculatedColumnsArgs<R, SR>) {\n const defaultWidth = defaultColumnOptions?.width ?? DEFAULT_COLUMN_WIDTH;\n const defaultMinWidth =\n defaultColumnOptions?.minWidth ?? DEFAULT_COLUMN_MIN_WIDTH;\n const defaultMaxWidth = defaultColumnOptions?.maxWidth ?? undefined;\n const defaultRenderCell = defaultColumnOptions?.renderCell ?? renderValue;\n const defaultRenderHeaderCell =\n defaultColumnOptions?.renderHeaderCell ?? renderHeaderCell;\n const defaultSortable = defaultColumnOptions?.sortable ?? false;\n const defaultResizable = defaultColumnOptions?.resizable ?? false;\n const defaultDraggable = defaultColumnOptions?.draggable ?? false;\n\n const { columns, colSpanColumns, lastFrozenColumnIndex, headerRowsCount } =\n useMemo((): {\n readonly columns: readonly CalculatedColumn<R, SR>[];\n readonly colSpanColumns: readonly CalculatedColumn<R, SR>[];\n readonly lastFrozenColumnIndex: number;\n readonly headerRowsCount: number;\n } => {\n let lastFrozenColumnIndex = -1;\n let headerRowsCount = 1;\n const columns: MutableCalculatedColumn<R, SR>[] = [];\n\n collectColumns(rawColumns, 1);\n\n function collectColumns(\n rawColumns: readonly ColumnOrColumnGroup<R, SR>[],\n level: number,\n parent?: MutableCalculatedColumnParent<R, SR>,\n ) {\n for (const rawColumn of rawColumns) {\n if (\"children\" in rawColumn) {\n const calculatedColumnParent: MutableCalculatedColumnParent<R, SR> =\n {\n name: rawColumn.name,\n parent,\n idx: -1,\n colSpan: 0,\n level: 0,\n headerCellClass: rawColumn.headerCellClass,\n };\n\n collectColumns(\n rawColumn.children,\n level + 1,\n calculatedColumnParent,\n );\n continue;\n }\n\n const frozen = rawColumn.frozen ?? false;\n\n const column: MutableCalculatedColumn<R, SR> = {\n ...rawColumn,\n parent,\n idx: 0,\n level: 0,\n frozen,\n width: rawColumn.width ?? defaultWidth,\n minWidth: rawColumn.minWidth ?? defaultMinWidth,\n maxWidth: rawColumn.maxWidth ?? defaultMaxWidth,\n sortable: rawColumn.sortable ?? defaultSortable,\n resizable: rawColumn.resizable ?? defaultResizable,\n draggable: rawColumn.draggable ?? defaultDraggable,\n renderCell: rawColumn.renderCell ?? defaultRenderCell,\n renderHeaderCell:\n rawColumn.renderHeaderCell ?? defaultRenderHeaderCell,\n };\n\n columns.push(column);\n\n if (frozen) {\n lastFrozenColumnIndex++;\n }\n\n if (level > headerRowsCount) {\n headerRowsCount = level;\n }\n }\n }\n\n columns.sort(\n ({ key: aKey, frozen: frozenA }, { key: bKey, frozen: frozenB }) => {\n // Sort select column first:\n if (aKey === SELECT_COLUMN_KEY) return -1;\n if (bKey === SELECT_COLUMN_KEY) return 1;\n\n // Sort frozen columns second:\n if (frozenA) {\n if (frozenB) return 0;\n return -1;\n }\n if (frozenB) return 1;\n\n // TODO: sort columns to keep them grouped if they have a parent\n\n // Sort other columns last:\n return 0;\n },\n );\n\n const colSpanColumns: CalculatedColumn<R, SR>[] = [];\n columns.forEach((column, idx) => {\n column.idx = idx;\n updateColumnParent(column, idx, 0);\n\n if (column.colSpan != null) {\n colSpanColumns.push(column);\n }\n });\n\n return {\n columns,\n colSpanColumns,\n lastFrozenColumnIndex,\n headerRowsCount,\n };\n }, [\n rawColumns,\n defaultWidth,\n defaultMinWidth,\n defaultMaxWidth,\n defaultRenderCell,\n defaultRenderHeaderCell,\n defaultResizable,\n defaultSortable,\n defaultDraggable,\n ]);\n\n const {\n templateColumns,\n layoutCssVars,\n totalFrozenColumnWidth,\n columnMetrics,\n } = useMemo((): {\n templateColumns: readonly string[];\n layoutCssVars: Readonly<Record<string, string>>;\n totalFrozenColumnWidth: number;\n columnMetrics: ReadonlyMap<CalculatedColumn<R, SR>, ColumnMetric>;\n } => {\n const columnMetrics = new Map<CalculatedColumn<R, SR>, ColumnMetric>();\n let left = 0;\n let totalFrozenColumnWidth = 0;\n const templateColumns: string[] = [];\n\n for (const column of columns) {\n let width = getColumnWidth(column);\n\n if (typeof width === \"number\") {\n width = clampColumnWidth(width, column);\n } else {\n // This is a placeholder width so we can continue to use virtualization.\n // The actual value is set after the column is rendered\n width = column.minWidth;\n }\n templateColumns.push(`${width}px`);\n columnMetrics.set(column, { width, left });\n left += width;\n }\n\n if (lastFrozenColumnIndex !== -1) {\n const lastFrozenColumn = columns[lastFrozenColumnIndex];\n if (lastFrozenColumn) {\n const columnMetric = columnMetrics.get(lastFrozenColumn)!;\n totalFrozenColumnWidth = columnMetric.left + columnMetric.width;\n }\n }\n\n const layoutCssVars: Record<string, string> = {};\n\n for (let i = 0; i <= lastFrozenColumnIndex; i++) {\n const column = columns[i];\n if (!column) continue;\n layoutCssVars[`--rdg-frozen-left-${column.idx}`] =\n `${columnMetrics.get(column)?.left}px`;\n }\n\n return {\n templateColumns,\n layoutCssVars,\n totalFrozenColumnWidth,\n columnMetrics,\n };\n }, [getColumnWidth, columns, lastFrozenColumnIndex]);\n\n const [colOverscanStartIdx, colOverscanEndIdx] = useMemo((): [\n number,\n number,\n ] => {\n if (!enableVirtualization) {\n return [0, columns.length - 1];\n }\n // get the viewport's left side and right side positions for non-frozen columns\n const viewportLeft = scrollLeft + totalFrozenColumnWidth;\n const viewportRight = scrollLeft + viewportWidth;\n // get first and last non-frozen column indexes\n const lastColIdx = columns.length - 1;\n const firstUnfrozenColumnIdx = min(lastFrozenColumnIndex + 1, lastColIdx);\n\n // skip rendering non-frozen columns if the frozen columns cover the entire viewport\n if (viewportLeft >= viewportRight) {\n return [firstUnfrozenColumnIdx, firstUnfrozenColumnIdx];\n }\n\n // get the first visible non-frozen column index\n let colVisibleStartIdx = firstUnfrozenColumnIdx;\n while (colVisibleStartIdx < lastColIdx) {\n const column = columns[colVisibleStartIdx];\n if (!column) break;\n const { left, width } = columnMetrics.get(column)!;\n // if the right side of the columnn is beyond the left side of the available viewport,\n // then it is the first column that's at least partially visible\n if (left + width > viewportLeft) {\n break;\n }\n colVisibleStartIdx++;\n }\n\n // get the last visible non-frozen column index\n let colVisibleEndIdx = colVisibleStartIdx;\n while (colVisibleEndIdx < lastColIdx) {\n const column = columns[colVisibleEndIdx];\n if (!column) break;\n const { left, width } = columnMetrics.get(column)!;\n // if the right side of the column is beyond or equal to the right side of the available viewport,\n // then it the last column that's at least partially visible, as the previous column's right side is not beyond the viewport.\n if (left + width >= viewportRight) {\n break;\n }\n colVisibleEndIdx++;\n }\n\n const colOverscanStartIdx = max(\n firstUnfrozenColumnIdx,\n colVisibleStartIdx - 1,\n );\n const colOverscanEndIdx = min(lastColIdx, colVisibleEndIdx + 1);\n\n return [colOverscanStartIdx, colOverscanEndIdx];\n }, [\n columnMetrics,\n columns,\n lastFrozenColumnIndex,\n scrollLeft,\n totalFrozenColumnWidth,\n viewportWidth,\n enableVirtualization,\n ]);\n\n return {\n columns,\n colSpanColumns,\n colOverscanStartIdx,\n colOverscanEndIdx,\n templateColumns,\n layoutCssVars,\n headerRowsCount,\n lastFrozenColumnIndex,\n totalFrozenColumnWidth,\n };\n}\n\nfunction updateColumnParent<R, SR>(\n column: MutableCalculatedColumn<R, SR> | MutableCalculatedColumnParent<R, SR>,\n index: number,\n level: number,\n) {\n if (level < column.level) {\n column.level = level;\n }\n\n if (column.parent !== undefined) {\n const { parent } = column;\n if (parent.idx === -1) {\n parent.idx = index;\n }\n parent.colSpan += 1;\n updateColumnParent(parent, index, level - 1);\n }\n}\n","import { createContext, useContext } from \"react\";\n\nimport type { SelectHeaderRowEvent, SelectRowEvent } from \"../types\";\n\nexport interface RowSelectionContextValue {\n readonly isRowSelected: boolean;\n readonly isRowSelectionDisabled: boolean;\n}\n\nexport const RowSelectionContext = createContext<\n RowSelectionContextValue | undefined\n>(undefined);\n\nexport const RowSelectionChangeContext = createContext<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((selectRowEvent: SelectRowEvent<any>) => void) | undefined\n>(undefined);\n\nexport function useRowSelection() {\n const rowSelectionContext = useContext(RowSelectionContext);\n const rowSelectionChangeContext = useContext(RowSelectionChangeContext);\n\n if (\n rowSelectionContext === undefined ||\n rowSelectionChangeContext === undefined\n ) {\n throw new Error(\"useRowSelection must be used within renderCell\");\n }\n\n return {\n isRowSelectionDisabled: rowSelectionContext.isRowSelectionDisabled,\n isRowSelected: rowSelectionContext.isRowSelected,\n onRowSelectionChange: rowSelectionChangeContext,\n };\n}\n\nexport interface HeaderRowSelectionContextValue {\n readonly isRowSelected: boolean;\n readonly isIndeterminate: boolean;\n}\n\nexport const HeaderRowSelectionContext = createContext<\n HeaderRowSelectionContextValue | undefined\n>(undefined);\n\nexport const HeaderRowSelectionChangeContext = createContext<\n ((selectRowEvent: SelectHeaderRowEvent) => void) | undefined\n>(undefined);\n\nexport function useHeaderRowSelection() {\n const headerRowSelectionContext = useContext(HeaderRowSelectionContext);\n const headerRowSelectionChangeContext = useContext(\n HeaderRowSelectionChangeContext,\n );\n\n if (\n headerRowSelectionContext === undefined ||\n headerRowSelectionChangeContext === undefined\n ) {\n throw new Error(\n \"useHeaderRowSelection must be used within renderHeaderCell\",\n );\n }\n\n return {\n isIndeterminate: headerRowSelectionContext.isIndeterminate,\n isRowSelected: headerRowSelectionContext.isRowSelected,\n onRowSelectionChange: headerRowSelectionChangeContext,\n };\n}\n","import type { ActionOrSeparator } from \"../../actions/types\";\nimport {\n ActionCellRendererCell,\n ActionCellRendererGroup,\n SelectCellFormatter,\n} from \"./cellRenderers\";\nimport {\n useHeaderRowSelection,\n useRowSelection,\n} from \"./hooks/useRowSelection\";\nimport type {\n Column,\n RenderCellProps,\n RenderGroupCellProps,\n RenderHeaderCellProps,\n} from \"./types\";\n\nexport const SELECT_COLUMN_KEY = \"rdg-select-column\";\n\nfunction HeaderRenderer(props: RenderHeaderCellProps<unknown>) {\n const { isIndeterminate, isRowSelected, onRowSelectionChange } =\n useHeaderRowSelection();\n\n return (\n <SelectCellFormatter\n aria-label=\"Select All\"\n tabIndex={props.tabIndex}\n indeterminate={isIndeterminate}\n value={isRowSelected}\n onChange={(checked: boolean) => {\n onRowSelectionChange({ checked: isIndeterminate ? false : checked });\n }}\n />\n );\n}\n\nfunction SelectFormatter(props: RenderCellProps<unknown>) {\n const { isRowSelectionDisabled, isRowSelected, onRowSelectionChange } =\n useRowSelection();\n\n return (\n <SelectCellFormatter\n aria-label=\"Select\"\n tabIndex={props.tabIndex}\n disabled={isRowSelectionDisabled}\n value={isRowSelected}\n onChange={(checked: boolean, isShiftClick: boolean) => {\n onRowSelectionChange({ row: props.row, checked, isShiftClick });\n }}\n />\n );\n}\n\nfunction SelectGroupFormatter(props: RenderGroupCellProps<unknown>) {\n const { isRowSelected, onRowSelectionChange } = useRowSelection();\n\n return (\n <SelectCellFormatter\n aria-label=\"Select Group\"\n tabIndex={props.tabIndex}\n value={isRowSelected}\n onChange={(checked: boolean) => {\n onRowSelectionChange({ row: props.row, checked, isShiftClick: false });\n }}\n />\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const SelectColumn: Column<any, any> = {\n key: SELECT_COLUMN_KEY,\n name: \"\",\n width: 35,\n minWidth: 35,\n maxWidth: 35,\n resizable: false,\n sortable: false,\n frozen: true,\n renderHeaderCell(props) {\n return <HeaderRenderer {...props} />;\n },\n renderCell(props) {\n return <SelectFormatter {...props} />;\n },\n renderGroupCell(props) {\n return <SelectGroupFormatter {...props} />;\n },\n};\n\nexport const ACTION_COLUMN_KEY = \"rdg-action-column\";\n\n/**\n * Creates an action column for a DataGrid that displays a dropdown menu with actions for each row.\n * @param actions - Array of actions or separators to display for each row\n * @param context - Optional context to pass to actions for HTTP calls and other operations\n * @param idField - Optional ID field name for resource actions (defaults to \"id\")\n * @returns Column configuration for the DataGrid\n */\nexport function createActionColumn<R>(\n actions: ActionOrSeparator[],\n context?: any,\n idField?: string,\n): Column<R, any> {\n return {\n key: ACTION_COLUMN_KEY,\n name: \"\",\n width: 50,\n minWidth: 50,\n maxWidth: 50,\n resizable: false,\n sortable: false,\n frozen: true,\n renderHeaderCell: () => null,\n renderCell: (props) => (\n <ActionCellRendererCell\n {...props}\n actions={actions}\n context={context}\n idField={idField}\n />\n ),\n renderGroupCell: (props) => (\n <ActionCellRendererGroup {...props} actions={actions} context={context} />\n ),\n };\n}\n","import { useDefaultRenderers } from \"./DataGridDefaultRenderersContext\";\nimport { headerSortCellClassname, headerSortNameClassname } from \"./styles\";\nimport type { RenderHeaderCellProps } from \"./types\";\n\nexport default function renderHeaderCell<R, SR>({\n column,\n sortDirection,\n priority,\n}: RenderHeaderCellProps<R, SR>) {\n if (!column.sortable) return column.name;\n\n return (\n <SortableHeaderCell sortDirection={sortDirection} priority={priority}>\n {column.name}\n </SortableHeaderCell>\n );\n}\n\ntype SharedHeaderCellProps<R, SR> = Pick<\n RenderHeaderCellProps<R, SR>,\n \"sortDirection\" | \"priority\"\n>;\n\ninterface SortableHeaderCellProps<R, SR> extends SharedHeaderCellProps<R, SR> {\n children: React.ReactNode;\n}\n\nfunction SortableHeaderCell<R, SR>({\n sortDirection,\n priority,\n children,\n}: SortableHeaderCellProps<R, SR>) {\n const defaultRenderers = useDefaultRenderers<R, SR>();\n if (!defaultRenderers?.renderSortStatus) {\n throw new Error(\"DataGrid default renderSortStatus renderer is missing.\");\n }\n const { renderSortStatus } = defaultRenderers;\n\n return (\n <span className={headerSortCellClassname}>\n <span className={headerSortNameClassname}>{children}</span>\n <span>{renderSortStatus({ sortDirection, priority })}</span>\n </span>\n );\n}\n","import { useLayoutEffect, useState } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport type { DataGridProps } from \"../DataGrid\";\nimport type { CalculatedColumn, ColumnWidths, ResizedWidth } from \"../types\";\n\nexport function useColumnWidths<R, SR>(\n columns: readonly CalculatedColumn<R, SR>[],\n viewportColumns: readonly CalculatedColumn<R, SR>[],\n templateColumns: readonly string[],\n gridRef: React.RefObject<HTMLDivElement | null>,\n gridWidth: number,\n columnWidths: ColumnWidths,\n onColumnWidthsChange: (columnWidths: ColumnWidths) => void,\n onColumnResize: DataGridProps<R, SR>[\"onColumnResize\"],\n setColumnResizing: (isColumnResizing: boolean) => void,\n) {\n const [columnToAutoResize, setColumnToAutoResize] = useState<{\n readonly key: string;\n readonly width: ResizedWidth;\n } | null>(null);\n const [columnsToMeasureOnResize, setColumnsToMeasureOnResize] =\n useState<ReadonlySet<string> | null>(null);\n const [prevGridWidth, setPreviousGridWidth] = useState(gridWidth);\n const columnsCanFlex: boolean = columns.length === viewportColumns.length;\n const ignorePreviouslyMeasuredColumnsOnGridWidthChange =\n // Allow columns to flex again when...\n columnsCanFlex &&\n // there is enough space for columns to flex and the grid was resized\n gridWidth !== prevGridWidth;\n const newTemplateColumns = [...templateColumns];\n const columnsToMeasure: string[] = [];\n\n for (const { key, idx, width } of viewportColumns) {\n const columnWidth = columnWidths.get(key);\n if (key === columnToAutoResize?.key) {\n newTemplateColumns[idx] =\n columnToAutoResize.width === \"max-content\"\n ? columnToAutoResize.width\n : `${columnToAutoResize.width}px`;\n columnsToMeasure.push(key);\n } else if (\n typeof width === \"string\" &&\n // If the column is resized by the user, we don't want to measure it again\n columnWidth?.type !== \"resized\" &&\n (ignorePreviouslyMeasuredColumnsOnGridWidthChange ||\n columnsToMeasureOnResize?.has(key) === true ||\n columnWidth === undefined)\n ) {\n newTemplateColumns[idx] = width;\n columnsToMeasure.push(key);\n }\n }\n\n const gridTemplateColumns = newTemplateColumns.join(\" \");\n\n useLayoutEffect(updateMeasuredAndResizedWidths);\n\n function updateMeasuredAndResizedWidths() {\n setPreviousGridWidth(gridWidth);\n if (columnsToMeasure.length === 0) return;\n\n const newColumnWidths = new Map(columnWidths);\n let hasChanges = false;\n\n for (const key of columnsToMeasure) {\n const measuredWidth = measureColumnWidth(gridRef, key);\n hasChanges ||= measuredWidth !== columnWidths.get(key)?.width;\n if (measuredWidth === undefined) {\n newColumnWidths.delete(key);\n } else {\n newColumnWidths.set(key, { type: \"measured\", width: measuredWidth });\n }\n }\n\n if (columnToAutoResize !== null) {\n const resizingKey = columnToAutoResize.key;\n const oldWidth = columnWidths.get(resizingKey)?.width;\n const newWidth = measureColumnWidth(gridRef, resizingKey);\n if (newWidth !== undefined && oldWidth !== newWidth) {\n hasChanges = true;\n newColumnWidths.set(resizingKey, {\n type: \"resized\",\n width: newWidth,\n });\n }\n setColumnToAutoResize(null);\n }\n\n if (hasChanges) {\n onColumnWidthsChange(newColumnWidths);\n }\n }\n\n function handleColumnResize(\n column: CalculatedColumn<R, SR>,\n nextWidth: ResizedWidth,\n ) {\n const { key: resizingKey } = column;\n\n flushSync(() => {\n if (columnsCanFlex) {\n // remeasure all the columns that can flex and are not resized by the user\n const columnsToRemeasure = new Set<string>();\n for (const { key, width } of viewportColumns) {\n if (\n resizingKey !== key &&\n typeof width === \"string\" &&\n columnWidths.get(key)?.type !== \"resized\"\n ) {\n columnsToRemeasure.add(key);\n }\n }\n\n setColumnsToMeasureOnResize(columnsToRemeasure);\n }\n\n setColumnToAutoResize({\n key: resizingKey,\n width: nextWidth,\n });\n\n setColumnResizing(typeof nextWidth === \"number\");\n });\n\n setColumnsToMeasureOnResize(null);\n\n if (onColumnResize) {\n const previousWidth = columnWidths.get(resizingKey)?.width;\n const newWidth =\n typeof nextWidth === \"number\"\n ? nextWidth\n : measureColumnWidth(gridRef, resizingKey);\n if (newWidth !== undefined && newWidth !== previousWidth) {\n onColumnResize(column, newWidth);\n }\n }\n }\n\n return {\n gridTemplateColumns,\n handleColumnResize,\n } as const;\n}\n\nfunction measureColumnWidth(\n gridRef: React.RefObject<HTMLDivElement | null>,\n key: string,\n) {\n const selector = `[data-measuring-cell-key=\"${CSS.escape(key)}\"]`;\n const measuringCell = gridRef.current?.querySelector(selector);\n return measuringCell?.getBoundingClientRect().width;\n}\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport { flushSync } from \"react-dom\";\n\nexport function useGridDimensions() {\n const gridRef = useRef<HTMLDivElement>(null);\n const [inlineSize, setInlineSize] = useState(1);\n const [blockSize, setBlockSize] = useState(1);\n const [horizontalScrollbarHeight, setHorizontalScrollbarHeight] = useState(0);\n\n useLayoutEffect(() => {\n const { ResizeObserver } = window;\n\n // don't break in Node.js (SSR), jsdom, and browsers that don't support ResizeObserver\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (ResizeObserver == null) return;\n\n const { clientWidth, clientHeight, offsetWidth, offsetHeight } =\n gridRef.current!;\n const { width, height } = gridRef.current!.getBoundingClientRect();\n const initialHorizontalScrollbarHeight = offsetHeight - clientHeight;\n const initialWidth = width - offsetWidth + clientWidth;\n const initialHeight = height - initialHorizontalScrollbarHeight;\n\n setInlineSize(initialWidth);\n setBlockSize(initialHeight);\n setHorizontalScrollbarHeight(initialHorizontalScrollbarHeight);\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry?.contentBoxSize?.[0]) return;\n const size = entry.contentBoxSize[0];\n const { clientHeight, offsetHeight } = gridRef.current!;\n\n // we use flushSync here to avoid flashing scrollbars\n flushSync(() => {\n setInlineSize(size?.inlineSize ?? 0);\n setBlockSize(size?.blockSize ?? 0);\n setHorizontalScrollbarHeight(offsetHeight - clientHeight);\n });\n });\n resizeObserver.observe(gridRef.current!);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n return [gridRef, inlineSize, blockSize, horizontalScrollbarHeight] as const;\n}\n","import { useMemo } from \"react\";\nimport type { CalculatedColumn, Maybe } from \"../types\";\nimport { getColSpan } from \"../utils\";\n\ninterface ViewportColumnsArgs<R, SR> {\n columns: readonly CalculatedColumn<R, SR>[];\n colSpanColumns: readonly CalculatedColumn<R, SR>[];\n rows: readonly R[];\n topSummaryRows: Maybe<readonly SR[]>;\n bottomSummaryRows: Maybe<readonly SR[]>;\n colOverscanStartIdx: number;\n colOverscanEndIdx: number;\n lastFrozenColumnIndex: number;\n rowOverscanStartIdx: number;\n rowOverscanEndIdx: number;\n}\n\nexport function useViewportColumns<R, SR>({\n columns,\n colSpanColumns,\n rows,\n topSummaryRows,\n bottomSummaryRows,\n colOverscanStartIdx,\n colOverscanEndIdx,\n lastFrozenColumnIndex,\n rowOverscanStartIdx,\n rowOverscanEndIdx,\n}: ViewportColumnsArgs<R, SR>) {\n // find the column that spans over a column within the visible columns range and adjust colOverscanStartIdx\n const startIdx = useMemo(() => {\n if (colOverscanStartIdx === 0) return 0;\n\n let startIdx = colOverscanStartIdx;\n\n const updateStartIdx = (colIdx: number, colSpan: number | undefined) => {\n if (colSpan !== undefined && colIdx + colSpan > colOverscanStartIdx) {\n // eslint-disable-next-line react-compiler/react-compiler\n startIdx = colIdx;\n return true;\n }\n return false;\n };\n\n for (const column of colSpanColumns) {\n // check header row\n const colIdx = column.idx;\n if (colIdx >= startIdx) break;\n if (\n updateStartIdx(\n colIdx,\n getColSpan(column, lastFrozenColumnIndex, { type: \"HEADER\" }),\n )\n ) {\n break;\n }\n\n // check viewport rows\n for (\n let rowIdx = rowOverscanStartIdx;\n rowIdx <= rowOverscanEndIdx;\n rowIdx++\n ) {\n const row = rows[rowIdx];\n if (!row) continue;\n if (\n updateStartIdx(\n colIdx,\n getColSpan(column as any, lastFrozenColumnIndex, {\n type: \"ROW\",\n row,\n }),\n )\n ) {\n break;\n }\n }\n\n // check summary rows\n if (topSummaryRows != null) {\n for (const row of topSummaryRows) {\n if (\n updateStartIdx(\n colIdx,\n getColSpan(column, lastFrozenColumnIndex, {\n type: \"SUMMARY\",\n row,\n }),\n )\n ) {\n break;\n }\n }\n }\n\n if (bottomSummaryRows != null) {\n for (const row of bottomSummaryRows) {\n if (\n updateStartIdx(\n colIdx,\n getColSpan(column, lastFrozenColumnIndex, {\n type: \"SUMMARY\",\n row,\n }),\n )\n ) {\n break;\n }\n }\n }\n }\n\n return startIdx;\n }, [\n rowOverscanStartIdx,\n rowOverscanEndIdx,\n rows,\n topSummaryRows,\n bottomSummaryRows,\n colOverscanStartIdx,\n lastFrozenColumnIndex,\n colSpanColumns,\n ]);\n\n return useMemo((): readonly CalculatedColumn<R, SR>[] => {\n const viewportColumns: CalculatedColumn<R, SR>[] = [];\n for (let colIdx = 0; colIdx <= colOverscanEndIdx; colIdx++) {\n const column = columns[colIdx];\n if (!column) continue;\n\n if (colIdx < startIdx && !column.frozen) continue;\n viewportColumns.push(column);\n }\n\n return viewportColumns;\n }, [startIdx, colOverscanEndIdx, columns]);\n}\n","import { useMemo } from \"react\";\n\nimport { floor, max, min } from \"../utils\";\n\ninterface ViewportRowsArgs<R> {\n rows: readonly R[];\n rowHeight: number | ((row: R) => number);\n clientHeight: number;\n scrollTop: number;\n enableVirtualization: boolean;\n}\n\nexport function useViewportRows<R>({\n rows,\n rowHeight,\n clientHeight,\n scrollTop,\n enableVirtualization,\n}: ViewportRowsArgs<R>) {\n const {\n totalRowHeight,\n gridTemplateRows,\n getRowTop,\n getRowHeight,\n findRowIdx,\n } = useMemo(() => {\n if (typeof rowHeight === \"number\") {\n return {\n totalRowHeight: rowHeight * rows.length,\n gridTemplateRows: ` repeat(${rows.length}, ${rowHeight}px)`,\n getRowTop: (rowIdx: number) => rowIdx * rowHeight,\n getRowHeight: () => rowHeight,\n findRowIdx: (offset: number) => floor(offset / rowHeight),\n };\n }\n\n let totalRowHeight = 0;\n let gridTemplateRows = \" \";\n // Calcule the height of all the rows upfront. This can cause performance issues\n // and we can consider using a similar approach as react-window\n // https://github.com/bvaughn/react-window/blob/b0a470cc264e9100afcaa1b78ed59d88f7914ad4/src/VariableSizeList.js#L68\n const rowPositions = rows.map((row) => {\n const currentRowHeight = rowHeight(row);\n const position = { top: totalRowHeight, height: currentRowHeight };\n gridTemplateRows += `${currentRowHeight}px `;\n totalRowHeight += currentRowHeight;\n return position;\n });\n\n const validateRowIdx = (rowIdx: number) => {\n return max(0, min(rows.length - 1, rowIdx));\n };\n\n return {\n totalRowHeight,\n gridTemplateRows,\n getRowTop: (rowIdx: number) =>\n rowPositions[validateRowIdx(rowIdx)]?.top ?? 0,\n getRowHeight: (rowIdx: number) =>\n rowPositions[validateRowIdx(rowIdx)]?.height ?? 0,\n findRowIdx(offset: number) {\n let start = 0;\n let end = rowPositions.length - 1;\n while (start <= end) {\n const middle = start + floor((end - start) / 2);\n const currentOffset = rowPositions[middle]?.top ?? 0;\n\n if (currentOffset === offset) return middle;\n\n if (currentOffset < offset) {\n start = middle + 1;\n } else if (currentOffset > offset) {\n end = middle - 1;\n }\n\n if (start > end) return end;\n }\n return 0;\n },\n };\n }, [rowHeight, rows]);\n\n let rowOverscanStartIdx = 0;\n let rowOverscanEndIdx = rows.length - 1;\n\n if (enableVirtualization) {\n const overscanThreshold = 4;\n const rowVisibleStartIdx = findRowIdx(scrollTop);\n const rowVisibleEndIdx = findRowIdx(scrollTop + clientHeight);\n rowOverscanStartIdx = max(0, rowVisibleStartIdx - overscanThreshold);\n rowOverscanEndIdx = min(\n rows.length - 1,\n rowVisibleEndIdx + overscanThreshold,\n );\n\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.info(\"[DataGrid] viewport rows\", {\n enableVirtualization,\n clientHeight,\n scrollTop,\n rowVisibleStartIdx,\n rowVisibleEndIdx,\n rowOverscanStartIdx,\n rowOverscanEndIdx,\n totalRowHeight,\n rowCount: rows.length,\n });\n }\n }\n\n return {\n rowOverscanStartIdx,\n rowOverscanEndIdx,\n totalRowHeight,\n gridTemplateRows,\n getRowTop,\n getRowHeight,\n findRowIdx,\n };\n}\n","import clsx from \"clsx\";\nimport { memo, useMemo } from \"react\";\nimport { useDefaultRenderers } from \"./DataGridDefaultRenderersContext\";\nimport { useLatestFunc } from \"./hooks/useLatestFunc\";\nimport {\n RowSelectionContext,\n type RowSelectionContextValue,\n} from \"./hooks/useRowSelection\";\nimport { rowClassname, rowSelectedClassname } from \"./styles\";\nimport type { CalculatedColumn, RenderRowProps } from \"./types\";\nimport { getColSpan, getRowStyle } from \"./utils\";\n\nfunction Row<R, SR>({\n className,\n rowIdx,\n gridRowStart,\n selectedCellIdx,\n isRowSelectionDisabled,\n isRowSelected,\n draggedOverCellIdx,\n lastFrozenColumnIndex,\n row,\n viewportColumns,\n selectedCellEditor,\n onCellMouseDown,\n onCellClick,\n onCellDoubleClick,\n onCellContextMenu,\n rowClass,\n onRowChange,\n selectCell,\n style,\n ...props\n}: RenderRowProps<R, SR>) {\n const defaultRenderers = useDefaultRenderers<R, SR>();\n if (!defaultRenderers?.renderCell) {\n throw new Error(\"DataGrid default renderCell renderer is missing.\");\n }\n const { renderCell } = defaultRenderers;\n\n const handleRowChange = useLatestFunc(\n (column: CalculatedColumn<R, SR>, newRow: R) => {\n onRowChange(column, rowIdx, newRow);\n },\n );\n\n className = clsx(\n rowClassname,\n `rdg-row-${rowIdx % 2 === 0 ? \"even\" : \"odd\"}`,\n {\n [rowSelectedClassname]: selectedCellIdx === -1,\n },\n rowClass?.(row, rowIdx),\n className,\n );\n\n const cells = [];\n\n for (let index = 0; index < viewportColumns.length; index++) {\n const column = viewportColumns[index];\n if (!column) continue;\n const { idx } = column;\n const colSpan = getColSpan(column, lastFrozenColumnIndex, {\n type: \"ROW\",\n row,\n });\n if (colSpan !== undefined) {\n index += colSpan - 1;\n }\n\n const isCellSelected = selectedCellIdx === idx;\n\n if (isCellSelected && selectedCellEditor) {\n cells.push(selectedCellEditor);\n } else {\n cells.push(\n renderCell(column.key, {\n column,\n colSpan,\n row,\n rowIdx,\n isDraggedOver: draggedOverCellIdx === idx,\n isCellSelected,\n onCellMouseDown,\n onCellClick,\n onCellDoubleClick,\n onCellContextMenu,\n onRowChange: handleRowChange,\n selectCell,\n }),\n );\n }\n }\n\n const selectionValue = useMemo(\n (): RowSelectionContextValue => ({ isRowSelected, isRowSelectionDisabled }),\n [isRowSelectionDisabled, isRowSelected],\n );\n\n return (\n <RowSelectionContext value={selectionValue}>\n <div\n role=\"row\"\n className={className}\n style={{\n ...getRowStyle(gridRowStart),\n ...style,\n }}\n {...props}\n >\n {cells}\n </div>\n </RowSelectionContext>\n );\n}\n\nconst RowComponent = memo(Row) as <R, SR>(\n props: RenderRowProps<R, SR>,\n) => React.JSX.Element;\n\nexport default RowComponent;\n\nexport function defaultRenderRow<R, SR>(\n key: React.Key,\n props: RenderRowProps<R, SR>,\n) {\n return <RowComponent key={key} {...props} />;\n}\n","import { useLayoutEffect, useRef } from \"react\";\n\nimport { scrollIntoView } from \"./utils\";\n\nexport interface PartialPosition {\n readonly idx?: number | undefined;\n readonly rowIdx?: number | undefined;\n}\n\nexport default function ScrollToCell({\n scrollToPosition: { idx, rowIdx },\n gridRef,\n setScrollToCellPosition,\n}: {\n scrollToPosition: PartialPosition;\n gridRef: React.RefObject<HTMLDivElement | null>;\n setScrollToCellPosition: (cell: null) => void;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n\n useLayoutEffect(() => {\n // scroll until the cell is completely visible\n // this is needed if the grid has auto-sized columns\n // setting the behavior to auto so it can be overridden\n scrollIntoView(ref.current, \"auto\");\n });\n\n useLayoutEffect(() => {\n function removeScrollToCell() {\n setScrollToCellPosition(null);\n }\n\n const observer = new IntersectionObserver(removeScrollToCell, {\n root: gridRef.current!,\n threshold: 1.0,\n });\n\n observer.observe(ref.current!);\n\n return () => {\n observer.disconnect();\n };\n }, [gridRef, setScrollToCellPosition]);\n\n return (\n <div\n ref={ref}\n style={{\n gridColumn: idx === undefined ? \"1/-1\" : idx + 1,\n gridRow: rowIdx === undefined ? \"1/-1\" : rowIdx + 2,\n }}\n />\n );\n}\n","import clsx from \"clsx\";\nimport { memo } from \"react\";\nimport SummaryCell from \"./SummaryCell\";\nimport {\n bottomSummaryRowClassname,\n rowClassname,\n rowSelectedClassname,\n summaryRowClassname,\n topSummaryRowClassname,\n} from \"./styles\";\nimport type { RenderRowProps } from \"./types\";\nimport { getColSpan, getRowStyle } from \"./utils\";\n\ntype SharedRenderRowProps<R, SR> = Pick<\n RenderRowProps<R, SR>,\n \"viewportColumns\" | \"rowIdx\" | \"gridRowStart\" | \"selectCell\"\n>;\n\ninterface SummaryRowProps<R, SR> extends SharedRenderRowProps<R, SR> {\n \"aria-rowindex\": number;\n row: SR;\n top: number | undefined;\n bottom: number | undefined;\n lastFrozenColumnIndex: number;\n selectedCellIdx: number | undefined;\n isTop: boolean;\n}\n\nfunction SummaryRow<R, SR>({\n rowIdx,\n gridRowStart,\n row,\n viewportColumns,\n top,\n bottom,\n lastFrozenColumnIndex,\n selectedCellIdx,\n isTop,\n selectCell,\n \"aria-rowindex\": ariaRowIndex,\n}: SummaryRowProps<R, SR>) {\n const cells = [];\n for (let index = 0; index < viewportColumns.length; index++) {\n const column = viewportColumns[index];\n if (!column) continue;\n const colSpan = getColSpan(column, lastFrozenColumnIndex, {\n type: \"SUMMARY\",\n row,\n });\n if (colSpan !== undefined) {\n index += colSpan - 1;\n }\n\n const isCellSelected = selectedCellIdx === column.idx;\n\n cells.push(\n <SummaryCell<R, SR>\n key={column.key}\n column={column}\n colSpan={colSpan}\n row={row}\n rowIdx={rowIdx}\n isCellSelected={isCellSelected}\n selectCell={selectCell}\n />,\n );\n }\n\n return (\n <div\n role=\"row\"\n aria-rowindex={ariaRowIndex}\n className={clsx(\n rowClassname,\n `rdg-row-${rowIdx % 2 === 0 ? \"even\" : \"odd\"}`,\n summaryRowClassname,\n {\n [rowSelectedClassname]: selectedCellIdx === -1,\n [topSummaryRowClassname]: isTop,\n [bottomSummaryRowClassname]: !isTop,\n },\n )}\n style={\n {\n ...getRowStyle(gridRowStart),\n \"--rdg-summary-row-top\": top !== undefined ? `${top}px` : undefined,\n \"--rdg-summary-row-bottom\":\n bottom !== undefined ? `${bottom}px` : undefined,\n } as unknown as React.CSSProperties\n }\n >\n {cells}\n </div>\n );\n}\n\nexport default memo(SummaryRow) as <R, SR>(\n props: SummaryRowProps<R, SR>,\n) => React.JSX.Element;\n","import { memo } from \"react\";\n\nimport { useRovingTabIndex } from \"./hooks/useRovingTabIndex\";\nimport { summaryCellClassname } from \"./styles\";\nimport type { CellRendererProps } from \"./types\";\nimport { getCellClassname, getCellStyle } from \"./utils\";\n\ntype SharedCellRendererProps<R, SR> = Pick<\n CellRendererProps<R, SR>,\n \"rowIdx\" | \"column\" | \"colSpan\" | \"isCellSelected\" | \"selectCell\"\n>;\n\ninterface SummaryCellProps<R, SR> extends SharedCellRendererProps<R, SR> {\n row: SR;\n}\n\nfunction SummaryCell<R, SR>({\n column,\n colSpan,\n row,\n rowIdx,\n isCellSelected,\n selectCell,\n}: SummaryCellProps<R, SR>) {\n const { tabIndex, childTabIndex, onFocus } =\n useRovingTabIndex(isCellSelected);\n const { summaryCellClass } = column;\n const className = getCellClassname(\n column,\n summaryCellClassname,\n typeof summaryCellClass === \"function\"\n ? summaryCellClass(row)\n : summaryCellClass,\n );\n\n function onMouseDown() {\n selectCell({ rowIdx, idx: column.idx });\n }\n\n return (\n <div\n role=\"gridcell\"\n aria-colindex={column.idx + 1}\n aria-colspan={colSpan}\n aria-selected={isCellSelected}\n tabIndex={tabIndex}\n className={className}\n style={getCellStyle(column, colSpan)}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n >\n {column.renderSummaryCell?.({ column, row, tabIndex: childTabIndex })}\n </div>\n );\n}\n\nexport default memo(SummaryCell) as <R, SR>(\n props: SummaryCellProps<R, SR>,\n) => React.JSX.Element;\n","import { sortArrowClassname } from \"./styles\";\nimport type {\n RenderSortIconProps,\n RenderSortPriorityProps,\n RenderSortStatusProps,\n} from \"./types\";\n\nconst arrowClassname = sortArrowClassname;\n\nexport default function renderSortStatus({\n sortDirection,\n priority,\n}: RenderSortStatusProps) {\n return (\n <>\n {renderSortIcon({ sortDirection })}\n {renderSortPriority({ priority })}\n </>\n );\n}\n\nexport function renderSortIcon({ sortDirection }: RenderSortIconProps) {\n if (sortDirection === undefined) return null;\n\n return (\n <svg\n viewBox=\"0 0 12 8\"\n width=\"12\"\n height=\"8\"\n className={arrowClassname}\n aria-hidden\n >\n <path d={sortDirection === \"ASC\" ? \"M0 8 6 0 12 8\" : \"M0 0 6 8 12 0\"} />\n </svg>\n );\n}\n\nexport function renderSortPriority({ priority }: RenderSortPriorityProps) {\n return priority;\n}\n","import type { ObjectOutput } from \"@nubase/core\";\nimport { type FC, useEffect, useState } from \"react\";\nimport type { ResourceViewView } from \"../../../../config/view\";\nimport type { NubaseContextData } from \"../../../../context/types\";\nimport { useSchemaForm } from \"../../../../hooks\";\nimport { ActivityIndicator } from \"../../../activity-indicator/ActivityIndicator\";\nimport { ModalFrameStructured } from \"../../../floating/modal/ModalFrameStructured\";\nimport { SchemaForm } from \"../../../form/SchemaForm/SchemaForm\";\nimport { SchemaFormBody } from \"../../../form/SchemaForm/SchemaFormBody\";\nimport { SchemaFormValidationErrors } from \"../../../form/SchemaForm/SchemaFormValidationErrors\";\n\nexport type ResourceViewViewModalRendererProps = {\n view: ResourceViewView;\n context: NubaseContextData;\n params?: Record<string, any>;\n onClose?: () => void;\n onPatch?: (data: ObjectOutput<any>) => void;\n onError?: (error: Error) => void;\n};\n\nexport const ResourceViewViewModalRenderer: FC<\n ResourceViewViewModalRendererProps\n> = (props) => {\n const {\n view,\n context,\n params,\n onClose,\n onPatch: onPatchCallback,\n onError,\n } = props;\n const [isLoading, setIsLoading] = useState(true);\n const [initialData, setInitialData] = useState<Record<string, any> | null>(\n null,\n );\n\n useEffect(() => {\n const loadData = async () => {\n try {\n setIsLoading(true);\n const contextWithParams = {\n ...context,\n params: params || undefined,\n };\n const response = await view.onLoad({\n context: contextWithParams as any,\n });\n setInitialData(response.data);\n } catch (error) {\n onError?.(error as Error);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadData();\n }, [params, context, onError, view.onLoad]);\n\n const renderBody = () => {\n if (isLoading) {\n return (\n <div className=\"flex justify-center py-8\">\n <ActivityIndicator size=\"lg\" aria-label=\"Loading resource data...\" />\n </div>\n );\n }\n\n if (!initialData) {\n return <div>Failed to load resource data</div>;\n }\n\n return (\n <ResourceViewForm\n view={view}\n initialData={initialData}\n params={params}\n onPatch={onPatchCallback}\n onError={onError}\n context={context}\n />\n );\n };\n\n return (\n <ModalFrameStructured\n onClose={onClose}\n header={\n <h2 className=\"text-lg font-semibold text-foreground\">{view.title}</h2>\n }\n body={renderBody()}\n />\n );\n};\n\n// Separate component to properly handle form initialization with loaded data\nconst ResourceViewForm: FC<{\n view: ResourceViewView;\n initialData: Record<string, any>;\n params?: Record<string, any>;\n onPatch?: (data: ObjectOutput<any>) => void;\n onError?: (error: Error) => void;\n context: any;\n}> = ({\n view,\n initialData,\n params,\n onPatch: onPatchCallback,\n onError,\n context,\n}) => {\n const form = useSchemaForm({\n schema: view.schemaGet,\n mode: \"patch\",\n initialValues: initialData,\n onPatch: async (fieldName: string, value) => {\n try {\n const patchData = { [fieldName]: value };\n const contextWithParams = {\n ...context,\n params: params || undefined,\n };\n const result = await view.onPatch({\n data: patchData,\n context: contextWithParams as any,\n });\n\n onPatchCallback?.(result);\n } catch (error) {\n onError?.(error as Error);\n throw error;\n }\n },\n onSubmit: async () => {\n // Not used in patch mode\n },\n });\n\n return (\n <SchemaForm\n form={form}\n className=\"space-y-4\"\n data-testid=\"resource-view-form-modal\"\n >\n <SchemaFormBody form={form} />\n <SchemaFormValidationErrors form={form} />\n </SchemaForm>\n );\n};\n","import type { FC } from \"react\";\nimport type { View } from \"../../../../config/view\";\nimport type { NubaseContextData } from \"../../../../context/types\";\nimport { ResourceCreateViewModalRenderer } from \"./ResourceCreateViewModalRenderer\";\nimport { ResourceSearchViewModalRenderer } from \"./ResourceSearchViewModalRenderer\";\nimport { ResourceViewViewModalRenderer } from \"./ResourceViewViewModalRenderer\";\n\nexport type ModalViewRendererProps = {\n view: View;\n context: NubaseContextData;\n params?: Record<string, any>;\n resourceName?: string;\n onClose?: () => void;\n onRowClick?: (row: any) => void; // For search modals\n onError?: (error: Error) => void;\n};\n\nexport const ModalViewRenderer: FC<ModalViewRendererProps> = (props) => {\n const { view, context, params, resourceName, onClose, onRowClick, onError } =\n props;\n\n if (!view) {\n return null;\n }\n\n switch (view.type) {\n case \"resource-create\":\n return (\n <ResourceCreateViewModalRenderer\n view={view}\n context={context}\n resourceName={resourceName}\n onClose={onClose}\n onError={onError}\n />\n );\n case \"resource-view\":\n return (\n <ResourceViewViewModalRenderer\n view={view}\n context={context}\n params={params}\n onClose={onClose}\n onError={onError}\n />\n );\n case \"resource-search\":\n return (\n <ResourceSearchViewModalRenderer\n view={view}\n context={context}\n params={params}\n resourceName={resourceName}\n onClose={onClose}\n onRowClick={onRowClick}\n onError={onError}\n />\n );\n default:\n return null;\n }\n};\n","import { Terminal } from \"lucide-react\";\nimport { ModalFrame } from \"../../components/floating/modal\";\nimport { SearchableTreeNavigator } from \"../../components/navigation/searchable-tree-navigator/SearchableTreeNavigator\";\nimport type { MenuItem } from \"../../menu/types\";\nimport { createCommand } from \"../defineCommand\";\n\nexport const workbenchRunCommand = createCommand({\n id: \"workbench.runCommand\",\n name: \"Run Command\",\n icon: Terminal,\n execute: (context) => {\n const commands = context.commands.getAllCommands();\n const commandItems: MenuItem[] = commands.map((command) => ({\n id: command.id,\n icon: command.icon || Terminal,\n label: command.name,\n onExecute: () => {\n context.modal.closeModal();\n context.commands.execute(command.id);\n },\n }));\n context.modal.openModal({\n content: (\n <ModalFrame data-testid=\"command-palette\">\n <SearchableTreeNavigator\n items={commandItems}\n placeHolder=\"Search in commands...\"\n data-testid=\"command-palette-navigator\"\n />\n </ModalFrame>\n ),\n alignment: \"top\",\n size: \"lg\",\n showBackdrop: true,\n });\n },\n});\n","import { nu } from \"@nubase/core\";\nimport { Moon, Palette, Sun } from \"lucide-react\";\nimport { ModalFrame } from \"../../components/floating/modal\";\nimport { showToast } from \"../../components/floating/toast\";\nimport { SearchableTreeNavigator } from \"../../components/navigation/searchable-tree-navigator/SearchableTreeNavigator\";\nimport type { MenuItem } from \"../../menu/types\";\nimport { createCommand } from \"../defineCommand\";\n\n// Schema for command arguments\nconst workbenchSetThemeArgsSchema = nu.object({\n themeId: nu\n .string()\n .withMeta({\n label: \"Theme ID\",\n description: \"The ID of the theme to set\",\n })\n .optional(),\n});\n\nexport const workbenchSetTheme = createCommand({\n id: \"workbench.setTheme\",\n name: \"Set Theme\",\n icon: Palette,\n argsSchema: workbenchSetThemeArgsSchema.optional(),\n execute: (context, args) => {\n // If themeId is provided, set it directly\n if (args?.themeId) {\n const { themeId } = args;\n\n // Validate that the theme exists\n const availableThemes = context.config?.themeIds || [\"light\", \"dark\"];\n if (availableThemes.includes(themeId)) {\n context.theming.setActiveThemeId(themeId);\n return;\n }\n showToast(\n `Theme \"${themeId}\" not found. Available themes: ${availableThemes.join(\", \")}`,\n \"default\",\n );\n // Fall through to show theme selection modal\n }\n // Get available themes from context or use defaults\n const availableThemes = context.config?.themeIds || [\"light\", \"dark\"];\n\n // We need the original theme to revert back if the modal is dismissed\n const originalTheme = context.theming.activeThemeId;\n\n // Sort themes: current theme first, then others alphabetically\n const currentTheme = context.theming.activeThemeId;\n const otherThemes = availableThemes\n .filter((themeId) => themeId !== currentTheme)\n .sort((a, b) => a.localeCompare(b));\n const sortedThemes = [currentTheme, ...otherThemes];\n\n const themeItems: MenuItem[] = sortedThemes.map((themeId) => {\n const theme = context.theming.themeMap[themeId];\n return {\n id: themeId,\n icon: theme?.type === \"dark\" ? Moon : Sun,\n label: theme?.name || themeId,\n subtitle: `Switch to ${themeId} theme`,\n onExecute: () => {\n context.modal.closeModal();\n context.theming.setActiveThemeId(themeId);\n },\n onFocus: () => {\n // Preview the theme when focused\n context.theming.setActiveThemeId(themeId);\n },\n };\n });\n\n context.modal.openModal({\n content: (\n <ModalFrame data-testid=\"theme-picker\">\n <SearchableTreeNavigator\n items={themeItems}\n placeHolder=\"Search themes...\"\n data-testid=\"theme-picker-navigator\"\n />\n </ModalFrame>\n ),\n alignment: \"top\",\n size: \"lg\",\n showBackdrop: true,\n onDismiss: () => {\n // Revert to the original theme if modal is dismissed\n context.theming.setActiveThemeId(originalTheme);\n },\n });\n },\n});\n","import { Clock } from \"lucide-react\";\nimport { ModalFrame } from \"../../components/floating/modal\";\nimport { SearchableTreeNavigator } from \"../../components/navigation/searchable-tree-navigator/SearchableTreeNavigator\";\nimport type { MenuItem } from \"../../menu/types\";\nimport { createCommand } from \"../defineCommand\";\n\nexport const workbenchViewHistory = createCommand({\n id: \"workbench.viewHistory\",\n name: \"View Navigation History\",\n icon: Clock,\n execute: (context) => {\n const navigationHistory = context.navigationHistory;\n const history = navigationHistory.getHistory();\n\n if (history.length === 0) {\n context.modal.openModal({\n content: (\n <ModalFrame>\n <div className=\"p-4 text-center\">\n <p className=\"text-foreground\">No navigation history available</p>\n </div>\n </ModalFrame>\n ),\n alignment: \"top\",\n size: \"md\",\n showBackdrop: true,\n });\n return;\n }\n\n // Create menu items from history\n const historyItems: MenuItem[] = history.map((entry, index) => ({\n id: entry.id,\n icon: Clock,\n label: entry.title,\n subtitle:\n index === 0\n ? \"Current page\"\n : navigationHistory.formatTimeAgo(entry.timestamp),\n onExecute: () => {\n context.modal.closeModal();\n navigationHistory.navigateToEntry(entry);\n },\n }));\n\n context.modal.openModal({\n content: (\n <ModalFrame>\n <SearchableTreeNavigator\n items={historyItems}\n placeHolder=\"Search navigation history...\"\n />\n </ModalFrame>\n ),\n alignment: \"top\",\n size: \"lg\",\n showBackdrop: true,\n });\n },\n});\n","/**\n * Centralized exports for all command definitions.\n * This allows importing commands as a namespace: `import { commands } from \"@nubase/frontend\"`\n * Usage: `commands.workbenchSetTheme`, `commands.workbenchOpenResourceOperation`, etc.\n */\n\nexport { workbenchOpenResourceOperation } from \"./workbench.openResource\";\nexport { workbenchOpenResourceOperationInModal } from \"./workbench.openResourceInModal\";\nexport { workbenchRunCommand } from \"./workbench.runCommand\";\nexport { workbenchSetTheme } from \"./workbench.setTheme\";\nexport { workbenchViewHistory } from \"./workbench.viewHistory\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport type { ActionOrSeparator } from \"../../../actions/types\";\nimport { useActionExecutor } from \"../../../actions/useActionExecutor\";\nimport { groupActionsBySeparators } from \"../../../actions/utils\";\nimport { cn } from \"../../../styling/cn\";\n\nconst actionBarVariants = cva(\"flex items-center gap-1 text-sm font-medium\", {\n variants: {\n variant: {\n default: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nconst actionVariants = cva(\n \"inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-md transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] px-2 py-1.5 text-sm cursor-pointer hover:bg-accent hover:text-accent-foreground\",\n {\n variants: {\n variant: {\n default: \"text-muted-foreground\",\n destructive: \"text-destructive hover:bg-destructive/10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst separatorVariants = cva(\"bg-border w-[1px] h-6 mx-2 opacity-60\");\n\nexport interface ActionBarProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof actionBarVariants> {\n actions: ActionOrSeparator[];\n}\n\nconst ActionBar = forwardRef<HTMLDivElement, ActionBarProps>(\n ({ className, variant, actions, ...props }, ref) => {\n const { executeAction } = useActionExecutor();\n\n // Group actions by separators\n const actionGroups = groupActionsBySeparators(actions);\n\n return (\n <div\n data-component=\"ActionBar\"\n className={cn(actionBarVariants({ variant, className }))}\n ref={ref}\n role=\"toolbar\"\n {...props}\n >\n {actionGroups.map((group, groupIndex) => (\n <div key={groupIndex} className=\"flex items-center\">\n {groupIndex > 0 && <div className={cn(separatorVariants())} />}\n <div className=\"flex items-center gap-0.5\">\n {group.map((action) => {\n const {\n icon: IconComponent,\n label,\n disabled,\n id,\n variant: actionVariant,\n } = action;\n\n if (!IconComponent && !label) {\n console.warn(\n `ActionBar action with id \"${id}\" has neither icon nor label. At least one is required.`,\n );\n return null;\n }\n\n return (\n <button\n key={id}\n type=\"button\"\n className={cn(\n actionVariants({ variant: actionVariant || \"default\" }),\n )}\n onClick={() => executeAction(action)}\n disabled={disabled}\n aria-label={label || `Action ${id}`}\n title={label}\n >\n {IconComponent && <IconComponent size={16} />}\n {label && <span>{label}</span>}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n },\n);\n\nActionBar.displayName = \"ActionBar\";\n\nexport { ActionBar, actionBarVariants };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../styling/cn\";\n\nconst actionBarContainerVariants = cva(\n \"bg-card border-border rounded-lg border p-3\",\n {\n variants: {\n variant: {\n default: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface ActionBarContainerProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof actionBarContainerVariants> {}\n\nconst ActionBarContainer = forwardRef<HTMLDivElement, ActionBarContainerProps>(\n ({ className, variant, children, ...props }, ref) => {\n return (\n <div\n className={cn(actionBarContainerVariants({ variant, className }))}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nActionBarContainer.displayName = \"ActionBarContainer\";\n\nexport { ActionBarContainer, actionBarContainerVariants };\n","import * as React from \"react\";\nimport { cn } from \"../../styling/cn\";\n\nexport type CardProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card\"\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow-sm\",\n className,\n )}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\nexport type CardHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn(\n \"flex flex-col space-y-1.5 p-6 @container/card-header [.border-b]:pb-6\",\n className,\n )}\n {...props}\n />\n ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport type CardTitleProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CardTitle = React.forwardRef<HTMLDivElement, CardTitleProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport type CardDescriptionProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CardDescription = React.forwardRef<HTMLDivElement, CardDescriptionProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n ),\n);\nCardDescription.displayName = \"CardDescription\";\n\nexport type CardActionProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CardAction = React.forwardRef<HTMLDivElement, CardActionProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className,\n )}\n {...props}\n />\n ),\n);\nCardAction.displayName = \"CardAction\";\n\nexport type CardContentProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-content\"\n className={cn(\"p-6 pt-0\", className)}\n {...props}\n />\n ),\n);\nCardContent.displayName = \"CardContent\";\n\nexport type CardFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n ),\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardAction,\n CardContent,\n CardFooter,\n};\n","import * as React from \"react\";\nimport * as RechartsPrimitive from \"recharts\";\nimport { cn } from \"../../styling/cn\";\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n );\n};\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\");\n }\n\n return context;\n}\n\nconst ChartContainer = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & {\n config: ChartConfig;\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >[\"children\"];\n }\n>(({ id, className, children, config, ...props }, ref) => {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-chart={chartId}\n ref={ref}\n className={cn(\n \"flex aspect-video justify-center text-xs\",\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground\",\n \"[&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50\",\n \"[&_.recharts-curve.recharts-tooltip-cursor]:stroke-border\",\n \"[&_.recharts-dot[stroke='#fff']]:stroke-transparent\",\n \"[&_.recharts-layer]:outline-none\",\n \"[&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border\",\n \"[&_.recharts-radial-bar-background-sector]:fill-muted\",\n \"[&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted\",\n \"[&_.recharts-reference-line_[stroke='#ccc']]:stroke-border\",\n \"[&_.recharts-sector[stroke='#fff']]:stroke-transparent\",\n \"[&_.recharts-sector]:outline-none\",\n \"[&_.recharts-surface]:outline-none\",\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n});\nChartContainer.displayName = \"Chart\";\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.theme || config.color,\n );\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n // biome-ignore lint/security/noDangerouslySetInnerHtml: Safe - CSS is generated from trusted theme config, not user input\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .filter(Boolean)\n .join(\"\\n\")}\n}\n`,\n )\n .join(\"\\n\"),\n }}\n />\n );\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\ninterface ChartTooltipContentProps extends React.ComponentProps<\"div\"> {\n active?: boolean;\n payload?: Array<{\n name?: string;\n value?: number | string;\n dataKey?: string | number;\n color?: string;\n payload?: Record<string, unknown>;\n }>;\n label?: string;\n labelFormatter?: (label: unknown, payload: unknown[]) => React.ReactNode;\n labelClassName?: string;\n formatter?: (\n value: unknown,\n name: unknown,\n item: unknown,\n index: number,\n payload: unknown,\n ) => React.ReactNode;\n color?: string;\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: \"line\" | \"dot\" | \"dashed\";\n nameKey?: string;\n labelKey?: string;\n}\n\nconst ChartTooltipContent = React.forwardRef<\n HTMLDivElement,\n ChartTooltipContentProps\n>(\n (\n {\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n },\n ref,\n ) => {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n if (!item) {\n return null;\n }\n const key = `${labelKey || item.dataKey || item.name || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === \"string\"\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label;\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n );\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>;\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\",\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload.map((item, index) => {\n const key = `${nameKey || item.name || item.dataKey || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const itemPayload = item.payload as\n | Record<string, unknown>\n | undefined;\n const indicatorColor =\n color || (itemPayload?.fill as string) || item.color;\n\n return (\n <div\n key={`${item.dataKey}-${index}`}\n className={cn(\n \"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground\",\n indicator === \"dot\" && \"items-center\",\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\": nestLabel && indicator === \"dashed\",\n },\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between leading-none\",\n nestLabel ? \"items-end\" : \"items-center\",\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value !== undefined && (\n <span className=\"font-mono font-medium tabular-nums text-foreground\">\n {typeof item.value === \"number\"\n ? item.value.toLocaleString()\n : item.value}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n },\n);\nChartTooltipContent.displayName = \"ChartTooltip\";\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\ninterface ChartLegendContentProps extends React.ComponentProps<\"div\"> {\n payload?: Array<{\n value?: string;\n dataKey?: string | number;\n color?: string;\n }>;\n verticalAlign?: \"top\" | \"bottom\";\n hideIcon?: boolean;\n nameKey?: string;\n}\n\nconst ChartLegendContent = React.forwardRef<\n HTMLDivElement,\n ChartLegendContentProps\n>(\n (\n { className, hideIcon = false, payload, verticalAlign = \"bottom\", nameKey },\n ref,\n ) => {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className,\n )}\n >\n {payload.map((item, index) => {\n const key = `${nameKey || item.dataKey || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={`${item.value}-${index}`}\n className={cn(\n \"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground\",\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n },\n);\nChartLegendContent.displayName = \"ChartLegend\";\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string,\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (\n key in payload &&\n typeof (payload as Record<string, unknown>)[key] === \"string\"\n ) {\n configLabelKey = (payload as Record<string, unknown>)[key] as string;\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof (payloadPayload as Record<string, unknown>)[key] === \"string\"\n ) {\n configLabelKey = (payloadPayload as Record<string, unknown>)[key] as string;\n }\n\n return configLabelKey in config\n ? config[configLabelKey]\n : config[key as keyof typeof config];\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n useChart,\n};\n","import type {\n KpiData,\n ProportionalData,\n SeriesData,\n TableData,\n} from \"@nubase/core\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { WidgetDescriptor } from \"../../config/dashboard-widget\";\nimport { ActivityIndicator } from \"../activity-indicator/ActivityIndicator\";\nimport { useNubaseContext } from \"../nubase-app/NubaseContextProvider\";\nimport { KpiContent } from \"./content/KpiContent\";\nimport { ProportionalChartContent } from \"./content/ProportionalChartContent\";\nimport { SeriesChartContent } from \"./content/SeriesChartContent\";\nimport { TableContent } from \"./content/TableContent\";\nimport { DashboardWidget } from \"./DashboardWidget\";\n\nexport interface ConnectedWidgetProps {\n widget: WidgetDescriptor<unknown>;\n}\n\n/**\n * ConnectedWidget handles data fetching and renders the appropriate content\n * inside a DashboardWidget based on the widget type.\n *\n * This component:\n * 1. Fetches data from the widget's endpoint\n * 2. Shows loading/error states\n * 3. Renders the appropriate content renderer based on widget type\n * 4. Wraps everything in the DashboardWidget presentation component\n */\nexport function ConnectedWidget({ widget }: ConnectedWidgetProps) {\n const context = useNubaseContext();\n\n // Get the endpoint key as a string\n const endpointKey = widget.endpoint as string;\n\n // Access the endpoint function from the http client\n const httpClient = context.http as Record<\n string,\n | ((options?: {\n params?: Record<string, unknown>;\n }) => Promise<{ data: unknown }>)\n | undefined\n >;\n const endpointFn = httpClient[endpointKey];\n\n const { data, isLoading, error } = useQuery({\n queryKey: [\"dashboard-widget\", widget.id, endpointKey],\n queryFn: async () => {\n if (typeof endpointFn !== \"function\") {\n throw new Error(`Endpoint ${endpointKey} not found`);\n }\n const response = await endpointFn({ params: {} });\n return response.data;\n },\n refetchInterval: widget.refreshInterval,\n });\n\n const renderContent = () => {\n if (isLoading) {\n return (\n <div className=\"flex h-full items-center justify-center\">\n <ActivityIndicator size=\"md\" />\n </div>\n );\n }\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center text-destructive\">\n <span className=\"text-sm\">Failed to load widget data</span>\n </div>\n );\n }\n if (data) {\n return <WidgetContent widget={widget} data={data} />;\n }\n return null;\n };\n\n return (\n <DashboardWidget title={widget.title} icon={widget.icon}>\n {renderContent()}\n </DashboardWidget>\n );\n}\n\ninterface WidgetContentProps {\n widget: WidgetDescriptor<any>;\n data: unknown;\n}\n\n/**\n * Renders the appropriate content based on widget type.\n */\nfunction WidgetContent({ widget, data }: WidgetContentProps) {\n switch (widget.type) {\n case \"series\":\n return (\n <SeriesChartContent\n data={data as SeriesData}\n variant={widget.variant}\n />\n );\n case \"proportional\":\n return (\n <ProportionalChartContent\n data={data as ProportionalData}\n variant={widget.variant}\n />\n );\n case \"kpi\":\n return <KpiContent data={data as KpiData} />;\n case \"table\":\n return <TableContent data={data as TableData} maxRows={widget.maxRows} />;\n default:\n return (\n <div className=\"flex h-full items-center justify-center text-muted-foreground\">\n <span className=\"text-sm\">Unknown widget type</span>\n </div>\n );\n }\n}\n","import type { KpiData } from \"@nubase/core\";\nimport { cn } from \"../../../styling/cn\";\n\nexport interface KpiContentProps {\n data: KpiData;\n}\n\n/**\n * Renders KPI content (single value with optional trend) from KpiData.\n * This is a presentation component - data fetching is handled by ConnectedWidget.\n */\nexport function KpiContent({ data }: KpiContentProps) {\n const trendColor =\n data.trendDirection === \"up\"\n ? \"text-green-600\"\n : data.trendDirection === \"down\"\n ? \"text-red-600\"\n : \"text-muted-foreground\";\n\n return (\n <div className=\"flex h-full flex-col justify-center\">\n <p className=\"text-3xl font-bold\">{data.value}</p>\n {data.trend && <p className={cn(\"text-xs\", trendColor)}>{data.trend}</p>}\n {data.label && !data.trend && (\n <p className=\"text-xs text-muted-foreground\">{data.label}</p>\n )}\n </div>\n );\n}\n","import type { ProportionalData } from \"@nubase/core\";\nimport * as React from \"react\";\nimport { Pie, PieChart } from \"recharts\";\nimport type { ProportionalChartVariant } from \"../../../config/dashboard-widget\";\nimport {\n type ChartConfig,\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n} from \"../../charts/Chart\";\n\nexport interface ProportionalChartContentProps {\n data: ProportionalData;\n variant: ProportionalChartVariant;\n}\n\n/**\n * Renders proportional chart content (pie or donut) from ProportionalData.\n * This is a presentation component - data fetching is handled by ConnectedWidget.\n */\nexport function ProportionalChartContent({\n data,\n variant,\n}: ProportionalChartContentProps) {\n const chartConfig = React.useMemo(() => {\n const config: ChartConfig = {\n value: { label: \"Value\" },\n };\n data.data.forEach((item, index) => {\n const key = item.label.toLowerCase().replace(/\\s+/g, \"-\");\n config[key] = {\n label: item.label,\n color: item.fill || `var(--chart${index + 1})`,\n };\n });\n return config;\n }, [data]);\n\n const chartData = React.useMemo(() => {\n return data.data.map((item, index) => ({\n label: item.label,\n value: item.value,\n fill: item.fill || `var(--chart${(index % 5) + 1})`,\n }));\n }, [data]);\n\n const innerRadius = variant === \"donut\" ? 40 : 0;\n\n return (\n <ChartContainer\n config={chartConfig}\n className=\"mx-auto aspect-square h-full\"\n >\n <PieChart>\n <ChartTooltip\n cursor={false}\n content={<ChartTooltipContent hideLabel />}\n />\n <Pie\n data={chartData}\n dataKey=\"value\"\n nameKey=\"label\"\n innerRadius={innerRadius}\n />\n </PieChart>\n </ChartContainer>\n );\n}\n","import type { SeriesData } from \"@nubase/core\";\nimport * as React from \"react\";\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Line,\n LineChart,\n XAxis,\n} from \"recharts\";\nimport type { SeriesChartVariant } from \"../../../config/dashboard-widget\";\nimport {\n type ChartConfig,\n ChartContainer,\n ChartLegend,\n ChartLegendContent,\n ChartTooltip,\n ChartTooltipContent,\n} from \"../../charts/Chart\";\n\nexport interface SeriesChartContentProps {\n data: SeriesData;\n variant: SeriesChartVariant;\n}\n\n/**\n * Renders series chart content (line, bar, or area) from SeriesData.\n * This is a presentation component - data fetching is handled by ConnectedWidget.\n */\nexport function SeriesChartContent({ data, variant }: SeriesChartContentProps) {\n const chartConfig = React.useMemo(() => {\n const config: ChartConfig = {};\n data.config.keys.forEach((key, index) => {\n const labels = data.config.labels as Record<string, string> | undefined;\n const colors = data.config.colors as Record<string, string> | undefined;\n config[key] = {\n label: labels?.[key] || key,\n color: colors?.[key] || `var(--chart${index + 1})`,\n };\n });\n return config;\n }, [data.config]);\n\n const chartData = React.useMemo(() => {\n return data.data.map((point) => ({\n category: point.category,\n ...Object.fromEntries(\n data.config.keys.map((key) => [key, point[key as keyof typeof point]]),\n ),\n }));\n }, [data]);\n\n return (\n <ChartContainer config={chartConfig} className=\"h-full w-full\">\n {variant === \"line\" && (\n <LineChart data={chartData}>\n <CartesianGrid vertical={false} />\n <XAxis\n dataKey=\"category\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n tickFormatter={(value) =>\n typeof value === \"string\" ? value.slice(0, 3) : value\n }\n />\n <ChartTooltip content={<ChartTooltipContent />} />\n <ChartLegend content={<ChartLegendContent />} />\n {data.config.keys.map((key) => (\n <Line\n key={key}\n type=\"monotone\"\n dataKey={key}\n stroke={`var(--color-${key})`}\n strokeWidth={2}\n dot={false}\n />\n ))}\n </LineChart>\n )}\n {variant === \"area\" && (\n <AreaChart data={chartData}>\n <CartesianGrid vertical={false} />\n <XAxis\n dataKey=\"category\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n tickFormatter={(value) =>\n typeof value === \"string\" ? value.slice(0, 3) : value\n }\n />\n <ChartTooltip content={<ChartTooltipContent indicator=\"dot\" />} />\n <ChartLegend content={<ChartLegendContent />} />\n {data.config.keys.map((key) => (\n <Area\n key={key}\n type=\"natural\"\n dataKey={key}\n fill={`var(--color-${key})`}\n fillOpacity={0.4}\n stroke={`var(--color-${key})`}\n />\n ))}\n </AreaChart>\n )}\n {variant === \"bar\" && (\n <BarChart data={chartData}>\n <CartesianGrid vertical={false} />\n <XAxis\n dataKey=\"category\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n tickFormatter={(value) =>\n typeof value === \"string\" ? value.slice(0, 3) : value\n }\n />\n <ChartTooltip content={<ChartTooltipContent />} />\n <ChartLegend content={<ChartLegendContent />} />\n {data.config.keys.map((key) => (\n <Bar\n key={key}\n dataKey={key}\n fill={`var(--color-${key})`}\n radius={4}\n />\n ))}\n </BarChart>\n )}\n </ChartContainer>\n );\n}\n","import type { TableData } from \"@nubase/core\";\n\nexport interface TableContentProps {\n data: TableData;\n maxRows?: number;\n}\n\n/**\n * Renders table content from TableData.\n * This is a presentation component - data fetching is handled by ConnectedWidget.\n */\nexport function TableContent({ data, maxRows }: TableContentProps) {\n const displayRows = maxRows ? data.rows.slice(0, maxRows) : data.rows;\n\n return (\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b text-left text-muted-foreground\">\n {data.columns.map((column) => (\n <th\n key={column.key}\n className=\"pb-2 font-medium\"\n style={{ width: column.width }}\n >\n {column.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {displayRows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className={rowIndex < displayRows.length - 1 ? \"border-b\" : \"\"}\n >\n {data.columns.map((column) => (\n <td key={column.key} className=\"py-2\">\n {String(row[column.key] ?? \"\")}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n","import { GripVertical } from \"lucide-react\";\nimport * as React from \"react\";\nimport type { IconComponent } from \"../../menu/types\";\nimport { cn } from \"../../styling/cn\";\nimport { Card, CardContent, CardFooter } from \"../card/Card\";\n\nexport interface DashboardWidgetProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** The title of the widget */\n title: string;\n /** Optional icon component (not instantiated) shown before the title */\n icon?: IconComponent;\n /** Optional action elements (e.g., buttons) shown on the right side of the header */\n action?: React.ReactNode;\n /** Optional footer content */\n footer?: React.ReactNode;\n /** Whether the widget is draggable (shows drag handle) */\n draggable?: boolean;\n /** The widget content */\n children: React.ReactNode;\n}\n\n/**\n * DashboardWidget is a Widget component adapted for use inside a Dashboard.\n * It includes a drag handle for repositioning within the grid layout.\n */\nexport const DashboardWidget = React.forwardRef<\n HTMLDivElement,\n DashboardWidgetProps\n>(\n (\n {\n title,\n icon: Icon,\n action,\n footer,\n draggable = true,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <Card\n ref={ref}\n className={cn(\"flex h-full flex-col pt-0\", className)}\n {...props}\n >\n <div className=\"flex items-center gap-2 border-b px-3 py-2.5\">\n {draggable && (\n <div className=\"dashboard-widget-drag-handle cursor-grab text-muted-foreground hover:text-foreground active:cursor-grabbing\">\n <GripVertical className=\"h-4 w-4\" />\n </div>\n )}\n <div className=\"flex items-center gap-1.5 text-[13px] text-muted-foreground\">\n {Icon && <Icon className=\"h-[0.9rem] w-[0.9rem]\" />}\n {title}\n </div>\n {action && (\n <div className=\"dashboard-widget-no-drag ml-auto flex items-center gap-2\">\n {action}\n </div>\n )}\n </div>\n <CardContent className=\"flex-1 overflow-auto px-2 pt-4 sm:px-6 sm:pt-6\">\n {children}\n </CardContent>\n {footer && (\n <CardFooter className=\"dashboard-widget-no-drag\">{footer}</CardFooter>\n )}\n </Card>\n );\n },\n);\nDashboardWidget.displayName = \"DashboardWidget\";\n","import type * as React from \"react\";\nimport ReactGridLayout, {\n type Layout,\n type LayoutItem,\n useContainerWidth,\n} from \"react-grid-layout\";\nimport \"react-grid-layout/css/styles.css\";\nimport \"react-resizable/css/styles.css\";\nimport type { DashboardGridConfig } from \"../../config/dashboard-widget\";\nimport { cn } from \"../../styling/cn\";\n\nexport type { LayoutItem, Layout };\n// Re-export for backwards compatibility\nexport type { DashboardGridConfig };\n\nexport interface DashboardDragConfig {\n /** Enable dragging */\n enabled?: boolean;\n /** CSS selector for drag handle */\n handle?: string;\n /** CSS selector for elements that should not trigger drag */\n cancel?: string;\n}\n\nexport interface DashboardResizeConfig {\n /** Enable resizing */\n enabled?: boolean;\n /** Which handles to show for resizing */\n handles?: Array<\"s\" | \"w\" | \"e\" | \"n\" | \"sw\" | \"nw\" | \"se\" | \"ne\">;\n}\n\nexport interface DashboardProps {\n /** The layout configuration for grid items */\n layout: Layout;\n /** Callback when layout changes */\n onLayoutChange?: (layout: Layout) => void;\n /** Grid configuration */\n gridConfig?: DashboardGridConfig;\n /** Drag configuration */\n dragConfig?: DashboardDragConfig;\n /** Resize configuration */\n resizeConfig?: DashboardResizeConfig;\n /** Additional class name for the dashboard container */\n className?: string;\n /** Dashboard widget children */\n children: React.ReactNode;\n}\n\nconst defaultGridConfig: Required<DashboardGridConfig> = {\n cols: 12,\n rowHeight: 100,\n margin: [16, 16],\n containerPadding: [0, 0],\n};\n\nconst defaultDragConfig: Required<DashboardDragConfig> = {\n enabled: true,\n handle: \".dashboard-widget-drag-handle\",\n cancel: \".dashboard-widget-no-drag\",\n};\n\nconst defaultResizeConfig: Required<DashboardResizeConfig> = {\n enabled: true,\n handles: [\"se\"],\n};\n\n/**\n * Dashboard is a grid layout container for DashboardWidget components.\n * It uses react-grid-layout internally for drag-and-drop and resizing functionality.\n */\nexport function Dashboard({\n layout,\n onLayoutChange,\n gridConfig: gridConfigProp,\n dragConfig: dragConfigProp,\n resizeConfig: resizeConfigProp,\n className,\n children,\n}: DashboardProps) {\n const { width, containerRef, mounted } = useContainerWidth();\n\n const gridConfig = { ...defaultGridConfig, ...gridConfigProp };\n const dragConfig = { ...defaultDragConfig, ...dragConfigProp };\n const resizeConfig = { ...defaultResizeConfig, ...resizeConfigProp };\n\n return (\n <div ref={containerRef} className={cn(\"w-full\", className)}>\n {mounted && (\n <ReactGridLayout\n layout={layout}\n width={width}\n gridConfig={{\n cols: gridConfig.cols,\n rowHeight: gridConfig.rowHeight,\n margin: gridConfig.margin,\n containerPadding: gridConfig.containerPadding,\n }}\n dragConfig={{\n enabled: dragConfig.enabled,\n handle: dragConfig.handle,\n cancel: dragConfig.cancel,\n }}\n resizeConfig={{\n enabled: resizeConfig.enabled,\n handles: resizeConfig.handles,\n }}\n onLayoutChange={onLayoutChange}\n >\n {children}\n </ReactGridLayout>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport type { DashboardDescriptor } from \"../../config/dashboard-widget\";\nimport { ConnectedWidget } from \"./ConnectedWidget\";\nimport { Dashboard, type Layout } from \"./Dashboard\";\n\nexport interface DashboardRendererProps {\n /** The dashboard descriptor to render */\n dashboard: DashboardDescriptor<any>;\n /** Optional controlled layout state */\n layout?: Layout;\n /** Callback when layout changes */\n onLayoutChange?: (layout: Layout) => void;\n /** Additional class name for the dashboard container */\n className?: string;\n}\n\n/**\n * Renders a complete dashboard from a DashboardDescriptor configuration.\n *\n * This component:\n * 1. Generates the layout from widget configurations\n * 2. Renders each widget as a ConnectedWidget (which handles data fetching)\n * 3. Manages layout state (controlled or uncontrolled)\n *\n * @example\n * ```tsx\n * import { analyticsDashboard } from \"./dashboards/analytics\";\n *\n * function AnalyticsPage() {\n * return (\n * <div className=\"p-4\">\n * <DashboardRenderer dashboard={analyticsDashboard} />\n * </div>\n * );\n * }\n * ```\n */\nexport function DashboardRenderer({\n dashboard,\n layout: controlledLayout,\n onLayoutChange,\n className,\n}: DashboardRendererProps) {\n const [internalLayout, setInternalLayout] = React.useState<Layout>(() =>\n generateDefaultLayout(dashboard),\n );\n\n const layout = controlledLayout ?? internalLayout;\n const handleLayoutChange = onLayoutChange ?? setInternalLayout;\n\n return (\n <Dashboard\n layout={layout}\n onLayoutChange={handleLayoutChange}\n gridConfig={dashboard.gridConfig}\n className={className}\n >\n {dashboard.widgets.map((widget) => (\n <div key={widget.id}>\n <ConnectedWidget widget={widget} />\n </div>\n ))}\n </Dashboard>\n );\n}\n\n/**\n * Generates the default layout from widget configurations.\n * Uses each widget's defaultLayout if specified, otherwise auto-positions.\n */\nfunction generateDefaultLayout(dashboard: DashboardDescriptor<any>): Layout {\n return dashboard.widgets.map((widget, index) => ({\n i: widget.id,\n x: widget.defaultLayout?.x ?? (index % 3) * 4,\n y: widget.defaultLayout?.y ?? Math.floor(index / 3) * 3,\n w: widget.defaultLayout?.w ?? 4,\n h: widget.defaultLayout?.h ?? 3,\n minW: widget.defaultLayout?.minW,\n minH: widget.defaultLayout?.minH,\n maxW: widget.defaultLayout?.maxW,\n maxH: widget.defaultLayout?.maxH,\n static: widget.defaultLayout?.static,\n }));\n}\n","import { textEditorClassname } from \"../styles\";\nimport type { RenderEditCellProps } from \"../types\";\n\nconst _textEditorInternalClassname = textEditorClassname;\n\nexport function autoFocusAndSelect(input: HTMLInputElement | null) {\n input?.focus();\n input?.select();\n}\n\nexport default function textEditor<TRow, TSummaryRow>({\n row,\n column,\n onRowChange,\n onClose,\n}: RenderEditCellProps<TRow, TSummaryRow>) {\n return (\n <input\n className={textEditorClassname}\n ref={autoFocusAndSelect}\n value={row[column.key as keyof TRow] as unknown as string}\n onChange={(event) =>\n onRowChange({ ...row, [column.key]: event.target.value })\n }\n onBlur={() => onClose(true, false)}\n />\n );\n}\n","import type { Key } from \"react\";\nimport { useCallback, useMemo } from \"react\";\nimport { SELECT_COLUMN_KEY } from \"./Columns\";\nimport { renderToggleGroup } from \"./cellRenderers\";\nimport type { DataGridProps } from \"./DataGrid\";\nimport { DataGrid } from \"./DataGrid\";\nimport { useDefaultRenderers } from \"./DataGridDefaultRenderersContext\";\nimport GroupedRow from \"./GroupRow\";\nimport { useLatestFunc } from \"./hooks/useLatestFunc\";\nimport { defaultRenderRow } from \"./Row\";\nimport type {\n CellClipboardEvent,\n CellCopyArgs,\n CellKeyboardEvent,\n CellKeyDownArgs,\n CellPasteArgs,\n Column,\n GroupRow,\n Maybe,\n Omit,\n RenderRowProps,\n RowHeightArgs,\n RowsChangeData,\n} from \"./types\";\nimport { assertIsValidKeyGetter, getLeftRightKey } from \"./utils\";\n\nexport interface TreeDataGridProps<R, SR = unknown, K extends Key = Key>\n extends Omit<\n DataGridProps<R, SR, K>,\n | \"columns\"\n | \"role\"\n | \"aria-rowcount\"\n | \"rowHeight\"\n | \"onFill\"\n | \"isRowSelectionDisabled\"\n > {\n columns: readonly Column<NoInfer<R>, NoInfer<SR>>[];\n rowHeight?: Maybe<number | ((args: RowHeightArgs<NoInfer<R>>) => number)>;\n groupBy: readonly string[];\n rowGrouper: (\n rows: readonly NoInfer<R>[],\n columnKey: string,\n ) => Record<string, readonly NoInfer<R>[]>;\n expandedGroupIds: ReadonlySet<unknown>;\n onExpandedGroupIdsChange: (expandedGroupIds: Set<unknown>) => void;\n groupIdGetter?: Maybe<(groupKey: string, parentId?: string) => string>;\n}\n\ntype GroupByDictionary<TRow> = Record<\n string,\n {\n readonly childRows: readonly TRow[];\n readonly childGroups: readonly TRow[] | Readonly<GroupByDictionary<TRow>>;\n readonly startRowIndex: number;\n }\n>;\n\nexport function TreeDataGrid<R, SR = unknown, K extends Key = Key>({\n columns: rawColumns,\n rows: rawRows,\n rowHeight: rawRowHeight,\n rowKeyGetter: rawRowKeyGetter,\n onCellKeyDown: rawOnCellKeyDown,\n onCellCopy: rawOnCellCopy,\n onCellPaste: rawOnCellPaste,\n onRowsChange,\n selectedRows: rawSelectedRows,\n onSelectedRowsChange: rawOnSelectedRowsChange,\n renderers,\n groupBy: rawGroupBy,\n rowGrouper,\n expandedGroupIds,\n onExpandedGroupIdsChange,\n groupIdGetter: rawGroupIdGetter,\n ...props\n}: TreeDataGridProps<R, SR, K>) {\n const defaultRenderers = useDefaultRenderers<R, SR>();\n const rawRenderRow =\n renderers?.renderRow ?? defaultRenderers?.renderRow ?? defaultRenderRow;\n const headerAndTopSummaryRowsCount = 1 + (props.topSummaryRows?.length ?? 0);\n const { leftKey, rightKey } = getLeftRightKey(props.direction);\n const toggleGroupLatest = useLatestFunc(toggleGroup);\n const groupIdGetter = rawGroupIdGetter ?? defaultGroupIdGetter;\n\n const { columns, groupBy } = useMemo(() => {\n const columns = [...rawColumns].sort(({ key: aKey }, { key: bKey }) => {\n // Sort select column first:\n if (aKey === SELECT_COLUMN_KEY) return -1;\n if (bKey === SELECT_COLUMN_KEY) return 1;\n\n // Sort grouped columns second, following the groupBy order:\n if (rawGroupBy.includes(aKey as string)) {\n if (rawGroupBy.includes(bKey as string)) {\n return (\n rawGroupBy.indexOf(aKey as string) -\n rawGroupBy.indexOf(bKey as string)\n );\n }\n return -1;\n }\n if (rawGroupBy.includes(bKey as string)) return 1;\n\n // Sort other columns last:\n return 0;\n });\n\n const groupBy: string[] = [];\n for (const [index, column] of columns.entries()) {\n if (rawGroupBy.includes(column.key)) {\n groupBy.push(column.key);\n columns[index] = {\n ...column,\n frozen: true,\n renderCell: () => null,\n renderGroupCell: column.renderGroupCell ?? renderToggleGroup,\n editable: false,\n };\n }\n }\n\n return { columns, groupBy };\n }, [rawColumns, rawGroupBy]);\n\n const [groupedRows, rowsCount] = useMemo(() => {\n if (groupBy.length === 0) return [undefined, rawRows.length];\n\n const groupRows = (\n rows: readonly R[],\n [groupByKey, ...remainingGroupByKeys]: readonly string[],\n startRowIndex: number,\n ): [Readonly<GroupByDictionary<R>>, number] => {\n let groupRowsCount = 0;\n const groups: GroupByDictionary<R> = {};\n for (const [key, childRows] of Object.entries(\n rowGrouper(rows, groupByKey ?? \"\"),\n )) {\n // Recursively group each parent group\n const [childGroups, childRowsCount] =\n remainingGroupByKeys.length === 0\n ? [childRows, childRows.length]\n : groupRows(\n childRows,\n remainingGroupByKeys,\n startRowIndex + groupRowsCount + 1,\n ); // 1 for parent row\n groups[key] = {\n childRows,\n childGroups,\n startRowIndex: startRowIndex + groupRowsCount,\n };\n groupRowsCount += childRowsCount + 1; // 1 for parent row\n }\n\n return [groups, groupRowsCount];\n };\n\n return groupRows(rawRows, groupBy, 0);\n }, [groupBy, rowGrouper, rawRows]);\n\n const [rows, isGroupRow] = useMemo((): [\n ReadonlyArray<R | GroupRow<R>>,\n (row: R | GroupRow<R>) => row is GroupRow<R>,\n ] => {\n const allGroupRows = new Set<unknown>();\n if (!groupedRows) return [rawRows, isGroupRow];\n\n const flattenedRows: Array<R | GroupRow<R>> = [];\n\n const expandGroup = (\n rows: GroupByDictionary<R> | readonly R[],\n parentId: string | undefined,\n level: number,\n ): void => {\n if (isReadonlyArray(rows)) {\n flattenedRows.push(...rows);\n return;\n }\n Object.keys(rows).forEach((groupKey, posInSet, keys) => {\n const id = groupIdGetter(groupKey, parentId);\n const isExpanded = expandedGroupIds.has(id);\n const groupData = rows[groupKey];\n if (!groupData) return;\n const { childRows, childGroups, startRowIndex } = groupData;\n\n const groupRow: GroupRow<R> = {\n id,\n parentId,\n groupKey,\n isExpanded,\n childRows,\n level,\n posInSet,\n startRowIndex,\n setSize: keys.length,\n };\n flattenedRows.push(groupRow);\n allGroupRows.add(groupRow);\n\n if (isExpanded) {\n expandGroup(childGroups, id, level + 1);\n }\n });\n };\n\n expandGroup(groupedRows, undefined, 0);\n return [flattenedRows, isGroupRow];\n\n function isGroupRow(row: R | GroupRow<R>): row is GroupRow<R> {\n return allGroupRows.has(row);\n }\n }, [expandedGroupIds, groupedRows, rawRows, groupIdGetter]);\n\n const rowHeight = useMemo(() => {\n if (typeof rawRowHeight === \"function\") {\n return (row: R | GroupRow<R>): number => {\n if (isGroupRow(row)) {\n return rawRowHeight({ type: \"GROUP\", row });\n }\n return rawRowHeight({ type: \"ROW\", row });\n };\n }\n\n return rawRowHeight;\n }, [isGroupRow, rawRowHeight]);\n\n const getParentRowAndIndex = useCallback(\n (row: R | GroupRow<R>) => {\n const rowIdx = rows.indexOf(row);\n for (let i = rowIdx - 1; i >= 0; i--) {\n const parentRow = rows[i];\n if (!parentRow) continue;\n if (\n isGroupRow(parentRow) &&\n (!isGroupRow(row) || row.parentId === parentRow.id)\n ) {\n return [parentRow, i] as const;\n }\n }\n\n return undefined;\n },\n [isGroupRow, rows],\n );\n\n const rowKeyGetter = useCallback(\n (row: R | GroupRow<R>) => {\n if (isGroupRow(row)) {\n return row.id;\n }\n\n if (typeof rawRowKeyGetter === \"function\") {\n return rawRowKeyGetter(row);\n }\n\n const parentRowAndIndex = getParentRowAndIndex(row);\n if (parentRowAndIndex !== undefined) {\n const { startRowIndex, childRows } = parentRowAndIndex[0];\n const groupIndex = childRows.indexOf(row);\n return startRowIndex + groupIndex + 1;\n }\n\n return rows.indexOf(row);\n },\n [getParentRowAndIndex, isGroupRow, rawRowKeyGetter, rows],\n );\n\n const selectedRows = useMemo((): Maybe<ReadonlySet<Key>> => {\n if (rawSelectedRows == null) return null;\n\n assertIsValidKeyGetter<R, K>(rawRowKeyGetter);\n\n const selectedRows = new Set<Key>(rawSelectedRows);\n for (const row of rows) {\n if (isGroupRow(row)) {\n // select parent row if all the children are selected\n const isGroupRowSelected = row.childRows.every((cr) =>\n rawSelectedRows.has(rawRowKeyGetter(cr)),\n );\n if (isGroupRowSelected) {\n selectedRows.add(row.id);\n }\n }\n }\n\n return selectedRows;\n }, [isGroupRow, rawRowKeyGetter, rawSelectedRows, rows]);\n\n function onSelectedRowsChange(newSelectedRows: Set<Key>) {\n if (!rawOnSelectedRowsChange) return;\n\n assertIsValidKeyGetter<R, K>(rawRowKeyGetter);\n\n const newRawSelectedRows = new Set(rawSelectedRows);\n for (const row of rows) {\n const key = rowKeyGetter(row);\n if (selectedRows?.has(key) && !newSelectedRows.has(key)) {\n if (isGroupRow(row)) {\n // select all children if the parent row is selected\n for (const cr of row.childRows) {\n newRawSelectedRows.delete(rawRowKeyGetter(cr));\n }\n } else {\n newRawSelectedRows.delete(key as K);\n }\n } else if (!selectedRows?.has(key) && newSelectedRows.has(key)) {\n if (isGroupRow(row)) {\n // unselect all children if the parent row is unselected\n for (const cr of row.childRows) {\n newRawSelectedRows.add(rawRowKeyGetter(cr));\n }\n } else {\n newRawSelectedRows.add(key as K);\n }\n }\n }\n\n rawOnSelectedRowsChange(newRawSelectedRows);\n }\n\n function handleKeyDown(\n args: CellKeyDownArgs<R, SR>,\n event: CellKeyboardEvent,\n ) {\n rawOnCellKeyDown?.(args, event);\n if (event.isGridDefaultPrevented()) return;\n\n if (args.mode === \"EDIT\") return;\n const { column, rowIdx, selectCell } = args;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const idx = column?.idx ?? -1;\n const row = rows[rowIdx];\n if (!row) return;\n\n if (!isGroupRow(row)) return;\n if (\n idx === -1 &&\n // Collapse the current group row if it is focused and is in expanded state\n ((event.key === leftKey && row.isExpanded) ||\n // Expand the current group row if it is focused and is in collapsed state\n (event.key === rightKey && !row.isExpanded))\n ) {\n // prevent scrolling\n event.preventDefault();\n event.preventGridDefault();\n toggleGroup(row.id);\n }\n\n // If a group row is focused, and it is collapsed, move to the parent group row (if there is one).\n if (\n idx === -1 &&\n event.key === leftKey &&\n !row.isExpanded &&\n row.level !== 0\n ) {\n const parentRowAndIndex = getParentRowAndIndex(row);\n if (parentRowAndIndex !== undefined) {\n event.preventGridDefault();\n selectCell({ idx, rowIdx: parentRowAndIndex[1] });\n }\n }\n }\n\n // Prevent copy/paste on group rows\n function handleCellCopy(\n { row, column }: CellCopyArgs<NoInfer<R>, NoInfer<SR>>,\n event: CellClipboardEvent,\n ) {\n if (!isGroupRow(row)) {\n rawOnCellCopy?.({ row, column }, event);\n }\n }\n\n function handleCellPaste(\n { row, column }: CellPasteArgs<NoInfer<R>, NoInfer<SR>>,\n event: CellClipboardEvent,\n ): NoInfer<R> {\n if (isGroupRow(row)) return row as NoInfer<R>;\n const result = rawOnCellPaste?.({ row, column }, event);\n return result as NoInfer<R>;\n }\n\n function handleRowsChange(\n updatedRows: R[],\n { indexes, column }: RowsChangeData<R, SR>,\n ) {\n if (!onRowsChange) return;\n const updatedRawRows = [...rawRows];\n const rawIndexes: number[] = [];\n for (const index of indexes) {\n const row = rows[index] as R;\n if (!row) continue;\n const rawIndex = rawRows.indexOf(row);\n const updatedRow = updatedRows[index];\n if (updatedRow && rawIndex !== -1) {\n updatedRawRows[rawIndex] = updatedRow;\n }\n rawIndexes.push(rawIndex);\n }\n onRowsChange(updatedRawRows, {\n indexes: rawIndexes,\n column,\n });\n }\n\n function toggleGroup(groupId: unknown) {\n const newExpandedGroupIds = new Set(expandedGroupIds);\n if (newExpandedGroupIds.has(groupId)) {\n newExpandedGroupIds.delete(groupId);\n } else {\n newExpandedGroupIds.add(groupId);\n }\n onExpandedGroupIdsChange(newExpandedGroupIds);\n }\n\n function renderRow(\n key: Key,\n {\n row,\n rowClass,\n onCellMouseDown,\n onCellClick,\n onCellDoubleClick,\n onCellContextMenu,\n onRowChange,\n lastFrozenColumnIndex,\n draggedOverCellIdx,\n selectedCellEditor,\n ...rowProps\n }: RenderRowProps<R, SR>,\n ) {\n if (isGroupRow(row)) {\n const { startRowIndex } = row;\n return (\n <GroupedRow\n key={key}\n {...rowProps}\n aria-rowindex={headerAndTopSummaryRowsCount + startRowIndex + 1}\n row={row}\n groupBy={groupBy}\n toggleGroup={toggleGroupLatest}\n />\n );\n }\n\n let ariaRowIndex = rowProps[\"aria-rowindex\"];\n const parentRowAndIndex = getParentRowAndIndex(row);\n if (parentRowAndIndex !== undefined) {\n const { startRowIndex, childRows } = parentRowAndIndex[0];\n const groupIndex = childRows.indexOf(row);\n ariaRowIndex =\n startRowIndex + headerAndTopSummaryRowsCount + groupIndex + 2;\n }\n\n return rawRenderRow(key, {\n ...rowProps,\n \"aria-rowindex\": ariaRowIndex,\n row,\n rowClass,\n onCellMouseDown,\n onCellClick,\n onCellDoubleClick,\n onCellContextMenu,\n onRowChange,\n lastFrozenColumnIndex,\n draggedOverCellIdx,\n selectedCellEditor,\n });\n }\n\n return (\n <DataGrid<R, SR>\n {...props}\n role=\"treegrid\"\n aria-rowcount={\n rowsCount +\n 1 +\n (props.topSummaryRows?.length ?? 0) +\n (props.bottomSummaryRows?.length ?? 0)\n }\n columns={columns}\n rows={rows as R[]} // TODO: check types\n rowHeight={rowHeight}\n rowKeyGetter={rowKeyGetter}\n onRowsChange={handleRowsChange}\n selectedRows={selectedRows}\n onSelectedRowsChange={onSelectedRowsChange}\n onCellKeyDown={handleKeyDown}\n onCellCopy={handleCellCopy}\n onCellPaste={rawOnCellPaste ? handleCellPaste : undefined}\n renderers={{\n ...renderers,\n renderRow,\n }}\n />\n );\n}\n\nfunction defaultGroupIdGetter(groupKey: string, parentId: string | undefined) {\n return parentId !== undefined ? `${parentId}__${groupKey}` : groupKey;\n}\n\nfunction isReadonlyArray(arr: unknown): arr is readonly unknown[] {\n return Array.isArray(arr);\n}\n","import clsx from \"clsx\";\nimport { memo, useMemo } from \"react\";\nimport { SELECT_COLUMN_KEY } from \"./Columns\";\nimport GroupCell from \"./GroupCell\";\nimport {\n RowSelectionContext,\n type RowSelectionContextValue,\n} from \"./hooks/useRowSelection\";\nimport {\n groupRowClassname,\n rowClassname,\n rowSelectedClassname,\n} from \"./styles\";\nimport type { BaseRenderRowProps, GroupRow } from \"./types\";\nimport { getRowStyle } from \"./utils\";\n\ninterface GroupRowRendererProps<R, SR> extends BaseRenderRowProps<R, SR> {\n row: GroupRow<R>;\n groupBy: readonly string[];\n toggleGroup: (expandedGroupId: unknown) => void;\n}\n\nfunction GroupedRow<R, SR>({\n className,\n row,\n rowIdx,\n viewportColumns,\n selectedCellIdx,\n isRowSelected,\n selectCell,\n gridRowStart,\n groupBy,\n toggleGroup,\n isRowSelectionDisabled,\n ...props\n}: GroupRowRendererProps<R, SR>) {\n // Select is always the first column\n const idx =\n viewportColumns[0]?.key === SELECT_COLUMN_KEY ? row.level + 1 : row.level;\n\n function handleSelectGroup() {\n selectCell({ rowIdx, idx: -1 }, { shouldFocusCell: true });\n }\n\n const selectionValue = useMemo(\n (): RowSelectionContextValue => ({\n isRowSelectionDisabled: false,\n isRowSelected,\n }),\n [isRowSelected],\n );\n\n return (\n <RowSelectionContext value={selectionValue}>\n <div\n role=\"row\"\n aria-level={row.level + 1} // aria-level is 1-based\n aria-setsize={row.setSize}\n aria-posinset={row.posInSet + 1} // aria-posinset is 1-based\n aria-expanded={row.isExpanded}\n className={clsx(\n rowClassname,\n groupRowClassname,\n `rdg-row-${rowIdx % 2 === 0 ? \"even\" : \"odd\"}`,\n selectedCellIdx === -1 && rowSelectedClassname,\n className,\n )}\n onMouseDown={handleSelectGroup}\n style={getRowStyle(gridRowStart)}\n {...props}\n >\n {viewportColumns.map((column) => (\n <GroupCell\n key={column.key}\n id={row.id}\n groupKey={row.groupKey}\n childRows={row.childRows}\n isExpanded={row.isExpanded}\n isCellSelected={selectedCellIdx === column.idx}\n column={column}\n row={row}\n groupColumnIndex={idx}\n toggleGroup={toggleGroup}\n isGroupByColumn={groupBy.includes(column.key)}\n />\n ))}\n </div>\n </RowSelectionContext>\n );\n}\n\nexport default memo(GroupedRow) as <R, SR>(\n props: GroupRowRendererProps<R, SR>,\n) => React.JSX.Element;\n","import { memo } from \"react\";\n\nimport { useRovingTabIndex } from \"./hooks/useRovingTabIndex\";\nimport type { CalculatedColumn, GroupRow } from \"./types\";\nimport { getCellClassname, getCellStyle } from \"./utils\";\n\ninterface GroupCellProps<R, SR> {\n id: string;\n groupKey: unknown;\n childRows: readonly R[];\n toggleGroup: (expandedGroupId: unknown) => void;\n isExpanded: boolean;\n column: CalculatedColumn<R, SR>;\n row: GroupRow<R>;\n isCellSelected: boolean;\n groupColumnIndex: number;\n isGroupByColumn: boolean;\n}\n\nfunction GroupCell<R, SR>({\n id,\n groupKey,\n childRows,\n isExpanded,\n isCellSelected,\n column,\n row,\n groupColumnIndex,\n isGroupByColumn,\n toggleGroup: toggleGroupWrapper,\n}: GroupCellProps<R, SR>) {\n const { tabIndex, childTabIndex, onFocus } =\n useRovingTabIndex(isCellSelected);\n\n function toggleGroup() {\n toggleGroupWrapper(id);\n }\n\n // Only make the cell clickable if the group level matches\n const isLevelMatching = isGroupByColumn && groupColumnIndex === column.idx;\n\n return (\n <div\n role=\"gridcell\"\n aria-colindex={column.idx + 1}\n aria-selected={isCellSelected}\n tabIndex={tabIndex}\n key={column.key}\n className={getCellClassname(column)}\n style={{\n ...getCellStyle(column),\n cursor: isLevelMatching ? \"pointer\" : \"default\",\n }}\n onMouseDown={(event) => {\n // prevents clicking on the cell from stealing focus from focusSink\n event.preventDefault();\n }}\n onClick={isLevelMatching ? toggleGroup : undefined}\n onFocus={onFocus}\n >\n {(!isGroupByColumn || isLevelMatching) &&\n column.renderGroupCell?.({\n groupKey,\n childRows,\n column,\n row,\n isExpanded,\n tabIndex: childTabIndex,\n toggleGroup,\n })}\n </div>\n );\n}\n\nexport default memo(GroupCell) as <R, SR>(\n props: GroupCellProps<R, SR>,\n) => React.JSX.Element;\n","import type { FC, ReactNode } from \"react\";\nimport { ActivityIndicator } from \"../activity-indicator/ActivityIndicator\";\n\nexport type DataStateProps = {\n /** Whether data is currently loading */\n isLoading?: boolean;\n /** Error that occurred during data fetching */\n error?: Error | null;\n /** Whether the data set is empty (after successful load) */\n isEmpty?: boolean;\n /** Message to display when data is empty */\n emptyMessage?: string;\n /** Aria label for the loading indicator */\n loadingLabel?: string;\n /** Message to display when there's an error */\n errorMessage?: string;\n /** Content to render when data is successfully loaded */\n children: ReactNode;\n};\n\n/**\n * A component that handles common data fetching states: loading, error, and empty.\n * Renders children only when data is successfully loaded and not empty.\n *\n * @example\n * ```tsx\n * <DataState\n * isLoading={isLoading}\n * error={error}\n * isEmpty={data.length === 0}\n * emptyMessage=\"No items found\"\n * loadingLabel=\"Loading search results...\"\n * >\n * <DataGrid data={data} />\n * </DataState>\n * ```\n */\nexport const DataState: FC<DataStateProps> = ({\n isLoading = false,\n error = null,\n isEmpty = false,\n emptyMessage = \"No items found\",\n loadingLabel = \"Loading...\",\n errorMessage = \"Error loading data\",\n children,\n}) => {\n if (isLoading) {\n return (\n <div className=\"flex justify-center items-center h-64\">\n <ActivityIndicator size=\"lg\" aria-label={loadingLabel} />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"flex justify-center items-center h-64 text-destructive\">\n {errorMessage}\n </div>\n );\n }\n\n if (isEmpty) {\n return (\n <div className=\"flex justify-center items-center h-64 text-muted-foreground\">\n {emptyMessage}\n </div>\n );\n }\n\n return <>{children}</>;\n};\n","import type React from \"react\";\nimport {\n createContext,\n useCallback,\n useContext,\n useRef,\n useState,\n} from \"react\";\nimport { HorizontalResizeHandle } from \"../resize-handle/HorizontalResizeHandle\";\nimport { useResize } from \"./useResize\";\n\n// Context to track Dock nesting\nconst DockContext = createContext<boolean>(false);\n\nexport interface DockProps {\n center: React.ReactNode;\n left?: React.ReactNode;\n right?: React.ReactNode;\n top?: React.ReactNode;\n defaultLeftWidth?: number;\n defaultRightWidth?: number;\n}\n\nexport const Dock: React.FC<DockProps> = ({\n center,\n left,\n right,\n top,\n defaultLeftWidth = 300,\n defaultRightWidth = 300,\n}) => {\n const [leftWidth, setLeftWidth] = useState(defaultLeftWidth);\n const [rightWidth, setRightWidth] = useState(defaultRightWidth);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Auto-detect if this Dock is nested inside another Dock\n const isNested = useContext(DockContext);\n\n const getLeftConstraints = useCallback(() => {\n if (containerRef.current) {\n const maxWidth =\n containerRef.current.offsetWidth - (right ? rightWidth : 0) - 100;\n return { min: 100, max: maxWidth };\n }\n return { min: 100, max: Number.POSITIVE_INFINITY };\n }, [rightWidth, right]);\n\n const getRightConstraints = useCallback(() => {\n if (containerRef.current) {\n const maxWidth =\n containerRef.current.offsetWidth - (left ? leftWidth : 0) - 100;\n return { min: 100, max: maxWidth };\n }\n return { min: 100, max: Number.POSITIVE_INFINITY };\n }, [leftWidth, left]);\n\n const handleLeftResize = useResize(\n setLeftWidth,\n () => leftWidth,\n getLeftConstraints,\n );\n const handleRightResize = useResize(\n setRightWidth,\n () => rightWidth,\n getRightConstraints,\n true,\n );\n\n return (\n <DockContext.Provider value={true}>\n <div\n ref={containerRef}\n className={`flex flex-col h-full w-full min-h-0 min-w-0 ${isNested ? \"h-auto w-auto\" : \"h-screen w-screen\"}`}\n >\n {top && <div className=\"bg-background shrink-0\">{top}</div>}\n <div className=\"flex flex-1 min-h-0 min-w-0\">\n {left && (\n <div\n className=\"flex flex-col relative bg-background border-r border-border\"\n style={{\n width: leftWidth,\n }}\n >\n <div className=\"flex-1 bg-background relative overflow-y-auto\">\n {left}\n </div>\n <HorizontalResizeHandle\n onMouseDown={handleLeftResize}\n align=\"right\"\n />\n </div>\n )}\n <div className=\"flex-1 flex flex-col relative min-h-0 min-w-0\">\n <div className=\"flex-1 bg-background relative min-h-0 overflow-y-auto\">\n {center}\n </div>\n </div>\n {right && (\n <div\n className=\"flex flex-col relative bg-background border-l border-border\"\n style={{\n width: rightWidth,\n }}\n >\n <div className=\"flex-1 bg-background relative overflow-y-auto\">\n {right}\n </div>\n <HorizontalResizeHandle\n onMouseDown={handleRightResize}\n align=\"left\"\n />\n </div>\n )}\n </div>\n </div>\n </DockContext.Provider>\n );\n};\n","import type React from \"react\";\nimport { useState } from \"react\";\nimport { cn } from \"../../styling/cn\";\n\ninterface HorizontalResizeHandleProps {\n onMouseDown: (e: React.MouseEvent) => void;\n align: \"left\" | \"right\";\n}\n\n// Constants for handle dimensions and positioning\nconst HANDLE_WIDTH = \"w-1.5\"; // 8px width\n\n/**\n * A resize handle that resizes hozintonally (even though the handle itself is vertical)\n */\nexport const HorizontalResizeHandle: React.FC<HorizontalResizeHandleProps> = ({\n onMouseDown,\n align,\n}) => {\n const [isHovering, setIsHovering] = useState(false);\n\n return (\n <button\n data-component=\"ResizeHandle\"\n type=\"button\"\n tabIndex={0}\n className={cn(\n // Base positioning and layout\n \"absolute top-0 bottom-0 z-10\",\n HANDLE_WIDTH,\n \"cursor-col-resize\",\n\n // Alignment based on prop\n align === \"left\" ? \"left-0\" : \"right-0\",\n\n // Animation and styling\n \"transition-all duration-200\",\n isHovering ? \"bg-border\" : \"bg-transparent\",\n \"hover:bg-border\",\n )}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => setIsHovering(false)}\n onMouseDown={onMouseDown}\n />\n );\n};\n","import { useCallback } from \"react\";\n\ntype GetConstraints = () => { min: number; max: number };\n\nexport const useResize = (\n onResize: (newSize: number) => void,\n getStartSize: () => number,\n getConstraints: GetConstraints,\n isReverse = false,\n isHorizontal = false,\n) => {\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n const startCoordinate = isHorizontal ? e.clientY : e.clientX;\n const startSize = getStartSize();\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const currentCoordinate = isHorizontal\n ? moveEvent.clientY\n : moveEvent.clientX;\n const delta = currentCoordinate - startCoordinate;\n const newSize = startSize + (isReverse ? -delta : delta);\n const { min, max } = getConstraints();\n onResize(Math.max(min, Math.min(newSize, max)));\n };\n\n const handleMouseUp = () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n },\n [onResize, getStartSize, getConstraints, isReverse, isHorizontal],\n );\n\n return handleMouseDown;\n};\n","import type React from \"react\";\nimport { forwardRef } from \"react\";\nimport type { ActionOrSeparator } from \"../../actions/types\";\nimport { useActionExecutor } from \"../../actions/useActionExecutor\";\nimport { groupActionsBySeparators } from \"../../actions/utils\";\nimport { cn } from \"../../styling/cn\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./DropdownMenu\";\n\nexport interface ActionDropdownMenuProps {\n trigger: React.ReactNode;\n actions: ActionOrSeparator[];\n className?: string;\n contentClassName?: string;\n /**\n * Side offset for the dropdown menu content.\n * @default 4\n */\n sideOffset?: number;\n /**\n * Whether the menu should close when an action is executed.\n * @default true\n */\n closeOnAction?: boolean;\n}\n\n/**\n * A dropdown menu component that takes standardized actions and renders them as menu items.\n * Supports both command and handler actions, with automatic action execution.\n * Actions can be grouped using \"separator\" entries.\n */\nconst ActionDropdownMenu = forwardRef<\n React.ElementRef<typeof DropdownMenu>,\n ActionDropdownMenuProps\n>(\n (\n {\n trigger,\n actions,\n className,\n contentClassName,\n sideOffset = 4,\n closeOnAction = true,\n ...props\n },\n _ref,\n ) => {\n const { executeAction } = useActionExecutor();\n\n // Group actions by separators\n const actionGroups = groupActionsBySeparators(actions);\n\n const handleActionClick = async (action: ActionOrSeparator) => {\n if (action === \"separator\") return;\n await executeAction(action);\n };\n\n return (\n <DropdownMenu {...props}>\n <DropdownMenuTrigger asChild className={className}>\n {trigger}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n className={cn(contentClassName)}\n sideOffset={sideOffset}\n >\n {actionGroups.map((group, groupIndex) => (\n <div key={groupIndex}>\n {groupIndex > 0 && <DropdownMenuSeparator />}\n {group.map((action) => {\n const {\n icon: IconComponent,\n label,\n disabled,\n id,\n variant,\n } = action;\n\n return (\n <DropdownMenuItem\n key={id}\n disabled={disabled}\n variant={\n variant === \"destructive\" ? \"destructive\" : \"default\"\n }\n onClick={() => handleActionClick(action)}\n >\n {IconComponent && <IconComponent size={16} />}\n {label || id}\n </DropdownMenuItem>\n );\n })}\n </div>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n },\n);\n\nActionDropdownMenu.displayName = \"ActionDropdownMenu\";\n\nexport { ActionDropdownMenu };\n","import { Moon, Sun } from \"lucide-react\";\nimport { Button } from \"../buttons/Button/Button\";\nimport { useNubaseContext } from \"../nubase-app/NubaseContextProvider\";\n\nexport interface ThemeToggleProps {\n className?: string;\n defaultTheme: \"light\" | \"dark\";\n}\n\nexport const ThemeToggle = ({ className }: ThemeToggleProps) => {\n const context = useNubaseContext();\n\n const toggleTheme = () => {\n context.commands.execute(\"workbench.setTheme\");\n };\n\n return (\n <Button\n variant=\"secondary\"\n onClick={toggleTheme}\n className={className}\n aria-label={`Switch to ${context.theming.activeThemeId === \"light\" ? \"dark\" : \"light\"} mode`}\n >\n {context.theming.activeThemeId === \"light\" ? (\n <Moon size={16} />\n ) : (\n <Sun size={16} />\n )}\n </Button>\n );\n};\n","import { DialogTitle } from \"@headlessui/react\";\nimport type { FC, ReactNode } from \"react\";\nimport { Button } from \"../../buttons/Button/Button\";\nimport { ButtonBar } from \"../../buttons/ButtonBar/ButtonBar\";\nimport { Modal } from \"../modal/Modal\";\nimport { ModalFrameStructured } from \"../modal/ModalFrameStructured\";\nimport type { ModalAlignment } from \"../modal/types\";\n\nexport type DialogProps = {\n open: boolean;\n onClose: () => void;\n onConfirm?: () => void;\n title?: string;\n children: ReactNode;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n className?: string;\n alignment?: ModalAlignment;\n confirmText?: string;\n cancelText?: string;\n confirmVariant?: \"default\" | \"destructive\";\n showBackdrop?: boolean;\n zIndex?: number;\n};\n\nexport const Dialog: FC<DialogProps> = ({\n open,\n onClose,\n onConfirm,\n title,\n children,\n size = \"md\",\n className = \"\",\n alignment = \"center\",\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n confirmVariant = \"default\",\n showBackdrop = true,\n zIndex,\n}) => {\n const handleConfirm = () => {\n onConfirm?.();\n onClose();\n };\n\n const header = title ? (\n <DialogTitle className=\"text-lg font-semibold text-foreground\">\n {title}\n </DialogTitle>\n ) : undefined;\n\n const footer = onConfirm ? (\n <ButtonBar className=\"p-4\">\n <Button variant=\"secondary\" onClick={onClose}>\n {cancelText}\n </Button>\n <Button variant={confirmVariant} onClick={handleConfirm}>\n {confirmText}\n </Button>\n </ButtonBar>\n ) : undefined;\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n content={\n <ModalFrameStructured\n header={header}\n body={children}\n footer={footer}\n className={className}\n />\n }\n size={size}\n alignment={alignment}\n showBackdrop={showBackdrop}\n zIndex={zIndex}\n />\n );\n};\n","import { DialogTitle } from \"@headlessui/react\";\nimport { type ReactNode, useCallback, useRef } from \"react\";\nimport { Button } from \"../../buttons/Button/Button\";\nimport { ButtonBar } from \"../../buttons/ButtonBar/ButtonBar\";\nimport { ModalFrameStructured } from \"../modal/ModalFrameStructured\";\nimport type { ModalAlignment } from \"../modal/types\";\nimport { useModal } from \"../modal/useModal\";\n\ntype DialogConfig = {\n title?: string;\n content: ReactNode;\n onConfirm?: () => void;\n onCancel?: () => void;\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n className?: string;\n alignment?: ModalAlignment;\n confirmText?: string;\n cancelText?: string;\n confirmVariant?: \"default\" | \"destructive\";\n showBackdrop?: boolean;\n zIndex?: number;\n};\n\nexport type UseDialogResult = {\n openDialog: (config: DialogConfig) => void;\n hide: () => void;\n isOpen: boolean;\n DialogComponent: null;\n};\n\nexport const useDialog = (): UseDialogResult => {\n const { openModal, closeModal } = useModal();\n const modalIdRef = useRef<string | null>(null);\n const dialogApiRef = useRef<UseDialogResult | null>(null);\n\n const openDialog = useCallback(\n (dialogConfig: DialogConfig) => {\n const {\n title,\n content,\n onConfirm,\n onCancel,\n size = \"md\",\n className = \"\",\n alignment = \"center\",\n confirmText = \"Confirm\",\n cancelText = \"Cancel\",\n confirmVariant = \"default\",\n showBackdrop = true,\n zIndex,\n } = dialogConfig;\n\n const handleClose = () => {\n if (modalIdRef.current) {\n closeModal(modalIdRef.current);\n modalIdRef.current = null;\n }\n };\n\n const handleConfirm = () => {\n onConfirm?.();\n handleClose();\n };\n\n const handleCancel = () => {\n onCancel?.();\n handleClose();\n };\n\n const header = title ? (\n <DialogTitle className=\"text-lg font-semibold text-foreground\">\n {title}\n </DialogTitle>\n ) : undefined;\n\n const footer = onConfirm ? (\n <ButtonBar className=\"p-4\">\n <Button variant=\"secondary\" onClick={handleCancel}>\n {cancelText}\n </Button>\n <Button variant={confirmVariant} onClick={handleConfirm}>\n {confirmText}\n </Button>\n </ButtonBar>\n ) : undefined;\n\n modalIdRef.current = openModal({\n content: (\n <ModalFrameStructured\n header={header}\n body={content}\n footer={footer}\n className={className}\n />\n ),\n size,\n alignment,\n showBackdrop,\n zIndex,\n });\n },\n [openModal, closeModal],\n );\n\n const hide = useCallback(() => {\n if (modalIdRef.current) {\n closeModal(modalIdRef.current);\n modalIdRef.current = null;\n }\n }, [closeModal]);\n\n if (!dialogApiRef.current) {\n dialogApiRef.current = {\n openDialog,\n hide,\n isOpen: false,\n DialogComponent: null,\n };\n } else {\n dialogApiRef.current.openDialog = openDialog;\n dialogApiRef.current.hide = hide;\n dialogApiRef.current.isOpen = modalIdRef.current !== null;\n }\n\n return dialogApiRef.current;\n};\n","import type { SelectionRange, TextState } from \"./types\";\n\nexport function getSurroundingWord(\n text: string,\n position: number,\n): SelectionRange {\n if (!text) throw Error(\"Argument 'text' should be truthy\");\n\n const isWordDelimiter = (c: string | undefined) =>\n c === \" \" || c?.charCodeAt(0) === 10;\n\n let start = 0;\n let end = text.length;\n\n for (let i = position; i - 1 > -1; i--) {\n if (isWordDelimiter(text[i - 1])) {\n start = i;\n break;\n }\n }\n\n for (let i = position; i < text.length; i++) {\n if (isWordDelimiter(text[i])) {\n end = i;\n break;\n }\n }\n\n return { start, end };\n}\n\nexport function selectWord({ text, selection }: TextState): SelectionRange {\n if (text?.length && selection.start === selection.end) {\n return getSurroundingWord(text, selection.start);\n }\n return selection;\n}\n\nexport function getSelectedText(textState: TextState): string {\n return textState.text.slice(\n textState.selection.start,\n textState.selection.end,\n );\n}\n\nexport function getCharactersBeforeSelection(\n textState: TextState,\n characters: number,\n): string {\n return textState.text.slice(\n textState.selection.start - characters,\n textState.selection.start,\n );\n}\n\nexport function getCharactersAfterSelection(\n textState: TextState,\n characters: number,\n): string {\n return textState.text.slice(\n textState.selection.end,\n textState.selection.end + characters,\n );\n}\n\nexport function getBreaksNeededForEmptyLineBefore(\n text = \"\",\n startPosition: number,\n): number {\n if (startPosition === 0) return 0;\n\n let neededBreaks = 2;\n let isInFirstLine = true;\n for (let i = startPosition - 1; i >= 0 && neededBreaks >= 0; i--) {\n switch (text.charCodeAt(i)) {\n case 32:\n continue;\n case 10:\n neededBreaks--;\n isInFirstLine = false;\n break;\n default:\n return neededBreaks;\n }\n }\n return isInFirstLine ? 0 : neededBreaks;\n}\n\nexport function getBreaksNeededForEmptyLineAfter(\n text = \"\",\n startPosition: number,\n) {\n if (startPosition === text.length - 1) return 0;\n\n let neededBreaks = 2;\n let isInLastLine = true;\n for (let i = startPosition; i < text.length && neededBreaks >= 0; i++) {\n switch (text.charCodeAt(i)) {\n case 32:\n continue;\n case 10: {\n neededBreaks--;\n isInLastLine = false;\n break;\n }\n default:\n return neededBreaks;\n }\n }\n return isInLastLine ? 0 : neededBreaks;\n}\n\ntype AlterLineFunction = (line: string, index: number) => string;\n\nexport function insertBeforeEachLine(\n selectedText: string,\n insertBefore: string | AlterLineFunction,\n): { modifiedText: string; insertionLength: number } {\n const lines = selectedText.split(/\\n/);\n\n let insertionLength = 0;\n const modifiedText = lines\n .map((item, index) => {\n if (typeof insertBefore === \"string\") {\n insertionLength += insertBefore.length;\n return insertBefore + item;\n } else if (typeof insertBefore === \"function\") {\n const insertionResult = insertBefore(item, index);\n insertionLength += insertionResult.length;\n return insertBefore(item, index) + item;\n }\n throw Error(\"insertion is expected to be either a string or a function\");\n })\n .join(\"\\n\");\n\n return { modifiedText, insertionLength };\n}\n","import {\n getBreaksNeededForEmptyLineAfter,\n getBreaksNeededForEmptyLineBefore,\n getCharactersAfterSelection,\n getCharactersBeforeSelection,\n getSelectedText,\n insertBeforeEachLine,\n selectWord,\n} from \"./text-helpers\";\nimport type { MarkdownCommand } from \"./types\";\n\nexport const boldCommand: MarkdownCommand = {\n shouldUndo: (options) => {\n return (\n getCharactersBeforeSelection(options.initialState, 2) === \"**\" &&\n getCharactersAfterSelection(options.initialState, 2) === \"**\"\n );\n },\n execute: ({ initialState, textApi }) => {\n const newSelectionRange = selectWord({\n text: initialState.text,\n selection: initialState.selection,\n });\n const state1 = textApi.setSelectionRange(newSelectionRange);\n const state2 = textApi.replaceSelection(`**${getSelectedText(state1)}**`);\n textApi.setSelectionRange({\n start: state2.selection.end - 2 - getSelectedText(state1).length,\n end: state2.selection.end - 2,\n });\n },\n undo: ({ initialState, textApi }) => {\n const text = getSelectedText(initialState);\n textApi.setSelectionRange({\n start: initialState.selection.start - 2,\n end: initialState.selection.end + 2,\n });\n textApi.replaceSelection(text);\n textApi.setSelectionRange({\n start: initialState.selection.start - 2,\n end: initialState.selection.end - 2,\n });\n },\n};\n\nexport const italicCommand: MarkdownCommand = {\n shouldUndo: (options) => {\n return (\n getCharactersBeforeSelection(options.initialState, 1) === \"_\" &&\n getCharactersAfterSelection(options.initialState, 1) === \"_\"\n );\n },\n execute: ({ initialState, textApi }) => {\n const newSelectionRange = selectWord({\n text: initialState.text,\n selection: initialState.selection,\n });\n const state1 = textApi.setSelectionRange(newSelectionRange);\n const state2 = textApi.replaceSelection(`_${getSelectedText(state1)}_`);\n textApi.setSelectionRange({\n start: state2.selection.end - 1 - getSelectedText(state1).length,\n end: state2.selection.end - 1,\n });\n },\n undo: ({ initialState, textApi }) => {\n const text = getSelectedText(initialState);\n textApi.setSelectionRange({\n start: initialState.selection.start - 1,\n end: initialState.selection.end + 1,\n });\n textApi.replaceSelection(text);\n textApi.setSelectionRange({\n start: initialState.selection.start - 1,\n end: initialState.selection.end - 1,\n });\n },\n};\n\nexport const strikethroughCommand: MarkdownCommand = {\n shouldUndo: (options) => {\n return (\n getCharactersBeforeSelection(options.initialState, 2) === \"~~\" &&\n getCharactersAfterSelection(options.initialState, 2) === \"~~\"\n );\n },\n execute: ({ initialState, textApi }) => {\n const newSelectionRange = selectWord({\n text: initialState.text,\n selection: initialState.selection,\n });\n const state1 = textApi.setSelectionRange(newSelectionRange);\n const state2 = textApi.replaceSelection(`~~${getSelectedText(state1)}~~`);\n textApi.setSelectionRange({\n start: state2.selection.end - 2 - getSelectedText(state1).length,\n end: state2.selection.end - 2,\n });\n },\n undo: ({ initialState, textApi }) => {\n const text = getSelectedText(initialState);\n textApi.setSelectionRange({\n start: initialState.selection.start - 2,\n end: initialState.selection.end + 2,\n });\n textApi.replaceSelection(text);\n textApi.setSelectionRange({\n start: initialState.selection.start - 2,\n end: initialState.selection.end - 2,\n });\n },\n};\n\nexport const codeCommand: MarkdownCommand = {\n shouldUndo: (options) => {\n return (\n getCharactersBeforeSelection(options.initialState, 1) === \"`\" &&\n getCharactersAfterSelection(options.initialState, 1) === \"`\"\n );\n },\n execute: ({ initialState, textApi }) => {\n const newSelectionRange = selectWord({\n text: initialState.text,\n selection: initialState.selection,\n });\n const state1 = textApi.setSelectionRange(newSelectionRange);\n const state2 = textApi.replaceSelection(`\\`${getSelectedText(state1)}\\``);\n textApi.setSelectionRange({\n start: state2.selection.end - 1 - getSelectedText(state1).length,\n end: state2.selection.end - 1,\n });\n },\n undo: ({ initialState, textApi }) => {\n const text = getSelectedText(initialState);\n textApi.setSelectionRange({\n start: initialState.selection.start - 1,\n end: initialState.selection.end + 1,\n });\n textApi.replaceSelection(text);\n textApi.setSelectionRange({\n start: initialState.selection.start - 1,\n end: initialState.selection.end - 1,\n });\n },\n};\n\nexport const headingCommand = (level: number): MarkdownCommand => ({\n execute: ({ initialState, textApi }) => {\n const prefix = `${\"#\".repeat(level)} `;\n const _selectedText = getSelectedText(initialState);\n const textBeforeSelection = initialState.text.slice(\n 0,\n initialState.selection.start,\n );\n const lineStart = Math.max(0, textBeforeSelection.lastIndexOf(\"\\n\") + 1);\n const lineEnd = initialState.text.indexOf(\"\\n\", initialState.selection.end);\n const line = initialState.text.slice(\n lineStart,\n lineEnd === -1 ? undefined : lineEnd,\n );\n\n const currentPrefix = line.match(/^#+\\s/)?.[0] || \"\";\n\n if (currentPrefix === prefix) {\n textApi.setSelectionRange({\n start: lineStart,\n end: lineStart + currentPrefix.length,\n });\n textApi.replaceSelection(\"\");\n textApi.setSelectionRange({\n start: initialState.selection.start - currentPrefix.length,\n end: initialState.selection.end - currentPrefix.length,\n });\n } else if (currentPrefix) {\n textApi.setSelectionRange({\n start: lineStart,\n end: lineStart + currentPrefix.length,\n });\n textApi.replaceSelection(prefix);\n const lengthDiff = prefix.length - currentPrefix.length;\n textApi.setSelectionRange({\n start: initialState.selection.start + lengthDiff,\n end: initialState.selection.end + lengthDiff,\n });\n } else {\n textApi.setSelectionRange({ start: lineStart, end: lineStart });\n textApi.replaceSelection(prefix);\n textApi.setSelectionRange({\n start: initialState.selection.start + prefix.length,\n end: initialState.selection.end + prefix.length,\n });\n }\n },\n});\n\nexport const linkCommand: MarkdownCommand = {\n execute: ({ initialState, textApi }) => {\n const selectedText = getSelectedText(initialState);\n const text = selectedText || \"link text\";\n const state = textApi.replaceSelection(`[${text}](url)`);\n textApi.setSelectionRange({\n start: state.selection.start - 4,\n end: state.selection.start - 1,\n });\n },\n};\n\nexport const imageCommand: MarkdownCommand = {\n execute: ({ initialState, textApi }) => {\n const selectedText = getSelectedText(initialState);\n const altText = selectedText || \"alt text\";\n const state = textApi.replaceSelection(``);\n textApi.setSelectionRange({\n start: state.selection.start - 4,\n end: state.selection.start - 1,\n });\n },\n};\n\nexport const quoteCommand: MarkdownCommand = {\n execute: ({ initialState, textApi }) => {\n const { modifiedText } = insertBeforeEachLine(\n getSelectedText(initialState),\n \"> \",\n );\n\n const state = textApi.replaceSelection(modifiedText);\n textApi.setSelectionRange({\n start: initialState.selection.start + 2,\n end: state.selection.end,\n });\n },\n};\n\nexport const codeBlockCommand: MarkdownCommand = {\n execute: ({ initialState, textApi }) => {\n const selectedText = getSelectedText(initialState);\n const breaksBeforeCount = getBreaksNeededForEmptyLineBefore(\n initialState.text,\n initialState.selection.start,\n );\n const breaksBefore = Array(breaksBeforeCount + 1).join(\"\\n\");\n\n const breaksAfterCount = getBreaksNeededForEmptyLineAfter(\n initialState.text,\n initialState.selection.end,\n );\n const breaksAfter = Array(breaksAfterCount + 1).join(\"\\n\");\n\n const _state = textApi.replaceSelection(\n `${breaksBefore}\\`\\`\\`\\n${selectedText}\\n\\`\\`\\`${breaksAfter}`,\n );\n\n textApi.setSelectionRange({\n start: initialState.selection.start + breaksBeforeCount + 4,\n end:\n initialState.selection.start +\n breaksBeforeCount +\n 4 +\n selectedText.length,\n });\n },\n};\n\nexport const unorderedListCommand: MarkdownCommand = {\n execute: ({ initialState, textApi }) => {\n const { modifiedText } = insertBeforeEachLine(\n getSelectedText(initialState),\n \"- \",\n );\n\n const state = textApi.replaceSelection(modifiedText);\n textApi.setSelectionRange({\n start: initialState.selection.start + 2,\n end: state.selection.end,\n });\n },\n};\n\nexport const orderedListCommand: MarkdownCommand = {\n execute: ({ initialState, textApi }) => {\n const { modifiedText } = insertBeforeEachLine(\n getSelectedText(initialState),\n (_line, index) => `${index + 1}. `,\n );\n\n const state = textApi.replaceSelection(modifiedText);\n textApi.setSelectionRange({\n start: initialState.selection.start + 3,\n end: state.selection.end,\n });\n },\n};\n\nexport const checkListCommand: MarkdownCommand = {\n execute: ({ initialState, textApi }) => {\n const { modifiedText } = insertBeforeEachLine(\n getSelectedText(initialState),\n \"- [ ] \",\n );\n\n const state = textApi.replaceSelection(modifiedText);\n textApi.setSelectionRange({\n start: initialState.selection.start + 6,\n end: state.selection.end,\n });\n },\n};\n","import type React from \"react\";\nimport { forwardRef, useImperativeHandle, useRef } from \"react\";\nimport { cn } from \"../../styling/cn\";\nimport { TextAreaTextController } from \"./text-controller\";\nimport type { MarkdownCommand, TextController } from \"./types\";\n\nexport interface MarkdownTextAreaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n className?: string;\n}\n\nexport interface MarkdownTextAreaHandle {\n executeCommand: (command: MarkdownCommand) => void;\n getTextController: () => TextController;\n}\n\nexport const MarkdownTextArea = forwardRef<\n MarkdownTextAreaHandle,\n MarkdownTextAreaProps\n>(({ className, ...props }, ref) => {\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const textControllerRef = useRef<TextController | undefined>(undefined);\n\n const getTextController = () => {\n if (!textControllerRef.current) {\n textControllerRef.current = new TextAreaTextController(\n textAreaRef as React.RefObject<HTMLTextAreaElement>,\n );\n }\n return textControllerRef.current;\n };\n\n const executeCommand = (command: MarkdownCommand) => {\n const textController = getTextController();\n const initialState = textController.getState();\n\n if (command.shouldUndo?.({ initialState }) && command.undo) {\n command.undo({ initialState, textApi: textController });\n } else {\n command.execute({ initialState, textApi: textController });\n }\n };\n\n useImperativeHandle(ref, () => ({\n executeCommand,\n getTextController,\n }));\n\n return (\n <textarea\n ref={textAreaRef}\n className={cn(\n \"w-full min-h-[200px] px-3 py-2\",\n \"bg-background text-foreground\",\n \"border border-border rounded-md\",\n \"resize-vertical\",\n \"focus:outline-none focus:ring-2 focus:ring-ring/20 focus:border-primary\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n \"placeholder:text-muted-foreground\",\n \"font-mono text-sm\",\n className,\n )}\n {...props}\n />\n );\n});\n\nMarkdownTextArea.displayName = \"MarkdownTextArea\";\n","import type { RefObject } from \"react\";\nimport type { SelectionRange, TextController, TextState } from \"./types\";\n\nexport class TextAreaTextController implements TextController {\n textAreaRef: RefObject<HTMLTextAreaElement>;\n\n constructor(textAreaRef: RefObject<HTMLTextAreaElement>) {\n this.textAreaRef = textAreaRef;\n }\n\n replaceSelection(text: string): TextState {\n const textArea = this.textAreaRef.current;\n if (!textArea) {\n throw new Error(\"TextAreaRef is not set\");\n }\n insertText(textArea, text);\n return getStateFromTextArea(textArea);\n }\n\n setSelectionRange(selection: SelectionRange): TextState {\n const textArea = this.textAreaRef.current;\n if (!textArea) {\n throw new Error(\"TextAreaRef is not set\");\n }\n textArea.focus();\n textArea.selectionStart = selection.start;\n textArea.selectionEnd = selection.end;\n return getStateFromTextArea(textArea);\n }\n\n getState(): TextState {\n const textArea = this.textAreaRef.current;\n if (!textArea) {\n throw new Error(\"TextAreaRef is not set\");\n }\n return getStateFromTextArea(textArea);\n }\n}\n\nexport function getStateFromTextArea(textArea: HTMLTextAreaElement): TextState {\n return {\n selection: {\n start: textArea.selectionStart,\n end: textArea.selectionEnd,\n },\n text: textArea.value,\n };\n}\n\nexport function insertText(\n input: HTMLTextAreaElement | HTMLInputElement,\n text: string,\n) {\n input.focus();\n\n if ((document as any).selection) {\n const ieRange = (document as any).selection.createRange();\n ieRange.text = text;\n ieRange.collapse(false);\n ieRange.select();\n return;\n }\n\n const isSuccess = document.execCommand(\"insertText\", false, text);\n if (!isSuccess) {\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (typeof (input as any).setRangeText === \"function\") {\n (input as any).setRangeText(text);\n } else {\n if (canManipulateViaTextNodes(input)) {\n const textNode = document.createTextNode(text);\n let node = input.firstChild;\n\n if (!node) {\n input.appendChild(textNode);\n } else {\n let offset = 0;\n let startNode = null;\n let endNode = null;\n\n const range = document.createRange();\n\n while (node && (startNode === null || endNode === null)) {\n const nodeLength = node.nodeValue?.length || 0;\n\n if (start >= offset && start <= offset + nodeLength) {\n startNode = node;\n range.setStart(startNode, start - offset);\n }\n\n if (end >= offset && end <= offset + nodeLength) {\n endNode = node;\n range.setEnd(endNode, end - offset);\n }\n\n offset += nodeLength;\n node = node.nextSibling;\n }\n\n if (start !== end) {\n range.deleteContents();\n }\n\n range.insertNode(textNode);\n }\n } else {\n const value = input.value;\n input.value = value.slice(0, start) + text + value.slice(end);\n }\n }\n\n input.setSelectionRange(start + text.length, start + text.length);\n\n const e = document.createEvent(\"UIEvent\");\n e.initEvent(\"input\", true, false);\n input.dispatchEvent(e);\n }\n}\n\nfunction canManipulateViaTextNodes(\n input: HTMLTextAreaElement | HTMLInputElement,\n) {\n if (input.nodeName !== \"TEXTAREA\") {\n return false;\n }\n let browserSupportsTextareaTextNodes: boolean | undefined;\n if (typeof browserSupportsTextareaTextNodes === \"undefined\") {\n const textarea = document.createElement(\"textarea\");\n textarea.value = \"1\";\n browserSupportsTextareaTextNodes = !!textarea.firstChild;\n }\n return browserSupportsTextareaTextNodes;\n}\n","import { ChevronRightIcon, MoreHorizontalIcon } from \"lucide-react\";\nimport type React from \"react\";\n\nexport type BreadcrumbProps = React.ComponentProps<\"nav\">;\n\nfunction Breadcrumb({ ...props }: BreadcrumbProps) {\n return <nav data-component=\"Breadcrumb\" aria-label=\"breadcrumb\" {...props} />;\n}\n\nexport type BreadcrumbListProps = React.ComponentProps<\"ol\">;\n\nfunction BreadcrumbList({ className, ...props }: BreadcrumbListProps) {\n return (\n <ol\n data-component=\"BreadcrumbList\"\n className={`text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5 ${className || \"\"}`}\n {...props}\n />\n );\n}\n\nexport type BreadcrumbItemProps = React.ComponentProps<\"li\">;\n\nfunction BreadcrumbItem({ className, ...props }: BreadcrumbItemProps) {\n return (\n <li\n className={`inline-flex items-center gap-1.5 ${className || \"\"}`}\n {...props}\n />\n );\n}\n\nexport type BreadcrumbLinkProps = React.ComponentProps<\"a\">;\n\nfunction BreadcrumbLink({ className, ...props }: BreadcrumbLinkProps) {\n return (\n <a\n className={`hover:text-foreground transition-colors ${className || \"\"}`}\n {...props}\n />\n );\n}\n\nexport type BreadcrumbPageProps = React.ComponentProps<\"span\">;\n\nfunction BreadcrumbPage({ className, ...props }: BreadcrumbPageProps) {\n return (\n <span\n aria-current=\"page\"\n className={`text-foreground font-normal ${className || \"\"}`}\n {...props}\n />\n );\n}\n\nexport type BreadcrumbSeparatorProps = React.ComponentProps<\"li\"> & {\n children?: React.ReactNode;\n};\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: BreadcrumbSeparatorProps) {\n return (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={`[&>svg]:size-3.5 ${className || \"\"}`}\n {...props}\n >\n {children ?? <ChevronRightIcon />}\n </li>\n );\n}\n\nexport type BreadcrumbEllipsisProps = React.ComponentProps<\"span\">;\n\nfunction BreadcrumbEllipsis({ className, ...props }: BreadcrumbEllipsisProps) {\n return (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={`flex size-9 items-center justify-center ${className || \"\"}`}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","import { useNavigate } from \"@tanstack/react-router\";\nimport { type FC, Fragment } from \"react\";\nimport type { BreadcrumbItem } from \"../../../config/breadcrumb\";\nimport {\n isResourceLink,\n resolveResourceLink,\n} from \"../../../config/resource-link\";\nimport { useWorkspaceOptional } from \"../../../context/WorkspaceContext\";\nimport {\n Breadcrumb,\n BreadcrumbItem as BreadcrumbItemComponent,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"./Breadcrumb\";\n\nexport type BreadcrumbBarProps = {\n items: BreadcrumbItem[];\n className?: string;\n};\n\n/**\n * Transforms a path to be workspace-aware by prepending the workspace slug.\n * Handles paths like /r/ticket/search -> /$workspace/r/ticket/search\n * and /v/some-view -> /$workspace/v/some-view\n */\nfunction makeWorkspaceAwarePath(\n path: string,\n workspaceSlug: string | undefined,\n): string {\n if (!workspaceSlug) return path;\n\n // Check if path starts with /r/ (resource) or /v/ (view) patterns\n if (path.startsWith(\"/r/\") || path.startsWith(\"/v/\")) {\n return `/${workspaceSlug}${path}`;\n }\n\n return path;\n}\n\nexport const BreadcrumbBar: FC<BreadcrumbBarProps> = ({ items, className }) => {\n const navigate = useNavigate();\n const workspace = useWorkspaceOptional();\n\n if (items.length === 0) {\n return null;\n }\n\n const handleNavigation = (item: BreadcrumbItem) => {\n if (typeof item === \"string\") return;\n\n if (item.to) {\n // Handle ResourceLink objects\n if (isResourceLink(item.to)) {\n const resolvedPath = resolveResourceLink(item.to, workspace?.slug);\n navigate({\n to: resolvedPath,\n params: item.params,\n search: item.to.search || item.search,\n });\n return;\n }\n\n // Handle string paths\n const workspaceAwarePath = makeWorkspaceAwarePath(\n item.to,\n workspace?.slug,\n );\n navigate({\n to: workspaceAwarePath,\n params: item.params,\n search: item.search,\n });\n }\n };\n\n return (\n <Breadcrumb className={className}>\n <BreadcrumbList>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const label = typeof item === \"string\" ? item : item.label;\n const isClickable = typeof item !== \"string\" && item.to;\n\n return (\n <Fragment key={index}>\n <BreadcrumbItemComponent>\n {isLast ? (\n <BreadcrumbPage>{label}</BreadcrumbPage>\n ) : isClickable ? (\n <button\n type=\"button\"\n className=\"hover:text-foreground transition-colors\"\n onClick={() => handleNavigation(item)}\n >\n {label}\n </button>\n ) : (\n <span className=\"text-muted-foreground\">{label}</span>\n )}\n </BreadcrumbItemComponent>\n {!isLast && <BreadcrumbSeparator />}\n </Fragment>\n );\n })}\n </BreadcrumbList>\n </Breadcrumb>\n );\n};\n","import { forwardRef } from \"react\";\nimport type { MenuItem } from \"../../../menu/types\";\nimport { cn } from \"../../../styling/cn\";\nimport { SearchableTreeNavigator } from \"../searchable-tree-navigator/SearchableTreeNavigator\";\n\nexport interface MainNavProps extends React.HTMLAttributes<HTMLElement> {\n items: MenuItem[];\n searchPlaceholder?: string;\n}\n\nexport const MainNav = forwardRef<HTMLElement, MainNavProps>(\n (\n { className, items, searchPlaceholder = \"Search navigation...\", ...props },\n ref,\n ) => {\n return (\n <nav\n ref={ref}\n className={cn(\"flex flex-col h-full bg-sidebar w-full p-2\", className)}\n aria-label=\"Main navigation\"\n {...props}\n >\n <SearchableTreeNavigator\n items={items}\n placeHolder={searchPlaceholder}\n height=\"full\"\n />\n </nav>\n );\n },\n);\n\nMainNav.displayName = \"MainNav\";\n","import { cva } from \"class-variance-authority\";\nimport type { FC } from \"react\";\nimport type { NavItem } from \"../../../config/nav-item\";\nimport { cn } from \"../../../styling/cn\";\nimport { SafeLink } from \"./SafeLink\";\n\nconst navItemVariants = cva(\n \"flex items-center gap-3 px-3 py-2 text-sm font-medium transition-all duration-200 rounded-md group\",\n {\n variants: {\n variant: {\n default: \"text-muted-foreground hover:text-foreground hover:bg-muted\",\n active: \"text-foreground bg-muted border-l-2 border-l-primary\",\n disabled: \"text-muted-foreground cursor-not-allowed opacity-50\",\n },\n level: {\n 0: \"ml-0\",\n 1: \"ml-4\",\n 2: \"ml-8\",\n 3: \"ml-12\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n level: 0,\n },\n },\n);\n\n// NavItem component\ninterface NavItemComponentProps {\n item: NavItem;\n level: number;\n isExpanded: boolean;\n isActive: boolean;\n onToggle: (id: string) => void;\n onItemClick?: (item: NavItem) => void;\n}\n\nexport const NavItemComponent: FC<NavItemComponentProps> = ({\n item,\n level,\n isExpanded,\n isActive,\n onToggle,\n onItemClick,\n}) => {\n const hasChildren = item.children && item.children.length > 0;\n const isLeaf = !hasChildren;\n\n const handleClick = () => {\n if (hasChildren) {\n onToggle(item.id);\n } else if (item.onClick) {\n item.onClick();\n onItemClick?.(item);\n }\n };\n\n const content = (\n <>\n <div className=\"flex items-center gap-2 flex-1\">\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.badge && (\n <span className=\"ml-auto px-2 py-0.5 text-xs bg-secondary text-secondary-foreground rounded-full\">\n {item.badge}\n </span>\n )}\n </div>\n {hasChildren && (\n <span\n className={cn(\n \"flex-shrink-0 w-4 h-4 transition-transform duration-200\",\n isExpanded ? \"transform rotate-90\" : \"\",\n )}\n >\n ▶\n </span>\n )}\n </>\n );\n\n const variant = item.disabled ? \"disabled\" : isActive ? \"active\" : \"default\";\n const className = navItemVariants({\n variant,\n level: Math.min(level, 3) as 0 | 1 | 2 | 3,\n });\n\n if (isLeaf && item.href && !item.disabled) {\n return (\n <SafeLink\n to={item.href}\n className={className}\n onClick={() => onItemClick?.(item)}\n >\n {content}\n </SafeLink>\n );\n }\n\n return (\n <button\n type=\"button\"\n className={className}\n onClick={handleClick}\n disabled={item.disabled}\n >\n {content}\n </button>\n );\n};\n","import type { FC, ReactNode } from \"react\";\n\n// Safe Link component that handles router context availability\ninterface SafeLinkProps {\n to: string;\n className?: string;\n onClick?: () => void;\n children: ReactNode;\n}\n\nconst SafeLink: FC<SafeLinkProps> = ({ to, className, onClick, children }) => {\n // Simple fallback for non-router environments like Storybook\n return (\n <button\n type=\"button\"\n className={className}\n onClick={(e) => {\n e.preventDefault();\n onClick?.();\n // In a real app, you'd navigate to the route\n console.log(`Navigate to: ${to}`);\n }}\n >\n {children}\n </button>\n );\n};\n\nexport { SafeLink, type SafeLinkProps };\n","import type { FC } from \"react\";\nimport type { NavItem } from \"../../../config/nav-item\";\nimport { NavItemComponent } from \"./NavItemComponent\";\n\n// Main NavItems component\ninterface NavItemsProps {\n items: NavItem[];\n level?: number;\n expandedItems: string[];\n activeItemId?: string;\n onToggle: (id: string) => void;\n onItemClick?: (item: NavItem) => void;\n}\n\nexport const NavItems: FC<NavItemsProps> = ({\n items,\n level = 0,\n expandedItems,\n activeItemId,\n onToggle,\n onItemClick,\n}) => {\n return (\n <div className=\"space-y-1\">\n {items.map((item) => {\n const isExpanded = expandedItems.includes(item.id);\n const isActive = activeItemId === item.id;\n\n return (\n <div key={item.id}>\n <NavItemComponent\n item={item}\n level={level}\n isExpanded={isExpanded}\n isActive={isActive}\n onToggle={onToggle}\n onItemClick={onItemClick}\n />\n {isExpanded && item.children && (\n <NavItems\n items={item.children}\n level={level + 1}\n expandedItems={expandedItems}\n activeItemId={activeItemId}\n onToggle={onToggle}\n onItemClick={onItemClick}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n};\n","import type { NavItem } from \"../../../config/nav-item\";\n\n// Helper function to flatten items for search\nexport const flattenNavItems = (\n items: NavItem[],\n level = 0,\n): (NavItem & { level: number })[] => {\n return items.reduce(\n (acc, item) => {\n acc.push({ ...item, level });\n if (item.children) {\n acc.push(...flattenNavItems(item.children, level + 1));\n }\n return acc;\n },\n [] as (NavItem & { level: number })[],\n );\n};\n\n// Helper function to filter items based on search query\nexport const filterNavItems = (items: NavItem[], query: string): NavItem[] => {\n if (!query.trim()) return items;\n\n const lowerQuery = query.toLowerCase();\n\n return items.reduce((acc, item) => {\n const matchesLabel = item.label.toLowerCase().includes(lowerQuery);\n const filteredChildren = item.children\n ? filterNavItems(item.children, query)\n : [];\n\n if (matchesLabel || filteredChildren.length > 0) {\n acc.push({\n ...item,\n children:\n filteredChildren.length > 0 ? filteredChildren : item.children,\n });\n }\n\n return acc;\n }, [] as NavItem[]);\n};\n","import {\n forwardRef,\n type RefObject,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { MenuItem } from \"../../../menu/types\";\nimport { SearchTextInput } from \"../../form-controls/controls/SearchTextInput/SearchTextInput\";\nimport { TreeNavigator } from \"./TreeNavigator\";\n\nexport type ControllableSearchableTreeProps = {\n items: MenuItem[];\n placeHolder: string;\n height?: \"full\" | number | string;\n selectedItemId: string;\n onSelectionChange: (itemId: string) => void;\n};\n\nexport const ControllableSearchableTree = forwardRef<\n HTMLInputElement,\n ControllableSearchableTreeProps\n>(({ selectedItemId, onSelectionChange, ...props }, ref) => {\n const internalRef = useRef<HTMLInputElement>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n // Expose the internal ref through the forwarded ref\n useImperativeHandle(ref, () => internalRef.current as HTMLInputElement, []);\n\n // Focus the search input when the component comes into view\n useEffect(() => {\n if (internalRef.current) {\n internalRef.current.focus();\n }\n }, []);\n\n // Filter items based on search query (flattens tree structure for search)\n const filteredItems = useMemo(() => {\n if (!searchQuery.trim()) {\n return props.items;\n }\n\n const query = searchQuery.toLowerCase();\n\n const flattenAndFilter = (items: MenuItem[]): MenuItem[] => {\n const result: MenuItem[] = [];\n\n for (const item of items) {\n const matchesSearch =\n item.label?.toLowerCase().includes(query) ||\n item.subtitle?.toLowerCase().includes(query);\n\n if (matchesSearch) {\n result.push({ ...item, children: undefined }); // Remove children for search results\n }\n\n if (item.children) {\n result.push(...flattenAndFilter(item.children));\n }\n }\n\n return result;\n };\n\n return flattenAndFilter(props.items);\n }, [props.items, searchQuery]);\n\n // Calculate container height and styles\n const getContainerStyle = () => {\n if (props.height === \"full\") {\n return { height: \"100%\" };\n }\n if (typeof props.height === \"number\") {\n return { height: `${props.height}px` };\n }\n if (typeof props.height === \"string\") {\n return { height: props.height };\n }\n return {};\n };\n\n return (\n <div\n className={props.height ? \"flex flex-col gap-2\" : \"space-y-2\"}\n style={getContainerStyle()}\n >\n {/* Search Input - Always visible */}\n <div className=\"flex-shrink-0\">\n <SearchTextInput\n ref={internalRef}\n placeholder={props.placeHolder}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n\n {/* Navigator List - Scrollable */}\n <div className={props.height ? \"flex-1 overflow-y-auto min-h-0\" : \"\"}>\n <TreeNavigator\n items={filteredItems}\n searchInputRef={internalRef as RefObject<HTMLInputElement>}\n selectedItemId={selectedItemId}\n onSelectionChange={onSelectionChange}\n />\n </div>\n </div>\n );\n});\n\nControllableSearchableTree.displayName = \"ControllableSearchableTree\";\n","import { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { RouterProvider } from \"@tanstack/react-router\";\nimport type { FC } from \"react\";\nimport { ToastContainer, ToastProvider } from \"../..\";\nimport type { NubaseFrontendConfig } from \"../../config/nubase-frontend-config\";\nimport { router } from \"../../routes/router\";\nimport { ModalProvider } from \"../floating/modal\";\nimport { initializeMonaco } from \"../monaco/monaco-editor\";\nimport { ServicesProvider } from \"./ServicesProvider\";\n\nexport type NubaseAppProps = {\n config: NubaseFrontendConfig;\n};\n\ninitializeMonaco();\n\n// Create a stable QueryClient instance\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000, // 5 minutes\n gcTime: 10 * 60 * 1000, // 10 minutes (previously cacheTime)\n retry: 3,\n refetchOnWindowFocus: false,\n },\n mutations: {\n retry: 1,\n },\n },\n});\n\nexport const NubaseApp: FC<NubaseAppProps> = ({ config }) => {\n return (\n <QueryClientProvider client={queryClient}>\n <ToastProvider>\n <ModalProvider>\n <ServicesProvider config={config}>\n <RouterProvider router={router} />\n </ServicesProvider>\n </ModalProvider>\n <ToastContainer />\n </ToastProvider>\n </QueryClientProvider>\n );\n};\n","import { createRouter } from \"@tanstack/react-router\";\nimport { routeTree } from \"./routes\";\n\nexport const router = createRouter({\n routeTree: routeTree,\n});\n","import { createRoute } from \"@tanstack/react-router\";\nimport { appShellRoute } from \"../root\";\nimport IndexScreen from \"./index-screen\";\n\nexport const indexRoute = createRoute({\n getParentRoute: () => appShellRoute,\n path: \"/\",\n component: IndexScreen,\n});\n","import {\n createRootRoute,\n createRoute,\n Outlet,\n useLocation,\n useNavigate,\n useParams,\n} from \"@tanstack/react-router\";\nimport { useEffect, useState } from \"react\";\nimport { MainNav } from \"@/components/navigation/main-nav/MainNav\";\nimport type { AuthenticationState } from \"../authentication/types\";\nimport { ActivityIndicator, Dock, TopBar } from \"../components\";\nimport { useNubaseContext } from \"../components/nubase-app/NubaseContextProvider\";\nimport {\n getWorkspaceFromRouter,\n useWorkspace,\n useWorkspaceOptional,\n type WorkspaceContext,\n WorkspaceContextValue,\n} from \"../context/WorkspaceContext\";\n\n// Re-export workspace hooks for backwards compatibility\nexport {\n getWorkspaceFromRouter,\n useWorkspace,\n useWorkspaceOptional,\n type WorkspaceContext,\n};\n\nfunction RootComponent() {\n return (\n <div className=\"bg-background text-text h-screen w-screen\">\n <Outlet />\n </div>\n );\n}\n\nexport const rootRoute = createRootRoute({\n component: RootComponent,\n});\n\n/**\n * Workspace route component that extracts the workspace slug from the URL path.\n * All routes are nested under /:workspace (e.g., /tavern/r/ticket/create).\n */\nfunction WorkspaceComponent() {\n const { workspace } = useParams({ from: \"/$workspace\" });\n const { authentication, config } = useNubaseContext();\n const publicRoutes = config.publicRoutes ?? [\"/signin\"];\n const location = useLocation();\n const navigate = useNavigate();\n\n const [authState, setAuthState] = useState<AuthenticationState | null>(\n authentication?.getState() ?? null,\n );\n const [isInitialized, setIsInitialized] = useState(!authentication);\n\n // Initialize authentication on mount\n useEffect(() => {\n if (!authentication) return;\n\n const init = async () => {\n try {\n await authentication.initialize();\n } finally {\n setIsInitialized(true);\n }\n };\n init();\n }, [authentication]);\n\n // Subscribe to auth state changes\n useEffect(() => {\n if (!authentication) return;\n\n const unsubscribe = authentication.subscribe((state) => {\n setAuthState(state);\n });\n return unsubscribe;\n }, [authentication]);\n\n // Handle redirection for unauthenticated users\n useEffect(() => {\n if (!authentication || !isInitialized || !authState) return;\n if (authState.status === \"loading\") return;\n\n const currentPath = location.pathname;\n // Check if route is public (accounting for workspace prefix)\n // e.g., /tavern/signin should match /signin in publicRoutes\n const pathWithoutWorkspace = currentPath.replace(`/${workspace}`, \"\");\n const isPublicRoute = publicRoutes.some((route) =>\n pathWithoutWorkspace.startsWith(route),\n );\n\n if (authState.status === \"unauthenticated\" && !isPublicRoute) {\n // Redirect to root-level signin (not workspace-specific)\n navigate({ to: \"/signin\" });\n }\n }, [\n authentication,\n authState,\n isInitialized,\n location.pathname,\n navigate,\n publicRoutes,\n workspace,\n ]);\n\n // Check if current route is public\n const currentPath = location.pathname;\n const pathWithoutWorkspace = currentPath.replace(`/${workspace}`, \"\");\n const isPublicRoute = publicRoutes.some((route) =>\n pathWithoutWorkspace.startsWith(route),\n );\n\n // If authentication is configured, show loading while initializing\n // But only for non-public routes - public routes (like signin) should render immediately\n if (authentication && !isPublicRoute) {\n if (!isInitialized || authState?.status === \"loading\") {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <ActivityIndicator\n size=\"lg\"\n color=\"primary\"\n aria-label=\"Loading...\"\n />\n </div>\n );\n }\n\n // If unauthenticated and not on a public route, show loading (redirect will happen)\n if (authState?.status === \"unauthenticated\") {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <ActivityIndicator\n size=\"lg\"\n color=\"primary\"\n aria-label=\"Redirecting...\"\n />\n </div>\n );\n }\n }\n\n return (\n <WorkspaceContextValue.Provider value={{ slug: workspace }}>\n <Outlet />\n </WorkspaceContextValue.Provider>\n );\n}\n\nexport const workspaceRoute = createRoute({\n getParentRoute: () => rootRoute,\n path: \"/$workspace\",\n component: WorkspaceComponent,\n});\n\nfunction AppShellComponent() {\n const context = useNubaseContext();\n\n return (\n <Dock\n top={<TopBar context={context} />}\n left={<MainNav items={context.config.mainMenu} />}\n center={<Outlet />}\n />\n );\n}\n\nexport const appShellRoute = createRoute({\n getParentRoute: () => workspaceRoute,\n id: \"app-shell\",\n component: AppShellComponent,\n});\n","import { DashboardRenderer } from \"../../components/dashboard/DashboardRenderer\";\nimport { useNubaseContext } from \"../../components/nubase-app/NubaseContextProvider\";\n\n/**\n * Index screen that renders the first configured dashboard.\n *\n * The dashboard configuration is loaded from the NubaseFrontendConfig's dashboards property.\n * Each dashboard is rendered using DashboardRenderer which:\n * 1. Creates a grid layout from widget configurations\n * 2. Renders ConnectedWidget for each widget (handles data fetching)\n * 3. Displays the appropriate chart/content based on widget type\n */\nexport default function IndexScreen() {\n const { config } = useNubaseContext();\n\n // Get the first dashboard from config (for now we just use the first one)\n const dashboards = config.dashboards;\n const dashboardIds = dashboards ? Object.keys(dashboards) : [];\n const firstDashboardId = dashboardIds[0];\n const dashboard = firstDashboardId ? dashboards?.[firstDashboardId] : null;\n\n if (!dashboard) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <div className=\"text-center text-muted-foreground\">\n <p className=\"text-lg font-medium\">No dashboard configured</p>\n <p className=\"text-sm\">\n Add a dashboard to your NubaseFrontendConfig to display it here.\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"p-4\">\n <DashboardRenderer dashboard={dashboard} />\n </div>\n );\n}\n","import { createRoute } from \"@tanstack/react-router\";\nimport { appShellRoute } from \"../root\";\nimport ResourceScreen from \"./resource-screen\";\n\nexport const resourceRoute = createRoute({\n getParentRoute: () => appShellRoute,\n path: \"/r/$resourceName/$operation\",\n validateSearch: (search: Record<string, unknown>) => {\n // Pass through all search params as-is\n // Type coercion will be handled by the component based on the schema\n return search as Record<string, any>;\n },\n component: ResourceScreen,\n});\n","import { useNavigate, useParams, useSearch } from \"@tanstack/react-router\";\nimport type { ReactNode } from \"react\";\nimport { FullScreenFixedHeaderLayout } from \"@/components/page-layouts/FullScreenFixedHeaderLayout\";\nimport { showToast } from \"../../components\";\nimport { useNubaseContext } from \"../../components/nubase-app/NubaseContextProvider\";\nimport { ResourceCreateViewRenderer } from \"../../components/views/ViewRenderer/screen/ResourceCreateViewRenderer\";\nimport { ResourceSearchViewRenderer } from \"../../components/views/ViewRenderer/screen/ResourceSearchViewRenderer\";\nimport { ResourceViewViewRenderer } from \"../../components/views/ViewRenderer/screen/ResourceViewViewRenderer\";\nimport type { BreadcrumbItem } from \"../../config/breadcrumb\";\nimport { useWorkspace } from \"../../context/WorkspaceContext\";\n\n/**\n * URL Parameter Coercion System\n *\n * **The Problem:**\n * URL search params always arrive as strings (e.g., `?id=37` gives `id: \"37\"`),\n * but Nubase schemas often expect typed values (numbers, booleans).\n *\n * **The Solution:**\n * We use Zod's built-in coercion via the schema's `toZodWithCoercion()` method:\n * - `\"37\"` → `37` (number)\n * - `\"true\"` → `true` (boolean)\n * - `\"hello\"` → `\"hello\"` (string, unchanged)\n *\n * **Example:**\n * ```typescript\n * // URL: /r/ticket/view?id=37&active=true\n * // Raw params: { id: \"37\", active: \"true\" }\n * // Schema expects: { id: number, active: boolean }\n * // toZodWithCoercion() automatically handles: { id: 37, active: true }\n * ```\n *\n * **How it works:**\n * The ObjectSchema's `toZodWithCoercion()` method returns a Zod schema that uses\n * `z.coerce.number()` and `z.coerce.boolean()` for type conversion during parsing.\n */\n\nexport default function ResourceScreen() {\n const params = useParams({ strict: false });\n const resourceName = params.resourceName as string;\n const operation = params.operation as string;\n const searchParams = useSearch({ strict: false });\n const context = useNubaseContext();\n const navigate = useNavigate();\n const workspace = useWorkspace();\n\n // Check if resources exist in config\n if (!context.config.resources) {\n return <div>Resources not configured</div>;\n }\n\n // Check if the resource exists\n const resource = context.config.resources[resourceName];\n if (!resource) {\n return <div>Resource \"{resourceName}\" not found</div>;\n }\n\n // Check if the view exists on the resource\n const resourceView = resource.views[operation];\n if (!resourceView) {\n return (\n <div>\n View \"{operation}\" not found for resource \"{resourceName}\"\n </div>\n );\n }\n\n let body: ReactNode | null = null;\n const loadedData: any = null; // Will be set if data is loaded for dynamic breadcrumbs\n let validatedParams: Record<string, any> | undefined; // Store validated params for breadcrumb evaluation\n\n // Helper function to evaluate breadcrumbs\n const evaluateBreadcrumbs = (\n breadcrumbDefinition: any,\n params?: Record<string, any>,\n data?: any,\n ): BreadcrumbItem[] | null => {\n if (!breadcrumbDefinition) return null;\n\n if (Array.isArray(breadcrumbDefinition)) {\n // Static breadcrumbs\n return breadcrumbDefinition;\n }\n\n if (typeof breadcrumbDefinition === \"function\") {\n // Dynamic breadcrumbs\n return breadcrumbDefinition({\n context: {\n ...context,\n params: params || {},\n } as any,\n data,\n });\n }\n\n return null;\n };\n\n switch (resourceView.type) {\n case \"resource-create\":\n body = (\n <ResourceCreateViewRenderer\n view={resourceView}\n resourceName={resourceName}\n onCreate={(data) => {\n showToast(\n `Resource ${resourceName} created successfully`,\n \"default\",\n );\n\n // Check if resource has a \"view\" view and redirect to it\n if (resource.views.view && data) {\n // The data comes from HTTP response, so the actual data is in result.data\n const recordId = data.data?.id || data.id;\n\n if (recordId) {\n // Add another indicator for successful navigation attempt\n document.title = `NAVIGATING - ${document.title}`;\n\n navigate({\n to: \"/$workspace/r/$resourceName/$operation\",\n params: {\n workspace: workspace.slug,\n resourceName,\n operation: \"view\",\n },\n search: { id: recordId },\n });\n } else {\n document.title = `NO RECORD ID - ${document.title}`;\n }\n } else {\n document.title = `NO VIEW OP - ${document.title}`;\n }\n }}\n onError={(error) => {\n showToast(\n `Error creating resource ${resourceName}: ${error.message}`,\n \"error\",\n );\n }}\n />\n );\n break;\n case \"resource-view\": {\n // Parse and validate URL search params using schema's built-in coercion\n // The toZodWithCoercion() method automatically converts strings to expected types\n // Example: ?id=37&active=true becomes { id: 37, active: true }\n if (resourceView.schemaParams) {\n try {\n validatedParams = resourceView.schemaParams\n .toZodWithCoercion()\n .parse(searchParams);\n } catch (error) {\n showToast(\n `Invalid URL parameters: ${(error as Error).message}`,\n \"error\",\n );\n return <div>Invalid URL parameters</div>;\n }\n }\n\n body = (\n <ResourceViewViewRenderer\n view={resourceView}\n params={validatedParams}\n onPatch={(_data) => {\n showToast(\n `Resource ${resourceName} updated successfully`,\n \"default\",\n );\n }}\n onError={(error) => {\n showToast(\n `Error updating resource ${resourceName}: ${error.message}`,\n \"error\",\n );\n }}\n />\n );\n break;\n }\n case \"resource-search\": {\n // Parse and validate URL search params using schema's built-in coercion\n if (resourceView.schemaParams) {\n try {\n validatedParams = resourceView.schemaParams\n .toZodWithCoercion()\n .parse(searchParams);\n } catch (error) {\n showToast(\n `Invalid URL parameters: ${(error as Error).message}`,\n \"error\",\n );\n return <div>Invalid URL parameters</div>;\n }\n }\n\n body = (\n <ResourceSearchViewRenderer\n view={resourceView}\n params={validatedParams}\n resourceName={resourceName}\n resource={resource}\n onError={(error) => {\n showToast(\n `Error loading search results for ${resourceName}: ${error.message}`,\n \"error\",\n );\n }}\n />\n );\n break;\n }\n default:\n return null;\n }\n\n // Evaluate breadcrumbs based on view definition\n const breadcrumbs = evaluateBreadcrumbs(\n resourceView.breadcrumbs,\n validatedParams,\n loadedData,\n );\n\n // Render the view\n return (\n <FullScreenFixedHeaderLayout\n title={resourceView.title}\n breadcrumbs={breadcrumbs || undefined}\n >\n {body}\n </FullScreenFixedHeaderLayout>\n );\n}\n","import type { FC, PropsWithChildren } from \"react\";\n\nexport type PageHeaderProps = {\n title: string;\n};\n\nexport const PageHeader: FC<PropsWithChildren<PageHeaderProps>> = (props) => {\n return (\n <div\n data-component=\"PageHeader\"\n className=\"mb-2 border-b border-border pb-1\"\n >\n <h1 className=\"text-lg font-bold\">{props.title}</h1>\n </div>\n );\n};\n","import type { FC, PropsWithChildren } from \"react\";\nimport type { BreadcrumbItem } from \"../../config/breadcrumb\";\nimport { BreadcrumbBar } from \"../navigation/breadcrumb\";\nimport { PageHeader } from \"../page-headers/PageHeader/PageHeader\";\n\nexport type FullScreenFixedHeaderLayoutProps = {\n title: string;\n /**\n * Optional breadcrumb trail to display above the page header\n */\n breadcrumbs?: BreadcrumbItem[];\n};\n\nexport const FullScreenFixedHeaderLayout: FC<\n PropsWithChildren<FullScreenFixedHeaderLayoutProps>\n> = (props) => {\n return (\n <div data-component=\"FullScreenLayout\" className=\"flex flex-col h-full p-4\">\n {props.breadcrumbs && props.breadcrumbs.length > 0 && (\n <BreadcrumbBar\n items={props.breadcrumbs}\n className=\"mb-2 flex-shrink-0\"\n />\n )}\n <div className=\"flex-shrink-0\">\n <PageHeader title={props.title} />\n </div>\n <div className=\"flex-1 min-h-0\">{props.children}</div>\n </div>\n );\n};\n","import type { ObjectOutput } from \"@nubase/core\";\nimport type { FC } from \"react\";\nimport type { ResourceCreateView } from \"../../../../config/view\";\nimport { useSchemaForm } from \"../../../../hooks\";\nimport { useResourceInvalidation } from \"../../../../hooks/useNubaseMutation\";\nimport { SchemaForm } from \"../../../form/SchemaForm/SchemaForm\";\nimport { SchemaFormBody } from \"../../../form/SchemaForm/SchemaFormBody\";\nimport { SchemaFormButtonBar } from \"../../../form/SchemaForm/SchemaFormButtonBar\";\nimport { SchemaFormValidationErrors } from \"../../../form/SchemaForm/SchemaFormValidationErrors\";\nimport { useNubaseContext } from \"../../../nubase-app/NubaseContextProvider\";\n\nexport type ResourceCreateViewRendererProps = {\n view: ResourceCreateView;\n resourceName?: string;\n onCreate?: (data: ObjectOutput<any>) => void;\n onError?: (error: Error) => void;\n};\n\nexport const ResourceCreateViewRenderer: FC<ResourceCreateViewRendererProps> = (\n props,\n) => {\n const { view, resourceName, onCreate, onError } = props;\n const context = useNubaseContext();\n const { invalidateResourceSearch } = useResourceInvalidation();\n\n const form = useSchemaForm({\n schema: view.schemaPost,\n onSubmit: async (data: ObjectOutput<any>) => {\n try {\n console.log(\"SCREEN RENDERER - Form submitted with data:\", data);\n const result = await view.onSubmit({\n data,\n context,\n });\n\n // Invalidate resource search queries to refresh the list\n if (resourceName) {\n console.log(\n \"🔄 SCREEN RENDERER - Invalidating resource search queries for:\",\n resourceName,\n );\n await invalidateResourceSearch(resourceName);\n }\n\n onCreate?.(result);\n console.log(\"SCREEN RENDERER - onCreate callback completed\");\n } catch (error) {\n console.log(\"SCREEN RENDERER - Error in form submission:\", error);\n onError?.(error as Error);\n }\n },\n });\n\n return (\n <SchemaForm\n form={form}\n className=\"space-y-4\"\n data-testid=\"resource-create-form\"\n >\n <SchemaFormBody form={form} />\n <SchemaFormValidationErrors form={form} />\n <SchemaFormButtonBar form={form} />\n </SchemaForm>\n );\n};\n","import type { BaseSchema, ObjectSchema, TableLayoutField } from \"@nubase/core\";\nimport { OptionalSchema } from \"@nubase/core\";\nimport { useNavigate } from \"@tanstack/react-router\";\nimport type { FC } from \"react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type {\n ActionOrSeparator,\n HandlerAction,\n ResourceAction,\n} from \"../../../../actions/types\";\nimport type { ActionLayout } from \"../../../../config/action-layout\";\nimport type { ResourceDescriptor } from \"../../../../config/resource\";\nimport type { ResourceSearchView } from \"../../../../config/view\";\nimport { ResourceContextProvider } from \"../../../../context/ResourceContext\";\nimport { useWorkspace } from \"../../../../context/WorkspaceContext\";\nimport { useResourceSearchQuery } from \"../../../../hooks/useNubaseQuery\";\nimport { ActionBar } from \"../../../buttons/ActionBar/ActionBar\";\nimport { createActionColumn, SelectColumn } from \"../../../data-grid/Columns\";\nimport { DataGrid } from \"../../../data-grid/DataGrid\";\nimport type { Column } from \"../../../data-grid/types\";\nimport { DataState } from \"../../../data-state\";\nimport { useNubaseContext } from \"../../../nubase-app/NubaseContextProvider\";\n\n// Default column widths based on field types\nconst DEFAULT_COLUMN_WIDTHS: Record<string, number> = {\n number: 100, // For IDs, counts, prices\n boolean: 80, // Compact for yes/no, checkmarks\n string: 200, // General text fields\n object: 250, // Complex data\n array: 200, // Lists\n optional: 200, // Will use the wrapped type's width\n};\n\n// Get default width for a field based on its schema type\nconst getDefaultColumnWidth = (fieldSchema: BaseSchema<any>): number => {\n // Handle optional schemas by unwrapping\n if (fieldSchema instanceof OptionalSchema) {\n return getDefaultColumnWidth(fieldSchema.unwrap());\n }\n\n // Return width based on schema type or default fallback\n return DEFAULT_COLUMN_WIDTHS[fieldSchema.type] || 150;\n};\n\n// Helper function to resolve action layouts to actual actions\nconst resolveActionLayout = (\n actionLayout: ActionLayout<string> | undefined,\n resourceActions: Record<string, any> | undefined,\n): ActionOrSeparator[] => {\n if (!actionLayout || !resourceActions) return [];\n\n return actionLayout\n .map((actionId) => {\n if (actionId === \"separator\") return \"separator\";\n return resourceActions[actionId];\n })\n .filter(Boolean); // Remove any undefined actions\n};\n\nexport type ResourceSearchViewRendererProps = {\n view: ResourceSearchView;\n params?: Record<string, any>;\n resourceName?: string;\n resource?: ResourceDescriptor;\n onError?: (error: Error) => void;\n};\n\nexport const ResourceSearchViewRenderer: FC<ResourceSearchViewRendererProps> = (\n props,\n) => {\n const { view, params, resourceName, resource, onError } = props;\n const navigate = useNavigate();\n const context = useNubaseContext();\n const workspace = useWorkspace();\n\n // Create a function to wrap actions with automatic query invalidation\n const wrapActionsWithInvalidation = useCallback(\n (actions: ActionOrSeparator[]): ActionOrSeparator[] => {\n return actions.map((action) => {\n if (action === \"separator\") {\n return action;\n }\n\n if (action.type === \"handler\") {\n // Wrap handler actions with query invalidation\n const wrappedAction: HandlerAction = {\n ...action,\n onExecute: async (executionContext) => {\n // Execute the original action\n await action.onExecute(executionContext);\n\n // After successful execution, invalidate the search query to refresh the list\n if (resourceName && context.queryClient) {\n // Use predicate to match queries that start with [\"resource\", resourceName, \"search\"]\n // This will match both 3-element and 4-element (with params) keys\n await context.queryClient.invalidateQueries({\n predicate: (query) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key.length >= 3 &&\n key[0] === \"resource\" &&\n key[1] === resourceName &&\n key[2] === \"search\"\n );\n },\n });\n }\n },\n };\n return wrappedAction;\n }\n\n if (action.type === \"resource\") {\n // Wrap resource actions with query invalidation\n const wrappedAction: ResourceAction = {\n ...action,\n onExecute: async (executionContext) => {\n // Execute the original action\n await action.onExecute(executionContext);\n\n // After successful execution, invalidate the search query to refresh the list\n if (resourceName && context.queryClient) {\n // Use predicate to match queries that start with [\"resource\", resourceName, \"search\"]\n // This will match both 3-element and 4-element (with params) keys\n await context.queryClient.invalidateQueries({\n predicate: (query) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key.length >= 3 &&\n key[0] === \"resource\" &&\n key[1] === resourceName &&\n key[2] === \"search\"\n );\n },\n });\n }\n },\n };\n return wrappedAction;\n }\n\n // For command actions, return as-is (they would need different handling)\n return action;\n });\n },\n [resourceName, context.queryClient],\n );\n\n // Selection state for DataGrid\n const [selectedRows, setSelectedRows] = useState<ReadonlySet<any>>(new Set());\n\n // Use React Query for data fetching with caching\n const {\n data: response,\n isLoading,\n error,\n } = useResourceSearchQuery(resourceName || \"unknown\", view, params);\n\n // Handle errors using React Query's error state - use useEffect to avoid setState in render\n useEffect(() => {\n if (error) {\n onError?.(error as Error);\n }\n }, [error, onError]);\n\n // Extract data from the response\n const data = response?.data || [];\n\n // Get the element schema from the array schema to access table layouts\n const elementSchema = (view.schemaGet as any)?._element as\n | ObjectSchema<any>\n | undefined;\n const tableLayout =\n elementSchema?.getLayout(\"default\") || elementSchema?.getLayout(\"table\");\n const linkFields = tableLayout?.metadata?.linkFields as string[] | undefined;\n\n // Get the ID field from the schema (defaults to \"id\")\n const idField = String(elementSchema?.getIdField() || \"id\");\n\n // Create columns from table layout or dynamically from data\n const columns: Column<any>[] = useMemo(() => {\n const cols: Column<any>[] = [SelectColumn]; // Always include selection column first\n\n // Add action column if view has rowActions\n if (view.rowActions) {\n // Resolve the action layout to actual actions\n const resolvedActions = resolveActionLayout(\n view.rowActions,\n resource?.actions,\n );\n // Wrap the actions with automatic query invalidation\n const wrappedActions = wrapActionsWithInvalidation(resolvedActions);\n cols.push(createActionColumn(wrappedActions, context, idField));\n }\n\n if (tableLayout && tableLayout.type === \"table\" && tableLayout.groups[0]) {\n // Use table layout to define columns\n (tableLayout.groups[0].fields as TableLayoutField<any>[])\n .filter((field) => !field.hidden)\n .forEach((field) => {\n const fieldName = field.name as string;\n const isLinkField = linkFields?.includes(fieldName);\n\n // Use columnWidthPx if defined, otherwise get default based on field type\n let width = field.columnWidthPx;\n if (width === undefined) {\n // Get the field schema from the element schema to determine type\n const fieldSchema = elementSchema?._shape[fieldName];\n width = fieldSchema ? getDefaultColumnWidth(fieldSchema) : 150;\n }\n\n cols.push({\n name: fieldName.charAt(0).toUpperCase() + fieldName.slice(1),\n key: fieldName,\n width,\n resizable: true,\n frozen: field.pinned === true,\n renderCell: isLinkField\n ? ({ row }) => {\n const value = row[fieldName];\n const displayValue = value?.toString() || \"\";\n\n if (row.id) {\n return (\n <button\n type=\"button\"\n className=\"text-primary hover:underline text-left\"\n onClick={() => {\n // Navigate to view screen using the resourceName\n if (resourceName) {\n navigate({\n to: \"/$workspace/r/$resourceName/$operation\",\n params: {\n workspace: workspace.slug,\n resourceName,\n operation: \"view\",\n },\n search: { id: row.id },\n });\n }\n }}\n >\n {displayValue}\n </button>\n );\n }\n return displayValue;\n }\n : ({ row }) => row[fieldName]?.toString() || \"\",\n });\n });\n } else if (data.length > 0) {\n // Fallback: create columns dynamically from the first data item\n Object.keys(data[0]).forEach((key) => {\n cols.push({\n name: key.charAt(0).toUpperCase() + key.slice(1),\n key: key,\n width: 150,\n resizable: true,\n frozen: false, // No columns are frozen in dynamic mode\n renderCell: ({ row }) => row[key]?.toString() || \"\",\n });\n });\n }\n\n return cols;\n }, [\n tableLayout,\n linkFields,\n data,\n resourceName,\n navigate,\n elementSchema,\n view.rowActions,\n resource?.actions,\n context,\n wrapActionsWithInvalidation,\n idField,\n workspace.slug,\n ]);\n\n // Filter resource actions for the ActionBar (bulk operations)\n // This must come before early returns to avoid hook order issues\n const bulkActions = useMemo(() => {\n if (!view.tableActions) return [];\n\n // Resolve the action layout to actual actions\n const resolvedActions = resolveActionLayout(\n view.tableActions,\n resource?.actions,\n );\n\n // First wrap the actions with invalidation logic, then filter and map\n const wrappedActions = wrapActionsWithInvalidation(resolvedActions);\n\n return wrappedActions\n .filter((action) => action !== \"separator\" && action.type === \"resource\")\n .map((action) => ({\n ...action,\n disabled: action.disabled || selectedRows.size === 0, // Disable when no items selected\n }));\n }, [\n view.tableActions,\n resource?.actions,\n selectedRows.size,\n wrapActionsWithInvalidation,\n ]);\n\n return (\n <DataState\n isLoading={isLoading}\n error={error as Error | null}\n isEmpty={data.length === 0}\n loadingLabel=\"Loading search results...\"\n >\n <div className=\"h-full w-full\">\n <ResourceContextProvider\n resourceType={resourceName || \"unknown\"}\n selectedIds={selectedRows}\n >\n <div className=\"flex flex-col h-full space-y-2\">\n {bulkActions.length > 0 && <ActionBar actions={bulkActions} />}\n <div className=\"flex-1\">\n <DataGrid\n columns={columns}\n rows={data}\n className=\"h-full w-full\"\n selectedRows={selectedRows}\n onSelectedRowsChange={setSelectedRows}\n rowKeyGetter={(row) => row[idField] || row}\n />\n </div>\n </div>\n </ResourceContextProvider>\n </div>\n </DataState>\n );\n};\n","import type { ObjectOutput } from \"@nubase/core\";\nimport { type FC, useEffect, useState } from \"react\";\nimport type { ResourceViewView } from \"../../../../config/view\";\nimport { useSchemaForm } from \"../../../../hooks\";\nimport { DataState } from \"../../../data-state\";\nimport { SchemaForm } from \"../../../form/SchemaForm/SchemaForm\";\nimport { SchemaFormBody } from \"../../../form/SchemaForm/SchemaFormBody\";\nimport { SchemaFormValidationErrors } from \"../../../form/SchemaForm/SchemaFormValidationErrors\";\nimport { useNubaseContext } from \"../../../nubase-app/NubaseContextProvider\";\n\nexport type ResourceViewViewRendererProps = {\n view: ResourceViewView;\n params?: Record<string, any>;\n onPatch?: (data: ObjectOutput<any>) => void;\n onError?: (error: Error) => void;\n};\n\nexport const ResourceViewViewRenderer: FC<ResourceViewViewRendererProps> = (\n props,\n) => {\n const { view, params, onPatch: onPatchCallback, onError } = props;\n const context = useNubaseContext();\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const [initialData, setInitialData] = useState<Record<string, any> | null>(\n null,\n );\n\n useEffect(() => {\n const loadData = async () => {\n try {\n setIsLoading(true);\n setError(null);\n const contextWithParams = {\n ...context,\n params: params || undefined,\n };\n const response = await view.onLoad({\n context: contextWithParams as any,\n });\n setInitialData(response.data);\n } catch (err) {\n const loadError = err as Error;\n setError(loadError);\n onError?.(loadError);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadData();\n }, [params, context, onError, view.onLoad]); // Re-load if params change\n\n return (\n <DataState\n isLoading={isLoading}\n error={error}\n isEmpty={!initialData}\n emptyMessage=\"Failed to load resource data\"\n loadingLabel=\"Loading resource data...\"\n >\n {initialData && (\n <ResourceViewForm\n view={view}\n initialData={initialData}\n params={params}\n onPatch={onPatchCallback}\n onError={onError}\n context={context}\n />\n )}\n </DataState>\n );\n};\n\n// Separate component to properly handle form initialization with loaded data\nconst ResourceViewForm: FC<{\n view: ResourceViewView;\n initialData: Record<string, any>;\n params?: Record<string, any>;\n onPatch?: (data: ObjectOutput<any>) => void;\n onError?: (error: Error) => void;\n context: any;\n}> = ({\n view,\n initialData,\n params,\n onPatch: onPatchCallback,\n onError,\n context,\n}) => {\n const form = useSchemaForm({\n schema: view.schemaGet,\n mode: \"patch\",\n initialValues: initialData,\n onPatch: async (fieldName: string, value) => {\n // Validation now happens in SchemaFormBody\n // This layer only handles network operations\n try {\n const patchData = { [fieldName]: value };\n const contextWithParams = {\n ...context,\n params: params || undefined,\n };\n const result = await view.onPatch({\n data: patchData,\n context: contextWithParams as any,\n });\n\n onPatchCallback?.(result);\n } catch (error) {\n // Only call onError for actual network/server errors, not validation errors\n onError?.(error as Error);\n throw error; // Re-throw to let the form handle it\n }\n },\n onSubmit: async () => {\n // Not used in patch mode\n },\n });\n\n return (\n <div className=\"h-full overflow-y-auto\">\n <SchemaForm\n form={form}\n className=\"space-y-4\"\n data-testid=\"resource-view-form\"\n >\n <SchemaFormBody form={form} />\n <SchemaFormValidationErrors form={form} />\n </SchemaForm>\n </div>\n );\n};\n","import type { AnyRoute } from \"@tanstack/react-router\";\nimport { createRoute } from \"@tanstack/react-router\";\nimport SignInScreen from \"./signin-screen\";\n\n// Factory function to create the route with parent injected to avoid circular deps\nexport const createSigninRoute = (parentRoute: AnyRoute) =>\n createRoute({\n getParentRoute: () => parentRoute,\n path: \"/signin\",\n component: SignInScreen,\n });\n","import { useForm } from \"@tanstack/react-form\";\nimport { Link, useNavigate } from \"@tanstack/react-router\";\nimport { useState } from \"react\";\nimport type { WorkspaceInfo } from \"../../authentication\";\nimport { Button } from \"../../components/buttons/Button/Button\";\nimport { showToast } from \"../../components/floating/toast\";\nimport { FormValidationErrors } from \"../../components/form\";\nimport { TextInput } from \"../../components/form-controls/controls/TextInput/TextInput\";\nimport { FormControl } from \"../../components/form-controls/FormControl/FormControl\";\nimport { useNubaseContext } from \"../../components/nubase-app/NubaseContextProvider\";\n\n/**\n * Sign-in screen with Shortcut-like two-step flow:\n * 1. Enter email and password\n * 2. If user belongs to multiple workspaces, select one\n *\n * This is the root-level signin at /signin.\n * After successful login, redirects to /$workspace.\n */\nexport default function SignInScreen() {\n const [isLoading, setIsLoading] = useState(false);\n const { authentication } = useNubaseContext();\n const navigate = useNavigate();\n\n // Two-step login state\n const [loginToken, setLoginToken] = useState<string | null>(null);\n const [workspaces, setWorkspaces] = useState<WorkspaceInfo[]>([]);\n\n const form = useForm({\n defaultValues: {\n email: \"\",\n password: \"\",\n },\n onSubmit: async ({ value }) => {\n form.setErrorMap({});\n\n if (!authentication) {\n form.setErrorMap({\n onSubmit: { form: \"Authentication is not configured\", fields: {} },\n });\n return;\n }\n\n if (!value.email || !value.password) {\n form.setErrorMap({\n onSubmit: {\n form: \"Please enter both email and password\",\n fields: {},\n },\n });\n return;\n }\n\n setIsLoading(true);\n\n try {\n // Check if auth controller supports two-step login\n if (authentication.loginStart) {\n const result = await authentication.loginStart({\n email: value.email,\n password: value.password,\n });\n\n if (result.workspaces.length === 1 && result.workspaces[0]) {\n // Single workspace - auto-complete login\n if (!authentication.loginComplete) {\n form.setErrorMap({\n onSubmit: {\n form: \"Authentication not properly configured\",\n fields: {},\n },\n });\n return;\n }\n const singleWorkspace = result.workspaces[0];\n const workspace = await authentication.loginComplete({\n loginToken: result.loginToken,\n workspace: singleWorkspace.slug,\n });\n showToast(\"Successfully signed in!\");\n navigate({\n to: \"/$workspace\",\n params: { workspace: workspace.slug },\n });\n } else if (result.workspaces.length > 1) {\n // Multiple workspaces - show selection\n setLoginToken(result.loginToken);\n setWorkspaces(result.workspaces);\n }\n } else {\n // Fallback to legacy single-step login (requires workspace)\n form.setErrorMap({\n onSubmit: {\n form: \"Please enter your organization slug\",\n fields: {},\n },\n });\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Sign in failed\";\n form.setErrorMap({ onSubmit: { form: message, fields: {} } });\n showToast(message, \"error\");\n } finally {\n setIsLoading(false);\n }\n },\n });\n\n const handleWorkspaceSelect = async (workspace: WorkspaceInfo) => {\n if (!authentication?.loginComplete || !loginToken) {\n form.setErrorMap({\n onSubmit: { form: \"Session expired. Please try again.\", fields: {} },\n });\n return;\n }\n\n setIsLoading(true);\n form.setErrorMap({});\n\n try {\n const selectedWorkspace = await authentication.loginComplete({\n loginToken,\n workspace: workspace.slug,\n });\n showToast(\"Successfully signed in!\");\n navigate({\n to: \"/$workspace\",\n params: { workspace: selectedWorkspace.slug },\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Sign in failed\";\n form.setErrorMap({ onSubmit: { form: message, fields: {} } });\n showToast(message, \"error\");\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleBackToCredentials = () => {\n setLoginToken(null);\n setWorkspaces([]);\n form.setErrorMap({});\n };\n\n // Workspace selection screen\n if (loginToken && workspaces.length > 0) {\n return (\n <div className=\"min-h-screen flex items-center justify-center bg-background\">\n <div className=\"w-full max-w-md p-8\">\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl font-bold text-foreground\">\n Select Organization\n </h1>\n <p className=\"text-sm text-muted-foreground mt-2\">\n Choose the organization you want to sign in to\n </p>\n </div>\n\n <div className=\"space-y-3\">\n {workspaces.map((workspace) => (\n <button\n key={workspace.id}\n type=\"button\"\n onClick={() => handleWorkspaceSelect(workspace)}\n disabled={isLoading}\n className=\"w-full p-4 text-left rounded-lg border border-outline bg-surface hover:bg-surfaceContainer transition-colors disabled:opacity-50\"\n >\n <div className=\"font-medium text-foreground\">\n {workspace.name}\n </div>\n <div className=\"text-sm text-muted-foreground\">\n {workspace.slug}\n </div>\n </button>\n ))}\n </div>\n\n <FormValidationErrors\n form={form}\n className=\"mt-6\"\n testId=\"signin-error\"\n />\n\n <div className=\"mt-6 text-center\">\n <button\n type=\"button\"\n onClick={handleBackToCredentials}\n className=\"text-sm text-primary hover:underline\"\n >\n Sign in with a different account\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n // Credentials screen\n return (\n <div className=\"min-h-screen flex items-center justify-center bg-background\">\n <div className=\"w-full max-w-md p-8\">\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl font-bold text-foreground\">Sign In</h1>\n <p className=\"text-sm text-muted-foreground mt-2\">\n Enter your credentials to access your account\n </p>\n </div>\n\n <form\n className=\"space-y-6\"\n onSubmit={(e) => {\n e.preventDefault();\n e.stopPropagation();\n form.handleSubmit();\n }}\n >\n <form.Field\n name=\"email\"\n validators={{\n onBlur: ({ value }) => (!value ? \"Email is required\" : undefined),\n }}\n >\n {(field) => (\n <FormControl label=\"Email\" required field={field}>\n <TextInput\n id=\"email\"\n type=\"email\"\n placeholder=\"Enter your email\"\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n autoComplete=\"email\"\n disabled={isLoading}\n hasError={\n field.state.meta.isTouched && !field.state.meta.isValid\n }\n />\n </FormControl>\n )}\n </form.Field>\n\n <form.Field\n name=\"password\"\n validators={{\n onBlur: ({ value }) =>\n !value ? \"Password is required\" : undefined,\n }}\n >\n {(field) => (\n <FormControl label=\"Password\" required field={field}>\n <TextInput\n id=\"password\"\n type=\"password\"\n placeholder=\"Enter your password\"\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n autoComplete=\"current-password\"\n disabled={isLoading}\n hasError={\n field.state.meta.isTouched && !field.state.meta.isValid\n }\n />\n </FormControl>\n )}\n </form.Field>\n\n <FormValidationErrors form={form} testId=\"signin-error\" />\n\n <div className=\"pt-4\">\n <Button type=\"submit\" className=\"w-full\" isLoading={isLoading}>\n Sign In\n </Button>\n </div>\n\n <div className=\"text-center text-sm text-muted-foreground\">\n Don't have an account?{\" \"}\n <Link to=\"/signup\" className=\"text-primary hover:underline\">\n Sign up\n </Link>\n </div>\n </form>\n </div>\n </div>\n );\n}\n","import type { AnyRoute } from \"@tanstack/react-router\";\nimport { createRoute } from \"@tanstack/react-router\";\nimport SignUpScreen from \"./signup-screen\";\n\n// Factory function to create the route with parent injected to avoid circular deps\nexport const createSignupRoute = (parentRoute: AnyRoute) =>\n createRoute({\n getParentRoute: () => parentRoute,\n path: \"/signup\",\n component: SignUpScreen,\n });\n","import { useForm } from \"@tanstack/react-form\";\nimport { Link, useNavigate } from \"@tanstack/react-router\";\nimport { useState } from \"react\";\nimport { Button } from \"../../components/buttons/Button/Button\";\nimport { showToast } from \"../../components/floating/toast\";\nimport { FormValidationErrors } from \"../../components/form\";\nimport { TextInput } from \"../../components/form-controls/controls/TextInput/TextInput\";\nimport { FormControl } from \"../../components/form-controls/FormControl/FormControl\";\nimport { useNubaseContext } from \"../../components/nubase-app/NubaseContextProvider\";\n\n/**\n * Sign-up screen for creating a new user and workspace.\n * This is the root-level signup at /signup.\n * After successful signup, redirects to /$workspace.\n */\nexport default function SignUpScreen() {\n const [isLoading, setIsLoading] = useState(false);\n const { authentication } = useNubaseContext();\n const navigate = useNavigate();\n\n const form = useForm({\n defaultValues: {\n workspace: \"\",\n workspaceName: \"\",\n displayName: \"\",\n email: \"\",\n password: \"\",\n confirmPassword: \"\",\n },\n onSubmit: async ({ value }) => {\n form.setErrorMap({});\n\n if (!authentication) {\n form.setErrorMap({\n onSubmit: { form: \"Authentication is not configured\", fields: {} },\n });\n return;\n }\n\n setIsLoading(true);\n\n try {\n // Call the signup method on the authentication controller\n if (!authentication.signup) {\n form.setErrorMap({\n onSubmit: { form: \"Signup is not configured\", fields: {} },\n });\n setIsLoading(false);\n return;\n }\n await authentication.signup({\n workspace: value.workspace,\n workspaceName: value.workspaceName || value.workspace,\n displayName: value.displayName,\n email: value.email,\n password: value.password,\n });\n showToast(\"Account created successfully!\");\n navigate({ to: \"/$workspace\", params: { workspace: value.workspace } });\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Sign up failed\";\n form.setErrorMap({ onSubmit: { form: message, fields: {} } });\n showToast(message, \"error\");\n } finally {\n setIsLoading(false);\n }\n },\n });\n\n return (\n <div className=\"min-h-screen flex items-center justify-center bg-background\">\n <div className=\"w-full max-w-md p-8\">\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl font-bold text-foreground\">\n Create an Account\n </h1>\n <p className=\"text-sm text-muted-foreground mt-2\">\n Set up your organization and create your account\n </p>\n </div>\n\n <form\n className=\"space-y-6\"\n onSubmit={(e) => {\n e.preventDefault();\n e.stopPropagation();\n form.handleSubmit();\n }}\n >\n <div className=\"space-y-4\">\n <h2 className=\"text-sm font-medium text-foreground\">\n Organization\n </h2>\n\n <form.Field\n name=\"workspace\"\n validators={{\n onBlur: ({ value }) => {\n if (!value) return \"Organization slug is required\";\n if (!/^[a-z0-9-]+$/.test(value)) {\n return \"Must be lowercase letters, numbers, and hyphens only\";\n }\n return undefined;\n },\n }}\n >\n {(field) => (\n <FormControl\n label=\"Organization Slug\"\n hint=\"A unique identifier for your organization (e.g., my-company)\"\n required\n field={field}\n >\n <TextInput\n id=\"workspace\"\n type=\"text\"\n placeholder=\"my-organization\"\n value={field.state.value}\n onChange={(e) =>\n field.handleChange(e.target.value.toLowerCase())\n }\n onBlur={field.handleBlur}\n disabled={isLoading}\n hasError={\n field.state.meta.isTouched && !field.state.meta.isValid\n }\n />\n </FormControl>\n )}\n </form.Field>\n\n <form.Field name=\"workspaceName\">\n {(field) => (\n <FormControl\n label=\"Organization Name\"\n hint=\"Display name for your organization\"\n field={field}\n >\n <TextInput\n id=\"workspaceName\"\n type=\"text\"\n placeholder=\"My Organization\"\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n disabled={isLoading}\n hasError={\n field.state.meta.isTouched && !field.state.meta.isValid\n }\n />\n </FormControl>\n )}\n </form.Field>\n </div>\n\n <div className=\"space-y-4\">\n <h2 className=\"text-sm font-medium text-foreground\">\n Admin Account\n </h2>\n\n <form.Field\n name=\"email\"\n validators={{\n onBlur: ({ value }) => {\n if (!value) return \"Email is required\";\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n return \"Please enter a valid email address\";\n }\n return undefined;\n },\n }}\n >\n {(field) => (\n <FormControl label=\"Email\" required field={field}>\n <TextInput\n id=\"email\"\n type=\"email\"\n placeholder=\"Enter your email\"\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n autoComplete=\"email\"\n disabled={isLoading}\n hasError={\n field.state.meta.isTouched && !field.state.meta.isValid\n }\n />\n </FormControl>\n )}\n </form.Field>\n\n <form.Field\n name=\"displayName\"\n validators={{\n onBlur: ({ value }) =>\n !value ? \"Display name is required\" : undefined,\n }}\n >\n {(field) => (\n <FormControl label=\"Display Name\" required field={field}>\n <TextInput\n id=\"displayName\"\n type=\"text\"\n placeholder=\"Enter your name\"\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n autoComplete=\"name\"\n disabled={isLoading}\n hasError={\n field.state.meta.isTouched && !field.state.meta.isValid\n }\n />\n </FormControl>\n )}\n </form.Field>\n\n <form.Field\n name=\"password\"\n validators={{\n onBlur: ({ value }) => {\n if (!value) return \"Password is required\";\n if (value.length < 8) {\n return \"Password must be at least 8 characters\";\n }\n return undefined;\n },\n }}\n >\n {(field) => (\n <FormControl label=\"Password\" required field={field}>\n <TextInput\n id=\"password\"\n type=\"password\"\n placeholder=\"Enter your password\"\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n autoComplete=\"new-password\"\n disabled={isLoading}\n hasError={\n field.state.meta.isTouched && !field.state.meta.isValid\n }\n />\n </FormControl>\n )}\n </form.Field>\n\n <form.Field\n name=\"confirmPassword\"\n validators={{\n onBlur: ({ value, fieldApi }) => {\n const password = fieldApi.form.getFieldValue(\"password\");\n if (!value) return \"Please confirm your password\";\n if (value !== password) return \"Passwords do not match\";\n return undefined;\n },\n }}\n >\n {(field) => (\n <FormControl label=\"Confirm Password\" required field={field}>\n <TextInput\n id=\"confirmPassword\"\n type=\"password\"\n placeholder=\"Confirm your password\"\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n autoComplete=\"new-password\"\n disabled={isLoading}\n hasError={\n field.state.meta.isTouched && !field.state.meta.isValid\n }\n />\n </FormControl>\n )}\n </form.Field>\n </div>\n\n <FormValidationErrors form={form} />\n\n <div className=\"pt-4\">\n <Button type=\"submit\" className=\"w-full\" isLoading={isLoading}>\n Create Account\n </Button>\n </div>\n\n <div className=\"text-center text-sm text-muted-foreground\">\n Already have an account?{\" \"}\n <Link to=\"/signin\" className=\"text-primary hover:underline\">\n Sign in\n </Link>\n </div>\n </form>\n </div>\n </div>\n );\n}\n","import { createRoute } from \"@tanstack/react-router\";\nimport { appShellRoute } from \"../root\";\nimport HttpToolScreen from \"./http-tool-screen\";\n\nexport const httpToolRoute = createRoute({\n getParentRoute: () => appShellRoute,\n path: \"/t/http\",\n component: HttpToolScreen,\n});\n","import type { RequestSchema } from \"@nubase/core\";\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"../../components\";\nimport {\n Select,\n type SelectOption,\n} from \"../../components/form-controls/controls/Select/Select\";\nimport { useNubaseContext } from \"../../components/nubase-app/NubaseContextProvider\";\nimport { HorizontalResizeHandle } from \"../../components/resize-handle/HorizontalResizeHandle\";\nimport { RequestPanel } from \"./components/RequestPanel\";\nimport { ResponsePanel } from \"./components/ResponsePanel\";\nimport { useHttpToolRequest } from \"./hooks/useHttpToolRequest\";\n\nconst MIN_PANEL_WIDTH = 300;\n\nexport default function HttpToolScreen() {\n const { config } = useNubaseContext();\n\n // Get API endpoints from config\n const apiEndpoints = (config.apiEndpoints ?? {}) as Record<\n string,\n RequestSchema\n >;\n const apiBaseUrl = config.apiBaseUrl ?? \"\";\n\n // HTTP request hook\n const {\n selectedEndpointKey,\n selectedEndpoint,\n endpointOptions,\n selectEndpoint,\n pathParams,\n setPathParam,\n pathParamKeys,\n requestBody,\n setRequestBody,\n hasRequestBody,\n hasAnyParams,\n response,\n isLoading,\n error,\n executeRequest,\n } = useHttpToolRequest({\n apiEndpoints,\n apiBaseUrl,\n });\n\n // Convert endpoint options to Select options\n const selectOptions = useMemo<SelectOption<string>[]>(\n () =>\n endpointOptions.map((opt) => ({\n value: opt.key,\n label: opt.label,\n })),\n [endpointOptions],\n );\n\n // Resize handling\n const containerRef = useRef<HTMLDivElement>(null);\n const [leftPanelWidth, setLeftPanelWidth] = useState<number>(400);\n const isDraggingRef = useRef(false);\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n isDraggingRef.current = true;\n\n const startX = e.clientX;\n const startWidth = leftPanelWidth;\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n if (!isDraggingRef.current || !containerRef.current) return;\n\n const containerRect = containerRef.current.getBoundingClientRect();\n const deltaX = moveEvent.clientX - startX;\n const newWidth = Math.max(\n MIN_PANEL_WIDTH,\n Math.min(startWidth + deltaX, containerRect.width - MIN_PANEL_WIDTH),\n );\n\n setLeftPanelWidth(newWidth);\n };\n\n const handleMouseUp = () => {\n isDraggingRef.current = false;\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n },\n [leftPanelWidth],\n );\n\n return (\n <div className=\"flex flex-col h-full bg-background\">\n {/* Header with Endpoint Selector and Send Button */}\n <div className=\"flex items-center gap-3 border-b p-4\">\n <div className=\"flex-1\">\n <Select\n options={selectOptions}\n value={selectedEndpointKey}\n onChange={(value) => selectEndpoint(value)}\n placeholder=\"Select an endpoint...\"\n searchable\n emptyMessage=\"No endpoints found\"\n />\n </div>\n <Button\n onClick={executeRequest}\n isLoading={isLoading}\n disabled={!selectedEndpoint}\n >\n Send\n </Button>\n </div>\n\n {/* Main Content - Split Panels (or just response if no params) */}\n <div ref={containerRef} className=\"flex flex-1 min-h-0 relative\">\n {/* Request Panel - only shown if endpoint has params */}\n {hasAnyParams && (\n <div\n className=\"h-full border-r relative\"\n style={{ width: leftPanelWidth, flexShrink: 0 }}\n >\n <RequestPanel\n endpoint={selectedEndpoint}\n pathParamKeys={pathParamKeys}\n pathParams={pathParams}\n onPathParamChange={setPathParam}\n requestBody={requestBody}\n onRequestBodyChange={setRequestBody}\n hasRequestBody={hasRequestBody}\n />\n <HorizontalResizeHandle\n onMouseDown={handleMouseDown}\n align=\"right\"\n />\n </div>\n )}\n\n {/* Response Panel */}\n <div className=\"flex-1 min-w-0 h-full\">\n <ResponsePanel\n response={response}\n error={error}\n isLoading={isLoading}\n />\n </div>\n </div>\n </div>\n );\n}\n","import type { ObjectSchema, RequestSchema } from \"@nubase/core\";\nimport { lazy, Suspense, useMemo } from \"react\";\nimport { ActivityIndicator, Label } from \"../../../components\";\nimport { SchemaFormBody } from \"../../../components/form/SchemaForm/SchemaFormBody\";\nimport { useSchemaForm } from \"../../../hooks\";\nimport { PathParamEditor } from \"./PathParamEditor\";\n\n// Lazy load Monaco Editor for better initial bundle size\nconst MonacoEditor = lazy(\n () => import(\"../../../components/monaco/MonacoEditor\"),\n);\n\n// Empty schema fallback\nconst emptySchema = {\n _shape: {},\n toZod: () => ({}) as any,\n omit: () => emptySchema,\n} as unknown as ObjectSchema<any>;\n\ninterface RequestPanelProps {\n endpoint: RequestSchema | null;\n pathParamKeys: string[];\n pathParams: Record<string, string>;\n onPathParamChange: (key: string, value: string) => void;\n requestBody: string;\n onRequestBodyChange: (body: string) => void;\n hasRequestBody: boolean;\n}\n\nexport function RequestPanel({\n endpoint,\n pathParamKeys,\n pathParams,\n onPathParamChange,\n requestBody,\n onRequestBodyChange,\n hasRequestBody,\n}: RequestPanelProps) {\n // Filter out path params from requestParams to get only query params\n // requestParams contains BOTH path params and query params, but path params\n // are already handled by PathParamEditor\n const queryParamsSchema = useMemo(() => {\n if (!endpoint?.requestParams) return emptySchema;\n if (pathParamKeys.length === 0) return endpoint.requestParams;\n\n // Omit path param keys from the schema to get only query params\n try {\n return endpoint.requestParams.omit(\n ...(pathParamKeys as [string, ...string[]]),\n );\n } catch {\n // If omit fails (e.g., keys don't exist), return the original\n return endpoint.requestParams;\n }\n }, [endpoint, pathParamKeys]);\n\n // Create a schema form for the query params\n const paramsForm = useSchemaForm({\n schema: queryParamsSchema,\n onSubmit: () => {},\n mode: \"edit\",\n });\n\n // Check if there are any query params (after filtering out path params)\n const hasQueryParams = useMemo(() => {\n return Object.keys(queryParamsSchema._shape ?? {}).length > 0;\n }, [queryParamsSchema]);\n\n if (!endpoint) {\n return (\n <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n Select an endpoint to configure the request\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col h-full overflow-auto p-4\">\n <div className=\"space-y-6\">\n {/* Path Parameters */}\n <PathParamEditor\n paramKeys={pathParamKeys}\n values={pathParams}\n onChange={onPathParamChange}\n />\n\n {/* Query Parameters from Schema */}\n {hasQueryParams && (\n <div className=\"space-y-3\">\n <Label className=\"text-sm font-medium\">Query Parameters</Label>\n <SchemaFormBody form={paramsForm} />\n </div>\n )}\n\n {/* Request Body */}\n {hasRequestBody && (\n <div className=\"space-y-3\">\n <Label className=\"text-sm font-medium\">Request Body</Label>\n <div className=\"h-64 rounded-md border overflow-hidden\">\n <Suspense\n fallback={\n <div className=\"flex items-center justify-center h-full\">\n <ActivityIndicator size=\"md\" color=\"primary\" />\n </div>\n }\n >\n <MonacoEditor\n value={requestBody}\n onChange={onRequestBodyChange}\n language=\"json\"\n />\n </Suspense>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { FormControl, Label, TextInput } from \"../../../components\";\n\ninterface PathParamEditorProps {\n paramKeys: string[];\n values: Record<string, string>;\n onChange: (key: string, value: string) => void;\n}\n\nexport function PathParamEditor({\n paramKeys,\n values,\n onChange,\n}: PathParamEditorProps) {\n if (paramKeys.length === 0) {\n return null;\n }\n\n return (\n <div className=\"space-y-3\">\n <Label className=\"text-sm font-medium\">Path Parameters</Label>\n {paramKeys.map((key) => (\n <FormControl key={key} label={`:${key}`} hint={`Value for ${key}`}>\n <TextInput\n value={values[key] ?? \"\"}\n onChange={(e) => onChange(key, e.target.value)}\n placeholder={`Enter ${key}`}\n />\n </FormControl>\n ))}\n </div>\n );\n}\n","import { lazy, Suspense, useMemo, useState } from \"react\";\nimport { ActivityIndicator } from \"../../../components\";\nimport { cn } from \"../../../styling/cn\";\nimport type { HttpResponse } from \"../hooks/useHttpToolRequest\";\n\n// Lazy load Monaco Editor for better initial bundle size\nconst MonacoEditor = lazy(\n () => import(\"../../../components/monaco/MonacoEditor\"),\n);\n\ninterface ResponsePanelProps {\n response: HttpResponse | null;\n error: string | null;\n isLoading: boolean;\n}\n\nfunction getStatusColor(status: number): string {\n if (status === 0) return \"text-muted-foreground\";\n if (status >= 200 && status < 300)\n return \"text-green-600 dark:text-green-400\";\n if (status >= 300 && status < 400) return \"text-blue-600 dark:text-blue-400\";\n if (status >= 400 && status < 500)\n return \"text-orange-600 dark:text-orange-400\";\n return \"text-red-600 dark:text-red-400\";\n}\n\nfunction StatusBadge({\n status,\n statusText,\n}: {\n status: number;\n statusText: string;\n}) {\n const colorClass = getStatusColor(status);\n return (\n <span className={cn(\"font-medium\", colorClass)}>\n {status} {statusText}\n </span>\n );\n}\n\nexport function ResponsePanel({\n response,\n error,\n isLoading,\n}: ResponsePanelProps) {\n const [showHeaders, setShowHeaders] = useState(false);\n\n const formattedBody = useMemo(() => {\n if (!response?.data) return \"\";\n if (typeof response.data === \"string\") return response.data;\n try {\n return JSON.stringify(response.data, null, 2);\n } catch {\n return String(response.data);\n }\n }, [response]);\n\n if (isLoading) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full gap-2 text-muted-foreground\">\n <ActivityIndicator size=\"lg\" color=\"primary\" />\n <span className=\"text-sm\">Sending request...</span>\n </div>\n );\n }\n\n if (error && !response) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4\">\n <div className=\"text-destructive font-medium mb-2\">Request Failed</div>\n <div className=\"text-sm text-muted-foreground text-center\">{error}</div>\n </div>\n );\n }\n\n if (!response) {\n return (\n <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n Response will appear here\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col h-full\">\n {/* Status Bar */}\n <div className=\"flex items-center justify-between px-4 py-2 border-b bg-muted/30\">\n <div className=\"flex items-center gap-4\">\n <StatusBadge\n status={response.status}\n statusText={response.statusText}\n />\n <span className=\"text-sm text-muted-foreground\">\n {response.time}ms\n </span>\n </div>\n <button\n type=\"button\"\n onClick={() => setShowHeaders(!showHeaders)}\n className=\"text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n {showHeaders ? \"Hide Headers\" : \"Show Headers\"}\n </button>\n </div>\n\n {/* Headers Section */}\n {showHeaders && (\n <div className=\"p-4 border-b bg-muted/20 max-h-40 overflow-auto\">\n <div className=\"text-sm font-medium mb-2\">Response Headers</div>\n <div className=\"text-xs font-mono space-y-1\">\n {Object.entries(response.headers).map(([key, value]) => (\n <div key={key} className=\"flex\">\n <span className=\"text-muted-foreground mr-2\">{key}:</span>\n <span className=\"text-foreground break-all\">{value}</span>\n </div>\n ))}\n {Object.keys(response.headers).length === 0 && (\n <div className=\"text-muted-foreground\">No headers</div>\n )}\n </div>\n </div>\n )}\n\n {/* Response Body */}\n <div className=\"flex-1 min-h-0\">\n {formattedBody ? (\n <Suspense\n fallback={\n <div className=\"flex items-center justify-center h-full\">\n <ActivityIndicator size=\"md\" color=\"primary\" />\n </div>\n }\n >\n <MonacoEditor\n value={formattedBody}\n onChange={() => {}} // Read-only, but Monaco requires onChange\n language=\"json\"\n />\n </Suspense>\n ) : (\n <div className=\"flex items-center justify-center h-full text-muted-foreground\">\n No response body\n </div>\n )}\n </div>\n\n {/* Error Message */}\n {error && (\n <div className=\"p-4 border-t bg-destructive/10 text-destructive text-sm\">\n {error}\n </div>\n )}\n </div>\n );\n}\n","import type { RequestSchema } from \"@nubase/core\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nexport interface HttpResponse {\n status: number;\n statusText: string;\n data: any;\n time: number;\n headers: Record<string, string>;\n}\n\nexport interface EndpointOption {\n key: string;\n endpoint: RequestSchema;\n label: string;\n}\n\nexport interface UseHttpToolRequestOptions {\n apiEndpoints: Record<string, RequestSchema>;\n apiBaseUrl: string;\n}\n\nexport interface UseHttpToolRequestResult {\n // Endpoint selection\n selectedEndpointKey: string | null;\n selectedEndpoint: RequestSchema | null;\n endpointOptions: EndpointOption[];\n selectEndpoint: (key: string | null) => void;\n\n // Path parameters\n pathParams: Record<string, string>;\n setPathParam: (key: string, value: string) => void;\n pathParamKeys: string[];\n\n // Query parameters\n hasQueryParams: boolean;\n\n // Request body\n requestBody: string;\n setRequestBody: (body: string) => void;\n hasRequestBody: boolean;\n\n // Whether the endpoint has any configurable params (path, query, or body)\n hasAnyParams: boolean;\n\n // Response\n response: HttpResponse | null;\n isLoading: boolean;\n error: string | null;\n\n // Actions\n executeRequest: () => Promise<void>;\n clearResponse: () => void;\n}\n\n/**\n * Extracts path parameter keys from a URL path.\n * Example: \"/tickets/:id\" => [\"id\"]\n */\nfunction extractPathParams(path: string): string[] {\n const matches = path.match(/:(\\w+)/g);\n return matches ? matches.map((p) => p.slice(1)) : [];\n}\n\n/**\n * Builds a URL by replacing path parameters with their values.\n */\nfunction buildUrl(path: string, params: Record<string, string>): string {\n return path.replace(/:(\\w+)/g, (_, key) => {\n const value = params[key];\n return value !== undefined && value !== \"\"\n ? encodeURIComponent(value)\n : `:${key}`;\n });\n}\n\n/**\n * Creates a label from an endpoint key and schema.\n * Example: \"getTicket\" with path \"/tickets/:id\" => \"GET /tickets/:id (getTicket)\"\n */\nfunction createEndpointLabel(_key: string, endpoint: RequestSchema): string {\n return `${endpoint.method} ${endpoint.path}`;\n}\n\nexport function useHttpToolRequest(\n options: UseHttpToolRequestOptions,\n): UseHttpToolRequestResult {\n const { apiEndpoints, apiBaseUrl } = options;\n\n // State\n const [selectedEndpointKey, setSelectedEndpointKey] = useState<string | null>(\n null,\n );\n const [pathParams, setPathParams] = useState<Record<string, string>>({});\n const [requestBody, setRequestBody] = useState<string>(\"{}\");\n const [response, setResponse] = useState<HttpResponse | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Derived values\n const endpointOptions = useMemo<EndpointOption[]>(() => {\n return Object.entries(apiEndpoints).map(([key, endpoint]) => ({\n key,\n endpoint,\n label: createEndpointLabel(key, endpoint),\n }));\n }, [apiEndpoints]);\n\n const selectedEndpoint = useMemo(() => {\n if (!selectedEndpointKey) return null;\n return apiEndpoints[selectedEndpointKey] ?? null;\n }, [apiEndpoints, selectedEndpointKey]);\n\n const pathParamKeys = useMemo(() => {\n if (!selectedEndpoint) return [];\n return extractPathParams(selectedEndpoint.path);\n }, [selectedEndpoint]);\n\n const hasRequestBody = useMemo(() => {\n if (!selectedEndpoint) return false;\n return (\n selectedEndpoint.requestBody !== undefined &&\n [\"POST\", \"PUT\", \"PATCH\"].includes(selectedEndpoint.method)\n );\n }, [selectedEndpoint]);\n\n // Check if there are query params (requestParams minus path params)\n const hasQueryParams = useMemo(() => {\n if (!selectedEndpoint?.requestParams) return false;\n const requestParamKeys = Object.keys(\n selectedEndpoint.requestParams._shape ?? {},\n );\n // Query params are requestParams that are not path params\n const queryParamKeys = requestParamKeys.filter(\n (key) => !pathParamKeys.includes(key),\n );\n return queryParamKeys.length > 0;\n }, [selectedEndpoint, pathParamKeys]);\n\n // Check if endpoint has any configurable params at all\n const hasAnyParams = useMemo(() => {\n return pathParamKeys.length > 0 || hasQueryParams || hasRequestBody;\n }, [pathParamKeys, hasQueryParams, hasRequestBody]);\n\n // Actions\n const selectEndpoint = useCallback((key: string | null) => {\n setSelectedEndpointKey(key);\n setPathParams({});\n setRequestBody(\"{}\");\n setResponse(null);\n setError(null);\n }, []);\n\n const setPathParam = useCallback((key: string, value: string) => {\n setPathParams((prev) => ({\n ...prev,\n [key]: value,\n }));\n }, []);\n\n const clearResponse = useCallback(() => {\n setResponse(null);\n setError(null);\n }, []);\n\n const executeRequest = useCallback(async () => {\n if (!selectedEndpoint) {\n setError(\"No endpoint selected\");\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n const startTime = performance.now();\n\n try {\n // Build the URL with path params\n const builtPath = buildUrl(selectedEndpoint.path, pathParams);\n const fullUrl = `${apiBaseUrl}${builtPath}`;\n\n // Prepare request options\n const fetchOptions: RequestInit = {\n method: selectedEndpoint.method,\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n\n // Add body for POST/PUT/PATCH requests\n if (hasRequestBody && requestBody.trim()) {\n try {\n // Validate JSON before sending\n JSON.parse(requestBody);\n fetchOptions.body = requestBody;\n } catch (_parseError) {\n setError(\"Invalid JSON in request body\");\n setIsLoading(false);\n return;\n }\n }\n\n // Execute the request\n const fetchResponse = await fetch(fullUrl, fetchOptions);\n const endTime = performance.now();\n\n // Parse response headers\n const responseHeaders: Record<string, string> = {};\n fetchResponse.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n // Parse response body\n let responseData: any;\n const contentType = fetchResponse.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n responseData = await fetchResponse.json();\n } else {\n responseData = await fetchResponse.text();\n }\n\n setResponse({\n status: fetchResponse.status,\n statusText: fetchResponse.statusText,\n data: responseData,\n time: Math.round(endTime - startTime),\n headers: responseHeaders,\n });\n } catch (fetchError) {\n const endTime = performance.now();\n setError(\n fetchError instanceof Error ? fetchError.message : \"Request failed\",\n );\n setResponse({\n status: 0,\n statusText: \"Network Error\",\n data: null,\n time: Math.round(endTime - startTime),\n headers: {},\n });\n } finally {\n setIsLoading(false);\n }\n }, [selectedEndpoint, pathParams, requestBody, apiBaseUrl, hasRequestBody]);\n\n return {\n selectedEndpointKey,\n selectedEndpoint,\n endpointOptions,\n selectEndpoint,\n pathParams,\n setPathParam,\n pathParamKeys,\n hasQueryParams,\n requestBody,\n setRequestBody,\n hasRequestBody,\n hasAnyParams,\n response,\n isLoading,\n error,\n executeRequest,\n clearResponse,\n };\n}\n","import { indexRoute } from \"./index/index-route\";\nimport { resourceRoute } from \"./resources/resource-route\";\nimport { appShellRoute, rootRoute, workspaceRoute } from \"./root\";\nimport { createSigninRoute } from \"./signin/signin-route\";\nimport { createSignupRoute } from \"./signup/signup-route\";\nimport { httpToolRoute } from \"./tools/http-tool-route\";\n\n// Create root-level auth routes (not under workspace)\nconst signinRoute = createSigninRoute(rootRoute);\nconst signupRoute = createSignupRoute(rootRoute);\n\nexport const routeTree = rootRoute.addChildren([\n // Root-level auth routes\n signinRoute,\n signupRoute,\n // Workspace routes\n workspaceRoute.addChildren([\n appShellRoute.addChildren([indexRoute, resourceRoute, httpToolRoute]),\n ]),\n]);\n","import { useQueryClient } from \"@tanstack/react-query\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { resourceActionsExecutor } from \"../../actions/ResourceActionsExecutor\";\nimport { commandRegistry } from \"../../commands\";\nimport type { NubaseFrontendConfig } from \"../../config/nubase-frontend-config\";\nimport type { NubaseContextData } from \"../../context/types\";\nimport { HttpClient } from \"../../http/http-client\";\nimport {\n createTypedApiClient,\n type ErrorListener,\n} from \"../../http/typed-api-client\";\nimport {\n cleanupKeybindings,\n defaultKeybindings,\n keybindingManager,\n registerKeybindings,\n} from \"../../keybindings\";\nimport { NavigationHistoryTracker } from \"../../navigation/navigation-history-tracker\";\nimport { router } from \"../../routes/router\";\nimport { useDialog } from \"../floating/dialog\";\nimport { useModal } from \"../floating/modal\";\nimport {\n initializeNubaseApp,\n type NubaseInitializationData,\n} from \"./initializeNubaseApp\";\n\nexport interface UseNubaseContextOptions {\n config: NubaseFrontendConfig;\n}\n\nexport interface UseNubaseContextResult {\n data: NubaseContextData | null;\n isLoading: boolean;\n error: Error | null;\n retry: () => void;\n}\n\n/**\n * Hook that manages the initialization of the Nubase app context\n * Handles async theme loading and other initialization tasks\n */\nexport function useCreateNubaseContext({\n config,\n}: UseNubaseContextOptions): UseNubaseContextResult {\n const [initializationData, setInitializationData] =\n useState<NubaseInitializationData | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const [activeThemeId, setActiveThemeId] = useState<string>(\"\");\n const modal = useModal();\n const dialog = useDialog();\n const queryClient = useQueryClient();\n\n // Create httpClient inside the hook\n const httpClient = useMemo(() => {\n return new HttpClient({\n baseUrl: config.apiBaseUrl,\n });\n }, [config.apiBaseUrl]);\n\n // Create navigation history tracker\n const navigationHistoryTracker = useMemo(() => {\n return new NavigationHistoryTracker(router);\n }, []);\n\n const initialize = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const initData = await initializeNubaseApp({ config, httpClient });\n setInitializationData(initData);\n setActiveThemeId(initData.defaultThemeId);\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error(\"Failed to initialize Nubase app\");\n setError(error);\n console.error(\"Failed to initialize Nubase app:\", error);\n } finally {\n setIsLoading(false);\n }\n }, [config, httpClient]);\n\n useEffect(() => {\n initialize();\n }, [initialize]);\n\n // Create the mutable, stateful NubaseContextData\n const nubaseContextData = useMemo(() => {\n if (!initializationData) return null;\n\n // Create typed API client if endpoints are provided\n let typedApiClient: any = httpClient;\n if (initializationData.config.apiEndpoints) {\n try {\n const errorListener: ErrorListener = (error) => {\n console.error(\"API request failed:\", error);\n };\n\n typedApiClient = createTypedApiClient(\n httpClient,\n initializationData.config.apiEndpoints,\n errorListener,\n );\n } catch (error) {\n console.warn(\"Failed to create typed API client:\", error);\n }\n }\n\n const nubaseContextDataInternal: NubaseContextData = {\n config: initializationData.config,\n commands: commandRegistry,\n resourceActions: resourceActionsExecutor,\n keybindings:\n initializationData.config.keybindings || defaultKeybindings.get(),\n http: typedApiClient,\n modal,\n dialog,\n queryClient,\n theming: {\n themeIds: initializationData.themeIds,\n themeMap: initializationData.themeMap,\n activeThemeId,\n setActiveThemeId: (themeId: string) => {\n if (initializationData.themeIds.includes(themeId)) {\n setActiveThemeId(themeId);\n } else {\n console.warn(`Theme ID \"${themeId}\" is not defined in the config.`);\n }\n },\n },\n router,\n navigationHistory: navigationHistoryTracker,\n params: undefined,\n authentication: initializationData.config.authentication || null,\n // Workspace is extracted dynamically from router state when needed\n // Use getWorkspaceFromRouter helper or context.router.state for access\n workspace: null,\n };\n\n return nubaseContextDataInternal;\n }, [\n initializationData,\n activeThemeId,\n httpClient,\n navigationHistoryTracker,\n modal,\n dialog,\n queryClient,\n ]);\n\n // Initialize command system and register keybindings when nubaseContextData is available\n useEffect(() => {\n if (nubaseContextData) {\n // Set command registry context\n commandRegistry.setContext(nubaseContextData);\n\n // Set resource actions executor context\n resourceActionsExecutor.setContext(nubaseContextData);\n\n // Set keybinding manager context\n keybindingManager.setContext(nubaseContextData);\n\n // Register keybindings\n registerKeybindings(nubaseContextData.keybindings);\n }\n }, [nubaseContextData]);\n\n // Update DOM attribute when activeThemeId changes\n useEffect(() => {\n if (activeThemeId) {\n document.documentElement.setAttribute(\"data-theme\", activeThemeId);\n }\n }, [activeThemeId]);\n\n // Cleanup function to remove theme variables, keybindings, and navigation tracker when unmounting\n useEffect(() => {\n return () => {\n const existingStyle = document.getElementById(\"nubase-theme-variables\");\n if (existingStyle) {\n existingStyle.remove();\n }\n cleanupKeybindings();\n navigationHistoryTracker.dispose();\n };\n }, [navigationHistoryTracker]);\n\n return {\n data: nubaseContextData,\n isLoading,\n error,\n retry: initialize,\n };\n}\n","import type { NubaseContextData } from \"../context/types\";\nimport type { ResourceAction, ResourceActionExecutionContext } from \"./types\";\n\n/**\n * Interface for resource actions executor\n */\nexport interface ResourceActionsExecutor {\n execute: (\n action: ResourceAction,\n resourceType: string,\n selectedIds: (string | number)[],\n ) => Promise<void>;\n}\n\n/**\n * Implementation of resource actions executor\n */\nclass ResourceActionsExecutorImpl implements ResourceActionsExecutor {\n private context: NubaseContextData | null = null;\n\n setContext(context: NubaseContextData) {\n this.context = context;\n }\n\n async execute(\n action: ResourceAction,\n resourceType: string,\n selectedIds: (string | number)[],\n ): Promise<void> {\n if (action.disabled) {\n return;\n }\n\n try {\n const executionContext: ResourceActionExecutionContext = {\n resourceType,\n selectedIds,\n context: this.context,\n };\n\n await action.onExecute(executionContext);\n } catch (error) {\n console.error(`Error executing resource action \"${action.id}\":`, error);\n throw error;\n }\n }\n}\n\nexport const resourceActionsExecutor = new ResourceActionsExecutorImpl();\n","import axios, { AxiosError } from \"axios\";\nimport {\n ClientNetworkError,\n ServerNetworkError,\n} from \"../utils/network-errors\";\n\nexport interface HttpResponse<T = any> {\n status: number;\n data: T;\n}\n\nexport interface HttpRequestConfig {\n headers?: Record<string, string>;\n timeout?: number;\n params?: Record<string, any>;\n}\n\nexport class HttpClient {\n private baseUrl: string;\n\n constructor({ baseUrl = \"\" }: { baseUrl?: string }) {\n this.baseUrl = baseUrl;\n }\n\n private async request<T>(\n url: string,\n method: string,\n data?: any,\n config: HttpRequestConfig = {},\n ): Promise<HttpResponse<T>> {\n const fullUrl = this.baseUrl ? `${this.baseUrl}${url}` : url;\n\n try {\n const response = await axios({\n url: fullUrl,\n method,\n data,\n headers: config.headers,\n timeout: config.timeout,\n params: config.params,\n withCredentials: true, // Required for sending cookies in cross-origin requests\n });\n\n return {\n status: response.status,\n data: response.data,\n };\n } catch (error) {\n if (error instanceof AxiosError) {\n // Check if we have a response (server error) or no response (network error)\n if (error.response) {\n // Server responded with error status\n throw new ServerNetworkError(\n `Server error ${error.response.status} for ${method} ${url}: ${error.response.statusText}`,\n {\n endpoint: url,\n method,\n statusCode: error.response.status,\n responseText: error.response.statusText,\n responseData: error.response.data,\n },\n );\n }\n if (error.request) {\n // Request was made but no response received\n throw ClientNetworkError.fromNetworkFailure(error, {\n endpoint: url,\n method,\n });\n }\n // Something happened in setting up the request\n throw ClientNetworkError.fromNetworkFailure(error, {\n endpoint: url,\n method,\n });\n }\n // Re-throw non-axios errors\n throw error;\n }\n }\n\n async get<T>(\n url: string,\n config?: HttpRequestConfig,\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"GET\", undefined, config);\n }\n\n async post<T>(\n url: string,\n data?: any,\n config?: HttpRequestConfig,\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"POST\", data, config);\n }\n\n async put<T>(\n url: string,\n data?: any,\n config?: HttpRequestConfig,\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"PUT\", data, config);\n }\n\n async patch<T>(\n url: string,\n data?: any,\n config?: HttpRequestConfig,\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"PATCH\", data, config);\n }\n\n async delete<T>(\n url: string,\n data?: any,\n config?: HttpRequestConfig,\n ): Promise<HttpResponse<T>> {\n return this.request<T>(url, \"DELETE\", data, config);\n }\n}\n","import type { ZodError } from \"zod\";\n\nexport interface ParseErrorDetail {\n path: string;\n message: string;\n code: string;\n expected?: string;\n received?: string;\n}\n\nexport interface NetworkErrorOptions {\n endpoint: string;\n method: string;\n statusCode?: number;\n responseText?: string;\n}\n\n/**\n * Base class for all network-related errors\n */\nexport abstract class NetworkError extends Error {\n public readonly endpoint: string;\n public readonly method: string;\n public readonly timestamp: Date;\n\n constructor(message: string, options: NetworkErrorOptions) {\n super(message);\n this.name = this.constructor.name;\n this.endpoint = options.endpoint;\n this.method = options.method;\n this.timestamp = new Date();\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Error thrown when client-side validation fails before making a network request\n */\nexport class ClientNetworkError extends NetworkError {\n // Custom inspect method for Node.js and some browser consoles\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n return this.toJSON();\n }\n\n // For browsers that support console formatting\n get [Symbol.toStringTag]() {\n return JSON.stringify(this.toJSON(), null, 2);\n }\n public readonly phase:\n | \"request-validation\"\n | \"response-validation\"\n | \"network-failure\";\n public readonly parseErrors?: ParseErrorDetail[];\n public readonly originalError?: unknown;\n public readonly zodError?: ZodError;\n\n constructor(\n message: string,\n options: NetworkErrorOptions & {\n phase: \"request-validation\" | \"response-validation\" | \"network-failure\";\n parseErrors?: ParseErrorDetail[];\n originalError?: unknown;\n zodError?: ZodError;\n },\n ) {\n super(message, options);\n this.phase = options.phase;\n this.parseErrors = options.parseErrors;\n this.originalError = options.originalError;\n this.zodError = options.zodError;\n }\n\n toString(): string {\n const details = [];\n\n details.push(`${this.name}: ${this.message}`);\n details.push(` Endpoint: ${this.method} ${this.endpoint}`);\n details.push(` Phase: ${this.phase}`);\n details.push(` Timestamp: ${this.timestamp.toISOString()}`);\n\n if (this.zodError) {\n details.push(` Zod Error: ${this.zodError.toString()}`);\n if (this.zodError.issues.length > 0) {\n details.push(\" Validation Issues:\");\n this.zodError.issues.forEach((issue, index) => {\n const path = issue.path.length > 0 ? issue.path.join(\".\") : \"root\";\n details.push(\n ` ${index + 1}. Path: ${path}, Message: ${issue.message}, Code: ${issue.code}`,\n );\n });\n }\n }\n\n if (this.parseErrors && this.parseErrors.length > 0) {\n details.push(\" Parse Errors:\");\n this.parseErrors.forEach((error, index) => {\n details.push(\n ` ${index + 1}. Path: ${error.path}, Message: ${error.message}, Code: ${error.code}`,\n );\n if (error.expected) details.push(` Expected: ${error.expected}`);\n if (error.received) details.push(` Received: ${error.received}`);\n });\n }\n\n if (this.originalError) {\n const errorStr =\n this.originalError instanceof Error\n ? this.originalError.toString()\n : String(this.originalError);\n details.push(` Original Error: ${errorStr}`);\n }\n\n return details.join(\"\\n\");\n }\n\n toJSON() {\n const result: any = {\n name: this.name,\n message: this.message,\n endpoint: this.endpoint,\n method: this.method,\n phase: this.phase,\n timestamp: this.timestamp.toISOString(),\n };\n\n if (this.zodError) {\n // Use the same beautiful format as ZodError\n result.zodError = this.zodError.issues;\n }\n\n if (this.parseErrors && this.parseErrors.length > 0) {\n result.parseErrors = this.parseErrors;\n }\n\n if (this.originalError) {\n result.originalError =\n this.originalError instanceof Error\n ? {\n name: this.originalError.name,\n message: this.originalError.message,\n }\n : this.originalError;\n }\n\n return result;\n }\n\n /**\n * Creates a ClientNetworkError for network failures (no response from server)\n */\n static fromNetworkFailure(\n error: unknown,\n options: NetworkErrorOptions,\n ): ClientNetworkError {\n const message =\n error instanceof Error\n ? `Network request failed for ${options.method} ${options.endpoint}: ${error.message}`\n : `Network request failed for ${options.method} ${options.endpoint}`;\n\n return new ClientNetworkError(message, {\n ...options,\n phase: \"network-failure\",\n originalError: error,\n });\n }\n}\n\n/**\n * Error thrown when the server returns an error response\n */\nexport class ServerNetworkError extends NetworkError {\n // Custom inspect method for Node.js and some browser consoles\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n return this.toJSON();\n }\n\n // For browsers that support console formatting\n get [Symbol.toStringTag]() {\n return JSON.stringify(this.toJSON(), null, 2);\n }\n public readonly statusCode: number;\n public readonly responseText?: string;\n public readonly responseData?: unknown;\n\n constructor(\n message: string,\n options: NetworkErrorOptions & {\n statusCode: number;\n responseText?: string;\n responseData?: unknown;\n },\n ) {\n super(message, options);\n this.statusCode = options.statusCode;\n this.responseText = options.responseText;\n this.responseData = options.responseData;\n }\n\n toString(): string {\n const details = [];\n\n details.push(`${this.name}: ${this.message}`);\n details.push(` Endpoint: ${this.method} ${this.endpoint}`);\n details.push(` Status Code: ${this.statusCode}`);\n details.push(` Timestamp: ${this.timestamp.toISOString()}`);\n\n if (this.responseText) {\n details.push(` Response Text: ${this.responseText}`);\n }\n\n if (this.responseData) {\n try {\n const dataStr =\n typeof this.responseData === \"string\"\n ? this.responseData\n : JSON.stringify(this.responseData, null, 2);\n details.push(` Response Data: ${dataStr}`);\n } catch {\n details.push(` Response Data: ${String(this.responseData)}`);\n }\n }\n\n return details.join(\"\\n\");\n }\n\n toJSON() {\n const result: any = {\n name: this.name,\n message: this.message,\n endpoint: this.endpoint,\n method: this.method,\n statusCode: this.statusCode,\n timestamp: this.timestamp.toISOString(),\n };\n\n if (this.responseText) {\n result.responseText = this.responseText;\n }\n\n if (this.responseData) {\n result.responseData = this.responseData;\n }\n\n return result;\n }\n\n /**\n * Creates a ServerNetworkError from an HTTP response\n */\n static fromResponse(\n response: Response,\n responseText?: string,\n responseData?: unknown,\n ): ServerNetworkError {\n const message = `Server error ${response.status} for ${response.url}: ${response.statusText}`;\n\n return new ServerNetworkError(message, {\n endpoint: response.url,\n method: \"GET\", // Will be overridden by caller with actual method\n statusCode: response.status,\n responseText,\n responseData,\n });\n }\n\n /**\n * Checks if this is a specific type of server error\n */\n isNotFound(): boolean {\n return this.statusCode === 404;\n }\n\n isUnauthorized(): boolean {\n return this.statusCode === 401;\n }\n\n isForbidden(): boolean {\n return this.statusCode === 403;\n }\n\n isServerError(): boolean {\n return this.statusCode >= 500;\n }\n\n isClientError(): boolean {\n return this.statusCode >= 400 && this.statusCode < 500;\n }\n}\n\n/**\n * Type guard to check if an error is a NetworkError\n */\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError;\n}\n\n/**\n * Type guard to check if an error is a ClientNetworkError\n */\nexport function isClientNetworkError(\n error: unknown,\n): error is ClientNetworkError {\n return error instanceof ClientNetworkError;\n}\n\n/**\n * Type guard to check if an error is a ServerNetworkError\n */\nexport function isServerNetworkError(\n error: unknown,\n): error is ServerNetworkError {\n return error instanceof ServerNetworkError;\n}\n\n/**\n * Helper to get a user-friendly error message\n */\nexport function getNetworkErrorMessage(error: unknown): string {\n if (isClientNetworkError(error)) {\n if (error.phase === \"network-failure\") {\n return \"Unable to connect to the server. Please check your internet connection.\";\n }\n if (error.zodError && error.zodError.issues.length > 0) {\n const firstIssue = error.zodError.issues[0];\n if (firstIssue) {\n return `Validation error: ${firstIssue.message}`;\n }\n }\n if (error.parseErrors && error.parseErrors.length > 0) {\n const firstError = error.parseErrors[0];\n if (firstError) {\n return `Validation error: ${firstError.message}`;\n }\n }\n return error.message;\n }\n\n if (isServerNetworkError(error)) {\n if (error.isNotFound()) {\n return \"The requested resource was not found.\";\n }\n if (error.isUnauthorized()) {\n return \"You are not authorized to perform this action.\";\n }\n if (error.isServerError()) {\n return \"A server error occurred. Please try again later.\";\n }\n return error.message;\n }\n\n if (error instanceof Error) {\n return error.message;\n }\n\n return \"An unexpected error occurred.\";\n}\n","import type {\n InferRequestBody,\n InferRequestParams,\n InferResponseBody,\n ObjectSchema,\n RequestSchema,\n} from \"@nubase/core\";\nimport { ClientNetworkError } from \"../utils/network-errors\";\nimport type {\n HttpClient,\n HttpRequestConfig,\n HttpResponse,\n} from \"./http-client\";\n\ntype TypedMethodOptions<T extends RequestSchema> = {\n params?: InferRequestParams<T>;\n data?: InferRequestBody<T>;\n config?: HttpRequestConfig;\n};\n\nexport type ErrorListener = (error: Error) => void;\n\n// Helper type to create method signature based on HTTP method and request body\ntype MethodSignature<T extends RequestSchema> = T[\"method\"] extends \"GET\"\n ? (\n options?: Omit<TypedMethodOptions<T>, \"data\">,\n ) => Promise<HttpResponse<InferResponseBody<T>>>\n : T[\"requestBody\"] extends ObjectSchema\n ? (\n options?: TypedMethodOptions<T>,\n ) => Promise<HttpResponse<InferResponseBody<T>>>\n : (\n options?: Omit<TypedMethodOptions<T>, \"data\">,\n ) => Promise<HttpResponse<InferResponseBody<T>>>;\n\n// Main typed API client structure - simple flat endpoints\ntype TypedApiMethods<T> = {\n [K in keyof T]: T[K] extends RequestSchema ? MethodSignature<T[K]> : never;\n};\n\nexport class TypedApiClient<T> {\n private httpClient: HttpClient;\n private endpoints: T;\n private errorListener?: ErrorListener;\n\n constructor(\n httpClient: HttpClient,\n endpoints: T,\n errorListener?: ErrorListener,\n ) {\n this.httpClient = httpClient;\n this.endpoints = endpoints;\n this.errorListener = errorListener;\n\n // Create flattened API client structure\n this.createFlatApiClient();\n }\n\n private createFlatApiClient() {\n for (const [key, schema] of Object.entries(\n this.endpoints as Record<string, any>,\n )) {\n if (this.isRequestSchema(schema)) {\n (this as any)[key] = async (options: TypedMethodOptions<any> = {}) => {\n return this.executeRequest(schema as RequestSchema, options);\n };\n }\n }\n }\n\n private async executeRequest(\n schema: RequestSchema,\n options: TypedMethodOptions<any>,\n ): Promise<HttpResponse<any>> {\n try {\n const { params, data, config } = options;\n\n // Replace path parameters if they exist\n let path = schema.path;\n if (params && typeof params === \"object\") {\n for (const [key, value] of Object.entries(params)) {\n path = path.replace(`:${key}`, String(value));\n }\n }\n\n // Validate request body if provided\n if (data && schema.requestBody) {\n const result = schema.requestBody.toZod().safeParse(data);\n if (!result.success) {\n throw new ClientNetworkError(\n `Request validation failed for ${schema.method} ${path}`,\n {\n endpoint: path,\n method: schema.method,\n phase: \"request-validation\",\n zodError: result.error,\n },\n );\n }\n }\n\n // Make the HTTP request\n let response: HttpResponse<any>;\n switch (schema.method) {\n case \"GET\":\n response = await this.httpClient.get(path, config);\n break;\n case \"POST\":\n response = await this.httpClient.post(path, data, config);\n break;\n case \"PUT\":\n response = await this.httpClient.put(path, data, config);\n break;\n case \"PATCH\":\n response = await this.httpClient.patch(path, data, config);\n break;\n case \"DELETE\":\n response = await this.httpClient.delete(path, data, config);\n break;\n default:\n throw new Error(`Unsupported HTTP method: ${schema.method}`);\n }\n\n // Validate response body\n if (schema.responseBody && response.data !== undefined) {\n const result = schema.responseBody.toZod().safeParse(response.data);\n if (!result.success) {\n throw new ClientNetworkError(\n `Response validation failed for ${schema.method} ${path}`,\n {\n endpoint: path,\n method: schema.method,\n phase: \"response-validation\",\n zodError: result.error,\n },\n );\n }\n return {\n ...response,\n data: result.data,\n };\n }\n\n return response;\n } catch (error) {\n if (this.errorListener && error instanceof Error) {\n this.errorListener(error);\n }\n throw error;\n }\n }\n\n private isRequestSchema(obj: any): obj is RequestSchema {\n return (\n obj &&\n typeof obj === \"object\" &&\n \"method\" in obj &&\n \"path\" in obj &&\n \"requestParams\" in obj &&\n \"responseBody\" in obj\n );\n }\n}\n\nexport function createTypedApiClient<T>(\n httpClient: HttpClient,\n endpoints: T,\n errorListener?: ErrorListener,\n): TypedApiClient<T> & TypedApiMethods<T> {\n return new TypedApiClient(\n httpClient,\n endpoints,\n errorListener,\n ) as TypedApiClient<T> & TypedApiMethods<T>;\n}\n","import type { Keybinding } from \"../commands/types\";\n\n/**\n * Default keybindings for Nubase applications\n * These provide core functionality that most apps will want\n */\nconst DEFAULT_KEYBINDINGS: Keybinding[] = [\n {\n key: [\"meta+k\", \"ctrl+k\"],\n command: \"workbench.runCommand\",\n commandArgs: {},\n },\n];\n\n/**\n * Keybinding extend options\n */\nexport interface KeybindingExtendOptions {\n /**\n * Additional keybindings to add\n */\n add?: Keybinding[];\n /**\n * List of command IDs to remove from defaults\n * More explicit and works better with action-based keybindings\n */\n removeCommands?: string[];\n}\n\n/**\n * Helper to get the identifier from a keybinding (command or action ID)\n */\nfunction getKeybindingIdentifier(keybinding: Keybinding): string {\n if (\"command\" in keybinding) {\n return keybinding.command;\n } else if (\"action\" in keybinding) {\n return keybinding.action.id;\n }\n throw new Error(\"Unknown keybinding type\");\n}\n\n/**\n * Creates an extended keybinding configuration from the defaults\n * @param options Configuration for extending keybindings\n * @returns Array of keybindings with extensions applied\n */\nfunction extendKeybindings(\n options: KeybindingExtendOptions = {},\n): Keybinding[] {\n const { add = [], removeCommands = [] } = options;\n\n // Start with defaults\n let result = [...DEFAULT_KEYBINDINGS];\n\n // Remove commands explicitly\n if (removeCommands.length > 0) {\n result = result.filter((binding) => {\n const identifier = getKeybindingIdentifier(binding);\n return !removeCommands.includes(identifier);\n });\n }\n\n // Add new keybindings\n result.push(...add);\n\n return result;\n}\n\n/**\n * Default keybindings object with extend functionality\n */\nexport const defaultKeybindings = {\n /**\n * Get the default keybindings array\n */\n get(): Keybinding[] {\n return [...DEFAULT_KEYBINDINGS];\n },\n\n /**\n * Extend the default keybindings with additional or overridden bindings\n * @param options Configuration for extending keybindings\n * @returns Array of keybindings with extensions applied\n *\n * @example\n * // Add a new action-based keybinding (recommended)\n * const keybindings = defaultKeybindings.extend({\n * add: [{\n * key: \"meta+/\",\n * action: createCommandAction({ id: \"theme-toggle\" }, workbenchSetTheme)\n * }]\n * });\n *\n * @example\n * // Add a legacy command-based keybinding\n * const keybindings = defaultKeybindings.extend({\n * add: [{ key: \"meta+/\", command: \"workbench.setTheme\", commandArgs: {} }]\n * });\n *\n * @example\n * // Remove default keybindings and add custom ones\n * const keybindings = defaultKeybindings.extend({\n * removeCommands: [\"workbench.runCommand\"],\n * add: [{\n * key: \"meta+shift+p\",\n * action: createCommandAction({ id: \"custom-cmd\" }, myCustomCommand)\n * }]\n * });\n */\n extend: extendKeybindings,\n};\n","import type { ActionKeybinding, Keybinding } from \"../commands/types\";\nimport type { KeySequence, ParsedKeybinding } from \"./types\";\n\n/**\n * Type guard to check if a keybinding uses commands\n */\nfunction isCommandKeybinding(keybinding: Keybinding): keybinding is {\n key: string | string[];\n command: string;\n commandArgs?: Record<string, unknown>;\n} {\n return \"command\" in keybinding;\n}\n\n/**\n * Type guard to check if a keybinding uses actions\n */\nfunction isActionKeybinding(\n keybinding: Keybinding,\n): keybinding is ActionKeybinding {\n return \"action\" in keybinding;\n}\n\n/**\n * Parses a key string into a KeySequence\n * Supports VS Code format: \"ctrl+alt+k\", \"meta+shift+p\", etc.\n */\nexport function parseKeySequence(keyString: string): KeySequence {\n const parts = keyString.toLowerCase().split(\"+\");\n const sequence: KeySequence = {\n key: \"\",\n };\n\n for (const part of parts) {\n switch (part.trim()) {\n case \"ctrl\":\n case \"control\":\n sequence.ctrl = true;\n break;\n case \"meta\":\n case \"cmd\":\n case \"command\":\n sequence.meta = true;\n break;\n case \"alt\":\n case \"option\":\n sequence.alt = true;\n break;\n case \"shift\":\n sequence.shift = true;\n break;\n default:\n sequence.key = part.trim();\n }\n }\n\n return sequence;\n}\n\n/**\n * Parses a keybinding definition into ParsedKeybinding\n * Supports chords like \"ctrl+k ctrl+c\" (space-separated sequences)\n * Supports alternative keys as array: [\"meta+k\", \"ctrl+k\"]\n * Supports both command-based and action-based keybindings\n */\nexport function parseKeybinding(keybinding: Keybinding): ParsedKeybinding[] {\n const keys = Array.isArray(keybinding.key)\n ? keybinding.key\n : [keybinding.key];\n\n return keys.map((keyString) => {\n // Split by spaces for chord sequences\n const sequences = keyString\n .split(/\\s+/)\n .map((seq) => seq.trim())\n .filter((seq) => seq.length > 0);\n\n if (isActionKeybinding(keybinding)) {\n // Action-based keybinding\n return {\n key: keyString,\n sequences,\n action: keybinding.action,\n };\n } else if (isCommandKeybinding(keybinding)) {\n // Command-based keybinding (legacy)\n return {\n key: keyString,\n sequences,\n command: keybinding.command,\n commandArgs: keybinding.commandArgs,\n };\n } else {\n throw new Error(\"Unknown keybinding type\");\n }\n });\n}\n\n/**\n * Creates a normalized key string from a KeyboardEvent\n * Matches VS Code's key format\n */\nexport function normalizeEventKey(event: KeyboardEvent): string {\n const parts: string[] = [];\n\n if (event.metaKey) parts.push(\"meta\");\n if (event.ctrlKey) parts.push(\"ctrl\");\n if (event.altKey) parts.push(\"alt\");\n if (event.shiftKey) parts.push(\"shift\");\n\n // Handle special keys\n let key = event.key.toLowerCase();\n\n // Map special keys to VS Code format\n switch (key) {\n case \" \":\n key = \"space\";\n break;\n case \"arrowup\":\n key = \"up\";\n break;\n case \"arrowdown\":\n key = \"down\";\n break;\n case \"arrowleft\":\n key = \"left\";\n break;\n case \"arrowright\":\n key = \"right\";\n break;\n case \"escape\":\n key = \"escape\";\n break;\n case \"enter\":\n key = \"enter\";\n break;\n case \"backspace\":\n key = \"backspace\";\n break;\n case \"delete\":\n key = \"delete\";\n break;\n case \"tab\":\n key = \"tab\";\n break;\n }\n\n parts.push(key);\n return parts.join(\"+\");\n}\n\n/**\n * Checks if a key sequence matches a parsed sequence\n */\nexport function matchesKeySequence(\n eventKey: string,\n targetSequence: string,\n): boolean {\n return eventKey === targetSequence.toLowerCase();\n}\n","import type { Action } from \"../actions/types\";\n\n/**\n * Legacy parsed keybinding using string-based commands\n */\nexport interface ParsedCommandKeybinding {\n /** The original key string */\n key: string;\n /** Array of key sequences for chords (e.g., [\"ctrl+k\", \"ctrl+c\"]) */\n sequences: string[];\n /** The command to execute */\n command: string;\n /** Optional arguments for the command */\n commandArgs?: Record<string, unknown>;\n}\n\n/**\n * Modern parsed keybinding using typed actions\n */\nexport interface ParsedActionKeybinding {\n /** The original key string */\n key: string;\n /** Array of key sequences for chords (e.g., [\"ctrl+k\", \"ctrl+c\"]) */\n sequences: string[];\n /** The action to execute */\n action: Action;\n}\n\n/**\n * Union type supporting both legacy command and modern action keybindings\n */\nexport type ParsedKeybinding = ParsedCommandKeybinding | ParsedActionKeybinding;\n\n/**\n * Type guard to check if a parsed keybinding uses commands\n */\nexport function isParsedCommandKeybinding(\n keybinding: ParsedKeybinding,\n): keybinding is ParsedCommandKeybinding {\n return \"command\" in keybinding;\n}\n\n/**\n * Type guard to check if a parsed keybinding uses actions\n */\nexport function isParsedActionKeybinding(\n keybinding: ParsedKeybinding,\n): keybinding is ParsedActionKeybinding {\n return \"action\" in keybinding;\n}\n\nexport interface KeySequence {\n /** Modifier keys */\n meta?: boolean;\n ctrl?: boolean;\n alt?: boolean;\n shift?: boolean;\n /** The main key */\n key: string;\n}\n\nexport interface KeybindingState {\n /** Current chord sequence being built */\n currentChord: string[];\n /** Timeout for chord completion */\n chordTimeout: number | null;\n /** Whether we're waiting for the next key in a chord */\n waitingForChord: boolean;\n}\n","import { executeAction } from \"../actions/executeAction\";\nimport { commandRegistry } from \"../commands/CommandRegistry\";\nimport type { Keybinding } from \"../commands/types\";\nimport type { NubaseContextData } from \"../context/types\";\nimport {\n matchesKeySequence,\n normalizeEventKey,\n parseKeybinding,\n} from \"./keyParser\";\nimport type { KeybindingState, ParsedKeybinding } from \"./types\";\nimport { isParsedActionKeybinding, isParsedCommandKeybinding } from \"./types\";\n\n/**\n * Manages keybindings with VS Code-style syntax support including chords\n */\nclass KeybindingManager {\n private keybindings: ParsedKeybinding[] = [];\n private state: KeybindingState = {\n currentChord: [],\n chordTimeout: null,\n waitingForChord: false,\n };\n private context: NubaseContextData | null = null;\n\n // Chord timeout duration (ms) - matches VS Code's behavior\n private readonly CHORD_TIMEOUT = 1000;\n\n /**\n * Sets the Nubase context for action execution\n */\n setContext(context: NubaseContextData | null): void {\n this.context = context;\n }\n\n /**\n * Registers an array of keybindings\n */\n registerKeybindings(keybindings: Keybinding[]): void {\n // Clear existing keybindings\n this.keybindings = [];\n this.resetChordState();\n\n // Parse and register new keybindings\n for (const keybinding of keybindings) {\n const parsedKeybindings = parseKeybinding(keybinding);\n this.keybindings.push(...parsedKeybindings);\n }\n }\n\n /**\n * Handles keyboard events and executes matching commands\n */\n async handleKeyboardEvent(event: KeyboardEvent): Promise<boolean> {\n // Don't handle events in input fields unless specifically configured\n const target = event.target as HTMLElement;\n if (this.shouldIgnoreEvent(target)) {\n return false;\n }\n\n const eventKey = normalizeEventKey(event);\n\n // If we're waiting for a chord, try to complete it\n if (this.state.waitingForChord) {\n return await this.handleChordCompletion(event, eventKey);\n }\n\n // Look for matching keybindings\n const matches = this.findMatches(eventKey);\n\n if (matches.length === 0) {\n return false;\n }\n\n // If there's an exact single-sequence match, execute it\n const exactMatch = matches.find(\n (match) =>\n match.sequences.length === 1 &&\n match.sequences[0] &&\n matchesKeySequence(eventKey, match.sequences[0]),\n );\n\n if (exactMatch && matches.length === 1) {\n event.preventDefault();\n event.stopPropagation();\n await this.executeKeybinding(exactMatch);\n return true;\n }\n\n // Check if any matches require multiple sequences (chords)\n const chordMatches = matches.filter((match) => match.sequences.length > 1);\n\n if (chordMatches.length > 0) {\n // Start chord sequence\n event.preventDefault();\n event.stopPropagation();\n this.startChordSequence(eventKey);\n return true;\n }\n\n // If we have an exact single match among multiple possibilities\n if (exactMatch) {\n event.preventDefault();\n event.stopPropagation();\n await this.executeKeybinding(exactMatch);\n return true;\n }\n\n return false;\n }\n\n /**\n * Finds all keybindings that could match the current key\n */\n private findMatches(eventKey: string): ParsedKeybinding[] {\n return this.keybindings.filter((binding) =>\n binding.sequences.some((seq, index) => {\n if (index === 0) {\n return matchesKeySequence(eventKey, seq);\n }\n return false;\n }),\n );\n }\n\n /**\n * Handles completion of a chord sequence\n */\n private async handleChordCompletion(\n event: KeyboardEvent,\n eventKey: string,\n ): Promise<boolean> {\n const currentSequenceIndex = this.state.currentChord.length;\n\n // Find keybindings that match our current chord progress\n const potentialMatches = this.keybindings.filter((binding) => {\n // Must have more sequences than our current progress\n if (binding.sequences.length <= currentSequenceIndex) {\n return false;\n }\n\n // All previous sequences must match our chord history\n for (let i = 0; i < currentSequenceIndex; i++) {\n const chordKey = this.state.currentChord[i];\n const bindingSeq = binding.sequences[i];\n if (\n !chordKey ||\n !bindingSeq ||\n !matchesKeySequence(chordKey, bindingSeq)\n ) {\n return false;\n }\n }\n\n // Current key must match the next sequence\n const nextSequence = binding.sequences[currentSequenceIndex];\n return nextSequence ? matchesKeySequence(eventKey, nextSequence) : false;\n });\n\n if (potentialMatches.length === 0) {\n // No matches, reset chord state\n this.resetChordState();\n return false;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n // Add current key to chord history\n this.state.currentChord.push(eventKey);\n\n // Check if any match is complete\n const completeMatch = potentialMatches.find(\n (match) => match.sequences.length === this.state.currentChord.length,\n );\n\n if (completeMatch) {\n // Execute the completed chord\n await this.executeKeybinding(completeMatch);\n this.resetChordState();\n return true;\n }\n\n // Continue waiting for more keys in the chord\n this.resetChordTimeout();\n return true;\n }\n\n /**\n * Starts a new chord sequence\n */\n private startChordSequence(eventKey: string): void {\n this.state.currentChord = [eventKey];\n this.state.waitingForChord = true;\n this.resetChordTimeout();\n }\n\n /**\n * Resets the chord timeout\n */\n private resetChordTimeout(): void {\n if (this.state.chordTimeout) {\n window.clearTimeout(this.state.chordTimeout);\n }\n\n this.state.chordTimeout = window.setTimeout(() => {\n this.resetChordState();\n }, this.CHORD_TIMEOUT);\n }\n\n /**\n * Resets the chord state\n */\n private resetChordState(): void {\n this.state.currentChord = [];\n this.state.waitingForChord = false;\n\n if (this.state.chordTimeout) {\n window.clearTimeout(this.state.chordTimeout);\n this.state.chordTimeout = null;\n }\n }\n\n /**\n * Executes a command or action for a matching keybinding\n */\n private async executeKeybinding(keybinding: ParsedKeybinding): Promise<void> {\n try {\n if (isParsedActionKeybinding(keybinding)) {\n // Execute action-based keybinding\n await executeAction(keybinding.action, this.context);\n } else if (isParsedCommandKeybinding(keybinding)) {\n // Execute legacy command-based keybinding\n await commandRegistry.execute(\n keybinding.command,\n keybinding.commandArgs,\n );\n } else {\n console.error(\"Unknown keybinding type:\", keybinding);\n }\n } catch (error) {\n const identifier = isParsedActionKeybinding(keybinding)\n ? `action \"${keybinding.action.id}\"`\n : `command \"${keybinding.command}\"`;\n console.error(`Failed to execute ${identifier}:`, error);\n }\n }\n\n /**\n * Determines if we should ignore a keyboard event based on the target element\n */\n private shouldIgnoreEvent(target: HTMLElement): boolean {\n // Ignore events in input fields, textareas, and contenteditable elements\n const tagName = target.tagName.toLowerCase();\n\n if (tagName === \"input\" || tagName === \"textarea\") {\n return true;\n }\n\n if (target.contentEditable === \"true\") {\n return true;\n }\n\n // Ignore if any parent has contenteditable\n let parent = target.parentElement;\n while (parent) {\n if (parent.contentEditable === \"true\") {\n return true;\n }\n parent = parent.parentElement;\n }\n\n return false;\n }\n\n /**\n * Clears all registered keybindings\n */\n clear(): void {\n this.keybindings = [];\n this.resetChordState();\n }\n\n /**\n * Gets all registered keybindings\n */\n getKeybindings(): ParsedKeybinding[] {\n return [...this.keybindings];\n }\n}\n\nexport const keybindingManager = new KeybindingManager();\n","import type { Keybinding } from \"../commands/types\";\nimport { keybindingManager } from \"./KeybindingManager\";\n\nlet isListenerAttached = false;\n\n/**\n * Registers keybindings and sets up the global keyboard event listener\n * This replaces the hook-based approach with a centralized system\n */\nexport function registerKeybindings(keybindings: Keybinding[]): void {\n // Register the keybindings with the manager\n keybindingManager.registerKeybindings(keybindings);\n\n // Attach global keyboard listener if not already attached\n if (!isListenerAttached) {\n document.addEventListener(\"keydown\", handleGlobalKeydown, true);\n isListenerAttached = true;\n }\n}\n\n/**\n * Global keyboard event handler\n */\nasync function handleGlobalKeydown(event: KeyboardEvent): Promise<void> {\n await keybindingManager.handleKeyboardEvent(event);\n}\n\n/**\n * Cleans up the keybinding system\n * Call this when unmounting the app or when you want to remove all keybindings\n */\nexport function cleanupKeybindings(): void {\n keybindingManager.clear();\n\n if (isListenerAttached) {\n document.removeEventListener(\"keydown\", handleGlobalKeydown, true);\n isListenerAttached = false;\n }\n}\n\n/**\n * Updates keybindings without removing the global listener\n * Useful for hot-reloading keybinding configurations\n */\nexport function updateKeybindings(keybindings: Keybinding[]): void {\n keybindingManager.registerKeybindings(keybindings);\n}\n","import type { AnyRouter } from \"@tanstack/react-router\";\n\nexport interface NavigationHistoryEntry {\n id: string;\n path: string;\n pathname: string;\n search: string;\n searchParams: Record<string, any>;\n hash: string;\n timestamp: number;\n title: string;\n}\n\nexport class NavigationHistoryTracker {\n private history: NavigationHistoryEntry[] = [];\n private maxHistorySize = 50;\n private unsubscribe: (() => void) | null = null;\n private router: AnyRouter;\n private lastEntryId: string | null = null;\n private historyIdCounter = 0;\n\n constructor(router: AnyRouter) {\n this.router = router;\n this.startTracking();\n\n // Add current location to history on initialization\n this.addCurrentLocation();\n }\n\n private formatTitle(\n pathname: string,\n searchParams: Record<string, any>,\n ): string {\n let title = pathname;\n\n // Add search params if present\n if (Object.keys(searchParams).length > 0) {\n const searchString = new URLSearchParams(searchParams).toString();\n if (searchString) {\n title += `?${searchString}`;\n }\n }\n\n return title;\n }\n\n private parseSearchParams(search: string): Record<string, any> {\n if (!search || search === \"?\") return {};\n\n const params: Record<string, any> = {};\n const searchParams = new URLSearchParams(search);\n\n for (const [key, value] of searchParams.entries()) {\n params[key] = value;\n }\n\n return params;\n }\n\n private addCurrentLocation() {\n const location = this.router.state.location;\n this.addEntry(location);\n }\n\n private addEntry(location: any) {\n const searchParams = this.parseSearchParams(location.search);\n const title = this.formatTitle(location.pathname, searchParams);\n\n // Create a unique ID based on the full location\n const entryId = `${location.pathname}${location.search}${location.hash}`;\n\n // Don't add duplicate consecutive entries\n if (this.lastEntryId === entryId) {\n return;\n }\n\n const entry: NavigationHistoryEntry = {\n id: `history-${this.historyIdCounter++}`,\n path: `${location.pathname}${location.search}${location.hash}`,\n pathname: location.pathname,\n search: location.search || \"\",\n searchParams,\n hash: location.hash || \"\",\n timestamp: Date.now(),\n title,\n };\n\n this.history.unshift(entry);\n this.lastEntryId = entryId;\n\n // Maintain max history size\n if (this.history.length > this.maxHistorySize) {\n this.history = this.history.slice(0, this.maxHistorySize);\n }\n }\n\n private startTracking() {\n // Subscribe to route changes - use onResolved to capture completed navigations\n this.unsubscribe = this.router.subscribe(\"onResolved\", (event) => {\n // Only track when the path actually changed\n if (event.pathChanged || event.hrefChanged) {\n this.addEntry(event.toLocation);\n }\n });\n }\n\n public getHistory(): NavigationHistoryEntry[] {\n return [...this.history];\n }\n\n public clearHistory() {\n this.history = [];\n this.historyIdCounter = 0;\n this.lastEntryId = null;\n }\n\n public dispose() {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n public navigateToEntry(entry: NavigationHistoryEntry) {\n // Navigate using pathname and search params separately\n const searchParams =\n Object.keys(entry.searchParams).length > 0\n ? entry.searchParams\n : undefined;\n\n this.router.navigate({\n to: entry.pathname as any,\n search: searchParams as any,\n hash: entry.hash || undefined,\n });\n }\n\n public formatTimeAgo(timestamp: number): string {\n const seconds = Math.floor((Date.now() - timestamp) / 1000);\n\n if (seconds < 60) return \"just now\";\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;\n return `${Math.floor(seconds / 86400)}d ago`;\n }\n}\n","import type { NubaseTheme } from \"../theme\";\n\nexport const dark: NubaseTheme = {\n name: \"Dark\",\n type: \"dark\",\n id: \"dark\",\n colors: {\n // Base colors\n background: \"oklch(0.145 0 0)\",\n // Using rgb for foreground to fix 1Password autofill detection (it fails with oklch)\n foreground: \"#fafafa\",\n\n // Card colors\n card: \"oklch(0.205 0 0)\",\n cardForeground: \"oklch(0.985 0 0)\",\n\n // Popover colors\n popover: \"oklch(0.205 0 0)\",\n popoverForeground: \"oklch(0.985 0 0)\",\n\n // Primary colors\n primary: \"oklch(0.922 0 0)\",\n primaryForeground: \"oklch(0.205 0 0)\",\n\n // Secondary colors\n secondary: \"oklch(0.269 0 0)\",\n secondaryForeground: \"oklch(0.985 0 0)\",\n\n // Muted colors\n muted: \"oklch(0.269 0 0)\",\n mutedForeground: \"oklch(0.708 0 0)\",\n\n // Accent colors\n accent: \"oklch(0.269 0 0)\",\n accentForeground: \"oklch(0.985 0 0)\",\n\n // Destructive colors\n destructive: \"oklch(0.704 0.191 22.216)\",\n destructiveForeground: \"oklch(0.985 0 0)\",\n\n // Border and input colors\n border: \"oklch(1 0 0 / 10%)\",\n input: \"oklch(1 0 0 / 15%)\",\n ring: \"oklch(0.556 0 0)\",\n\n // Chart colors\n chart1: \"oklch(0.488 0.243 264.376)\",\n chart2: \"oklch(0.696 0.17 162.48)\",\n chart3: \"oklch(0.769 0.188 70.08)\",\n chart4: \"oklch(0.627 0.265 303.9)\",\n chart5: \"oklch(0.645 0.246 16.439)\",\n\n // Sidebar colors\n sidebar: \"oklch(0.205 0 0)\",\n sidebarForeground: \"oklch(0.985 0 0)\",\n sidebarPrimary: \"oklch(0.488 0.243 264.376)\",\n sidebarPrimaryForeground: \"oklch(0.985 0 0)\",\n sidebarAccent: \"oklch(0.269 0 0)\",\n sidebarAccentForeground: \"oklch(0.985 0 0)\",\n sidebarBorder: \"oklch(1 0 0 / 10%)\",\n sidebarRing: \"oklch(0.556 0 0)\",\n },\n};\n","import type { NubaseTheme } from \"../theme\";\n\nexport const dracula: NubaseTheme = {\n name: \"Dracula\",\n type: \"dark\",\n id: \"dracula\",\n colors: {\n // Base colors - Dracula background and foreground\n background: \"oklch(0.15 0.01 249.79)\", // #282a36 dark purple-gray\n // Using hex for foreground to fix 1Password autofill detection (it fails with oklch)\n foreground: \"#f8f8f2\", // light gray\n\n // Card colors\n card: \"oklch(0.18 0.015 249.79)\", // #44475a slightly lighter\n cardForeground: \"oklch(0.95 0.01 249.79)\", // #f8f8f2\n\n // Popover colors\n popover: \"oklch(0.18 0.015 249.79)\", // #44475a\n popoverForeground: \"oklch(0.95 0.01 249.79)\", // #f8f8f2\n\n // Primary colors - Dracula purple\n primary: \"oklch(0.60 0.20 307)\", // #bd93f9 purple\n primaryForeground: \"oklch(0.15 0.01 249.79)\", // dark background\n\n // Secondary colors - Dracula comment gray\n secondary: \"oklch(0.45 0.015 249.79)\", // #6272a4 blue-gray\n secondaryForeground: \"oklch(0.95 0.01 249.79)\", // #f8f8f2\n\n // Muted colors\n muted: \"oklch(0.22 0.015 249.79)\", // darker gray\n mutedForeground: \"oklch(0.65 0.01 249.79)\", // medium gray\n\n // Accent colors - Dracula pink\n accent: \"oklch(0.65 0.25 340)\", // #ff79c6 pink\n accentForeground: \"oklch(0.15 0.01 249.79)\", // dark background\n\n // Destructive colors - Dracula red\n destructive: \"oklch(0.60 0.25 25)\", // #ff5555 red\n destructiveForeground: \"oklch(0.95 0.01 249.79)\", // #f8f8f2\n\n // Border and input colors\n border: \"oklch(0.35 0.015 249.79)\", // medium gray\n input: \"oklch(0.35 0.015 249.79)\", // medium gray\n ring: \"oklch(0.60 0.20 307)\", // purple ring\n\n // Chart colors - Dracula palette\n chart1: \"oklch(0.60 0.20 307)\", // #bd93f9 purple\n chart2: \"oklch(0.65 0.25 340)\", // #ff79c6 pink\n chart3: \"oklch(0.70 0.25 162)\", // #50fa7b green\n chart4: \"oklch(0.75 0.20 60)\", // #f1fa8c yellow\n chart5: \"oklch(0.65 0.25 25)\", // #ff5555 red\n\n // Sidebar colors\n sidebar: \"oklch(0.15 0.01 249.79)\", // #282a36 dark background\n sidebarForeground: \"oklch(0.95 0.01 249.79)\", // #f8f8f2\n sidebarPrimary: \"oklch(0.60 0.20 307)\", // #bd93f9 purple\n sidebarPrimaryForeground: \"oklch(0.15 0.01 249.79)\", // dark\n sidebarAccent: \"oklch(0.65 0.25 340)\", // #ff79c6 pink\n sidebarAccentForeground: \"oklch(0.15 0.01 249.79)\", // dark\n sidebarBorder: \"oklch(0.35 0.015 249.79)\", // medium gray\n sidebarRing: \"oklch(0.60 0.20 307)\", // purple\n },\n};\n","import type { NubaseTheme } from \"../theme\";\n\nexport const light: NubaseTheme = {\n name: \"Light\",\n type: \"light\",\n id: \"light\",\n colors: {\n // Base colors\n background: \"oklch(1 0 0)\",\n foreground: \"oklch(0.145 0 0)\",\n\n // Card colors\n card: \"oklch(1 0 0)\",\n cardForeground: \"oklch(0.145 0 0)\",\n\n // Popover colors\n popover: \"oklch(1 0 0)\",\n popoverForeground: \"oklch(0.145 0 0)\",\n\n // Primary colors\n primary: \"oklch(0.205 0 0)\",\n primaryForeground: \"oklch(0.985 0 0)\",\n\n // Secondary colors\n secondary: \"oklch(0.97 0 0)\",\n secondaryForeground: \"oklch(0.205 0 0)\",\n\n // Muted colors\n muted: \"oklch(0.97 0 0)\",\n mutedForeground: \"oklch(0.556 0 0)\",\n\n // Accent colors\n accent: \"oklch(0.97 0 0)\",\n accentForeground: \"oklch(0.205 0 0)\",\n\n // Destructive colors\n destructive: \"oklch(0.577 0.245 27.325)\",\n destructiveForeground: \"oklch(0.985 0 0)\",\n\n // Border and input colors\n border: \"oklch(0.922 0 0)\",\n input: \"oklch(0.922 0 0)\",\n ring: \"oklch(0.708 0 0)\",\n\n // Chart colors\n chart1: \"oklch(0.646 0.222 41.116)\",\n chart2: \"oklch(0.6 0.118 184.704)\",\n chart3: \"oklch(0.398 0.07 227.392)\",\n chart4: \"oklch(0.828 0.189 84.429)\",\n chart5: \"oklch(0.769 0.188 70.08)\",\n\n // Sidebar colors\n sidebar: \"oklch(0.985 0 0)\",\n sidebarForeground: \"oklch(0.145 0 0)\",\n sidebarPrimary: \"oklch(0.205 0 0)\",\n sidebarPrimaryForeground: \"oklch(0.985 0 0)\",\n sidebarAccent: \"oklch(0.97 0 0)\",\n sidebarAccentForeground: \"oklch(0.205 0 0)\",\n sidebarBorder: \"oklch(0.922 0 0)\",\n sidebarRing: \"oklch(0.708 0 0)\",\n },\n};\n","import type { NubaseTheme } from \"../theme\";\n\nexport const terminal: NubaseTheme = {\n name: \"Terminal\",\n type: \"dark\",\n id: \"terminal\",\n colors: {\n // Base colors - Matrix black background with green text\n background: \"oklch(0.05 0 0)\", // #000000 pure black\n // Using hex for foreground to fix 1Password autofill detection (it fails with oklch)\n foreground: \"#00ff00\", // bright green\n\n // Card colors\n card: \"oklch(0.10 0.02 136)\", // very dark green-tinted\n cardForeground: \"oklch(0.80 0.15 136)\", // bright green\n\n // Popover colors\n popover: \"oklch(0.08 0.02 136)\", // darker green-tinted\n popoverForeground: \"oklch(0.80 0.15 136)\", // bright green\n\n // Primary colors - Matrix green\n primary: \"oklch(0.75 0.18 136)\", // #00cc00 Matrix green\n primaryForeground: \"oklch(0.05 0 0)\", // black text\n\n // Secondary colors - darker green\n secondary: \"oklch(0.20 0.08 136)\", // dark green\n secondaryForeground: \"oklch(0.80 0.15 136)\", // bright green\n\n // Muted colors\n muted: \"oklch(0.15 0.05 136)\", // muted dark green\n mutedForeground: \"oklch(0.60 0.12 136)\", // muted green\n\n // Accent colors - phosphor green\n accent: \"oklch(0.85 0.20 136)\", // #33ff33 phosphor green\n accentForeground: \"oklch(0.05 0 0)\", // black\n\n // Destructive colors - Matrix red (error state)\n destructive: \"oklch(0.60 0.25 25)\", // #ff3333 red\n destructiveForeground: \"oklch(0.05 0 0)\", // black\n\n // Border and input colors\n border: \"oklch(0.30 0.10 136)\", // green border\n input: \"oklch(0.25 0.08 136)\", // darker green input\n ring: \"oklch(0.75 0.18 136)\", // Matrix green ring\n\n // Chart colors - Matrix green variations\n chart1: \"oklch(0.75 0.18 136)\", // #00cc00 primary green\n chart2: \"oklch(0.85 0.20 136)\", // #33ff33 bright green\n chart3: \"oklch(0.65 0.15 136)\", // #009900 darker green\n chart4: \"oklch(0.70 0.16 140)\", // slight hue shift\n chart5: \"oklch(0.80 0.19 132)\", // slight hue shift\n\n // Sidebar colors\n sidebar: \"oklch(0.05 0 0)\", // pure black\n sidebarForeground: \"oklch(0.80 0.15 136)\", // bright green\n sidebarPrimary: \"oklch(0.75 0.18 136)\", // Matrix green\n sidebarPrimaryForeground: \"oklch(0.05 0 0)\", // black\n sidebarAccent: \"oklch(0.85 0.20 136)\", // phosphor green\n sidebarAccentForeground: \"oklch(0.05 0 0)\", // black\n sidebarBorder: \"oklch(0.30 0.10 136)\", // green border\n sidebarRing: \"oklch(0.75 0.18 136)\", // Matrix green\n },\n};\n","import { dark } from \"./dark\";\nimport { dracula } from \"./dracula\";\nimport { light } from \"./light\";\nimport { terminal } from \"./terminal\";\n\nexport const themeMap = {\n light: light,\n dark: dark,\n dracula: dracula,\n terminal: terminal,\n} as const;\n\nexport type AvailableThemeId = keyof typeof themeMap;\n","import type { NubaseTheme } from \"./theme\";\n\n/**\n * Converts a theme property name to a CSS variable name\n * Example: \"primaryContainer\" -> \"--primary-container\"\n * Example: \"onPrimaryContainer\" -> \"--on-primary-container\"\n */\nexport function themePropertyToCSSVariable(property: string): string {\n // Convert camelCase to kebab-case\n const kebabCase = property\n .replace(/([A-Z])/g, \"-$1\")\n .toLowerCase()\n .replace(/^-/, \"\"); // Remove leading dash if present\n\n return `--${kebabCase}`;\n}\n\n/**\n * Converts VS Code theme colors object to CSS variable declarations\n */\nexport function generateCSSVariables(colors: Record<string, string>): string {\n return Object.entries(colors)\n .map(\n ([property, value]) =>\n ` ${themePropertyToCSSVariable(property)}: ${value};`,\n )\n .join(\"\\n\");\n}\n\n/**\n * Generates CSS rule for a theme with all its variables\n */\nexport function generateThemeCSS(theme: NubaseTheme): string {\n const cssVariables = generateCSSVariables(theme.colors);\n return ` [data-theme=\"${theme.id}\"] {\\n${cssVariables}\\n }`;\n}\n\n/**\n * Generates CSS for multiple themes\n */\nexport function generateThemesCSS(themes: NubaseTheme[]): string {\n return themes.map((theme) => generateThemeCSS(theme)).join(\"\\n\\n\");\n}\n\n/**\n * Injects theme CSS variables into the DOM\n */\nexport function injectThemeVariables(themes: NubaseTheme[]): void {\n const css = generateThemesCSS(themes);\n\n if (!css.trim()) {\n console.warn(\"No theme CSS generated\");\n return;\n }\n\n // Remove existing theme variables style element if it exists\n const existingStyle = document.getElementById(\"nubase-theme-variables\");\n if (existingStyle) {\n existingStyle.remove();\n }\n\n // Create new style element\n const style = document.createElement(\"style\");\n style.id = \"nubase-theme-variables\";\n style.type = \"text/css\";\n style.textContent = css;\n\n // Insert into document head\n document.head.appendChild(style);\n\n console.log(`Injected ${themes.length} VS Code theme(s) into DOM`);\n}\n","import { injectThemeVariables } from \"../../theming/runtime-theme-generator\";\nimport type { NubaseTheme } from \"../../theming/theme\";\n\n/**\n * Initializes styles by injecting CSS variables derived from themes\n */\nexport async function initializeStyles(themes: NubaseTheme[]): Promise<void> {\n try {\n // Inject the CSS variables into the DOM\n injectThemeVariables(themes);\n } catch (error) {\n console.error(\"Failed to initialize styles:\", error);\n throw error;\n }\n}\n","import { commandRegistry } from \"../../commands\";\nimport { workbenchOpenResourceOperation } from \"../../commands/definitions/workbench.openResource\";\nimport { workbenchOpenResourceOperationInModal } from \"../../commands/definitions/workbench.openResourceInModal\";\nimport { workbenchRunCommand } from \"../../commands/definitions/workbench.runCommand\";\nimport { workbenchSetTheme } from \"../../commands/definitions/workbench.setTheme\";\nimport { workbenchViewHistory } from \"../../commands/definitions/workbench.viewHistory\";\nimport type { NubaseFrontendConfig } from \"../../config/nubase-frontend-config\";\nimport type { HttpClient } from \"../../http/http-client\";\nimport type { NubaseTheme } from \"../../theming/theme\";\nimport { themeMap } from \"../../theming/themes\";\nimport { initializeStyles } from \"./initializeStyles\";\n\nexport interface InitializeNubaseAppOptions {\n config: NubaseFrontendConfig;\n httpClient: HttpClient;\n}\n\nexport interface NubaseInitializationData {\n config: NubaseFrontendConfig;\n themeIds: string[];\n themeMap: Record<string, NubaseTheme>;\n defaultThemeId: string;\n}\n\n/**\n * Initializes the Nubase app with all required services and themes\n */\nexport async function initializeNubaseApp({\n config,\n}: InitializeNubaseAppOptions): Promise<NubaseInitializationData> {\n console.info(\"Initializing Nubase app...\");\n\n // Get theme configuration\n const themeIds = config.themeIds || [\"light\", \"dark\"];\n const defaultThemeId = config.defaultThemeId || \"dark\";\n\n // Filter available themes based on config\n const themesToBeImported = themeIds\n .map((id) => themeMap[id as keyof typeof themeMap])\n .filter((theme): theme is NubaseTheme => theme !== undefined);\n\n // Initialize styles with the loaded themes (one-time injection)\n await initializeStyles(themesToBeImported);\n\n // Register default commands (one-time registration)\n commandRegistry.register(workbenchRunCommand);\n commandRegistry.register(workbenchSetTheme);\n commandRegistry.register(workbenchOpenResourceOperationInModal);\n commandRegistry.register(workbenchOpenResourceOperation);\n commandRegistry.register(workbenchViewHistory);\n\n console.info(\"Nubase app initialized\");\n\n return {\n config,\n themeIds,\n themeMap,\n defaultThemeId,\n };\n}\n","import type React from \"react\";\nimport type { FC } from \"react\";\nimport type { NubaseFrontendConfig } from \"../../config/nubase-frontend-config\";\nimport { ActivityIndicator } from \"../activity-indicator\";\nimport { NubaseContextProvider } from \"./NubaseContextProvider\";\nimport { useCreateNubaseContext } from \"./useCreateNubaseContext\";\n\nexport type ServicesProviderProps = {\n config: NubaseFrontendConfig;\n};\n\nexport const ServicesProvider: FC<\n React.PropsWithChildren<ServicesProviderProps>\n> = ({ config, children }) => {\n const {\n data: nubaseContext,\n isLoading,\n error,\n } = useCreateNubaseContext({\n config,\n });\n\n if (error) {\n return (\n <div className=\"flex items-center justify-center min-h-screen\">\n <div className=\"text-center\">\n <h2 className=\"text-lg font-semibold text-red-600 mb-2\">\n Failed to initialize Nubase app\n </h2>\n <p className=\"text-sm text-gray-600\">{error.message}</p>\n </div>\n </div>\n );\n }\n\n if (isLoading || !nubaseContext) {\n return (\n <div className=\"flex items-center justify-center min-h-screen\">\n <div className=\"text-center\">\n <ActivityIndicator\n size=\"xl\"\n color=\"primary\"\n aria-label=\"Initializing Nubase app\"\n className=\"mx-auto mb-2\"\n />\n <p className=\"text-sm text-muted-foreground\">\n Initializing Nubase app...\n </p>\n </div>\n </div>\n );\n }\n\n return (\n <NubaseContextProvider context={nubaseContext}>\n {children}\n </NubaseContextProvider>\n );\n};\n","import {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../styling/cn\";\nimport { type Button, buttonVariants } from \"../buttons/Button/Button\";\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n );\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />;\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n} & Pick<React.ComponentProps<typeof Button>, \"variant\"> &\n React.ComponentProps<\"a\">;\n\nfunction PaginationLink({\n className,\n isActive,\n variant = \"secondary\",\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n buttonVariants({\n variant: isActive ? \"default\" : \"secondary\",\n }),\n \"h-9 w-9\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n className={cn(\"gap-1 px-2.5 sm:pl-2.5 w-auto\", className)}\n {...props}\n >\n <ChevronLeftIcon className=\"h-4 w-4\" />\n <span className=\"hidden sm:block\">Previous</span>\n </PaginationLink>\n );\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n className={cn(\"gap-1 px-2.5 sm:pr-2.5 w-auto\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">Next</span>\n <ChevronRightIcon className=\"h-4 w-4\" />\n </PaginationLink>\n );\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n );\n}\n\n// Enhanced Pagination component with advanced functionality\nexport interface EnhancedPaginationProps\n extends React.HTMLAttributes<HTMLElement> {\n currentPage: number;\n totalPages: number;\n pageSize: number;\n totalItems: number;\n onPageChange: (page: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n pageSizeOptions?: number[];\n showPageSizeSelector?: boolean;\n showInfo?: boolean;\n}\n\nconst EnhancedPagination = React.forwardRef<\n HTMLElement,\n EnhancedPaginationProps\n>(\n (\n {\n className,\n currentPage,\n totalPages,\n pageSize,\n totalItems,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = [10, 25, 50, 100],\n showPageSizeSelector = true,\n showInfo = true,\n ...props\n },\n ref,\n ) => {\n const startItem = Math.min((currentPage - 1) * pageSize + 1, totalItems);\n const endItem = Math.min(currentPage * pageSize, totalItems);\n\n const getVisiblePages = () => {\n const delta = 2;\n const range = [];\n const rangeWithDots = [];\n\n for (\n let i = Math.max(2, currentPage - delta);\n i <= Math.min(totalPages - 1, currentPage + delta);\n i++\n ) {\n range.push(i);\n }\n\n if (currentPage - delta > 2) {\n rangeWithDots.push(1, \"...\");\n } else {\n rangeWithDots.push(1);\n }\n\n rangeWithDots.push(...range);\n\n if (currentPage + delta < totalPages - 1) {\n rangeWithDots.push(\"...\", totalPages);\n } else if (totalPages > 1) {\n rangeWithDots.push(totalPages);\n }\n\n return rangeWithDots;\n };\n\n if (totalPages <= 1 && !showInfo && !showPageSizeSelector) {\n return null;\n }\n\n return (\n <div\n className={cn(\"flex items-center justify-between gap-4 p-4\", className)}\n {...props}\n >\n <div className=\"flex items-center gap-4\">\n {showInfo && (\n <span className=\"text-muted-foreground text-sm\">\n Showing {startItem}-{endItem} of {totalItems} items\n </span>\n )}\n\n {showPageSizeSelector && onPageSizeChange && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-sm\">\n Items per page:\n </span>\n <select\n value={pageSize}\n onChange={(e) => onPageSizeChange(Number(e.target.value))}\n className=\"bg-background border border-border rounded px-2 py-1 text-foreground text-sm focus:border-primary focus:ring-2 focus:ring-primary/10 outline-none h-9\"\n >\n {pageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n )}\n </div>\n\n {totalPages > 1 && (\n <Pagination ref={ref}>\n <PaginationContent>\n <PaginationItem>\n <PaginationPrevious\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n if (currentPage > 1) onPageChange(currentPage - 1);\n }}\n className={\n currentPage === 1 ? \"pointer-events-none opacity-50\" : \"\"\n }\n />\n </PaginationItem>\n\n {getVisiblePages().map((page, index) => (\n <PaginationItem key={index}>\n {page === \"...\" ? (\n <PaginationEllipsis />\n ) : (\n <PaginationLink\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n onPageChange(page as number);\n }}\n isActive={currentPage === page}\n aria-label={`Go to page ${page}`}\n aria-current={currentPage === page ? \"page\" : undefined}\n >\n {page}\n </PaginationLink>\n )}\n </PaginationItem>\n ))}\n\n <PaginationItem>\n <PaginationNext\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n if (currentPage < totalPages) onPageChange(currentPage + 1);\n }}\n className={\n currentPage === totalPages\n ? \"pointer-events-none opacity-50\"\n : \"\"\n }\n />\n </PaginationItem>\n </PaginationContent>\n </Pagination>\n )}\n </div>\n );\n },\n);\n\nEnhancedPagination.displayName = \"EnhancedPagination\";\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n EnhancedPagination,\n};\n","import type * as React from \"react\";\n\nimport { cn } from \"../../styling/cn\";\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-hidden rounded-md border\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","import * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../../styling/cn\";\n\nexport type TabsProps = React.ComponentProps<typeof TabsPrimitive.Root>;\n\nfunction Tabs({ className, ...props }: TabsProps) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n );\n}\n\nexport type TabsListProps = React.ComponentProps<typeof TabsPrimitive.List>;\n\nfunction TabsList({ className, ...props }: TabsListProps) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type TabsTriggerProps = React.ComponentProps<\n typeof TabsPrimitive.Trigger\n>;\n\nfunction TabsTrigger({ className, ...props }: TabsTriggerProps) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type TabsContentProps = React.ComponentProps<\n typeof TabsPrimitive.Content\n>;\n\nfunction TabsContent({ className, ...props }: TabsContentProps) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { Search } from \"lucide-react\";\nimport type React from \"react\";\nimport { forwardRef } from \"react\";\nimport type { NubaseContextData } from \"../../context/types\";\nimport { cn } from \"../../styling/cn\";\n\nexport interface SearchBarProps\n extends Omit<React.ComponentProps<\"button\">, \"onClick\"> {\n context: NubaseContextData;\n placeholder?: string;\n}\n\n/**\n * SearchBar component that triggers the command palette when clicked.\n * Provides a unified search interface for all commands in the application.\n */\nconst SearchBar = forwardRef<HTMLButtonElement, SearchBarProps>(\n (\n { className, context, placeholder = \"Search commands...\", ...props },\n ref,\n ) => {\n const handleClick = () => {\n context.commands.execute(\"workbench.runCommand\");\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-testid=\"command-palette-trigger\"\n className={cn(\n \"flex items-center gap-2 px-3 py-2 min-w-0 flex-1 max-w-md cursor-pointer transition-colors\",\n \"bg-background border border-border rounded-md\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n className,\n )}\n onClick={handleClick}\n aria-label=\"Open command palette\"\n {...props}\n >\n <Search className=\"h-4 w-4 text-muted-foreground shrink-0\" />\n <span className=\"text-sm text-muted-foreground truncate\">\n {placeholder}\n </span>\n <div className=\"ml-auto text-xs text-muted-foreground font-mono\">\n ⌘K\n </div>\n </button>\n );\n },\n);\n\nSearchBar.displayName = \"SearchBar\";\n\nexport { SearchBar };\n","import type React from \"react\";\nimport { forwardRef } from \"react\";\nimport type { NubaseContextData } from \"../../context/types\";\nimport { cn } from \"../../styling/cn\";\nimport { ActionBar } from \"../buttons/ActionBar\";\nimport { UserMenu } from \"../user-avatar\";\nimport { SearchBar } from \"./SearchBar\";\n\nexport interface TopBarProps extends React.HTMLAttributes<HTMLDivElement> {\n context: NubaseContextData;\n}\n\n/**\n * TopBar component that provides global search and actions.\n * Contains a SearchBar for command search and ActionBar for global actions.\n */\nconst TopBar = forwardRef<HTMLDivElement, TopBarProps>(\n ({ className, context, ...props }, ref) => {\n const globalActions = context.config.globalActions || [];\n const hasGlobalActions = globalActions.length > 0;\n const { authentication } = context;\n const authState = authentication?.getState();\n const user = authState?.user;\n\n const handleSignOut = async () => {\n await authentication?.logout();\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-4 px-4 py-2 bg-background border-b border-border\",\n className,\n )}\n {...props}\n >\n {/* App Name */}\n <div className=\"flex items-center\">\n <button\n type=\"button\"\n className=\"text-lg font-semibold text-foreground truncate hover:text-foreground/80 transition-colors cursor-pointer\"\n onClick={() => {\n context.router.navigate({ to: \"/\" });\n }}\n aria-label=\"Navigate to home\"\n >\n {context.config.appName}\n </button>\n </div>\n\n {/* Search Bar */}\n <SearchBar context={context} />\n\n {/* Global Actions */}\n {hasGlobalActions && (\n <div className=\"flex items-center\">\n <ActionBar actions={globalActions} />\n </div>\n )}\n\n {/* Spacer to push user avatar to the right */}\n <div className=\"flex-1\" />\n\n {/* User Menu */}\n {user && (\n <UserMenu\n name={user.displayName}\n email={user.email}\n onSignOut={handleSignOut}\n />\n )}\n </div>\n );\n },\n);\n\nTopBar.displayName = \"TopBar\";\n\nexport { TopBar };\n","import { cn } from \"../../styling/cn\";\n\nexport interface UserAvatarProps {\n /** User's display name or username */\n name: string;\n /** Additional class names */\n className?: string;\n}\n\n/**\n * Get initials from a name (up to 2 characters).\n * Examples:\n * - \"John Doe\" -> \"JD\"\n * - \"admin\" -> \"AD\"\n * - \"A\" -> \"A\"\n */\nexport function getInitials(name: string): string {\n const trimmed = name.trim();\n if (!trimmed) {\n return \"?\";\n }\n const parts = trimmed.split(/\\s+/);\n const firstPart = parts[0];\n const secondPart = parts[1];\n if (\n parts.length >= 2 &&\n firstPart &&\n secondPart &&\n firstPart[0] &&\n secondPart[0]\n ) {\n return (firstPart[0] + secondPart[0]).toUpperCase();\n }\n // Single word: take first two characters\n return trimmed.slice(0, 2).toUpperCase();\n}\n\n/**\n * UserAvatar component that displays user initials in a circle.\n * This is a pure presentational component - wrap it in UserMenu for dropdown functionality.\n */\nexport function UserAvatar({ name, className }: UserAvatarProps) {\n const initials = getInitials(name);\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center w-8 h-8 rounded-full\",\n \"bg-primary text-primary-foreground text-sm font-medium\",\n className,\n )}\n data-testid=\"user-avatar\"\n >\n {initials}\n </div>\n );\n}\n","import { LogOut } from \"lucide-react\";\nimport { cn } from \"../../styling/cn\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../dropdown-menu/DropdownMenu\";\nimport { getInitials } from \"./UserAvatar\";\n\nexport interface UserMenuProps {\n /** User's display name or username */\n name: string;\n /** Optional email to display in dropdown */\n email?: string;\n /** Callback when sign out is clicked */\n onSignOut?: () => void;\n /** Additional class names for the avatar trigger */\n className?: string;\n}\n\n/**\n * UserMenu component that displays a user avatar with a dropdown menu.\n * Clicking the avatar opens a dropdown with user info and sign out option.\n */\nexport function UserMenu({ name, email, onSignOut, className }: UserMenuProps) {\n const initials = getInitials(name);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n \"flex items-center justify-center w-8 h-8 rounded-full\",\n \"bg-primary text-primary-foreground text-sm font-medium\",\n \"hover:opacity-90 focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 focus:ring-offset-background\",\n \"cursor-pointer transition-opacity\",\n className,\n )}\n aria-label=\"User menu\"\n data-testid=\"user-avatar\"\n >\n {initials}\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <DropdownMenuLabel className=\"font-normal\">\n <div className=\"flex flex-col space-y-1\">\n <p className=\"text-sm font-medium leading-none\">{name}</p>\n {email && (\n <p className=\"text-xs leading-none text-muted-foreground\">\n {email}\n </p>\n )}\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={onSignOut}\n className=\"cursor-pointer\"\n data-testid=\"sign-out-button\"\n >\n <LogOut className=\"mr-2 h-4 w-4\" />\n <span>Sign out</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","import * as React from \"react\";\nimport type { IconComponent } from \"../../menu/types\";\nimport { cn } from \"../../styling/cn\";\nimport { Card, CardContent, CardFooter } from \"../card/Card\";\n\ninterface WidgetProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The title of the widget */\n title: string;\n /** Optional icon component (not instantiated) shown before the title */\n icon?: IconComponent;\n /** Optional action elements (e.g., buttons) shown on the right side of the header */\n action?: React.ReactNode;\n /** Optional footer content */\n footer?: React.ReactNode;\n /** The widget content */\n children: React.ReactNode;\n}\n\n/**\n * Widget is a pre-composed Card component for dashboard-style content.\n * It provides a compact header with title, optional icon, and action elements.\n * Widget always includes a border separator between header and content.\n * For layouts without the border, use the Card components directly.\n */\nconst Widget = React.forwardRef<HTMLDivElement, WidgetProps>(\n (\n { title, icon: Icon, action, footer, children, className, ...props },\n ref,\n ) => {\n return (\n <Card ref={ref} className={cn(\"pt-0\", className)} {...props}>\n <div className=\"flex items-center gap-2 border-b px-3 py-2.5\">\n <div className=\"flex items-center gap-1.5 text-[13px] text-muted-foreground\">\n {Icon && <Icon className=\"h-[0.9rem] w-[0.9rem]\" />}\n {title}\n </div>\n {action && (\n <div className=\"ml-auto flex items-center gap-2\">{action}</div>\n )}\n </div>\n <CardContent className=\"px-2 pt-4 sm:px-6 sm:pt-6\">\n {children}\n </CardContent>\n {footer && <CardFooter>{footer}</CardFooter>}\n </Card>\n );\n },\n);\nWidget.displayName = \"Widget\";\n\nexport { Widget, type WidgetProps };\n","import type { IconComponent } from \"../menu/types\";\nimport type {\n DashboardDescriptor,\n DashboardGridConfig,\n WidgetDescriptor,\n} from \"./dashboard-widget\";\n\n/**\n * Dashboard builder that enables chained, type-safe dashboard configuration.\n *\n * The builder pattern enables sequential type inference, solving the circular\n * dependency problem between API endpoints and widget configurations.\n *\n * @example\n * ```typescript\n * const analyticsDashboard = createDashboard(\"analytics\")\n * .withApiEndpoints(apiEndpoints)\n * .withTitle(\"Analytics Dashboard\")\n * .withWidgets([\n * {\n * type: \"series\",\n * id: \"revenue-chart\",\n * title: \"Revenue Trend\",\n * variant: \"area\",\n * endpoint: \"getRevenueChart\", // TypeScript validates this!\n * defaultLayout: { x: 0, y: 0, w: 8, h: 3 },\n * },\n * {\n * type: \"kpi\",\n * id: \"total-revenue\",\n * title: \"Total Revenue\",\n * endpoint: \"getTotalRevenue\", // TypeScript validates this!\n * defaultLayout: { x: 8, y: 0, w: 4, h: 2 },\n * },\n * ]);\n * ```\n */\nclass DashboardBuilder<TId extends string, TApiEndpoints = never> {\n private config: {\n id: TId;\n title?: string;\n icon?: IconComponent;\n apiEndpoints?: TApiEndpoints;\n gridConfig?: DashboardGridConfig;\n };\n\n constructor(id: TId) {\n this.config = { id };\n }\n\n /**\n * Configure API endpoints for type-safe widget endpoint references.\n * This must be called before withWidgets() to enable type checking.\n */\n withApiEndpoints<T>(apiEndpoints: T): DashboardBuilder<TId, T> {\n const builder = new DashboardBuilder<TId, T>(this.config.id);\n builder.config.title = this.config.title;\n builder.config.icon = this.config.icon;\n builder.config.apiEndpoints = apiEndpoints;\n builder.config.gridConfig = this.config.gridConfig;\n return builder;\n }\n\n /**\n * Set the dashboard title.\n */\n withTitle(title: string): this {\n this.config.title = title;\n return this;\n }\n\n /**\n * Set the dashboard icon.\n */\n withIcon(icon: IconComponent): this {\n this.config.icon = icon;\n return this;\n }\n\n /**\n * Configure grid layout options.\n */\n withGridConfig(gridConfig: DashboardGridConfig): this {\n this.config.gridConfig = gridConfig;\n return this;\n }\n\n /**\n * Configure widgets for this dashboard.\n * This is the final step that produces the DashboardDescriptor.\n *\n * TypeScript will validate that each widget's endpoint matches its expected data type:\n * - Series widgets must reference endpoints returning SeriesData\n * - Proportional widgets must reference endpoints returning ProportionalData\n * - KPI widgets must reference endpoints returning KpiData\n * - Table widgets must reference endpoints returning TableData\n */\n withWidgets(\n widgets: WidgetDescriptor<TApiEndpoints>[],\n ): DashboardDescriptor<TApiEndpoints> {\n return {\n id: this.config.id,\n title: this.config.title || this.config.id,\n icon: this.config.icon,\n widgets,\n gridConfig: this.config.gridConfig,\n };\n }\n}\n\n/**\n * Creates a new dashboard builder with the specified ID.\n *\n * The builder pattern enables sequential type inference:\n * 1. First, call `.withApiEndpoints(apiEndpoints)` to provide the API type context\n * 2. Then, configure the dashboard with `.withTitle()`, `.withGridConfig()`, etc.\n * 3. Finally, call `.withWidgets([...])` to define the widgets with type-safe endpoint references\n *\n * @param id Unique identifier for the dashboard\n * @returns A DashboardBuilder instance\n *\n * @example\n * ```typescript\n * import { apiEndpoints } from \"schema\";\n *\n * const salesDashboard = createDashboard(\"sales\")\n * .withApiEndpoints(apiEndpoints)\n * .withTitle(\"Sales Dashboard\")\n * .withGridConfig({ rowHeight: 100 })\n * .withWidgets([\n * {\n * type: \"series\",\n * id: \"revenue\",\n * title: \"Revenue\",\n * variant: \"area\",\n * endpoint: \"getRevenueChart\",\n * defaultLayout: { x: 0, y: 0, w: 8, h: 3 },\n * },\n * ]);\n * ```\n */\nexport function createDashboard<TId extends string>(\n id: TId,\n): DashboardBuilder<TId, never> {\n return new DashboardBuilder(id);\n}\n","import type { ArraySchema, Infer, ObjectSchema } from \"@nubase/core\";\nimport type React from \"react\";\nimport type { ResourceActionExecutionContext } from \"../actions/types\";\nimport type { NubaseContextData } from \"../context/types\";\nimport type { HttpResponse } from \"../http/http-client\";\nimport type { ActionLayout } from \"./action-layout\";\nimport type { BreadcrumbDefinition } from \"./breadcrumb\";\nimport type { ResourceDescriptor } from \"./resource\";\nimport type {\n ResourceCreateView,\n ResourceSearchView,\n ResourceViewView,\n} from \"./view\";\n\n/**\n * Inline action definition for resource actions\n */\nexport type InlineResourceActionConfig<TApiEndpoints> = {\n label?: string;\n icon?: React.ComponentType<{ size?: number; className?: string }>;\n disabled?: boolean;\n variant?: \"default\" | \"destructive\";\n onExecute: (args: {\n selectedIds: (string | number)[];\n context: NubaseContextData<TApiEndpoints>;\n }) => void | Promise<void>;\n};\n\n/**\n * Inline view definition for create views\n */\nexport type InlineCreateViewConfig<\n TApiEndpoints,\n TActionIds extends string,\n TSchema extends ObjectSchema<any> = ObjectSchema<any>,\n TParamsSchema extends ObjectSchema<any> | undefined = undefined,\n> = {\n type: \"resource-create\";\n id: string;\n title: string;\n schemaPost: (api: TApiEndpoints) => TSchema;\n schemaParams?: (api: TApiEndpoints) => TParamsSchema;\n actions?: ActionLayout<TActionIds>;\n breadcrumbs?: BreadcrumbDefinition<TApiEndpoints, TParamsSchema>;\n onSubmit: (args: {\n data: Infer<TSchema>;\n context: NubaseContextData<TApiEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<any>>;\n};\n\n/**\n * Inline view definition for view views\n */\nexport type InlineViewViewConfig<\n TApiEndpoints,\n TActionIds extends string,\n TSchema extends ObjectSchema<any> = ObjectSchema<any>,\n TParamsSchema extends ObjectSchema<any> | undefined = undefined,\n> = {\n type: \"resource-view\";\n id: string;\n title: string;\n schemaGet: (api: TApiEndpoints) => TSchema;\n schemaParams?: (api: TApiEndpoints) => TParamsSchema;\n actions?: ActionLayout<TActionIds>;\n breadcrumbs?: BreadcrumbDefinition<\n TApiEndpoints,\n TParamsSchema,\n Infer<TSchema>\n >;\n onLoad: (args: {\n context: NubaseContextData<TApiEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<Infer<TSchema>>>;\n onPatch: (args: {\n data: Partial<Infer<TSchema>>;\n context: NubaseContextData<TApiEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<any>>;\n};\n\n/**\n * Inline view definition for search views\n */\nexport type InlineSearchViewConfig<\n TApiEndpoints,\n TActionIds extends string,\n TSchema extends ArraySchema<any> = ArraySchema<any>,\n TParamsSchema extends ObjectSchema<any> | undefined = undefined,\n> = {\n type: \"resource-search\";\n id: string;\n title: string;\n schemaGet: (api: TApiEndpoints) => TSchema;\n schemaParams?: (api: TApiEndpoints) => TParamsSchema;\n tableActions?: ActionLayout<TActionIds>;\n rowActions?: ActionLayout<TActionIds>;\n breadcrumbs?: BreadcrumbDefinition<TApiEndpoints, TParamsSchema>;\n onLoad: (args: {\n context: NubaseContextData<TApiEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<Infer<TSchema>>>;\n};\n\n/**\n * Union type for all inline view configs\n */\nexport type InlineViewConfig<TApiEndpoints, TActionIds extends string> =\n | InlineCreateViewConfig<TApiEndpoints, TActionIds, any, any>\n | InlineViewViewConfig<TApiEndpoints, TActionIds, any, any>\n | InlineSearchViewConfig<TApiEndpoints, TActionIds, any, any>;\n\n/**\n * Resource builder that enables chained, type-safe resource configuration.\n *\n * Usage:\n * ```typescript\n * createResource(\"ticket\")\n * .withApiEndpoints(apiEndpoints)\n * .withActions({ delete: { ... } })\n * .withViews({ create: { ... }, view: { ... } })\n * ```\n */\nclass ResourceBuilder<\n TId extends string,\n TApiEndpoints = never,\n TActions extends Record<\n string,\n InlineResourceActionConfig<TApiEndpoints>\n > = Record<string, never>,\n> {\n private config: {\n id: TId;\n apiEndpoints?: TApiEndpoints;\n actions?: TActions;\n };\n\n constructor(id: TId) {\n this.config = { id };\n }\n\n /**\n * Configure API endpoints for this resource.\n * This unlocks type-safe HTTP client in actions and views.\n */\n withApiEndpoints<T>(\n apiEndpoints: T,\n ): ResourceBuilder<TId, T, Record<string, never>> {\n return new ResourceBuilder<TId, T, Record<string, never>>(\n this.config.id,\n ).setApiEndpoints(apiEndpoints);\n }\n\n /**\n * Configure actions for this resource.\n * Actions can reference the API endpoints for type-safe HTTP calls.\n */\n withActions<\n T extends Record<string, InlineResourceActionConfig<TApiEndpoints>>,\n >(actions: T): ResourceBuilder<TId, TApiEndpoints, T> {\n const builder = new ResourceBuilder<TId, TApiEndpoints, T>(this.config.id);\n if (this.config.apiEndpoints !== undefined) {\n builder.setApiEndpoints(this.config.apiEndpoints);\n }\n builder.setActions(actions);\n return builder;\n }\n\n /**\n * Configure views for this resource.\n * Views can reference API endpoints for schemas and action keys for tableActions/rowActions.\n * This is the final step that produces the ResourceDescriptor.\n */\n withViews<\n TViews extends Record<\n string,\n InlineViewConfig<TApiEndpoints, keyof TActions & string>\n >,\n >(\n views: TViews,\n ): ResourceDescriptor<\n {\n [K in keyof TViews]: TViews[K] extends InlineViewConfig<\n TApiEndpoints,\n any\n >\n ? TViews[K] extends InlineCreateViewConfig<\n TApiEndpoints,\n any,\n infer TSchema,\n infer TParamsSchema\n >\n ? ResourceCreateView<\n TSchema,\n TApiEndpoints,\n TParamsSchema,\n keyof TActions & string\n >\n : TViews[K] extends InlineViewViewConfig<\n TApiEndpoints,\n any,\n infer TSchema,\n infer TParamsSchema\n >\n ? ResourceViewView<\n TSchema,\n TApiEndpoints,\n TParamsSchema,\n keyof TActions & string\n >\n : TViews[K] extends InlineSearchViewConfig<\n TApiEndpoints,\n any,\n infer TSchema,\n infer TParamsSchema\n >\n ? ResourceSearchView<\n TSchema,\n TApiEndpoints,\n TParamsSchema,\n keyof TActions & string\n >\n : never\n : never;\n },\n {\n [K in keyof TActions]: TActions[K] extends InlineResourceActionConfig<TApiEndpoints>\n ? {\n type: \"resource\";\n id: string;\n label?: string;\n icon?: React.ComponentType<{\n size?: number;\n className?: string;\n }>;\n disabled?: boolean;\n variant?: \"default\" | \"destructive\";\n onExecute: (\n context: ResourceActionExecutionContext,\n ) => void | Promise<void>;\n }\n : never;\n }\n > {\n // Transform inline view configs to actual view objects\n const transformedViews: Record<string, any> = {};\n\n for (const [key, viewConfig] of Object.entries(views)) {\n const config = viewConfig as any;\n\n // Resolve schemas from API endpoints\n const resolvedSchemaGet = config.schemaGet?.(this.config.apiEndpoints);\n const resolvedSchemaPost = config.schemaPost?.(this.config.apiEndpoints);\n const resolvedSchemaParams = config.schemaParams?.(\n this.config.apiEndpoints,\n );\n\n // Use explicit type from config\n transformedViews[key] = {\n ...config,\n type: config.type,\n schemaGet: resolvedSchemaGet,\n schemaPost: resolvedSchemaPost,\n schemaParams: resolvedSchemaParams,\n };\n }\n\n // Transform inline action configs to actual action objects\n const transformedActions: Record<string, any> = {};\n\n if (this.config.actions) {\n for (const [key, actionConfig] of Object.entries(this.config.actions)) {\n const config = actionConfig as any;\n\n // Convert inline action config to ResourceAction\n transformedActions[key] = {\n type: \"resource\" as const,\n id: key,\n label: config.label,\n icon: config.icon,\n disabled: config.disabled,\n variant: config.variant || \"default\",\n onExecute: ({\n selectedIds,\n context,\n }: ResourceActionExecutionContext) => {\n return config.onExecute({ selectedIds, context });\n },\n };\n }\n }\n\n return {\n id: this.config.id,\n views: transformedViews,\n actions: transformedActions,\n } as any;\n }\n\n // Private helper methods for builder pattern\n private setApiEndpoints(apiEndpoints: TApiEndpoints): this {\n this.config.apiEndpoints = apiEndpoints;\n return this;\n }\n\n private setActions(actions: TActions): this {\n this.config.actions = actions;\n return this;\n }\n}\n\n/**\n * Creates a new resource builder with the specified ID.\n *\n * The builder pattern enables sequential type inference, solving the circular\n * dependency problem between API endpoints, actions, and views.\n *\n * @example\n * ```typescript\n * const ticketResource = createResource(\"ticket\")\n * .withApiEndpoints(apiEndpoints)\n * .withActions({\n * delete: {\n * label: \"Delete\",\n * onExecute: async ({ selectedIds, context }) => {\n * // context.http is fully typed\n * }\n * }\n * })\n * .withViews({\n * create: {\n * type: \"resource-create\",\n * schemaPost: (api) => api.postTicket.requestBody,\n * onSubmit: async ({ data, context }) => context.http.postTicket({ data })\n * }\n * });\n * ```\n */\nexport function createResource<TId extends string>(\n id: TId,\n): ResourceBuilder<TId, never, Record<string, never>> {\n return new ResourceBuilder(id);\n}\n","import type { Infer, ObjectSchema } from \"@nubase/core\";\nimport type { NubaseContextData } from \"../context/types\";\nimport type { HttpResponse } from \"../http/http-client\";\nimport type { ResourceCreateView, ResourceViewView } from \"./view\";\n\n/**\n * Factory function to create a ResourceCreateView with type inference.\n * Eliminates redundancy by inferring schema and API client types from parameters.\n */\nexport function createCreateView<\n TSchema extends ObjectSchema<any>,\n TEndpoints,\n TParamsSchema extends ObjectSchema<any> | undefined = undefined,\n>({\n id,\n title,\n schemaPost,\n schemaParams,\n onSubmit,\n}: {\n id: string;\n title: string;\n schemaPost: TSchema;\n schemaParams?: TParamsSchema;\n onSubmit: ({\n data,\n context,\n }: {\n data: Infer<TSchema>;\n context: NubaseContextData<TEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<any>>;\n}): ResourceCreateView<TSchema, TEndpoints, TParamsSchema> {\n return {\n type: \"resource-create\",\n id,\n title,\n schemaPost,\n ...(schemaParams && { schemaParams }),\n onSubmit,\n };\n}\n\n/**\n * Factory function to create a ResourceViewView with type inference.\n * Eliminates redundancy by inferring schema and API client types from parameters.\n */\nexport function createViewView<\n TSchema extends ObjectSchema<any>,\n TEndpoints,\n TParamsSchema extends ObjectSchema<any> | undefined = undefined,\n>({\n id,\n title,\n schemaGet,\n schemaParams,\n onLoad,\n onPatch,\n}: {\n id: string;\n title: string;\n schemaGet: TSchema;\n schemaParams?: TParamsSchema;\n onLoad: ({\n context,\n }: {\n context: NubaseContextData<TEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<Infer<TSchema>>>;\n onPatch: ({\n data,\n context,\n }: {\n data: Partial<Infer<TSchema>>;\n context: NubaseContextData<TEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<any>>;\n}): ResourceViewView<TSchema, TEndpoints, TParamsSchema> {\n return {\n type: \"resource-view\",\n id,\n title,\n schemaGet,\n ...(schemaParams && { schemaParams }),\n onLoad,\n onPatch,\n };\n}\n","import type { ArraySchema, Infer, ObjectSchema } from \"@nubase/core\";\nimport type { NubaseContextData } from \"../context/types\";\nimport type { HttpResponse } from \"../http/http-client\";\nimport type { ActionLayout } from \"./action-layout\";\nimport type { BreadcrumbDefinition } from \"./breadcrumb\";\nimport type {\n ResourceCreateView,\n ResourceSearchView,\n ResourceViewView,\n} from \"./view\";\n\n/**\n * Creates a view factory pre-configured with API endpoints.\n * This eliminates the need to import apiEndpoints in each view file.\n */\nexport function createViewFactory<TApiEndpoints>(apiEndpoints: TApiEndpoints) {\n return {\n createView<\n TSchema extends ObjectSchema<any>,\n TParamsSchema extends ObjectSchema<any> | undefined = undefined,\n TActionIds extends string = string,\n >(config: {\n id: string;\n title: string;\n schemaGet: (api: TApiEndpoints) => TSchema;\n schemaParams?: (api: TApiEndpoints) => TParamsSchema;\n actions?: ActionLayout<TActionIds>;\n breadcrumbs?: BreadcrumbDefinition<\n TApiEndpoints,\n TParamsSchema,\n Infer<TSchema>\n >;\n onLoad: (args: {\n context: NubaseContextData<TApiEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<Infer<TSchema>>>;\n onPatch: (args: {\n data: Partial<Infer<TSchema>>;\n context: NubaseContextData<TApiEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<any>>;\n }): ResourceViewView<TSchema, TApiEndpoints, TParamsSchema, TActionIds> {\n const resolvedSchema = config.schemaGet(apiEndpoints);\n const resolvedSchemaParams = config.schemaParams?.(apiEndpoints);\n\n return {\n type: \"resource-view\",\n ...config,\n schemaGet: resolvedSchema,\n schemaParams: resolvedSchemaParams,\n };\n },\n\n createCreate<\n TSchema extends ObjectSchema<any>,\n TParamsSchema extends ObjectSchema<any> | undefined = undefined,\n TActionIds extends string = string,\n >(config: {\n id: string;\n title: string;\n schemaPost: (api: TApiEndpoints) => TSchema;\n schemaParams?: (api: TApiEndpoints) => TParamsSchema;\n actions?: ActionLayout<TActionIds>;\n breadcrumbs?: BreadcrumbDefinition<TApiEndpoints, TParamsSchema>;\n onSubmit: (args: {\n data: Infer<TSchema>;\n context: NubaseContextData<TApiEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<any>>;\n }): ResourceCreateView<TSchema, TApiEndpoints, TParamsSchema, TActionIds> {\n const resolvedSchema = config.schemaPost(apiEndpoints);\n const resolvedSchemaParams = config.schemaParams?.(apiEndpoints);\n\n return {\n type: \"resource-create\",\n ...config,\n schemaPost: resolvedSchema,\n schemaParams: resolvedSchemaParams,\n };\n },\n\n createSearch<\n TSchema extends ArraySchema<any>,\n TParamsSchema extends ObjectSchema<any> | undefined = undefined,\n TActionIds extends string = string,\n >(config: {\n id: string;\n title: string;\n schemaGet: (api: TApiEndpoints) => TSchema;\n schemaParams?: (api: TApiEndpoints) => TParamsSchema;\n tableActions?: ActionLayout<TActionIds>;\n rowActions?: ActionLayout<TActionIds>;\n breadcrumbs?: BreadcrumbDefinition<TApiEndpoints, TParamsSchema>;\n onLoad: (args: {\n context: NubaseContextData<TApiEndpoints, TParamsSchema>;\n }) => Promise<HttpResponse<Infer<TSchema>>>;\n }): ResourceSearchView<TSchema, TApiEndpoints, TParamsSchema, TActionIds> {\n const resolvedSchema = config.schemaGet(apiEndpoints);\n const resolvedSchemaParams = config.schemaParams?.(apiEndpoints);\n\n return {\n type: \"resource-search\",\n ...config,\n schemaGet: resolvedSchema,\n schemaParams: resolvedSchemaParams,\n };\n },\n };\n}\n","import type { Infer, ObjectSchema } from \"@nubase/core\";\nimport type { HttpResponse } from \"../http/http-client\";\n\n/**\n * Helper to create a ResourceViewView with full type inference.\n * Infers all generic types from the provided configuration.\n */\nexport function defineViewView<\n TSchema extends ObjectSchema<any>,\n TParamsSchema extends ObjectSchema<any> | undefined,\n TConfig extends {\n id: string;\n title: string;\n schema: TSchema;\n schemaParams?: TParamsSchema;\n onLoad: (args: { context: any }) => Promise<HttpResponse<Infer<TSchema>>>;\n onPatch: (args: {\n data: Partial<Infer<TSchema>>;\n context: any;\n }) => Promise<HttpResponse<any>>;\n },\n>(config: TConfig): TConfig & { type: \"resource-view\" } {\n return {\n type: \"resource-view\" as const,\n ...config,\n };\n}\n\n/**\n * Helper to create a ResourceCreateView with full type inference.\n * Infers all generic types from the provided configuration.\n */\nexport function defineCreateView<\n TSchema extends ObjectSchema<any>,\n TParamsSchema extends ObjectSchema<any> | undefined,\n TConfig extends {\n id: string;\n title: string;\n schema: TSchema;\n schemaParams?: TParamsSchema;\n onSubmit: (args: {\n data: Infer<TSchema>;\n context: any;\n }) => Promise<HttpResponse<any>>;\n },\n>(config: TConfig): TConfig & { type: \"resource-create\" } {\n return {\n type: \"resource-create\" as const,\n ...config,\n };\n}\n","import type { CommandRegistry } from \"../commands/types\";\nimport type { ResourceLink } from \"../config/resource-link\";\nimport type { IconComponent, MenuItem } from \"./types\";\n\n/**\n * Resolved menu item with all display properties guaranteed.\n * This is what components receive after resolution.\n */\nexport interface ResolvedMenuItem {\n id: string;\n label: string;\n subtitle?: string;\n icon?: IconComponent;\n disabled?: boolean;\n variant?: \"default\" | \"destructive\";\n\n // Navigation/Action\n /** String path or ResourceLink for type-safe resource navigation */\n href?: string | ResourceLink;\n commandId?: string;\n commandArgs?: Record<string, unknown>;\n onExecute?: () => void | Promise<void>;\n onFocus?: () => void;\n\n // Hierarchy\n children?: ResolvedMenuItem[];\n}\n\n/**\n * Resolves a MenuItem by deriving missing label/icon from command definitions.\n *\n * Resolution priority:\n * 1. Explicit `label`/`icon` on the MenuItem (highest priority)\n * 2. `name`/`icon` from the referenced command definition\n * 3. `id` as fallback for label (lowest priority)\n *\n * @param item - The menu item to resolve\n * @param commandRegistry - Command registry to look up command definitions\n * @returns Resolved menu item with guaranteed label\n */\nexport function resolveMenuItem(\n item: MenuItem,\n commandRegistry?: CommandRegistry,\n): ResolvedMenuItem {\n // Get command definition if command is provided\n const commandDef =\n typeof item.command === \"string\"\n ? commandRegistry?.getCommand(item.command)\n : item.command;\n\n const commandId =\n typeof item.command === \"string\" ? item.command : item.command?.id;\n\n // Resolve label: explicit > command.name > id\n const label = item.label ?? commandDef?.name ?? item.id;\n\n // Resolve icon: explicit > command.icon\n // Note: command.icon might be ReactNode (legacy) or ComponentType (new)\n // We only use it if it's a ComponentType\n const icon =\n item.icon ??\n (typeof commandDef?.icon === \"function\"\n ? (commandDef.icon as IconComponent)\n : undefined);\n\n // Resolve children recursively\n const children = item.children?.map((child) =>\n resolveMenuItem(child, commandRegistry),\n );\n\n return {\n id: item.id,\n label,\n subtitle: item.subtitle,\n icon,\n disabled: item.disabled,\n variant: item.variant,\n href: item.href,\n commandId,\n commandArgs: item.commandArgs,\n onExecute: item.onExecute,\n onFocus: item.onFocus,\n children,\n };\n}\n\n/**\n * Resolves an array of menu items.\n */\nexport function resolveMenuItems(\n items: MenuItem[],\n commandRegistry?: CommandRegistry,\n): ResolvedMenuItem[] {\n return items.map((item) => resolveMenuItem(item, commandRegistry));\n}\n"],"mappings":"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","names":["util","objectUtil","terminal","errorUtil","errorMap","r","ctx","min","max","result","issues","elements","processed","ZodFirstPartyTypeKind","zodToJsonSchema","loader","Typo","ReactMonacoEditor","import_react","import_monaco","import_jsx_runtime","import_react","import_react","import_jsx_runtime","executeAction","import_lucide_react","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_core","import_lucide_react","import_react","import_jsx_runtime","HeadlessDialog","import_jsx_runtime","import_react","import_jsx_runtime","import_core","import_react","error","import_react","import_core","import_react","import_react","import_class_variance_authority","import_react","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","import_react","import_class_variance_authority","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","errorMap","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_class_variance_authority","import_lucide_react","import_react","import_jsx_runtime","import_react","import_lucide_react","import_react","router","import_jsx_runtime","import_jsx_runtime","items","import_jsx_runtime","import_jsx_runtime","import_core","import_lucide_react","import_core","import_react","queryClient","import_react_query","import_jsx_runtime","import_react","import_clsx","import_react","import_react_dom","import_react","import_react","import_jsx_runtime","moveNext","import_clsx","clsx","import_jsx_runtime","import_lucide_react","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime","inputValue","isOpen","import_jsx_runtime","import_jsx_runtime","import_react","renderCheckbox","import_react","import_react","import_jsx_runtime","row","import_react","import_clsx","import_jsx_runtime","clsx","import_jsx_runtime","import_clsx","import_react","import_react","import_jsx_runtime","import_jsx_runtime","clsx","import_react","import_react","import_jsx_runtime","import_jsx_runtime","renderSortStatus","defaultRenderCell","lastFrozenColumnIndex","headerRowsCount","columns","rawColumns","colSpanColumns","columnMetrics","totalFrozenColumnWidth","templateColumns","layoutCssVars","colOverscanStartIdx","colOverscanEndIdx","import_react","import_react_dom","import_react","import_react_dom","ResizeObserver","clientHeight","offsetHeight","import_react","startIdx","import_react","totalRowHeight","gridTemplateRows","import_clsx","import_react","import_jsx_runtime","clsx","import_react","import_jsx_runtime","import_clsx","import_react","import_react","import_jsx_runtime","import_jsx_runtime","clsx","import_jsx_runtime","import_jsx_runtime","renderSortStatus","renderCheckbox","columnWidths","row","scrollTop","scrollLeft","style","clsx","shouldFocusCell","idx","rowIdx","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_core","import_lucide_react","import_jsx_runtime","availableThemes","import_lucide_react","import_jsx_runtime","import_class_variance_authority","import_react","import_jsx_runtime","executeAction","import_class_variance_authority","import_react","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","config","import_react_query","import_jsx_runtime","React","import_jsx_runtime","React","import_recharts","import_jsx_runtime","import_jsx_runtime","import_lucide_react","React","import_jsx_runtime","import_jsx_runtime","import_styles","import_jsx_runtime","ReactGridLayout","React","import_jsx_runtime","import_jsx_runtime","import_react","import_clsx","import_react","import_react","import_jsx_runtime","import_jsx_runtime","clsx","import_jsx_runtime","columns","groupBy","rows","isGroupRow","selectedRows","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_react","min","max","import_jsx_runtime","import_react","import_jsx_runtime","executeAction","import_lucide_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_react_router","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react_query","import_react_router","import_react_router","import_react_router","import_react_router","import_react","import_jsx_runtime","currentPath","pathWithoutWorkspace","isPublicRoute","import_jsx_runtime","import_react_router","import_react_router","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_core","import_react_router","import_react","import_jsx_runtime","import_react","import_jsx_runtime","ResourceViewForm","import_jsx_runtime","params","import_react_router","import_react_form","import_react_router","import_react","import_jsx_runtime","import_react_router","import_react_form","import_react_router","import_react","import_jsx_runtime","import_react_router","import_react","import_react","import_jsx_runtime","import_jsx_runtime","MonacoEditor","import_react","import_jsx_runtime","MonacoEditor","import_react","import_jsx_runtime","import_react_query","import_react","axios","router","queryClient","error","import_jsx_runtime","import_jsx_runtime","import_lucide_react","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_lucide_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_lucide_react","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","commandRegistry"]}
|