@noya-app/noya-designsystem 0.1.59 → 0.1.61
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/.turbo/turbo-build.log +10 -10
- package/CHANGELOG.md +16 -0
- package/dist/index.css +1 -1
- package/dist/index.d.mts +19 -1
- package/dist/index.d.ts +19 -1
- package/dist/index.js +47 -52
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +62 -67
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/components/BaseToolbar.tsx +1 -0
- package/src/components/Button.tsx +2 -2
- package/src/components/Checkbox.tsx +2 -2
- package/src/components/Collection.tsx +1 -0
- package/src/components/Divider.tsx +15 -11
- package/src/components/Grid.tsx +4 -0
- package/src/components/List.tsx +4 -0
- package/src/components/MediaThumbnail.tsx +1 -0
- package/src/components/SegmentedControl.tsx +1 -1
- package/src/components/SelectionToolbar.tsx +4 -2
- package/src/components/Slider.tsx +21 -57
- package/src/index.css +22 -4
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../noya-react-utils/src/components/AutoSizer.tsx","../../noya-react-utils/src/hooks/useSize.ts","../../noya-react-utils/src/components/FileDropTarget.tsx","../../noya-react-utils/src/hooks/useFileDropTarget.ts","../../noya-react-utils/src/utils/reactGenerics.ts","../../noya-react-utils/src/hooks/useControlledOrUncontrolled.ts","../../noya-react-utils/src/hooks/useDeepArray.ts","../../noya-react-utils/src/hooks/useDeepState.ts","../../noya-react-utils/src/hooks/useFetch.ts","../../noya-react-utils/src/hooks/useIsMounted.ts","../../noya-react-utils/src/hooks/useIsomorphicLayoutEffect.ts","../../noya-react-utils/src/hooks/useLateReference.ts","../../noya-react-utils/src/hooks/useLazyValue.ts","../../noya-react-utils/src/hooks/useMergeRefs.ts","../../noya-react-utils/src/utils/assignRef.ts","../../noya-react-utils/src/hooks/useMutableState.ts","../../noya-react-utils/src/hooks/usePersistentState.ts","../../noya-react-utils/src/hooks/usePixelRatio.ts","../../noya-react-utils/src/hooks/useShallowArray.ts","../../noya-react-utils/src/hooks/useStableCallback.ts","../../noya-react-utils/src/hooks/useSystemColorScheme.ts","../../noya-react-utils/src/hooks/useUrlHashParameters.ts","../../emitter/src/index.ts","../../noya-react-utils/src/utils/ClientStorage.ts","../src/components/ActionMenu.tsx","../src/theme/index.ts","../src/theme/themeUtils.ts","../src/components/DropdownMenu.tsx","../src/contexts/PortalScopeContext.tsx","../src/components/internal/Menu.tsx","../src/contexts/DesignSystemConfiguration.tsx","../src/components/Toast.tsx","../src/components/IconButton.tsx","../src/components/Button.tsx","../src/utils/classNames.ts","../src/components/Icons.tsx","../src/components/Spacer.tsx","../src/components/Tooltip.tsx","../src/components/Text.tsx","../src/contexts/DialogContext.tsx","../src/components/Dialog.tsx","../src/components/InputField.tsx","../src/hooks/useLabel.ts","../src/utils/handleNudge.ts","../src/utils/inputs.ts","../src/components/internal/TextInput.tsx","../src/contexts/GlobalInputBlurContext.tsx","../src/components/Label.tsx","../src/components/Popover.tsx","../src/contexts/OpenPortalsContext.tsx","../src/contexts/FloatingWindowContext.tsx","../src/utils/withSeparatorElements.ts","../src/components/internal/MenuViewport.tsx","../src/components/internal/SelectItem.tsx","../src/components/ActivityIndicator.tsx","../src/components/Avatar.tsx","../src/utils/colorFromString.ts","../src/components/NoyaLogo.tsx","../src/components/ai-assistant/AIAssistantLayout.tsx","../src/components/TextArea.tsx","../src/components/AnimatePresence.tsx","../src/components/Banner.tsx","../src/components/Breadcrumbs.tsx","../src/components/Checkbox.tsx","../src/components/Chip.tsx","../src/hooks/useHover.ts","../src/components/Collection.tsx","../src/components/Grid.tsx","../src/utils/selection.ts","../src/components/EditableText.tsx","../src/components/GridView.tsx","../src/components/ContextMenu.tsx","../src/components/ScrollArea.tsx","../src/components/List.tsx","../src/components/ListView.tsx","../src/hooks/mergeEventHandlers.ts","../src/components/sorting/Sortable.tsx","../src/components/sorting/DragRegistration.tsx","../src/components/sorting/SharedDragProvider.tsx","../src/components/sorting/sorting.ts","../src/components/TreeView.tsx","../src/components/ColorSwatch.tsx","../src/components/ColorSwatchControl.tsx","../src/components/Combobox.tsx","../src/utils/combobox.ts","../src/utils/fuzzyScorer.ts","../src/components/ComboboxMenu.tsx","../src/components/CommandPalette.tsx","../src/components/SearchCompletionMenu.tsx","../src/components/Divider.tsx","../src/components/connected-users-menu/ConnectedUsersMenuLayout.tsx","../src/components/DraggableMenuButton.tsx","../src/components/Drawer.tsx","../src/components/Fade.tsx","../src/components/file-explorer/FileExplorerLayout.tsx","../src/components/FillInputField.tsx","../../noya-file-format/src/types.ts","../src/components/FillPreviewBackground.tsx","../src/contexts/ImageDataContext.tsx","../src/hooks/useObjectURL.ts","../src/utils/sketchColor.ts","../src/utils/getGradientBackground.tsx","../src/components/FloatingWindow.tsx","../src/components/GradientPicker.tsx","../src/components/InspectorContainer.tsx","../src/components/LabeledElementView.tsx","../src/components/LabeledField.tsx","../src/hooks/useIndent.ts","../src/components/MediaThumbnail.tsx","../src/components/catppuccin/fileIcons.ts","../src/components/Message.tsx","../src/components/pipeline/PipelineResultLayout.tsx","../src/components/Progress.tsx","../src/components/Section.tsx","../src/components/SegmentedControl.tsx","../src/components/SelectionToolbar.tsx","../src/components/SelectMenu.tsx","../src/components/Slider.tsx","../src/components/sorting/createSharedDrag.tsx","../src/components/Switch.tsx","../src/components/UserPointer.tsx","../src/components/workspace/WorkspaceLayout.tsx","../src/hooks/useWindowSize.tsx","../src/components/workspace/DrawerWorkspaceLayout.tsx","../src/hooks/usePreservePanelSize.tsx","../src/components/workspace/PanelWorkspaceLayout.tsx","../src/hooks/usePlatform.ts","../src/hooks/useTheme.ts","../src/mediaQuery.ts","../src/utils/createSectionedMenu.ts","../src/utils/moveTreeItem.ts","../src/utils/sketchPattern.ts","../src/components/DimensionInput.tsx","../src/components/InspectorPrimitives.tsx","../src/components/BaseToolbar.tsx","../src/components/Toolbar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { useSize } from \"../hooks/useSize\";\n\ntype Size = { width: number; height: number };\n\nconst style: React.CSSProperties = {\n display: \"flex\",\n flex: \"1 0 0\",\n flexDirection: \"column\",\n};\n\ninterface Props {\n children: (size: Size) => React.ReactNode;\n className?: string;\n}\n\nexport const AutoSizer = React.memo(function AutoSizer({\n children,\n className,\n}: Props) {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const containerSize = useSize(containerRef);\n\n return (\n <div ref={containerRef} style={style} className={className}>\n {containerSize &&\n containerSize.width > 0 &&\n containerSize.height > 0 &&\n children(containerSize)}\n </div>\n );\n});\n\ninterface SingleDimensionAutoSizerProps {\n children: (size: number) => React.ReactNode;\n dimension: \"width\" | \"height\";\n className?: string;\n}\n\nexport const SingleDimensionAutoSizer = React.memo(\n function SingleDimensionAutoSizer({\n children,\n dimension,\n className,\n }: SingleDimensionAutoSizerProps) {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const containerSize = useSize(containerRef, dimension);\n\n return (\n <div ref={containerRef} style={style} className={className}>\n {containerSize &&\n containerSize[dimension] > 0 &&\n children(containerSize[dimension])}\n </div>\n );\n }\n);\n","// MIT License\n//\n// Copyright (c) 2020 Modulz\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n// https://github.com/radix-ui/primitives/blob/f3de622e944785d01eb6041249ca1645f79ce102/packages/react/utils/src/useSize.tsx\n\n/// <reference types=\"resize-observer-browser\" />\n\nimport * as React from \"react\";\n\ntype Size = {\n width: number;\n height: number;\n};\n\nexport function useSize(\n /** A reference to the element whose size to observe */\n refToObserve: React.RefObject<HTMLElement | SVGElement>,\n dimensions: \"both\" | \"width\" | \"height\" = \"both\"\n) {\n const [size, setSize] = React.useState<Size | undefined>(undefined);\n\n React.useEffect(() => {\n if (refToObserve.current) {\n const elementToObserve = refToObserve.current;\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n\n // Since we only observe the one element, we don't need to loop over the\n // array\n if (!entries.length) {\n return;\n }\n\n const entry = entries[0];\n let width: number;\n let height: number;\n\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n // iron out differences between browsers\n const borderSize = Array.isArray(borderSizeEntry)\n ? borderSizeEntry[0]\n : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n // for browsers that don't support `borderBoxSize`\n // we calculate a rect ourselves to get the correct border box.\n const rect = elementToObserve.getBoundingClientRect();\n width = rect.width;\n height = rect.height;\n }\n\n setSize((currentSize) => {\n if (\n currentSize &&\n (currentSize.width === width || dimensions === \"height\") &&\n (currentSize.height === height || dimensions === \"width\")\n ) {\n return currentSize;\n }\n\n return { width, height };\n });\n });\n\n resizeObserver.observe(elementToObserve, { box: \"border-box\" });\n\n return () => {\n setSize(undefined);\n resizeObserver.unobserve(elementToObserve);\n };\n }\n return;\n }, [refToObserve, dimensions]);\n\n return size;\n}\n","import React, { DragEvent, ReactNode, useCallback, useRef } from \"react\";\nimport { useFileDropTarget } from \"../hooks/useFileDropTarget\";\nimport { memoGeneric } from \"../utils/reactGenerics\";\n\nexport type OffsetPoint = {\n offsetX: number;\n offsetY: number;\n};\n\nexport type TypedFile<T> = File & { type: T };\n\nexport function isSupportedFile<T extends string>(\n file: File,\n supportedFileTypes: T[]\n): file is TypedFile<T> {\n return (\n supportedFileTypes.includes(file.type as T) ||\n (file.type === \"\" && file.name.endsWith(\".sketch\"))\n );\n}\n\ntype Props<T extends string> = {\n children: ReactNode | ((isActive: boolean) => ReactNode);\n onDropFiles: (file: TypedFile<T>[], offsetPoint: OffsetPoint) => void;\n supportedFileTypes: T[];\n} & Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">;\n\nexport const FileDropTarget = memoGeneric(function FileDropTarget<\n T extends string,\n>({ children, onDropFiles, supportedFileTypes, ...props }: Props<T>) {\n const ref = useRef<HTMLDivElement>(null);\n\n const handleFile = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n\n const offsetPoint = {\n offsetX: event.nativeEvent.offsetX,\n offsetY: event.nativeEvent.offsetY,\n };\n\n const unsupportedTypes = Array.from(event.dataTransfer.files).flatMap(\n (file) => {\n if (!isSupportedFile(file, supportedFileTypes)) {\n return [file.type];\n } else {\n return [];\n }\n }\n );\n\n if (unsupportedTypes.length > 0) {\n alert(\n `Files of type ${unsupportedTypes.join(\n \", \"\n )} aren't supported. The following types are supported: ${supportedFileTypes.join(\n \", \"\n )}`\n );\n }\n\n const files = Array.from(event.dataTransfer.files).flatMap((file) =>\n isSupportedFile(file, supportedFileTypes) ? [file] : []\n );\n\n onDropFiles(files, offsetPoint);\n },\n [onDropFiles, supportedFileTypes]\n );\n\n const { dropTargetProps, isDropTargetActive } = useFileDropTarget(\n ref,\n handleFile\n );\n\n return (\n <div ref={ref} {...dropTargetProps} {...props}>\n {typeof children === \"function\" ? children(isDropTargetActive) : children}\n </div>\n );\n});\n","import { DragEvent, useCallback, useState } from \"react\";\n\nexport function useFileDropTarget(\n ref: React.RefObject<HTMLDivElement>,\n dropEvent?: (event: DragEvent) => void\n) {\n const [isDropTargetActive, setIsDropTargetActive] = useState(false);\n\n const handleDragOver = useCallback((event: DragEvent) => {\n event.preventDefault();\n }, []);\n\n const handleDragEnter = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n if (!ref.current?.contains(event.relatedTarget as Node)) {\n setIsDropTargetActive(true);\n }\n },\n [ref]\n );\n\n const handleDragLeave = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n if (!ref.current?.contains(event.relatedTarget as Node)) {\n setIsDropTargetActive(false);\n }\n },\n [ref]\n );\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n dropEvent?.(event);\n setIsDropTargetActive(false);\n },\n [dropEvent]\n );\n\n if (!dropEvent) {\n return {\n dropTargetProps: {},\n isDropTargetActive,\n };\n }\n\n return {\n dropTargetProps: {\n onDragOver: handleDragOver,\n onDragEnter: handleDragEnter,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n },\n isDropTargetActive,\n };\n}\n","import React, { forwardRef, memo } from \"react\";\n\nfunction _memoGeneric<A, B>(\n _Component: (props: A) => B\n): (props: A) => React.ReactElement | null {\n throw new Error(\"Not implemented\");\n}\n\nfunction _forwardRefGeneric<T, P = {}>(\n _render: (props: P, ref: React.ForwardedRef<T>) => React.ReactElement | null\n): (props: P & React.RefAttributes<T>) => React.ReactElement | null {\n throw new Error(\"Not implemented\");\n}\n\nexport const memoGeneric = memo as typeof _memoGeneric;\nexport const forwardRefGeneric = forwardRef as typeof _forwardRefGeneric;\n","import { useCallback, useState } from \"react\";\n\nexport type UseControlledOrUncontrolledParameters<\n TState,\n TArgs extends any[] = [],\n> = {\n defaultValue: TState;\n value?: TState;\n onChange?: (value: TState, ...args: TArgs) => void;\n};\n\n// used for readonly controlled values\nconst noop = () => {};\n\nexport function useControlledOrUncontrolled<TState, TArgs extends any[] = []>({\n defaultValue,\n value,\n onChange,\n}: UseControlledOrUncontrolledParameters<TState, TArgs>) {\n const [internalValue, setInternalValue] = useState(value ?? defaultValue);\n\n const setValue = useCallback(\n (value: TState, ...args: TArgs) => {\n setInternalValue(value);\n onChange?.(value, ...args);\n },\n [onChange]\n );\n\n if (value !== undefined) {\n return [value, onChange ?? noop] as const;\n }\n\n return [internalValue, setValue] as const;\n}\n","import { isDeepEqual } from \"@noya-app/noya-utils\";\nimport { useRef } from \"react\";\n\n/**\n * Memoize an array using deep equality comparison (by converting to JSON).\n */\nexport function useDeepMemo<T>(value: T) {\n const ref = useRef(value);\n\n if (!isDeepEqual(ref.current, value)) {\n ref.current = value;\n }\n\n return ref.current;\n}\n","import { isDeepEqual } from \"@noya-app/noya-utils\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nexport const useDeepState: typeof useState = (\n ...args: Parameters<typeof useState>\n) => {\n const [state, _setState] = useState(...args);\n\n const setState = useCallback(function updater(updated: typeof state) {\n _setState((current) => {\n if (isDeepEqual(current, updated)) return current;\n return updated;\n });\n }, []);\n\n return useMemo(() => [state, setState], [state, setState]);\n};\n","import { useEffect, useState } from \"react\";\nimport { PromiseState } from \"../utils/PromiseState\";\nimport { ResponseEncoding, fetchData } from \"../utils/fetchData\";\n\nexport function useFetch<T>(\n url: string,\n encoding: ResponseEncoding\n): PromiseState<T> {\n const [state, setState] = useState<PromiseState<T>>({ type: \"pending\" });\n\n useEffect(() => {\n let isStale = false;\n\n async function getInfo() {\n try {\n const data = await fetchData<T>(url, encoding as any);\n\n if (isStale) return;\n\n setState({ type: \"success\", value: data });\n } catch (error) {\n if (isStale) return;\n\n setState({ type: \"failure\", value: error as Error });\n }\n }\n\n getInfo();\n\n return () => {\n isStale = true;\n };\n }, [url, encoding]);\n\n return state;\n}\n","import { useEffect, useRef } from 'react';\n\nexport function useIsMounted() {\n const isMounted = useRef(true);\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return isMounted;\n}\n","import * as React from \"react\";\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n","import { SetStateAction, useCallback, useLayoutEffect, useRef } from \"react\";\n\n/**\n * Returns an accessor function that returns the latest value passed to the hook.\n *\n * The value is only updated after the component has rendered, so it is safe to use in event handlers.\n * This is useful for preventing unnecessary re-renders when a value changes frequently,\n * while still providing access to the latest value in event handlers.\n */\nexport function useLateReference<T>(value: T): () => T {\n const valueRef = useRef(value);\n\n useLayoutEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n return useCallback(() => valueRef.current, []);\n}\n\nexport function useLateReferenceState<T>(\n value: T,\n setValue: (value: T) => void\n): [() => T, (value: SetStateAction<T>) => void] {\n const valueRef = useRef(value);\n\n useLayoutEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const getValue = useCallback(() => valueRef.current, []);\n\n const actualSetValue = useCallback(\n (value: SetStateAction<T>) => {\n if (value instanceof Function) {\n const newValue = value(valueRef.current);\n valueRef.current = newValue;\n setValue(newValue);\n } else {\n valueRef.current = value;\n setValue(value);\n }\n },\n [setValue]\n );\n\n return [getValue, actualSetValue] as const;\n}\n","import { useRef } from 'react';\n\nexport function useLazyValue<T>(f: () => T): T {\n const didInitialize = useRef(false);\n const value = useRef<T | undefined>(undefined);\n\n if (!didInitialize.current) {\n didInitialize.current = true;\n\n value.current = f();\n }\n\n return value.current!;\n}\n","import { useCallback } from \"react\";\nimport { assignRef } from \"../utils/assignRef\";\n\nexport function useMergeRefs<T>(\n ref: React.ForwardedRef<T>,\n anotherRef: React.ForwardedRef<T>\n) {\n return useCallback(\n (value: T) => {\n assignRef(ref, value);\n assignRef(anotherRef, value);\n },\n [ref, anotherRef]\n );\n}\n","export function assignRef<T>(\n ref: React.ForwardedRef<T> | undefined,\n value: T | null,\n): void {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n","import { useCallback, useMemo, useState } from 'react';\nimport { useLazyValue } from './useLazyValue';\n\nexport function useMutableState<T extends object>(\n valueOrInitializer: T | (() => T),\n) {\n const mutableValue = useLazyValue(() =>\n typeof valueOrInitializer === 'function'\n ? valueOrInitializer()\n : valueOrInitializer,\n );\n\n // We create a proxy wrapper in order to re-render on changes\n const [wrappedValue, setWrappedValue] = useState(\n () => new Proxy(mutableValue, {}),\n );\n\n const updateValue = useCallback(\n (updater: (value: T) => void) => {\n updater(mutableValue);\n\n setWrappedValue(new Proxy(mutableValue, {}));\n },\n // The mutable value is a dependency to satisfy eslint,\n // but should never change identity\n [mutableValue],\n );\n\n return useMemo(\n () => [wrappedValue, updateValue] as const,\n [updateValue, wrappedValue],\n );\n}\n","import {\n SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { ClientStorage } from \"../utils/ClientStorage\";\n\nfunction getCurrentValue<T, K extends string = string>(\n storage: ClientStorage<K>,\n storageKey: K,\n defaultValue?: T\n): T | null {\n return (storage.getItem(storageKey) as T | null) ?? defaultValue ?? null;\n}\n\nexport function usePersistentStateString<\n T extends string = string,\n K extends string = string,\n>(\n storage: ClientStorage<K>,\n storageKey: K\n): readonly [T | null, (newValue: SetStateAction<T | null>) => void];\nexport function usePersistentStateString<\n T extends string = string,\n K extends string = string,\n>(\n storage: ClientStorage<K>,\n storageKey: K,\n defaultValue: T\n): readonly [T, (newValue: SetStateAction<T>) => void];\nexport function usePersistentStateString<\n T extends string = string,\n K extends string = string,\n>(storage: ClientStorage<K>, storageKey: K, defaultValue?: T) {\n const [state, setState] = useState<T | null>(() =>\n getCurrentValue(storage, storageKey, defaultValue)\n );\n\n useEffect(() => {\n const newValue = getCurrentValue(storage, storageKey, defaultValue);\n setState(newValue);\n }, [defaultValue, storage, storageKey]);\n\n const setValue = useCallback(\n (action: SetStateAction<T | null>) => {\n const newValue =\n typeof action === \"function\"\n ? action(getCurrentValue(storage, storageKey, defaultValue))\n : action;\n storage.setItem(storageKey, newValue);\n setState(newValue);\n },\n [defaultValue, storage, storageKey]\n );\n\n // Listen for changes to localStorage from other tabs\n useEffect(() => {\n const dispose = storage.addListener(storageKey, (newValue) => {\n setState(newValue as T | null);\n });\n\n return () => dispose();\n }, [storage, storageKey]);\n\n return useMemo(() => [state, setValue] as const, [setValue, state]);\n}\n\nexport function usePersistentStateObject<T extends object, K extends string>(\n storage: ClientStorage<K>,\n storageKey: K,\n defaultValue: T\n): [T, (newValue: SetStateAction<T>) => void] {\n const [state, setState] = usePersistentStateString<string, K>(\n storage,\n storageKey,\n JSON.stringify(defaultValue)\n );\n\n const parsedState = useMemo(() => {\n try {\n return JSON.parse(state);\n } catch {\n return defaultValue;\n }\n }, [state, defaultValue]);\n\n return useMemo(\n () => [\n parsedState,\n (action) => {\n setState((prev) => {\n const parsedPrev = JSON.parse(prev);\n\n const newValue =\n typeof action === \"function\" ? action(parsedPrev) : action;\n\n return JSON.stringify(newValue);\n });\n },\n ],\n [parsedState, setState]\n );\n}\n","import { useEffect, useState } from 'react';\n\nexport function usePixelRatio() {\n const [pixelRatio, setPixelRatio] = useState(() => window.devicePixelRatio);\n\n useEffect(() => {\n const mediaQuery = matchMedia(`(resolution: ${pixelRatio}dppx)`);\n\n const handler = () => {\n setPixelRatio(window.devicePixelRatio);\n };\n\n mediaQuery.addEventListener('change', handler, { once: true });\n\n return () => {\n mediaQuery.removeEventListener('change', handler);\n };\n }, [pixelRatio]);\n\n return pixelRatio;\n}\n","import { isShallowEqual } from '@noya-app/noya-utils';\nimport { useRef } from 'react';\n\n/**\n * Memoize an array using shallow comparison.\n */\nexport function useShallowArray<T>(array: T[]) {\n const ref = useRef(array);\n\n if (!isShallowEqual(ref.current, array)) {\n ref.current = array;\n }\n\n return ref.current;\n}\n","import { useCallback, useLayoutEffect, useRef } from 'react';\n\nconst noop = () => {};\n\nexport function useStableCallback<T extends (...args: any[]) => any>(\n callback: T,\n): T;\nexport function useStableCallback<T extends (...args: any[]) => any>(\n callback?: T,\n): T | ((...args: Parameters<T>) => void);\nexport function useStableCallback<T extends (...args: any[]) => any>(\n callback: T,\n): T {\n const callbackRef = useRef(callback || noop);\n\n useLayoutEffect(() => {\n callbackRef.current = callback || noop;\n }, [callback]);\n\n return useCallback(\n (...args: Parameters<T>): ReturnType<T> => callbackRef.current(...args),\n [callbackRef],\n ) as T;\n}\n","import { useEffect, useState } from \"react\";\nimport { useLazyValue } from \"../hooks/useLazyValue\";\n\nconst preferDarkQuery = \"(prefers-color-scheme: dark)\";\n\ntype ColorScheme = \"light\" | \"dark\";\n\nexport function useSystemColorScheme() {\n const mediaQuery = useLazyValue(\n () => globalThis.matchMedia?.(preferDarkQuery) ?? \"light\"\n );\n\n const [colorScheme, setColorScheme] = useState<ColorScheme>(\n mediaQuery.matches ? \"dark\" : \"light\"\n );\n\n useEffect(() => {\n const listener = ({ matches }: MediaQueryListEvent) => {\n setColorScheme(matches ? \"dark\" : \"light\");\n };\n\n mediaQuery.addEventListener(\"change\", listener);\n\n return () => {\n mediaQuery.removeEventListener(\"change\", listener);\n };\n }, [mediaQuery]);\n\n return colorScheme;\n}\n","import { decodeQueryParameters } from \"@noya-app/noya-utils\";\nimport { useEffect, useState } from \"react\";\n\nexport type UrlHashParameters = Record<string, string>;\n\nexport function getUrlHashParameters(): UrlHashParameters {\n try {\n return decodeQueryParameters(window.location.hash.slice(1));\n } catch (e) {\n // console.warn(e);\n return {};\n }\n}\n\nexport function useUrlHashParameters(): UrlHashParameters {\n const [parameters, setParameters] = useState<UrlHashParameters>(() =>\n getUrlHashParameters()\n );\n\n useEffect(() => {\n const handler = () => setParameters(getUrlHashParameters());\n\n window.addEventListener(\"hashchange\", handler);\n\n return () => {\n window.removeEventListener(\"hashchange\", handler);\n };\n }, []);\n\n return parameters;\n}\n\ntype ParameterTypeMap = {\n boolean: boolean;\n number: number;\n string: string;\n};\n\nexport function castHashParameter<K extends keyof ParameterTypeMap>(\n value: string = \"\",\n type: K\n): ParameterTypeMap[K] {\n switch (type) {\n case \"boolean\":\n return (value === \"true\") as ParameterTypeMap[K];\n case \"number\": {\n const result = Number(value);\n return (isNaN(result) ? 0 : result) as ParameterTypeMap[K];\n }\n case \"string\":\n return value as ParameterTypeMap[K];\n default:\n throw new Error(\"Invalid type\");\n }\n}\n","type EmitterConfiguration = {\n bufferEventsIfNoListeners: boolean;\n};\n\nexport class Emitter<T extends any[] = []> {\n constructor(options: Partial<EmitterConfiguration> = {}) {\n this.bufferEventsIfNoListeners = options.bufferEventsIfNoListeners ?? false;\n }\n\n bufferEventsIfNoListeners: boolean;\n\n listeners: ((...args: T) => void)[] = [];\n\n addListener = (f: (...args: T) => void, options: { once?: boolean } = {}) => {\n if (options.once) {\n const handler = (...args: T) => {\n this.removeListener(handler);\n return f(...args);\n };\n this.listeners.push(handler);\n } else {\n this.listeners.push(f);\n }\n\n if (this.bufferedEvents.length > 0) {\n const eventsToEmit = this.bufferedEvents;\n\n this.bufferedEvents = [];\n\n eventsToEmit.forEach((event) => {\n this.emit(...event);\n });\n }\n\n return () => this.removeListener(f);\n };\n\n removeListener = (f: (...args: T) => void) => {\n const index = this.listeners.indexOf(f);\n\n if (index === -1) return;\n\n this.listeners.splice(index, 1);\n };\n\n emit = (...args: T) => {\n if (this.bufferEventsIfNoListeners && this.listeners.length === 0) {\n this.bufferedEvents.push(args);\n\n return;\n }\n\n this.listeners.forEach((l) => l(...args));\n };\n\n bufferedEvents: T[] = [];\n}\n","import { Emitter } from \"@noya-app/emitter\";\n\nexport class ClientStorage<K extends string = string> {\n getItem(storageKey: K): string | null {\n if (typeof localStorage === \"undefined\") {\n return null;\n }\n\n return localStorage.getItem(storageKey);\n }\n\n setItem(storageKey: K, value: string | null): void {\n if (typeof localStorage === \"undefined\") {\n return;\n }\n\n if (value === null) {\n localStorage.removeItem(storageKey);\n } else {\n localStorage.setItem(storageKey, value);\n }\n\n this.emitter.emit(storageKey, value);\n }\n\n emitter = new Emitter<[K, string | null]>();\n\n _isListening = false;\n\n addListener(\n storageKey: K,\n listener: (newValue: string | null) => void\n ): () => void {\n // Set up a single listener for all storage events\n if (!this._isListening && typeof window !== \"undefined\") {\n this._isListening = true;\n\n window.addEventListener(\"storage\", (event: StorageEvent) => {\n this.emitter.emit(event.key as any, event.newValue);\n });\n }\n\n return this.emitter.addListener((key, value) => {\n if (key === storageKey) {\n listener(value);\n }\n });\n }\n}\n\nexport const clientStorage = new ClientStorage();\n","import { memoGeneric } from \"@noya-app/react-utils\";\nimport React, { useMemo } from \"react\";\nimport { cssVars } from \"../theme\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport { IconButton } from \"./IconButton\";\nimport { MenuItem } from \"./internal/Menu\";\n\ntype ActionMenuProps<TMenu extends string> = {\n menuItems: MenuItem<TMenu>[];\n onSelect: (action: TMenu) => void;\n selected?: boolean;\n disabled?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n style?: React.CSSProperties;\n variant?: \"normal\" | \"bare\";\n color?: string;\n};\n\nexport const ActionMenu = memoGeneric(function ActionMenu<\n TMenu extends string,\n>({\n menuItems,\n onSelect,\n selected,\n onOpenChange,\n disabled,\n className,\n style,\n variant = \"normal\",\n color,\n}: ActionMenuProps<TMenu>) {\n const internalStyle = useMemo(() => {\n return {\n backgroundColor: selected\n ? cssVars.colors.primaryPastel\n : cssVars.colors.inputBackground,\n padding: variant === \"bare\" ? 0 : 4,\n ...style,\n };\n }, [selected, style, variant]);\n\n return (\n <DropdownMenu\n items={menuItems}\n onSelect={onSelect}\n onOpenChange={onOpenChange}\n >\n <IconButton\n style={internalStyle}\n className={className}\n iconName=\"DotsVerticalIcon\"\n color={color ?? (selected ? cssVars.colors.primary : \"currentColor\")}\n disabled={disabled}\n />\n </DropdownMenu>\n );\n});\n","import tailwindConfig from \"@noya-app/noya-tailwind-config\";\nimport { convertKebabToCamelCase, parseCssVarName } from \"./themeUtils\";\n\nexport type Theme = (typeof tailwindConfig.theme)[\"extend\"];\n\nexport type ThemeColor = keyof Theme[\"colors\"];\n\nexport const cssVars = convertKebabToCamelCase(tailwindConfig.theme.extend);\n\nexport const cssVarNames = convertKebabToCamelCase(\n tailwindConfig.theme.extend,\n parseCssVarName\n);\n\nexport const INPUT_HEIGHT = 27;\n","export type KebabToCamelCase<S extends string> =\n S extends `${infer First}-${infer Rest}`\n ? `${First}${Capitalize<KebabToCamelCase<Rest>>}`\n : S;\n\ntype IsPlainObject<T> = T extends Array<any> | Set<any> | Map<any, any>\n ? false\n : T extends object\n ? true\n : false;\n\ntype KebabToCamelCaseKeys<T> = {\n [K in keyof T as K extends string\n ? KebabToCamelCase<K>\n : K]: T[K] extends object\n ? IsPlainObject<T[K]> extends true\n ? KebabToCamelCaseKeys<T[K]>\n : T[K]\n : T[K];\n};\n\ntype _CamelToKebabCase<S extends string> = S extends `${infer C}${infer Rest}`\n ? C extends Uppercase<C>\n ? `-${Lowercase<C>}${_CamelToKebabCase<Rest>}`\n : `${C}${_CamelToKebabCase<Rest>}`\n : S;\n\n// Remove leading hyphen if exists\ntype TrimHyphen<S extends string> = S extends `-${infer Rest}` ? Rest : S;\n\nexport type CamelToKebabCase<S extends string> = TrimHyphen<\n _CamelToKebabCase<S>\n>;\n\nexport function camelToKebabCase<S extends string>(\n str: S\n): CamelToKebabCase<S> {\n return str.replace(/([A-Z])/g, \"-$1\").toLowerCase() as CamelToKebabCase<S>;\n}\n\nexport function kebabToCamelCase<S extends string>(\n str: S\n): KebabToCamelCase<S> {\n return str.replace(/-([a-z])/g, (_, letter) =>\n letter.toUpperCase()\n ) as KebabToCamelCase<S>;\n}\n\n// Runtime function to convert all keys in an object from kebab-case to camelCase\nexport function convertKebabToCamelCase<T extends object>(\n obj: T,\n mapValue?: (value: string) => string\n): KebabToCamelCaseKeys<T> {\n if (Array.isArray(obj) || obj instanceof Set || obj instanceof Map) {\n return obj as KebabToCamelCaseKeys<T>;\n }\n\n const result: any = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const camelKey = kebabToCamelCase(key);\n result[camelKey] =\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !(value instanceof Set) &&\n !(value instanceof Map)\n ? convertKebabToCamelCase(value, mapValue)\n : mapValue && typeof value === \"string\"\n ? mapValue(value)\n : value;\n }\n\n return result as KebabToCamelCaseKeys<T>;\n}\n\nexport function parseCssVarName(key: string) {\n return key.match(/var\\((--.*?)\\)/)?.[1] ?? \"\";\n}\n","import { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport * as RadixDropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport React, {\n ComponentProps,\n ForwardedRef,\n SyntheticEvent,\n useMemo,\n} from \"react\";\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../contexts/PortalScopeContext\";\nimport { MenuProps } from \"./ContextMenu\";\nimport { getKeyboardShortcutsForMenuItems, styles } from \"./internal/Menu\";\nimport { MenuViewport } from \"./internal/MenuViewport\";\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nexport type DropdownRootProps<T extends string> = MenuProps<T> & {\n open?: boolean;\n onCloseAutoFocus?: React.EventHandler<SyntheticEvent<unknown>>;\n emptyState?: React.ReactNode;\n contentStyle?: React.CSSProperties;\n} & Pick<\n ComponentProps<typeof RadixDropdownMenu.Content>,\n \"side\" | \"sideOffset\" | \"align\" | \"alignOffset\" | \"collisionPadding\"\n >;\n\nconst Components = {\n Separator: RadixDropdownMenu.Separator,\n ItemText: React.Fragment,\n Item: RadixDropdownMenu.Item,\n CheckboxItem: RadixDropdownMenu.CheckboxItem,\n ItemIndicator: RadixDropdownMenu.ItemIndicator,\n SubTrigger: RadixDropdownMenu.SubTrigger,\n SubContent: RadixDropdownMenu.SubContent,\n Sub: RadixDropdownMenu.Sub,\n Portal: RadixDropdownMenu.Portal,\n};\n\nconst DropdownMenuRoot = forwardRefGeneric(function DropdownMenuRoot<\n T extends string,\n>(props: DropdownRootProps<T>, forwardedRef: ForwardedRef<HTMLElement>) {\n const {\n items,\n children,\n onSelect,\n shouldBindKeyboardShortcuts,\n onOpenChange,\n open,\n onCloseAutoFocus,\n side,\n sideOffset = 4,\n align,\n alignOffset,\n collisionPadding = 8,\n emptyState,\n contentStyle,\n } = props;\n\n const portalScopeId = usePortalScopeId();\n\n const keymap = useMemo(\n () =>\n shouldBindKeyboardShortcuts === false\n ? {}\n : getKeyboardShortcutsForMenuItems(items, onSelect),\n [items, onSelect, shouldBindKeyboardShortcuts]\n );\n\n useKeyboardShortcuts(keymap);\n\n const contentStyles = useMemo(\n () => ({\n maxHeight: \"500px\",\n overflow: \"auto\",\n ...contentStyle,\n }),\n [contentStyle]\n );\n\n return (\n <RadixDropdownMenu.Root onOpenChange={onOpenChange} open={open}>\n <RadixDropdownMenu.Trigger\n ref={forwardedRef as ForwardedRef<any>}\n asChild\n >\n {children}\n </RadixDropdownMenu.Trigger>\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.Content\n {...portalScopeProps(portalScopeId)}\n className={styles.contentStyle}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n style={contentStyles}\n collisionPadding={collisionPadding}\n {...({ onCloseAutoFocus } as any)}\n >\n {items.length === 0 ? emptyState : null}\n <MenuViewport\n items={items}\n Components={Components}\n onSelect={onSelect}\n />\n </RadixDropdownMenu.Content>\n </RadixDropdownMenu.Portal>\n </RadixDropdownMenu.Root>\n );\n});\n\nexport const DropdownMenu = memoGeneric(DropdownMenuRoot);\n","import * as React from \"react\";\n\nexport type PortalScopeContextValue = string;\n\nconst PortalScopeContext = React.createContext<\n PortalScopeContextValue | undefined\n>(undefined);\n\nexport const PortalScopeProvider = React.memo(function PortalScopeProvider({\n children,\n portalScopeId,\n}: {\n children: React.ReactNode;\n portalScopeId: string;\n}) {\n return (\n <PortalScopeContext.Provider value={portalScopeId}>\n {children}\n </PortalScopeContext.Provider>\n );\n});\n\nexport function usePortalScopeId(): string {\n return React.useContext(PortalScopeContext) ?? \"\";\n}\n\nexport const portalScopeDataSetName = \"noyaPortalScope\";\nexport const portalScopePropName = `data-noya-portal-scope`;\n\nexport function portalScopeProps(id?: string) {\n return {\n [portalScopePropName]: id,\n };\n}\n\nexport function getClosestPortalScope(element: EventTarget) {\n if (!(element instanceof HTMLElement)) {\n return;\n }\n\n const closest = element.closest(`[${portalScopePropName}]`);\n\n if (!closest || !(closest instanceof HTMLElement)) {\n return;\n }\n\n return closest.dataset[portalScopeDataSetName];\n}\n","import { getShortcutDisplayParts } from \"@noya-app/noya-keymap\";\nimport React, { memo, ReactNode } from \"react\";\nimport { useDesignSystemConfiguration } from \"../../contexts/DesignSystemConfiguration\";\nimport { cx, mergeConflictingClassNames } from \"../../utils/classNames\";\nimport { IScoredItem } from \"../../utils/fuzzyScorer\";\nimport withSeparatorElements from \"../../utils/withSeparatorElements\";\nimport { IconName } from \"../Icons\";\nimport { Spacer } from \"../Spacer\";\nimport { textStyles } from \"../Text\";\n\n// From electron\nexport type MenuItemRole =\n | \"undo\"\n | \"redo\"\n | \"cut\"\n | \"copy\"\n | \"paste\"\n | \"pasteAndMatchStyle\"\n | \"delete\"\n | \"selectAll\"\n | \"reload\"\n | \"forceReload\"\n | \"toggleDevTools\"\n | \"resetZoom\"\n | \"zoomIn\"\n | \"zoomOut\"\n | \"toggleSpellChecker\"\n | \"togglefullscreen\"\n | \"window\"\n | \"minimize\"\n | \"close\"\n | \"help\"\n | \"about\"\n | \"services\"\n | \"hide\"\n | \"hideOthers\"\n | \"unhide\"\n | \"quit\"\n | \"showSubstitutions\"\n | \"toggleSmartQuotes\"\n | \"toggleSmartDashes\"\n | \"toggleTextReplacement\"\n | \"startSpeaking\"\n | \"stopSpeaking\"\n | \"zoom\"\n | \"front\"\n | \"appMenu\"\n | \"fileMenu\"\n | \"editMenu\"\n | \"viewMenu\"\n | \"shareMenu\"\n | \"recentDocuments\"\n | \"toggleTabBar\"\n | \"selectNextTab\"\n | \"selectPreviousTab\"\n | \"mergeAllWindows\"\n | \"clearRecentDocuments\"\n | \"moveTabToNewWindow\"\n | \"windowMenu\";\n\nexport type SeparatorItem = {\n type: \"separator\";\n};\n\nexport const separator: SeparatorItem = {\n type: \"separator\",\n};\n\ntype FalsyReactNode = false | \"\" | null | undefined;\n\nexport type MenuItemIcon = IconName | React.ReactElement | FalsyReactNode;\n\ntype BaseMenuItem = {\n checked?: boolean;\n disabled?: boolean;\n icon?: MenuItemIcon;\n role?: MenuItemRole;\n alwaysInclude?: boolean;\n title: NonNullable<ReactNode>;\n};\n\nexport type SectionHeaderMenuItem = {\n type: \"sectionHeader\";\n id: string;\n title: ReactNode;\n maxVisibleItems?: number;\n variant?: \"normal\" | \"label\";\n};\n\nexport type SelectableMenuItem<T extends string> = BaseMenuItem & {\n type?: undefined;\n shortcut?: string;\n value: T;\n testSelected?: boolean;\n tooltip?: ReactNode;\n};\n\nexport type SubMenuItem<T extends string> = BaseMenuItem & {\n type: \"submenu\";\n items: MenuItem<T>[];\n id: string;\n};\n\nexport type NonSelectableMenuItem<T extends string> =\n | SeparatorItem\n | SectionHeaderMenuItem\n | SubMenuItem<T>;\n\nexport type MenuItem<T extends string> =\n | SeparatorItem\n | SelectableMenuItem<T>\n | SectionHeaderMenuItem\n | SubMenuItem<T>;\n\ntype ScoredSelectableMenuItem<T extends string> = SelectableMenuItem<T> &\n IScoredItem;\n\nexport type ScoredMenuItem<T extends string> =\n | ScoredSelectableMenuItem<T>\n | SectionHeaderMenuItem;\n\n// Extract type T of RegularMenuItem<T> within MenuItem<T>\nexport type ExtractMenuItemType<T> =\n T extends SelectableMenuItem<infer U> ? U : never;\n\nexport const isSelectableMenuItem = <T extends string>(\n item: MenuItem<T>\n): item is SelectableMenuItem<T> => {\n return item.type === undefined;\n};\n\nexport const isNonSelectableMenuItem = <T extends string>(\n item: MenuItem<T>\n): item is NonSelectableMenuItem<T> => !isSelectableMenuItem(item);\n\nexport const isMenuItemSectionHeader = (\n item: MenuItem<string>\n): item is SectionHeaderMenuItem => item.type === \"sectionHeader\";\n\nexport const isSelectableMenuItemWithScore = (\n item: MenuItem<string>\n): item is ScoredSelectableMenuItem<string> =>\n isSelectableMenuItem(item) && \"index\" in item && \"score\" in item;\n\nexport const getMenuItemKey = <T extends string>(\n item: MenuItem<T>,\n index: number\n): string => {\n switch (item.type) {\n case \"separator\":\n return index.toString();\n case \"sectionHeader\":\n return item.id;\n case \"submenu\":\n return item.id;\n default:\n return item.value;\n }\n};\n\nexport const CHECKBOX_WIDTH = 15;\nexport const CHECKBOX_RIGHT_INSET = 6;\nexport const CHECKBOX_INDENT_WIDTH = 6;\n\nexport const styles = {\n separatorStyle: \"h-px bg-divider mx-3 my-1\",\n selectedItemStyle:\n \"focus:outline-none focus:text-selected-list-item-text focus:bg-selected-list-item-background focus:kbd:text-selected-list-item-text\",\n testSelectedItemStyle:\n \"outline-none text-selected-list-item-text bg-selected-list-item-background kbd:text-selected-list-item-text\",\n itemStyle: ({ disabled }: { disabled?: boolean }) => `\n flex-none select-none cursor-pointer rounded\n py-1.5 px-2\n transition-colors\n flex items-center\n font-sans text-button font-medium\n ${disabled ? \"text-text-disabled\" : \"\"}\n `,\n itemIndicator: {\n className: \"flex items-center relative -left-2.5\",\n style: {\n marginRight: -CHECKBOX_RIGHT_INSET,\n },\n },\n contentStyle:\n \"rounded bg-popover-background text-text shadow-popover z-menu py-1\",\n};\n\nfunction getKeyboardShortcuts<T extends string>(\n item: MenuItem<T>\n): [string, T][] {\n if (item.type === \"separator\") return [];\n if (item.type === \"sectionHeader\") return [];\n\n if (item.type === \"submenu\") return item.items.flatMap(getKeyboardShortcuts);\n\n if (item.disabled || !item.value || !item.shortcut) return [];\n\n return [[item.shortcut, item.value]];\n}\n\nexport function getKeyboardShortcutsForMenuItems<T extends string>(\n menuItems: MenuItem<T>[],\n onSelect: (type: T) => void\n): Record<string, () => void> {\n return Object.fromEntries(\n menuItems\n .flatMap(getKeyboardShortcuts)\n .map(([key, value]) => [key, () => onSelect(value)])\n );\n}\n\nconst ShortcutElement = ({\n children,\n fixedWidth,\n}: {\n children?: React.ReactNode;\n fixedWidth?: boolean;\n}) => (\n <kbd\n className={cx(\n textStyles.small,\n \"text-inherit opacity-60 tabular-nums\",\n fixedWidth && \"w-[0.9rem] text-center\"\n )}\n >\n {children}\n </kbd>\n);\n\nexport const KeyboardShortcut = memo(function KeyboardShortcut({\n shortcut,\n}: {\n shortcut: string;\n}) {\n const platform = useDesignSystemConfiguration().platform;\n\n const { keys, separator } = getShortcutDisplayParts(shortcut, platform);\n\n const keyElements = keys.map((key) => (\n <ShortcutElement\n key={key}\n fixedWidth={platform === \"mac\" && key.length === 1}\n >\n {key}\n </ShortcutElement>\n ));\n\n return (\n <>\n {separator\n ? withSeparatorElements(\n keyElements,\n <ShortcutElement>{separator}</ShortcutElement>\n )\n : keyElements}\n </>\n );\n});\n\nexport const SectionHeader = memo(function SectionHeader({\n title,\n variant = \"normal\",\n id,\n isFirst,\n indented,\n}: Omit<SectionHeaderMenuItem, \"maxVisibleItems\" | \"type\"> & {\n isFirst?: boolean;\n indented?: boolean;\n}) {\n return (\n <span\n id={id}\n className={mergeConflictingClassNames(\n [\n variant === \"label\"\n ? `text-label ${textStyles.label} font-bold text-text-disabled`\n : \"font-sans text-heading5 font-normal\",\n \"bg-listview-raised-background flex items-center py-1.5 px-3\",\n isFirst && \"-mt-1\",\n ],\n {\n categories: [\"font\"],\n }\n )}\n >\n {indented && (\n <Spacer.Horizontal\n size={CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET + CHECKBOX_INDENT_WIDTH}\n />\n )}\n {title}\n </span>\n );\n});\n","import { getCurrentPlatform, PlatformName } from \"@noya-app/noya-keymap\";\nimport * as React from \"react\";\nimport { ToastProvider } from \"../components/Toast\";\nimport { DialogProvider } from \"./DialogContext\";\nimport { FloatingWindowProvider } from \"./FloatingWindowContext\";\nimport { OpenPortalsProvider } from \"./OpenPortalsContext\";\n\nexport type DesignSystemConfigurationContextValue = {\n platform: PlatformName;\n};\n\nconst DesignSystemConfigurationContext =\n React.createContext<DesignSystemConfigurationContextValue>({\n platform: \"key\",\n });\n\nexport const DesignSystemConfigurationProvider = React.memo(\n function DesignSystemConfigurationProvider({\n children,\n platform,\n }: {\n children: React.ReactNode;\n platform?: PlatformName;\n }) {\n const [internalPlatform, setInternalPlatform] =\n React.useState<PlatformName>(platform ?? \"key\");\n\n React.useEffect(() => {\n if (platform !== undefined) return;\n\n if (typeof navigator !== \"undefined\") {\n setInternalPlatform(getCurrentPlatform(navigator));\n }\n }, [platform]);\n\n const contextValue = React.useMemo(\n () => ({ platform: platform ?? internalPlatform }),\n [platform, internalPlatform]\n );\n\n return (\n <DesignSystemConfigurationContext.Provider value={contextValue}>\n <OpenPortalsProvider>\n <DialogProvider>\n <ToastProvider>\n <FloatingWindowProvider>{children}</FloatingWindowProvider>\n </ToastProvider>\n </DialogProvider>\n </OpenPortalsProvider>\n </DesignSystemConfigurationContext.Provider>\n );\n }\n);\n\nexport function useDesignSystemConfiguration(): DesignSystemConfigurationContextValue {\n return React.useContext(DesignSystemConfigurationContext);\n}\n","import * as ToastPrimitive from \"@radix-ui/react-toast\";\nimport React, { ReactNode } from \"react\";\nimport { IconButton } from \"./IconButton\";\nimport { textStyles } from \"./Text\";\n\nexport const Toast = ({\n title,\n content,\n children,\n ...props\n}: {\n title?: string;\n content: ReactNode;\n children?: React.ReactNode;\n}) => {\n return (\n <ToastPrimitive.Root\n className=\"px-2 py-2.5 grid grid-cols-[auto_max-content] gap-x-2.5 items-center rounded text-sm bg-popover-background shadow-popover text-text-muted\"\n {...props}\n >\n {title && (\n <ToastPrimitive.Title\n className={`mb-[5px] ${textStyles.label} font-bold text-text`}\n >\n {title}\n </ToastPrimitive.Title>\n )}\n <ToastPrimitive.Description\n className={`${textStyles.small} text-text-muted`}\n >\n {content}\n </ToastPrimitive.Description>\n {children && (\n <ToastPrimitive.Action asChild altText=\"\">\n {children}\n </ToastPrimitive.Action>\n )}\n <ToastPrimitive.Close aria-label=\"Close\" asChild>\n <IconButton iconName=\"Cross1Icon\" />\n </ToastPrimitive.Close>\n </ToastPrimitive.Root>\n );\n};\n\nexport const ToastProvider = ({ children }: { children: React.ReactNode }) => (\n <ToastPrimitive.Provider>\n {children}\n <ToastPrimitive.Viewport className=\"fixed bottom-0 right-0 flex flex-col p-5 g-2.5 min-w-[200px] max-w-[100vw] m-0 list-none z-[2147483647] outline-none\" />\n </ToastPrimitive.Provider>\n);\n","import * as React from \"react\";\nimport { cssVars } from \"../theme\";\nimport { Button, ButtonRootProps } from \"./Button\";\nimport { IconName, Icons } from \"./Icons\";\n\ntype Props = Omit<ButtonRootProps, \"children\" | \"variant\" | \"flex\" | \"size\"> & {\n iconName: IconName;\n className?: string;\n style?: React.CSSProperties;\n selected?: boolean;\n color?: string;\n size?: number;\n};\n\nexport const IconButton = React.memo(\n React.forwardRef(function IconButton(\n { selected, iconName, color, size, contentStyle, ...props }: Props,\n forwardedRef: React.ForwardedRef<HTMLButtonElement>\n ) {\n const Icon = Icons[iconName];\n\n const style = React.useMemo((): React.CSSProperties => {\n return {\n padding: \"0 2px\",\n ...(size && { minHeight: size }),\n ...contentStyle,\n };\n }, [contentStyle, size]);\n\n return (\n <Button ref={forwardedRef} {...props} variant=\"none\" contentStyle={style}>\n <Icon\n color={\n color ??\n (selected ? cssVars.colors.iconSelected : cssVars.colors.icon)\n }\n {...(size && { width: size, height: size })}\n />\n </Button>\n );\n })\n);\n","import React, {\n CSSProperties,\n ForwardedRef,\n forwardRef,\n ReactNode,\n useCallback,\n useMemo,\n} from \"react\";\nimport { cx, mergeConflictingClassNames } from \"../utils/classNames\";\nimport { renderIcon } from \"./Icons\";\nimport { Spacer } from \"./Spacer\";\nimport { Tooltip } from \"./Tooltip\";\nimport type { MenuItemIcon } from \"./internal/Menu\";\n\ntype ButtonVariant =\n | \"normal\"\n | \"primary\"\n | \"secondary\"\n | \"secondaryBright\"\n | \"thin\"\n | \"floating\"\n | \"none\";\n\ntype ButtonSize = \"small\" | \"normal\" | \"large\" | \"floating\";\n\nconst variantStyles: Record<ButtonVariant, string> = {\n normal:\n \"bg-input-background text-text hover:bg-input-background-light active:bg-active-background min-w-[31px]\",\n primary:\n \"bg-primary text-white hover:bg-primary-light active:bg-primary min-w-[31px]\",\n secondary:\n \"bg-secondary text-white hover:bg-secondary-light active:bg-secondary min-w-[31px]\",\n secondaryBright: \"bg-[#0ab557] text-white hover:opacity-80 active:opacity-90\",\n floating:\n \"bg-floating-button text-text shadow-[0_1px_2px_rgba(0,0,0,0.1)] hover:opacity-80 active:opacity-90\",\n thin: \"bg-transparent text-text hover:bg-input-background-light\",\n none: \"bg-transparent text-text hover:bg-input-background-light\",\n};\n\nconst sizeStyles: Record<ButtonSize | \"thin\" | \"none\", string> = {\n small: \"px-[2px] font-sans text-[10px] font-medium\",\n normal: \"px-[6px] py-1 font-sans text-button font-medium\",\n large: \"p-3 px-4 font-sans text-heading4 font-medium\",\n thin: \"px-[1px] py-1 font-sans text-button font-medium\",\n floating: \"px-1 py-0 font-sans text-[12px] font-medium\",\n none: \"py-0 px-0\",\n};\n\nexport interface ButtonRootProps {\n id?: string;\n className?: string;\n style?: CSSProperties;\n tabIndex?: number;\n icon?: MenuItemIcon;\n iconRight?: MenuItemIcon;\n children: ReactNode;\n active?: boolean;\n disabled?: boolean;\n variant?: ButtonVariant;\n size?: ButtonSize;\n tooltip?: ReactNode;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onPointerDown?: (event: React.PointerEvent<HTMLButtonElement>) => void;\n contentStyle?: CSSProperties;\n as?: React.ElementType;\n htmlFor?: string;\n href?: string;\n target?: string;\n rel?: string;\n download?: string;\n}\n\nexport const Button = forwardRef(function Button(\n {\n id,\n className,\n style,\n tabIndex,\n icon,\n iconRight,\n tooltip,\n active = false,\n disabled = false,\n variant = \"normal\",\n size = \"normal\",\n contentStyle,\n onClick,\n children,\n as: Component = \"button\",\n ...rest\n }: ButtonRootProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const baseClassName = cx(\n \"no-underline leading-[1] relative border-0 outline-none select-none text-left rounded flex items-center justify-center [&>*]:pointer-events-none [-webkit-app-region:no-drag] focus:ring-2 focus:ring-primary focus:shadow-[0_0_0_1px_var(--n-popover-background)_inset] transition-all\",\n disabled ? \"opacity-25\" : \"\",\n !className?.includes(\"flex\") ? \"flex-none\" : \"\",\n active\n ? \"bg-primary-pastel text-primary hover:bg-primary-pastel-light min-w-[31px]\"\n : variantStyles[variant],\n sizeStyles[\n variant === \"thin\"\n ? \"thin\"\n : variant === \"floating\" && size !== \"small\"\n ? \"floating\"\n : variant === \"none\"\n ? \"none\"\n : size\n ]\n );\n\n const buttonClassName = useMemo(() => {\n return className\n ? mergeConflictingClassNames([baseClassName, className], {\n categories: [\"position\"],\n })\n : baseClassName;\n }, [className, baseClassName]);\n\n const buttonElement = (\n <Component\n ref={forwardedRef}\n id={id}\n className={buttonClassName}\n style={style}\n tabIndex={tabIndex}\n disabled={disabled}\n onClick={onClick}\n onDoubleClick={useCallback((event: React.MouseEvent) => {\n event.stopPropagation();\n }, [])}\n {...rest}\n >\n <span\n className=\"min-h-[19px] flex items-center flex-1 justify-center leading-[15px]\"\n style={contentStyle}\n >\n {icon && renderIcon(icon)}\n {icon && children && <Spacer.Horizontal inline size={6} />}\n {children}\n {iconRight && (icon || children) && (\n <Spacer.Horizontal inline size={6} />\n )}\n {iconRight && renderIcon(iconRight)}\n </span>\n </Component>\n );\n\n return tooltip ? (\n <Tooltip content={tooltip}>{buttonElement}</Tooltip>\n ) : (\n buttonElement\n );\n});\n\nexport default Button;\n","import tailwindConfig from \"@noya-app/noya-tailwind-config\";\n\ntype ClassNameItem = string | number | BigInt | boolean | null | undefined;\ntype Category = \"text\" | \"color\" | \"font\" | \"flex\" | \"position\";\ntype Options = {\n categories?: Category[];\n};\n\nconst colorKeys = Object.keys(tailwindConfig.theme.extend.colors).map(\n (key) => `text-${key}`\n);\nconst colorKeysSet = new Set(colorKeys);\nconst textKeys = Object.keys(tailwindConfig.theme.extend.fontSize).map(\n (key) => `text-${key}`\n);\nconst textKeysSet = new Set(textKeys);\nconst fontKeys = [\n \"thin\",\n \"extralight\",\n \"light\",\n \"normal\",\n \"medium\",\n \"semibold\",\n \"bold\",\n \"extra-bold\",\n \"black\",\n].map((key) => `font-${key}`);\nconst fontKeysSet = new Set(fontKeys);\nconst flexKeysSet = new Set([\n \"flex-auto\",\n \"flex-none\",\n \"flex-[0_0_auto]\",\n \"flex-1\",\n]);\nconst positionKeysSet = new Set([\"absolute\", \"relative\", \"fixed\", \"sticky\"]);\nconst keyMap: Record<Category, Set<string>> = {\n text: textKeysSet,\n flex: flexKeysSet,\n color: colorKeysSet,\n font: fontKeysSet,\n position: positionKeysSet,\n};\n\nexport function cx(...args: ClassNameItem[]): string {\n return args.filter(Boolean).join(\" \").trim();\n}\n\nconst filterLastClassNameInCategory = ({\n classNames,\n categoryKeys,\n}: {\n classNames: string[];\n categoryKeys: Set<string>;\n}) => {\n const lastClassInGroup = classNames.findLast((key) => categoryKeys.has(key));\n return classNames.flatMap((className) => {\n if (categoryKeys.has(className)) {\n return lastClassInGroup === className ? [className] : [];\n }\n return [className];\n });\n};\n\nexport function mergeConflictingClassNames(\n classNames: ClassNameItem | ClassNameItem[],\n options?: Options\n): string {\n const classes = Array.isArray(classNames)\n ? cx(...classNames)\n : cx(classNames);\n let classNamesList = classes.split(/\\s+/);\n options?.categories?.forEach((category) => {\n classNamesList = filterLastClassNameInCategory({\n classNames: classNamesList,\n categoryKeys: keyMap[category],\n });\n });\n return classNamesList.join(\" \");\n}\n","import * as Icons from \"@noya-app/noya-icons\";\nimport * as React from \"react\";\n\nexport type IconName = keyof typeof Icons;\n\nexport { Icons };\n\nexport function renderIcon(\n iconName: Exclude<React.ReactNode, string> | IconName\n): React.ReactNode {\n if (typeof iconName === \"string\") {\n const Icon = Icons[iconName as IconName];\n\n return <Icon />;\n }\n\n return iconName;\n}\n","/* eslint-disable react/jsx-pascal-case */\nimport type { ForwardedRef } from \"react\";\nimport * as React from \"react\";\n\ninterface Props {\n size?: number | string;\n inline?: boolean;\n}\n\n/* ----------------------------------------------------------------------------\n * Vertical\n * ------------------------------------------------------------------------- */\n\nconst SpacerVertical = React.forwardRef<HTMLSpanElement, Props>(\n ({ size, inline, ...props }, ref: ForwardedRef<HTMLSpanElement>) => {\n return (\n <span\n className={`${inline ? \"inline-block\" : \"block\"} ${size === undefined ? \"flex flex-1\" : \"\"}`}\n style={\n size\n ? {\n minHeight: `${size}px`,\n }\n : undefined\n }\n {...props}\n ref={ref}\n />\n );\n }\n);\n\n/* ----------------------------------------------------------------------------\n * Horizontal\n * ------------------------------------------------------------------------- */\n\nconst SpacerHorizontal = React.forwardRef<HTMLSpanElement, Props>(\n ({ size, inline, ...props }, ref: ForwardedRef<HTMLSpanElement>) => {\n return (\n <span\n className={`${inline ? \"inline-block\" : \"block\"} ${size === undefined ? \"flex flex-1\" : \"\"}`}\n style={\n size\n ? {\n minWidth: `${size}px`,\n }\n : undefined\n }\n {...props}\n ref={ref}\n />\n );\n }\n);\n\nexport namespace Spacer {\n export const Vertical = SpacerVertical;\n export const Horizontal = SpacerHorizontal;\n}\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../contexts/PortalScopeContext\";\nimport { textStyles } from \"./Text\";\n\n// const Arrow = styled(TooltipPrimitive.Arrow)(({ theme }) => ({\n// fill: theme.colors.popover.background,\n// }));\n\ninterface Props {\n children: React.ReactNode;\n content: React.ReactNode;\n sideOffset?: number;\n}\n\nexport const Tooltip = React.memo(function Tooltip({\n children,\n content,\n sideOffset = 2,\n}: Props) {\n const portalScopeId = usePortalScopeId();\n\n return (\n <TooltipPrimitive.Provider>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n {...portalScopeProps(portalScopeId)}\n side=\"bottom\"\n align=\"center\"\n sideOffset={sideOffset}\n collisionPadding={8}\n className={`${textStyles.small} text-text rounded-[3px] py-small px-medium bg-popover-background shadow-popover border border-solid border-divider-strong z-menu`}\n >\n {content}\n {/* <Arrow /> */}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n});\n","import React, { ForwardedRef, forwardRef, ReactHTML, ReactNode } from \"react\";\nimport { ThemeColor } from \"../theme\";\nimport { camelToKebabCase, KebabToCamelCase } from \"../theme/themeUtils\";\nimport { cx } from \"../utils/classNames\";\n\ntype Variant =\n | \"title\"\n | \"subtitle\"\n | \"heading1\"\n | \"heading2\"\n | \"heading3\"\n | \"heading4\"\n | \"heading5\"\n | \"body\"\n | \"small\"\n | \"button\"\n | \"code\"\n | \"label\";\n\nconst elements: Record<Variant, keyof ReactHTML> = {\n title: \"h1\",\n subtitle: \"h1\",\n heading1: \"h1\",\n heading2: \"h2\",\n heading3: \"h3\",\n heading4: \"h4\",\n heading5: \"h5\",\n body: \"p\",\n small: \"span\",\n button: \"span\",\n code: \"code\",\n label: \"span\",\n};\n\nexport const textStyles: Record<Variant, string> = {\n title: \"font-sans text-title font-bold\",\n subtitle: \"font-sans text-subtitle font-medium\",\n heading1: \"font-sans text-heading1 font-semibold\",\n heading2: \"font-sans text-heading2 font-medium\",\n heading3: \"font-sans text-heading3 font-normal\",\n heading4: \"font-sans text-heading4 font-medium\",\n heading5: \"font-sans text-heading5 font-medium\",\n body: \"font-sans text-base font-normal\",\n small: \"font-sans text-heading5 font-normal\",\n button: \"font-sans text-button font-medium\",\n code: \"font-mono text-code\",\n label: \"font-sans text-label font-normal uppercase\",\n} as const;\n\nexport type TextProps = {\n as?: keyof ReactHTML;\n href?: string;\n className?: string;\n style?: React.CSSProperties;\n variant: Variant;\n color?: KebabToCamelCase<ThemeColor>;\n children: ReactNode;\n id?: string;\n onClick?: () => void;\n onDoubleClick?: () => void;\n onKeyDown?: (event: React.KeyboardEvent<HTMLSpanElement>) => void;\n tabIndex?: number;\n};\n\nexport const Text = forwardRef(function Text(\n {\n as,\n variant,\n children,\n className,\n color = \"text\",\n href,\n tabIndex,\n onClick,\n onKeyDown,\n style,\n ...rest\n }: TextProps,\n forwardedRef: ForwardedRef<HTMLElement>\n) {\n const Component = as ?? elements[variant] ?? \"span\";\n\n return (\n <Component\n // @ts-expect-error expected to be many semantic html elements\n ref={forwardedRef}\n className={cx(\n `${textStyles[variant]} text-${camelToKebabCase(String(color)) ?? \"text\"} `,\n className\n )}\n style={style}\n tabIndex={tabIndex}\n onClick={onClick}\n onKeyDown={onKeyDown}\n {...((href && { href }) as any)}\n {...rest}\n >\n {children}\n </Component>\n );\n});\n\ntype PresetProps = Omit<TextProps, \"variant\">;\n\nexport const Heading1 = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"heading1\" />\n )\n);\n\nexport const Heading2 = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"heading2\" />\n )\n);\n\nexport const Heading3 = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"heading3\" />\n )\n);\n\nexport const Heading4 = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"heading4\" />\n )\n);\n\nexport const Heading5 = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"heading5\" />\n )\n);\n\nexport const Body = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"body\" />\n )\n);\n\nexport const Small = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"small\" />\n )\n);\n\n// export const Label = forwardRef(\n// (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n// <Text ref={ref} {...props} variant=\"label\" />\n// ),\n// );\n\nexport const Italic = ({ children }: { children: ReactNode }) => (\n <span\n style={{\n fontStyle: \"italic\",\n }}\n >\n {children}\n </span>\n);\n","import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Button } from \"../components/Button\";\nimport { Dialog, IDialog } from \"../components/Dialog\";\nimport { InputField } from \"../components/InputField\";\nimport { Spacer } from \"../components/Spacer\";\n\nfunction createDeferredPromise<T>() {\n let resolve: (value: T) => void = () => {};\n let reject: (value: any) => void = () => {};\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return { promise, resolve, reject };\n}\n\ntype RenderableProps = { close: () => void };\n\nexport type DialogContextValue = {\n openDialog(\n options: BaseDialogContents & {\n children: ReactNode | ((props: RenderableProps) => ReactNode);\n }\n ): Promise<void>;\n\n openInputDialog(\n options:\n | string\n | (BaseDialogContents & {\n placeholder?: string;\n initialValue?: string;\n })\n ): Promise<string | undefined>;\n\n openConfirmationDialog(\n options:\n | string\n | (BaseDialogContents & {\n confirmButtonLabel?: string;\n cancelButtonLabel?: string;\n })\n ): Promise<boolean>;\n\n containsElement(element: HTMLElement): boolean;\n};\n\nconst DialogContext = createContext<DialogContextValue | undefined>(undefined);\n\ntype BaseDialogContents = {\n style?: React.CSSProperties;\n className?: string;\n title: string;\n description?: ReactNode;\n};\n\ntype InputDialogContents = BaseDialogContents & {\n type: \"input\";\n placeholder?: string;\n inputValue: string;\n resolve: (value: string | undefined) => void;\n};\n\ntype ConfirmationDialogContents = BaseDialogContents & {\n type: \"confirmation\";\n confirmButtonLabel?: string;\n cancelButtonLabel?: string;\n resolve: (value: boolean) => void;\n};\n\ntype CustomDialogContents = BaseDialogContents & {\n type: \"custom\";\n children: ReactNode;\n resolve: () => void;\n};\n\ntype DialogContents =\n | InputDialogContents\n | ConfirmationDialogContents\n | CustomDialogContents;\n\nexport const DialogProvider = function DialogProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const [contents, setContents] = useState<DialogContents | undefined>();\n\n const isOpen = !!contents;\n\n const close = useCallback(() => {\n if (contents) {\n if (contents.type === \"input\") {\n contents.resolve(undefined);\n } else {\n contents.resolve(false);\n }\n }\n\n setContents(undefined);\n }, [contents]);\n\n const closeRef = useRef(close);\n closeRef.current = close;\n\n const submit = useCallback(() => {\n if (!contents || contents.type !== \"input\") return;\n\n contents.resolve(contents.inputValue);\n setContents(undefined);\n }, [contents]);\n\n const open: DialogContextValue[\"openInputDialog\"] = useCallback((options) => {\n const { promise, resolve } = createDeferredPromise<string | undefined>();\n\n const { title, description, initialValue, placeholder, style, className } =\n typeof options === \"string\" ? { title: options } : options;\n\n setContents({\n type: \"input\",\n title,\n description,\n inputValue: initialValue ?? \"\",\n placeholder,\n style,\n className,\n resolve: (value: string | undefined) => {\n resolve(value);\n setContents(undefined);\n },\n });\n\n return promise;\n }, []);\n\n const openConfirmation: DialogContextValue[\"openConfirmationDialog\"] =\n useCallback((options) => {\n const { promise, resolve } = createDeferredPromise<boolean>();\n\n const {\n title,\n description,\n confirmButtonLabel,\n cancelButtonLabel,\n style,\n className,\n } = typeof options === \"string\" ? { title: options } : options;\n\n setContents({\n type: \"confirmation\",\n title,\n description,\n confirmButtonLabel,\n cancelButtonLabel,\n style,\n className,\n resolve: (value: boolean) => {\n resolve(value);\n setContents(undefined);\n },\n });\n\n return promise;\n }, []);\n\n const openCustomDialog: DialogContextValue[\"openDialog\"] = useCallback(\n (options) => {\n const { promise, resolve } = createDeferredPromise<void>();\n\n const { title, description, style, className } = options;\n\n const children =\n typeof options.children === \"function\"\n ? options.children({ close: closeRef.current })\n : options.children;\n\n setContents({\n type: \"custom\",\n title,\n description,\n style,\n className,\n children,\n resolve: () => {\n resolve();\n setContents(undefined);\n },\n });\n\n return promise;\n },\n []\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== \"Enter\") return;\n\n event.stopPropagation();\n event.preventDefault();\n\n submit();\n },\n [submit]\n );\n\n const inputRef = useRef<HTMLInputElement>(null);\n const dialogRef = useRef<IDialog>(null);\n\n const containsElement = useCallback((element: HTMLElement) => {\n if (!dialogRef.current) return false;\n\n return dialogRef.current.containsElement(element);\n }, []);\n\n return (\n <>\n <DialogContext.Provider\n value={useMemo(\n () => ({\n openDialog: openCustomDialog,\n openInputDialog: open,\n openConfirmationDialog: openConfirmation,\n containsElement,\n }),\n [containsElement, open, openConfirmation, openCustomDialog]\n )}\n >\n {children}\n </DialogContext.Provider>\n <Dialog\n ref={dialogRef}\n title={contents?.title}\n description={contents?.description}\n open={isOpen}\n style={contents?.style}\n className={contents?.className}\n onOpenChange={useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n close();\n }\n },\n [close]\n )}\n onOpenAutoFocus={useCallback(\n (event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n\n if (!contents || contents.type !== \"input\") return;\n\n inputRef.current?.focus();\n inputRef.current?.setSelectionRange(\n 0,\n inputRef.current.value.length\n );\n },\n [contents]\n )}\n >\n {contents?.type === \"confirmation\" ? (\n <div className=\"flex flex-1 flex-row items-center\">\n <Spacer.Horizontal />\n <Button\n onClick={() => {\n contents.resolve(false);\n setContents(undefined);\n }}\n >\n {contents.cancelButtonLabel ?? \"Cancel\"}\n </Button>\n <Spacer.Horizontal size={16} />\n <Button\n onClick={() => {\n contents.resolve(true);\n setContents(undefined);\n }}\n >\n {contents.confirmButtonLabel ?? \"OK\"}\n </Button>\n </div>\n ) : contents?.type === \"custom\" ? (\n <>{contents.children}</>\n ) : (\n <>\n <InputField.Root>\n <InputField.Input\n ref={inputRef}\n placeholder={\n contents?.type === \"input\" ? contents.placeholder : undefined\n }\n value={contents?.type === \"input\" ? contents.inputValue : \"\"}\n onChange={(value: string) => {\n setContents((contents) =>\n contents?.type === \"input\"\n ? {\n ...contents,\n inputValue: value,\n }\n : undefined\n );\n }}\n onKeyDown={handleKeyDown}\n />\n </InputField.Root>\n <Spacer.Vertical size={20} />\n <div className=\"flex flex-1 flex-row items-center\">\n <Spacer.Horizontal />\n <Button onClick={close}>Cancel</Button>\n <Spacer.Horizontal size={16} />\n <Button\n disabled={\n !contents || contents.type !== \"input\" || !contents.inputValue\n }\n onClick={submit}\n >\n Submit\n </Button>\n </div>\n </>\n )}\n </Dialog>\n </>\n );\n};\n\nexport function useDialogContext(): DialogContextValue {\n const value = useContext(DialogContext);\n\n if (!value) {\n throw new Error(\"Missing DialogProvider\");\n }\n\n return value;\n}\n\nexport function useOpenInputDialog() {\n return useDialogContext().openInputDialog;\n}\n\nexport function useDialogContainsElement() {\n return useDialogContext().containsElement;\n}\n\nexport function useOpenConfirmationDialog() {\n return useDialogContext().openConfirmationDialog;\n}\n\nexport function useOpenDialog() {\n return useDialogContext().openDialog;\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport React, {\n ComponentProps,\n ForwardedRef,\n forwardRef,\n ReactNode,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { IconButton } from \"./IconButton\";\nimport { Spacer } from \"./Spacer\";\n\nconst StyledOverlay = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cx(`fixed inset-0 bg-[rgba(0,0,0,0.5)] `, className)}\n {...props}\n />\n));\n\nconst StyledContent = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n return (\n <DialogPrimitive.Content\n ref={ref}\n className={cx(\n `fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 \n w-[90vw] max-w-[550px] max-h-[85vh] p-dialog-padding rounded-[2px] \n font-sans text-heading5 font-normal leading-[19px] text-text-muted \n bg-popover-background pointer-events-all z-[1000] focus:outline-none \n shadow-dialog-shadow\n flex flex-col\n `,\n className\n )}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n );\n});\n\nconst StyledTitle = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cx(\n `m-0 font-sans text-heading3 font-medium leading-[1.4] text-text `,\n className\n )}\n {...props}\n />\n));\n\nconst StyledDescription = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cx(\n `m-0 font-sans text-heading5 font-normal leading-[19px] text-text-muted `,\n className\n )}\n {...props}\n />\n));\n\nexport interface IDialog {\n containsElement: (element: HTMLElement) => boolean;\n}\n\ninterface Props {\n title?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n style?: ComponentProps<typeof StyledContent>[\"style\"];\n open: ComponentProps<typeof DialogPrimitive.Root>[\"open\"];\n onOpenChange?: ComponentProps<typeof DialogPrimitive.Root>[\"onOpenChange\"];\n onOpenAutoFocus?: ComponentProps<\n typeof DialogPrimitive.Content\n >[\"onOpenAutoFocus\"];\n closeOnInteractOutside?: boolean;\n showCloseButton?: boolean;\n className?: string;\n}\n\nexport const Dialog = forwardRef(function Dialog(\n {\n children,\n title,\n description,\n open,\n style,\n onOpenChange,\n onOpenAutoFocus,\n closeOnInteractOutside = true,\n className,\n showCloseButton = true,\n }: Props,\n forwardedRef: ForwardedRef<IDialog>\n) {\n const contentRef = useRef<HTMLDivElement>(null);\n\n useImperativeHandle(forwardedRef, () => ({\n containsElement(element) {\n if (!contentRef.current) return false;\n return contentRef.current.contains(element);\n },\n }));\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <StyledOverlay />\n <StyledContent\n ref={contentRef}\n onOpenAutoFocus={onOpenAutoFocus}\n style={style}\n className={className}\n {...(closeOnInteractOutside === false && {\n onPointerDownOutside: (event) => event.preventDefault(),\n onInteractOutside: (event) => event.preventDefault(),\n })}\n >\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <IconButton\n iconName=\"Cross1Icon\"\n className=\"z-[1]\"\n style={{\n position: \"absolute\",\n top: \"var(--n-dialog-padding)\",\n right: \"var(--n-dialog-padding)\",\n }}\n />\n </DialogPrimitive.Close>\n )}\n {title && (\n <>\n <StyledTitle>{title}</StyledTitle>\n <Spacer.Vertical size={description ? 10 : 20} />\n </>\n )}\n {description && (\n <>\n <StyledDescription>{description}</StyledDescription>\n <Spacer.Vertical size={20} />\n </>\n )}\n {children}\n </StyledContent>\n </DialogPrimitive.Root>\n );\n});\n\nexport const FullscreenDialog = forwardRef(function FullscreenDialog(\n { style, ...rest }: Props,\n forwardedRef: ForwardedRef<IDialog>\n) {\n return (\n <Dialog\n ref={forwardedRef}\n className=\"w-full h-full max-w-full max-h-full top-0 left-0 translate-none flex flex-col p-0\"\n style={style}\n {...rest}\n />\n );\n});\n","import { DropdownChevronIcon } from \"@noya-app/noya-icons\";\nimport { memoGeneric, useMergeRefs, useSize } from \"@noya-app/react-utils\";\nimport { Property } from \"csstype\";\nimport React, {\n createContext,\n FocusEventHandler,\n ForwardedRef,\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useId,\n useMemo,\n useState,\n} from \"react\";\nimport { useLabel, useLabelPosition } from \"../hooks/useLabel\";\nimport { cx, mergeConflictingClassNames } from \"../utils/classNames\";\nimport handleNudge from \"../utils/handleNudge\";\nimport { getInsetEndStyles, InputSize, startBaseStyles } from \"../utils/inputs\";\nimport { Button, ButtonRootProps } from \"./Button\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport { MenuItem } from \"./internal/Menu\";\nimport TextInput, { TextInputProps } from \"./internal/TextInput\";\nimport { Label } from \"./Label\";\nimport { Popover } from \"./Popover\";\n\nexport type InputFieldSize = \"small\" | \"medium\" | \"large\";\n\ntype InputFieldContextValue = {\n isFocused: boolean;\n onFocusChange: (isFocused: boolean) => void;\n inputRef: ForwardedRef<HTMLInputElement>;\n startRef: ForwardedRef<HTMLSpanElement>;\n endRef: ForwardedRef<HTMLSpanElement>;\n endWidth?: number;\n} & Pick<InputFieldRootProps, \"endWidth\" | \"startWidth\" | \"size\" | \"id\">;\n\nconst InputFieldContext = createContext<InputFieldContextValue>({\n startWidth: undefined,\n size: \"medium\",\n isFocused: false,\n onFocusChange: () => {},\n inputRef: null,\n startRef: null,\n endRef: null,\n});\n\nexport const useInputFieldContext = () => useContext(InputFieldContext);\n\nconst noop = () => {};\n\nexport const getFieldSpacing = ({\n endWidth = 0,\n startWidth = 0,\n variant,\n}: {\n endWidth?: number;\n startWidth?: number;\n variant?: InputFieldVariant;\n}) => ({\n paddingLeft: `${variant === \"bare\" ? startWidth : startWidth ? startWidth + 12 : 6}px`,\n paddingRight: `${variant === \"bare\" ? endWidth : endWidth ? endWidth + 12 : 6}px`,\n});\n\n/* ----------------------------------------------------------------------------\n * Dropdown\n * ------------------------------------------------------------------------- */\n\ninterface InputFieldDropdownProps<T extends string> {\n id?: string;\n items: MenuItem<T>[];\n onSelect: (value: T) => void;\n children?: ReactNode;\n}\n\nconst InputFieldDropdownMenu = memoGeneric(function InputFieldDropdownMenu<\n T extends string,\n>({ id, items, onSelect, children }: InputFieldDropdownProps<T>) {\n return (\n <DropdownMenu<T>\n items={items}\n onSelect={onSelect}\n align=\"end\"\n sideOffset={8}\n >\n {children || (\n <InputFieldButton variant=\"floating\" id={id}>\n <DropdownChevronIcon />\n </InputFieldButton>\n )}\n </DropdownMenu>\n );\n});\n\n/* ----------------------------------------------------------------------------\n * Button\n * ------------------------------------------------------------------------- */\n\n/** Inserts a Button at the end of the input. Should not be used with an InputField.Label */\nconst InputFieldButton = memo(\n forwardRef(function InputFieldButton(\n props: React.ButtonHTMLAttributes<HTMLButtonElement> &\n ButtonRootProps & {\n variant?: \"floating\" | \"normal\";\n },\n forwardedRef: ForwardedRef<HTMLButtonElement>\n ) {\n const {\n children,\n onClick,\n className,\n style,\n variant = \"normal\",\n as = \"button\",\n ...rest\n } = props;\n const { size, inputRef } = useInputFieldContext();\n\n const defaultHandleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (inputRef && typeof inputRef !== \"function\") {\n inputRef.current?.focus();\n // Select all text\n inputRef.current?.setSelectionRange(0, inputRef.current.value.length);\n }\n\n event.preventDefault();\n event.stopPropagation();\n },\n [inputRef]\n );\n\n const handlePointerDown = useCallback(\n (event: React.PointerEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n },\n []\n );\n\n const memoizedStyle = useMemo(\n () => ({\n ...(variant === \"floating\" && {\n paddingLeft: \"0px\",\n paddingRight: \"0px\",\n }),\n ...style,\n }),\n [style, variant]\n );\n\n return (\n <Button\n as={as}\n style={memoizedStyle}\n ref={forwardedRef}\n variant=\"floating\"\n onClick={onClick ?? defaultHandleClick}\n onPointerDown={handlePointerDown}\n tabIndex={-1}\n size={size === \"medium\" ? \"normal\" : size}\n className={cx(\n className,\n variant === \"floating\" && \"bg-transparent shadow-none\"\n )}\n {...rest}\n >\n {children}\n </Button>\n );\n })\n);\n\n/* ----------------------------------------------------------------------------\n * Input\n * ------------------------------------------------------------------------- */\n\n// const createCrossSVGString = memoize(\n// (color: string) =>\n// `<svg width='15' height='15' viewBox='0 0 15 15' fill='${color}' xmlns='http://www.w3.org/2000/svg'>\n// <path d='M0.877075 7.49988C0.877075 3.84219 3.84222 0.877045 7.49991 0.877045C11.1576 0.877045 14.1227 3.84219 14.1227 7.49988C14.1227 11.1575 11.1576 14.1227 7.49991 14.1227C3.84222 14.1227 0.877075 11.1575 0.877075 7.49988ZM7.49991 1.82704C4.36689 1.82704 1.82708 4.36686 1.82708 7.49988C1.82708 10.6329 4.36689 13.1727 7.49991 13.1727C10.6329 13.1727 13.1727 10.6329 13.1727 7.49988C13.1727 4.36686 10.6329 1.82704 7.49991 1.82704ZM9.85358 5.14644C10.0488 5.3417 10.0488 5.65829 9.85358 5.85355L8.20713 7.49999L9.85358 9.14644C10.0488 9.3417 10.0488 9.65829 9.85358 9.85355C9.65832 10.0488 9.34173 10.0488 9.14647 9.85355L7.50002 8.2071L5.85358 9.85355C5.65832 10.0488 5.34173 10.0488 5.14647 9.85355C4.95121 9.65829 4.95121 9.3417 5.14647 9.14644L6.79292 7.49999L5.14647 5.85355C4.95121 5.65829 4.95121 5.3417 5.14647 5.14644C5.34173 4.95118 5.65832 4.95118 5.85358 5.14644L7.50002 6.79289L9.14647 5.14644C9.34173 4.95118 9.65832 4.95118 9.85358 5.14644Z' fill-rule='evenodd' clip-rule='evenodd'></path>\n// </svg>`\n// );\n\ntype InputFieldVariant = \"normal\" | \"bare\";\n\ntype InputElementProps = {\n disabled?: boolean;\n readOnly?: boolean;\n $textAlign?: Property.TextAlign;\n $variant?: InputFieldVariant;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n value?: string;\n onSubmit?: (value: string) => void;\n as?: \"input\" | \"span\";\n};\n\nconst InputElement = forwardRef(\n (\n {\n disabled,\n readOnly,\n $textAlign,\n $variant = \"normal\",\n className,\n children,\n value,\n onSubmit,\n as = \"input\",\n style,\n ...props\n }: InputElementProps,\n forwardedRef: ForwardedRef<any>\n ) => {\n const { endWidth, inputRef, size, id, startWidth } = useInputFieldContext();\n\n const ref = useMergeRefs(inputRef, forwardedRef);\n\n const spacingStyles = getFieldSpacing({\n endWidth,\n variant: $variant,\n startWidth,\n });\n\n const inputClassName = cx(\n \"flex w-0 flex-1 relative border-0 outline-none min-w-0 self-stretch rounded bg-input-background focus:ring-2 focus:ring-primary placeholder:text-text-disabled transition-all\",\n readOnly\n ? \"text-text-muted\"\n : disabled\n ? \"text-text-disabled\"\n : \"text-text\",\n \"font-sans font-normal\",\n $textAlign && `text-${$textAlign}`,\n size === \"small\"\n ? \"text-[11px] leading-[19px] py-[1px]\"\n : size === \"large\"\n ? \"py-2.5 text-heading5\"\n : size === \"medium\"\n ? \"py-1 text-heading5\"\n : $variant === \"bare\" && \"py-1 -m-1\",\n className\n );\n\n const mergedClassName = useMemo(\n () =>\n mergeConflictingClassNames(inputClassName, {\n categories: [\"text\"],\n }),\n [inputClassName]\n );\n\n if (as === \"span\") {\n return (\n <span\n ref={ref}\n {...props}\n className={mergedClassName}\n style={{ ...spacingStyles, ...style }}\n >\n {children}\n </span>\n );\n }\n\n return (\n <TextInput\n ref={ref}\n value={value ?? \"\"}\n id={id}\n onSubmit={onSubmit ?? (() => {})}\n {...props}\n className={mergedClassName}\n style={{ ...spacingStyles, ...style }}\n />\n );\n }\n);\n\nexport type InputFieldInputProps = TextInputProps & {\n textAlign?: Property.TextAlign;\n variant?: \"bare\";\n};\n\n/** Should always be wrapped in InputField.Root */\nconst InputFieldInput = forwardRef(function InputFieldInput(\n // onFocusChange should only be passed from the root, never directly\n { textAlign, variant, ...rest }: InputFieldInputProps,\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n const { onFocusChange, inputRef } = useInputFieldContext();\n\n const ref = useMergeRefs(inputRef, forwardedRef);\n\n const handleFocusChange = useCallback(\n (isFocused: boolean) => {\n onFocusChange(isFocused);\n },\n [onFocusChange]\n );\n\n return (\n <InputElement\n ref={ref}\n $variant={variant}\n $textAlign={textAlign}\n onFocusChange={handleFocusChange}\n {...rest}\n />\n );\n});\n\nconst InputFieldTypeahead = (props: {\n prefix: string;\n value: string;\n isFocused: boolean;\n}) => {\n return (\n <InputElement\n as=\"span\"\n style={useMemo(\n () => ({\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n background: \"transparent\",\n boxShadow: \"none\",\n whiteSpace: \"pre\",\n }),\n []\n )}\n >\n <span style={{ opacity: 0 }}>{props.prefix}</span>\n {props.isFocused && (\n <span style={{ opacity: 0.5 }}>\n {props.value.slice(props.prefix.length)}\n </span>\n )}\n </InputElement>\n );\n};\n\n/* ----------------------------------------------------------------------------\n * NumberInput\n * ------------------------------------------------------------------------- */\n\ntype InputFieldNumberInputProps = Omit<\n TextInputProps,\n \"value\" | \"onChange\" | \"onKeyDown\" | \"onSubmit\" | \"readOnly\"\n> & {\n value: number | undefined;\n onNudge?: (value: number) => void;\n variant?: \"bare\";\n onFocus?: FocusEventHandler;\n onBlur?: FocusEventHandler;\n readOnly?: boolean;\n className?: string;\n} & (\n | {\n onChange: (value: number) => void;\n }\n | {\n onSubmit: (value: number) => void;\n }\n );\n\nfunction parseNumber(value: string) {\n return value ? Number(value) : NaN;\n}\n\nfunction InputFieldNumberInput(props: InputFieldNumberInputProps) {\n const { value, placeholder, onNudge, onBlur, readOnly, ...rest } = props;\n const onSubmit = \"onSubmit\" in props ? props.onSubmit : undefined;\n const onChange = \"onChange\" in props ? props.onChange : undefined;\n\n // Internal value is used to handle empty string as a valid state,\n // e.g. when the user deletes the value before entering a new one.\n // This is only used for in the onChange case.\n const [internalValue, setInternalValue] = useState<string | undefined>();\n\n const handleSubmit = useCallback(\n (value: string) => {\n const newValue = parseNumber(value);\n\n if (!isNaN(newValue)) {\n onSubmit?.(newValue);\n }\n },\n [onSubmit]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n const amount = handleNudge(event);\n\n if (!amount) return;\n\n onNudge?.(amount);\n setInternalValue(undefined);\n\n event.preventDefault();\n event.stopPropagation();\n },\n [onNudge]\n );\n\n const handleChange = useCallback(\n (value: string) => {\n if (value === \"\" || value === \"-\" || value === \".\") {\n setInternalValue(value);\n return;\n }\n\n if (value.endsWith(\".\")) {\n setInternalValue(value);\n return;\n }\n\n setInternalValue(undefined);\n\n const newValue = parseNumber(value);\n\n if (!isNaN(newValue)) {\n onChange?.(newValue);\n }\n },\n [onChange]\n );\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setInternalValue(undefined);\n onBlur?.(event);\n },\n [onBlur]\n );\n\n return (\n <InputFieldInput\n {...rest}\n value={\n internalValue !== undefined\n ? String(internalValue)\n : value === undefined\n ? \"\"\n : String(value)\n }\n placeholder={placeholder}\n onKeyDown={!readOnly ? handleKeyDown : undefined}\n onBlur={handleBlur}\n {...(readOnly ? { readOnly: true } : {})}\n {...(\"onChange\" in props\n ? { onChange: readOnly ? noop : handleChange }\n : { onSubmit: readOnly ? noop : handleSubmit })}\n />\n );\n}\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nconst RootContainer = forwardRef<\n HTMLDivElement,\n {\n $width?: number;\n className?: string;\n children?: React.ReactNode;\n style?: React.CSSProperties;\n }\n>(({ $width, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cx(\"flex flex-row relative flex-1\", className)}\n style={{\n maxWidth: $width || $width === 0 ? `${$width}px` : undefined,\n ...props.style,\n }}\n {...props}\n />\n));\n\ninterface InputFieldRootProps {\n id?: string;\n children?: ReactNode;\n start?: ReactNode;\n startClassName?: string;\n end?: ReactNode;\n endClassName?: string;\n label?: ReactNode;\n width?: number;\n startWidth?: number;\n endWidth?: number;\n /** @default medium */\n size?: InputSize;\n renderPopoverContent?: (options: { width: number }) => ReactNode;\n /**\n * if there is a popover, this is the offset from the trigger\n * @default 3\n */\n sideOffset?: number;\n onFocusChange?: (isFocused: boolean) => void;\n style?: React.CSSProperties;\n className?: string;\n}\n\nfunction InputFieldRoot({\n id,\n children,\n width,\n sideOffset = 3,\n startWidth: startWidthProp,\n endWidth: endWidthProp,\n size = \"medium\",\n renderPopoverContent,\n onFocusChange,\n style,\n className,\n start,\n end,\n startClassName,\n endClassName,\n label: labelProp,\n}: InputFieldRootProps) {\n const randomId = useId();\n\n const [isFocused, setIsFocused] = React.useState(false);\n\n const startRef = React.useRef<HTMLSpanElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const endRef = React.useRef<HTMLSpanElement>(null);\n\n const measuredInputSize = useSize(inputRef, \"width\");\n const measuredStartSize = useSize(startRef, \"width\");\n const measuredEndSize = useSize(endRef, \"width\");\n const labelPosition = useLabelPosition();\n const { label } = useLabel({ fieldId: id });\n\n const endStyles = getInsetEndStyles(size);\n\n const handleFocusChange = useCallback(\n (isFocused: boolean) => {\n setIsFocused(isFocused);\n onFocusChange?.(isFocused);\n },\n [onFocusChange]\n );\n\n const startWidth = measuredStartSize?.width ?? startWidthProp;\n const endWidth = measuredEndSize?.width ?? endWidthProp;\n\n const contextValue = useMemo(\n (): InputFieldContextValue => ({\n startWidth,\n endWidth,\n inputRef,\n startRef,\n endRef,\n size,\n isFocused,\n onFocusChange: handleFocusChange,\n id: id ?? randomId,\n }),\n [startWidth, endWidth, size, isFocused, handleFocusChange, id, randomId]\n );\n\n const insetLabel = useMemo(\n () => (\n <Label htmlFor={id} className=\"!text-text-disabled\">\n {labelProp ?? label}\n </Label>\n ),\n [id, labelProp, label]\n );\n\n const rootElement = (\n <RootContainer $width={width} style={style} className={className}>\n {children}\n {start && (\n <span ref={startRef} className={cx(startBaseStyles, startClassName)}>\n {start}\n </span>\n )}\n {(end || label) && (\n <span\n ref={endRef}\n className={cx(endStyles, label && end && \"gap-1.5\", endClassName)}\n >\n {labelProp\n ? insetLabel\n : label && labelPosition === \"inset\" && insetLabel}\n {end}\n </span>\n )}\n </RootContainer>\n );\n\n const measuredWidthObject = useMemo(\n () =>\n measuredInputSize ? { width: measuredInputSize.width + 4 } : undefined,\n [measuredInputSize]\n );\n\n return (\n <InputFieldContext.Provider value={contextValue}>\n {renderPopoverContent ? (\n <Popover\n open={true}\n trigger={rootElement}\n sideOffset={sideOffset}\n showArrow={false}\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n >\n {measuredWidthObject && (\n <div\n className=\"flex flex-col overflow-hidden\"\n style={measuredWidthObject}\n >\n {renderPopoverContent(measuredWidthObject)}\n </div>\n )}\n </Popover>\n ) : (\n rootElement\n )}\n </InputFieldContext.Provider>\n );\n}\n\nconst PrimitiveInputField = ({\n readOnly,\n disabled,\n className,\n style,\n ...props\n}: {\n readOnly?: boolean;\n disabled?: boolean;\n} & React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n>) => {\n const { id, endWidth } = useInputFieldContext();\n\n const spacingStyles = getFieldSpacing({\n endWidth,\n });\n const memoizedStyles = useMemo(\n () => ({ ...spacingStyles, ...style }),\n [spacingStyles, style]\n );\n return (\n <input\n style={memoizedStyles}\n id={id}\n className={cx(\n \"flex w-0 flex-1 relative border-none outline-none min-w-0 self-stretch rounded py-1 bg-input-background select-all pointer-events-[all] focus:ring-2 focus:ring-primary font-sans font-normal text-heading5 placeholder:text-text-disabled focus:z-interactable transition-all\",\n readOnly\n ? \"text-text-muted\"\n : disabled\n ? \"text-text-disabled\"\n : \"text-text\",\n className\n )}\n {...props}\n />\n );\n};\n\n// Create a type for the main InputField component that combines Root and Input props\nexport type InputFieldProps = InputFieldRootProps & InputFieldInputProps;\n\n// Create a map of all subcomponents\nconst InputFieldSubcomponents = {\n Root: memo(InputFieldRoot),\n Input: memo(InputFieldInput),\n Typeahead: memo(InputFieldTypeahead),\n NumberInput: memo(InputFieldNumberInput),\n DropdownMenu: InputFieldDropdownMenu,\n Button: InputFieldButton,\n PrimitiveElement: PrimitiveInputField,\n} as const;\n\n// Create the main InputField component\nconst InputFieldComponent = forwardRef<HTMLInputElement, InputFieldProps>(\n function InputField(props: InputFieldProps, ref) {\n const {\n children,\n width,\n endWidth,\n startWidth,\n label,\n start,\n end,\n size,\n renderPopoverContent,\n sideOffset,\n onFocusChange,\n style,\n className,\n ...inputProps\n } = props;\n\n return (\n <InputFieldSubcomponents.Root\n width={width}\n endWidth={endWidth}\n startWidth={startWidth}\n label={label}\n start={start}\n end={end}\n size={size}\n renderPopoverContent={renderPopoverContent}\n sideOffset={sideOffset}\n onFocusChange={onFocusChange}\n style={style}\n className={className}\n >\n <InputFieldSubcomponents.Input ref={ref} {...inputProps} />\n {children}\n </InputFieldSubcomponents.Root>\n );\n }\n);\n\n// Export both the namespace and the component\nconst InputField = Object.assign(InputFieldComponent, InputFieldSubcomponents);\n\nexport { InputField };\n","import React, { ReactNode } from \"react\";\nimport { LabelPosition } from \"../components/Label\";\n\nexport const LabelContext = React.createContext<{\n fieldId?: string;\n label?: React.ReactNode;\n}>({\n fieldId: \"\",\n label: undefined,\n});\n\ntype UseLabelParams = {\n label?: ReactNode;\n fieldId?: string;\n};\n\nexport const useLabel = ({ label, fieldId }: UseLabelParams) => {\n const { label: labelFromContext, fieldId: fieldIdFromContext } =\n React.useContext(LabelContext);\n\n return {\n label: label ?? labelFromContext,\n fieldId: fieldId ?? fieldIdFromContext,\n };\n};\n\nexport const LabelPositionContext =\n React.createContext<LabelPositionContextValue>({\n position: \"start\",\n });\n\nexport const useLabelPosition = () => {\n const { position } = React.useContext(LabelPositionContext);\n return position;\n};\n\nexport type LabelPositionContextValue = {\n position: LabelPosition;\n};\n\nexport type LabelWidthContextValue = {\n width: number;\n};\nexport const LabelWidthContext = React.createContext<LabelWidthContextValue>({\n width: 100,\n});\n\nexport const useLabelWidth = () => {\n const { width } = React.useContext(LabelWidthContext);\n return width;\n};\n","// Given a KeyboardEvent, returns the nudge amount\nexport default function handleNudge(e: {\n key: string;\n shiftKey: boolean;\n altKey: boolean;\n}): number | undefined {\n let handled = false;\n let amount = 0;\n\n switch (e.key) {\n case 'ArrowUp':\n amount = 1;\n handled = true;\n break;\n case 'ArrowDown':\n amount = -1;\n handled = true;\n break;\n }\n\n if (!handled) return;\n\n if (e.shiftKey) {\n amount *= 10;\n } else if (e.altKey) {\n amount *= 0.1;\n }\n\n return handled ? amount : undefined;\n}\n","import { cx } from \"./classNames\";\n\nexport type InputSize = \"small\" | \"medium\" | \"large\";\n\nconst insetEndBaseStyles = \"absolute inset-y-0 flex items-center z-label\";\n\nexport const getInsetEndStyles = (size: InputSize = \"medium\") => {\n return cx(\n insetEndBaseStyles,\n size === \"large\"\n ? \"right-2\"\n : size === \"medium\"\n ? \"right-1.5\"\n : size === \"small\"\n ? \"right-0.5\"\n : \"\",\n size === \"small\" ? \"min-h-[19px]\" : \"min-h-input-height\"\n );\n};\n\nexport const startBaseStyles = \"absolute left-1.5 inset-y-0 flex items-center\";\n","import { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport React, {\n AriaRole,\n FocusEventHandler,\n ForwardedRef,\n forwardRef,\n InputHTMLAttributes,\n KeyboardEventHandler,\n MouseEventHandler,\n PointerEventHandler,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useGlobalInputBlurListener } from \"../../contexts/GlobalInputBlurContext\";\n\ntype Props = {\n id?: string;\n style?: any;\n className?: string;\n type?: \"text\" | \"search\";\n disabled?: boolean;\n value: string;\n placeholder?: string;\n role?: AriaRole;\n name?: HTMLInputElement[\"name\"];\n onKeyDown?: KeyboardEventHandler;\n onClick?: MouseEventHandler;\n onDoubleClick?: MouseEventHandler;\n onPointerDown?: PointerEventHandler;\n onFocusCapture?: FocusEventHandler;\n onFocusChange?: (isFocused: boolean) => void;\n onBlur?: FocusEventHandler;\n} & Pick<\n InputHTMLAttributes<HTMLInputElement>,\n \"autoComplete\" | \"autoCapitalize\" | \"autoCorrect\" | \"spellCheck\" | \"autoFocus\"\n>;\n\ntype ReadOnlyProps = Props & {\n readOnly: true;\n};\n\nconst ReadOnlyTextInput = forwardRef(function ReadOnlyTextInput(\n { onKeyDown, onFocusChange, value, ...rest }: ReadOnlyProps,\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n return (\n <input\n ref={forwardedRef}\n {...rest}\n value={value}\n onKeyDown={onKeyDown}\n readOnly\n className=\"focus:z-interactable\"\n />\n );\n});\n\ntype ControlledProps = Props & {\n onChange: (value: string) => void;\n onFocus?: FocusEventHandler;\n onBlur?: FocusEventHandler;\n};\n\nconst ControlledTextInput = forwardRef(function ControlledTextInput(\n {\n onKeyDown,\n value,\n onChange,\n onFocusChange,\n onBlur,\n onFocusCapture,\n onFocus,\n ...rest\n }: ControlledProps,\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n\n onFocusChange?.(false);\n },\n [onBlur, onFocusChange]\n );\n\n const handleFocusCapture = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n onFocusCapture?.(event);\n\n onFocusChange?.(true);\n },\n [onFocusCapture, onFocusChange]\n );\n\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n\n onFocusChange?.(true);\n },\n [onFocus, onFocusChange]\n );\n\n return (\n <input\n ref={forwardedRef}\n {...rest}\n value={value}\n onKeyDown={onKeyDown}\n onChange={useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) =>\n onChange(event.target.value),\n [onChange]\n )}\n onBlur={handleBlur}\n onFocusCapture={handleFocusCapture}\n onFocus={handleFocus}\n />\n );\n});\n\ntype SubmittableProps = Props & {\n onSubmit: (value: string) => void;\n allowSubmittingWithSameValue?: boolean;\n submitAutomaticallyAfterDelay?: number;\n /** @default true */\n submitOnBlur?: boolean;\n};\n\nconst SubmittableTextInput = forwardRef(function SubmittableTextInput(\n {\n onKeyDown,\n value,\n onSubmit,\n onBlur,\n onFocusChange,\n onFocusCapture,\n allowSubmittingWithSameValue = false,\n submitAutomaticallyAfterDelay,\n submitOnBlur = true,\n ...rest\n }: SubmittableProps,\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n const ref = React.useRef<HTMLInputElement>(null);\n\n const latestValue = useRef(value);\n latestValue.current = value;\n\n // Track whether the user has edited the input since the last submission.\n // We use this to support automatically submitting the input after a delay.\n const userDidEdit = useRef(false);\n\n const isSubmitTriggeredByEscapeKey = useRef(false);\n\n const [internalValue, setInternalValue] = useState(\"\");\n\n useLayoutEffect(() => {\n setInternalValue(value);\n }, [value]);\n\n const handleSubmit = useCallback(() => {\n // If this submission was triggered with Escape, we attempt to submit the original value.\n // This will only actually call `onSubmit` if `allowSubmittingWithSameValue` is also true.\n const submissionValue = isSubmitTriggeredByEscapeKey.current\n ? value\n : internalValue;\n\n isSubmitTriggeredByEscapeKey.current = false;\n\n if (submissionValue === value && !allowSubmittingWithSameValue) return;\n\n onSubmit(submissionValue);\n\n userDidEdit.current = false;\n\n setInternalValue(latestValue.current);\n }, [allowSubmittingWithSameValue, value, internalValue, onSubmit]);\n\n useGlobalInputBlurListener(\n useCallback(() => {\n if (ref.current !== document.activeElement) return;\n\n handleSubmit();\n }, [handleSubmit])\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n handleSubmit();\n\n event.preventDefault();\n event.stopPropagation();\n } else if (event.key === \"Escape\") {\n isSubmitTriggeredByEscapeKey.current = true;\n\n ref.current?.blur();\n } else {\n onKeyDown?.(event);\n }\n },\n [onKeyDown, handleSubmit]\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n userDidEdit.current = true;\n\n setInternalValue(event.target.value);\n },\n []\n );\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n\n onFocusChange?.(false);\n\n if (submitOnBlur) {\n handleSubmit();\n }\n },\n [onBlur, onFocusChange, handleSubmit, submitOnBlur]\n );\n\n const handleFocusCapture = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n onFocusCapture?.(event);\n\n onFocusChange?.(true);\n },\n [onFocusCapture, onFocusChange]\n );\n\n const autoSubmitTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const latestHandleSubmit = useRef(handleSubmit);\n latestHandleSubmit.current = handleSubmit;\n\n useEffect(() => {\n if (submitAutomaticallyAfterDelay) {\n if (autoSubmitTimeoutRef.current) {\n clearTimeout(autoSubmitTimeoutRef.current);\n }\n\n autoSubmitTimeoutRef.current = setTimeout(() => {\n if (userDidEdit.current === false) return;\n\n latestHandleSubmit.current();\n }, submitAutomaticallyAfterDelay);\n }\n\n // Clear the timeout when the component is unmounted or if the value changes\n return () => {\n if (autoSubmitTimeoutRef.current) {\n clearTimeout(autoSubmitTimeoutRef.current);\n }\n };\n // Track `internalValue` to explicitly reset the timer\n }, [internalValue, submitAutomaticallyAfterDelay]);\n\n return (\n <input\n ref={composeRefs(ref, forwardedRef)}\n {...rest}\n value={internalValue}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocusCapture={handleFocusCapture}\n />\n );\n});\n\nexport type TextInputProps = ReadOnlyProps | ControlledProps | SubmittableProps;\n\n/**\n * This component shouldn't be used directly. Instead use the InputField components.\n */\nexport default forwardRef(function TextInput(\n props: TextInputProps,\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n const commonProps: TextInputProps = {\n onPointerDown: useCallback(\n (event: React.PointerEvent) => event.stopPropagation(),\n []\n ),\n onClick: useCallback(\n (event: React.MouseEvent) => event.stopPropagation(),\n []\n ),\n autoComplete: \"off\",\n autoCapitalize: \"off\",\n autoCorrect: \"off\",\n spellCheck: false,\n type: \"text\",\n disabled: false,\n ...props,\n };\n\n if (\"readOnly\" in commonProps) {\n return <ReadOnlyTextInput ref={forwardedRef} {...commonProps} readOnly />;\n } else if (\"onChange\" in commonProps) {\n return <ControlledTextInput ref={forwardedRef} {...commonProps} />;\n } else {\n return <SubmittableTextInput ref={forwardedRef} {...commonProps} />;\n }\n});\n","import { createContext, useContext, useEffect } from 'react';\n\nexport type GlobalInputBlurContextValue = {\n addListener: (f: () => void) => void;\n removeListener: (f: () => void) => void;\n trigger: () => void;\n};\n\nconst defaultValue = (() => {\n const listeners: (() => void)[] = [];\n\n const value: GlobalInputBlurContextValue = {\n addListener(f) {\n listeners.push(f);\n },\n removeListener(f) {\n const index = listeners.indexOf(f);\n if (index === -1) return;\n listeners.splice(index, 1);\n },\n trigger() {\n listeners.forEach((f) => {\n f();\n });\n },\n };\n\n return value;\n})();\n\nconst GlobalInputBlurContext =\n createContext<GlobalInputBlurContextValue>(defaultValue);\n\nexport const GlobalInputBlurProvider = GlobalInputBlurContext.Provider;\n\n/**\n * Some components store their editable state internally.\n * We trigger this event before selection changes so that they can commit their\n * edits before they unmount. This is more manual but simpler than doing so during\n * the unmount phase (e.g. the return function of `useEffect`), since handlers are\n * guaranteed to be called with the current data.\n */\nexport const useGlobalInputBlur = (): GlobalInputBlurContextValue => {\n return useContext(GlobalInputBlurContext);\n};\n\nexport function useGlobalInputBlurListener(f: () => void) {\n const context = useGlobalInputBlur();\n\n useEffect(() => {\n context.addListener(f);\n\n return () => {\n context.removeListener(f);\n };\n }, [context, f]);\n}\n\nexport function useGlobalInputBlurTrigger() {\n return useGlobalInputBlur().trigger;\n}\n","import React, { LabelHTMLAttributes, forwardRef, memo } from \"react\";\nimport { mergeConflictingClassNames } from \"../utils/classNames\";\n\nexport type LabelPosition = \"inset\" | \"start\" | \"end\" | \"above\";\n\nexport interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {}\n\nconst labelStyles = \"flex items-center select-none z-label relative\";\nconst labelTextStyles =\n \"font-sans text-label uppercase leading-3 font-bold text-text-muted\";\n\nexport const Label = memo(\n forwardRef<HTMLLabelElement, LabelProps>(function Label(\n { className, children, ...props },\n ref\n ) {\n return (\n <label\n ref={ref}\n className={mergeConflictingClassNames(\n [\n labelStyles,\n labelTextStyles,\n \"text-left min-h-input-height\",\n className,\n ],\n {\n categories: [\"color\", \"font\"],\n }\n )}\n {...props}\n >\n {children}\n </label>\n );\n })\n);\n","import { useControlledOrUncontrolled } from \"@noya-app/react-utils\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport React, { ComponentProps, useEffect, useId, useRef } from \"react\";\nimport { useOpenPortalsControls } from \"../contexts/OpenPortalsContext\";\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../contexts/PortalScopeContext\";\nimport { cx } from \"../utils/classNames\";\nimport { IconButton } from \"./IconButton\";\n\nconst closeStyles: React.CSSProperties = {\n all: \"unset\",\n fontFamily: \"inherit\",\n};\n\ntype PopoverVariant = \"normal\" | \"large\";\n\ninterface Props\n extends Pick<\n ComponentProps<(typeof PopoverPrimitive)[\"Content\"]>,\n | \"onOpenAutoFocus\"\n | \"onCloseAutoFocus\"\n | \"onPointerDownOutside\"\n | \"onInteractOutside\"\n | \"onFocusOutside\"\n | \"side\"\n > {\n children: React.ReactNode;\n trigger: React.ReactNode;\n variant?: PopoverVariant;\n closable?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n sideOffset?: number;\n onClickClose?: () => void;\n showArrow?: boolean;\n className?: string;\n portalContainer?: HTMLElement | null;\n}\n\nexport const popoverStyle = {\n base: \"rounded font-[14px] bg-popover-background shadow-popover max-h-[600px] overflow-y-auto text-text-muted z-[1000]\",\n large: \"w-[680px]\",\n normal: \"w-[240px]\",\n};\n\nexport function Popover({\n children,\n trigger,\n variant,\n closable,\n open,\n side,\n sideOffset = 4,\n showArrow = true,\n onOpenChange,\n onOpenAutoFocus,\n onCloseAutoFocus,\n onPointerDownOutside,\n onInteractOutside,\n onFocusOutside,\n onClickClose,\n className,\n portalContainer,\n}: Props) {\n const defaultId = useId();\n const portalScopeId = usePortalScopeId();\n const contentRef = useRef<HTMLDivElement>(null);\n const [isOpen, setIsOpen] = useControlledOrUncontrolled({\n value: open,\n onChange: onOpenChange,\n defaultValue: false,\n });\n\n const { addOpenPortal, removeOpenPortal } = useOpenPortalsControls();\n\n useEffect(() => {\n if (!isOpen) return;\n\n addOpenPortal(portalScopeId || defaultId);\n\n return () => {\n removeOpenPortal(portalScopeId || defaultId);\n };\n }, [addOpenPortal, isOpen, portalScopeId, removeOpenPortal, defaultId]);\n\n return (\n <PopoverPrimitive.Root open={isOpen} onOpenChange={setIsOpen}>\n <PopoverPrimitive.Trigger asChild>{trigger}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={portalContainer}>\n <PopoverPrimitive.Content\n {...portalScopeProps(portalScopeId)}\n ref={contentRef}\n className={cx(\n popoverStyle.base,\n variant === \"large\" && popoverStyle.large,\n variant === \"normal\" && popoverStyle.normal,\n className\n )}\n side={side}\n align=\"center\"\n sideOffset={sideOffset}\n onOpenAutoFocus={onOpenAutoFocus}\n onCloseAutoFocus={onCloseAutoFocus}\n onInteractOutside={onInteractOutside}\n onFocusOutside={onFocusOutside}\n onPointerDownOutside={(event) => {\n if (\n isEventInsideElement(\n event.detail.originalEvent,\n contentRef.current\n )\n ) {\n event.preventDefault();\n }\n\n onPointerDownOutside?.(event);\n }}\n collisionPadding={8}\n arrowPadding={2}\n // Don't propagate pointer down events to the canvas\n // onPointerDown={(event) => {\n // event.stopPropagation();\n // }}\n // onWheel={(event) => {\n // event.stopPropagation();\n // }}\n >\n {children}\n {showArrow && (\n <PopoverPrimitive.Arrow className=\"fill-popover-background\" />\n )}\n {closable && (\n <PopoverPrimitive.Close\n className=\"rounded-full h-[25px] w-[25px] inline-flex items-center justify-center absolute top-[5px] right-[5px]\"\n style={closeStyles}\n >\n <IconButton iconName=\"Cross2Icon\" onClick={onClickClose} />\n </PopoverPrimitive.Close>\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\n/**\n * Radix ignores pointer-events on the body when a popover is open.\n * This function checks if an event is inside an element by temporarily\n * setting pointer-events to auto and then restoring it afterward.\n */\nfunction isEventInsideElement(\n event: PointerEvent,\n element: HTMLElement | null\n) {\n if (!element) return false;\n\n const body = document.body;\n const originalPointerEvents = body.style.pointerEvents;\n body.style.pointerEvents = \"auto\";\n\n // Get all elements at the point\n const elementsAtPoint = document.elementsFromPoint(\n event.clientX,\n event.clientY\n );\n\n // Restore original pointer-events\n body.style.pointerEvents = originalPointerEvents;\n\n const target = elementsAtPoint.at(0);\n\n return target && element.contains(target);\n}\n","import * as React from \"react\";\n\nexport type OpenPortalsContextValue = {\n hasOpenPortals: boolean;\n};\n\nexport type OpenPortalControlsContextValue = {\n addOpenPortal: (portal: string) => void;\n removeOpenPortal: (portal: string) => void;\n};\n\n/**\n * This context is used to track the open portals in the design system.\n *\n * We currently use this so that we can cover up iframes when there are open portals.\n * This lets us intercept click events that would otherwise be swallowed by the iframe.\n */\nconst OpenPortalsContext = React.createContext<OpenPortalsContextValue>({\n hasOpenPortals: false,\n});\n\nconst OpenPortalControlsContext =\n React.createContext<OpenPortalControlsContextValue>({\n addOpenPortal: () => {},\n removeOpenPortal: () => {},\n });\n\nexport const OpenPortalsProvider = React.memo(function OpenPortalsProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const [openPortals, setOpenPortals] = React.useState<string[]>([]);\n\n const value = React.useMemo(\n () => ({ hasOpenPortals: openPortals.length > 0 }),\n [openPortals]\n );\n\n const controlsValue = React.useMemo(\n () => ({\n addOpenPortal: (portal: string) => {\n setOpenPortals((prev) => [...prev, portal]);\n },\n removeOpenPortal: (portal: string) => {\n setOpenPortals((prev) => prev.filter((p) => p !== portal));\n },\n }),\n []\n );\n\n return (\n <OpenPortalsContext.Provider value={value}>\n <OpenPortalControlsContext.Provider value={controlsValue}>\n {children}\n </OpenPortalControlsContext.Provider>\n </OpenPortalsContext.Provider>\n );\n});\n\nexport function useHasOpenPortals(): boolean {\n return React.useContext(OpenPortalsContext).hasOpenPortals;\n}\n\nexport function useOpenPortalsControls(): OpenPortalControlsContextValue {\n return React.useContext(OpenPortalControlsContext);\n}\n","import { uuid } from \"@noya-app/noya-utils\";\nimport React, { createContext, useContext, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype FloatingWindowContextValue = {\n createWindow: (element: React.ReactNode) => string;\n closeWindow: (id: string) => void;\n};\n\nconst FloatingWindowContext = createContext<\n FloatingWindowContextValue | undefined\n>(undefined);\n\ntype CurrentWindowContextValue = {\n id: string;\n};\n\nconst CurrentWindowContext = createContext<\n CurrentWindowContextValue | undefined\n>(undefined);\n\nexport const FloatingWindowProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const [windows, setWindows] = useState<Record<string, React.ReactNode>>({});\n\n const contextValue = useMemo(() => {\n const createWindow = (element: React.ReactNode) => {\n const id = uuid();\n\n setWindows((windows) => ({\n ...windows,\n [id]: (\n <CurrentWindowContext.Provider value={{ id }}>\n {element}\n </CurrentWindowContext.Provider>\n ),\n }));\n\n return id;\n };\n\n const closeWindow = (id: string) => {\n setWindows((windows) => {\n const { [id]: _, ...rest } = windows;\n return rest;\n });\n };\n\n return { createWindow, closeWindow };\n }, []);\n\n return (\n <FloatingWindowContext.Provider value={contextValue}>\n {children}\n {Object.entries(windows).map(([id, element]) =>\n createPortal(element, document.body, id)\n )}\n </FloatingWindowContext.Provider>\n );\n};\n\nexport const useFloatingWindowManager = () => {\n const context = useContext(FloatingWindowContext);\n\n if (!context) {\n throw new Error(\n \"useFloatingWindow must be used within a FloatingWindowProvider\"\n );\n }\n\n return context;\n};\n\nexport const useCurrentFloatingWindowInternal = () => {\n const context = useContext(CurrentWindowContext);\n\n if (!context) {\n throw new Error(\"useCurrentWindow must be used within a FloatingWindow\");\n }\n\n return context;\n};\n","import {\n Children,\n cloneElement,\n Fragment,\n isValidElement,\n ReactNode,\n} from \"react\";\n\ninterface SeparatorOptions {\n traverseFragments?: boolean;\n}\n\nfunction flattenChildren(\n children: ReactNode,\n traverseFragments: boolean\n): ReactNode[] {\n return Children.toArray(children).flatMap((child) => {\n if (traverseFragments && isValidElement(child) && child.type === Fragment) {\n return flattenChildren(child.props.children, traverseFragments);\n }\n return child;\n });\n}\n\nfunction createKey(key: string | number) {\n return `s-${key}`;\n}\n\nexport default function withSeparatorElements(\n elements: ReactNode,\n separator: ReactNode | (() => ReactNode),\n options?: SeparatorOptions\n) {\n const childrenArray = flattenChildren(\n elements,\n options?.traverseFragments ?? true\n );\n\n for (let i = childrenArray.length - 1; i > 0; i--) {\n let sep =\n typeof separator === \"function\"\n ? separator()\n : isValidElement(separator)\n ? cloneElement(separator, { key: createKey(i) })\n : separator;\n\n if (isValidElement(sep) && sep.key == null) {\n sep = cloneElement(sep, { key: createKey(i) });\n }\n\n if (!sep || typeof sep === \"boolean\") continue;\n\n childrenArray.splice(i, 0, sep);\n }\n\n return childrenArray;\n}\n","import { ChevronRightIcon } from \"@noya-app/noya-icons\";\nimport * as RadixContextMenu from \"@radix-ui/react-context-menu\";\nimport * as RadixDropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport React from \"react\";\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../../contexts/PortalScopeContext\";\nimport { cx } from \"../../utils/classNames\";\nimport { MenuItem, SectionHeader, styles } from \"./Menu\";\nimport { SelectItem } from \"./SelectItem\";\n\ntype MenuSeparatorComponent = React.FC<{ className?: string }>;\ntype MenuItemTextComponent = React.FC<{ children?: React.ReactNode }>;\ntype MenuItemComponent = React.ForwardRefExoticComponent<\n React.RefAttributes<HTMLDivElement> &\n React.PropsWithoutRef<{\n className?: string;\n disabled?: boolean;\n children?: React.ReactNode;\n value: string;\n onSelect?: (event: any) => void;\n onClick?: (event: React.MouseEvent<any>) => void;\n }>\n>;\ntype MenuCheckboxItemComponent = React.FC<{\n checked?: boolean | \"indeterminate\";\n disabled?: boolean;\n onSelect?: (event: any) => void;\n className?: string;\n children?: React.ReactNode;\n}>;\n\ntype MenuItemIndicatorComponent = React.FC<{\n className?: string;\n children?: React.ReactNode;\n}>;\n\nexport type MenuComponents = {\n Separator: MenuSeparatorComponent;\n ItemText: MenuItemTextComponent;\n Item: MenuItemComponent;\n CheckboxItem?: MenuCheckboxItemComponent;\n ItemIndicator?: MenuItemIndicatorComponent;\n Sub?: typeof RadixDropdownMenu.Sub | typeof RadixContextMenu.Sub;\n SubTrigger?:\n | typeof RadixDropdownMenu.SubTrigger\n | typeof RadixContextMenu.SubTrigger;\n SubContent?:\n | typeof RadixDropdownMenu.SubContent\n | typeof RadixContextMenu.SubContent;\n Portal?: typeof RadixDropdownMenu.Portal | typeof RadixContextMenu.Portal;\n};\n\ntype MenuViewportProps<T extends string> = {\n items: MenuItem<T>[];\n Components: MenuComponents;\n onSelect?: (value: any) => void;\n};\n\nexport const MenuViewport = <T extends string>({\n items,\n Components,\n onSelect,\n}: MenuViewportProps<T>) => {\n const portalScopeId = usePortalScopeId();\n\n const hasCheckedItem = items.some(\n (item) =>\n item.type !== \"separator\" && item.type !== \"sectionHeader\" && item.checked\n );\n\n return (\n <>\n {items.map((item, index) => {\n switch (item.type) {\n case \"separator\":\n return (\n <Components.Separator\n key={index}\n className={styles.separatorStyle}\n />\n );\n\n case \"sectionHeader\":\n return (\n <SectionHeader\n isFirst={index === 0}\n key={item.id}\n {...item}\n indented={hasCheckedItem}\n />\n );\n case \"submenu\":\n if (\n item.items &&\n Components.Sub &&\n Components.SubTrigger &&\n Components.SubContent &&\n Components.Portal\n ) {\n return (\n <Components.Sub key={item.id}>\n <Components.SubTrigger\n className={cx(\n styles.itemStyle({ disabled: item.disabled }),\n styles.selectedItemStyle\n )}\n asChild\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n disabled={item.disabled}\n >\n <SelectItem\n value={item.id}\n icon={item.icon}\n checked={item.checked}\n onSelect={onSelect}\n Components={Components}\n indented={hasCheckedItem}\n disabled={item.disabled}\n >\n <div className=\"flex items-center flex-1\">\n {item.title}\n </div>\n <ChevronRightIcon className=\"-mr-1\" />\n </SelectItem>\n </Components.SubTrigger>\n <Components.Portal>\n <Components.SubContent\n {...portalScopeProps(portalScopeId)}\n alignOffset={-5}\n className={styles.contentStyle}\n >\n <MenuViewport\n items={item.items}\n Components={Components}\n onSelect={onSelect}\n />\n </Components.SubContent>\n </Components.Portal>\n </Components.Sub>\n );\n } else return null;\n default:\n return (\n <SelectItem\n key={item.value}\n value={item.value}\n icon={item.icon}\n checked={item.checked}\n shortcut={item.shortcut}\n onSelect={onSelect}\n Components={Components}\n indented={hasCheckedItem}\n testSelected={item.testSelected}\n disabled={item.disabled}\n >\n {item.title ?? item.value}\n </SelectItem>\n );\n }\n })}\n </>\n );\n};\n","import { renderIcon } from \"../Icons\";\n\nimport * as Select from \"@radix-ui/react-select\";\nimport React, { useCallback } from \"react\";\nimport { cx } from \"../../utils/classNames\";\nimport { Spacer } from \"../Spacer\";\nimport {\n CHECKBOX_INDENT_WIDTH,\n CHECKBOX_RIGHT_INSET,\n CHECKBOX_WIDTH,\n KeyboardShortcut,\n styles,\n} from \"./Menu\";\nimport { MenuComponents } from \"./MenuViewport\";\n\nexport const SelectItem = React.forwardRef(\n (\n {\n children,\n icon,\n disabled,\n checked,\n Components,\n value,\n onSelect,\n shortcut,\n indented,\n testSelected,\n ...props\n }: Select.SelectItemProps & {\n icon?: React.ReactNode;\n checked?: boolean | \"indeterminate\";\n Components: MenuComponents;\n onSelect?: (value: any) => void;\n shortcut?: string;\n indented?: boolean;\n testSelected?: boolean;\n },\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n ) => {\n const handleSelectItem = useCallback(() => {\n if (!value) return;\n onSelect?.(value);\n }, [onSelect, value]);\n\n // Prevent the click from propagating outside the menu\n const cancelClickPropagation = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n },\n []\n );\n\n if (checked && Components.CheckboxItem) {\n return (\n <div className=\"px-1\">\n <Components.CheckboxItem\n checked={checked}\n disabled={disabled}\n onSelect={handleSelectItem}\n className={cx(\n styles.itemStyle({ disabled }),\n styles.selectedItemStyle,\n testSelected && styles.testSelectedItemStyle\n )}\n >\n <Spacer.Horizontal size={CHECKBOX_INDENT_WIDTH} />\n {Components.ItemIndicator && (\n <Components.ItemIndicator {...styles.itemIndicator}>\n <Checkmark />\n </Components.ItemIndicator>\n )}\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n {children}\n {shortcut && (\n <>\n <Spacer.Horizontal />\n <Spacer.Horizontal size={24} />\n <KeyboardShortcut shortcut={shortcut} />\n </>\n )}\n </Components.CheckboxItem>\n </div>\n );\n }\n\n return (\n <div className=\"px-1\">\n <Components.Item\n className={cx(\n styles.itemStyle({ disabled }),\n styles.selectedItemStyle,\n testSelected && styles.testSelectedItemStyle\n )}\n disabled={disabled}\n value={value}\n ref={forwardedRef}\n onClick={cancelClickPropagation}\n onSelect={handleSelectItem}\n {...props}\n >\n <div className=\"flex flex-1 items-center\">\n {indented && <Spacer.Horizontal size={CHECKBOX_INDENT_WIDTH} />}\n {checked ? (\n <div {...styles.itemIndicator}>\n <Checkmark />\n </div>\n ) : indented ? (\n <Spacer.Horizontal size={CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET} />\n ) : null}\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n <Components.ItemText>{children}</Components.ItemText>\n {shortcut && (\n <>\n <Spacer.Horizontal />\n <Spacer.Horizontal size={24} />\n <KeyboardShortcut shortcut={shortcut} />\n </>\n )}\n </div>\n </Components.Item>\n </div>\n );\n }\n);\n\nfunction Checkmark() {\n return (\n <svg\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n width={15}\n height={15}\n >\n <path\n className=\"scale-90 origin-center\"\n d=\"M3 8L6 11L12 5\"\n strokeWidth=\"1.1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n stroke=\"currentColor\"\n />\n </svg>\n );\n}\n","import * as React from \"react\";\nimport { cx } from \"../utils/classNames\";\n\ninterface Props {\n size?: number;\n opacity?: number;\n color?: string;\n trackColor?: string;\n className?: string;\n}\n\nexport const ActivityIndicator = React.memo(function ActivityIndicator({\n size = 16,\n opacity = 1,\n color = \"black\",\n trackColor = \"rgba(0, 0, 0, 0.1)\",\n className,\n}: Props) {\n const opacityStyle = React.useMemo(() => ({ opacity }), [opacity]);\n const dynamicStyles = React.useMemo(\n () => ({\n border: `2px solid ${trackColor}`,\n borderTopColor: color,\n width: `${size}px`,\n height: `${size}px`,\n }),\n [size, color, trackColor]\n );\n return (\n <div\n className={cx(\"flex justify-center items-center\", className)}\n style={opacityStyle}\n >\n <div style={dynamicStyles} className=\"animate-spin rounded-[50%]\" />\n </div>\n );\n});\n","import * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport React, { forwardRef, useMemo } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { colorFromString } from \"../utils/colorFromString\";\n\nconst getInnerAvatarStyles = (\n size: number,\n variant: \"normal\" | \"bare\"\n): React.CSSProperties => {\n const borderSize = variant === \"bare\" ? 4 : size > 36 ? 8 : 6;\n const dimension = `${size - borderSize}px`;\n return {\n width: dimension,\n height: dimension,\n minWidth: dimension,\n minHeight: dimension,\n };\n};\n\nconst AvatarRoot = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> &\n Pick<AvatarProps, \"size\" | \"variant\" | \"backgroundColor\" | \"disabled\">\n>(\n (\n {\n className,\n size = 21,\n style,\n backgroundColor,\n disabled,\n variant = \"normal\",\n ...props\n },\n ref\n ) => {\n const dynamicStyles = useMemo(\n () => ({\n width: `${size}px`,\n height: `${size}px`,\n backgroundColor,\n ...style,\n }),\n [backgroundColor, size, style]\n );\n\n return (\n <AvatarPrimitive.Root\n ref={ref}\n style={dynamicStyles}\n className={cx(\n \"flex items-center justify-center align-middle overflow-hidden select-none cursor-pointer rounded-full\",\n variant !== \"bare\" && \"border border-background\",\n className\n )}\n {...props}\n />\n );\n }\n);\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image> &\n Pick<AvatarProps, \"size\" | \"variant\">\n>(({ className, size = 21, variant = \"normal\", ...props }, ref) => {\n return (\n <AvatarPrimitive.Image\n ref={ref}\n className={cx(\n \"object-cover overflow-hidden rounded-full w-full h-full\",\n className\n )}\n style={getInnerAvatarStyles(size, variant)}\n {...props}\n />\n );\n});\n\nfunction getMonogram(text?: string) {\n return text?.at(0)?.toLocaleUpperCase();\n}\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback> &\n Pick<AvatarProps, \"size\" | \"variant\" | \"backgroundColor\">\n>(\n (\n { className, children, style, size = 21, backgroundColor, ...props },\n ref\n ) => {\n return (\n <AvatarPrimitive.Fallback\n ref={ref}\n style={{\n backgroundColor,\n fontSize: `${size * 0.5}px`,\n lineHeight: `${size}px`, // This ensures perfect vertical centering\n ...style,\n }}\n className={cx(\n \"font-medium flex items-center justify-center text-white\",\n className\n )}\n {...props}\n >\n {children}\n </AvatarPrimitive.Fallback>\n );\n }\n);\n\nexport type AvatarProps = {\n image?: string;\n name?: string;\n /** string used to generate a fallback monogram. more unique strings are better. */\n userId?: string;\n size?: number;\n overflow?: number;\n style?: React.CSSProperties;\n className?: string;\n /** colors are generated from the fallback string or title, but you can override it here */\n backgroundColor?: string;\n /** @default normal */\n variant?: \"normal\" | \"bare\";\n disabled?: boolean;\n /** Intended to be used in place of a fallback monogram, like an icon */\n children?: React.ReactNode;\n onClick?: () => void;\n};\n\nexport const Avatar = React.memo(\n forwardRef(function Avatar(\n {\n image,\n name,\n userId,\n size = 21,\n backgroundColor,\n variant = \"normal\",\n children,\n className,\n ...props\n }: AvatarProps,\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n ) {\n const getBackgroundColor =\n backgroundColor ?? colorFromString(userId ?? name ?? \"\");\n\n return (\n <AvatarRoot\n ref={forwardedRef}\n size={size}\n backgroundColor={getBackgroundColor}\n variant={variant}\n className={className}\n {...props}\n >\n {image ? (\n <AvatarImage src={image} alt={name} size={size} variant={variant} />\n ) : (\n <AvatarFallback\n backgroundColor={getBackgroundColor}\n size={size}\n variant={variant}\n >\n {children ?? getMonogram(name)}\n </AvatarFallback>\n )}\n </AvatarRoot>\n );\n })\n);\n\nconst OverflowAvatar = React.memo(function OverflowAvatar({\n size = 21,\n count,\n}: {\n size?: number;\n count: number;\n}) {\n return (\n <AvatarRoot size={size} backgroundColor=\"var(--n-text-disabled)\" disabled>\n <AvatarFallback backgroundColor=\"var(--n-text-disabled)\" size={size}>\n +{count}\n </AvatarFallback>\n </AvatarRoot>\n );\n});\n\nexport const AvatarStack = React.memo(function AvatarStack({\n size = 21,\n children,\n max = 3,\n className,\n}: {\n size?: number;\n /** @default 3 */\n max?: number;\n children: React.ReactNode;\n className?: string;\n}) {\n const avatarCount = React.Children.count(children);\n // can add logic later to shorten values over 2 digits, etc.\n const overflowCount = avatarCount - max;\n\n const childrenArray = useMemo(() => {\n const processedChildren = React.Children.toArray(children)\n .map((child) => React.cloneElement(child as React.ReactElement, { size }))\n .slice(0, max);\n\n if (avatarCount > max) {\n return [\n <OverflowAvatar key=\"overflow\" size={size} count={overflowCount} />,\n ...processedChildren,\n ];\n }\n\n return processedChildren;\n }, [children, max, size, avatarCount, overflowCount]);\n\n return (\n <div\n className={cx(\n \"flex flex-row-reverse\",\n size > 36 ? \"pl-3\" : \"pl-1.5\",\n className\n )}\n >\n {childrenArray.map((child, index) => {\n return (\n <div\n className={cx(\"relative\", size > 36 ? \"-ml-3\" : \"-ml-1.5\")}\n key={index}\n >\n {child}\n </div>\n );\n })}\n </div>\n );\n});\n","export const colorForStringValues: Record<string, string> = {\n red: \"#ef4444\", // red-500\n orange: \"#f97316\", // orange-500\n amber: \"#f59e0b\", // amber-500\n yellow: \"#eab308\", // yellow-500\n lime: \"#84cc16\", // lime-500\n green: \"#22c55e\", // green-500\n emerald: \"#10b981\", // emerald-500\n teal: \"#14b8a6\", // teal-500\n cyan: \"#06b6d4\", // cyan-500\n sky: \"#0ea5e9\", // sky-500\n blue: \"#3b82f6\", // blue-500\n indigo: \"#6366f1\", // indigo-500\n violet: \"#8b5cf6\", // violet-500\n purple: \"#a855f7\", // purple-500\n fuchsia: \"#d946ef\", // fuchsia-500\n pink: \"#ec4899\", // pink-500\n rose: \"#f43f5e\", // rose-500\n};\n\nfunction hashCode(string: string) {\n let hash = 0;\n for (const char of string) {\n hash = char.charCodeAt(0) + ((hash << 5) - hash);\n }\n return hash;\n}\n\nfunction elementFromHash<T>(array: T[], hash: number): T {\n return array[Math.abs(hash) % array.length];\n}\n\n/**\n * Create a background color and initials from a name\n * Adapted from (MIT) https://mui.com/material-ui/react-avatar/\n */\nexport function colorFromString(str: string) {\n const hash = hashCode(str);\n const backgroundColor = elementFromHash(\n Object.values(colorForStringValues),\n hash\n );\n return backgroundColor;\n}\n","import { cssVars } from \"@noya-app/noya-designsystem\";\nimport React, { forwardRef } from \"react\";\n\nexport const Logo = forwardRef(function Logo(\n props: React.ComponentProps<\"svg\">,\n ref: React.Ref<SVGSVGElement>\n) {\n const fill = props.fill || cssVars.colors.logoFill;\n\n return (\n <svg\n ref={ref}\n viewBox=\"0 0 24 26\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className=\"w-6 aspect-[24/26]\"\n >\n <path\n d=\"M6.5 3H2V12H5V6H6.5C7.32843 6 8 6.67157 8 7.5V12H11V7.5C11 5.01472 8.98528 3 6.5 3Z\"\n fill={fill}\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.5 12C19.9853 12 22 9.98528 22 7.5C22 5.01472 19.9853 3 17.5 3C15.0147 3 13 5.01472 13 7.5C13 9.98528 15.0147 12 17.5 12ZM17.5 9C18.3284 9 19 8.32843 19 7.5C19 6.67157 18.3284 6 17.5 6C16.6716 6 16 6.67157 16 7.5C16 8.32843 16.6716 9 17.5 9Z\"\n fill={fill}\n />\n <path\n d=\"M5 14H2V18.5C2 20.9853 4.01472 23 6.5 23H8V26H11V17H8V20H6.5C5.67157 20 5 19.3284 5 18.5V14Z\"\n fill={fill}\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.5 23C15.0147 23 13 20.9853 13 18.5C13 16.0147 15.0147 14 17.5 14C19.9853 14 22 16.0147 22 18.5V23H17.5ZM17.5 20C18.3284 20 19 19.3284 19 18.5C19 17.6716 18.3284 17 17.5 17C16.6716 17 16 17.6716 16 18.5C16 19.3284 16.6716 20 17.5 20Z\"\n fill={fill}\n />\n </svg>\n );\n});\n","import { IconButton } from \"../IconButton\";\n\nimport { cssVars } from \"../../theme\";\n\nimport { Avatar } from \"../Avatar\";\nimport { Logo } from \"../NoyaLogo\";\n\nimport React, { forwardRef } from \"react\";\nimport { INPUT_HEIGHT } from \"../../theme\";\nimport { cx } from \"../../utils/classNames\";\nimport { TextAreaRow } from \"../TextArea\";\n\nexport const AIAssistantLoadingIndicator = () => {\n return (\n <div className=\"flex gap-2\">\n <Avatar\n name=\"Assistant\"\n size={INPUT_HEIGHT}\n backgroundColor={cssVars.colors.primaryPastel}\n >\n <Logo style={{ width: 15 }} fill={cssVars.colors.primary} />\n </Avatar>\n <div className=\"animate-pulse\">▋</div>\n </div>\n );\n};\n\ntype AIAssistantInputProps = {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onSubmitClick: (e: React.MouseEvent<HTMLButtonElement>) => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n disabled: boolean;\n};\n\nexport const AIAssistantInput = forwardRef<\n HTMLDivElement,\n AIAssistantInputProps\n>(({ value, onChange, onSubmitClick, onKeyDown, disabled }, ref) => (\n <TextAreaRow\n autoResize\n autoFocus\n value={value}\n onChange={onChange}\n ref={ref}\n textAreaClassName=\"py-2 pl-3 !pr-9 w-full mt-3\"\n placeholder=\"Tell me what you'd like to do...\"\n onKeyDown={onKeyDown}\n disabled={disabled}\n end={\n <IconButton\n iconName=\"ArrowUpIcon\"\n onClick={onSubmitClick}\n disabled={!value.trim() || disabled}\n className=\"h-8 w-8 z-20 rounded-full\"\n size={20}\n color={cssVars.colors.text}\n style={{\n backgroundColor: cssVars.colors.chipDefaultBg,\n }}\n />\n }\n />\n));\n\ntype AIAssistantLayoutProps = {\n renderMessages: () => React.ReactNode;\n renderInput: () => React.ReactNode;\n isLoading: boolean;\n renderLoadingIndicator?: () => React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport const AIAssistantLayout = forwardRef<\n HTMLDivElement,\n AIAssistantLayoutProps\n>(\n (\n {\n renderMessages,\n renderInput,\n isLoading,\n renderLoadingIndicator,\n className,\n style,\n }: AIAssistantLayoutProps,\n ref\n ) => {\n return (\n <div className={cx(\"flex flex-col flex-1\", className)} style={style}>\n <div className=\"flex-1 min-h-0 overflow-auto\" ref={ref}>\n <div className=\"flex flex-col gap-2 pb-4 pt-1\">\n {renderMessages()}\n {isLoading ? renderLoadingIndicator?.() : null}\n </div>\n </div>\n <div className=\"border-t border-divider pt-1 px-1\">{renderInput()}</div>\n </div>\n );\n }\n);\n","import { assignRef } from \"@noya-app/react-utils\";\nimport React, {\n ComponentProps,\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { useLabel } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\n\nexport const useAutoResize = (value: string | undefined) => {\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n\n useEffect(() => {\n if (value === undefined) return;\n if (!textareaRef.current) return;\n\n textareaRef.current.style.height = \"auto\"; // Reset the height\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n }, [value]);\n\n return textareaRef;\n};\n\nexport const TextArea = memo(\n forwardRef(function TextArea(\n {\n value,\n onChangeText,\n className,\n onChange,\n autoResize = false,\n ...rest\n }: {\n onChangeText?: (value: string) => void;\n value?: string;\n autoResize?: boolean;\n } & React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n forwardedRef: React.ForwardedRef<HTMLTextAreaElement>\n ) {\n const { fieldId: id } = useLabel({ fieldId: rest.id });\n const autoResizeRef = useAutoResize(\n autoResize ? value || rest.placeholder || \"\" : undefined\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChangeText?.(event.target.value);\n onChange?.(event);\n },\n [onChangeText, onChange]\n );\n\n const handleRef = useCallback(\n (value: HTMLTextAreaElement | null) => {\n if (autoResize) {\n autoResizeRef.current = value;\n }\n assignRef(forwardedRef, value);\n },\n [autoResize, autoResizeRef, forwardedRef]\n );\n\n return (\n <textarea\n className={cx(\n `font-sans text-heading5 font-normal text-text bg-input-background flex-1 py-1 px-1.5 border-none outline-none min-h-6 w-full rounded resize-none placeholder:text-text-disabled focus:ring-2 focus:ring-primary read-only:text-text-disabled focus:z-interactable transition-all`,\n className\n )}\n {...rest}\n id={id}\n ref={handleRef}\n onChange={handleChange}\n value={value}\n />\n );\n })\n);\n\nexport const TextAreaRow = memo(\n forwardRef(function TextAreaRow(\n {\n className,\n textAreaClassName,\n textAreaRef,\n end,\n endClassName,\n ...rest\n }: {\n className?: string;\n textAreaClassName?: string;\n textAreaRef?: React.Ref<HTMLTextAreaElement>;\n end?: React.ReactNode;\n endClassName?: string;\n } & ComponentProps<typeof TextArea>,\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n ) {\n return (\n <div\n ref={forwardedRef}\n className={cx(\"relative w-full h-full\", className)}\n >\n <TextArea className={textAreaClassName} {...rest} ref={textAreaRef} />\n <div className={cx(\"absolute right-1 top-4\", endClassName)}>{end}</div>\n </div>\n );\n })\n);\n","import { isDeepEqual } from \"@noya-app/noya-utils\";\nimport React, {\n Children,\n isValidElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\n\ntype AnimatePresenceProps = {\n children: React.ReactNode;\n /**\n * Duration of enter/exit animations in milliseconds\n * @default 200\n */\n duration?: number;\n /**\n * Custom styles to apply during animations\n */\n animationStyles?: {\n entering?: React.CSSProperties;\n entered?: React.CSSProperties;\n exiting?: React.CSSProperties;\n };\n /** @default false */\n skipInitialAnimation?: boolean;\n /**\n * @default \"wait\"\n * \"wait\" - wait for the previous animation to finish before starting the next one\n * \"crossfade\" - crossfade between the previous and next animation\n */\n mode?: \"wait\" | \"crossfade\";\n className?: string;\n};\n\nconst defaultDuration = 150;\n\ntype AnimationState = \"entering\" | \"entered\" | \"exiting\" | \"exited\";\n\ntype PresenceChildProps = {\n isPresent: boolean;\n onExitComplete: () => void;\n waitingToEnter?: boolean;\n className?: string;\n} & Pick<\n AnimatePresenceProps,\n \"animationStyles\" | \"children\" | \"duration\" | \"skipInitialAnimation\"\n>;\n\nconst defaultAnimationStyles: Required<\n AnimatePresenceProps[\"animationStyles\"]\n> = {\n entering: {\n opacity: 0,\n transition: `opacity ${defaultDuration}ms ease-in`,\n },\n entered: {\n opacity: 1,\n transition: `opacity ${defaultDuration}ms ease-in`,\n },\n exiting: {\n opacity: 0,\n transition: `opacity ${defaultDuration}ms ease-out`,\n },\n};\n\nconst PresenceChild = ({\n children,\n duration,\n isPresent,\n animationStyles,\n onExitComplete,\n skipInitialAnimation,\n className,\n}: PresenceChildProps) => {\n const [animationState, setAnimationState] = useState<AnimationState>(() =>\n skipInitialAnimation && isPresent\n ? \"entered\"\n : isPresent\n ? \"entering\"\n : \"exited\"\n );\n const timeoutRef = useRef<number>();\n const isInitialMount = useRef(true);\n\n const mergedAnimationStyles = {\n ...defaultAnimationStyles,\n ...animationStyles,\n exited: {},\n willChange: \"opacity\",\n backfaceVisibility: \"hidden\",\n } as Record<AnimationState, React.CSSProperties>;\n\n useLayoutEffect(() => {\n let rafId: number;\n\n if (isPresent && animationState !== \"entered\") {\n if (isInitialMount.current && skipInitialAnimation) {\n setAnimationState(\"entered\");\n isInitialMount.current = false;\n return;\n }\n\n // Use RAF for better timing\n rafId = requestAnimationFrame(() => {\n setAnimationState(\"entering\");\n rafId = requestAnimationFrame(() => {\n setAnimationState(\"entered\");\n });\n });\n } else if (!isPresent && animationState !== \"exited\") {\n setAnimationState(\"exiting\");\n timeoutRef.current = window.setTimeout(() => {\n setAnimationState(\"exited\");\n onExitComplete();\n }, duration);\n }\n\n return () => {\n if (rafId) cancelAnimationFrame(rafId);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, [\n isPresent,\n duration,\n onExitComplete,\n animationState,\n skipInitialAnimation,\n ]);\n\n if (animationState === \"exited\" && !isPresent) {\n return null;\n }\n\n return (\n <div style={mergedAnimationStyles[animationState]} className={className}>\n {children}\n </div>\n );\n};\n\ntype MountedChild = {\n child: React.ReactElement;\n isPresent: boolean;\n skipInitialAnimation?: boolean;\n};\n\nexport const AnimatePresence = ({\n children,\n duration = defaultDuration,\n animationStyles,\n skipInitialAnimation,\n mode = \"wait\",\n className,\n}: AnimatePresenceProps) => {\n const [mountedChildren, setMountedChildren] = useState<MountedChild[]>([]);\n const previousChildrenRef = useRef<React.ReactElement[]>([]);\n const removingChildrenRef = useRef<Set<string>>(new Set());\n const waitingToEnterRef = useRef<MountedChild[]>([]);\n\n useEffect(() => {\n const newChildren = Children.toArray(children).filter(\n isValidElement\n ) as React.ReactElement[];\n\n setMountedChildren((prev) => {\n if (!prev.length && skipInitialAnimation) {\n return newChildren.map((child) => ({\n child,\n isPresent: true,\n skipInitialAnimation: skipInitialAnimation,\n }));\n }\n\n // Update presence for existing children\n const updated = prev.map((mounted) => {\n const isStillPresent = newChildren.some(\n (child) =>\n isDeepEqual(child.key, mounted.child.key) ||\n isDeepEqual(child, mounted.child)\n );\n\n if (!isStillPresent) {\n removingChildrenRef.current.add(mounted.child.key?.toString() ?? \"\");\n }\n\n return {\n ...mounted,\n isPresent: isStillPresent,\n removing: !isStillPresent\n ? true\n : removingChildrenRef.current.has(\n mounted.child.key?.toString() ?? \"\"\n ),\n };\n });\n\n // Store new children in waitingToEnterRef if we're in wait mode and have removing children\n const newMounted = newChildren\n .filter(\n (child) =>\n !prev.some(\n (p) =>\n isDeepEqual(p.child.key, child.key) ||\n isDeepEqual(p.child, child)\n )\n )\n .map((child) => ({\n child,\n isPresent: mode === \"wait\" ? false : true,\n }));\n\n previousChildrenRef.current = newChildren;\n\n if (mode === \"wait\" && removingChildrenRef.current.size > 0) {\n waitingToEnterRef.current = newMounted;\n return updated;\n }\n\n return [...updated, ...newMounted];\n });\n }, [children, skipInitialAnimation, mode]);\n\n const removeChild = useCallback((childKey: string) => {\n if (!removingChildrenRef.current.has(childKey)) return;\n removingChildrenRef.current.delete(childKey);\n\n setMountedChildren((prev) => {\n const filtered = prev.filter(\n (mounted) => mounted.child.key?.toString() !== childKey\n );\n\n if (\n removingChildrenRef.current.size === 0 &&\n waitingToEnterRef.current.length > 0\n ) {\n const enteringChildren = waitingToEnterRef.current.map((mounted) => ({\n ...mounted,\n isPresent: true,\n }));\n waitingToEnterRef.current = [];\n return [...filtered, ...enteringChildren];\n }\n\n return filtered;\n });\n }, []);\n\n return (\n <>\n {mountedChildren.map(({ child, isPresent, skipInitialAnimation }) => (\n <PresenceChild\n key={child.key}\n duration={duration}\n animationStyles={animationStyles}\n isPresent={isPresent}\n skipInitialAnimation={skipInitialAnimation}\n onExitComplete={() => removeChild(child.key?.toString() ?? \"\")}\n className={className}\n >\n {child}\n </PresenceChild>\n ))}\n </>\n );\n};\n\nexport type { AnimatePresenceProps };\n","import React, { CSSProperties, ReactNode } from \"react\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { Small } from \"./Text\";\n\nconst bannerStyles = {\n backgroundColor: cssVars.colors.inputBackground,\n color: cssVars.colors.textDisabled,\n};\n\nexport type BannerProps = {\n label?: ReactNode;\n className?: string;\n style?: CSSProperties;\n};\n\nexport function Banner({ label = \"No items\", className, style }: BannerProps) {\n return (\n <div\n className={cx(\n \"flex p-1 items-center justify-center select-none rounded\",\n className\n )}\n style={{ ...bannerStyles, ...style }}\n >\n <Small color=\"textDisabled\">{label}</Small>\n </div>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport React from \"react\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { Text, TextProps } from \"./Text\";\n\ntype BreadcrumbTextProps = Omit<\n TextProps,\n \"variant\" | \"whiteSpace\" | \"lineHeight\" | \"userSelect\"\n>;\n\nexport const BreadcrumbText = forwardRef(function BreadcrumbText(\n { children, className, onClick, ...props }: BreadcrumbTextProps,\n ref: React.ForwardedRef<HTMLSpanElement>\n) {\n return (\n <Text\n {...props}\n variant=\"small\"\n className={cx(\n \"whitespace-pre leading-[15px] select-none\",\n onClick &&\n \"hover:text-breadcrumb-text-hover hover:cursor-pointer hover:whitespace-pre hover:select-none\",\n className\n )}\n ref={ref}\n onClick={onClick}\n >\n {children}\n </Text>\n );\n});\n\nconst slashStyle = {\n margin: \"0 3px\",\n};\n\nexport const BreadcrumbSlash = () => {\n return (\n <svg\n width=\"7\"\n height=\"17\"\n viewBox=\"0 0 7 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n opacity={0.5}\n style={slashStyle}\n >\n <path\n d=\"M1 16L6 1\"\n stroke={cssVars.colors.breadcrumbIcon}\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import * as React from \"react\";\nimport { useLabel } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\n\ninterface CheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n colorScheme?: \"primary\" | \"secondary\";\n}\n\nconst colorSchemeStyles = {\n normal: \"text-text-subtle\",\n primary: \"text-primary\",\n secondary: \"text-secondary\",\n};\n\nexport const Checkbox = React.memo(\n React.forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n { className, style, colorScheme = \"secondary\", ...props },\n ref\n ) {\n const { fieldId: id } = useLabel({ fieldId: props.id });\n return (\n <div\n className={cx(\n \"flex-none relative inline-flex w-[19px] h-[19px]\",\n colorSchemeStyles[colorScheme],\n className\n )}\n style={style}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n className={`\n w-full\n h-full\n peer\n appearance-none\n m-0\n rounded\n bg-input-background\n \n border\n border-divider\n disabled:opacity-50\n disabled:cursor-not-allowed\n focus:ring-2\n focus:ring-primary\n focus:ring-offset-1\n focus:z-interactable\n transition-all\n `}\n aria-checked={props.checked}\n {...props}\n id={id}\n />\n <svg\n className={`\n absolute \n inset-0\n h-input-height \n w-input-height \n pointer-events-none\n stroke-white\n opacity-0\n peer-checked:opacity-100\n z-label\n stroke-[1.3px]\n `}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3 6L4.5 7.5L8 4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n stroke=\"currentColor\"\n />\n </svg>\n </div>\n );\n })\n);\n","import { Cross1Icon, PlusIcon } from \"@noya-app/noya-icons\";\nimport React, { forwardRef, memo } from \"react\";\nimport { useHover } from \"../hooks/useHover\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\n\ntype ChipColorScheme = \"primary\" | \"secondary\" | \"error\";\ntype ChipSize = \"small\" | \"medium\" | \"large\";\ntype ChipVariant = \"solid\" | \"outlined\" | \"ghost\";\n\n// Hoisted constants for styles\nconst BASE_STYLES =\n \"inline-flex items-center whitespace-pre rounded select-none leading-[15px]\";\n\nconst SIZE_STYLES = {\n large: \"text-[11px] p-[4px_8px]\",\n medium: \"text-[10px] p-[2px_6px]\",\n small: \"text-[9px] p-[0px_4px]\",\n} as const;\n\nconst SHADOW_STYLES = {\n primary: \"shadow-[0_0_0_1px_var(--n-chip-primary-shadow)_inset]\",\n secondary: \"shadow-[0_0_0_1px_var(--n-chip-secondary-shadow)_inset]\",\n error: \"shadow-[0_0_0_1px_var(--n-chip-error-shadow)_inset]\",\n default: \"shadow-[0_0_0_1px_var(--n-chip-default-shadow)_inset]\",\n} as const;\n\nconst COLOR_STYLES = {\n primary: {\n text: \"text-primary\",\n bg: \"bg-primary-pastel\",\n subtle: \"bg-[var(--n-chip-primary-bg)]\",\n },\n secondary: {\n text: \"text-secondary\",\n bg: \"bg-secondary-pastel\",\n subtle: \"bg-[var(--n-chip-secondary-bg)]\",\n },\n error: {\n text: \"text-text\",\n bg: \"bg-[rgb(255,219,219)]\",\n subtle: \"bg-[var(--n-chip-error-bg)]\",\n },\n default: {\n text: \"text-text\",\n bg: \"bg-input-background\",\n subtle: \"bg-[var(--n-chip-default-bg)]\",\n },\n} as const;\n\nconst ICON_BASE_STYLES = \"relative opacity-50 cursor-pointer hover:opacity-85\";\n\nconst ICON_SIZE_STYLES = {\n large: {\n add: \"ml-[-2px] mr-[2px] -top-[1px] scale-[0.75]\",\n delete: \"mr-[-2px] ml-[2px] scale-[0.75]\",\n },\n medium: {\n add: \"ml-[-2px] mr-[-2px] scale-[0.60]\",\n delete: \"mr-[-2px] scale-[0.60]\",\n },\n small: {\n add: \"ml-[-2px] mr-[-2px] scale-[0.60]\",\n delete: \"mr-[-2px] scale-[0.60]\",\n },\n} as const;\n\nexport interface ChipProps {\n id?: string;\n className?: string;\n colorScheme?: ChipColorScheme;\n variant?: ChipVariant;\n size?: ChipSize;\n children?: React.ReactNode;\n clickable?: boolean;\n deletable?: boolean;\n addable?: boolean;\n monospace?: boolean;\n onDelete?: () => void;\n onAdd?: () => void;\n onClick?: () => void;\n onHoverDeleteChange?: (hovering: boolean) => void;\n style?: React.CSSProperties;\n tabIndex?: number;\n role?: string;\n disabled?: boolean;\n}\n\nexport const Chip = memo(\n forwardRef(function Chip(\n {\n colorScheme,\n children,\n deletable,\n addable,\n clickable,\n style,\n size = \"large\",\n variant = \"solid\",\n monospace = false,\n tabIndex,\n onDelete,\n onClick,\n onAdd,\n onHoverDeleteChange,\n className,\n disabled,\n ...rest\n }: ChipProps,\n forwardedRef: React.ForwardedRef<HTMLSpanElement>\n ) {\n const { hoverProps: hoverDeleteProps } = useHover({\n onHoverChange: onHoverDeleteChange,\n });\n\n const handleClick = !children && !deletable && addable ? onAdd : onClick;\n const isInteractive = !!handleClick || clickable === true;\n\n const colors = COLOR_STYLES[colorScheme ?? \"default\"];\n const variantClasses =\n variant === \"solid\"\n ? `${colors.text} ${colors.bg}`\n : variant === \"outlined\"\n ? `${colors.text} bg-transparent ${SHADOW_STYLES[colorScheme ?? \"default\"]} hover:${colors.subtle} hover:shadow-none`\n : \"\";\n\n const chipClasses = cx(\n BASE_STYLES,\n SIZE_STYLES[size],\n monospace && \"font-mono\",\n variantClasses,\n isInteractive && \"cursor-pointer hover:opacity-85\",\n disabled && \"opacity-50\",\n className\n );\n\n const color =\n colorScheme === \"primary\"\n ? cssVars.colors.primary\n : colorScheme === \"secondary\"\n ? cssVars.colors.secondary\n : cssVars.colors.text;\n\n return (\n <span\n ref={forwardedRef}\n className={chipClasses}\n style={style}\n onClick={handleClick}\n tabIndex={tabIndex}\n {...rest}\n >\n {addable && (\n <PlusIcon\n className={cx(ICON_BASE_STYLES, ICON_SIZE_STYLES[size].add)}\n onClick={\n onAdd &&\n ((event) => {\n event.stopPropagation();\n onAdd();\n })\n }\n color={color}\n />\n )}\n {children}\n {deletable && (\n <Cross1Icon\n className={cx(ICON_BASE_STYLES, ICON_SIZE_STYLES[size].delete)}\n {...(hoverDeleteProps as any)}\n onClick={\n onDelete &&\n ((event) => {\n event.stopPropagation();\n onDelete();\n })\n }\n color={color}\n />\n )}\n </span>\n );\n })\n);\n","// From: https://github.com/radix-ui/primitives/blob/main/packages/react/scroll-area/src/useHover.ts\n// MIT License\n\n// This code is a fork of `react-aria`'s `useHover` hook. The code in this file are based on code\n// from both `react-aria` and `react-interactions`. Original licensing for each project can be found\n// in the the root directories of each respective repository.\n//\n// @see https://github.com/adobe/react-spectrum/tree/452d1cb6a49f9f493757737edaf2b64014108de6/packages/%40react-aria\n// @see https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport * as React from 'react';\n\nexport interface HoverEvent {\n /** The type of hover event being fired. */\n type: 'hoverstart' | 'hoverend';\n /** The pointer type that triggered the hover event. */\n pointerType: 'mouse' | 'pen';\n /** The target element of the hover event. */\n target: HTMLElement;\n}\n\nexport interface HoverEvents {\n /** Handler that is called when a hover interaction starts. */\n onHoverStart?(e: HoverEvent): void;\n /** Handler that is called when a hover interaction ends. */\n onHoverEnd?(e: HoverEvent): void;\n /** Handler that is called when the hover state changes. */\n onHoverChange?(isHovering: boolean): void;\n}\n\nexport interface HoverProps extends HoverEvents {\n /** Whether the hover events should be disabled. */\n isDisabled?: boolean;\n}\n\ninterface HoverResult {\n /** Props to spread on the target element. */\n hoverProps: React.HTMLAttributes<HTMLElement>;\n isHovered: boolean;\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\n// See https://bugs.webkit.org/show_bug.cgi?id=214609.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = true;\n\n // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter with\n // pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other devices that\n // don't have this quirk, we don't want to ignore a mouse hover sometime in the distant future\n // because a user previously touched the element.\n setTimeout(function clearGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = false;\n }, 50);\n}\n\nfunction handleGlobalPointerEvent(event: PointerEvent) {\n if (event.pointerType === 'touch') {\n setGlobalIgnoreEmulatedMouseEvents();\n }\n}\n\nfunction setupGlobalTouchEvents() {\n if (typeof document === 'undefined') {\n return;\n }\n\n document.addEventListener('pointerup', handleGlobalPointerEvent);\n\n hoverCount++;\n return function teardownGlobalTouchEvents() {\n hoverCount--;\n if (hoverCount > 0) {\n return;\n }\n document.removeEventListener('pointerup', handleGlobalPointerEvent);\n };\n}\n\n/**\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n */\nexport function useHover(props: HoverProps = {}): HoverResult {\n const { onHoverStart, onHoverChange, onHoverEnd, isDisabled } = props;\n\n const [isHovered, setHovered] = React.useState(false);\n const state = React.useRef({\n isHovered: false,\n ignoreEmulatedMouseEvents: false,\n }).current;\n\n React.useEffect(setupGlobalTouchEvents, []);\n\n const hoverProps = React.useMemo(\n function getHoverProps() {\n function triggerHoverStart(\n event: PointerEvent | React.PointerEvent | MouseEvent | React.MouseEvent,\n pointerType: 'mouse' | 'pen' | 'touch'\n ) {\n if (isDisabled || pointerType === 'touch' || state.isHovered) {\n return;\n }\n\n state.isHovered = true;\n const target = event.target as HTMLElement;\n\n if (onHoverStart) {\n onHoverStart({\n type: 'hoverstart',\n target,\n pointerType,\n });\n }\n\n if (onHoverChange) {\n onHoverChange(true);\n }\n\n setHovered(true);\n }\n\n function triggerHoverEnd(\n event: PointerEvent | React.PointerEvent | MouseEvent | React.MouseEvent,\n pointerType: 'mouse' | 'pen' | 'touch'\n ) {\n if (isDisabled || pointerType === 'touch' || !state.isHovered) {\n return;\n }\n\n state.isHovered = false;\n const target = event.target as HTMLElement;\n\n if (onHoverEnd) {\n onHoverEnd({\n type: 'hoverend',\n target,\n pointerType,\n });\n }\n\n if (onHoverChange) {\n onHoverChange(false);\n }\n\n setHovered(false);\n }\n\n const hoverProps: React.HTMLAttributes<HTMLElement> = {\n onPointerEnter(event: React.PointerEvent<HTMLElement>) {\n if (globalIgnoreEmulatedMouseEvents && event.pointerType === 'mouse') {\n return;\n }\n triggerHoverStart(event, event.pointerType);\n },\n onPointerLeave(event: React.PointerEvent<HTMLElement>) {\n triggerHoverEnd(event, event.pointerType);\n },\n };\n\n return hoverProps;\n },\n [isDisabled, state, onHoverStart, onHoverChange, onHoverEnd]\n );\n\n return {\n hoverProps,\n isHovered,\n };\n}","import { forwardRefGeneric } from \"@noya-app/react-utils\";\nimport React from \"react\";\nimport { Grid } from \"../components/Grid\";\nimport { MenuItem } from \"../components/internal/Menu\";\nimport {\n ListView,\n ListViewRootProps,\n ListViewRowProps,\n} from \"../components/ListView\";\nimport { List } from \"./List\";\nimport { SharedDragProps } from \"./sorting/DragRegistration\";\n\nexport type CollectionViewType = \"grid\" | \"list\";\n\nexport type CollectionThumbnailSize = \"auto\" | \"custom\";\n\nexport type CollectionRef = {\n editName: (id: string) => void;\n};\n\nexport type CollectionThumbnailProps<T> = {\n item: T;\n selected: boolean;\n size?: CollectionItemSize;\n};\n\nexport type CollectionRenderActionProps<T> = {\n item: T;\n selected: boolean;\n onOpenChange: (open: boolean) => void;\n};\n\nexport interface CollectionProps<T, M extends string = string> {\n className?: string;\n items: T[];\n getId: (item: T) => string;\n getName: (item: T) => string;\n getExpanded?: (item: T) => boolean | undefined;\n getPlaceholder?: (item: T) => string;\n /**\n * Whether directories should be expandable.\n * @default true\n */\n expandable?: boolean;\n /**\n * Whether to allow renaming files\n * @default true\n */\n renamable?: boolean;\n menuItems?: MenuItem<M>[];\n onSelectMenuItem?: (action: M, selectedItems: T[]) => void;\n onRename?: (item: T, newName: string) => void;\n renderThumbnail?: ({\n item,\n selected,\n size,\n }: CollectionThumbnailProps<T>) => React.ReactNode;\n renderAction?:\n | \"menu\"\n | ((props: CollectionRenderActionProps<T>) => React.ReactNode);\n renderDetail?: (item: T, selected: boolean) => React.ReactNode;\n /** Callback when selection changes. If not provided, selection will be disabled. */\n onSelectionChange?: (\n selectedItemIds: string[],\n event?: ListView.ClickInfo\n ) => void;\n scrollable?: boolean;\n itemRoleDescription?: string;\n /** Position of the detail content. Defaults to 'end'. */\n detailPosition?: \"end\" | \"below\";\n /** Size of the list items. Defaults to 'medium'. */\n size?: CollectionItemSize;\n /** Size of the thumbnail. Defaults to 'auto', which will be based on the size prop. */\n thumbnailSize?: CollectionThumbnailSize;\n /** For testing: Override the hover state with a specific item ID */\n testHoveredId?: string;\n /** For testing: Override the renaming state with a specific item ID */\n testRenamingId?: string;\n /** For testing: Override the drop indicator state with a specific item ID */\n testShowDropIndicatorId?: string;\n setExpanded?: (item: T, expanded: boolean) => void;\n acceptsDrop?: ListViewRootProps[\"acceptsDrop\"];\n onMoveItem?: ListViewRootProps[\"onMoveItem\"];\n getDropTargetParentIndex?: ListViewRootProps[\"getDropTargetParentIndex\"];\n getDepth?: (item: T) => number;\n onFilesDrop?: (event: React.DragEvent<Element>) => void;\n getRenamable?: (item: T) => boolean;\n /** Currently selected file IDs */\n selectedIds?: string[];\n viewType?: CollectionViewType;\n onClickItem?: (itemId: string) => void;\n onDoubleClickItem?: (itemId: string) => void;\n renderEmptyState?: () => React.ReactElement;\n /** @default false */\n sortable?: boolean;\n dragIndicatorStyle?: ListViewRowProps<M>[\"dragIndicatorStyle\"];\n sharedDragProps?: SharedDragProps;\n sortableId?: string;\n}\n\nexport const Collection = forwardRefGeneric(function Collection<\n T,\n M extends string = string,\n>(props: CollectionProps<T, M>, ref: React.ForwardedRef<CollectionRef>) {\n const { viewType, ...rest } = props;\n\n return viewType === \"grid\" ? (\n <Grid ref={ref} {...rest} />\n ) : (\n <List ref={ref} {...rest} />\n );\n});\nexport type CollectionItemSize =\n | \"xxs\"\n | \"xs\"\n | \"small\"\n | \"medium\"\n | \"large\"\n | \"xl\";\n","import {\n forwardRefGeneric,\n memoGeneric,\n useFileDropTarget,\n} from \"@noya-app/react-utils\";\nimport React, { useImperativeHandle, useRef, useState } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { updateSelection } from \"../utils/selection\";\nimport { ActionMenu } from \"./ActionMenu\";\nimport {\n CollectionItemSize,\n CollectionProps,\n CollectionRef,\n} from \"./Collection\";\nimport { EditableText } from \"./EditableText\";\nimport { GridView } from \"./GridView\";\nimport { ListView } from \"./ListView\";\n\nexport const getGridSize = (size: CollectionItemSize) => {\n // Define size ranges that allow items to grow/shrink within bounds\n const sizes: Record<\n Exclude<CollectionItemSize, number>,\n {\n minColumnWidth: string;\n gap: number;\n }\n > = {\n xxs: {\n minColumnWidth: \"36px\",\n gap: 5,\n },\n xs: {\n minColumnWidth: \"87px\",\n gap: 9,\n },\n small: {\n minColumnWidth: \"160px\",\n gap: 20,\n },\n medium: {\n minColumnWidth: \"220px\",\n gap: 30,\n },\n large: {\n minColumnWidth: \"280px\",\n gap: 40,\n },\n xl: {\n minColumnWidth: \"400px\",\n gap: 48,\n },\n };\n\n return sizes[size];\n};\n\nconst emptyArray: string[] = [];\n\nexport const Grid = memoGeneric(\n forwardRefGeneric(function Grid<T, M extends string = string>(\n props: CollectionProps<T, M> & { ref?: React.ForwardedRef<CollectionRef> },\n ref: React.ForwardedRef<CollectionRef>\n ) {\n const {\n className,\n items,\n getId,\n getName,\n // expandable,\n // getExpanded,\n getRenamable,\n // getDepth,\n // setExpanded,\n menuItems,\n onSelectMenuItem,\n onRename,\n renderThumbnail,\n renderAction,\n renderDetail,\n onSelectionChange,\n selectedIds = emptyArray,\n // itemRoleDescription = \"clickable item\",\n // detailPosition = \"end\",\n size = \"medium\",\n testHoveredId,\n testRenamingId,\n testShowDropIndicatorId,\n scrollable = false,\n // acceptsDrop,\n // onMoveItem,\n onFilesDrop,\n renamable,\n onClickItem,\n onDoubleClickItem,\n renderEmptyState,\n // getDropTargetParentIndex,\n } = props;\n\n const [hoveredId, setHoveredId] = useState<string>();\n const [internalRenamingId, setRenamingId] = useState<string>();\n const [dropdownOpenId, setDropdownOpenId] = useState<string>();\n\n useImperativeHandle(ref, () => ({\n editName: (id: string) => {\n setRenamingId(id);\n },\n }));\n\n const currentHoveredId = testHoveredId ?? hoveredId;\n const renamingId = testRenamingId ?? internalRenamingId;\n\n const handleSelect = (itemId: string, event?: ListView.ClickInfo) => {\n if (!onSelectionChange) return;\n\n setRenamingId(undefined);\n\n const newSelectedIds = updateSelection(\n items.map(getId),\n selectedIds,\n itemId,\n event\n );\n\n onSelectionChange(newSelectedIds, event);\n };\n\n const handleMenuAction = (action: M, actionItem: T) => {\n if (!onSelectMenuItem) return;\n\n const selectedItems = items.filter((item) =>\n selectedIds.includes(getId(item))\n );\n\n onSelectMenuItem(\n action,\n selectedItems.length === 0 ? [actionItem] : selectedItems\n );\n };\n\n const fileDropTargetRef = useRef<HTMLDivElement>(null);\n const { isDropTargetActive, dropTargetProps } = useFileDropTarget(\n fileDropTargetRef,\n onFilesDrop\n );\n\n const { minColumnWidth, gap } = getGridSize(size);\n\n return (\n <GridView.Root\n role=\"listbox\"\n aria-orientation=\"horizontal\"\n aria-multiselectable={true}\n minColumnWidth={minColumnWidth}\n scrollable={items.length > 0 && scrollable}\n contentClassName={cx(items.length === 0 && \"flex flex-1\")}\n gap={gap}\n className={cx(\n isDropTargetActive && \"bg-selected-list-item-background\",\n className\n )}\n {...dropTargetProps}\n ref={fileDropTargetRef}\n >\n {items.length > 0 ? (\n <GridView.Section>\n {items.map((item) => {\n const id = getId(item);\n const isDropdownOpen = dropdownOpenId === id;\n const isHovered =\n testHoveredId === id ||\n currentHoveredId === id ||\n isDropdownOpen;\n const itemIsRenamable = getRenamable?.(item) ?? renamable;\n const isSelected = selectedIds.includes(id);\n const isRenaming =\n itemIsRenamable && onRename && renamingId === id;\n const isTestingRenaming = testRenamingId === id;\n const thumbnail = renderThumbnail?.({\n item,\n selected: isSelected,\n size,\n });\n const onOpenChange = (open: boolean) => {\n setDropdownOpenId(open ? id : undefined);\n\n if (open && !isSelected) {\n handleSelect(id);\n }\n };\n const action =\n (isHovered || isSelected) &&\n !isRenaming &&\n (typeof renderAction === \"function\"\n ? renderAction({ item, selected: isSelected, onOpenChange })\n : renderAction === \"menu\" &&\n menuItems && (\n <ActionMenu\n menuItems={menuItems}\n onSelect={(action) => handleMenuAction(action, item)}\n selected={isSelected}\n onOpenChange={onOpenChange}\n />\n ));\n\n return (\n <GridView.Item<M>\n key={id}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n aria-label={getName(item)}\n hovered={isHovered}\n testShowInsideDropIndicator={testShowDropIndicatorId === id}\n onHoverChange={(isHovering) => {\n setHoveredId(isHovering ? id : undefined);\n }}\n title={\n <EditableText\n tabIndex={isRenaming ? undefined : -1}\n value={getName(item)}\n focused={isRenaming}\n testFocused={isTestingRenaming}\n readOnly={!itemIsRenamable || !onRename}\n onSubmit={(value) => {\n onRename?.(item, value);\n setRenamingId(undefined);\n }}\n onBlur={() => {\n setRenamingId(undefined);\n }}\n // max height ensures preview text and input are one line\n textClassName=\"bg-listview-editing-background max-h-input-height\"\n >\n {(props) => (\n <span\n {...props}\n className={cx(\n isSelected\n ? \"text-selected-list-item-text\"\n : \"text-text\",\n \"truncate select-none\"\n )}\n />\n )}\n </EditableText>\n }\n subtitle={\n <span\n className={cx(\n isSelected && \"text-selected-list-item-text\"\n )}\n >\n {renderDetail?.(item, isSelected)}\n </span>\n }\n loading={false}\n selected={isSelected}\n onClick={() => {\n onClickItem?.(id);\n }}\n onSelect={(event) => {\n handleSelect(id, event);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n setRenamingId(id);\n }\n }}\n onDoubleClick={() => {\n onDoubleClickItem?.(id);\n }}\n menuItems={menuItems}\n onSelectMenuItem={(action) => handleMenuAction(action, item)}\n action={action}\n onMenuOpenChange={(open: boolean) => {\n if (open && !isSelected) {\n handleSelect(id);\n }\n }}\n // getDropTargetParentIndex={getDropTargetParentIndex}\n >\n {thumbnail && (\n <div\n className={cx(\n \"rounded overflow-hidden flex-none flex w-full\",\n isSelected && \"text-selected-list-item-text\"\n )}\n tabIndex={-1}\n >\n {thumbnail}\n </div>\n )}\n </GridView.Item>\n );\n })}\n </GridView.Section>\n ) : (\n renderEmptyState?.()\n )}\n </GridView.Root>\n );\n })\n);\n","/**\n * Updates the selection state based on user interaction.\n * Handles single selection, multi-selection with meta/ctrl, and range selection with shift.\n */\nexport function updateSelection(\n allIds: string[],\n selectedIds: string[],\n clickedId: string,\n event?: { shiftKey?: boolean; metaKey?: boolean; ctrlKey?: boolean }\n): string[] {\n const metaOrCtrl = event?.metaKey || event?.ctrlKey;\n\n if (!event || (!event.shiftKey && !metaOrCtrl)) {\n // Store this as the anchor point for future shift selections\n return [clickedId];\n }\n\n if (metaOrCtrl) {\n const isSelected = selectedIds.includes(clickedId);\n return isSelected\n ? selectedIds.filter((id) => id !== clickedId)\n : [...selectedIds, clickedId];\n }\n\n if (event.shiftKey && selectedIds.length > 0) {\n // Find the anchor based on which end of the current selection is closer to the clicked item\n const firstSelectedIndex = allIds.indexOf(selectedIds[0]);\n const lastSelectedIndex = allIds.indexOf(\n selectedIds[selectedIds.length - 1]\n );\n const clickedIndex = allIds.indexOf(clickedId);\n\n // Use the endpoint of the current selection that's furthest from the clicked item as the anchor\n const anchorId =\n Math.abs(clickedIndex - firstSelectedIndex) >\n Math.abs(clickedIndex - lastSelectedIndex)\n ? selectedIds[0]\n : selectedIds[selectedIds.length - 1];\n\n const anchorIndex = allIds.indexOf(anchorId);\n const start = Math.min(anchorIndex, clickedIndex);\n const end = Math.max(anchorIndex, clickedIndex);\n\n return allIds.slice(start, end + 1);\n }\n\n return [clickedId];\n}\n","import { cx, InputField } from \"@noya-app/noya-designsystem\";\nimport React, {\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { BreadcrumbText } from \"./Breadcrumbs\";\n\ntype RenderPreviewProps = {\n children: string;\n onClick: () => void;\n ref: React.Ref<HTMLElement & HTMLAnchorElement & HTMLSpanElement>;\n tabIndex: number;\n onKeyDown: (e: React.KeyboardEvent) => void;\n style?: React.CSSProperties;\n className?: string;\n};\n\ntype Props = {\n value: string;\n children?: (props: RenderPreviewProps) => React.ReactNode;\n placeholder?: string;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n style?: React.CSSProperties;\n textStyle?: React.CSSProperties;\n className?: string;\n id?: string;\n disabled?: boolean;\n focused?: boolean;\n textClassName?: string;\n readOnly?: boolean;\n onBlur?: () => void;\n tabIndex?: number;\n /**\n * If true, will render an unfocused input. This should only be used for visual regression tests.\n */\n testFocused?: boolean;\n};\n\nexport interface EditableTextRef {\n startEditing: () => void;\n}\n\nconst defaultRenderPreview = (props: RenderPreviewProps) => (\n <BreadcrumbText {...props} />\n);\n\nexport const EditableText = memo(\n forwardRef(function EditableText(\n {\n value,\n onChange,\n onSubmit,\n focused: focusedProp,\n disabled,\n style,\n textStyle,\n className,\n textClassName,\n placeholder,\n children = defaultRenderPreview,\n readOnly,\n onBlur,\n testFocused = false,\n tabIndex = 0,\n ...props\n }: Props,\n ref: React.ForwardedRef<EditableTextRef>\n ) {\n const [inputValue, setInputValue] = useState(value);\n\n useEffect(() => {\n setInputValue(value);\n }, [value]);\n\n const [focusedInternal, setFocused] = useState(false);\n const focused = focusedProp ?? focusedInternal;\n const inputRef = useRef<HTMLInputElement>(null);\n const previewRef = useRef<HTMLElement & HTMLAnchorElement>(null);\n\n const ignoreNextBlur = useRef(false);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Escape\") {\n setInputValue(value);\n ignoreNextBlur.current = true;\n }\n\n // Enter and Esc both blur the input\n if (event.key === \"Enter\" || event.key === \"Escape\") {\n inputRef.current?.blur();\n }\n\n if (event.key === \"Escape\") {\n previewRef.current?.focus();\n }\n\n // If tab or shift+tab is pressed, let bubble\n if (event.key === \"Tab\") {\n return;\n }\n\n event.stopPropagation();\n },\n [value]\n );\n\n useImperativeHandle(ref, () => ({\n startEditing: () => {\n setFocused(true);\n },\n }));\n\n function focusInput() {\n inputRef.current?.focus();\n inputRef.current?.setSelectionRange(0, inputRef.current.value.length);\n }\n\n useEffect(() => {\n if (testFocused) return;\n if (focused) {\n // Use a timeout to focus the input after the next render.\n // The input isn't available even though `focused` was already set to true\n // must be a delay of 1ms or more to ensure any radix ui components have finished any focus behaviors\n setTimeout(focusInput, 1);\n }\n }, [focused, testFocused]);\n\n const displayValue = inputValue || placeholder || \"\";\n\n const preview = children({\n children: displayValue,\n onClick: () => setFocused(true),\n ref: previewRef,\n tabIndex,\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n setFocused(true);\n }\n },\n style: textStyle,\n className: textClassName,\n });\n\n const input = (\n <div className=\"flex absolute inset-0 -mx-1.5 -my-1\">\n <InputField.Root onFocusChange={setFocused}>\n <InputField.Input\n ref={inputRef}\n style={{\n lineHeight: \"15px\", // Match breadcrumb height\n ...textStyle,\n }}\n className={textClassName}\n {...props}\n value={inputValue}\n placeholder={placeholder}\n onKeyDown={handleKeyDown}\n onBlur={() => {\n setFocused(false);\n\n if (ignoreNextBlur.current) {\n ignoreNextBlur.current = false;\n return;\n }\n\n onSubmit?.(inputValue);\n onBlur?.();\n }}\n {...(onChange\n ? {\n onChange: (value) => {\n setInputValue(value);\n onChange?.(value);\n },\n }\n : {\n onSubmit: (value) => {\n setInputValue(value);\n onSubmit?.(value);\n setFocused(false);\n },\n onChange: (value) => {\n setInputValue(value);\n },\n })}\n />\n </InputField.Root>\n </div>\n );\n\n return (\n <div className={cx(\"flex relative\", className)} style={style}>\n {preview}\n {focused && !readOnly && input}\n </div>\n );\n })\n);\n","import { KeyModifiers } from \"@noya-app/noya-keymap\";\nimport { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport React, {\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport { useHover } from \"../hooks/useHover\";\nimport { cx, mergeConflictingClassNames } from \"../utils/classNames\";\nimport withSeparatorElements from \"../utils/withSeparatorElements\";\nimport { ActivityIndicator } from \"./ActivityIndicator\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { MenuItem } from \"./internal/Menu\";\nimport { ScrollArea } from \"./ScrollArea\";\nimport { Spacer } from \"./Spacer\";\nimport { Tooltip } from \"./Tooltip\";\n\nconst ItemTitle = ({\n showBackground,\n children,\n}: {\n showBackground?: boolean;\n children?: React.ReactNode;\n}) => {\n return (\n <span\n className={cx(\n \"font-sans text-heading5 text-text-muted font-medium\",\n showBackground &&\n \"bg-sidebar-background border border-divider-subtle rounded-[2px] backdrop-blur-[4px] p-[2px_4px]\"\n )}\n >\n {children}\n </span>\n );\n};\n\nconst ItemDescription = ({\n showBackground,\n children,\n}: {\n showBackground?: boolean;\n children?: React.ReactNode;\n}) => {\n return (\n <span\n className={cx(\n \"font-sans text-sm text-text-muted select-none truncate\",\n showBackground &&\n \"bg-sidebar-background border border-divider-subtle rounded-[2px] backdrop-blur-[4px] p-[2px_4px]\"\n )}\n >\n {children}\n </span>\n );\n};\n\nconst SectionTitle = ({\n last = false,\n children,\n}: {\n last?: boolean;\n children?: React.ReactNode;\n}) => {\n return (\n <span\n className={`font-sans text-heading3 font-medium user-select-none truncate ${last ? \"text-text\" : \"text-text-muted\"}`}\n >\n {children}\n </span>\n );\n};\n\ninterface ItemProps<MenuItemType extends string = string> {\n id: string;\n title?: ReactNode;\n subtitle?: ReactNode;\n loading?: boolean;\n selected?: boolean;\n onClick?: (event: React.MouseEvent) => void;\n onSelect?: (options: KeyModifiers) => void;\n onDoubleClick?: () => void;\n onHoverChange?: (isHovering: boolean) => void;\n children?: ReactNode;\n menuItems?: MenuItem<MenuItemType>[];\n onSelectMenuItem?: (value: MenuItemType) => void;\n onContextMenu?: () => void;\n onMenuOpenChange?: (open: boolean) => void;\n style?: CSSProperties;\n action?: ReactNode;\n onKeyDown?: (event: React.KeyboardEvent) => void;\n hovered?: boolean;\n testShowInsideDropIndicator?: boolean;\n role?: string;\n}\n\nconst GridViewItem = forwardRefGeneric(function GridViewItem<\n MenuItemType extends string,\n>(\n {\n id,\n title,\n subtitle,\n loading,\n selected,\n onClick,\n onSelect,\n onDoubleClick,\n onHoverChange,\n children,\n menuItems,\n onSelectMenuItem,\n onContextMenu,\n onMenuOpenChange,\n style,\n action,\n onKeyDown,\n hovered = false,\n testShowInsideDropIndicator: showInsideDropIndicator = false,\n ...props\n }: ItemProps<MenuItemType>,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { hoverProps } = useHover({\n onHoverChange,\n });\n\n const { textPosition, bordered, disabled } = useContext(GridViewContext);\n\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n\n onClick?.(event);\n onSelect?.(event);\n },\n [onClick, onSelect]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n onKeyDown?.(event);\n if (event.key === \"Enter\" || event.key === \" \") {\n event.stopPropagation();\n event.preventDefault();\n\n onSelect?.(event);\n } else {\n return;\n }\n },\n [onSelect, onKeyDown]\n );\n\n let element = (\n <div\n {...props}\n className={cx(\n \"flex flex-col relative rounded p-2 -m-2 text-text\",\n \"cursor-pointer\",\n \"active:opacity-70\",\n selected && \"bg-selected-list-item-background\",\n hovered && \"bg-list-view-hover-background\",\n disabled && \"opacity-50\",\n showInsideDropIndicator && \"ring-2 ring-primary ring-inset\",\n \"focus:ring-2 focus:ring-primary focus:ring-inset focus:outline-none\"\n )}\n id={id}\n ref={forwardedRef}\n {...hoverProps}\n tabIndex={disabled ? undefined : 0}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n onDoubleClick={onDoubleClick}\n onContextMenu={onContextMenu}\n >\n <div\n className={cx(\n \"flex items-center justify-center rounded\",\n bordered ? \"border border-divider\" : \"border border-transparent\"\n )}\n style={style}\n >\n {children}\n </div>\n {textPosition === \"below\" && (\n <>\n <Spacer.Vertical size={8} />\n <ItemTitle>{title || \" \"}</ItemTitle>\n <Spacer.Vertical size={2} />\n <ItemDescription>{subtitle || \" \"}</ItemDescription>\n </>\n )}\n {textPosition === \"overlay\" && hovered && (title || subtitle) && (\n <div className=\"absolute inset-0 flex flex-col justify-end items-start p-1 pointer-events-none truncate gap-0.5\">\n {title && <ItemTitle showBackground>{title}</ItemTitle>}\n {subtitle && (\n <ItemDescription showBackground>{subtitle}</ItemDescription>\n )}\n </div>\n )}\n {action && (\n <div className=\"absolute top-[7px] right-[7px] flex flex-col justify-end items-start p-1 truncate gap-0.5\">\n {action}\n </div>\n )}\n {loading && (\n <div className=\"flex flex-col justify-start items-end p-1 pointer-events-none animate-shimmer absolute inset-0 bg-gradient-to-r from-white/0 via-[rgb(226,232,240)]/50 to-white/0 bg-length:200%_100%]\">\n <ActivityIndicator opacity={0.5} size={13} />\n </div>\n )}\n </div>\n );\n\n if (menuItems && onSelectMenuItem) {\n element = (\n <ContextMenu<MenuItemType>\n items={menuItems}\n onSelect={onSelectMenuItem}\n onOpenChange={onMenuOpenChange}\n >\n {element}\n </ContextMenu>\n );\n }\n\n if (textPosition === \"toolip\") {\n element = (\n <Tooltip\n content={\n <div className=\"flex flex-col gap-0.5\">\n <ItemTitle>{title}</ItemTitle>\n <ItemDescription>{subtitle}</ItemDescription>\n </div>\n }\n >\n {element}\n </Tooltip>\n );\n }\n\n return element;\n});\n\ntype GridViewContextValue = {\n minColumnWidth: string;\n textPosition: \"overlay\" | \"below\" | \"toolip\";\n bordered: boolean;\n disabled: boolean;\n gap: number;\n};\n\nconst GridViewContext = createContext<GridViewContextValue>({\n minColumnWidth: \"220px\",\n textPosition: \"below\",\n bordered: false,\n disabled: false,\n gap: 0,\n});\n\ninterface GridViewRootProps extends Partial<GridViewContextValue> {\n children: ReactNode;\n onClick?: () => void;\n scrollable?: boolean;\n className?: string;\n onDragOver?: React.DragEventHandler<HTMLDivElement>;\n onDragEnter?: React.DragEventHandler<HTMLDivElement>;\n onDragLeave?: React.DragEventHandler<HTMLDivElement>;\n onDrop?: React.DragEventHandler<HTMLDivElement>;\n role?: string;\n renderEmptyState?: () => ReactNode;\n contentClassName?: string;\n}\n\nconst GridViewRoot = forwardRef(function GridViewRoot(\n {\n minColumnWidth = \"220px\",\n gap = 20,\n children,\n scrollable,\n onClick,\n textPosition = \"below\",\n bordered = false,\n disabled = false,\n className,\n contentClassName,\n ...props\n }: GridViewRootProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n\n onClick?.();\n },\n [onClick]\n );\n\n const contextValue = useMemo(\n () => ({\n minColumnWidth,\n textPosition,\n bordered,\n disabled,\n gap,\n }),\n [bordered, disabled, gap, minColumnWidth, textPosition]\n );\n\n const mergedClassName = useMemo(() => {\n const baseClassName = cx(\n \"flex flex-col -mx-3\",\n scrollable ? \"basis-0 min-h-0\" : \"flex-none\",\n className\n );\n\n return mergeConflictingClassNames([baseClassName, className], {\n categories: [\"flex\"],\n });\n }, [className, scrollable]);\n\n const content = <div className={cx(\"p-3\", contentClassName)}>{children}</div>;\n\n return (\n <GridViewContext.Provider value={contextValue}>\n <div\n onClick={handleClick}\n className={mergedClassName}\n {...props}\n ref={forwardedRef}\n >\n {scrollable ? <ScrollArea>{content}</ScrollArea> : content}\n </div>\n </GridViewContext.Provider>\n );\n});\n\nfunction GridViewSection({\n children,\n className,\n renderEmptyState,\n}: {\n children?: ReactNode;\n className?: string;\n renderEmptyState?: () => ReactNode;\n}) {\n const { minColumnWidth, gap } = useContext(GridViewContext);\n\n const styles: React.CSSProperties = {\n gridTemplateColumns: `repeat(auto-fill, minmax(${minColumnWidth}, 1fr))`,\n gap: `${gap}px`,\n };\n\n const isEmpty = React.Children.count(children) === 0;\n\n return isEmpty && renderEmptyState ? (\n renderEmptyState()\n ) : (\n <div\n role=\"presentation\"\n className={cx(\"grid text-text\", className)}\n style={styles}\n >\n {children}\n </div>\n );\n}\n\nfunction GridViewSectionHeader({ title }: { title: string }) {\n const grouped = title.split(\"/\");\n\n return (\n <div className=\"px-5\">\n <Spacer.Vertical size={24} />\n {withSeparatorElements(\n grouped.map((title, index) => (\n <SectionTitle last={index === grouped.length - 1}>\n {title}\n </SectionTitle>\n )),\n <SectionTitle> / </SectionTitle>\n )}\n </div>\n );\n}\n\nexport namespace GridView {\n export const Root = memo(GridViewRoot);\n export const Item = memoGeneric(GridViewItem);\n export const Section = memo(GridViewSection);\n export const SectionHeader = memo(GridViewSectionHeader);\n}\n","import { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport { memoGeneric } from \"@noya-app/react-utils\";\nimport * as RadixContextMenu from \"@radix-ui/react-context-menu\";\nimport React, { ReactNode, useCallback, useMemo } from \"react\";\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../contexts/PortalScopeContext\";\nimport {\n MenuItem,\n getKeyboardShortcutsForMenuItems,\n styles,\n} from \"./internal/Menu\";\nimport { MenuViewport } from \"./internal/MenuViewport\";\nexport interface MenuItemProps<T extends string> {\n value?: T;\n children: ReactNode;\n onSelect: (value: T) => void;\n checked: boolean;\n disabled: boolean;\n indented: boolean;\n shortcut?: string;\n icon?: ReactNode;\n items?: MenuItem<T>[];\n}\n\nconst Components = {\n Separator: RadixContextMenu.Separator,\n ItemText: React.Fragment,\n Item: RadixContextMenu.Item,\n CheckboxItem: RadixContextMenu.CheckboxItem,\n ItemIndicator: RadixContextMenu.ItemIndicator,\n SubTrigger: RadixContextMenu.SubTrigger,\n SubContent: RadixContextMenu.SubContent,\n Sub: RadixContextMenu.Sub,\n Portal: RadixContextMenu.Portal,\n};\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nexport interface MenuProps<T extends string> {\n children: ReactNode;\n items: MenuItem<T>[];\n onSelect: (value: T) => void;\n shouldBindKeyboardShortcuts?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction ContextMenuRoot<T extends string>({\n items,\n children,\n onSelect,\n shouldBindKeyboardShortcuts,\n onOpenChange,\n}: MenuProps<T>) {\n const keymap = useMemo(\n () =>\n shouldBindKeyboardShortcuts === false\n ? {}\n : getKeyboardShortcutsForMenuItems(items, onSelect),\n [items, onSelect, shouldBindKeyboardShortcuts]\n );\n\n const portalScopeId = usePortalScopeId();\n\n useKeyboardShortcuts(keymap);\n\n // We call preventDefault both to:\n // - Disable radix-ui's long-press-to-open behavior\n // https://github.com/radix-ui/primitives/issues/748#issuecomment-869502837\n // - Mark the event as handled, so our ListView root doesn't handle it (a hack)\n const onPointerDown = useCallback((event: React.PointerEvent) => {\n event.preventDefault();\n }, []);\n\n const handleSelectItem = useCallback(\n (value: T) => {\n if (!value) return;\n\n onSelect(value);\n },\n [onSelect]\n );\n\n return (\n <RadixContextMenu.Root onOpenChange={onOpenChange}>\n <RadixContextMenu.Trigger asChild onPointerDown={onPointerDown}>\n {children}\n </RadixContextMenu.Trigger>\n <RadixContextMenu.Portal>\n <RadixContextMenu.Content\n {...portalScopeProps(portalScopeId)}\n className={styles.contentStyle}\n >\n <MenuViewport\n items={items}\n Components={Components}\n onSelect={handleSelectItem}\n />\n </RadixContextMenu.Content>\n </RadixContextMenu.Portal>\n </RadixContextMenu.Root>\n );\n}\n\nexport const ContextMenu = memoGeneric(ContextMenuRoot);\n","import * as RadixScrollArea from \"@radix-ui/react-scroll-area\";\nimport * as React from \"react\";\n\ninterface Props {\n children?:\n | React.ReactNode\n | ((scrollElementRef: HTMLDivElement) => React.ReactNode);\n}\n\nexport const ScrollArea = React.memo(function ScrollArea({ children }: Props) {\n const [scrollElementRef, setScrollElementRef] =\n React.useState<HTMLDivElement | null>(null);\n\n return (\n <div className=\"flex-1 min-h-0\">\n <RadixScrollArea.Root style={{ width: \"100%\", height: \"100%\" }}>\n <RadixScrollArea.Viewport\n className=\"w-full h-full [&>div]:block\"\n ref={React.useCallback(\n (ref: HTMLDivElement | null) => setScrollElementRef(ref),\n []\n )}\n >\n {typeof children === \"function\"\n ? scrollElementRef\n ? children(scrollElementRef)\n : null\n : children}\n </RadixScrollArea.Viewport>\n <RadixScrollArea.Scrollbar\n orientation=\"vertical\"\n className=\"scroll-component flex p-[3px] data-[orientation=vertical]:w-[10px]\"\n >\n <RadixScrollArea.Thumb className=\"scroll-component flex-1 rounded-[10px] bg-scrollbar\" />\n </RadixScrollArea.Scrollbar>\n </RadixScrollArea.Root>\n </div>\n );\n});\n","import {\n forwardRefGeneric,\n memoGeneric,\n useFileDropTarget,\n} from \"@noya-app/react-utils\";\nimport React, { memo, useImperativeHandle, useRef, useState } from \"react\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { updateSelection } from \"../utils/selection\";\nimport { ActionMenu } from \"./ActionMenu\";\nimport {\n CollectionItemSize,\n CollectionProps,\n CollectionRef,\n} from \"./Collection\";\nimport { ListView, ListViewItemInfo } from \"./ListView\";\nimport { TreeView } from \"./TreeView\";\n\nconst cssVarOverrides = {\n \"--n-icon-selected\": cssVars.colors.selectedListItemText,\n};\n\nconst emptyArray: string[] = [];\n\nexport const List = memoGeneric(\n forwardRefGeneric(function List<T, M extends string = string>(\n props: CollectionProps<T, M>,\n ref: React.ForwardedRef<CollectionRef>\n ) {\n const {\n className,\n items,\n getId,\n getName,\n expandable,\n getExpanded,\n getRenamable,\n getDepth,\n setExpanded,\n menuItems,\n onSelectMenuItem,\n onRename,\n renderThumbnail,\n renderAction,\n renderDetail,\n onSelectionChange,\n itemRoleDescription = \"clickable item\",\n detailPosition = \"end\",\n size = \"medium\",\n thumbnailSize = \"auto\",\n testHoveredId,\n testRenamingId,\n testShowDropIndicatorId,\n scrollable = false,\n acceptsDrop,\n onMoveItem,\n onFilesDrop,\n onDoubleClickItem,\n renamable,\n selectedIds = emptyArray,\n renderEmptyState,\n sortable,\n getDropTargetParentIndex,\n getPlaceholder,\n onClickItem,\n dragIndicatorStyle,\n sortableId,\n sharedDragProps,\n } = props;\n\n const [internalHoveredId, setHoveredId] = useState<string>();\n const [internalRenamingId, setRenamingId] = useState<string>();\n const [dropdownOpenId, setDropdownOpenId] = useState<string>();\n const hoveredId = internalHoveredId ?? testHoveredId;\n const renamingId = testRenamingId ?? internalRenamingId;\n\n const handleSelect = (itemId: string, event?: ListView.ClickInfo) => {\n if (!onSelectionChange) return;\n\n setRenamingId(undefined);\n const newSelectedIds = updateSelection(\n items.map(getId),\n selectedIds,\n itemId,\n event\n );\n onSelectionChange(newSelectedIds, event);\n };\n\n const handleMenuAction = (action: M, actionItem: T) => {\n if (!onSelectMenuItem) return;\n\n const selectedItems = items.filter((item) =>\n selectedIds.includes(getId(item))\n );\n\n onSelectMenuItem(\n action,\n selectedItems.length === 0 ? [actionItem] : selectedItems\n );\n };\n\n const ViewComponent = expandable ? TreeView : ListView;\n\n const fileDropTargetRef = useRef<HTMLDivElement>(null);\n const { isDropTargetActive, dropTargetProps } = useFileDropTarget(\n fileDropTargetRef,\n onFilesDrop\n );\n\n useImperativeHandle(ref, () => ({\n editName: (id: string) => {\n setRenamingId(id);\n },\n }));\n\n return (\n <ViewComponent.Root\n variant=\"bare\"\n className={cx(\n className,\n isDropTargetActive && \"bg-selected-list-item-background\",\n scrollable && \"basis-0 min-h-0\"\n )}\n containerRef={fileDropTargetRef}\n scrollable={scrollable}\n data={items}\n keyExtractor={getId}\n role=\"listbox\"\n aria-orientation=\"vertical\"\n aria-multiselectable={true}\n expandable={expandable}\n sortable={sortable}\n acceptsDrop={acceptsDrop}\n onMoveItem={onMoveItem}\n renderEmptyState={renderEmptyState}\n getDropTargetParentIndex={getDropTargetParentIndex}\n sharedDragProps={sharedDragProps}\n sortableId={sortableId}\n {...dropTargetProps}\n renderItem={(\n item: T,\n _: number,\n { isDragOverlay }: ListViewItemInfo\n ) => {\n const id = getId(item);\n const isDropdownOpen = dropdownOpenId === id;\n const isHovered =\n (hoveredId === id || isDropdownOpen) && !isDragOverlay;\n const expanded = getExpanded?.(item);\n const itemIsRenamable = getRenamable?.(item) ?? renamable;\n const isSelected = selectedIds.includes(id);\n const isRenaming = itemIsRenamable && onRename && renamingId === id;\n const isTestingRenaming = testRenamingId === id;\n\n const thumbnail = renderThumbnail?.({\n item,\n selected: isSelected,\n size,\n });\n const onOpenChange = (open: boolean) => {\n setDropdownOpenId(open ? id : undefined);\n\n if (open && !isSelected) {\n handleSelect(id);\n }\n };\n const action =\n (isHovered || isSelected) &&\n !isRenaming &&\n (typeof renderAction === \"function\"\n ? renderAction({ item, selected: isSelected, onOpenChange })\n : renderAction === \"menu\" &&\n menuItems && (\n <ActionMenu\n menuItems={menuItems}\n onSelect={(action) => handleMenuAction(action, item)}\n selected={isSelected}\n onOpenChange={onOpenChange}\n variant=\"bare\"\n style={{\n backgroundColor: isSelected\n ? cssVars.colors.selectedListItemBackground\n : \"transparent\",\n color: isSelected\n ? cssVars.colors.selectedListItemText\n : undefined,\n }}\n />\n ));\n\n const end =\n action ||\n (detailPosition === \"end\" && renderDetail?.(item, isSelected));\n const below =\n detailPosition === \"below\" && renderDetail?.(item, isSelected);\n\n return (\n <ViewComponent.Row\n id={id}\n key={id}\n role=\"option\"\n sortable={sortable}\n aria-roledescription={itemRoleDescription}\n aria-label={getName(item)}\n aria-selected={isSelected}\n className={cx(\"cursor-pointer rounded px-1\", pyMap[size])}\n testRelativeDropPosition={\n testShowDropIndicatorId === id ? \"inside\" : undefined\n }\n chevronClassName={cx(expandable && \"relative left-2\")}\n style={cssVarOverrides as React.CSSProperties}\n hovered={isHovered}\n selected={isSelected}\n expanded={expanded}\n depth={getDepth?.(item)}\n onHoverChange={(hovered: boolean) =>\n setHoveredId(hovered ? id : undefined)\n }\n onPress={(e: ListView.ClickInfo) => {\n handleSelect(id, e);\n onClickItem?.(id);\n }}\n onDoubleClick={() => {\n onDoubleClickItem?.(id);\n }}\n onKeyDown={(e: React.KeyboardEvent) => {\n if (e.key !== \"Enter\" && e.key !== \" \") return;\n e.preventDefault();\n handleSelect(id, e);\n if (e.key === \"Enter\") {\n setRenamingId(id);\n }\n }}\n menuItems={menuItems}\n onSelectMenuItem={(action) => handleMenuAction(action, item)}\n onContextMenu={() => {\n if (!isSelected) {\n handleSelect(id);\n }\n }}\n tabIndex={0}\n onClickChevron={() => {\n if (!expandable) return;\n setExpanded?.(item, !expanded);\n }}\n dragIndicatorStyle={dragIndicatorStyle}\n >\n <div\n className={cx(\"flex flex-1 items-center px-2\", rowGapMap[size])}\n >\n {thumbnail && (\n <div\n className={cx(\n \"overflow-hidden flex-none flex items-center justify-center\",\n thumbnailSize === \"auto\" && thumbnailSizeMap[size],\n isSelected && \"text-selected-list-item-text\",\n size === \"small\" ? \"rounded-sm\" : \"rounded\"\n )}\n tabIndex={-1}\n >\n {thumbnail}\n </div>\n )}\n <div className=\"flex flex-col flex-1 w-0\">\n <div className=\"flex items-center min-h-input-height flex-1 gap-2\">\n <div className=\"flex-1 w-0 flex items-center\" tabIndex={-1}>\n {isRenaming ? (\n <ViewComponent.EditableRowTitle\n value={getName(item)}\n placeholder={getPlaceholder?.(item) ?? \"Enter name\"}\n className={fontStyleMap[size]}\n autoFocus={!isTestingRenaming}\n onSubmitEditing={(value: string) => {\n onRename?.(item, value);\n setRenamingId(undefined);\n }}\n onKeyDown={(e: React.KeyboardEvent) => {\n e.stopPropagation();\n }}\n />\n ) : (\n <ViewComponent.RowTitle\n className={cx(\n fontStyleMap[size],\n isSelected && \"text-selected-list-item-text\"\n )}\n >\n {getName(item)}\n </ViewComponent.RowTitle>\n )}\n </div>\n {end && detailPosition === \"end\" && (\n <DetailContainer selected={isSelected}>\n {end}\n </DetailContainer>\n )}\n </div>\n {below && (\n <DetailContainer selected={isSelected}>\n {below}\n </DetailContainer>\n )}\n </div>\n {end && detailPosition === \"below\" && (\n <DetailContainer selected={isSelected}>{end}</DetailContainer>\n )}\n </div>\n </ViewComponent.Row>\n );\n }}\n />\n );\n })\n);\n\nconst DetailContainer = memo(function DetailContainer({\n children,\n selected,\n}: {\n children: React.ReactNode;\n selected: boolean;\n}) {\n return (\n <div\n className={cx(\"flex items-center gap-2\", selected && \"text-primary\")}\n tabIndex={-1}\n >\n {children}\n </div>\n );\n});\n\nconst pyMap: Record<CollectionItemSize, string> = {\n xxs: \"py-0.5\",\n xs: \"py-0.5\",\n small: \"py-0.5\",\n medium: \"py-1\",\n large: \"py-2\",\n xl: \"py-3\",\n};\n\nconst thumbnailSizeMap: Record<CollectionItemSize, string> = {\n xxs: \"w-5 h-5\",\n xs: \"w-5 h-5\",\n small: \"w-5 h-5\",\n medium: \"w-8 h-8\",\n large: \"w-16 h-16\",\n xl: \"w-24 h-24\",\n};\n\nconst rowGapMap: Record<CollectionItemSize, string> = {\n xxs: \"gap-2\",\n xs: \"gap-2\",\n small: \"gap-2\",\n medium: \"gap-3\",\n large: \"gap-3\",\n xl: \"gap-4\",\n};\n\nconst fontStyleMap: Record<CollectionItemSize, string> = {\n xxs: \"font-medium text-list-small\",\n xs: \"font-medium text-list-small\",\n small: \"font-medium text-list-small\",\n medium: \"font-medium\",\n large: \"font-medium\",\n xl: \"font-medium text-heading4 text-text\",\n};\n","import { Size } from \"@noya-app/noya-geometry\";\nimport { range } from \"@noya-app/noya-utils\";\nimport { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport React, {\n Children,\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n HTMLAttributes,\n isValidElement,\n memo,\n ReactElement,\n ReactNode,\n Ref,\n useCallback,\n useContext,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { WindowScroller, WindowScrollerChildProps } from \"react-virtualized\";\nimport { ListChildComponentProps, VariableSizeList } from \"react-window\";\nimport { mergeEventHandlers } from \"../hooks/mergeEventHandlers\";\nimport { useHover } from \"../hooks/useHover\";\nimport { cssVars, INPUT_HEIGHT } from \"../theme\";\nimport { cx, mergeConflictingClassNames } from \"../utils/classNames\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { InputField } from \"./InputField\";\nimport { MenuItem } from \"./internal/Menu\";\nimport { ScrollArea } from \"./ScrollArea\";\nimport { SharedDragProps } from \"./sorting/DragRegistration\";\nimport { Sortable } from \"./sorting/Sortable\";\nimport {\n DropValidator,\n MoveDragItemHandler,\n normalizeListTargetIndex,\n RelativeDropPosition,\n SortableItemContextProps,\n} from \"./sorting/sorting\";\nimport { Spacer } from \"./Spacer\";\n\nexport type ListRowMarginType = \"none\" | \"top\" | \"bottom\" | \"vertical\";\nexport type ListRowPosition = \"only\" | \"first\" | \"middle\" | \"last\";\n\nconst ROW_HEIGHT = 31;\nconst SECTION_HEADER_LABEL_HEIGHT = INPUT_HEIGHT;\n\ntype ListColorScheme = \"primary\" | \"secondary\";\n\ntype PressEventName = \"onClick\" | \"onPointerDown\";\n\n// TODO: Some of these could be passed in a single context value that's\n// the same for all rows. But doing this seems to cause an infinite loop and\n// prevents drag and drop from working.\ntype ListRowContextValue = {\n marginType: ListRowMarginType;\n selectedPosition: ListRowPosition;\n sortable: boolean;\n expandable: boolean;\n divider: boolean;\n gap: number;\n variant: ListViewVariant;\n sectionHeaderVariant: ListViewSectionHeaderVariant;\n pressEventName: PressEventName;\n isSectionHeader: boolean;\n colorScheme: ListColorScheme;\n};\n\n// The dragged item isn't passed a context value (doing so causes an infinite loop),\n// so we pass this separately. Rows need the indentation to look correct when dragging,\n// and the dragged row doesn't have a ListRowContextValue.\ntype ListViewDraggingContextValue = {\n indentation: number;\n isDragOverlay?: boolean;\n};\n\nconst ListViewDraggingContext = createContext<ListViewDraggingContextValue>({\n indentation: 12,\n});\n(ListViewDraggingContext as any).displayName = \"ListViewDraggingContext\";\n\nconst ListRowContext = createContext<ListRowContextValue>({\n marginType: \"none\",\n selectedPosition: \"only\",\n sortable: false,\n expandable: true,\n divider: true,\n gap: 0,\n variant: \"normal\",\n sectionHeaderVariant: \"normal\",\n pressEventName: \"onClick\",\n isSectionHeader: false,\n colorScheme: \"primary\",\n});\n(ListRowContext as any).displayName = \"ListRowContext\";\n\n/* ----------------------------------------------------------------------------\n * RowTitle\n * ------------------------------------------------------------------------- */\n\nconst ListViewRowTitle = ({\n className,\n children,\n ...props\n}: {\n className?: string;\n children: React.ReactNode;\n} & HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cx(\n `flex-1 overflow-hidden text-ellipsis whitespace-pre `,\n className\n )}\n {...props}\n >\n {children}\n </span>\n);\n\n/* ----------------------------------------------------------------------------\n * EditableRowTitle\n * ------------------------------------------------------------------------- */\n\nexport interface EditableRowProps {\n value: string;\n onSubmitEditing: (value: string) => void;\n autoFocus: boolean;\n placeholder?: string;\n className?: string;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n}\n\nfunction ListViewEditableRowTitle({\n value,\n onSubmitEditing,\n autoFocus,\n placeholder,\n className,\n onKeyDown,\n}: EditableRowProps) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n useLayoutEffect(() => {\n const element = inputRef.current;\n\n if (!element || !autoFocus) return;\n\n // Calling `focus` is necessary, in addition to `select`, to ensure\n // the `onBlur` fires correctly.\n element.focus();\n\n // must be a delay of 1ms or more to ensure any radix ui components have finished any focus behaviors\n setTimeout(() => {\n element.select();\n }, 1);\n }, [autoFocus]);\n\n return (\n <InputField.Input\n ref={inputRef}\n value={value}\n placeholder={placeholder}\n onSubmit={onSubmitEditing}\n allowSubmittingWithSameValue\n className={cx(\"-mx-1.5 -my-1 bg-listview-editing-background\", className)}\n onKeyDown={onKeyDown}\n />\n );\n}\n\n/* ----------------------------------------------------------------------------\n * Row\n * ------------------------------------------------------------------------- */\n\nconst RowContainer = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n $marginType: ListRowMarginType;\n $selected: boolean;\n $selectedPosition: ListRowPosition;\n $disabled: boolean;\n $hovered: boolean;\n $variant: ListViewVariant;\n $divider: boolean;\n $isSectionHeader: boolean;\n $showsActiveState: boolean;\n $sectionHeaderVariant: ListViewSectionHeaderVariant;\n $colorScheme: ListColorScheme;\n $gap: number;\n $backgroundColor?: CSSProperties[\"backgroundColor\"];\n $clickable?: boolean;\n }\n>(\n (\n {\n className,\n $marginType,\n $selected,\n $selectedPosition,\n $disabled,\n $hovered,\n $variant,\n $divider,\n $isSectionHeader,\n $showsActiveState,\n $sectionHeaderVariant,\n $colorScheme,\n $gap,\n $backgroundColor,\n style,\n $clickable,\n \"aria-describedby\": _, // Causes hydration warning\n role,\n \"aria-label\": ariaLabel,\n \"aria-roledescription\": ariaRoleDescription,\n \"aria-selected\": ariaSelected,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role={role}\n aria-label={ariaLabel}\n aria-roledescription={ariaRoleDescription}\n aria-selected={ariaSelected ?? $selected}\n className={cx(\n $isSectionHeader && $sectionHeaderVariant === \"label\"\n ? \"font-sans text-label uppercase leading-3 font-bold text-text-muted\"\n : \"font-sans text-heading5 font-normal\",\n !$isSectionHeader &&\n $selected &&\n \"text-selected-list-item-text active:bg-selected-list-item-background\",\n !$isSectionHeader && $disabled && \"text-text-disabled\",\n $clickable ? \"cursor-pointer\" : \"cursor-default\",\n $isSectionHeader && \"bg-listview-raised-background\",\n \"flex flex-[0_0_auto] select-none items-center relative\",\n className\n )}\n style={{\n gap: $gap,\n ...($variant !== \"bare\" && {\n paddingTop: $selected ? \"4px\" : \"6px\",\n paddingRight: $selected ? \"8px\" : \"12px\",\n paddingBottom: $selected ? \"4px\" : \"6px\",\n paddingLeft: $selected ? \"8px\" : \"12px\",\n borderRadius: $selected ? \"4px\" : \"\",\n marginLeft: $selected ? \"4px\" : \"\",\n marginRight: $selected ? \"4px\" : \"\",\n marginTop: $selected ? \"2px\" : \"\",\n marginBottom: $selected ? \"2px\" : \"\",\n }),\n ...($selected &&\n !$isSectionHeader && {\n backgroundColor:\n $colorScheme === \"primary\"\n ? cssVars.colors[\"selectedListItemBackground\"]\n : cssVars.colors[$colorScheme],\n }),\n ...($selected &&\n !$isSectionHeader &&\n ($selectedPosition === \"middle\" ||\n $selectedPosition === \"last\") && {\n borderTopRightRadius: \"0px\",\n borderTopLeftRadius: \"0px\",\n }),\n ...($selected &&\n !$isSectionHeader &&\n ($selectedPosition === \"middle\" ||\n $selectedPosition === \"first\") && {\n borderBottomRightRadius: \"0px\",\n borderBottomLeftRadius: \"0px\",\n }),\n ...($hovered &&\n !$selected && {\n background: cssVars.colors.listViewHoverBackground,\n }),\n ...($showsActiveState && {\n \"&:active\": {\n backgroundColor: $selected\n ? $colorScheme === \"secondary\"\n ? cssVars.colors.secondaryLight\n : cssVars.colors.selectedListItemBackground\n : cssVars.colors.activeBackground,\n },\n }),\n ...($divider && {\n borderBottom: `1px solid ${cssVars.colors.dividerSubtle}`,\n }),\n ...($backgroundColor && {\n backgroundColor: $backgroundColor,\n \"&:hover\": {\n backgroundColor: $backgroundColor,\n },\n \"&:active\": {\n backgroundColor: $backgroundColor,\n },\n }),\n ...style,\n }}\n {...props}\n />\n );\n }\n);\n\nconst ListViewDragIndicatorElement = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n $relativeDropPosition?: RelativeDropPosition;\n $gap: number;\n $offsetLeft: number;\n $colorScheme: ListColorScheme;\n }\n>(\n (\n {\n className,\n $relativeDropPosition,\n $offsetLeft,\n $colorScheme,\n $gap,\n style,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n {...props}\n className={className}\n style={{\n zIndex: 1000,\n position: \"absolute\",\n borderRadius: \"3px\",\n pointerEvents: \"none\",\n ...($relativeDropPosition === \"inside\"\n ? {\n inset: 2,\n boxShadow: `0 0 0 1px ${cssVars.colors.sidebarBackground}, 0 0 0 3px ${\n $colorScheme === \"secondary\"\n ? cssVars.colors.secondary\n : cssVars.colors.dragOutline\n }`,\n }\n : {\n top:\n $relativeDropPosition === \"above\"\n ? -(3 + $gap / 2)\n : undefined,\n bottom:\n $relativeDropPosition === \"below\"\n ? -(3 + $gap / 2)\n : undefined,\n left: $offsetLeft,\n right: 0,\n height: 6,\n backgroundColor:\n $colorScheme === \"secondary\"\n ? cssVars.colors.secondary\n : cssVars.colors.selectedListItemBackground,\n border: `2px solid white`,\n boxShadow: \"0 0 2px rgba(0,0,0,0.5)\",\n }),\n ...style,\n }}\n />\n );\n }\n);\n\ninterface ListViewClickInfo {\n shiftKey: boolean;\n altKey: boolean;\n metaKey: boolean;\n ctrlKey: boolean;\n}\n\nexport interface ListViewRowProps<MenuItemType extends string = string> {\n id?: string;\n tabIndex?: number;\n role?: string;\n selected?: boolean;\n /** @default 0 */\n depth?: number;\n disabled?: boolean;\n // draggable?: boolean;\n hovered?: boolean;\n sortable?: boolean;\n gap?: number;\n backgroundColor?: CSSProperties[\"backgroundColor\"];\n onPress?: (info: ListViewClickInfo) => void;\n onDoubleClick?: () => void;\n onHoverChange?: (isHovering: boolean) => void;\n children?: ReactNode;\n isSectionHeader?: boolean;\n menuItems?: MenuItem<MenuItemType>[];\n onSelectMenuItem?: (value: MenuItemType) => void;\n onContextMenu?: () => void;\n onMenuOpenChange?: (isOpen: boolean) => void;\n onKeyDown?: (event: React.KeyboardEvent) => void;\n style?: CSSProperties;\n className?: string;\n dragIndicatorStyle?:\n | CSSProperties\n | ((props: DragIndicatorStyleProps) => CSSProperties);\n testRelativeDropPosition?: RelativeDropPosition;\n}\n\nexport type DragIndicatorStyleProps = {\n depth: number;\n indentation: number;\n position: RelativeDropPosition;\n};\n\nconst ListViewRow = forwardRefGeneric(function ListViewRow<\n MenuItemType extends string,\n>(\n {\n id,\n tabIndex = 0,\n role,\n gap,\n backgroundColor,\n selected = false,\n depth = 0,\n disabled = false,\n hovered = false,\n isSectionHeader = false,\n sortable: overrideSortable,\n onPress,\n onDoubleClick,\n onHoverChange,\n children,\n menuItems,\n onContextMenu,\n onSelectMenuItem,\n onMenuOpenChange,\n onKeyDown,\n style,\n dragIndicatorStyle,\n className,\n testRelativeDropPosition,\n }: ListViewRowProps<MenuItemType>,\n forwardedRef: ForwardedRef<HTMLElement>\n) {\n depth = Math.max(0, depth);\n\n const {\n marginType,\n selectedPosition,\n sortable,\n pressEventName,\n variant,\n sectionHeaderVariant,\n divider,\n gap: listGap,\n colorScheme,\n } = useContext(ListRowContext);\n const { hoverProps } = useHover({\n onHoverChange,\n });\n const { indentation, isDragOverlay } = useContext(ListViewDraggingContext);\n\n const handlePress = useCallback(\n (event: React.MouseEvent) => {\n // We use preventDefault as a hack to mark this event as handled. We check for\n // this in the ListView.Root. We can't stopPropagation here or existing ContextMenus\n // won't close (onPointerDownOutside won't fire).\n event.preventDefault();\n\n // We only want to handle left clicks\n if (event.button !== 0) return;\n\n onPress?.(event);\n },\n [onPress]\n );\n\n const handleDoubleClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n\n onDoubleClick?.();\n },\n [onDoubleClick]\n );\n\n const mergedStyle = useMemo(() => {\n return isDragOverlay\n ? {\n // TODO: Where do these offsets actually come from?\n transform: `translate3d(-36px, -6px, 0)`,\n width: `calc(100% + 48px)`,\n ...style,\n }\n : style;\n }, [isDragOverlay, style]);\n\n const renderContent = (\n {\n relativeDropPosition: relativeDropPositionProp,\n ...renderProps\n }: React.ComponentProps<typeof RowContainer> & {\n relativeDropPosition?: RelativeDropPosition;\n },\n ref: Ref<HTMLElement>\n ) => {\n const Component = RowContainer;\n const relativeDropPosition =\n testRelativeDropPosition ?? relativeDropPositionProp;\n\n const element = (\n <Component\n ref={ref as any}\n $colorScheme={colorScheme}\n onContextMenu={onContextMenu}\n $isSectionHeader={isSectionHeader}\n id={id}\n role={role}\n $gap={gap ?? 0}\n $backgroundColor={backgroundColor}\n {...hoverProps}\n onDoubleClick={handleDoubleClick}\n $marginType={marginType ?? \"none\"}\n $disabled={disabled}\n $hovered={hovered}\n $selected={selected}\n $variant={variant}\n $sectionHeaderVariant={sectionHeaderVariant}\n $selectedPosition={selectedPosition}\n $showsActiveState={pressEventName === \"onClick\"}\n aria-selected={selected}\n $divider={!isDragOverlay && divider}\n onKeyDown={onKeyDown}\n style={mergedStyle}\n {...(renderProps as Partial<React.ComponentProps<typeof RowContainer>>)}\n {...mergeEventHandlers(\n { onPointerDown: renderProps.onPointerDown! },\n { [pressEventName]: handlePress }\n )}\n tabIndex={tabIndex}\n className={className}\n $clickable={!!onPress}\n >\n {relativeDropPosition && (\n <ListViewDragIndicatorElement\n key={relativeDropPosition}\n $colorScheme={colorScheme}\n $relativeDropPosition={relativeDropPosition}\n $offsetLeft={depth * indentation}\n $gap={listGap + (divider ? 1 : 0)}\n style={\n typeof dragIndicatorStyle === \"function\"\n ? dragIndicatorStyle({\n depth,\n indentation,\n position: relativeDropPosition,\n })\n : dragIndicatorStyle\n }\n />\n )}\n {depth > 0 && <Spacer.Horizontal size={depth * indentation} />}\n {children}\n </Component>\n );\n\n if (menuItems && onSelectMenuItem) {\n return (\n <ContextMenu<MenuItemType>\n items={menuItems}\n onSelect={onSelectMenuItem}\n onOpenChange={onMenuOpenChange}\n >\n {element}\n </ContextMenu>\n );\n }\n\n return element;\n };\n\n if (sortable && id) {\n return (\n <Sortable.Item<HTMLElement> id={id} disabled={overrideSortable === false}>\n {({ ref: sortableRef, ...sortableProps }) =>\n renderContent(\n sortableProps as any,\n composeRefs(sortableRef, forwardedRef)\n )\n }\n </Sortable.Item>\n );\n }\n\n return renderContent({} as any, forwardedRef);\n});\n\n/* ----------------------------------------------------------------------------\n * VirtualizedListRow\n * ------------------------------------------------------------------------- */\n\nconst RenderItemContext = createContext<(index: number) => ReactNode>(\n () => null\n);\n(RenderItemContext as any).displayName = \"RenderItemContext\";\n\nconst VirtualizedListRow = memo(function VirtualizedListRow({\n index,\n style,\n}: ListChildComponentProps) {\n const renderItem = useContext(RenderItemContext);\n\n return (\n <div key={index} style={style}>\n {renderItem(index)}\n </div>\n );\n});\n\n/* ----------------------------------------------------------------------------\n * VirtualizedList\n * ------------------------------------------------------------------------- */\n\ninterface VirtualizedListProps<T> {\n size: Size;\n scrollElement: HTMLDivElement;\n items: T[];\n getItemHeight: (index: number) => number;\n keyExtractor: (index: number) => string;\n renderItem: (index: number) => ReactNode;\n}\n\nexport interface IVirtualizedList {\n scrollToIndex(index: number): void;\n}\n\nconst VirtualizedListInner = forwardRefGeneric(function VirtualizedListInner<T>(\n {\n size,\n scrollElement,\n items,\n getItemHeight,\n keyExtractor,\n renderItem,\n }: VirtualizedListProps<T>,\n ref: ForwardedRef<IVirtualizedList>\n) {\n const listRef = useRef<VariableSizeList<T> | null>(null);\n\n useImperativeHandle(ref, () => ({\n scrollToIndex(index) {\n listRef.current?.scrollToItem(index);\n },\n }));\n\n useLayoutEffect(() => {\n listRef.current?.resetAfterIndex(0);\n }, [\n // When items change, we need to re-render the virtualized list,\n // since it doesn't currently support row height changes\n items,\n ]);\n\n // Internally, react-virtualized updates these properties. We always want\n // to use our custom scroll element, so we override them. It may update\n // overflowX/Y individually in addition to `overflow`, so we include all 3.\n const listStyle = useMemo(\n (): CSSProperties => ({\n overflowX: \"initial\",\n overflowY: \"initial\",\n overflow: \"initial\",\n }),\n []\n );\n\n return (\n <RenderItemContext.Provider value={renderItem}>\n <WindowScroller\n scrollElement={scrollElement}\n style={useMemo(() => ({ flex: \"1 1 auto\" }), [])}\n >\n {useCallback(\n ({\n registerChild,\n onChildScroll,\n scrollTop,\n }: WindowScrollerChildProps & {\n // Added when noya-designsystem moved to a separate package.\n // I think this is a hack to get around the fact that react-virtualized\n // doesn't update on scroll unless we force it to by changing ref.\n // Either we're not using this the intended way or the types are wrong.\n registerChild: (element: any) => void;\n }) => (\n <div ref={registerChild}>\n <VariableSizeList<T>\n ref={listRef}\n // The list won't update on scroll unless we force it to by changing key\n key={scrollTop}\n style={listStyle}\n itemKey={keyExtractor}\n onScroll={({ scrollOffset }: { scrollOffset: number }) => {\n onChildScroll({ scrollTop: scrollOffset });\n }}\n initialScrollOffset={scrollTop}\n width={size.width}\n height={size.height}\n itemCount={items.length}\n itemSize={getItemHeight}\n estimatedItemSize={ROW_HEIGHT}\n >\n {VirtualizedListRow as any}\n </VariableSizeList>\n </div>\n ),\n [\n listStyle,\n keyExtractor,\n size.width,\n size.height,\n items.length,\n getItemHeight,\n ]\n )}\n </WindowScroller>\n </RenderItemContext.Provider>\n );\n});\n\nconst VirtualizedList = memo(\n VirtualizedListInner\n) as typeof VirtualizedListInner;\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nexport type ListViewItemInfo = {\n isDragOverlay: boolean;\n activeDragIndex?: number;\n};\n\ntype ChildrenProps = {\n children: ReactNode;\n};\n\ntype RenderProps<T> = {\n data: T[];\n renderItem: (item: T, index: number, info: ListViewItemInfo) => ReactNode;\n keyExtractor: (item: T, index: number) => string;\n /**\n * Each item must have an `id` in order to be sortable.\n *\n * Additionally, the key extracted with `keyExtractor` must match the ListItem.Row `id`.\n */\n sortable?: boolean;\n virtualized?: Size;\n};\n\ntype ListViewVariant = \"normal\" | \"bare\";\n\ntype ListViewSectionHeaderVariant = \"normal\" | \"label\";\n\nexport type ListViewRootProps = {\n id?: string;\n className?: string;\n style?: CSSProperties;\n role?: string;\n \"aria-labelledby\"?: string;\n \"aria-orientation\"?: \"vertical\" | \"horizontal\";\n \"aria-multiselectable\"?: boolean;\n onPress?: () => void;\n scrollable?: boolean;\n expandable?: boolean;\n onMoveItem?: MoveDragItemHandler;\n indentation?: number;\n acceptsDrop?: DropValidator;\n pressEventName?: PressEventName;\n variant?: ListViewVariant;\n sectionHeaderVariant?: ListViewSectionHeaderVariant;\n divider?: boolean;\n gap?: number;\n colorScheme?: ListColorScheme;\n containerRef?: React.RefObject<HTMLDivElement>;\n onDragOver?: React.DragEventHandler<HTMLDivElement>;\n onDragEnter?: React.DragEventHandler<HTMLDivElement>;\n onDragLeave?: React.DragEventHandler<HTMLDivElement>;\n onDrop?: React.DragEventHandler<HTMLDivElement>;\n renderEmptyState?: () => ReactNode;\n getDropTargetParentIndex?: SortableItemContextProps[\"getDropTargetParentIndex\"];\n sharedDragProps?: SharedDragProps;\n sortableId?: string;\n};\n\nconst ListViewRootInner = forwardRefGeneric(function ListViewRootInner<T>(\n {\n id,\n className,\n style,\n role,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-orientation\": ariaOrientation,\n \"aria-multiselectable\": ariaMultiselectable,\n onPress,\n scrollable = false,\n expandable = true,\n sortable = false,\n divider = false,\n onMoveItem,\n indentation = 12,\n acceptsDrop,\n data,\n renderItem,\n keyExtractor,\n virtualized,\n variant = \"normal\",\n sectionHeaderVariant = \"normal\",\n pressEventName = \"onClick\",\n colorScheme = \"primary\",\n gap = 0,\n containerRef,\n onDragOver,\n onDragEnter,\n onDragLeave,\n onDrop,\n renderEmptyState,\n getDropTargetParentIndex,\n sharedDragProps,\n sortableId,\n }: RenderProps<T> & ListViewRootProps,\n forwardedRef: ForwardedRef<IVirtualizedList>\n) {\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n if (\n event.target instanceof HTMLElement &&\n event.target.classList.contains(\"scroll-component\")\n )\n return;\n\n // As a hack, we call preventDefault in a row if the event was handled.\n // If the event wasn't handled already, we call onPress here.\n if (!event.isDefaultPrevented()) {\n onPress?.();\n }\n },\n [onPress]\n );\n\n const renderChild = useCallback(\n (index: number) => renderItem(data[index], index, { isDragOverlay: false }),\n [data, renderItem]\n );\n\n // TODO: Do we still use section header properties anywhere?\n const defaultContextValue = useMemo(\n (): ListRowContextValue => ({\n colorScheme,\n marginType: \"none\",\n selectedPosition: \"only\",\n sortable,\n expandable,\n divider,\n pressEventName,\n variant,\n gap,\n sectionHeaderVariant,\n isSectionHeader: false,\n }),\n [\n colorScheme,\n sortable,\n expandable,\n divider,\n pressEventName,\n variant,\n gap,\n sectionHeaderVariant,\n ]\n );\n\n const getItemContextValue = useCallback(\n (i: number): ListRowContextValue | undefined => {\n if (variant === \"bare\" || variant === \"normal\")\n return defaultContextValue;\n\n const current = renderChild(i);\n\n if (!isValidElement(current)) return;\n\n const prevChild = i - 1 >= 0 && renderChild(i - 1);\n const nextChild = i + 1 < data.length && renderChild(i + 1);\n\n const next: ReactElement | undefined = isValidElement(nextChild)\n ? nextChild\n : undefined;\n const prev: ReactElement | undefined = isValidElement(prevChild)\n ? prevChild\n : undefined;\n\n const hasMarginTop = !prev;\n const hasMarginBottom =\n !next ||\n current.props.isSectionHeader ||\n (next && next.props.isSectionHeader);\n\n let marginType: ListRowMarginType;\n\n if (hasMarginTop && hasMarginBottom) {\n marginType = \"vertical\";\n } else if (hasMarginBottom) {\n marginType = \"bottom\";\n } else if (hasMarginTop) {\n marginType = \"top\";\n } else {\n marginType = \"none\";\n }\n\n let selectedPosition: ListRowPosition = \"only\";\n\n if (current.props.selected) {\n const nextSelected =\n next && !next.props.isSectionHeader && next.props.selected;\n const prevSelected =\n prev && !prev.props.isSectionHeader && prev.props.selected;\n\n if (nextSelected && prevSelected) {\n selectedPosition = \"middle\";\n } else if (nextSelected && !prevSelected) {\n selectedPosition = \"first\";\n } else if (!nextSelected && prevSelected) {\n selectedPosition = \"last\";\n }\n }\n\n return {\n colorScheme,\n marginType,\n selectedPosition,\n sortable,\n expandable,\n divider,\n pressEventName,\n variant,\n sectionHeaderVariant,\n isSectionHeader: current.props.isSectionHeader,\n gap,\n };\n },\n [\n variant,\n defaultContextValue,\n renderChild,\n data.length,\n colorScheme,\n sortable,\n expandable,\n divider,\n pressEventName,\n sectionHeaderVariant,\n gap,\n ]\n );\n\n const draggingContextOverlayValue = useMemo(\n (): ListViewDraggingContextValue => ({ indentation, isDragOverlay: true }),\n [indentation]\n );\n\n const renderOverlay = useCallback(\n (index: number) => (\n <div style={{ opacity: 0.25 }}>\n <ListViewDraggingContext.Provider value={draggingContextOverlayValue}>\n {renderItem(data[index], index, { isDragOverlay: true })}\n </ListViewDraggingContext.Provider>\n </div>\n ),\n [draggingContextOverlayValue, renderItem, data]\n );\n\n const renderWrappedChild = useCallback(\n (index: number) => {\n const contextValue = getItemContextValue(index);\n const current = renderChild(index);\n\n if (!contextValue || !isValidElement(current)) return null;\n\n return (\n <ListRowContext.Provider key={current.key} value={contextValue}>\n {current}\n </ListRowContext.Provider>\n );\n },\n [getItemContextValue, renderChild]\n );\n\n const ids = useMemo(() => data.map(keyExtractor), [keyExtractor, data]);\n\n const withSortable = (children: ReactNode) =>\n sortable ? (\n <Sortable.Root\n id={sortableId}\n onMoveItem={onMoveItem}\n keys={ids}\n renderOverlay={renderOverlay}\n acceptsDrop={acceptsDrop}\n getDropTargetParentIndex={getDropTargetParentIndex}\n sharedDragProps={sharedDragProps}\n >\n {children}\n </Sortable.Root>\n ) : (\n children\n );\n\n const withScrollable = (\n children: (scrollElementRef: HTMLDivElement | null) => ReactNode\n ) => (scrollable ? <ScrollArea>{children}</ScrollArea> : children(null));\n\n const getItemHeight = useCallback(\n (index: number) => {\n const child = getItemContextValue(index);\n const height =\n child?.isSectionHeader && child.sectionHeaderVariant === \"label\"\n ? SECTION_HEADER_LABEL_HEIGHT\n : ROW_HEIGHT;\n return height;\n },\n [getItemContextValue]\n );\n\n const getKey = useCallback(\n (index: number) => keyExtractor(data[index], index),\n [data, keyExtractor]\n );\n\n const draggingContextValue = useMemo(() => ({ indentation }), [indentation]);\n const gapStyle = useMemo(() => ({ gap: `${gap}px` }), [gap]);\n\n return (\n <ListViewDraggingContext.Provider value={draggingContextValue}>\n <div\n id={id}\n role={role}\n aria-labelledby={ariaLabelledby}\n aria-orientation={ariaOrientation}\n aria-multiselectable={ariaMultiselectable}\n className={mergeConflictingClassNames(\n [\n `flex flex-col text-text-muted ${scrollable ? \"flex-1\" : \"flex-none\"} `,\n className,\n ],\n {\n categories: [\"flex\"],\n }\n )}\n style={{ ...gapStyle, ...style }}\n {...{\n [pressEventName]: handleClick,\n }}\n ref={containerRef}\n onDragOver={onDragOver}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDrop={onDrop}\n >\n {data.length === 0 && renderEmptyState\n ? renderEmptyState()\n : withScrollable((scrollElementRef: HTMLDivElement | null) =>\n withSortable(\n virtualized ? (\n <VirtualizedList<T>\n ref={forwardedRef}\n scrollElement={scrollElementRef!}\n items={data}\n size={virtualized}\n getItemHeight={getItemHeight}\n keyExtractor={getKey}\n renderItem={renderWrappedChild}\n />\n ) : (\n range(0, data.length).map(renderWrappedChild)\n )\n )\n )}\n </div>\n </ListViewDraggingContext.Provider>\n );\n});\n\nconst ListViewRoot = memoGeneric(ListViewRootInner) as typeof ListViewRootInner;\n\nconst ChildrenListViewInner = forwardRef(function ChildrenListViewInner(\n { children, ...rest }: ChildrenProps & ListViewRootProps,\n forwardedRef: ForwardedRef<IVirtualizedList>\n) {\n const items: ReactElement[] = useMemo(\n () =>\n Children.toArray(children).flatMap((child) =>\n isValidElement(child) ? [child] : []\n ),\n [children]\n );\n\n return (\n <ListViewRoot\n ref={forwardedRef}\n {...rest}\n data={items}\n keyExtractor={useCallback(\n ({ key }: { key: string | number | null }, index: number) =>\n typeof key === \"string\" ? key : (key ?? index).toString(),\n []\n )}\n renderItem={useCallback((item: ReactElement) => item, [])}\n />\n );\n});\n\nconst ChildrenListView = memo(ChildrenListViewInner);\n\nconst SimpleListViewInner = forwardRefGeneric(function SimpleListViewInner<\n T = any,\n>(\n props: (ChildrenProps | RenderProps<T>) & ListViewRootProps,\n forwardedRef: ForwardedRef<IVirtualizedList>\n) {\n if (\"children\" in props) {\n return <ChildrenListView ref={forwardedRef} {...props} />;\n } else {\n return <ListViewRoot ref={forwardedRef} {...props} />;\n }\n});\n\n/**\n * A ListView can be created either with `children` or render props\n */\nconst SimpleListView = memoGeneric(SimpleListViewInner);\n\nexport namespace ListView {\n export const RowTitle = memo(ListViewRowTitle);\n export const EditableRowTitle = memo(ListViewEditableRowTitle);\n export const Row = memoGeneric(ListViewRow);\n export const Root = SimpleListView;\n export const RowContext = ListRowContext;\n export type ClickInfo = ListViewClickInfo;\n export type ItemInfo = ListViewItemInfo;\n export type RowProps<MenuItemType extends string = string> =\n ListViewRowProps<MenuItemType>;\n export type VirtualizedList = IVirtualizedList;\n export const DragIndicator = ListViewDragIndicatorElement;\n export const rowHeight = ROW_HEIGHT;\n export const sectionHeaderLabelHeight = SECTION_HEADER_LABEL_HEIGHT;\n export const calculateHeight = ({\n menuItemsCount,\n sectionHeaderCount,\n }: {\n menuItemsCount: number;\n sectionHeaderCount: number;\n }) => {\n return (\n menuItemsCount * rowHeight + sectionHeaderCount * sectionHeaderLabelHeight\n );\n };\n export const normalizeTargetIndex = normalizeListTargetIndex;\n}\n","import { unique } from \"@noya-app/noya-utils\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\nfunction composeAllEventHandlers<E>(...handlers: ((e: E) => void)[]) {\n const [first, ...rest] = handlers;\n\n return rest.reduce(\n (result, handler) => composeEventHandlers(result, handler),\n first\n );\n}\n\nexport function mergeEventHandlers<\n H extends Record<string, (...args: any[]) => any>,\n>(...handlerMaps: H[]): H {\n const eventNames = unique(handlerMaps.map(Object.keys).flat() as (keyof H)[]);\n\n return Object.fromEntries(\n eventNames.map((eventName) => {\n const handlers = handlerMaps.flatMap((handlerMap) => {\n const value = handlerMap[eventName];\n return value ? [value] : [];\n });\n\n return [eventName, composeAllEventHandlers(...handlers)] as const;\n })\n ) as H;\n}\n","import { UniqueIdentifier, useDroppable } from \"@dnd-kit/core\";\nimport {\n horizontalListSortingStrategy,\n SortableContext,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport * as React from \"react\";\nimport {\n ActiveDragContext,\n ActiveDragContextType,\n DragRegistrationContext,\n RegisteredList,\n SharedDragProps,\n useActiveDrag,\n useDragRegistration,\n} from \"./DragRegistration\";\nimport { withDragProvider } from \"./SharedDragProvider\";\nimport {\n AcceptsFromList,\n createDragItemKey,\n defaultAcceptsDrop,\n DropValidator,\n MoveDragItemHandler,\n RelativeDropPosition,\n validateDropIndicator,\n} from \"./sorting\";\n\ntype UseSortableReturnType = ReturnType<typeof useSortable>;\n\ntype ItemChildrenProps<T> = {\n ref: React.Ref<T>;\n relativeDropPosition?: RelativeDropPosition;\n style?: React.CSSProperties;\n} & UseSortableReturnType[\"attributes\"];\n\n// Context for drop indicators within a sortable list\ninterface SortableItemContextProps {\n acceptsDrop: DropValidator;\n listId: string;\n getDropTargetParentIndex?: (index: number) => number | undefined;\n activeDragContext: React.Context<ActiveDragContextType | null>;\n}\n\nconst SortableItemContext = React.createContext<SortableItemContextProps>({\n acceptsDrop: defaultAcceptsDrop,\n listId: \"\",\n getDropTargetParentIndex: undefined,\n activeDragContext: ActiveDragContext,\n});\n\n// Custom hook for drop indicators in sortable lists\nfunction useSortableDropIndicator({\n index,\n itemId,\n listId,\n acceptsDrop,\n getDropTargetParentIndex,\n}: {\n index: number;\n itemId: UniqueIdentifier;\n listId: string;\n acceptsDrop: DropValidator;\n getDropTargetParentIndex?: (index: number) => number | undefined;\n}): RelativeDropPosition | undefined {\n const { activeDragContext } = React.useContext(SortableItemContext);\n const activeDrag = useActiveDrag(activeDragContext);\n const { source, target } = activeDrag;\n\n if (!source || !target) return;\n\n if (target.listId === listId && target.itemId === itemId) {\n return activeDrag.indicator ?? undefined;\n }\n\n const targetParentIndex =\n target.index === -1 ? undefined : getDropTargetParentIndex?.(target.index);\n\n const isValidParent =\n targetParentIndex === undefined || targetParentIndex === -1\n ? false\n : acceptsDrop({\n sourceIndex: source.index,\n targetIndex: targetParentIndex,\n position: \"inside\",\n sourceListId: source.listId,\n targetListId: target.listId,\n });\n\n const overIdAcceptsDrop =\n target.index === -1\n ? undefined\n : acceptsDrop({\n sourceIndex: source.index,\n targetIndex: target.index,\n position: \"inside\",\n sourceListId: source.listId,\n targetListId: target.listId,\n });\n\n const thisItemIsTargetParent = targetParentIndex === index;\n\n const showIndicatorOnParent =\n !overIdAcceptsDrop && isValidParent && thisItemIsTargetParent;\n\n return showIndicatorOnParent ? \"inside\" : undefined;\n}\n\ninterface RootProps {\n id?: string;\n keys: UniqueIdentifier[];\n axis?: \"x\" | \"y\";\n children?: React.ReactNode;\n renderOverlay?: (index: number) => React.ReactNode;\n onMoveItem?: MoveDragItemHandler;\n acceptsFromList?: AcceptsFromList;\n acceptsDrop?: DropValidator;\n getDropTargetParentIndex?: (index: number) => number | undefined;\n sharedDragProps?: SharedDragProps;\n containerRef?: React.RefObject<HTMLElement>;\n}\n\nfunction SortableItem<TElement extends HTMLElement>({\n id,\n disabled,\n children,\n}: {\n id: UniqueIdentifier;\n disabled?: boolean;\n children: (props: ItemChildrenProps<TElement>) => React.ReactNode;\n}) {\n const { acceptsDrop, listId, getDropTargetParentIndex } =\n React.useContext(SortableItemContext);\n\n const dragItemKey = createDragItemKey(listId, id);\n\n const { attributes, listeners, setNodeRef, isDragging, index } = useSortable({\n id: dragItemKey,\n disabled,\n });\n\n const ref = React.useCallback(\n (node: TElement | null) => setNodeRef(node),\n [setNodeRef]\n );\n\n const relativeDropPosition = useSortableDropIndicator({\n index,\n itemId: dragItemKey,\n listId,\n acceptsDrop,\n getDropTargetParentIndex,\n });\n\n return children({\n ref,\n ...attributes,\n ...listeners,\n relativeDropPosition,\n style: {\n opacity: isDragging ? 0.5 : 1,\n },\n });\n}\n\nfunction SortableRoot_({\n id: idProp,\n keys: keysProp,\n onMoveItem,\n renderOverlay,\n acceptsFromList,\n acceptsDrop = defaultAcceptsDrop,\n axis = \"y\",\n children,\n getDropTargetParentIndex,\n sharedDragProps,\n containerRef,\n}: RootProps) {\n const defaultId = React.useId();\n const id = idProp ?? defaultId;\n const keys = React.useMemo(() => {\n return keysProp.map((key) => createDragItemKey(id, key));\n }, [keysProp, id]);\n\n const { registerList, unregisterList } = useDragRegistration(\n sharedDragProps?.dragRegistrationContext ?? DragRegistrationContext\n );\n\n const { setNodeRef: setDroppableRef } = useDroppable({\n id,\n });\n\n // Register this list with the global drag system\n React.useEffect(() => {\n const listConfig: RegisteredList = {\n id,\n keys,\n onMoveItem: onMoveItem ?? (() => {}),\n renderOverlay: (id) => {\n const index = keys.findIndex((key) => key === id);\n return renderOverlay?.(index) ?? null;\n },\n acceptsFromList: acceptsFromList ?? (() => true),\n acceptsDrop,\n getDropIndicator: (parameters) => {\n const { absolutePosition, active, over, sourceListId, targetListId } =\n parameters;\n\n const offsetStart =\n axis === \"x\" ? absolutePosition.x : absolutePosition.y;\n const elementStart = axis === \"x\" ? over.rect.left : over.rect.top;\n const elementSize = axis === \"x\" ? over.rect.width : over.rect.height;\n\n const relativeDropPosition = validateDropIndicator({\n acceptsDrop,\n keys,\n activeId: active.id,\n overId: over.id,\n offsetStart,\n elementStart,\n elementSize,\n sourceListId,\n targetListId,\n });\n\n return relativeDropPosition;\n },\n };\n\n registerList(listConfig);\n\n return () => {\n unregisterList(id);\n };\n }, [\n id,\n onMoveItem,\n renderOverlay,\n acceptsFromList,\n acceptsDrop,\n axis,\n registerList,\n unregisterList,\n keys,\n ]);\n\n const contextValue: SortableItemContextProps = React.useMemo(\n () => ({\n keys,\n acceptsDrop,\n listId: id,\n getDropTargetParentIndex,\n activeDragContext:\n sharedDragProps?.activeDragContext ?? ActiveDragContext,\n }),\n [keys, acceptsDrop, id, getDropTargetParentIndex, sharedDragProps]\n );\n\n // Set the droppable ref after every render.\n // Since we don't render the dom node internally, we aggressively set it\n // after every render to make sure we are using the latest.\n React.useEffect(() => {\n if (containerRef) {\n setDroppableRef(containerRef.current);\n }\n });\n\n return (\n <SortableItemContext.Provider value={contextValue}>\n <SortableContext\n items={keys}\n strategy={\n axis === \"x\"\n ? horizontalListSortingStrategy\n : verticalListSortingStrategy\n }\n >\n {children}\n </SortableContext>\n </SortableItemContext.Provider>\n );\n}\n\nconst SortableRoot = withDragProvider(SortableRoot_) as typeof SortableRoot_;\n\nexport interface SortableProps<TItem, TElement extends HTMLElement>\n extends Omit<RootProps, \"children\" | \"keys\" | \"renderOverlay\"> {\n items: TItem[];\n keyExtractor: (item: TItem) => UniqueIdentifier;\n shouldRenderOverlay?: boolean;\n renderItem: (\n item: TItem,\n props: ItemChildrenProps<TElement>,\n { isOverlay }: { isOverlay: boolean }\n ) => React.ReactNode;\n}\n\nconst Sortable_ = function Sortable_<TItem, TElement extends HTMLElement>({\n items,\n keyExtractor,\n shouldRenderOverlay = true,\n renderItem,\n ...rest\n}: SortableProps<TItem, TElement>) {\n const keys = React.useMemo(\n () => items.map(keyExtractor),\n [items, keyExtractor]\n );\n\n const renderOverlay = React.useCallback(\n (index: number) => {\n return renderItem(\n items[index],\n {\n ref: () => {},\n style: {},\n tabIndex: -1,\n \"aria-disabled\": true,\n \"aria-pressed\": false,\n \"aria-roledescription\": \"Item being dragged\",\n \"aria-describedby\": \"Item being dragged\",\n role: \"button\",\n },\n { isOverlay: true }\n );\n },\n [renderItem, items]\n );\n\n return (\n <SortableRoot\n {...rest}\n keys={keys}\n renderOverlay={shouldRenderOverlay ? renderOverlay : undefined}\n >\n {keys.map((key, index) => (\n <SortableItem<TElement> key={key} id={key}>\n {(props) => {\n return renderItem(items[index], props, { isOverlay: false });\n }}\n </SortableItem>\n ))}\n </SortableRoot>\n );\n};\n\nexport const Sortable = Object.assign(Sortable_, {\n Root: SortableRoot,\n Item: SortableItem,\n});\n","import {\n AcceptsDrop,\n DragState,\n MoveDragItemHandler,\n RelativeDropPosition,\n} from \"./sorting\";\n\nimport { Active, Over, UniqueIdentifier } from \"@dnd-kit/core\";\nimport { AcceptsFromList } from \"./sorting\";\n\nimport { Point } from \"@noya-app/noya-geometry\";\nimport React from \"react\";\n\nexport type GetDropIndicatorParameters = {\n absolutePosition: Point;\n active: Active;\n over: Over;\n sourceListId: string;\n targetListId: string;\n};\n\nexport interface RegisteredList {\n id: string;\n keys: UniqueIdentifier[];\n onMoveItem: MoveDragItemHandler;\n renderOverlay?: (id: UniqueIdentifier) => React.ReactNode;\n acceptsFromList: AcceptsFromList;\n acceptsDrop: AcceptsDrop;\n getDropIndicator: (\n parameters: GetDropIndicatorParameters\n ) => RelativeDropPosition | undefined;\n}\n\nexport interface DragRegistrationContextType {\n registerList: (list: RegisteredList) => void;\n unregisterList: (listId: string) => void;\n}\n\nexport const DragRegistrationContext =\n React.createContext<DragRegistrationContextType | null>(null);\n\nexport function useDragRegistration(\n context: React.Context<DragRegistrationContextType | null>\n): DragRegistrationContextType {\n const value = React.useContext(context);\n\n if (!value) {\n throw new Error(\n \"useDragRegistration must be used within a DragRegistrationProvider\"\n );\n }\n\n return value;\n}\n\nexport function useDragRegistrationManager() {\n const [registeredLists, setRegisteredLists] = React.useState<\n Map<string, RegisteredList>\n >(new Map());\n\n const registerList = React.useCallback((list: RegisteredList) => {\n setRegisteredLists((prev) => new Map(prev).set(list.id, list));\n }, []);\n\n const unregisterList = React.useCallback((listId: string) => {\n setRegisteredLists((prev) => {\n const newMap = new Map(prev);\n newMap.delete(listId);\n return newMap;\n });\n }, []);\n\n return { registerList, unregisterList, registeredLists };\n}\n\nexport type ActiveDragContextType = DragState;\n\nexport const ActiveDragContext =\n React.createContext<ActiveDragContextType | null>(null);\n\nexport function useActiveDrag(\n context: React.Context<ActiveDragContextType | null>\n): ActiveDragContextType {\n const value = React.useContext(context);\n\n if (!value) {\n throw new Error(\"useActiveDrag must be used within a ActiveDragProvider\");\n }\n\n return value;\n}\n\n/**\n * We use this context to automatically create a drag context if not exists.\n * We do this separately from the contexts that actually store data since for those\n * we want to allow a custom context to be passed and not get overwritten by nested contexts.\n */\nexport const AnyDragContext = React.createContext<boolean>(false);\n\nexport function useAnyDragContext() {\n return React.useContext(AnyDragContext);\n}\n\nexport type SharedDragProps = {\n dragRegistrationContext: React.Context<DragRegistrationContextType | null>;\n activeDragContext: React.Context<ActiveDragContextType | null>;\n};\n","import {\n Active,\n closestCenter,\n CollisionDetection,\n DndContext,\n DragEndEvent,\n DragMoveEvent,\n DragOverlay,\n DragStartEvent,\n Over,\n PointerSensor,\n pointerWithin,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { Point, rectContainsPoint, unionRects } from \"@noya-app/noya-geometry\";\nimport { windowsOf } from \"@noya-app/noya-utils\";\nimport { useStableCallback } from \"@noya-app/react-utils\";\nimport * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n ActiveDragContext,\n ActiveDragContextType,\n AnyDragContext,\n DragRegistrationContext,\n DragRegistrationContextType,\n RegisteredList,\n SharedDragProps,\n useDragRegistrationManager,\n} from \"./DragRegistration\";\nimport {\n DragItem,\n DragState,\n MoveDragItemHandler,\n MoveDragItemParameters,\n RelativeDropPosition,\n} from \"./sorting\";\n\ntype SharedDragProviderProps = {\n children: React.ReactNode;\n onMoveItem?: MoveDragItemHandler;\n sharedDragProps?: SharedDragProps;\n};\n\nexport function SharedDragProvider({\n children,\n onMoveItem,\n sharedDragProps = {\n dragRegistrationContext: DragRegistrationContext,\n activeDragContext: ActiveDragContext,\n },\n}: SharedDragProviderProps) {\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 4,\n },\n })\n );\n\n const mounted = useMounted();\n const [dragState, setDragState] = React.useState<DragState>({\n source: null,\n target: null,\n indicator: null,\n });\n\n // console.log(\"dragState\", dragState.target);\n\n const { registerList, unregisterList, registeredLists } =\n useDragRegistrationManager();\n\n const activatorEventRef = React.useRef<PointerEvent | null>(null);\n\n const handleDragStart = React.useCallback(\n (event: DragStartEvent) => {\n // Capture the activator event for position calculations\n activatorEventRef.current = event.activatorEvent as PointerEvent;\n\n // Find which list contains this item\n for (const [listId, list] of registeredLists) {\n const itemIndex = list.keys.findIndex((key) => key === event.active.id);\n\n if (itemIndex >= 0) {\n const dragItem: DragItem = {\n itemId: event.active.id,\n listId,\n index: itemIndex,\n };\n\n setDragState({\n source: dragItem,\n target: null,\n indicator: null,\n });\n break;\n }\n }\n },\n [registeredLists]\n );\n\n const handleDragMove = React.useCallback(\n (event: DragMoveEvent) => {\n const { active, over } = event;\n\n if (!activatorEventRef.current || !dragState.source) return;\n\n const dropTarget = findDropTarget({\n activationPoint: {\n x: activatorEventRef.current.clientX,\n y: activatorEventRef.current.clientY,\n },\n delta: { x: event.delta.x, y: event.delta.y },\n over,\n active,\n source: dragState.source,\n registeredLists,\n });\n\n setDragState({\n source: dragState.source,\n target: dropTarget?.target ?? null,\n indicator: dropTarget?.indicator ?? null,\n });\n },\n [registeredLists, dragState.source]\n );\n\n const stableOnMoveItem = useStableCallback(onMoveItem);\n\n const handleDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (!activatorEventRef.current || !dragState.source) return;\n\n const dropTarget = findDropTarget({\n activationPoint: {\n x: activatorEventRef.current.clientX,\n y: activatorEventRef.current.clientY,\n },\n delta: { x: event.delta.x, y: event.delta.y },\n over,\n active,\n source: dragState.source,\n registeredLists,\n });\n\n setDragState({\n source: null,\n target: null,\n indicator: null,\n });\n activatorEventRef.current = null;\n\n if (!dropTarget) return;\n\n const sourceList = registeredLists.get(dropTarget.source.listId);\n const targetList = registeredLists.get(dropTarget.target.listId);\n\n if (!sourceList || !targetList) return;\n\n const parameters: MoveDragItemParameters = {\n sourceIndex: dropTarget.source.index,\n targetIndex: dropTarget.target.index,\n position: dropTarget.indicator,\n sourceListId: dropTarget.source.listId,\n targetListId: dropTarget.target.listId,\n };\n\n // Both lists have the opportunity to handle the move\n sourceList.onMoveItem(parameters);\n\n if (dropTarget.target.listId !== dropTarget.source.listId) {\n targetList.onMoveItem(parameters);\n }\n\n stableOnMoveItem?.(parameters);\n },\n [registeredLists, dragState.source, stableOnMoveItem]\n );\n\n const contextValue: DragRegistrationContextType = React.useMemo(\n () => ({\n registerList,\n unregisterList,\n }),\n [registerList, unregisterList]\n );\n\n const activeList = dragState.source\n ? registeredLists.get(dragState.source.listId)\n : null;\n const activeDragContextValue: ActiveDragContextType = React.useMemo(\n () => dragState,\n [dragState]\n );\n\n const collisionDetection = useMemo(() => {\n return getItemFirstCollisionDetection(registeredLists);\n }, [registeredLists]);\n\n return (\n <AnyDragContext.Provider value={true}>\n <sharedDragProps.dragRegistrationContext.Provider value={contextValue}>\n <sharedDragProps.activeDragContext.Provider\n value={activeDragContextValue}\n >\n <DndContext\n sensors={sensors}\n collisionDetection={collisionDetection}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragEnd={handleDragEnd}\n >\n {children}\n {mounted &&\n activeList?.renderOverlay &&\n dragState.source &&\n createPortal(\n <DragOverlay dropAnimation={null}>\n {activeList.renderOverlay(dragState.source.itemId)}\n </DragOverlay>,\n document.body\n )}\n </DndContext>\n </sharedDragProps.activeDragContext.Provider>\n </sharedDragProps.dragRegistrationContext.Provider>\n </AnyDragContext.Provider>\n );\n}\n\nfunction useMounted() {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n return mounted;\n}\n\nexport function withDragProvider<T extends object>(\n Component: React.ComponentType<T>\n) {\n return function WithDragProvider(props: T) {\n const anyDragContext = React.useContext(AnyDragContext);\n\n if (!anyDragContext) {\n return (\n <SharedDragProvider>\n <Component {...props} />\n </SharedDragProvider>\n );\n }\n\n return <Component {...props} />;\n };\n}\n\n// Custom collision detection that prioritizes items over containers\nexport const getItemFirstCollisionDetection =\n (registeredLists: Map<string, RegisteredList>): CollisionDetection =>\n (parameters) => {\n const pointerCollisions = pointerWithin(parameters);\n\n if (pointerCollisions.length > 0) {\n const itemCollisions = pointerCollisions.filter((collision) => {\n for (const listId of registeredLists.keys()) {\n if (collision.id === listId) {\n return false;\n }\n }\n\n return true;\n });\n\n if (itemCollisions.length > 0) {\n return itemCollisions;\n }\n }\n\n const listCollision = pointerCollisions.at(0);\n const nearestCenters = closestCenter(parameters);\n\n // Handle a pointer between items by checking if the pointer is within\n // a window of two items.\n if (parameters.pointerCoordinates && listCollision) {\n const list = registeredLists.get(listCollision.id as string);\n\n if (list) {\n const pairs = windowsOf(list.keys, 2);\n\n for (const pair of pairs) {\n const clientRects = pair.map(\n (key) => parameters.droppableRects.get(key)!\n );\n\n const merged = unionRects(\n ...clientRects.map((rect) => ({\n x: rect.left,\n y: rect.top,\n width: rect.width,\n height: rect.height,\n }))\n );\n\n if (rectContainsPoint(merged, parameters.pointerCoordinates)) {\n return nearestCenters.filter((center) =>\n pair.some((id) => id === center.id)\n );\n }\n }\n }\n }\n\n // This handles empty lists\n return pointerCollisions;\n };\n\nfunction findDropTarget({\n activationPoint,\n delta,\n over,\n active,\n source,\n registeredLists,\n}: {\n activationPoint: Point;\n delta: Point;\n over: Over | null;\n active: Active;\n source: DragItem;\n registeredLists: Map<string, RegisteredList>;\n}):\n | {\n source: DragItem;\n target: DragItem;\n indicator: RelativeDropPosition;\n }\n | undefined {\n if (!over || active.id === over.id) return;\n\n // Find target list and item\n let targetListId: string | null = null;\n let targetIndex: number = -1;\n\n for (const [listId, list] of registeredLists) {\n const itemIndex = list.keys.findIndex((key) => key === over.id);\n\n if (itemIndex >= 0) {\n targetListId = listId;\n targetIndex = itemIndex;\n break;\n }\n\n // Also check if dropping on the list container itself\n if (over.id === listId) {\n targetListId = listId;\n targetIndex = list.keys.length; // Append to end\n break;\n }\n }\n\n const targetList =\n targetListId !== null ? registeredLists.get(targetListId) : null;\n const sourceList = registeredLists.get(source.listId);\n\n if (\n !targetList ||\n !sourceList ||\n !targetList.acceptsFromList({\n sourceListId: sourceList.id,\n targetListId: targetList.id,\n })\n ) {\n return;\n }\n\n // Dropping on the list container itself\n if (over.id === targetList.id) {\n const canDrop = targetList.acceptsDrop({\n sourceIndex: source.index,\n targetIndex: Math.max(0, targetList.keys.length - 1), // Use last valid index or 0 for empty lists\n position: \"below\",\n sourceListId: sourceList.id,\n targetListId: targetList.id,\n });\n\n if (canDrop) {\n return {\n source,\n target: {\n itemId: over.id,\n listId: targetList.id,\n index: targetIndex,\n },\n indicator: \"below\",\n };\n }\n }\n\n const eventX = activationPoint.x;\n const eventY = activationPoint.y;\n const currentX = eventX + delta.x;\n const currentY = eventY + delta.y;\n const absolutePosition = { x: currentX, y: currentY };\n\n const indicator = targetList.getDropIndicator({\n absolutePosition,\n active,\n over,\n sourceListId: sourceList.id,\n targetListId: targetList.id,\n });\n\n if (indicator) {\n return {\n source,\n target: {\n itemId: over.id,\n listId: targetList.id,\n index: targetIndex,\n },\n indicator,\n };\n }\n}\n","import { UniqueIdentifier } from \"@dnd-kit/core\";\nimport * as React from \"react\";\n\nexport type RelativeDropPosition = \"above\" | \"below\" | \"inside\";\n\nexport type MoveDragItemParameters = {\n sourceIndex: number;\n sourceListId: string;\n targetIndex: number;\n targetListId: string;\n position: RelativeDropPosition;\n};\n\nexport type DropValidator = (parameters: MoveDragItemParameters) => boolean;\n\nexport type AcceptsDrop = (parameters: MoveDragItemParameters) => boolean;\n\nexport type MoveDragItemHandler = (parameters: MoveDragItemParameters) => void;\n\nexport type AcceptsFromList = ({\n sourceListId,\n targetListId,\n}: {\n sourceListId: string;\n targetListId: string;\n}) => boolean;\n\nexport interface DragItem {\n itemId: UniqueIdentifier;\n listId: string;\n index: number;\n}\n\nexport type DragState = {\n source: DragItem | null;\n target: DragItem | null;\n indicator: RelativeDropPosition | null;\n};\n\nexport const normalizeListTargetIndex = (\n index: number,\n position: \"above\" | \"below\"\n): number => {\n return position === \"above\" ? index : index + 1;\n};\n\nexport const defaultAcceptsDrop: DropValidator = ({\n sourceIndex,\n targetIndex,\n position,\n}) => {\n if (position === \"inside\") return false;\n\n const normalized = normalizeListTargetIndex(targetIndex, position);\n\n if (sourceIndex === normalized || sourceIndex + 1 === normalized) {\n return false;\n }\n\n return true;\n};\n\nexport type SortableItemContextProps = {\n keys: UniqueIdentifier[];\n acceptsDrop: DropValidator;\n axis: \"x\" | \"y\";\n position: { x: number; y: number };\n setActivatorEvent: (event: PointerEvent) => void;\n getDropTargetParentIndex?: (index: number) => number | undefined;\n listId: string;\n};\n\nexport const SortableItemContext =\n React.createContext<SortableItemContextProps>({\n keys: [],\n acceptsDrop: defaultAcceptsDrop,\n axis: \"y\",\n position: { x: 0, y: 0 },\n setActivatorEvent: () => {},\n getDropTargetParentIndex: undefined,\n listId: \"\",\n });\n\nexport type ValidateDropIndicatorParams = {\n acceptsDrop: DropValidator; // Function that validates if a drop is allowed\n keys: UniqueIdentifier[]; // Array of all sortable item IDs\n activeId: UniqueIdentifier; // ID of item being dragged\n overId: UniqueIdentifier; // ID of item being dragged over\n offsetStart: number; // Current drag position (x or y coordinate)\n elementStart: number; // Start position of target element (left or top)\n elementSize: number; // Size of target element (width or height)\n sourceListId: string; // ID of the list the item is being dragged from\n targetListId: string; // ID of the list the item is being dragged to\n};\n\nexport function validateDropIndicator({\n acceptsDrop,\n keys,\n activeId,\n overId,\n offsetStart,\n elementStart,\n elementSize,\n sourceListId,\n targetListId,\n}: ValidateDropIndicatorParams): RelativeDropPosition | undefined {\n const activeIndex = keys.findIndex((id) => id === activeId); // index of item being dragged\n const overIndex = keys.findIndex((id) => id === overId); // index of item being dragged over\n\n if (overIndex === -1) return undefined;\n if (activeIndex === -1 && sourceListId === targetListId) return undefined;\n\n const acceptsDropInside = acceptsDrop({\n sourceIndex: activeIndex,\n targetIndex: overIndex,\n position: \"inside\",\n sourceListId,\n targetListId,\n });\n\n // Drop into the middle third if possible\n if (\n isContainedInMiddleThird(elementStart, elementSize, offsetStart) &&\n acceptsDropInside\n ) {\n return \"inside\";\n }\n\n const containingHalf = getContainingHalf(\n elementStart,\n elementSize,\n offsetStart\n );\n\n // Drop above or below if possible\n const acceptedHalf = acceptsDrop({\n sourceIndex: activeIndex,\n targetIndex: overIndex,\n position: containingHalf,\n sourceListId,\n targetListId,\n });\n\n return acceptedHalf\n ? containingHalf\n : // Lastly, check if inside but not middle third\n acceptsDropInside\n ? \"inside\"\n : undefined;\n}\n\nfunction isContainedInMiddleThird(\n elementStart: number,\n elementSize: number,\n offsetStart: number\n): boolean {\n return (\n offsetStart >= elementStart + elementSize / 3 &&\n offsetStart <= elementStart + (elementSize * 2) / 3\n );\n}\n\nfunction getContainingHalf(\n elementStart: number,\n elementSize: number,\n offsetStart: number\n): \"above\" | \"below\" {\n if (offsetStart < elementStart + elementSize / 2) return \"above\";\n return \"below\";\n}\n\nexport const dragItemKeySeparator = \"-~-\";\n\nexport function createDragItemKey(listId: string, itemId: UniqueIdentifier) {\n return `${listId}${dragItemKeySeparator}${itemId}`;\n}\n\nexport function parseDragItemKey(key: string): {\n listId: string;\n itemId: UniqueIdentifier;\n} {\n const [listId, itemId] = key.split(dragItemKeySeparator);\n return { listId, itemId };\n}\n","import { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport React, { ForwardedRef, ReactNode, useCallback, useContext } from \"react\";\nimport { IconButton } from \"./IconButton\";\nimport { IconName, renderIcon } from \"./Icons\";\nimport { ListView } from \"./ListView\";\nimport { Spacer } from \"./Spacer\";\n\n/* ----------------------------------------------------------------------------\n * Row\n * ------------------------------------------------------------------------- */\n\ntype TreeRowBaseProps = {\n icon?: Exclude<ReactNode, string> | IconName;\n expanded?: boolean;\n chevronClassName?: string;\n onClickChevron?: ({ altKey }: { altKey: boolean }) => void;\n onDoubleClick?: () => void;\n};\n\ntype TreeViewRowProps<MenuItemType extends string> =\n ListView.RowProps<MenuItemType> & TreeRowBaseProps;\n\nconst TreeRow = forwardRefGeneric(function TreeRow<MenuItemType extends string>(\n {\n icon,\n expanded,\n onClickChevron,\n chevronClassName,\n children,\n ...rest\n }: TreeViewRowProps<MenuItemType>,\n forwardedRef: ForwardedRef<HTMLLIElement>\n) {\n const { expandable } = useContext(ListView.RowContext);\n\n const handleClickChevron = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n onClickChevron?.({ altKey: event.altKey });\n },\n [onClickChevron]\n );\n\n return (\n <ListView.Row ref={forwardedRef} {...rest}>\n {expandable && (\n <>\n {expanded === undefined ? (\n <Spacer.Horizontal size={19} />\n ) : (\n <IconButton\n className={chevronClassName}\n iconName={expanded ? \"ChevronDownIcon2\" : \"ChevronRightIcon2\"}\n onClick={handleClickChevron}\n selected={rest.selected}\n />\n )}\n <Spacer.Horizontal size={6} />\n </>\n )}\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={10} />\n </>\n )}\n {children}\n </ListView.Row>\n );\n});\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nexport namespace TreeView {\n export const Root = ListView.Root;\n export const RowTitle = ListView.RowTitle;\n export const EditableRowTitle = ListView.EditableRowTitle;\n export const Row = memoGeneric(TreeRow);\n export type ClickInfo = ListView.ClickInfo;\n export type RowProps<MenuItemType extends string> =\n TreeViewRowProps<MenuItemType>;\n}\n","import React, { forwardRef } from \"react\";\nimport { cssVars } from \"../theme\";\n\nexport type ColorSwatchSize = \"xsmall\" | \"small\" | \"medium\" | \"large\";\n\nexport const colorSwatchSizeMap = {\n xsmall: 21,\n small: 27,\n medium: 36,\n large: 48,\n};\n\ntype ColorSwatchProps = {\n color: string;\n size?: ColorSwatchSize;\n checked?: boolean;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ColorSwatch = forwardRef(function ColorSwatch(\n { color, size = \"small\", checked, style, ...props }: ColorSwatchProps,\n ref: React.ForwardedRef<HTMLButtonElement>\n) {\n const sizePx = colorSwatchSizeMap[size];\n\n return (\n <button\n {...props}\n ref={ref}\n style={{\n background: color,\n width: sizePx,\n height: sizePx,\n borderRadius: \"4px\",\n outline: checked\n ? `2px solid ${cssVars.colors.primary}`\n : \"1px solid rgba(0,0,0,0.1)\",\n outlineOffset: -1,\n boxShadow: checked\n ? `inset 0 0 0 2px ${cssVars.colors.background}`\n : undefined,\n ...style,\n }}\n />\n );\n});\n","import * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport React, { useMemo } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport {\n ColorSwatch,\n ColorSwatchSize,\n colorSwatchSizeMap,\n} from \"./ColorSwatch\";\n\nexport type TokenValue = string | { ref: string };\n\ntype ColorSwatchControlProps = {\n options: TokenValue[];\n value?: TokenValue;\n /** @default \"small\" */\n size?: ColorSwatchSize;\n readOnly?: boolean;\n onValueChange?: (value: TokenValue) => void;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n onBlur?: React.FocusEventHandler<HTMLButtonElement>;\n className?: string;\n id?: string;\n style?: React.CSSProperties;\n disabled?: boolean;\n};\n\nexport function ColorSwatchControl(props: ColorSwatchControlProps) {\n const {\n options,\n size = \"small\",\n readOnly,\n value,\n onValueChange,\n onFocus,\n onBlur,\n disabled,\n className,\n id,\n style,\n } = props;\n const styles = useMemo(() => {\n return {\n display: \"grid\",\n gridTemplateColumns: `repeat(auto-fill, minmax(${colorSwatchSizeMap[size]}px, 1fr))`,\n gap: \"6px\",\n ...style,\n };\n }, [size, style]);\n\n const content = (\n <div className={className} id={id} style={styles}>\n {options.map((option) => {\n const item = (\n <ColorSwatch\n key={option as string}\n color={option as string}\n size={size}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={disabled}\n // TODO: decide on \"checked\" visual treatment\n className={cx(readOnly ? \"cursor-default\" : \"cursor-pointer\")}\n checked={value === option}\n />\n );\n return (\n <ToggleGroupPrimitive.Item\n asChild\n value={option as string}\n key={option as string}\n disabled={readOnly}\n >\n {item}\n </ToggleGroupPrimitive.Item>\n );\n })}\n </div>\n );\n return (\n <ToggleGroupPrimitive.Root\n type=\"single\"\n value={value as string}\n onValueChange={onValueChange}\n className=\"w-full\"\n disabled={readOnly}\n >\n {content}\n </ToggleGroupPrimitive.Root>\n );\n}\n","import { DropdownChevronIcon } from \"@noya-app/noya-icons\";\nimport { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport React, {\n FocusEventHandler,\n ForwardedRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useLabel } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\nimport { ComboboxState, useComboboxState } from \"../utils/combobox\";\nimport { ActivityIndicator } from \"./ActivityIndicator\";\nimport { ComboboxMenu } from \"./ComboboxMenu\";\nimport { InputField, InputFieldSize } from \"./InputField\";\nimport {\n MenuItem,\n ScoredMenuItem,\n SelectableMenuItem,\n isMenuItemSectionHeader,\n isNonSelectableMenuItem,\n isSelectableMenuItem,\n} from \"./internal/Menu\";\nimport { ListView } from \"./ListView\";\nimport { Small } from \"./Text\";\n\nexport type BaseComboboxProps<T extends string> = {\n id?: string;\n loading?: boolean;\n placeholder?: string;\n items: MenuItem<T>[];\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onDeleteWhenEmpty?: () => void;\n size?: InputFieldSize;\n style?: React.CSSProperties;\n className?: string;\n label?: React.ReactNode;\n children?: React.ReactNode;\n hideMenuWhenEmptyValue?: boolean;\n readOnly?: boolean;\n tabBehavior?: \"autocomplete\" | \"select\";\n openMenuBehavior?: \"showAllItems\" | \"showFilteredItems\";\n};\n\nexport type StringModeOnlyProps = {\n mode: \"string\";\n value?: string;\n onChange?: (value: string) => void;\n onSelectItem?: (value: string) => void;\n onBlur?: (didSubmit: boolean, value: string) => void;\n onHoverItem?: (value: string | undefined) => void;\n allowArbitraryValues?: boolean;\n};\n\nexport type StringModeProps<T extends string> = BaseComboboxProps<T> &\n StringModeOnlyProps;\n\nexport type OptionModeOnlyProps<T extends string> = {\n mode?: \"option\";\n value?: SelectableMenuItem<T>;\n onChange?: (value: SelectableMenuItem<T>) => void;\n onSelectItem?: (value: SelectableMenuItem<T>) => void;\n onBlur?: (didSubmit: boolean, value: SelectableMenuItem<T>) => void;\n onHoverItem?: (value: SelectableMenuItem<T> | undefined) => void;\n allowArbitraryValues?: false;\n};\n\nexport type OptionModeProps<T extends string> = BaseComboboxProps<T> &\n OptionModeOnlyProps<T>;\n\nexport type ComboboxProps<T extends string> =\n | StringModeProps<T>\n | OptionModeProps<T>;\n\nexport interface ComboboxRef<T extends string> {\n focus(): void;\n setValue(value: string | SelectableMenuItem<T>): void;\n selectAllInputText(): void;\n}\n\nexport const Combobox = memoGeneric(\n forwardRefGeneric(function Combobox<T extends string>(\n {\n loading,\n placeholder,\n items,\n size,\n style,\n className,\n label: labelProp,\n children,\n hideMenuWhenEmptyValue = false,\n readOnly = false,\n tabBehavior = \"select\",\n openMenuBehavior = \"showFilteredItems\",\n onFocus,\n onDeleteWhenEmpty,\n ...rest\n }: ComboboxProps<T>,\n forwardedRef: ForwardedRef<ComboboxRef<T>>\n ) {\n // We make a separate props object for the mode-specific props for memoizing\n // since we put the props object into hook deps\n const props = useMemo((): StringModeOnlyProps | OptionModeOnlyProps<T> => {\n if (rest.mode === \"string\") {\n return {\n mode: rest.mode,\n value: rest.value,\n onChange: rest.onChange,\n onSelectItem: rest.onSelectItem,\n onHoverItem: rest.onHoverItem,\n onBlur: rest.onBlur,\n allowArbitraryValues: rest.allowArbitraryValues,\n } satisfies StringModeOnlyProps;\n } else {\n return {\n mode: rest.mode,\n value: rest.value,\n onChange: rest.onChange,\n onSelectItem: rest.onSelectItem,\n onHoverItem: rest.onHoverItem,\n onBlur: rest.onBlur,\n } satisfies OptionModeOnlyProps<T>;\n }\n }, [\n rest.mode,\n rest.value,\n rest.onChange,\n rest.onSelectItem,\n rest.onHoverItem,\n rest.onBlur,\n rest.allowArbitraryValues,\n ]);\n\n const ref = useRef<HTMLInputElement>(null);\n\n function getInitialValueString() {\n if (props.mode === \"string\") {\n return props.value ?? \"\";\n } else {\n return props.value?.title?.toString() ?? \"\";\n }\n }\n\n const initialValueString = getInitialValueString();\n\n const [comboboxState] = useState(\n () =>\n new ComboboxState(\n items,\n initialValueString,\n props.mode === \"string\" && (props.allowArbitraryValues ?? false)\n )\n );\n const state = useComboboxState(comboboxState);\n const [isFocused, setIsFocused] = useState(false);\n const listRef = useRef<ListView.VirtualizedList>(null);\n const [shouldBlur, setShouldBlur] = useState(false);\n const { fieldId: id } = useLabel({\n fieldId: rest.id,\n });\n\n // Keep state in sync with items prop\n useEffect(() => {\n comboboxState.setItems(items);\n }, [items, comboboxState]);\n\n useEffect(() => {\n comboboxState.setFilter(initialValueString);\n }, [comboboxState, initialValueString]);\n\n const { filter, selectedIndex, filteredItems } = state;\n\n const shouldShowMenu =\n isFocused && !(hideMenuWhenEmptyValue && filter === \"\");\n\n useEffect(() => {\n if (listRef.current) {\n listRef.current.scrollToIndex(selectedIndex);\n }\n }, [selectedIndex]);\n\n const handleBlur = useCallback(() => {\n ref.current?.blur();\n comboboxState.reset(initialValueString);\n if (props.mode === \"string\") {\n props.onBlur?.(\n state.filter === state.lastSubmittedValue.filter,\n filter\n );\n } else {\n const selectedItem = comboboxState.getSelectedItem();\n if (selectedItem && isSelectableMenuItem(selectedItem)) {\n props.onBlur?.(\n state.filter === state.lastSubmittedValue.filter,\n selectedItem\n );\n }\n }\n setIsFocused(false);\n }, [filter, initialValueString, props, state, comboboxState]);\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = useCallback(\n (event) => {\n setIsFocused(true);\n comboboxState.reset(\n openMenuBehavior === \"showAllItems\" ? \"\" : initialValueString\n );\n if (ref.current) {\n const length = ref.current.value.length;\n ref.current.setSelectionRange(length, length);\n }\n onFocus?.(event);\n },\n [initialValueString, onFocus, openMenuBehavior, comboboxState]\n );\n\n const handleUpdateSelection = useCallback(\n (item: ScoredMenuItem<T>) => {\n if (item.type !== undefined) return;\n\n const selectedItem = comboboxState.selectCurrentItem(item);\n if (!selectedItem) return;\n\n if (props.mode === \"string\") {\n props.onSelectItem?.(selectedItem.value);\n props.onHoverItem?.(undefined);\n } else {\n props.onSelectItem?.(selectedItem);\n props.onHoverItem?.(undefined);\n }\n setShouldBlur(true);\n },\n [props, comboboxState]\n );\n\n const handleIndexChange = useCallback(\n (index: number) => {\n comboboxState.setSelectedIndex(index);\n const item = comboboxState.getSelectedItem();\n if (item && isSelectableMenuItem(item)) {\n if (props.mode === \"string\") {\n props.onHoverItem?.(item.value);\n } else {\n props.onHoverItem?.(item);\n }\n } else {\n props.onHoverItem?.(undefined);\n }\n },\n [props, comboboxState]\n );\n\n const handleChange = useCallback(\n (value: string) => {\n if (readOnly) return;\n comboboxState.setFilter(value);\n if (props.mode === \"string\") {\n props.onChange?.(value);\n } else {\n const selectedItem = comboboxState.getSelectedItem();\n if (selectedItem && isSelectableMenuItem(selectedItem)) {\n props.onChange?.(selectedItem);\n }\n }\n },\n [readOnly, props, comboboxState]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n let handled = false;\n const item = comboboxState.getSelectedItem();\n\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n comboboxState.moveSelection(\n event.key === \"ArrowDown\" ? \"down\" : \"up\"\n );\n handled = true;\n break;\n case \"Enter\":\n case \"Return\": {\n if (shouldShowMenu) {\n if (item) {\n handleUpdateSelection(item);\n } else if (\n props.mode === \"string\" &&\n props.allowArbitraryValues\n ) {\n // If no item is selected but arbitrary filters are allowed in string mode,\n // submit the current filter value\n comboboxState.submitArbitraryFilter(filter);\n handleBlur();\n } else {\n comboboxState.restoreLastSubmittedValue();\n }\n } else {\n ref.current?.focus();\n }\n break;\n }\n case \"Tab\": {\n if (item) {\n if (event.shiftKey) {\n break;\n }\n\n if (tabBehavior === \"select\") {\n handleUpdateSelection(item);\n handled = true;\n } else {\n // In autocomplete mode:\n // 1. Always set the filter to the selected item\n // 2. If the filter matches the item value, submit it\n event.preventDefault();\n event.stopPropagation();\n if (isNonSelectableMenuItem(item)) return;\n if (isSelectableMenuItem(item)) {\n if (item.value === filter) {\n handleUpdateSelection(item);\n } else {\n comboboxState.setFilter(item.value?.toString() ?? \"\");\n ref.current?.focus();\n }\n }\n handled = true;\n }\n } else if (\n props.mode === \"string\" &&\n props.allowArbitraryValues &&\n filter !== \"\"\n ) {\n // Allow submitting arbitrary filter on Tab only in string mode\n comboboxState.submitArbitraryFilter(filter);\n handleBlur();\n handled = true;\n }\n break;\n }\n case \"Escape\":\n if (ref.current) {\n ref.current.blur();\n comboboxState.restoreLastSubmittedValue();\n }\n handled = true;\n break;\n case \"Backspace\":\n case \"Delete\": {\n if (filter === \"\") {\n onDeleteWhenEmpty?.();\n }\n break;\n }\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [\n filter,\n handleUpdateSelection,\n handleBlur,\n onDeleteWhenEmpty,\n shouldShowMenu,\n comboboxState,\n tabBehavior,\n props,\n ]\n );\n\n const typeaheadValue = comboboxState.getTypeaheadValue();\n\n useImperativeHandle(forwardedRef, () => ({\n focus: () => {\n ref.current?.focus();\n if (ref.current) {\n const length = ref.current.value.length;\n ref.current.setSelectionRange(length, length);\n }\n },\n setValue: (value: string | SelectableMenuItem<T>) => {\n if (typeof value === \"string\") {\n comboboxState.setFilter(value);\n } else {\n comboboxState.setFilter(value.value);\n }\n },\n selectAllInputText: () => {\n ref.current?.setSelectionRange(0, ref.current.value.length);\n },\n }));\n\n const handleChevronClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n\n if (shouldShowMenu) {\n handleBlur();\n return;\n }\n\n // Use openMenuBehavior consistently for both focus and chevron click\n comboboxState.reset(\n openMenuBehavior === \"showAllItems\" ? \"\" : initialValueString\n );\n ref.current?.focus();\n },\n [\n shouldShowMenu,\n openMenuBehavior,\n initialValueString,\n handleBlur,\n comboboxState,\n ]\n );\n\n useEffect(() => {\n if (!shouldBlur) return;\n if (document.activeElement !== ref.current) return;\n setShouldBlur(false);\n ref.current?.focus();\n handleBlur();\n }, [shouldBlur, handleBlur]);\n\n const { sectionHeaderCount, menuItemsCount } = useMemo(\n () => ({\n sectionHeaderCount: filteredItems.filter((item) =>\n isMenuItemSectionHeader(item)\n ).length,\n menuItemsCount: filteredItems.filter((item) =>\n isSelectableMenuItem(item)\n ).length,\n }),\n [filteredItems]\n );\n\n const hasCheckedItems = items.some(\n (item) => isSelectableMenuItem(item) && item.checked\n );\n\n return (\n <InputField.Root\n id={id}\n size={size}\n sideOffset={6}\n end={\n <>\n {loading && (\n <div className=\"pr-1.5\">\n <ActivityIndicator />\n </div>\n )}\n {!readOnly && (\n <InputField.Button\n variant=\"floating\"\n onClick={handleChevronClick}\n >\n <DropdownChevronIcon\n className={cx(\n \"transition-transform duration-100\",\n shouldShowMenu ? \"rotate-180\" : \"rotate-0\"\n )}\n />\n </InputField.Button>\n )}\n </>\n }\n renderPopoverContent={({ width }) => {\n const height = Math.min(\n ListView.calculateHeight({\n menuItemsCount,\n sectionHeaderCount,\n }),\n ListView.rowHeight * 10.5\n );\n\n const listSize = { width, height };\n\n return (\n <div\n className={cx(\n \"flex-col\",\n shouldShowMenu && !readOnly ? \"flex\" : \"hidden\"\n )}\n >\n {filteredItems.length > 0 && !loading ? (\n <ComboboxMenu\n ref={listRef}\n items={filteredItems}\n selectedIndex={selectedIndex}\n onSelectItem={handleUpdateSelection}\n onHoverIndex={handleIndexChange}\n listSize={listSize}\n style={{\n flex: `0 0 ${height}px`,\n }}\n indented={hasCheckedItems}\n />\n ) : (\n <div className=\"flex flex-col h-[50px] p-5 items-center justify-center\">\n <Small className=\"text-text-disabled\">\n {loading ? \"Loading...\" : \"No results\"}\n </Small>\n </div>\n )}\n </div>\n );\n }}\n >\n <InputField.Input\n ref={ref}\n value={filter}\n name=\"component\"\n placeholder={placeholder}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocusCapture={handleFocus}\n onKeyDown={!readOnly ? handleKeyDown : undefined}\n style={style}\n className={className}\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-owns=\"component-listbox\"\n aria-expanded={shouldShowMenu}\n aria-controls=\"component-listbox\"\n {...(readOnly ? { readOnly: true } : {})}\n />\n {filter &&\n typeaheadValue &&\n typeaheadValue.toLowerCase().startsWith(filter.toLowerCase()) && (\n <InputField.Typeahead\n value={typeaheadValue}\n prefix={filter}\n isFocused={isFocused}\n />\n )}\n {children}\n </InputField.Root>\n );\n })\n);\n","import { chunkBy, partition } from \"@noya-app/noya-utils\";\nimport { useSyncExternalStore } from \"react\";\nimport {\n isMenuItemSectionHeader,\n isNonSelectableMenuItem,\n isSelectableMenuItem,\n MenuItem,\n ScoredMenuItem,\n SectionHeaderMenuItem,\n SelectableMenuItem,\n} from \"../components/internal/Menu\";\nimport { fuzzyFilter, IScoredItem } from \"./fuzzyScorer\";\n\nexport type ComboboxStateSnapshot<T extends string> = {\n filter: string;\n selectedIndex: number;\n filteredItems: ScoredMenuItem<T>[];\n lastSubmittedValue: { filter: string; itemName: string };\n};\n\nexport class ComboboxState<T extends string> {\n private filter: string;\n private selectedIndex: number;\n private items: MenuItem<T>[];\n private lastSubmittedValue: { filter: string; itemName: string };\n private subscribers: (() => void)[] = [];\n private version = 0;\n private _cachedSnapshot: [number, ComboboxStateSnapshot<T>] | undefined;\n\n constructor(\n items: MenuItem<T>[],\n initialTitle: string,\n allowArbitraryValues: boolean\n ) {\n this.items = items;\n this.lastSubmittedValue = {\n filter: initialTitle,\n itemName: initialTitle,\n };\n\n // Initialize with the initial value\n this.filter = initialTitle;\n this.selectedIndex = 0;\n\n // Create initial snapshot\n this._cachedSnapshot = [\n 0,\n {\n filter: initialTitle,\n selectedIndex: 0,\n\n filteredItems: this.items.flatMap((item, index) =>\n isMenuItemSectionHeader(item)\n ? item\n : isSelectableMenuItem(item)\n ? {\n ...item,\n index,\n score: 0,\n }\n : []\n ),\n lastSubmittedValue: this.lastSubmittedValue,\n },\n ];\n\n // If there's an initial value, validate it\n if (initialTitle) {\n // Check if the initial value exists in items\n const hasMatch = this.items.some(\n (item) =>\n item.type === undefined &&\n item.title?.toString().toLowerCase() === initialTitle.toLowerCase()\n );\n\n // Get filtered items to check for fuzzy matches\n const filteredItems = this.getFilteredItems();\n\n // If no matches and we don't want arbitrary values, reset to empty\n if (!hasMatch && !filteredItems.length && !allowArbitraryValues) {\n this.filter = \"\";\n this.selectedIndex = 0;\n this._cachedSnapshot = [\n 0,\n {\n filter: \"\",\n selectedIndex: 0,\n\n filteredItems: this.items.flatMap((item): ScoredMenuItem<T>[] =>\n isSelectableMenuItem(item)\n ? [\n {\n ...item,\n index: 0,\n score: 0,\n },\n ]\n : item.type === \"sectionHeader\"\n ? [item]\n : []\n ),\n lastSubmittedValue: this.lastSubmittedValue,\n },\n ];\n }\n }\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.subscribers.push(listener);\n return () => {\n this.subscribers = this.subscribers.filter((l) => l !== listener);\n };\n };\n\n private notifyChange() {\n this.version++;\n this._cachedSnapshot = undefined;\n this.subscribers.forEach((listener) => listener());\n }\n\n private getFilteredItems(): ScoredMenuItem<T>[] {\n return filterWithGroupedSections(this.items, this.filter);\n }\n\n getSnapshot = (): ComboboxStateSnapshot<T> => {\n if (this._cachedSnapshot && this._cachedSnapshot[0] === this.version) {\n return this._cachedSnapshot[1];\n }\n\n const snapshot = {\n filter: this.filter,\n selectedIndex: this.selectedIndex,\n filteredItems: this.getFilteredItems(),\n lastSubmittedValue: this.lastSubmittedValue,\n };\n\n this._cachedSnapshot = [this.version, snapshot];\n return snapshot;\n };\n\n setItems(items: MenuItem<T>[]) {\n this.items = items;\n this.notifyChange();\n }\n\n setFilter(filter: string) {\n this.filter = filter;\n const filteredItems = this.getFilteredItems();\n\n // Find exact match if it exists (case insensitive)\n const exactMatchIndex = filteredItems.findIndex(\n (item) =>\n isSelectableMenuItem(item) &&\n item.title?.toString().toLowerCase().startsWith(filter.toLowerCase())\n );\n\n // Find the first non-header item\n const firstSelectableIndex = filteredItems.findIndex((item): boolean =>\n isSelectableMenuItem(item)\n );\n\n this.selectedIndex =\n exactMatchIndex >= 0 ? exactMatchIndex : firstSelectableIndex;\n\n this.notifyChange();\n }\n\n moveSelection(direction: \"up\" | \"down\") {\n const filteredItems = this.getFilteredItems();\n this.selectedIndex = getNextIndex({\n items: filteredItems,\n currentIndex: this.selectedIndex,\n direction: direction === \"down\" ? \"next\" : \"previous\",\n isDisabled: (item) => isNonSelectableMenuItem(item),\n });\n this.notifyChange();\n }\n\n selectCurrentItem(\n item?: ScoredMenuItem<T>\n ): SelectableMenuItem<T> | undefined {\n const itemToSelect = item || this.getFilteredItems()[this.selectedIndex];\n if (itemToSelect && isSelectableMenuItem(itemToSelect)) {\n this.lastSubmittedValue = {\n filter: itemToSelect.title!.toString(),\n itemName: itemToSelect.title!.toString(),\n };\n this.filter = itemToSelect.title!.toString();\n this.notifyChange();\n return itemToSelect;\n } else {\n // If no valid item to select and arbitrary values aren't allowed,\n // restore the last valid value\n this.restoreLastSubmittedValue();\n }\n }\n\n restoreLastSubmittedValue() {\n this.filter = this.lastSubmittedValue.itemName;\n this.notifyChange();\n }\n\n reset(newFilter = \"\") {\n this.filter = newFilter;\n this.selectedIndex = 0;\n this.notifyChange();\n }\n\n getSelectedItem(): ScoredMenuItem<T> | undefined {\n const filteredItems = this.getFilteredItems();\n return filteredItems[this.selectedIndex];\n }\n\n getTypeaheadValue(): string | undefined {\n const selectedItem = this.getSelectedItem();\n if (selectedItem && isSelectableMenuItem(selectedItem))\n return selectedItem.title!.toString();\n }\n\n setSelectedIndex(index: number) {\n const filteredItems = this.getFilteredItems();\n\n // If trying to select a header or separator, find the next selectable item\n if (isNonSelectableMenuItem(filteredItems[index])) {\n // Look for the next selectable item\n for (let i = index + 1; i < filteredItems.length; i++) {\n if (isSelectableMenuItem(filteredItems[i])) {\n this.selectedIndex = i;\n this.notifyChange();\n return;\n }\n }\n // If no next item, look backwards\n for (let i = index - 1; i >= 0; i--) {\n if (isSelectableMenuItem(filteredItems[i])) {\n this.selectedIndex = i;\n this.notifyChange();\n return;\n }\n }\n // If no selectable items found, don't change selection\n return;\n }\n\n this.selectedIndex = index;\n this.notifyChange();\n }\n\n submitArbitraryFilter(filter: string) {\n this.lastSubmittedValue = {\n filter,\n itemName: filter,\n };\n this.filter = filter;\n this.notifyChange();\n }\n}\n\nexport function filterWithGroupedSections<T extends string>(\n items: MenuItem<T>[],\n query: string\n): ScoredMenuItem<T>[] {\n const sections = chunkBy(items, (_a, b) => isSelectableMenuItem(b));\n let result: ScoredMenuItem<T>[] = [];\n let currentIndex = 0;\n\n const createExtraItem = (\n item: SelectableMenuItem<T>,\n index: number\n ): ScoredMenuItem<T> => ({\n ...item,\n index: currentIndex + index,\n score: 0,\n });\n\n const createScoredItem = (\n item: IScoredItem,\n selectableItems: Array<SelectableMenuItem<T>>\n ): ScoredMenuItem<T> => {\n const menuItem = selectableItems[item.index];\n return {\n ...item,\n ...menuItem,\n index: currentIndex + item.index,\n };\n };\n\n for (const section of sections) {\n const [sectionHeaders, selectableItems] = partition(\n section.filter(\n (item): item is SelectableMenuItem<T> | SectionHeaderMenuItem =>\n item.type !== \"submenu\" && item.type !== \"separator\"\n ),\n (item): item is SectionHeaderMenuItem => isMenuItemSectionHeader(item)\n );\n\n let newItems: ScoredMenuItem<T>[];\n\n if (!query.trim()) {\n // For empty query, include all items with score 0\n newItems = selectableItems.map((item, index) =>\n createExtraItem(item, index)\n );\n } else {\n const scoredItems = fuzzyFilter({\n items: selectableItems.map((item) => item.title.toString()),\n query,\n });\n\n const usedIndexes = new Set(scoredItems.map((item) => item.index));\n const extraItems = selectableItems.flatMap(\n (item, index): ScoredMenuItem<T>[] =>\n item?.alwaysInclude && !usedIndexes.has(index)\n ? [createExtraItem(item, index)]\n : []\n );\n\n newItems = scoredItems\n .map((item) => createScoredItem(item, selectableItems))\n .concat(extraItems);\n }\n\n // If we have items or this is an empty query\n if (newItems.length > 0 || !query.trim()) {\n const maxVisibleItems =\n sectionHeaders.length > 0 && sectionHeaders[0]?.maxVisibleItems\n ? sectionHeaders[0]?.maxVisibleItems\n : undefined;\n\n if (maxVisibleItems !== undefined) {\n newItems = newItems.slice(0, maxVisibleItems);\n }\n\n result.push(...sectionHeaders, ...newItems);\n }\n\n currentIndex += selectableItems.length;\n }\n\n return result;\n}\n\nexport function getNextIndex<T>({\n items,\n currentIndex,\n direction,\n isDisabled,\n}: {\n items: T[];\n currentIndex: number;\n direction: \"next\" | \"previous\";\n isDisabled: (item: T) => boolean;\n}): number {\n // Make sure the current index is within bounds\n currentIndex =\n currentIndex < 0\n ? 0\n : currentIndex >= items.length\n ? items.length - 1\n : currentIndex;\n\n // If there are no valid items in the array, return -1\n if (items.every(isDisabled)) return -1;\n\n let nextIndex = currentIndex;\n\n do {\n // Move to the next or previous index, wrapping around if necessary\n if (direction === \"next\") {\n nextIndex = (nextIndex + 1) % items.length;\n } else {\n nextIndex = (nextIndex - 1 + items.length) % items.length;\n }\n\n // If we've looped all the way around without finding a valid item, return the current index\n if (nextIndex === currentIndex) return currentIndex;\n } while (isDisabled(items[nextIndex]));\n\n return nextIndex;\n}\n\nexport function useComboboxState<T extends string>(state: ComboboxState<T>) {\n return useSyncExternalStore(\n state.subscribe,\n state.getSnapshot,\n state.getSnapshot\n );\n}\n","import { IItemScore, scoreFilePathFuzzy } from \"vscode-fuzzy-scorer\";\n\nexport function fuzzyScore({ item, query }: { item: string; query: string }) {\n return scoreFilePathFuzzy({ path: item, query });\n}\n\nexport type IScoredItem = IItemScore & {\n index: number;\n};\n\nexport function fuzzyFilter({\n items,\n query,\n scoreThreshold = 0,\n}: {\n items: string[];\n query: string;\n scoreThreshold?: number;\n}) {\n const scoredItems = items.map(\n (text, index): IScoredItem => ({\n index,\n ...fuzzyScore({ item: text, query }),\n })\n );\n\n if (!query) return scoredItems;\n\n return scoredItems\n .filter(({ score }) => score > scoreThreshold)\n .sort((a, b) => b.score - a.score);\n}\n\nexport type IToken =\n | { type: \"text\"; text: string }\n | { type: \"match\"; text: string };\n\nexport type MatchRange = { start: number; end: number };\n\nexport function fuzzyTokenize({\n item,\n itemScore,\n}: {\n item: string;\n itemScore: IItemScore;\n}): IToken[] {\n if (typeof item !== \"string\") {\n return [{ type: \"text\", text: String(item) }];\n }\n\n const tokens: IToken[] = [];\n let lastMatchIndex = 0;\n\n const matches: MatchRange[] = mergeRanges([\n ...(itemScore.labelMatch ?? []),\n ...(itemScore.descriptionMatch ?? []),\n ]);\n\n for (const match of matches) {\n if (match.start > lastMatchIndex) {\n tokens.push({\n type: \"text\",\n text: item.slice(lastMatchIndex, match.start),\n });\n }\n\n tokens.push({\n type: \"match\",\n text: item.slice(match.start, match.end),\n });\n\n lastMatchIndex = match.end;\n }\n\n if (lastMatchIndex < item.length) {\n tokens.push({\n type: \"text\",\n text: item.slice(lastMatchIndex),\n });\n }\n\n return tokens;\n}\n\nfunction mergeRanges(ranges: MatchRange[]): MatchRange[] {\n const merged: MatchRange[] = [];\n\n const sorted = [...ranges].sort((a, b) => a.start - b.start);\n\n let current: MatchRange | undefined;\n\n for (const range of sorted) {\n if (!current) {\n current = range;\n } else if (range.start <= current.end) {\n current.end = Math.max(current.end, range.end);\n } else {\n merged.push(current);\n current = range;\n }\n }\n\n if (current) {\n merged.push(current);\n }\n\n return merged;\n}\n","import { Size } from \"@noya-app/noya-geometry\";\nimport { CheckIcon } from \"@noya-app/noya-icons\";\nimport { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport React, { ForwardedRef } from \"react\";\nimport { cx } from \"../utils/classNames\";\n\nimport { fuzzyTokenize } from \"../utils/fuzzyScorer\";\nimport { renderIcon } from \"./Icons\";\nimport { IVirtualizedList, ListView } from \"./ListView\";\nimport { Spacer } from \"./Spacer\";\nimport {\n CHECKBOX_INDENT_WIDTH,\n CHECKBOX_RIGHT_INSET,\n CHECKBOX_WIDTH,\n KeyboardShortcut,\n ScoredMenuItem,\n styles,\n} from \"./internal/Menu\";\n\ninterface ComboboxMenuProps<T extends string> {\n items: ScoredMenuItem<T>[];\n selectedIndex: number;\n onSelectItem: (item: ScoredMenuItem<T>) => void;\n onHoverIndex: (index: number) => void;\n listSize: Size;\n style?: React.CSSProperties;\n indented?: boolean;\n /** @default right */\n iconPosition?: \"left\" | \"right\";\n}\n\nexport const ComboboxMenu = memoGeneric(\n forwardRefGeneric(function ComboboxMenu<T extends string>(\n {\n items,\n selectedIndex,\n onSelectItem,\n onHoverIndex,\n listSize,\n style,\n indented,\n iconPosition = \"right\",\n }: ComboboxMenuProps<T>,\n forwardedRef: ForwardedRef<IVirtualizedList>\n ) {\n return (\n <ListView.Root\n ref={forwardedRef}\n scrollable\n keyExtractor={(item: ScoredMenuItem<T>) => {\n if (item.type === \"sectionHeader\") return item.id;\n\n return item.value;\n }}\n data={items}\n virtualized={listSize}\n pressEventName=\"onPointerDown\"\n sectionHeaderVariant=\"label\"\n style={style}\n renderItem={(item, i) => {\n if (item.type === \"sectionHeader\") {\n return (\n <ListView.Row key={item.id} isSectionHeader>\n {indented && (\n <Spacer.Horizontal\n size={\n CHECKBOX_WIDTH -\n CHECKBOX_RIGHT_INSET +\n CHECKBOX_INDENT_WIDTH\n }\n />\n )}\n {item.title}\n </ListView.Row>\n );\n }\n\n const tokens = fuzzyTokenize({\n item: typeof item.title === \"string\" ? item.title : item.value,\n itemScore: item,\n });\n\n return (\n <ListView.Row\n key={item.value}\n selected={i === selectedIndex}\n disabled={item.disabled}\n onPress={() => !item.disabled && onSelectItem(item)}\n onHoverChange={(hovered) => {\n if (hovered && !item.disabled) {\n onHoverIndex(i);\n }\n }}\n >\n <div className=\"flex flex-1 min-w-0 items-center\">\n {indented && <Spacer.Horizontal size={CHECKBOX_INDENT_WIDTH} />}\n {item.checked ? (\n <div {...styles.itemIndicator}>\n <CheckIcon />\n </div>\n ) : indented ? (\n <Spacer.Horizontal\n size={CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET}\n />\n ) : null}\n {iconPosition === \"left\" && item.icon && (\n <>\n {renderIcon(item.icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n {tokens.map((token, j) => (\n <span\n key={`${item.value}-token-${j}`}\n className={cx(\n token.type === \"match\" ? \"font-bold\" : \"font-normal\",\n \"whitespace-pre truncate\"\n )}\n >\n {token.text}\n </span>\n ))}\n </div>\n {(item.shortcut || (item.icon && iconPosition === \"right\")) && (\n <>\n {item.shortcut ? (\n <KeyboardShortcut shortcut={item.shortcut} />\n ) : (\n item.icon && renderIcon(item.icon)\n )}\n </>\n )}\n </ListView.Row>\n );\n }}\n />\n );\n })\n);\n","import { Dialog } from \"@noya-app/noya-designsystem\";\nimport { AutoSizer } from \"@noya-app/react-utils\";\nimport React, { memo } from \"react\";\nimport {\n ISearchCompletionMenu,\n SearchCompletionMenu,\n} from \"./SearchCompletionMenu\";\n\nexport const CommandPalette = memo(function CommandPalette({\n showCommandPalette,\n setShowCommandPalette,\n items,\n onSelect,\n onHover,\n}: {\n showCommandPalette: boolean;\n setShowCommandPalette: (value: boolean) => void;\n} & Pick<\n React.ComponentProps<typeof SearchCompletionMenu>,\n \"items\" | \"onSelect\" | \"onHover\"\n>) {\n const menuRef = React.useRef<ISearchCompletionMenu>(null);\n\n const handleClose = React.useCallback(() => {\n setShowCommandPalette(false);\n }, [setShowCommandPalette]);\n\n return (\n <Dialog\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n maxWidth: \"500px\",\n minHeight: \"100px\",\n padding: \"1px\",\n top: \"100px\",\n left: \"50%\",\n transform: \"translate(-50%, 0)\",\n }}\n showCloseButton={false}\n open={showCommandPalette}\n onOpenChange={(value) => {\n setShowCommandPalette(value);\n }}\n closeOnInteractOutside\n onOpenAutoFocus={() => {\n menuRef.current?.focus();\n setTimeout(() => {\n menuRef.current?.focus();\n }, 0);\n }}\n >\n <div className=\"flex flex-col flex-1\">\n <AutoSizer>\n {(size) => (\n <SearchCompletionMenu\n ref={menuRef}\n width={size.width}\n items={items}\n onSelect={onSelect}\n onHover={onHover}\n onClose={handleClose}\n />\n )}\n </AutoSizer>\n </div>\n </Dialog>\n );\n});\n","import { getCurrentPlatform, handleKeyboardEvent } from \"@noya-app/noya-keymap\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { cssVars } from \"../theme\";\nimport { getNextIndex } from \"../utils/combobox\";\nimport { fuzzyFilter, IScoredItem } from \"../utils/fuzzyScorer\";\nimport { ComboboxMenu } from \"./ComboboxMenu\";\nimport { Divider } from \"./Divider\";\nimport { InputField } from \"./InputField\";\nimport {\n CHECKBOX_INDENT_WIDTH,\n CHECKBOX_RIGHT_INSET,\n CHECKBOX_WIDTH,\n isSelectableMenuItem,\n SelectableMenuItem,\n} from \"./internal/Menu\";\nimport { ListView } from \"./ListView\";\nimport { Small } from \"./Text\";\n\nexport interface ISearchCompletionMenu {\n focus: () => void;\n}\n\nexport const SearchCompletionMenu = forwardRef(function SearchCompletionMenu(\n {\n onSelect,\n onHover,\n onClose,\n items,\n width = 200,\n testSelectedIndex,\n testSearch,\n }: {\n onSelect: (item: SelectableMenuItem<string>) => void;\n onHover?: (item: SelectableMenuItem<string>) => void;\n onClose: () => void;\n items: SelectableMenuItem<string>[];\n width?: number;\n testSelectedIndex?: number;\n testSearch?: string;\n },\n forwardedRef: React.ForwardedRef<ISearchCompletionMenu>\n) {\n const [state, setState] = useState({\n search: testSearch ?? \"\",\n index: 0,\n });\n\n const { index, search } = state;\n\n const listRef = React.useRef<ListView.VirtualizedList>(null);\n\n const hasCheckedItems = items.some((item) => item.checked);\n\n useEffect(() => {\n listRef.current?.scrollToIndex(index);\n }, [index]);\n\n const results = useMemo(\n () =>\n fuzzyFilter({\n items: items.map((item) =>\n typeof item.title === \"string\" ? item.title : item.value\n ),\n query: search,\n }).map((item) => ({\n ...item,\n ...items[item.index],\n })) as (SelectableMenuItem<string> & IScoredItem)[],\n [items, search]\n );\n\n const setSearch = useCallback((search: string) => {\n setState((state) => ({ ...state, search, index: 0 }));\n }, []);\n\n const setIndex = useCallback((index: number) => {\n setState((state) => ({ ...state, index }));\n }, []);\n\n useEffect(() => {\n onHover?.(results[index]!);\n }, [index, onHover, results]);\n\n const searchHeight = 31;\n\n const listSize =\n results.length > 0\n ? {\n width,\n height: Math.min(results.length * 31, 31 * 6.5),\n }\n : {\n width,\n height: 60,\n };\n\n const elementSize = {\n width: listSize.width,\n height: searchHeight + listSize.height,\n };\n\n const selectAndClose = useCallback(\n (item: SelectableMenuItem<string>) => {\n onSelect(item);\n onClose();\n },\n [onSelect, onClose]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n handleKeyboardEvent(event.nativeEvent, getCurrentPlatform(navigator), {\n ArrowUp: () => {\n const nextIndex = getNextIndex({\n items: results,\n currentIndex: index,\n direction: \"previous\",\n isDisabled: (item) => item.disabled ?? false,\n });\n setIndex(nextIndex);\n },\n ArrowDown: () => {\n const nextIndex = getNextIndex({\n items: results,\n currentIndex: index,\n direction: \"next\",\n isDisabled: (item) => item.disabled ?? false,\n });\n setIndex(nextIndex);\n },\n Tab: () => selectAndClose(results[index]!),\n Enter: () => selectAndClose(results[index]!),\n Escape: () => onClose(),\n });\n },\n [index, onClose, selectAndClose, results, setIndex]\n );\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n useImperativeHandle(forwardedRef, () => ({\n focus: () => {\n inputRef.current?.focus();\n },\n }));\n\n return (\n <div {...elementSize} className=\"flex flex-col overflow-hidden\">\n <InputField.Root className=\"flex flex-0\">\n <InputField.Input\n ref={inputRef}\n value={search}\n placeholder=\"Filter...\"\n style={{\n height: searchHeight,\n borderRadius: 0,\n outline: \"none\",\n boxShadow: \"none\",\n backgroundColor: cssVars.colors.inputBackground,\n paddingTop: \"4px\",\n paddingBottom: \"4px\",\n paddingLeft: hasCheckedItems\n ? `${CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET + 12 + CHECKBOX_INDENT_WIDTH}px`\n : \"12px\",\n paddingRight: \"12px\",\n }}\n onChange={setSearch}\n onKeyDown={handleKeyDown}\n />\n </InputField.Root>\n <Divider />\n {results.length > 0 ? (\n <ComboboxMenu\n ref={listRef}\n listSize={listSize}\n items={results}\n selectedIndex={testSelectedIndex ?? index}\n onSelectItem={(item) => {\n if (isSelectableMenuItem(item)) {\n selectAndClose(item);\n }\n }}\n onHoverIndex={setIndex}\n indented={hasCheckedItems}\n />\n ) : (\n <div\n {...listSize}\n className=\"flex flex-col p-20 items-center justify-center\"\n >\n <Small color=\"textDisabled\">No results</Small>\n </div>\n )}\n </div>\n );\n});\n","import React, { memo } from \"react\";\nimport { cx } from \"../utils/classNames\";\n\ntype DividerVariant = \"normal\" | \"subtle\" | \"strong\";\n\ninterface DividerProps {\n variant?: DividerVariant;\n overflow?: number | string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const Divider = memo(function Divider({\n variant = \"normal\",\n overflow = 0,\n className,\n style,\n ...props\n}: DividerProps) {\n return (\n <div\n className={cx(\n `\n h-px min-h-px\n ${variant === \"strong\" ? \"bg-divider-strong\" : variant === \"subtle\" ? \"bg-divider-subtle\" : \"bg-divider\"}\n self-stretch\n `,\n className\n )}\n style={{\n marginLeft: `-${overflow}px`,\n marginRight: `-${overflow}px`,\n ...style,\n }}\n {...props}\n />\n );\n});\n\nexport const DividerVertical = memo(function DividerVertical({\n variant = \"normal\",\n overflow = 0,\n className,\n style,\n ...props\n}: DividerProps) {\n return (\n <div\n className={cx(`\n w-px min-w-px\n ${variant === \"strong\" ? \"bg-divider-strong\" : variant === \"subtle\" ? \"bg-divider-subtle\" : \"bg-divider\"}\n self-stretch\n ${className}\n `)}\n style={{\n marginTop: `-${overflow}px`,\n marginBottom: `-${overflow}px`,\n ...style,\n }}\n {...props}\n />\n );\n});\n","import React from \"react\";\nimport { INPUT_HEIGHT } from \"../../theme\";\nimport { Avatar, AvatarProps, AvatarStack } from \"../Avatar\";\nimport Button from \"../Button\";\nimport { Small } from \"../Text\";\nimport { Tooltip } from \"../Tooltip\";\n\nexport const UserAvatar = ({ userId, name, image }: AvatarProps) => (\n <Tooltip\n key={userId}\n content={\n <div className=\"flex flex-col\">\n <Small>{name}</Small>\n </div>\n }\n >\n <Avatar size={INPUT_HEIGHT} userId={userId} name={name} image={image} />\n </Tooltip>\n);\n\ntype ConnectedUsersMenuLayoutProps = {\n renderUsers: () => React.ReactNode;\n launchAIAssistant?: () => void;\n isAssistantOpen?: boolean;\n};\n\nexport const ConnectedUsersMenuLayout = ({\n renderUsers,\n launchAIAssistant,\n isAssistantOpen,\n}: ConnectedUsersMenuLayoutProps) => {\n return (\n <div className=\"flex gap-1.5\">\n <AvatarStack size={INPUT_HEIGHT} className=\"mr-1\">\n {renderUsers()}\n </AvatarStack>\n {launchAIAssistant && (\n <Tooltip content=\"AI Assistant\">\n <Button\n active={isAssistantOpen}\n onClick={launchAIAssistant}\n icon=\"ChatBubbleWithDotsIcon\"\n >\n AI\n </Button>\n </Tooltip>\n )}\n </div>\n );\n};\n","import { DragHandleDots2Icon } from \"@noya-app/noya-icons\";\nimport { memoGeneric } from \"@noya-app/react-utils\";\nimport React, { useCallback, useState } from \"react\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport { MenuItem } from \"./internal/Menu\";\n\n/**\n * A button that opens a menu when clicked, but also allows dragging the\n */\nexport const DraggableMenuButton = memoGeneric(function DraggableMenuButton<\n T extends string,\n>({\n items,\n onSelect,\n onClick,\n isVisible = true,\n className,\n style,\n}: {\n items?: MenuItem<T>[];\n onSelect?: (value: T) => void;\n onClick?: () => void;\n isVisible?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}) {\n const [open, setOpen] = useState(false);\n const [downPosition, setDownPosition] = useState<{\n x: number;\n y: number;\n } | null>(null);\n\n const handlePointerDownCapture = useCallback(\n (event: React.PointerEvent) => {\n if (open) {\n setDownPosition(null);\n return;\n }\n\n setDownPosition({\n x: event.clientX,\n y: event.clientY,\n });\n },\n [open]\n );\n\n const handlePointerUp = useCallback(\n (event: React.PointerEvent) => {\n if (open || !downPosition) {\n setDownPosition(null);\n return;\n }\n\n const dx = event.clientX - downPosition.x;\n const dy = event.clientY - downPosition.y;\n const distance = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n\n if (distance < 5) {\n setOpen(true);\n }\n\n setDownPosition(null);\n },\n [downPosition, open]\n );\n\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n if (!isOpen) setOpen(false);\n },\n [setOpen]\n );\n\n return (\n <div\n className={cx(\n \"cursor-pointer rounded flex items-center justify-center py-[2px] hover:bg-input-background-light active:bg-active-background \",\n className\n )}\n style={style}\n onPointerDownCapture={handlePointerDownCapture}\n onPointerUp={handlePointerUp}\n onClick={(event) => {\n event.stopPropagation();\n event.preventDefault();\n onClick?.();\n }}\n >\n {items && onSelect ? (\n <DropdownMenu\n open={open}\n onOpenChange={handleOpenChange}\n items={items}\n onSelect={onSelect}\n shouldBindKeyboardShortcuts={false}\n >\n <div className=\"pointer-events-none h-[15px]\">\n <DragHandleDots2Icon\n color={isVisible || open ? cssVars.colors.icon : \"transparent\"}\n />\n </div>\n </DropdownMenu>\n ) : (\n <DragHandleDots2Icon\n color={isVisible || open ? cssVars.colors.icon : \"transparent\"}\n />\n )}\n </div>\n );\n});\n","import { useControlledOrUncontrolled } from \"@noya-app/react-utils\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport * as React from \"react\";\nimport { useImperativeHandle } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { SidebarRef } from \"./workspace/types\";\n\nexport type DrawerProps = {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger: React.ReactNode;\n children: React.ReactNode;\n title?: React.ReactNode;\n className?: string;\n id?: string;\n style?: React.CSSProperties;\n positioning?: \"fixed\" | \"absolute\";\n side?: \"left\" | \"right\";\n portalled?: boolean;\n portalContainer?: HTMLElement | null;\n};\n\nexport const Drawer = React.memo(\n React.forwardRef(function Drawer(\n {\n open,\n onOpenChange,\n trigger,\n children,\n title,\n className,\n id,\n style,\n positioning = \"fixed\",\n side = \"left\",\n portalled = true,\n portalContainer,\n }: DrawerProps,\n forwardedRef: React.ForwardedRef<SidebarRef>\n ) {\n const [internalOpen, setInternalOpen] = useControlledOrUncontrolled({\n defaultValue: false,\n value: open,\n onChange: onOpenChange,\n });\n\n useImperativeHandle(forwardedRef, () => ({\n expand: () => {\n setInternalOpen(true);\n },\n collapse: () => {\n setInternalOpen(false);\n },\n isExpanded: () => {\n return internalOpen;\n },\n }));\n\n const inner = (\n <>\n <Dialog.Overlay\n className={cx(\n \"inset-0 bg-black/50\",\n positioning === \"absolute\" ? \"absolute\" : \"fixed\"\n )}\n />\n <Dialog.Content\n id={id}\n style={style}\n className={cx(\n `top-0 bottom-0 z-50 overflow-y-auto bg-sidebar-background rounded-none max-h-none max-w-none sm:max-w-sm w-full border-divider-strong`,\n positioning === \"absolute\" ? \"absolute\" : \"fixed\",\n side === \"left\" ? \"left-0 border-r\" : \"right-0 border-l\",\n className\n )}\n >\n {title && <Dialog.Title>{title}</Dialog.Title>}\n {children}\n </Dialog.Content>\n </>\n );\n\n return (\n <Dialog.Root\n key=\"dialog\"\n open={internalOpen}\n onOpenChange={setInternalOpen}\n >\n <Dialog.Trigger key=\"trigger\">{trigger}</Dialog.Trigger>\n {portalled ? (\n <Dialog.Portal container={portalContainer}>{inner}</Dialog.Portal>\n ) : (\n inner\n )}\n </Dialog.Root>\n );\n })\n);\n","import React, { type ReactNode } from \"react\";\nimport { cx } from \"../utils/classNames\";\n\nexport type FadeDirection = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport type FadeProps = {\n children: ReactNode;\n direction?: FadeDirection;\n width?: number;\n height?: number;\n className?: string;\n zIndex?: number;\n /**\n * @default \"front\"\n * If \"back\", the fade will be positioned behind the children\n */\n position?: \"front\" | \"back\";\n};\n\nexport const Fade = ({\n children,\n direction = \"right\",\n width,\n height,\n className,\n zIndex = 0,\n position = \"front\",\n}: FadeProps) => {\n const gradientDirection = {\n left: \"to-l\",\n right: \"to-r\",\n top: \"to-t\",\n bottom: \"to-b\",\n }[direction];\n\n const positionClasses = {\n left: \"left-0 top-0 bottom-0\",\n right: \"right-0 top-0 bottom-0\",\n top: \"left-0 right-0 top-0\",\n bottom: \"left-0 right-0 bottom-0\",\n }[direction];\n\n return (\n <div className={cx(\"relative\", className)} style={{ height }}>\n {position === \"front\" ? children : null}\n <div\n className={cx(\n \"absolute pointer-events-none\",\n positionClasses,\n `bg-gradient-${gradientDirection}`,\n \"from-transparent to-background\",\n zIndex && `z-[${zIndex}]`\n )}\n style={{\n width: width ?? \"100%\",\n height: height ?? \"100%\",\n }}\n />\n {position === \"back\" ? children : null}\n </div>\n );\n};\n","import {\n Banner,\n BannerProps,\n IconButton,\n Section,\n SectionProps,\n} from \"@noya-app/noya-designsystem\";\nimport { forwardRefGeneric } from \"@noya-app/react-utils\";\nimport React from \"react\";\nimport { cx } from \"../../utils/classNames\";\nimport {\n Collection,\n CollectionItemSize,\n CollectionProps,\n CollectionRef,\n} from \"../Collection\";\n\nexport const FileExplorerLayout = ({\n children,\n className,\n ...props\n}: SectionProps) => (\n <Section className={cx(className, \"px-3 flex-1\")} {...props}>\n {children}\n </Section>\n);\n\nexport const FileExplorerUploadButton = ({\n showUploadButton,\n onUpload,\n children,\n}: {\n showUploadButton?: boolean;\n onUpload?: () => void;\n children?: React.ReactNode;\n}) => (\n <div className=\"flex items-center gap-2\">\n {showUploadButton && (\n <IconButton\n iconName=\"UploadIcon\"\n onClick={onUpload}\n aria-label=\"Upload media\"\n tooltip=\"Upload media\"\n />\n )}\n {children}\n </div>\n);\n\nexport const FileExplorerCollection = forwardRefGeneric(\n function FileExplorerCollection<T, M extends string = string>(\n { ...props }: CollectionProps<T, M>,\n ref: React.ForwardedRef<CollectionRef>\n ) {\n return <Collection<T, M> ref={ref} className=\"-mx-3 flex-1\" {...props} />;\n }\n);\n\nexport const FileExplorerDetail = ({\n selected,\n size,\n children,\n}: {\n selected: boolean;\n children: React.ReactNode;\n size?: CollectionItemSize;\n}) => (\n <span\n className={cx(\n size === \"small\" ? \"text-list-small\" : \"text-sm\",\n selected ? \"text-primary\" : \"text-text-muted\"\n )}\n >\n {children}\n </span>\n);\n\nexport const FileExplorerEmptyState = ({\n label = \"No files\",\n ...props\n}: BannerProps) => <Banner label={label} className=\"mx-3\" {...props} />;\n","import { Sketch } from \"@noya-app/noya-file-format\";\nimport React, { forwardRef, memo } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { SketchPattern } from \"../utils/sketchPattern\";\nimport { FillPreviewBackground } from \"./FillPreviewBackground\";\n\nconst FillButton = forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, ...props }, ref) => (\n <button\n ref={ref}\n className={cx(\n `outline-none p-0 w-[50px] h-input-height rounded overflow-hidden border-none shadow-[0_0_0_1px_var(--n-divider)_inset] bg-transparent relative focus:shadow-active-input `,\n className\n )}\n {...props}\n />\n));\n\ninterface Props {\n id?: string;\n value?: Sketch.Color | Sketch.Gradient | SketchPattern;\n}\n\nexport const FillInputField = memo(\n forwardRef<HTMLButtonElement, Props>(function FillInputField(\n { id, value, ...rest },\n ref\n ) {\n return (\n <FillButton ref={ref} id={id} {...rest}>\n <FillPreviewBackground value={value} />\n </FillButton>\n );\n })\n);\n","/**\n * UUID string.\n */\nexport type Uuid = string;\n/**\n * Collection of global document objects\n */\nexport type AssetCollection = {\n _class: 'assetCollection';\n do_objectID: Uuid;\n imageCollection?: ImageCollection;\n colorAssets: ColorAsset[];\n gradientAssets: GradientAsset[];\n images: (FileRef | DataRef)[];\n colors: Color[];\n gradients: Gradient[];\n exportPresets: [];\n};\n/**\n * Legacy object only retained for migrating older documents.\n */\nexport type ImageCollection = {\n _class: 'imageCollection';\n images: any;\n};\n/**\n * Defines a reusable color asset\n */\nexport type ColorAsset = {\n _class: 'MSImmutableColorAsset';\n do_objectID: Uuid;\n name: string;\n color: Color;\n};\n/**\n * Defines a RGBA color value\n */\nexport type Color = {\n _class: 'color';\n alpha: UnitInterval;\n red: UnitInterval;\n green: UnitInterval;\n blue: UnitInterval;\n swatchID?: Uuid;\n colorSpaces?: {\n hsva?: {\n hue: number;\n saturation: number;\n value: number;\n alpha: number;\n };\n };\n};\n/**\n * The set of all real numbers that are greater than or equal to 0 and less than or equal to 1. Used within Sketch documents to encode normalised scalar values, for example RGB color components.\n */\nexport type UnitInterval = number;\n/**\n * Defines a reusable gradient asset\n */\nexport type GradientAsset = {\n _class: 'MSImmutableGradientAsset';\n do_objectID: Uuid;\n name: string;\n gradient: Gradient;\n};\n/**\n * Defines a gradient\n */\nexport type Gradient = {\n _class: 'gradient';\n gradientType: GradientType;\n elipseLength: number;\n from: PointString;\n to: PointString;\n stops: GradientStop[];\n};\n/**\n * Enumeration of the gradient types\n */\nexport enum GradientType {\n Linear = 0,\n Radial = 1,\n Angular = 2,\n}\n/**\n * A formatted string representation of a 2D point, e.g. {1, 1}.\n \n */\nexport type PointString = string;\n/**\n * Defines a position on a gradient that marks the end of a transition to a new color\n */\nexport type GradientStop = {\n _class: 'gradientStop';\n color: Color;\n position: UnitInterval;\n};\n/**\n * Defines a reference to a file within the document bundle\n */\nexport type FileRef = {\n _class: 'MSJSONFileReference';\n _ref_class: 'MSImageData' | 'MSImmutablePage' | 'MSPatch';\n _ref: string;\n};\n/**\n * Defines inline base64 data\n */\nexport type DataRef = {\n _class: 'MSJSONOriginalDataReference';\n _ref_class: 'MSImageData' | 'MSFontData';\n _ref: string;\n data: {\n _data: string;\n };\n sha1: {\n _data: string;\n };\n};\n/**\n * Enumeration of the color profiles Sketch can use to render a document\n */\nexport enum ColorSpace {\n Unmanaged = 0,\n SRGB = 1,\n P3 = 2,\n}\n/**\n * Defines a layer style that has been imported from a library\n */\nexport type ForeignLayerStyle = {\n _class: 'MSImmutableForeignLayerStyle';\n do_objectID: Uuid;\n libraryID: Uuid;\n sourceLibraryName: string;\n symbolPrivate: boolean;\n remoteStyleID: Uuid;\n localSharedStyle: SharedStyle;\n};\n/**\n * Defines a reusable style\n */\nexport type SharedStyle = {\n _class: 'sharedStyle';\n do_objectID: Uuid;\n name: string;\n value: Style;\n};\n/**\n * Defines a layer style\n */\nexport type Style = {\n _class: 'style';\n do_objectID: Uuid;\n borders?: Border[];\n borderOptions: BorderOptions;\n blur?: Blur;\n fills?: Fill[];\n startMarkerType: MarkerType;\n endMarkerType: MarkerType;\n miterLimit: number;\n windingRule: WindingRule;\n textStyle?: TextStyle;\n shadows?: Shadow[];\n innerShadows: InnerShadow[];\n contextSettings?: GraphicsContextSettings;\n colorControls: ColorControls;\n};\n/**\n * Defines a border style\n */\nexport type Border = {\n _class: 'border';\n isEnabled: boolean;\n color: Color;\n fillType: FillType;\n position: BorderPosition;\n thickness: number;\n contextSettings: GraphicsContextSettings;\n gradient: Gradient;\n};\n/**\n * Enumeration of the fill types\n */\nexport enum FillType {\n Color = 0,\n Gradient = 1,\n Pattern = 4,\n Shader = -101,\n}\n/**\n * Enumeration of border positions\n */\nexport enum BorderPosition {\n Center = 0,\n Inside = 1,\n Outside = 2,\n}\n/**\n * Defines the opacity and blend mode of a style or shadow\n */\nexport type GraphicsContextSettings = {\n _class: 'graphicsContextSettings';\n blendMode: BlendMode;\n opacity: number;\n};\n/**\n * Enumeration of the blend modes that can be applied to fills\n */\nexport enum BlendMode {\n Normal = 0,\n Darken = 1,\n Multiply = 2,\n ColorBurn = 3,\n Lighten = 4,\n Screen = 5,\n ColorDodge = 6,\n Overlay = 7,\n SoftLight = 8,\n HardLight = 9,\n Difference = 10,\n Exclusion = 11,\n Hue = 12,\n Saturation = 13,\n Color = 14,\n Luminosity = 15,\n PlusDarker = 16,\n PlusLighter = 17,\n}\n/**\n * Defines border options\n */\nexport type BorderOptions = {\n _class: 'borderOptions';\n isEnabled: boolean;\n dashPattern: number[];\n lineCapStyle: LineCapStyle;\n lineJoinStyle: LineJoinStyle;\n};\n/**\n * Enumeration of the line cap styles\n */\nexport enum LineCapStyle {\n Butt = 0,\n Round = 1,\n Projecting = 2,\n}\n/**\n * Enumeration of the line join styles\n */\nexport enum LineJoinStyle {\n Miter = 0,\n Round = 1,\n Bevel = 2,\n}\n/**\n * Defines a blur style\n */\nexport type Blur = {\n _class: 'blur';\n isEnabled: boolean;\n center: PointString;\n motionAngle?: number;\n radius?: number;\n saturation: number;\n type: BlurType;\n};\n/**\n * Enumeration of the various blur types\n */\nexport enum BlurType {\n Gaussian = 0,\n Motion = 1,\n Zoom = 2,\n Background = 3,\n}\n/**\n * Defines a fill style\n */\nexport type Fill = {\n _class: 'fill';\n isEnabled: boolean;\n color: Color;\n fillType: FillType;\n noiseIndex: number;\n noiseIntensity: number;\n patternFillType: PatternFillType;\n patternTileScale: number;\n contextSettings: GraphicsContextSettings;\n gradient: Gradient;\n image?: FileRef | DataRef;\n shader?: Shader;\n};\n/**\n * Enumeration of pattern fill types\n */\nexport enum PatternFillType {\n Tile = 0,\n Fill = 1,\n Stretch = 2,\n Fit = 3,\n}\n/**\n * Defines a shader\n */\nexport type Shader = {\n _class: 'shader';\n shaderString: string;\n variables: ShaderVariable[];\n};\n/**\n * Defines a variable to be passed to the shader as a uniform\n */\nexport type ShaderVariable = {\n _class: 'shaderVariable';\n name: string;\n value:\n | {\n type: 'integer';\n data: number;\n }\n | {\n type: 'float';\n data: number;\n }\n | {\n type: 'float2';\n data: { x: number; y: number };\n }\n | {\n type: 'color';\n data: Color;\n };\n};\n/**\n * Enumeration of the possible types of vector line endings\n */\nexport enum MarkerType {\n OpenArrow = 0,\n FilledArrow = 1,\n Line = 2,\n OpenCircle = 3,\n FilledCircle = 4,\n OpenSquare = 5,\n FilledSquare = 6,\n}\n/**\n * Enumeration of the winding rule that controls how fills behave in shapes with complex paths\n */\nexport enum WindingRule {\n NonZero = 0,\n EvenOdd = 1,\n}\n/**\n * Defines text style\n */\nexport type TextStyle = {\n _class: 'textStyle';\n verticalAlignment: TextVerticalAlignment;\n encodedAttributes: {\n paragraphStyle?: ParagraphStyle;\n MSAttributedStringTextTransformAttribute?: TextTransform;\n underlineStyle?: UnderlineStyle;\n strikethroughStyle?: {};\n kerning?: number;\n MSAttributedStringFontAttribute: FontDescriptor;\n textStyleVerticalAlignmentKey?: TextVerticalAlignment;\n MSAttributedStringColorAttribute?: Color;\n };\n};\n/**\n * Enumeration of the text style vertical alighment options\n */\nexport enum TextVerticalAlignment {\n Top = 0,\n Middle = 1,\n Bottom = 2,\n}\n/**\n * Defines the paragraph style within a text style\n */\nexport type ParagraphStyle = {\n _class: 'paragraphStyle';\n alignment?: TextHorizontalAlignment;\n maximumLineHeight?: number;\n minimumLineHeight?: number;\n paragraphSpacing?: number;\n allowsDefaultTighteningForTruncation?: number;\n};\n/**\n * Enumeration of the horizontal alignment options for paragraphs\n */\nexport enum TextHorizontalAlignment {\n Left = 0,\n Right = 1,\n Centered = 2,\n Justified = 3,\n Natural = 4,\n}\n/**\n * Enumeration of the text style transformations options\n */\nexport enum TextTransform {\n None = 0,\n Uppercase = 1,\n Lowercase = 2,\n}\n/**\n * Enumeration of the text style underline options\n */\nexport enum UnderlineStyle {\n None = 0,\n Underlined = 1,\n}\n/**\n * Defines a font selection\n */\nexport type FontDescriptor = {\n _class: 'fontDescriptor';\n attributes: {\n name: string;\n size: number;\n variation?: {\n [key: string]: number;\n };\n };\n};\n/**\n * Defines a shadow style\n */\nexport type Shadow = {\n _class: 'shadow';\n isEnabled: boolean;\n blurRadius: number;\n color: Color;\n contextSettings: GraphicsContextSettings;\n offsetX: number;\n offsetY: number;\n spread: number;\n};\n/**\n * Defines an inner shadow style\n */\nexport type InnerShadow = {\n _class: 'innerShadow';\n isEnabled: boolean;\n blurRadius: number;\n color: Color;\n contextSettings: GraphicsContextSettings;\n offsetX: number;\n offsetY: number;\n spread: number;\n};\n/**\n * Defines color adjust styles on images\n */\nexport type ColorControls = {\n _class: 'colorControls';\n isEnabled: boolean;\n brightness: number;\n contrast: number;\n hue: number;\n saturation: number;\n};\n/**\n * Defines a symbol that has been imported from a library\n */\nexport type ForeignSymbol = {\n _class: 'MSImmutableForeignSymbol';\n do_objectID: Uuid;\n libraryID: Uuid;\n sourceLibraryName: string;\n symbolPrivate: boolean;\n originalMaster: SymbolMaster;\n symbolMaster: SymbolMaster;\n missingLibraryFontAcknowledged?: boolean;\n};\n/**\n * A symbol source layer represents a reusable group of layers\n */\nexport type SymbolMaster = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n hasClickThrough: boolean;\n horizontalRulerData: RulerData;\n verticalRulerData: RulerData;\n layout?: LayoutGrid;\n grid?: SimpleGrid;\n groupLayout?: FreeformGroupLayout | InferredGroupLayout;\n _class: 'symbolMaster';\n backgroundColor: Color;\n hasBackgroundColor: boolean;\n includeBackgroundColorInInstance: boolean;\n includeBackgroundColorInExport: boolean;\n isFlowHome: boolean;\n resizesContent: boolean;\n presetDictionary?: any;\n symbolID: Uuid;\n allowsOverrides: boolean;\n overrideProperties: OverrideProperty[];\n layers: (\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | CustomLayer\n )[];\n blockDefinition?: BlockDefinition;\n};\n/**\n * Enumeration of the boolean operations that can be applied to combine shapes\n */\nexport enum BooleanOperation {\n None = -1,\n Union = 0,\n Subtract = 1,\n Intersection = 2,\n Difference = 3,\n}\n/**\n * Defines a layer's export options\n */\nexport type ExportOptions = {\n _class: 'exportOptions';\n exportFormats: ExportFormat[];\n includedLayerIds: Uuid[];\n layerOptions: number;\n shouldTrim: boolean;\n};\n/**\n * Defines an export format, as listed in a layer's export options\n */\nexport type ExportFormat = {\n _class: 'exportFormat';\n absoluteSize: number;\n fileFormat: ExportFileFormat;\n name: string;\n namingScheme?: ExportFormatNamingScheme;\n scale: number;\n visibleScaleType: VisibleScaleType;\n};\n/**\n * Enumeration of the file formats that can be selected in the layer export options\n */\nexport enum ExportFileFormat {\n PNG = 'png',\n JPG = 'jpg',\n TIFF = 'tiff',\n EPS = 'eps',\n PDF = 'pdf',\n WEBP = 'webp',\n SVG = 'svg',\n}\n/**\n * Enumeration of the possible types of export format naming schemes\n */\nexport enum ExportFormatNamingScheme {\n Suffix = 0,\n Prefix = 1,\n}\n/**\n * Enumeration of the possible values to control how an exported layer will be scaled\n */\nexport enum VisibleScaleType {\n Scale = 0,\n Width = 1,\n Height = 2,\n}\n/**\n * Defines an abstract rectangle\n */\nexport type Rect = {\n _class: 'rect';\n constrainProportions: boolean;\n height: number;\n width: number;\n x: number;\n y: number;\n};\n/**\n * Defines a connection between elements in a prototype\n */\nexport type FlowConnection = {\n _class: 'MSImmutableFlowConnection';\n destinationArtboardID: Uuid | 'back';\n animationType: AnimationType;\n maintainScrollPosition?: boolean;\n};\n/**\n * Enumeration of the animation transition types between prototype screens\n */\nexport enum AnimationType {\n None = 0,\n SlideFromLeft = 1,\n SlideFromRight = 2,\n SlideFromBottom = 3,\n SlideFromTop = 4,\n}\n/**\n * Enumeration of the expansion states in the layer list UI\n */\nexport enum LayerListExpanded {\n Undecided = 0,\n Collapsed = 1,\n Expanded = 2,\n}\n/**\n * Enumeration of the possible resize types\n */\nexport enum ResizeType {\n Stretch = 0,\n PinToEdge = 1,\n Resize = 2,\n Float = 3,\n}\n/**\n * Defines persisted ruler positions on artboards, pages and symbols\n */\nexport type RulerData = {\n _class: 'rulerData';\n base: number;\n guides: number[];\n};\n/**\n * Defines the layout settings for an artboard or page\n */\nexport type LayoutGrid = {\n _class: 'layoutGrid';\n isEnabled: boolean;\n columnWidth: number;\n gutterHeight: number;\n gutterWidth: number;\n horizontalOffset: number;\n numberOfColumns: number;\n rowHeightMultiplication: number;\n totalWidth: number;\n guttersOutside: boolean;\n drawHorizontal: boolean;\n drawHorizontalLines: boolean;\n drawVertical: boolean;\n};\n/**\n * Defines the grid settings for an artboard or page\n */\nexport type SimpleGrid = {\n _class: 'simpleGrid';\n isEnabled: boolean;\n gridSize: number;\n thickGridTimes: number;\n};\n/**\n * Normal group layout\n */\nexport type FreeformGroupLayout = {\n _class: 'MSImmutableFreeformGroupLayout';\n};\n/**\n * Inferred group layout defines smart layout options\n */\nexport type InferredGroupLayout = {\n _class: 'MSImmutableInferredGroupLayout';\n axis: InferredLayoutAxis;\n layoutAnchor: InferredLayoutAnchor;\n maxSize?: number;\n minSize?: number;\n};\n/**\n * Enumeration of the axis types for inferred (aka smart) layout\n */\nexport enum InferredLayoutAxis {\n Horizontal = 0,\n Vertical = 1,\n}\n/**\n * Enumeration of the anchor types for inferred (aka smart) layout\n */\nexport enum InferredLayoutAnchor {\n Min = 0,\n Middle = 1,\n Max = 2,\n}\n/**\n * Defines override properties on symbol sources\n */\nexport type OverrideProperty = {\n _class: 'MSImmutableOverrideProperty';\n overrideName: OverrideName;\n canOverride: boolean;\n};\n/**\n * Defines the valid string patterns for an override name\n */\nexport type OverrideName = string | string | string | string;\n/**\n * Group layers are a document organisation aid\n */\nexport type Group = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n hasClickThrough: boolean;\n groupLayout?: FreeformGroupLayout | InferredGroupLayout;\n layers: (\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | CustomLayer\n )[];\n _class: 'group';\n};\n\nexport type NoyaElementType = 'primitive' | 'instance';\n\nexport type NoyaElement = {\n do_objectID: Uuid;\n _class: 'noyaElement';\n name?: string;\n type: NoyaElementType;\n componentID: Uuid;\n // Can strings be children?\n children: NoyaElement[];\n classNames: string[];\n};\n\nexport type NoyaComponent = {\n do_objectID: Uuid;\n _class: 'noyaComponent';\n name: string;\n rootElement: NoyaElement;\n componentID: Uuid;\n};\n\nexport type CustomLayer<T = unknown> = Omit<\n Group,\n '_class' | 'layers' | 'hasClickThrough'\n> & {\n _class: 'customLayer';\n data: T;\n};\n\n/**\n * Oval layers are the result of adding an oval shape to the canvas\n */\nexport type Oval = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'oval';\n};\n/**\n * Enumeration of the possible values for corner rounding on shape points.\n */\nexport enum PointsRadiusBehaviour {\n Disabled = -1,\n Legacy = 0,\n Rounded = 1,\n Smooth = 2,\n}\n/**\n * Defines a shape layer curve point\n */\nexport type CurvePoint = {\n _class: 'curvePoint';\n cornerRadius: number;\n curveFrom: PointString;\n curveTo: PointString;\n hasCurveFrom: boolean;\n hasCurveTo: boolean;\n curveMode: CurveMode;\n point: PointString;\n};\n/**\n * Enumeration of the curve modes that can be applied to vector points\n */\nexport enum CurveMode {\n None = 0,\n Straight = 1,\n Mirrored = 2,\n Asymmetric = 3,\n Disconnected = 4,\n}\n/**\n * Polygon layers are the result of adding a polygon shape to the canvas\n */\nexport type Polygon = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'polygon';\n numberOfPoints: number;\n};\n/**\n * Rectangle layers are the result of adding a rectangle shape to the canvas\n */\nexport type Rectangle = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'rectangle';\n fixedRadius: number;\n hasConvertedToNewRoundCorners: boolean;\n needsConvertionToNewRoundCorners: boolean;\n};\n/**\n * Shape path layers are the result of adding a vector layer\n */\nexport type ShapePath = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'shapePath';\n};\n/**\n * Star layers are the result of adding a star shape to the canvas\n */\nexport type Star = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'star';\n numberOfPoints: number;\n radius: number;\n};\n/**\n * Triangle layers are the result of adding a triangle shape to the canvas\n */\nexport type Triangle = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'triangle';\n isEquilateral: boolean;\n};\n/**\n * Shape groups layers group together multiple shape layers\n */\nexport type ShapeGroup = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n hasClickThrough: boolean;\n groupLayout?: FreeformGroupLayout | InferredGroupLayout;\n layers: (\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | CustomLayer\n )[];\n _class: 'shapeGroup';\n windingRule: WindingRule;\n};\n/**\n * A text layer represents a discrete block or line of text\n */\nexport type Text = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n _class: 'text';\n attributedString: AttributedString;\n automaticallyDrawOnUnderlyingPath: boolean;\n dontSynchroniseWithSymbol: boolean;\n lineSpacingBehaviour: LineSpacingBehaviour;\n textBehaviour: TextBehaviour;\n glyphBounds: PointListString;\n};\n/**\n * Defines character strings and associated styling applied to character ranges\n */\nexport type AttributedString = {\n _class: 'attributedString';\n string: string;\n attributes: StringAttribute[];\n};\n/**\n * Defines an attribute assigned to a range of characters in an attributed string\n */\nexport type StringAttribute = {\n _class: 'stringAttribute';\n location: number;\n length: number;\n attributes: {\n kerning?: number;\n textStyleVerticalAlignmentKey?: TextVerticalAlignment;\n MSAttributedStringFontAttribute: FontDescriptor;\n MSAttributedStringColorAttribute?: Color;\n paragraphStyle?: ParagraphStyle;\n };\n};\n/**\n * Enumeration of line spacing behaviour for fixed line height text\n */\nexport enum LineSpacingBehaviour {\n None = 0,\n Legacy = 1,\n ConsistentBaseline = 2,\n}\n/**\n * Enumeration of the behaviours for text layers\n */\nexport enum TextBehaviour {\n Flexible = 0,\n Fixed = 1,\n FixedWidthAndHeight = 2,\n}\n/**\n * A string representation of a series of 2D points, in the format {{x, y}, {x,y}}.\n */\nexport type PointListString = string;\n\nexport type BlockStylePreset = {\n name?: string;\n parameters: string[];\n};\n\nexport type BlockDefinition = {\n primitiveSymbolID?: string;\n hashtags?: string[];\n placeholderText?: string;\n placeholderParameters?: string[];\n stylePresets?: BlockStylePreset[];\n usesResolver?: boolean;\n isInsertable?: boolean;\n supportsBlockText?: boolean;\n infer?: (props: {\n frame: Omit<Rect, '_class' | 'constrainProportions'>;\n }) => number;\n render?: (props: {\n passthrough: Record<string, any>;\n Components: any;\n instance: SymbolInstance;\n children?: any;\n getSymbolMaster: (symbolId: string) => SymbolMaster;\n }) => any;\n schema?: Record<string, string[]>;\n};\n\nexport type ResolvedBlockData = {\n symbolID: string;\n originalText: string;\n resolvedText: string;\n resolvedAt?: string;\n};\n\nexport type BlockParameter = string;\n\n/**\n * Symbol instance layers represent an instance of a symbol source\n */\nexport type SymbolInstance = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n _class: 'symbolInstance';\n overrideValues: OverrideValue[];\n scale: number;\n symbolID: Uuid;\n verticalSpacing: number;\n horizontalSpacing: number;\n blockText?: string;\n blockParameters?: BlockParameter[];\n resolvedBlockData?: ResolvedBlockData;\n symbolIDIsFixed?: boolean;\n};\n/**\n * Defines an individual symbol override\n */\nexport type OverrideValue = {\n _class: 'overrideValue';\n do_objectID?: Uuid;\n overrideName: OverrideName;\n value:\n | boolean\n | string\n | string[]\n | Uuid\n | FileRef\n | DataRef\n | ResolvedBlockData\n | AnyLayer[];\n};\n\n/**\n * Slice layers allow the content beneath their frame to be exported\n */\nexport type Slice = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n _class: 'slice';\n hasBackgroundColor: boolean;\n backgroundColor: Color;\n};\n/**\n * Hotspot layers define clickable hotspots for use with prototypes\n */\nexport type Hotspot = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n _class: 'MSImmutableHotspotLayer';\n};\n/**\n * Bitmap layers house a single image\n */\nexport type Bitmap = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n _class: 'bitmap';\n fillReplacesImage: boolean;\n image: FileRef | DataRef;\n intendedDPI: number;\n clippingMask: PointListString;\n};\n/**\n * Defines a text style that has been imported from a library\n */\nexport type ForeignTextStyle = {\n _class: 'MSImmutableForeignTextStyle';\n libraryID: Uuid;\n sourceLibraryName: string;\n symbolPrivate: boolean;\n remoteStyleID: Uuid;\n localSharedStyle: SharedStyle;\n missingLibraryFontAcknowledged?: boolean;\n};\n/**\n * Defines a swatch that has been imported from a library\n */\nexport type ForeignSwatch = {\n _class: 'MSImmutableForeignSwatch';\n do_objectID: Uuid;\n libraryID: Uuid;\n sourceLibraryName: string;\n symbolPrivate: boolean;\n remoteSwatchID: Uuid;\n localSwatch: Swatch;\n};\n/**\n * Defines a swatch color variable.\n */\nexport type Swatch = {\n _class: 'swatch';\n do_objectID: Uuid;\n name: string;\n value: Color;\n};\n/**\n * Defines a document's list of reusable styles\n */\nexport type SharedStyleContainer = {\n do_objectID?: Uuid;\n _class: 'sharedStyleContainer';\n objects: SharedStyle[];\n};\n/**\n * Defines a document's list of reusable text styles\n */\nexport type SharedTextStyleContainer = {\n do_objectID?: Uuid;\n _class: 'sharedTextStyleContainer';\n objects: SharedStyle[];\n};\n/**\n * Legacy object only retained for migrating older documents.\n */\nexport type SymbolContainer = {\n do_objectID?: Uuid;\n _class: 'symbolContainer';\n objects: [];\n};\n/**\n * Defines a document's list of swatches\n */\nexport type SwatchContainer = {\n _class: 'swatchContainer';\n do_objectID?: Uuid;\n objects: Swatch[];\n};\n/**\n * Defines a reference to font data embedded in the document\n */\nexport type FontRef = {\n _class: 'fontReference';\n fontData: DataRef;\n fontFamilyName: string;\n fontFileName: string;\n options: number;\n postscriptNames: string[];\n};\n/**\n * Container for ephemeral document state. For now this is just a placeholder, and will see additions in future document versions.\n */\nexport type DocumentState = any;\n/**\n * Defines ephemeral patch information related to the Cloud collaborative editing feature. This information will only be found behind-the-scenes in Cloud documents and won't be relevant or visible to users parsing or generating their own Sketch documents.\n */\nexport type PatchInfo = {\n _class: 'MSImmutablePatchInfo';\n baseVersionID: Uuid;\n lastIntegratedPatchID: Uuid;\n localPatches: FileRef[];\n receivedPatches: FileRef[];\n};\n/**\n * Page layers are the top level organisational abstraction within a document\n */\nexport type Page = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n hasClickThrough: boolean;\n horizontalRulerData: RulerData;\n verticalRulerData: RulerData;\n layout?: LayoutGrid;\n grid?: SimpleGrid;\n groupLayout?: FreeformGroupLayout | InferredGroupLayout;\n _class: 'page';\n layers: (\n | Artboard\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolMaster\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | CustomLayer\n )[];\n};\n/**\n * Artboard layers are a document organisation aid. They have a fixed frame that usually map to variations of device dimensions or viewport sizes\n */\nexport type Artboard = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n hasClickThrough: boolean;\n horizontalRulerData: RulerData;\n verticalRulerData: RulerData;\n layout?: LayoutGrid;\n grid?: SimpleGrid;\n groupLayout?: FreeformGroupLayout | InferredGroupLayout;\n _class: 'artboard';\n backgroundColor: Color;\n hasBackgroundColor: boolean;\n includeBackgroundColorInExport: boolean;\n isFlowHome: boolean;\n resizesContent: boolean;\n presetDictionary?: any;\n layers: (\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | CustomLayer\n )[];\n};\n/**\n * Contains metadata about the Sketch file - information about pages and artboards appearing in the file, fonts used, the version of Sketch used to save the file etc.\n */\nexport type Meta = {\n commit: string;\n pagesAndArtboards: {\n [key: string]: {\n name: string;\n artboards: {\n [key: string]: {\n name: string;\n };\n };\n };\n };\n version:\n | 121\n | 122\n | 123\n | 124\n | 125\n | 126\n | 127\n | 128\n | 129\n | 130\n | 131\n | 132\n | 133\n | 134\n | 135\n | 136;\n compatibilityVersion: 99;\n coeditCompatibilityVersion?: number;\n app: BundleId;\n autosaved: NumericalBool;\n variant: SketchVariant;\n created: {\n commit: string;\n appVersion: string;\n build: number;\n app: BundleId;\n compatibilityVersion: number;\n coeditCompatibilityVersion?: number;\n version: number;\n variant: SketchVariant;\n };\n saveHistory: string[];\n appVersion: string;\n build: number;\n\n // Custom\n noya?: {\n projectDescription?: string;\n };\n};\n/**\n * Enumeration of the Apple bundle ids for the various variants of Sketch\n */\nexport enum BundleId {\n PublicRelease = 'com.bohemiancoding.sketch3',\n Beta = 'com.bohemiancoding.sketch3.beta',\n Private = 'com.bohemiancoding.sketch3.private',\n FeaturePreview = 'com.bohemiancoding.sketch3.feature-preview',\n Internal = 'com.bohemiancoding.sketch3.internal',\n Experimental = 'com.bohemiancoding.sketch3.experimental',\n Testing = 'com.bohemiancoding.sketch3.testing',\n}\n/**\n * A numerical boolean where 0 is false, and 1 is true.\n */\nexport enum NumericalBool {\n True = 0,\n False = 1,\n}\n/**\n * Enumeration of the Sketch variants\n */\nexport type SketchVariant =\n | 'NONAPPSTORE'\n | 'APPSTORE'\n | 'BETA'\n | 'PRIVATE'\n | 'FEATURE_PREVIEW'\n | 'INTERNAL'\n | 'EXPERIMENTAL'\n | 'TESTING'\n | 'UNITTEST';\nexport type User = {\n document: {\n pageListHeight: number;\n pageListCollapsed: NumericalBool;\n expandedSymbolPathsInSidebar?: [];\n expandedTextStylePathsInPopover?: [];\n libraryListCollapsed?: NumericalBool;\n };\n [key: string]: any;\n};\n/**\n * The workspace is a folder in the Sketch file archive that can contain arbitrary JSON files, allowing Sketch and 3rd party products and tools to store settings that should travel with the Sketch document. To avoid clashes or settings being overridden, select a unique name for your workspace file.\n */\nexport type Workspace = any;\n/**\n * This schema describes a representation of an expanded Sketch file, that is, a Sketch file that has been unzipped, all of its entries parsed to JSON and merged into a single object. A concrete example of an expanded sketch file is the return value of the `fromFile` function in `@sketch-hq/sketch-file`\n */\nexport type Contents = {\n document: {\n _class: 'document';\n do_objectID: Uuid;\n assets: AssetCollection;\n colorSpace: ColorSpace;\n currentPageIndex: number;\n foreignLayerStyles: ForeignLayerStyle[];\n foreignSymbols: ForeignSymbol[];\n foreignTextStyles: ForeignTextStyle[];\n foreignSwatches?: ForeignSwatch[];\n layerStyles: SharedStyleContainer;\n layerTextStyles: SharedTextStyleContainer;\n layerSymbols?: SymbolContainer;\n sharedSwatches?: SwatchContainer;\n fontReferences?: FontRef[];\n documentState?: DocumentState;\n patchInfo?: PatchInfo;\n pages: Page[];\n };\n meta: Meta;\n user: User;\n workspace?: Workspace;\n};\n/**\n * The document entry in a Sketch file.\n */\nexport type Document = {\n _class: 'document';\n do_objectID: Uuid;\n assets: AssetCollection;\n colorSpace: ColorSpace;\n currentPageIndex: number;\n foreignLayerStyles: ForeignLayerStyle[];\n foreignSymbols: ForeignSymbol[];\n foreignTextStyles: ForeignTextStyle[];\n foreignSwatches?: ForeignSwatch[];\n layerStyles: SharedStyleContainer;\n layerTextStyles: SharedTextStyleContainer;\n layerSymbols?: SymbolContainer;\n sharedSwatches?: SwatchContainer;\n fontReferences?: FontRef[];\n documentState?: DocumentState;\n patchInfo?: PatchInfo;\n pages: FileRef[];\n designSystem?: DesignSystem;\n};\nexport type DesignSystem = {\n id: string;\n type: 'standard' | 'custom';\n config?: DesignSystemThemeConfig;\n};\nexport type DesignSystemThemeConfig = {\n colorScheme?: 'light' | 'dark';\n primaryColor?: string;\n neutralColor?: string;\n};\n/**\n * Union of all layers\n */\nexport type AnyLayer =\n | SymbolMaster\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | Page\n | Artboard\n | CustomLayer;\n/**\n * Union of all group layers\n */\nexport type AnyGroup = SymbolMaster | Group | ShapeGroup | Page | Artboard;\n/**\n * Union of all objects, i.e. objects with a _class property\n */\nexport type AnyObject =\n | AssetCollection\n | ImageCollection\n | ColorAsset\n | Color\n | GradientAsset\n | Gradient\n | GradientStop\n | FileRef\n | DataRef\n | ForeignLayerStyle\n | SharedStyle\n | Style\n | Border\n | GraphicsContextSettings\n | BorderOptions\n | Blur\n | Fill\n | Shader\n | ShaderVariable\n | TextStyle\n | ParagraphStyle\n | FontDescriptor\n | Shadow\n | InnerShadow\n | ColorControls\n | ForeignSymbol\n | SymbolMaster\n | ExportOptions\n | ExportFormat\n | Rect\n | FlowConnection\n | RulerData\n | LayoutGrid\n | SimpleGrid\n | FreeformGroupLayout\n | InferredGroupLayout\n | OverrideProperty\n | Group\n | Oval\n | CurvePoint\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | AttributedString\n | StringAttribute\n | SymbolInstance\n | OverrideValue\n | Slice\n | Hotspot\n | Bitmap\n | ForeignTextStyle\n | ForeignSwatch\n | Swatch\n | SharedStyleContainer\n | SharedTextStyleContainer\n | SymbolContainer\n | SwatchContainer\n | FontRef\n | PatchInfo\n | Page\n | Artboard\n | CustomLayer\n | NoyaElement;\n/**\n * Enum of all possible _class property values\n */\nexport enum ClassValue {\n MSImmutableColorAsset = 'MSImmutableColorAsset',\n MSImmutableFlowConnection = 'MSImmutableFlowConnection',\n MSImmutableForeignLayerStyle = 'MSImmutableForeignLayerStyle',\n MSImmutableForeignSwatch = 'MSImmutableForeignSwatch',\n MSImmutableForeignSymbol = 'MSImmutableForeignSymbol',\n MSImmutableForeignTextStyle = 'MSImmutableForeignTextStyle',\n MSImmutableFreeformGroupLayout = 'MSImmutableFreeformGroupLayout',\n MSImmutableGradientAsset = 'MSImmutableGradientAsset',\n MSImmutableHotspotLayer = 'MSImmutableHotspotLayer',\n MSImmutableInferredGroupLayout = 'MSImmutableInferredGroupLayout',\n MSImmutableOverrideProperty = 'MSImmutableOverrideProperty',\n MSImmutablePatchInfo = 'MSImmutablePatchInfo',\n MSJSONFileReference = 'MSJSONFileReference',\n MSJSONOriginalDataReference = 'MSJSONOriginalDataReference',\n Artboard = 'artboard',\n AssetCollection = 'assetCollection',\n AttributedString = 'attributedString',\n Bitmap = 'bitmap',\n Blur = 'blur',\n Border = 'border',\n BorderOptions = 'borderOptions',\n Color = 'color',\n ColorControls = 'colorControls',\n CurvePoint = 'curvePoint',\n ExportFormat = 'exportFormat',\n ExportOptions = 'exportOptions',\n Fill = 'fill',\n FontDescriptor = 'fontDescriptor',\n FontReference = 'fontReference',\n Gradient = 'gradient',\n GradientStop = 'gradientStop',\n GraphicsContextSettings = 'graphicsContextSettings',\n Group = 'group',\n ImageCollection = 'imageCollection',\n InnerShadow = 'innerShadow',\n LayoutGrid = 'layoutGrid',\n Oval = 'oval',\n OverrideValue = 'overrideValue',\n Page = 'page',\n ParagraphStyle = 'paragraphStyle',\n Polygon = 'polygon',\n Rect = 'rect',\n Rectangle = 'rectangle',\n RulerData = 'rulerData',\n Shader = 'shader',\n ShaderVariable = 'shaderVariable',\n Shadow = 'shadow',\n ShapeGroup = 'shapeGroup',\n ShapePath = 'shapePath',\n SharedStyle = 'sharedStyle',\n SharedStyleContainer = 'sharedStyleContainer',\n SharedTextStyleContainer = 'sharedTextStyleContainer',\n SimpleGrid = 'simpleGrid',\n Slice = 'slice',\n Star = 'star',\n StringAttribute = 'stringAttribute',\n Style = 'style',\n Swatch = 'swatch',\n SwatchContainer = 'swatchContainer',\n SymbolContainer = 'symbolContainer',\n SymbolInstance = 'symbolInstance',\n SymbolMaster = 'symbolMaster',\n Text = 'text',\n TextStyle = 'textStyle',\n Triangle = 'triangle',\n CustomLayer = 'customLayer',\n NoyaComponent = 'noyaComponent',\n NoyaElement = 'noyaElement',\n}\n/**\n * A mapping of class values to object types\n */\nexport type ClassMap = {\n triangle: Triangle;\n textStyle: TextStyle;\n text: Text;\n symbolMaster: SymbolMaster;\n symbolInstance: SymbolInstance;\n symbolContainer: SymbolContainer;\n swatchContainer: SwatchContainer;\n swatch: Swatch;\n style: Style;\n stringAttribute: StringAttribute;\n star: Star;\n slice: Slice;\n simpleGrid: SimpleGrid;\n sharedTextStyleContainer: SharedTextStyleContainer;\n sharedStyleContainer: SharedStyleContainer;\n sharedStyle: SharedStyle;\n shapePath: ShapePath;\n shapeGroup: ShapeGroup;\n shadow: Shadow;\n shaderVariable: ShaderVariable;\n shader: Shader;\n rulerData: RulerData;\n rectangle: Rectangle;\n rect: Rect;\n polygon: Polygon;\n paragraphStyle: ParagraphStyle;\n page: Page;\n overrideValue: OverrideValue;\n oval: Oval;\n layoutGrid: LayoutGrid;\n innerShadow: InnerShadow;\n imageCollection: ImageCollection;\n group: Group;\n graphicsContextSettings: GraphicsContextSettings;\n gradientStop: GradientStop;\n gradient: Gradient;\n fontReference: FontRef;\n fontDescriptor: FontDescriptor;\n fill: Fill;\n exportOptions: ExportOptions;\n exportFormat: ExportFormat;\n curvePoint: CurvePoint;\n colorControls: ColorControls;\n color: Color;\n borderOptions: BorderOptions;\n border: Border;\n blur: Blur;\n bitmap: Bitmap;\n attributedString: AttributedString;\n assetCollection: AssetCollection;\n artboard: Artboard;\n MSJSONOriginalDataReference: DataRef;\n MSJSONFileReference: FileRef;\n MSImmutablePatchInfo: PatchInfo;\n MSImmutableOverrideProperty: OverrideProperty;\n MSImmutableInferredGroupLayout: InferredGroupLayout;\n MSImmutableHotspotLayer: Hotspot;\n MSImmutableGradientAsset: GradientAsset;\n MSImmutableFreeformGroupLayout: FreeformGroupLayout;\n MSImmutableForeignTextStyle: ForeignTextStyle;\n MSImmutableForeignSymbol: ForeignSymbol;\n MSImmutableForeignSwatch: ForeignSwatch;\n MSImmutableForeignLayerStyle: ForeignLayerStyle;\n MSImmutableFlowConnection: FlowConnection;\n MSImmutableColorAsset: ColorAsset;\n customLayer: CustomLayer;\n noyaComponent: NoyaComponent;\n noyaElement: NoyaElement;\n};\n","import { Sketch } from \"@noya-app/noya-file-format\";\n// import { useSketchImage } from 'noya-renderer';\nimport * as React from \"react\";\nimport { useImageData } from \"../contexts/ImageDataContext\";\nimport { useObjectURL } from \"../hooks/useObjectURL\";\nimport { cssVars } from \"../theme\";\nimport { getGradientBackground } from \"../utils/getGradientBackground\";\nimport { sketchColorToRgbaString } from \"../utils/sketchColor\";\nimport { SketchPattern } from \"../utils/sketchPattern\";\n\nconst dotsHorizontalSvg = (fillColor: string) => `\n <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 15' fill='${fillColor}'>\n <path d='M3.625 7.5C3.625 8.12132 3.12132 8.625 2.5 8.625C1.87868 8.625 1.375 8.12132 1.375 7.5C1.375 6.87868 1.87868 6.375 2.5 6.375C3.12132 6.375 3.625 6.87868 3.625 7.5ZM8.625 7.5C8.625 8.12132 8.12132 8.625 7.5 8.625C6.87868 8.625 6.375 8.12132 6.375 7.5C6.375 6.87868 6.87868 6.375 7.5 6.375C8.12132 6.375 8.625 6.87868 8.625 7.5ZM12.5 8.625C13.1213 8.625 13.625 8.12132 13.625 7.5C13.625 6.87868 13.1213 6.375 12.5 6.375C11.8787 6.375 11.375 6.87868 11.375 7.5C11.375 8.12132 11.8787 8.625 12.5 8.625Z'></path>\n </svg>\n`;\n\nconst Background = React.memo(function Background({\n background,\n}: {\n background?: string;\n}) {\n return (\n <span\n className={`${background ? `bg-[${background}]` : \"bg-input-background\"} absolute inset-0`}\n />\n );\n});\n\nfunction getPatternSizeAndPosition(\n fillType: Sketch.PatternFillType,\n tileScale: number\n) {\n switch (fillType) {\n case Sketch.PatternFillType.Fit:\n return \"center / contain\";\n case Sketch.PatternFillType.Tile:\n return `top left / ${tileScale * 100}%`;\n case Sketch.PatternFillType.Fill:\n return \"center / cover\";\n case Sketch.PatternFillType.Stretch:\n return \"center / 100% 100%\";\n }\n}\n\nexport const PatternPreviewBackground = React.memo(\n function PatternPreviewBackground({\n fillType,\n tileScale,\n imageRef,\n }: {\n fillType: Sketch.PatternFillType;\n tileScale: number;\n imageRef: string;\n }) {\n const image = useImageData(imageRef);\n\n const url = useObjectURL(image);\n\n const size = getPatternSizeAndPosition(fillType, tileScale);\n\n const background = React.useMemo(\n () =>\n [\n size,\n `url(${url})`,\n fillType === Sketch.PatternFillType.Tile ? \"repeat\" : \"no-repeat\",\n ].join(\" \"),\n [fillType, size, url]\n );\n\n return <Background background={background} />;\n }\n);\n\nconst ColorPreviewBackground = React.memo(function ColorPreviewBackground({\n color,\n}: {\n color: Sketch.Color;\n}) {\n const background = React.useMemo(\n () => sketchColorToRgbaString(color),\n [color]\n );\n\n return <Background background={background} />;\n});\n\nconst GradientPreviewBackground = React.memo(\n function GradientPreviewBackground({\n gradient,\n }: {\n gradient: Sketch.Gradient;\n }) {\n const background = React.useMemo(\n () => getGradientBackground(gradient.stops, gradient.gradientType, 180),\n [gradient.gradientType, gradient.stops]\n );\n\n return <Background background={background} />;\n }\n);\n\ninterface Props {\n value?: Sketch.Color | Sketch.Gradient | SketchPattern;\n}\n\nconst background = `center url(\"data:image/svg+xml;utf8,${dotsHorizontalSvg(\n cssVars.colors.placeholderDots\n)}\") no-repeat`;\n\nexport const FillPreviewBackground = React.memo(function FillPreviewBackground({\n value,\n}: Props) {\n if (!value) return <Background background={background} />;\n\n switch (value._class) {\n case \"color\":\n return <ColorPreviewBackground color={value} />;\n case \"gradient\":\n return <GradientPreviewBackground gradient={value} />;\n case \"pattern\":\n if (!value.image) return null;\n\n return (\n <PatternPreviewBackground\n fillType={value.patternFillType}\n tileScale={value.patternTileScale}\n imageRef={value.image._ref}\n />\n );\n }\n});\n","import * as React from \"react\";\n\nexport type ImageDataContextValue = {\n getImageData: (ref: string) => ArrayBuffer | undefined;\n};\n\nconst ImageDataContext = React.createContext<ImageDataContextValue | undefined>(\n undefined\n);\n\nexport const ImageDataProvider = React.memo(function ImageDataProvider({\n children,\n getImageData,\n}: {\n children: React.ReactNode;\n getImageData?: (ref: string) => ArrayBuffer | undefined;\n}) {\n const contextValue = React.useMemo(\n () => ({ getImageData: getImageData ?? (() => undefined) }),\n [getImageData]\n );\n\n return (\n <ImageDataContext.Provider value={contextValue}>\n {children}\n </ImageDataContext.Provider>\n );\n});\n\nexport function useImageData(ref: string): ArrayBuffer | undefined {\n const value = React.useContext(ImageDataContext);\n\n if (!value) {\n throw new Error(\"Missing ImageDataProvider\");\n }\n\n return value.getImageData(ref);\n}\n","import { useLayoutEffect, useMemo } from 'react';\n\nexport function useObjectURL(object?: ArrayBuffer | Uint8Array | Blob) {\n const objectURL = useMemo(() => {\n if (object instanceof Blob) return URL.createObjectURL(object);\n\n const bytes =\n object instanceof Uint8Array\n ? object\n : object !== undefined\n ? new Uint8Array(object)\n : new Uint8Array();\n\n return URL.createObjectURL(new Blob([bytes]));\n }, [object]);\n\n useLayoutEffect(() => {\n return () => URL.revokeObjectURL(objectURL);\n }, [objectURL]);\n\n return objectURL;\n}\n","import {\n hsvaToRgbaString,\n RgbaColor,\n rgbaToHex,\n rgbaToHsva,\n} from '@noya-app/noya-colorpicker';\nimport type { Sketch } from '@noya-app/noya-file-format';\n\nexport function sketchColorToRgba(value: Sketch.Color): RgbaColor {\n return {\n r: Math.floor(value.red * 255),\n g: Math.floor(value.green * 255),\n b: Math.floor(value.blue * 255),\n a: value.alpha,\n };\n}\n\nexport function sketchColorToRgbaString(value: Sketch.Color): string {\n return hsvaToRgbaString(rgbaToHsva(sketchColorToRgba(value)));\n}\n\nexport function rgbaToSketchColor(value: RgbaColor): Sketch.Color {\n return {\n _class: 'color',\n alpha: value.a,\n red: value.r / 255,\n green: value.g / 255,\n blue: value.b / 255,\n };\n}\n\nexport function sketchColorToHex(value: Sketch.Color): string {\n return rgbaToHex(sketchColorToRgba(value)).toUpperCase();\n}\n","import { Sketch } from \"@noya-app/noya-file-format\";\nimport { sketchColorToRgbaString } from \"./sketchColor\";\n\nconst getRGBAColor = (value: Sketch.GradientStop[], num: 100 | 360) =>\n [...value]\n .sort((a, b) => a.position - b.position)\n .map(\n (g) =>\n `${sketchColorToRgbaString(g.color)} ${g.position * num}${\n num === 100 ? \"%\" : \"deg\"\n }`\n )\n .join(\", \\n\");\n\nexport function getGradientBackground(\n value: Sketch.GradientStop[],\n type: Sketch.GradientType,\n direction?: number\n) {\n if (type === Sketch.GradientType.Angular) {\n return `conic-gradient(${getRGBAColor(value, 360)})`;\n }\n\n const color = getRGBAColor(value, 100);\n const position =\n type === Sketch.GradientType.Radial\n ? \"radial-gradient(circle\"\n : `linear-gradient(${direction !== undefined ? direction : 180}deg`;\n\n return `${position}, ${color})`;\n}\n","import {\n cssVars,\n Divider,\n IconButton,\n Small,\n useCurrentFloatingWindowInternal,\n useFloatingWindowManager,\n} from \"@noya-app/noya-designsystem\";\nimport React, { useCallback, useRef, useState } from \"react\";\n\ninterface FloatingWindowProps {\n title?: string;\n onClose?: () => void;\n children: React.ReactNode;\n initialWidth?: number;\n initialHeight?: number;\n initialX?: number;\n initialY?: number;\n minWidth?: number;\n minHeight?: number;\n toolbarContent?: React.ReactNode;\n renderToolbar?: (props: {\n title?: string;\n toolbarContent?: React.ReactNode;\n onClose?: () => void;\n }) => React.ReactNode;\n}\n\nconst styles = {\n noSelect: {\n userSelect: \"none\",\n WebkitUserSelect: \"none\",\n MozUserSelect: \"none\",\n msUserSelect: \"none\",\n },\n windowWrapper: {\n position: \"absolute\",\n backgroundColor: \"white\",\n borderRadius: \"4px\",\n boxShadow: \"0 2px 10px rgba(0, 0, 0, 0.1)\",\n overflow: \"hidden\",\n // backdropFilter: \"blur(10px)\",\n },\n toolbar: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"8px 12px\",\n cursor: \"move\",\n userSelect: \"none\",\n minHeight: \"43px\",\n },\n closeButton: {\n background: \"none\",\n border: \"none\",\n fontSize: \"16px\",\n cursor: \"pointer\",\n },\n content: {\n padding: \"12px\",\n height: \"calc(100% - 44px)\", // Adjust based on toolbar height\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n resizeHandle: {\n position: \"absolute\",\n },\n} as const;\n\nconst resizeHandlePositions = {\n top: { top: \"0\", left: \"0\", right: \"0\", height: \"5px\", cursor: \"ns-resize\" },\n right: {\n top: \"0\",\n right: \"0\",\n bottom: \"0\",\n width: \"5px\",\n cursor: \"ew-resize\",\n },\n bottom: {\n bottom: \"0\",\n left: \"0\",\n right: \"0\",\n height: \"5px\",\n cursor: \"ns-resize\",\n },\n left: { top: \"0\", left: \"0\", bottom: \"0\", width: \"5px\", cursor: \"ew-resize\" },\n topLeft: {\n top: \"0\",\n left: \"0\",\n width: \"10px\",\n height: \"10px\",\n cursor: \"nwse-resize\",\n },\n topRight: {\n top: \"0\",\n right: \"0\",\n width: \"10px\",\n height: \"10px\",\n cursor: \"nesw-resize\",\n },\n bottomLeft: {\n bottom: \"0\",\n left: \"0\",\n width: \"10px\",\n height: \"10px\",\n cursor: \"nesw-resize\",\n },\n bottomRight: {\n bottom: \"0\",\n right: \"0\",\n width: \"10px\",\n height: \"10px\",\n cursor: \"nwse-resize\",\n },\n};\n\nfunction defaultRenderToolbar({\n title,\n toolbarContent,\n onClose,\n}: {\n title?: string;\n toolbarContent?: React.ReactNode;\n onClose?: () => void;\n}) {\n return (\n <>\n <Small className=\"flex-1 font-medium text-text\">{title}</Small>\n {toolbarContent}\n <IconButton\n iconName=\"Cross3Icon\"\n className=\"h-8 w-8 rounded-full\"\n onClick={onClose}\n size={20}\n style={{\n marginLeft: \"6px\",\n marginRight: \"-6px\",\n }}\n />\n </>\n );\n}\n\nexport const FloatingWindow: React.FC<FloatingWindowProps> = ({\n title,\n onClose,\n children,\n initialWidth = 300,\n initialHeight = 200,\n initialX = 100,\n initialY = 100,\n minWidth = 200,\n minHeight = 100,\n toolbarContent,\n renderToolbar = defaultRenderToolbar,\n}) => {\n const [position, setPosition] = useState({ x: initialX, y: initialY });\n const [size, setSize] = useState({\n width: initialWidth,\n height: initialHeight,\n });\n const [isDragging, setIsDragging] = useState(false);\n const [isResizing, setIsResizing] = useState(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n const [resizeDirection, setResizeDirection] = useState<string | null>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const toggleGlobalTextSelection = (disable: boolean) => {\n if (disable) {\n document.body.style.userSelect = \"none\";\n } else {\n document.body.style.userSelect = \"\";\n }\n };\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (!wrapperRef.current) return;\n\n const rect = wrapperRef.current.getBoundingClientRect();\n setDragOffset({\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n });\n setIsDragging(true);\n }, []);\n\n const handleResizeStart = useCallback(\n (direction: string) => (e: React.MouseEvent) => {\n e.stopPropagation();\n setIsResizing(true);\n setResizeDirection(direction);\n toggleGlobalTextSelection(true);\n },\n []\n );\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (isDragging) {\n setPosition({\n x: e.clientX - dragOffset.x,\n y: e.clientY - dragOffset.y,\n });\n } else if (isResizing && resizeDirection) {\n const rect = wrapperRef.current!.getBoundingClientRect();\n\n let newWidth = size.width;\n let newHeight = size.height;\n let newX = position.x;\n let newY = position.y;\n\n if (/right/i.test(resizeDirection)) {\n newWidth = Math.max(e.clientX - rect.left, minWidth);\n }\n if (/bottom/i.test(resizeDirection)) {\n newHeight = Math.max(e.clientY - rect.top, minHeight);\n }\n if (/left/i.test(resizeDirection)) {\n const potentialWidth = rect.right - e.clientX;\n if (potentialWidth <= minWidth) {\n newWidth = minWidth;\n newX = rect.right - minWidth;\n } else {\n newWidth = potentialWidth;\n newX = e.clientX;\n }\n }\n if (/top/i.test(resizeDirection)) {\n const potentialHeight = rect.bottom - e.clientY;\n if (potentialHeight <= minHeight) {\n newHeight = minHeight;\n newY = rect.bottom - minHeight;\n } else {\n newHeight = potentialHeight;\n newY = e.clientY;\n }\n }\n\n setSize({ width: newWidth, height: newHeight });\n setPosition({ x: newX, y: newY });\n }\n },\n [\n isDragging,\n isResizing,\n dragOffset,\n resizeDirection,\n size,\n position,\n minWidth,\n minHeight,\n ]\n );\n\n const handleMouseUp = useCallback((_e: MouseEvent) => {\n setIsDragging(false);\n setIsResizing(false);\n setResizeDirection(null);\n toggleGlobalTextSelection(false);\n }, []);\n\n React.useEffect(() => {\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [handleMouseMove, handleMouseUp]);\n\n const floatingWindowManager = useFloatingWindowManager();\n const currentFloatingWindow = useCurrentFloatingWindowInternal();\n\n const handleClose = useCallback(() => {\n if (onClose) onClose();\n floatingWindowManager.closeWindow(currentFloatingWindow.id);\n }, [currentFloatingWindow.id, floatingWindowManager, onClose]);\n\n return (\n <div\n ref={wrapperRef}\n style={{\n ...styles.windowWrapper,\n top: position.y,\n left: position.x,\n width: size.width,\n height: size.height,\n outline: `1px solid ${cssVars.colors.divider}`,\n backgroundColor: cssVars.colors.background,\n zIndex: cssVars.zIndex.menu,\n }}\n >\n <div\n style={{\n ...styles.toolbar,\n backgroundColor: cssVars.colors.sidebarBackground,\n }}\n onMouseDown={handleMouseDown}\n >\n {renderToolbar({ title, toolbarContent, onClose: handleClose })}\n </div>\n <Divider />\n <div style={styles.content}>{children}</div>\n {Object.entries(resizeHandlePositions).map(([direction, style]) => (\n <div\n key={direction}\n style={{ ...styles.resizeHandle, ...style }}\n onMouseDown={handleResizeStart(direction)}\n />\n ))}\n </div>\n );\n};\n","import {\n Alpha,\n ColorModel,\n Gradient,\n Hue,\n ColorPicker as NoyaColorPicker,\n RgbaColor,\n Saturation,\n equalColorObjects,\n hsvaToRgba,\n rgbaToHsva,\n} from \"@noya-app/noya-colorpicker\";\nimport type { Sketch } from \"@noya-app/noya-file-format\";\nimport * as React from \"react\";\nimport { Spacer } from \"../components/Spacer\";\nimport { rgbaToSketchColor, sketchColorToRgba } from \"../utils/sketchColor\";\n\ninterface Props {\n value: Sketch.GradientStop[];\n selectedStop: number;\n onChangeColor: (color: Sketch.Color) => void;\n onChangePosition: (position: number) => void;\n onAdd: (color: Sketch.Color, position: number) => void;\n onDelete: () => void;\n onSelectStop: (index: number) => void;\n}\n\nexport const GradientPicker = React.memo(function GradientPicker({\n value,\n selectedStop,\n onChangeColor,\n onChangePosition,\n onAdd,\n onDelete,\n onSelectStop,\n}: Props) {\n const colorModel: ColorModel<RgbaColor> = React.useMemo(\n () => ({\n defaultColor: { r: 0, g: 0, b: 0, a: 1 },\n toHsva: rgbaToHsva,\n fromHsva: hsvaToRgba,\n equal: equalColorObjects,\n }),\n []\n );\n\n const rgbaColor = React.useMemo(\n () => sketchColorToRgba(value[selectedStop].color),\n [value, selectedStop]\n );\n\n const handleChangeColor = React.useCallback(\n (value: RgbaColor) => {\n onChangeColor(rgbaToSketchColor(value));\n },\n [onChangeColor]\n );\n\n const handleAddGradientStop = React.useCallback(\n (value: RgbaColor, position: number) => {\n onAdd(rgbaToSketchColor(value), position);\n },\n [onAdd]\n );\n\n return (\n <NoyaColorPicker\n onChange={handleChangeColor}\n colorModel={colorModel}\n color={rgbaColor}\n >\n <Gradient\n gradients={value}\n selectedStop={selectedStop}\n onSelectStop={onSelectStop}\n onChangePosition={onChangePosition}\n onAdd={handleAddGradientStop}\n onDelete={onDelete}\n />\n <Spacer.Vertical size={10} />\n <Saturation />\n <Spacer.Vertical size={12} />\n <Hue />\n <Spacer.Vertical size={5} />\n <Alpha />\n </NoyaColorPicker>\n );\n});\n","import {\n cssVars,\n Divider,\n ScrollArea,\n withSeparatorElements,\n} from \"@noya-app/noya-designsystem\";\nimport React, { forwardRef, memo } from \"react\";\n\nexport const InspectorContainer = memo(\n forwardRef(function InspectorContainer(\n {\n header,\n children,\n fallback,\n showDividers,\n id,\n className,\n style,\n }: {\n header?: React.ReactNode;\n children?: React.ReactNode;\n fallback?: React.ReactNode;\n showDividers?: boolean;\n id?: string;\n className?: string;\n style?: React.CSSProperties;\n },\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n ) {\n return (\n <div\n ref={forwardedRef}\n id={id}\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n background: cssVars.colors.sidebarBackground,\n ...style,\n }}\n >\n {header}\n {children ? (\n <ScrollArea>\n <div className=\"flex flex-col relative\">\n {showDividers\n ? withSeparatorElements(children, <Divider />)\n : children}\n </div>\n </ScrollArea>\n ) : fallback ? (\n <div className=\"flex flex-col relative h-full\">{fallback}</div>\n ) : null}\n </div>\n );\n })\n);\n","import * as kiwi from \"kiwi.js\";\nimport * as React from \"react\";\n\ninterface ContainerProps {\n children: React.ReactNode;\n renderLabel: (provided: { id: string; index: number }) => React.ReactNode;\n}\n\nexport const LabeledElementView = React.memo(function LabeledElementView({\n children,\n renderLabel,\n}: ContainerProps) {\n const elementIds: string[] = React.Children.toArray(children)\n .flatMap((child) =>\n React.isValidElement(child) && child.type === React.Fragment\n ? (child.props.children as React.ReactNode[])\n : [child]\n )\n .map((child) =>\n React.isValidElement(child) && \"id\" in child.props ? child.props.id : null\n )\n .filter((id) => !!id);\n const serializedIds = elementIds.join(\",\");\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n\n const refs = React.useMemo(() => {\n return Object.fromEntries(\n serializedIds\n .split(\",\")\n .map((id) => [id, React.createRef<HTMLSpanElement>()])\n );\n }, [serializedIds]);\n\n const labelElements = React.useMemo(() => {\n return serializedIds.split(\",\").map((id, index) => (\n <span\n key={id}\n ref={refs[id]}\n style={{ position: \"absolute\", left: `var(--x-offset)` }}\n >\n {renderLabel({\n id,\n index,\n })}\n </span>\n ));\n }, [refs, serializedIds, renderLabel]);\n\n React.useLayoutEffect(() => {\n if (!containerRef.current) return;\n\n const containerRect = containerRef.current.getBoundingClientRect();\n\n const solver = new kiwi.Solver();\n const variables: kiwi.Variable[] = [];\n const heights: number[] = [];\n\n Object.entries(refs).forEach(([id, ref], index, list) => {\n if (!ref.current) return;\n\n // console.log('id', id, ref, index);\n\n const targetElement = document.getElementById(id)!;\n const targetRect = targetElement.getBoundingClientRect();\n targetRect.x = targetElement.offsetLeft;\n const labelRect = ref.current.getBoundingClientRect();\n labelRect.x = ref.current.offsetLeft;\n\n // console.log(id, labelRect, ref.current.offsetLeft);\n\n heights.push(labelRect.height);\n\n const targetMidXValue = targetRect.x + targetRect.width / 2;\n\n const labelMidX = new kiwi.Variable();\n solver.addEditVariable(labelMidX, kiwi.Strength.weak);\n solver.addConstraint(\n new kiwi.Constraint(\n new kiwi.Expression(labelMidX),\n kiwi.Operator.Eq,\n new kiwi.Expression(targetMidXValue),\n kiwi.Strength.strong\n )\n );\n\n if (index === 0) {\n solver.addConstraint(\n new kiwi.Constraint(\n new kiwi.Expression(labelMidX),\n kiwi.Operator.Ge,\n new kiwi.Expression(labelRect.width / 2),\n kiwi.Strength.required\n )\n );\n }\n\n // if (index > 0) {\n // solver.addConstraint(\n // new kiwi.Constraint(\n // new kiwi.Expression(variables[index - 1]),\n // kiwi.Operator.Le,\n // new kiwi.Expression(labelRect.width / 2),\n // kiwi.Strength.required\n // )\n // );\n // }\n\n if (index === list.length - 1) {\n // console.log(\n // labelMidX.value(),\n // containerRect.width,\n // containerRect.width - labelRect.width / 2,\n // );\n solver.addConstraint(\n new kiwi.Constraint(\n new kiwi.Expression(labelMidX),\n kiwi.Operator.Le,\n new kiwi.Expression(containerRect.width - labelRect.width / 2),\n kiwi.Strength.required\n )\n );\n }\n\n solver.suggestValue(labelMidX, labelRect.x + labelRect.width / 2);\n\n variables.push(labelMidX);\n });\n\n solver.updateVariables();\n\n Object.entries(refs).forEach(([_id, ref], index) => {\n if (!ref.current) return;\n\n // console.log(id, variables[index].value());\n\n const labelRect = ref.current.getBoundingClientRect();\n\n ref.current.style.setProperty(\n \"--x-offset\",\n `${variables[index].value() - labelRect.width / 2}px`\n );\n });\n\n containerRef.current.style.setProperty(\n \"--height\",\n `${Math.max(...heights)}px`\n );\n }, [refs, labelElements]);\n\n return (\n <div className=\"flex flex-1 flex-col relative\" ref={containerRef}>\n <div className=\"flex flex-1 items-center\">{children}</div>\n <div className=\"relative overflow-hidden select-none\">\n {labelElements}\n </div>\n </div>\n );\n});\n","import React, { memo, useMemo } from \"react\";\nimport { useIndent } from \"../hooks/useIndent\";\nimport {\n LabelContext,\n LabelPositionContext,\n LabelPositionContextValue,\n useLabelPosition,\n useLabelWidth,\n} from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\nimport { Label, LabelPosition } from \"./Label\";\n\nexport const labeledFieldStyles = (labelPosition?: LabelPosition) =>\n cx(\n \"flex flex-row flex-1 flex-wrap items-center gap-x-1.5\",\n labelPosition === \"end\" && \"flex-row-reverse justify-end\",\n labelPosition === \"above\" && \"flex-col items-stretch justify-start\"\n );\n\nconst labelPositionInset: LabelPositionContextValue = {\n position: \"inset\",\n};\n\nexport const LabeledField = memo(function LabeledField({\n children,\n label,\n labelPosition: labelPositionProp,\n fieldId,\n minWidth = 100,\n className,\n style,\n labelStyle: labelStyleProp,\n ...props\n}: {\n children: React.ReactNode;\n label: React.ReactNode;\n labelPosition?: LabelPosition;\n labelStyle?: React.CSSProperties;\n /** Used for both the `id` of the field and the `htmlFor` of the label, unless `id` and `htmlFor` are explicitly provided */\n fieldId?: string;\n className?: string;\n style?: React.CSSProperties;\n /** @default 100 */\n minWidth?: number;\n}) {\n const indentLevel = useIndent();\n const labelWidthFromContext = useLabelWidth();\n const labelWidth = labelWidthFromContext ?? minWidth;\n\n const labelPositionFromContext = useLabelPosition();\n const labelPosition =\n labelPositionProp ?? labelPositionFromContext ?? \"start\";\n\n const labeledFieldClasses = useMemo(\n () => labeledFieldStyles(labelPosition),\n [labelPosition]\n );\n\n const labelContextValue = useMemo(\n () => ({ fieldId, label }),\n [fieldId, label]\n );\n\n const indentStyle = useMemo(\n () => ({\n width: indentLevel * 8,\n flexBasis: indentLevel * 8,\n flexShrink: 0,\n flexGrow: 0,\n }),\n [indentLevel]\n );\n\n const fieldStyle = useMemo(\n () => ({\n minWidth: `calc(100% - ${labelWidth + indentLevel * 8 + 6}px)`,\n }),\n [labelWidth, indentLevel]\n );\n\n const labelStyle = useMemo(\n () => ({\n minWidth: `calc(${labelWidth}px - ${indentLevel * 8}px)`,\n ...labelStyleProp,\n }),\n [labelWidth, indentLevel, labelStyleProp]\n );\n\n return (\n <LabelContext.Provider value={labelContextValue}>\n {/* let components individually handle inset labels using info from context*/}\n {labelPosition === \"inset\" ? (\n <LabelPositionContext.Provider value={labelPositionInset}>\n {children}\n </LabelPositionContext.Provider>\n ) : (\n <div className={cx(\"flex relative flex-1\", className)} style={style}>\n {Boolean(indentLevel) && <div style={indentStyle} />}\n <div className={labeledFieldClasses}>\n <Label\n htmlFor={fieldId}\n // we do this so presence avatars are aligned to the right when position is above\n // and when start/end position with textarea it aligns label to the top of the field\n className={\n labelPosition === \"start\" || labelPosition === \"end\"\n ? \"self-start\"\n : undefined\n }\n style={labelStyle}\n {...props}\n >\n {label}\n </Label>\n {labelPosition === \"start\" ? (\n <div className=\"flex-auto flex\" style={fieldStyle}>\n {children}\n </div>\n ) : (\n children\n )}\n </div>\n </div>\n )}\n </LabelContext.Provider>\n );\n});\n","import React from \"react\";\n\nexport const IndentContext = React.createContext<{\n indentLevel: number;\n}>({\n indentLevel: 0,\n});\n\nexport const useIndent = () => {\n const { indentLevel } = React.useContext(IndentContext);\n return indentLevel;\n};\n","import {\n FileIcon,\n ImageIcon,\n SpeakerLoudIcon,\n VideoIcon,\n} from \"@noya-app/noya-icons\";\nimport React, { memo, useMemo } from \"react\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { CollectionItemSize } from \"./Collection\";\nimport { IconName, Icons } from \"./Icons\";\nimport { fileExtensions, fileNames } from \"./catppuccin/fileIcons\";\n\ntype ColorScheme = \"primary\" | \"secondary\" | \"icon\" | \"warning\";\n\ntype AssetType = \"image\" | \"video\" | \"audio\";\n\nconst getAssetType = (contentType?: string): AssetType | undefined => {\n if (!contentType) return undefined;\n if (contentType.startsWith(\"image/\")) return \"image\";\n if (contentType.startsWith(\"video/\")) return \"video\";\n if (contentType.startsWith(\"audio/\")) return \"audio\";\n return undefined;\n};\n\ntype MediaThumbnailProps = {\n contentType?: string;\n url?: string;\n selected?: boolean;\n className?: string;\n /** Color scheme for the thumbnail. Affects icon color and background.\n * @default \"icon\"\n */\n colorScheme?: ColorScheme;\n /**\n * If provided, use this icon instead of the default one for the asset type\n */\n iconName?: IconName;\n size?: CollectionItemSize;\n\n fileName?: string;\n};\n\nexport const getThumbnailColors = (\n colorScheme: ColorScheme,\n selected: boolean\n) => {\n if (selected) {\n return {\n icon: cssVars.colors.selectedListItemText,\n background: cssVars.colors.selectedListItemIconBackground,\n };\n }\n\n switch (colorScheme) {\n case \"primary\":\n return {\n icon: cssVars.colors.primary,\n background: cssVars.colors.listViewThumbnailBackground,\n };\n case \"secondary\":\n return {\n icon: cssVars.colors.secondary,\n background: cssVars.colors.secondaryPastel,\n };\n case \"warning\":\n return {\n icon: cssVars.colors.warning,\n background: cssVars.colors.listViewThumbnailBackground,\n };\n case \"icon\":\n default:\n return {\n icon: cssVars.colors.icon,\n background: cssVars.colors.listViewThumbnailBackground,\n };\n }\n};\n\nexport const MediaThumbnail = memo(function MediaThumbnail({\n contentType: contentTypeProp,\n selected = false,\n className,\n colorScheme = \"icon\",\n url,\n iconName,\n size = \"medium\",\n fileName,\n}: MediaThumbnailProps) {\n const { icon: iconColor, background: backgroundColor } = getThumbnailColors(\n colorScheme,\n selected\n );\n const contentType = getAssetType(contentTypeProp);\n const iconStyles = useMemo(\n () => ({\n width: iconSizeMap[size],\n height: iconSizeMap[size],\n }),\n [size]\n );\n\n const content = useMemo(() => {\n switch (contentType) {\n case \"image\":\n if (!url) return <ImageIcon color={iconColor} style={iconStyles} />;\n\n return (\n <img\n src={url}\n alt=\"\"\n className=\"object-contain w-full h-full\"\n tabIndex={-1}\n />\n );\n case \"video\":\n return <VideoIcon color={iconColor} style={iconStyles} />;\n case \"audio\":\n return <SpeakerLoudIcon color={iconColor} style={iconStyles} />;\n default:\n if (iconName) {\n const Icon = Icons[iconName];\n return <Icon color={iconColor} style={iconStyles} />;\n }\n\n if (fileName) {\n const fileIcon = findFileIcon(fileName);\n if (fileIcon) {\n return (\n <img\n src={`https://api.iconify.design/catppuccin/${fileIcon}.svg?height=none&box=1`}\n alt=\"\"\n className=\"w-4 h-4\"\n />\n );\n }\n }\n\n return <FileIcon color={iconColor} style={iconStyles} />;\n }\n }, [contentType, url, iconColor, iconStyles, iconName, fileName]);\n\n return (\n <div\n className={cx(\n \"w-full h-full justify-center flex items-center aspect-square\",\n className\n )}\n style={{ backgroundColor }}\n >\n {content}\n </div>\n );\n});\n\nconst iconSizeMap: Record<CollectionItemSize, number | string> = {\n xxs: 12,\n xs: 12,\n small: 12,\n medium: \"max(15px, 20%)\",\n large: \"max(15px, 20%)\",\n xl: \"max(15px, 20%)\",\n};\n\nfunction findFileIcon(fileName: string) {\n const fileIcon = fileNames[fileName];\n if (fileIcon) return fileIcon;\n const fileExtensionIndex = fileName.lastIndexOf(\".\");\n if (fileExtensionIndex === -1) return undefined;\n const fileExtension = fileName.slice(fileExtensionIndex + 1);\n const fileExtensionIcon = fileExtensions[fileExtension];\n return fileExtensionIcon;\n}\n","// (MIT) https://github.com/catppuccin/vscode-icons/blob/9170f26fd312132af22d057ee55229e1ba58ebb6/src/defaults/fileIcons.ts\n\n/**\n * Default file icon associations\n * Keys are icon file basenames\n */\n\ntype FileIcons = Record<\n string,\n {\n languageIds?: Array<string>;\n fileExtensions?: Array<string>;\n fileNames?: Array<string>;\n }\n>;\n\n// @keep-sorted\nconst fileIcons: FileIcons = {\n \"adobe-ae\": {\n fileExtensions: [\"aep\"],\n },\n \"adobe-ai\": {\n fileExtensions: [\"ai\"],\n },\n \"adobe-id\": {\n fileExtensions: [\"indd\", \"indl\", \"indb\"],\n },\n \"adobe-ps\": {\n fileExtensions: [\"psd\", \"psb\"],\n },\n \"adobe-xd\": {\n fileExtensions: [\"xd\"],\n },\n adonis: {\n fileNames: [\".adonisrc.json\", \"ace\"],\n },\n alex: {\n fileNames: [\".alexrc\", \".alexrc.yaml\", \".alexrc.yml\", \".alexrc.js\"],\n },\n amber: {\n languageIds: [\"amber\"],\n fileExtensions: [\"ab\", \"amber\"],\n },\n android: {\n fileNames: [\"androidmanifest.xml\"],\n fileExtensions: [\"apk\", \"smali\", \"dex\"],\n },\n angular: {\n fileExtensions: [\"ng-template\"],\n fileNames: [\n \"angular-cli.json\",\n \".angular-cli.json\",\n \"angular.json\",\n \"ng-package.json\",\n ],\n },\n \"ansible-lint\": {\n fileNames: [\".ansible-lint\", \"ansible-lint.yml\", \"ansible-lint.yaml\"],\n },\n antlr: {\n fileExtensions: [\"g4\"],\n },\n apache: {\n fileNames: [\"maven.config\", \"jvm.config\", \"pom.xml\"],\n fileExtensions: [\"thrift\"],\n },\n \"api-blueprint\": {\n fileExtensions: [\"apib\", \"apiblueprint\"],\n },\n apollo: {\n fileNames: [\"apollo.config.js\", \"apollo.config.ts\"],\n },\n apple: {\n fileNames: [\n \".ds_store\",\n \"apple-app-site-association\",\n \"apple-developer-merchantid-domain-association\",\n ],\n },\n asciidoc: {\n fileExtensions: [\"adoc\", \"asciidoc\", \"asc\"],\n },\n assembly: {\n fileExtensions: [\n \"asm\",\n \"a51\",\n \"inc\",\n \"nasm\",\n \"s\",\n \"ms\",\n \"agc\",\n \"ags\",\n \"aea\",\n \"argus\",\n \"mitigus\",\n \"binsource\",\n ],\n },\n \"astro-config\": {\n fileNames: [\n \"astro.config.js\",\n \"astro.config.mjs\",\n \"astro.config.cjs\",\n \"astro.config.ts\",\n \"astro.config.cts\",\n \"astro.config.mts\",\n ],\n },\n astro: {\n fileExtensions: [\"astro\"],\n languageIds: [\"astro\"],\n },\n audio: {\n fileExtensions: [\n \"aac\",\n \"aiff\",\n \"alac\",\n \"flac\",\n \"m4a\",\n \"m4p\",\n \"mogg\",\n \"mp3\",\n \"oga\",\n \"opus\",\n \"wav\",\n \"wma\",\n \"wv\",\n ],\n },\n autohotkey: {\n fileExtensions: [\"ahk\"],\n languageIds: [\"ahk\"],\n },\n \"azure-pipelines\": {\n fileNames: [\n \"azure-pipelines.yml\",\n \"azure-pipelines.yaml\",\n \"azure-pipelines-main.yml\",\n \"azure-pipelines-main.yaml\",\n ],\n fileExtensions: [\n \"azure-pipelines.yml\",\n \"azure-pipelines.yaml\",\n \"azure-pipelines-main.yml\",\n \"azure-pipelines-main.yaml\",\n ],\n },\n babel: {\n fileNames: [\n \".babelrc\",\n \".babelrc.cjs\",\n \".babelrc.js\",\n \".babelrc.mjs\",\n \".babelrc.json\",\n \"babel.config.cjs\",\n \"babel.config.js\",\n \"babel.config.mjs\",\n \"babel.config.json\",\n \"babel-transform.js\",\n \".babel-plugin-macrosrc\",\n \".babel-plugin-macrosrc.json\",\n \".babel-plugin-macrosrc.yaml\",\n \".babel-plugin-macrosrc.yml\",\n \".babel-plugin-macrosrc.js\",\n \"babel-plugin-macros.config.js\",\n ],\n },\n bash: {\n languageIds: [\"awk\", \"shellscript\"],\n fileExtensions: [\"sh\", \"ksh\", \"csh\", \"tcsh\", \"zsh\", \"bash\", \"awk\", \"fish\"],\n fileNames: [\n \"applypatch-msg\",\n \"pre-applypatch\",\n \"post-applypatch\",\n \"pre-commit\",\n \"prepare-commit-message\",\n \"commit-msg\",\n \"post-commit\",\n \"pre-rebase\",\n \"post-checkout\",\n \"post-merge\",\n \"pre-receive\",\n \"update\",\n \"post-receive\",\n \"post-update\",\n \"pre-auto-gc\",\n \"post-rewrite\",\n \"pre-push\",\n ],\n },\n batch: {\n languageIds: [\"bat\"],\n fileExtensions: [\"bat\", \"cmd\"],\n },\n bazel: {\n fileExtensions: [\"bzl\", \"bazel\"],\n fileNames: [\".bazelrc\"],\n },\n benchmark: {\n fileNames: [\n \"benchmark.md\",\n \"benchmark.rst\",\n \"benchmark.txt\",\n \"benchmarks.md\",\n \"benchmarks.rst\",\n \"benchmarks.txt\",\n ],\n },\n binary: {\n languageIds: [\"code-text-binary\"],\n fileExtensions: [\"bin\"],\n },\n biome: {\n fileNames: [\"biome.json\", \"biome.jsonc\"],\n },\n bitbucket: {\n fileNames: [\"bitbucket-pipelines.yaml\", \"bitbucket-pipelines.yml\"],\n },\n blitz: {\n fileNames: [\n \"blitz.config.js\",\n \"blitz.config.ts\",\n \".blitz.config.compiled.js\",\n ],\n },\n bower: {\n fileNames: [\".bowerrc\", \"bower.json\"],\n },\n browserslist: {\n fileNames: [\"browserslist\", \".browserslistrc\"],\n },\n \"bun-lock\": {\n fileNames: [\"bun.lock\", \"bun.lockb\"],\n },\n bun: {\n fileNames: [\"bunfig.toml\"],\n },\n \"c-header\": {\n fileExtensions: [\"h\"],\n },\n c: {\n languageIds: [\"c\"],\n fileExtensions: [\"c\", \"i\", \"mi\"],\n },\n cabal: {\n fileExtensions: [\"cabal\"],\n fileNames: [\"cabal.project\"],\n },\n caddy: {\n fileExtensions: [\"caddyfile\"],\n fileNames: [\"caddyfile\"],\n },\n capacitor: {\n fileNames: [\"capacitor.config.json\", \"capacitor.config.ts\"],\n },\n \"cargo-lock\": {\n fileNames: [\"cargo.lock\"],\n },\n cargo: {\n fileNames: [\"cargo.toml\"],\n },\n certificate: {\n fileExtensions: [\"cer\", \"cert\", \"crt\", \"pfx\"],\n },\n changelog: {\n fileNames: [\n \"changelog\",\n \"changelog.md\",\n \"changelog.rst\",\n \"changelog.txt\",\n \"changes\",\n \"changes.md\",\n \"changes.rst\",\n \"changes.txt\",\n ],\n },\n \"circle-ci\": {\n fileNames: [\"circle.yml\"],\n },\n clojure: {\n languageIds: [\"clojure\"],\n fileExtensions: [\"clj\", \"cljs\", \"cljc\"],\n },\n cmake: {\n fileExtensions: [\"cmake\"],\n fileNames: [\"cmakelists.txt\", \"cmakecache.txt\"],\n },\n cobol: {\n languageIds: [\"cobol\"],\n fileExtensions: [\"cob\", \"cbl\"],\n },\n \"code-climate\": {\n fileNames: [\".codeclimate.yml\"],\n },\n \"code-of-conduct\": {\n fileNames: [\"code_of_conduct.md\", \"code_of_conduct.txt\", \"code_of_conduct\"],\n },\n codeowners: {\n fileNames: [\"codeowners\", \"owners\"],\n },\n coffeescript: {\n languageIds: [\"coffeescript\"],\n fileExtensions: [\"coffee\", \"cson\", \"iced\"],\n },\n commitlint: {\n fileNames: [\n \".commitlintrc\",\n \".commitlintrc.js\",\n \".commitlintrc.cjs\",\n \".commitlintrc.ts\",\n \".commitlintrc.cts\",\n \".commitlintrc.json\",\n \".commitlintrc.yaml\",\n \".commitlintrc.yml\",\n \".commitlint.yaml\",\n \".commitlint.yml\",\n \"commitlint.config.js\",\n \"commitlint.config.cjs\",\n \"commitlint.config.ts\",\n \"commitlint.config.cts\",\n ],\n },\n contributing: {\n fileNames: [\n \"contributing.md\",\n \"contributing.rst\",\n \"contributing.txt\",\n \"contributing\",\n ],\n },\n \"cpp-header\": {\n fileExtensions: [\"hh\", \"hpp\", \"hxx\", \"h++\", \"hp\", \"tcc\", \"inl\"],\n },\n cpp: {\n languageIds: [\"cpp\"],\n fileExtensions: [\"cc\", \"cpp\", \"cxx\", \"c++\", \"cp\", \"mii\", \"ii\"],\n },\n csharp: {\n languageIds: [\"csharp\"],\n fileExtensions: [\"cs\", \"csx\", \"csharp\"],\n },\n cspell: {\n fileNames: [\n \"cspell.json\",\n \"cspell.yml\",\n \"cspell.yaml\",\n \".cspell.json\",\n \".cspell.yml\",\n \".cspell.yaml\",\n \"cspell.config.js\",\n \"cspell.config.cjs\",\n \"cspell.config.yml\",\n \"cspell.config.yaml\",\n ],\n },\n \"css-map\": {\n fileExtensions: [\"css.map\"],\n },\n css: {\n languageIds: [\"css\"],\n fileExtensions: [\"css\"],\n },\n csv: {\n languageIds: [\"csv\", \"tsv\", \"psv\"],\n fileExtensions: [\"csv\", \"tsv\", \"psv\"],\n },\n cucumber: {\n languageIds: [\"cucumber\"],\n fileExtensions: [\"feature\", \"features\"],\n },\n cuda: {\n languageIds: [\"cuda-cpp\"],\n fileExtensions: [\"cu\", \"cuh\"],\n },\n cypress: {\n fileNames: [\n \"cypress.json\",\n \"cypress.env.json\",\n \"cypress.config.ts\",\n \"cypress.config.js\",\n \"cypress.config.cjs\",\n \"cypress.config.mjs\",\n ],\n },\n d: {\n languageIds: [\"d\"],\n fileExtensions: [\"d\", \"di\"],\n },\n \"dart-generated\": {\n fileExtensions: [\"freezed.dart\", \"g.dart\"],\n },\n dart: {\n languageIds: [\"dart\"],\n fileExtensions: [\"dart\"],\n },\n database: {\n languageIds: [\"sql\"],\n fileExtensions: [\n \"pdb\",\n \"sql\",\n \"pks\",\n \"pkb\",\n \"accdb\",\n \"mdb\",\n \"sqlite\",\n \"sqlite3\",\n \"pgsql\",\n \"postgres\",\n \"plpgsql\",\n \"psql\",\n \"db\",\n \"db3\",\n \"dat\",\n ],\n },\n deno_lock: {\n fileNames: [\"deno.lock\"],\n },\n deno: {\n fileNames: [\"deno.json\", \"deno.jsonc\"],\n },\n dependabot: {\n fileNames: [\"dependabot.yml\", \"dependabot.yaml\"],\n },\n devcontainer: {\n fileNames: [\"devcontainer.json\", \".devcontainer.json\"],\n },\n dhall: {\n languageIds: [\"dhall\"],\n fileExtensions: [\"dhall\", \"dhallb\"],\n },\n diff: {\n languageIds: [\"diff\"],\n },\n django: {\n languageIds: [\"django-html\", \"django-txt\"],\n fileExtensions: [\"djt\"],\n },\n \"docker-compose\": {\n fileExtensions: [\n \"docker-compose.yml\",\n \"docker-compose.yaml\",\n\n \"compose.yaml\",\n \"compose.yml\",\n ],\n fileNames: [\n \"docker-compose.yml\",\n \"docker-compose.override.yml\",\n \"docker-compose.prod.yml\",\n \"docker-compose.production.yml\",\n \"docker-compose.alpha.yml\",\n \"docker-compose.beta.yml\",\n \"docker-compose.stage.yml\",\n \"docker-compose.staging.yml\",\n \"docker-compose.dev.yml\",\n \"docker-compose.development.yml\",\n \"docker-compose.local.yml\",\n \"docker-compose.test.yml\",\n \"docker-compose.testing.yml\",\n \"docker-compose.ci.yml\",\n \"docker-compose.web.yml\",\n \"docker-compose.worker.yml\",\n\n \"docker-compose.yaml\",\n \"docker-compose.override.yaml\",\n \"docker-compose.prod.yaml\",\n \"docker-compose.production.yaml\",\n \"docker-compose.alpha.yaml\",\n \"docker-compose.beta.yaml\",\n \"docker-compose.stage.yaml\",\n \"docker-compose.staging.yaml\",\n \"docker-compose.dev.yaml\",\n \"docker-compose.development.yaml\",\n \"docker-compose.local.yaml\",\n \"docker-compose.test.yaml\",\n \"docker-compose.testing.yaml\",\n \"docker-compose.ci.yaml\",\n \"docker-compose.web.yaml\",\n \"docker-compose.worker.yaml\",\n\n \"compose.yaml\",\n \"compose.override.yaml\",\n \"compose.prod.yaml\",\n \"compose.production.yaml\",\n \"compose.alpha.yaml\",\n \"compose.beta.yaml\",\n \"compose.stage.yaml\",\n \"compose.staging.yaml\",\n \"compose.dev.yaml\",\n \"compose.development.yaml\",\n \"compose.local.yaml\",\n \"compose.test.yaml\",\n \"compose.testing.yaml\",\n \"compose.ci.yaml\",\n \"compose.web.yaml\",\n \"compose.worker.yaml\",\n\n \"compose.yml\",\n \"compose.override.yml\",\n \"compose.prod.yml\",\n \"compose.production.yml\",\n \"compose.alpha.yml\",\n \"compose.beta.yml\",\n \"compose.stage.yml\",\n \"compose.staging.yml\",\n \"compose.dev.yml\",\n \"compose.development.yml\",\n \"compose.local.yml\",\n \"compose.test.yml\",\n \"compose.testing.yml\",\n \"compose.ci.yml\",\n \"compose.web.yml\",\n \"compose.worker.yml\",\n ],\n },\n \"docker-ignore\": {\n fileExtensions: [\"dockerignore\", \"containerignore\"],\n },\n docker: {\n fileExtensions: [\"dockerfile\", \"containerfile\"],\n fileNames: [\n \"dockerfile\",\n \"dockerfile.prod\",\n \"dockerfile.production\",\n \"dockerfile.alpha\",\n \"dockerfile.beta\",\n \"dockerfile.stage\",\n \"dockerfile.staging\",\n \"dockerfile.dev\",\n \"dockerfile.development\",\n \"dockerfile.local\",\n \"dockerfile.test\",\n \"dockerfile.testing\",\n \"dockerfile.ci\",\n \"dockerfile.web\",\n \"dockerfile.worker\",\n\n \"containerfile\",\n \"containerfile.prod\",\n \"containerfile.production\",\n \"containerfile.alpha\",\n \"containerfile.beta\",\n \"containerfile.stage\",\n \"containerfile.staging\",\n \"containerfile.dev\",\n \"containerfile.development\",\n \"containerfile.local\",\n \"containerfile.test\",\n \"containerfile.testing\",\n \"containerfile.ci\",\n \"containerfile.web\",\n \"containerfile.worker\",\n ],\n },\n drawio: {\n fileExtensions: [\"drawio\", \"dio\"],\n },\n \"drizzle-orm\": {\n fileNames: [\"drizzle.config.ts\", \"drizzle.config.js\"],\n },\n \"dub-selections\": {\n fileNames: [\"dub.selections.json\"],\n },\n dub: {\n fileNames: [\"dub.json\", \"dub.sdl\"],\n },\n editorconfig: {\n languageIds: [\"editorconfig\"],\n fileNames: [\".editorconfig\"],\n },\n ejs: {\n fileExtensions: [\"ejs\"],\n },\n eleventy: {\n fileNames: [\n \".eleventy.js\",\n \"eleventy.config.js\",\n \"eleventy.config.mjs\",\n \"eleventy.config.cjs\",\n \".eleventyignore\",\n ],\n },\n elixir: {\n languageIds: [\"elixir\"],\n fileExtensions: [\"ex\", \"exs\", \"eex\", \"leex\", \"heex\"],\n },\n elm: {\n languageIds: [\"elm\"],\n fileExtensions: [\"elm\"],\n },\n ember: {\n fileNames: [\".ember-cli\", \".ember-cli.js\", \"ember-cli-builds.js\"],\n },\n env: {\n fileExtensions: [\"env\"],\n fileNames: [\n \".env.defaults\",\n \".env.example\",\n \".env.sample\",\n \".env.template\",\n \".env.schema\",\n \".env.local\",\n \".env.dev\",\n \".env.development\",\n \".env.alpha\",\n \".env.e2e\",\n \".env.qa\",\n \".env.dist\",\n \".env.prod\",\n \".env.production\",\n \".env.stage\",\n \".env.staging\",\n \".env.preview\",\n \".env.test\",\n \".env.testing\",\n \".env.development.local\",\n \".env.qa.local\",\n \".env.production.local\",\n \".env.staging.local\",\n \".env.test.local\",\n \".env.uat\",\n \".env.cat\",\n ],\n },\n envrc: {\n fileNames: [\".envrc\"],\n },\n erlang: {\n languageIds: [\"erlang\"],\n fileExtensions: [\"erl\"],\n },\n esbuild: {\n fileNames: [\n \"esbuild.js\",\n \"esbuild.ts\",\n \"esbuild.cjs\",\n \"esbuild.mjs\",\n \"esbuild.config.js\",\n \"esbuild.config.ts\",\n \"esbuild.config.cjs\",\n \"esbuild.config.mjs\",\n ],\n },\n \"eslint-ignore\": {\n fileNames: [\".eslintignore\", \".eslintcache,\"],\n },\n eslint: {\n fileNames: [\n \".eslintrc.js\",\n \".eslintrc.cjs\",\n \".eslintrc.yaml\",\n \".eslintrc.yml\",\n \".eslintrc.json\",\n \".eslintrc-md.js\",\n \".eslintrc-jsdoc.js\",\n \".eslintrc\",\n\n \"eslint.config.js\",\n \"eslint.config.cjs\",\n \"eslint.config.mjs\",\n \"eslint.config.ts\",\n \"eslint.config.cts\",\n \"eslint.config.mts\",\n ],\n },\n exe: {\n fileExtensions: [\"exe\", \"msi\"],\n },\n fastlane: {\n fileNames: [\n \"fastfile\",\n \"appfile\",\n \"snapfile\",\n \"matchfile\",\n \"deliverfile\",\n \"scanfile\",\n \"gymfile\",\n ],\n },\n favicon: {\n fileNames: [\"favicon.ico\"],\n },\n figma: {\n fileExtensions: [\"fig\"],\n },\n firebase: {\n fileNames: [\n \"firebase.json\",\n \".firebaserc\",\n \"firestore.rules\",\n \"storage.rules\",\n \"firestore.indexes.json\",\n ],\n },\n flutter: {\n fileNames: [\n \".flutter-plugins\",\n \".flutter-plugins-dependencies\",\n \".metadata\",\n ],\n },\n font: {\n fileExtensions: [\n \"woff\",\n \"woff2\",\n \"ttf\",\n \"eot\",\n \"suit\",\n \"otf\",\n \"bmap\",\n \"fnt\",\n \"odttf\",\n \"ttc\",\n \"font\",\n \"fonts\",\n \"sui\",\n \"ntf\",\n \"mrf\",\n ],\n },\n fortran: {\n fileExtensions: [\"f\", \"f77\", \"f90\", \"f95\", \"f03\", \"f08\", \"for\"],\n },\n fsharp: {\n languageIds: [\"fsharp\"],\n fileExtensions: [\"fs\", \"fsx\", \"fsi\", \"fsproj\"],\n },\n fvm: {\n fileNames: [\".fvmrc\", \"fvm_config.json\"],\n },\n gatsby: {\n fileNames: [\n \"gatsby-config.js\",\n \"gatsby-config.mjs\",\n \"gatsby-config.ts\",\n \"gatsby-node.js\",\n \"gatsby-node.mjs\",\n \"gatsby-node.ts\",\n \"gatsby-browser.js\",\n \"gatsby-browser.tsx\",\n \"gatsby-ssr.js\",\n \"gatsby-ssr.tsx\",\n ],\n },\n gcp: {\n fileNames: [\"release-please-config.json\", \".release-please-manifest.json\"],\n },\n \"git-cliff\": {\n fileNames: [\"cliff.toml\"],\n },\n git: {\n languageIds: [\"git\", \"git-commit\", \"git-rebase\", \"ignore\"],\n fileExtensions: [\"patch\"],\n fileNames: [\n \".git\",\n \".gitignore\",\n \".gitmessage\",\n \".gitignore-global\",\n \".gitignore_global\",\n \".gitattributes\",\n \".gitattributes-global\",\n \".gitattributes_global\",\n \".gitconfig\",\n \".gitmodules\",\n \".gitkeep\",\n \".keep\",\n \".gitpreserve\",\n \".gitinclude\",\n \".git-blame-ignore\",\n \".git-blame-ignore-revs\",\n \".git-for-windows-updater\",\n \"git-history\",\n ],\n },\n gitlab: {\n fileExtensions: [\"gitlab-ci.yml\", \"gitlab-ci.yaml\"],\n },\n gitpod: {\n fileNames: [\".gitpod.yml\"],\n },\n \"gleam-config\": {\n fileNames: [\"gleam.toml\"],\n },\n gleam: {\n fileExtensions: [\"gleam\"],\n languageIds: [\"gleam\"],\n },\n \"go-mod\": {\n fileNames: [\"go.mod\", \"go.sum\", \"go.work\", \"go.work.sum\"],\n },\n \"go-template\": {\n fileExtensions: [\"tmpl\", \"templ\", \"gotmpl\", \"gohtml\", \"go.tmp\", \"go.html\"],\n },\n go: {\n languageIds: [\"go\"],\n fileExtensions: [\"go\"],\n },\n \"godot-assets\": {\n fileExtensions: [\n \"godot\",\n \"tres\",\n \"tscn\",\n \"gdns\",\n \"gdnlib\",\n \"gdshader\",\n \"gdshaderinc\",\n \"gdextension\",\n ],\n fileNames: [\".gdignore\", \"._sc_\", \"_sc_\"],\n },\n godot: {\n languageIds: [\"gdscript\"],\n fileExtensions: [\"gd\"],\n },\n gradle: {\n fileExtensions: [\"gradle\"],\n fileNames: [\"gradle.properties\", \"gradlew\", \"gradle-wrapper.properties\"],\n },\n graphql: {\n languageIds: [\"graphql\"],\n fileExtensions: [\"graphql\", \"gql\"],\n fileNames: [\n \".graphqlconfig\",\n \".graphqlrc\",\n \".graphqlrc.json\",\n \".graphqlrc.js\",\n \".graphqlrc.cjs\",\n \".graphqlrc.ts\",\n \".graphqlrc.toml\",\n \".graphqlrc.yaml\",\n \".graphqlrc.yml\",\n \"graphql.config.json\",\n \"graphql.config.js\",\n \"graphql.config.cjs\",\n \"graphql.config.ts\",\n \"graphql.config.toml\",\n \"graphql.config.yaml\",\n \"graphql.config.yml\",\n ],\n },\n groovy: {\n languageIds: [\"groovy\"],\n fileExtensions: [\"groovy\"],\n },\n gulp: {\n fileNames: [\n \"gulpfile.js\",\n \"gulpfile.mjs\",\n \"gulpfile.ts\",\n \"gulpfile.cts\",\n \"gulpfile.mts\",\n \"gulpfile.babel.js\",\n ],\n },\n haml: {\n languageIds: [\"haml\"],\n fileExtensions: [\"haml\"],\n },\n handlebars: {\n languageIds: [\"handlebars\"],\n fileExtensions: [\"hbs\", \"mustache\"],\n },\n hardhat: {\n fileNames: [\"hardhat.config.js\", \"hardhat.config.ts\"],\n },\n haskell: {\n languageIds: [\"haskell\"],\n fileExtensions: [\"hs\"],\n },\n haxe: {\n languageIds: [\"haxe\", \"hxml\"],\n fileExtensions: [\"hx\"],\n },\n helm: {\n fileNames: [\".helmignore\", \"chart.lock\"],\n },\n heroku: {\n fileNames: [\"procfile\"],\n },\n histoire: {\n fileNames: [\n \"histoire.config.ts\",\n \"histoire.config.js\",\n \".histoire.js\",\n \".histoire.ts\",\n ],\n },\n html: {\n languageIds: [\"html\"],\n fileExtensions: [\"htm\", \"html\", \"xhtml\", \"html_vm\", \"asp\"],\n },\n http: {\n fileExtensions: [\"http\", \"rest\"],\n fileNames: [\"CNAME\"],\n },\n huff: {\n fileExtensions: [\"huff\"],\n },\n hugo: {\n fileNames: [\"hugo.toml\", \"hugo.yaml\", \"hugo.json\"],\n },\n humans: {\n fileNames: [\"humans.txt\"],\n },\n husky: {\n fileNames: [\n \".huskyrc\",\n \"husky.config.js\",\n \".huskyrc.json\",\n \".huskyrc.js\",\n \".huskyrc.yaml\",\n \".huskyrc.yml\",\n ],\n },\n image: {\n fileExtensions: [\n \"png\",\n \"jpeg\",\n \"jpg\",\n \"gif\",\n \"ico\",\n \"tif\",\n \"tiff\",\n \"psd\",\n \"psb\",\n \"ami\",\n \"apx\",\n \"avif\",\n \"bmp\",\n \"bpg\",\n \"brk\",\n \"cur\",\n \"dds\",\n \"dng\",\n \"exr\",\n \"fpx\",\n \"gbr\",\n \"img\",\n \"jbig2\",\n \"jb2\",\n \"jng\",\n \"jxr\",\n \"pgf\",\n \"pic\",\n \"raw\",\n \"webp\",\n \"eps\",\n \"afphoto\",\n \"ase\",\n \"aseprite\",\n \"clip\",\n \"cpt\",\n \"heif\",\n \"heic\",\n \"kra\",\n \"mdp\",\n \"ora\",\n \"pdn\",\n \"reb\",\n \"sai\",\n \"tga\",\n \"xcf\",\n \"jfif\",\n \"ppm\",\n \"pbm\",\n \"pgm\",\n \"pnm\",\n \"icns\",\n ],\n },\n ionic: {\n fileNames: [\"ionic.config.json\", \".io-config.json\"],\n },\n \"java-class\": {\n fileExtensions: [\"class\"],\n },\n \"java-jar\": {\n fileExtensions: [\"jar\"],\n },\n java: {\n languageIds: [\"java\"],\n fileExtensions: [\"java\", \"jsp\"],\n },\n \"javascript-config\": {\n fileNames: [\"jsconfig.json\"],\n fileExtensions: [\"jsconfig.json\"],\n },\n \"javascript-map\": {\n fileExtensions: [\"js.map\", \"mjs.map\", \"cjs.map\"],\n },\n \"javascript-react\": {\n languageIds: [\"javascriptreact\"],\n fileExtensions: [\"jsx\"],\n },\n \"javascript-test\": {\n fileExtensions: [\n \"spec.js\",\n \"spec.cjs\",\n \"spec.mjs\",\n \"e2e-spec.js\",\n \"e2e-spec.cjs\",\n \"e2e-spec.mjs\",\n \"test.js\",\n \"test.cjs\",\n \"test.mjs\",\n \"js.snap\",\n \"cy.js\",\n\n \"spec.jsx\",\n \"test.jsx\",\n \"jsx.snap\",\n \"cy.jsx\",\n ],\n },\n javascript: {\n languageIds: [\"javascript\"],\n fileExtensions: [\"esx\", \"js\", \"cjs\", \"mjs\"],\n },\n jest: {\n fileNames: [\n \"jest.config.js\",\n \"jest.config.cjs\",\n \"jest.config.mjs\",\n \"jest.config.ts\",\n \"jest.config.cts\",\n \"jest.config.mts\",\n \"jest.config.json\",\n \"jest.e2e.config.js\",\n \"jest.e2e.config.cjs\",\n \"jest.e2e.config.mjs\",\n \"jest.e2e.config.ts\",\n \"jest.e2e.config.cts\",\n \"jest.e2e.config.mts\",\n \"jest.e2e.config.json\",\n \"jest.e2e.json\",\n \"jest-unit.config.js\",\n \"jest-e2e.config.js\",\n \"jest-e2e.config.cjs\",\n \"jest-e2e.config.mjs\",\n \"jest-e2e.config.ts\",\n \"jest-e2e.config.cts\",\n \"jest-e2e.config.mts\",\n \"jest-e2e.config.json\",\n \"jest-e2e.json\",\n \"jest-github-actions-reporter.js\",\n \"jest.setup.js\",\n \"jest.setup.ts\",\n \"jest.json\",\n \".jestrc\",\n \".jestrc.js\",\n \".jestrc.json\",\n \"jest.teardown.js\",\n \"jest-preset.json\",\n \"jest-preset.js\",\n \"jest-preset.cjs\",\n \"jest-preset.mjs\",\n \"jest.preset.js\",\n \"jest.preset.mjs\",\n \"jest.preset.cjs\",\n \"jest.preset.json\",\n ],\n },\n jinja: {\n languageIds: [\"jinja\"],\n fileExtensions: [\"jinja\", \"jinja2\", \"j2\", \"jinja-html\"],\n },\n \"json-schema\": {\n fileExtensions: [\"schema.json\"],\n },\n json: {\n languageIds: [\"hjson\"],\n fileExtensions: [\n \"json\",\n \"jsonc\",\n \"tsbuildinfo\",\n \"json5\",\n \"jsonl\",\n \"ndjson\",\n \"hjson\",\n \"webmanifest\",\n ],\n fileNames: [\n \".jscsrc\",\n \".jshintrc\",\n \"composer.lock\",\n \".jsbeautifyrc\",\n \".esformatter\",\n \"cdp.pid\",\n \".lintstagedrc\",\n \".whitesource\",\n ],\n },\n juce: {\n fileExtensions: [\"jucer\"],\n },\n julia: {\n languageIds: [\"julia\"],\n fileExtensions: [\"jl\"],\n },\n jupyter: {\n languageIds: [\"jupyter\"],\n fileExtensions: [\"ipynb\"],\n },\n just: {\n fileExtensions: [\"just\"],\n fileNames: [\"justfile\", \".justfile\"],\n },\n kdl: {\n languageIds: [\"kdl\"],\n fileExtensions: [\"kdl\"],\n },\n key: {\n fileExtensions: [\"pub\", \"key\", \"pem\", \"asc\", \"gpg\", \"passwd\", \"keystore\"],\n fileNames: [\".htpasswd\"],\n },\n kotlin: {\n fileExtensions: [\"kt\", \"kts\"],\n },\n laravel: {\n fileExtensions: [\"blade.php\", \"inky.php\"],\n fileNames: [\"artisan\"],\n },\n latex: {\n languageIds: [\"tex\", \"doctex\", \"latex\", \"latex-expl3\"],\n fileExtensions: [\"tex\", \"sty\", \"dtx\", \"ltx\"],\n },\n latte: {\n fileExtensions: [\"latte\"],\n },\n lerna: {\n fileNames: [\"lerna.json\"],\n },\n less: {\n languageIds: [\"less\"],\n fileExtensions: [\"less\"],\n },\n lib: {\n languageIds: [\"bibtex\", \"bibtex-style\"],\n fileExtensions: [\"lib\", \"bib\"],\n },\n license: {\n fileNames: [\n \"copying\",\n \"copying.md\",\n \"copying.rst\",\n \"copying.txt\",\n \"copyright\",\n \"copyright.md\",\n \"copyright.rst\",\n \"copyright.txt\",\n \"license\",\n \"license-agpl\",\n \"license-apache\",\n \"license-bsd\",\n \"license-mit\",\n \"license-gpl\",\n \"license-lgpl\",\n \"unlicense\",\n \"license.md\",\n \"license.rst\",\n \"license.txt\",\n \"licence\",\n \"licence-agpl\",\n \"licence-apache\",\n \"licence-bsd\",\n \"licence-mit\",\n \"licence-gpl\",\n \"licence-lgpl\",\n \"unlicence\",\n \"licence.md\",\n \"licence.rst\",\n \"licence.txt\",\n ],\n },\n \"lint-staged\": {\n fileNames: [\n \".lintstagedrc\",\n \".lintstagedrc.json\",\n \".lintstagedrc.yaml\",\n \".lintstagedrc.yml\",\n \".lintstagedrc.mjs\",\n \".lintstagedrc.cjs\",\n \".lintstagedrc.js\",\n \"lint-staged.config.js\",\n \"lint-staged.config.mjs\",\n \"lint-staged.config.cjs\",\n ],\n },\n liquid: {\n fileExtensions: [\"liquid\"],\n fileNames: [\".liquidrc.json\", \".liquidrc\"],\n languageIds: [\"liquid\"],\n },\n lisp: {\n fileExtensions: [\"lisp\", \"lsp\", \"cl\", \"fast\"],\n },\n log: {\n languageIds: [\"log\"],\n fileExtensions: [\"log\"],\n },\n lua: {\n languageIds: [\"lua\"],\n fileExtensions: [\"lua\"],\n fileNames: [\".luacheckrc\"],\n },\n luau: {\n fileExtensions: [\"luau\"],\n fileNames: [\".luaurc\"],\n },\n makefile: {\n languageIds: [\"makefile\"],\n fileExtensions: [\"mk\"],\n fileNames: [\"makefile\", \"gnumakefile\", \"kbuild\"],\n },\n \"markdown-mdx\": {\n fileExtensions: [\"mdx\"],\n },\n markdown: {\n languageIds: [\"markdown\"],\n fileExtensions: [\"md\", \"markdown\", \"rst\"],\n },\n marko: {\n fileExtensions: [\"marko\"],\n },\n matlab: {\n languageIds: [\"matlab\"],\n },\n mdbook: {\n fileNames: [\"book.toml\"],\n },\n mermaid: {\n fileExtensions: [\"mmd\", \"mermaid\"],\n },\n meson: {\n fileNames: [\"meson.build\", \"meson_options.txt\"],\n fileExtensions: [\"wrap\"],\n },\n midi: {\n fileNames: [\"mid\", \"midi\"],\n },\n mjml: {\n fileExtensions: [\"mjml\"],\n fileNames: [\".mjmlconfig\"],\n },\n modernizr: {\n fileNames: [\".modernizrrc\", \".modernizrrc.js\", \".modernizrrc.json\"],\n },\n \"ms-excel\": {\n fileExtensions: [\"xlsx\", \"xlsm\", \"xls\"],\n },\n \"ms-powerpoint\": {\n fileExtensions: [\n \"pptx\",\n \"ppt\",\n \"pptm\",\n \"potx\",\n \"potm\",\n \"ppsx\",\n \"ppsm\",\n \"pps\",\n \"ppam\",\n \"ppa\",\n \"odp\",\n ],\n },\n \"ms-word\": {\n fileExtensions: [\"doc\", \"docx\", \"rtf\", \"odt\"],\n },\n nativescript: {\n fileNames: [\"nativescript.config.ts\", \"nativescript.config.js\"],\n },\n nest: {\n fileNames: [\n \"nest-cli.json\",\n \".nest-cli.json\",\n \"nestconfig.json\",\n \".nestconfig.json\",\n ],\n },\n netlify: {\n fileNames: [\"netlify.json\", \"netlify.yml\", \"netlify.yaml\", \"netlify.toml\"],\n },\n next: {\n fileNames: [\n \"next.config.js\",\n \"next.config.mjs\",\n \"next.config.ts\",\n \"next.config.mts\",\n ],\n },\n nextflow: {\n fileExtensions: [\"nf\"],\n },\n nginx: {\n fileNames: [\"nginx.conf\"],\n fileExtensions: [\"nginx\", \"nginxconf\", \"nginxconfig\"],\n },\n nim: {\n languageIds: [\"nim\", \"nimble\"],\n fileExtensions: [\"nim\", \"nimble\"],\n },\n ninja: {\n fileExtensions: [\"ninja\"],\n },\n \"nix-lock\": {\n fileNames: [\"flake.lock\"],\n },\n nix: {\n languageIds: [\"nix\"],\n fileExtensions: [\"nix\"],\n },\n nodemon: {\n fileNames: [\"nodemon.json\", \"nodemon-debug.json\"],\n },\n \"npm-ignore\": {\n fileNames: [\".npmignore\"],\n },\n \"npm-lock\": {\n fileNames: [\"package-lock.json\"],\n },\n npm: {\n fileNames: [\".npmrc\"],\n },\n nuget: {\n fileNames: [\"nuget.config\", \".nuspec\", \"nuget.exe\"],\n fileExtensions: [\"nupkg\"],\n },\n nunjucks: {\n languageIds: [\"nunjucks\"],\n fileExtensions: [\"njk\", \"nunjucks\"],\n },\n \"nuxt-ignore\": {\n fileNames: [\".nuxtignore\"],\n },\n nuxt: {\n fileNames: [\".nuxtrc\", \"nuxt.config.js\", \"nuxt.config.ts\"],\n },\n ocaml: {\n fileExtensions: [\"ml\", \"mli\", \"cmx\"],\n },\n org: {\n languageIds: [\"org\"],\n fileExtensions: [\"org\"],\n },\n \"package-json\": {\n fileNames: [\"package.json\", \".nvmrc\", \".esmrc\", \".node-version\"],\n },\n \"panda-css\": {\n fileNames: [\n \"panda.config.ts\",\n \"panda.config.js\",\n \"panda.config.mjs\",\n \"panda.config.mts\",\n \"panda.config.cjs\",\n ],\n },\n pdf: {\n fileExtensions: [\"pdf\"],\n },\n perl: {\n languageIds: [\"perl\", \"perl6\", \"raku\"],\n fileExtensions: [\n \"pl\",\n \"pm\",\n \"pod\",\n \"t\",\n \"psgi\",\n \"raku\",\n \"rakumod\",\n \"rakutest\",\n \"rakudoc\",\n \"nqp\",\n \"p6\",\n \"pl6\",\n \"pm6\",\n ],\n },\n php: {\n languageIds: [\"php\"],\n fileExtensions: [\"php\"],\n },\n phrase: {\n fileNames: [\n \".phrase.yml\",\n \".phraseapp.yml\",\n \".phrase.yaml\",\n \".phraseapp.yaml\",\n ],\n },\n phtml: {\n fileExtensions: [\"phtml\"],\n },\n \"pixi-lock\": {\n fileNames: [\"pixi.lock\"],\n },\n pixi: {\n fileNames: [\"pixi.toml\"],\n },\n plantuml: {\n fileExtensions: [\"pu\", \"puml\", \"plantuml\"],\n },\n playwright: {\n fileNames: [\n \"playwright.config.js\",\n \"playwright.config.mjs\",\n \"playwright.config.ts\",\n \"playwright.config.base.js\",\n \"playwright.config.base.mjs\",\n \"playwright.config.base.ts\",\n \"playwright-ct.config.js\",\n \"playwright-ct.config.mjs\",\n \"playwright-ct.config.ts\",\n ],\n },\n plop: {\n fileNames: [\"plopfile.js\", \"plopfile.cjs\", \"plopfile.mjs\", \"plopfile.ts\"],\n },\n \"pnpm-lock\": {\n fileNames: [\"pnpm-lock.yaml\"],\n },\n pnpm: {\n fileNames: [\"pnpm-workspace.yaml\", \".pnpmfile.cjs\"],\n },\n \"poetry-lock\": {\n fileNames: [\"poetry.lock\"],\n },\n postcss: {\n languageIds: [\"postcss\"],\n fileExtensions: [\"pcss\", \"sss\"],\n fileNames: [\n \"postcss.config.js\",\n \"postcss.config.cjs\",\n \"postcss.config.mjs\",\n \"postcss.config.ts\",\n \"postcss.config.cts\",\n \"postcss.config.mts\",\n \".postcssrc.js\",\n \".postcssrc.cjs\",\n \".postcssrc.ts\",\n \".postcssrc.cts\",\n \".postcssrc\",\n \".postcssrc.json\",\n \".postcssrc.yaml\",\n \".postcssrc.yml\",\n ],\n },\n powershell: {\n languageIds: [\"powershell\"],\n fileExtensions: [\"ps1\", \"psm1\", \"psd1\", \"ps1xml\", \"psc1\", \"pssc\"],\n },\n \"pre-commit\": {\n fileNames: [\".pre-commit-config.yaml\", \".pre-commit-hooks.yaml\"],\n },\n premake: {\n fileNames: [\"premake4.lua\", \"premake5.lua\", \"premake.lua\"],\n },\n \"prettier-ignore\": {\n fileNames: [\".prettierignore\"],\n },\n prettier: {\n fileNames: [\n \".prettierrc\",\n \"prettier.config.js\",\n \"prettier.config.cjs\",\n \".prettierrc.js\",\n \".prettierrc.cjs\",\n \".prettierrc.json\",\n \".prettierrc.json5\",\n \".prettierrc.yaml\",\n \".prettierrc.yml\",\n \".prettierrc.toml\",\n \"prettier.config.mjs\",\n \".prettierrc.mjs\",\n ],\n },\n prisma: {\n fileNames: [\"prisma.yml\"],\n fileExtensions: [\"prisma\"],\n },\n prolog: {\n languageIds: [\"prolog\"],\n fileExtensions: [\"p\", \"pro\"],\n },\n properties: {\n languageIds: [\"ini\", \"properties\", \"spring-boot-properties\"],\n fileExtensions: [\n \"ini\",\n \"dlc\",\n \"config\",\n \"conf\",\n \"properties\",\n \"prop\",\n \"settings\",\n \"option\",\n \"props\",\n \"prefs\",\n \"sln.dotsettings\",\n \"sln.dotsettings.user\",\n \"cfg\",\n ],\n },\n proto: {\n languageIds: [\"proto\"],\n fileExtensions: [\"proto\"],\n },\n pug: {\n languageIds: [\"jade\"],\n fileExtensions: [\"jade\", \"pug\"],\n fileNames: [\".pug-lintrc\", \".pug-lintrc.js\", \".pug-lintrc.json\"],\n },\n puppeteer: {\n fileNames: [\n \".puppeteerrc.cjs,\",\n \".puppeteerrc.js,\",\n \".puppeteerrc\",\n \".puppeteerrc.json,\",\n \".puppeteerrc.yaml,\",\n \"puppeteer.config.js\",\n \"puppeteer.config.cjs\",\n ],\n },\n \"python-compiled\": {\n fileExtensions: [\"pyc\", \"pyo\", \"pyd\"],\n },\n \"python-config\": {\n fileNames: [\n \"pyproject.toml\",\n \"requirements.txt\",\n \"requirements-dev.txt\",\n \"requirements-test.txt\",\n \".python-version\",\n ],\n },\n python: {\n languageIds: [\"python\"],\n fileExtensions: [\"py\"],\n },\n r: {\n languageIds: [\"r\", \"rsweave\"],\n fileExtensions: [\"r\", \"rmd\"],\n fileNames: [\".Rhistory\"],\n },\n racket: {\n fileExtensions: [\"rkt\"],\n },\n razor: {\n languageIds: [\"razor\", \"aspnetcorerazor\"],\n fileExtensions: [\"cshtml\", \"vbhtml\"],\n },\n readme: {\n fileNames: [\"readme.md\", \"readme.rst\", \"readme.txt\", \"readme\"],\n },\n reason: {\n languageIds: [\"reason\", \"reason_lisp\"],\n fileExtensions: [\"re\", \"rei\"],\n },\n redwood: {\n fileNames: [\"redwood.toml\"],\n },\n release: {\n fileNames: [\".goreleaser.yaml\"],\n },\n remix: {\n fileNames: [\"remix.config.js\", \"remix.config.ts\"],\n },\n renovate: {\n fileNames: [\n \".renovaterc\",\n \".renovaterc.json\",\n \"renovate-config.json\",\n \"renovate.json\",\n \"renovate.json5\",\n ],\n },\n rescript: {\n languageIds: [\"rescript\"],\n fileExtensions: [\"res\"],\n },\n roblox: {\n fileExtensions: [\"rbxl\", \"rbxlx\", \"rbxm\", \"rbxmx\"],\n },\n robots: {\n fileNames: [\"robots.txt\"],\n },\n rollup: {\n fileNames: [\n \"rollup.config.js\",\n \"rollup.config.mjs\",\n \"rollup.config.ts\",\n \"rollup-config.js\",\n \"rollup-config.mjs\",\n \"rollup-config.ts\",\n \"rollup.config.common.js\",\n \"rollup.config.common.mjs\",\n \"rollup.config.common.ts\",\n \"rollup.config.base.js\",\n \"rollup.config.base.mjs\",\n \"rollup.config.base.ts\",\n \"rollup.config.prod.js\",\n \"rollup.config.prod.mjs\",\n \"rollup.config.prod.ts\",\n \"rollup.config.dev.js\",\n \"rollup.config.dev.mjs\",\n \"rollup.config.dev.ts\",\n \"rollup.config.prod.vendor.js\",\n \"rollup.config.prod.vendor.mjs\",\n \"rollup.config.prod.vendor.ts\",\n ],\n },\n \"ruby-gem-lock\": {\n fileNames: [\"gemfile.lock\"],\n },\n \"ruby-gem\": {\n fileNames: [\"gemfile\"],\n },\n ruby: {\n languageIds: [\"ruby\"],\n fileExtensions: [\"rb\", \"erb\", \"rbs\"],\n fileNames: [\".ruby-version\"],\n },\n ruff: {\n fileNames: [\"ruff.toml\", \".ruff.toml\"],\n },\n \"rust-config\": {\n fileNames: [\n \"rustfmt.toml\",\n \".rustfmt.toml\",\n \"rust-toolchain.toml\",\n \"clippy.toml\",\n ],\n },\n rust: {\n languageIds: [\"rust\"],\n fileExtensions: [\"rs\", \"ron\"],\n },\n salesforce: {\n fileExtensions: [\"cls\"],\n },\n sass: {\n languageIds: [\"sass\", \"scss\"],\n fileExtensions: [\"scss\", \"sass\"],\n },\n scala: {\n languageIds: [\"scala\"],\n fileExtensions: [\"scala\", \"sc\"],\n },\n search: {\n languageIds: [\"search-result\"],\n fileExtensions: [\"code-search\"],\n },\n security: {\n fileNames: [\"security.md\", \"security.txt\", \"security\"],\n },\n \"semantic-release\": {\n fileNames: [\n \".releaserc\",\n \".releaserc.yaml\",\n \".releaserc.yml\",\n \".releaserc.json\",\n \".releaserc.js\",\n \".releaserc.cjs\",\n \"release.config.js\",\n \"release.config.cjs\",\n ],\n },\n \"semgrep-ignore\": {\n fileNames: [\".semgrepignore\"],\n },\n semgrep: {\n fileNames: [\"semgrep.yml\"],\n },\n sentry: {\n fileNames: [\".sentryclirc\"],\n },\n serverless: {\n fileNames: [\n \"serverless.yml\",\n \"serverless.yaml\",\n \"serverless.json\",\n \"serverless.js\",\n \"serverless.ts\",\n ],\n },\n shader: {\n languageIds: [\"hlsl\", \"glsl\", \"wgsl\"],\n fileExtensions: [\n \"glsl\",\n \"vert\",\n \"tesc\",\n \"tese\",\n \"geom\",\n \"frag\",\n \"comp\",\n \"vert.glsl\",\n \"tesc.glsl\",\n \"tese.glsl\",\n \"geom.glsl\",\n \"frag.glsl\",\n \"comp.glsl\",\n \"vertex.glsl\",\n \"geometry.glsl\",\n \"fragment.glsl\",\n \"compute.glsl\",\n \"ts.glsl\",\n \"gs.glsl\",\n \"vs.glsl\",\n \"fs.glsl\",\n \"shader\",\n \"vertexshader\",\n \"fragmentshader\",\n \"geometryshader\",\n \"computeshader\",\n \"hlsl\",\n \"pixel.hlsl\",\n \"geometry.hlsl\",\n \"compute.hlsl\",\n \"tessellation.hlsl\",\n \"px.hlsl\",\n \"geom.hlsl\",\n \"comp.hlsl\",\n \"tess.hlsl\",\n \"wgsl\",\n ],\n },\n sketch: {\n fileExtensions: [\"sketch\"],\n },\n snowpack: {\n fileNames: [\n \"snowpack.config.js\",\n \"snowpack.config.cjs\",\n \"snowpack.config.mjs\",\n \"snowpack.config.ts\",\n \"snowpack.config.cts\",\n \"snowpack.config.mts\",\n \"snowpack.deps.json\",\n \"snowpack.config.json\",\n ],\n },\n solidity: {\n languageIds: [\"solidity\"],\n fileExtensions: [\"sol\"],\n },\n \"sonar-cloud\": {\n fileNames: [\n \"sonar-project.properties\",\n \".sonarcloud.properties\",\n \"sonarcloud.yaml\",\n ],\n },\n spwn: {\n fileExtensions: [\"spwn\"],\n },\n stackblitz: {\n fileNames: [\".stackblitzrc\"],\n },\n stata: {\n fileExtensions: [\"ado\", \"do\", \"dta\"],\n },\n stencil: {\n fileNames: [\"stencil.config.js\", \"stencil.config.ts\"],\n },\n stitches: {\n fileNames: [\"stitches.config.js\", \"stitches.config.ts\"],\n },\n \"storybook-svelte\": {\n fileExtensions: [\"story.svelte\", \"stories.svelte\"],\n },\n \"storybook-vue\": {\n fileExtensions: [\"story.vue\", \"stories.vue\"],\n },\n storybook: {\n fileExtensions: [\n \"stories.js\",\n \"stories.jsx\",\n \"stories.mdx\",\n \"story.js\",\n \"story.jsx\",\n \"stories.ts\",\n \"stories.tsx\",\n \"story.ts\",\n \"story.tsx\",\n \"story.mdx\",\n ],\n },\n \"stylelint-ignore\": {\n fileNames: [\".stylelintignore\", \".stylelintcache\"],\n },\n stylelint: {\n fileNames: [\n \".stylelintrc\",\n \"stylelint.config.js\",\n \"stylelint.config.cjs\",\n \"stylelint.config.mjs\",\n \".stylelintrc.json\",\n \".stylelintrc.yaml\",\n \".stylelintrc.yml\",\n \".stylelintrc.js\",\n \".stylelintrc.cjs\",\n \".stylelintrc.mjs\",\n ],\n },\n sublime: {\n fileExtensions: [\"sublime-project\", \"sublime-workspace\"],\n },\n \"super-collider\": {\n fileExtensions: [\"sc\", \"scd\"],\n },\n \"svelte-config\": {\n fileNames: [\n \"svelte.config.js\",\n \"svelte.config.ts\",\n \"svelte.config.cjs\",\n \"svelte.config.mjs\",\n ],\n },\n svelte: {\n languageIds: [\"svelte\"],\n fileExtensions: [\"svelte\"],\n },\n svg: {\n languageIds: [\"svg\"],\n fileExtensions: [\"svg\"],\n },\n swift: {\n languageIds: [\"swift\"],\n fileExtensions: [\"swift\"],\n },\n tailwind: {\n fileNames: [\n \"tailwind.js\",\n \"tailwind.ts\",\n \"tailwind.config.js\",\n \"tailwind.config.cjs\",\n \"tailwind.config.mjs\",\n \"tailwind.config.ts\",\n \"tailwind.config.cts\",\n \"tailwind.config.mts\",\n ],\n },\n taskfile: {\n fileNames: [\n \"taskfile.yml\",\n \"taskfile.yaml\",\n \"taskfile.dist.yml\",\n \"taskfile.dist.yaml\",\n \".taskrc.yml\",\n \".taskrc.yaml\",\n ],\n },\n \"tauri-ignore\": {\n fileNames: [\".taurignore\"],\n },\n tauri: {\n fileNames: [\n \"tauri.conf.json\",\n \"tauri.conf.json5\",\n \"tauri.config.json\",\n \"tauri.linux.conf.json\",\n \"tauri.windows.conf.json\",\n \"tauri.macos.conf.json\",\n \"Tauri.toml\",\n ],\n fileExtensions: [\"tauri\"],\n },\n terraform: {\n languageIds: [\"terraform\"],\n fileExtensions: [\"tf\", \"tf.json\", \"tfvars\", \"tfstate\", \"tfbackend\"],\n },\n text: {\n languageIds: [\"plaintext\"],\n fileExtensions: [\"txt\"],\n },\n todo: {\n fileExtensions: [\"todo\"],\n fileNames: [\"todo.md\", \"todos.md\"],\n },\n toml: {\n languageIds: [\"toml\"],\n fileExtensions: [\"toml\"],\n },\n turbo: {\n fileNames: [\"turbo.json\"],\n },\n twig: {\n languageIds: [\"twig\"],\n fileExtensions: [\"twig\"],\n },\n twine: {\n languageIds: [\n \"twee3\",\n \"twee3-harlowe-3\",\n \"twee3-chapbook-1\",\n \"twee3-sugarcube-2\",\n ],\n fileExtensions: [\"tw\", \"twee\"],\n },\n \"typescript-config\": {\n fileNames: [\n \"tsconfig.json\",\n \"tsconfig.app.json\",\n \"tsconfig.editor.json\",\n \"tsconfig.spec.json\",\n \"tsconfig.base.json\",\n \"tsconfig.build.json\",\n \"tsconfig.eslint.json\",\n \"tsconfig.lib.json\",\n \"tsconfig.lib.prod.json\",\n \"tsconfig.node.json\",\n \"tsconfig.test.json\",\n \"tsconfig.e2e.json\",\n \"tsconfig.web.json\",\n \"tsconfig.webworker.json\",\n \"tsconfig.worker.json\",\n \"tsconfig.config.json\",\n \"tsconfig.vitest.json\",\n \"tsconfig.cjs.json\",\n \"tsconfig.esm.json\",\n \"tsconfig.mjs.json\",\n \"tsconfig.doc.json\",\n \"tsconfig.paths.json\",\n \"tsconfig.main.json\",\n \"tsconfig.cypress-ct.json\",\n \"tsconfig.components.json\",\n ],\n fileExtensions: [\"tsconfig.json\"],\n },\n \"typescript-def\": {\n fileExtensions: [\"d.ts\", \"d.cts\", \"d.mts\"],\n },\n \"typescript-react\": {\n languageIds: [\"typescriptreact\"],\n fileExtensions: [\"tsx\"],\n },\n \"typescript-test\": {\n fileExtensions: [\n \"spec.ts\",\n \"spec.cts\",\n \"spec.mts\",\n \"cy.ts\",\n \"e2e-spec.ts\",\n \"e2e-spec.cts\",\n \"e2e-spec.mts\",\n \"test.ts\",\n \"test.cts\",\n \"test.mts\",\n \"ts.snap\",\n\n \"spec-d.ts\",\n \"test-d.ts\",\n\n \"spec.tsx\",\n \"test.tsx\",\n \"tsx.snap\",\n \"cy.tsx\",\n ],\n },\n typescript: {\n languageIds: [\"typescript\"],\n fileExtensions: [\"ts\", \"cts\", \"mts\"],\n },\n typst: {\n languageIds: [\"typst\"],\n fileExtensions: [\"typ\"],\n fileNames: [\"typst.toml\"],\n },\n unity: {\n languageIds: [\"shaderlab\"],\n fileExtensions: [\"unity\"],\n },\n unocss: {\n fileNames: [\n \"uno.config.js\",\n \"uno.config.mjs\",\n \"uno.config.ts\",\n \"uno.config.mts\",\n \"unocss.config.js\",\n \"unocss.config.mjs\",\n \"unocss.config.ts\",\n \"unocss.config.mts\",\n ],\n },\n url: {\n fileExtensions: [\"url\"],\n },\n uv: {\n fileNames: [\"uv.lock\"],\n },\n v: {\n languageIds: [\"v\"],\n fileExtensions: [\"v\"],\n fileNames: [\"vpkg.json\", \"v.mod\"],\n },\n \"vanilla-extract\": {\n fileExtensions: [\"css.ts\"],\n },\n vento: {\n fileExtensions: [\"vto\"],\n },\n \"vercel-ignore\": {\n fileNames: [\".vercelignore\", \".nowignore\"],\n },\n vercel: {\n fileNames: [\"vercel.json\", \"now.json\"],\n },\n verilog: {\n fileExtensions: [\"vhd\", \"sv\", \"svh\"],\n },\n vhs: {\n fileExtensions: [\"tape\"],\n },\n video: {\n fileExtensions: [\n \"webm\",\n \"mkv\",\n \"flv\",\n \"vob\",\n \"ogv\",\n \"ogg\",\n \"gifv\",\n \"avi\",\n \"mov\",\n \"qt\",\n \"wmv\",\n \"yuv\",\n \"rm\",\n \"rmvb\",\n \"mp4\",\n \"m4v\",\n \"mpg\",\n \"mp2\",\n \"mpeg\",\n \"mpe\",\n \"mpv\",\n \"m2v\",\n ],\n },\n vim: {\n languageIds: [\"viml\"],\n fileExtensions: [\"vimrc\", \"gvimrc\", \"exrc\", \"vim\", \"viminfo\"],\n },\n \"visual-studio\": {\n languageIds: [\"testOutput\", \"vb\"],\n fileExtensions: [\n \"csproj\",\n \"ruleset\",\n \"sln\",\n \"slnx\",\n \"suo\",\n \"vb\",\n \"vbs\",\n \"vcxitems\",\n \"vcxitems.filters\",\n \"vcxproj\",\n \"vcxproj.filters\",\n ],\n },\n vital: {\n fileExtensions: [\n \"vital\",\n \"vitalbank\",\n \"vitallfo\",\n \"vitalskin\",\n \"vitaltable\",\n \"vitaltheme\",\n ],\n },\n vite: {\n fileNames: [\n \"vite.config.js\",\n \"vite.config.mjs\",\n \"vite.config.cjs\",\n \"vite.config.ts\",\n \"vite.config.cts\",\n \"vite.config.mts\",\n ],\n },\n vitest: {\n fileNames: [\n \"vitest.config.ts\",\n \"vitest.config.mts\",\n \"vitest.config.cts\",\n \"vitest.config.js\",\n \"vitest.config.mjs\",\n \"vitest.config.cjs\",\n \"vitest.workspace.js\",\n \"vitest.workspace.ts\",\n \"vitest.workspace.json\",\n ],\n },\n \"vs-codium\": {},\n \"vscode-ignore\": {\n fileNames: [\".vscodeignore\"],\n },\n vscode: {\n fileExtensions: [\n \"vsixmanifest\",\n \"vsix\",\n \"code-workplace\",\n \"code-workspace\",\n \"code-profile\",\n \"code-snippets\",\n ],\n },\n \"vue-config\": {\n fileNames: [\n \"vue.config.js\",\n \"vue.config.cjs\",\n \"vue.config.mjs\",\n \"vue.config.ts\",\n \"vue.config.cts\",\n \"vue.config.mts\",\n \".vuerc\",\n ],\n },\n vue: {\n languageIds: [\"vue\"],\n fileExtensions: [\"vue\"],\n },\n \"web-assembly\": {\n fileExtensions: [\"wat\", \"wasm\"],\n },\n webpack: {\n fileNames: [\n \"webpack.js\",\n \"webpack.cjs\",\n \"webpack.mjs\",\n \"webpack.ts\",\n \"webpack.cts\",\n \"webpack.mts\",\n \"webpack.base.js\",\n \"webpack.base.cjs\",\n \"webpack.base.mjs\",\n \"webpack.base.ts\",\n \"webpack.base.cts\",\n \"webpack.base.mts\",\n \"webpack.config.js\",\n \"webpack.config.cjs\",\n \"webpack.config.mjs\",\n \"webpack.config.ts\",\n \"webpack.config.cts\",\n \"webpack.config.mts\",\n \"webpack.common.js\",\n \"webpack.common.cjs\",\n \"webpack.common.mjs\",\n \"webpack.common.ts\",\n \"webpack.common.cts\",\n \"webpack.common.mts\",\n \"webpack.config.common.js\",\n \"webpack.config.common.cjs\",\n \"webpack.config.common.mjs\",\n \"webpack.config.common.ts\",\n \"webpack.config.common.cts\",\n \"webpack.config.common.mts\",\n \"webpack.config.common.babel.js\",\n \"webpack.config.common.babel.ts\",\n \"webpack.dev.js\",\n \"webpack.dev.cjs\",\n \"webpack.dev.mjs\",\n \"webpack.dev.ts\",\n \"webpack.dev.cts\",\n \"webpack.dev.mts\",\n \"webpack.development.js\",\n \"webpack.development.cjs\",\n \"webpack.development.mjs\",\n \"webpack.development.ts\",\n \"webpack.development.cts\",\n \"webpack.development.mts\",\n \"webpack.config.dev.js\",\n \"webpack.config.dev.cjs\",\n \"webpack.config.dev.mjs\",\n \"webpack.config.dev.ts\",\n \"webpack.config.dev.cts\",\n \"webpack.config.dev.mts\",\n \"webpack.config.dev.babel.js\",\n \"webpack.config.dev.babel.ts\",\n \"webpack.config.main.js\",\n \"webpack.config.renderer.ts\",\n \"webpack.mix.js\",\n \"webpack.mix.cjs\",\n \"webpack.mix.mjs\",\n \"webpack.mix.ts\",\n \"webpack.mix.cts\",\n \"webpack.mix.mts\",\n \"webpack.prod.js\",\n \"webpack.prod.cjs\",\n \"webpack.prod.mjs\",\n \"webpack.prod.ts\",\n \"webpack.prod.cts\",\n \"webpack.prod.mts\",\n \"webpack.prod.config.js\",\n \"webpack.prod.config.cjs\",\n \"webpack.prod.config.mjs\",\n \"webpack.prod.config.ts\",\n \"webpack.prod.config.cts\",\n \"webpack.prod.config.mts\",\n \"webpack.production.js\",\n \"webpack.production.cjs\",\n \"webpack.production.mjs\",\n \"webpack.production.ts\",\n \"webpack.production.cts\",\n \"webpack.production.mts\",\n \"webpack.server.js\",\n \"webpack.server.cjs\",\n \"webpack.server.mjs\",\n \"webpack.server.ts\",\n \"webpack.server.cts\",\n \"webpack.server.mts\",\n \"webpack.client.js\",\n \"webpack.client.cjs\",\n \"webpack.client.mjs\",\n \"webpack.client.ts\",\n \"webpack.client.cts\",\n \"webpack.client.mts\",\n \"webpack.config.server.js\",\n \"webpack.config.server.cjs\",\n \"webpack.config.server.mjs\",\n \"webpack.config.server.ts\",\n \"webpack.config.server.cts\",\n \"webpack.config.server.mts\",\n \"webpack.config.client.js\",\n \"webpack.config.client.cjs\",\n \"webpack.config.client.mjs\",\n \"webpack.config.client.ts\",\n \"webpack.config.client.cts\",\n \"webpack.config.client.mts\",\n \"webpack.config.production.babel.js\",\n \"webpack.config.production.babel.ts\",\n \"webpack.config.prod.babel.js\",\n \"webpack.config.prod.babel.cjs\",\n \"webpack.config.prod.babel.mjs\",\n \"webpack.config.prod.babel.ts\",\n \"webpack.config.prod.babel.cts\",\n \"webpack.config.prod.babel.mts\",\n \"webpack.config.prod.js\",\n \"webpack.config.prod.cjs\",\n \"webpack.config.prod.mjs\",\n \"webpack.config.prod.ts\",\n \"webpack.config.prod.cts\",\n \"webpack.config.prod.mts\",\n \"webpack.config.production.js\",\n \"webpack.config.production.cjs\",\n \"webpack.config.production.mjs\",\n \"webpack.config.production.ts\",\n \"webpack.config.production.cts\",\n \"webpack.config.production.mts\",\n \"webpack.config.staging.js\",\n \"webpack.config.staging.cjs\",\n \"webpack.config.staging.mjs\",\n \"webpack.config.staging.ts\",\n \"webpack.config.staging.cts\",\n \"webpack.config.staging.mts\",\n \"webpack.config.babel.js\",\n \"webpack.config.babel.ts\",\n \"webpack.config.base.babel.js\",\n \"webpack.config.base.babel.ts\",\n \"webpack.config.base.js\",\n \"webpack.config.base.cjs\",\n \"webpack.config.base.mjs\",\n \"webpack.config.base.ts\",\n \"webpack.config.base.cts\",\n \"webpack.config.base.mts\",\n \"webpack.config.staging.babel.js\",\n \"webpack.config.staging.babel.ts\",\n \"webpack.config.coffee\",\n \"webpack.config.test.js\",\n \"webpack.config.test.cjs\",\n \"webpack.config.test.mjs\",\n \"webpack.config.test.ts\",\n \"webpack.config.test.cts\",\n \"webpack.config.test.mts\",\n \"webpack.config.vendor.js\",\n \"webpack.config.vendor.cjs\",\n \"webpack.config.vendor.mjs\",\n \"webpack.config.vendor.ts\",\n \"webpack.config.vendor.cts\",\n \"webpack.config.vendor.mts\",\n \"webpack.config.vendor.production.js\",\n \"webpack.config.vendor.production.cjs\",\n \"webpack.config.vendor.production.mjs\",\n \"webpack.config.vendor.production.ts\",\n \"webpack.config.vendor.production.cts\",\n \"webpack.config.vendor.production.mts\",\n \"webpack.test.js\",\n \"webpack.test.cjs\",\n \"webpack.test.mjs\",\n \"webpack.test.ts\",\n \"webpack.test.cts\",\n \"webpack.test.mts\",\n \"webpack.dist.js\",\n \"webpack.dist.cjs\",\n \"webpack.dist.mjs\",\n \"webpack.dist.ts\",\n \"webpack.dist.cts\",\n \"webpack.dist.mts\",\n \"webpackfile.js\",\n \"webpackfile.cjs\",\n \"webpackfile.mjs\",\n \"webpackfile.ts\",\n \"webpackfile.cts\",\n \"webpackfile.mts\",\n ],\n },\n windi: {\n fileNames: [\n \"windi.config.js\",\n \"windi.config.cjs\",\n \"windi.config.ts\",\n \"windi.config.cts\",\n \"windi.config.json\",\n ],\n fileExtensions: [\"windi\"],\n },\n workflow: {\n languageIds: [\"github-actions-workflow\"],\n fileExtensions: [\"workflows/yml\", \"workflows/yaml\"],\n },\n wxt: {\n fileNames: [\"wxt.config.js\", \"wxt.config.ts\"],\n },\n xaml: {\n fileExtensions: [\"xaml\", \"axaml\"],\n },\n xcode: {\n fileExtensions: [\"xcsettings\", \"xcworkspacedata\"],\n },\n xmake: {\n fileNames: [\"xmake.lua\"],\n },\n xml: {\n fileExtensions: [\n \"xml\",\n \"plist\",\n \"xsd\",\n \"dtd\",\n \"xsl\",\n \"xslt\",\n \"resx\",\n \"iml\",\n \"xquery\",\n \"tmLanguage\",\n \"manifest\",\n \"project\",\n \"xml.dist\",\n \"xml.dist.sample\",\n \"dmn\",\n \"jrxml\",\n ],\n fileNames: [\".htaccess\"],\n },\n yaml: {\n languageIds: [\"yaml\", \"spring-boot-properties-yaml\"],\n fileExtensions: [\"yml\", \"yaml\"],\n },\n \"yarn-lock\": {\n fileNames: [\"yarn.lock\"],\n },\n yarn: {\n fileNames: [\n \".yarnrc\",\n \".yarnclean\",\n \".yarn-integrity\",\n \"yarn-error.log\",\n \".yarnrc.yml\",\n \".yarnrc.yaml\",\n \"yarn.config.cjs\",\n ],\n },\n zap: {\n fileExtensions: [\"zap\"],\n },\n zig: {\n fileExtensions: [\"zig\"],\n },\n zip: {\n fileExtensions: [\n \"7z\",\n \"arj\",\n \"aseprite-extension\",\n \"bz\",\n \"bz2\",\n \"db\",\n \"gz\",\n \"paq8n\",\n \"paq8o\",\n \"pkg\",\n \"rar\",\n \"tar\",\n \"tbz\",\n \"tbz2\",\n \"tgz\",\n \"xz\",\n \"z\",\n \"zip\",\n \"zpaq\",\n \"zst\",\n ],\n },\n};\n\nconst { languageIds, fileExtensions, fileNames } = Object.entries(\n fileIcons\n).reduce<{\n languageIds: Record<string, string>;\n fileExtensions: Record<string, string>;\n fileNames: Record<string, string>;\n}>(\n ({ languageIds, fileExtensions, fileNames }, [name, icon]) => ({\n languageIds: {\n ...languageIds,\n ...icon.languageIds?.reduce((a, c) => ({ ...a, [c]: name }), {}),\n },\n fileExtensions: {\n ...fileExtensions,\n ...icon.fileExtensions?.reduce((a, c) => ({ ...a, [c]: name }), {}),\n },\n fileNames: {\n ...fileNames,\n ...icon.fileNames?.reduce((a, c) => ({ ...a, [c]: name }), {}),\n },\n }),\n {\n languageIds: {},\n fileExtensions: {},\n fileNames: {},\n }\n);\n\nexport { fileExtensions, fileIcons, fileNames, languageIds };\n","import { MultiplayerUser } from \"@noya-app/noya-multiplayer-react\";\nimport React, { forwardRef, memo, useMemo } from \"react\";\nimport { cssVars, INPUT_HEIGHT } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { colorFromString } from \"../utils/colorFromString\";\nimport { Avatar } from \"./Avatar\";\nimport { Logo } from \"./NoyaLogo\";\nimport { Text } from \"./Text\";\n\nexport type MessageProps = {\n role: \"user\" | \"assistant\" | \"system\" | \"data\";\n children?: React.ReactNode;\n user?: MultiplayerUser;\n /** @default 27 */\n avatarSize?: number;\n};\n\nexport const Message = memo(\n forwardRef(function Message(\n { role, children, user, avatarSize = INPUT_HEIGHT }: MessageProps,\n ref: React.ForwardedRef<HTMLDivElement>\n ) {\n const randomId = crypto.randomUUID();\n const userMessageBackgroundColor = colorFromString(user?.id ?? randomId);\n const styles = useMemo(\n () =>\n role === \"user\"\n ? {\n backgroundColor: userMessageBackgroundColor,\n }\n : undefined,\n [userMessageBackgroundColor, role]\n );\n return (\n <div\n className={cx(\n \"flex gap-2\",\n role === \"user\" ? \"flex-row-reverse\" : \"flex-row\"\n )}\n >\n {role === \"assistant\" ? (\n <Avatar\n name=\"Assistant\"\n size={avatarSize}\n backgroundColor={cssVars.colors.primaryPastel}\n >\n <Logo style={{ width: 15 }} fill={cssVars.colors.primary} />\n </Avatar>\n ) : (\n <Avatar\n userId={!user ? randomId : user?.id}\n name={user?.name ?? \"Anonymous\"}\n image={user?.image}\n size={avatarSize}\n />\n )}\n <div\n className={cx(\n \"flex flex-row gap-2 rounded-lg py-2 px-3 transition-all duration-200 min-w-6 max-w-[70%] items-start\",\n role === \"user\" ? \"ml-auto\" : \"bg-input-background\"\n )}\n style={styles}\n ref={ref}\n >\n <Text\n variant=\"small\"\n className={role === \"user\" ? \"text-white\" : \"text-text\"}\n >\n {children}\n </Text>\n </div>\n </div>\n );\n })\n);\n","import { Link1Icon } from \"@noya-app/noya-icons\";\nimport React from \"react\";\nimport { DividerVertical } from \"../Divider\";\nimport { Small } from \"../Text\";\n\nexport const PipelineResultLink = ({ url }: { url: string }) => {\n return (\n <div className=\"flex flex-col gap-0.5\">\n {/* <Label position=\"start\">{name}</Label> */}\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex text-primary hover:opacity-80 border border-divider rounded-md\"\n >\n <div className=\"flex gap-1 items-center p-2\">\n <Link1Icon className=\"w-[15px] h-[15px] flex-shrink-0\" />\n </div>\n <DividerVertical />\n <Small className=\"truncate p-2 flex-1\">{url}</Small>\n </a>\n </div>\n );\n};\n\nexport const PipelineResultLayout = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n return <div className=\"flex flex-col gap-2\">{children}</div>;\n};\n\nexport function getPipelineResultLink(\n value: unknown\n): { url: string } | undefined {\n if (typeof value !== \"object\" || value === null) return undefined;\n\n // Check for htmlUrl first\n if (\"html_url\" in value && typeof value.html_url === \"string\") {\n return { url: value.html_url };\n }\n\n // Fall back to regular url\n if (\"url\" in value && typeof value.url === \"string\") {\n return { url: value.url };\n }\n\n return undefined;\n}\n","import { clamp } from \"@noya-app/noya-utils\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport * as React from \"react\";\nimport { cx } from \"../utils/classNames\";\n\ntype ProgressVariant = \"normal\" | \"warning\" | \"primary\" | \"secondary\";\n\nexport function Progress({\n value,\n variant = \"normal\",\n className,\n}: {\n value: number;\n variant?: ProgressVariant;\n className?: string;\n}) {\n const clampedValue = clamp(value, 0, 100);\n const transformStyles = React.useMemo(\n () => ({\n transform: `translateX(-${100 - clampedValue}%)`,\n }),\n [clampedValue]\n );\n\n return (\n <ProgressPrimitive.Root\n className={cx(`relative hidden bg-input-background h-[5px] `, className)}\n style={{ transform: \"translateZ(0)\" }}\n value={clampedValue}\n >\n <ProgressPrimitive.Indicator\n className={`${variant === \"primary\" ? \"bg-primary\" : variant === \"secondary\" ? \"bg-secondary\" : variant === \"warning\" ? \"bg-warning\" : \"bg-text\"} transition-[transform_660ms_cubic-bezier(0.65,0,0.35,1) w-full h-full`}\n style={transformStyles}\n />\n </ProgressPrimitive.Root>\n );\n}\n","import {\n Button,\n IconButton,\n IndentContext,\n INPUT_HEIGHT,\n InspectorPrimitives,\n Spacer,\n textStyles,\n} from \"@noya-app/noya-designsystem\";\nimport { clientStorage, usePersistentStateString } from \"@noya-app/react-utils\";\nimport React, { CSSProperties, memo, useMemo } from \"react\";\n\ntype TitleIconOptions = {\n inlineBlockWrapper?: boolean;\n};\n\nexport type SectionProps = {\n children: React.ReactNode;\n title?: React.ReactNode;\n onClickTitle?: () => void;\n titleTextStyle?: \"small\" | \"heading5\" | \"heading4\" | \"heading3\";\n right?: React.ReactNode;\n hideRightWhenCollapsed?: boolean;\n extraPadding?: boolean;\n className?: string;\n style?: CSSProperties;\n titleIcon?: React.ReactNode;\n titleIconOptions?: TitleIconOptions;\n};\n\nconst titleIconStyle: CSSProperties = {\n marginRight: \"8px\",\n alignSelf: \"flex-start\",\n position: \"relative\",\n top: \"2px\",\n};\n\nconst titleIconWrapperStyle: CSSProperties = {\n display: \"inline-block\",\n};\n\nconst SectionInternal = ({\n children,\n title,\n onClickTitle,\n titleTextStyle = \"heading4\",\n right,\n extraPadding,\n className,\n style: styleProp,\n titleIcon,\n titleIconOptions = {\n inlineBlockWrapper: true,\n },\n}: SectionProps) => {\n const style: CSSProperties = useMemo(\n () => ({\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n paddingTop:\n titleTextStyle === \"heading3\"\n ? \"12px\"\n : title && extraPadding\n ? \"24px\"\n : \"12px\",\n paddingBottom:\n titleTextStyle === \"heading3\"\n ? \"12px\"\n : title && extraPadding\n ? \"12px\"\n : \"12px\",\n ...styleProp,\n }),\n [titleTextStyle, title, extraPadding, styleProp]\n );\n\n const hasChildren = React.Children.toArray(children).some((child) => !!child);\n\n const headerStyle: CSSProperties = useMemo(\n () => ({\n marginBottom: hasChildren ? \"4px\" : undefined,\n minHeight: INPUT_HEIGHT,\n }),\n [hasChildren]\n );\n\n return (\n <div style={style} className={className}>\n {(title || titleIcon || right) && (\n <InspectorPrimitives.SectionHeader style={headerStyle}>\n {titleIcon && (\n <div style={titleIconStyle} className={textStyles[titleTextStyle]}>\n {titleIconOptions.inlineBlockWrapper ? (\n <div style={titleIconWrapperStyle}>{titleIcon}</div>\n ) : (\n titleIcon\n )}\n </div>\n )}\n {title && (\n <>\n {onClickTitle ? (\n <Button variant=\"none\" onClick={onClickTitle}>\n <InspectorPrimitives.Title $textStyle={titleTextStyle}>\n {title}\n </InspectorPrimitives.Title>\n </Button>\n ) : (\n <InspectorPrimitives.Title $textStyle={titleTextStyle}>\n {title}\n </InspectorPrimitives.Title>\n )}\n </>\n )}\n <Spacer.Horizontal />\n {right}\n </InspectorPrimitives.SectionHeader>\n )}\n <IndentContext.Provider value={{ indentLevel: 1 }}>\n {children}\n </IndentContext.Provider>\n </div>\n );\n};\n\ntype ExpandableSectionProps = {\n storageKey: string;\n initialVisibility?: \"show\" | \"hide\";\n};\n\nconst ExpandableSection = ({\n storageKey,\n initialVisibility = \"show\",\n ...props\n}: SectionProps & ExpandableSectionProps) => {\n const [visibility, setVisibility] = usePersistentStateString<\"show\" | \"hide\">(\n clientStorage,\n storageKey,\n initialVisibility\n );\n const expanded = visibility === \"show\";\n\n return (\n <SectionInternal\n {...props}\n right={!props.hideRightWhenCollapsed || expanded ? props.right : null}\n title={\n <div className=\"flex gap-1 items-center\">\n {props.title}\n <IconButton\n iconName={expanded ? \"ChevronDownIcon2\" : \"ChevronRightIcon2\"}\n onClick={() => setVisibility(expanded ? \"hide\" : \"show\")}\n />\n </div>\n }\n >\n {expanded && props.children}\n </SectionInternal>\n );\n};\n\nexport const Section = memo(function InspectorSection({\n storageKey,\n ...props\n}: SectionProps & Partial<ExpandableSectionProps>) {\n return storageKey ? (\n <ExpandableSection {...props} storageKey={storageKey} />\n ) : (\n <SectionInternal {...props} />\n );\n});\n","import { memoGeneric } from \"@noya-app/react-utils\";\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport React, {\n createContext,\n forwardRef,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport { useLabel } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\nimport { renderIcon } from \"./Icons\";\nimport { SelectableMenuItem } from \"./internal/Menu\";\nimport { Tooltip } from \"./Tooltip\";\n\ntype SegmentedControlColorScheme = \"primary\" | \"secondary\";\ntype SegmentedControlVariant = \"default\" | \"tabs\";\n\ntype SegmentedControlContextValue = {\n /** @default primary */\n colorScheme?: SegmentedControlColorScheme;\n};\n\nconst SegmentedControlContext = createContext<SegmentedControlContextValue>({\n colorScheme: \"primary\",\n});\n\nexport interface SegmentedControlProps<T extends string> {\n id?: string;\n value?: T;\n onValueChange?: (value: T) => void;\n /** @default primary */\n colorScheme?: SegmentedControlColorScheme;\n allowEmpty?: boolean;\n items: SegmentedControlItemProps<T>[];\n className?: string;\n style?: React.CSSProperties;\n variant?: SegmentedControlVariant;\n}\n\nexport type SegmentedControlItemProps<T extends string> = {\n title?: ReactNode;\n className?: string;\n style?: React.CSSProperties;\n tooltip?: ReactNode;\n variant?: SegmentedControlVariant;\n} & Pick<\n SelectableMenuItem<T>,\n \"value\" | \"disabled\" | \"icon\" | \"role\" | \"title\"\n>;\n\nconst SegmentedControlItem = forwardRef(function SegmentedControlItem<\n T extends string,\n>(\n {\n value,\n tooltip,\n title,\n disabled = false,\n icon,\n className,\n variant = \"default\",\n ...props\n }: SegmentedControlItemProps<T>,\n forwardedRef: React.ForwardedRef<HTMLButtonElement>\n) {\n const { colorScheme } = useContext(SegmentedControlContext);\n\n const itemElement = (\n <ToggleGroupPrimitive.Item\n ref={forwardedRef}\n value={(value ?? \"\").toString()}\n disabled={disabled}\n className={cx(\n \"group\",\n \"flex items-center justify-center\",\n \"font-sans text-button relative flex-1 appearance-none text-segmented-control-item focus:outline-none transition-colors\",\n variant === \"tabs\" ? \"font-semibold\" : \"font-normal\",\n variant === \"tabs\"\n ? \"\"\n : colorScheme === \"secondary\"\n ? \"focus:ring-2 focus:ring-secondary focus:ring-offset-1\"\n : \"focus:ring-2 focus:ring-primary focus:ring-offset-1\",\n variant === \"tabs\"\n ? \"aria-checked:text-primary\"\n : colorScheme === \"secondary\"\n ? \"aria-checked:bg-secondary aria-checked:text-white\"\n : colorScheme === \"primary\"\n ? \"aria-checked:bg-primary aria-checked:text-white\"\n : \"aria-checked:bg-background aria-checked:text-text\",\n \"focus:z-interactable\",\n variant === \"default\"\n ? \"px-1 rounded aria-checked:shadow-segment\"\n : \"px-1.5 border-y-2 border-y-transparent aria-checked:border-b-primary\",\n variant === \"default\" &&\n \"border-r border-divider last:border-r-0 aria-checked:border-r-transparent [&:has(+[aria-checked=true])]:border-r-transparent\",\n className\n )}\n {...props}\n >\n <span\n className={cx(\n \"inline-flex whitespace-pre flex-nowrap gap-1.5 items-center justify-center align-middle text-center\",\n variant === \"tabs\" &&\n \"group-focus:ring-2 group-focus:ring-primary-pastel group-focus:ring-offset-2\"\n )}\n >\n {icon && renderIcon(icon)}\n {title}\n </span>\n </ToggleGroupPrimitive.Item>\n );\n\n return tooltip ? (\n <Tooltip content={tooltip}>{itemElement}</Tooltip>\n ) : (\n itemElement\n );\n});\n\nexport const SegmentedControl = memoGeneric(function SegmentedControl<\n T extends string,\n>({\n id: idProp,\n value,\n onValueChange,\n colorScheme,\n allowEmpty,\n items,\n variant = \"default\",\n className,\n style,\n}: SegmentedControlProps<T>) {\n const contextValue = useMemo(() => ({ colorScheme }), [colorScheme]);\n const { fieldId: id } = useLabel({ fieldId: idProp });\n\n const handleValueChange = useCallback(\n (value: T) => {\n if (!allowEmpty && !value) return;\n onValueChange?.(value);\n },\n [allowEmpty, onValueChange]\n );\n\n return (\n <SegmentedControlContext.Provider value={contextValue}>\n <ToggleGroupPrimitive.Root\n id={id}\n type=\"single\"\n value={value}\n onValueChange={handleValueChange}\n className={cx(\n `appearance-none relative outline-none`,\n variant === \"default\" &&\n \"grid min-h-input-height bg-input-background rounded py-0.5 px-0.5\",\n variant === \"tabs\" && \"flex gap-1.5 min-h-[33px]\",\n className\n )}\n style={{\n ...style,\n gridTemplateColumns: `repeat(${items.length}, 1fr)`,\n }}\n >\n {items.map((item, index) => (\n <SegmentedControlItem key={index} {...item} variant={variant} />\n ))}\n </ToggleGroupPrimitive.Root>\n </SegmentedControlContext.Provider>\n );\n});\n","import {\n portalScopeProps,\n usePortalScopeId,\n} from \"@noya-app/noya-designsystem\";\nimport { Rect } from \"@noya-app/noya-geometry\";\nimport { useSize } from \"@noya-app/react-utils\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport type { MeasurableElement } from \"@radix-ui/utils\";\nimport React, { CSSProperties, memo, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\n\n// Create a Measurable from a Rect\nconst createVirtualElement = (rect: Rect): MeasurableElement => ({\n getBoundingClientRect: () => ({\n width: rect.width,\n height: rect.height,\n x: rect.x,\n y: rect.y,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height,\n left: rect.x,\n toJSON: () => null,\n }),\n});\n\ntype SelectionToolbarContainerProps = {\n rect: Rect;\n children: React.ReactNode;\n portalContainer?: HTMLElement | null;\n};\n\nexport const SelectionToolbarContainer = memo(\n function SelectionToolbarContainer({\n rect,\n children,\n portalContainer,\n }: SelectionToolbarContainerProps) {\n const portalScopeId = usePortalScopeId();\n const containerRef = React.useRef<HTMLDivElement>(null);\n const size = useSize(containerRef, \"width\");\n\n // Create a virtual reference element from the rect\n const virtualRef = useMemo(\n () => ({\n current: createVirtualElement(rect),\n }),\n [rect]\n );\n\n const popperContent = (\n <PopperPrimitive.Content\n {...portalScopeProps(portalScopeId)}\n side=\"top\"\n sideOffset={10}\n align=\"center\"\n avoidCollisions\n collisionPadding={10}\n contentEditable={false}\n style={{\n zIndex: 1000,\n opacity: size ? 1 : 0,\n transition: \"opacity 0.2s ease-in-out\",\n [\"--n-input-background\" as keyof CSSProperties]: \"transparent\",\n }}\n >\n <div\n ref={containerRef}\n className=\"flex gap-1 bg-popover-background rounded shadow-popover p-1\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onPointerDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </PopperPrimitive.Content>\n );\n\n return (\n <PopperPrimitive.Root>\n <PopperPrimitive.Anchor virtualRef={virtualRef} />\n {portalContainer\n ? createPortal(popperContent, portalContainer)\n : popperContent}\n </PopperPrimitive.Root>\n );\n }\n);\n","import {\n ChevronDownIcon,\n ChevronUpIcon,\n DropdownChevronIcon,\n} from \"@noya-app/noya-icons\";\nimport { memoGeneric } from \"@noya-app/react-utils\";\nimport * as Select from \"@radix-ui/react-select\";\nimport { type SelectProps } from \"@radix-ui/react-select\";\nimport React, {\n CSSProperties,\n FocusEventHandler,\n useMemo,\n useState,\n} from \"react\";\nimport { useLabel, useLabelPosition } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\n\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../contexts/PortalScopeContext\";\nimport { getInsetEndStyles } from \"../utils/inputs\";\nimport { Button } from \"./Button\";\nimport { renderIcon } from \"./Icons\";\nimport {\n isSelectableMenuItem,\n MenuItem,\n SelectableMenuItem,\n styles,\n} from \"./internal/Menu\";\nimport { MenuComponents, MenuViewport } from \"./internal/MenuViewport\";\nimport { Label } from \"./Label\";\n\ntype Props<T extends string> = {\n id?: string;\n style?: React.CSSProperties;\n className?: string;\n items: MenuItem<T>[];\n value: T;\n onSelect?: (value: T) => void;\n placeholder?: string;\n disabled?: boolean;\n readOnly?: boolean;\n label?: React.ReactNode;\n onFocus?: FocusEventHandler;\n onBlur?: FocusEventHandler;\n contentStyle?: React.CSSProperties;\n} & Pick<SelectProps, \"open\" | \"onOpenChange\">;\n\nconst readOnlyStyle: CSSProperties = {\n justifyContent: \"flex-start\",\n textAlign: \"left\",\n};\n\nconst scrollButtonStyles = `\n flex \n items-center \n justify-center \n h-[25px] \n cursor-default\n text-text-muted\n hover:text-text\n`;\n\nconst insetEndStyles = getInsetEndStyles();\n\ninterface SelectMenuTriggerProps {\n id?: string;\n style?: React.CSSProperties;\n className?: string;\n disabled?: boolean;\n icon?: React.ReactNode;\n placeholder?: string;\n isOpen?: boolean;\n onFocus?: FocusEventHandler;\n onBlur?: FocusEventHandler;\n label?: React.ReactNode;\n}\n\nconst SelectMenuTrigger = memoGeneric(function SelectMenuTrigger({\n style,\n className,\n disabled,\n icon,\n placeholder,\n isOpen,\n onFocus,\n onBlur,\n ...props\n}: SelectMenuTriggerProps) {\n const { label, fieldId: id } = useLabel({\n label: props.label,\n fieldId: props.id,\n });\n const labelPosition = useLabelPosition();\n\n return (\n <Select.SelectTrigger asChild onFocus={onFocus} onBlur={onBlur}>\n <Button\n id={id}\n style={style}\n className={cx(\n className ?? \"flex w-full\",\n \"flex-1 focus:z-interactable relative\",\n isOpen && \"ring-2 ring-primary\"\n )}\n disabled={disabled}\n >\n {icon && <span className=\"pr-1.5\">{renderIcon(icon)}</span>}\n {label && labelPosition === \"inset\" && (\n <div className={insetEndStyles}>\n <Label className=\"pr-4 text-text-disabled\" htmlFor={id}>\n {label}\n </Label>\n </div>\n )}\n <span className=\"flex-1 flex\">\n <Select.Value placeholder={placeholder} />\n </span>\n <DropdownChevronIcon\n className={cx(\n \"transition-transform duration-100 ml-1.5\",\n isOpen ? \"rotate-180\" : \"rotate-0\"\n )}\n />\n </Button>\n </Select.SelectTrigger>\n );\n});\n\nconst Components: MenuComponents = {\n Item: Select.Item,\n ItemText: Select.ItemText,\n Separator: Select.Separator,\n};\n\nexport const SelectMenu = memoGeneric(function SelectMenu<\n T extends string = string,\n>({\n style,\n className,\n items,\n value,\n onSelect,\n placeholder,\n disabled,\n readOnly,\n open,\n onFocus,\n onBlur,\n onOpenChange,\n contentStyle: contentStyleProp,\n ...props\n}: Props<T>) {\n const portalScopeId = usePortalScopeId();\n\n const selectedItem = items.find(\n (item): item is SelectableMenuItem<T> =>\n isSelectableMenuItem(item) && item.value === value\n );\n const icon = selectedItem?.icon;\n const [internalOpen, setInternalOpen] = useState(open);\n\n const { label, fieldId: id } = useLabel({\n label: props.label,\n fieldId: props.id,\n });\n\n const handleOpenChange = (open: boolean) => {\n if (onOpenChange) {\n onOpenChange(open);\n }\n setInternalOpen(open);\n };\n\n const readOnlyButton = useMemo(\n () => (\n <Button\n id={id}\n style={style}\n contentStyle={readOnlyStyle}\n className={cx(`${className} flex-1 focus:z-interactable gap-1.5`)}\n disabled={disabled}\n >\n {icon && renderIcon(icon)}\n <span className=\"flex flex-1\">{selectedItem?.title ?? value}</span>\n </Button>\n ),\n [icon, id, style, className, disabled, value, selectedItem]\n );\n\n const contentStyle = useMemo(() => {\n return {\n width: \"var(--radix-select-trigger-width)\",\n minWidth: \"max-content\",\n maxHeight: \"500px\",\n ...contentStyleProp,\n };\n }, [contentStyleProp]);\n\n const content = (\n <Select.Root\n value={value}\n onValueChange={onSelect}\n open={open}\n onOpenChange={handleOpenChange}\n >\n <SelectMenuTrigger\n id={id}\n style={style}\n className={className}\n disabled={disabled}\n icon={icon}\n placeholder={placeholder}\n isOpen={internalOpen}\n onFocus={onFocus}\n onBlur={onBlur}\n label={label}\n />\n <Select.Portal>\n <Select.Content\n {...portalScopeProps(portalScopeId)}\n className={styles.contentStyle}\n position=\"popper\"\n sideOffset={6}\n collisionPadding={8}\n align=\"center\"\n style={contentStyle}\n >\n <Select.ScrollUpButton className={scrollButtonStyles}>\n <ChevronUpIcon\n className={cx(\"transition-transform duration-100\")}\n />\n </Select.ScrollUpButton>\n <Select.Viewport>\n <MenuViewport items={items} Components={Components} />\n </Select.Viewport>\n <Select.ScrollDownButton className={scrollButtonStyles}>\n <ChevronDownIcon />\n </Select.ScrollDownButton>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n\n return readOnly ? readOnlyButton : content;\n});\n","import * as RadixSlider from \"@radix-ui/react-slider\";\nimport React, { FocusEventHandler, memo, useCallback, useMemo } from \"react\";\nimport { useLabel, useLabelPosition } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\nimport { getInsetEndStyles } from \"../utils/inputs\";\nimport { Label } from \"./Label\";\n\ntype ColorScheme = \"primary\" | \"secondary\";\n\ninterface Props {\n id?: string;\n style?: React.CSSProperties;\n className?: string;\n value: number;\n onValueChange: (value: number) => void;\n min: number;\n max: number;\n step?: number;\n colorScheme?: ColorScheme;\n label?: React.ReactNode;\n onFocus?: FocusEventHandler;\n onBlur?: FocusEventHandler;\n readOnly?: boolean;\n}\n\nconst THUMB_WIDTH = 8; // Width of the thumb in pixels\n\nconst thumbStyle = {\n width: THUMB_WIDTH,\n};\n\nconst insetEndStyles = getInsetEndStyles();\n\nexport const Slider = memo(function Slider({\n style,\n className,\n value,\n onValueChange,\n min,\n max,\n step,\n colorScheme,\n onFocus,\n onBlur,\n readOnly = false,\n ...props\n}: Props) {\n const arrayValue = useMemo(\n () => [Math.min(Math.max(value, min), max)],\n [value, min, max]\n );\n\n const { label, fieldId: id } = useLabel({\n label: props.label,\n fieldId: props.id,\n });\n const labelPosition = useLabelPosition();\n\n const handleValueChange = useCallback(\n (arrayValue: number[]) => {\n onValueChange(arrayValue[0]);\n },\n [onValueChange]\n );\n\n const percentage = useMemo(() => {\n // Calculate the raw percentage (for label)\n const rawPercent = (arrayValue[0] - min) / (max - min);\n // Adjust the percentage to account for thumb width (for fill)\n const adjustedPercent =\n rawPercent * (100 - (THUMB_WIDTH * 100) / 300) + (THUMB_WIDTH * 50) / 300;\n return {\n raw: rawPercent * 100,\n adjusted: adjustedPercent,\n };\n }, [arrayValue, min, max]);\n\n const trackFillStyle = useMemo(\n () => ({\n clipPath: `inset(0 ${100 - percentage.adjusted}% 0 0)`,\n }),\n [percentage.adjusted]\n );\n\n const labelStyle = useMemo(\n () => ({\n clipPath: `inset(0 ${100 - percentage.raw}% 0 0)`,\n }),\n [percentage.raw]\n );\n\n return (\n <RadixSlider.Root\n min={min}\n max={max}\n step={step}\n id={id}\n value={arrayValue}\n onValueChange={handleValueChange}\n className={cx(\n \"flex relative items-center select-none touch-none h-input-height rounded overflow-hidden flex-grow max-h-input-height\",\n className\n )}\n style={style}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={readOnly}\n >\n <RadixSlider.Track className=\"flex-grow h-full rounded overflow-hidden bg-input-background\">\n {label && labelPosition === \"inset\" && (\n <div className={insetEndStyles}>\n <Label htmlFor={id} className=\"text-text-disabled\">\n {label}\n </Label>\n </div>\n )}\n <div\n style={trackFillStyle}\n className={cx(\n \"absolute inset-0 w-full h-full rounded overflow-hidden bg-primary-pastel\",\n colorScheme === \"primary\" && \"bg-primary\",\n colorScheme === \"secondary\" && \"bg-secondary\"\n )}\n />\n </RadixSlider.Track>\n {label && labelPosition === \"inset\" && colorScheme !== undefined && (\n <div className={insetEndStyles}>\n <Label className=\"text-white overflow-hidden\" style={labelStyle}>\n {label}\n </Label>\n </div>\n )}\n <RadixSlider.Thumb\n style={thumbStyle}\n className={cx(\n \"block h-input-height rounded border border-solid bg-slider-thumb-background transition-colors focus:border-primary focus:border-2 outline-none\",\n colorScheme === undefined && \"border-slider-border\",\n colorScheme === \"primary\" && \"border-primary\",\n colorScheme === \"secondary\" && \"border-secondary\"\n )}\n />\n </RadixSlider.Root>\n );\n});\n","import * as React from \"react\";\nimport {\n ActiveDragContextType,\n DragRegistrationContextType,\n SharedDragProps,\n} from \"./DragRegistration\";\nimport { SharedDragProvider } from \"./SharedDragProvider\";\nimport { Sortable, SortableProps } from \"./Sortable\";\n\nexport function createSharedDrag(): {\n Provider: typeof SharedDragProvider;\n Sortable: <TItem, TElement extends HTMLElement>(\n props: SortableProps<TItem, TElement>\n ) => React.ReactNode;\n props: SharedDragProps;\n} {\n const dragRegistrationContext =\n React.createContext<DragRegistrationContextType | null>(null);\n const activeDragContext = React.createContext<ActiveDragContextType | null>(\n null\n );\n\n const sharedDragProps: SharedDragProps = {\n dragRegistrationContext,\n activeDragContext,\n };\n\n const Provider = ({ children }: { children: React.ReactNode }) => (\n <SharedDragProvider sharedDragProps={sharedDragProps}>\n {children}\n </SharedDragProvider>\n );\n\n return {\n Provider,\n Sortable: <TItem, TElement extends HTMLElement>(\n props: SortableProps<TItem, TElement>\n ) => <Sortable sharedDragProps={sharedDragProps} {...props} />,\n props: sharedDragProps,\n };\n}\n","import * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport * as React from \"react\";\nimport { cx } from \"../utils/classNames\";\n\ntype SwitchColorScheme = \"primary\" | \"secondary\";\n\ninterface Props {\n id?: string;\n value: boolean;\n onChange: (value: boolean) => void;\n /** @default normal */\n colorScheme?: SwitchColorScheme;\n disabled?: boolean;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const Switch = function Switch({\n id,\n value,\n onChange,\n colorScheme = \"primary\",\n disabled,\n onFocus,\n onBlur,\n style,\n className,\n}: Props) {\n return (\n <SwitchPrimitive.Root\n id={id}\n style={style}\n checked={value}\n disabled={disabled}\n onCheckedChange={(newValue) => {\n onChange(newValue);\n }}\n className={cx(\n \"all-unset w-8 h-[19px] bg-active-background rounded-full relative cursor-pointer ring-offset-background [-webkit-tap-highlight-color:rgba(0,0,0,0)] focus:ring-2 focus:ring-primary focus:ring-offset-[1px] outline-none data-[state=checked]:bg-primary transition-all\",\n colorScheme === \"secondary\" && \"data-[state=checked]:bg-secondary\",\n \"focus:z-interactable\",\n className\n )}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n <SwitchPrimitive.Thumb className=\"block w-[15px] h-[15px] bg-background rounded-full transition-transform translate-x-[2px] data-[state=checked]:translate-x-[15px]\" />\n </SwitchPrimitive.Root>\n );\n};\n","import React, { memo, useMemo } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { colorFromString } from \"../utils/colorFromString\";\n\ntype Point = { x: number; y: number };\n\nconst UserPointerContainer = memo(function UserPointerContainer({\n point,\n visible,\n children,\n className,\n style,\n}: {\n point: Point;\n visible?: boolean;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}) {\n return (\n <div\n style={{\n transform: `translate(${Math.round(point.x)}px, ${Math.round(point.y)}px)`,\n transition: \"transform 0.075s, opacity 0.2s\",\n ...style,\n }}\n className={cx(\n \"pointer-events-none\",\n visible ? \"opacity-100\" : \"opacity-0\",\n className\n )}\n >\n {children}\n </div>\n );\n});\n\nconst UserNameTag = memo(function UserNameTag({\n backgroundColor,\n className,\n style,\n children,\n}: {\n backgroundColor: string;\n className?: string;\n style?: React.CSSProperties;\n children: React.ReactNode;\n}) {\n return (\n <span\n className={cx(\n \"relative inline-block rounded-full text-xs font-medium leading-none text-white shadow-sm px-2 py-1.5 border border-background\",\n className\n )}\n style={{\n backgroundColor,\n letterSpacing: \"-0.3px\",\n ...style,\n }}\n >\n {children}\n </span>\n );\n});\n\nconst UserPointerIcon = memo(function PointerIcon({\n size,\n color = \"black\",\n className,\n style,\n}: {\n size: number;\n color?: string;\n className?: string;\n style?: React.CSSProperties;\n}) {\n // Simple triangle shape: left point, top right, bottom right\n const points = \"0,5 10,0 10,10\";\n\n return (\n <svg\n width={size}\n height={size}\n className={className}\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n transform: `translate(0, -${size / 2}px) rotate(45deg)`,\n transformOrigin: \"left center\",\n ...style,\n }}\n >\n <polygon\n points={points}\n fill={color}\n stroke=\"var(--n-background)\"\n strokeWidth=\"0.5\"\n />\n </svg>\n );\n});\n\nexport type UserPointerProps = {\n userId?: string;\n name?: string;\n /** label to display in the tooltip next to the Pointer */\n visible?: boolean;\n point: Point;\n /** defaults to a random color based on the key, but can optionally be overridden */\n backgroundColor?: string;\n style?: React.CSSProperties;\n className?: string;\n};\n\nconst POINTER_SIZE = 12;\nconst POINTER_OVERLAP = 6;\n\nexport const UserPointer = memo(function UserPointer({\n userId,\n name,\n visible = true,\n point,\n backgroundColor,\n style,\n className,\n}: UserPointerProps) {\n const userBackgroundColor = useMemo(\n () => backgroundColor ?? colorFromString(userId ?? name ?? \"\"),\n [backgroundColor, userId, name]\n );\n\n const pointerOverlapStyle = useMemo(\n () => ({\n marginRight: `-${POINTER_OVERLAP}px`,\n marginBottom: `-${POINTER_OVERLAP}px`,\n }),\n []\n );\n\n const nameTagOverlapStyle = useMemo(\n () => ({ marginLeft: `${POINTER_SIZE - POINTER_OVERLAP + 1}px` }),\n []\n );\n\n return (\n <UserPointerContainer\n point={point}\n visible={visible}\n className={className}\n style={style}\n >\n {name && (\n <div className=\"relative\">\n <UserPointerIcon\n size={POINTER_SIZE}\n color={userBackgroundColor}\n style={pointerOverlapStyle}\n />\n <UserNameTag\n backgroundColor={userBackgroundColor}\n style={nameTagOverlapStyle}\n >\n {name}\n </UserNameTag>\n </div>\n )}\n </UserPointerContainer>\n );\n});\n","import { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport { useSize } from \"@noya-app/react-utils\";\nimport React, {\n forwardRef,\n memo,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { useWindowSize } from \"../../hooks/useWindowSize\";\nimport { cx } from \"../../utils/classNames\";\nimport { DrawerWorkspaceLayout } from \"./DrawerWorkspaceLayout\";\nimport { PanelWorkspaceLayout } from \"./PanelWorkspaceLayout\";\nimport {\n PanelLayoutState,\n PercentageSidebarOptions,\n SidebarRef,\n} from \"./types\";\n\nexport type SideType = \"auto\" | \"panel\" | \"drawer\";\n\nexport type DetectSizeType = \"container\" | \"window\";\n\nexport interface WorkspaceLayoutProps {\n id?: string;\n className?: string;\n style?: React.CSSProperties;\n theme?: \"light\" | \"dark\";\n autoSavePrefix?: string;\n left?: React.ReactNode;\n leftOptions?: SideOptions;\n children?: React.ReactNode;\n right?: React.ReactNode;\n rightOptions?: SideOptions;\n toolbar?: React.ReactNode;\n sideType?: SideType;\n sideTypeBreakpoint?: number;\n detectSize?: DetectSizeType;\n onChangeLayoutState?: (layoutState: PanelLayoutState) => void;\n}\n\nexport type WorkspaceLayoutRef = {\n setLeftExpanded: (expanded: boolean) => void;\n setRightExpanded: (expanded: boolean) => void;\n toggleSides: () => void;\n toggleLeft: () => void;\n toggleRight: () => void;\n};\n\nexport type SideOptions = {\n style?: React.CSSProperties;\n className?: string;\n resizable?: boolean;\n /**\n * Accepts a number (px) or % string (e.g. \"50%\").\n * Use % to avoid flicker server-rendering.\n */\n initialSize?: number | string;\n minSize?: number | string;\n maxSize?: number | string;\n};\n\nexport const WorkspaceLayout = forwardRef(function WorkspaceLayout(\n {\n autoSavePrefix,\n left,\n right,\n id,\n className,\n style,\n toolbar,\n children,\n onChangeLayoutState,\n sideType = \"auto\",\n sideTypeBreakpoint = 800,\n detectSize = \"container\",\n leftOptions: {\n minSize: leftMinSize = 200,\n maxSize: leftMaxSize = 500,\n initialSize: leftInitialSize = 280,\n resizable: leftResizable = true,\n style: leftStyle,\n className: leftClassName,\n } = {},\n rightOptions: {\n minSize: rightMinSize = 200,\n maxSize: rightMaxSize = 500,\n initialSize: rightInitialSize = 280,\n resizable: rightResizable = true,\n style: rightStyle,\n className: rightClassName,\n } = {},\n theme,\n }: WorkspaceLayoutProps,\n forwardedRef: React.ForwardedRef<WorkspaceLayoutRef>\n) {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const containerSize = useSize(containerRef);\n const windowSize = useWindowSize();\n\n // If we're in embedded (iframed) mode, use the window size.\n // Otherwise, use the container size (if it's available).\n const parentSize =\n detectSize === \"window\"\n ? windowSize\n : containerSize && containerSize.width > 0\n ? containerSize\n : windowSize;\n\n function getPercentage(size: number | string) {\n return typeof size === \"string\"\n ? parseFloat(size)\n : (size / parentSize.width) * 100;\n }\n\n function clampPercentage(\n value: number,\n min: number | undefined,\n max: number | undefined\n ) {\n let result = value;\n if (min !== undefined) {\n result = Math.max(result, min);\n }\n if (max !== undefined) {\n result = Math.min(result, max);\n }\n return result;\n }\n\n const leftSidebarMinPercentage =\n leftMinSize !== undefined ? getPercentage(leftMinSize) : undefined;\n const rightSidebarMinPercentage =\n rightMinSize !== undefined ? getPercentage(rightMinSize) : undefined;\n const leftSidebarMaxPercentage =\n leftMaxSize !== undefined ? getPercentage(leftMaxSize) : undefined;\n const rightSidebarMaxPercentage =\n rightMaxSize !== undefined ? getPercentage(rightMaxSize) : undefined;\n\n const leftSidebarPercentage = clampPercentage(\n getPercentage(leftInitialSize),\n leftSidebarMinPercentage,\n leftSidebarMaxPercentage\n );\n const rightSidebarPercentage = clampPercentage(\n getPercentage(rightInitialSize),\n rightSidebarMinPercentage,\n rightSidebarMaxPercentage\n );\n\n const leftSidebarRef = useRef<SidebarRef>(null);\n const rightSidebarRef = useRef<SidebarRef>(null);\n\n const [internalLayoutState, setInternalLayoutState] =\n useState<PanelLayoutState | null>(null);\n\n const handleChangeLayoutState = useCallback(\n (state: PanelLayoutState) => {\n setInternalLayoutState(state);\n onChangeLayoutState?.(state);\n },\n [onChangeLayoutState]\n );\n\n useImperativeHandle(forwardedRef, () => ({\n setLeftExpanded: (expanded: boolean) => {\n if (expanded) {\n leftSidebarRef.current?.expand();\n } else {\n leftSidebarRef.current?.collapse();\n }\n },\n setRightExpanded: (expanded: boolean) => {\n if (expanded) {\n rightSidebarRef.current?.expand();\n } else {\n rightSidebarRef.current?.collapse();\n }\n },\n toggleSides: () => {\n const isLeftSidebarExpanded = leftSidebarRef.current?.isExpanded();\n const isRightSidebarExpanded = rightSidebarRef.current?.isExpanded();\n\n if (isLeftSidebarExpanded || isRightSidebarExpanded) {\n leftSidebarRef.current?.collapse();\n rightSidebarRef.current?.collapse();\n } else {\n leftSidebarRef.current?.expand();\n rightSidebarRef.current?.expand();\n }\n },\n toggleLeft: () => {\n const isLeftSidebarExpanded = leftSidebarRef.current?.isExpanded();\n\n if (isLeftSidebarExpanded) {\n leftSidebarRef.current?.collapse();\n } else {\n leftSidebarRef.current?.expand();\n }\n },\n toggleRight: () => {\n const isRightSidebarExpanded = rightSidebarRef.current?.isExpanded();\n\n if (isRightSidebarExpanded) {\n rightSidebarRef.current?.collapse();\n } else {\n rightSidebarRef.current?.expand();\n }\n },\n }));\n\n useKeyboardShortcuts({\n \"Mod-.\": () => {\n const isLeftSidebarExpanded = leftSidebarRef.current?.isExpanded();\n const isRightSidebarExpanded = rightSidebarRef.current?.isExpanded();\n\n if (isLeftSidebarExpanded || isRightSidebarExpanded) {\n leftSidebarRef.current?.collapse();\n rightSidebarRef.current?.collapse();\n } else {\n leftSidebarRef.current?.expand();\n rightSidebarRef.current?.expand();\n }\n },\n });\n\n const centerPanelPercentage =\n 100 -\n (left ? leftSidebarPercentage : 0) -\n (right ? rightSidebarPercentage : 0);\n\n const leftPanel = left ? (\n <PanelInner\n style={leftStyle}\n className={cx(\"bg-sidebar-background flex-col\", leftClassName)}\n >\n {left}\n </PanelInner>\n ) : null;\n\n const rightPanel = right ? (\n <PanelInner\n style={rightStyle}\n className={cx(\"bg-sidebar-background flex-col\", rightClassName)}\n >\n {right}\n </PanelInner>\n ) : null;\n\n const centerPanel = (\n <PanelInner className=\"bg-canvas-background\">{children}</PanelInner>\n );\n\n const leftSidebarOptions: PercentageSidebarOptions = {\n minSize: leftSidebarMinPercentage,\n maxSize: leftSidebarMaxPercentage,\n initialSize: leftSidebarPercentage,\n resizable: leftResizable,\n };\n\n const rightSidebarOptions: PercentageSidebarOptions = {\n minSize: rightSidebarMinPercentage,\n maxSize: rightSidebarMaxPercentage,\n initialSize: rightSidebarPercentage,\n resizable: rightResizable,\n };\n\n const LayoutComponent =\n sideType === \"panel\"\n ? PanelWorkspaceLayout\n : sideType === \"drawer\"\n ? DrawerWorkspaceLayout\n : parentSize.width > sideTypeBreakpoint\n ? PanelWorkspaceLayout\n : DrawerWorkspaceLayout;\n\n // Wait until the container size is available to render the layout.\n // This is to avoid flickering when the layout is initially rendered.\n // If we're in embedded (iframed) mode, we don't need to wait for the container size,\n // because the window size is guaranteed to be available.\n //\n // We could always wait for the container size, but this lets us render\n // sooner in the embedded case.\n const readyToRender =\n detectSize === \"window\" || (containerSize && containerSize.width > 0);\n\n return (\n <div\n ref={containerRef}\n id={id}\n className={cx(\"flex flex-col bg-canvas-background relative\", className)}\n style={style}\n data-theme={theme}\n >\n {toolbar}\n <div className=\"flex flex-row flex-1 relative\">\n {readyToRender && (\n <LayoutComponent\n leftPanel={leftPanel}\n rightPanel={rightPanel}\n centerPanel={centerPanel}\n leftSidebarOptions={leftSidebarOptions}\n rightSidebarOptions={rightSidebarOptions}\n centerPanelPercentage={centerPanelPercentage}\n autoSavePrefix={autoSavePrefix}\n internalLayoutState={internalLayoutState}\n leftSidebarRef={leftSidebarRef}\n rightSidebarRef={rightSidebarRef}\n handleChangeLayoutState={handleChangeLayoutState}\n />\n )}\n </div>\n </div>\n );\n});\n\nconst PanelInner = memo(function PanelInner({\n children,\n style,\n className,\n}: {\n children: React.ReactNode;\n style?: React.CSSProperties;\n className?: string;\n}) {\n return (\n <div style={style} className={cx(\"absolute inset-0 flex\", className)}>\n {children}\n </div>\n );\n});\n","import { useEffect, useState } from \"react\";\n\nexport function useWindowSize() {\n const [size, setSize] = useState(\n typeof window === \"undefined\"\n ? { width: 0, height: 0 }\n : {\n width: window.innerWidth,\n height: window.innerHeight,\n }\n );\n\n useEffect(() => {\n const handleResize = () =>\n setSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return size;\n}\n","import React, { memo, useLayoutEffect, useRef, useState } from \"react\";\nimport {\n EDITOR_PANEL_GROUP_ID,\n LEFT_SIDEBAR_ID,\n RIGHT_SIDEBAR_ID,\n} from \"../../hooks/usePreservePanelSize\";\nimport { Drawer } from \"../Drawer\";\nimport { LayoutProps } from \"./types\";\n\nexport const DrawerWorkspaceLayout = memo(function DrawerWorkspaceLayout({\n leftPanel,\n leftSidebarRef,\n rightPanel,\n rightSidebarRef,\n centerPanel,\n internalLayoutState,\n handleChangeLayoutState,\n}: LayoutProps) {\n const portalContainer = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n\n useLayoutEffect(() => {\n if (mounted) return;\n\n setMounted(true);\n handleChangeLayoutState({\n leftSidebarCollapsed: true,\n rightSidebarCollapsed: true,\n });\n }, [handleChangeLayoutState, mounted]);\n\n const leftSidebarCollapsed =\n internalLayoutState?.leftSidebarCollapsed ?? false;\n const rightSidebarCollapsed =\n internalLayoutState?.rightSidebarCollapsed ?? false;\n\n return (\n <div\n ref={portalContainer}\n id={EDITOR_PANEL_GROUP_ID}\n className=\"flex flex-1 relative focus:outline-none\"\n >\n {leftPanel && (\n <Drawer\n id={LEFT_SIDEBAR_ID}\n ref={leftSidebarRef}\n className=\"flex-1\"\n open={!leftSidebarCollapsed}\n positioning=\"absolute\"\n side=\"left\"\n trigger={null}\n portalContainer={portalContainer.current}\n onOpenChange={(open) => {\n handleChangeLayoutState({\n rightSidebarCollapsed: rightSidebarCollapsed,\n leftSidebarCollapsed: !open,\n });\n }}\n >\n {leftPanel}\n </Drawer>\n )}\n {centerPanel}\n {rightPanel && (\n <Drawer\n id={RIGHT_SIDEBAR_ID}\n ref={rightSidebarRef}\n className=\"flex-1\"\n open={!rightSidebarCollapsed}\n positioning=\"absolute\"\n side=\"right\"\n trigger={null}\n portalContainer={portalContainer.current}\n onOpenChange={(open) => {\n handleChangeLayoutState({\n leftSidebarCollapsed: leftSidebarCollapsed,\n rightSidebarCollapsed: !open,\n });\n }}\n >\n {rightPanel}\n </Drawer>\n )}\n </div>\n );\n});\n","import React, { useLayoutEffect, useRef } from \"react\";\nimport { ImperativePanelGroupHandle } from \"react-resizable-panels\";\nimport { PanelLayoutState } from \"../components/workspace/types\";\nimport { useWindowSize } from \"./useWindowSize\";\n\nexport const EDITOR_PANEL_GROUP_ID = \"editor-panel-group\";\nexport const LEFT_SIDEBAR_ID = \"editor-left-sidebar\";\nexport const RIGHT_SIDEBAR_ID = \"editor-right-sidebar\";\nexport const CONTENT_AREA_ID = \"editor-content-area\";\n\nexport function usePreservePanelSize(\n panelGroupRef: React.RefObject<ImperativePanelGroupHandle | null>,\n setPanelLayoutState?: (state: PanelLayoutState) => void\n) {\n const windowSize = useWindowSize();\n const layoutRef = useRef<\n { windowWidth: number; panelPercentages: number[] } | undefined\n >();\n\n useLayoutEffect(() => {\n const panelGroup = document.querySelector(\n `[data-panel-group-id=\"${EDITOR_PANEL_GROUP_ID}\"]`\n ) as HTMLElement;\n\n function observePanels() {\n const panels = [\n ...panelGroup.querySelectorAll<HTMLElement>(\"[data-panel]\"),\n ];\n\n const panelObserver = new ResizeObserver(() => {\n const layout = {\n windowWidth: panelGroup.offsetWidth,\n panelPercentages: panelGroupRef.current?.getLayout() ?? [],\n };\n layoutRef.current = layout;\n\n const leftSidebar = panels.find(\n (panel) => panel.id === LEFT_SIDEBAR_ID\n );\n const rightSidebar = panels.find(\n (panel) => panel.id === RIGHT_SIDEBAR_ID\n );\n\n setPanelLayoutState?.({\n leftSidebarCollapsed: leftSidebar?.offsetWidth === 0,\n rightSidebarCollapsed: rightSidebar?.offsetWidth === 0,\n });\n });\n\n panels.forEach((panel) => panelObserver.observe(panel));\n\n return () => {\n panelObserver.disconnect();\n };\n }\n\n let disconnectPanelObserver = observePanels();\n\n const panelGroupObserver = new MutationObserver(() => {\n disconnectPanelObserver();\n disconnectPanelObserver = observePanels();\n });\n\n panelGroupObserver.observe(panelGroup, {\n childList: true,\n });\n\n return () => {\n disconnectPanelObserver();\n panelGroupObserver.disconnect();\n };\n }, [panelGroupRef, setPanelLayoutState]);\n\n useLayoutEffect(() => {\n if (!layoutRef.current) return;\n\n // Preserve the pixel values of the left and right sidebar when the window is resized.\n // To do this we convert the percentage values to pixel values based on the old window width,\n // then convert the pixel values to percentage values based on the new window width.\n const {\n windowWidth: oldWindowWidth,\n panelPercentages: oldPanelPercentages,\n } = layoutRef.current;\n\n // Check the types of the values in the array\n if (\n oldPanelPercentages.some(\n (value) => typeof value !== \"number\" || isNaN(value)\n ) ||\n oldWindowWidth === 0\n ) {\n return;\n }\n\n const currentLayout = panelGroupRef.current?.getLayout();\n\n // Ensure we have the same number of panels\n if (!currentLayout || currentLayout.length !== oldPanelPercentages.length) {\n return;\n }\n\n if (currentLayout.length === 3) {\n const leftSidebarWidth = (oldPanelPercentages[0] / 100) * oldWindowWidth;\n const rightSidebarWidth = (oldPanelPercentages[2] / 100) * oldWindowWidth;\n\n const newLeftSidebarPercentage =\n (leftSidebarWidth / windowSize.width) * 100;\n const newRightSidebarPercentage =\n (rightSidebarWidth / windowSize.width) * 100;\n\n const newLayout = [\n newLeftSidebarPercentage,\n 100 - newLeftSidebarPercentage - newRightSidebarPercentage,\n newRightSidebarPercentage,\n ];\n\n try {\n panelGroupRef.current?.setLayout(newLayout);\n } catch (e) {\n console.error(e);\n console.info(\"snapshot on error\", {\n oldWindowWidth,\n oldPanelPercentages,\n newLayout,\n currentLayout,\n });\n }\n } else if (currentLayout.length === 2) {\n // Check if this is a right sidebar layout by looking at the panel IDs\n const panelGroup = document.querySelector(\n `[data-panel-group-id=\"${EDITOR_PANEL_GROUP_ID}\"]`\n );\n const panels = [\n ...(panelGroup?.querySelectorAll<HTMLElement>(\"[data-panel]\") ?? []),\n ];\n const isRightSidebarLayout = panels[1]?.id === RIGHT_SIDEBAR_ID;\n\n if (isRightSidebarLayout) {\n const rightSidebarWidth =\n (oldPanelPercentages[1] / 100) * oldWindowWidth;\n const newRightSidebarPercentage =\n (rightSidebarWidth / windowSize.width) * 100;\n const newLayout = [\n 100 - newRightSidebarPercentage,\n newRightSidebarPercentage,\n ];\n\n try {\n panelGroupRef.current?.setLayout(newLayout);\n } catch (e) {\n console.error(e);\n console.info(\"snapshot on error\", {\n oldWindowWidth,\n oldPanelPercentages,\n newLayout,\n currentLayout,\n });\n }\n } else {\n const leftSidebarWidth =\n (oldPanelPercentages[0] / 100) * oldWindowWidth;\n const newLeftSidebarPercentage =\n (leftSidebarWidth / windowSize.width) * 100;\n const newLayout = [\n newLeftSidebarPercentage,\n 100 - newLeftSidebarPercentage,\n ];\n\n try {\n panelGroupRef.current?.setLayout(newLayout);\n } catch (e) {\n console.error(e);\n console.info(\"snapshot on error\", {\n oldWindowWidth,\n oldPanelPercentages,\n newLayout,\n currentLayout,\n });\n }\n }\n }\n }, [panelGroupRef, windowSize.width]);\n}\n","import React, { memo, useRef } from \"react\";\nimport {\n ImperativePanelGroupHandle,\n ImperativePanelHandle,\n Panel,\n PanelGroup,\n PanelResizeHandle,\n} from \"react-resizable-panels\";\nimport {\n CONTENT_AREA_ID,\n EDITOR_PANEL_GROUP_ID,\n LEFT_SIDEBAR_ID,\n RIGHT_SIDEBAR_ID,\n usePreservePanelSize,\n} from \"../../hooks/usePreservePanelSize\";\nimport { LayoutProps } from \"./types\";\n\nexport const PanelWorkspaceLayout = memo(function PanelWorkspaceLayout({\n leftPanel,\n rightPanel,\n centerPanel,\n leftSidebarOptions,\n rightSidebarOptions,\n centerPanelPercentage,\n autoSavePrefix,\n internalLayoutState,\n leftSidebarRef,\n rightSidebarRef,\n handleChangeLayoutState,\n}: LayoutProps) {\n const panelGroupRef = useRef<ImperativePanelGroupHandle>(null);\n\n usePreservePanelSize(panelGroupRef, handleChangeLayoutState);\n\n return (\n <PanelGroup\n ref={panelGroupRef}\n id={EDITOR_PANEL_GROUP_ID}\n className=\"flex-1\"\n direction=\"horizontal\"\n autoSaveId={\n autoSavePrefix\n ? `${autoSavePrefix}--${EDITOR_PANEL_GROUP_ID}`\n : undefined\n }\n >\n {leftPanel && (\n <>\n <Panel\n id={LEFT_SIDEBAR_ID}\n className=\"relative\"\n order={1}\n ref={leftSidebarRef as React.RefObject<ImperativePanelHandle>}\n defaultSize={leftSidebarOptions.initialSize}\n minSize={leftSidebarOptions.minSize}\n maxSize={\n leftSidebarOptions.maxSize ??\n (!leftSidebarOptions.resizable\n ? leftSidebarOptions.initialSize\n : undefined)\n }\n collapsible\n >\n {internalLayoutState?.leftSidebarCollapsed ? null : leftPanel}\n </Panel>\n <PanelResizeHandle className=\"cursor-col-resize w-px h-full bg-divider\" />\n </>\n )}\n <Panel\n id={CONTENT_AREA_ID}\n order={2}\n defaultSize={centerPanelPercentage}\n minSize={10}\n className=\"flex relative\"\n >\n {centerPanel}\n </Panel>\n {rightPanel && (\n <>\n <PanelResizeHandle className=\"cursor-col-resize w-px h-full bg-divider\" />\n <Panel\n id={RIGHT_SIDEBAR_ID}\n className=\"relative\"\n order={3}\n ref={rightSidebarRef as React.RefObject<ImperativePanelHandle>}\n minSize={rightSidebarOptions.minSize}\n defaultSize={rightSidebarOptions.initialSize}\n maxSize={\n rightSidebarOptions.maxSize ??\n (!rightSidebarOptions.resizable\n ? rightSidebarOptions.initialSize\n : undefined)\n }\n collapsible\n >\n {internalLayoutState?.rightSidebarCollapsed ? null : rightPanel}\n </Panel>\n </>\n )}\n </PanelGroup>\n );\n});\n","import { useDesignSystemConfiguration } from '../contexts/DesignSystemConfiguration';\n\nexport function usePlatform() {\n return useDesignSystemConfiguration().platform;\n}\n\n/**\n * Either ctrl or meta, depending on the platform\n */\nexport function usePlatformModKey(): 'ctrlKey' | 'metaKey' {\n const platform = useDesignSystemConfiguration().platform;\n return platform === 'mac' ? 'metaKey' : 'ctrlKey';\n}\n","import { useState, useEffect } from \"react\";\n\n/** @default light */\nexport type UseThemeReturnType = \"dark\" | \"light\";\n\n/**\n * Hook to get the current theme of the app via the `data-theme` attribute on the body element.\n * @returns The current theme.\n */\nexport function useTheme() {\n const [theme, setTheme] = useState<UseThemeReturnType>(\"light\");\n\n const checkTheme = () => {\n const currentTheme = document.body.getAttribute(\"data-theme\");\n switch (currentTheme) {\n case \"dark\":\n setTheme(\"dark\");\n break;\n case \"light\":\n setTheme(\"light\");\n break;\n }\n };\n\n useEffect(() => {\n checkTheme();\n\n // Setup observer for theme changes\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === \"attributes\" &&\n mutation.attributeName === \"data-theme\"\n ) {\n checkTheme();\n }\n });\n });\n\n // Observe body element for theme changes\n observer.observe(document.body, {\n attributes: true,\n attributeFilter: [\"data-theme\"],\n });\n\n return () => observer.disconnect();\n }, []);\n\n return theme;\n}\n","export const size = {\n medium: '800px',\n large: '1280px',\n xlarge: '1550px',\n xxlarge: '1680px',\n};\n\nexport const mediaQuery = {\n small: `@media (max-width: ${size.medium})`,\n medium: `@media (max-width: ${size.large}) and (min-width: ${size.medium})`,\n large: `@media (max-width: ${size.xlarge}) and (min-width: ${size.large})`,\n xlarge: `@media (min-width: ${size.xlarge})`,\n};\n","import { MenuItem, SeparatorItem } from \"../components/internal/Menu\";\n\nexport type Optional<T> = T | false | null | undefined;\n\nfunction withSeparators<T extends string>(\n elements: MenuItem<T>[][],\n separator: SeparatorItem\n): MenuItem<T>[] {\n const result: MenuItem<T>[] = [];\n\n for (let i = 0; i < elements.length; i++) {\n result.push(...elements[i]);\n\n if (i !== elements.length - 1) {\n result.push(separator);\n }\n }\n\n return result;\n}\n\nexport type MenuConfig<T extends string> = Optional<Optional<MenuItem<T>>[]>[];\n\nexport function createSectionedMenu<T extends string>(\n ...sections: MenuConfig<T>\n): MenuItem<T>[] {\n const nonEmptySections = sections\n .flatMap((section) => (section ? [section] : []))\n .map((section) => section.flatMap((item) => (item ? [item] : [])))\n .filter((section) => section.length > 0);\n\n return withSeparators(nonEmptySections, {\n type: \"separator\",\n }).flat();\n}\n","import { isDeepEqual } from \"@noya-app/noya-utils\";\nimport {\n defaultAcceptsDrop,\n RelativeDropPosition,\n} from \"../components/sorting/sorting\";\n\ntype MoveOptions = {\n paths: number[][];\n to: number[];\n};\n\nexport type MoveTreeItemOptions<T> = {\n root: T;\n move: (root: T, options: MoveOptions) => T;\n position: RelativeDropPosition;\n sourceIndexPath: number[];\n targetIndexPath: number[];\n};\n\nexport function moveTreeItem<T>({\n root,\n move,\n position,\n sourceIndexPath,\n targetIndexPath,\n}: MoveTreeItemOptions<T>): T {\n switch (position) {\n case \"above\": {\n return move(root, {\n paths: [sourceIndexPath],\n to: targetIndexPath,\n });\n }\n case \"below\": {\n return move(root, {\n paths: [sourceIndexPath],\n to: [...targetIndexPath.slice(0, -1), targetIndexPath.at(-1)! + 1],\n });\n }\n case \"inside\": {\n return move(root, {\n paths: [sourceIndexPath],\n to: [...targetIndexPath, 1000],\n });\n }\n }\n}\n\nexport type AcceptsDropOptions = {\n sourceIndexPath: number[];\n targetIndexPath: number[];\n position: RelativeDropPosition;\n\n /**\n * Whether to allow dropping the source item within the same parent as the target item.\n */\n allowSiblings: boolean;\n\n /**\n * Whether to allow dropping the source item within itself or one of its descendants.\n */\n allowRecursion: boolean;\n};\n\nexport function acceptsDrop({\n sourceIndexPath,\n targetIndexPath,\n position,\n allowSiblings,\n allowRecursion,\n}: AcceptsDropOptions): boolean {\n if (!allowRecursion) {\n const targetIsDescendantOfSource = isDeepEqual(\n sourceIndexPath,\n targetIndexPath.slice(0, sourceIndexPath.length)\n );\n\n if (targetIsDescendantOfSource) return false;\n }\n\n const areSiblings = isDeepEqual(\n sourceIndexPath.slice(0, -1),\n targetIndexPath.slice(0, -1)\n );\n\n if (areSiblings && position !== \"inside\") {\n if (!allowSiblings) {\n return false;\n }\n\n return defaultAcceptsDrop({\n sourceIndex: sourceIndexPath.at(-1)!,\n targetIndex: targetIndexPath.at(-1)!,\n position,\n sourceListId: \"\",\n targetListId: \"\",\n });\n }\n\n return true;\n}\n","import { Sketch } from '@noya-app/noya-file-format';\n\nexport const SUPPORTED_IMAGE_UPLOAD_TYPES = [\n 'image/png' as const,\n 'image/jpeg' as const,\n 'image/webp' as const,\n 'application/pdf' as const,\n 'image/svg+xml' as const,\n];\n\nexport const SUPPORTED_CANVAS_UPLOAD_TYPES = [\n ...SUPPORTED_IMAGE_UPLOAD_TYPES,\n '' as const,\n];\n\nexport type SupportedImageUploadType =\n (typeof SUPPORTED_IMAGE_UPLOAD_TYPES)[number];\n\nexport type SupportedCanvasUploadType =\n (typeof SUPPORTED_CANVAS_UPLOAD_TYPES)[number];\n\nexport type SketchPattern = {\n // This _class doesn't exist in Sketch, but it's convenient in `switch`\n // statements to be able to reference _class.\n _class: 'pattern';\n image?: Sketch.FileRef | Sketch.DataRef;\n patternFillType: Sketch.PatternFillType;\n patternTileScale: number;\n};\n","import { round } from \"@noya-app/noya-utils\";\nimport * as React from \"react\";\nimport { InputField } from \"./InputField\";\nimport { LabeledField } from \"./LabeledField\";\n\nexport type SetNumberMode = \"replace\" | \"adjust\";\n\nexport function getNewValue(\n value: number,\n mode: SetNumberMode,\n delta?: number\n) {\n return delta === undefined\n ? value\n : mode === \"replace\"\n ? delta\n : value + delta;\n}\n\nexport type DimensionValue = number | undefined;\n\ninterface Props {\n id?: string;\n value: DimensionValue;\n onSetValue: (value: number, mode: SetNumberMode) => void;\n label?: string;\n size?: number;\n placeholder?: string;\n disabled?: boolean;\n trigger?: \"change\" | \"submit\";\n}\n\nexport const DimensionInput = React.memo(function DimensionInput({\n id,\n value,\n onSetValue,\n label,\n size,\n placeholder = \"multi\",\n disabled,\n trigger = \"submit\",\n}: Props) {\n const handleNudgeValue = React.useCallback(\n (value: number) => onSetValue(value, \"adjust\"),\n [onSetValue]\n );\n\n const handleSetValue = React.useCallback(\n (value: number) => onSetValue(value, \"replace\"),\n [onSetValue]\n );\n\n return (\n <LabeledField label={label} labelPosition=\"inset\">\n <InputField.Root id={id} width={size}>\n <InputField.NumberInput\n value={value === undefined ? value : round(value, 2)}\n placeholder={value === undefined ? placeholder : undefined}\n onNudge={handleNudgeValue}\n disabled={disabled}\n {...(trigger === \"change\"\n ? { onChange: handleSetValue }\n : { onSubmit: handleSetValue })}\n />\n </InputField.Root>\n </LabeledField>\n );\n});\n","import React, {\n ForwardedRef,\n forwardRef,\n LabelHTMLAttributes,\n memo,\n ReactNode,\n} from \"react\";\nimport { Spacer } from \"./Spacer\";\nimport { textStyles } from \"./Text\";\nimport { cx } from \"../utils/classNames\";\n\nexport const Section = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cx(`flex-none flex flex-col `, className)}\n {...props}\n />\n));\n\nexport const SectionHeader = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cx(`flex items-center `, className)} {...props} />\n));\n\ntype TitleTextStyle = \"small\" | \"heading5\" | \"heading4\" | \"heading3\";\n\nexport const Title = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n $textStyle?: TitleTextStyle;\n }\n>(({ className, $textStyle, ...props }, ref) => (\n <div\n ref={ref}\n className={cx(\n `flex select-none ${$textStyle ? `${textStyles[$textStyle]} text-text` : \"font-sans text-label uppercase text-text-muted font-bold\"} `,\n className\n )}\n {...props}\n />\n));\n\nexport const Row = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cx(`flex-1 flex flex-row items-center `, className)}\n {...props}\n />\n));\n\nexport const Column = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cx(`flex-1 flex flex-col gap-1 `, className)}\n {...props}\n />\n));\n\nexport const Checkbox = forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement>\n>(({ className, ...props }, ref) => (\n <input\n ref={ref}\n type=\"checkbox\"\n className={cx(`m-0 focus:z-interactable `, className)}\n {...props}\n />\n));\n\nexport const Text = forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cx(`font-sans text-heading5 font-normal `, className)}\n {...props}\n />\n));\n\nexport const VerticalSeparator = () => (\n <Spacer.Vertical size=\"inspector-v-separator\" />\n);\n\nexport const HorizontalSeparator = () => (\n <Spacer.Horizontal size=\"inspector-h-separator\" />\n);\n\n// const SliderRowLabel = forwardRef<\n// HTMLSpanElement,\n// React.HTMLAttributes<HTMLSpanElement>\n// >(({ className, ...props }, ref) => (\n// <span\n// ref={ref}\n// className={`font-sans text-heading5 font-normal text-text-muted -mb-[6px] `, className}\n// {...props}\n// />\n// ));\n\nexport const RowLabel = forwardRef(function RowLabel(\n {\n className,\n $textStyle,\n ...props\n }: LabelHTMLAttributes<HTMLLabelElement> & {\n $textStyle?: TitleTextStyle | \"label\";\n },\n ref: ForwardedRef<HTMLLabelElement>\n) {\n return (\n <label\n ref={ref}\n className={cx(\n `font-sans text-label uppercase flex items-center leading-[19px] font-bold text-text-subtle z-label ${$textStyle && textStyles[$textStyle]} `,\n className\n )}\n {...props}\n />\n );\n});\n\ninterface LabeledRowProps {\n id?: string;\n children: ReactNode;\n label: ReactNode;\n labelTextStyle?: TitleTextStyle;\n right?: ReactNode;\n className?: string;\n}\n\nexport const LabeledRow = memo(function LabeledRow({\n id,\n children,\n label,\n labelTextStyle,\n right,\n className,\n}: LabeledRowProps) {\n return (\n <Row id={id} className={className}>\n <Column>\n <RowLabel $textStyle={labelTextStyle}>\n {label}\n {right && <Spacer.Horizontal />}\n {right}\n </RowLabel>\n <Row>{children}</Row>\n </Column>\n </Row>\n );\n});\n\n// interface LabeledSliderRowProps {\n// children: ReactNode;\n// label: string;\n// }\n\n// export const LabeledSliderRow = memo(function LabeledSliderRow({\n// children,\n// label,\n// }: LabeledSliderRowProps) {\n// return (\n// <Row>\n// <Column>\n// <SliderRowLabel>{label}</SliderRowLabel>\n// <Row>{children}</Row>\n// </Column>\n// </Row>\n// );\n// });\n","import React from \"react\";\nimport { cssVarNames, cssVars } from \"../theme\";\nimport { Divider, DividerVertical } from \"./Divider\";\nimport { Spacer } from \"./Spacer\";\n\nexport interface BaseToolbarProps {\n children?: React.ReactNode;\n left?: React.ReactNode;\n right?: React.ReactNode;\n logo?: React.ReactNode;\n showDivider?: boolean;\n}\n\nconst toolbarStyle = {\n [cssVarNames.colors.inputBackground]: \"transparent\",\n};\n\nexport function BaseToolbar({\n children,\n left,\n right,\n logo,\n showDivider = true,\n}: BaseToolbarProps) {\n return (\n <div className=\"flex flex-col\" style={toolbarStyle}>\n <div\n className=\"flex items-center pr-2.5 bg-sidebar-background flex-none relative @container/toolbar\"\n style={{\n flex: `0 0 ${cssVars.spacing.toolbarHeight}`,\n }}\n >\n {logo && (\n <>\n {logo}\n <DividerVertical />\n </>\n )}\n <Spacer.Horizontal size={10} />\n {left && (\n <>\n <div className=\"flex gap-toolbar-separator\">{left}</div>\n <Spacer.Horizontal size={10} />\n </>\n )}\n <div className=\"flex items-center justify-center text-text-muted pointer-events-none @2xl/toolbar:absolute inset-0\">\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n pointerEvents: \"all\",\n }}\n >\n {children}\n </div>\n </div>\n <Spacer.Horizontal />\n <Spacer.Horizontal size={10} />\n <div className=\"flex gap-toolbar-separator\">{right}</div>\n </div>\n {showDivider && <Divider variant=\"strong\" />}\n </div>\n );\n}\n","import { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport React, { ComponentProps } from \"react\";\n\nimport { memoGeneric } from \"@noya-app/react-utils\";\nimport { BaseToolbar } from \"./BaseToolbar\";\nimport { Button } from \"./Button\";\nimport { DividerVertical } from \"./Divider\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport {\n getKeyboardShortcutsForMenuItems,\n isSelectableMenuItem,\n MenuItem,\n SelectableMenuItem,\n SubMenuItem,\n} from \"./internal/Menu\";\nimport { Tooltip } from \"./Tooltip\";\n\nconst iconButtonStyle = {\n height: 27,\n width: 27,\n minWidth: 27,\n};\n\nexport const ToolbarMenuDropdown = memoGeneric(function ToolbarMenuDropdown<\n T extends string,\n>({\n item,\n onSelectMenuItem,\n}: {\n item: SubMenuItem<T>;\n onSelectMenuItem?: (value: T) => void;\n}) {\n const [open, setOpen] = React.useState(false);\n\n return (\n <DropdownMenu\n open={open}\n onOpenChange={setOpen}\n items={item.items}\n onSelect={(value) => {\n if (onSelectMenuItem && value) {\n onSelectMenuItem(value);\n }\n }}\n >\n <Button\n disabled={item.disabled}\n active={item.checked || open}\n icon={item.icon}\n iconRight=\"DropdownChevronIcon\"\n >\n {item.title}\n </Button>\n </DropdownMenu>\n );\n});\n\nexport const ToolbarMenuButton = memoGeneric(function ToolbarMenuButton<\n T extends string,\n>({\n item,\n onSelectMenuItem,\n as,\n}: {\n item: SelectableMenuItem<T>;\n onSelectMenuItem?: (value: T) => void;\n as?: ComponentProps<typeof Button>[\"as\"];\n}) {\n const content = (\n <Button\n as={as}\n disabled={item.disabled}\n active={item.checked}\n icon={item.icon}\n style={item.icon && !item.title ? iconButtonStyle : undefined}\n {...(as === \"a\" && { href: item.value })}\n onClick={() => {\n if (onSelectMenuItem && item.value) {\n onSelectMenuItem(item.value);\n }\n }}\n >\n {item.title}\n </Button>\n );\n\n return item.tooltip ? (\n <Tooltip sideOffset={10} content={item.tooltip}>\n {content}\n </Tooltip>\n ) : (\n content\n );\n});\n\nexport const ToolbarMenuItem = memoGeneric(function ToolbarMenuItem<\n T extends string,\n>({\n item,\n onSelectMenuItem,\n buttonAs,\n}: {\n item: MenuItem<T>;\n onSelectMenuItem?: (value: T) => void;\n buttonAs?: ComponentProps<typeof Button>[\"as\"];\n}) {\n if (item.type === \"sectionHeader\") return null;\n\n if (item.type === \"separator\") {\n return <DividerVertical overflow={4} />;\n }\n\n if (isSelectableMenuItem(item)) {\n return (\n <ToolbarMenuButton\n item={item}\n onSelectMenuItem={onSelectMenuItem}\n as={buttonAs}\n />\n );\n }\n\n return (\n <ToolbarMenuDropdown item={item} onSelectMenuItem={onSelectMenuItem} />\n );\n});\n\nexport const ToolbarMenu = memoGeneric(function ToolbarMenu<T extends string>({\n items,\n onSelectMenuItem,\n buttonAs,\n}: {\n items: MenuItem<T>[];\n onSelectMenuItem?: (value: T) => void;\n buttonAs?: ComponentProps<typeof Button>[\"as\"];\n}) {\n return (\n <>\n {items.map((item, i) => {\n return (\n <ToolbarMenuItem\n key={i}\n item={item}\n onSelectMenuItem={onSelectMenuItem}\n buttonAs={buttonAs}\n />\n );\n })}\n </>\n );\n});\n\nexport interface ToolbarProps<T extends string = string> {\n children?: React.ReactNode;\n logo?: React.ReactNode;\n leftMenuItems?: MenuItem<T>[];\n rightMenuItems?: MenuItem<T>[];\n onSelectMenuItem?: (value: T) => void;\n /** Whether to bind keyboard shortcuts for menu items. @default true */\n shouldBindKeyboardShortcuts?: boolean;\n}\n\nexport function Toolbar<T extends string = string>({\n children,\n logo,\n leftMenuItems = [],\n rightMenuItems = [],\n onSelectMenuItem,\n shouldBindKeyboardShortcuts = true,\n}: ToolbarProps<T>) {\n // Register keyboard shortcuts for all menu items\n const allMenuItems = React.useMemo(\n () => [...leftMenuItems, ...rightMenuItems],\n [leftMenuItems, rightMenuItems]\n );\n\n useKeyboardShortcuts(\n React.useMemo(\n () =>\n onSelectMenuItem && shouldBindKeyboardShortcuts\n ? getKeyboardShortcutsForMenuItems(allMenuItems, onSelectMenuItem)\n : {},\n [allMenuItems, onSelectMenuItem, shouldBindKeyboardShortcuts]\n )\n );\n\n return (\n <BaseToolbar\n logo={logo}\n left={\n leftMenuItems.length > 0 && (\n <div className=\"flex gap-2\">\n <ToolbarMenu\n items={leftMenuItems}\n onSelectMenuItem={onSelectMenuItem}\n />\n </div>\n )\n }\n right={\n rightMenuItems.length > 0 && (\n <div className=\"flex gap-2\">\n <ToolbarMenu\n items={rightMenuItems}\n onSelectMenuItem={onSelectMenuItem}\n />\n </div>\n )\n }\n >\n {children}\n </BaseToolbar>\n );\n}\n"],"mappings":"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A;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAC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","names":["React","size","AutoSizer","SingleDimensionAutoSizer","React","useCallback","useRef","useState","memo","memo","FileDropTarget","useRef","useCallback","React","useCallback","useState","defaultValue","value","useRef","isDeepEqual","useCallback","useState","useEffect","useState","useEffect","useRef","React","useCallback","useLayoutEffect","useRef","useRef","useCallback","useCallback","useCallback","useMemo","useState","useCallback","useEffect","useMemo","useState","defaultValue","useEffect","useState","useRef","useCallback","useLayoutEffect","useRef","noop","useEffect","useState","useEffect","useState","React","useMemo","React","useMemo","React","PortalScopeProvider","React","memo","React","React","React","React","forwardRef","useCallback","useMemo","tailwindConfig","React","React","size","Spacer","React","React","forwardRef","forwardRef","Text","style","React","Tooltip","forwardRef","Button","style","size","useMemo","React","useCallback","IconButton","size","style","React","React","createContext","useCallback","useContext","useMemo","useRef","useState","React","forwardRef","useRef","forwardRef","React","Dialog","style","useRef","FullscreenDialog","React","createContext","forwardRef","memo","useCallback","useContext","useId","useMemo","useState","React","size","React","forwardRef","useCallback","useEffect","useLayoutEffect","useRef","useState","createContext","useContext","useEffect","forwardRef","ReadOnlyTextInput","React","ControlledTextInput","useCallback","SubmittableTextInput","useRef","useState","useLayoutEffect","useEffect","React","forwardRef","memo","memo","forwardRef","Label","React","React","useEffect","useRef","React","OpenPortalsProvider","useRef","useEffect","React","createContext","useContext","noop","InputFieldDropdownMenu","React","memo","forwardRef","InputFieldButton","style","size","useCallback","useMemo","InputFieldInput","useState","value","useId","isFocused","InputField","createContext","DialogProvider","useState","useCallback","useRef","style","children","React","useMemo","isOpen","InputField","contents","useContext","React","createContext","useContext","useMemo","useState","windows","DesignSystemConfigurationProvider","elements","separator","React","memo","KeyboardShortcut","separator","SectionHeader","React","React","useCallback","React","Components","useCallback","Components","React","React","DropdownMenuRoot","useMemo","ActionMenu","style","useMemo","React","React","ActivityIndicator","size","React","forwardRef","useMemo","size","React","style","useMemo","forwardRef","Avatar","OverflowAvatar","AvatarStack","React","forwardRef","Logo","React","forwardRef","React","forwardRef","memo","useCallback","useEffect","useRef","useRef","useEffect","memo","forwardRef","TextArea","useCallback","value","React","TextAreaRow","React","forwardRef","style","isDeepEqual","React","Children","isValidElement","useCallback","useEffect","useLayoutEffect","useRef","useState","skipInitialAnimation","React","style","React","forwardRef","React","forwardRef","BreadcrumbText","React","React","Checkbox","style","React","forwardRef","memo","React","hoverProps","memo","forwardRef","Chip","style","size","React","React","React","useImperativeHandle","useRef","useState","React","forwardRef","memo","useCallback","useEffect","useImperativeHandle","useRef","useState","React","memo","forwardRef","EditableText","style","useState","useEffect","useRef","useCallback","useImperativeHandle","InputField","value","React","createContext","forwardRef","memo","useCallback","useContext","useMemo","useKeyboardShortcuts","React","useCallback","useMemo","Components","React","useMemo","useKeyboardShortcuts","useCallback","React","ScrollArea","React","GridViewItem","style","useContext","useCallback","createContext","forwardRef","GridViewRoot","useMemo","styles","title","GridView","memo","size","Grid","useState","useImperativeHandle","useRef","React","action","props","React","memo","useImperativeHandle","useRef","useState","composeRefs","React","Children","createContext","forwardRef","isValidElement","memo","useCallback","useContext","useImperativeHandle","useLayoutEffect","useMemo","useRef","React","React","React","useMemo","createPortal","useMemo","createPortal","React","acceptsDrop","SortableItemContext","acceptsDrop","id","Sortable_","createContext","React","useRef","useLayoutEffect","InputField","forwardRef","style","ListViewRow","useContext","useCallback","useMemo","composeRefs","memo","VirtualizedListRow","VirtualizedListInner","size","useImperativeHandle","ListViewRootInner","acceptsDrop","isValidElement","ChildrenListViewInner","Children","SimpleListViewInner","ListView","React","useCallback","useContext","TreeRow","useContext","useCallback","React","TreeView","emptyArray","List","size","acceptsDrop","useState","useRef","useImperativeHandle","React","action","memo","DetailContainer","Collection","React","React","forwardRef","forwardRef","ColorSwatch","size","style","React","React","useMemo","size","style","styles","useMemo","React","DropdownChevronIcon","React","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","range","React","ComboboxMenu","style","React","Combobox","size","style","useMemo","useRef","useState","useEffect","useCallback","useImperativeHandle","React","InputField","DropdownChevronIcon","React","memo","getCurrentPlatform","React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","React","memo","memo","Divider","style","React","DividerVertical","forwardRef","SearchCompletionMenu","useState","React","useEffect","useMemo","useCallback","search","state","index","getCurrentPlatform","useRef","useImperativeHandle","InputField","memo","CommandPalette","React","size","React","React","React","useCallback","useState","DraggableMenuButton","style","useState","useCallback","React","Dialog","React","useImperativeHandle","Drawer","style","useImperativeHandle","React","React","React","React","FileExplorerCollection","size","React","forwardRef","memo","GradientType","ColorSpace","FillType","BorderPosition","BlendMode","LineCapStyle","LineJoinStyle","BlurType","PatternFillType","MarkerType","WindingRule","TextVerticalAlignment","TextHorizontalAlignment","TextTransform","UnderlineStyle","BooleanOperation","ExportFileFormat","ExportFormatNamingScheme","VisibleScaleType","AnimationType","LayerListExpanded","ResizeType","InferredLayoutAxis","InferredLayoutAnchor","PointsRadiusBehaviour","CurveMode","LineSpacingBehaviour","TextBehaviour","BundleId","NumericalBool","ClassValue","React","React","ImageDataProvider","useLayoutEffect","useMemo","Background","background","PatternPreviewBackground","size","ColorPreviewBackground","GradientPreviewBackground","FillPreviewBackground","forwardRef","React","memo","FillInputField","React","useCallback","useRef","useState","styles","size","style","rgbaToHsva","React","GradientPicker","rgbaToHsva","value","React","forwardRef","memo","InspectorContainer","style","React","LabeledElementView","React","memo","useMemo","React","memo","LabeledField","style","useMemo","React","React","memo","useMemo","languageIds","fileExtensions","fileNames","memo","MediaThumbnail","size","useMemo","React","React","forwardRef","memo","useMemo","memo","forwardRef","Message","styles","useMemo","React","React","React","React","React","memo","useMemo","style","ToggleGroupPrimitive","React","createContext","forwardRef","useCallback","useContext","useMemo","createContext","forwardRef","SegmentedControlItem","useContext","React","SegmentedControl","style","useMemo","useCallback","value","React","memo","useMemo","createPortal","SelectionToolbarContainer","size","DropdownChevronIcon","React","useMemo","useState","SelectMenuTrigger","style","React","DropdownChevronIcon","Components","SelectMenu","useState","open","useMemo","React","memo","useCallback","useMemo","insetEndStyles","memo","Slider","style","useMemo","useCallback","arrayValue","React","React","Provider","React","Switch","style","React","memo","useMemo","memo","UserPointerContainer","style","React","UserNameTag","size","UserPointer","useMemo","useKeyboardShortcuts","React","forwardRef","memo","useCallback","useImperativeHandle","useRef","useState","useEffect","useState","size","React","memo","useLayoutEffect","useRef","useState","useLayoutEffect","useRef","useRef","useLayoutEffect","memo","DrawerWorkspaceLayout","useRef","useState","useLayoutEffect","React","React","memo","useRef","memo","PanelWorkspaceLayout","useRef","React","forwardRef","WorkspaceLayout","style","React","size","useRef","useState","useCallback","useImperativeHandle","useKeyboardShortcuts","memo","PanelInner","useState","useEffect","elements","separator","isDeepEqual","isDeepEqual","React","DimensionInput","size","value","InputField","Checkbox","Section","SectionHeader","Text","Title","React","forwardRef","memo","Section","forwardRef","React","SectionHeader","Title","Checkbox","Text","RowLabel","memo","LabeledRow","React","React","useKeyboardShortcuts","React","ToolbarMenuDropdown","React","ToolbarMenuButton","ToolbarMenuItem","ToolbarMenu","useKeyboardShortcuts"]}
|
|
1
|
+
{"version":3,"sources":["../../noya-react-utils/src/components/AutoSizer.tsx","../../noya-react-utils/src/hooks/useSize.ts","../../noya-react-utils/src/components/FileDropTarget.tsx","../../noya-react-utils/src/hooks/useFileDropTarget.ts","../../noya-react-utils/src/utils/reactGenerics.ts","../../noya-react-utils/src/hooks/useControlledOrUncontrolled.ts","../../noya-react-utils/src/hooks/useDeepArray.ts","../../noya-react-utils/src/hooks/useDeepState.ts","../../noya-react-utils/src/hooks/useFetch.ts","../../noya-react-utils/src/hooks/useIsMounted.ts","../../noya-react-utils/src/hooks/useIsomorphicLayoutEffect.ts","../../noya-react-utils/src/hooks/useLateReference.ts","../../noya-react-utils/src/hooks/useLazyValue.ts","../../noya-react-utils/src/hooks/useMergeRefs.ts","../../noya-react-utils/src/utils/assignRef.ts","../../noya-react-utils/src/hooks/useMutableState.ts","../../noya-react-utils/src/hooks/usePersistentState.ts","../../noya-react-utils/src/hooks/usePixelRatio.ts","../../noya-react-utils/src/hooks/useShallowArray.ts","../../noya-react-utils/src/hooks/useStableCallback.ts","../../noya-react-utils/src/hooks/useSystemColorScheme.ts","../../noya-react-utils/src/hooks/useUrlHashParameters.ts","../../emitter/src/index.ts","../../noya-react-utils/src/utils/ClientStorage.ts","../src/components/ActionMenu.tsx","../src/theme/index.ts","../src/theme/themeUtils.ts","../src/components/DropdownMenu.tsx","../src/contexts/PortalScopeContext.tsx","../src/components/internal/Menu.tsx","../src/contexts/DesignSystemConfiguration.tsx","../src/components/Toast.tsx","../src/components/IconButton.tsx","../src/components/Button.tsx","../src/utils/classNames.ts","../src/components/Icons.tsx","../src/components/Spacer.tsx","../src/components/Tooltip.tsx","../src/components/Text.tsx","../src/contexts/DialogContext.tsx","../src/components/Dialog.tsx","../src/components/InputField.tsx","../src/hooks/useLabel.ts","../src/utils/handleNudge.ts","../src/utils/inputs.ts","../src/components/internal/TextInput.tsx","../src/contexts/GlobalInputBlurContext.tsx","../src/components/Label.tsx","../src/components/Popover.tsx","../src/contexts/OpenPortalsContext.tsx","../src/contexts/FloatingWindowContext.tsx","../src/utils/withSeparatorElements.ts","../src/components/internal/MenuViewport.tsx","../src/components/internal/SelectItem.tsx","../src/components/ActivityIndicator.tsx","../src/components/Avatar.tsx","../src/utils/colorFromString.ts","../src/components/NoyaLogo.tsx","../src/components/ai-assistant/AIAssistantLayout.tsx","../src/components/TextArea.tsx","../src/components/AnimatePresence.tsx","../src/components/Banner.tsx","../src/components/Breadcrumbs.tsx","../src/components/Checkbox.tsx","../src/components/Chip.tsx","../src/hooks/useHover.ts","../src/components/Collection.tsx","../src/components/Grid.tsx","../src/utils/selection.ts","../src/components/EditableText.tsx","../src/components/GridView.tsx","../src/components/ContextMenu.tsx","../src/components/ScrollArea.tsx","../src/components/List.tsx","../src/components/ListView.tsx","../src/hooks/mergeEventHandlers.ts","../src/components/sorting/Sortable.tsx","../src/components/sorting/DragRegistration.tsx","../src/components/sorting/SharedDragProvider.tsx","../src/components/sorting/sorting.ts","../src/components/TreeView.tsx","../src/components/ColorSwatch.tsx","../src/components/ColorSwatchControl.tsx","../src/components/Combobox.tsx","../src/utils/combobox.ts","../src/utils/fuzzyScorer.ts","../src/components/ComboboxMenu.tsx","../src/components/CommandPalette.tsx","../src/components/SearchCompletionMenu.tsx","../src/components/Divider.tsx","../src/components/connected-users-menu/ConnectedUsersMenuLayout.tsx","../src/components/DraggableMenuButton.tsx","../src/components/Drawer.tsx","../src/components/Fade.tsx","../src/components/file-explorer/FileExplorerLayout.tsx","../src/components/FillInputField.tsx","../../noya-file-format/src/types.ts","../src/components/FillPreviewBackground.tsx","../src/contexts/ImageDataContext.tsx","../src/hooks/useObjectURL.ts","../src/utils/sketchColor.ts","../src/utils/getGradientBackground.tsx","../src/components/FloatingWindow.tsx","../src/components/GradientPicker.tsx","../src/components/InspectorContainer.tsx","../src/components/LabeledElementView.tsx","../src/components/LabeledField.tsx","../src/hooks/useIndent.ts","../src/components/MediaThumbnail.tsx","../src/components/catppuccin/fileIcons.ts","../src/components/Message.tsx","../src/components/pipeline/PipelineResultLayout.tsx","../src/components/Progress.tsx","../src/components/Section.tsx","../src/components/SegmentedControl.tsx","../src/components/SelectionToolbar.tsx","../src/components/SelectMenu.tsx","../src/components/Slider.tsx","../src/components/sorting/createSharedDrag.tsx","../src/components/Switch.tsx","../src/components/UserPointer.tsx","../src/components/workspace/WorkspaceLayout.tsx","../src/hooks/useWindowSize.tsx","../src/components/workspace/DrawerWorkspaceLayout.tsx","../src/hooks/usePreservePanelSize.tsx","../src/components/workspace/PanelWorkspaceLayout.tsx","../src/hooks/usePlatform.ts","../src/hooks/useTheme.ts","../src/mediaQuery.ts","../src/utils/createSectionedMenu.ts","../src/utils/moveTreeItem.ts","../src/utils/sketchPattern.ts","../src/components/DimensionInput.tsx","../src/components/InspectorPrimitives.tsx","../src/components/BaseToolbar.tsx","../src/components/Toolbar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { useSize } from \"../hooks/useSize\";\n\ntype Size = { width: number; height: number };\n\nconst style: React.CSSProperties = {\n display: \"flex\",\n flex: \"1 0 0\",\n flexDirection: \"column\",\n};\n\ninterface Props {\n children: (size: Size) => React.ReactNode;\n className?: string;\n}\n\nexport const AutoSizer = React.memo(function AutoSizer({\n children,\n className,\n}: Props) {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const containerSize = useSize(containerRef);\n\n return (\n <div ref={containerRef} style={style} className={className}>\n {containerSize &&\n containerSize.width > 0 &&\n containerSize.height > 0 &&\n children(containerSize)}\n </div>\n );\n});\n\ninterface SingleDimensionAutoSizerProps {\n children: (size: number) => React.ReactNode;\n dimension: \"width\" | \"height\";\n className?: string;\n}\n\nexport const SingleDimensionAutoSizer = React.memo(\n function SingleDimensionAutoSizer({\n children,\n dimension,\n className,\n }: SingleDimensionAutoSizerProps) {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const containerSize = useSize(containerRef, dimension);\n\n return (\n <div ref={containerRef} style={style} className={className}>\n {containerSize &&\n containerSize[dimension] > 0 &&\n children(containerSize[dimension])}\n </div>\n );\n }\n);\n","// MIT License\n//\n// Copyright (c) 2020 Modulz\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n// https://github.com/radix-ui/primitives/blob/f3de622e944785d01eb6041249ca1645f79ce102/packages/react/utils/src/useSize.tsx\n\n/// <reference types=\"resize-observer-browser\" />\n\nimport * as React from \"react\";\n\ntype Size = {\n width: number;\n height: number;\n};\n\nexport function useSize(\n /** A reference to the element whose size to observe */\n refToObserve: React.RefObject<HTMLElement | SVGElement>,\n dimensions: \"both\" | \"width\" | \"height\" = \"both\"\n) {\n const [size, setSize] = React.useState<Size | undefined>(undefined);\n\n React.useEffect(() => {\n if (refToObserve.current) {\n const elementToObserve = refToObserve.current;\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n\n // Since we only observe the one element, we don't need to loop over the\n // array\n if (!entries.length) {\n return;\n }\n\n const entry = entries[0];\n let width: number;\n let height: number;\n\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n // iron out differences between browsers\n const borderSize = Array.isArray(borderSizeEntry)\n ? borderSizeEntry[0]\n : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n // for browsers that don't support `borderBoxSize`\n // we calculate a rect ourselves to get the correct border box.\n const rect = elementToObserve.getBoundingClientRect();\n width = rect.width;\n height = rect.height;\n }\n\n setSize((currentSize) => {\n if (\n currentSize &&\n (currentSize.width === width || dimensions === \"height\") &&\n (currentSize.height === height || dimensions === \"width\")\n ) {\n return currentSize;\n }\n\n return { width, height };\n });\n });\n\n resizeObserver.observe(elementToObserve, { box: \"border-box\" });\n\n return () => {\n setSize(undefined);\n resizeObserver.unobserve(elementToObserve);\n };\n }\n return;\n }, [refToObserve, dimensions]);\n\n return size;\n}\n","\"use client\";\n\nimport React, { DragEvent, ReactNode, useCallback, useRef } from \"react\";\nimport { useFileDropTarget } from \"../hooks/useFileDropTarget\";\nimport { memoGeneric } from \"../utils/reactGenerics\";\n\nexport type OffsetPoint = {\n offsetX: number;\n offsetY: number;\n};\n\nexport type TypedFile<T> = File & { type: T };\n\nexport function isSupportedFile<T extends string>(\n file: File,\n supportedFileTypes: T[]\n): file is TypedFile<T> {\n return (\n supportedFileTypes.includes(file.type as T) ||\n (file.type === \"\" && file.name.endsWith(\".sketch\"))\n );\n}\n\ntype Props<T extends string> = {\n children: ReactNode | ((isActive: boolean) => ReactNode);\n onDropFiles: (file: TypedFile<T>[], offsetPoint: OffsetPoint) => void;\n supportedFileTypes: T[];\n} & Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">;\n\nexport const FileDropTarget = memoGeneric(function FileDropTarget<\n T extends string,\n>({ children, onDropFiles, supportedFileTypes, ...props }: Props<T>) {\n const ref = useRef<HTMLDivElement>(null);\n\n const handleFile = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n\n const offsetPoint = {\n offsetX: event.nativeEvent.offsetX,\n offsetY: event.nativeEvent.offsetY,\n };\n\n const unsupportedTypes = Array.from(event.dataTransfer.files).flatMap(\n (file) => {\n if (!isSupportedFile(file, supportedFileTypes)) {\n return [file.type];\n } else {\n return [];\n }\n }\n );\n\n if (unsupportedTypes.length > 0) {\n alert(\n `Files of type ${unsupportedTypes.join(\n \", \"\n )} aren't supported. The following types are supported: ${supportedFileTypes.join(\n \", \"\n )}`\n );\n }\n\n const files = Array.from(event.dataTransfer.files).flatMap((file) =>\n isSupportedFile(file, supportedFileTypes) ? [file] : []\n );\n\n onDropFiles(files, offsetPoint);\n },\n [onDropFiles, supportedFileTypes]\n );\n\n const { dropTargetProps, isDropTargetActive } = useFileDropTarget(\n ref,\n handleFile\n );\n\n return (\n <div ref={ref} {...dropTargetProps} {...props}>\n {typeof children === \"function\" ? children(isDropTargetActive) : children}\n </div>\n );\n});\n","\"use client\";\n\nimport { DragEvent, useCallback, useState } from \"react\";\n\nexport function useFileDropTarget(\n ref: React.RefObject<HTMLDivElement>,\n dropEvent?: (event: DragEvent) => void\n) {\n const [isDropTargetActive, setIsDropTargetActive] = useState(false);\n\n const handleDragOver = useCallback((event: DragEvent) => {\n event.preventDefault();\n }, []);\n\n const handleDragEnter = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n if (!ref.current?.contains(event.relatedTarget as Node)) {\n setIsDropTargetActive(true);\n }\n },\n [ref]\n );\n\n const handleDragLeave = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n if (!ref.current?.contains(event.relatedTarget as Node)) {\n setIsDropTargetActive(false);\n }\n },\n [ref]\n );\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n event.preventDefault();\n dropEvent?.(event);\n setIsDropTargetActive(false);\n },\n [dropEvent]\n );\n\n if (!dropEvent) {\n return {\n dropTargetProps: {},\n isDropTargetActive,\n };\n }\n\n return {\n dropTargetProps: {\n onDragOver: handleDragOver,\n onDragEnter: handleDragEnter,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n },\n isDropTargetActive,\n };\n}\n","import React, { forwardRef, memo } from \"react\";\n\nfunction _memoGeneric<A, B>(\n _Component: (props: A) => B\n): (props: A) => React.ReactElement | null {\n throw new Error(\"Not implemented\");\n}\n\nfunction _forwardRefGeneric<T, P = {}>(\n _render: (props: P, ref: React.ForwardedRef<T>) => React.ReactElement | null\n): (props: P & React.RefAttributes<T>) => React.ReactElement | null {\n throw new Error(\"Not implemented\");\n}\n\nexport const memoGeneric = memo as typeof _memoGeneric;\nexport const forwardRefGeneric = forwardRef as typeof _forwardRefGeneric;\n","\"use client\";\n\nimport { useCallback, useState } from \"react\";\n\nexport type UseControlledOrUncontrolledParameters<\n TState,\n TArgs extends any[] = [],\n> = {\n defaultValue: TState;\n value?: TState;\n onChange?: (value: TState, ...args: TArgs) => void;\n};\n\n// used for readonly controlled values\nconst noop = () => {};\n\nexport function useControlledOrUncontrolled<TState, TArgs extends any[] = []>({\n defaultValue,\n value,\n onChange,\n}: UseControlledOrUncontrolledParameters<TState, TArgs>) {\n const [internalValue, setInternalValue] = useState(value ?? defaultValue);\n\n const setValue = useCallback(\n (value: TState, ...args: TArgs) => {\n setInternalValue(value);\n onChange?.(value, ...args);\n },\n [onChange]\n );\n\n if (value !== undefined) {\n return [value, onChange ?? noop] as const;\n }\n\n return [internalValue, setValue] as const;\n}\n","\"use client\";\n\nimport { isDeepEqual } from \"@noya-app/noya-utils\";\nimport { useRef } from \"react\";\n\n/**\n * Memoize an array using deep equality comparison (by converting to JSON).\n */\nexport function useDeepMemo<T>(value: T) {\n const ref = useRef(value);\n\n if (!isDeepEqual(ref.current, value)) {\n ref.current = value;\n }\n\n return ref.current;\n}\n","\"use client\";\n\nimport { isDeepEqual } from \"@noya-app/noya-utils\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nexport const useDeepState: typeof useState = (\n ...args: Parameters<typeof useState>\n) => {\n const [state, _setState] = useState(...args);\n\n const setState = useCallback(function updater(updated: typeof state) {\n _setState((current) => {\n if (isDeepEqual(current, updated)) return current;\n return updated;\n });\n }, []);\n\n return useMemo(() => [state, setState], [state, setState]);\n};\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { PromiseState } from \"../utils/PromiseState\";\nimport { ResponseEncoding, fetchData } from \"../utils/fetchData\";\n\nexport function useFetch<T>(\n url: string,\n encoding: ResponseEncoding\n): PromiseState<T> {\n const [state, setState] = useState<PromiseState<T>>({ type: \"pending\" });\n\n useEffect(() => {\n let isStale = false;\n\n async function getInfo() {\n try {\n const data = await fetchData<T>(url, encoding as any);\n\n if (isStale) return;\n\n setState({ type: \"success\", value: data });\n } catch (error) {\n if (isStale) return;\n\n setState({ type: \"failure\", value: error as Error });\n }\n }\n\n getInfo();\n\n return () => {\n isStale = true;\n };\n }, [url, encoding]);\n\n return state;\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\nexport function useIsMounted() {\n const isMounted = useRef(true);\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return isMounted;\n}\n","import * as React from \"react\";\n\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n","\"use client\";\n\nimport { SetStateAction, useCallback, useLayoutEffect, useRef } from \"react\";\n\n/**\n * Returns an accessor function that returns the latest value passed to the hook.\n *\n * The value is only updated after the component has rendered, so it is safe to use in event handlers.\n * This is useful for preventing unnecessary re-renders when a value changes frequently,\n * while still providing access to the latest value in event handlers.\n */\nexport function useLateReference<T>(value: T): () => T {\n const valueRef = useRef(value);\n\n useLayoutEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n return useCallback(() => valueRef.current, []);\n}\n\nexport function useLateReferenceState<T>(\n value: T,\n setValue: (value: T) => void\n): [() => T, (value: SetStateAction<T>) => void] {\n const valueRef = useRef(value);\n\n useLayoutEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const getValue = useCallback(() => valueRef.current, []);\n\n const actualSetValue = useCallback(\n (value: SetStateAction<T>) => {\n if (value instanceof Function) {\n const newValue = value(valueRef.current);\n valueRef.current = newValue;\n setValue(newValue);\n } else {\n valueRef.current = value;\n setValue(value);\n }\n },\n [setValue]\n );\n\n return [getValue, actualSetValue] as const;\n}\n","\"use client\";\n\nimport { useRef } from \"react\";\n\nexport function useLazyValue<T>(f: () => T): T {\n const didInitialize = useRef(false);\n const value = useRef<T | undefined>(undefined);\n\n if (!didInitialize.current) {\n didInitialize.current = true;\n\n value.current = f();\n }\n\n return value.current!;\n}\n","import { useCallback } from \"react\";\nimport { assignRef } from \"../utils/assignRef\";\n\nexport function useMergeRefs<T>(\n ref: React.ForwardedRef<T>,\n anotherRef: React.ForwardedRef<T>\n) {\n return useCallback(\n (value: T) => {\n assignRef(ref, value);\n assignRef(anotherRef, value);\n },\n [ref, anotherRef]\n );\n}\n","export function assignRef<T>(\n ref: React.ForwardedRef<T> | undefined,\n value: T | null,\n): void {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n","\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport { useLazyValue } from \"./useLazyValue\";\n\nexport function useMutableState<T extends object>(\n valueOrInitializer: T | (() => T)\n) {\n const mutableValue = useLazyValue(() =>\n typeof valueOrInitializer === \"function\"\n ? valueOrInitializer()\n : valueOrInitializer\n );\n\n // We create a proxy wrapper in order to re-render on changes\n const [wrappedValue, setWrappedValue] = useState(\n () => new Proxy(mutableValue, {})\n );\n\n const updateValue = useCallback(\n (updater: (value: T) => void) => {\n updater(mutableValue);\n\n setWrappedValue(new Proxy(mutableValue, {}));\n },\n // The mutable value is a dependency to satisfy eslint,\n // but should never change identity\n [mutableValue]\n );\n\n return useMemo(\n () => [wrappedValue, updateValue] as const,\n [updateValue, wrappedValue]\n );\n}\n","\"use client\";\n\nimport {\n SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { ClientStorage } from \"../utils/ClientStorage\";\n\nfunction getCurrentValue<T, K extends string = string>(\n storage: ClientStorage<K>,\n storageKey: K,\n defaultValue?: T\n): T | null {\n return (storage.getItem(storageKey) as T | null) ?? defaultValue ?? null;\n}\n\nexport function usePersistentStateString<\n T extends string = string,\n K extends string = string,\n>(\n storage: ClientStorage<K>,\n storageKey: K\n): readonly [T | null, (newValue: SetStateAction<T | null>) => void];\nexport function usePersistentStateString<\n T extends string = string,\n K extends string = string,\n>(\n storage: ClientStorage<K>,\n storageKey: K,\n defaultValue: T\n): readonly [T, (newValue: SetStateAction<T>) => void];\nexport function usePersistentStateString<\n T extends string = string,\n K extends string = string,\n>(storage: ClientStorage<K>, storageKey: K, defaultValue?: T) {\n const [state, setState] = useState<T | null>(() =>\n getCurrentValue(storage, storageKey, defaultValue)\n );\n\n useEffect(() => {\n const newValue = getCurrentValue(storage, storageKey, defaultValue);\n setState(newValue);\n }, [defaultValue, storage, storageKey]);\n\n const setValue = useCallback(\n (action: SetStateAction<T | null>) => {\n const newValue =\n typeof action === \"function\"\n ? action(getCurrentValue(storage, storageKey, defaultValue))\n : action;\n storage.setItem(storageKey, newValue);\n setState(newValue);\n },\n [defaultValue, storage, storageKey]\n );\n\n // Listen for changes to localStorage from other tabs\n useEffect(() => {\n const dispose = storage.addListener(storageKey, (newValue) => {\n setState(newValue as T | null);\n });\n\n return () => dispose();\n }, [storage, storageKey]);\n\n return useMemo(() => [state, setValue] as const, [setValue, state]);\n}\n\nexport function usePersistentStateObject<T extends object, K extends string>(\n storage: ClientStorage<K>,\n storageKey: K,\n defaultValue: T\n): [T, (newValue: SetStateAction<T>) => void] {\n const [state, setState] = usePersistentStateString<string, K>(\n storage,\n storageKey,\n JSON.stringify(defaultValue)\n );\n\n const parsedState = useMemo(() => {\n try {\n return JSON.parse(state);\n } catch {\n return defaultValue;\n }\n }, [state, defaultValue]);\n\n return useMemo(\n () => [\n parsedState,\n (action) => {\n setState((prev) => {\n const parsedPrev = JSON.parse(prev);\n\n const newValue =\n typeof action === \"function\" ? action(parsedPrev) : action;\n\n return JSON.stringify(newValue);\n });\n },\n ],\n [parsedState, setState]\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function usePixelRatio() {\n const [pixelRatio, setPixelRatio] = useState(() => window.devicePixelRatio);\n\n useEffect(() => {\n const mediaQuery = matchMedia(`(resolution: ${pixelRatio}dppx)`);\n\n const handler = () => {\n setPixelRatio(window.devicePixelRatio);\n };\n\n mediaQuery.addEventListener(\"change\", handler, { once: true });\n\n return () => {\n mediaQuery.removeEventListener(\"change\", handler);\n };\n }, [pixelRatio]);\n\n return pixelRatio;\n}\n","\"use client\";\n\nimport { isShallowEqual } from \"@noya-app/noya-utils\";\nimport { useRef } from \"react\";\n\n/**\n * Memoize an array using shallow comparison.\n */\nexport function useShallowArray<T>(array: T[]) {\n const ref = useRef(array);\n\n if (!isShallowEqual(ref.current, array)) {\n ref.current = array;\n }\n\n return ref.current;\n}\n","\"use client\";\n\nimport { useCallback, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\n\nconst noop = () => {};\n\nexport function useStableCallback<T extends (...args: any[]) => any>(\n callback: T\n): T;\nexport function useStableCallback<T extends (...args: any[]) => any>(\n callback?: T\n): T | ((...args: Parameters<T>) => void);\nexport function useStableCallback<T extends (...args: any[]) => any>(\n callback: T\n): T {\n const callbackRef = useRef(callback || noop);\n\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = callback || noop;\n }, [callback]);\n\n return useCallback(\n (...args: Parameters<T>): ReturnType<T> => callbackRef.current(...args),\n [callbackRef]\n ) as T;\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useLazyValue } from \"../hooks/useLazyValue\";\n\nconst preferDarkQuery = \"(prefers-color-scheme: dark)\";\n\ntype ColorScheme = \"light\" | \"dark\";\n\nexport function useSystemColorScheme() {\n const mediaQuery = useLazyValue(\n () => globalThis.matchMedia?.(preferDarkQuery) ?? \"light\"\n );\n\n const [colorScheme, setColorScheme] = useState<ColorScheme>(\n mediaQuery.matches ? \"dark\" : \"light\"\n );\n\n useEffect(() => {\n const listener = ({ matches }: MediaQueryListEvent) => {\n setColorScheme(matches ? \"dark\" : \"light\");\n };\n\n mediaQuery.addEventListener(\"change\", listener);\n\n return () => {\n mediaQuery.removeEventListener(\"change\", listener);\n };\n }, [mediaQuery]);\n\n return colorScheme;\n}\n","\"use client\";\n\nimport { decodeQueryParameters } from \"@noya-app/noya-utils\";\nimport { useEffect, useState } from \"react\";\n\nexport type UrlHashParameters = Record<string, string>;\n\nexport function getUrlHashParameters(): UrlHashParameters {\n try {\n return decodeQueryParameters(window.location.hash.slice(1));\n } catch (e) {\n // console.warn(e);\n return {};\n }\n}\n\nexport function useUrlHashParameters(): UrlHashParameters {\n const [parameters, setParameters] = useState<UrlHashParameters>(() =>\n getUrlHashParameters()\n );\n\n useEffect(() => {\n const handler = () => setParameters(getUrlHashParameters());\n\n window.addEventListener(\"hashchange\", handler);\n\n return () => {\n window.removeEventListener(\"hashchange\", handler);\n };\n }, []);\n\n return parameters;\n}\n\ntype ParameterTypeMap = {\n boolean: boolean;\n number: number;\n string: string;\n};\n\nexport function castHashParameter<K extends keyof ParameterTypeMap>(\n value: string = \"\",\n type: K\n): ParameterTypeMap[K] {\n switch (type) {\n case \"boolean\":\n return (value === \"true\") as ParameterTypeMap[K];\n case \"number\": {\n const result = Number(value);\n return (isNaN(result) ? 0 : result) as ParameterTypeMap[K];\n }\n case \"string\":\n return value as ParameterTypeMap[K];\n default:\n throw new Error(\"Invalid type\");\n }\n}\n","type EmitterConfiguration = {\n bufferEventsIfNoListeners: boolean;\n};\n\nexport class Emitter<T extends any[] = []> {\n constructor(options: Partial<EmitterConfiguration> = {}) {\n this.bufferEventsIfNoListeners = options.bufferEventsIfNoListeners ?? false;\n }\n\n bufferEventsIfNoListeners: boolean;\n\n listeners: ((...args: T) => void)[] = [];\n\n addListener = (f: (...args: T) => void, options: { once?: boolean } = {}) => {\n if (options.once) {\n const handler = (...args: T) => {\n this.removeListener(handler);\n return f(...args);\n };\n this.listeners.push(handler);\n } else {\n this.listeners.push(f);\n }\n\n if (this.bufferedEvents.length > 0) {\n const eventsToEmit = this.bufferedEvents;\n\n this.bufferedEvents = [];\n\n eventsToEmit.forEach((event) => {\n this.emit(...event);\n });\n }\n\n return () => this.removeListener(f);\n };\n\n removeListener = (f: (...args: T) => void) => {\n const index = this.listeners.indexOf(f);\n\n if (index === -1) return;\n\n this.listeners.splice(index, 1);\n };\n\n emit = (...args: T) => {\n if (this.bufferEventsIfNoListeners && this.listeners.length === 0) {\n this.bufferedEvents.push(args);\n\n return;\n }\n\n this.listeners.forEach((l) => l(...args));\n };\n\n bufferedEvents: T[] = [];\n}\n","import { Emitter } from \"@noya-app/emitter\";\n\nexport interface IClientStorage<K extends string = string> {\n getItem(storageKey: K): string | null;\n setItem(storageKey: K, value: string | null): void;\n addListener(\n storageKey: K,\n listener: (newValue: string | null) => void\n ): () => void;\n}\n\nexport class ClientStorage<K extends string = string>\n implements IClientStorage<K>\n{\n getItem(storageKey: K): string | null {\n if (typeof localStorage === \"undefined\") {\n return null;\n }\n\n return localStorage.getItem(storageKey);\n }\n\n setItem(storageKey: K, value: string | null): void {\n if (typeof localStorage === \"undefined\") {\n return;\n }\n\n if (value === null) {\n localStorage.removeItem(storageKey);\n } else {\n localStorage.setItem(storageKey, value);\n }\n\n this.emitter.emit(storageKey, value);\n }\n\n emitter = new Emitter<[K, string | null]>();\n\n _isListening = false;\n\n addListener(\n storageKey: K,\n listener: (newValue: string | null) => void\n ): () => void {\n // Set up a single listener for all storage events\n if (!this._isListening && typeof window !== \"undefined\") {\n this._isListening = true;\n\n window.addEventListener(\"storage\", (event: StorageEvent) => {\n this.emitter.emit(event.key as any, event.newValue);\n });\n }\n\n return this.emitter.addListener((key, value) => {\n if (key === storageKey) {\n listener(value);\n }\n });\n }\n}\n\nexport const clientStorage = new ClientStorage();\n","import { memoGeneric } from \"@noya-app/react-utils\";\nimport React, { useMemo } from \"react\";\nimport { cssVars } from \"../theme\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport { IconButton } from \"./IconButton\";\nimport { MenuItem } from \"./internal/Menu\";\n\ntype ActionMenuProps<TMenu extends string> = {\n menuItems: MenuItem<TMenu>[];\n onSelect: (action: TMenu) => void;\n selected?: boolean;\n disabled?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n style?: React.CSSProperties;\n variant?: \"normal\" | \"bare\";\n color?: string;\n};\n\nexport const ActionMenu = memoGeneric(function ActionMenu<\n TMenu extends string,\n>({\n menuItems,\n onSelect,\n selected,\n onOpenChange,\n disabled,\n className,\n style,\n variant = \"normal\",\n color,\n}: ActionMenuProps<TMenu>) {\n const internalStyle = useMemo(() => {\n return {\n backgroundColor: selected\n ? cssVars.colors.primaryPastel\n : cssVars.colors.inputBackground,\n padding: variant === \"bare\" ? 0 : 4,\n ...style,\n };\n }, [selected, style, variant]);\n\n return (\n <DropdownMenu\n items={menuItems}\n onSelect={onSelect}\n onOpenChange={onOpenChange}\n >\n <IconButton\n style={internalStyle}\n className={className}\n iconName=\"DotsVerticalIcon\"\n color={color ?? (selected ? cssVars.colors.primary : \"currentColor\")}\n disabled={disabled}\n />\n </DropdownMenu>\n );\n});\n","import tailwindConfig from \"@noya-app/noya-tailwind-config\";\nimport { convertKebabToCamelCase, parseCssVarName } from \"./themeUtils\";\n\nexport type Theme = (typeof tailwindConfig.theme)[\"extend\"];\n\nexport type ThemeColor = keyof Theme[\"colors\"];\n\nexport const cssVars = convertKebabToCamelCase(tailwindConfig.theme.extend);\n\nexport const cssVarNames = convertKebabToCamelCase(\n tailwindConfig.theme.extend,\n parseCssVarName\n);\n\nexport const INPUT_HEIGHT = 27;\n","export type KebabToCamelCase<S extends string> =\n S extends `${infer First}-${infer Rest}`\n ? `${First}${Capitalize<KebabToCamelCase<Rest>>}`\n : S;\n\ntype IsPlainObject<T> = T extends Array<any> | Set<any> | Map<any, any>\n ? false\n : T extends object\n ? true\n : false;\n\ntype KebabToCamelCaseKeys<T> = {\n [K in keyof T as K extends string\n ? KebabToCamelCase<K>\n : K]: T[K] extends object\n ? IsPlainObject<T[K]> extends true\n ? KebabToCamelCaseKeys<T[K]>\n : T[K]\n : T[K];\n};\n\ntype _CamelToKebabCase<S extends string> = S extends `${infer C}${infer Rest}`\n ? C extends Uppercase<C>\n ? `-${Lowercase<C>}${_CamelToKebabCase<Rest>}`\n : `${C}${_CamelToKebabCase<Rest>}`\n : S;\n\n// Remove leading hyphen if exists\ntype TrimHyphen<S extends string> = S extends `-${infer Rest}` ? Rest : S;\n\nexport type CamelToKebabCase<S extends string> = TrimHyphen<\n _CamelToKebabCase<S>\n>;\n\nexport function camelToKebabCase<S extends string>(\n str: S\n): CamelToKebabCase<S> {\n return str.replace(/([A-Z])/g, \"-$1\").toLowerCase() as CamelToKebabCase<S>;\n}\n\nexport function kebabToCamelCase<S extends string>(\n str: S\n): KebabToCamelCase<S> {\n return str.replace(/-([a-z])/g, (_, letter) =>\n letter.toUpperCase()\n ) as KebabToCamelCase<S>;\n}\n\n// Runtime function to convert all keys in an object from kebab-case to camelCase\nexport function convertKebabToCamelCase<T extends object>(\n obj: T,\n mapValue?: (value: string) => string\n): KebabToCamelCaseKeys<T> {\n if (Array.isArray(obj) || obj instanceof Set || obj instanceof Map) {\n return obj as KebabToCamelCaseKeys<T>;\n }\n\n const result: any = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const camelKey = kebabToCamelCase(key);\n result[camelKey] =\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !(value instanceof Set) &&\n !(value instanceof Map)\n ? convertKebabToCamelCase(value, mapValue)\n : mapValue && typeof value === \"string\"\n ? mapValue(value)\n : value;\n }\n\n return result as KebabToCamelCaseKeys<T>;\n}\n\nexport function parseCssVarName(key: string) {\n return key.match(/var\\((--.*?)\\)/)?.[1] ?? \"\";\n}\n","import { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport * as RadixDropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport React, {\n ComponentProps,\n ForwardedRef,\n SyntheticEvent,\n useMemo,\n} from \"react\";\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../contexts/PortalScopeContext\";\nimport { MenuProps } from \"./ContextMenu\";\nimport { getKeyboardShortcutsForMenuItems, styles } from \"./internal/Menu\";\nimport { MenuViewport } from \"./internal/MenuViewport\";\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nexport type DropdownRootProps<T extends string> = MenuProps<T> & {\n open?: boolean;\n onCloseAutoFocus?: React.EventHandler<SyntheticEvent<unknown>>;\n emptyState?: React.ReactNode;\n contentStyle?: React.CSSProperties;\n} & Pick<\n ComponentProps<typeof RadixDropdownMenu.Content>,\n \"side\" | \"sideOffset\" | \"align\" | \"alignOffset\" | \"collisionPadding\"\n >;\n\nconst Components = {\n Separator: RadixDropdownMenu.Separator,\n ItemText: React.Fragment,\n Item: RadixDropdownMenu.Item,\n CheckboxItem: RadixDropdownMenu.CheckboxItem,\n ItemIndicator: RadixDropdownMenu.ItemIndicator,\n SubTrigger: RadixDropdownMenu.SubTrigger,\n SubContent: RadixDropdownMenu.SubContent,\n Sub: RadixDropdownMenu.Sub,\n Portal: RadixDropdownMenu.Portal,\n};\n\nconst DropdownMenuRoot = forwardRefGeneric(function DropdownMenuRoot<\n T extends string,\n>(props: DropdownRootProps<T>, forwardedRef: ForwardedRef<HTMLElement>) {\n const {\n items,\n children,\n onSelect,\n shouldBindKeyboardShortcuts,\n onOpenChange,\n open,\n onCloseAutoFocus,\n side,\n sideOffset = 4,\n align,\n alignOffset,\n collisionPadding = 8,\n emptyState,\n contentStyle,\n } = props;\n\n const portalScopeId = usePortalScopeId();\n\n const keymap = useMemo(\n () =>\n shouldBindKeyboardShortcuts === false\n ? {}\n : getKeyboardShortcutsForMenuItems(items, onSelect),\n [items, onSelect, shouldBindKeyboardShortcuts]\n );\n\n useKeyboardShortcuts(keymap);\n\n const contentStyles = useMemo(\n () => ({\n maxHeight: \"500px\",\n overflow: \"auto\",\n ...contentStyle,\n }),\n [contentStyle]\n );\n\n return (\n <RadixDropdownMenu.Root onOpenChange={onOpenChange} open={open}>\n <RadixDropdownMenu.Trigger\n ref={forwardedRef as ForwardedRef<any>}\n asChild\n >\n {children}\n </RadixDropdownMenu.Trigger>\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.Content\n {...portalScopeProps(portalScopeId)}\n className={styles.contentStyle}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n style={contentStyles}\n collisionPadding={collisionPadding}\n {...({ onCloseAutoFocus } as any)}\n >\n {items.length === 0 ? emptyState : null}\n <MenuViewport\n items={items}\n Components={Components}\n onSelect={onSelect}\n />\n </RadixDropdownMenu.Content>\n </RadixDropdownMenu.Portal>\n </RadixDropdownMenu.Root>\n );\n});\n\nexport const DropdownMenu = memoGeneric(DropdownMenuRoot);\n","import * as React from \"react\";\n\nexport type PortalScopeContextValue = string;\n\nconst PortalScopeContext = React.createContext<\n PortalScopeContextValue | undefined\n>(undefined);\n\nexport const PortalScopeProvider = React.memo(function PortalScopeProvider({\n children,\n portalScopeId,\n}: {\n children: React.ReactNode;\n portalScopeId: string;\n}) {\n return (\n <PortalScopeContext.Provider value={portalScopeId}>\n {children}\n </PortalScopeContext.Provider>\n );\n});\n\nexport function usePortalScopeId(): string {\n return React.useContext(PortalScopeContext) ?? \"\";\n}\n\nexport const portalScopeDataSetName = \"noyaPortalScope\";\nexport const portalScopePropName = `data-noya-portal-scope`;\n\nexport function portalScopeProps(id?: string) {\n return {\n [portalScopePropName]: id,\n };\n}\n\nexport function getClosestPortalScope(element: EventTarget) {\n if (!(element instanceof HTMLElement)) {\n return;\n }\n\n const closest = element.closest(`[${portalScopePropName}]`);\n\n if (!closest || !(closest instanceof HTMLElement)) {\n return;\n }\n\n return closest.dataset[portalScopeDataSetName];\n}\n","import { getShortcutDisplayParts } from \"@noya-app/noya-keymap\";\nimport React, { memo, ReactNode } from \"react\";\nimport { useDesignSystemConfiguration } from \"../../contexts/DesignSystemConfiguration\";\nimport { cx, mergeConflictingClassNames } from \"../../utils/classNames\";\nimport { IScoredItem } from \"../../utils/fuzzyScorer\";\nimport withSeparatorElements from \"../../utils/withSeparatorElements\";\nimport { IconName } from \"../Icons\";\nimport { Spacer } from \"../Spacer\";\nimport { textStyles } from \"../Text\";\n\n// From electron\nexport type MenuItemRole =\n | \"undo\"\n | \"redo\"\n | \"cut\"\n | \"copy\"\n | \"paste\"\n | \"pasteAndMatchStyle\"\n | \"delete\"\n | \"selectAll\"\n | \"reload\"\n | \"forceReload\"\n | \"toggleDevTools\"\n | \"resetZoom\"\n | \"zoomIn\"\n | \"zoomOut\"\n | \"toggleSpellChecker\"\n | \"togglefullscreen\"\n | \"window\"\n | \"minimize\"\n | \"close\"\n | \"help\"\n | \"about\"\n | \"services\"\n | \"hide\"\n | \"hideOthers\"\n | \"unhide\"\n | \"quit\"\n | \"showSubstitutions\"\n | \"toggleSmartQuotes\"\n | \"toggleSmartDashes\"\n | \"toggleTextReplacement\"\n | \"startSpeaking\"\n | \"stopSpeaking\"\n | \"zoom\"\n | \"front\"\n | \"appMenu\"\n | \"fileMenu\"\n | \"editMenu\"\n | \"viewMenu\"\n | \"shareMenu\"\n | \"recentDocuments\"\n | \"toggleTabBar\"\n | \"selectNextTab\"\n | \"selectPreviousTab\"\n | \"mergeAllWindows\"\n | \"clearRecentDocuments\"\n | \"moveTabToNewWindow\"\n | \"windowMenu\";\n\nexport type SeparatorItem = {\n type: \"separator\";\n};\n\nexport const separator: SeparatorItem = {\n type: \"separator\",\n};\n\ntype FalsyReactNode = false | \"\" | null | undefined;\n\nexport type MenuItemIcon = IconName | React.ReactElement | FalsyReactNode;\n\ntype BaseMenuItem = {\n checked?: boolean;\n disabled?: boolean;\n icon?: MenuItemIcon;\n role?: MenuItemRole;\n alwaysInclude?: boolean;\n title: NonNullable<ReactNode>;\n};\n\nexport type SectionHeaderMenuItem = {\n type: \"sectionHeader\";\n id: string;\n title: ReactNode;\n maxVisibleItems?: number;\n variant?: \"normal\" | \"label\";\n};\n\nexport type SelectableMenuItem<T extends string> = BaseMenuItem & {\n type?: undefined;\n shortcut?: string;\n value: T;\n testSelected?: boolean;\n tooltip?: ReactNode;\n};\n\nexport type SubMenuItem<T extends string> = BaseMenuItem & {\n type: \"submenu\";\n items: MenuItem<T>[];\n id: string;\n};\n\nexport type NonSelectableMenuItem<T extends string> =\n | SeparatorItem\n | SectionHeaderMenuItem\n | SubMenuItem<T>;\n\nexport type MenuItem<T extends string> =\n | SeparatorItem\n | SelectableMenuItem<T>\n | SectionHeaderMenuItem\n | SubMenuItem<T>;\n\ntype ScoredSelectableMenuItem<T extends string> = SelectableMenuItem<T> &\n IScoredItem;\n\nexport type ScoredMenuItem<T extends string> =\n | ScoredSelectableMenuItem<T>\n | SectionHeaderMenuItem;\n\n// Extract type T of RegularMenuItem<T> within MenuItem<T>\nexport type ExtractMenuItemType<T> =\n T extends SelectableMenuItem<infer U> ? U : never;\n\nexport const isSelectableMenuItem = <T extends string>(\n item: MenuItem<T>\n): item is SelectableMenuItem<T> => {\n return item.type === undefined;\n};\n\nexport const isNonSelectableMenuItem = <T extends string>(\n item: MenuItem<T>\n): item is NonSelectableMenuItem<T> => !isSelectableMenuItem(item);\n\nexport const isMenuItemSectionHeader = (\n item: MenuItem<string>\n): item is SectionHeaderMenuItem => item.type === \"sectionHeader\";\n\nexport const isSelectableMenuItemWithScore = (\n item: MenuItem<string>\n): item is ScoredSelectableMenuItem<string> =>\n isSelectableMenuItem(item) && \"index\" in item && \"score\" in item;\n\nexport const getMenuItemKey = <T extends string>(\n item: MenuItem<T>,\n index: number\n): string => {\n switch (item.type) {\n case \"separator\":\n return index.toString();\n case \"sectionHeader\":\n return item.id;\n case \"submenu\":\n return item.id;\n default:\n return item.value;\n }\n};\n\nexport const CHECKBOX_WIDTH = 15;\nexport const CHECKBOX_RIGHT_INSET = 6;\nexport const CHECKBOX_INDENT_WIDTH = 6;\n\nexport const styles = {\n separatorStyle: \"h-px bg-divider mx-3 my-1\",\n selectedItemStyle:\n \"focus:outline-none focus:text-selected-list-item-text focus:bg-selected-list-item-background focus:kbd:text-selected-list-item-text\",\n testSelectedItemStyle:\n \"outline-none text-selected-list-item-text bg-selected-list-item-background kbd:text-selected-list-item-text\",\n itemStyle: ({ disabled }: { disabled?: boolean }) => `\n flex-none select-none cursor-pointer rounded\n py-1.5 px-2\n transition-colors\n flex items-center\n font-sans text-button font-medium\n ${disabled ? \"text-text-disabled\" : \"\"}\n `,\n itemIndicator: {\n className: \"flex items-center relative -left-2.5\",\n style: {\n marginRight: -CHECKBOX_RIGHT_INSET,\n },\n },\n contentStyle:\n \"rounded bg-popover-background text-text shadow-popover z-menu py-1\",\n};\n\nfunction getKeyboardShortcuts<T extends string>(\n item: MenuItem<T>\n): [string, T][] {\n if (item.type === \"separator\") return [];\n if (item.type === \"sectionHeader\") return [];\n\n if (item.type === \"submenu\") return item.items.flatMap(getKeyboardShortcuts);\n\n if (item.disabled || !item.value || !item.shortcut) return [];\n\n return [[item.shortcut, item.value]];\n}\n\nexport function getKeyboardShortcutsForMenuItems<T extends string>(\n menuItems: MenuItem<T>[],\n onSelect: (type: T) => void\n): Record<string, () => void> {\n return Object.fromEntries(\n menuItems\n .flatMap(getKeyboardShortcuts)\n .map(([key, value]) => [key, () => onSelect(value)])\n );\n}\n\nconst ShortcutElement = ({\n children,\n fixedWidth,\n}: {\n children?: React.ReactNode;\n fixedWidth?: boolean;\n}) => (\n <kbd\n className={cx(\n textStyles.small,\n \"text-inherit opacity-60 tabular-nums\",\n fixedWidth && \"w-[0.9rem] text-center\"\n )}\n >\n {children}\n </kbd>\n);\n\nexport const KeyboardShortcut = memo(function KeyboardShortcut({\n shortcut,\n}: {\n shortcut: string;\n}) {\n const platform = useDesignSystemConfiguration().platform;\n\n const { keys, separator } = getShortcutDisplayParts(shortcut, platform);\n\n const keyElements = keys.map((key) => (\n <ShortcutElement\n key={key}\n fixedWidth={platform === \"mac\" && key.length === 1}\n >\n {key}\n </ShortcutElement>\n ));\n\n return (\n <>\n {separator\n ? withSeparatorElements(\n keyElements,\n <ShortcutElement>{separator}</ShortcutElement>\n )\n : keyElements}\n </>\n );\n});\n\nexport const SectionHeader = memo(function SectionHeader({\n title,\n variant = \"normal\",\n id,\n isFirst,\n indented,\n}: Omit<SectionHeaderMenuItem, \"maxVisibleItems\" | \"type\"> & {\n isFirst?: boolean;\n indented?: boolean;\n}) {\n return (\n <span\n id={id}\n className={mergeConflictingClassNames(\n [\n variant === \"label\"\n ? `text-label ${textStyles.label} font-bold text-text-disabled`\n : \"font-sans text-heading5 font-normal\",\n \"bg-listview-raised-background flex items-center py-1.5 px-3\",\n isFirst && \"-mt-1\",\n ],\n {\n categories: [\"font\"],\n }\n )}\n >\n {indented && (\n <Spacer.Horizontal\n size={CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET + CHECKBOX_INDENT_WIDTH}\n />\n )}\n {title}\n </span>\n );\n});\n","import { getCurrentPlatform, PlatformName } from \"@noya-app/noya-keymap\";\nimport * as React from \"react\";\nimport { ToastProvider } from \"../components/Toast\";\nimport { DialogProvider } from \"./DialogContext\";\nimport { FloatingWindowProvider } from \"./FloatingWindowContext\";\nimport { OpenPortalsProvider } from \"./OpenPortalsContext\";\n\nexport type DesignSystemConfigurationContextValue = {\n platform: PlatformName;\n};\n\nconst DesignSystemConfigurationContext =\n React.createContext<DesignSystemConfigurationContextValue>({\n platform: \"key\",\n });\n\nexport const DesignSystemConfigurationProvider = React.memo(\n function DesignSystemConfigurationProvider({\n children,\n platform,\n }: {\n children: React.ReactNode;\n platform?: PlatformName;\n }) {\n const [internalPlatform, setInternalPlatform] =\n React.useState<PlatformName>(platform ?? \"key\");\n\n React.useEffect(() => {\n if (platform !== undefined) return;\n\n if (typeof navigator !== \"undefined\") {\n setInternalPlatform(getCurrentPlatform(navigator));\n }\n }, [platform]);\n\n const contextValue = React.useMemo(\n () => ({ platform: platform ?? internalPlatform }),\n [platform, internalPlatform]\n );\n\n return (\n <DesignSystemConfigurationContext.Provider value={contextValue}>\n <OpenPortalsProvider>\n <DialogProvider>\n <ToastProvider>\n <FloatingWindowProvider>{children}</FloatingWindowProvider>\n </ToastProvider>\n </DialogProvider>\n </OpenPortalsProvider>\n </DesignSystemConfigurationContext.Provider>\n );\n }\n);\n\nexport function useDesignSystemConfiguration(): DesignSystemConfigurationContextValue {\n return React.useContext(DesignSystemConfigurationContext);\n}\n","import * as ToastPrimitive from \"@radix-ui/react-toast\";\nimport React, { ReactNode } from \"react\";\nimport { IconButton } from \"./IconButton\";\nimport { textStyles } from \"./Text\";\n\nexport const Toast = ({\n title,\n content,\n children,\n ...props\n}: {\n title?: string;\n content: ReactNode;\n children?: React.ReactNode;\n}) => {\n return (\n <ToastPrimitive.Root\n className=\"px-2 py-2.5 grid grid-cols-[auto_max-content] gap-x-2.5 items-center rounded text-sm bg-popover-background shadow-popover text-text-muted\"\n {...props}\n >\n {title && (\n <ToastPrimitive.Title\n className={`mb-[5px] ${textStyles.label} font-bold text-text`}\n >\n {title}\n </ToastPrimitive.Title>\n )}\n <ToastPrimitive.Description\n className={`${textStyles.small} text-text-muted`}\n >\n {content}\n </ToastPrimitive.Description>\n {children && (\n <ToastPrimitive.Action asChild altText=\"\">\n {children}\n </ToastPrimitive.Action>\n )}\n <ToastPrimitive.Close aria-label=\"Close\" asChild>\n <IconButton iconName=\"Cross1Icon\" />\n </ToastPrimitive.Close>\n </ToastPrimitive.Root>\n );\n};\n\nexport const ToastProvider = ({ children }: { children: React.ReactNode }) => (\n <ToastPrimitive.Provider>\n {children}\n <ToastPrimitive.Viewport className=\"fixed bottom-0 right-0 flex flex-col p-5 g-2.5 min-w-[200px] max-w-[100vw] m-0 list-none z-[2147483647] outline-none\" />\n </ToastPrimitive.Provider>\n);\n","import * as React from \"react\";\nimport { cssVars } from \"../theme\";\nimport { Button, ButtonRootProps } from \"./Button\";\nimport { IconName, Icons } from \"./Icons\";\n\ntype Props = Omit<ButtonRootProps, \"children\" | \"variant\" | \"flex\" | \"size\"> & {\n iconName: IconName;\n className?: string;\n style?: React.CSSProperties;\n selected?: boolean;\n color?: string;\n size?: number;\n};\n\nexport const IconButton = React.memo(\n React.forwardRef(function IconButton(\n { selected, iconName, color, size, contentStyle, ...props }: Props,\n forwardedRef: React.ForwardedRef<HTMLButtonElement>\n ) {\n const Icon = Icons[iconName];\n\n const style = React.useMemo((): React.CSSProperties => {\n return {\n padding: \"0 2px\",\n ...(size && { minHeight: size }),\n ...contentStyle,\n };\n }, [contentStyle, size]);\n\n return (\n <Button ref={forwardedRef} {...props} variant=\"none\" contentStyle={style}>\n <Icon\n color={\n color ??\n (selected ? cssVars.colors.iconSelected : cssVars.colors.icon)\n }\n {...(size && { width: size, height: size })}\n />\n </Button>\n );\n })\n);\n","import React, {\n CSSProperties,\n ForwardedRef,\n forwardRef,\n ReactNode,\n useCallback,\n useMemo,\n} from \"react\";\nimport { cx, mergeConflictingClassNames } from \"../utils/classNames\";\nimport { renderIcon } from \"./Icons\";\nimport { Spacer } from \"./Spacer\";\nimport { Tooltip } from \"./Tooltip\";\nimport type { MenuItemIcon } from \"./internal/Menu\";\n\ntype ButtonVariant =\n | \"normal\"\n | \"primary\"\n | \"secondary\"\n | \"secondaryBright\"\n | \"thin\"\n | \"floating\"\n | \"none\";\n\ntype ButtonSize = \"small\" | \"normal\" | \"large\" | \"floating\";\n\nconst variantStyles: Record<ButtonVariant, string> = {\n normal:\n \"bg-button-background text-button-text hover:bg-button-background-hover active:bg-button-background-active min-w-[31px]\",\n primary:\n \"bg-primary text-white hover:bg-primary-light active:bg-primary min-w-[31px]\",\n secondary:\n \"bg-secondary text-white hover:bg-secondary-light active:bg-secondary min-w-[31px]\",\n secondaryBright: \"bg-[#0ab557] text-white hover:opacity-80 active:opacity-90\",\n floating:\n \"bg-floating-button text-text shadow-[0_1px_2px_rgba(0,0,0,0.1)] hover:opacity-80 active:opacity-90\",\n thin: \"bg-transparent text-text hover:bg-input-background-light\",\n none: \"bg-transparent text-text hover:bg-input-background-light\",\n};\n\nconst sizeStyles: Record<ButtonSize | \"thin\" | \"none\", string> = {\n small: \"px-[2px] font-sans text-[10px] font-medium\",\n normal: \"px-[6px] py-1 font-sans text-button font-medium\",\n large: \"p-3 px-4 font-sans text-heading4 font-medium\",\n thin: \"px-[1px] py-1 font-sans text-button font-medium\",\n floating: \"px-1 py-0 font-sans text-[12px] font-medium\",\n none: \"py-0 px-0\",\n};\n\nexport interface ButtonRootProps {\n id?: string;\n className?: string;\n style?: CSSProperties;\n tabIndex?: number;\n icon?: MenuItemIcon;\n iconRight?: MenuItemIcon;\n children: ReactNode;\n active?: boolean;\n disabled?: boolean;\n variant?: ButtonVariant;\n size?: ButtonSize;\n tooltip?: ReactNode;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onPointerDown?: (event: React.PointerEvent<HTMLButtonElement>) => void;\n contentStyle?: CSSProperties;\n as?: React.ElementType;\n htmlFor?: string;\n href?: string;\n target?: string;\n rel?: string;\n download?: string;\n}\n\nexport const Button = forwardRef(function Button(\n {\n id,\n className,\n style,\n tabIndex,\n icon,\n iconRight,\n tooltip,\n active = false,\n disabled = false,\n variant = \"normal\",\n size = \"normal\",\n contentStyle,\n onClick,\n children,\n as: Component = \"button\",\n ...rest\n }: ButtonRootProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const baseClassName = cx(\n \"no-underline leading-[1] relative border-0 outline-none select-none text-left rounded flex items-center justify-center [&>*]:pointer-events-none [-webkit-app-region:no-drag] focus:ring-2 focus:ring-primary focus:shadow-[0_0_0_1px_var(--n-popover-background)_inset] transition-all\",\n disabled ? \"opacity-25\" : \"\",\n !className?.includes(\"flex\") ? \"flex-none\" : \"\",\n active\n ? \"bg-button-background-active text-button-text-active hover:bg-button-background-active-hover min-w-[31px]\"\n : variantStyles[variant],\n sizeStyles[\n variant === \"thin\"\n ? \"thin\"\n : variant === \"floating\" && size !== \"small\"\n ? \"floating\"\n : variant === \"none\"\n ? \"none\"\n : size\n ]\n );\n\n const buttonClassName = useMemo(() => {\n return className\n ? mergeConflictingClassNames([baseClassName, className], {\n categories: [\"position\"],\n })\n : baseClassName;\n }, [className, baseClassName]);\n\n const buttonElement = (\n <Component\n ref={forwardedRef}\n id={id}\n className={buttonClassName}\n style={style}\n tabIndex={tabIndex}\n disabled={disabled}\n onClick={onClick}\n onDoubleClick={useCallback((event: React.MouseEvent) => {\n event.stopPropagation();\n }, [])}\n {...rest}\n >\n <span\n className=\"min-h-[19px] flex items-center flex-1 justify-center leading-[15px]\"\n style={contentStyle}\n >\n {icon && renderIcon(icon)}\n {icon && children && <Spacer.Horizontal inline size={6} />}\n {children}\n {iconRight && (icon || children) && (\n <Spacer.Horizontal inline size={6} />\n )}\n {iconRight && renderIcon(iconRight)}\n </span>\n </Component>\n );\n\n return tooltip ? (\n <Tooltip content={tooltip}>{buttonElement}</Tooltip>\n ) : (\n buttonElement\n );\n});\n\nexport default Button;\n","import tailwindConfig from \"@noya-app/noya-tailwind-config\";\n\ntype ClassNameItem = string | number | BigInt | boolean | null | undefined;\ntype Category = \"text\" | \"color\" | \"font\" | \"flex\" | \"position\";\ntype Options = {\n categories?: Category[];\n};\n\nconst colorKeys = Object.keys(tailwindConfig.theme.extend.colors).map(\n (key) => `text-${key}`\n);\nconst colorKeysSet = new Set(colorKeys);\nconst textKeys = Object.keys(tailwindConfig.theme.extend.fontSize).map(\n (key) => `text-${key}`\n);\nconst textKeysSet = new Set(textKeys);\nconst fontKeys = [\n \"thin\",\n \"extralight\",\n \"light\",\n \"normal\",\n \"medium\",\n \"semibold\",\n \"bold\",\n \"extra-bold\",\n \"black\",\n].map((key) => `font-${key}`);\nconst fontKeysSet = new Set(fontKeys);\nconst flexKeysSet = new Set([\n \"flex-auto\",\n \"flex-none\",\n \"flex-[0_0_auto]\",\n \"flex-1\",\n]);\nconst positionKeysSet = new Set([\"absolute\", \"relative\", \"fixed\", \"sticky\"]);\nconst keyMap: Record<Category, Set<string>> = {\n text: textKeysSet,\n flex: flexKeysSet,\n color: colorKeysSet,\n font: fontKeysSet,\n position: positionKeysSet,\n};\n\nexport function cx(...args: ClassNameItem[]): string {\n return args.filter(Boolean).join(\" \").trim();\n}\n\nconst filterLastClassNameInCategory = ({\n classNames,\n categoryKeys,\n}: {\n classNames: string[];\n categoryKeys: Set<string>;\n}) => {\n const lastClassInGroup = classNames.findLast((key) => categoryKeys.has(key));\n return classNames.flatMap((className) => {\n if (categoryKeys.has(className)) {\n return lastClassInGroup === className ? [className] : [];\n }\n return [className];\n });\n};\n\nexport function mergeConflictingClassNames(\n classNames: ClassNameItem | ClassNameItem[],\n options?: Options\n): string {\n const classes = Array.isArray(classNames)\n ? cx(...classNames)\n : cx(classNames);\n let classNamesList = classes.split(/\\s+/);\n options?.categories?.forEach((category) => {\n classNamesList = filterLastClassNameInCategory({\n classNames: classNamesList,\n categoryKeys: keyMap[category],\n });\n });\n return classNamesList.join(\" \");\n}\n","import * as Icons from \"@noya-app/noya-icons\";\nimport * as React from \"react\";\n\nexport type IconName = keyof typeof Icons;\n\nexport { Icons };\n\nexport function renderIcon(\n iconName: Exclude<React.ReactNode, string> | IconName\n): React.ReactNode {\n if (typeof iconName === \"string\") {\n const Icon = Icons[iconName as IconName];\n\n return <Icon />;\n }\n\n return iconName;\n}\n","/* eslint-disable react/jsx-pascal-case */\nimport type { ForwardedRef } from \"react\";\nimport * as React from \"react\";\n\ninterface Props {\n size?: number | string;\n inline?: boolean;\n}\n\n/* ----------------------------------------------------------------------------\n * Vertical\n * ------------------------------------------------------------------------- */\n\nconst SpacerVertical = React.forwardRef<HTMLSpanElement, Props>(\n ({ size, inline, ...props }, ref: ForwardedRef<HTMLSpanElement>) => {\n return (\n <span\n className={`${inline ? \"inline-block\" : \"block\"} ${size === undefined ? \"flex flex-1\" : \"\"}`}\n style={\n size\n ? {\n minHeight: `${size}px`,\n }\n : undefined\n }\n {...props}\n ref={ref}\n />\n );\n }\n);\n\n/* ----------------------------------------------------------------------------\n * Horizontal\n * ------------------------------------------------------------------------- */\n\nconst SpacerHorizontal = React.forwardRef<HTMLSpanElement, Props>(\n ({ size, inline, ...props }, ref: ForwardedRef<HTMLSpanElement>) => {\n return (\n <span\n className={`${inline ? \"inline-block\" : \"block\"} ${size === undefined ? \"flex flex-1\" : \"\"}`}\n style={\n size\n ? {\n minWidth: `${size}px`,\n }\n : undefined\n }\n {...props}\n ref={ref}\n />\n );\n }\n);\n\nexport namespace Spacer {\n export const Vertical = SpacerVertical;\n export const Horizontal = SpacerHorizontal;\n}\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport * as React from \"react\";\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../contexts/PortalScopeContext\";\nimport { textStyles } from \"./Text\";\n\n// const Arrow = styled(TooltipPrimitive.Arrow)(({ theme }) => ({\n// fill: theme.colors.popover.background,\n// }));\n\ninterface Props {\n children: React.ReactNode;\n content: React.ReactNode;\n sideOffset?: number;\n}\n\nexport const Tooltip = React.memo(function Tooltip({\n children,\n content,\n sideOffset = 2,\n}: Props) {\n const portalScopeId = usePortalScopeId();\n\n return (\n <TooltipPrimitive.Provider>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n {...portalScopeProps(portalScopeId)}\n side=\"bottom\"\n align=\"center\"\n sideOffset={sideOffset}\n collisionPadding={8}\n className={`${textStyles.small} text-text rounded-[3px] py-small px-medium bg-popover-background shadow-popover border border-solid border-divider-strong z-menu`}\n >\n {content}\n {/* <Arrow /> */}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n});\n","import React, { ForwardedRef, forwardRef, ReactHTML, ReactNode } from \"react\";\nimport { ThemeColor } from \"../theme\";\nimport { camelToKebabCase, KebabToCamelCase } from \"../theme/themeUtils\";\nimport { cx } from \"../utils/classNames\";\n\ntype Variant =\n | \"title\"\n | \"subtitle\"\n | \"heading1\"\n | \"heading2\"\n | \"heading3\"\n | \"heading4\"\n | \"heading5\"\n | \"body\"\n | \"small\"\n | \"button\"\n | \"code\"\n | \"label\";\n\nconst elements: Record<Variant, keyof ReactHTML> = {\n title: \"h1\",\n subtitle: \"h1\",\n heading1: \"h1\",\n heading2: \"h2\",\n heading3: \"h3\",\n heading4: \"h4\",\n heading5: \"h5\",\n body: \"p\",\n small: \"span\",\n button: \"span\",\n code: \"code\",\n label: \"span\",\n};\n\nexport const textStyles: Record<Variant, string> = {\n title: \"font-sans text-title font-bold\",\n subtitle: \"font-sans text-subtitle font-medium\",\n heading1: \"font-sans text-heading1 font-semibold\",\n heading2: \"font-sans text-heading2 font-medium\",\n heading3: \"font-sans text-heading3 font-normal\",\n heading4: \"font-sans text-heading4 font-medium\",\n heading5: \"font-sans text-heading5 font-medium\",\n body: \"font-sans text-base font-normal\",\n small: \"font-sans text-heading5 font-normal\",\n button: \"font-sans text-button font-medium\",\n code: \"font-mono text-code\",\n label: \"font-sans text-label font-normal uppercase\",\n} as const;\n\nexport type TextProps = {\n as?: keyof ReactHTML;\n href?: string;\n className?: string;\n style?: React.CSSProperties;\n variant: Variant;\n color?: KebabToCamelCase<ThemeColor>;\n children: ReactNode;\n id?: string;\n onClick?: () => void;\n onDoubleClick?: () => void;\n onKeyDown?: (event: React.KeyboardEvent<HTMLSpanElement>) => void;\n tabIndex?: number;\n};\n\nexport const Text = forwardRef(function Text(\n {\n as,\n variant,\n children,\n className,\n color = \"text\",\n href,\n tabIndex,\n onClick,\n onKeyDown,\n style,\n ...rest\n }: TextProps,\n forwardedRef: ForwardedRef<HTMLElement>\n) {\n const Component = as ?? elements[variant] ?? \"span\";\n\n return (\n <Component\n // @ts-expect-error expected to be many semantic html elements\n ref={forwardedRef}\n className={cx(\n `${textStyles[variant]} text-${camelToKebabCase(String(color)) ?? \"text\"} `,\n className\n )}\n style={style}\n tabIndex={tabIndex}\n onClick={onClick}\n onKeyDown={onKeyDown}\n {...((href && { href }) as any)}\n {...rest}\n >\n {children}\n </Component>\n );\n});\n\ntype PresetProps = Omit<TextProps, \"variant\">;\n\nexport const Heading1 = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"heading1\" />\n )\n);\n\nexport const Heading2 = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"heading2\" />\n )\n);\n\nexport const Heading3 = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"heading3\" />\n )\n);\n\nexport const Heading4 = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"heading4\" />\n )\n);\n\nexport const Heading5 = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"heading5\" />\n )\n);\n\nexport const Body = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"body\" />\n )\n);\n\nexport const Small = forwardRef(\n (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n <Text ref={ref} {...props} variant=\"small\" />\n )\n);\n\n// export const Label = forwardRef(\n// (props: PresetProps, ref: ForwardedRef<HTMLElement>) => (\n// <Text ref={ref} {...props} variant=\"label\" />\n// ),\n// );\n\nexport const Italic = ({ children }: { children: ReactNode }) => (\n <span\n style={{\n fontStyle: \"italic\",\n }}\n >\n {children}\n </span>\n);\n","import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Button } from \"../components/Button\";\nimport { Dialog, IDialog } from \"../components/Dialog\";\nimport { InputField } from \"../components/InputField\";\nimport { Spacer } from \"../components/Spacer\";\n\nfunction createDeferredPromise<T>() {\n let resolve: (value: T) => void = () => {};\n let reject: (value: any) => void = () => {};\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return { promise, resolve, reject };\n}\n\ntype RenderableProps = { close: () => void };\n\nexport type DialogContextValue = {\n openDialog(\n options: BaseDialogContents & {\n children: ReactNode | ((props: RenderableProps) => ReactNode);\n }\n ): Promise<void>;\n\n openInputDialog(\n options:\n | string\n | (BaseDialogContents & {\n placeholder?: string;\n initialValue?: string;\n })\n ): Promise<string | undefined>;\n\n openConfirmationDialog(\n options:\n | string\n | (BaseDialogContents & {\n confirmButtonLabel?: string;\n cancelButtonLabel?: string;\n })\n ): Promise<boolean>;\n\n containsElement(element: HTMLElement): boolean;\n};\n\nconst DialogContext = createContext<DialogContextValue | undefined>(undefined);\n\ntype BaseDialogContents = {\n style?: React.CSSProperties;\n className?: string;\n title: string;\n description?: ReactNode;\n};\n\ntype InputDialogContents = BaseDialogContents & {\n type: \"input\";\n placeholder?: string;\n inputValue: string;\n resolve: (value: string | undefined) => void;\n};\n\ntype ConfirmationDialogContents = BaseDialogContents & {\n type: \"confirmation\";\n confirmButtonLabel?: string;\n cancelButtonLabel?: string;\n resolve: (value: boolean) => void;\n};\n\ntype CustomDialogContents = BaseDialogContents & {\n type: \"custom\";\n children: ReactNode;\n resolve: () => void;\n};\n\ntype DialogContents =\n | InputDialogContents\n | ConfirmationDialogContents\n | CustomDialogContents;\n\nexport const DialogProvider = function DialogProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const [contents, setContents] = useState<DialogContents | undefined>();\n\n const isOpen = !!contents;\n\n const close = useCallback(() => {\n if (contents) {\n if (contents.type === \"input\") {\n contents.resolve(undefined);\n } else {\n contents.resolve(false);\n }\n }\n\n setContents(undefined);\n }, [contents]);\n\n const closeRef = useRef(close);\n closeRef.current = close;\n\n const submit = useCallback(() => {\n if (!contents || contents.type !== \"input\") return;\n\n contents.resolve(contents.inputValue);\n setContents(undefined);\n }, [contents]);\n\n const open: DialogContextValue[\"openInputDialog\"] = useCallback((options) => {\n const { promise, resolve } = createDeferredPromise<string | undefined>();\n\n const { title, description, initialValue, placeholder, style, className } =\n typeof options === \"string\" ? { title: options } : options;\n\n setContents({\n type: \"input\",\n title,\n description,\n inputValue: initialValue ?? \"\",\n placeholder,\n style,\n className,\n resolve: (value: string | undefined) => {\n resolve(value);\n setContents(undefined);\n },\n });\n\n return promise;\n }, []);\n\n const openConfirmation: DialogContextValue[\"openConfirmationDialog\"] =\n useCallback((options) => {\n const { promise, resolve } = createDeferredPromise<boolean>();\n\n const {\n title,\n description,\n confirmButtonLabel,\n cancelButtonLabel,\n style,\n className,\n } = typeof options === \"string\" ? { title: options } : options;\n\n setContents({\n type: \"confirmation\",\n title,\n description,\n confirmButtonLabel,\n cancelButtonLabel,\n style,\n className,\n resolve: (value: boolean) => {\n resolve(value);\n setContents(undefined);\n },\n });\n\n return promise;\n }, []);\n\n const openCustomDialog: DialogContextValue[\"openDialog\"] = useCallback(\n (options) => {\n const { promise, resolve } = createDeferredPromise<void>();\n\n const { title, description, style, className } = options;\n\n const children =\n typeof options.children === \"function\"\n ? options.children({ close: closeRef.current })\n : options.children;\n\n setContents({\n type: \"custom\",\n title,\n description,\n style,\n className,\n children,\n resolve: () => {\n resolve();\n setContents(undefined);\n },\n });\n\n return promise;\n },\n []\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== \"Enter\") return;\n\n event.stopPropagation();\n event.preventDefault();\n\n submit();\n },\n [submit]\n );\n\n const inputRef = useRef<HTMLInputElement>(null);\n const dialogRef = useRef<IDialog>(null);\n\n const containsElement = useCallback((element: HTMLElement) => {\n if (!dialogRef.current) return false;\n\n return dialogRef.current.containsElement(element);\n }, []);\n\n return (\n <>\n <DialogContext.Provider\n value={useMemo(\n () => ({\n openDialog: openCustomDialog,\n openInputDialog: open,\n openConfirmationDialog: openConfirmation,\n containsElement,\n }),\n [containsElement, open, openConfirmation, openCustomDialog]\n )}\n >\n {children}\n </DialogContext.Provider>\n <Dialog\n ref={dialogRef}\n title={contents?.title}\n description={contents?.description}\n open={isOpen}\n style={contents?.style}\n className={contents?.className}\n onOpenChange={useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n close();\n }\n },\n [close]\n )}\n onOpenAutoFocus={useCallback(\n (event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n\n if (!contents || contents.type !== \"input\") return;\n\n inputRef.current?.focus();\n inputRef.current?.setSelectionRange(\n 0,\n inputRef.current.value.length\n );\n },\n [contents]\n )}\n >\n {contents?.type === \"confirmation\" ? (\n <div className=\"flex flex-1 flex-row items-center\">\n <Spacer.Horizontal />\n <Button\n onClick={() => {\n contents.resolve(false);\n setContents(undefined);\n }}\n >\n {contents.cancelButtonLabel ?? \"Cancel\"}\n </Button>\n <Spacer.Horizontal size={16} />\n <Button\n onClick={() => {\n contents.resolve(true);\n setContents(undefined);\n }}\n >\n {contents.confirmButtonLabel ?? \"OK\"}\n </Button>\n </div>\n ) : contents?.type === \"custom\" ? (\n <>{contents.children}</>\n ) : (\n <>\n <InputField.Root>\n <InputField.Input\n ref={inputRef}\n placeholder={\n contents?.type === \"input\" ? contents.placeholder : undefined\n }\n value={contents?.type === \"input\" ? contents.inputValue : \"\"}\n onChange={(value: string) => {\n setContents((contents) =>\n contents?.type === \"input\"\n ? {\n ...contents,\n inputValue: value,\n }\n : undefined\n );\n }}\n onKeyDown={handleKeyDown}\n />\n </InputField.Root>\n <Spacer.Vertical size={20} />\n <div className=\"flex flex-1 flex-row items-center\">\n <Spacer.Horizontal />\n <Button onClick={close}>Cancel</Button>\n <Spacer.Horizontal size={16} />\n <Button\n disabled={\n !contents || contents.type !== \"input\" || !contents.inputValue\n }\n onClick={submit}\n >\n Submit\n </Button>\n </div>\n </>\n )}\n </Dialog>\n </>\n );\n};\n\nexport function useDialogContext(): DialogContextValue {\n const value = useContext(DialogContext);\n\n if (!value) {\n throw new Error(\"Missing DialogProvider\");\n }\n\n return value;\n}\n\nexport function useOpenInputDialog() {\n return useDialogContext().openInputDialog;\n}\n\nexport function useDialogContainsElement() {\n return useDialogContext().containsElement;\n}\n\nexport function useOpenConfirmationDialog() {\n return useDialogContext().openConfirmationDialog;\n}\n\nexport function useOpenDialog() {\n return useDialogContext().openDialog;\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport React, {\n ComponentProps,\n ForwardedRef,\n forwardRef,\n ReactNode,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { IconButton } from \"./IconButton\";\nimport { Spacer } from \"./Spacer\";\n\nconst StyledOverlay = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cx(`fixed inset-0 bg-[rgba(0,0,0,0.5)] `, className)}\n {...props}\n />\n));\n\nconst StyledContent = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => {\n return (\n <DialogPrimitive.Content\n ref={ref}\n className={cx(\n `fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 \n w-[90vw] max-w-[550px] max-h-[85vh] p-dialog-padding rounded-[2px] \n font-sans text-heading5 font-normal leading-[19px] text-text-muted \n bg-popover-background pointer-events-all z-[1000] focus:outline-none \n shadow-dialog-shadow\n flex flex-col\n `,\n className\n )}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n );\n});\n\nconst StyledTitle = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cx(\n `m-0 font-sans text-heading3 font-medium leading-[1.4] text-text `,\n className\n )}\n {...props}\n />\n));\n\nconst StyledDescription = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cx(\n `m-0 font-sans text-heading5 font-normal leading-[19px] text-text-muted `,\n className\n )}\n {...props}\n />\n));\n\nexport interface IDialog {\n containsElement: (element: HTMLElement) => boolean;\n}\n\ninterface Props {\n title?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n style?: ComponentProps<typeof StyledContent>[\"style\"];\n open: ComponentProps<typeof DialogPrimitive.Root>[\"open\"];\n onOpenChange?: ComponentProps<typeof DialogPrimitive.Root>[\"onOpenChange\"];\n onOpenAutoFocus?: ComponentProps<\n typeof DialogPrimitive.Content\n >[\"onOpenAutoFocus\"];\n closeOnInteractOutside?: boolean;\n showCloseButton?: boolean;\n className?: string;\n}\n\nexport const Dialog = forwardRef(function Dialog(\n {\n children,\n title,\n description,\n open,\n style,\n onOpenChange,\n onOpenAutoFocus,\n closeOnInteractOutside = true,\n className,\n showCloseButton = true,\n }: Props,\n forwardedRef: ForwardedRef<IDialog>\n) {\n const contentRef = useRef<HTMLDivElement>(null);\n\n useImperativeHandle(forwardedRef, () => ({\n containsElement(element) {\n if (!contentRef.current) return false;\n return contentRef.current.contains(element);\n },\n }));\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <StyledOverlay />\n <StyledContent\n ref={contentRef}\n onOpenAutoFocus={onOpenAutoFocus}\n style={style}\n className={className}\n {...(closeOnInteractOutside === false && {\n onPointerDownOutside: (event) => event.preventDefault(),\n onInteractOutside: (event) => event.preventDefault(),\n })}\n >\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <IconButton\n iconName=\"Cross1Icon\"\n className=\"z-[1]\"\n style={{\n position: \"absolute\",\n top: \"var(--n-dialog-padding)\",\n right: \"var(--n-dialog-padding)\",\n }}\n />\n </DialogPrimitive.Close>\n )}\n {title && (\n <>\n <StyledTitle>{title}</StyledTitle>\n <Spacer.Vertical size={description ? 10 : 20} />\n </>\n )}\n {description && (\n <>\n <StyledDescription>{description}</StyledDescription>\n <Spacer.Vertical size={20} />\n </>\n )}\n {children}\n </StyledContent>\n </DialogPrimitive.Root>\n );\n});\n\nexport const FullscreenDialog = forwardRef(function FullscreenDialog(\n { style, ...rest }: Props,\n forwardedRef: ForwardedRef<IDialog>\n) {\n return (\n <Dialog\n ref={forwardedRef}\n className=\"w-full h-full max-w-full max-h-full top-0 left-0 translate-none flex flex-col p-0\"\n style={style}\n {...rest}\n />\n );\n});\n","import { DropdownChevronIcon } from \"@noya-app/noya-icons\";\nimport { memoGeneric, useMergeRefs, useSize } from \"@noya-app/react-utils\";\nimport { Property } from \"csstype\";\nimport React, {\n createContext,\n FocusEventHandler,\n ForwardedRef,\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useId,\n useMemo,\n useState,\n} from \"react\";\nimport { useLabel, useLabelPosition } from \"../hooks/useLabel\";\nimport { cx, mergeConflictingClassNames } from \"../utils/classNames\";\nimport handleNudge from \"../utils/handleNudge\";\nimport { getInsetEndStyles, InputSize, startBaseStyles } from \"../utils/inputs\";\nimport { Button, ButtonRootProps } from \"./Button\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport { MenuItem } from \"./internal/Menu\";\nimport TextInput, { TextInputProps } from \"./internal/TextInput\";\nimport { Label } from \"./Label\";\nimport { Popover } from \"./Popover\";\n\nexport type InputFieldSize = \"small\" | \"medium\" | \"large\";\n\ntype InputFieldContextValue = {\n isFocused: boolean;\n onFocusChange: (isFocused: boolean) => void;\n inputRef: ForwardedRef<HTMLInputElement>;\n startRef: ForwardedRef<HTMLSpanElement>;\n endRef: ForwardedRef<HTMLSpanElement>;\n endWidth?: number;\n} & Pick<InputFieldRootProps, \"endWidth\" | \"startWidth\" | \"size\" | \"id\">;\n\nconst InputFieldContext = createContext<InputFieldContextValue>({\n startWidth: undefined,\n size: \"medium\",\n isFocused: false,\n onFocusChange: () => {},\n inputRef: null,\n startRef: null,\n endRef: null,\n});\n\nexport const useInputFieldContext = () => useContext(InputFieldContext);\n\nconst noop = () => {};\n\nexport const getFieldSpacing = ({\n endWidth = 0,\n startWidth = 0,\n variant,\n}: {\n endWidth?: number;\n startWidth?: number;\n variant?: InputFieldVariant;\n}) => ({\n paddingLeft: `${variant === \"bare\" ? startWidth : startWidth ? startWidth + 12 : 6}px`,\n paddingRight: `${variant === \"bare\" ? endWidth : endWidth ? endWidth + 12 : 6}px`,\n});\n\n/* ----------------------------------------------------------------------------\n * Dropdown\n * ------------------------------------------------------------------------- */\n\ninterface InputFieldDropdownProps<T extends string> {\n id?: string;\n items: MenuItem<T>[];\n onSelect: (value: T) => void;\n children?: ReactNode;\n}\n\nconst InputFieldDropdownMenu = memoGeneric(function InputFieldDropdownMenu<\n T extends string,\n>({ id, items, onSelect, children }: InputFieldDropdownProps<T>) {\n return (\n <DropdownMenu<T>\n items={items}\n onSelect={onSelect}\n align=\"end\"\n sideOffset={8}\n >\n {children || (\n <InputFieldButton variant=\"floating\" id={id}>\n <DropdownChevronIcon />\n </InputFieldButton>\n )}\n </DropdownMenu>\n );\n});\n\n/* ----------------------------------------------------------------------------\n * Button\n * ------------------------------------------------------------------------- */\n\n/** Inserts a Button at the end of the input. Should not be used with an InputField.Label */\nconst InputFieldButton = memo(\n forwardRef(function InputFieldButton(\n props: React.ButtonHTMLAttributes<HTMLButtonElement> &\n ButtonRootProps & {\n variant?: \"floating\" | \"normal\";\n },\n forwardedRef: ForwardedRef<HTMLButtonElement>\n ) {\n const {\n children,\n onClick,\n className,\n style,\n variant = \"normal\",\n as = \"button\",\n ...rest\n } = props;\n const { size, inputRef } = useInputFieldContext();\n\n const defaultHandleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (inputRef && typeof inputRef !== \"function\") {\n inputRef.current?.focus();\n // Select all text\n inputRef.current?.setSelectionRange(0, inputRef.current.value.length);\n }\n\n event.preventDefault();\n event.stopPropagation();\n },\n [inputRef]\n );\n\n const handlePointerDown = useCallback(\n (event: React.PointerEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n },\n []\n );\n\n const memoizedStyle = useMemo(\n () => ({\n ...(variant === \"floating\" && {\n paddingLeft: \"0px\",\n paddingRight: \"0px\",\n }),\n ...style,\n }),\n [style, variant]\n );\n\n return (\n <Button\n as={as}\n style={memoizedStyle}\n ref={forwardedRef}\n variant=\"floating\"\n onClick={onClick ?? defaultHandleClick}\n onPointerDown={handlePointerDown}\n tabIndex={-1}\n size={size === \"medium\" ? \"normal\" : size}\n className={cx(\n className,\n variant === \"floating\" && \"bg-transparent shadow-none\"\n )}\n {...rest}\n >\n {children}\n </Button>\n );\n })\n);\n\n/* ----------------------------------------------------------------------------\n * Input\n * ------------------------------------------------------------------------- */\n\n// const createCrossSVGString = memoize(\n// (color: string) =>\n// `<svg width='15' height='15' viewBox='0 0 15 15' fill='${color}' xmlns='http://www.w3.org/2000/svg'>\n// <path d='M0.877075 7.49988C0.877075 3.84219 3.84222 0.877045 7.49991 0.877045C11.1576 0.877045 14.1227 3.84219 14.1227 7.49988C14.1227 11.1575 11.1576 14.1227 7.49991 14.1227C3.84222 14.1227 0.877075 11.1575 0.877075 7.49988ZM7.49991 1.82704C4.36689 1.82704 1.82708 4.36686 1.82708 7.49988C1.82708 10.6329 4.36689 13.1727 7.49991 13.1727C10.6329 13.1727 13.1727 10.6329 13.1727 7.49988C13.1727 4.36686 10.6329 1.82704 7.49991 1.82704ZM9.85358 5.14644C10.0488 5.3417 10.0488 5.65829 9.85358 5.85355L8.20713 7.49999L9.85358 9.14644C10.0488 9.3417 10.0488 9.65829 9.85358 9.85355C9.65832 10.0488 9.34173 10.0488 9.14647 9.85355L7.50002 8.2071L5.85358 9.85355C5.65832 10.0488 5.34173 10.0488 5.14647 9.85355C4.95121 9.65829 4.95121 9.3417 5.14647 9.14644L6.79292 7.49999L5.14647 5.85355C4.95121 5.65829 4.95121 5.3417 5.14647 5.14644C5.34173 4.95118 5.65832 4.95118 5.85358 5.14644L7.50002 6.79289L9.14647 5.14644C9.34173 4.95118 9.65832 4.95118 9.85358 5.14644Z' fill-rule='evenodd' clip-rule='evenodd'></path>\n// </svg>`\n// );\n\ntype InputFieldVariant = \"normal\" | \"bare\";\n\ntype InputElementProps = {\n disabled?: boolean;\n readOnly?: boolean;\n $textAlign?: Property.TextAlign;\n $variant?: InputFieldVariant;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n value?: string;\n onSubmit?: (value: string) => void;\n as?: \"input\" | \"span\";\n};\n\nconst InputElement = forwardRef(\n (\n {\n disabled,\n readOnly,\n $textAlign,\n $variant = \"normal\",\n className,\n children,\n value,\n onSubmit,\n as = \"input\",\n style,\n ...props\n }: InputElementProps,\n forwardedRef: ForwardedRef<any>\n ) => {\n const { endWidth, inputRef, size, id, startWidth } = useInputFieldContext();\n\n const ref = useMergeRefs(inputRef, forwardedRef);\n\n const spacingStyles = getFieldSpacing({\n endWidth,\n variant: $variant,\n startWidth,\n });\n\n const inputClassName = cx(\n \"flex w-0 flex-1 relative border-0 outline-none min-w-0 self-stretch rounded bg-input-background focus:ring-2 focus:ring-primary placeholder:text-text-disabled transition-all\",\n readOnly\n ? \"text-text-muted\"\n : disabled\n ? \"text-text-disabled\"\n : \"text-text\",\n \"font-sans font-normal\",\n $textAlign && `text-${$textAlign}`,\n size === \"small\"\n ? \"text-[11px] leading-[19px] py-[1px]\"\n : size === \"large\"\n ? \"py-2.5 text-heading5\"\n : size === \"medium\"\n ? \"py-1 text-heading5\"\n : $variant === \"bare\" && \"py-1 -m-1\",\n className\n );\n\n const mergedClassName = useMemo(\n () =>\n mergeConflictingClassNames(inputClassName, {\n categories: [\"text\"],\n }),\n [inputClassName]\n );\n\n if (as === \"span\") {\n return (\n <span\n ref={ref}\n {...props}\n className={mergedClassName}\n style={{ ...spacingStyles, ...style }}\n >\n {children}\n </span>\n );\n }\n\n return (\n <TextInput\n ref={ref}\n value={value ?? \"\"}\n id={id}\n onSubmit={onSubmit ?? (() => {})}\n {...props}\n className={mergedClassName}\n style={{ ...spacingStyles, ...style }}\n />\n );\n }\n);\n\nexport type InputFieldInputProps = TextInputProps & {\n textAlign?: Property.TextAlign;\n variant?: \"bare\";\n};\n\n/** Should always be wrapped in InputField.Root */\nconst InputFieldInput = forwardRef(function InputFieldInput(\n // onFocusChange should only be passed from the root, never directly\n { textAlign, variant, ...rest }: InputFieldInputProps,\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n const { onFocusChange, inputRef } = useInputFieldContext();\n\n const ref = useMergeRefs(inputRef, forwardedRef);\n\n const handleFocusChange = useCallback(\n (isFocused: boolean) => {\n onFocusChange(isFocused);\n },\n [onFocusChange]\n );\n\n return (\n <InputElement\n ref={ref}\n $variant={variant}\n $textAlign={textAlign}\n onFocusChange={handleFocusChange}\n {...rest}\n />\n );\n});\n\nconst InputFieldTypeahead = (props: {\n prefix: string;\n value: string;\n isFocused: boolean;\n}) => {\n return (\n <InputElement\n as=\"span\"\n style={useMemo(\n () => ({\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n background: \"transparent\",\n boxShadow: \"none\",\n whiteSpace: \"pre\",\n }),\n []\n )}\n >\n <span style={{ opacity: 0 }}>{props.prefix}</span>\n {props.isFocused && (\n <span style={{ opacity: 0.5 }}>\n {props.value.slice(props.prefix.length)}\n </span>\n )}\n </InputElement>\n );\n};\n\n/* ----------------------------------------------------------------------------\n * NumberInput\n * ------------------------------------------------------------------------- */\n\ntype InputFieldNumberInputProps = Omit<\n TextInputProps,\n \"value\" | \"onChange\" | \"onKeyDown\" | \"onSubmit\" | \"readOnly\"\n> & {\n value: number | undefined;\n onNudge?: (value: number) => void;\n variant?: \"bare\";\n onFocus?: FocusEventHandler;\n onBlur?: FocusEventHandler;\n readOnly?: boolean;\n className?: string;\n} & (\n | {\n onChange: (value: number) => void;\n }\n | {\n onSubmit: (value: number) => void;\n }\n );\n\nfunction parseNumber(value: string) {\n return value ? Number(value) : NaN;\n}\n\nfunction InputFieldNumberInput(props: InputFieldNumberInputProps) {\n const { value, placeholder, onNudge, onBlur, readOnly, ...rest } = props;\n const onSubmit = \"onSubmit\" in props ? props.onSubmit : undefined;\n const onChange = \"onChange\" in props ? props.onChange : undefined;\n\n // Internal value is used to handle empty string as a valid state,\n // e.g. when the user deletes the value before entering a new one.\n // This is only used for in the onChange case.\n const [internalValue, setInternalValue] = useState<string | undefined>();\n\n const handleSubmit = useCallback(\n (value: string) => {\n const newValue = parseNumber(value);\n\n if (!isNaN(newValue)) {\n onSubmit?.(newValue);\n }\n },\n [onSubmit]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n const amount = handleNudge(event);\n\n if (!amount) return;\n\n onNudge?.(amount);\n setInternalValue(undefined);\n\n event.preventDefault();\n event.stopPropagation();\n },\n [onNudge]\n );\n\n const handleChange = useCallback(\n (value: string) => {\n if (value === \"\" || value === \"-\" || value === \".\") {\n setInternalValue(value);\n return;\n }\n\n if (value.endsWith(\".\")) {\n setInternalValue(value);\n return;\n }\n\n setInternalValue(undefined);\n\n const newValue = parseNumber(value);\n\n if (!isNaN(newValue)) {\n onChange?.(newValue);\n }\n },\n [onChange]\n );\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setInternalValue(undefined);\n onBlur?.(event);\n },\n [onBlur]\n );\n\n return (\n <InputFieldInput\n {...rest}\n value={\n internalValue !== undefined\n ? String(internalValue)\n : value === undefined\n ? \"\"\n : String(value)\n }\n placeholder={placeholder}\n onKeyDown={!readOnly ? handleKeyDown : undefined}\n onBlur={handleBlur}\n {...(readOnly ? { readOnly: true } : {})}\n {...(\"onChange\" in props\n ? { onChange: readOnly ? noop : handleChange }\n : { onSubmit: readOnly ? noop : handleSubmit })}\n />\n );\n}\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nconst RootContainer = forwardRef<\n HTMLDivElement,\n {\n $width?: number;\n className?: string;\n children?: React.ReactNode;\n style?: React.CSSProperties;\n }\n>(({ $width, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cx(\"flex flex-row relative flex-1\", className)}\n style={{\n maxWidth: $width || $width === 0 ? `${$width}px` : undefined,\n ...props.style,\n }}\n {...props}\n />\n));\n\ninterface InputFieldRootProps {\n id?: string;\n children?: ReactNode;\n start?: ReactNode;\n startClassName?: string;\n end?: ReactNode;\n endClassName?: string;\n label?: ReactNode;\n width?: number;\n startWidth?: number;\n endWidth?: number;\n /** @default medium */\n size?: InputSize;\n renderPopoverContent?: (options: { width: number }) => ReactNode;\n /**\n * if there is a popover, this is the offset from the trigger\n * @default 3\n */\n sideOffset?: number;\n onFocusChange?: (isFocused: boolean) => void;\n style?: React.CSSProperties;\n className?: string;\n}\n\nfunction InputFieldRoot({\n id,\n children,\n width,\n sideOffset = 3,\n startWidth: startWidthProp,\n endWidth: endWidthProp,\n size = \"medium\",\n renderPopoverContent,\n onFocusChange,\n style,\n className,\n start,\n end,\n startClassName,\n endClassName,\n label: labelProp,\n}: InputFieldRootProps) {\n const randomId = useId();\n\n const [isFocused, setIsFocused] = React.useState(false);\n\n const startRef = React.useRef<HTMLSpanElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const endRef = React.useRef<HTMLSpanElement>(null);\n\n const measuredInputSize = useSize(inputRef, \"width\");\n const measuredStartSize = useSize(startRef, \"width\");\n const measuredEndSize = useSize(endRef, \"width\");\n const labelPosition = useLabelPosition();\n const { label } = useLabel({ fieldId: id });\n\n const endStyles = getInsetEndStyles(size);\n\n const handleFocusChange = useCallback(\n (isFocused: boolean) => {\n setIsFocused(isFocused);\n onFocusChange?.(isFocused);\n },\n [onFocusChange]\n );\n\n const startWidth = measuredStartSize?.width ?? startWidthProp;\n const endWidth = measuredEndSize?.width ?? endWidthProp;\n\n const contextValue = useMemo(\n (): InputFieldContextValue => ({\n startWidth,\n endWidth,\n inputRef,\n startRef,\n endRef,\n size,\n isFocused,\n onFocusChange: handleFocusChange,\n id: id ?? randomId,\n }),\n [startWidth, endWidth, size, isFocused, handleFocusChange, id, randomId]\n );\n\n const insetLabel = useMemo(\n () => (\n <Label htmlFor={id} className=\"!text-text-disabled\">\n {labelProp ?? label}\n </Label>\n ),\n [id, labelProp, label]\n );\n\n const rootElement = (\n <RootContainer $width={width} style={style} className={className}>\n {children}\n {start && (\n <span ref={startRef} className={cx(startBaseStyles, startClassName)}>\n {start}\n </span>\n )}\n {(end || label) && (\n <span\n ref={endRef}\n className={cx(endStyles, label && end && \"gap-1.5\", endClassName)}\n >\n {labelProp\n ? insetLabel\n : label && labelPosition === \"inset\" && insetLabel}\n {end}\n </span>\n )}\n </RootContainer>\n );\n\n const measuredWidthObject = useMemo(\n () =>\n measuredInputSize ? { width: measuredInputSize.width + 4 } : undefined,\n [measuredInputSize]\n );\n\n return (\n <InputFieldContext.Provider value={contextValue}>\n {renderPopoverContent ? (\n <Popover\n open={true}\n trigger={rootElement}\n sideOffset={sideOffset}\n showArrow={false}\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n >\n {measuredWidthObject && (\n <div\n className=\"flex flex-col overflow-hidden\"\n style={measuredWidthObject}\n >\n {renderPopoverContent(measuredWidthObject)}\n </div>\n )}\n </Popover>\n ) : (\n rootElement\n )}\n </InputFieldContext.Provider>\n );\n}\n\nconst PrimitiveInputField = ({\n readOnly,\n disabled,\n className,\n style,\n ...props\n}: {\n readOnly?: boolean;\n disabled?: boolean;\n} & React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n>) => {\n const { id, endWidth } = useInputFieldContext();\n\n const spacingStyles = getFieldSpacing({\n endWidth,\n });\n const memoizedStyles = useMemo(\n () => ({ ...spacingStyles, ...style }),\n [spacingStyles, style]\n );\n return (\n <input\n style={memoizedStyles}\n id={id}\n className={cx(\n \"flex w-0 flex-1 relative border-none outline-none min-w-0 self-stretch rounded py-1 bg-input-background select-all pointer-events-[all] focus:ring-2 focus:ring-primary font-sans font-normal text-heading5 placeholder:text-text-disabled focus:z-interactable transition-all\",\n readOnly\n ? \"text-text-muted\"\n : disabled\n ? \"text-text-disabled\"\n : \"text-text\",\n className\n )}\n {...props}\n />\n );\n};\n\n// Create a type for the main InputField component that combines Root and Input props\nexport type InputFieldProps = InputFieldRootProps & InputFieldInputProps;\n\n// Create a map of all subcomponents\nconst InputFieldSubcomponents = {\n Root: memo(InputFieldRoot),\n Input: memo(InputFieldInput),\n Typeahead: memo(InputFieldTypeahead),\n NumberInput: memo(InputFieldNumberInput),\n DropdownMenu: InputFieldDropdownMenu,\n Button: InputFieldButton,\n PrimitiveElement: PrimitiveInputField,\n} as const;\n\n// Create the main InputField component\nconst InputFieldComponent = forwardRef<HTMLInputElement, InputFieldProps>(\n function InputField(props: InputFieldProps, ref) {\n const {\n children,\n width,\n endWidth,\n startWidth,\n label,\n start,\n end,\n size,\n renderPopoverContent,\n sideOffset,\n onFocusChange,\n style,\n className,\n ...inputProps\n } = props;\n\n return (\n <InputFieldSubcomponents.Root\n width={width}\n endWidth={endWidth}\n startWidth={startWidth}\n label={label}\n start={start}\n end={end}\n size={size}\n renderPopoverContent={renderPopoverContent}\n sideOffset={sideOffset}\n onFocusChange={onFocusChange}\n style={style}\n className={className}\n >\n <InputFieldSubcomponents.Input ref={ref} {...inputProps} />\n {children}\n </InputFieldSubcomponents.Root>\n );\n }\n);\n\n// Export both the namespace and the component\nconst InputField = Object.assign(InputFieldComponent, InputFieldSubcomponents);\n\nexport { InputField };\n","import React, { ReactNode } from \"react\";\nimport { LabelPosition } from \"../components/Label\";\n\nexport const LabelContext = React.createContext<{\n fieldId?: string;\n label?: React.ReactNode;\n}>({\n fieldId: \"\",\n label: undefined,\n});\n\ntype UseLabelParams = {\n label?: ReactNode;\n fieldId?: string;\n};\n\nexport const useLabel = ({ label, fieldId }: UseLabelParams) => {\n const { label: labelFromContext, fieldId: fieldIdFromContext } =\n React.useContext(LabelContext);\n\n return {\n label: label ?? labelFromContext,\n fieldId: fieldId ?? fieldIdFromContext,\n };\n};\n\nexport const LabelPositionContext =\n React.createContext<LabelPositionContextValue>({\n position: \"start\",\n });\n\nexport const useLabelPosition = () => {\n const { position } = React.useContext(LabelPositionContext);\n return position;\n};\n\nexport type LabelPositionContextValue = {\n position: LabelPosition;\n};\n\nexport type LabelWidthContextValue = {\n width: number;\n};\nexport const LabelWidthContext = React.createContext<LabelWidthContextValue>({\n width: 100,\n});\n\nexport const useLabelWidth = () => {\n const { width } = React.useContext(LabelWidthContext);\n return width;\n};\n","// Given a KeyboardEvent, returns the nudge amount\nexport default function handleNudge(e: {\n key: string;\n shiftKey: boolean;\n altKey: boolean;\n}): number | undefined {\n let handled = false;\n let amount = 0;\n\n switch (e.key) {\n case 'ArrowUp':\n amount = 1;\n handled = true;\n break;\n case 'ArrowDown':\n amount = -1;\n handled = true;\n break;\n }\n\n if (!handled) return;\n\n if (e.shiftKey) {\n amount *= 10;\n } else if (e.altKey) {\n amount *= 0.1;\n }\n\n return handled ? amount : undefined;\n}\n","import { cx } from \"./classNames\";\n\nexport type InputSize = \"small\" | \"medium\" | \"large\";\n\nconst insetEndBaseStyles = \"absolute inset-y-0 flex items-center z-label\";\n\nexport const getInsetEndStyles = (size: InputSize = \"medium\") => {\n return cx(\n insetEndBaseStyles,\n size === \"large\"\n ? \"right-2\"\n : size === \"medium\"\n ? \"right-1.5\"\n : size === \"small\"\n ? \"right-0.5\"\n : \"\",\n size === \"small\" ? \"min-h-[19px]\" : \"min-h-input-height\"\n );\n};\n\nexport const startBaseStyles = \"absolute left-1.5 inset-y-0 flex items-center\";\n","import { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport React, {\n AriaRole,\n FocusEventHandler,\n ForwardedRef,\n forwardRef,\n InputHTMLAttributes,\n KeyboardEventHandler,\n MouseEventHandler,\n PointerEventHandler,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useGlobalInputBlurListener } from \"../../contexts/GlobalInputBlurContext\";\n\ntype Props = {\n id?: string;\n style?: any;\n className?: string;\n type?: \"text\" | \"search\";\n disabled?: boolean;\n value: string;\n placeholder?: string;\n role?: AriaRole;\n name?: HTMLInputElement[\"name\"];\n onKeyDown?: KeyboardEventHandler;\n onClick?: MouseEventHandler;\n onDoubleClick?: MouseEventHandler;\n onPointerDown?: PointerEventHandler;\n onFocusCapture?: FocusEventHandler;\n onFocusChange?: (isFocused: boolean) => void;\n onBlur?: FocusEventHandler;\n} & Pick<\n InputHTMLAttributes<HTMLInputElement>,\n \"autoComplete\" | \"autoCapitalize\" | \"autoCorrect\" | \"spellCheck\" | \"autoFocus\"\n>;\n\ntype ReadOnlyProps = Props & {\n readOnly: true;\n};\n\nconst ReadOnlyTextInput = forwardRef(function ReadOnlyTextInput(\n { onKeyDown, onFocusChange, value, ...rest }: ReadOnlyProps,\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n return (\n <input\n ref={forwardedRef}\n {...rest}\n value={value}\n onKeyDown={onKeyDown}\n readOnly\n className=\"focus:z-interactable\"\n />\n );\n});\n\ntype ControlledProps = Props & {\n onChange: (value: string) => void;\n onFocus?: FocusEventHandler;\n onBlur?: FocusEventHandler;\n};\n\nconst ControlledTextInput = forwardRef(function ControlledTextInput(\n {\n onKeyDown,\n value,\n onChange,\n onFocusChange,\n onBlur,\n onFocusCapture,\n onFocus,\n ...rest\n }: ControlledProps,\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n\n onFocusChange?.(false);\n },\n [onBlur, onFocusChange]\n );\n\n const handleFocusCapture = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n onFocusCapture?.(event);\n\n onFocusChange?.(true);\n },\n [onFocusCapture, onFocusChange]\n );\n\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n\n onFocusChange?.(true);\n },\n [onFocus, onFocusChange]\n );\n\n return (\n <input\n ref={forwardedRef}\n {...rest}\n value={value}\n onKeyDown={onKeyDown}\n onChange={useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) =>\n onChange(event.target.value),\n [onChange]\n )}\n onBlur={handleBlur}\n onFocusCapture={handleFocusCapture}\n onFocus={handleFocus}\n />\n );\n});\n\ntype SubmittableProps = Props & {\n onSubmit: (value: string) => void;\n allowSubmittingWithSameValue?: boolean;\n submitAutomaticallyAfterDelay?: number;\n /** @default true */\n submitOnBlur?: boolean;\n};\n\nconst SubmittableTextInput = forwardRef(function SubmittableTextInput(\n {\n onKeyDown,\n value,\n onSubmit,\n onBlur,\n onFocusChange,\n onFocusCapture,\n allowSubmittingWithSameValue = false,\n submitAutomaticallyAfterDelay,\n submitOnBlur = true,\n ...rest\n }: SubmittableProps,\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n const ref = React.useRef<HTMLInputElement>(null);\n\n const latestValue = useRef(value);\n latestValue.current = value;\n\n // Track whether the user has edited the input since the last submission.\n // We use this to support automatically submitting the input after a delay.\n const userDidEdit = useRef(false);\n\n const isSubmitTriggeredByEscapeKey = useRef(false);\n\n const [internalValue, setInternalValue] = useState(\"\");\n\n useLayoutEffect(() => {\n setInternalValue(value);\n }, [value]);\n\n const handleSubmit = useCallback(() => {\n // If this submission was triggered with Escape, we attempt to submit the original value.\n // This will only actually call `onSubmit` if `allowSubmittingWithSameValue` is also true.\n const submissionValue = isSubmitTriggeredByEscapeKey.current\n ? value\n : internalValue;\n\n isSubmitTriggeredByEscapeKey.current = false;\n\n if (submissionValue === value && !allowSubmittingWithSameValue) return;\n\n onSubmit(submissionValue);\n\n userDidEdit.current = false;\n\n setInternalValue(latestValue.current);\n }, [allowSubmittingWithSameValue, value, internalValue, onSubmit]);\n\n useGlobalInputBlurListener(\n useCallback(() => {\n if (ref.current !== document.activeElement) return;\n\n handleSubmit();\n }, [handleSubmit])\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n handleSubmit();\n\n event.preventDefault();\n event.stopPropagation();\n } else if (event.key === \"Escape\") {\n isSubmitTriggeredByEscapeKey.current = true;\n\n ref.current?.blur();\n } else {\n onKeyDown?.(event);\n }\n },\n [onKeyDown, handleSubmit]\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n userDidEdit.current = true;\n\n setInternalValue(event.target.value);\n },\n []\n );\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n\n onFocusChange?.(false);\n\n if (submitOnBlur) {\n handleSubmit();\n }\n },\n [onBlur, onFocusChange, handleSubmit, submitOnBlur]\n );\n\n const handleFocusCapture = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n onFocusCapture?.(event);\n\n onFocusChange?.(true);\n },\n [onFocusCapture, onFocusChange]\n );\n\n const autoSubmitTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const latestHandleSubmit = useRef(handleSubmit);\n latestHandleSubmit.current = handleSubmit;\n\n useEffect(() => {\n if (submitAutomaticallyAfterDelay) {\n if (autoSubmitTimeoutRef.current) {\n clearTimeout(autoSubmitTimeoutRef.current);\n }\n\n autoSubmitTimeoutRef.current = setTimeout(() => {\n if (userDidEdit.current === false) return;\n\n latestHandleSubmit.current();\n }, submitAutomaticallyAfterDelay);\n }\n\n // Clear the timeout when the component is unmounted or if the value changes\n return () => {\n if (autoSubmitTimeoutRef.current) {\n clearTimeout(autoSubmitTimeoutRef.current);\n }\n };\n // Track `internalValue` to explicitly reset the timer\n }, [internalValue, submitAutomaticallyAfterDelay]);\n\n return (\n <input\n ref={composeRefs(ref, forwardedRef)}\n {...rest}\n value={internalValue}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocusCapture={handleFocusCapture}\n />\n );\n});\n\nexport type TextInputProps = ReadOnlyProps | ControlledProps | SubmittableProps;\n\n/**\n * This component shouldn't be used directly. Instead use the InputField components.\n */\nexport default forwardRef(function TextInput(\n props: TextInputProps,\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n const commonProps: TextInputProps = {\n onPointerDown: useCallback(\n (event: React.PointerEvent) => event.stopPropagation(),\n []\n ),\n onClick: useCallback(\n (event: React.MouseEvent) => event.stopPropagation(),\n []\n ),\n autoComplete: \"off\",\n autoCapitalize: \"off\",\n autoCorrect: \"off\",\n spellCheck: false,\n type: \"text\",\n disabled: false,\n ...props,\n };\n\n if (\"readOnly\" in commonProps) {\n return <ReadOnlyTextInput ref={forwardedRef} {...commonProps} readOnly />;\n } else if (\"onChange\" in commonProps) {\n return <ControlledTextInput ref={forwardedRef} {...commonProps} />;\n } else {\n return <SubmittableTextInput ref={forwardedRef} {...commonProps} />;\n }\n});\n","import { createContext, useContext, useEffect } from 'react';\n\nexport type GlobalInputBlurContextValue = {\n addListener: (f: () => void) => void;\n removeListener: (f: () => void) => void;\n trigger: () => void;\n};\n\nconst defaultValue = (() => {\n const listeners: (() => void)[] = [];\n\n const value: GlobalInputBlurContextValue = {\n addListener(f) {\n listeners.push(f);\n },\n removeListener(f) {\n const index = listeners.indexOf(f);\n if (index === -1) return;\n listeners.splice(index, 1);\n },\n trigger() {\n listeners.forEach((f) => {\n f();\n });\n },\n };\n\n return value;\n})();\n\nconst GlobalInputBlurContext =\n createContext<GlobalInputBlurContextValue>(defaultValue);\n\nexport const GlobalInputBlurProvider = GlobalInputBlurContext.Provider;\n\n/**\n * Some components store their editable state internally.\n * We trigger this event before selection changes so that they can commit their\n * edits before they unmount. This is more manual but simpler than doing so during\n * the unmount phase (e.g. the return function of `useEffect`), since handlers are\n * guaranteed to be called with the current data.\n */\nexport const useGlobalInputBlur = (): GlobalInputBlurContextValue => {\n return useContext(GlobalInputBlurContext);\n};\n\nexport function useGlobalInputBlurListener(f: () => void) {\n const context = useGlobalInputBlur();\n\n useEffect(() => {\n context.addListener(f);\n\n return () => {\n context.removeListener(f);\n };\n }, [context, f]);\n}\n\nexport function useGlobalInputBlurTrigger() {\n return useGlobalInputBlur().trigger;\n}\n","import React, { LabelHTMLAttributes, forwardRef, memo } from \"react\";\nimport { mergeConflictingClassNames } from \"../utils/classNames\";\n\nexport type LabelPosition = \"inset\" | \"start\" | \"end\" | \"above\";\n\nexport interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {}\n\nconst labelStyles = \"flex items-center select-none z-label relative\";\nconst labelTextStyles =\n \"font-sans text-label uppercase leading-3 font-bold text-text-muted\";\n\nexport const Label = memo(\n forwardRef<HTMLLabelElement, LabelProps>(function Label(\n { className, children, ...props },\n ref\n ) {\n return (\n <label\n ref={ref}\n className={mergeConflictingClassNames(\n [\n labelStyles,\n labelTextStyles,\n \"text-left min-h-input-height\",\n className,\n ],\n {\n categories: [\"color\", \"font\"],\n }\n )}\n {...props}\n >\n {children}\n </label>\n );\n })\n);\n","import { useControlledOrUncontrolled } from \"@noya-app/react-utils\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport React, { ComponentProps, useEffect, useId, useRef } from \"react\";\nimport { useOpenPortalsControls } from \"../contexts/OpenPortalsContext\";\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../contexts/PortalScopeContext\";\nimport { cx } from \"../utils/classNames\";\nimport { IconButton } from \"./IconButton\";\n\nconst closeStyles: React.CSSProperties = {\n all: \"unset\",\n fontFamily: \"inherit\",\n};\n\ntype PopoverVariant = \"normal\" | \"large\";\n\ninterface Props\n extends Pick<\n ComponentProps<(typeof PopoverPrimitive)[\"Content\"]>,\n | \"onOpenAutoFocus\"\n | \"onCloseAutoFocus\"\n | \"onPointerDownOutside\"\n | \"onInteractOutside\"\n | \"onFocusOutside\"\n | \"side\"\n > {\n children: React.ReactNode;\n trigger: React.ReactNode;\n variant?: PopoverVariant;\n closable?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n sideOffset?: number;\n onClickClose?: () => void;\n showArrow?: boolean;\n className?: string;\n portalContainer?: HTMLElement | null;\n}\n\nexport const popoverStyle = {\n base: \"rounded font-[14px] bg-popover-background shadow-popover max-h-[600px] overflow-y-auto text-text-muted z-[1000]\",\n large: \"w-[680px]\",\n normal: \"w-[240px]\",\n};\n\nexport function Popover({\n children,\n trigger,\n variant,\n closable,\n open,\n side,\n sideOffset = 4,\n showArrow = true,\n onOpenChange,\n onOpenAutoFocus,\n onCloseAutoFocus,\n onPointerDownOutside,\n onInteractOutside,\n onFocusOutside,\n onClickClose,\n className,\n portalContainer,\n}: Props) {\n const defaultId = useId();\n const portalScopeId = usePortalScopeId();\n const contentRef = useRef<HTMLDivElement>(null);\n const [isOpen, setIsOpen] = useControlledOrUncontrolled({\n value: open,\n onChange: onOpenChange,\n defaultValue: false,\n });\n\n const { addOpenPortal, removeOpenPortal } = useOpenPortalsControls();\n\n useEffect(() => {\n if (!isOpen) return;\n\n addOpenPortal(portalScopeId || defaultId);\n\n return () => {\n removeOpenPortal(portalScopeId || defaultId);\n };\n }, [addOpenPortal, isOpen, portalScopeId, removeOpenPortal, defaultId]);\n\n return (\n <PopoverPrimitive.Root open={isOpen} onOpenChange={setIsOpen}>\n <PopoverPrimitive.Trigger asChild>{trigger}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={portalContainer}>\n <PopoverPrimitive.Content\n {...portalScopeProps(portalScopeId)}\n ref={contentRef}\n className={cx(\n popoverStyle.base,\n variant === \"large\" && popoverStyle.large,\n variant === \"normal\" && popoverStyle.normal,\n className\n )}\n side={side}\n align=\"center\"\n sideOffset={sideOffset}\n onOpenAutoFocus={onOpenAutoFocus}\n onCloseAutoFocus={onCloseAutoFocus}\n onInteractOutside={onInteractOutside}\n onFocusOutside={onFocusOutside}\n onPointerDownOutside={(event) => {\n if (\n isEventInsideElement(\n event.detail.originalEvent,\n contentRef.current\n )\n ) {\n event.preventDefault();\n }\n\n onPointerDownOutside?.(event);\n }}\n collisionPadding={8}\n arrowPadding={2}\n // Don't propagate pointer down events to the canvas\n // onPointerDown={(event) => {\n // event.stopPropagation();\n // }}\n // onWheel={(event) => {\n // event.stopPropagation();\n // }}\n >\n {children}\n {showArrow && (\n <PopoverPrimitive.Arrow className=\"fill-popover-background\" />\n )}\n {closable && (\n <PopoverPrimitive.Close\n className=\"rounded-full h-[25px] w-[25px] inline-flex items-center justify-center absolute top-[5px] right-[5px]\"\n style={closeStyles}\n >\n <IconButton iconName=\"Cross2Icon\" onClick={onClickClose} />\n </PopoverPrimitive.Close>\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\n/**\n * Radix ignores pointer-events on the body when a popover is open.\n * This function checks if an event is inside an element by temporarily\n * setting pointer-events to auto and then restoring it afterward.\n */\nfunction isEventInsideElement(\n event: PointerEvent,\n element: HTMLElement | null\n) {\n if (!element) return false;\n\n const body = document.body;\n const originalPointerEvents = body.style.pointerEvents;\n body.style.pointerEvents = \"auto\";\n\n // Get all elements at the point\n const elementsAtPoint = document.elementsFromPoint(\n event.clientX,\n event.clientY\n );\n\n // Restore original pointer-events\n body.style.pointerEvents = originalPointerEvents;\n\n const target = elementsAtPoint.at(0);\n\n return target && element.contains(target);\n}\n","import * as React from \"react\";\n\nexport type OpenPortalsContextValue = {\n hasOpenPortals: boolean;\n};\n\nexport type OpenPortalControlsContextValue = {\n addOpenPortal: (portal: string) => void;\n removeOpenPortal: (portal: string) => void;\n};\n\n/**\n * This context is used to track the open portals in the design system.\n *\n * We currently use this so that we can cover up iframes when there are open portals.\n * This lets us intercept click events that would otherwise be swallowed by the iframe.\n */\nconst OpenPortalsContext = React.createContext<OpenPortalsContextValue>({\n hasOpenPortals: false,\n});\n\nconst OpenPortalControlsContext =\n React.createContext<OpenPortalControlsContextValue>({\n addOpenPortal: () => {},\n removeOpenPortal: () => {},\n });\n\nexport const OpenPortalsProvider = React.memo(function OpenPortalsProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const [openPortals, setOpenPortals] = React.useState<string[]>([]);\n\n const value = React.useMemo(\n () => ({ hasOpenPortals: openPortals.length > 0 }),\n [openPortals]\n );\n\n const controlsValue = React.useMemo(\n () => ({\n addOpenPortal: (portal: string) => {\n setOpenPortals((prev) => [...prev, portal]);\n },\n removeOpenPortal: (portal: string) => {\n setOpenPortals((prev) => prev.filter((p) => p !== portal));\n },\n }),\n []\n );\n\n return (\n <OpenPortalsContext.Provider value={value}>\n <OpenPortalControlsContext.Provider value={controlsValue}>\n {children}\n </OpenPortalControlsContext.Provider>\n </OpenPortalsContext.Provider>\n );\n});\n\nexport function useHasOpenPortals(): boolean {\n return React.useContext(OpenPortalsContext).hasOpenPortals;\n}\n\nexport function useOpenPortalsControls(): OpenPortalControlsContextValue {\n return React.useContext(OpenPortalControlsContext);\n}\n","import { uuid } from \"@noya-app/noya-utils\";\nimport React, { createContext, useContext, useMemo, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype FloatingWindowContextValue = {\n createWindow: (element: React.ReactNode) => string;\n closeWindow: (id: string) => void;\n};\n\nconst FloatingWindowContext = createContext<\n FloatingWindowContextValue | undefined\n>(undefined);\n\ntype CurrentWindowContextValue = {\n id: string;\n};\n\nconst CurrentWindowContext = createContext<\n CurrentWindowContextValue | undefined\n>(undefined);\n\nexport const FloatingWindowProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const [windows, setWindows] = useState<Record<string, React.ReactNode>>({});\n\n const contextValue = useMemo(() => {\n const createWindow = (element: React.ReactNode) => {\n const id = uuid();\n\n setWindows((windows) => ({\n ...windows,\n [id]: (\n <CurrentWindowContext.Provider value={{ id }}>\n {element}\n </CurrentWindowContext.Provider>\n ),\n }));\n\n return id;\n };\n\n const closeWindow = (id: string) => {\n setWindows((windows) => {\n const { [id]: _, ...rest } = windows;\n return rest;\n });\n };\n\n return { createWindow, closeWindow };\n }, []);\n\n return (\n <FloatingWindowContext.Provider value={contextValue}>\n {children}\n {Object.entries(windows).map(([id, element]) =>\n createPortal(element, document.body, id)\n )}\n </FloatingWindowContext.Provider>\n );\n};\n\nexport const useFloatingWindowManager = () => {\n const context = useContext(FloatingWindowContext);\n\n if (!context) {\n throw new Error(\n \"useFloatingWindow must be used within a FloatingWindowProvider\"\n );\n }\n\n return context;\n};\n\nexport const useCurrentFloatingWindowInternal = () => {\n const context = useContext(CurrentWindowContext);\n\n if (!context) {\n throw new Error(\"useCurrentWindow must be used within a FloatingWindow\");\n }\n\n return context;\n};\n","import {\n Children,\n cloneElement,\n Fragment,\n isValidElement,\n ReactNode,\n} from \"react\";\n\ninterface SeparatorOptions {\n traverseFragments?: boolean;\n}\n\nfunction flattenChildren(\n children: ReactNode,\n traverseFragments: boolean\n): ReactNode[] {\n return Children.toArray(children).flatMap((child) => {\n if (traverseFragments && isValidElement(child) && child.type === Fragment) {\n return flattenChildren(child.props.children, traverseFragments);\n }\n return child;\n });\n}\n\nfunction createKey(key: string | number) {\n return `s-${key}`;\n}\n\nexport default function withSeparatorElements(\n elements: ReactNode,\n separator: ReactNode | (() => ReactNode),\n options?: SeparatorOptions\n) {\n const childrenArray = flattenChildren(\n elements,\n options?.traverseFragments ?? true\n );\n\n for (let i = childrenArray.length - 1; i > 0; i--) {\n let sep =\n typeof separator === \"function\"\n ? separator()\n : isValidElement(separator)\n ? cloneElement(separator, { key: createKey(i) })\n : separator;\n\n if (isValidElement(sep) && sep.key == null) {\n sep = cloneElement(sep, { key: createKey(i) });\n }\n\n if (!sep || typeof sep === \"boolean\") continue;\n\n childrenArray.splice(i, 0, sep);\n }\n\n return childrenArray;\n}\n","import { ChevronRightIcon } from \"@noya-app/noya-icons\";\nimport * as RadixContextMenu from \"@radix-ui/react-context-menu\";\nimport * as RadixDropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport React from \"react\";\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../../contexts/PortalScopeContext\";\nimport { cx } from \"../../utils/classNames\";\nimport { MenuItem, SectionHeader, styles } from \"./Menu\";\nimport { SelectItem } from \"./SelectItem\";\n\ntype MenuSeparatorComponent = React.FC<{ className?: string }>;\ntype MenuItemTextComponent = React.FC<{ children?: React.ReactNode }>;\ntype MenuItemComponent = React.ForwardRefExoticComponent<\n React.RefAttributes<HTMLDivElement> &\n React.PropsWithoutRef<{\n className?: string;\n disabled?: boolean;\n children?: React.ReactNode;\n value: string;\n onSelect?: (event: any) => void;\n onClick?: (event: React.MouseEvent<any>) => void;\n }>\n>;\ntype MenuCheckboxItemComponent = React.FC<{\n checked?: boolean | \"indeterminate\";\n disabled?: boolean;\n onSelect?: (event: any) => void;\n className?: string;\n children?: React.ReactNode;\n}>;\n\ntype MenuItemIndicatorComponent = React.FC<{\n className?: string;\n children?: React.ReactNode;\n}>;\n\nexport type MenuComponents = {\n Separator: MenuSeparatorComponent;\n ItemText: MenuItemTextComponent;\n Item: MenuItemComponent;\n CheckboxItem?: MenuCheckboxItemComponent;\n ItemIndicator?: MenuItemIndicatorComponent;\n Sub?: typeof RadixDropdownMenu.Sub | typeof RadixContextMenu.Sub;\n SubTrigger?:\n | typeof RadixDropdownMenu.SubTrigger\n | typeof RadixContextMenu.SubTrigger;\n SubContent?:\n | typeof RadixDropdownMenu.SubContent\n | typeof RadixContextMenu.SubContent;\n Portal?: typeof RadixDropdownMenu.Portal | typeof RadixContextMenu.Portal;\n};\n\ntype MenuViewportProps<T extends string> = {\n items: MenuItem<T>[];\n Components: MenuComponents;\n onSelect?: (value: any) => void;\n};\n\nexport const MenuViewport = <T extends string>({\n items,\n Components,\n onSelect,\n}: MenuViewportProps<T>) => {\n const portalScopeId = usePortalScopeId();\n\n const hasCheckedItem = items.some(\n (item) =>\n item.type !== \"separator\" && item.type !== \"sectionHeader\" && item.checked\n );\n\n return (\n <>\n {items.map((item, index) => {\n switch (item.type) {\n case \"separator\":\n return (\n <Components.Separator\n key={index}\n className={styles.separatorStyle}\n />\n );\n\n case \"sectionHeader\":\n return (\n <SectionHeader\n isFirst={index === 0}\n key={item.id}\n {...item}\n indented={hasCheckedItem}\n />\n );\n case \"submenu\":\n if (\n item.items &&\n Components.Sub &&\n Components.SubTrigger &&\n Components.SubContent &&\n Components.Portal\n ) {\n return (\n <Components.Sub key={item.id}>\n <Components.SubTrigger\n className={cx(\n styles.itemStyle({ disabled: item.disabled }),\n styles.selectedItemStyle\n )}\n asChild\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n disabled={item.disabled}\n >\n <SelectItem\n value={item.id}\n icon={item.icon}\n checked={item.checked}\n onSelect={onSelect}\n Components={Components}\n indented={hasCheckedItem}\n disabled={item.disabled}\n >\n <div className=\"flex items-center flex-1\">\n {item.title}\n </div>\n <ChevronRightIcon className=\"-mr-1\" />\n </SelectItem>\n </Components.SubTrigger>\n <Components.Portal>\n <Components.SubContent\n {...portalScopeProps(portalScopeId)}\n alignOffset={-5}\n className={styles.contentStyle}\n >\n <MenuViewport\n items={item.items}\n Components={Components}\n onSelect={onSelect}\n />\n </Components.SubContent>\n </Components.Portal>\n </Components.Sub>\n );\n } else return null;\n default:\n return (\n <SelectItem\n key={item.value}\n value={item.value}\n icon={item.icon}\n checked={item.checked}\n shortcut={item.shortcut}\n onSelect={onSelect}\n Components={Components}\n indented={hasCheckedItem}\n testSelected={item.testSelected}\n disabled={item.disabled}\n >\n {item.title ?? item.value}\n </SelectItem>\n );\n }\n })}\n </>\n );\n};\n","import { renderIcon } from \"../Icons\";\n\nimport * as Select from \"@radix-ui/react-select\";\nimport React, { useCallback } from \"react\";\nimport { cx } from \"../../utils/classNames\";\nimport { Spacer } from \"../Spacer\";\nimport {\n CHECKBOX_INDENT_WIDTH,\n CHECKBOX_RIGHT_INSET,\n CHECKBOX_WIDTH,\n KeyboardShortcut,\n styles,\n} from \"./Menu\";\nimport { MenuComponents } from \"./MenuViewport\";\n\nexport const SelectItem = React.forwardRef(\n (\n {\n children,\n icon,\n disabled,\n checked,\n Components,\n value,\n onSelect,\n shortcut,\n indented,\n testSelected,\n ...props\n }: Select.SelectItemProps & {\n icon?: React.ReactNode;\n checked?: boolean | \"indeterminate\";\n Components: MenuComponents;\n onSelect?: (value: any) => void;\n shortcut?: string;\n indented?: boolean;\n testSelected?: boolean;\n },\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n ) => {\n const handleSelectItem = useCallback(() => {\n if (!value) return;\n onSelect?.(value);\n }, [onSelect, value]);\n\n // Prevent the click from propagating outside the menu\n const cancelClickPropagation = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n },\n []\n );\n\n if (checked && Components.CheckboxItem) {\n return (\n <div className=\"px-1\">\n <Components.CheckboxItem\n checked={checked}\n disabled={disabled}\n onSelect={handleSelectItem}\n className={cx(\n styles.itemStyle({ disabled }),\n styles.selectedItemStyle,\n testSelected && styles.testSelectedItemStyle\n )}\n >\n <Spacer.Horizontal size={CHECKBOX_INDENT_WIDTH} />\n {Components.ItemIndicator && (\n <Components.ItemIndicator {...styles.itemIndicator}>\n <Checkmark />\n </Components.ItemIndicator>\n )}\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n {children}\n {shortcut && (\n <>\n <Spacer.Horizontal />\n <Spacer.Horizontal size={24} />\n <KeyboardShortcut shortcut={shortcut} />\n </>\n )}\n </Components.CheckboxItem>\n </div>\n );\n }\n\n return (\n <div className=\"px-1\">\n <Components.Item\n className={cx(\n styles.itemStyle({ disabled }),\n styles.selectedItemStyle,\n testSelected && styles.testSelectedItemStyle\n )}\n disabled={disabled}\n value={value}\n ref={forwardedRef}\n onClick={cancelClickPropagation}\n onSelect={handleSelectItem}\n {...props}\n >\n <div className=\"flex flex-1 items-center\">\n {indented && <Spacer.Horizontal size={CHECKBOX_INDENT_WIDTH} />}\n {checked ? (\n <div {...styles.itemIndicator}>\n <Checkmark />\n </div>\n ) : indented ? (\n <Spacer.Horizontal size={CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET} />\n ) : null}\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n <Components.ItemText>{children}</Components.ItemText>\n {shortcut && (\n <>\n <Spacer.Horizontal />\n <Spacer.Horizontal size={24} />\n <KeyboardShortcut shortcut={shortcut} />\n </>\n )}\n </div>\n </Components.Item>\n </div>\n );\n }\n);\n\nfunction Checkmark() {\n return (\n <svg\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n width={15}\n height={15}\n >\n <path\n className=\"scale-90 origin-center\"\n d=\"M3 8L6 11L12 5\"\n strokeWidth=\"1.1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n stroke=\"currentColor\"\n />\n </svg>\n );\n}\n","import * as React from \"react\";\nimport { cx } from \"../utils/classNames\";\n\ninterface Props {\n size?: number;\n opacity?: number;\n color?: string;\n trackColor?: string;\n className?: string;\n}\n\nexport const ActivityIndicator = React.memo(function ActivityIndicator({\n size = 16,\n opacity = 1,\n color = \"black\",\n trackColor = \"rgba(0, 0, 0, 0.1)\",\n className,\n}: Props) {\n const opacityStyle = React.useMemo(() => ({ opacity }), [opacity]);\n const dynamicStyles = React.useMemo(\n () => ({\n border: `2px solid ${trackColor}`,\n borderTopColor: color,\n width: `${size}px`,\n height: `${size}px`,\n }),\n [size, color, trackColor]\n );\n return (\n <div\n className={cx(\"flex justify-center items-center\", className)}\n style={opacityStyle}\n >\n <div style={dynamicStyles} className=\"animate-spin rounded-[50%]\" />\n </div>\n );\n});\n","import * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport React, { forwardRef, useMemo } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { colorFromString } from \"../utils/colorFromString\";\n\nconst getInnerAvatarStyles = (\n size: number,\n variant: \"normal\" | \"bare\"\n): React.CSSProperties => {\n const borderSize = variant === \"bare\" ? 4 : size > 36 ? 8 : 6;\n const dimension = `${size - borderSize}px`;\n return {\n width: dimension,\n height: dimension,\n minWidth: dimension,\n minHeight: dimension,\n };\n};\n\nconst AvatarRoot = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> &\n Pick<AvatarProps, \"size\" | \"variant\" | \"backgroundColor\" | \"disabled\">\n>(\n (\n {\n className,\n size = 21,\n style,\n backgroundColor,\n disabled,\n variant = \"normal\",\n ...props\n },\n ref\n ) => {\n const dynamicStyles = useMemo(\n () => ({\n width: `${size}px`,\n height: `${size}px`,\n backgroundColor,\n ...style,\n }),\n [backgroundColor, size, style]\n );\n\n return (\n <AvatarPrimitive.Root\n ref={ref}\n style={dynamicStyles}\n className={cx(\n \"flex items-center justify-center align-middle overflow-hidden select-none cursor-pointer rounded-full\",\n variant !== \"bare\" && \"border border-background\",\n className\n )}\n {...props}\n />\n );\n }\n);\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image> &\n Pick<AvatarProps, \"size\" | \"variant\">\n>(({ className, size = 21, variant = \"normal\", ...props }, ref) => {\n return (\n <AvatarPrimitive.Image\n ref={ref}\n className={cx(\n \"object-cover overflow-hidden rounded-full w-full h-full\",\n className\n )}\n style={getInnerAvatarStyles(size, variant)}\n {...props}\n />\n );\n});\n\nfunction getMonogram(text?: string) {\n return text?.at(0)?.toLocaleUpperCase();\n}\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback> &\n Pick<AvatarProps, \"size\" | \"variant\" | \"backgroundColor\">\n>(\n (\n { className, children, style, size = 21, backgroundColor, ...props },\n ref\n ) => {\n return (\n <AvatarPrimitive.Fallback\n ref={ref}\n style={{\n backgroundColor,\n fontSize: `${size * 0.5}px`,\n lineHeight: `${size}px`, // This ensures perfect vertical centering\n ...style,\n }}\n className={cx(\n \"font-medium flex items-center justify-center text-white\",\n className\n )}\n {...props}\n >\n {children}\n </AvatarPrimitive.Fallback>\n );\n }\n);\n\nexport type AvatarProps = {\n image?: string;\n name?: string;\n /** string used to generate a fallback monogram. more unique strings are better. */\n userId?: string;\n size?: number;\n overflow?: number;\n style?: React.CSSProperties;\n className?: string;\n /** colors are generated from the fallback string or title, but you can override it here */\n backgroundColor?: string;\n /** @default normal */\n variant?: \"normal\" | \"bare\";\n disabled?: boolean;\n /** Intended to be used in place of a fallback monogram, like an icon */\n children?: React.ReactNode;\n onClick?: () => void;\n};\n\nexport const Avatar = React.memo(\n forwardRef(function Avatar(\n {\n image,\n name,\n userId,\n size = 21,\n backgroundColor,\n variant = \"normal\",\n children,\n className,\n ...props\n }: AvatarProps,\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n ) {\n const getBackgroundColor =\n backgroundColor ?? colorFromString(userId ?? name ?? \"\");\n\n return (\n <AvatarRoot\n ref={forwardedRef}\n size={size}\n backgroundColor={getBackgroundColor}\n variant={variant}\n className={className}\n {...props}\n >\n {image ? (\n <AvatarImage src={image} alt={name} size={size} variant={variant} />\n ) : (\n <AvatarFallback\n backgroundColor={getBackgroundColor}\n size={size}\n variant={variant}\n >\n {children ?? getMonogram(name)}\n </AvatarFallback>\n )}\n </AvatarRoot>\n );\n })\n);\n\nconst OverflowAvatar = React.memo(function OverflowAvatar({\n size = 21,\n count,\n}: {\n size?: number;\n count: number;\n}) {\n return (\n <AvatarRoot size={size} backgroundColor=\"var(--n-text-disabled)\" disabled>\n <AvatarFallback backgroundColor=\"var(--n-text-disabled)\" size={size}>\n +{count}\n </AvatarFallback>\n </AvatarRoot>\n );\n});\n\nexport const AvatarStack = React.memo(function AvatarStack({\n size = 21,\n children,\n max = 3,\n className,\n}: {\n size?: number;\n /** @default 3 */\n max?: number;\n children: React.ReactNode;\n className?: string;\n}) {\n const avatarCount = React.Children.count(children);\n // can add logic later to shorten values over 2 digits, etc.\n const overflowCount = avatarCount - max;\n\n const childrenArray = useMemo(() => {\n const processedChildren = React.Children.toArray(children)\n .map((child) => React.cloneElement(child as React.ReactElement, { size }))\n .slice(0, max);\n\n if (avatarCount > max) {\n return [\n <OverflowAvatar key=\"overflow\" size={size} count={overflowCount} />,\n ...processedChildren,\n ];\n }\n\n return processedChildren;\n }, [children, max, size, avatarCount, overflowCount]);\n\n return (\n <div\n className={cx(\n \"flex flex-row-reverse\",\n size > 36 ? \"pl-3\" : \"pl-1.5\",\n className\n )}\n >\n {childrenArray.map((child, index) => {\n return (\n <div\n className={cx(\"relative\", size > 36 ? \"-ml-3\" : \"-ml-1.5\")}\n key={index}\n >\n {child}\n </div>\n );\n })}\n </div>\n );\n});\n","export const colorForStringValues: Record<string, string> = {\n red: \"#ef4444\", // red-500\n orange: \"#f97316\", // orange-500\n amber: \"#f59e0b\", // amber-500\n yellow: \"#eab308\", // yellow-500\n lime: \"#84cc16\", // lime-500\n green: \"#22c55e\", // green-500\n emerald: \"#10b981\", // emerald-500\n teal: \"#14b8a6\", // teal-500\n cyan: \"#06b6d4\", // cyan-500\n sky: \"#0ea5e9\", // sky-500\n blue: \"#3b82f6\", // blue-500\n indigo: \"#6366f1\", // indigo-500\n violet: \"#8b5cf6\", // violet-500\n purple: \"#a855f7\", // purple-500\n fuchsia: \"#d946ef\", // fuchsia-500\n pink: \"#ec4899\", // pink-500\n rose: \"#f43f5e\", // rose-500\n};\n\nfunction hashCode(string: string) {\n let hash = 0;\n for (const char of string) {\n hash = char.charCodeAt(0) + ((hash << 5) - hash);\n }\n return hash;\n}\n\nfunction elementFromHash<T>(array: T[], hash: number): T {\n return array[Math.abs(hash) % array.length];\n}\n\n/**\n * Create a background color and initials from a name\n * Adapted from (MIT) https://mui.com/material-ui/react-avatar/\n */\nexport function colorFromString(str: string) {\n const hash = hashCode(str);\n const backgroundColor = elementFromHash(\n Object.values(colorForStringValues),\n hash\n );\n return backgroundColor;\n}\n","import { cssVars } from \"@noya-app/noya-designsystem\";\nimport React, { forwardRef } from \"react\";\n\nexport const Logo = forwardRef(function Logo(\n props: React.ComponentProps<\"svg\">,\n ref: React.Ref<SVGSVGElement>\n) {\n const fill = props.fill || cssVars.colors.logoFill;\n\n return (\n <svg\n ref={ref}\n viewBox=\"0 0 24 26\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className=\"w-6 aspect-[24/26]\"\n >\n <path\n d=\"M6.5 3H2V12H5V6H6.5C7.32843 6 8 6.67157 8 7.5V12H11V7.5C11 5.01472 8.98528 3 6.5 3Z\"\n fill={fill}\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.5 12C19.9853 12 22 9.98528 22 7.5C22 5.01472 19.9853 3 17.5 3C15.0147 3 13 5.01472 13 7.5C13 9.98528 15.0147 12 17.5 12ZM17.5 9C18.3284 9 19 8.32843 19 7.5C19 6.67157 18.3284 6 17.5 6C16.6716 6 16 6.67157 16 7.5C16 8.32843 16.6716 9 17.5 9Z\"\n fill={fill}\n />\n <path\n d=\"M5 14H2V18.5C2 20.9853 4.01472 23 6.5 23H8V26H11V17H8V20H6.5C5.67157 20 5 19.3284 5 18.5V14Z\"\n fill={fill}\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.5 23C15.0147 23 13 20.9853 13 18.5C13 16.0147 15.0147 14 17.5 14C19.9853 14 22 16.0147 22 18.5V23H17.5ZM17.5 20C18.3284 20 19 19.3284 19 18.5C19 17.6716 18.3284 17 17.5 17C16.6716 17 16 17.6716 16 18.5C16 19.3284 16.6716 20 17.5 20Z\"\n fill={fill}\n />\n </svg>\n );\n});\n","import { IconButton } from \"../IconButton\";\n\nimport { cssVars } from \"../../theme\";\n\nimport { Avatar } from \"../Avatar\";\nimport { Logo } from \"../NoyaLogo\";\n\nimport React, { forwardRef } from \"react\";\nimport { INPUT_HEIGHT } from \"../../theme\";\nimport { cx } from \"../../utils/classNames\";\nimport { TextAreaRow } from \"../TextArea\";\n\nexport const AIAssistantLoadingIndicator = () => {\n return (\n <div className=\"flex gap-2\">\n <Avatar\n name=\"Assistant\"\n size={INPUT_HEIGHT}\n backgroundColor={cssVars.colors.primaryPastel}\n >\n <Logo style={{ width: 15 }} fill={cssVars.colors.primary} />\n </Avatar>\n <div className=\"animate-pulse\">▋</div>\n </div>\n );\n};\n\ntype AIAssistantInputProps = {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onSubmitClick: (e: React.MouseEvent<HTMLButtonElement>) => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n disabled: boolean;\n};\n\nexport const AIAssistantInput = forwardRef<\n HTMLDivElement,\n AIAssistantInputProps\n>(({ value, onChange, onSubmitClick, onKeyDown, disabled }, ref) => (\n <TextAreaRow\n autoResize\n autoFocus\n value={value}\n onChange={onChange}\n ref={ref}\n textAreaClassName=\"py-2 pl-3 !pr-9 w-full mt-3\"\n placeholder=\"Tell me what you'd like to do...\"\n onKeyDown={onKeyDown}\n disabled={disabled}\n end={\n <IconButton\n iconName=\"ArrowUpIcon\"\n onClick={onSubmitClick}\n disabled={!value.trim() || disabled}\n className=\"h-8 w-8 z-20 rounded-full\"\n size={20}\n color={cssVars.colors.text}\n style={{\n backgroundColor: cssVars.colors.chipDefaultBg,\n }}\n />\n }\n />\n));\n\ntype AIAssistantLayoutProps = {\n renderMessages: () => React.ReactNode;\n renderInput: () => React.ReactNode;\n isLoading: boolean;\n renderLoadingIndicator?: () => React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport const AIAssistantLayout = forwardRef<\n HTMLDivElement,\n AIAssistantLayoutProps\n>(\n (\n {\n renderMessages,\n renderInput,\n isLoading,\n renderLoadingIndicator,\n className,\n style,\n }: AIAssistantLayoutProps,\n ref\n ) => {\n return (\n <div className={cx(\"flex flex-col flex-1\", className)} style={style}>\n <div className=\"flex-1 min-h-0 overflow-auto\" ref={ref}>\n <div className=\"flex flex-col gap-2 pb-4 pt-1\">\n {renderMessages()}\n {isLoading ? renderLoadingIndicator?.() : null}\n </div>\n </div>\n <div className=\"border-t border-divider pt-1 px-1\">{renderInput()}</div>\n </div>\n );\n }\n);\n","import { assignRef } from \"@noya-app/react-utils\";\nimport React, {\n ComponentProps,\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { useLabel } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\n\nexport const useAutoResize = (value: string | undefined) => {\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n\n useEffect(() => {\n if (value === undefined) return;\n if (!textareaRef.current) return;\n\n textareaRef.current.style.height = \"auto\"; // Reset the height\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n }, [value]);\n\n return textareaRef;\n};\n\nexport const TextArea = memo(\n forwardRef(function TextArea(\n {\n value,\n onChangeText,\n className,\n onChange,\n autoResize = false,\n ...rest\n }: {\n onChangeText?: (value: string) => void;\n value?: string;\n autoResize?: boolean;\n } & React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n forwardedRef: React.ForwardedRef<HTMLTextAreaElement>\n ) {\n const { fieldId: id } = useLabel({ fieldId: rest.id });\n const autoResizeRef = useAutoResize(\n autoResize ? value || rest.placeholder || \"\" : undefined\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChangeText?.(event.target.value);\n onChange?.(event);\n },\n [onChangeText, onChange]\n );\n\n const handleRef = useCallback(\n (value: HTMLTextAreaElement | null) => {\n if (autoResize) {\n autoResizeRef.current = value;\n }\n assignRef(forwardedRef, value);\n },\n [autoResize, autoResizeRef, forwardedRef]\n );\n\n return (\n <textarea\n className={cx(\n `font-sans text-heading5 font-normal text-text bg-input-background flex-1 py-1 px-1.5 border-none outline-none min-h-6 w-full rounded resize-none placeholder:text-text-disabled focus:ring-2 focus:ring-primary read-only:text-text-disabled focus:z-interactable transition-all`,\n className\n )}\n {...rest}\n id={id}\n ref={handleRef}\n onChange={handleChange}\n value={value}\n />\n );\n })\n);\n\nexport const TextAreaRow = memo(\n forwardRef(function TextAreaRow(\n {\n className,\n textAreaClassName,\n textAreaRef,\n end,\n endClassName,\n ...rest\n }: {\n className?: string;\n textAreaClassName?: string;\n textAreaRef?: React.Ref<HTMLTextAreaElement>;\n end?: React.ReactNode;\n endClassName?: string;\n } & ComponentProps<typeof TextArea>,\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n ) {\n return (\n <div\n ref={forwardedRef}\n className={cx(\"relative w-full h-full\", className)}\n >\n <TextArea className={textAreaClassName} {...rest} ref={textAreaRef} />\n <div className={cx(\"absolute right-1 top-4\", endClassName)}>{end}</div>\n </div>\n );\n })\n);\n","import { isDeepEqual } from \"@noya-app/noya-utils\";\nimport React, {\n Children,\n isValidElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\n\ntype AnimatePresenceProps = {\n children: React.ReactNode;\n /**\n * Duration of enter/exit animations in milliseconds\n * @default 200\n */\n duration?: number;\n /**\n * Custom styles to apply during animations\n */\n animationStyles?: {\n entering?: React.CSSProperties;\n entered?: React.CSSProperties;\n exiting?: React.CSSProperties;\n };\n /** @default false */\n skipInitialAnimation?: boolean;\n /**\n * @default \"wait\"\n * \"wait\" - wait for the previous animation to finish before starting the next one\n * \"crossfade\" - crossfade between the previous and next animation\n */\n mode?: \"wait\" | \"crossfade\";\n className?: string;\n};\n\nconst defaultDuration = 150;\n\ntype AnimationState = \"entering\" | \"entered\" | \"exiting\" | \"exited\";\n\ntype PresenceChildProps = {\n isPresent: boolean;\n onExitComplete: () => void;\n waitingToEnter?: boolean;\n className?: string;\n} & Pick<\n AnimatePresenceProps,\n \"animationStyles\" | \"children\" | \"duration\" | \"skipInitialAnimation\"\n>;\n\nconst defaultAnimationStyles: Required<\n AnimatePresenceProps[\"animationStyles\"]\n> = {\n entering: {\n opacity: 0,\n transition: `opacity ${defaultDuration}ms ease-in`,\n },\n entered: {\n opacity: 1,\n transition: `opacity ${defaultDuration}ms ease-in`,\n },\n exiting: {\n opacity: 0,\n transition: `opacity ${defaultDuration}ms ease-out`,\n },\n};\n\nconst PresenceChild = ({\n children,\n duration,\n isPresent,\n animationStyles,\n onExitComplete,\n skipInitialAnimation,\n className,\n}: PresenceChildProps) => {\n const [animationState, setAnimationState] = useState<AnimationState>(() =>\n skipInitialAnimation && isPresent\n ? \"entered\"\n : isPresent\n ? \"entering\"\n : \"exited\"\n );\n const timeoutRef = useRef<number>();\n const isInitialMount = useRef(true);\n\n const mergedAnimationStyles = {\n ...defaultAnimationStyles,\n ...animationStyles,\n exited: {},\n willChange: \"opacity\",\n backfaceVisibility: \"hidden\",\n } as Record<AnimationState, React.CSSProperties>;\n\n useLayoutEffect(() => {\n let rafId: number;\n\n if (isPresent && animationState !== \"entered\") {\n if (isInitialMount.current && skipInitialAnimation) {\n setAnimationState(\"entered\");\n isInitialMount.current = false;\n return;\n }\n\n // Use RAF for better timing\n rafId = requestAnimationFrame(() => {\n setAnimationState(\"entering\");\n rafId = requestAnimationFrame(() => {\n setAnimationState(\"entered\");\n });\n });\n } else if (!isPresent && animationState !== \"exited\") {\n setAnimationState(\"exiting\");\n timeoutRef.current = window.setTimeout(() => {\n setAnimationState(\"exited\");\n onExitComplete();\n }, duration);\n }\n\n return () => {\n if (rafId) cancelAnimationFrame(rafId);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, [\n isPresent,\n duration,\n onExitComplete,\n animationState,\n skipInitialAnimation,\n ]);\n\n if (animationState === \"exited\" && !isPresent) {\n return null;\n }\n\n return (\n <div style={mergedAnimationStyles[animationState]} className={className}>\n {children}\n </div>\n );\n};\n\ntype MountedChild = {\n child: React.ReactElement;\n isPresent: boolean;\n skipInitialAnimation?: boolean;\n};\n\nexport const AnimatePresence = ({\n children,\n duration = defaultDuration,\n animationStyles,\n skipInitialAnimation,\n mode = \"wait\",\n className,\n}: AnimatePresenceProps) => {\n const [mountedChildren, setMountedChildren] = useState<MountedChild[]>([]);\n const previousChildrenRef = useRef<React.ReactElement[]>([]);\n const removingChildrenRef = useRef<Set<string>>(new Set());\n const waitingToEnterRef = useRef<MountedChild[]>([]);\n\n useEffect(() => {\n const newChildren = Children.toArray(children).filter(\n isValidElement\n ) as React.ReactElement[];\n\n setMountedChildren((prev) => {\n if (!prev.length && skipInitialAnimation) {\n return newChildren.map((child) => ({\n child,\n isPresent: true,\n skipInitialAnimation: skipInitialAnimation,\n }));\n }\n\n // Update presence for existing children\n const updated = prev.map((mounted) => {\n const isStillPresent = newChildren.some(\n (child) =>\n isDeepEqual(child.key, mounted.child.key) ||\n isDeepEqual(child, mounted.child)\n );\n\n if (!isStillPresent) {\n removingChildrenRef.current.add(mounted.child.key?.toString() ?? \"\");\n }\n\n return {\n ...mounted,\n isPresent: isStillPresent,\n removing: !isStillPresent\n ? true\n : removingChildrenRef.current.has(\n mounted.child.key?.toString() ?? \"\"\n ),\n };\n });\n\n // Store new children in waitingToEnterRef if we're in wait mode and have removing children\n const newMounted = newChildren\n .filter(\n (child) =>\n !prev.some(\n (p) =>\n isDeepEqual(p.child.key, child.key) ||\n isDeepEqual(p.child, child)\n )\n )\n .map((child) => ({\n child,\n isPresent: mode === \"wait\" ? false : true,\n }));\n\n previousChildrenRef.current = newChildren;\n\n if (mode === \"wait\" && removingChildrenRef.current.size > 0) {\n waitingToEnterRef.current = newMounted;\n return updated;\n }\n\n return [...updated, ...newMounted];\n });\n }, [children, skipInitialAnimation, mode]);\n\n const removeChild = useCallback((childKey: string) => {\n if (!removingChildrenRef.current.has(childKey)) return;\n removingChildrenRef.current.delete(childKey);\n\n setMountedChildren((prev) => {\n const filtered = prev.filter(\n (mounted) => mounted.child.key?.toString() !== childKey\n );\n\n if (\n removingChildrenRef.current.size === 0 &&\n waitingToEnterRef.current.length > 0\n ) {\n const enteringChildren = waitingToEnterRef.current.map((mounted) => ({\n ...mounted,\n isPresent: true,\n }));\n waitingToEnterRef.current = [];\n return [...filtered, ...enteringChildren];\n }\n\n return filtered;\n });\n }, []);\n\n return (\n <>\n {mountedChildren.map(({ child, isPresent, skipInitialAnimation }) => (\n <PresenceChild\n key={child.key}\n duration={duration}\n animationStyles={animationStyles}\n isPresent={isPresent}\n skipInitialAnimation={skipInitialAnimation}\n onExitComplete={() => removeChild(child.key?.toString() ?? \"\")}\n className={className}\n >\n {child}\n </PresenceChild>\n ))}\n </>\n );\n};\n\nexport type { AnimatePresenceProps };\n","import React, { CSSProperties, ReactNode } from \"react\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { Small } from \"./Text\";\n\nconst bannerStyles = {\n backgroundColor: cssVars.colors.inputBackground,\n color: cssVars.colors.textDisabled,\n};\n\nexport type BannerProps = {\n label?: ReactNode;\n className?: string;\n style?: CSSProperties;\n};\n\nexport function Banner({ label = \"No items\", className, style }: BannerProps) {\n return (\n <div\n className={cx(\n \"flex p-1 items-center justify-center select-none rounded\",\n className\n )}\n style={{ ...bannerStyles, ...style }}\n >\n <Small color=\"textDisabled\">{label}</Small>\n </div>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport React from \"react\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { Text, TextProps } from \"./Text\";\n\ntype BreadcrumbTextProps = Omit<\n TextProps,\n \"variant\" | \"whiteSpace\" | \"lineHeight\" | \"userSelect\"\n>;\n\nexport const BreadcrumbText = forwardRef(function BreadcrumbText(\n { children, className, onClick, ...props }: BreadcrumbTextProps,\n ref: React.ForwardedRef<HTMLSpanElement>\n) {\n return (\n <Text\n {...props}\n variant=\"small\"\n className={cx(\n \"whitespace-pre leading-[15px] select-none\",\n onClick &&\n \"hover:text-breadcrumb-text-hover hover:cursor-pointer hover:whitespace-pre hover:select-none\",\n className\n )}\n ref={ref}\n onClick={onClick}\n >\n {children}\n </Text>\n );\n});\n\nconst slashStyle = {\n margin: \"0 3px\",\n};\n\nexport const BreadcrumbSlash = () => {\n return (\n <svg\n width=\"7\"\n height=\"17\"\n viewBox=\"0 0 7 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n opacity={0.5}\n style={slashStyle}\n >\n <path\n d=\"M1 16L6 1\"\n stroke={cssVars.colors.breadcrumbIcon}\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import * as React from \"react\";\nimport { useLabel } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\n\ninterface CheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n colorScheme?: \"primary\" | \"secondary\";\n}\n\nconst colorSchemeStyles = {\n normal: \"text-text-subtle\",\n primary: \"text-primary\",\n secondary: \"text-secondary\",\n};\n\nexport const Checkbox = React.memo(\n React.forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n { className, style, colorScheme = \"primary\", ...props },\n ref\n ) {\n const { fieldId: id } = useLabel({ fieldId: props.id });\n return (\n <div\n className={cx(\n \"flex-none relative inline-flex w-[19px] h-[19px]\",\n colorSchemeStyles[colorScheme],\n className\n )}\n style={style}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n className={`\n w-full\n h-full\n peer\n appearance-none\n m-0\n rounded\n bg-input-background\n border\n border-divider\n disabled:opacity-50\n cursor-pointer\n disabled:cursor-not-allowed\n focus:ring-2\n focus:ring-primary\n focus:ring-offset-1\n focus:z-interactable\n transition-all\n `}\n aria-checked={props.checked}\n {...props}\n id={id}\n />\n <svg\n className={`\n absolute \n inset-0\n h-input-height \n w-input-height \n pointer-events-none\n stroke-white\n opacity-0\n peer-checked:opacity-100\n z-label\n stroke-[1.3px]\n `}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3 6L4.5 7.5L8 4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n stroke=\"currentColor\"\n />\n </svg>\n </div>\n );\n })\n);\n","import { Cross1Icon, PlusIcon } from \"@noya-app/noya-icons\";\nimport React, { forwardRef, memo } from \"react\";\nimport { useHover } from \"../hooks/useHover\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\n\ntype ChipColorScheme = \"primary\" | \"secondary\" | \"error\";\ntype ChipSize = \"small\" | \"medium\" | \"large\";\ntype ChipVariant = \"solid\" | \"outlined\" | \"ghost\";\n\n// Hoisted constants for styles\nconst BASE_STYLES =\n \"inline-flex items-center whitespace-pre rounded select-none leading-[15px]\";\n\nconst SIZE_STYLES = {\n large: \"text-[11px] p-[4px_8px]\",\n medium: \"text-[10px] p-[2px_6px]\",\n small: \"text-[9px] p-[0px_4px]\",\n} as const;\n\nconst SHADOW_STYLES = {\n primary: \"shadow-[0_0_0_1px_var(--n-chip-primary-shadow)_inset]\",\n secondary: \"shadow-[0_0_0_1px_var(--n-chip-secondary-shadow)_inset]\",\n error: \"shadow-[0_0_0_1px_var(--n-chip-error-shadow)_inset]\",\n default: \"shadow-[0_0_0_1px_var(--n-chip-default-shadow)_inset]\",\n} as const;\n\nconst COLOR_STYLES = {\n primary: {\n text: \"text-primary\",\n bg: \"bg-primary-pastel\",\n subtle: \"bg-[var(--n-chip-primary-bg)]\",\n },\n secondary: {\n text: \"text-secondary\",\n bg: \"bg-secondary-pastel\",\n subtle: \"bg-[var(--n-chip-secondary-bg)]\",\n },\n error: {\n text: \"text-text\",\n bg: \"bg-[rgb(255,219,219)]\",\n subtle: \"bg-[var(--n-chip-error-bg)]\",\n },\n default: {\n text: \"text-text\",\n bg: \"bg-input-background\",\n subtle: \"bg-[var(--n-chip-default-bg)]\",\n },\n} as const;\n\nconst ICON_BASE_STYLES = \"relative opacity-50 cursor-pointer hover:opacity-85\";\n\nconst ICON_SIZE_STYLES = {\n large: {\n add: \"ml-[-2px] mr-[2px] -top-[1px] scale-[0.75]\",\n delete: \"mr-[-2px] ml-[2px] scale-[0.75]\",\n },\n medium: {\n add: \"ml-[-2px] mr-[-2px] scale-[0.60]\",\n delete: \"mr-[-2px] scale-[0.60]\",\n },\n small: {\n add: \"ml-[-2px] mr-[-2px] scale-[0.60]\",\n delete: \"mr-[-2px] scale-[0.60]\",\n },\n} as const;\n\nexport interface ChipProps {\n id?: string;\n className?: string;\n colorScheme?: ChipColorScheme;\n variant?: ChipVariant;\n size?: ChipSize;\n children?: React.ReactNode;\n clickable?: boolean;\n deletable?: boolean;\n addable?: boolean;\n monospace?: boolean;\n onDelete?: () => void;\n onAdd?: () => void;\n onClick?: () => void;\n onHoverDeleteChange?: (hovering: boolean) => void;\n style?: React.CSSProperties;\n tabIndex?: number;\n role?: string;\n disabled?: boolean;\n}\n\nexport const Chip = memo(\n forwardRef(function Chip(\n {\n colorScheme,\n children,\n deletable,\n addable,\n clickable,\n style,\n size = \"large\",\n variant = \"solid\",\n monospace = false,\n tabIndex,\n onDelete,\n onClick,\n onAdd,\n onHoverDeleteChange,\n className,\n disabled,\n ...rest\n }: ChipProps,\n forwardedRef: React.ForwardedRef<HTMLSpanElement>\n ) {\n const { hoverProps: hoverDeleteProps } = useHover({\n onHoverChange: onHoverDeleteChange,\n });\n\n const handleClick = !children && !deletable && addable ? onAdd : onClick;\n const isInteractive = !!handleClick || clickable === true;\n\n const colors = COLOR_STYLES[colorScheme ?? \"default\"];\n const variantClasses =\n variant === \"solid\"\n ? `${colors.text} ${colors.bg}`\n : variant === \"outlined\"\n ? `${colors.text} bg-transparent ${SHADOW_STYLES[colorScheme ?? \"default\"]} hover:${colors.subtle} hover:shadow-none`\n : \"\";\n\n const chipClasses = cx(\n BASE_STYLES,\n SIZE_STYLES[size],\n monospace && \"font-mono\",\n variantClasses,\n isInteractive && \"cursor-pointer hover:opacity-85\",\n disabled && \"opacity-50\",\n className\n );\n\n const color =\n colorScheme === \"primary\"\n ? cssVars.colors.primary\n : colorScheme === \"secondary\"\n ? cssVars.colors.secondary\n : cssVars.colors.text;\n\n return (\n <span\n ref={forwardedRef}\n className={chipClasses}\n style={style}\n onClick={handleClick}\n tabIndex={tabIndex}\n {...rest}\n >\n {addable && (\n <PlusIcon\n className={cx(ICON_BASE_STYLES, ICON_SIZE_STYLES[size].add)}\n onClick={\n onAdd &&\n ((event) => {\n event.stopPropagation();\n onAdd();\n })\n }\n color={color}\n />\n )}\n {children}\n {deletable && (\n <Cross1Icon\n className={cx(ICON_BASE_STYLES, ICON_SIZE_STYLES[size].delete)}\n {...(hoverDeleteProps as any)}\n onClick={\n onDelete &&\n ((event) => {\n event.stopPropagation();\n onDelete();\n })\n }\n color={color}\n />\n )}\n </span>\n );\n })\n);\n","// From: https://github.com/radix-ui/primitives/blob/main/packages/react/scroll-area/src/useHover.ts\n// MIT License\n\n// This code is a fork of `react-aria`'s `useHover` hook. The code in this file are based on code\n// from both `react-aria` and `react-interactions`. Original licensing for each project can be found\n// in the the root directories of each respective repository.\n//\n// @see https://github.com/adobe/react-spectrum/tree/452d1cb6a49f9f493757737edaf2b64014108de6/packages/%40react-aria\n// @see https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport * as React from 'react';\n\nexport interface HoverEvent {\n /** The type of hover event being fired. */\n type: 'hoverstart' | 'hoverend';\n /** The pointer type that triggered the hover event. */\n pointerType: 'mouse' | 'pen';\n /** The target element of the hover event. */\n target: HTMLElement;\n}\n\nexport interface HoverEvents {\n /** Handler that is called when a hover interaction starts. */\n onHoverStart?(e: HoverEvent): void;\n /** Handler that is called when a hover interaction ends. */\n onHoverEnd?(e: HoverEvent): void;\n /** Handler that is called when the hover state changes. */\n onHoverChange?(isHovering: boolean): void;\n}\n\nexport interface HoverProps extends HoverEvents {\n /** Whether the hover events should be disabled. */\n isDisabled?: boolean;\n}\n\ninterface HoverResult {\n /** Props to spread on the target element. */\n hoverProps: React.HTMLAttributes<HTMLElement>;\n isHovered: boolean;\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\n// See https://bugs.webkit.org/show_bug.cgi?id=214609.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = true;\n\n // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter with\n // pointerType=\"mouse\" immediately after onPointerUp and before onFocus. On other devices that\n // don't have this quirk, we don't want to ignore a mouse hover sometime in the distant future\n // because a user previously touched the element.\n setTimeout(function clearGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = false;\n }, 50);\n}\n\nfunction handleGlobalPointerEvent(event: PointerEvent) {\n if (event.pointerType === 'touch') {\n setGlobalIgnoreEmulatedMouseEvents();\n }\n}\n\nfunction setupGlobalTouchEvents() {\n if (typeof document === 'undefined') {\n return;\n }\n\n document.addEventListener('pointerup', handleGlobalPointerEvent);\n\n hoverCount++;\n return function teardownGlobalTouchEvents() {\n hoverCount--;\n if (hoverCount > 0) {\n return;\n }\n document.removeEventListener('pointerup', handleGlobalPointerEvent);\n };\n}\n\n/**\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n */\nexport function useHover(props: HoverProps = {}): HoverResult {\n const { onHoverStart, onHoverChange, onHoverEnd, isDisabled } = props;\n\n const [isHovered, setHovered] = React.useState(false);\n const state = React.useRef({\n isHovered: false,\n ignoreEmulatedMouseEvents: false,\n }).current;\n\n React.useEffect(setupGlobalTouchEvents, []);\n\n const hoverProps = React.useMemo(\n function getHoverProps() {\n function triggerHoverStart(\n event: PointerEvent | React.PointerEvent | MouseEvent | React.MouseEvent,\n pointerType: 'mouse' | 'pen' | 'touch'\n ) {\n if (isDisabled || pointerType === 'touch' || state.isHovered) {\n return;\n }\n\n state.isHovered = true;\n const target = event.target as HTMLElement;\n\n if (onHoverStart) {\n onHoverStart({\n type: 'hoverstart',\n target,\n pointerType,\n });\n }\n\n if (onHoverChange) {\n onHoverChange(true);\n }\n\n setHovered(true);\n }\n\n function triggerHoverEnd(\n event: PointerEvent | React.PointerEvent | MouseEvent | React.MouseEvent,\n pointerType: 'mouse' | 'pen' | 'touch'\n ) {\n if (isDisabled || pointerType === 'touch' || !state.isHovered) {\n return;\n }\n\n state.isHovered = false;\n const target = event.target as HTMLElement;\n\n if (onHoverEnd) {\n onHoverEnd({\n type: 'hoverend',\n target,\n pointerType,\n });\n }\n\n if (onHoverChange) {\n onHoverChange(false);\n }\n\n setHovered(false);\n }\n\n const hoverProps: React.HTMLAttributes<HTMLElement> = {\n onPointerEnter(event: React.PointerEvent<HTMLElement>) {\n if (globalIgnoreEmulatedMouseEvents && event.pointerType === 'mouse') {\n return;\n }\n triggerHoverStart(event, event.pointerType);\n },\n onPointerLeave(event: React.PointerEvent<HTMLElement>) {\n triggerHoverEnd(event, event.pointerType);\n },\n };\n\n return hoverProps;\n },\n [isDisabled, state, onHoverStart, onHoverChange, onHoverEnd]\n );\n\n return {\n hoverProps,\n isHovered,\n };\n}","import { forwardRefGeneric } from \"@noya-app/react-utils\";\nimport React from \"react\";\nimport { Grid } from \"../components/Grid\";\nimport { MenuItem } from \"../components/internal/Menu\";\nimport {\n ListView,\n ListViewRootProps,\n ListViewRowProps,\n} from \"../components/ListView\";\nimport { List } from \"./List\";\nimport { SharedDragProps } from \"./sorting/DragRegistration\";\n\nexport type CollectionViewType = \"grid\" | \"list\";\n\nexport type CollectionThumbnailSize = \"auto\" | \"custom\";\n\nexport type CollectionRef = {\n editName: (id: string) => void;\n};\n\nexport type CollectionThumbnailProps<T> = {\n item: T;\n selected: boolean;\n size?: CollectionItemSize;\n};\n\nexport type CollectionRenderActionProps<T> = {\n item: T;\n selected: boolean;\n onOpenChange: (open: boolean) => void;\n};\n\nexport interface CollectionProps<T, M extends string = string> {\n className?: string;\n items: T[];\n getId: (item: T) => string;\n getName: (item: T) => string;\n getExpanded?: (item: T) => boolean | undefined;\n getPlaceholder?: (item: T) => string;\n /**\n * Whether directories should be expandable.\n * @default true\n */\n expandable?: boolean;\n /**\n * Whether to allow renaming files\n * @default true\n */\n renamable?: boolean;\n menuItems?: MenuItem<M>[];\n onSelectMenuItem?: (action: M, selectedItems: T[]) => void;\n onRename?: (item: T, newName: string) => void;\n renderThumbnail?: ({\n item,\n selected,\n size,\n }: CollectionThumbnailProps<T>) => React.ReactNode;\n renderAction?:\n | \"menu\"\n | ((props: CollectionRenderActionProps<T>) => React.ReactNode);\n renderDetail?: (item: T, selected: boolean) => React.ReactNode;\n /** Callback when selection changes. If not provided, selection will be disabled. */\n onSelectionChange?: (\n selectedItemIds: string[],\n event?: ListView.ClickInfo\n ) => void;\n scrollable?: boolean;\n itemRoleDescription?: string;\n /** Position of the detail content. Defaults to 'end'. */\n detailPosition?: \"end\" | \"below\";\n /** Size of the list items. Defaults to 'medium'. */\n size?: CollectionItemSize;\n /** Size of the thumbnail. Defaults to 'auto', which will be based on the size prop. */\n thumbnailSize?: CollectionThumbnailSize;\n /** For testing: Override the hover state with a specific item ID */\n testHoveredId?: string;\n /** For testing: Override the renaming state with a specific item ID */\n testRenamingId?: string;\n /** For testing: Override the drop indicator state with a specific item ID */\n testShowDropIndicatorId?: string;\n setExpanded?: (item: T, expanded: boolean) => void;\n acceptsDrop?: ListViewRootProps[\"acceptsDrop\"];\n onMoveItem?: ListViewRootProps[\"onMoveItem\"];\n getDropTargetParentIndex?: ListViewRootProps[\"getDropTargetParentIndex\"];\n getDepth?: (item: T) => number;\n onFilesDrop?: (event: React.DragEvent<Element>) => void;\n getRenamable?: (item: T) => boolean;\n /** Currently selected file IDs */\n selectedIds?: string[];\n viewType?: CollectionViewType;\n onClickItem?: (itemId: string) => void;\n onDoubleClickItem?: (itemId: string) => void;\n renderEmptyState?: () => React.ReactElement;\n /** @default false */\n sortable?: boolean;\n dragIndicatorStyle?: ListViewRowProps<M>[\"dragIndicatorStyle\"];\n sharedDragProps?: SharedDragProps;\n sortableId?: string;\n}\n\nexport const Collection = forwardRefGeneric(function Collection<\n T,\n M extends string = string,\n>(props: CollectionProps<T, M>, ref: React.ForwardedRef<CollectionRef>) {\n const { viewType, ...rest } = props;\n\n return viewType === \"grid\" ? (\n <Grid ref={ref} {...rest} />\n ) : (\n <List ref={ref} {...rest} />\n );\n});\nexport type CollectionItemSize =\n | \"xxs\"\n | \"xs\"\n | \"small\"\n | \"medium\"\n | \"mediumLarge\"\n | \"large\"\n | \"xl\";\n","import {\n forwardRefGeneric,\n memoGeneric,\n useFileDropTarget,\n} from \"@noya-app/react-utils\";\nimport React, { useImperativeHandle, useRef, useState } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { updateSelection } from \"../utils/selection\";\nimport { ActionMenu } from \"./ActionMenu\";\nimport {\n CollectionItemSize,\n CollectionProps,\n CollectionRef,\n} from \"./Collection\";\nimport { EditableText } from \"./EditableText\";\nimport { GridView } from \"./GridView\";\nimport { ListView } from \"./ListView\";\n\nexport const getGridSize = (size: CollectionItemSize) => {\n // Define size ranges that allow items to grow/shrink within bounds\n const sizes: Record<\n Exclude<CollectionItemSize, number>,\n {\n minColumnWidth: string;\n gap: number;\n }\n > = {\n xxs: {\n minColumnWidth: \"36px\",\n gap: 5,\n },\n xs: {\n minColumnWidth: \"87px\",\n gap: 9,\n },\n small: {\n minColumnWidth: \"160px\",\n gap: 20,\n },\n medium: {\n minColumnWidth: \"220px\",\n gap: 30,\n },\n mediumLarge: {\n minColumnWidth: \"250px\",\n gap: 35,\n },\n large: {\n minColumnWidth: \"280px\",\n gap: 40,\n },\n xl: {\n minColumnWidth: \"400px\",\n gap: 48,\n },\n };\n\n return sizes[size];\n};\n\nconst emptyArray: string[] = [];\n\nexport const Grid = memoGeneric(\n forwardRefGeneric(function Grid<T, M extends string = string>(\n props: CollectionProps<T, M> & { ref?: React.ForwardedRef<CollectionRef> },\n ref: React.ForwardedRef<CollectionRef>\n ) {\n const {\n className,\n items,\n getId,\n getName,\n // expandable,\n // getExpanded,\n getRenamable,\n // getDepth,\n // setExpanded,\n menuItems,\n onSelectMenuItem,\n onRename,\n renderThumbnail,\n renderAction,\n renderDetail,\n onSelectionChange,\n selectedIds = emptyArray,\n // itemRoleDescription = \"clickable item\",\n // detailPosition = \"end\",\n size = \"medium\",\n testHoveredId,\n testRenamingId,\n testShowDropIndicatorId,\n scrollable = false,\n // acceptsDrop,\n // onMoveItem,\n onFilesDrop,\n renamable,\n onClickItem,\n onDoubleClickItem,\n renderEmptyState,\n // getDropTargetParentIndex,\n } = props;\n\n const [hoveredId, setHoveredId] = useState<string>();\n const [internalRenamingId, setRenamingId] = useState<string>();\n const [dropdownOpenId, setDropdownOpenId] = useState<string>();\n\n useImperativeHandle(ref, () => ({\n editName: (id: string) => {\n setRenamingId(id);\n },\n }));\n\n const currentHoveredId = testHoveredId ?? hoveredId;\n const renamingId = testRenamingId ?? internalRenamingId;\n\n const handleSelect = (itemId: string, event?: ListView.ClickInfo) => {\n if (!onSelectionChange) return;\n\n setRenamingId(undefined);\n\n const newSelectedIds = updateSelection(\n items.map(getId),\n selectedIds,\n itemId,\n event\n );\n\n onSelectionChange(newSelectedIds, event);\n };\n\n const handleMenuAction = (action: M, actionItem: T) => {\n if (!onSelectMenuItem) return;\n\n const selectedItems = items.filter((item) =>\n selectedIds.includes(getId(item))\n );\n\n onSelectMenuItem(\n action,\n selectedItems.length === 0 ? [actionItem] : selectedItems\n );\n };\n\n const fileDropTargetRef = useRef<HTMLDivElement>(null);\n const { isDropTargetActive, dropTargetProps } = useFileDropTarget(\n fileDropTargetRef,\n onFilesDrop\n );\n\n const { minColumnWidth, gap } = getGridSize(size);\n\n return (\n <GridView.Root\n role=\"listbox\"\n aria-orientation=\"horizontal\"\n aria-multiselectable={true}\n minColumnWidth={minColumnWidth}\n scrollable={items.length > 0 && scrollable}\n contentClassName={cx(items.length === 0 && \"flex flex-1\")}\n gap={gap}\n className={cx(\n isDropTargetActive && \"bg-selected-list-item-background\",\n className\n )}\n {...dropTargetProps}\n ref={fileDropTargetRef}\n >\n {items.length > 0 ? (\n <GridView.Section>\n {items.map((item) => {\n const id = getId(item);\n const isDropdownOpen = dropdownOpenId === id;\n const isHovered =\n testHoveredId === id ||\n currentHoveredId === id ||\n isDropdownOpen;\n const itemIsRenamable = getRenamable?.(item) ?? renamable;\n const isSelected = selectedIds.includes(id);\n const isRenaming =\n itemIsRenamable && onRename && renamingId === id;\n const isTestingRenaming = testRenamingId === id;\n const thumbnail = renderThumbnail?.({\n item,\n selected: isSelected,\n size,\n });\n const onOpenChange = (open: boolean) => {\n setDropdownOpenId(open ? id : undefined);\n\n if (open && !isSelected) {\n handleSelect(id);\n }\n };\n const action =\n (isHovered || isSelected) &&\n !isRenaming &&\n (typeof renderAction === \"function\"\n ? renderAction({ item, selected: isSelected, onOpenChange })\n : renderAction === \"menu\" &&\n menuItems && (\n <ActionMenu\n menuItems={menuItems}\n onSelect={(action) => handleMenuAction(action, item)}\n selected={isSelected}\n onOpenChange={onOpenChange}\n />\n ));\n\n return (\n <GridView.Item<M>\n key={id}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n aria-label={getName(item)}\n hovered={isHovered}\n testShowInsideDropIndicator={testShowDropIndicatorId === id}\n onHoverChange={(isHovering) => {\n setHoveredId(isHovering ? id : undefined);\n }}\n title={\n <EditableText\n tabIndex={isRenaming ? undefined : -1}\n value={getName(item)}\n focused={isRenaming}\n testFocused={isTestingRenaming}\n readOnly={!itemIsRenamable || !onRename}\n onSubmit={(value) => {\n onRename?.(item, value);\n setRenamingId(undefined);\n }}\n onBlur={() => {\n setRenamingId(undefined);\n }}\n // max height ensures preview text and input are one line\n textClassName=\"bg-listview-editing-background max-h-input-height\"\n >\n {(props) => (\n <span\n {...props}\n className={cx(\n isSelected\n ? \"text-selected-list-item-text\"\n : \"text-text\",\n \"truncate select-none\"\n )}\n />\n )}\n </EditableText>\n }\n subtitle={\n <span\n className={cx(\n isSelected && \"text-selected-list-item-text\"\n )}\n >\n {renderDetail?.(item, isSelected)}\n </span>\n }\n loading={false}\n selected={isSelected}\n onClick={() => {\n onClickItem?.(id);\n }}\n onSelect={(event) => {\n handleSelect(id, event);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n setRenamingId(id);\n }\n }}\n onDoubleClick={() => {\n onDoubleClickItem?.(id);\n }}\n menuItems={menuItems}\n onSelectMenuItem={(action) => handleMenuAction(action, item)}\n action={action}\n onMenuOpenChange={(open: boolean) => {\n if (open && !isSelected) {\n handleSelect(id);\n }\n }}\n // getDropTargetParentIndex={getDropTargetParentIndex}\n >\n {thumbnail && (\n <div\n className={cx(\n \"rounded overflow-hidden flex-none flex w-full\",\n isSelected && \"text-selected-list-item-text\"\n )}\n tabIndex={-1}\n >\n {thumbnail}\n </div>\n )}\n </GridView.Item>\n );\n })}\n </GridView.Section>\n ) : (\n renderEmptyState?.()\n )}\n </GridView.Root>\n );\n })\n);\n","/**\n * Updates the selection state based on user interaction.\n * Handles single selection, multi-selection with meta/ctrl, and range selection with shift.\n */\nexport function updateSelection(\n allIds: string[],\n selectedIds: string[],\n clickedId: string,\n event?: { shiftKey?: boolean; metaKey?: boolean; ctrlKey?: boolean }\n): string[] {\n const metaOrCtrl = event?.metaKey || event?.ctrlKey;\n\n if (!event || (!event.shiftKey && !metaOrCtrl)) {\n // Store this as the anchor point for future shift selections\n return [clickedId];\n }\n\n if (metaOrCtrl) {\n const isSelected = selectedIds.includes(clickedId);\n return isSelected\n ? selectedIds.filter((id) => id !== clickedId)\n : [...selectedIds, clickedId];\n }\n\n if (event.shiftKey && selectedIds.length > 0) {\n // Find the anchor based on which end of the current selection is closer to the clicked item\n const firstSelectedIndex = allIds.indexOf(selectedIds[0]);\n const lastSelectedIndex = allIds.indexOf(\n selectedIds[selectedIds.length - 1]\n );\n const clickedIndex = allIds.indexOf(clickedId);\n\n // Use the endpoint of the current selection that's furthest from the clicked item as the anchor\n const anchorId =\n Math.abs(clickedIndex - firstSelectedIndex) >\n Math.abs(clickedIndex - lastSelectedIndex)\n ? selectedIds[0]\n : selectedIds[selectedIds.length - 1];\n\n const anchorIndex = allIds.indexOf(anchorId);\n const start = Math.min(anchorIndex, clickedIndex);\n const end = Math.max(anchorIndex, clickedIndex);\n\n return allIds.slice(start, end + 1);\n }\n\n return [clickedId];\n}\n","import { cx, InputField } from \"@noya-app/noya-designsystem\";\nimport React, {\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { BreadcrumbText } from \"./Breadcrumbs\";\n\ntype RenderPreviewProps = {\n children: string;\n onClick: () => void;\n ref: React.Ref<HTMLElement & HTMLAnchorElement & HTMLSpanElement>;\n tabIndex: number;\n onKeyDown: (e: React.KeyboardEvent) => void;\n style?: React.CSSProperties;\n className?: string;\n};\n\ntype Props = {\n value: string;\n children?: (props: RenderPreviewProps) => React.ReactNode;\n placeholder?: string;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n style?: React.CSSProperties;\n textStyle?: React.CSSProperties;\n className?: string;\n id?: string;\n disabled?: boolean;\n focused?: boolean;\n textClassName?: string;\n readOnly?: boolean;\n onBlur?: () => void;\n tabIndex?: number;\n /**\n * If true, will render an unfocused input. This should only be used for visual regression tests.\n */\n testFocused?: boolean;\n};\n\nexport interface EditableTextRef {\n startEditing: () => void;\n}\n\nconst defaultRenderPreview = (props: RenderPreviewProps) => (\n <BreadcrumbText {...props} />\n);\n\nexport const EditableText = memo(\n forwardRef(function EditableText(\n {\n value,\n onChange,\n onSubmit,\n focused: focusedProp,\n disabled,\n style,\n textStyle,\n className,\n textClassName,\n placeholder,\n children = defaultRenderPreview,\n readOnly,\n onBlur,\n testFocused = false,\n tabIndex = 0,\n ...props\n }: Props,\n ref: React.ForwardedRef<EditableTextRef>\n ) {\n const [inputValue, setInputValue] = useState(value);\n\n useEffect(() => {\n setInputValue(value);\n }, [value]);\n\n const [focusedInternal, setFocused] = useState(false);\n const focused = focusedProp ?? focusedInternal;\n const inputRef = useRef<HTMLInputElement>(null);\n const previewRef = useRef<HTMLElement & HTMLAnchorElement>(null);\n\n const ignoreNextBlur = useRef(false);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Escape\") {\n setInputValue(value);\n ignoreNextBlur.current = true;\n }\n\n // Enter and Esc both blur the input\n if (event.key === \"Enter\" || event.key === \"Escape\") {\n inputRef.current?.blur();\n }\n\n if (event.key === \"Escape\") {\n previewRef.current?.focus();\n }\n\n // If tab or shift+tab is pressed, let bubble\n if (event.key === \"Tab\") {\n return;\n }\n\n event.stopPropagation();\n },\n [value]\n );\n\n useImperativeHandle(ref, () => ({\n startEditing: () => {\n setFocused(true);\n },\n }));\n\n function focusInput() {\n inputRef.current?.focus();\n inputRef.current?.setSelectionRange(0, inputRef.current.value.length);\n }\n\n useEffect(() => {\n if (testFocused) return;\n if (focused) {\n // Use a timeout to focus the input after the next render.\n // The input isn't available even though `focused` was already set to true\n // must be a delay of 1ms or more to ensure any radix ui components have finished any focus behaviors\n setTimeout(focusInput, 1);\n }\n }, [focused, testFocused]);\n\n const displayValue = inputValue || placeholder || \"\";\n\n const preview = children({\n children: displayValue,\n onClick: () => setFocused(true),\n ref: previewRef,\n tabIndex,\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n setFocused(true);\n }\n },\n style: textStyle,\n className: textClassName,\n });\n\n const input = (\n <div className=\"flex absolute inset-0 -mx-1.5 -my-1\">\n <InputField.Root onFocusChange={setFocused}>\n <InputField.Input\n ref={inputRef}\n style={{\n lineHeight: \"15px\", // Match breadcrumb height\n ...textStyle,\n }}\n className={textClassName}\n {...props}\n value={inputValue}\n placeholder={placeholder}\n onKeyDown={handleKeyDown}\n onBlur={() => {\n setFocused(false);\n\n if (ignoreNextBlur.current) {\n ignoreNextBlur.current = false;\n return;\n }\n\n onSubmit?.(inputValue);\n onBlur?.();\n }}\n {...(onChange\n ? {\n onChange: (value) => {\n setInputValue(value);\n onChange?.(value);\n },\n }\n : {\n onSubmit: (value) => {\n setInputValue(value);\n onSubmit?.(value);\n setFocused(false);\n },\n onChange: (value) => {\n setInputValue(value);\n },\n })}\n />\n </InputField.Root>\n </div>\n );\n\n return (\n <div className={cx(\"flex relative\", className)} style={style}>\n {preview}\n {focused && !readOnly && input}\n </div>\n );\n })\n);\n","import { KeyModifiers } from \"@noya-app/noya-keymap\";\nimport { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport React, {\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport { useHover } from \"../hooks/useHover\";\nimport { cx, mergeConflictingClassNames } from \"../utils/classNames\";\nimport withSeparatorElements from \"../utils/withSeparatorElements\";\nimport { ActivityIndicator } from \"./ActivityIndicator\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { MenuItem } from \"./internal/Menu\";\nimport { ScrollArea } from \"./ScrollArea\";\nimport { Spacer } from \"./Spacer\";\nimport { Tooltip } from \"./Tooltip\";\n\nconst ItemTitle = ({\n showBackground,\n children,\n}: {\n showBackground?: boolean;\n children?: React.ReactNode;\n}) => {\n return (\n <span\n className={cx(\n \"font-sans text-heading5 text-text-muted font-medium\",\n showBackground &&\n \"bg-sidebar-background border border-divider-subtle rounded-[2px] backdrop-blur-[4px] p-[2px_4px]\"\n )}\n >\n {children}\n </span>\n );\n};\n\nconst ItemDescription = ({\n showBackground,\n children,\n}: {\n showBackground?: boolean;\n children?: React.ReactNode;\n}) => {\n return (\n <span\n className={cx(\n \"font-sans text-sm text-text-muted select-none truncate\",\n showBackground &&\n \"bg-sidebar-background border border-divider-subtle rounded-[2px] backdrop-blur-[4px] p-[2px_4px]\"\n )}\n >\n {children}\n </span>\n );\n};\n\nconst SectionTitle = ({\n last = false,\n children,\n}: {\n last?: boolean;\n children?: React.ReactNode;\n}) => {\n return (\n <span\n className={`font-sans text-heading3 font-medium user-select-none truncate ${last ? \"text-text\" : \"text-text-muted\"}`}\n >\n {children}\n </span>\n );\n};\n\ninterface ItemProps<MenuItemType extends string = string> {\n id: string;\n title?: ReactNode;\n subtitle?: ReactNode;\n loading?: boolean;\n selected?: boolean;\n onClick?: (event: React.MouseEvent) => void;\n onSelect?: (options: KeyModifiers) => void;\n onDoubleClick?: () => void;\n onHoverChange?: (isHovering: boolean) => void;\n children?: ReactNode;\n menuItems?: MenuItem<MenuItemType>[];\n onSelectMenuItem?: (value: MenuItemType) => void;\n onContextMenu?: () => void;\n onMenuOpenChange?: (open: boolean) => void;\n style?: CSSProperties;\n action?: ReactNode;\n onKeyDown?: (event: React.KeyboardEvent) => void;\n hovered?: boolean;\n testShowInsideDropIndicator?: boolean;\n role?: string;\n}\n\nconst GridViewItem = forwardRefGeneric(function GridViewItem<\n MenuItemType extends string,\n>(\n {\n id,\n title,\n subtitle,\n loading,\n selected,\n onClick,\n onSelect,\n onDoubleClick,\n onHoverChange,\n children,\n menuItems,\n onSelectMenuItem,\n onContextMenu,\n onMenuOpenChange,\n style,\n action,\n onKeyDown,\n hovered = false,\n testShowInsideDropIndicator: showInsideDropIndicator = false,\n ...props\n }: ItemProps<MenuItemType>,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { hoverProps } = useHover({\n onHoverChange,\n });\n\n const { textPosition, bordered, disabled } = useContext(GridViewContext);\n\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n\n onClick?.(event);\n onSelect?.(event);\n },\n [onClick, onSelect]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n onKeyDown?.(event);\n if (event.key === \"Enter\" || event.key === \" \") {\n event.stopPropagation();\n event.preventDefault();\n\n onSelect?.(event);\n } else {\n return;\n }\n },\n [onSelect, onKeyDown]\n );\n\n let element = (\n <div\n {...props}\n className={cx(\n \"flex flex-col relative rounded p-2 -m-2 text-text\",\n \"cursor-pointer\",\n \"active:opacity-70\",\n selected && \"bg-selected-list-item-background\",\n hovered && \"bg-list-view-hover-background\",\n disabled && \"opacity-50\",\n showInsideDropIndicator && \"ring-2 ring-primary ring-inset\",\n \"focus:ring-2 focus:ring-primary focus:ring-inset focus:outline-none\"\n )}\n id={id}\n ref={forwardedRef}\n {...hoverProps}\n tabIndex={disabled ? undefined : 0}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n onDoubleClick={onDoubleClick}\n onContextMenu={onContextMenu}\n >\n <div\n className={cx(\n \"flex items-center justify-center rounded\",\n bordered ? \"border border-divider\" : \"border border-transparent\"\n )}\n style={style}\n >\n {children}\n </div>\n {textPosition === \"below\" && (\n <>\n <Spacer.Vertical size={8} />\n <ItemTitle>{title || \" \"}</ItemTitle>\n <Spacer.Vertical size={2} />\n <ItemDescription>{subtitle || \" \"}</ItemDescription>\n </>\n )}\n {textPosition === \"overlay\" && hovered && (title || subtitle) && (\n <div className=\"absolute inset-0 flex flex-col justify-end items-start p-1 pointer-events-none truncate gap-0.5\">\n {title && <ItemTitle showBackground>{title}</ItemTitle>}\n {subtitle && (\n <ItemDescription showBackground>{subtitle}</ItemDescription>\n )}\n </div>\n )}\n {action && (\n <div className=\"absolute top-[7px] right-[7px] flex flex-col justify-end items-start p-1 truncate gap-0.5\">\n {action}\n </div>\n )}\n {loading && (\n <div className=\"flex flex-col justify-start items-end p-1 pointer-events-none animate-shimmer absolute inset-0 bg-gradient-to-r from-white/0 via-[rgb(226,232,240)]/50 to-white/0 bg-length:200%_100%]\">\n <ActivityIndicator opacity={0.5} size={13} />\n </div>\n )}\n </div>\n );\n\n if (menuItems && onSelectMenuItem) {\n element = (\n <ContextMenu<MenuItemType>\n items={menuItems}\n onSelect={onSelectMenuItem}\n onOpenChange={onMenuOpenChange}\n >\n {element}\n </ContextMenu>\n );\n }\n\n if (textPosition === \"toolip\") {\n element = (\n <Tooltip\n content={\n <div className=\"flex flex-col gap-0.5\">\n <ItemTitle>{title}</ItemTitle>\n <ItemDescription>{subtitle}</ItemDescription>\n </div>\n }\n >\n {element}\n </Tooltip>\n );\n }\n\n return element;\n});\n\ntype GridViewContextValue = {\n minColumnWidth: string;\n textPosition: \"overlay\" | \"below\" | \"toolip\";\n bordered: boolean;\n disabled: boolean;\n gap: number;\n};\n\nconst GridViewContext = createContext<GridViewContextValue>({\n minColumnWidth: \"220px\",\n textPosition: \"below\",\n bordered: false,\n disabled: false,\n gap: 0,\n});\n\ninterface GridViewRootProps extends Partial<GridViewContextValue> {\n children: ReactNode;\n onClick?: () => void;\n scrollable?: boolean;\n className?: string;\n onDragOver?: React.DragEventHandler<HTMLDivElement>;\n onDragEnter?: React.DragEventHandler<HTMLDivElement>;\n onDragLeave?: React.DragEventHandler<HTMLDivElement>;\n onDrop?: React.DragEventHandler<HTMLDivElement>;\n role?: string;\n renderEmptyState?: () => ReactNode;\n contentClassName?: string;\n}\n\nconst GridViewRoot = forwardRef(function GridViewRoot(\n {\n minColumnWidth = \"220px\",\n gap = 20,\n children,\n scrollable,\n onClick,\n textPosition = \"below\",\n bordered = false,\n disabled = false,\n className,\n contentClassName,\n ...props\n }: GridViewRootProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n event.preventDefault();\n\n onClick?.();\n },\n [onClick]\n );\n\n const contextValue = useMemo(\n () => ({\n minColumnWidth,\n textPosition,\n bordered,\n disabled,\n gap,\n }),\n [bordered, disabled, gap, minColumnWidth, textPosition]\n );\n\n const mergedClassName = useMemo(() => {\n const baseClassName = cx(\n \"flex flex-col -mx-3\",\n scrollable ? \"basis-0 min-h-0\" : \"flex-none\",\n className\n );\n\n return mergeConflictingClassNames([baseClassName, className], {\n categories: [\"flex\"],\n });\n }, [className, scrollable]);\n\n const content = <div className={cx(\"p-3\", contentClassName)}>{children}</div>;\n\n return (\n <GridViewContext.Provider value={contextValue}>\n <div\n onClick={handleClick}\n className={mergedClassName}\n {...props}\n ref={forwardedRef}\n >\n {scrollable ? <ScrollArea>{content}</ScrollArea> : content}\n </div>\n </GridViewContext.Provider>\n );\n});\n\nfunction GridViewSection({\n children,\n className,\n renderEmptyState,\n}: {\n children?: ReactNode;\n className?: string;\n renderEmptyState?: () => ReactNode;\n}) {\n const { minColumnWidth, gap } = useContext(GridViewContext);\n\n const styles: React.CSSProperties = {\n gridTemplateColumns: `repeat(auto-fill, minmax(${minColumnWidth}, 1fr))`,\n gap: `${gap}px`,\n };\n\n const isEmpty = React.Children.count(children) === 0;\n\n return isEmpty && renderEmptyState ? (\n renderEmptyState()\n ) : (\n <div\n role=\"presentation\"\n className={cx(\"grid text-text\", className)}\n style={styles}\n >\n {children}\n </div>\n );\n}\n\nfunction GridViewSectionHeader({ title }: { title: string }) {\n const grouped = title.split(\"/\");\n\n return (\n <div className=\"px-5\">\n <Spacer.Vertical size={24} />\n {withSeparatorElements(\n grouped.map((title, index) => (\n <SectionTitle last={index === grouped.length - 1}>\n {title}\n </SectionTitle>\n )),\n <SectionTitle> / </SectionTitle>\n )}\n </div>\n );\n}\n\nexport namespace GridView {\n export const Root = memo(GridViewRoot);\n export const Item = memoGeneric(GridViewItem);\n export const Section = memo(GridViewSection);\n export const SectionHeader = memo(GridViewSectionHeader);\n}\n","import { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport { memoGeneric } from \"@noya-app/react-utils\";\nimport * as RadixContextMenu from \"@radix-ui/react-context-menu\";\nimport React, { ReactNode, useCallback, useMemo } from \"react\";\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../contexts/PortalScopeContext\";\nimport {\n MenuItem,\n getKeyboardShortcutsForMenuItems,\n styles,\n} from \"./internal/Menu\";\nimport { MenuViewport } from \"./internal/MenuViewport\";\nexport interface MenuItemProps<T extends string> {\n value?: T;\n children: ReactNode;\n onSelect: (value: T) => void;\n checked: boolean;\n disabled: boolean;\n indented: boolean;\n shortcut?: string;\n icon?: ReactNode;\n items?: MenuItem<T>[];\n}\n\nconst Components = {\n Separator: RadixContextMenu.Separator,\n ItemText: React.Fragment,\n Item: RadixContextMenu.Item,\n CheckboxItem: RadixContextMenu.CheckboxItem,\n ItemIndicator: RadixContextMenu.ItemIndicator,\n SubTrigger: RadixContextMenu.SubTrigger,\n SubContent: RadixContextMenu.SubContent,\n Sub: RadixContextMenu.Sub,\n Portal: RadixContextMenu.Portal,\n};\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nexport interface MenuProps<T extends string> {\n children: ReactNode;\n items: MenuItem<T>[];\n onSelect: (value: T) => void;\n shouldBindKeyboardShortcuts?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction ContextMenuRoot<T extends string>({\n items,\n children,\n onSelect,\n shouldBindKeyboardShortcuts,\n onOpenChange,\n}: MenuProps<T>) {\n const keymap = useMemo(\n () =>\n shouldBindKeyboardShortcuts === false\n ? {}\n : getKeyboardShortcutsForMenuItems(items, onSelect),\n [items, onSelect, shouldBindKeyboardShortcuts]\n );\n\n const portalScopeId = usePortalScopeId();\n\n useKeyboardShortcuts(keymap);\n\n // We call preventDefault both to:\n // - Disable radix-ui's long-press-to-open behavior\n // https://github.com/radix-ui/primitives/issues/748#issuecomment-869502837\n // - Mark the event as handled, so our ListView root doesn't handle it (a hack)\n const onPointerDown = useCallback((event: React.PointerEvent) => {\n event.preventDefault();\n }, []);\n\n const handleSelectItem = useCallback(\n (value: T) => {\n if (!value) return;\n\n onSelect(value);\n },\n [onSelect]\n );\n\n return (\n <RadixContextMenu.Root onOpenChange={onOpenChange}>\n <RadixContextMenu.Trigger asChild onPointerDown={onPointerDown}>\n {children}\n </RadixContextMenu.Trigger>\n <RadixContextMenu.Portal>\n <RadixContextMenu.Content\n {...portalScopeProps(portalScopeId)}\n className={styles.contentStyle}\n >\n <MenuViewport\n items={items}\n Components={Components}\n onSelect={handleSelectItem}\n />\n </RadixContextMenu.Content>\n </RadixContextMenu.Portal>\n </RadixContextMenu.Root>\n );\n}\n\nexport const ContextMenu = memoGeneric(ContextMenuRoot);\n","import * as RadixScrollArea from \"@radix-ui/react-scroll-area\";\nimport * as React from \"react\";\n\ninterface Props {\n children?:\n | React.ReactNode\n | ((scrollElementRef: HTMLDivElement) => React.ReactNode);\n}\n\nexport const ScrollArea = React.memo(function ScrollArea({ children }: Props) {\n const [scrollElementRef, setScrollElementRef] =\n React.useState<HTMLDivElement | null>(null);\n\n return (\n <div className=\"flex-1 min-h-0\">\n <RadixScrollArea.Root style={{ width: \"100%\", height: \"100%\" }}>\n <RadixScrollArea.Viewport\n className=\"w-full h-full [&>div]:block\"\n ref={React.useCallback(\n (ref: HTMLDivElement | null) => setScrollElementRef(ref),\n []\n )}\n >\n {typeof children === \"function\"\n ? scrollElementRef\n ? children(scrollElementRef)\n : null\n : children}\n </RadixScrollArea.Viewport>\n <RadixScrollArea.Scrollbar\n orientation=\"vertical\"\n className=\"scroll-component flex p-[3px] data-[orientation=vertical]:w-[10px]\"\n >\n <RadixScrollArea.Thumb className=\"scroll-component flex-1 rounded-[10px] bg-scrollbar\" />\n </RadixScrollArea.Scrollbar>\n </RadixScrollArea.Root>\n </div>\n );\n});\n","import {\n forwardRefGeneric,\n memoGeneric,\n useFileDropTarget,\n} from \"@noya-app/react-utils\";\nimport React, { memo, useImperativeHandle, useRef, useState } from \"react\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { updateSelection } from \"../utils/selection\";\nimport { ActionMenu } from \"./ActionMenu\";\nimport {\n CollectionItemSize,\n CollectionProps,\n CollectionRef,\n} from \"./Collection\";\nimport { ListView, ListViewItemInfo } from \"./ListView\";\nimport { TreeView } from \"./TreeView\";\n\nconst cssVarOverrides = {\n \"--n-icon-selected\": cssVars.colors.selectedListItemText,\n};\n\nconst emptyArray: string[] = [];\n\nexport const List = memoGeneric(\n forwardRefGeneric(function List<T, M extends string = string>(\n props: CollectionProps<T, M>,\n ref: React.ForwardedRef<CollectionRef>\n ) {\n const {\n className,\n items,\n getId,\n getName,\n expandable,\n getExpanded,\n getRenamable,\n getDepth,\n setExpanded,\n menuItems,\n onSelectMenuItem,\n onRename,\n renderThumbnail,\n renderAction,\n renderDetail,\n onSelectionChange,\n itemRoleDescription = \"clickable item\",\n detailPosition = \"end\",\n size = \"medium\",\n thumbnailSize = \"auto\",\n testHoveredId,\n testRenamingId,\n testShowDropIndicatorId,\n scrollable = false,\n acceptsDrop,\n onMoveItem,\n onFilesDrop,\n onDoubleClickItem,\n renamable,\n selectedIds = emptyArray,\n renderEmptyState,\n sortable,\n getDropTargetParentIndex,\n getPlaceholder,\n onClickItem,\n dragIndicatorStyle,\n sortableId,\n sharedDragProps,\n } = props;\n\n const [internalHoveredId, setHoveredId] = useState<string>();\n const [internalRenamingId, setRenamingId] = useState<string>();\n const [dropdownOpenId, setDropdownOpenId] = useState<string>();\n const hoveredId = internalHoveredId ?? testHoveredId;\n const renamingId = testRenamingId ?? internalRenamingId;\n\n const handleSelect = (itemId: string, event?: ListView.ClickInfo) => {\n if (!onSelectionChange) return;\n\n setRenamingId(undefined);\n const newSelectedIds = updateSelection(\n items.map(getId),\n selectedIds,\n itemId,\n event\n );\n onSelectionChange(newSelectedIds, event);\n };\n\n const handleMenuAction = (action: M, actionItem: T) => {\n if (!onSelectMenuItem) return;\n\n const selectedItems = items.filter((item) =>\n selectedIds.includes(getId(item))\n );\n\n onSelectMenuItem(\n action,\n selectedItems.length === 0 ? [actionItem] : selectedItems\n );\n };\n\n const ViewComponent = expandable ? TreeView : ListView;\n\n const fileDropTargetRef = useRef<HTMLDivElement>(null);\n const { isDropTargetActive, dropTargetProps } = useFileDropTarget(\n fileDropTargetRef,\n onFilesDrop\n );\n\n useImperativeHandle(ref, () => ({\n editName: (id: string) => {\n setRenamingId(id);\n },\n }));\n\n return (\n <ViewComponent.Root\n variant=\"bare\"\n className={cx(\n className,\n isDropTargetActive && \"bg-selected-list-item-background\",\n scrollable && \"basis-0 min-h-0\"\n )}\n containerRef={fileDropTargetRef}\n scrollable={scrollable}\n data={items}\n keyExtractor={getId}\n role=\"listbox\"\n aria-orientation=\"vertical\"\n aria-multiselectable={true}\n expandable={expandable}\n sortable={sortable}\n acceptsDrop={acceptsDrop}\n onMoveItem={onMoveItem}\n renderEmptyState={renderEmptyState}\n getDropTargetParentIndex={getDropTargetParentIndex}\n sharedDragProps={sharedDragProps}\n sortableId={sortableId}\n {...dropTargetProps}\n renderItem={(\n item: T,\n _: number,\n { isDragOverlay }: ListViewItemInfo\n ) => {\n const id = getId(item);\n const isDropdownOpen = dropdownOpenId === id;\n const isHovered =\n (hoveredId === id || isDropdownOpen) && !isDragOverlay;\n const expanded = getExpanded?.(item);\n const itemIsRenamable = getRenamable?.(item) ?? renamable;\n const isSelected = selectedIds.includes(id);\n const isRenaming = itemIsRenamable && onRename && renamingId === id;\n const isTestingRenaming = testRenamingId === id;\n\n const thumbnail = renderThumbnail?.({\n item,\n selected: isSelected,\n size,\n });\n const onOpenChange = (open: boolean) => {\n setDropdownOpenId(open ? id : undefined);\n\n if (open && !isSelected) {\n handleSelect(id);\n }\n };\n const action =\n (isHovered || isSelected) &&\n !isRenaming &&\n (typeof renderAction === \"function\"\n ? renderAction({ item, selected: isSelected, onOpenChange })\n : renderAction === \"menu\" &&\n menuItems && (\n <ActionMenu\n menuItems={menuItems}\n onSelect={(action) => handleMenuAction(action, item)}\n selected={isSelected}\n onOpenChange={onOpenChange}\n variant=\"bare\"\n style={{\n backgroundColor: isSelected\n ? cssVars.colors.selectedListItemBackground\n : \"transparent\",\n color: isSelected\n ? cssVars.colors.selectedListItemText\n : undefined,\n }}\n />\n ));\n\n const end =\n action ||\n (detailPosition === \"end\" && renderDetail?.(item, isSelected));\n const below =\n detailPosition === \"below\" && renderDetail?.(item, isSelected);\n\n return (\n <ViewComponent.Row\n id={id}\n key={id}\n role=\"option\"\n sortable={sortable}\n aria-roledescription={itemRoleDescription}\n aria-label={getName(item)}\n aria-selected={isSelected}\n className={cx(\"cursor-pointer rounded px-1\", pyMap[size])}\n testRelativeDropPosition={\n testShowDropIndicatorId === id ? \"inside\" : undefined\n }\n chevronClassName={cx(expandable && \"relative left-2\")}\n style={cssVarOverrides as React.CSSProperties}\n hovered={isHovered}\n selected={isSelected}\n expanded={expanded}\n depth={getDepth?.(item)}\n onHoverChange={(hovered: boolean) =>\n setHoveredId(hovered ? id : undefined)\n }\n onPress={(e: ListView.ClickInfo) => {\n handleSelect(id, e);\n onClickItem?.(id);\n }}\n onDoubleClick={() => {\n onDoubleClickItem?.(id);\n }}\n onKeyDown={(e: React.KeyboardEvent) => {\n if (e.key !== \"Enter\" && e.key !== \" \") return;\n e.preventDefault();\n handleSelect(id, e);\n if (e.key === \"Enter\") {\n setRenamingId(id);\n }\n }}\n menuItems={menuItems}\n onSelectMenuItem={(action) => handleMenuAction(action, item)}\n onContextMenu={() => {\n if (!isSelected) {\n handleSelect(id);\n }\n }}\n tabIndex={0}\n onClickChevron={() => {\n if (!expandable) return;\n setExpanded?.(item, !expanded);\n }}\n dragIndicatorStyle={dragIndicatorStyle}\n >\n <div\n className={cx(\"flex flex-1 items-center px-2\", rowGapMap[size])}\n >\n {thumbnail && (\n <div\n className={cx(\n \"overflow-hidden flex-none flex items-center justify-center\",\n thumbnailSize === \"auto\" && thumbnailSizeMap[size],\n isSelected && \"text-selected-list-item-text\",\n size === \"small\" ? \"rounded-sm\" : \"rounded\"\n )}\n tabIndex={-1}\n >\n {thumbnail}\n </div>\n )}\n <div className=\"flex flex-col flex-1 w-0\">\n <div className=\"flex items-center min-h-input-height flex-1 gap-2\">\n <div className=\"flex-1 w-0 flex items-center\" tabIndex={-1}>\n {isRenaming ? (\n <ViewComponent.EditableRowTitle\n value={getName(item)}\n placeholder={getPlaceholder?.(item) ?? \"Enter name\"}\n className={fontStyleMap[size]}\n autoFocus={!isTestingRenaming}\n onSubmitEditing={(value: string) => {\n onRename?.(item, value);\n setRenamingId(undefined);\n }}\n onKeyDown={(e: React.KeyboardEvent) => {\n e.stopPropagation();\n }}\n />\n ) : (\n <ViewComponent.RowTitle\n className={cx(\n fontStyleMap[size],\n isSelected && \"text-selected-list-item-text\"\n )}\n >\n {getName(item)}\n </ViewComponent.RowTitle>\n )}\n </div>\n {end && detailPosition === \"end\" && (\n <DetailContainer selected={isSelected}>\n {end}\n </DetailContainer>\n )}\n </div>\n {below && (\n <DetailContainer selected={isSelected}>\n {below}\n </DetailContainer>\n )}\n </div>\n {end && detailPosition === \"below\" && (\n <DetailContainer selected={isSelected}>{end}</DetailContainer>\n )}\n </div>\n </ViewComponent.Row>\n );\n }}\n />\n );\n })\n);\n\nconst DetailContainer = memo(function DetailContainer({\n children,\n selected,\n}: {\n children: React.ReactNode;\n selected: boolean;\n}) {\n return (\n <div\n className={cx(\"flex items-center gap-2\", selected && \"text-primary\")}\n tabIndex={-1}\n >\n {children}\n </div>\n );\n});\n\nconst pyMap: Record<CollectionItemSize, string> = {\n xxs: \"py-0.5\",\n xs: \"py-0.5\",\n small: \"py-0.5\",\n medium: \"py-1\",\n mediumLarge: \"py-1.5\",\n large: \"py-2\",\n xl: \"py-3\",\n};\n\nconst thumbnailSizeMap: Record<CollectionItemSize, string> = {\n xxs: \"w-5 h-5\",\n xs: \"w-5 h-5\",\n small: \"w-5 h-5\",\n medium: \"w-8 h-8\",\n mediumLarge: \"w-12 h-12\",\n large: \"w-16 h-16\",\n xl: \"w-24 h-24\",\n};\n\nconst rowGapMap: Record<CollectionItemSize, string> = {\n xxs: \"gap-2\",\n xs: \"gap-2\",\n small: \"gap-2\",\n medium: \"gap-3\",\n mediumLarge: \"gap-3\",\n large: \"gap-3\",\n xl: \"gap-4\",\n};\n\nconst fontStyleMap: Record<CollectionItemSize, string> = {\n xxs: \"font-medium text-list-small\",\n xs: \"font-medium text-list-small\",\n small: \"font-medium text-list-small\",\n medium: \"font-medium\",\n mediumLarge: \"font-medium\",\n large: \"font-medium\",\n xl: \"font-medium text-heading4 text-text\",\n};\n","import { Size } from \"@noya-app/noya-geometry\";\nimport { range } from \"@noya-app/noya-utils\";\nimport { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport React, {\n Children,\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n HTMLAttributes,\n isValidElement,\n memo,\n ReactElement,\n ReactNode,\n Ref,\n useCallback,\n useContext,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { WindowScroller, WindowScrollerChildProps } from \"react-virtualized\";\nimport { ListChildComponentProps, VariableSizeList } from \"react-window\";\nimport { mergeEventHandlers } from \"../hooks/mergeEventHandlers\";\nimport { useHover } from \"../hooks/useHover\";\nimport { cssVars, INPUT_HEIGHT } from \"../theme\";\nimport { cx, mergeConflictingClassNames } from \"../utils/classNames\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { InputField } from \"./InputField\";\nimport { MenuItem } from \"./internal/Menu\";\nimport { ScrollArea } from \"./ScrollArea\";\nimport { SharedDragProps } from \"./sorting/DragRegistration\";\nimport { Sortable } from \"./sorting/Sortable\";\nimport {\n DropValidator,\n MoveDragItemHandler,\n normalizeListTargetIndex,\n RelativeDropPosition,\n SortableItemContextProps,\n} from \"./sorting/sorting\";\nimport { Spacer } from \"./Spacer\";\n\nexport type ListRowMarginType = \"none\" | \"top\" | \"bottom\" | \"vertical\";\nexport type ListRowPosition = \"only\" | \"first\" | \"middle\" | \"last\";\n\nconst ROW_HEIGHT = 31;\nconst SECTION_HEADER_LABEL_HEIGHT = INPUT_HEIGHT;\n\ntype ListColorScheme = \"primary\" | \"secondary\";\n\ntype PressEventName = \"onClick\" | \"onPointerDown\";\n\n// TODO: Some of these could be passed in a single context value that's\n// the same for all rows. But doing this seems to cause an infinite loop and\n// prevents drag and drop from working.\ntype ListRowContextValue = {\n marginType: ListRowMarginType;\n selectedPosition: ListRowPosition;\n sortable: boolean;\n expandable: boolean;\n divider: boolean;\n gap: number;\n variant: ListViewVariant;\n sectionHeaderVariant: ListViewSectionHeaderVariant;\n pressEventName: PressEventName;\n isSectionHeader: boolean;\n colorScheme: ListColorScheme;\n};\n\n// The dragged item isn't passed a context value (doing so causes an infinite loop),\n// so we pass this separately. Rows need the indentation to look correct when dragging,\n// and the dragged row doesn't have a ListRowContextValue.\ntype ListViewDraggingContextValue = {\n indentation: number;\n isDragOverlay?: boolean;\n};\n\nconst ListViewDraggingContext = createContext<ListViewDraggingContextValue>({\n indentation: 12,\n});\n(ListViewDraggingContext as any).displayName = \"ListViewDraggingContext\";\n\nconst ListRowContext = createContext<ListRowContextValue>({\n marginType: \"none\",\n selectedPosition: \"only\",\n sortable: false,\n expandable: true,\n divider: true,\n gap: 0,\n variant: \"normal\",\n sectionHeaderVariant: \"normal\",\n pressEventName: \"onClick\",\n isSectionHeader: false,\n colorScheme: \"primary\",\n});\n(ListRowContext as any).displayName = \"ListRowContext\";\n\n/* ----------------------------------------------------------------------------\n * RowTitle\n * ------------------------------------------------------------------------- */\n\nconst ListViewRowTitle = ({\n className,\n children,\n ...props\n}: {\n className?: string;\n children: React.ReactNode;\n} & HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cx(\n `flex-1 overflow-hidden text-ellipsis whitespace-pre `,\n className\n )}\n {...props}\n >\n {children}\n </span>\n);\n\n/* ----------------------------------------------------------------------------\n * EditableRowTitle\n * ------------------------------------------------------------------------- */\n\nexport interface EditableRowProps {\n value: string;\n onSubmitEditing: (value: string) => void;\n autoFocus: boolean;\n placeholder?: string;\n className?: string;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n}\n\nfunction ListViewEditableRowTitle({\n value,\n onSubmitEditing,\n autoFocus,\n placeholder,\n className,\n onKeyDown,\n}: EditableRowProps) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n useLayoutEffect(() => {\n const element = inputRef.current;\n\n if (!element || !autoFocus) return;\n\n // Calling `focus` is necessary, in addition to `select`, to ensure\n // the `onBlur` fires correctly.\n element.focus();\n\n // must be a delay of 1ms or more to ensure any radix ui components have finished any focus behaviors\n setTimeout(() => {\n element.select();\n }, 1);\n }, [autoFocus]);\n\n return (\n <InputField.Input\n ref={inputRef}\n value={value}\n placeholder={placeholder}\n onSubmit={onSubmitEditing}\n allowSubmittingWithSameValue\n className={cx(\"-mx-1.5 -my-1 bg-listview-editing-background\", className)}\n onKeyDown={onKeyDown}\n />\n );\n}\n\n/* ----------------------------------------------------------------------------\n * Row\n * ------------------------------------------------------------------------- */\n\nconst RowContainer = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n $marginType: ListRowMarginType;\n $selected: boolean;\n $selectedPosition: ListRowPosition;\n $disabled: boolean;\n $hovered: boolean;\n $variant: ListViewVariant;\n $divider: boolean;\n $isSectionHeader: boolean;\n $showsActiveState: boolean;\n $sectionHeaderVariant: ListViewSectionHeaderVariant;\n $colorScheme: ListColorScheme;\n $gap: number;\n $backgroundColor?: CSSProperties[\"backgroundColor\"];\n $clickable?: boolean;\n }\n>(\n (\n {\n className,\n $marginType,\n $selected,\n $selectedPosition,\n $disabled,\n $hovered,\n $variant,\n $divider,\n $isSectionHeader,\n $showsActiveState,\n $sectionHeaderVariant,\n $colorScheme,\n $gap,\n $backgroundColor,\n style,\n $clickable,\n \"aria-describedby\": _, // Causes hydration warning\n role,\n \"aria-label\": ariaLabel,\n \"aria-roledescription\": ariaRoleDescription,\n \"aria-selected\": ariaSelected,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role={role}\n aria-label={ariaLabel}\n aria-roledescription={ariaRoleDescription}\n aria-selected={ariaSelected ?? $selected}\n className={cx(\n $isSectionHeader && $sectionHeaderVariant === \"label\"\n ? \"font-sans text-label uppercase leading-3 font-bold text-text-muted\"\n : \"font-sans text-heading5 font-normal\",\n !$isSectionHeader &&\n $selected &&\n \"text-selected-list-item-text active:bg-selected-list-item-background\",\n !$isSectionHeader && $disabled && \"text-text-disabled\",\n $clickable ? \"cursor-pointer\" : \"cursor-default\",\n $isSectionHeader && \"bg-listview-raised-background\",\n \"flex flex-[0_0_auto] select-none items-center relative\",\n className\n )}\n style={{\n gap: $gap,\n ...($variant !== \"bare\" && {\n paddingTop: $selected ? \"4px\" : \"6px\",\n paddingRight: $selected ? \"8px\" : \"12px\",\n paddingBottom: $selected ? \"4px\" : \"6px\",\n paddingLeft: $selected ? \"8px\" : \"12px\",\n borderRadius: $selected ? \"4px\" : \"\",\n marginLeft: $selected ? \"4px\" : \"\",\n marginRight: $selected ? \"4px\" : \"\",\n marginTop: $selected ? \"2px\" : \"\",\n marginBottom: $selected ? \"2px\" : \"\",\n }),\n ...($selected &&\n !$isSectionHeader && {\n backgroundColor:\n $colorScheme === \"primary\"\n ? cssVars.colors[\"selectedListItemBackground\"]\n : cssVars.colors[$colorScheme],\n }),\n ...($selected &&\n !$isSectionHeader &&\n ($selectedPosition === \"middle\" ||\n $selectedPosition === \"last\") && {\n borderTopRightRadius: \"0px\",\n borderTopLeftRadius: \"0px\",\n }),\n ...($selected &&\n !$isSectionHeader &&\n ($selectedPosition === \"middle\" ||\n $selectedPosition === \"first\") && {\n borderBottomRightRadius: \"0px\",\n borderBottomLeftRadius: \"0px\",\n }),\n ...($hovered &&\n !$selected && {\n background: cssVars.colors.listViewHoverBackground,\n }),\n ...($showsActiveState && {\n \"&:active\": {\n backgroundColor: $selected\n ? $colorScheme === \"secondary\"\n ? cssVars.colors.secondaryLight\n : cssVars.colors.selectedListItemBackground\n : cssVars.colors.activeBackground,\n },\n }),\n ...($divider && {\n borderBottom: `1px solid ${cssVars.colors.dividerSubtle}`,\n }),\n ...($backgroundColor && {\n backgroundColor: $backgroundColor,\n \"&:hover\": {\n backgroundColor: $backgroundColor,\n },\n \"&:active\": {\n backgroundColor: $backgroundColor,\n },\n }),\n ...style,\n }}\n {...props}\n />\n );\n }\n);\n\nconst ListViewDragIndicatorElement = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n $relativeDropPosition?: RelativeDropPosition;\n $gap: number;\n $offsetLeft: number;\n $colorScheme: ListColorScheme;\n }\n>(\n (\n {\n className,\n $relativeDropPosition,\n $offsetLeft,\n $colorScheme,\n $gap,\n style,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n {...props}\n className={className}\n style={{\n zIndex: 1000,\n position: \"absolute\",\n borderRadius: \"3px\",\n pointerEvents: \"none\",\n ...($relativeDropPosition === \"inside\"\n ? {\n inset: 2,\n boxShadow: `0 0 0 1px ${cssVars.colors.sidebarBackground}, 0 0 0 3px ${\n $colorScheme === \"secondary\"\n ? cssVars.colors.secondary\n : cssVars.colors.dragOutline\n }`,\n }\n : {\n top:\n $relativeDropPosition === \"above\"\n ? -(3 + $gap / 2)\n : undefined,\n bottom:\n $relativeDropPosition === \"below\"\n ? -(3 + $gap / 2)\n : undefined,\n left: $offsetLeft,\n right: 0,\n height: 6,\n backgroundColor:\n $colorScheme === \"secondary\"\n ? cssVars.colors.secondary\n : cssVars.colors.selectedListItemBackground,\n border: `2px solid white`,\n boxShadow: \"0 0 2px rgba(0,0,0,0.5)\",\n }),\n ...style,\n }}\n />\n );\n }\n);\n\ninterface ListViewClickInfo {\n shiftKey: boolean;\n altKey: boolean;\n metaKey: boolean;\n ctrlKey: boolean;\n}\n\nexport interface ListViewRowProps<MenuItemType extends string = string> {\n id?: string;\n tabIndex?: number;\n role?: string;\n selected?: boolean;\n /** @default 0 */\n depth?: number;\n disabled?: boolean;\n // draggable?: boolean;\n hovered?: boolean;\n sortable?: boolean;\n gap?: number;\n backgroundColor?: CSSProperties[\"backgroundColor\"];\n onPress?: (info: ListViewClickInfo) => void;\n onDoubleClick?: () => void;\n onHoverChange?: (isHovering: boolean) => void;\n children?: ReactNode;\n isSectionHeader?: boolean;\n menuItems?: MenuItem<MenuItemType>[];\n onSelectMenuItem?: (value: MenuItemType) => void;\n onContextMenu?: () => void;\n onMenuOpenChange?: (isOpen: boolean) => void;\n onKeyDown?: (event: React.KeyboardEvent) => void;\n style?: CSSProperties;\n className?: string;\n dragIndicatorStyle?:\n | CSSProperties\n | ((props: DragIndicatorStyleProps) => CSSProperties);\n testRelativeDropPosition?: RelativeDropPosition;\n}\n\nexport type DragIndicatorStyleProps = {\n depth: number;\n indentation: number;\n position: RelativeDropPosition;\n};\n\nconst ListViewRow = forwardRefGeneric(function ListViewRow<\n MenuItemType extends string,\n>(\n {\n id,\n tabIndex = 0,\n role,\n gap,\n backgroundColor,\n selected = false,\n depth = 0,\n disabled = false,\n hovered = false,\n isSectionHeader = false,\n sortable: overrideSortable,\n onPress,\n onDoubleClick,\n onHoverChange,\n children,\n menuItems,\n onContextMenu,\n onSelectMenuItem,\n onMenuOpenChange,\n onKeyDown,\n style,\n dragIndicatorStyle,\n className,\n testRelativeDropPosition,\n }: ListViewRowProps<MenuItemType>,\n forwardedRef: ForwardedRef<HTMLElement>\n) {\n depth = Math.max(0, depth);\n\n const {\n marginType,\n selectedPosition,\n sortable,\n pressEventName,\n variant,\n sectionHeaderVariant,\n divider,\n gap: listGap,\n colorScheme,\n } = useContext(ListRowContext);\n const { hoverProps } = useHover({\n onHoverChange,\n });\n const { indentation, isDragOverlay } = useContext(ListViewDraggingContext);\n\n const handlePress = useCallback(\n (event: React.MouseEvent) => {\n // We use preventDefault as a hack to mark this event as handled. We check for\n // this in the ListView.Root. We can't stopPropagation here or existing ContextMenus\n // won't close (onPointerDownOutside won't fire).\n event.preventDefault();\n\n // We only want to handle left clicks\n if (event.button !== 0) return;\n\n onPress?.(event);\n },\n [onPress]\n );\n\n const handleDoubleClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n\n onDoubleClick?.();\n },\n [onDoubleClick]\n );\n\n const mergedStyle = useMemo(() => {\n return isDragOverlay\n ? {\n // TODO: Where do these offsets actually come from?\n transform: `translate3d(-36px, -6px, 0)`,\n width: `calc(100% + 48px)`,\n ...style,\n }\n : style;\n }, [isDragOverlay, style]);\n\n const renderContent = (\n {\n relativeDropPosition: relativeDropPositionProp,\n ...renderProps\n }: React.ComponentProps<typeof RowContainer> & {\n relativeDropPosition?: RelativeDropPosition;\n },\n ref: Ref<HTMLElement>\n ) => {\n const Component = RowContainer;\n const relativeDropPosition =\n testRelativeDropPosition ?? relativeDropPositionProp;\n\n const element = (\n <Component\n ref={ref as any}\n $colorScheme={colorScheme}\n onContextMenu={onContextMenu}\n $isSectionHeader={isSectionHeader}\n id={id}\n role={role}\n $gap={gap ?? 0}\n $backgroundColor={backgroundColor}\n {...hoverProps}\n onDoubleClick={handleDoubleClick}\n $marginType={marginType ?? \"none\"}\n $disabled={disabled}\n $hovered={hovered}\n $selected={selected}\n $variant={variant}\n $sectionHeaderVariant={sectionHeaderVariant}\n $selectedPosition={selectedPosition}\n $showsActiveState={pressEventName === \"onClick\"}\n aria-selected={selected}\n $divider={!isDragOverlay && divider}\n onKeyDown={onKeyDown}\n style={mergedStyle}\n {...(renderProps as Partial<React.ComponentProps<typeof RowContainer>>)}\n {...mergeEventHandlers(\n { onPointerDown: renderProps.onPointerDown! },\n { [pressEventName]: handlePress }\n )}\n tabIndex={tabIndex}\n className={className}\n $clickable={!!onPress}\n >\n {relativeDropPosition && (\n <ListViewDragIndicatorElement\n key={relativeDropPosition}\n $colorScheme={colorScheme}\n $relativeDropPosition={relativeDropPosition}\n $offsetLeft={depth * indentation}\n $gap={listGap + (divider ? 1 : 0)}\n style={\n typeof dragIndicatorStyle === \"function\"\n ? dragIndicatorStyle({\n depth,\n indentation,\n position: relativeDropPosition,\n })\n : dragIndicatorStyle\n }\n />\n )}\n {depth > 0 && <Spacer.Horizontal size={depth * indentation} />}\n {children}\n </Component>\n );\n\n if (menuItems && onSelectMenuItem) {\n return (\n <ContextMenu<MenuItemType>\n items={menuItems}\n onSelect={onSelectMenuItem}\n onOpenChange={onMenuOpenChange}\n >\n {element}\n </ContextMenu>\n );\n }\n\n return element;\n };\n\n if (sortable && id) {\n return (\n <Sortable.Item<HTMLElement> id={id} disabled={overrideSortable === false}>\n {({ ref: sortableRef, ...sortableProps }) =>\n renderContent(\n sortableProps as any,\n composeRefs(sortableRef, forwardedRef)\n )\n }\n </Sortable.Item>\n );\n }\n\n return renderContent({} as any, forwardedRef);\n});\n\n/* ----------------------------------------------------------------------------\n * VirtualizedListRow\n * ------------------------------------------------------------------------- */\n\nconst RenderItemContext = createContext<(index: number) => ReactNode>(\n () => null\n);\n(RenderItemContext as any).displayName = \"RenderItemContext\";\n\nconst VirtualizedListRow = memo(function VirtualizedListRow({\n index,\n style,\n}: ListChildComponentProps) {\n const renderItem = useContext(RenderItemContext);\n\n return (\n <div key={index} style={style}>\n {renderItem(index)}\n </div>\n );\n});\n\n/* ----------------------------------------------------------------------------\n * VirtualizedList\n * ------------------------------------------------------------------------- */\n\ninterface VirtualizedListProps<T> {\n size: Size;\n scrollElement: HTMLDivElement;\n items: T[];\n getItemHeight: (index: number) => number;\n keyExtractor: (index: number) => string;\n renderItem: (index: number) => ReactNode;\n}\n\nexport interface IVirtualizedList {\n scrollToIndex(index: number): void;\n}\n\nconst VirtualizedListInner = forwardRefGeneric(function VirtualizedListInner<T>(\n {\n size,\n scrollElement,\n items,\n getItemHeight,\n keyExtractor,\n renderItem,\n }: VirtualizedListProps<T>,\n ref: ForwardedRef<IVirtualizedList>\n) {\n const listRef = useRef<VariableSizeList<T> | null>(null);\n\n useImperativeHandle(ref, () => ({\n scrollToIndex(index) {\n listRef.current?.scrollToItem(index);\n },\n }));\n\n useLayoutEffect(() => {\n listRef.current?.resetAfterIndex(0);\n }, [\n // When items change, we need to re-render the virtualized list,\n // since it doesn't currently support row height changes\n items,\n ]);\n\n // Internally, react-virtualized updates these properties. We always want\n // to use our custom scroll element, so we override them. It may update\n // overflowX/Y individually in addition to `overflow`, so we include all 3.\n const listStyle = useMemo(\n (): CSSProperties => ({\n overflowX: \"initial\",\n overflowY: \"initial\",\n overflow: \"initial\",\n }),\n []\n );\n\n return (\n <RenderItemContext.Provider value={renderItem}>\n <WindowScroller\n scrollElement={scrollElement}\n style={useMemo(() => ({ flex: \"1 1 auto\" }), [])}\n >\n {useCallback(\n ({\n registerChild,\n onChildScroll,\n scrollTop,\n }: WindowScrollerChildProps & {\n // Added when noya-designsystem moved to a separate package.\n // I think this is a hack to get around the fact that react-virtualized\n // doesn't update on scroll unless we force it to by changing ref.\n // Either we're not using this the intended way or the types are wrong.\n registerChild: (element: any) => void;\n }) => (\n <div ref={registerChild}>\n <VariableSizeList<T>\n ref={listRef}\n // The list won't update on scroll unless we force it to by changing key\n key={scrollTop}\n style={listStyle}\n itemKey={keyExtractor}\n onScroll={({ scrollOffset }: { scrollOffset: number }) => {\n onChildScroll({ scrollTop: scrollOffset });\n }}\n initialScrollOffset={scrollTop}\n width={size.width}\n height={size.height}\n itemCount={items.length}\n itemSize={getItemHeight}\n estimatedItemSize={ROW_HEIGHT}\n >\n {VirtualizedListRow as any}\n </VariableSizeList>\n </div>\n ),\n [\n listStyle,\n keyExtractor,\n size.width,\n size.height,\n items.length,\n getItemHeight,\n ]\n )}\n </WindowScroller>\n </RenderItemContext.Provider>\n );\n});\n\nconst VirtualizedList = memo(\n VirtualizedListInner\n) as typeof VirtualizedListInner;\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nexport type ListViewItemInfo = {\n isDragOverlay: boolean;\n activeDragIndex?: number;\n};\n\ntype ChildrenProps = {\n children: ReactNode;\n};\n\ntype RenderProps<T> = {\n data: T[];\n renderItem: (item: T, index: number, info: ListViewItemInfo) => ReactNode;\n keyExtractor: (item: T, index: number) => string;\n /**\n * Each item must have an `id` in order to be sortable.\n *\n * Additionally, the key extracted with `keyExtractor` must match the ListItem.Row `id`.\n */\n sortable?: boolean;\n virtualized?: Size;\n};\n\ntype ListViewVariant = \"normal\" | \"bare\";\n\ntype ListViewSectionHeaderVariant = \"normal\" | \"label\";\n\nexport type ListViewRootProps = {\n id?: string;\n className?: string;\n style?: CSSProperties;\n role?: string;\n \"aria-labelledby\"?: string;\n \"aria-orientation\"?: \"vertical\" | \"horizontal\";\n \"aria-multiselectable\"?: boolean;\n onPress?: () => void;\n scrollable?: boolean;\n expandable?: boolean;\n onMoveItem?: MoveDragItemHandler;\n indentation?: number;\n acceptsDrop?: DropValidator;\n pressEventName?: PressEventName;\n variant?: ListViewVariant;\n sectionHeaderVariant?: ListViewSectionHeaderVariant;\n divider?: boolean;\n gap?: number;\n colorScheme?: ListColorScheme;\n containerRef?: React.RefObject<HTMLDivElement>;\n onDragOver?: React.DragEventHandler<HTMLDivElement>;\n onDragEnter?: React.DragEventHandler<HTMLDivElement>;\n onDragLeave?: React.DragEventHandler<HTMLDivElement>;\n onDrop?: React.DragEventHandler<HTMLDivElement>;\n renderEmptyState?: () => ReactNode;\n getDropTargetParentIndex?: SortableItemContextProps[\"getDropTargetParentIndex\"];\n sharedDragProps?: SharedDragProps;\n sortableId?: string;\n};\n\nconst ListViewRootInner = forwardRefGeneric(function ListViewRootInner<T>(\n {\n id,\n className,\n style,\n role,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-orientation\": ariaOrientation,\n \"aria-multiselectable\": ariaMultiselectable,\n onPress,\n scrollable = false,\n expandable = true,\n sortable = false,\n divider = false,\n onMoveItem,\n indentation = 12,\n acceptsDrop,\n data,\n renderItem,\n keyExtractor,\n virtualized,\n variant = \"normal\",\n sectionHeaderVariant = \"normal\",\n pressEventName = \"onClick\",\n colorScheme = \"primary\",\n gap = 0,\n containerRef,\n onDragOver,\n onDragEnter,\n onDragLeave,\n onDrop,\n renderEmptyState,\n getDropTargetParentIndex,\n sharedDragProps,\n sortableId,\n }: RenderProps<T> & ListViewRootProps,\n forwardedRef: ForwardedRef<IVirtualizedList>\n) {\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n if (\n event.target instanceof HTMLElement &&\n event.target.classList.contains(\"scroll-component\")\n )\n return;\n\n // As a hack, we call preventDefault in a row if the event was handled.\n // If the event wasn't handled already, we call onPress here.\n if (!event.isDefaultPrevented()) {\n onPress?.();\n }\n },\n [onPress]\n );\n\n const renderChild = useCallback(\n (index: number) => renderItem(data[index], index, { isDragOverlay: false }),\n [data, renderItem]\n );\n\n // TODO: Do we still use section header properties anywhere?\n const defaultContextValue = useMemo(\n (): ListRowContextValue => ({\n colorScheme,\n marginType: \"none\",\n selectedPosition: \"only\",\n sortable,\n expandable,\n divider,\n pressEventName,\n variant,\n gap,\n sectionHeaderVariant,\n isSectionHeader: false,\n }),\n [\n colorScheme,\n sortable,\n expandable,\n divider,\n pressEventName,\n variant,\n gap,\n sectionHeaderVariant,\n ]\n );\n\n const getItemContextValue = useCallback(\n (i: number): ListRowContextValue | undefined => {\n if (variant === \"bare\" || variant === \"normal\")\n return defaultContextValue;\n\n const current = renderChild(i);\n\n if (!isValidElement(current)) return;\n\n const prevChild = i - 1 >= 0 && renderChild(i - 1);\n const nextChild = i + 1 < data.length && renderChild(i + 1);\n\n const next: ReactElement | undefined = isValidElement(nextChild)\n ? nextChild\n : undefined;\n const prev: ReactElement | undefined = isValidElement(prevChild)\n ? prevChild\n : undefined;\n\n const hasMarginTop = !prev;\n const hasMarginBottom =\n !next ||\n current.props.isSectionHeader ||\n (next && next.props.isSectionHeader);\n\n let marginType: ListRowMarginType;\n\n if (hasMarginTop && hasMarginBottom) {\n marginType = \"vertical\";\n } else if (hasMarginBottom) {\n marginType = \"bottom\";\n } else if (hasMarginTop) {\n marginType = \"top\";\n } else {\n marginType = \"none\";\n }\n\n let selectedPosition: ListRowPosition = \"only\";\n\n if (current.props.selected) {\n const nextSelected =\n next && !next.props.isSectionHeader && next.props.selected;\n const prevSelected =\n prev && !prev.props.isSectionHeader && prev.props.selected;\n\n if (nextSelected && prevSelected) {\n selectedPosition = \"middle\";\n } else if (nextSelected && !prevSelected) {\n selectedPosition = \"first\";\n } else if (!nextSelected && prevSelected) {\n selectedPosition = \"last\";\n }\n }\n\n return {\n colorScheme,\n marginType,\n selectedPosition,\n sortable,\n expandable,\n divider,\n pressEventName,\n variant,\n sectionHeaderVariant,\n isSectionHeader: current.props.isSectionHeader,\n gap,\n };\n },\n [\n variant,\n defaultContextValue,\n renderChild,\n data.length,\n colorScheme,\n sortable,\n expandable,\n divider,\n pressEventName,\n sectionHeaderVariant,\n gap,\n ]\n );\n\n const draggingContextOverlayValue = useMemo(\n (): ListViewDraggingContextValue => ({ indentation, isDragOverlay: true }),\n [indentation]\n );\n\n const renderOverlay = useCallback(\n (index: number) => (\n <div style={{ opacity: 0.25 }}>\n <ListViewDraggingContext.Provider value={draggingContextOverlayValue}>\n {renderItem(data[index], index, { isDragOverlay: true })}\n </ListViewDraggingContext.Provider>\n </div>\n ),\n [draggingContextOverlayValue, renderItem, data]\n );\n\n const renderWrappedChild = useCallback(\n (index: number) => {\n const contextValue = getItemContextValue(index);\n const current = renderChild(index);\n\n if (!contextValue || !isValidElement(current)) return null;\n\n return (\n <ListRowContext.Provider key={current.key} value={contextValue}>\n {current}\n </ListRowContext.Provider>\n );\n },\n [getItemContextValue, renderChild]\n );\n\n const ids = useMemo(() => data.map(keyExtractor), [keyExtractor, data]);\n\n const withSortable = (children: ReactNode) =>\n sortable ? (\n <Sortable.Root\n id={sortableId}\n onMoveItem={onMoveItem}\n keys={ids}\n renderOverlay={renderOverlay}\n acceptsDrop={acceptsDrop}\n getDropTargetParentIndex={getDropTargetParentIndex}\n sharedDragProps={sharedDragProps}\n >\n {children}\n </Sortable.Root>\n ) : (\n children\n );\n\n const withScrollable = (\n children: (scrollElementRef: HTMLDivElement | null) => ReactNode\n ) => (scrollable ? <ScrollArea>{children}</ScrollArea> : children(null));\n\n const getItemHeight = useCallback(\n (index: number) => {\n const child = getItemContextValue(index);\n const height =\n child?.isSectionHeader && child.sectionHeaderVariant === \"label\"\n ? SECTION_HEADER_LABEL_HEIGHT\n : ROW_HEIGHT;\n return height;\n },\n [getItemContextValue]\n );\n\n const getKey = useCallback(\n (index: number) => keyExtractor(data[index], index),\n [data, keyExtractor]\n );\n\n const draggingContextValue = useMemo(() => ({ indentation }), [indentation]);\n const gapStyle = useMemo(() => ({ gap: `${gap}px` }), [gap]);\n\n return (\n <ListViewDraggingContext.Provider value={draggingContextValue}>\n <div\n id={id}\n role={role}\n aria-labelledby={ariaLabelledby}\n aria-orientation={ariaOrientation}\n aria-multiselectable={ariaMultiselectable}\n className={mergeConflictingClassNames(\n [\n `flex flex-col text-text-muted ${scrollable ? \"flex-1\" : \"flex-none\"} `,\n className,\n ],\n {\n categories: [\"flex\"],\n }\n )}\n style={{ ...gapStyle, ...style }}\n {...{\n [pressEventName]: handleClick,\n }}\n ref={containerRef}\n onDragOver={onDragOver}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDrop={onDrop}\n >\n {data.length === 0 && renderEmptyState\n ? renderEmptyState()\n : withScrollable((scrollElementRef: HTMLDivElement | null) =>\n withSortable(\n virtualized ? (\n <VirtualizedList<T>\n ref={forwardedRef}\n scrollElement={scrollElementRef!}\n items={data}\n size={virtualized}\n getItemHeight={getItemHeight}\n keyExtractor={getKey}\n renderItem={renderWrappedChild}\n />\n ) : (\n range(0, data.length).map(renderWrappedChild)\n )\n )\n )}\n </div>\n </ListViewDraggingContext.Provider>\n );\n});\n\nconst ListViewRoot = memoGeneric(ListViewRootInner) as typeof ListViewRootInner;\n\nconst ChildrenListViewInner = forwardRef(function ChildrenListViewInner(\n { children, ...rest }: ChildrenProps & ListViewRootProps,\n forwardedRef: ForwardedRef<IVirtualizedList>\n) {\n const items: ReactElement[] = useMemo(\n () =>\n Children.toArray(children).flatMap((child) =>\n isValidElement(child) ? [child] : []\n ),\n [children]\n );\n\n return (\n <ListViewRoot\n ref={forwardedRef}\n {...rest}\n data={items}\n keyExtractor={useCallback(\n ({ key }: { key: string | number | null }, index: number) =>\n typeof key === \"string\" ? key : (key ?? index).toString(),\n []\n )}\n renderItem={useCallback((item: ReactElement) => item, [])}\n />\n );\n});\n\nconst ChildrenListView = memo(ChildrenListViewInner);\n\nconst SimpleListViewInner = forwardRefGeneric(function SimpleListViewInner<\n T = any,\n>(\n props: (ChildrenProps | RenderProps<T>) & ListViewRootProps,\n forwardedRef: ForwardedRef<IVirtualizedList>\n) {\n if (\"children\" in props) {\n return <ChildrenListView ref={forwardedRef} {...props} />;\n } else {\n return <ListViewRoot ref={forwardedRef} {...props} />;\n }\n});\n\n/**\n * A ListView can be created either with `children` or render props\n */\nconst SimpleListView = memoGeneric(SimpleListViewInner);\n\nexport namespace ListView {\n export const RowTitle = memo(ListViewRowTitle);\n export const EditableRowTitle = memo(ListViewEditableRowTitle);\n export const Row = memoGeneric(ListViewRow);\n export const Root = SimpleListView;\n export const RowContext = ListRowContext;\n export type ClickInfo = ListViewClickInfo;\n export type ItemInfo = ListViewItemInfo;\n export type RowProps<MenuItemType extends string = string> =\n ListViewRowProps<MenuItemType>;\n export type VirtualizedList = IVirtualizedList;\n export const DragIndicator = ListViewDragIndicatorElement;\n export const rowHeight = ROW_HEIGHT;\n export const sectionHeaderLabelHeight = SECTION_HEADER_LABEL_HEIGHT;\n export const calculateHeight = ({\n menuItemsCount,\n sectionHeaderCount,\n }: {\n menuItemsCount: number;\n sectionHeaderCount: number;\n }) => {\n return (\n menuItemsCount * rowHeight + sectionHeaderCount * sectionHeaderLabelHeight\n );\n };\n export const normalizeTargetIndex = normalizeListTargetIndex;\n}\n","import { unique } from \"@noya-app/noya-utils\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\nfunction composeAllEventHandlers<E>(...handlers: ((e: E) => void)[]) {\n const [first, ...rest] = handlers;\n\n return rest.reduce(\n (result, handler) => composeEventHandlers(result, handler),\n first\n );\n}\n\nexport function mergeEventHandlers<\n H extends Record<string, (...args: any[]) => any>,\n>(...handlerMaps: H[]): H {\n const eventNames = unique(handlerMaps.map(Object.keys).flat() as (keyof H)[]);\n\n return Object.fromEntries(\n eventNames.map((eventName) => {\n const handlers = handlerMaps.flatMap((handlerMap) => {\n const value = handlerMap[eventName];\n return value ? [value] : [];\n });\n\n return [eventName, composeAllEventHandlers(...handlers)] as const;\n })\n ) as H;\n}\n","import { UniqueIdentifier, useDroppable } from \"@dnd-kit/core\";\nimport {\n horizontalListSortingStrategy,\n SortableContext,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport * as React from \"react\";\nimport {\n ActiveDragContext,\n ActiveDragContextType,\n DragRegistrationContext,\n RegisteredList,\n SharedDragProps,\n useActiveDrag,\n useDragRegistration,\n} from \"./DragRegistration\";\nimport { withDragProvider } from \"./SharedDragProvider\";\nimport {\n AcceptsFromList,\n createDragItemKey,\n defaultAcceptsDrop,\n DropValidator,\n MoveDragItemHandler,\n RelativeDropPosition,\n validateDropIndicator,\n} from \"./sorting\";\n\ntype UseSortableReturnType = ReturnType<typeof useSortable>;\n\ntype ItemChildrenProps<T> = {\n ref: React.Ref<T>;\n relativeDropPosition?: RelativeDropPosition;\n style?: React.CSSProperties;\n} & UseSortableReturnType[\"attributes\"];\n\n// Context for drop indicators within a sortable list\ninterface SortableItemContextProps {\n acceptsDrop: DropValidator;\n listId: string;\n getDropTargetParentIndex?: (index: number) => number | undefined;\n activeDragContext: React.Context<ActiveDragContextType | null>;\n}\n\nconst SortableItemContext = React.createContext<SortableItemContextProps>({\n acceptsDrop: defaultAcceptsDrop,\n listId: \"\",\n getDropTargetParentIndex: undefined,\n activeDragContext: ActiveDragContext,\n});\n\n// Custom hook for drop indicators in sortable lists\nfunction useSortableDropIndicator({\n index,\n itemId,\n listId,\n acceptsDrop,\n getDropTargetParentIndex,\n}: {\n index: number;\n itemId: UniqueIdentifier;\n listId: string;\n acceptsDrop: DropValidator;\n getDropTargetParentIndex?: (index: number) => number | undefined;\n}): RelativeDropPosition | undefined {\n const { activeDragContext } = React.useContext(SortableItemContext);\n const activeDrag = useActiveDrag(activeDragContext);\n const { source, target } = activeDrag;\n\n if (!source || !target) return;\n\n if (target.listId === listId && target.itemId === itemId) {\n return activeDrag.indicator ?? undefined;\n }\n\n const targetParentIndex =\n target.index === -1 ? undefined : getDropTargetParentIndex?.(target.index);\n\n const isValidParent =\n targetParentIndex === undefined || targetParentIndex === -1\n ? false\n : acceptsDrop({\n sourceIndex: source.index,\n targetIndex: targetParentIndex,\n position: \"inside\",\n sourceListId: source.listId,\n targetListId: target.listId,\n });\n\n const overIdAcceptsDrop =\n target.index === -1\n ? undefined\n : acceptsDrop({\n sourceIndex: source.index,\n targetIndex: target.index,\n position: \"inside\",\n sourceListId: source.listId,\n targetListId: target.listId,\n });\n\n const thisItemIsTargetParent = targetParentIndex === index;\n\n const showIndicatorOnParent =\n !overIdAcceptsDrop && isValidParent && thisItemIsTargetParent;\n\n return showIndicatorOnParent ? \"inside\" : undefined;\n}\n\ninterface RootProps {\n id?: string;\n keys: UniqueIdentifier[];\n axis?: \"x\" | \"y\";\n children?: React.ReactNode;\n renderOverlay?: (index: number) => React.ReactNode;\n onMoveItem?: MoveDragItemHandler;\n acceptsFromList?: AcceptsFromList;\n acceptsDrop?: DropValidator;\n getDropTargetParentIndex?: (index: number) => number | undefined;\n sharedDragProps?: SharedDragProps;\n containerRef?: React.RefObject<HTMLElement>;\n}\n\nfunction SortableItem<TElement extends HTMLElement>({\n id,\n disabled,\n children,\n}: {\n id: UniqueIdentifier;\n disabled?: boolean;\n children: (props: ItemChildrenProps<TElement>) => React.ReactNode;\n}) {\n const { acceptsDrop, listId, getDropTargetParentIndex } =\n React.useContext(SortableItemContext);\n\n const dragItemKey = createDragItemKey(listId, id);\n\n const { attributes, listeners, setNodeRef, isDragging, index } = useSortable({\n id: dragItemKey,\n disabled,\n });\n\n const ref = React.useCallback(\n (node: TElement | null) => setNodeRef(node),\n [setNodeRef]\n );\n\n const relativeDropPosition = useSortableDropIndicator({\n index,\n itemId: dragItemKey,\n listId,\n acceptsDrop,\n getDropTargetParentIndex,\n });\n\n return children({\n ref,\n ...attributes,\n ...listeners,\n relativeDropPosition,\n style: {\n opacity: isDragging ? 0.5 : 1,\n },\n });\n}\n\nfunction SortableRoot_({\n id: idProp,\n keys: keysProp,\n onMoveItem,\n renderOverlay,\n acceptsFromList,\n acceptsDrop = defaultAcceptsDrop,\n axis = \"y\",\n children,\n getDropTargetParentIndex,\n sharedDragProps,\n containerRef,\n}: RootProps) {\n const defaultId = React.useId();\n const id = idProp ?? defaultId;\n const keys = React.useMemo(() => {\n return keysProp.map((key) => createDragItemKey(id, key));\n }, [keysProp, id]);\n\n const { registerList, unregisterList } = useDragRegistration(\n sharedDragProps?.dragRegistrationContext ?? DragRegistrationContext\n );\n\n const { setNodeRef: setDroppableRef } = useDroppable({\n id,\n });\n\n // Register this list with the global drag system\n React.useEffect(() => {\n const listConfig: RegisteredList = {\n id,\n keys,\n onMoveItem: onMoveItem ?? (() => {}),\n renderOverlay: (id) => {\n const index = keys.findIndex((key) => key === id);\n return renderOverlay?.(index) ?? null;\n },\n acceptsFromList: acceptsFromList ?? (() => true),\n acceptsDrop,\n getDropIndicator: (parameters) => {\n const { absolutePosition, active, over, sourceListId, targetListId } =\n parameters;\n\n const offsetStart =\n axis === \"x\" ? absolutePosition.x : absolutePosition.y;\n const elementStart = axis === \"x\" ? over.rect.left : over.rect.top;\n const elementSize = axis === \"x\" ? over.rect.width : over.rect.height;\n\n const relativeDropPosition = validateDropIndicator({\n acceptsDrop,\n keys,\n activeId: active.id,\n overId: over.id,\n offsetStart,\n elementStart,\n elementSize,\n sourceListId,\n targetListId,\n });\n\n return relativeDropPosition;\n },\n };\n\n registerList(listConfig);\n\n return () => {\n unregisterList(id);\n };\n }, [\n id,\n onMoveItem,\n renderOverlay,\n acceptsFromList,\n acceptsDrop,\n axis,\n registerList,\n unregisterList,\n keys,\n ]);\n\n const contextValue: SortableItemContextProps = React.useMemo(\n () => ({\n keys,\n acceptsDrop,\n listId: id,\n getDropTargetParentIndex,\n activeDragContext:\n sharedDragProps?.activeDragContext ?? ActiveDragContext,\n }),\n [keys, acceptsDrop, id, getDropTargetParentIndex, sharedDragProps]\n );\n\n // Set the droppable ref after every render.\n // Since we don't render the dom node internally, we aggressively set it\n // after every render to make sure we are using the latest.\n React.useEffect(() => {\n if (containerRef) {\n setDroppableRef(containerRef.current);\n }\n });\n\n return (\n <SortableItemContext.Provider value={contextValue}>\n <SortableContext\n items={keys}\n strategy={\n axis === \"x\"\n ? horizontalListSortingStrategy\n : verticalListSortingStrategy\n }\n >\n {children}\n </SortableContext>\n </SortableItemContext.Provider>\n );\n}\n\nconst SortableRoot = withDragProvider(SortableRoot_) as typeof SortableRoot_;\n\nexport interface SortableProps<TItem, TElement extends HTMLElement>\n extends Omit<RootProps, \"children\" | \"keys\" | \"renderOverlay\"> {\n items: TItem[];\n keyExtractor: (item: TItem) => UniqueIdentifier;\n shouldRenderOverlay?: boolean;\n renderItem: (\n item: TItem,\n props: ItemChildrenProps<TElement>,\n { isOverlay }: { isOverlay: boolean }\n ) => React.ReactNode;\n}\n\nconst Sortable_ = function Sortable_<TItem, TElement extends HTMLElement>({\n items,\n keyExtractor,\n shouldRenderOverlay = true,\n renderItem,\n ...rest\n}: SortableProps<TItem, TElement>) {\n const keys = React.useMemo(\n () => items.map(keyExtractor),\n [items, keyExtractor]\n );\n\n const renderOverlay = React.useCallback(\n (index: number) => {\n return renderItem(\n items[index],\n {\n ref: () => {},\n style: {},\n tabIndex: -1,\n \"aria-disabled\": true,\n \"aria-pressed\": false,\n \"aria-roledescription\": \"Item being dragged\",\n \"aria-describedby\": \"Item being dragged\",\n role: \"button\",\n },\n { isOverlay: true }\n );\n },\n [renderItem, items]\n );\n\n return (\n <SortableRoot\n {...rest}\n keys={keys}\n renderOverlay={shouldRenderOverlay ? renderOverlay : undefined}\n >\n {keys.map((key, index) => (\n <SortableItem<TElement> key={key} id={key}>\n {(props) => {\n return renderItem(items[index], props, { isOverlay: false });\n }}\n </SortableItem>\n ))}\n </SortableRoot>\n );\n};\n\nexport const Sortable = Object.assign(Sortable_, {\n Root: SortableRoot,\n Item: SortableItem,\n});\n","import {\n AcceptsDrop,\n DragState,\n MoveDragItemHandler,\n RelativeDropPosition,\n} from \"./sorting\";\n\nimport { Active, Over, UniqueIdentifier } from \"@dnd-kit/core\";\nimport { AcceptsFromList } from \"./sorting\";\n\nimport { Point } from \"@noya-app/noya-geometry\";\nimport React from \"react\";\n\nexport type GetDropIndicatorParameters = {\n absolutePosition: Point;\n active: Active;\n over: Over;\n sourceListId: string;\n targetListId: string;\n};\n\nexport interface RegisteredList {\n id: string;\n keys: UniqueIdentifier[];\n onMoveItem: MoveDragItemHandler;\n renderOverlay?: (id: UniqueIdentifier) => React.ReactNode;\n acceptsFromList: AcceptsFromList;\n acceptsDrop: AcceptsDrop;\n getDropIndicator: (\n parameters: GetDropIndicatorParameters\n ) => RelativeDropPosition | undefined;\n}\n\nexport interface DragRegistrationContextType {\n registerList: (list: RegisteredList) => void;\n unregisterList: (listId: string) => void;\n}\n\nexport const DragRegistrationContext =\n React.createContext<DragRegistrationContextType | null>(null);\n\nexport function useDragRegistration(\n context: React.Context<DragRegistrationContextType | null>\n): DragRegistrationContextType {\n const value = React.useContext(context);\n\n if (!value) {\n throw new Error(\n \"useDragRegistration must be used within a DragRegistrationProvider\"\n );\n }\n\n return value;\n}\n\nexport function useDragRegistrationManager() {\n const [registeredLists, setRegisteredLists] = React.useState<\n Map<string, RegisteredList>\n >(new Map());\n\n const registerList = React.useCallback((list: RegisteredList) => {\n setRegisteredLists((prev) => new Map(prev).set(list.id, list));\n }, []);\n\n const unregisterList = React.useCallback((listId: string) => {\n setRegisteredLists((prev) => {\n const newMap = new Map(prev);\n newMap.delete(listId);\n return newMap;\n });\n }, []);\n\n return { registerList, unregisterList, registeredLists };\n}\n\nexport type ActiveDragContextType = DragState;\n\nexport const ActiveDragContext =\n React.createContext<ActiveDragContextType | null>(null);\n\nexport function useActiveDrag(\n context: React.Context<ActiveDragContextType | null>\n): ActiveDragContextType {\n const value = React.useContext(context);\n\n if (!value) {\n throw new Error(\"useActiveDrag must be used within a ActiveDragProvider\");\n }\n\n return value;\n}\n\n/**\n * We use this context to automatically create a drag context if not exists.\n * We do this separately from the contexts that actually store data since for those\n * we want to allow a custom context to be passed and not get overwritten by nested contexts.\n */\nexport const AnyDragContext = React.createContext<boolean>(false);\n\nexport function useAnyDragContext() {\n return React.useContext(AnyDragContext);\n}\n\nexport type SharedDragProps = {\n dragRegistrationContext: React.Context<DragRegistrationContextType | null>;\n activeDragContext: React.Context<ActiveDragContextType | null>;\n};\n","import {\n Active,\n closestCenter,\n CollisionDetection,\n DndContext,\n DragEndEvent,\n DragMoveEvent,\n DragOverlay,\n DragStartEvent,\n Over,\n PointerSensor,\n pointerWithin,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport { Point, rectContainsPoint, unionRects } from \"@noya-app/noya-geometry\";\nimport { windowsOf } from \"@noya-app/noya-utils\";\nimport { useStableCallback } from \"@noya-app/react-utils\";\nimport * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n ActiveDragContext,\n ActiveDragContextType,\n AnyDragContext,\n DragRegistrationContext,\n DragRegistrationContextType,\n RegisteredList,\n SharedDragProps,\n useDragRegistrationManager,\n} from \"./DragRegistration\";\nimport {\n DragItem,\n DragState,\n MoveDragItemHandler,\n MoveDragItemParameters,\n RelativeDropPosition,\n} from \"./sorting\";\n\ntype SharedDragProviderProps = {\n children: React.ReactNode;\n onMoveItem?: MoveDragItemHandler;\n sharedDragProps?: SharedDragProps;\n};\n\nexport function SharedDragProvider({\n children,\n onMoveItem,\n sharedDragProps = {\n dragRegistrationContext: DragRegistrationContext,\n activeDragContext: ActiveDragContext,\n },\n}: SharedDragProviderProps) {\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 4,\n },\n })\n );\n\n const mounted = useMounted();\n const [dragState, setDragState] = React.useState<DragState>({\n source: null,\n target: null,\n indicator: null,\n });\n\n // console.log(\"dragState\", dragState.target);\n\n const { registerList, unregisterList, registeredLists } =\n useDragRegistrationManager();\n\n const activatorEventRef = React.useRef<PointerEvent | null>(null);\n\n const handleDragStart = React.useCallback(\n (event: DragStartEvent) => {\n // Capture the activator event for position calculations\n activatorEventRef.current = event.activatorEvent as PointerEvent;\n\n // Find which list contains this item\n for (const [listId, list] of registeredLists) {\n const itemIndex = list.keys.findIndex((key) => key === event.active.id);\n\n if (itemIndex >= 0) {\n const dragItem: DragItem = {\n itemId: event.active.id,\n listId,\n index: itemIndex,\n };\n\n setDragState({\n source: dragItem,\n target: null,\n indicator: null,\n });\n break;\n }\n }\n },\n [registeredLists]\n );\n\n const handleDragMove = React.useCallback(\n (event: DragMoveEvent) => {\n const { active, over } = event;\n\n if (!activatorEventRef.current || !dragState.source) return;\n\n const dropTarget = findDropTarget({\n activationPoint: {\n x: activatorEventRef.current.clientX,\n y: activatorEventRef.current.clientY,\n },\n delta: { x: event.delta.x, y: event.delta.y },\n over,\n active,\n source: dragState.source,\n registeredLists,\n });\n\n setDragState({\n source: dragState.source,\n target: dropTarget?.target ?? null,\n indicator: dropTarget?.indicator ?? null,\n });\n },\n [registeredLists, dragState.source]\n );\n\n const stableOnMoveItem = useStableCallback(onMoveItem);\n\n const handleDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (!activatorEventRef.current || !dragState.source) return;\n\n const dropTarget = findDropTarget({\n activationPoint: {\n x: activatorEventRef.current.clientX,\n y: activatorEventRef.current.clientY,\n },\n delta: { x: event.delta.x, y: event.delta.y },\n over,\n active,\n source: dragState.source,\n registeredLists,\n });\n\n setDragState({\n source: null,\n target: null,\n indicator: null,\n });\n activatorEventRef.current = null;\n\n if (!dropTarget) return;\n\n const sourceList = registeredLists.get(dropTarget.source.listId);\n const targetList = registeredLists.get(dropTarget.target.listId);\n\n if (!sourceList || !targetList) return;\n\n const parameters: MoveDragItemParameters = {\n sourceIndex: dropTarget.source.index,\n targetIndex: dropTarget.target.index,\n position: dropTarget.indicator,\n sourceListId: dropTarget.source.listId,\n targetListId: dropTarget.target.listId,\n };\n\n // Both lists have the opportunity to handle the move\n sourceList.onMoveItem(parameters);\n\n if (dropTarget.target.listId !== dropTarget.source.listId) {\n targetList.onMoveItem(parameters);\n }\n\n stableOnMoveItem?.(parameters);\n },\n [registeredLists, dragState.source, stableOnMoveItem]\n );\n\n const contextValue: DragRegistrationContextType = React.useMemo(\n () => ({\n registerList,\n unregisterList,\n }),\n [registerList, unregisterList]\n );\n\n const activeList = dragState.source\n ? registeredLists.get(dragState.source.listId)\n : null;\n const activeDragContextValue: ActiveDragContextType = React.useMemo(\n () => dragState,\n [dragState]\n );\n\n const collisionDetection = useMemo(() => {\n return getItemFirstCollisionDetection(registeredLists);\n }, [registeredLists]);\n\n return (\n <AnyDragContext.Provider value={true}>\n <sharedDragProps.dragRegistrationContext.Provider value={contextValue}>\n <sharedDragProps.activeDragContext.Provider\n value={activeDragContextValue}\n >\n <DndContext\n sensors={sensors}\n collisionDetection={collisionDetection}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragEnd={handleDragEnd}\n >\n {children}\n {mounted &&\n activeList?.renderOverlay &&\n dragState.source &&\n createPortal(\n <DragOverlay dropAnimation={null}>\n {activeList.renderOverlay(dragState.source.itemId)}\n </DragOverlay>,\n document.body\n )}\n </DndContext>\n </sharedDragProps.activeDragContext.Provider>\n </sharedDragProps.dragRegistrationContext.Provider>\n </AnyDragContext.Provider>\n );\n}\n\nfunction useMounted() {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n return mounted;\n}\n\nexport function withDragProvider<T extends object>(\n Component: React.ComponentType<T>\n) {\n return function WithDragProvider(props: T) {\n const anyDragContext = React.useContext(AnyDragContext);\n\n if (!anyDragContext) {\n return (\n <SharedDragProvider>\n <Component {...props} />\n </SharedDragProvider>\n );\n }\n\n return <Component {...props} />;\n };\n}\n\n// Custom collision detection that prioritizes items over containers\nexport const getItemFirstCollisionDetection =\n (registeredLists: Map<string, RegisteredList>): CollisionDetection =>\n (parameters) => {\n const pointerCollisions = pointerWithin(parameters);\n\n if (pointerCollisions.length > 0) {\n const itemCollisions = pointerCollisions.filter((collision) => {\n for (const listId of registeredLists.keys()) {\n if (collision.id === listId) {\n return false;\n }\n }\n\n return true;\n });\n\n if (itemCollisions.length > 0) {\n return itemCollisions;\n }\n }\n\n const listCollision = pointerCollisions.at(0);\n const nearestCenters = closestCenter(parameters);\n\n // Handle a pointer between items by checking if the pointer is within\n // a window of two items.\n if (parameters.pointerCoordinates && listCollision) {\n const list = registeredLists.get(listCollision.id as string);\n\n if (list) {\n const pairs = windowsOf(list.keys, 2);\n\n for (const pair of pairs) {\n const clientRects = pair.map(\n (key) => parameters.droppableRects.get(key)!\n );\n\n const merged = unionRects(\n ...clientRects.map((rect) => ({\n x: rect.left,\n y: rect.top,\n width: rect.width,\n height: rect.height,\n }))\n );\n\n if (rectContainsPoint(merged, parameters.pointerCoordinates)) {\n return nearestCenters.filter((center) =>\n pair.some((id) => id === center.id)\n );\n }\n }\n }\n }\n\n // This handles empty lists\n return pointerCollisions;\n };\n\nfunction findDropTarget({\n activationPoint,\n delta,\n over,\n active,\n source,\n registeredLists,\n}: {\n activationPoint: Point;\n delta: Point;\n over: Over | null;\n active: Active;\n source: DragItem;\n registeredLists: Map<string, RegisteredList>;\n}):\n | {\n source: DragItem;\n target: DragItem;\n indicator: RelativeDropPosition;\n }\n | undefined {\n if (!over || active.id === over.id) return;\n\n // Find target list and item\n let targetListId: string | null = null;\n let targetIndex: number = -1;\n\n for (const [listId, list] of registeredLists) {\n const itemIndex = list.keys.findIndex((key) => key === over.id);\n\n if (itemIndex >= 0) {\n targetListId = listId;\n targetIndex = itemIndex;\n break;\n }\n\n // Also check if dropping on the list container itself\n if (over.id === listId) {\n targetListId = listId;\n targetIndex = list.keys.length; // Append to end\n break;\n }\n }\n\n const targetList =\n targetListId !== null ? registeredLists.get(targetListId) : null;\n const sourceList = registeredLists.get(source.listId);\n\n if (\n !targetList ||\n !sourceList ||\n !targetList.acceptsFromList({\n sourceListId: sourceList.id,\n targetListId: targetList.id,\n })\n ) {\n return;\n }\n\n // Dropping on the list container itself\n if (over.id === targetList.id) {\n const canDrop = targetList.acceptsDrop({\n sourceIndex: source.index,\n targetIndex: Math.max(0, targetList.keys.length - 1), // Use last valid index or 0 for empty lists\n position: \"below\",\n sourceListId: sourceList.id,\n targetListId: targetList.id,\n });\n\n if (canDrop) {\n return {\n source,\n target: {\n itemId: over.id,\n listId: targetList.id,\n index: targetIndex,\n },\n indicator: \"below\",\n };\n }\n }\n\n const eventX = activationPoint.x;\n const eventY = activationPoint.y;\n const currentX = eventX + delta.x;\n const currentY = eventY + delta.y;\n const absolutePosition = { x: currentX, y: currentY };\n\n const indicator = targetList.getDropIndicator({\n absolutePosition,\n active,\n over,\n sourceListId: sourceList.id,\n targetListId: targetList.id,\n });\n\n if (indicator) {\n return {\n source,\n target: {\n itemId: over.id,\n listId: targetList.id,\n index: targetIndex,\n },\n indicator,\n };\n }\n}\n","import { UniqueIdentifier } from \"@dnd-kit/core\";\nimport * as React from \"react\";\n\nexport type RelativeDropPosition = \"above\" | \"below\" | \"inside\";\n\nexport type MoveDragItemParameters = {\n sourceIndex: number;\n sourceListId: string;\n targetIndex: number;\n targetListId: string;\n position: RelativeDropPosition;\n};\n\nexport type DropValidator = (parameters: MoveDragItemParameters) => boolean;\n\nexport type AcceptsDrop = (parameters: MoveDragItemParameters) => boolean;\n\nexport type MoveDragItemHandler = (parameters: MoveDragItemParameters) => void;\n\nexport type AcceptsFromList = ({\n sourceListId,\n targetListId,\n}: {\n sourceListId: string;\n targetListId: string;\n}) => boolean;\n\nexport interface DragItem {\n itemId: UniqueIdentifier;\n listId: string;\n index: number;\n}\n\nexport type DragState = {\n source: DragItem | null;\n target: DragItem | null;\n indicator: RelativeDropPosition | null;\n};\n\nexport const normalizeListTargetIndex = (\n index: number,\n position: \"above\" | \"below\"\n): number => {\n return position === \"above\" ? index : index + 1;\n};\n\nexport const defaultAcceptsDrop: DropValidator = ({\n sourceIndex,\n targetIndex,\n position,\n}) => {\n if (position === \"inside\") return false;\n\n const normalized = normalizeListTargetIndex(targetIndex, position);\n\n if (sourceIndex === normalized || sourceIndex + 1 === normalized) {\n return false;\n }\n\n return true;\n};\n\nexport type SortableItemContextProps = {\n keys: UniqueIdentifier[];\n acceptsDrop: DropValidator;\n axis: \"x\" | \"y\";\n position: { x: number; y: number };\n setActivatorEvent: (event: PointerEvent) => void;\n getDropTargetParentIndex?: (index: number) => number | undefined;\n listId: string;\n};\n\nexport const SortableItemContext =\n React.createContext<SortableItemContextProps>({\n keys: [],\n acceptsDrop: defaultAcceptsDrop,\n axis: \"y\",\n position: { x: 0, y: 0 },\n setActivatorEvent: () => {},\n getDropTargetParentIndex: undefined,\n listId: \"\",\n });\n\nexport type ValidateDropIndicatorParams = {\n acceptsDrop: DropValidator; // Function that validates if a drop is allowed\n keys: UniqueIdentifier[]; // Array of all sortable item IDs\n activeId: UniqueIdentifier; // ID of item being dragged\n overId: UniqueIdentifier; // ID of item being dragged over\n offsetStart: number; // Current drag position (x or y coordinate)\n elementStart: number; // Start position of target element (left or top)\n elementSize: number; // Size of target element (width or height)\n sourceListId: string; // ID of the list the item is being dragged from\n targetListId: string; // ID of the list the item is being dragged to\n};\n\nexport function validateDropIndicator({\n acceptsDrop,\n keys,\n activeId,\n overId,\n offsetStart,\n elementStart,\n elementSize,\n sourceListId,\n targetListId,\n}: ValidateDropIndicatorParams): RelativeDropPosition | undefined {\n const activeIndex = keys.findIndex((id) => id === activeId); // index of item being dragged\n const overIndex = keys.findIndex((id) => id === overId); // index of item being dragged over\n\n if (overIndex === -1) return undefined;\n if (activeIndex === -1 && sourceListId === targetListId) return undefined;\n\n const acceptsDropInside = acceptsDrop({\n sourceIndex: activeIndex,\n targetIndex: overIndex,\n position: \"inside\",\n sourceListId,\n targetListId,\n });\n\n // Drop into the middle third if possible\n if (\n isContainedInMiddleThird(elementStart, elementSize, offsetStart) &&\n acceptsDropInside\n ) {\n return \"inside\";\n }\n\n const containingHalf = getContainingHalf(\n elementStart,\n elementSize,\n offsetStart\n );\n\n // Drop above or below if possible\n const acceptedHalf = acceptsDrop({\n sourceIndex: activeIndex,\n targetIndex: overIndex,\n position: containingHalf,\n sourceListId,\n targetListId,\n });\n\n return acceptedHalf\n ? containingHalf\n : // Lastly, check if inside but not middle third\n acceptsDropInside\n ? \"inside\"\n : undefined;\n}\n\nfunction isContainedInMiddleThird(\n elementStart: number,\n elementSize: number,\n offsetStart: number\n): boolean {\n return (\n offsetStart >= elementStart + elementSize / 3 &&\n offsetStart <= elementStart + (elementSize * 2) / 3\n );\n}\n\nfunction getContainingHalf(\n elementStart: number,\n elementSize: number,\n offsetStart: number\n): \"above\" | \"below\" {\n if (offsetStart < elementStart + elementSize / 2) return \"above\";\n return \"below\";\n}\n\nexport const dragItemKeySeparator = \"-~-\";\n\nexport function createDragItemKey(listId: string, itemId: UniqueIdentifier) {\n return `${listId}${dragItemKeySeparator}${itemId}`;\n}\n\nexport function parseDragItemKey(key: string): {\n listId: string;\n itemId: UniqueIdentifier;\n} {\n const [listId, itemId] = key.split(dragItemKeySeparator);\n return { listId, itemId };\n}\n","import { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport React, { ForwardedRef, ReactNode, useCallback, useContext } from \"react\";\nimport { IconButton } from \"./IconButton\";\nimport { IconName, renderIcon } from \"./Icons\";\nimport { ListView } from \"./ListView\";\nimport { Spacer } from \"./Spacer\";\n\n/* ----------------------------------------------------------------------------\n * Row\n * ------------------------------------------------------------------------- */\n\ntype TreeRowBaseProps = {\n icon?: Exclude<ReactNode, string> | IconName;\n expanded?: boolean;\n chevronClassName?: string;\n onClickChevron?: ({ altKey }: { altKey: boolean }) => void;\n onDoubleClick?: () => void;\n};\n\ntype TreeViewRowProps<MenuItemType extends string> =\n ListView.RowProps<MenuItemType> & TreeRowBaseProps;\n\nconst TreeRow = forwardRefGeneric(function TreeRow<MenuItemType extends string>(\n {\n icon,\n expanded,\n onClickChevron,\n chevronClassName,\n children,\n ...rest\n }: TreeViewRowProps<MenuItemType>,\n forwardedRef: ForwardedRef<HTMLLIElement>\n) {\n const { expandable } = useContext(ListView.RowContext);\n\n const handleClickChevron = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n onClickChevron?.({ altKey: event.altKey });\n },\n [onClickChevron]\n );\n\n return (\n <ListView.Row ref={forwardedRef} {...rest}>\n {expandable && (\n <>\n {expanded === undefined ? (\n <Spacer.Horizontal size={19} />\n ) : (\n <IconButton\n className={chevronClassName}\n iconName={expanded ? \"ChevronDownIcon2\" : \"ChevronRightIcon2\"}\n onClick={handleClickChevron}\n selected={rest.selected}\n />\n )}\n <Spacer.Horizontal size={6} />\n </>\n )}\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={10} />\n </>\n )}\n {children}\n </ListView.Row>\n );\n});\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nexport namespace TreeView {\n export const Root = ListView.Root;\n export const RowTitle = ListView.RowTitle;\n export const EditableRowTitle = ListView.EditableRowTitle;\n export const Row = memoGeneric(TreeRow);\n export type ClickInfo = ListView.ClickInfo;\n export type RowProps<MenuItemType extends string> =\n TreeViewRowProps<MenuItemType>;\n}\n","import React, { forwardRef } from \"react\";\nimport { cssVars } from \"../theme\";\n\nexport type ColorSwatchSize = \"xsmall\" | \"small\" | \"medium\" | \"large\";\n\nexport const colorSwatchSizeMap = {\n xsmall: 21,\n small: 27,\n medium: 36,\n large: 48,\n};\n\ntype ColorSwatchProps = {\n color: string;\n size?: ColorSwatchSize;\n checked?: boolean;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const ColorSwatch = forwardRef(function ColorSwatch(\n { color, size = \"small\", checked, style, ...props }: ColorSwatchProps,\n ref: React.ForwardedRef<HTMLButtonElement>\n) {\n const sizePx = colorSwatchSizeMap[size];\n\n return (\n <button\n {...props}\n ref={ref}\n style={{\n background: color,\n width: sizePx,\n height: sizePx,\n borderRadius: \"4px\",\n outline: checked\n ? `2px solid ${cssVars.colors.primary}`\n : \"1px solid rgba(0,0,0,0.1)\",\n outlineOffset: -1,\n boxShadow: checked\n ? `inset 0 0 0 2px ${cssVars.colors.background}`\n : undefined,\n ...style,\n }}\n />\n );\n});\n","import * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport React, { useMemo } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport {\n ColorSwatch,\n ColorSwatchSize,\n colorSwatchSizeMap,\n} from \"./ColorSwatch\";\n\nexport type TokenValue = string | { ref: string };\n\ntype ColorSwatchControlProps = {\n options: TokenValue[];\n value?: TokenValue;\n /** @default \"small\" */\n size?: ColorSwatchSize;\n readOnly?: boolean;\n onValueChange?: (value: TokenValue) => void;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n onBlur?: React.FocusEventHandler<HTMLButtonElement>;\n className?: string;\n id?: string;\n style?: React.CSSProperties;\n disabled?: boolean;\n};\n\nexport function ColorSwatchControl(props: ColorSwatchControlProps) {\n const {\n options,\n size = \"small\",\n readOnly,\n value,\n onValueChange,\n onFocus,\n onBlur,\n disabled,\n className,\n id,\n style,\n } = props;\n const styles = useMemo(() => {\n return {\n display: \"grid\",\n gridTemplateColumns: `repeat(auto-fill, minmax(${colorSwatchSizeMap[size]}px, 1fr))`,\n gap: \"6px\",\n ...style,\n };\n }, [size, style]);\n\n const content = (\n <div className={className} id={id} style={styles}>\n {options.map((option) => {\n const item = (\n <ColorSwatch\n key={option as string}\n color={option as string}\n size={size}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={disabled}\n // TODO: decide on \"checked\" visual treatment\n className={cx(readOnly ? \"cursor-default\" : \"cursor-pointer\")}\n checked={value === option}\n />\n );\n return (\n <ToggleGroupPrimitive.Item\n asChild\n value={option as string}\n key={option as string}\n disabled={readOnly}\n >\n {item}\n </ToggleGroupPrimitive.Item>\n );\n })}\n </div>\n );\n return (\n <ToggleGroupPrimitive.Root\n type=\"single\"\n value={value as string}\n onValueChange={onValueChange}\n className=\"w-full\"\n disabled={readOnly}\n >\n {content}\n </ToggleGroupPrimitive.Root>\n );\n}\n","import { DropdownChevronIcon } from \"@noya-app/noya-icons\";\nimport { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport React, {\n FocusEventHandler,\n ForwardedRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useLabel } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\nimport { ComboboxState, useComboboxState } from \"../utils/combobox\";\nimport { ActivityIndicator } from \"./ActivityIndicator\";\nimport { ComboboxMenu } from \"./ComboboxMenu\";\nimport { InputField, InputFieldSize } from \"./InputField\";\nimport {\n MenuItem,\n ScoredMenuItem,\n SelectableMenuItem,\n isMenuItemSectionHeader,\n isNonSelectableMenuItem,\n isSelectableMenuItem,\n} from \"./internal/Menu\";\nimport { ListView } from \"./ListView\";\nimport { Small } from \"./Text\";\n\nexport type BaseComboboxProps<T extends string> = {\n id?: string;\n loading?: boolean;\n placeholder?: string;\n items: MenuItem<T>[];\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onDeleteWhenEmpty?: () => void;\n size?: InputFieldSize;\n style?: React.CSSProperties;\n className?: string;\n label?: React.ReactNode;\n children?: React.ReactNode;\n hideMenuWhenEmptyValue?: boolean;\n readOnly?: boolean;\n tabBehavior?: \"autocomplete\" | \"select\";\n openMenuBehavior?: \"showAllItems\" | \"showFilteredItems\";\n};\n\nexport type StringModeOnlyProps = {\n mode: \"string\";\n value?: string;\n onChange?: (value: string) => void;\n onSelectItem?: (value: string) => void;\n onBlur?: (didSubmit: boolean, value: string) => void;\n onHoverItem?: (value: string | undefined) => void;\n allowArbitraryValues?: boolean;\n};\n\nexport type StringModeProps<T extends string> = BaseComboboxProps<T> &\n StringModeOnlyProps;\n\nexport type OptionModeOnlyProps<T extends string> = {\n mode?: \"option\";\n value?: SelectableMenuItem<T>;\n onChange?: (value: SelectableMenuItem<T>) => void;\n onSelectItem?: (value: SelectableMenuItem<T>) => void;\n onBlur?: (didSubmit: boolean, value: SelectableMenuItem<T>) => void;\n onHoverItem?: (value: SelectableMenuItem<T> | undefined) => void;\n allowArbitraryValues?: false;\n};\n\nexport type OptionModeProps<T extends string> = BaseComboboxProps<T> &\n OptionModeOnlyProps<T>;\n\nexport type ComboboxProps<T extends string> =\n | StringModeProps<T>\n | OptionModeProps<T>;\n\nexport interface ComboboxRef<T extends string> {\n focus(): void;\n setValue(value: string | SelectableMenuItem<T>): void;\n selectAllInputText(): void;\n}\n\nexport const Combobox = memoGeneric(\n forwardRefGeneric(function Combobox<T extends string>(\n {\n loading,\n placeholder,\n items,\n size,\n style,\n className,\n label: labelProp,\n children,\n hideMenuWhenEmptyValue = false,\n readOnly = false,\n tabBehavior = \"select\",\n openMenuBehavior = \"showFilteredItems\",\n onFocus,\n onDeleteWhenEmpty,\n ...rest\n }: ComboboxProps<T>,\n forwardedRef: ForwardedRef<ComboboxRef<T>>\n ) {\n // We make a separate props object for the mode-specific props for memoizing\n // since we put the props object into hook deps\n const props = useMemo((): StringModeOnlyProps | OptionModeOnlyProps<T> => {\n if (rest.mode === \"string\") {\n return {\n mode: rest.mode,\n value: rest.value,\n onChange: rest.onChange,\n onSelectItem: rest.onSelectItem,\n onHoverItem: rest.onHoverItem,\n onBlur: rest.onBlur,\n allowArbitraryValues: rest.allowArbitraryValues,\n } satisfies StringModeOnlyProps;\n } else {\n return {\n mode: rest.mode,\n value: rest.value,\n onChange: rest.onChange,\n onSelectItem: rest.onSelectItem,\n onHoverItem: rest.onHoverItem,\n onBlur: rest.onBlur,\n } satisfies OptionModeOnlyProps<T>;\n }\n }, [\n rest.mode,\n rest.value,\n rest.onChange,\n rest.onSelectItem,\n rest.onHoverItem,\n rest.onBlur,\n rest.allowArbitraryValues,\n ]);\n\n const ref = useRef<HTMLInputElement>(null);\n\n function getInitialValueString() {\n if (props.mode === \"string\") {\n return props.value ?? \"\";\n } else {\n return props.value?.title?.toString() ?? \"\";\n }\n }\n\n const initialValueString = getInitialValueString();\n\n const [comboboxState] = useState(\n () =>\n new ComboboxState(\n items,\n initialValueString,\n props.mode === \"string\" && (props.allowArbitraryValues ?? false)\n )\n );\n const state = useComboboxState(comboboxState);\n const [isFocused, setIsFocused] = useState(false);\n const listRef = useRef<ListView.VirtualizedList>(null);\n const [shouldBlur, setShouldBlur] = useState(false);\n const { fieldId: id } = useLabel({\n fieldId: rest.id,\n });\n\n // Keep state in sync with items prop\n useEffect(() => {\n comboboxState.setItems(items);\n }, [items, comboboxState]);\n\n useEffect(() => {\n comboboxState.setFilter(initialValueString);\n }, [comboboxState, initialValueString]);\n\n const { filter, selectedIndex, filteredItems } = state;\n\n const shouldShowMenu =\n isFocused && !(hideMenuWhenEmptyValue && filter === \"\");\n\n useEffect(() => {\n if (listRef.current) {\n listRef.current.scrollToIndex(selectedIndex);\n }\n }, [selectedIndex]);\n\n const handleBlur = useCallback(() => {\n ref.current?.blur();\n comboboxState.reset(initialValueString);\n if (props.mode === \"string\") {\n props.onBlur?.(\n state.filter === state.lastSubmittedValue.filter,\n filter\n );\n } else {\n const selectedItem = comboboxState.getSelectedItem();\n if (selectedItem && isSelectableMenuItem(selectedItem)) {\n props.onBlur?.(\n state.filter === state.lastSubmittedValue.filter,\n selectedItem\n );\n }\n }\n setIsFocused(false);\n }, [filter, initialValueString, props, state, comboboxState]);\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = useCallback(\n (event) => {\n setIsFocused(true);\n comboboxState.reset(\n openMenuBehavior === \"showAllItems\" ? \"\" : initialValueString\n );\n if (ref.current) {\n const length = ref.current.value.length;\n ref.current.setSelectionRange(length, length);\n }\n onFocus?.(event);\n },\n [initialValueString, onFocus, openMenuBehavior, comboboxState]\n );\n\n const handleUpdateSelection = useCallback(\n (item: ScoredMenuItem<T>) => {\n if (item.type !== undefined) return;\n\n const selectedItem = comboboxState.selectCurrentItem(item);\n if (!selectedItem) return;\n\n if (props.mode === \"string\") {\n props.onSelectItem?.(selectedItem.value);\n props.onHoverItem?.(undefined);\n } else {\n props.onSelectItem?.(selectedItem);\n props.onHoverItem?.(undefined);\n }\n setShouldBlur(true);\n },\n [props, comboboxState]\n );\n\n const handleIndexChange = useCallback(\n (index: number) => {\n comboboxState.setSelectedIndex(index);\n const item = comboboxState.getSelectedItem();\n if (item && isSelectableMenuItem(item)) {\n if (props.mode === \"string\") {\n props.onHoverItem?.(item.value);\n } else {\n props.onHoverItem?.(item);\n }\n } else {\n props.onHoverItem?.(undefined);\n }\n },\n [props, comboboxState]\n );\n\n const handleChange = useCallback(\n (value: string) => {\n if (readOnly) return;\n comboboxState.setFilter(value);\n if (props.mode === \"string\") {\n props.onChange?.(value);\n } else {\n const selectedItem = comboboxState.getSelectedItem();\n if (selectedItem && isSelectableMenuItem(selectedItem)) {\n props.onChange?.(selectedItem);\n }\n }\n },\n [readOnly, props, comboboxState]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n let handled = false;\n const item = comboboxState.getSelectedItem();\n\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n comboboxState.moveSelection(\n event.key === \"ArrowDown\" ? \"down\" : \"up\"\n );\n handled = true;\n break;\n case \"Enter\":\n case \"Return\": {\n if (shouldShowMenu) {\n if (item) {\n handleUpdateSelection(item);\n } else if (\n props.mode === \"string\" &&\n props.allowArbitraryValues\n ) {\n // If no item is selected but arbitrary filters are allowed in string mode,\n // submit the current filter value\n comboboxState.submitArbitraryFilter(filter);\n handleBlur();\n } else {\n comboboxState.restoreLastSubmittedValue();\n }\n } else {\n ref.current?.focus();\n }\n break;\n }\n case \"Tab\": {\n if (item) {\n if (event.shiftKey) {\n break;\n }\n\n if (tabBehavior === \"select\") {\n handleUpdateSelection(item);\n handled = true;\n } else {\n // In autocomplete mode:\n // 1. Always set the filter to the selected item\n // 2. If the filter matches the item value, submit it\n event.preventDefault();\n event.stopPropagation();\n if (isNonSelectableMenuItem(item)) return;\n if (isSelectableMenuItem(item)) {\n if (item.value === filter) {\n handleUpdateSelection(item);\n } else {\n comboboxState.setFilter(item.value?.toString() ?? \"\");\n ref.current?.focus();\n }\n }\n handled = true;\n }\n } else if (\n props.mode === \"string\" &&\n props.allowArbitraryValues &&\n filter !== \"\"\n ) {\n // Allow submitting arbitrary filter on Tab only in string mode\n comboboxState.submitArbitraryFilter(filter);\n handleBlur();\n handled = true;\n }\n break;\n }\n case \"Escape\":\n if (ref.current) {\n ref.current.blur();\n comboboxState.restoreLastSubmittedValue();\n }\n handled = true;\n break;\n case \"Backspace\":\n case \"Delete\": {\n if (filter === \"\") {\n onDeleteWhenEmpty?.();\n }\n break;\n }\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [\n filter,\n handleUpdateSelection,\n handleBlur,\n onDeleteWhenEmpty,\n shouldShowMenu,\n comboboxState,\n tabBehavior,\n props,\n ]\n );\n\n const typeaheadValue = comboboxState.getTypeaheadValue();\n\n useImperativeHandle(forwardedRef, () => ({\n focus: () => {\n ref.current?.focus();\n if (ref.current) {\n const length = ref.current.value.length;\n ref.current.setSelectionRange(length, length);\n }\n },\n setValue: (value: string | SelectableMenuItem<T>) => {\n if (typeof value === \"string\") {\n comboboxState.setFilter(value);\n } else {\n comboboxState.setFilter(value.value);\n }\n },\n selectAllInputText: () => {\n ref.current?.setSelectionRange(0, ref.current.value.length);\n },\n }));\n\n const handleChevronClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n\n if (shouldShowMenu) {\n handleBlur();\n return;\n }\n\n // Use openMenuBehavior consistently for both focus and chevron click\n comboboxState.reset(\n openMenuBehavior === \"showAllItems\" ? \"\" : initialValueString\n );\n ref.current?.focus();\n },\n [\n shouldShowMenu,\n openMenuBehavior,\n initialValueString,\n handleBlur,\n comboboxState,\n ]\n );\n\n useEffect(() => {\n if (!shouldBlur) return;\n if (document.activeElement !== ref.current) return;\n setShouldBlur(false);\n ref.current?.focus();\n handleBlur();\n }, [shouldBlur, handleBlur]);\n\n const { sectionHeaderCount, menuItemsCount } = useMemo(\n () => ({\n sectionHeaderCount: filteredItems.filter((item) =>\n isMenuItemSectionHeader(item)\n ).length,\n menuItemsCount: filteredItems.filter((item) =>\n isSelectableMenuItem(item)\n ).length,\n }),\n [filteredItems]\n );\n\n const hasCheckedItems = items.some(\n (item) => isSelectableMenuItem(item) && item.checked\n );\n\n return (\n <InputField.Root\n id={id}\n size={size}\n sideOffset={6}\n end={\n <>\n {loading && (\n <div className=\"pr-1.5\">\n <ActivityIndicator />\n </div>\n )}\n {!readOnly && (\n <InputField.Button\n variant=\"floating\"\n onClick={handleChevronClick}\n >\n <DropdownChevronIcon\n className={cx(\n \"transition-transform duration-100\",\n shouldShowMenu ? \"rotate-180\" : \"rotate-0\"\n )}\n />\n </InputField.Button>\n )}\n </>\n }\n renderPopoverContent={({ width }) => {\n const height = Math.min(\n ListView.calculateHeight({\n menuItemsCount,\n sectionHeaderCount,\n }),\n ListView.rowHeight * 10.5\n );\n\n const listSize = { width, height };\n\n return (\n <div\n className={cx(\n \"flex-col\",\n shouldShowMenu && !readOnly ? \"flex\" : \"hidden\"\n )}\n >\n {filteredItems.length > 0 && !loading ? (\n <ComboboxMenu\n ref={listRef}\n items={filteredItems}\n selectedIndex={selectedIndex}\n onSelectItem={handleUpdateSelection}\n onHoverIndex={handleIndexChange}\n listSize={listSize}\n style={{\n flex: `0 0 ${height}px`,\n }}\n indented={hasCheckedItems}\n />\n ) : (\n <div className=\"flex flex-col h-[50px] p-5 items-center justify-center\">\n <Small className=\"text-text-disabled\">\n {loading ? \"Loading...\" : \"No results\"}\n </Small>\n </div>\n )}\n </div>\n );\n }}\n >\n <InputField.Input\n ref={ref}\n value={filter}\n name=\"component\"\n placeholder={placeholder}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocusCapture={handleFocus}\n onKeyDown={!readOnly ? handleKeyDown : undefined}\n style={style}\n className={className}\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-owns=\"component-listbox\"\n aria-expanded={shouldShowMenu}\n aria-controls=\"component-listbox\"\n {...(readOnly ? { readOnly: true } : {})}\n />\n {filter &&\n typeaheadValue &&\n typeaheadValue.toLowerCase().startsWith(filter.toLowerCase()) && (\n <InputField.Typeahead\n value={typeaheadValue}\n prefix={filter}\n isFocused={isFocused}\n />\n )}\n {children}\n </InputField.Root>\n );\n })\n);\n","import { chunkBy, partition } from \"@noya-app/noya-utils\";\nimport { useSyncExternalStore } from \"react\";\nimport {\n isMenuItemSectionHeader,\n isNonSelectableMenuItem,\n isSelectableMenuItem,\n MenuItem,\n ScoredMenuItem,\n SectionHeaderMenuItem,\n SelectableMenuItem,\n} from \"../components/internal/Menu\";\nimport { fuzzyFilter, IScoredItem } from \"./fuzzyScorer\";\n\nexport type ComboboxStateSnapshot<T extends string> = {\n filter: string;\n selectedIndex: number;\n filteredItems: ScoredMenuItem<T>[];\n lastSubmittedValue: { filter: string; itemName: string };\n};\n\nexport class ComboboxState<T extends string> {\n private filter: string;\n private selectedIndex: number;\n private items: MenuItem<T>[];\n private lastSubmittedValue: { filter: string; itemName: string };\n private subscribers: (() => void)[] = [];\n private version = 0;\n private _cachedSnapshot: [number, ComboboxStateSnapshot<T>] | undefined;\n\n constructor(\n items: MenuItem<T>[],\n initialTitle: string,\n allowArbitraryValues: boolean\n ) {\n this.items = items;\n this.lastSubmittedValue = {\n filter: initialTitle,\n itemName: initialTitle,\n };\n\n // Initialize with the initial value\n this.filter = initialTitle;\n this.selectedIndex = 0;\n\n // Create initial snapshot\n this._cachedSnapshot = [\n 0,\n {\n filter: initialTitle,\n selectedIndex: 0,\n\n filteredItems: this.items.flatMap((item, index) =>\n isMenuItemSectionHeader(item)\n ? item\n : isSelectableMenuItem(item)\n ? {\n ...item,\n index,\n score: 0,\n }\n : []\n ),\n lastSubmittedValue: this.lastSubmittedValue,\n },\n ];\n\n // If there's an initial value, validate it\n if (initialTitle) {\n // Check if the initial value exists in items\n const hasMatch = this.items.some(\n (item) =>\n item.type === undefined &&\n item.title?.toString().toLowerCase() === initialTitle.toLowerCase()\n );\n\n // Get filtered items to check for fuzzy matches\n const filteredItems = this.getFilteredItems();\n\n // If no matches and we don't want arbitrary values, reset to empty\n if (!hasMatch && !filteredItems.length && !allowArbitraryValues) {\n this.filter = \"\";\n this.selectedIndex = 0;\n this._cachedSnapshot = [\n 0,\n {\n filter: \"\",\n selectedIndex: 0,\n\n filteredItems: this.items.flatMap((item): ScoredMenuItem<T>[] =>\n isSelectableMenuItem(item)\n ? [\n {\n ...item,\n index: 0,\n score: 0,\n },\n ]\n : item.type === \"sectionHeader\"\n ? [item]\n : []\n ),\n lastSubmittedValue: this.lastSubmittedValue,\n },\n ];\n }\n }\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.subscribers.push(listener);\n return () => {\n this.subscribers = this.subscribers.filter((l) => l !== listener);\n };\n };\n\n private notifyChange() {\n this.version++;\n this._cachedSnapshot = undefined;\n this.subscribers.forEach((listener) => listener());\n }\n\n private getFilteredItems(): ScoredMenuItem<T>[] {\n return filterWithGroupedSections(this.items, this.filter);\n }\n\n getSnapshot = (): ComboboxStateSnapshot<T> => {\n if (this._cachedSnapshot && this._cachedSnapshot[0] === this.version) {\n return this._cachedSnapshot[1];\n }\n\n const snapshot = {\n filter: this.filter,\n selectedIndex: this.selectedIndex,\n filteredItems: this.getFilteredItems(),\n lastSubmittedValue: this.lastSubmittedValue,\n };\n\n this._cachedSnapshot = [this.version, snapshot];\n return snapshot;\n };\n\n setItems(items: MenuItem<T>[]) {\n this.items = items;\n this.notifyChange();\n }\n\n setFilter(filter: string) {\n this.filter = filter;\n const filteredItems = this.getFilteredItems();\n\n // Find exact match if it exists (case insensitive)\n const exactMatchIndex = filteredItems.findIndex(\n (item) =>\n isSelectableMenuItem(item) &&\n item.title?.toString().toLowerCase().startsWith(filter.toLowerCase())\n );\n\n // Find the first non-header item\n const firstSelectableIndex = filteredItems.findIndex((item): boolean =>\n isSelectableMenuItem(item)\n );\n\n this.selectedIndex =\n exactMatchIndex >= 0 ? exactMatchIndex : firstSelectableIndex;\n\n this.notifyChange();\n }\n\n moveSelection(direction: \"up\" | \"down\") {\n const filteredItems = this.getFilteredItems();\n this.selectedIndex = getNextIndex({\n items: filteredItems,\n currentIndex: this.selectedIndex,\n direction: direction === \"down\" ? \"next\" : \"previous\",\n isDisabled: (item) => isNonSelectableMenuItem(item),\n });\n this.notifyChange();\n }\n\n selectCurrentItem(\n item?: ScoredMenuItem<T>\n ): SelectableMenuItem<T> | undefined {\n const itemToSelect = item || this.getFilteredItems()[this.selectedIndex];\n if (itemToSelect && isSelectableMenuItem(itemToSelect)) {\n this.lastSubmittedValue = {\n filter: itemToSelect.title!.toString(),\n itemName: itemToSelect.title!.toString(),\n };\n this.filter = itemToSelect.title!.toString();\n this.notifyChange();\n return itemToSelect;\n } else {\n // If no valid item to select and arbitrary values aren't allowed,\n // restore the last valid value\n this.restoreLastSubmittedValue();\n }\n }\n\n restoreLastSubmittedValue() {\n this.filter = this.lastSubmittedValue.itemName;\n this.notifyChange();\n }\n\n reset(newFilter = \"\") {\n this.filter = newFilter;\n this.selectedIndex = 0;\n this.notifyChange();\n }\n\n getSelectedItem(): ScoredMenuItem<T> | undefined {\n const filteredItems = this.getFilteredItems();\n return filteredItems[this.selectedIndex];\n }\n\n getTypeaheadValue(): string | undefined {\n const selectedItem = this.getSelectedItem();\n if (selectedItem && isSelectableMenuItem(selectedItem))\n return selectedItem.title!.toString();\n }\n\n setSelectedIndex(index: number) {\n const filteredItems = this.getFilteredItems();\n\n // If trying to select a header or separator, find the next selectable item\n if (isNonSelectableMenuItem(filteredItems[index])) {\n // Look for the next selectable item\n for (let i = index + 1; i < filteredItems.length; i++) {\n if (isSelectableMenuItem(filteredItems[i])) {\n this.selectedIndex = i;\n this.notifyChange();\n return;\n }\n }\n // If no next item, look backwards\n for (let i = index - 1; i >= 0; i--) {\n if (isSelectableMenuItem(filteredItems[i])) {\n this.selectedIndex = i;\n this.notifyChange();\n return;\n }\n }\n // If no selectable items found, don't change selection\n return;\n }\n\n this.selectedIndex = index;\n this.notifyChange();\n }\n\n submitArbitraryFilter(filter: string) {\n this.lastSubmittedValue = {\n filter,\n itemName: filter,\n };\n this.filter = filter;\n this.notifyChange();\n }\n}\n\nexport function filterWithGroupedSections<T extends string>(\n items: MenuItem<T>[],\n query: string\n): ScoredMenuItem<T>[] {\n const sections = chunkBy(items, (_a, b) => isSelectableMenuItem(b));\n let result: ScoredMenuItem<T>[] = [];\n let currentIndex = 0;\n\n const createExtraItem = (\n item: SelectableMenuItem<T>,\n index: number\n ): ScoredMenuItem<T> => ({\n ...item,\n index: currentIndex + index,\n score: 0,\n });\n\n const createScoredItem = (\n item: IScoredItem,\n selectableItems: Array<SelectableMenuItem<T>>\n ): ScoredMenuItem<T> => {\n const menuItem = selectableItems[item.index];\n return {\n ...item,\n ...menuItem,\n index: currentIndex + item.index,\n };\n };\n\n for (const section of sections) {\n const [sectionHeaders, selectableItems] = partition(\n section.filter(\n (item): item is SelectableMenuItem<T> | SectionHeaderMenuItem =>\n item.type !== \"submenu\" && item.type !== \"separator\"\n ),\n (item): item is SectionHeaderMenuItem => isMenuItemSectionHeader(item)\n );\n\n let newItems: ScoredMenuItem<T>[];\n\n if (!query.trim()) {\n // For empty query, include all items with score 0\n newItems = selectableItems.map((item, index) =>\n createExtraItem(item, index)\n );\n } else {\n const scoredItems = fuzzyFilter({\n items: selectableItems.map((item) => item.title.toString()),\n query,\n });\n\n const usedIndexes = new Set(scoredItems.map((item) => item.index));\n const extraItems = selectableItems.flatMap(\n (item, index): ScoredMenuItem<T>[] =>\n item?.alwaysInclude && !usedIndexes.has(index)\n ? [createExtraItem(item, index)]\n : []\n );\n\n newItems = scoredItems\n .map((item) => createScoredItem(item, selectableItems))\n .concat(extraItems);\n }\n\n // If we have items or this is an empty query\n if (newItems.length > 0 || !query.trim()) {\n const maxVisibleItems =\n sectionHeaders.length > 0 && sectionHeaders[0]?.maxVisibleItems\n ? sectionHeaders[0]?.maxVisibleItems\n : undefined;\n\n if (maxVisibleItems !== undefined) {\n newItems = newItems.slice(0, maxVisibleItems);\n }\n\n result.push(...sectionHeaders, ...newItems);\n }\n\n currentIndex += selectableItems.length;\n }\n\n return result;\n}\n\nexport function getNextIndex<T>({\n items,\n currentIndex,\n direction,\n isDisabled,\n}: {\n items: T[];\n currentIndex: number;\n direction: \"next\" | \"previous\";\n isDisabled: (item: T) => boolean;\n}): number {\n // Make sure the current index is within bounds\n currentIndex =\n currentIndex < 0\n ? 0\n : currentIndex >= items.length\n ? items.length - 1\n : currentIndex;\n\n // If there are no valid items in the array, return -1\n if (items.every(isDisabled)) return -1;\n\n let nextIndex = currentIndex;\n\n do {\n // Move to the next or previous index, wrapping around if necessary\n if (direction === \"next\") {\n nextIndex = (nextIndex + 1) % items.length;\n } else {\n nextIndex = (nextIndex - 1 + items.length) % items.length;\n }\n\n // If we've looped all the way around without finding a valid item, return the current index\n if (nextIndex === currentIndex) return currentIndex;\n } while (isDisabled(items[nextIndex]));\n\n return nextIndex;\n}\n\nexport function useComboboxState<T extends string>(state: ComboboxState<T>) {\n return useSyncExternalStore(\n state.subscribe,\n state.getSnapshot,\n state.getSnapshot\n );\n}\n","import { IItemScore, scoreFilePathFuzzy } from \"vscode-fuzzy-scorer\";\n\nexport function fuzzyScore({ item, query }: { item: string; query: string }) {\n return scoreFilePathFuzzy({ path: item, query });\n}\n\nexport type IScoredItem = IItemScore & {\n index: number;\n};\n\nexport function fuzzyFilter({\n items,\n query,\n scoreThreshold = 0,\n}: {\n items: string[];\n query: string;\n scoreThreshold?: number;\n}) {\n const scoredItems = items.map(\n (text, index): IScoredItem => ({\n index,\n ...fuzzyScore({ item: text, query }),\n })\n );\n\n if (!query) return scoredItems;\n\n return scoredItems\n .filter(({ score }) => score > scoreThreshold)\n .sort((a, b) => b.score - a.score);\n}\n\nexport type IToken =\n | { type: \"text\"; text: string }\n | { type: \"match\"; text: string };\n\nexport type MatchRange = { start: number; end: number };\n\nexport function fuzzyTokenize({\n item,\n itemScore,\n}: {\n item: string;\n itemScore: IItemScore;\n}): IToken[] {\n if (typeof item !== \"string\") {\n return [{ type: \"text\", text: String(item) }];\n }\n\n const tokens: IToken[] = [];\n let lastMatchIndex = 0;\n\n const matches: MatchRange[] = mergeRanges([\n ...(itemScore.labelMatch ?? []),\n ...(itemScore.descriptionMatch ?? []),\n ]);\n\n for (const match of matches) {\n if (match.start > lastMatchIndex) {\n tokens.push({\n type: \"text\",\n text: item.slice(lastMatchIndex, match.start),\n });\n }\n\n tokens.push({\n type: \"match\",\n text: item.slice(match.start, match.end),\n });\n\n lastMatchIndex = match.end;\n }\n\n if (lastMatchIndex < item.length) {\n tokens.push({\n type: \"text\",\n text: item.slice(lastMatchIndex),\n });\n }\n\n return tokens;\n}\n\nfunction mergeRanges(ranges: MatchRange[]): MatchRange[] {\n const merged: MatchRange[] = [];\n\n const sorted = [...ranges].sort((a, b) => a.start - b.start);\n\n let current: MatchRange | undefined;\n\n for (const range of sorted) {\n if (!current) {\n current = range;\n } else if (range.start <= current.end) {\n current.end = Math.max(current.end, range.end);\n } else {\n merged.push(current);\n current = range;\n }\n }\n\n if (current) {\n merged.push(current);\n }\n\n return merged;\n}\n","import { Size } from \"@noya-app/noya-geometry\";\nimport { CheckIcon } from \"@noya-app/noya-icons\";\nimport { forwardRefGeneric, memoGeneric } from \"@noya-app/react-utils\";\nimport React, { ForwardedRef } from \"react\";\nimport { cx } from \"../utils/classNames\";\n\nimport { fuzzyTokenize } from \"../utils/fuzzyScorer\";\nimport { renderIcon } from \"./Icons\";\nimport { IVirtualizedList, ListView } from \"./ListView\";\nimport { Spacer } from \"./Spacer\";\nimport {\n CHECKBOX_INDENT_WIDTH,\n CHECKBOX_RIGHT_INSET,\n CHECKBOX_WIDTH,\n KeyboardShortcut,\n ScoredMenuItem,\n styles,\n} from \"./internal/Menu\";\n\ninterface ComboboxMenuProps<T extends string> {\n items: ScoredMenuItem<T>[];\n selectedIndex: number;\n onSelectItem: (item: ScoredMenuItem<T>) => void;\n onHoverIndex: (index: number) => void;\n listSize: Size;\n style?: React.CSSProperties;\n indented?: boolean;\n /** @default right */\n iconPosition?: \"left\" | \"right\";\n}\n\nexport const ComboboxMenu = memoGeneric(\n forwardRefGeneric(function ComboboxMenu<T extends string>(\n {\n items,\n selectedIndex,\n onSelectItem,\n onHoverIndex,\n listSize,\n style,\n indented,\n iconPosition = \"right\",\n }: ComboboxMenuProps<T>,\n forwardedRef: ForwardedRef<IVirtualizedList>\n ) {\n return (\n <ListView.Root\n ref={forwardedRef}\n scrollable\n keyExtractor={(item: ScoredMenuItem<T>) => {\n if (item.type === \"sectionHeader\") return item.id;\n\n return item.value;\n }}\n data={items}\n virtualized={listSize}\n pressEventName=\"onPointerDown\"\n sectionHeaderVariant=\"label\"\n style={style}\n renderItem={(item, i) => {\n if (item.type === \"sectionHeader\") {\n return (\n <ListView.Row key={item.id} isSectionHeader>\n {indented && (\n <Spacer.Horizontal\n size={\n CHECKBOX_WIDTH -\n CHECKBOX_RIGHT_INSET +\n CHECKBOX_INDENT_WIDTH\n }\n />\n )}\n {item.title}\n </ListView.Row>\n );\n }\n\n const tokens = fuzzyTokenize({\n item: typeof item.title === \"string\" ? item.title : item.value,\n itemScore: item,\n });\n\n return (\n <ListView.Row\n key={item.value}\n selected={i === selectedIndex}\n disabled={item.disabled}\n onPress={() => !item.disabled && onSelectItem(item)}\n onHoverChange={(hovered) => {\n if (hovered && !item.disabled) {\n onHoverIndex(i);\n }\n }}\n >\n <div className=\"flex flex-1 min-w-0 items-center\">\n {indented && <Spacer.Horizontal size={CHECKBOX_INDENT_WIDTH} />}\n {item.checked ? (\n <div {...styles.itemIndicator}>\n <CheckIcon />\n </div>\n ) : indented ? (\n <Spacer.Horizontal\n size={CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET}\n />\n ) : null}\n {iconPosition === \"left\" && item.icon && (\n <>\n {renderIcon(item.icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n {tokens.map((token, j) => (\n <span\n key={`${item.value}-token-${j}`}\n className={cx(\n token.type === \"match\" ? \"font-bold\" : \"font-normal\",\n \"whitespace-pre truncate\"\n )}\n >\n {token.text}\n </span>\n ))}\n </div>\n {(item.shortcut || (item.icon && iconPosition === \"right\")) && (\n <>\n {item.shortcut ? (\n <KeyboardShortcut shortcut={item.shortcut} />\n ) : (\n item.icon && renderIcon(item.icon)\n )}\n </>\n )}\n </ListView.Row>\n );\n }}\n />\n );\n })\n);\n","import { Dialog } from \"@noya-app/noya-designsystem\";\nimport { AutoSizer } from \"@noya-app/react-utils\";\nimport React, { memo } from \"react\";\nimport {\n ISearchCompletionMenu,\n SearchCompletionMenu,\n} from \"./SearchCompletionMenu\";\n\nexport const CommandPalette = memo(function CommandPalette({\n showCommandPalette,\n setShowCommandPalette,\n items,\n onSelect,\n onHover,\n}: {\n showCommandPalette: boolean;\n setShowCommandPalette: (value: boolean) => void;\n} & Pick<\n React.ComponentProps<typeof SearchCompletionMenu>,\n \"items\" | \"onSelect\" | \"onHover\"\n>) {\n const menuRef = React.useRef<ISearchCompletionMenu>(null);\n\n const handleClose = React.useCallback(() => {\n setShowCommandPalette(false);\n }, [setShowCommandPalette]);\n\n return (\n <Dialog\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n maxWidth: \"500px\",\n minHeight: \"100px\",\n padding: \"1px\",\n top: \"100px\",\n left: \"50%\",\n transform: \"translate(-50%, 0)\",\n }}\n showCloseButton={false}\n open={showCommandPalette}\n onOpenChange={(value) => {\n setShowCommandPalette(value);\n }}\n closeOnInteractOutside\n onOpenAutoFocus={() => {\n menuRef.current?.focus();\n setTimeout(() => {\n menuRef.current?.focus();\n }, 0);\n }}\n >\n <div className=\"flex flex-col flex-1\">\n <AutoSizer>\n {(size) => (\n <SearchCompletionMenu\n ref={menuRef}\n width={size.width}\n items={items}\n onSelect={onSelect}\n onHover={onHover}\n onClose={handleClose}\n />\n )}\n </AutoSizer>\n </div>\n </Dialog>\n );\n});\n","import { getCurrentPlatform, handleKeyboardEvent } from \"@noya-app/noya-keymap\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { cssVars } from \"../theme\";\nimport { getNextIndex } from \"../utils/combobox\";\nimport { fuzzyFilter, IScoredItem } from \"../utils/fuzzyScorer\";\nimport { ComboboxMenu } from \"./ComboboxMenu\";\nimport { Divider } from \"./Divider\";\nimport { InputField } from \"./InputField\";\nimport {\n CHECKBOX_INDENT_WIDTH,\n CHECKBOX_RIGHT_INSET,\n CHECKBOX_WIDTH,\n isSelectableMenuItem,\n SelectableMenuItem,\n} from \"./internal/Menu\";\nimport { ListView } from \"./ListView\";\nimport { Small } from \"./Text\";\n\nexport interface ISearchCompletionMenu {\n focus: () => void;\n}\n\nexport const SearchCompletionMenu = forwardRef(function SearchCompletionMenu(\n {\n onSelect,\n onHover,\n onClose,\n items,\n width = 200,\n testSelectedIndex,\n testSearch,\n }: {\n onSelect: (item: SelectableMenuItem<string>) => void;\n onHover?: (item: SelectableMenuItem<string>) => void;\n onClose: () => void;\n items: SelectableMenuItem<string>[];\n width?: number;\n testSelectedIndex?: number;\n testSearch?: string;\n },\n forwardedRef: React.ForwardedRef<ISearchCompletionMenu>\n) {\n const [state, setState] = useState({\n search: testSearch ?? \"\",\n index: 0,\n });\n\n const { index, search } = state;\n\n const listRef = React.useRef<ListView.VirtualizedList>(null);\n\n const hasCheckedItems = items.some((item) => item.checked);\n\n useEffect(() => {\n listRef.current?.scrollToIndex(index);\n }, [index]);\n\n const results = useMemo(\n () =>\n fuzzyFilter({\n items: items.map((item) =>\n typeof item.title === \"string\" ? item.title : item.value\n ),\n query: search,\n }).map((item) => ({\n ...item,\n ...items[item.index],\n })) as (SelectableMenuItem<string> & IScoredItem)[],\n [items, search]\n );\n\n const setSearch = useCallback((search: string) => {\n setState((state) => ({ ...state, search, index: 0 }));\n }, []);\n\n const setIndex = useCallback((index: number) => {\n setState((state) => ({ ...state, index }));\n }, []);\n\n useEffect(() => {\n onHover?.(results[index]!);\n }, [index, onHover, results]);\n\n const searchHeight = 31;\n\n const listSize =\n results.length > 0\n ? {\n width,\n height: Math.min(results.length * 31, 31 * 6.5),\n }\n : {\n width,\n height: 60,\n };\n\n const elementSize = {\n width: listSize.width,\n height: searchHeight + listSize.height,\n };\n\n const selectAndClose = useCallback(\n (item: SelectableMenuItem<string>) => {\n onSelect(item);\n onClose();\n },\n [onSelect, onClose]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n handleKeyboardEvent(event.nativeEvent, getCurrentPlatform(navigator), {\n ArrowUp: () => {\n const nextIndex = getNextIndex({\n items: results,\n currentIndex: index,\n direction: \"previous\",\n isDisabled: (item) => item.disabled ?? false,\n });\n setIndex(nextIndex);\n },\n ArrowDown: () => {\n const nextIndex = getNextIndex({\n items: results,\n currentIndex: index,\n direction: \"next\",\n isDisabled: (item) => item.disabled ?? false,\n });\n setIndex(nextIndex);\n },\n Tab: () => selectAndClose(results[index]!),\n Enter: () => selectAndClose(results[index]!),\n Escape: () => onClose(),\n });\n },\n [index, onClose, selectAndClose, results, setIndex]\n );\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n useImperativeHandle(forwardedRef, () => ({\n focus: () => {\n inputRef.current?.focus();\n },\n }));\n\n return (\n <div {...elementSize} className=\"flex flex-col overflow-hidden\">\n <InputField.Root className=\"flex flex-0\">\n <InputField.Input\n ref={inputRef}\n value={search}\n placeholder=\"Filter...\"\n style={{\n height: searchHeight,\n borderRadius: 0,\n outline: \"none\",\n boxShadow: \"none\",\n backgroundColor: cssVars.colors.inputBackground,\n paddingTop: \"4px\",\n paddingBottom: \"4px\",\n paddingLeft: hasCheckedItems\n ? `${CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET + 12 + CHECKBOX_INDENT_WIDTH}px`\n : \"12px\",\n paddingRight: \"12px\",\n }}\n onChange={setSearch}\n onKeyDown={handleKeyDown}\n />\n </InputField.Root>\n <Divider />\n {results.length > 0 ? (\n <ComboboxMenu\n ref={listRef}\n listSize={listSize}\n items={results}\n selectedIndex={testSelectedIndex ?? index}\n onSelectItem={(item) => {\n if (isSelectableMenuItem(item)) {\n selectAndClose(item);\n }\n }}\n onHoverIndex={setIndex}\n indented={hasCheckedItems}\n />\n ) : (\n <div\n {...listSize}\n className=\"flex flex-col p-20 items-center justify-center\"\n >\n <Small color=\"textDisabled\">No results</Small>\n </div>\n )}\n </div>\n );\n});\n","import React, { memo } from \"react\";\nimport { cx } from \"../utils/classNames\";\n\ntype DividerVariant = \"normal\" | \"subtle\" | \"strong\";\n\ninterface DividerProps {\n variant?: DividerVariant;\n overflow?: number | string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const Divider = memo(function Divider({\n variant = \"normal\",\n overflow = 0,\n className,\n style,\n ...props\n}: DividerProps) {\n return (\n <div\n className={cx(\n `h-px min-h-px self-stretch`,\n variant === \"strong\"\n ? \"bg-divider-strong\"\n : variant === \"subtle\"\n ? \"bg-divider-subtle\"\n : \"bg-divider\",\n className\n )}\n style={{\n marginLeft: `-${overflow}px`,\n marginRight: `-${overflow}px`,\n ...style,\n }}\n {...props}\n />\n );\n});\n\nexport const DividerVertical = memo(function DividerVertical({\n variant = \"normal\",\n overflow = 0,\n className,\n style,\n ...props\n}: DividerProps) {\n return (\n <div\n className={cx(\n `w-px min-w-px self-stretch`,\n variant === \"strong\"\n ? \"bg-divider-strong\"\n : variant === \"subtle\"\n ? \"bg-divider-subtle\"\n : \"bg-divider\",\n className\n )}\n style={{\n marginTop: `-${overflow}px`,\n marginBottom: `-${overflow}px`,\n ...style,\n }}\n {...props}\n />\n );\n});\n","import React from \"react\";\nimport { INPUT_HEIGHT } from \"../../theme\";\nimport { Avatar, AvatarProps, AvatarStack } from \"../Avatar\";\nimport Button from \"../Button\";\nimport { Small } from \"../Text\";\nimport { Tooltip } from \"../Tooltip\";\n\nexport const UserAvatar = ({ userId, name, image }: AvatarProps) => (\n <Tooltip\n key={userId}\n content={\n <div className=\"flex flex-col\">\n <Small>{name}</Small>\n </div>\n }\n >\n <Avatar size={INPUT_HEIGHT} userId={userId} name={name} image={image} />\n </Tooltip>\n);\n\ntype ConnectedUsersMenuLayoutProps = {\n renderUsers: () => React.ReactNode;\n launchAIAssistant?: () => void;\n isAssistantOpen?: boolean;\n};\n\nexport const ConnectedUsersMenuLayout = ({\n renderUsers,\n launchAIAssistant,\n isAssistantOpen,\n}: ConnectedUsersMenuLayoutProps) => {\n return (\n <div className=\"flex gap-1.5\">\n <AvatarStack size={INPUT_HEIGHT} className=\"mr-1\">\n {renderUsers()}\n </AvatarStack>\n {launchAIAssistant && (\n <Tooltip content=\"AI Assistant\">\n <Button\n active={isAssistantOpen}\n onClick={launchAIAssistant}\n icon=\"ChatBubbleWithDotsIcon\"\n >\n AI\n </Button>\n </Tooltip>\n )}\n </div>\n );\n};\n","import { DragHandleDots2Icon } from \"@noya-app/noya-icons\";\nimport { memoGeneric } from \"@noya-app/react-utils\";\nimport React, { useCallback, useState } from \"react\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport { MenuItem } from \"./internal/Menu\";\n\n/**\n * A button that opens a menu when clicked, but also allows dragging the\n */\nexport const DraggableMenuButton = memoGeneric(function DraggableMenuButton<\n T extends string,\n>({\n items,\n onSelect,\n onClick,\n isVisible = true,\n className,\n style,\n}: {\n items?: MenuItem<T>[];\n onSelect?: (value: T) => void;\n onClick?: () => void;\n isVisible?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}) {\n const [open, setOpen] = useState(false);\n const [downPosition, setDownPosition] = useState<{\n x: number;\n y: number;\n } | null>(null);\n\n const handlePointerDownCapture = useCallback(\n (event: React.PointerEvent) => {\n if (open) {\n setDownPosition(null);\n return;\n }\n\n setDownPosition({\n x: event.clientX,\n y: event.clientY,\n });\n },\n [open]\n );\n\n const handlePointerUp = useCallback(\n (event: React.PointerEvent) => {\n if (open || !downPosition) {\n setDownPosition(null);\n return;\n }\n\n const dx = event.clientX - downPosition.x;\n const dy = event.clientY - downPosition.y;\n const distance = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n\n if (distance < 5) {\n setOpen(true);\n }\n\n setDownPosition(null);\n },\n [downPosition, open]\n );\n\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n if (!isOpen) setOpen(false);\n },\n [setOpen]\n );\n\n return (\n <div\n className={cx(\n \"cursor-pointer rounded flex items-center justify-center py-[2px] hover:bg-input-background-light active:bg-active-background \",\n className\n )}\n style={style}\n onPointerDownCapture={handlePointerDownCapture}\n onPointerUp={handlePointerUp}\n onClick={(event) => {\n event.stopPropagation();\n event.preventDefault();\n onClick?.();\n }}\n >\n {items && onSelect ? (\n <DropdownMenu\n open={open}\n onOpenChange={handleOpenChange}\n items={items}\n onSelect={onSelect}\n shouldBindKeyboardShortcuts={false}\n >\n <div className=\"pointer-events-none h-[15px]\">\n <DragHandleDots2Icon\n color={isVisible || open ? cssVars.colors.icon : \"transparent\"}\n />\n </div>\n </DropdownMenu>\n ) : (\n <DragHandleDots2Icon\n color={isVisible || open ? cssVars.colors.icon : \"transparent\"}\n />\n )}\n </div>\n );\n});\n","import { useControlledOrUncontrolled } from \"@noya-app/react-utils\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport * as React from \"react\";\nimport { useImperativeHandle } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { SidebarRef } from \"./workspace/types\";\n\nexport type DrawerProps = {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger: React.ReactNode;\n children: React.ReactNode;\n title?: React.ReactNode;\n className?: string;\n id?: string;\n style?: React.CSSProperties;\n positioning?: \"fixed\" | \"absolute\";\n side?: \"left\" | \"right\";\n portalled?: boolean;\n portalContainer?: HTMLElement | null;\n};\n\nexport const Drawer = React.memo(\n React.forwardRef(function Drawer(\n {\n open,\n onOpenChange,\n trigger,\n children,\n title,\n className,\n id,\n style,\n positioning = \"fixed\",\n side = \"left\",\n portalled = true,\n portalContainer,\n }: DrawerProps,\n forwardedRef: React.ForwardedRef<SidebarRef>\n ) {\n const [internalOpen, setInternalOpen] = useControlledOrUncontrolled({\n defaultValue: false,\n value: open,\n onChange: onOpenChange,\n });\n\n useImperativeHandle(forwardedRef, () => ({\n expand: () => {\n setInternalOpen(true);\n },\n collapse: () => {\n setInternalOpen(false);\n },\n isExpanded: () => {\n return internalOpen;\n },\n }));\n\n const inner = (\n <>\n <Dialog.Overlay\n className={cx(\n \"inset-0 bg-black/50\",\n positioning === \"absolute\" ? \"absolute\" : \"fixed\"\n )}\n />\n <Dialog.Content\n id={id}\n style={style}\n className={cx(\n `top-0 bottom-0 z-50 overflow-y-auto bg-sidebar-background rounded-none max-h-none max-w-none sm:max-w-sm w-full border-divider-strong`,\n positioning === \"absolute\" ? \"absolute\" : \"fixed\",\n side === \"left\" ? \"left-0 border-r\" : \"right-0 border-l\",\n className\n )}\n >\n {title && <Dialog.Title>{title}</Dialog.Title>}\n {children}\n </Dialog.Content>\n </>\n );\n\n return (\n <Dialog.Root\n key=\"dialog\"\n open={internalOpen}\n onOpenChange={setInternalOpen}\n >\n <Dialog.Trigger key=\"trigger\">{trigger}</Dialog.Trigger>\n {portalled ? (\n <Dialog.Portal container={portalContainer}>{inner}</Dialog.Portal>\n ) : (\n inner\n )}\n </Dialog.Root>\n );\n })\n);\n","import React, { type ReactNode } from \"react\";\nimport { cx } from \"../utils/classNames\";\n\nexport type FadeDirection = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport type FadeProps = {\n children: ReactNode;\n direction?: FadeDirection;\n width?: number;\n height?: number;\n className?: string;\n zIndex?: number;\n /**\n * @default \"front\"\n * If \"back\", the fade will be positioned behind the children\n */\n position?: \"front\" | \"back\";\n};\n\nexport const Fade = ({\n children,\n direction = \"right\",\n width,\n height,\n className,\n zIndex = 0,\n position = \"front\",\n}: FadeProps) => {\n const gradientDirection = {\n left: \"to-l\",\n right: \"to-r\",\n top: \"to-t\",\n bottom: \"to-b\",\n }[direction];\n\n const positionClasses = {\n left: \"left-0 top-0 bottom-0\",\n right: \"right-0 top-0 bottom-0\",\n top: \"left-0 right-0 top-0\",\n bottom: \"left-0 right-0 bottom-0\",\n }[direction];\n\n return (\n <div className={cx(\"relative\", className)} style={{ height }}>\n {position === \"front\" ? children : null}\n <div\n className={cx(\n \"absolute pointer-events-none\",\n positionClasses,\n `bg-gradient-${gradientDirection}`,\n \"from-transparent to-background\",\n zIndex && `z-[${zIndex}]`\n )}\n style={{\n width: width ?? \"100%\",\n height: height ?? \"100%\",\n }}\n />\n {position === \"back\" ? children : null}\n </div>\n );\n};\n","import {\n Banner,\n BannerProps,\n IconButton,\n Section,\n SectionProps,\n} from \"@noya-app/noya-designsystem\";\nimport { forwardRefGeneric } from \"@noya-app/react-utils\";\nimport React from \"react\";\nimport { cx } from \"../../utils/classNames\";\nimport {\n Collection,\n CollectionItemSize,\n CollectionProps,\n CollectionRef,\n} from \"../Collection\";\n\nexport const FileExplorerLayout = ({\n children,\n className,\n ...props\n}: SectionProps) => (\n <Section className={cx(className, \"px-3 flex-1\")} {...props}>\n {children}\n </Section>\n);\n\nexport const FileExplorerUploadButton = ({\n showUploadButton,\n onUpload,\n children,\n}: {\n showUploadButton?: boolean;\n onUpload?: () => void;\n children?: React.ReactNode;\n}) => (\n <div className=\"flex items-center gap-2\">\n {showUploadButton && (\n <IconButton\n iconName=\"UploadIcon\"\n onClick={onUpload}\n aria-label=\"Upload media\"\n tooltip=\"Upload media\"\n />\n )}\n {children}\n </div>\n);\n\nexport const FileExplorerCollection = forwardRefGeneric(\n function FileExplorerCollection<T, M extends string = string>(\n { ...props }: CollectionProps<T, M>,\n ref: React.ForwardedRef<CollectionRef>\n ) {\n return <Collection<T, M> ref={ref} className=\"-mx-3 flex-1\" {...props} />;\n }\n);\n\nexport const FileExplorerDetail = ({\n selected,\n size,\n children,\n}: {\n selected: boolean;\n children: React.ReactNode;\n size?: CollectionItemSize;\n}) => (\n <span\n className={cx(\n size === \"small\" ? \"text-list-small\" : \"text-sm\",\n selected ? \"text-primary\" : \"text-text-muted\"\n )}\n >\n {children}\n </span>\n);\n\nexport const FileExplorerEmptyState = ({\n label = \"No files\",\n ...props\n}: BannerProps) => <Banner label={label} className=\"mx-3\" {...props} />;\n","import { Sketch } from \"@noya-app/noya-file-format\";\nimport React, { forwardRef, memo } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { SketchPattern } from \"../utils/sketchPattern\";\nimport { FillPreviewBackground } from \"./FillPreviewBackground\";\n\nconst FillButton = forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, ...props }, ref) => (\n <button\n ref={ref}\n className={cx(\n `outline-none p-0 w-[50px] h-input-height rounded overflow-hidden border-none shadow-[0_0_0_1px_var(--n-divider)_inset] bg-transparent relative focus:shadow-active-input `,\n className\n )}\n {...props}\n />\n));\n\ninterface Props {\n id?: string;\n value?: Sketch.Color | Sketch.Gradient | SketchPattern;\n}\n\nexport const FillInputField = memo(\n forwardRef<HTMLButtonElement, Props>(function FillInputField(\n { id, value, ...rest },\n ref\n ) {\n return (\n <FillButton ref={ref} id={id} {...rest}>\n <FillPreviewBackground value={value} />\n </FillButton>\n );\n })\n);\n","/**\n * UUID string.\n */\nexport type Uuid = string;\n/**\n * Collection of global document objects\n */\nexport type AssetCollection = {\n _class: 'assetCollection';\n do_objectID: Uuid;\n imageCollection?: ImageCollection;\n colorAssets: ColorAsset[];\n gradientAssets: GradientAsset[];\n images: (FileRef | DataRef)[];\n colors: Color[];\n gradients: Gradient[];\n exportPresets: [];\n};\n/**\n * Legacy object only retained for migrating older documents.\n */\nexport type ImageCollection = {\n _class: 'imageCollection';\n images: any;\n};\n/**\n * Defines a reusable color asset\n */\nexport type ColorAsset = {\n _class: 'MSImmutableColorAsset';\n do_objectID: Uuid;\n name: string;\n color: Color;\n};\n/**\n * Defines a RGBA color value\n */\nexport type Color = {\n _class: 'color';\n alpha: UnitInterval;\n red: UnitInterval;\n green: UnitInterval;\n blue: UnitInterval;\n swatchID?: Uuid;\n colorSpaces?: {\n hsva?: {\n hue: number;\n saturation: number;\n value: number;\n alpha: number;\n };\n };\n};\n/**\n * The set of all real numbers that are greater than or equal to 0 and less than or equal to 1. Used within Sketch documents to encode normalised scalar values, for example RGB color components.\n */\nexport type UnitInterval = number;\n/**\n * Defines a reusable gradient asset\n */\nexport type GradientAsset = {\n _class: 'MSImmutableGradientAsset';\n do_objectID: Uuid;\n name: string;\n gradient: Gradient;\n};\n/**\n * Defines a gradient\n */\nexport type Gradient = {\n _class: 'gradient';\n gradientType: GradientType;\n elipseLength: number;\n from: PointString;\n to: PointString;\n stops: GradientStop[];\n};\n/**\n * Enumeration of the gradient types\n */\nexport enum GradientType {\n Linear = 0,\n Radial = 1,\n Angular = 2,\n}\n/**\n * A formatted string representation of a 2D point, e.g. {1, 1}.\n \n */\nexport type PointString = string;\n/**\n * Defines a position on a gradient that marks the end of a transition to a new color\n */\nexport type GradientStop = {\n _class: 'gradientStop';\n color: Color;\n position: UnitInterval;\n};\n/**\n * Defines a reference to a file within the document bundle\n */\nexport type FileRef = {\n _class: 'MSJSONFileReference';\n _ref_class: 'MSImageData' | 'MSImmutablePage' | 'MSPatch';\n _ref: string;\n};\n/**\n * Defines inline base64 data\n */\nexport type DataRef = {\n _class: 'MSJSONOriginalDataReference';\n _ref_class: 'MSImageData' | 'MSFontData';\n _ref: string;\n data: {\n _data: string;\n };\n sha1: {\n _data: string;\n };\n};\n/**\n * Enumeration of the color profiles Sketch can use to render a document\n */\nexport enum ColorSpace {\n Unmanaged = 0,\n SRGB = 1,\n P3 = 2,\n}\n/**\n * Defines a layer style that has been imported from a library\n */\nexport type ForeignLayerStyle = {\n _class: 'MSImmutableForeignLayerStyle';\n do_objectID: Uuid;\n libraryID: Uuid;\n sourceLibraryName: string;\n symbolPrivate: boolean;\n remoteStyleID: Uuid;\n localSharedStyle: SharedStyle;\n};\n/**\n * Defines a reusable style\n */\nexport type SharedStyle = {\n _class: 'sharedStyle';\n do_objectID: Uuid;\n name: string;\n value: Style;\n};\n/**\n * Defines a layer style\n */\nexport type Style = {\n _class: 'style';\n do_objectID: Uuid;\n borders?: Border[];\n borderOptions: BorderOptions;\n blur?: Blur;\n fills?: Fill[];\n startMarkerType: MarkerType;\n endMarkerType: MarkerType;\n miterLimit: number;\n windingRule: WindingRule;\n textStyle?: TextStyle;\n shadows?: Shadow[];\n innerShadows: InnerShadow[];\n contextSettings?: GraphicsContextSettings;\n colorControls: ColorControls;\n};\n/**\n * Defines a border style\n */\nexport type Border = {\n _class: 'border';\n isEnabled: boolean;\n color: Color;\n fillType: FillType;\n position: BorderPosition;\n thickness: number;\n contextSettings: GraphicsContextSettings;\n gradient: Gradient;\n};\n/**\n * Enumeration of the fill types\n */\nexport enum FillType {\n Color = 0,\n Gradient = 1,\n Pattern = 4,\n Shader = -101,\n}\n/**\n * Enumeration of border positions\n */\nexport enum BorderPosition {\n Center = 0,\n Inside = 1,\n Outside = 2,\n}\n/**\n * Defines the opacity and blend mode of a style or shadow\n */\nexport type GraphicsContextSettings = {\n _class: 'graphicsContextSettings';\n blendMode: BlendMode;\n opacity: number;\n};\n/**\n * Enumeration of the blend modes that can be applied to fills\n */\nexport enum BlendMode {\n Normal = 0,\n Darken = 1,\n Multiply = 2,\n ColorBurn = 3,\n Lighten = 4,\n Screen = 5,\n ColorDodge = 6,\n Overlay = 7,\n SoftLight = 8,\n HardLight = 9,\n Difference = 10,\n Exclusion = 11,\n Hue = 12,\n Saturation = 13,\n Color = 14,\n Luminosity = 15,\n PlusDarker = 16,\n PlusLighter = 17,\n}\n/**\n * Defines border options\n */\nexport type BorderOptions = {\n _class: 'borderOptions';\n isEnabled: boolean;\n dashPattern: number[];\n lineCapStyle: LineCapStyle;\n lineJoinStyle: LineJoinStyle;\n};\n/**\n * Enumeration of the line cap styles\n */\nexport enum LineCapStyle {\n Butt = 0,\n Round = 1,\n Projecting = 2,\n}\n/**\n * Enumeration of the line join styles\n */\nexport enum LineJoinStyle {\n Miter = 0,\n Round = 1,\n Bevel = 2,\n}\n/**\n * Defines a blur style\n */\nexport type Blur = {\n _class: 'blur';\n isEnabled: boolean;\n center: PointString;\n motionAngle?: number;\n radius?: number;\n saturation: number;\n type: BlurType;\n};\n/**\n * Enumeration of the various blur types\n */\nexport enum BlurType {\n Gaussian = 0,\n Motion = 1,\n Zoom = 2,\n Background = 3,\n}\n/**\n * Defines a fill style\n */\nexport type Fill = {\n _class: 'fill';\n isEnabled: boolean;\n color: Color;\n fillType: FillType;\n noiseIndex: number;\n noiseIntensity: number;\n patternFillType: PatternFillType;\n patternTileScale: number;\n contextSettings: GraphicsContextSettings;\n gradient: Gradient;\n image?: FileRef | DataRef;\n shader?: Shader;\n};\n/**\n * Enumeration of pattern fill types\n */\nexport enum PatternFillType {\n Tile = 0,\n Fill = 1,\n Stretch = 2,\n Fit = 3,\n}\n/**\n * Defines a shader\n */\nexport type Shader = {\n _class: 'shader';\n shaderString: string;\n variables: ShaderVariable[];\n};\n/**\n * Defines a variable to be passed to the shader as a uniform\n */\nexport type ShaderVariable = {\n _class: 'shaderVariable';\n name: string;\n value:\n | {\n type: 'integer';\n data: number;\n }\n | {\n type: 'float';\n data: number;\n }\n | {\n type: 'float2';\n data: { x: number; y: number };\n }\n | {\n type: 'color';\n data: Color;\n };\n};\n/**\n * Enumeration of the possible types of vector line endings\n */\nexport enum MarkerType {\n OpenArrow = 0,\n FilledArrow = 1,\n Line = 2,\n OpenCircle = 3,\n FilledCircle = 4,\n OpenSquare = 5,\n FilledSquare = 6,\n}\n/**\n * Enumeration of the winding rule that controls how fills behave in shapes with complex paths\n */\nexport enum WindingRule {\n NonZero = 0,\n EvenOdd = 1,\n}\n/**\n * Defines text style\n */\nexport type TextStyle = {\n _class: 'textStyle';\n verticalAlignment: TextVerticalAlignment;\n encodedAttributes: {\n paragraphStyle?: ParagraphStyle;\n MSAttributedStringTextTransformAttribute?: TextTransform;\n underlineStyle?: UnderlineStyle;\n strikethroughStyle?: {};\n kerning?: number;\n MSAttributedStringFontAttribute: FontDescriptor;\n textStyleVerticalAlignmentKey?: TextVerticalAlignment;\n MSAttributedStringColorAttribute?: Color;\n };\n};\n/**\n * Enumeration of the text style vertical alighment options\n */\nexport enum TextVerticalAlignment {\n Top = 0,\n Middle = 1,\n Bottom = 2,\n}\n/**\n * Defines the paragraph style within a text style\n */\nexport type ParagraphStyle = {\n _class: 'paragraphStyle';\n alignment?: TextHorizontalAlignment;\n maximumLineHeight?: number;\n minimumLineHeight?: number;\n paragraphSpacing?: number;\n allowsDefaultTighteningForTruncation?: number;\n};\n/**\n * Enumeration of the horizontal alignment options for paragraphs\n */\nexport enum TextHorizontalAlignment {\n Left = 0,\n Right = 1,\n Centered = 2,\n Justified = 3,\n Natural = 4,\n}\n/**\n * Enumeration of the text style transformations options\n */\nexport enum TextTransform {\n None = 0,\n Uppercase = 1,\n Lowercase = 2,\n}\n/**\n * Enumeration of the text style underline options\n */\nexport enum UnderlineStyle {\n None = 0,\n Underlined = 1,\n}\n/**\n * Defines a font selection\n */\nexport type FontDescriptor = {\n _class: 'fontDescriptor';\n attributes: {\n name: string;\n size: number;\n variation?: {\n [key: string]: number;\n };\n };\n};\n/**\n * Defines a shadow style\n */\nexport type Shadow = {\n _class: 'shadow';\n isEnabled: boolean;\n blurRadius: number;\n color: Color;\n contextSettings: GraphicsContextSettings;\n offsetX: number;\n offsetY: number;\n spread: number;\n};\n/**\n * Defines an inner shadow style\n */\nexport type InnerShadow = {\n _class: 'innerShadow';\n isEnabled: boolean;\n blurRadius: number;\n color: Color;\n contextSettings: GraphicsContextSettings;\n offsetX: number;\n offsetY: number;\n spread: number;\n};\n/**\n * Defines color adjust styles on images\n */\nexport type ColorControls = {\n _class: 'colorControls';\n isEnabled: boolean;\n brightness: number;\n contrast: number;\n hue: number;\n saturation: number;\n};\n/**\n * Defines a symbol that has been imported from a library\n */\nexport type ForeignSymbol = {\n _class: 'MSImmutableForeignSymbol';\n do_objectID: Uuid;\n libraryID: Uuid;\n sourceLibraryName: string;\n symbolPrivate: boolean;\n originalMaster: SymbolMaster;\n symbolMaster: SymbolMaster;\n missingLibraryFontAcknowledged?: boolean;\n};\n/**\n * A symbol source layer represents a reusable group of layers\n */\nexport type SymbolMaster = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n hasClickThrough: boolean;\n horizontalRulerData: RulerData;\n verticalRulerData: RulerData;\n layout?: LayoutGrid;\n grid?: SimpleGrid;\n groupLayout?: FreeformGroupLayout | InferredGroupLayout;\n _class: 'symbolMaster';\n backgroundColor: Color;\n hasBackgroundColor: boolean;\n includeBackgroundColorInInstance: boolean;\n includeBackgroundColorInExport: boolean;\n isFlowHome: boolean;\n resizesContent: boolean;\n presetDictionary?: any;\n symbolID: Uuid;\n allowsOverrides: boolean;\n overrideProperties: OverrideProperty[];\n layers: (\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | CustomLayer\n )[];\n blockDefinition?: BlockDefinition;\n};\n/**\n * Enumeration of the boolean operations that can be applied to combine shapes\n */\nexport enum BooleanOperation {\n None = -1,\n Union = 0,\n Subtract = 1,\n Intersection = 2,\n Difference = 3,\n}\n/**\n * Defines a layer's export options\n */\nexport type ExportOptions = {\n _class: 'exportOptions';\n exportFormats: ExportFormat[];\n includedLayerIds: Uuid[];\n layerOptions: number;\n shouldTrim: boolean;\n};\n/**\n * Defines an export format, as listed in a layer's export options\n */\nexport type ExportFormat = {\n _class: 'exportFormat';\n absoluteSize: number;\n fileFormat: ExportFileFormat;\n name: string;\n namingScheme?: ExportFormatNamingScheme;\n scale: number;\n visibleScaleType: VisibleScaleType;\n};\n/**\n * Enumeration of the file formats that can be selected in the layer export options\n */\nexport enum ExportFileFormat {\n PNG = 'png',\n JPG = 'jpg',\n TIFF = 'tiff',\n EPS = 'eps',\n PDF = 'pdf',\n WEBP = 'webp',\n SVG = 'svg',\n}\n/**\n * Enumeration of the possible types of export format naming schemes\n */\nexport enum ExportFormatNamingScheme {\n Suffix = 0,\n Prefix = 1,\n}\n/**\n * Enumeration of the possible values to control how an exported layer will be scaled\n */\nexport enum VisibleScaleType {\n Scale = 0,\n Width = 1,\n Height = 2,\n}\n/**\n * Defines an abstract rectangle\n */\nexport type Rect = {\n _class: 'rect';\n constrainProportions: boolean;\n height: number;\n width: number;\n x: number;\n y: number;\n};\n/**\n * Defines a connection between elements in a prototype\n */\nexport type FlowConnection = {\n _class: 'MSImmutableFlowConnection';\n destinationArtboardID: Uuid | 'back';\n animationType: AnimationType;\n maintainScrollPosition?: boolean;\n};\n/**\n * Enumeration of the animation transition types between prototype screens\n */\nexport enum AnimationType {\n None = 0,\n SlideFromLeft = 1,\n SlideFromRight = 2,\n SlideFromBottom = 3,\n SlideFromTop = 4,\n}\n/**\n * Enumeration of the expansion states in the layer list UI\n */\nexport enum LayerListExpanded {\n Undecided = 0,\n Collapsed = 1,\n Expanded = 2,\n}\n/**\n * Enumeration of the possible resize types\n */\nexport enum ResizeType {\n Stretch = 0,\n PinToEdge = 1,\n Resize = 2,\n Float = 3,\n}\n/**\n * Defines persisted ruler positions on artboards, pages and symbols\n */\nexport type RulerData = {\n _class: 'rulerData';\n base: number;\n guides: number[];\n};\n/**\n * Defines the layout settings for an artboard or page\n */\nexport type LayoutGrid = {\n _class: 'layoutGrid';\n isEnabled: boolean;\n columnWidth: number;\n gutterHeight: number;\n gutterWidth: number;\n horizontalOffset: number;\n numberOfColumns: number;\n rowHeightMultiplication: number;\n totalWidth: number;\n guttersOutside: boolean;\n drawHorizontal: boolean;\n drawHorizontalLines: boolean;\n drawVertical: boolean;\n};\n/**\n * Defines the grid settings for an artboard or page\n */\nexport type SimpleGrid = {\n _class: 'simpleGrid';\n isEnabled: boolean;\n gridSize: number;\n thickGridTimes: number;\n};\n/**\n * Normal group layout\n */\nexport type FreeformGroupLayout = {\n _class: 'MSImmutableFreeformGroupLayout';\n};\n/**\n * Inferred group layout defines smart layout options\n */\nexport type InferredGroupLayout = {\n _class: 'MSImmutableInferredGroupLayout';\n axis: InferredLayoutAxis;\n layoutAnchor: InferredLayoutAnchor;\n maxSize?: number;\n minSize?: number;\n};\n/**\n * Enumeration of the axis types for inferred (aka smart) layout\n */\nexport enum InferredLayoutAxis {\n Horizontal = 0,\n Vertical = 1,\n}\n/**\n * Enumeration of the anchor types for inferred (aka smart) layout\n */\nexport enum InferredLayoutAnchor {\n Min = 0,\n Middle = 1,\n Max = 2,\n}\n/**\n * Defines override properties on symbol sources\n */\nexport type OverrideProperty = {\n _class: 'MSImmutableOverrideProperty';\n overrideName: OverrideName;\n canOverride: boolean;\n};\n/**\n * Defines the valid string patterns for an override name\n */\nexport type OverrideName = string | string | string | string;\n/**\n * Group layers are a document organisation aid\n */\nexport type Group = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n hasClickThrough: boolean;\n groupLayout?: FreeformGroupLayout | InferredGroupLayout;\n layers: (\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | CustomLayer\n )[];\n _class: 'group';\n};\n\nexport type NoyaElementType = 'primitive' | 'instance';\n\nexport type NoyaElement = {\n do_objectID: Uuid;\n _class: 'noyaElement';\n name?: string;\n type: NoyaElementType;\n componentID: Uuid;\n // Can strings be children?\n children: NoyaElement[];\n classNames: string[];\n};\n\nexport type NoyaComponent = {\n do_objectID: Uuid;\n _class: 'noyaComponent';\n name: string;\n rootElement: NoyaElement;\n componentID: Uuid;\n};\n\nexport type CustomLayer<T = unknown> = Omit<\n Group,\n '_class' | 'layers' | 'hasClickThrough'\n> & {\n _class: 'customLayer';\n data: T;\n};\n\n/**\n * Oval layers are the result of adding an oval shape to the canvas\n */\nexport type Oval = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'oval';\n};\n/**\n * Enumeration of the possible values for corner rounding on shape points.\n */\nexport enum PointsRadiusBehaviour {\n Disabled = -1,\n Legacy = 0,\n Rounded = 1,\n Smooth = 2,\n}\n/**\n * Defines a shape layer curve point\n */\nexport type CurvePoint = {\n _class: 'curvePoint';\n cornerRadius: number;\n curveFrom: PointString;\n curveTo: PointString;\n hasCurveFrom: boolean;\n hasCurveTo: boolean;\n curveMode: CurveMode;\n point: PointString;\n};\n/**\n * Enumeration of the curve modes that can be applied to vector points\n */\nexport enum CurveMode {\n None = 0,\n Straight = 1,\n Mirrored = 2,\n Asymmetric = 3,\n Disconnected = 4,\n}\n/**\n * Polygon layers are the result of adding a polygon shape to the canvas\n */\nexport type Polygon = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'polygon';\n numberOfPoints: number;\n};\n/**\n * Rectangle layers are the result of adding a rectangle shape to the canvas\n */\nexport type Rectangle = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'rectangle';\n fixedRadius: number;\n hasConvertedToNewRoundCorners: boolean;\n needsConvertionToNewRoundCorners: boolean;\n};\n/**\n * Shape path layers are the result of adding a vector layer\n */\nexport type ShapePath = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'shapePath';\n};\n/**\n * Star layers are the result of adding a star shape to the canvas\n */\nexport type Star = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'star';\n numberOfPoints: number;\n radius: number;\n};\n/**\n * Triangle layers are the result of adding a triangle shape to the canvas\n */\nexport type Triangle = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n edited: boolean;\n isClosed: boolean;\n pointRadiusBehaviour: PointsRadiusBehaviour;\n points: CurvePoint[];\n _class: 'triangle';\n isEquilateral: boolean;\n};\n/**\n * Shape groups layers group together multiple shape layers\n */\nexport type ShapeGroup = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n hasClickThrough: boolean;\n groupLayout?: FreeformGroupLayout | InferredGroupLayout;\n layers: (\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | CustomLayer\n )[];\n _class: 'shapeGroup';\n windingRule: WindingRule;\n};\n/**\n * A text layer represents a discrete block or line of text\n */\nexport type Text = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n _class: 'text';\n attributedString: AttributedString;\n automaticallyDrawOnUnderlyingPath: boolean;\n dontSynchroniseWithSymbol: boolean;\n lineSpacingBehaviour: LineSpacingBehaviour;\n textBehaviour: TextBehaviour;\n glyphBounds: PointListString;\n};\n/**\n * Defines character strings and associated styling applied to character ranges\n */\nexport type AttributedString = {\n _class: 'attributedString';\n string: string;\n attributes: StringAttribute[];\n};\n/**\n * Defines an attribute assigned to a range of characters in an attributed string\n */\nexport type StringAttribute = {\n _class: 'stringAttribute';\n location: number;\n length: number;\n attributes: {\n kerning?: number;\n textStyleVerticalAlignmentKey?: TextVerticalAlignment;\n MSAttributedStringFontAttribute: FontDescriptor;\n MSAttributedStringColorAttribute?: Color;\n paragraphStyle?: ParagraphStyle;\n };\n};\n/**\n * Enumeration of line spacing behaviour for fixed line height text\n */\nexport enum LineSpacingBehaviour {\n None = 0,\n Legacy = 1,\n ConsistentBaseline = 2,\n}\n/**\n * Enumeration of the behaviours for text layers\n */\nexport enum TextBehaviour {\n Flexible = 0,\n Fixed = 1,\n FixedWidthAndHeight = 2,\n}\n/**\n * A string representation of a series of 2D points, in the format {{x, y}, {x,y}}.\n */\nexport type PointListString = string;\n\nexport type BlockStylePreset = {\n name?: string;\n parameters: string[];\n};\n\nexport type BlockDefinition = {\n primitiveSymbolID?: string;\n hashtags?: string[];\n placeholderText?: string;\n placeholderParameters?: string[];\n stylePresets?: BlockStylePreset[];\n usesResolver?: boolean;\n isInsertable?: boolean;\n supportsBlockText?: boolean;\n infer?: (props: {\n frame: Omit<Rect, '_class' | 'constrainProportions'>;\n }) => number;\n render?: (props: {\n passthrough: Record<string, any>;\n Components: any;\n instance: SymbolInstance;\n children?: any;\n getSymbolMaster: (symbolId: string) => SymbolMaster;\n }) => any;\n schema?: Record<string, string[]>;\n};\n\nexport type ResolvedBlockData = {\n symbolID: string;\n originalText: string;\n resolvedText: string;\n resolvedAt?: string;\n};\n\nexport type BlockParameter = string;\n\n/**\n * Symbol instance layers represent an instance of a symbol source\n */\nexport type SymbolInstance = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n _class: 'symbolInstance';\n overrideValues: OverrideValue[];\n scale: number;\n symbolID: Uuid;\n verticalSpacing: number;\n horizontalSpacing: number;\n blockText?: string;\n blockParameters?: BlockParameter[];\n resolvedBlockData?: ResolvedBlockData;\n symbolIDIsFixed?: boolean;\n};\n/**\n * Defines an individual symbol override\n */\nexport type OverrideValue = {\n _class: 'overrideValue';\n do_objectID?: Uuid;\n overrideName: OverrideName;\n value:\n | boolean\n | string\n | string[]\n | Uuid\n | FileRef\n | DataRef\n | ResolvedBlockData\n | AnyLayer[];\n};\n\n/**\n * Slice layers allow the content beneath their frame to be exported\n */\nexport type Slice = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n _class: 'slice';\n hasBackgroundColor: boolean;\n backgroundColor: Color;\n};\n/**\n * Hotspot layers define clickable hotspots for use with prototypes\n */\nexport type Hotspot = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n _class: 'MSImmutableHotspotLayer';\n};\n/**\n * Bitmap layers house a single image\n */\nexport type Bitmap = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n _class: 'bitmap';\n fillReplacesImage: boolean;\n image: FileRef | DataRef;\n intendedDPI: number;\n clippingMask: PointListString;\n};\n/**\n * Defines a text style that has been imported from a library\n */\nexport type ForeignTextStyle = {\n _class: 'MSImmutableForeignTextStyle';\n libraryID: Uuid;\n sourceLibraryName: string;\n symbolPrivate: boolean;\n remoteStyleID: Uuid;\n localSharedStyle: SharedStyle;\n missingLibraryFontAcknowledged?: boolean;\n};\n/**\n * Defines a swatch that has been imported from a library\n */\nexport type ForeignSwatch = {\n _class: 'MSImmutableForeignSwatch';\n do_objectID: Uuid;\n libraryID: Uuid;\n sourceLibraryName: string;\n symbolPrivate: boolean;\n remoteSwatchID: Uuid;\n localSwatch: Swatch;\n};\n/**\n * Defines a swatch color variable.\n */\nexport type Swatch = {\n _class: 'swatch';\n do_objectID: Uuid;\n name: string;\n value: Color;\n};\n/**\n * Defines a document's list of reusable styles\n */\nexport type SharedStyleContainer = {\n do_objectID?: Uuid;\n _class: 'sharedStyleContainer';\n objects: SharedStyle[];\n};\n/**\n * Defines a document's list of reusable text styles\n */\nexport type SharedTextStyleContainer = {\n do_objectID?: Uuid;\n _class: 'sharedTextStyleContainer';\n objects: SharedStyle[];\n};\n/**\n * Legacy object only retained for migrating older documents.\n */\nexport type SymbolContainer = {\n do_objectID?: Uuid;\n _class: 'symbolContainer';\n objects: [];\n};\n/**\n * Defines a document's list of swatches\n */\nexport type SwatchContainer = {\n _class: 'swatchContainer';\n do_objectID?: Uuid;\n objects: Swatch[];\n};\n/**\n * Defines a reference to font data embedded in the document\n */\nexport type FontRef = {\n _class: 'fontReference';\n fontData: DataRef;\n fontFamilyName: string;\n fontFileName: string;\n options: number;\n postscriptNames: string[];\n};\n/**\n * Container for ephemeral document state. For now this is just a placeholder, and will see additions in future document versions.\n */\nexport type DocumentState = any;\n/**\n * Defines ephemeral patch information related to the Cloud collaborative editing feature. This information will only be found behind-the-scenes in Cloud documents and won't be relevant or visible to users parsing or generating their own Sketch documents.\n */\nexport type PatchInfo = {\n _class: 'MSImmutablePatchInfo';\n baseVersionID: Uuid;\n lastIntegratedPatchID: Uuid;\n localPatches: FileRef[];\n receivedPatches: FileRef[];\n};\n/**\n * Page layers are the top level organisational abstraction within a document\n */\nexport type Page = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n hasClickThrough: boolean;\n horizontalRulerData: RulerData;\n verticalRulerData: RulerData;\n layout?: LayoutGrid;\n grid?: SimpleGrid;\n groupLayout?: FreeformGroupLayout | InferredGroupLayout;\n _class: 'page';\n layers: (\n | Artboard\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolMaster\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | CustomLayer\n )[];\n};\n/**\n * Artboard layers are a document organisation aid. They have a fixed frame that usually map to variations of device dimensions or viewport sizes\n */\nexport type Artboard = {\n do_objectID: Uuid;\n booleanOperation: BooleanOperation;\n exportOptions: ExportOptions;\n frame: Rect;\n flow?: FlowConnection;\n isFixedToViewport: boolean;\n isFlippedHorizontal: boolean;\n isFlippedVertical: boolean;\n isLocked: boolean;\n isVisible: boolean;\n layerListExpandedType: LayerListExpanded;\n name: string;\n nameIsFixed: boolean;\n resizingConstraint: number;\n resizingType: ResizeType;\n rotation: number;\n sharedStyleID?: Uuid;\n shouldBreakMaskChain: boolean;\n hasClippingMask?: boolean;\n clippingMaskMode?: number;\n userInfo?: any;\n style?: Style;\n maintainScrollPosition?: boolean;\n hasClickThrough: boolean;\n horizontalRulerData: RulerData;\n verticalRulerData: RulerData;\n layout?: LayoutGrid;\n grid?: SimpleGrid;\n groupLayout?: FreeformGroupLayout | InferredGroupLayout;\n _class: 'artboard';\n backgroundColor: Color;\n hasBackgroundColor: boolean;\n includeBackgroundColorInExport: boolean;\n isFlowHome: boolean;\n resizesContent: boolean;\n presetDictionary?: any;\n layers: (\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | CustomLayer\n )[];\n};\n/**\n * Contains metadata about the Sketch file - information about pages and artboards appearing in the file, fonts used, the version of Sketch used to save the file etc.\n */\nexport type Meta = {\n commit: string;\n pagesAndArtboards: {\n [key: string]: {\n name: string;\n artboards: {\n [key: string]: {\n name: string;\n };\n };\n };\n };\n version:\n | 121\n | 122\n | 123\n | 124\n | 125\n | 126\n | 127\n | 128\n | 129\n | 130\n | 131\n | 132\n | 133\n | 134\n | 135\n | 136;\n compatibilityVersion: 99;\n coeditCompatibilityVersion?: number;\n app: BundleId;\n autosaved: NumericalBool;\n variant: SketchVariant;\n created: {\n commit: string;\n appVersion: string;\n build: number;\n app: BundleId;\n compatibilityVersion: number;\n coeditCompatibilityVersion?: number;\n version: number;\n variant: SketchVariant;\n };\n saveHistory: string[];\n appVersion: string;\n build: number;\n\n // Custom\n noya?: {\n projectDescription?: string;\n };\n};\n/**\n * Enumeration of the Apple bundle ids for the various variants of Sketch\n */\nexport enum BundleId {\n PublicRelease = 'com.bohemiancoding.sketch3',\n Beta = 'com.bohemiancoding.sketch3.beta',\n Private = 'com.bohemiancoding.sketch3.private',\n FeaturePreview = 'com.bohemiancoding.sketch3.feature-preview',\n Internal = 'com.bohemiancoding.sketch3.internal',\n Experimental = 'com.bohemiancoding.sketch3.experimental',\n Testing = 'com.bohemiancoding.sketch3.testing',\n}\n/**\n * A numerical boolean where 0 is false, and 1 is true.\n */\nexport enum NumericalBool {\n True = 0,\n False = 1,\n}\n/**\n * Enumeration of the Sketch variants\n */\nexport type SketchVariant =\n | 'NONAPPSTORE'\n | 'APPSTORE'\n | 'BETA'\n | 'PRIVATE'\n | 'FEATURE_PREVIEW'\n | 'INTERNAL'\n | 'EXPERIMENTAL'\n | 'TESTING'\n | 'UNITTEST';\nexport type User = {\n document: {\n pageListHeight: number;\n pageListCollapsed: NumericalBool;\n expandedSymbolPathsInSidebar?: [];\n expandedTextStylePathsInPopover?: [];\n libraryListCollapsed?: NumericalBool;\n };\n [key: string]: any;\n};\n/**\n * The workspace is a folder in the Sketch file archive that can contain arbitrary JSON files, allowing Sketch and 3rd party products and tools to store settings that should travel with the Sketch document. To avoid clashes or settings being overridden, select a unique name for your workspace file.\n */\nexport type Workspace = any;\n/**\n * This schema describes a representation of an expanded Sketch file, that is, a Sketch file that has been unzipped, all of its entries parsed to JSON and merged into a single object. A concrete example of an expanded sketch file is the return value of the `fromFile` function in `@sketch-hq/sketch-file`\n */\nexport type Contents = {\n document: {\n _class: 'document';\n do_objectID: Uuid;\n assets: AssetCollection;\n colorSpace: ColorSpace;\n currentPageIndex: number;\n foreignLayerStyles: ForeignLayerStyle[];\n foreignSymbols: ForeignSymbol[];\n foreignTextStyles: ForeignTextStyle[];\n foreignSwatches?: ForeignSwatch[];\n layerStyles: SharedStyleContainer;\n layerTextStyles: SharedTextStyleContainer;\n layerSymbols?: SymbolContainer;\n sharedSwatches?: SwatchContainer;\n fontReferences?: FontRef[];\n documentState?: DocumentState;\n patchInfo?: PatchInfo;\n pages: Page[];\n };\n meta: Meta;\n user: User;\n workspace?: Workspace;\n};\n/**\n * The document entry in a Sketch file.\n */\nexport type Document = {\n _class: 'document';\n do_objectID: Uuid;\n assets: AssetCollection;\n colorSpace: ColorSpace;\n currentPageIndex: number;\n foreignLayerStyles: ForeignLayerStyle[];\n foreignSymbols: ForeignSymbol[];\n foreignTextStyles: ForeignTextStyle[];\n foreignSwatches?: ForeignSwatch[];\n layerStyles: SharedStyleContainer;\n layerTextStyles: SharedTextStyleContainer;\n layerSymbols?: SymbolContainer;\n sharedSwatches?: SwatchContainer;\n fontReferences?: FontRef[];\n documentState?: DocumentState;\n patchInfo?: PatchInfo;\n pages: FileRef[];\n designSystem?: DesignSystem;\n};\nexport type DesignSystem = {\n id: string;\n type: 'standard' | 'custom';\n config?: DesignSystemThemeConfig;\n};\nexport type DesignSystemThemeConfig = {\n colorScheme?: 'light' | 'dark';\n primaryColor?: string;\n neutralColor?: string;\n};\n/**\n * Union of all layers\n */\nexport type AnyLayer =\n | SymbolMaster\n | Group\n | Oval\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | SymbolInstance\n | Slice\n | Hotspot\n | Bitmap\n | Page\n | Artboard\n | CustomLayer;\n/**\n * Union of all group layers\n */\nexport type AnyGroup = SymbolMaster | Group | ShapeGroup | Page | Artboard;\n/**\n * Union of all objects, i.e. objects with a _class property\n */\nexport type AnyObject =\n | AssetCollection\n | ImageCollection\n | ColorAsset\n | Color\n | GradientAsset\n | Gradient\n | GradientStop\n | FileRef\n | DataRef\n | ForeignLayerStyle\n | SharedStyle\n | Style\n | Border\n | GraphicsContextSettings\n | BorderOptions\n | Blur\n | Fill\n | Shader\n | ShaderVariable\n | TextStyle\n | ParagraphStyle\n | FontDescriptor\n | Shadow\n | InnerShadow\n | ColorControls\n | ForeignSymbol\n | SymbolMaster\n | ExportOptions\n | ExportFormat\n | Rect\n | FlowConnection\n | RulerData\n | LayoutGrid\n | SimpleGrid\n | FreeformGroupLayout\n | InferredGroupLayout\n | OverrideProperty\n | Group\n | Oval\n | CurvePoint\n | Polygon\n | Rectangle\n | ShapePath\n | Star\n | Triangle\n | ShapeGroup\n | Text\n | AttributedString\n | StringAttribute\n | SymbolInstance\n | OverrideValue\n | Slice\n | Hotspot\n | Bitmap\n | ForeignTextStyle\n | ForeignSwatch\n | Swatch\n | SharedStyleContainer\n | SharedTextStyleContainer\n | SymbolContainer\n | SwatchContainer\n | FontRef\n | PatchInfo\n | Page\n | Artboard\n | CustomLayer\n | NoyaElement;\n/**\n * Enum of all possible _class property values\n */\nexport enum ClassValue {\n MSImmutableColorAsset = 'MSImmutableColorAsset',\n MSImmutableFlowConnection = 'MSImmutableFlowConnection',\n MSImmutableForeignLayerStyle = 'MSImmutableForeignLayerStyle',\n MSImmutableForeignSwatch = 'MSImmutableForeignSwatch',\n MSImmutableForeignSymbol = 'MSImmutableForeignSymbol',\n MSImmutableForeignTextStyle = 'MSImmutableForeignTextStyle',\n MSImmutableFreeformGroupLayout = 'MSImmutableFreeformGroupLayout',\n MSImmutableGradientAsset = 'MSImmutableGradientAsset',\n MSImmutableHotspotLayer = 'MSImmutableHotspotLayer',\n MSImmutableInferredGroupLayout = 'MSImmutableInferredGroupLayout',\n MSImmutableOverrideProperty = 'MSImmutableOverrideProperty',\n MSImmutablePatchInfo = 'MSImmutablePatchInfo',\n MSJSONFileReference = 'MSJSONFileReference',\n MSJSONOriginalDataReference = 'MSJSONOriginalDataReference',\n Artboard = 'artboard',\n AssetCollection = 'assetCollection',\n AttributedString = 'attributedString',\n Bitmap = 'bitmap',\n Blur = 'blur',\n Border = 'border',\n BorderOptions = 'borderOptions',\n Color = 'color',\n ColorControls = 'colorControls',\n CurvePoint = 'curvePoint',\n ExportFormat = 'exportFormat',\n ExportOptions = 'exportOptions',\n Fill = 'fill',\n FontDescriptor = 'fontDescriptor',\n FontReference = 'fontReference',\n Gradient = 'gradient',\n GradientStop = 'gradientStop',\n GraphicsContextSettings = 'graphicsContextSettings',\n Group = 'group',\n ImageCollection = 'imageCollection',\n InnerShadow = 'innerShadow',\n LayoutGrid = 'layoutGrid',\n Oval = 'oval',\n OverrideValue = 'overrideValue',\n Page = 'page',\n ParagraphStyle = 'paragraphStyle',\n Polygon = 'polygon',\n Rect = 'rect',\n Rectangle = 'rectangle',\n RulerData = 'rulerData',\n Shader = 'shader',\n ShaderVariable = 'shaderVariable',\n Shadow = 'shadow',\n ShapeGroup = 'shapeGroup',\n ShapePath = 'shapePath',\n SharedStyle = 'sharedStyle',\n SharedStyleContainer = 'sharedStyleContainer',\n SharedTextStyleContainer = 'sharedTextStyleContainer',\n SimpleGrid = 'simpleGrid',\n Slice = 'slice',\n Star = 'star',\n StringAttribute = 'stringAttribute',\n Style = 'style',\n Swatch = 'swatch',\n SwatchContainer = 'swatchContainer',\n SymbolContainer = 'symbolContainer',\n SymbolInstance = 'symbolInstance',\n SymbolMaster = 'symbolMaster',\n Text = 'text',\n TextStyle = 'textStyle',\n Triangle = 'triangle',\n CustomLayer = 'customLayer',\n NoyaComponent = 'noyaComponent',\n NoyaElement = 'noyaElement',\n}\n/**\n * A mapping of class values to object types\n */\nexport type ClassMap = {\n triangle: Triangle;\n textStyle: TextStyle;\n text: Text;\n symbolMaster: SymbolMaster;\n symbolInstance: SymbolInstance;\n symbolContainer: SymbolContainer;\n swatchContainer: SwatchContainer;\n swatch: Swatch;\n style: Style;\n stringAttribute: StringAttribute;\n star: Star;\n slice: Slice;\n simpleGrid: SimpleGrid;\n sharedTextStyleContainer: SharedTextStyleContainer;\n sharedStyleContainer: SharedStyleContainer;\n sharedStyle: SharedStyle;\n shapePath: ShapePath;\n shapeGroup: ShapeGroup;\n shadow: Shadow;\n shaderVariable: ShaderVariable;\n shader: Shader;\n rulerData: RulerData;\n rectangle: Rectangle;\n rect: Rect;\n polygon: Polygon;\n paragraphStyle: ParagraphStyle;\n page: Page;\n overrideValue: OverrideValue;\n oval: Oval;\n layoutGrid: LayoutGrid;\n innerShadow: InnerShadow;\n imageCollection: ImageCollection;\n group: Group;\n graphicsContextSettings: GraphicsContextSettings;\n gradientStop: GradientStop;\n gradient: Gradient;\n fontReference: FontRef;\n fontDescriptor: FontDescriptor;\n fill: Fill;\n exportOptions: ExportOptions;\n exportFormat: ExportFormat;\n curvePoint: CurvePoint;\n colorControls: ColorControls;\n color: Color;\n borderOptions: BorderOptions;\n border: Border;\n blur: Blur;\n bitmap: Bitmap;\n attributedString: AttributedString;\n assetCollection: AssetCollection;\n artboard: Artboard;\n MSJSONOriginalDataReference: DataRef;\n MSJSONFileReference: FileRef;\n MSImmutablePatchInfo: PatchInfo;\n MSImmutableOverrideProperty: OverrideProperty;\n MSImmutableInferredGroupLayout: InferredGroupLayout;\n MSImmutableHotspotLayer: Hotspot;\n MSImmutableGradientAsset: GradientAsset;\n MSImmutableFreeformGroupLayout: FreeformGroupLayout;\n MSImmutableForeignTextStyle: ForeignTextStyle;\n MSImmutableForeignSymbol: ForeignSymbol;\n MSImmutableForeignSwatch: ForeignSwatch;\n MSImmutableForeignLayerStyle: ForeignLayerStyle;\n MSImmutableFlowConnection: FlowConnection;\n MSImmutableColorAsset: ColorAsset;\n customLayer: CustomLayer;\n noyaComponent: NoyaComponent;\n noyaElement: NoyaElement;\n};\n","import { Sketch } from \"@noya-app/noya-file-format\";\n// import { useSketchImage } from 'noya-renderer';\nimport * as React from \"react\";\nimport { useImageData } from \"../contexts/ImageDataContext\";\nimport { useObjectURL } from \"../hooks/useObjectURL\";\nimport { cssVars } from \"../theme\";\nimport { getGradientBackground } from \"../utils/getGradientBackground\";\nimport { sketchColorToRgbaString } from \"../utils/sketchColor\";\nimport { SketchPattern } from \"../utils/sketchPattern\";\n\nconst dotsHorizontalSvg = (fillColor: string) => `\n <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 15' fill='${fillColor}'>\n <path d='M3.625 7.5C3.625 8.12132 3.12132 8.625 2.5 8.625C1.87868 8.625 1.375 8.12132 1.375 7.5C1.375 6.87868 1.87868 6.375 2.5 6.375C3.12132 6.375 3.625 6.87868 3.625 7.5ZM8.625 7.5C8.625 8.12132 8.12132 8.625 7.5 8.625C6.87868 8.625 6.375 8.12132 6.375 7.5C6.375 6.87868 6.87868 6.375 7.5 6.375C8.12132 6.375 8.625 6.87868 8.625 7.5ZM12.5 8.625C13.1213 8.625 13.625 8.12132 13.625 7.5C13.625 6.87868 13.1213 6.375 12.5 6.375C11.8787 6.375 11.375 6.87868 11.375 7.5C11.375 8.12132 11.8787 8.625 12.5 8.625Z'></path>\n </svg>\n`;\n\nconst Background = React.memo(function Background({\n background,\n}: {\n background?: string;\n}) {\n return (\n <span\n className={`${background ? `bg-[${background}]` : \"bg-input-background\"} absolute inset-0`}\n />\n );\n});\n\nfunction getPatternSizeAndPosition(\n fillType: Sketch.PatternFillType,\n tileScale: number\n) {\n switch (fillType) {\n case Sketch.PatternFillType.Fit:\n return \"center / contain\";\n case Sketch.PatternFillType.Tile:\n return `top left / ${tileScale * 100}%`;\n case Sketch.PatternFillType.Fill:\n return \"center / cover\";\n case Sketch.PatternFillType.Stretch:\n return \"center / 100% 100%\";\n }\n}\n\nexport const PatternPreviewBackground = React.memo(\n function PatternPreviewBackground({\n fillType,\n tileScale,\n imageRef,\n }: {\n fillType: Sketch.PatternFillType;\n tileScale: number;\n imageRef: string;\n }) {\n const image = useImageData(imageRef);\n\n const url = useObjectURL(image);\n\n const size = getPatternSizeAndPosition(fillType, tileScale);\n\n const background = React.useMemo(\n () =>\n [\n size,\n `url(${url})`,\n fillType === Sketch.PatternFillType.Tile ? \"repeat\" : \"no-repeat\",\n ].join(\" \"),\n [fillType, size, url]\n );\n\n return <Background background={background} />;\n }\n);\n\nconst ColorPreviewBackground = React.memo(function ColorPreviewBackground({\n color,\n}: {\n color: Sketch.Color;\n}) {\n const background = React.useMemo(\n () => sketchColorToRgbaString(color),\n [color]\n );\n\n return <Background background={background} />;\n});\n\nconst GradientPreviewBackground = React.memo(\n function GradientPreviewBackground({\n gradient,\n }: {\n gradient: Sketch.Gradient;\n }) {\n const background = React.useMemo(\n () => getGradientBackground(gradient.stops, gradient.gradientType, 180),\n [gradient.gradientType, gradient.stops]\n );\n\n return <Background background={background} />;\n }\n);\n\ninterface Props {\n value?: Sketch.Color | Sketch.Gradient | SketchPattern;\n}\n\nconst background = `center url(\"data:image/svg+xml;utf8,${dotsHorizontalSvg(\n cssVars.colors.placeholderDots\n)}\") no-repeat`;\n\nexport const FillPreviewBackground = React.memo(function FillPreviewBackground({\n value,\n}: Props) {\n if (!value) return <Background background={background} />;\n\n switch (value._class) {\n case \"color\":\n return <ColorPreviewBackground color={value} />;\n case \"gradient\":\n return <GradientPreviewBackground gradient={value} />;\n case \"pattern\":\n if (!value.image) return null;\n\n return (\n <PatternPreviewBackground\n fillType={value.patternFillType}\n tileScale={value.patternTileScale}\n imageRef={value.image._ref}\n />\n );\n }\n});\n","import * as React from \"react\";\n\nexport type ImageDataContextValue = {\n getImageData: (ref: string) => ArrayBuffer | undefined;\n};\n\nconst ImageDataContext = React.createContext<ImageDataContextValue | undefined>(\n undefined\n);\n\nexport const ImageDataProvider = React.memo(function ImageDataProvider({\n children,\n getImageData,\n}: {\n children: React.ReactNode;\n getImageData?: (ref: string) => ArrayBuffer | undefined;\n}) {\n const contextValue = React.useMemo(\n () => ({ getImageData: getImageData ?? (() => undefined) }),\n [getImageData]\n );\n\n return (\n <ImageDataContext.Provider value={contextValue}>\n {children}\n </ImageDataContext.Provider>\n );\n});\n\nexport function useImageData(ref: string): ArrayBuffer | undefined {\n const value = React.useContext(ImageDataContext);\n\n if (!value) {\n throw new Error(\"Missing ImageDataProvider\");\n }\n\n return value.getImageData(ref);\n}\n","import { useLayoutEffect, useMemo } from 'react';\n\nexport function useObjectURL(object?: ArrayBuffer | Uint8Array | Blob) {\n const objectURL = useMemo(() => {\n if (object instanceof Blob) return URL.createObjectURL(object);\n\n const bytes =\n object instanceof Uint8Array\n ? object\n : object !== undefined\n ? new Uint8Array(object)\n : new Uint8Array();\n\n return URL.createObjectURL(new Blob([bytes]));\n }, [object]);\n\n useLayoutEffect(() => {\n return () => URL.revokeObjectURL(objectURL);\n }, [objectURL]);\n\n return objectURL;\n}\n","import {\n hsvaToRgbaString,\n RgbaColor,\n rgbaToHex,\n rgbaToHsva,\n} from '@noya-app/noya-colorpicker';\nimport type { Sketch } from '@noya-app/noya-file-format';\n\nexport function sketchColorToRgba(value: Sketch.Color): RgbaColor {\n return {\n r: Math.floor(value.red * 255),\n g: Math.floor(value.green * 255),\n b: Math.floor(value.blue * 255),\n a: value.alpha,\n };\n}\n\nexport function sketchColorToRgbaString(value: Sketch.Color): string {\n return hsvaToRgbaString(rgbaToHsva(sketchColorToRgba(value)));\n}\n\nexport function rgbaToSketchColor(value: RgbaColor): Sketch.Color {\n return {\n _class: 'color',\n alpha: value.a,\n red: value.r / 255,\n green: value.g / 255,\n blue: value.b / 255,\n };\n}\n\nexport function sketchColorToHex(value: Sketch.Color): string {\n return rgbaToHex(sketchColorToRgba(value)).toUpperCase();\n}\n","import { Sketch } from \"@noya-app/noya-file-format\";\nimport { sketchColorToRgbaString } from \"./sketchColor\";\n\nconst getRGBAColor = (value: Sketch.GradientStop[], num: 100 | 360) =>\n [...value]\n .sort((a, b) => a.position - b.position)\n .map(\n (g) =>\n `${sketchColorToRgbaString(g.color)} ${g.position * num}${\n num === 100 ? \"%\" : \"deg\"\n }`\n )\n .join(\", \\n\");\n\nexport function getGradientBackground(\n value: Sketch.GradientStop[],\n type: Sketch.GradientType,\n direction?: number\n) {\n if (type === Sketch.GradientType.Angular) {\n return `conic-gradient(${getRGBAColor(value, 360)})`;\n }\n\n const color = getRGBAColor(value, 100);\n const position =\n type === Sketch.GradientType.Radial\n ? \"radial-gradient(circle\"\n : `linear-gradient(${direction !== undefined ? direction : 180}deg`;\n\n return `${position}, ${color})`;\n}\n","import {\n cssVars,\n Divider,\n IconButton,\n Small,\n useCurrentFloatingWindowInternal,\n useFloatingWindowManager,\n} from \"@noya-app/noya-designsystem\";\nimport React, { useCallback, useRef, useState } from \"react\";\n\ninterface FloatingWindowProps {\n title?: string;\n onClose?: () => void;\n children: React.ReactNode;\n initialWidth?: number;\n initialHeight?: number;\n initialX?: number;\n initialY?: number;\n minWidth?: number;\n minHeight?: number;\n toolbarContent?: React.ReactNode;\n renderToolbar?: (props: {\n title?: string;\n toolbarContent?: React.ReactNode;\n onClose?: () => void;\n }) => React.ReactNode;\n}\n\nconst styles = {\n noSelect: {\n userSelect: \"none\",\n WebkitUserSelect: \"none\",\n MozUserSelect: \"none\",\n msUserSelect: \"none\",\n },\n windowWrapper: {\n position: \"absolute\",\n backgroundColor: \"white\",\n borderRadius: \"4px\",\n boxShadow: \"0 2px 10px rgba(0, 0, 0, 0.1)\",\n overflow: \"hidden\",\n // backdropFilter: \"blur(10px)\",\n },\n toolbar: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"8px 12px\",\n cursor: \"move\",\n userSelect: \"none\",\n minHeight: \"43px\",\n },\n closeButton: {\n background: \"none\",\n border: \"none\",\n fontSize: \"16px\",\n cursor: \"pointer\",\n },\n content: {\n padding: \"12px\",\n height: \"calc(100% - 44px)\", // Adjust based on toolbar height\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n resizeHandle: {\n position: \"absolute\",\n },\n} as const;\n\nconst resizeHandlePositions = {\n top: { top: \"0\", left: \"0\", right: \"0\", height: \"5px\", cursor: \"ns-resize\" },\n right: {\n top: \"0\",\n right: \"0\",\n bottom: \"0\",\n width: \"5px\",\n cursor: \"ew-resize\",\n },\n bottom: {\n bottom: \"0\",\n left: \"0\",\n right: \"0\",\n height: \"5px\",\n cursor: \"ns-resize\",\n },\n left: { top: \"0\", left: \"0\", bottom: \"0\", width: \"5px\", cursor: \"ew-resize\" },\n topLeft: {\n top: \"0\",\n left: \"0\",\n width: \"10px\",\n height: \"10px\",\n cursor: \"nwse-resize\",\n },\n topRight: {\n top: \"0\",\n right: \"0\",\n width: \"10px\",\n height: \"10px\",\n cursor: \"nesw-resize\",\n },\n bottomLeft: {\n bottom: \"0\",\n left: \"0\",\n width: \"10px\",\n height: \"10px\",\n cursor: \"nesw-resize\",\n },\n bottomRight: {\n bottom: \"0\",\n right: \"0\",\n width: \"10px\",\n height: \"10px\",\n cursor: \"nwse-resize\",\n },\n};\n\nfunction defaultRenderToolbar({\n title,\n toolbarContent,\n onClose,\n}: {\n title?: string;\n toolbarContent?: React.ReactNode;\n onClose?: () => void;\n}) {\n return (\n <>\n <Small className=\"flex-1 font-medium text-text\">{title}</Small>\n {toolbarContent}\n <IconButton\n iconName=\"Cross3Icon\"\n className=\"h-8 w-8 rounded-full\"\n onClick={onClose}\n size={20}\n style={{\n marginLeft: \"6px\",\n marginRight: \"-6px\",\n }}\n />\n </>\n );\n}\n\nexport const FloatingWindow: React.FC<FloatingWindowProps> = ({\n title,\n onClose,\n children,\n initialWidth = 300,\n initialHeight = 200,\n initialX = 100,\n initialY = 100,\n minWidth = 200,\n minHeight = 100,\n toolbarContent,\n renderToolbar = defaultRenderToolbar,\n}) => {\n const [position, setPosition] = useState({ x: initialX, y: initialY });\n const [size, setSize] = useState({\n width: initialWidth,\n height: initialHeight,\n });\n const [isDragging, setIsDragging] = useState(false);\n const [isResizing, setIsResizing] = useState(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n const [resizeDirection, setResizeDirection] = useState<string | null>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const toggleGlobalTextSelection = (disable: boolean) => {\n if (disable) {\n document.body.style.userSelect = \"none\";\n } else {\n document.body.style.userSelect = \"\";\n }\n };\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (!wrapperRef.current) return;\n\n const rect = wrapperRef.current.getBoundingClientRect();\n setDragOffset({\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n });\n setIsDragging(true);\n }, []);\n\n const handleResizeStart = useCallback(\n (direction: string) => (e: React.MouseEvent) => {\n e.stopPropagation();\n setIsResizing(true);\n setResizeDirection(direction);\n toggleGlobalTextSelection(true);\n },\n []\n );\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (isDragging) {\n setPosition({\n x: e.clientX - dragOffset.x,\n y: e.clientY - dragOffset.y,\n });\n } else if (isResizing && resizeDirection) {\n const rect = wrapperRef.current!.getBoundingClientRect();\n\n let newWidth = size.width;\n let newHeight = size.height;\n let newX = position.x;\n let newY = position.y;\n\n if (/right/i.test(resizeDirection)) {\n newWidth = Math.max(e.clientX - rect.left, minWidth);\n }\n if (/bottom/i.test(resizeDirection)) {\n newHeight = Math.max(e.clientY - rect.top, minHeight);\n }\n if (/left/i.test(resizeDirection)) {\n const potentialWidth = rect.right - e.clientX;\n if (potentialWidth <= minWidth) {\n newWidth = minWidth;\n newX = rect.right - minWidth;\n } else {\n newWidth = potentialWidth;\n newX = e.clientX;\n }\n }\n if (/top/i.test(resizeDirection)) {\n const potentialHeight = rect.bottom - e.clientY;\n if (potentialHeight <= minHeight) {\n newHeight = minHeight;\n newY = rect.bottom - minHeight;\n } else {\n newHeight = potentialHeight;\n newY = e.clientY;\n }\n }\n\n setSize({ width: newWidth, height: newHeight });\n setPosition({ x: newX, y: newY });\n }\n },\n [\n isDragging,\n isResizing,\n dragOffset,\n resizeDirection,\n size,\n position,\n minWidth,\n minHeight,\n ]\n );\n\n const handleMouseUp = useCallback((_e: MouseEvent) => {\n setIsDragging(false);\n setIsResizing(false);\n setResizeDirection(null);\n toggleGlobalTextSelection(false);\n }, []);\n\n React.useEffect(() => {\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [handleMouseMove, handleMouseUp]);\n\n const floatingWindowManager = useFloatingWindowManager();\n const currentFloatingWindow = useCurrentFloatingWindowInternal();\n\n const handleClose = useCallback(() => {\n if (onClose) onClose();\n floatingWindowManager.closeWindow(currentFloatingWindow.id);\n }, [currentFloatingWindow.id, floatingWindowManager, onClose]);\n\n return (\n <div\n ref={wrapperRef}\n style={{\n ...styles.windowWrapper,\n top: position.y,\n left: position.x,\n width: size.width,\n height: size.height,\n outline: `1px solid ${cssVars.colors.divider}`,\n backgroundColor: cssVars.colors.background,\n zIndex: cssVars.zIndex.menu,\n }}\n >\n <div\n style={{\n ...styles.toolbar,\n backgroundColor: cssVars.colors.sidebarBackground,\n }}\n onMouseDown={handleMouseDown}\n >\n {renderToolbar({ title, toolbarContent, onClose: handleClose })}\n </div>\n <Divider />\n <div style={styles.content}>{children}</div>\n {Object.entries(resizeHandlePositions).map(([direction, style]) => (\n <div\n key={direction}\n style={{ ...styles.resizeHandle, ...style }}\n onMouseDown={handleResizeStart(direction)}\n />\n ))}\n </div>\n );\n};\n","import {\n Alpha,\n ColorModel,\n Gradient,\n Hue,\n ColorPicker as NoyaColorPicker,\n RgbaColor,\n Saturation,\n equalColorObjects,\n hsvaToRgba,\n rgbaToHsva,\n} from \"@noya-app/noya-colorpicker\";\nimport type { Sketch } from \"@noya-app/noya-file-format\";\nimport * as React from \"react\";\nimport { Spacer } from \"../components/Spacer\";\nimport { rgbaToSketchColor, sketchColorToRgba } from \"../utils/sketchColor\";\n\ninterface Props {\n value: Sketch.GradientStop[];\n selectedStop: number;\n onChangeColor: (color: Sketch.Color) => void;\n onChangePosition: (position: number) => void;\n onAdd: (color: Sketch.Color, position: number) => void;\n onDelete: () => void;\n onSelectStop: (index: number) => void;\n}\n\nexport const GradientPicker = React.memo(function GradientPicker({\n value,\n selectedStop,\n onChangeColor,\n onChangePosition,\n onAdd,\n onDelete,\n onSelectStop,\n}: Props) {\n const colorModel: ColorModel<RgbaColor> = React.useMemo(\n () => ({\n defaultColor: { r: 0, g: 0, b: 0, a: 1 },\n toHsva: rgbaToHsva,\n fromHsva: hsvaToRgba,\n equal: equalColorObjects,\n }),\n []\n );\n\n const rgbaColor = React.useMemo(\n () => sketchColorToRgba(value[selectedStop].color),\n [value, selectedStop]\n );\n\n const handleChangeColor = React.useCallback(\n (value: RgbaColor) => {\n onChangeColor(rgbaToSketchColor(value));\n },\n [onChangeColor]\n );\n\n const handleAddGradientStop = React.useCallback(\n (value: RgbaColor, position: number) => {\n onAdd(rgbaToSketchColor(value), position);\n },\n [onAdd]\n );\n\n return (\n <NoyaColorPicker\n onChange={handleChangeColor}\n colorModel={colorModel}\n color={rgbaColor}\n >\n <Gradient\n gradients={value}\n selectedStop={selectedStop}\n onSelectStop={onSelectStop}\n onChangePosition={onChangePosition}\n onAdd={handleAddGradientStop}\n onDelete={onDelete}\n />\n <Spacer.Vertical size={10} />\n <Saturation />\n <Spacer.Vertical size={12} />\n <Hue />\n <Spacer.Vertical size={5} />\n <Alpha />\n </NoyaColorPicker>\n );\n});\n","import {\n cssVars,\n Divider,\n ScrollArea,\n withSeparatorElements,\n} from \"@noya-app/noya-designsystem\";\nimport React, { forwardRef, memo } from \"react\";\n\nexport const InspectorContainer = memo(\n forwardRef(function InspectorContainer(\n {\n header,\n children,\n fallback,\n showDividers,\n id,\n className,\n style,\n }: {\n header?: React.ReactNode;\n children?: React.ReactNode;\n fallback?: React.ReactNode;\n showDividers?: boolean;\n id?: string;\n className?: string;\n style?: React.CSSProperties;\n },\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n ) {\n return (\n <div\n ref={forwardedRef}\n id={id}\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n background: cssVars.colors.sidebarBackground,\n ...style,\n }}\n >\n {header}\n {children ? (\n <ScrollArea>\n <div className=\"flex flex-col relative\">\n {showDividers\n ? withSeparatorElements(children, <Divider />)\n : children}\n </div>\n </ScrollArea>\n ) : fallback ? (\n <div className=\"flex flex-col relative h-full\">{fallback}</div>\n ) : null}\n </div>\n );\n })\n);\n","import * as kiwi from \"kiwi.js\";\nimport * as React from \"react\";\n\ninterface ContainerProps {\n children: React.ReactNode;\n renderLabel: (provided: { id: string; index: number }) => React.ReactNode;\n}\n\nexport const LabeledElementView = React.memo(function LabeledElementView({\n children,\n renderLabel,\n}: ContainerProps) {\n const elementIds: string[] = React.Children.toArray(children)\n .flatMap((child) =>\n React.isValidElement(child) && child.type === React.Fragment\n ? (child.props.children as React.ReactNode[])\n : [child]\n )\n .map((child) =>\n React.isValidElement(child) && \"id\" in child.props ? child.props.id : null\n )\n .filter((id) => !!id);\n const serializedIds = elementIds.join(\",\");\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n\n const refs = React.useMemo(() => {\n return Object.fromEntries(\n serializedIds\n .split(\",\")\n .map((id) => [id, React.createRef<HTMLSpanElement>()])\n );\n }, [serializedIds]);\n\n const labelElements = React.useMemo(() => {\n return serializedIds.split(\",\").map((id, index) => (\n <span\n key={id}\n ref={refs[id]}\n style={{ position: \"absolute\", left: `var(--x-offset)` }}\n >\n {renderLabel({\n id,\n index,\n })}\n </span>\n ));\n }, [refs, serializedIds, renderLabel]);\n\n React.useLayoutEffect(() => {\n if (!containerRef.current) return;\n\n const containerRect = containerRef.current.getBoundingClientRect();\n\n const solver = new kiwi.Solver();\n const variables: kiwi.Variable[] = [];\n const heights: number[] = [];\n\n Object.entries(refs).forEach(([id, ref], index, list) => {\n if (!ref.current) return;\n\n // console.log('id', id, ref, index);\n\n const targetElement = document.getElementById(id)!;\n const targetRect = targetElement.getBoundingClientRect();\n targetRect.x = targetElement.offsetLeft;\n const labelRect = ref.current.getBoundingClientRect();\n labelRect.x = ref.current.offsetLeft;\n\n // console.log(id, labelRect, ref.current.offsetLeft);\n\n heights.push(labelRect.height);\n\n const targetMidXValue = targetRect.x + targetRect.width / 2;\n\n const labelMidX = new kiwi.Variable();\n solver.addEditVariable(labelMidX, kiwi.Strength.weak);\n solver.addConstraint(\n new kiwi.Constraint(\n new kiwi.Expression(labelMidX),\n kiwi.Operator.Eq,\n new kiwi.Expression(targetMidXValue),\n kiwi.Strength.strong\n )\n );\n\n if (index === 0) {\n solver.addConstraint(\n new kiwi.Constraint(\n new kiwi.Expression(labelMidX),\n kiwi.Operator.Ge,\n new kiwi.Expression(labelRect.width / 2),\n kiwi.Strength.required\n )\n );\n }\n\n // if (index > 0) {\n // solver.addConstraint(\n // new kiwi.Constraint(\n // new kiwi.Expression(variables[index - 1]),\n // kiwi.Operator.Le,\n // new kiwi.Expression(labelRect.width / 2),\n // kiwi.Strength.required\n // )\n // );\n // }\n\n if (index === list.length - 1) {\n // console.log(\n // labelMidX.value(),\n // containerRect.width,\n // containerRect.width - labelRect.width / 2,\n // );\n solver.addConstraint(\n new kiwi.Constraint(\n new kiwi.Expression(labelMidX),\n kiwi.Operator.Le,\n new kiwi.Expression(containerRect.width - labelRect.width / 2),\n kiwi.Strength.required\n )\n );\n }\n\n solver.suggestValue(labelMidX, labelRect.x + labelRect.width / 2);\n\n variables.push(labelMidX);\n });\n\n solver.updateVariables();\n\n Object.entries(refs).forEach(([_id, ref], index) => {\n if (!ref.current) return;\n\n // console.log(id, variables[index].value());\n\n const labelRect = ref.current.getBoundingClientRect();\n\n ref.current.style.setProperty(\n \"--x-offset\",\n `${variables[index].value() - labelRect.width / 2}px`\n );\n });\n\n containerRef.current.style.setProperty(\n \"--height\",\n `${Math.max(...heights)}px`\n );\n }, [refs, labelElements]);\n\n return (\n <div className=\"flex flex-1 flex-col relative\" ref={containerRef}>\n <div className=\"flex flex-1 items-center\">{children}</div>\n <div className=\"relative overflow-hidden select-none\">\n {labelElements}\n </div>\n </div>\n );\n});\n","import React, { memo, useMemo } from \"react\";\nimport { useIndent } from \"../hooks/useIndent\";\nimport {\n LabelContext,\n LabelPositionContext,\n LabelPositionContextValue,\n useLabelPosition,\n useLabelWidth,\n} from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\nimport { Label, LabelPosition } from \"./Label\";\n\nexport const labeledFieldStyles = (labelPosition?: LabelPosition) =>\n cx(\n \"flex flex-row flex-1 flex-wrap items-center gap-x-1.5\",\n labelPosition === \"end\" && \"flex-row-reverse justify-end\",\n labelPosition === \"above\" && \"flex-col items-stretch justify-start\"\n );\n\nconst labelPositionInset: LabelPositionContextValue = {\n position: \"inset\",\n};\n\nexport const LabeledField = memo(function LabeledField({\n children,\n label,\n labelPosition: labelPositionProp,\n fieldId,\n minWidth = 100,\n className,\n style,\n labelStyle: labelStyleProp,\n ...props\n}: {\n children: React.ReactNode;\n label: React.ReactNode;\n labelPosition?: LabelPosition;\n labelStyle?: React.CSSProperties;\n /** Used for both the `id` of the field and the `htmlFor` of the label, unless `id` and `htmlFor` are explicitly provided */\n fieldId?: string;\n className?: string;\n style?: React.CSSProperties;\n /** @default 100 */\n minWidth?: number;\n}) {\n const indentLevel = useIndent();\n const labelWidthFromContext = useLabelWidth();\n const labelWidth = labelWidthFromContext ?? minWidth;\n\n const labelPositionFromContext = useLabelPosition();\n const labelPosition =\n labelPositionProp ?? labelPositionFromContext ?? \"start\";\n\n const labeledFieldClasses = useMemo(\n () => labeledFieldStyles(labelPosition),\n [labelPosition]\n );\n\n const labelContextValue = useMemo(\n () => ({ fieldId, label }),\n [fieldId, label]\n );\n\n const indentStyle = useMemo(\n () => ({\n width: indentLevel * 8,\n flexBasis: indentLevel * 8,\n flexShrink: 0,\n flexGrow: 0,\n }),\n [indentLevel]\n );\n\n const fieldStyle = useMemo(\n () => ({\n minWidth: `calc(100% - ${labelWidth + indentLevel * 8 + 6}px)`,\n }),\n [labelWidth, indentLevel]\n );\n\n const labelStyle = useMemo(\n () => ({\n minWidth: `calc(${labelWidth}px - ${indentLevel * 8}px)`,\n ...labelStyleProp,\n }),\n [labelWidth, indentLevel, labelStyleProp]\n );\n\n return (\n <LabelContext.Provider value={labelContextValue}>\n {/* let components individually handle inset labels using info from context*/}\n {labelPosition === \"inset\" ? (\n <LabelPositionContext.Provider value={labelPositionInset}>\n {children}\n </LabelPositionContext.Provider>\n ) : (\n <div className={cx(\"flex relative flex-1\", className)} style={style}>\n {Boolean(indentLevel) && <div style={indentStyle} />}\n <div className={labeledFieldClasses}>\n <Label\n htmlFor={fieldId}\n // we do this so presence avatars are aligned to the right when position is above\n // and when start/end position with textarea it aligns label to the top of the field\n className={\n labelPosition === \"start\" || labelPosition === \"end\"\n ? \"self-start\"\n : undefined\n }\n style={labelStyle}\n {...props}\n >\n {label}\n </Label>\n {labelPosition === \"start\" ? (\n <div className=\"flex-auto flex\" style={fieldStyle}>\n {children}\n </div>\n ) : (\n children\n )}\n </div>\n </div>\n )}\n </LabelContext.Provider>\n );\n});\n","import React from \"react\";\n\nexport const IndentContext = React.createContext<{\n indentLevel: number;\n}>({\n indentLevel: 0,\n});\n\nexport const useIndent = () => {\n const { indentLevel } = React.useContext(IndentContext);\n return indentLevel;\n};\n","import {\n FileIcon,\n ImageIcon,\n SpeakerLoudIcon,\n VideoIcon,\n} from \"@noya-app/noya-icons\";\nimport React, { memo, useMemo } from \"react\";\nimport { cssVars } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { CollectionItemSize } from \"./Collection\";\nimport { IconName, Icons } from \"./Icons\";\nimport { fileExtensions, fileNames } from \"./catppuccin/fileIcons\";\n\ntype ColorScheme = \"primary\" | \"secondary\" | \"icon\" | \"warning\";\n\ntype AssetType = \"image\" | \"video\" | \"audio\";\n\nconst getAssetType = (contentType?: string): AssetType | undefined => {\n if (!contentType) return undefined;\n if (contentType.startsWith(\"image/\")) return \"image\";\n if (contentType.startsWith(\"video/\")) return \"video\";\n if (contentType.startsWith(\"audio/\")) return \"audio\";\n return undefined;\n};\n\ntype MediaThumbnailProps = {\n contentType?: string;\n url?: string;\n selected?: boolean;\n className?: string;\n /** Color scheme for the thumbnail. Affects icon color and background.\n * @default \"icon\"\n */\n colorScheme?: ColorScheme;\n /**\n * If provided, use this icon instead of the default one for the asset type\n */\n iconName?: IconName;\n size?: CollectionItemSize;\n\n fileName?: string;\n};\n\nexport const getThumbnailColors = (\n colorScheme: ColorScheme,\n selected: boolean\n) => {\n if (selected) {\n return {\n icon: cssVars.colors.selectedListItemText,\n background: cssVars.colors.selectedListItemIconBackground,\n };\n }\n\n switch (colorScheme) {\n case \"primary\":\n return {\n icon: cssVars.colors.primary,\n background: cssVars.colors.listViewThumbnailBackground,\n };\n case \"secondary\":\n return {\n icon: cssVars.colors.secondary,\n background: cssVars.colors.secondaryPastel,\n };\n case \"warning\":\n return {\n icon: cssVars.colors.warning,\n background: cssVars.colors.listViewThumbnailBackground,\n };\n case \"icon\":\n default:\n return {\n icon: cssVars.colors.icon,\n background: cssVars.colors.listViewThumbnailBackground,\n };\n }\n};\n\nexport const MediaThumbnail = memo(function MediaThumbnail({\n contentType: contentTypeProp,\n selected = false,\n className,\n colorScheme = \"icon\",\n url,\n iconName,\n size = \"medium\",\n fileName,\n}: MediaThumbnailProps) {\n const { icon: iconColor, background: backgroundColor } = getThumbnailColors(\n colorScheme,\n selected\n );\n const contentType = getAssetType(contentTypeProp);\n const iconStyles = useMemo(\n () => ({\n width: iconSizeMap[size],\n height: iconSizeMap[size],\n }),\n [size]\n );\n\n const content = useMemo(() => {\n switch (contentType) {\n case \"image\":\n if (!url) return <ImageIcon color={iconColor} style={iconStyles} />;\n\n return (\n <img\n src={url}\n alt=\"\"\n className=\"object-contain w-full h-full\"\n tabIndex={-1}\n />\n );\n case \"video\":\n return <VideoIcon color={iconColor} style={iconStyles} />;\n case \"audio\":\n return <SpeakerLoudIcon color={iconColor} style={iconStyles} />;\n default:\n if (iconName) {\n const Icon = Icons[iconName];\n return <Icon color={iconColor} style={iconStyles} />;\n }\n\n if (fileName) {\n const fileIcon = findFileIcon(fileName);\n if (fileIcon) {\n return (\n <img\n src={`https://api.iconify.design/catppuccin/${fileIcon}.svg?height=none&box=1`}\n alt=\"\"\n className=\"w-4 h-4\"\n />\n );\n }\n }\n\n return <FileIcon color={iconColor} style={iconStyles} />;\n }\n }, [contentType, url, iconColor, iconStyles, iconName, fileName]);\n\n return (\n <div\n className={cx(\n \"w-full h-full justify-center flex items-center aspect-square\",\n className\n )}\n style={{ backgroundColor }}\n >\n {content}\n </div>\n );\n});\n\nconst iconSizeMap: Record<CollectionItemSize, number | string> = {\n xxs: 12,\n xs: 12,\n small: 12,\n medium: \"max(15px, 20%)\",\n mediumLarge: \"max(15px, 20%)\",\n large: \"max(15px, 20%)\",\n xl: \"max(15px, 20%)\",\n};\n\nfunction findFileIcon(fileName: string) {\n const fileIcon = fileNames[fileName];\n if (fileIcon) return fileIcon;\n const fileExtensionIndex = fileName.lastIndexOf(\".\");\n if (fileExtensionIndex === -1) return undefined;\n const fileExtension = fileName.slice(fileExtensionIndex + 1);\n const fileExtensionIcon = fileExtensions[fileExtension];\n return fileExtensionIcon;\n}\n","// (MIT) https://github.com/catppuccin/vscode-icons/blob/9170f26fd312132af22d057ee55229e1ba58ebb6/src/defaults/fileIcons.ts\n\n/**\n * Default file icon associations\n * Keys are icon file basenames\n */\n\ntype FileIcons = Record<\n string,\n {\n languageIds?: Array<string>;\n fileExtensions?: Array<string>;\n fileNames?: Array<string>;\n }\n>;\n\n// @keep-sorted\nconst fileIcons: FileIcons = {\n \"adobe-ae\": {\n fileExtensions: [\"aep\"],\n },\n \"adobe-ai\": {\n fileExtensions: [\"ai\"],\n },\n \"adobe-id\": {\n fileExtensions: [\"indd\", \"indl\", \"indb\"],\n },\n \"adobe-ps\": {\n fileExtensions: [\"psd\", \"psb\"],\n },\n \"adobe-xd\": {\n fileExtensions: [\"xd\"],\n },\n adonis: {\n fileNames: [\".adonisrc.json\", \"ace\"],\n },\n alex: {\n fileNames: [\".alexrc\", \".alexrc.yaml\", \".alexrc.yml\", \".alexrc.js\"],\n },\n amber: {\n languageIds: [\"amber\"],\n fileExtensions: [\"ab\", \"amber\"],\n },\n android: {\n fileNames: [\"androidmanifest.xml\"],\n fileExtensions: [\"apk\", \"smali\", \"dex\"],\n },\n angular: {\n fileExtensions: [\"ng-template\"],\n fileNames: [\n \"angular-cli.json\",\n \".angular-cli.json\",\n \"angular.json\",\n \"ng-package.json\",\n ],\n },\n \"ansible-lint\": {\n fileNames: [\".ansible-lint\", \"ansible-lint.yml\", \"ansible-lint.yaml\"],\n },\n antlr: {\n fileExtensions: [\"g4\"],\n },\n apache: {\n fileNames: [\"maven.config\", \"jvm.config\", \"pom.xml\"],\n fileExtensions: [\"thrift\"],\n },\n \"api-blueprint\": {\n fileExtensions: [\"apib\", \"apiblueprint\"],\n },\n apollo: {\n fileNames: [\"apollo.config.js\", \"apollo.config.ts\"],\n },\n apple: {\n fileNames: [\n \".ds_store\",\n \"apple-app-site-association\",\n \"apple-developer-merchantid-domain-association\",\n ],\n },\n asciidoc: {\n fileExtensions: [\"adoc\", \"asciidoc\", \"asc\"],\n },\n assembly: {\n fileExtensions: [\n \"asm\",\n \"a51\",\n \"inc\",\n \"nasm\",\n \"s\",\n \"ms\",\n \"agc\",\n \"ags\",\n \"aea\",\n \"argus\",\n \"mitigus\",\n \"binsource\",\n ],\n },\n \"astro-config\": {\n fileNames: [\n \"astro.config.js\",\n \"astro.config.mjs\",\n \"astro.config.cjs\",\n \"astro.config.ts\",\n \"astro.config.cts\",\n \"astro.config.mts\",\n ],\n },\n astro: {\n fileExtensions: [\"astro\"],\n languageIds: [\"astro\"],\n },\n audio: {\n fileExtensions: [\n \"aac\",\n \"aiff\",\n \"alac\",\n \"flac\",\n \"m4a\",\n \"m4p\",\n \"mogg\",\n \"mp3\",\n \"oga\",\n \"opus\",\n \"wav\",\n \"wma\",\n \"wv\",\n ],\n },\n autohotkey: {\n fileExtensions: [\"ahk\"],\n languageIds: [\"ahk\"],\n },\n \"azure-pipelines\": {\n fileNames: [\n \"azure-pipelines.yml\",\n \"azure-pipelines.yaml\",\n \"azure-pipelines-main.yml\",\n \"azure-pipelines-main.yaml\",\n ],\n fileExtensions: [\n \"azure-pipelines.yml\",\n \"azure-pipelines.yaml\",\n \"azure-pipelines-main.yml\",\n \"azure-pipelines-main.yaml\",\n ],\n },\n babel: {\n fileNames: [\n \".babelrc\",\n \".babelrc.cjs\",\n \".babelrc.js\",\n \".babelrc.mjs\",\n \".babelrc.json\",\n \"babel.config.cjs\",\n \"babel.config.js\",\n \"babel.config.mjs\",\n \"babel.config.json\",\n \"babel-transform.js\",\n \".babel-plugin-macrosrc\",\n \".babel-plugin-macrosrc.json\",\n \".babel-plugin-macrosrc.yaml\",\n \".babel-plugin-macrosrc.yml\",\n \".babel-plugin-macrosrc.js\",\n \"babel-plugin-macros.config.js\",\n ],\n },\n bash: {\n languageIds: [\"awk\", \"shellscript\"],\n fileExtensions: [\"sh\", \"ksh\", \"csh\", \"tcsh\", \"zsh\", \"bash\", \"awk\", \"fish\"],\n fileNames: [\n \"applypatch-msg\",\n \"pre-applypatch\",\n \"post-applypatch\",\n \"pre-commit\",\n \"prepare-commit-message\",\n \"commit-msg\",\n \"post-commit\",\n \"pre-rebase\",\n \"post-checkout\",\n \"post-merge\",\n \"pre-receive\",\n \"update\",\n \"post-receive\",\n \"post-update\",\n \"pre-auto-gc\",\n \"post-rewrite\",\n \"pre-push\",\n ],\n },\n batch: {\n languageIds: [\"bat\"],\n fileExtensions: [\"bat\", \"cmd\"],\n },\n bazel: {\n fileExtensions: [\"bzl\", \"bazel\"],\n fileNames: [\".bazelrc\"],\n },\n benchmark: {\n fileNames: [\n \"benchmark.md\",\n \"benchmark.rst\",\n \"benchmark.txt\",\n \"benchmarks.md\",\n \"benchmarks.rst\",\n \"benchmarks.txt\",\n ],\n },\n binary: {\n languageIds: [\"code-text-binary\"],\n fileExtensions: [\"bin\"],\n },\n biome: {\n fileNames: [\"biome.json\", \"biome.jsonc\"],\n },\n bitbucket: {\n fileNames: [\"bitbucket-pipelines.yaml\", \"bitbucket-pipelines.yml\"],\n },\n blitz: {\n fileNames: [\n \"blitz.config.js\",\n \"blitz.config.ts\",\n \".blitz.config.compiled.js\",\n ],\n },\n bower: {\n fileNames: [\".bowerrc\", \"bower.json\"],\n },\n browserslist: {\n fileNames: [\"browserslist\", \".browserslistrc\"],\n },\n \"bun-lock\": {\n fileNames: [\"bun.lock\", \"bun.lockb\"],\n },\n bun: {\n fileNames: [\"bunfig.toml\"],\n },\n \"c-header\": {\n fileExtensions: [\"h\"],\n },\n c: {\n languageIds: [\"c\"],\n fileExtensions: [\"c\", \"i\", \"mi\"],\n },\n cabal: {\n fileExtensions: [\"cabal\"],\n fileNames: [\"cabal.project\"],\n },\n caddy: {\n fileExtensions: [\"caddyfile\"],\n fileNames: [\"caddyfile\"],\n },\n capacitor: {\n fileNames: [\"capacitor.config.json\", \"capacitor.config.ts\"],\n },\n \"cargo-lock\": {\n fileNames: [\"cargo.lock\"],\n },\n cargo: {\n fileNames: [\"cargo.toml\"],\n },\n certificate: {\n fileExtensions: [\"cer\", \"cert\", \"crt\", \"pfx\"],\n },\n changelog: {\n fileNames: [\n \"changelog\",\n \"changelog.md\",\n \"changelog.rst\",\n \"changelog.txt\",\n \"changes\",\n \"changes.md\",\n \"changes.rst\",\n \"changes.txt\",\n ],\n },\n \"circle-ci\": {\n fileNames: [\"circle.yml\"],\n },\n clojure: {\n languageIds: [\"clojure\"],\n fileExtensions: [\"clj\", \"cljs\", \"cljc\"],\n },\n cmake: {\n fileExtensions: [\"cmake\"],\n fileNames: [\"cmakelists.txt\", \"cmakecache.txt\"],\n },\n cobol: {\n languageIds: [\"cobol\"],\n fileExtensions: [\"cob\", \"cbl\"],\n },\n \"code-climate\": {\n fileNames: [\".codeclimate.yml\"],\n },\n \"code-of-conduct\": {\n fileNames: [\"code_of_conduct.md\", \"code_of_conduct.txt\", \"code_of_conduct\"],\n },\n codeowners: {\n fileNames: [\"codeowners\", \"owners\"],\n },\n coffeescript: {\n languageIds: [\"coffeescript\"],\n fileExtensions: [\"coffee\", \"cson\", \"iced\"],\n },\n commitlint: {\n fileNames: [\n \".commitlintrc\",\n \".commitlintrc.js\",\n \".commitlintrc.cjs\",\n \".commitlintrc.ts\",\n \".commitlintrc.cts\",\n \".commitlintrc.json\",\n \".commitlintrc.yaml\",\n \".commitlintrc.yml\",\n \".commitlint.yaml\",\n \".commitlint.yml\",\n \"commitlint.config.js\",\n \"commitlint.config.cjs\",\n \"commitlint.config.ts\",\n \"commitlint.config.cts\",\n ],\n },\n contributing: {\n fileNames: [\n \"contributing.md\",\n \"contributing.rst\",\n \"contributing.txt\",\n \"contributing\",\n ],\n },\n \"cpp-header\": {\n fileExtensions: [\"hh\", \"hpp\", \"hxx\", \"h++\", \"hp\", \"tcc\", \"inl\"],\n },\n cpp: {\n languageIds: [\"cpp\"],\n fileExtensions: [\"cc\", \"cpp\", \"cxx\", \"c++\", \"cp\", \"mii\", \"ii\"],\n },\n csharp: {\n languageIds: [\"csharp\"],\n fileExtensions: [\"cs\", \"csx\", \"csharp\"],\n },\n cspell: {\n fileNames: [\n \"cspell.json\",\n \"cspell.yml\",\n \"cspell.yaml\",\n \".cspell.json\",\n \".cspell.yml\",\n \".cspell.yaml\",\n \"cspell.config.js\",\n \"cspell.config.cjs\",\n \"cspell.config.yml\",\n \"cspell.config.yaml\",\n ],\n },\n \"css-map\": {\n fileExtensions: [\"css.map\"],\n },\n css: {\n languageIds: [\"css\"],\n fileExtensions: [\"css\"],\n },\n csv: {\n languageIds: [\"csv\", \"tsv\", \"psv\"],\n fileExtensions: [\"csv\", \"tsv\", \"psv\"],\n },\n cucumber: {\n languageIds: [\"cucumber\"],\n fileExtensions: [\"feature\", \"features\"],\n },\n cuda: {\n languageIds: [\"cuda-cpp\"],\n fileExtensions: [\"cu\", \"cuh\"],\n },\n cypress: {\n fileNames: [\n \"cypress.json\",\n \"cypress.env.json\",\n \"cypress.config.ts\",\n \"cypress.config.js\",\n \"cypress.config.cjs\",\n \"cypress.config.mjs\",\n ],\n },\n d: {\n languageIds: [\"d\"],\n fileExtensions: [\"d\", \"di\"],\n },\n \"dart-generated\": {\n fileExtensions: [\"freezed.dart\", \"g.dart\"],\n },\n dart: {\n languageIds: [\"dart\"],\n fileExtensions: [\"dart\"],\n },\n database: {\n languageIds: [\"sql\"],\n fileExtensions: [\n \"pdb\",\n \"sql\",\n \"pks\",\n \"pkb\",\n \"accdb\",\n \"mdb\",\n \"sqlite\",\n \"sqlite3\",\n \"pgsql\",\n \"postgres\",\n \"plpgsql\",\n \"psql\",\n \"db\",\n \"db3\",\n \"dat\",\n ],\n },\n deno_lock: {\n fileNames: [\"deno.lock\"],\n },\n deno: {\n fileNames: [\"deno.json\", \"deno.jsonc\"],\n },\n dependabot: {\n fileNames: [\"dependabot.yml\", \"dependabot.yaml\"],\n },\n devcontainer: {\n fileNames: [\"devcontainer.json\", \".devcontainer.json\"],\n },\n dhall: {\n languageIds: [\"dhall\"],\n fileExtensions: [\"dhall\", \"dhallb\"],\n },\n diff: {\n languageIds: [\"diff\"],\n },\n django: {\n languageIds: [\"django-html\", \"django-txt\"],\n fileExtensions: [\"djt\"],\n },\n \"docker-compose\": {\n fileExtensions: [\n \"docker-compose.yml\",\n \"docker-compose.yaml\",\n\n \"compose.yaml\",\n \"compose.yml\",\n ],\n fileNames: [\n \"docker-compose.yml\",\n \"docker-compose.override.yml\",\n \"docker-compose.prod.yml\",\n \"docker-compose.production.yml\",\n \"docker-compose.alpha.yml\",\n \"docker-compose.beta.yml\",\n \"docker-compose.stage.yml\",\n \"docker-compose.staging.yml\",\n \"docker-compose.dev.yml\",\n \"docker-compose.development.yml\",\n \"docker-compose.local.yml\",\n \"docker-compose.test.yml\",\n \"docker-compose.testing.yml\",\n \"docker-compose.ci.yml\",\n \"docker-compose.web.yml\",\n \"docker-compose.worker.yml\",\n\n \"docker-compose.yaml\",\n \"docker-compose.override.yaml\",\n \"docker-compose.prod.yaml\",\n \"docker-compose.production.yaml\",\n \"docker-compose.alpha.yaml\",\n \"docker-compose.beta.yaml\",\n \"docker-compose.stage.yaml\",\n \"docker-compose.staging.yaml\",\n \"docker-compose.dev.yaml\",\n \"docker-compose.development.yaml\",\n \"docker-compose.local.yaml\",\n \"docker-compose.test.yaml\",\n \"docker-compose.testing.yaml\",\n \"docker-compose.ci.yaml\",\n \"docker-compose.web.yaml\",\n \"docker-compose.worker.yaml\",\n\n \"compose.yaml\",\n \"compose.override.yaml\",\n \"compose.prod.yaml\",\n \"compose.production.yaml\",\n \"compose.alpha.yaml\",\n \"compose.beta.yaml\",\n \"compose.stage.yaml\",\n \"compose.staging.yaml\",\n \"compose.dev.yaml\",\n \"compose.development.yaml\",\n \"compose.local.yaml\",\n \"compose.test.yaml\",\n \"compose.testing.yaml\",\n \"compose.ci.yaml\",\n \"compose.web.yaml\",\n \"compose.worker.yaml\",\n\n \"compose.yml\",\n \"compose.override.yml\",\n \"compose.prod.yml\",\n \"compose.production.yml\",\n \"compose.alpha.yml\",\n \"compose.beta.yml\",\n \"compose.stage.yml\",\n \"compose.staging.yml\",\n \"compose.dev.yml\",\n \"compose.development.yml\",\n \"compose.local.yml\",\n \"compose.test.yml\",\n \"compose.testing.yml\",\n \"compose.ci.yml\",\n \"compose.web.yml\",\n \"compose.worker.yml\",\n ],\n },\n \"docker-ignore\": {\n fileExtensions: [\"dockerignore\", \"containerignore\"],\n },\n docker: {\n fileExtensions: [\"dockerfile\", \"containerfile\"],\n fileNames: [\n \"dockerfile\",\n \"dockerfile.prod\",\n \"dockerfile.production\",\n \"dockerfile.alpha\",\n \"dockerfile.beta\",\n \"dockerfile.stage\",\n \"dockerfile.staging\",\n \"dockerfile.dev\",\n \"dockerfile.development\",\n \"dockerfile.local\",\n \"dockerfile.test\",\n \"dockerfile.testing\",\n \"dockerfile.ci\",\n \"dockerfile.web\",\n \"dockerfile.worker\",\n\n \"containerfile\",\n \"containerfile.prod\",\n \"containerfile.production\",\n \"containerfile.alpha\",\n \"containerfile.beta\",\n \"containerfile.stage\",\n \"containerfile.staging\",\n \"containerfile.dev\",\n \"containerfile.development\",\n \"containerfile.local\",\n \"containerfile.test\",\n \"containerfile.testing\",\n \"containerfile.ci\",\n \"containerfile.web\",\n \"containerfile.worker\",\n ],\n },\n drawio: {\n fileExtensions: [\"drawio\", \"dio\"],\n },\n \"drizzle-orm\": {\n fileNames: [\"drizzle.config.ts\", \"drizzle.config.js\"],\n },\n \"dub-selections\": {\n fileNames: [\"dub.selections.json\"],\n },\n dub: {\n fileNames: [\"dub.json\", \"dub.sdl\"],\n },\n editorconfig: {\n languageIds: [\"editorconfig\"],\n fileNames: [\".editorconfig\"],\n },\n ejs: {\n fileExtensions: [\"ejs\"],\n },\n eleventy: {\n fileNames: [\n \".eleventy.js\",\n \"eleventy.config.js\",\n \"eleventy.config.mjs\",\n \"eleventy.config.cjs\",\n \".eleventyignore\",\n ],\n },\n elixir: {\n languageIds: [\"elixir\"],\n fileExtensions: [\"ex\", \"exs\", \"eex\", \"leex\", \"heex\"],\n },\n elm: {\n languageIds: [\"elm\"],\n fileExtensions: [\"elm\"],\n },\n ember: {\n fileNames: [\".ember-cli\", \".ember-cli.js\", \"ember-cli-builds.js\"],\n },\n env: {\n fileExtensions: [\"env\"],\n fileNames: [\n \".env.defaults\",\n \".env.example\",\n \".env.sample\",\n \".env.template\",\n \".env.schema\",\n \".env.local\",\n \".env.dev\",\n \".env.development\",\n \".env.alpha\",\n \".env.e2e\",\n \".env.qa\",\n \".env.dist\",\n \".env.prod\",\n \".env.production\",\n \".env.stage\",\n \".env.staging\",\n \".env.preview\",\n \".env.test\",\n \".env.testing\",\n \".env.development.local\",\n \".env.qa.local\",\n \".env.production.local\",\n \".env.staging.local\",\n \".env.test.local\",\n \".env.uat\",\n \".env.cat\",\n ],\n },\n envrc: {\n fileNames: [\".envrc\"],\n },\n erlang: {\n languageIds: [\"erlang\"],\n fileExtensions: [\"erl\"],\n },\n esbuild: {\n fileNames: [\n \"esbuild.js\",\n \"esbuild.ts\",\n \"esbuild.cjs\",\n \"esbuild.mjs\",\n \"esbuild.config.js\",\n \"esbuild.config.ts\",\n \"esbuild.config.cjs\",\n \"esbuild.config.mjs\",\n ],\n },\n \"eslint-ignore\": {\n fileNames: [\".eslintignore\", \".eslintcache,\"],\n },\n eslint: {\n fileNames: [\n \".eslintrc.js\",\n \".eslintrc.cjs\",\n \".eslintrc.yaml\",\n \".eslintrc.yml\",\n \".eslintrc.json\",\n \".eslintrc-md.js\",\n \".eslintrc-jsdoc.js\",\n \".eslintrc\",\n\n \"eslint.config.js\",\n \"eslint.config.cjs\",\n \"eslint.config.mjs\",\n \"eslint.config.ts\",\n \"eslint.config.cts\",\n \"eslint.config.mts\",\n ],\n },\n exe: {\n fileExtensions: [\"exe\", \"msi\"],\n },\n fastlane: {\n fileNames: [\n \"fastfile\",\n \"appfile\",\n \"snapfile\",\n \"matchfile\",\n \"deliverfile\",\n \"scanfile\",\n \"gymfile\",\n ],\n },\n favicon: {\n fileNames: [\"favicon.ico\"],\n },\n figma: {\n fileExtensions: [\"fig\"],\n },\n firebase: {\n fileNames: [\n \"firebase.json\",\n \".firebaserc\",\n \"firestore.rules\",\n \"storage.rules\",\n \"firestore.indexes.json\",\n ],\n },\n flutter: {\n fileNames: [\n \".flutter-plugins\",\n \".flutter-plugins-dependencies\",\n \".metadata\",\n ],\n },\n font: {\n fileExtensions: [\n \"woff\",\n \"woff2\",\n \"ttf\",\n \"eot\",\n \"suit\",\n \"otf\",\n \"bmap\",\n \"fnt\",\n \"odttf\",\n \"ttc\",\n \"font\",\n \"fonts\",\n \"sui\",\n \"ntf\",\n \"mrf\",\n ],\n },\n fortran: {\n fileExtensions: [\"f\", \"f77\", \"f90\", \"f95\", \"f03\", \"f08\", \"for\"],\n },\n fsharp: {\n languageIds: [\"fsharp\"],\n fileExtensions: [\"fs\", \"fsx\", \"fsi\", \"fsproj\"],\n },\n fvm: {\n fileNames: [\".fvmrc\", \"fvm_config.json\"],\n },\n gatsby: {\n fileNames: [\n \"gatsby-config.js\",\n \"gatsby-config.mjs\",\n \"gatsby-config.ts\",\n \"gatsby-node.js\",\n \"gatsby-node.mjs\",\n \"gatsby-node.ts\",\n \"gatsby-browser.js\",\n \"gatsby-browser.tsx\",\n \"gatsby-ssr.js\",\n \"gatsby-ssr.tsx\",\n ],\n },\n gcp: {\n fileNames: [\"release-please-config.json\", \".release-please-manifest.json\"],\n },\n \"git-cliff\": {\n fileNames: [\"cliff.toml\"],\n },\n git: {\n languageIds: [\"git\", \"git-commit\", \"git-rebase\", \"ignore\"],\n fileExtensions: [\"patch\"],\n fileNames: [\n \".git\",\n \".gitignore\",\n \".gitmessage\",\n \".gitignore-global\",\n \".gitignore_global\",\n \".gitattributes\",\n \".gitattributes-global\",\n \".gitattributes_global\",\n \".gitconfig\",\n \".gitmodules\",\n \".gitkeep\",\n \".keep\",\n \".gitpreserve\",\n \".gitinclude\",\n \".git-blame-ignore\",\n \".git-blame-ignore-revs\",\n \".git-for-windows-updater\",\n \"git-history\",\n ],\n },\n gitlab: {\n fileExtensions: [\"gitlab-ci.yml\", \"gitlab-ci.yaml\"],\n },\n gitpod: {\n fileNames: [\".gitpod.yml\"],\n },\n \"gleam-config\": {\n fileNames: [\"gleam.toml\"],\n },\n gleam: {\n fileExtensions: [\"gleam\"],\n languageIds: [\"gleam\"],\n },\n \"go-mod\": {\n fileNames: [\"go.mod\", \"go.sum\", \"go.work\", \"go.work.sum\"],\n },\n \"go-template\": {\n fileExtensions: [\"tmpl\", \"templ\", \"gotmpl\", \"gohtml\", \"go.tmp\", \"go.html\"],\n },\n go: {\n languageIds: [\"go\"],\n fileExtensions: [\"go\"],\n },\n \"godot-assets\": {\n fileExtensions: [\n \"godot\",\n \"tres\",\n \"tscn\",\n \"gdns\",\n \"gdnlib\",\n \"gdshader\",\n \"gdshaderinc\",\n \"gdextension\",\n ],\n fileNames: [\".gdignore\", \"._sc_\", \"_sc_\"],\n },\n godot: {\n languageIds: [\"gdscript\"],\n fileExtensions: [\"gd\"],\n },\n gradle: {\n fileExtensions: [\"gradle\"],\n fileNames: [\"gradle.properties\", \"gradlew\", \"gradle-wrapper.properties\"],\n },\n graphql: {\n languageIds: [\"graphql\"],\n fileExtensions: [\"graphql\", \"gql\"],\n fileNames: [\n \".graphqlconfig\",\n \".graphqlrc\",\n \".graphqlrc.json\",\n \".graphqlrc.js\",\n \".graphqlrc.cjs\",\n \".graphqlrc.ts\",\n \".graphqlrc.toml\",\n \".graphqlrc.yaml\",\n \".graphqlrc.yml\",\n \"graphql.config.json\",\n \"graphql.config.js\",\n \"graphql.config.cjs\",\n \"graphql.config.ts\",\n \"graphql.config.toml\",\n \"graphql.config.yaml\",\n \"graphql.config.yml\",\n ],\n },\n groovy: {\n languageIds: [\"groovy\"],\n fileExtensions: [\"groovy\"],\n },\n gulp: {\n fileNames: [\n \"gulpfile.js\",\n \"gulpfile.mjs\",\n \"gulpfile.ts\",\n \"gulpfile.cts\",\n \"gulpfile.mts\",\n \"gulpfile.babel.js\",\n ],\n },\n haml: {\n languageIds: [\"haml\"],\n fileExtensions: [\"haml\"],\n },\n handlebars: {\n languageIds: [\"handlebars\"],\n fileExtensions: [\"hbs\", \"mustache\"],\n },\n hardhat: {\n fileNames: [\"hardhat.config.js\", \"hardhat.config.ts\"],\n },\n haskell: {\n languageIds: [\"haskell\"],\n fileExtensions: [\"hs\"],\n },\n haxe: {\n languageIds: [\"haxe\", \"hxml\"],\n fileExtensions: [\"hx\"],\n },\n helm: {\n fileNames: [\".helmignore\", \"chart.lock\"],\n },\n heroku: {\n fileNames: [\"procfile\"],\n },\n histoire: {\n fileNames: [\n \"histoire.config.ts\",\n \"histoire.config.js\",\n \".histoire.js\",\n \".histoire.ts\",\n ],\n },\n html: {\n languageIds: [\"html\"],\n fileExtensions: [\"htm\", \"html\", \"xhtml\", \"html_vm\", \"asp\"],\n },\n http: {\n fileExtensions: [\"http\", \"rest\"],\n fileNames: [\"CNAME\"],\n },\n huff: {\n fileExtensions: [\"huff\"],\n },\n hugo: {\n fileNames: [\"hugo.toml\", \"hugo.yaml\", \"hugo.json\"],\n },\n humans: {\n fileNames: [\"humans.txt\"],\n },\n husky: {\n fileNames: [\n \".huskyrc\",\n \"husky.config.js\",\n \".huskyrc.json\",\n \".huskyrc.js\",\n \".huskyrc.yaml\",\n \".huskyrc.yml\",\n ],\n },\n image: {\n fileExtensions: [\n \"png\",\n \"jpeg\",\n \"jpg\",\n \"gif\",\n \"ico\",\n \"tif\",\n \"tiff\",\n \"psd\",\n \"psb\",\n \"ami\",\n \"apx\",\n \"avif\",\n \"bmp\",\n \"bpg\",\n \"brk\",\n \"cur\",\n \"dds\",\n \"dng\",\n \"exr\",\n \"fpx\",\n \"gbr\",\n \"img\",\n \"jbig2\",\n \"jb2\",\n \"jng\",\n \"jxr\",\n \"pgf\",\n \"pic\",\n \"raw\",\n \"webp\",\n \"eps\",\n \"afphoto\",\n \"ase\",\n \"aseprite\",\n \"clip\",\n \"cpt\",\n \"heif\",\n \"heic\",\n \"kra\",\n \"mdp\",\n \"ora\",\n \"pdn\",\n \"reb\",\n \"sai\",\n \"tga\",\n \"xcf\",\n \"jfif\",\n \"ppm\",\n \"pbm\",\n \"pgm\",\n \"pnm\",\n \"icns\",\n ],\n },\n ionic: {\n fileNames: [\"ionic.config.json\", \".io-config.json\"],\n },\n \"java-class\": {\n fileExtensions: [\"class\"],\n },\n \"java-jar\": {\n fileExtensions: [\"jar\"],\n },\n java: {\n languageIds: [\"java\"],\n fileExtensions: [\"java\", \"jsp\"],\n },\n \"javascript-config\": {\n fileNames: [\"jsconfig.json\"],\n fileExtensions: [\"jsconfig.json\"],\n },\n \"javascript-map\": {\n fileExtensions: [\"js.map\", \"mjs.map\", \"cjs.map\"],\n },\n \"javascript-react\": {\n languageIds: [\"javascriptreact\"],\n fileExtensions: [\"jsx\"],\n },\n \"javascript-test\": {\n fileExtensions: [\n \"spec.js\",\n \"spec.cjs\",\n \"spec.mjs\",\n \"e2e-spec.js\",\n \"e2e-spec.cjs\",\n \"e2e-spec.mjs\",\n \"test.js\",\n \"test.cjs\",\n \"test.mjs\",\n \"js.snap\",\n \"cy.js\",\n\n \"spec.jsx\",\n \"test.jsx\",\n \"jsx.snap\",\n \"cy.jsx\",\n ],\n },\n javascript: {\n languageIds: [\"javascript\"],\n fileExtensions: [\"esx\", \"js\", \"cjs\", \"mjs\"],\n },\n jest: {\n fileNames: [\n \"jest.config.js\",\n \"jest.config.cjs\",\n \"jest.config.mjs\",\n \"jest.config.ts\",\n \"jest.config.cts\",\n \"jest.config.mts\",\n \"jest.config.json\",\n \"jest.e2e.config.js\",\n \"jest.e2e.config.cjs\",\n \"jest.e2e.config.mjs\",\n \"jest.e2e.config.ts\",\n \"jest.e2e.config.cts\",\n \"jest.e2e.config.mts\",\n \"jest.e2e.config.json\",\n \"jest.e2e.json\",\n \"jest-unit.config.js\",\n \"jest-e2e.config.js\",\n \"jest-e2e.config.cjs\",\n \"jest-e2e.config.mjs\",\n \"jest-e2e.config.ts\",\n \"jest-e2e.config.cts\",\n \"jest-e2e.config.mts\",\n \"jest-e2e.config.json\",\n \"jest-e2e.json\",\n \"jest-github-actions-reporter.js\",\n \"jest.setup.js\",\n \"jest.setup.ts\",\n \"jest.json\",\n \".jestrc\",\n \".jestrc.js\",\n \".jestrc.json\",\n \"jest.teardown.js\",\n \"jest-preset.json\",\n \"jest-preset.js\",\n \"jest-preset.cjs\",\n \"jest-preset.mjs\",\n \"jest.preset.js\",\n \"jest.preset.mjs\",\n \"jest.preset.cjs\",\n \"jest.preset.json\",\n ],\n },\n jinja: {\n languageIds: [\"jinja\"],\n fileExtensions: [\"jinja\", \"jinja2\", \"j2\", \"jinja-html\"],\n },\n \"json-schema\": {\n fileExtensions: [\"schema.json\"],\n },\n json: {\n languageIds: [\"hjson\"],\n fileExtensions: [\n \"json\",\n \"jsonc\",\n \"tsbuildinfo\",\n \"json5\",\n \"jsonl\",\n \"ndjson\",\n \"hjson\",\n \"webmanifest\",\n ],\n fileNames: [\n \".jscsrc\",\n \".jshintrc\",\n \"composer.lock\",\n \".jsbeautifyrc\",\n \".esformatter\",\n \"cdp.pid\",\n \".lintstagedrc\",\n \".whitesource\",\n ],\n },\n juce: {\n fileExtensions: [\"jucer\"],\n },\n julia: {\n languageIds: [\"julia\"],\n fileExtensions: [\"jl\"],\n },\n jupyter: {\n languageIds: [\"jupyter\"],\n fileExtensions: [\"ipynb\"],\n },\n just: {\n fileExtensions: [\"just\"],\n fileNames: [\"justfile\", \".justfile\"],\n },\n kdl: {\n languageIds: [\"kdl\"],\n fileExtensions: [\"kdl\"],\n },\n key: {\n fileExtensions: [\"pub\", \"key\", \"pem\", \"asc\", \"gpg\", \"passwd\", \"keystore\"],\n fileNames: [\".htpasswd\"],\n },\n kotlin: {\n fileExtensions: [\"kt\", \"kts\"],\n },\n laravel: {\n fileExtensions: [\"blade.php\", \"inky.php\"],\n fileNames: [\"artisan\"],\n },\n latex: {\n languageIds: [\"tex\", \"doctex\", \"latex\", \"latex-expl3\"],\n fileExtensions: [\"tex\", \"sty\", \"dtx\", \"ltx\"],\n },\n latte: {\n fileExtensions: [\"latte\"],\n },\n lerna: {\n fileNames: [\"lerna.json\"],\n },\n less: {\n languageIds: [\"less\"],\n fileExtensions: [\"less\"],\n },\n lib: {\n languageIds: [\"bibtex\", \"bibtex-style\"],\n fileExtensions: [\"lib\", \"bib\"],\n },\n license: {\n fileNames: [\n \"copying\",\n \"copying.md\",\n \"copying.rst\",\n \"copying.txt\",\n \"copyright\",\n \"copyright.md\",\n \"copyright.rst\",\n \"copyright.txt\",\n \"license\",\n \"license-agpl\",\n \"license-apache\",\n \"license-bsd\",\n \"license-mit\",\n \"license-gpl\",\n \"license-lgpl\",\n \"unlicense\",\n \"license.md\",\n \"license.rst\",\n \"license.txt\",\n \"licence\",\n \"licence-agpl\",\n \"licence-apache\",\n \"licence-bsd\",\n \"licence-mit\",\n \"licence-gpl\",\n \"licence-lgpl\",\n \"unlicence\",\n \"licence.md\",\n \"licence.rst\",\n \"licence.txt\",\n ],\n },\n \"lint-staged\": {\n fileNames: [\n \".lintstagedrc\",\n \".lintstagedrc.json\",\n \".lintstagedrc.yaml\",\n \".lintstagedrc.yml\",\n \".lintstagedrc.mjs\",\n \".lintstagedrc.cjs\",\n \".lintstagedrc.js\",\n \"lint-staged.config.js\",\n \"lint-staged.config.mjs\",\n \"lint-staged.config.cjs\",\n ],\n },\n liquid: {\n fileExtensions: [\"liquid\"],\n fileNames: [\".liquidrc.json\", \".liquidrc\"],\n languageIds: [\"liquid\"],\n },\n lisp: {\n fileExtensions: [\"lisp\", \"lsp\", \"cl\", \"fast\"],\n },\n log: {\n languageIds: [\"log\"],\n fileExtensions: [\"log\"],\n },\n lua: {\n languageIds: [\"lua\"],\n fileExtensions: [\"lua\"],\n fileNames: [\".luacheckrc\"],\n },\n luau: {\n fileExtensions: [\"luau\"],\n fileNames: [\".luaurc\"],\n },\n makefile: {\n languageIds: [\"makefile\"],\n fileExtensions: [\"mk\"],\n fileNames: [\"makefile\", \"gnumakefile\", \"kbuild\"],\n },\n \"markdown-mdx\": {\n fileExtensions: [\"mdx\"],\n },\n markdown: {\n languageIds: [\"markdown\"],\n fileExtensions: [\"md\", \"markdown\", \"rst\"],\n },\n marko: {\n fileExtensions: [\"marko\"],\n },\n matlab: {\n languageIds: [\"matlab\"],\n },\n mdbook: {\n fileNames: [\"book.toml\"],\n },\n mermaid: {\n fileExtensions: [\"mmd\", \"mermaid\"],\n },\n meson: {\n fileNames: [\"meson.build\", \"meson_options.txt\"],\n fileExtensions: [\"wrap\"],\n },\n midi: {\n fileNames: [\"mid\", \"midi\"],\n },\n mjml: {\n fileExtensions: [\"mjml\"],\n fileNames: [\".mjmlconfig\"],\n },\n modernizr: {\n fileNames: [\".modernizrrc\", \".modernizrrc.js\", \".modernizrrc.json\"],\n },\n \"ms-excel\": {\n fileExtensions: [\"xlsx\", \"xlsm\", \"xls\"],\n },\n \"ms-powerpoint\": {\n fileExtensions: [\n \"pptx\",\n \"ppt\",\n \"pptm\",\n \"potx\",\n \"potm\",\n \"ppsx\",\n \"ppsm\",\n \"pps\",\n \"ppam\",\n \"ppa\",\n \"odp\",\n ],\n },\n \"ms-word\": {\n fileExtensions: [\"doc\", \"docx\", \"rtf\", \"odt\"],\n },\n nativescript: {\n fileNames: [\"nativescript.config.ts\", \"nativescript.config.js\"],\n },\n nest: {\n fileNames: [\n \"nest-cli.json\",\n \".nest-cli.json\",\n \"nestconfig.json\",\n \".nestconfig.json\",\n ],\n },\n netlify: {\n fileNames: [\"netlify.json\", \"netlify.yml\", \"netlify.yaml\", \"netlify.toml\"],\n },\n next: {\n fileNames: [\n \"next.config.js\",\n \"next.config.mjs\",\n \"next.config.ts\",\n \"next.config.mts\",\n ],\n },\n nextflow: {\n fileExtensions: [\"nf\"],\n },\n nginx: {\n fileNames: [\"nginx.conf\"],\n fileExtensions: [\"nginx\", \"nginxconf\", \"nginxconfig\"],\n },\n nim: {\n languageIds: [\"nim\", \"nimble\"],\n fileExtensions: [\"nim\", \"nimble\"],\n },\n ninja: {\n fileExtensions: [\"ninja\"],\n },\n \"nix-lock\": {\n fileNames: [\"flake.lock\"],\n },\n nix: {\n languageIds: [\"nix\"],\n fileExtensions: [\"nix\"],\n },\n nodemon: {\n fileNames: [\"nodemon.json\", \"nodemon-debug.json\"],\n },\n \"npm-ignore\": {\n fileNames: [\".npmignore\"],\n },\n \"npm-lock\": {\n fileNames: [\"package-lock.json\"],\n },\n npm: {\n fileNames: [\".npmrc\"],\n },\n nuget: {\n fileNames: [\"nuget.config\", \".nuspec\", \"nuget.exe\"],\n fileExtensions: [\"nupkg\"],\n },\n nunjucks: {\n languageIds: [\"nunjucks\"],\n fileExtensions: [\"njk\", \"nunjucks\"],\n },\n \"nuxt-ignore\": {\n fileNames: [\".nuxtignore\"],\n },\n nuxt: {\n fileNames: [\".nuxtrc\", \"nuxt.config.js\", \"nuxt.config.ts\"],\n },\n ocaml: {\n fileExtensions: [\"ml\", \"mli\", \"cmx\"],\n },\n org: {\n languageIds: [\"org\"],\n fileExtensions: [\"org\"],\n },\n \"package-json\": {\n fileNames: [\"package.json\", \".nvmrc\", \".esmrc\", \".node-version\"],\n },\n \"panda-css\": {\n fileNames: [\n \"panda.config.ts\",\n \"panda.config.js\",\n \"panda.config.mjs\",\n \"panda.config.mts\",\n \"panda.config.cjs\",\n ],\n },\n pdf: {\n fileExtensions: [\"pdf\"],\n },\n perl: {\n languageIds: [\"perl\", \"perl6\", \"raku\"],\n fileExtensions: [\n \"pl\",\n \"pm\",\n \"pod\",\n \"t\",\n \"psgi\",\n \"raku\",\n \"rakumod\",\n \"rakutest\",\n \"rakudoc\",\n \"nqp\",\n \"p6\",\n \"pl6\",\n \"pm6\",\n ],\n },\n php: {\n languageIds: [\"php\"],\n fileExtensions: [\"php\"],\n },\n phrase: {\n fileNames: [\n \".phrase.yml\",\n \".phraseapp.yml\",\n \".phrase.yaml\",\n \".phraseapp.yaml\",\n ],\n },\n phtml: {\n fileExtensions: [\"phtml\"],\n },\n \"pixi-lock\": {\n fileNames: [\"pixi.lock\"],\n },\n pixi: {\n fileNames: [\"pixi.toml\"],\n },\n plantuml: {\n fileExtensions: [\"pu\", \"puml\", \"plantuml\"],\n },\n playwright: {\n fileNames: [\n \"playwright.config.js\",\n \"playwright.config.mjs\",\n \"playwright.config.ts\",\n \"playwright.config.base.js\",\n \"playwright.config.base.mjs\",\n \"playwright.config.base.ts\",\n \"playwright-ct.config.js\",\n \"playwright-ct.config.mjs\",\n \"playwright-ct.config.ts\",\n ],\n },\n plop: {\n fileNames: [\"plopfile.js\", \"plopfile.cjs\", \"plopfile.mjs\", \"plopfile.ts\"],\n },\n \"pnpm-lock\": {\n fileNames: [\"pnpm-lock.yaml\"],\n },\n pnpm: {\n fileNames: [\"pnpm-workspace.yaml\", \".pnpmfile.cjs\"],\n },\n \"poetry-lock\": {\n fileNames: [\"poetry.lock\"],\n },\n postcss: {\n languageIds: [\"postcss\"],\n fileExtensions: [\"pcss\", \"sss\"],\n fileNames: [\n \"postcss.config.js\",\n \"postcss.config.cjs\",\n \"postcss.config.mjs\",\n \"postcss.config.ts\",\n \"postcss.config.cts\",\n \"postcss.config.mts\",\n \".postcssrc.js\",\n \".postcssrc.cjs\",\n \".postcssrc.ts\",\n \".postcssrc.cts\",\n \".postcssrc\",\n \".postcssrc.json\",\n \".postcssrc.yaml\",\n \".postcssrc.yml\",\n ],\n },\n powershell: {\n languageIds: [\"powershell\"],\n fileExtensions: [\"ps1\", \"psm1\", \"psd1\", \"ps1xml\", \"psc1\", \"pssc\"],\n },\n \"pre-commit\": {\n fileNames: [\".pre-commit-config.yaml\", \".pre-commit-hooks.yaml\"],\n },\n premake: {\n fileNames: [\"premake4.lua\", \"premake5.lua\", \"premake.lua\"],\n },\n \"prettier-ignore\": {\n fileNames: [\".prettierignore\"],\n },\n prettier: {\n fileNames: [\n \".prettierrc\",\n \"prettier.config.js\",\n \"prettier.config.cjs\",\n \".prettierrc.js\",\n \".prettierrc.cjs\",\n \".prettierrc.json\",\n \".prettierrc.json5\",\n \".prettierrc.yaml\",\n \".prettierrc.yml\",\n \".prettierrc.toml\",\n \"prettier.config.mjs\",\n \".prettierrc.mjs\",\n ],\n },\n prisma: {\n fileNames: [\"prisma.yml\"],\n fileExtensions: [\"prisma\"],\n },\n prolog: {\n languageIds: [\"prolog\"],\n fileExtensions: [\"p\", \"pro\"],\n },\n properties: {\n languageIds: [\"ini\", \"properties\", \"spring-boot-properties\"],\n fileExtensions: [\n \"ini\",\n \"dlc\",\n \"config\",\n \"conf\",\n \"properties\",\n \"prop\",\n \"settings\",\n \"option\",\n \"props\",\n \"prefs\",\n \"sln.dotsettings\",\n \"sln.dotsettings.user\",\n \"cfg\",\n ],\n },\n proto: {\n languageIds: [\"proto\"],\n fileExtensions: [\"proto\"],\n },\n pug: {\n languageIds: [\"jade\"],\n fileExtensions: [\"jade\", \"pug\"],\n fileNames: [\".pug-lintrc\", \".pug-lintrc.js\", \".pug-lintrc.json\"],\n },\n puppeteer: {\n fileNames: [\n \".puppeteerrc.cjs,\",\n \".puppeteerrc.js,\",\n \".puppeteerrc\",\n \".puppeteerrc.json,\",\n \".puppeteerrc.yaml,\",\n \"puppeteer.config.js\",\n \"puppeteer.config.cjs\",\n ],\n },\n \"python-compiled\": {\n fileExtensions: [\"pyc\", \"pyo\", \"pyd\"],\n },\n \"python-config\": {\n fileNames: [\n \"pyproject.toml\",\n \"requirements.txt\",\n \"requirements-dev.txt\",\n \"requirements-test.txt\",\n \".python-version\",\n ],\n },\n python: {\n languageIds: [\"python\"],\n fileExtensions: [\"py\"],\n },\n r: {\n languageIds: [\"r\", \"rsweave\"],\n fileExtensions: [\"r\", \"rmd\"],\n fileNames: [\".Rhistory\"],\n },\n racket: {\n fileExtensions: [\"rkt\"],\n },\n razor: {\n languageIds: [\"razor\", \"aspnetcorerazor\"],\n fileExtensions: [\"cshtml\", \"vbhtml\"],\n },\n readme: {\n fileNames: [\"readme.md\", \"readme.rst\", \"readme.txt\", \"readme\"],\n },\n reason: {\n languageIds: [\"reason\", \"reason_lisp\"],\n fileExtensions: [\"re\", \"rei\"],\n },\n redwood: {\n fileNames: [\"redwood.toml\"],\n },\n release: {\n fileNames: [\".goreleaser.yaml\"],\n },\n remix: {\n fileNames: [\"remix.config.js\", \"remix.config.ts\"],\n },\n renovate: {\n fileNames: [\n \".renovaterc\",\n \".renovaterc.json\",\n \"renovate-config.json\",\n \"renovate.json\",\n \"renovate.json5\",\n ],\n },\n rescript: {\n languageIds: [\"rescript\"],\n fileExtensions: [\"res\"],\n },\n roblox: {\n fileExtensions: [\"rbxl\", \"rbxlx\", \"rbxm\", \"rbxmx\"],\n },\n robots: {\n fileNames: [\"robots.txt\"],\n },\n rollup: {\n fileNames: [\n \"rollup.config.js\",\n \"rollup.config.mjs\",\n \"rollup.config.ts\",\n \"rollup-config.js\",\n \"rollup-config.mjs\",\n \"rollup-config.ts\",\n \"rollup.config.common.js\",\n \"rollup.config.common.mjs\",\n \"rollup.config.common.ts\",\n \"rollup.config.base.js\",\n \"rollup.config.base.mjs\",\n \"rollup.config.base.ts\",\n \"rollup.config.prod.js\",\n \"rollup.config.prod.mjs\",\n \"rollup.config.prod.ts\",\n \"rollup.config.dev.js\",\n \"rollup.config.dev.mjs\",\n \"rollup.config.dev.ts\",\n \"rollup.config.prod.vendor.js\",\n \"rollup.config.prod.vendor.mjs\",\n \"rollup.config.prod.vendor.ts\",\n ],\n },\n \"ruby-gem-lock\": {\n fileNames: [\"gemfile.lock\"],\n },\n \"ruby-gem\": {\n fileNames: [\"gemfile\"],\n },\n ruby: {\n languageIds: [\"ruby\"],\n fileExtensions: [\"rb\", \"erb\", \"rbs\"],\n fileNames: [\".ruby-version\"],\n },\n ruff: {\n fileNames: [\"ruff.toml\", \".ruff.toml\"],\n },\n \"rust-config\": {\n fileNames: [\n \"rustfmt.toml\",\n \".rustfmt.toml\",\n \"rust-toolchain.toml\",\n \"clippy.toml\",\n ],\n },\n rust: {\n languageIds: [\"rust\"],\n fileExtensions: [\"rs\", \"ron\"],\n },\n salesforce: {\n fileExtensions: [\"cls\"],\n },\n sass: {\n languageIds: [\"sass\", \"scss\"],\n fileExtensions: [\"scss\", \"sass\"],\n },\n scala: {\n languageIds: [\"scala\"],\n fileExtensions: [\"scala\", \"sc\"],\n },\n search: {\n languageIds: [\"search-result\"],\n fileExtensions: [\"code-search\"],\n },\n security: {\n fileNames: [\"security.md\", \"security.txt\", \"security\"],\n },\n \"semantic-release\": {\n fileNames: [\n \".releaserc\",\n \".releaserc.yaml\",\n \".releaserc.yml\",\n \".releaserc.json\",\n \".releaserc.js\",\n \".releaserc.cjs\",\n \"release.config.js\",\n \"release.config.cjs\",\n ],\n },\n \"semgrep-ignore\": {\n fileNames: [\".semgrepignore\"],\n },\n semgrep: {\n fileNames: [\"semgrep.yml\"],\n },\n sentry: {\n fileNames: [\".sentryclirc\"],\n },\n serverless: {\n fileNames: [\n \"serverless.yml\",\n \"serverless.yaml\",\n \"serverless.json\",\n \"serverless.js\",\n \"serverless.ts\",\n ],\n },\n shader: {\n languageIds: [\"hlsl\", \"glsl\", \"wgsl\"],\n fileExtensions: [\n \"glsl\",\n \"vert\",\n \"tesc\",\n \"tese\",\n \"geom\",\n \"frag\",\n \"comp\",\n \"vert.glsl\",\n \"tesc.glsl\",\n \"tese.glsl\",\n \"geom.glsl\",\n \"frag.glsl\",\n \"comp.glsl\",\n \"vertex.glsl\",\n \"geometry.glsl\",\n \"fragment.glsl\",\n \"compute.glsl\",\n \"ts.glsl\",\n \"gs.glsl\",\n \"vs.glsl\",\n \"fs.glsl\",\n \"shader\",\n \"vertexshader\",\n \"fragmentshader\",\n \"geometryshader\",\n \"computeshader\",\n \"hlsl\",\n \"pixel.hlsl\",\n \"geometry.hlsl\",\n \"compute.hlsl\",\n \"tessellation.hlsl\",\n \"px.hlsl\",\n \"geom.hlsl\",\n \"comp.hlsl\",\n \"tess.hlsl\",\n \"wgsl\",\n ],\n },\n sketch: {\n fileExtensions: [\"sketch\"],\n },\n snowpack: {\n fileNames: [\n \"snowpack.config.js\",\n \"snowpack.config.cjs\",\n \"snowpack.config.mjs\",\n \"snowpack.config.ts\",\n \"snowpack.config.cts\",\n \"snowpack.config.mts\",\n \"snowpack.deps.json\",\n \"snowpack.config.json\",\n ],\n },\n solidity: {\n languageIds: [\"solidity\"],\n fileExtensions: [\"sol\"],\n },\n \"sonar-cloud\": {\n fileNames: [\n \"sonar-project.properties\",\n \".sonarcloud.properties\",\n \"sonarcloud.yaml\",\n ],\n },\n spwn: {\n fileExtensions: [\"spwn\"],\n },\n stackblitz: {\n fileNames: [\".stackblitzrc\"],\n },\n stata: {\n fileExtensions: [\"ado\", \"do\", \"dta\"],\n },\n stencil: {\n fileNames: [\"stencil.config.js\", \"stencil.config.ts\"],\n },\n stitches: {\n fileNames: [\"stitches.config.js\", \"stitches.config.ts\"],\n },\n \"storybook-svelte\": {\n fileExtensions: [\"story.svelte\", \"stories.svelte\"],\n },\n \"storybook-vue\": {\n fileExtensions: [\"story.vue\", \"stories.vue\"],\n },\n storybook: {\n fileExtensions: [\n \"stories.js\",\n \"stories.jsx\",\n \"stories.mdx\",\n \"story.js\",\n \"story.jsx\",\n \"stories.ts\",\n \"stories.tsx\",\n \"story.ts\",\n \"story.tsx\",\n \"story.mdx\",\n ],\n },\n \"stylelint-ignore\": {\n fileNames: [\".stylelintignore\", \".stylelintcache\"],\n },\n stylelint: {\n fileNames: [\n \".stylelintrc\",\n \"stylelint.config.js\",\n \"stylelint.config.cjs\",\n \"stylelint.config.mjs\",\n \".stylelintrc.json\",\n \".stylelintrc.yaml\",\n \".stylelintrc.yml\",\n \".stylelintrc.js\",\n \".stylelintrc.cjs\",\n \".stylelintrc.mjs\",\n ],\n },\n sublime: {\n fileExtensions: [\"sublime-project\", \"sublime-workspace\"],\n },\n \"super-collider\": {\n fileExtensions: [\"sc\", \"scd\"],\n },\n \"svelte-config\": {\n fileNames: [\n \"svelte.config.js\",\n \"svelte.config.ts\",\n \"svelte.config.cjs\",\n \"svelte.config.mjs\",\n ],\n },\n svelte: {\n languageIds: [\"svelte\"],\n fileExtensions: [\"svelte\"],\n },\n svg: {\n languageIds: [\"svg\"],\n fileExtensions: [\"svg\"],\n },\n swift: {\n languageIds: [\"swift\"],\n fileExtensions: [\"swift\"],\n },\n tailwind: {\n fileNames: [\n \"tailwind.js\",\n \"tailwind.ts\",\n \"tailwind.config.js\",\n \"tailwind.config.cjs\",\n \"tailwind.config.mjs\",\n \"tailwind.config.ts\",\n \"tailwind.config.cts\",\n \"tailwind.config.mts\",\n ],\n },\n taskfile: {\n fileNames: [\n \"taskfile.yml\",\n \"taskfile.yaml\",\n \"taskfile.dist.yml\",\n \"taskfile.dist.yaml\",\n \".taskrc.yml\",\n \".taskrc.yaml\",\n ],\n },\n \"tauri-ignore\": {\n fileNames: [\".taurignore\"],\n },\n tauri: {\n fileNames: [\n \"tauri.conf.json\",\n \"tauri.conf.json5\",\n \"tauri.config.json\",\n \"tauri.linux.conf.json\",\n \"tauri.windows.conf.json\",\n \"tauri.macos.conf.json\",\n \"Tauri.toml\",\n ],\n fileExtensions: [\"tauri\"],\n },\n terraform: {\n languageIds: [\"terraform\"],\n fileExtensions: [\"tf\", \"tf.json\", \"tfvars\", \"tfstate\", \"tfbackend\"],\n },\n text: {\n languageIds: [\"plaintext\"],\n fileExtensions: [\"txt\"],\n },\n todo: {\n fileExtensions: [\"todo\"],\n fileNames: [\"todo.md\", \"todos.md\"],\n },\n toml: {\n languageIds: [\"toml\"],\n fileExtensions: [\"toml\"],\n },\n turbo: {\n fileNames: [\"turbo.json\"],\n },\n twig: {\n languageIds: [\"twig\"],\n fileExtensions: [\"twig\"],\n },\n twine: {\n languageIds: [\n \"twee3\",\n \"twee3-harlowe-3\",\n \"twee3-chapbook-1\",\n \"twee3-sugarcube-2\",\n ],\n fileExtensions: [\"tw\", \"twee\"],\n },\n \"typescript-config\": {\n fileNames: [\n \"tsconfig.json\",\n \"tsconfig.app.json\",\n \"tsconfig.editor.json\",\n \"tsconfig.spec.json\",\n \"tsconfig.base.json\",\n \"tsconfig.build.json\",\n \"tsconfig.eslint.json\",\n \"tsconfig.lib.json\",\n \"tsconfig.lib.prod.json\",\n \"tsconfig.node.json\",\n \"tsconfig.test.json\",\n \"tsconfig.e2e.json\",\n \"tsconfig.web.json\",\n \"tsconfig.webworker.json\",\n \"tsconfig.worker.json\",\n \"tsconfig.config.json\",\n \"tsconfig.vitest.json\",\n \"tsconfig.cjs.json\",\n \"tsconfig.esm.json\",\n \"tsconfig.mjs.json\",\n \"tsconfig.doc.json\",\n \"tsconfig.paths.json\",\n \"tsconfig.main.json\",\n \"tsconfig.cypress-ct.json\",\n \"tsconfig.components.json\",\n ],\n fileExtensions: [\"tsconfig.json\"],\n },\n \"typescript-def\": {\n fileExtensions: [\"d.ts\", \"d.cts\", \"d.mts\"],\n },\n \"typescript-react\": {\n languageIds: [\"typescriptreact\"],\n fileExtensions: [\"tsx\"],\n },\n \"typescript-test\": {\n fileExtensions: [\n \"spec.ts\",\n \"spec.cts\",\n \"spec.mts\",\n \"cy.ts\",\n \"e2e-spec.ts\",\n \"e2e-spec.cts\",\n \"e2e-spec.mts\",\n \"test.ts\",\n \"test.cts\",\n \"test.mts\",\n \"ts.snap\",\n\n \"spec-d.ts\",\n \"test-d.ts\",\n\n \"spec.tsx\",\n \"test.tsx\",\n \"tsx.snap\",\n \"cy.tsx\",\n ],\n },\n typescript: {\n languageIds: [\"typescript\"],\n fileExtensions: [\"ts\", \"cts\", \"mts\"],\n },\n typst: {\n languageIds: [\"typst\"],\n fileExtensions: [\"typ\"],\n fileNames: [\"typst.toml\"],\n },\n unity: {\n languageIds: [\"shaderlab\"],\n fileExtensions: [\"unity\"],\n },\n unocss: {\n fileNames: [\n \"uno.config.js\",\n \"uno.config.mjs\",\n \"uno.config.ts\",\n \"uno.config.mts\",\n \"unocss.config.js\",\n \"unocss.config.mjs\",\n \"unocss.config.ts\",\n \"unocss.config.mts\",\n ],\n },\n url: {\n fileExtensions: [\"url\"],\n },\n uv: {\n fileNames: [\"uv.lock\"],\n },\n v: {\n languageIds: [\"v\"],\n fileExtensions: [\"v\"],\n fileNames: [\"vpkg.json\", \"v.mod\"],\n },\n \"vanilla-extract\": {\n fileExtensions: [\"css.ts\"],\n },\n vento: {\n fileExtensions: [\"vto\"],\n },\n \"vercel-ignore\": {\n fileNames: [\".vercelignore\", \".nowignore\"],\n },\n vercel: {\n fileNames: [\"vercel.json\", \"now.json\"],\n },\n verilog: {\n fileExtensions: [\"vhd\", \"sv\", \"svh\"],\n },\n vhs: {\n fileExtensions: [\"tape\"],\n },\n video: {\n fileExtensions: [\n \"webm\",\n \"mkv\",\n \"flv\",\n \"vob\",\n \"ogv\",\n \"ogg\",\n \"gifv\",\n \"avi\",\n \"mov\",\n \"qt\",\n \"wmv\",\n \"yuv\",\n \"rm\",\n \"rmvb\",\n \"mp4\",\n \"m4v\",\n \"mpg\",\n \"mp2\",\n \"mpeg\",\n \"mpe\",\n \"mpv\",\n \"m2v\",\n ],\n },\n vim: {\n languageIds: [\"viml\"],\n fileExtensions: [\"vimrc\", \"gvimrc\", \"exrc\", \"vim\", \"viminfo\"],\n },\n \"visual-studio\": {\n languageIds: [\"testOutput\", \"vb\"],\n fileExtensions: [\n \"csproj\",\n \"ruleset\",\n \"sln\",\n \"slnx\",\n \"suo\",\n \"vb\",\n \"vbs\",\n \"vcxitems\",\n \"vcxitems.filters\",\n \"vcxproj\",\n \"vcxproj.filters\",\n ],\n },\n vital: {\n fileExtensions: [\n \"vital\",\n \"vitalbank\",\n \"vitallfo\",\n \"vitalskin\",\n \"vitaltable\",\n \"vitaltheme\",\n ],\n },\n vite: {\n fileNames: [\n \"vite.config.js\",\n \"vite.config.mjs\",\n \"vite.config.cjs\",\n \"vite.config.ts\",\n \"vite.config.cts\",\n \"vite.config.mts\",\n ],\n },\n vitest: {\n fileNames: [\n \"vitest.config.ts\",\n \"vitest.config.mts\",\n \"vitest.config.cts\",\n \"vitest.config.js\",\n \"vitest.config.mjs\",\n \"vitest.config.cjs\",\n \"vitest.workspace.js\",\n \"vitest.workspace.ts\",\n \"vitest.workspace.json\",\n ],\n },\n \"vs-codium\": {},\n \"vscode-ignore\": {\n fileNames: [\".vscodeignore\"],\n },\n vscode: {\n fileExtensions: [\n \"vsixmanifest\",\n \"vsix\",\n \"code-workplace\",\n \"code-workspace\",\n \"code-profile\",\n \"code-snippets\",\n ],\n },\n \"vue-config\": {\n fileNames: [\n \"vue.config.js\",\n \"vue.config.cjs\",\n \"vue.config.mjs\",\n \"vue.config.ts\",\n \"vue.config.cts\",\n \"vue.config.mts\",\n \".vuerc\",\n ],\n },\n vue: {\n languageIds: [\"vue\"],\n fileExtensions: [\"vue\"],\n },\n \"web-assembly\": {\n fileExtensions: [\"wat\", \"wasm\"],\n },\n webpack: {\n fileNames: [\n \"webpack.js\",\n \"webpack.cjs\",\n \"webpack.mjs\",\n \"webpack.ts\",\n \"webpack.cts\",\n \"webpack.mts\",\n \"webpack.base.js\",\n \"webpack.base.cjs\",\n \"webpack.base.mjs\",\n \"webpack.base.ts\",\n \"webpack.base.cts\",\n \"webpack.base.mts\",\n \"webpack.config.js\",\n \"webpack.config.cjs\",\n \"webpack.config.mjs\",\n \"webpack.config.ts\",\n \"webpack.config.cts\",\n \"webpack.config.mts\",\n \"webpack.common.js\",\n \"webpack.common.cjs\",\n \"webpack.common.mjs\",\n \"webpack.common.ts\",\n \"webpack.common.cts\",\n \"webpack.common.mts\",\n \"webpack.config.common.js\",\n \"webpack.config.common.cjs\",\n \"webpack.config.common.mjs\",\n \"webpack.config.common.ts\",\n \"webpack.config.common.cts\",\n \"webpack.config.common.mts\",\n \"webpack.config.common.babel.js\",\n \"webpack.config.common.babel.ts\",\n \"webpack.dev.js\",\n \"webpack.dev.cjs\",\n \"webpack.dev.mjs\",\n \"webpack.dev.ts\",\n \"webpack.dev.cts\",\n \"webpack.dev.mts\",\n \"webpack.development.js\",\n \"webpack.development.cjs\",\n \"webpack.development.mjs\",\n \"webpack.development.ts\",\n \"webpack.development.cts\",\n \"webpack.development.mts\",\n \"webpack.config.dev.js\",\n \"webpack.config.dev.cjs\",\n \"webpack.config.dev.mjs\",\n \"webpack.config.dev.ts\",\n \"webpack.config.dev.cts\",\n \"webpack.config.dev.mts\",\n \"webpack.config.dev.babel.js\",\n \"webpack.config.dev.babel.ts\",\n \"webpack.config.main.js\",\n \"webpack.config.renderer.ts\",\n \"webpack.mix.js\",\n \"webpack.mix.cjs\",\n \"webpack.mix.mjs\",\n \"webpack.mix.ts\",\n \"webpack.mix.cts\",\n \"webpack.mix.mts\",\n \"webpack.prod.js\",\n \"webpack.prod.cjs\",\n \"webpack.prod.mjs\",\n \"webpack.prod.ts\",\n \"webpack.prod.cts\",\n \"webpack.prod.mts\",\n \"webpack.prod.config.js\",\n \"webpack.prod.config.cjs\",\n \"webpack.prod.config.mjs\",\n \"webpack.prod.config.ts\",\n \"webpack.prod.config.cts\",\n \"webpack.prod.config.mts\",\n \"webpack.production.js\",\n \"webpack.production.cjs\",\n \"webpack.production.mjs\",\n \"webpack.production.ts\",\n \"webpack.production.cts\",\n \"webpack.production.mts\",\n \"webpack.server.js\",\n \"webpack.server.cjs\",\n \"webpack.server.mjs\",\n \"webpack.server.ts\",\n \"webpack.server.cts\",\n \"webpack.server.mts\",\n \"webpack.client.js\",\n \"webpack.client.cjs\",\n \"webpack.client.mjs\",\n \"webpack.client.ts\",\n \"webpack.client.cts\",\n \"webpack.client.mts\",\n \"webpack.config.server.js\",\n \"webpack.config.server.cjs\",\n \"webpack.config.server.mjs\",\n \"webpack.config.server.ts\",\n \"webpack.config.server.cts\",\n \"webpack.config.server.mts\",\n \"webpack.config.client.js\",\n \"webpack.config.client.cjs\",\n \"webpack.config.client.mjs\",\n \"webpack.config.client.ts\",\n \"webpack.config.client.cts\",\n \"webpack.config.client.mts\",\n \"webpack.config.production.babel.js\",\n \"webpack.config.production.babel.ts\",\n \"webpack.config.prod.babel.js\",\n \"webpack.config.prod.babel.cjs\",\n \"webpack.config.prod.babel.mjs\",\n \"webpack.config.prod.babel.ts\",\n \"webpack.config.prod.babel.cts\",\n \"webpack.config.prod.babel.mts\",\n \"webpack.config.prod.js\",\n \"webpack.config.prod.cjs\",\n \"webpack.config.prod.mjs\",\n \"webpack.config.prod.ts\",\n \"webpack.config.prod.cts\",\n \"webpack.config.prod.mts\",\n \"webpack.config.production.js\",\n \"webpack.config.production.cjs\",\n \"webpack.config.production.mjs\",\n \"webpack.config.production.ts\",\n \"webpack.config.production.cts\",\n \"webpack.config.production.mts\",\n \"webpack.config.staging.js\",\n \"webpack.config.staging.cjs\",\n \"webpack.config.staging.mjs\",\n \"webpack.config.staging.ts\",\n \"webpack.config.staging.cts\",\n \"webpack.config.staging.mts\",\n \"webpack.config.babel.js\",\n \"webpack.config.babel.ts\",\n \"webpack.config.base.babel.js\",\n \"webpack.config.base.babel.ts\",\n \"webpack.config.base.js\",\n \"webpack.config.base.cjs\",\n \"webpack.config.base.mjs\",\n \"webpack.config.base.ts\",\n \"webpack.config.base.cts\",\n \"webpack.config.base.mts\",\n \"webpack.config.staging.babel.js\",\n \"webpack.config.staging.babel.ts\",\n \"webpack.config.coffee\",\n \"webpack.config.test.js\",\n \"webpack.config.test.cjs\",\n \"webpack.config.test.mjs\",\n \"webpack.config.test.ts\",\n \"webpack.config.test.cts\",\n \"webpack.config.test.mts\",\n \"webpack.config.vendor.js\",\n \"webpack.config.vendor.cjs\",\n \"webpack.config.vendor.mjs\",\n \"webpack.config.vendor.ts\",\n \"webpack.config.vendor.cts\",\n \"webpack.config.vendor.mts\",\n \"webpack.config.vendor.production.js\",\n \"webpack.config.vendor.production.cjs\",\n \"webpack.config.vendor.production.mjs\",\n \"webpack.config.vendor.production.ts\",\n \"webpack.config.vendor.production.cts\",\n \"webpack.config.vendor.production.mts\",\n \"webpack.test.js\",\n \"webpack.test.cjs\",\n \"webpack.test.mjs\",\n \"webpack.test.ts\",\n \"webpack.test.cts\",\n \"webpack.test.mts\",\n \"webpack.dist.js\",\n \"webpack.dist.cjs\",\n \"webpack.dist.mjs\",\n \"webpack.dist.ts\",\n \"webpack.dist.cts\",\n \"webpack.dist.mts\",\n \"webpackfile.js\",\n \"webpackfile.cjs\",\n \"webpackfile.mjs\",\n \"webpackfile.ts\",\n \"webpackfile.cts\",\n \"webpackfile.mts\",\n ],\n },\n windi: {\n fileNames: [\n \"windi.config.js\",\n \"windi.config.cjs\",\n \"windi.config.ts\",\n \"windi.config.cts\",\n \"windi.config.json\",\n ],\n fileExtensions: [\"windi\"],\n },\n workflow: {\n languageIds: [\"github-actions-workflow\"],\n fileExtensions: [\"workflows/yml\", \"workflows/yaml\"],\n },\n wxt: {\n fileNames: [\"wxt.config.js\", \"wxt.config.ts\"],\n },\n xaml: {\n fileExtensions: [\"xaml\", \"axaml\"],\n },\n xcode: {\n fileExtensions: [\"xcsettings\", \"xcworkspacedata\"],\n },\n xmake: {\n fileNames: [\"xmake.lua\"],\n },\n xml: {\n fileExtensions: [\n \"xml\",\n \"plist\",\n \"xsd\",\n \"dtd\",\n \"xsl\",\n \"xslt\",\n \"resx\",\n \"iml\",\n \"xquery\",\n \"tmLanguage\",\n \"manifest\",\n \"project\",\n \"xml.dist\",\n \"xml.dist.sample\",\n \"dmn\",\n \"jrxml\",\n ],\n fileNames: [\".htaccess\"],\n },\n yaml: {\n languageIds: [\"yaml\", \"spring-boot-properties-yaml\"],\n fileExtensions: [\"yml\", \"yaml\"],\n },\n \"yarn-lock\": {\n fileNames: [\"yarn.lock\"],\n },\n yarn: {\n fileNames: [\n \".yarnrc\",\n \".yarnclean\",\n \".yarn-integrity\",\n \"yarn-error.log\",\n \".yarnrc.yml\",\n \".yarnrc.yaml\",\n \"yarn.config.cjs\",\n ],\n },\n zap: {\n fileExtensions: [\"zap\"],\n },\n zig: {\n fileExtensions: [\"zig\"],\n },\n zip: {\n fileExtensions: [\n \"7z\",\n \"arj\",\n \"aseprite-extension\",\n \"bz\",\n \"bz2\",\n \"db\",\n \"gz\",\n \"paq8n\",\n \"paq8o\",\n \"pkg\",\n \"rar\",\n \"tar\",\n \"tbz\",\n \"tbz2\",\n \"tgz\",\n \"xz\",\n \"z\",\n \"zip\",\n \"zpaq\",\n \"zst\",\n ],\n },\n};\n\nconst { languageIds, fileExtensions, fileNames } = Object.entries(\n fileIcons\n).reduce<{\n languageIds: Record<string, string>;\n fileExtensions: Record<string, string>;\n fileNames: Record<string, string>;\n}>(\n ({ languageIds, fileExtensions, fileNames }, [name, icon]) => ({\n languageIds: {\n ...languageIds,\n ...icon.languageIds?.reduce((a, c) => ({ ...a, [c]: name }), {}),\n },\n fileExtensions: {\n ...fileExtensions,\n ...icon.fileExtensions?.reduce((a, c) => ({ ...a, [c]: name }), {}),\n },\n fileNames: {\n ...fileNames,\n ...icon.fileNames?.reduce((a, c) => ({ ...a, [c]: name }), {}),\n },\n }),\n {\n languageIds: {},\n fileExtensions: {},\n fileNames: {},\n }\n);\n\nexport { fileExtensions, fileIcons, fileNames, languageIds };\n","import { MultiplayerUser } from \"@noya-app/noya-multiplayer-react\";\nimport React, { forwardRef, memo, useMemo } from \"react\";\nimport { cssVars, INPUT_HEIGHT } from \"../theme\";\nimport { cx } from \"../utils/classNames\";\nimport { colorFromString } from \"../utils/colorFromString\";\nimport { Avatar } from \"./Avatar\";\nimport { Logo } from \"./NoyaLogo\";\nimport { Text } from \"./Text\";\n\nexport type MessageProps = {\n role: \"user\" | \"assistant\" | \"system\" | \"data\";\n children?: React.ReactNode;\n user?: MultiplayerUser;\n /** @default 27 */\n avatarSize?: number;\n};\n\nexport const Message = memo(\n forwardRef(function Message(\n { role, children, user, avatarSize = INPUT_HEIGHT }: MessageProps,\n ref: React.ForwardedRef<HTMLDivElement>\n ) {\n const randomId = crypto.randomUUID();\n const userMessageBackgroundColor = colorFromString(user?.id ?? randomId);\n const styles = useMemo(\n () =>\n role === \"user\"\n ? {\n backgroundColor: userMessageBackgroundColor,\n }\n : undefined,\n [userMessageBackgroundColor, role]\n );\n return (\n <div\n className={cx(\n \"flex gap-2\",\n role === \"user\" ? \"flex-row-reverse\" : \"flex-row\"\n )}\n >\n {role === \"assistant\" ? (\n <Avatar\n name=\"Assistant\"\n size={avatarSize}\n backgroundColor={cssVars.colors.primaryPastel}\n >\n <Logo style={{ width: 15 }} fill={cssVars.colors.primary} />\n </Avatar>\n ) : (\n <Avatar\n userId={!user ? randomId : user?.id}\n name={user?.name ?? \"Anonymous\"}\n image={user?.image}\n size={avatarSize}\n />\n )}\n <div\n className={cx(\n \"flex flex-row gap-2 rounded-lg py-2 px-3 transition-all duration-200 min-w-6 max-w-[70%] items-start\",\n role === \"user\" ? \"ml-auto\" : \"bg-input-background\"\n )}\n style={styles}\n ref={ref}\n >\n <Text\n variant=\"small\"\n className={role === \"user\" ? \"text-white\" : \"text-text\"}\n >\n {children}\n </Text>\n </div>\n </div>\n );\n })\n);\n","import { Link1Icon } from \"@noya-app/noya-icons\";\nimport React from \"react\";\nimport { DividerVertical } from \"../Divider\";\nimport { Small } from \"../Text\";\n\nexport const PipelineResultLink = ({ url }: { url: string }) => {\n return (\n <div className=\"flex flex-col gap-0.5\">\n {/* <Label position=\"start\">{name}</Label> */}\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex text-primary hover:opacity-80 border border-divider rounded-md\"\n >\n <div className=\"flex gap-1 items-center p-2\">\n <Link1Icon className=\"w-[15px] h-[15px] flex-shrink-0\" />\n </div>\n <DividerVertical />\n <Small className=\"truncate p-2 flex-1\">{url}</Small>\n </a>\n </div>\n );\n};\n\nexport const PipelineResultLayout = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n return <div className=\"flex flex-col gap-2\">{children}</div>;\n};\n\nexport function getPipelineResultLink(\n value: unknown\n): { url: string } | undefined {\n if (typeof value !== \"object\" || value === null) return undefined;\n\n // Check for htmlUrl first\n if (\"html_url\" in value && typeof value.html_url === \"string\") {\n return { url: value.html_url };\n }\n\n // Fall back to regular url\n if (\"url\" in value && typeof value.url === \"string\") {\n return { url: value.url };\n }\n\n return undefined;\n}\n","import { clamp } from \"@noya-app/noya-utils\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport * as React from \"react\";\nimport { cx } from \"../utils/classNames\";\n\ntype ProgressVariant = \"normal\" | \"warning\" | \"primary\" | \"secondary\";\n\nexport function Progress({\n value,\n variant = \"normal\",\n className,\n}: {\n value: number;\n variant?: ProgressVariant;\n className?: string;\n}) {\n const clampedValue = clamp(value, 0, 100);\n const transformStyles = React.useMemo(\n () => ({\n transform: `translateX(-${100 - clampedValue}%)`,\n }),\n [clampedValue]\n );\n\n return (\n <ProgressPrimitive.Root\n className={cx(`relative hidden bg-input-background h-[5px] `, className)}\n style={{ transform: \"translateZ(0)\" }}\n value={clampedValue}\n >\n <ProgressPrimitive.Indicator\n className={`${variant === \"primary\" ? \"bg-primary\" : variant === \"secondary\" ? \"bg-secondary\" : variant === \"warning\" ? \"bg-warning\" : \"bg-text\"} transition-[transform_660ms_cubic-bezier(0.65,0,0.35,1) w-full h-full`}\n style={transformStyles}\n />\n </ProgressPrimitive.Root>\n );\n}\n","import {\n Button,\n IconButton,\n IndentContext,\n INPUT_HEIGHT,\n InspectorPrimitives,\n Spacer,\n textStyles,\n} from \"@noya-app/noya-designsystem\";\nimport { clientStorage, usePersistentStateString } from \"@noya-app/react-utils\";\nimport React, { CSSProperties, memo, useMemo } from \"react\";\n\ntype TitleIconOptions = {\n inlineBlockWrapper?: boolean;\n};\n\nexport type SectionProps = {\n children: React.ReactNode;\n title?: React.ReactNode;\n onClickTitle?: () => void;\n titleTextStyle?: \"small\" | \"heading5\" | \"heading4\" | \"heading3\";\n right?: React.ReactNode;\n hideRightWhenCollapsed?: boolean;\n extraPadding?: boolean;\n className?: string;\n style?: CSSProperties;\n titleIcon?: React.ReactNode;\n titleIconOptions?: TitleIconOptions;\n};\n\nconst titleIconStyle: CSSProperties = {\n marginRight: \"8px\",\n alignSelf: \"flex-start\",\n position: \"relative\",\n top: \"2px\",\n};\n\nconst titleIconWrapperStyle: CSSProperties = {\n display: \"inline-block\",\n};\n\nconst SectionInternal = ({\n children,\n title,\n onClickTitle,\n titleTextStyle = \"heading4\",\n right,\n extraPadding,\n className,\n style: styleProp,\n titleIcon,\n titleIconOptions = {\n inlineBlockWrapper: true,\n },\n}: SectionProps) => {\n const style: CSSProperties = useMemo(\n () => ({\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n paddingTop:\n titleTextStyle === \"heading3\"\n ? \"12px\"\n : title && extraPadding\n ? \"24px\"\n : \"12px\",\n paddingBottom:\n titleTextStyle === \"heading3\"\n ? \"12px\"\n : title && extraPadding\n ? \"12px\"\n : \"12px\",\n ...styleProp,\n }),\n [titleTextStyle, title, extraPadding, styleProp]\n );\n\n const hasChildren = React.Children.toArray(children).some((child) => !!child);\n\n const headerStyle: CSSProperties = useMemo(\n () => ({\n marginBottom: hasChildren ? \"4px\" : undefined,\n minHeight: INPUT_HEIGHT,\n }),\n [hasChildren]\n );\n\n return (\n <div style={style} className={className}>\n {(title || titleIcon || right) && (\n <InspectorPrimitives.SectionHeader style={headerStyle}>\n {titleIcon && (\n <div style={titleIconStyle} className={textStyles[titleTextStyle]}>\n {titleIconOptions.inlineBlockWrapper ? (\n <div style={titleIconWrapperStyle}>{titleIcon}</div>\n ) : (\n titleIcon\n )}\n </div>\n )}\n {title && (\n <>\n {onClickTitle ? (\n <Button variant=\"none\" onClick={onClickTitle}>\n <InspectorPrimitives.Title $textStyle={titleTextStyle}>\n {title}\n </InspectorPrimitives.Title>\n </Button>\n ) : (\n <InspectorPrimitives.Title $textStyle={titleTextStyle}>\n {title}\n </InspectorPrimitives.Title>\n )}\n </>\n )}\n <Spacer.Horizontal />\n {right}\n </InspectorPrimitives.SectionHeader>\n )}\n <IndentContext.Provider value={{ indentLevel: 1 }}>\n {children}\n </IndentContext.Provider>\n </div>\n );\n};\n\ntype ExpandableSectionProps = {\n storageKey: string;\n initialVisibility?: \"show\" | \"hide\";\n};\n\nconst ExpandableSection = ({\n storageKey,\n initialVisibility = \"show\",\n ...props\n}: SectionProps & ExpandableSectionProps) => {\n const [visibility, setVisibility] = usePersistentStateString<\"show\" | \"hide\">(\n clientStorage,\n storageKey,\n initialVisibility\n );\n const expanded = visibility === \"show\";\n\n return (\n <SectionInternal\n {...props}\n right={!props.hideRightWhenCollapsed || expanded ? props.right : null}\n title={\n <div className=\"flex gap-1 items-center\">\n {props.title}\n <IconButton\n iconName={expanded ? \"ChevronDownIcon2\" : \"ChevronRightIcon2\"}\n onClick={() => setVisibility(expanded ? \"hide\" : \"show\")}\n />\n </div>\n }\n >\n {expanded && props.children}\n </SectionInternal>\n );\n};\n\nexport const Section = memo(function InspectorSection({\n storageKey,\n ...props\n}: SectionProps & Partial<ExpandableSectionProps>) {\n return storageKey ? (\n <ExpandableSection {...props} storageKey={storageKey} />\n ) : (\n <SectionInternal {...props} />\n );\n});\n","import { memoGeneric } from \"@noya-app/react-utils\";\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport React, {\n createContext,\n forwardRef,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport { useLabel } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\nimport { renderIcon } from \"./Icons\";\nimport { SelectableMenuItem } from \"./internal/Menu\";\nimport { Tooltip } from \"./Tooltip\";\n\ntype SegmentedControlColorScheme = \"primary\" | \"secondary\";\ntype SegmentedControlVariant = \"default\" | \"tabs\";\n\ntype SegmentedControlContextValue = {\n /** @default primary */\n colorScheme?: SegmentedControlColorScheme;\n};\n\nconst SegmentedControlContext = createContext<SegmentedControlContextValue>({\n colorScheme: \"primary\",\n});\n\nexport interface SegmentedControlProps<T extends string> {\n id?: string;\n value?: T;\n onValueChange?: (value: T) => void;\n /** @default primary */\n colorScheme?: SegmentedControlColorScheme;\n allowEmpty?: boolean;\n items: SegmentedControlItemProps<T>[];\n className?: string;\n style?: React.CSSProperties;\n variant?: SegmentedControlVariant;\n}\n\nexport type SegmentedControlItemProps<T extends string> = {\n title?: ReactNode;\n className?: string;\n style?: React.CSSProperties;\n tooltip?: ReactNode;\n variant?: SegmentedControlVariant;\n} & Pick<\n SelectableMenuItem<T>,\n \"value\" | \"disabled\" | \"icon\" | \"role\" | \"title\"\n>;\n\nconst SegmentedControlItem = forwardRef(function SegmentedControlItem<\n T extends string,\n>(\n {\n value,\n tooltip,\n title,\n disabled = false,\n icon,\n className,\n variant = \"default\",\n ...props\n }: SegmentedControlItemProps<T>,\n forwardedRef: React.ForwardedRef<HTMLButtonElement>\n) {\n const { colorScheme } = useContext(SegmentedControlContext);\n\n const itemElement = (\n <ToggleGroupPrimitive.Item\n ref={forwardedRef}\n value={(value ?? \"\").toString()}\n disabled={disabled}\n className={cx(\n \"group\",\n \"flex items-center justify-center\",\n \"font-sans text-button relative flex-1 appearance-none text-segmented-control-item focus:outline-none transition-colors\",\n variant === \"tabs\" ? \"font-semibold\" : \"font-normal\",\n variant === \"tabs\"\n ? \"\"\n : colorScheme === \"secondary\"\n ? \"focus:ring-2 focus:ring-secondary focus:ring-offset-1\"\n : \"focus:ring-2 focus:ring-primary focus:ring-offset-1\",\n variant === \"tabs\"\n ? \"aria-checked:text-primary\"\n : colorScheme === \"secondary\"\n ? \"aria-checked:bg-secondary aria-checked:text-white\"\n : colorScheme === \"primary\"\n ? \"aria-checked:bg-primary aria-checked:text-white\"\n : \"aria-checked:bg-segmented-control-item-active-background aria-checked:text-segmented-control-item-active-text\",\n \"focus:z-interactable\",\n variant === \"default\"\n ? \"px-1 rounded aria-checked:shadow-segment\"\n : \"px-1.5 border-y-2 border-y-transparent aria-checked:border-b-primary\",\n variant === \"default\" &&\n \"border-r border-divider last:border-r-0 aria-checked:border-r-transparent [&:has(+[aria-checked=true])]:border-r-transparent\",\n className\n )}\n {...props}\n >\n <span\n className={cx(\n \"inline-flex whitespace-pre flex-nowrap gap-1.5 items-center justify-center align-middle text-center\",\n variant === \"tabs\" &&\n \"group-focus:ring-2 group-focus:ring-primary-pastel group-focus:ring-offset-2\"\n )}\n >\n {icon && renderIcon(icon)}\n {title}\n </span>\n </ToggleGroupPrimitive.Item>\n );\n\n return tooltip ? (\n <Tooltip content={tooltip}>{itemElement}</Tooltip>\n ) : (\n itemElement\n );\n});\n\nexport const SegmentedControl = memoGeneric(function SegmentedControl<\n T extends string,\n>({\n id: idProp,\n value,\n onValueChange,\n colorScheme,\n allowEmpty,\n items,\n variant = \"default\",\n className,\n style,\n}: SegmentedControlProps<T>) {\n const contextValue = useMemo(() => ({ colorScheme }), [colorScheme]);\n const { fieldId: id } = useLabel({ fieldId: idProp });\n\n const handleValueChange = useCallback(\n (value: T) => {\n if (!allowEmpty && !value) return;\n onValueChange?.(value);\n },\n [allowEmpty, onValueChange]\n );\n\n return (\n <SegmentedControlContext.Provider value={contextValue}>\n <ToggleGroupPrimitive.Root\n id={id}\n type=\"single\"\n value={value}\n onValueChange={handleValueChange}\n className={cx(\n `appearance-none relative outline-none`,\n variant === \"default\" &&\n \"grid min-h-input-height bg-input-background rounded py-0.5 px-0.5\",\n variant === \"tabs\" && \"flex gap-1.5 min-h-[33px]\",\n className\n )}\n style={{\n ...style,\n gridTemplateColumns: `repeat(${items.length}, 1fr)`,\n }}\n >\n {items.map((item, index) => (\n <SegmentedControlItem key={index} {...item} variant={variant} />\n ))}\n </ToggleGroupPrimitive.Root>\n </SegmentedControlContext.Provider>\n );\n});\n","import {\n cssVarNames,\n portalScopeProps,\n usePortalScopeId,\n} from \"@noya-app/noya-designsystem\";\nimport { Rect } from \"@noya-app/noya-geometry\";\nimport { useSize } from \"@noya-app/react-utils\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport type { MeasurableElement } from \"@radix-ui/utils\";\nimport React, { memo, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\n\n// Create a Measurable from a Rect\nconst createVirtualElement = (rect: Rect): MeasurableElement => ({\n getBoundingClientRect: () => ({\n width: rect.width,\n height: rect.height,\n x: rect.x,\n y: rect.y,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height,\n left: rect.x,\n toJSON: () => null,\n }),\n});\n\ntype SelectionToolbarContainerProps = {\n rect: Rect;\n children: React.ReactNode;\n portalContainer?: HTMLElement | null;\n};\n\nexport const SelectionToolbarContainer = memo(\n function SelectionToolbarContainer({\n rect,\n children,\n portalContainer,\n }: SelectionToolbarContainerProps) {\n const portalScopeId = usePortalScopeId();\n const containerRef = React.useRef<HTMLDivElement>(null);\n const size = useSize(containerRef, \"width\");\n\n // Create a virtual reference element from the rect\n const virtualRef = useMemo(\n () => ({\n current: createVirtualElement(rect),\n }),\n [rect]\n );\n\n const popperContent = (\n <PopperPrimitive.Content\n {...portalScopeProps(portalScopeId)}\n side=\"top\"\n sideOffset={10}\n align=\"center\"\n avoidCollisions\n collisionPadding={10}\n contentEditable={false}\n style={{\n zIndex: 1000,\n opacity: size ? 1 : 0,\n transition: \"opacity 0.2s ease-in-out\",\n [cssVarNames.colors.inputBackground]: \"transparent\",\n [cssVarNames.colors.buttonBackground]: \"transparent\",\n }}\n >\n <div\n ref={containerRef}\n className=\"flex gap-1 bg-popover-background rounded shadow-popover p-1\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onPointerDown={(e) => e.stopPropagation()}\n onWheel={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </PopperPrimitive.Content>\n );\n\n return (\n <PopperPrimitive.Root>\n <PopperPrimitive.Anchor virtualRef={virtualRef} />\n {portalContainer\n ? createPortal(popperContent, portalContainer)\n : popperContent}\n </PopperPrimitive.Root>\n );\n }\n);\n","import {\n ChevronDownIcon,\n ChevronUpIcon,\n DropdownChevronIcon,\n} from \"@noya-app/noya-icons\";\nimport { memoGeneric } from \"@noya-app/react-utils\";\nimport * as Select from \"@radix-ui/react-select\";\nimport { type SelectProps } from \"@radix-ui/react-select\";\nimport React, {\n CSSProperties,\n FocusEventHandler,\n useMemo,\n useState,\n} from \"react\";\nimport { useLabel, useLabelPosition } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\n\nimport {\n portalScopeProps,\n usePortalScopeId,\n} from \"../contexts/PortalScopeContext\";\nimport { getInsetEndStyles } from \"../utils/inputs\";\nimport { Button } from \"./Button\";\nimport { renderIcon } from \"./Icons\";\nimport {\n isSelectableMenuItem,\n MenuItem,\n SelectableMenuItem,\n styles,\n} from \"./internal/Menu\";\nimport { MenuComponents, MenuViewport } from \"./internal/MenuViewport\";\nimport { Label } from \"./Label\";\n\ntype Props<T extends string> = {\n id?: string;\n style?: React.CSSProperties;\n className?: string;\n items: MenuItem<T>[];\n value: T;\n onSelect?: (value: T) => void;\n placeholder?: string;\n disabled?: boolean;\n readOnly?: boolean;\n label?: React.ReactNode;\n onFocus?: FocusEventHandler;\n onBlur?: FocusEventHandler;\n contentStyle?: React.CSSProperties;\n} & Pick<SelectProps, \"open\" | \"onOpenChange\">;\n\nconst readOnlyStyle: CSSProperties = {\n justifyContent: \"flex-start\",\n textAlign: \"left\",\n};\n\nconst scrollButtonStyles = `\n flex \n items-center \n justify-center \n h-[25px] \n cursor-default\n text-text-muted\n hover:text-text\n`;\n\nconst insetEndStyles = getInsetEndStyles();\n\ninterface SelectMenuTriggerProps {\n id?: string;\n style?: React.CSSProperties;\n className?: string;\n disabled?: boolean;\n icon?: React.ReactNode;\n placeholder?: string;\n isOpen?: boolean;\n onFocus?: FocusEventHandler;\n onBlur?: FocusEventHandler;\n label?: React.ReactNode;\n}\n\nconst SelectMenuTrigger = memoGeneric(function SelectMenuTrigger({\n style,\n className,\n disabled,\n icon,\n placeholder,\n isOpen,\n onFocus,\n onBlur,\n ...props\n}: SelectMenuTriggerProps) {\n const { label, fieldId: id } = useLabel({\n label: props.label,\n fieldId: props.id,\n });\n const labelPosition = useLabelPosition();\n\n return (\n <Select.SelectTrigger asChild onFocus={onFocus} onBlur={onBlur}>\n <Button\n id={id}\n style={style}\n className={cx(\n className ?? \"flex w-full\",\n \"flex-1 focus:z-interactable relative\",\n isOpen && \"ring-2 ring-primary\"\n )}\n disabled={disabled}\n >\n {icon && <span className=\"pr-1.5\">{renderIcon(icon)}</span>}\n {label && labelPosition === \"inset\" && (\n <div className={insetEndStyles}>\n <Label className=\"pr-4 text-text-disabled\" htmlFor={id}>\n {label}\n </Label>\n </div>\n )}\n <span className=\"flex-1 flex\">\n <Select.Value placeholder={placeholder} />\n </span>\n <DropdownChevronIcon\n className={cx(\n \"transition-transform duration-100 ml-1.5\",\n isOpen ? \"rotate-180\" : \"rotate-0\"\n )}\n />\n </Button>\n </Select.SelectTrigger>\n );\n});\n\nconst Components: MenuComponents = {\n Item: Select.Item,\n ItemText: Select.ItemText,\n Separator: Select.Separator,\n};\n\nexport const SelectMenu = memoGeneric(function SelectMenu<\n T extends string = string,\n>({\n style,\n className,\n items,\n value,\n onSelect,\n placeholder,\n disabled,\n readOnly,\n open,\n onFocus,\n onBlur,\n onOpenChange,\n contentStyle: contentStyleProp,\n ...props\n}: Props<T>) {\n const portalScopeId = usePortalScopeId();\n\n const selectedItem = items.find(\n (item): item is SelectableMenuItem<T> =>\n isSelectableMenuItem(item) && item.value === value\n );\n const icon = selectedItem?.icon;\n const [internalOpen, setInternalOpen] = useState(open);\n\n const { label, fieldId: id } = useLabel({\n label: props.label,\n fieldId: props.id,\n });\n\n const handleOpenChange = (open: boolean) => {\n if (onOpenChange) {\n onOpenChange(open);\n }\n setInternalOpen(open);\n };\n\n const readOnlyButton = useMemo(\n () => (\n <Button\n id={id}\n style={style}\n contentStyle={readOnlyStyle}\n className={cx(`${className} flex-1 focus:z-interactable gap-1.5`)}\n disabled={disabled}\n >\n {icon && renderIcon(icon)}\n <span className=\"flex flex-1\">{selectedItem?.title ?? value}</span>\n </Button>\n ),\n [icon, id, style, className, disabled, value, selectedItem]\n );\n\n const contentStyle = useMemo(() => {\n return {\n width: \"var(--radix-select-trigger-width)\",\n minWidth: \"max-content\",\n maxHeight: \"500px\",\n ...contentStyleProp,\n };\n }, [contentStyleProp]);\n\n const content = (\n <Select.Root\n value={value}\n onValueChange={onSelect}\n open={open}\n onOpenChange={handleOpenChange}\n >\n <SelectMenuTrigger\n id={id}\n style={style}\n className={className}\n disabled={disabled}\n icon={icon}\n placeholder={placeholder}\n isOpen={internalOpen}\n onFocus={onFocus}\n onBlur={onBlur}\n label={label}\n />\n <Select.Portal>\n <Select.Content\n {...portalScopeProps(portalScopeId)}\n className={styles.contentStyle}\n position=\"popper\"\n sideOffset={6}\n collisionPadding={8}\n align=\"center\"\n style={contentStyle}\n >\n <Select.ScrollUpButton className={scrollButtonStyles}>\n <ChevronUpIcon\n className={cx(\"transition-transform duration-100\")}\n />\n </Select.ScrollUpButton>\n <Select.Viewport>\n <MenuViewport items={items} Components={Components} />\n </Select.Viewport>\n <Select.ScrollDownButton className={scrollButtonStyles}>\n <ChevronDownIcon />\n </Select.ScrollDownButton>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n\n return readOnly ? readOnlyButton : content;\n});\n","import * as RadixSlider from \"@radix-ui/react-slider\";\nimport React, { FocusEventHandler, memo, useCallback, useMemo } from \"react\";\nimport { useLabel } from \"../hooks/useLabel\";\nimport { cx } from \"../utils/classNames\";\n\ntype ColorScheme = \"primary\" | \"secondary\";\n\ninterface Props {\n id?: string;\n style?: React.CSSProperties;\n className?: string;\n value: number;\n onValueChange: (value: number) => void;\n min: number;\n max: number;\n step?: number;\n colorScheme?: ColorScheme;\n label?: React.ReactNode;\n onFocus?: FocusEventHandler;\n onBlur?: FocusEventHandler;\n readOnly?: boolean;\n}\n\nconst THUMB_WIDTH = 8; // Width of the thumb in pixels\n\nconst thumbStyle = {\n width: THUMB_WIDTH,\n};\n\nexport const Slider = memo(function Slider({\n style,\n className,\n value,\n onValueChange,\n min,\n max,\n step,\n colorScheme,\n onFocus,\n onBlur,\n readOnly = false,\n ...props\n}: Props) {\n const arrayValue = useMemo(\n () => [Math.min(Math.max(value, min), max)],\n [value, min, max]\n );\n\n const { fieldId: id } = useLabel({\n fieldId: props.id,\n });\n\n const handleValueChange = useCallback(\n (arrayValue: number[]) => {\n onValueChange(arrayValue[0]);\n },\n [onValueChange]\n );\n\n const ratio = (arrayValue[0] - min) / (max - min);\n\n return (\n <RadixSlider.Root\n min={min}\n max={max}\n step={step}\n id={id}\n value={arrayValue}\n onValueChange={handleValueChange}\n className={cx(\n \"flex relative items-center select-none touch-none h-input-height rounded flex-grow max-h-input-height cursor-pointer\",\n className\n )}\n style={style}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={readOnly}\n >\n <div className=\"relative flex-grow h-[3px] overflow-hidden\">\n <div\n className=\"absolute h-full rounded-l bg-primary\"\n style={{\n left: 0,\n width: `calc(${ratio * 100}% - ${ratio * 8}px - 2px)`,\n }}\n />\n <div\n className=\"absolute h-full rounded-r bg-input-background\"\n style={{\n right: 0,\n width: `calc(100% - ${ratio * 100}% + ${ratio * 8}px - 10px)`,\n }}\n />\n </div>\n <RadixSlider.Thumb\n style={thumbStyle}\n className={cx(\n \"block h-[21px] rounded-sm bg-slider-thumb-background shadow-sliderThumb transition-colors focus:outline-primary focus:outline-2\",\n \"cursor-ew-resize\",\n // \"outline-none outline outline-2 outline-offset-[0px] outline-background\",\n colorScheme === undefined && \"border-slider-border\",\n colorScheme === \"primary\" && \"border-primary\",\n colorScheme === \"secondary\" && \"border-secondary\"\n )}\n />\n </RadixSlider.Root>\n );\n});\n","import * as React from \"react\";\nimport {\n ActiveDragContextType,\n DragRegistrationContextType,\n SharedDragProps,\n} from \"./DragRegistration\";\nimport { SharedDragProvider } from \"./SharedDragProvider\";\nimport { Sortable, SortableProps } from \"./Sortable\";\n\nexport function createSharedDrag(): {\n Provider: typeof SharedDragProvider;\n Sortable: <TItem, TElement extends HTMLElement>(\n props: SortableProps<TItem, TElement>\n ) => React.ReactNode;\n props: SharedDragProps;\n} {\n const dragRegistrationContext =\n React.createContext<DragRegistrationContextType | null>(null);\n const activeDragContext = React.createContext<ActiveDragContextType | null>(\n null\n );\n\n const sharedDragProps: SharedDragProps = {\n dragRegistrationContext,\n activeDragContext,\n };\n\n const Provider = ({ children }: { children: React.ReactNode }) => (\n <SharedDragProvider sharedDragProps={sharedDragProps}>\n {children}\n </SharedDragProvider>\n );\n\n return {\n Provider,\n Sortable: <TItem, TElement extends HTMLElement>(\n props: SortableProps<TItem, TElement>\n ) => <Sortable sharedDragProps={sharedDragProps} {...props} />,\n props: sharedDragProps,\n };\n}\n","import * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport * as React from \"react\";\nimport { cx } from \"../utils/classNames\";\n\ntype SwitchColorScheme = \"primary\" | \"secondary\";\n\ninterface Props {\n id?: string;\n value: boolean;\n onChange: (value: boolean) => void;\n /** @default normal */\n colorScheme?: SwitchColorScheme;\n disabled?: boolean;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const Switch = function Switch({\n id,\n value,\n onChange,\n colorScheme = \"primary\",\n disabled,\n onFocus,\n onBlur,\n style,\n className,\n}: Props) {\n return (\n <SwitchPrimitive.Root\n id={id}\n style={style}\n checked={value}\n disabled={disabled}\n onCheckedChange={(newValue) => {\n onChange(newValue);\n }}\n className={cx(\n \"all-unset w-8 h-[19px] bg-active-background rounded-full relative cursor-pointer ring-offset-background [-webkit-tap-highlight-color:rgba(0,0,0,0)] focus:ring-2 focus:ring-primary focus:ring-offset-[1px] outline-none data-[state=checked]:bg-primary transition-all\",\n colorScheme === \"secondary\" && \"data-[state=checked]:bg-secondary\",\n \"focus:z-interactable\",\n className\n )}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n <SwitchPrimitive.Thumb className=\"block w-[15px] h-[15px] bg-background rounded-full transition-transform translate-x-[2px] data-[state=checked]:translate-x-[15px]\" />\n </SwitchPrimitive.Root>\n );\n};\n","import React, { memo, useMemo } from \"react\";\nimport { cx } from \"../utils/classNames\";\nimport { colorFromString } from \"../utils/colorFromString\";\n\ntype Point = { x: number; y: number };\n\nconst UserPointerContainer = memo(function UserPointerContainer({\n point,\n visible,\n children,\n className,\n style,\n}: {\n point: Point;\n visible?: boolean;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}) {\n return (\n <div\n style={{\n transform: `translate(${Math.round(point.x)}px, ${Math.round(point.y)}px)`,\n transition: \"transform 0.075s, opacity 0.2s\",\n ...style,\n }}\n className={cx(\n \"pointer-events-none\",\n visible ? \"opacity-100\" : \"opacity-0\",\n className\n )}\n >\n {children}\n </div>\n );\n});\n\nconst UserNameTag = memo(function UserNameTag({\n backgroundColor,\n className,\n style,\n children,\n}: {\n backgroundColor: string;\n className?: string;\n style?: React.CSSProperties;\n children: React.ReactNode;\n}) {\n return (\n <span\n className={cx(\n \"relative inline-block rounded-full text-xs font-medium leading-none text-white shadow-sm px-2 py-1.5 border border-background\",\n className\n )}\n style={{\n backgroundColor,\n letterSpacing: \"-0.3px\",\n ...style,\n }}\n >\n {children}\n </span>\n );\n});\n\nconst UserPointerIcon = memo(function PointerIcon({\n size,\n color = \"black\",\n className,\n style,\n}: {\n size: number;\n color?: string;\n className?: string;\n style?: React.CSSProperties;\n}) {\n // Simple triangle shape: left point, top right, bottom right\n const points = \"0,5 10,0 10,10\";\n\n return (\n <svg\n width={size}\n height={size}\n className={className}\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n transform: `translate(0, -${size / 2}px) rotate(45deg)`,\n transformOrigin: \"left center\",\n ...style,\n }}\n >\n <polygon\n points={points}\n fill={color}\n stroke=\"var(--n-background)\"\n strokeWidth=\"0.5\"\n />\n </svg>\n );\n});\n\nexport type UserPointerProps = {\n userId?: string;\n name?: string;\n /** label to display in the tooltip next to the Pointer */\n visible?: boolean;\n point: Point;\n /** defaults to a random color based on the key, but can optionally be overridden */\n backgroundColor?: string;\n style?: React.CSSProperties;\n className?: string;\n};\n\nconst POINTER_SIZE = 12;\nconst POINTER_OVERLAP = 6;\n\nexport const UserPointer = memo(function UserPointer({\n userId,\n name,\n visible = true,\n point,\n backgroundColor,\n style,\n className,\n}: UserPointerProps) {\n const userBackgroundColor = useMemo(\n () => backgroundColor ?? colorFromString(userId ?? name ?? \"\"),\n [backgroundColor, userId, name]\n );\n\n const pointerOverlapStyle = useMemo(\n () => ({\n marginRight: `-${POINTER_OVERLAP}px`,\n marginBottom: `-${POINTER_OVERLAP}px`,\n }),\n []\n );\n\n const nameTagOverlapStyle = useMemo(\n () => ({ marginLeft: `${POINTER_SIZE - POINTER_OVERLAP + 1}px` }),\n []\n );\n\n return (\n <UserPointerContainer\n point={point}\n visible={visible}\n className={className}\n style={style}\n >\n {name && (\n <div className=\"relative\">\n <UserPointerIcon\n size={POINTER_SIZE}\n color={userBackgroundColor}\n style={pointerOverlapStyle}\n />\n <UserNameTag\n backgroundColor={userBackgroundColor}\n style={nameTagOverlapStyle}\n >\n {name}\n </UserNameTag>\n </div>\n )}\n </UserPointerContainer>\n );\n});\n","import { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport { useSize } from \"@noya-app/react-utils\";\nimport React, {\n forwardRef,\n memo,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { useWindowSize } from \"../../hooks/useWindowSize\";\nimport { cx } from \"../../utils/classNames\";\nimport { DrawerWorkspaceLayout } from \"./DrawerWorkspaceLayout\";\nimport { PanelWorkspaceLayout } from \"./PanelWorkspaceLayout\";\nimport {\n PanelLayoutState,\n PercentageSidebarOptions,\n SidebarRef,\n} from \"./types\";\n\nexport type SideType = \"auto\" | \"panel\" | \"drawer\";\n\nexport type DetectSizeType = \"container\" | \"window\";\n\nexport interface WorkspaceLayoutProps {\n id?: string;\n className?: string;\n style?: React.CSSProperties;\n theme?: \"light\" | \"dark\";\n autoSavePrefix?: string;\n left?: React.ReactNode;\n leftOptions?: SideOptions;\n children?: React.ReactNode;\n right?: React.ReactNode;\n rightOptions?: SideOptions;\n toolbar?: React.ReactNode;\n sideType?: SideType;\n sideTypeBreakpoint?: number;\n detectSize?: DetectSizeType;\n onChangeLayoutState?: (layoutState: PanelLayoutState) => void;\n}\n\nexport type WorkspaceLayoutRef = {\n setLeftExpanded: (expanded: boolean) => void;\n setRightExpanded: (expanded: boolean) => void;\n toggleSides: () => void;\n toggleLeft: () => void;\n toggleRight: () => void;\n};\n\nexport type SideOptions = {\n style?: React.CSSProperties;\n className?: string;\n resizable?: boolean;\n /**\n * Accepts a number (px) or % string (e.g. \"50%\").\n * Use % to avoid flicker server-rendering.\n */\n initialSize?: number | string;\n minSize?: number | string;\n maxSize?: number | string;\n};\n\nexport const WorkspaceLayout = forwardRef(function WorkspaceLayout(\n {\n autoSavePrefix,\n left,\n right,\n id,\n className,\n style,\n toolbar,\n children,\n onChangeLayoutState,\n sideType = \"auto\",\n sideTypeBreakpoint = 800,\n detectSize = \"container\",\n leftOptions: {\n minSize: leftMinSize = 200,\n maxSize: leftMaxSize = 500,\n initialSize: leftInitialSize = 280,\n resizable: leftResizable = true,\n style: leftStyle,\n className: leftClassName,\n } = {},\n rightOptions: {\n minSize: rightMinSize = 200,\n maxSize: rightMaxSize = 500,\n initialSize: rightInitialSize = 280,\n resizable: rightResizable = true,\n style: rightStyle,\n className: rightClassName,\n } = {},\n theme,\n }: WorkspaceLayoutProps,\n forwardedRef: React.ForwardedRef<WorkspaceLayoutRef>\n) {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const containerSize = useSize(containerRef);\n const windowSize = useWindowSize();\n\n // If we're in embedded (iframed) mode, use the window size.\n // Otherwise, use the container size (if it's available).\n const parentSize =\n detectSize === \"window\"\n ? windowSize\n : containerSize && containerSize.width > 0\n ? containerSize\n : windowSize;\n\n function getPercentage(size: number | string) {\n return typeof size === \"string\"\n ? parseFloat(size)\n : (size / parentSize.width) * 100;\n }\n\n function clampPercentage(\n value: number,\n min: number | undefined,\n max: number | undefined\n ) {\n let result = value;\n if (min !== undefined) {\n result = Math.max(result, min);\n }\n if (max !== undefined) {\n result = Math.min(result, max);\n }\n return result;\n }\n\n const leftSidebarMinPercentage =\n leftMinSize !== undefined ? getPercentage(leftMinSize) : undefined;\n const rightSidebarMinPercentage =\n rightMinSize !== undefined ? getPercentage(rightMinSize) : undefined;\n const leftSidebarMaxPercentage =\n leftMaxSize !== undefined ? getPercentage(leftMaxSize) : undefined;\n const rightSidebarMaxPercentage =\n rightMaxSize !== undefined ? getPercentage(rightMaxSize) : undefined;\n\n const leftSidebarPercentage = clampPercentage(\n getPercentage(leftInitialSize),\n leftSidebarMinPercentage,\n leftSidebarMaxPercentage\n );\n const rightSidebarPercentage = clampPercentage(\n getPercentage(rightInitialSize),\n rightSidebarMinPercentage,\n rightSidebarMaxPercentage\n );\n\n const leftSidebarRef = useRef<SidebarRef>(null);\n const rightSidebarRef = useRef<SidebarRef>(null);\n\n const [internalLayoutState, setInternalLayoutState] =\n useState<PanelLayoutState | null>(null);\n\n const handleChangeLayoutState = useCallback(\n (state: PanelLayoutState) => {\n setInternalLayoutState(state);\n onChangeLayoutState?.(state);\n },\n [onChangeLayoutState]\n );\n\n useImperativeHandle(forwardedRef, () => ({\n setLeftExpanded: (expanded: boolean) => {\n if (expanded) {\n leftSidebarRef.current?.expand();\n } else {\n leftSidebarRef.current?.collapse();\n }\n },\n setRightExpanded: (expanded: boolean) => {\n if (expanded) {\n rightSidebarRef.current?.expand();\n } else {\n rightSidebarRef.current?.collapse();\n }\n },\n toggleSides: () => {\n const isLeftSidebarExpanded = leftSidebarRef.current?.isExpanded();\n const isRightSidebarExpanded = rightSidebarRef.current?.isExpanded();\n\n if (isLeftSidebarExpanded || isRightSidebarExpanded) {\n leftSidebarRef.current?.collapse();\n rightSidebarRef.current?.collapse();\n } else {\n leftSidebarRef.current?.expand();\n rightSidebarRef.current?.expand();\n }\n },\n toggleLeft: () => {\n const isLeftSidebarExpanded = leftSidebarRef.current?.isExpanded();\n\n if (isLeftSidebarExpanded) {\n leftSidebarRef.current?.collapse();\n } else {\n leftSidebarRef.current?.expand();\n }\n },\n toggleRight: () => {\n const isRightSidebarExpanded = rightSidebarRef.current?.isExpanded();\n\n if (isRightSidebarExpanded) {\n rightSidebarRef.current?.collapse();\n } else {\n rightSidebarRef.current?.expand();\n }\n },\n }));\n\n useKeyboardShortcuts({\n \"Mod-.\": () => {\n const isLeftSidebarExpanded = leftSidebarRef.current?.isExpanded();\n const isRightSidebarExpanded = rightSidebarRef.current?.isExpanded();\n\n if (isLeftSidebarExpanded || isRightSidebarExpanded) {\n leftSidebarRef.current?.collapse();\n rightSidebarRef.current?.collapse();\n } else {\n leftSidebarRef.current?.expand();\n rightSidebarRef.current?.expand();\n }\n },\n });\n\n const centerPanelPercentage =\n 100 -\n (left ? leftSidebarPercentage : 0) -\n (right ? rightSidebarPercentage : 0);\n\n const leftPanel = left ? (\n <PanelInner\n style={leftStyle}\n className={cx(\"bg-sidebar-background flex-col\", leftClassName)}\n >\n {left}\n </PanelInner>\n ) : null;\n\n const rightPanel = right ? (\n <PanelInner\n style={rightStyle}\n className={cx(\"bg-sidebar-background flex-col\", rightClassName)}\n >\n {right}\n </PanelInner>\n ) : null;\n\n const centerPanel = (\n <PanelInner className=\"bg-canvas-background\">{children}</PanelInner>\n );\n\n const leftSidebarOptions: PercentageSidebarOptions = {\n minSize: leftSidebarMinPercentage,\n maxSize: leftSidebarMaxPercentage,\n initialSize: leftSidebarPercentage,\n resizable: leftResizable,\n };\n\n const rightSidebarOptions: PercentageSidebarOptions = {\n minSize: rightSidebarMinPercentage,\n maxSize: rightSidebarMaxPercentage,\n initialSize: rightSidebarPercentage,\n resizable: rightResizable,\n };\n\n const LayoutComponent =\n sideType === \"panel\"\n ? PanelWorkspaceLayout\n : sideType === \"drawer\"\n ? DrawerWorkspaceLayout\n : parentSize.width > sideTypeBreakpoint\n ? PanelWorkspaceLayout\n : DrawerWorkspaceLayout;\n\n // Wait until the container size is available to render the layout.\n // This is to avoid flickering when the layout is initially rendered.\n // If we're in embedded (iframed) mode, we don't need to wait for the container size,\n // because the window size is guaranteed to be available.\n //\n // We could always wait for the container size, but this lets us render\n // sooner in the embedded case.\n const readyToRender =\n detectSize === \"window\" || (containerSize && containerSize.width > 0);\n\n return (\n <div\n ref={containerRef}\n id={id}\n className={cx(\"flex flex-col bg-canvas-background relative\", className)}\n style={style}\n data-theme={theme}\n >\n {toolbar}\n <div className=\"flex flex-row flex-1 relative\">\n {readyToRender && (\n <LayoutComponent\n leftPanel={leftPanel}\n rightPanel={rightPanel}\n centerPanel={centerPanel}\n leftSidebarOptions={leftSidebarOptions}\n rightSidebarOptions={rightSidebarOptions}\n centerPanelPercentage={centerPanelPercentage}\n autoSavePrefix={autoSavePrefix}\n internalLayoutState={internalLayoutState}\n leftSidebarRef={leftSidebarRef}\n rightSidebarRef={rightSidebarRef}\n handleChangeLayoutState={handleChangeLayoutState}\n />\n )}\n </div>\n </div>\n );\n});\n\nconst PanelInner = memo(function PanelInner({\n children,\n style,\n className,\n}: {\n children: React.ReactNode;\n style?: React.CSSProperties;\n className?: string;\n}) {\n return (\n <div style={style} className={cx(\"absolute inset-0 flex\", className)}>\n {children}\n </div>\n );\n});\n","import { useEffect, useState } from \"react\";\n\nexport function useWindowSize() {\n const [size, setSize] = useState(\n typeof window === \"undefined\"\n ? { width: 0, height: 0 }\n : {\n width: window.innerWidth,\n height: window.innerHeight,\n }\n );\n\n useEffect(() => {\n const handleResize = () =>\n setSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return size;\n}\n","import React, { memo, useLayoutEffect, useRef, useState } from \"react\";\nimport {\n EDITOR_PANEL_GROUP_ID,\n LEFT_SIDEBAR_ID,\n RIGHT_SIDEBAR_ID,\n} from \"../../hooks/usePreservePanelSize\";\nimport { Drawer } from \"../Drawer\";\nimport { LayoutProps } from \"./types\";\n\nexport const DrawerWorkspaceLayout = memo(function DrawerWorkspaceLayout({\n leftPanel,\n leftSidebarRef,\n rightPanel,\n rightSidebarRef,\n centerPanel,\n internalLayoutState,\n handleChangeLayoutState,\n}: LayoutProps) {\n const portalContainer = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n\n useLayoutEffect(() => {\n if (mounted) return;\n\n setMounted(true);\n handleChangeLayoutState({\n leftSidebarCollapsed: true,\n rightSidebarCollapsed: true,\n });\n }, [handleChangeLayoutState, mounted]);\n\n const leftSidebarCollapsed =\n internalLayoutState?.leftSidebarCollapsed ?? false;\n const rightSidebarCollapsed =\n internalLayoutState?.rightSidebarCollapsed ?? false;\n\n return (\n <div\n ref={portalContainer}\n id={EDITOR_PANEL_GROUP_ID}\n className=\"flex flex-1 relative focus:outline-none\"\n >\n {leftPanel && (\n <Drawer\n id={LEFT_SIDEBAR_ID}\n ref={leftSidebarRef}\n className=\"flex-1\"\n open={!leftSidebarCollapsed}\n positioning=\"absolute\"\n side=\"left\"\n trigger={null}\n portalContainer={portalContainer.current}\n onOpenChange={(open) => {\n handleChangeLayoutState({\n rightSidebarCollapsed: rightSidebarCollapsed,\n leftSidebarCollapsed: !open,\n });\n }}\n >\n {leftPanel}\n </Drawer>\n )}\n {centerPanel}\n {rightPanel && (\n <Drawer\n id={RIGHT_SIDEBAR_ID}\n ref={rightSidebarRef}\n className=\"flex-1\"\n open={!rightSidebarCollapsed}\n positioning=\"absolute\"\n side=\"right\"\n trigger={null}\n portalContainer={portalContainer.current}\n onOpenChange={(open) => {\n handleChangeLayoutState({\n leftSidebarCollapsed: leftSidebarCollapsed,\n rightSidebarCollapsed: !open,\n });\n }}\n >\n {rightPanel}\n </Drawer>\n )}\n </div>\n );\n});\n","import React, { useLayoutEffect, useRef } from \"react\";\nimport { ImperativePanelGroupHandle } from \"react-resizable-panels\";\nimport { PanelLayoutState } from \"../components/workspace/types\";\nimport { useWindowSize } from \"./useWindowSize\";\n\nexport const EDITOR_PANEL_GROUP_ID = \"editor-panel-group\";\nexport const LEFT_SIDEBAR_ID = \"editor-left-sidebar\";\nexport const RIGHT_SIDEBAR_ID = \"editor-right-sidebar\";\nexport const CONTENT_AREA_ID = \"editor-content-area\";\n\nexport function usePreservePanelSize(\n panelGroupRef: React.RefObject<ImperativePanelGroupHandle | null>,\n setPanelLayoutState?: (state: PanelLayoutState) => void\n) {\n const windowSize = useWindowSize();\n const layoutRef = useRef<\n { windowWidth: number; panelPercentages: number[] } | undefined\n >();\n\n useLayoutEffect(() => {\n const panelGroup = document.querySelector(\n `[data-panel-group-id=\"${EDITOR_PANEL_GROUP_ID}\"]`\n ) as HTMLElement;\n\n function observePanels() {\n const panels = [\n ...panelGroup.querySelectorAll<HTMLElement>(\"[data-panel]\"),\n ];\n\n const panelObserver = new ResizeObserver(() => {\n const layout = {\n windowWidth: panelGroup.offsetWidth,\n panelPercentages: panelGroupRef.current?.getLayout() ?? [],\n };\n layoutRef.current = layout;\n\n const leftSidebar = panels.find(\n (panel) => panel.id === LEFT_SIDEBAR_ID\n );\n const rightSidebar = panels.find(\n (panel) => panel.id === RIGHT_SIDEBAR_ID\n );\n\n setPanelLayoutState?.({\n leftSidebarCollapsed: leftSidebar?.offsetWidth === 0,\n rightSidebarCollapsed: rightSidebar?.offsetWidth === 0,\n });\n });\n\n panels.forEach((panel) => panelObserver.observe(panel));\n\n return () => {\n panelObserver.disconnect();\n };\n }\n\n let disconnectPanelObserver = observePanels();\n\n const panelGroupObserver = new MutationObserver(() => {\n disconnectPanelObserver();\n disconnectPanelObserver = observePanels();\n });\n\n panelGroupObserver.observe(panelGroup, {\n childList: true,\n });\n\n return () => {\n disconnectPanelObserver();\n panelGroupObserver.disconnect();\n };\n }, [panelGroupRef, setPanelLayoutState]);\n\n useLayoutEffect(() => {\n if (!layoutRef.current) return;\n\n // Preserve the pixel values of the left and right sidebar when the window is resized.\n // To do this we convert the percentage values to pixel values based on the old window width,\n // then convert the pixel values to percentage values based on the new window width.\n const {\n windowWidth: oldWindowWidth,\n panelPercentages: oldPanelPercentages,\n } = layoutRef.current;\n\n // Check the types of the values in the array\n if (\n oldPanelPercentages.some(\n (value) => typeof value !== \"number\" || isNaN(value)\n ) ||\n oldWindowWidth === 0\n ) {\n return;\n }\n\n const currentLayout = panelGroupRef.current?.getLayout();\n\n // Ensure we have the same number of panels\n if (!currentLayout || currentLayout.length !== oldPanelPercentages.length) {\n return;\n }\n\n if (currentLayout.length === 3) {\n const leftSidebarWidth = (oldPanelPercentages[0] / 100) * oldWindowWidth;\n const rightSidebarWidth = (oldPanelPercentages[2] / 100) * oldWindowWidth;\n\n const newLeftSidebarPercentage =\n (leftSidebarWidth / windowSize.width) * 100;\n const newRightSidebarPercentage =\n (rightSidebarWidth / windowSize.width) * 100;\n\n const newLayout = [\n newLeftSidebarPercentage,\n 100 - newLeftSidebarPercentage - newRightSidebarPercentage,\n newRightSidebarPercentage,\n ];\n\n try {\n panelGroupRef.current?.setLayout(newLayout);\n } catch (e) {\n console.error(e);\n console.info(\"snapshot on error\", {\n oldWindowWidth,\n oldPanelPercentages,\n newLayout,\n currentLayout,\n });\n }\n } else if (currentLayout.length === 2) {\n // Check if this is a right sidebar layout by looking at the panel IDs\n const panelGroup = document.querySelector(\n `[data-panel-group-id=\"${EDITOR_PANEL_GROUP_ID}\"]`\n );\n const panels = [\n ...(panelGroup?.querySelectorAll<HTMLElement>(\"[data-panel]\") ?? []),\n ];\n const isRightSidebarLayout = panels[1]?.id === RIGHT_SIDEBAR_ID;\n\n if (isRightSidebarLayout) {\n const rightSidebarWidth =\n (oldPanelPercentages[1] / 100) * oldWindowWidth;\n const newRightSidebarPercentage =\n (rightSidebarWidth / windowSize.width) * 100;\n const newLayout = [\n 100 - newRightSidebarPercentage,\n newRightSidebarPercentage,\n ];\n\n try {\n panelGroupRef.current?.setLayout(newLayout);\n } catch (e) {\n console.error(e);\n console.info(\"snapshot on error\", {\n oldWindowWidth,\n oldPanelPercentages,\n newLayout,\n currentLayout,\n });\n }\n } else {\n const leftSidebarWidth =\n (oldPanelPercentages[0] / 100) * oldWindowWidth;\n const newLeftSidebarPercentage =\n (leftSidebarWidth / windowSize.width) * 100;\n const newLayout = [\n newLeftSidebarPercentage,\n 100 - newLeftSidebarPercentage,\n ];\n\n try {\n panelGroupRef.current?.setLayout(newLayout);\n } catch (e) {\n console.error(e);\n console.info(\"snapshot on error\", {\n oldWindowWidth,\n oldPanelPercentages,\n newLayout,\n currentLayout,\n });\n }\n }\n }\n }, [panelGroupRef, windowSize.width]);\n}\n","import React, { memo, useRef } from \"react\";\nimport {\n ImperativePanelGroupHandle,\n ImperativePanelHandle,\n Panel,\n PanelGroup,\n PanelResizeHandle,\n} from \"react-resizable-panels\";\nimport {\n CONTENT_AREA_ID,\n EDITOR_PANEL_GROUP_ID,\n LEFT_SIDEBAR_ID,\n RIGHT_SIDEBAR_ID,\n usePreservePanelSize,\n} from \"../../hooks/usePreservePanelSize\";\nimport { LayoutProps } from \"./types\";\n\nexport const PanelWorkspaceLayout = memo(function PanelWorkspaceLayout({\n leftPanel,\n rightPanel,\n centerPanel,\n leftSidebarOptions,\n rightSidebarOptions,\n centerPanelPercentage,\n autoSavePrefix,\n internalLayoutState,\n leftSidebarRef,\n rightSidebarRef,\n handleChangeLayoutState,\n}: LayoutProps) {\n const panelGroupRef = useRef<ImperativePanelGroupHandle>(null);\n\n usePreservePanelSize(panelGroupRef, handleChangeLayoutState);\n\n return (\n <PanelGroup\n ref={panelGroupRef}\n id={EDITOR_PANEL_GROUP_ID}\n className=\"flex-1\"\n direction=\"horizontal\"\n autoSaveId={\n autoSavePrefix\n ? `${autoSavePrefix}--${EDITOR_PANEL_GROUP_ID}`\n : undefined\n }\n >\n {leftPanel && (\n <>\n <Panel\n id={LEFT_SIDEBAR_ID}\n className=\"relative\"\n order={1}\n ref={leftSidebarRef as React.RefObject<ImperativePanelHandle>}\n defaultSize={leftSidebarOptions.initialSize}\n minSize={leftSidebarOptions.minSize}\n maxSize={\n leftSidebarOptions.maxSize ??\n (!leftSidebarOptions.resizable\n ? leftSidebarOptions.initialSize\n : undefined)\n }\n collapsible\n >\n {internalLayoutState?.leftSidebarCollapsed ? null : leftPanel}\n </Panel>\n <PanelResizeHandle className=\"cursor-col-resize w-px h-full bg-divider\" />\n </>\n )}\n <Panel\n id={CONTENT_AREA_ID}\n order={2}\n defaultSize={centerPanelPercentage}\n minSize={10}\n className=\"flex relative\"\n >\n {centerPanel}\n </Panel>\n {rightPanel && (\n <>\n <PanelResizeHandle className=\"cursor-col-resize w-px h-full bg-divider\" />\n <Panel\n id={RIGHT_SIDEBAR_ID}\n className=\"relative\"\n order={3}\n ref={rightSidebarRef as React.RefObject<ImperativePanelHandle>}\n minSize={rightSidebarOptions.minSize}\n defaultSize={rightSidebarOptions.initialSize}\n maxSize={\n rightSidebarOptions.maxSize ??\n (!rightSidebarOptions.resizable\n ? rightSidebarOptions.initialSize\n : undefined)\n }\n collapsible\n >\n {internalLayoutState?.rightSidebarCollapsed ? null : rightPanel}\n </Panel>\n </>\n )}\n </PanelGroup>\n );\n});\n","import { useDesignSystemConfiguration } from '../contexts/DesignSystemConfiguration';\n\nexport function usePlatform() {\n return useDesignSystemConfiguration().platform;\n}\n\n/**\n * Either ctrl or meta, depending on the platform\n */\nexport function usePlatformModKey(): 'ctrlKey' | 'metaKey' {\n const platform = useDesignSystemConfiguration().platform;\n return platform === 'mac' ? 'metaKey' : 'ctrlKey';\n}\n","import { useState, useEffect } from \"react\";\n\n/** @default light */\nexport type UseThemeReturnType = \"dark\" | \"light\";\n\n/**\n * Hook to get the current theme of the app via the `data-theme` attribute on the body element.\n * @returns The current theme.\n */\nexport function useTheme() {\n const [theme, setTheme] = useState<UseThemeReturnType>(\"light\");\n\n const checkTheme = () => {\n const currentTheme = document.body.getAttribute(\"data-theme\");\n switch (currentTheme) {\n case \"dark\":\n setTheme(\"dark\");\n break;\n case \"light\":\n setTheme(\"light\");\n break;\n }\n };\n\n useEffect(() => {\n checkTheme();\n\n // Setup observer for theme changes\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === \"attributes\" &&\n mutation.attributeName === \"data-theme\"\n ) {\n checkTheme();\n }\n });\n });\n\n // Observe body element for theme changes\n observer.observe(document.body, {\n attributes: true,\n attributeFilter: [\"data-theme\"],\n });\n\n return () => observer.disconnect();\n }, []);\n\n return theme;\n}\n","export const size = {\n medium: '800px',\n large: '1280px',\n xlarge: '1550px',\n xxlarge: '1680px',\n};\n\nexport const mediaQuery = {\n small: `@media (max-width: ${size.medium})`,\n medium: `@media (max-width: ${size.large}) and (min-width: ${size.medium})`,\n large: `@media (max-width: ${size.xlarge}) and (min-width: ${size.large})`,\n xlarge: `@media (min-width: ${size.xlarge})`,\n};\n","import { MenuItem, SeparatorItem } from \"../components/internal/Menu\";\n\nexport type Optional<T> = T | false | null | undefined;\n\nfunction withSeparators<T extends string>(\n elements: MenuItem<T>[][],\n separator: SeparatorItem\n): MenuItem<T>[] {\n const result: MenuItem<T>[] = [];\n\n for (let i = 0; i < elements.length; i++) {\n result.push(...elements[i]);\n\n if (i !== elements.length - 1) {\n result.push(separator);\n }\n }\n\n return result;\n}\n\nexport type MenuConfig<T extends string> = Optional<Optional<MenuItem<T>>[]>[];\n\nexport function createSectionedMenu<T extends string>(\n ...sections: MenuConfig<T>\n): MenuItem<T>[] {\n const nonEmptySections = sections\n .flatMap((section) => (section ? [section] : []))\n .map((section) => section.flatMap((item) => (item ? [item] : [])))\n .filter((section) => section.length > 0);\n\n return withSeparators(nonEmptySections, {\n type: \"separator\",\n }).flat();\n}\n","import { isDeepEqual } from \"@noya-app/noya-utils\";\nimport {\n defaultAcceptsDrop,\n RelativeDropPosition,\n} from \"../components/sorting/sorting\";\n\ntype MoveOptions = {\n paths: number[][];\n to: number[];\n};\n\nexport type MoveTreeItemOptions<T> = {\n root: T;\n move: (root: T, options: MoveOptions) => T;\n position: RelativeDropPosition;\n sourceIndexPath: number[];\n targetIndexPath: number[];\n};\n\nexport function moveTreeItem<T>({\n root,\n move,\n position,\n sourceIndexPath,\n targetIndexPath,\n}: MoveTreeItemOptions<T>): T {\n switch (position) {\n case \"above\": {\n return move(root, {\n paths: [sourceIndexPath],\n to: targetIndexPath,\n });\n }\n case \"below\": {\n return move(root, {\n paths: [sourceIndexPath],\n to: [...targetIndexPath.slice(0, -1), targetIndexPath.at(-1)! + 1],\n });\n }\n case \"inside\": {\n return move(root, {\n paths: [sourceIndexPath],\n to: [...targetIndexPath, 1000],\n });\n }\n }\n}\n\nexport type AcceptsDropOptions = {\n sourceIndexPath: number[];\n targetIndexPath: number[];\n position: RelativeDropPosition;\n\n /**\n * Whether to allow dropping the source item within the same parent as the target item.\n */\n allowSiblings: boolean;\n\n /**\n * Whether to allow dropping the source item within itself or one of its descendants.\n */\n allowRecursion: boolean;\n};\n\nexport function acceptsDrop({\n sourceIndexPath,\n targetIndexPath,\n position,\n allowSiblings,\n allowRecursion,\n}: AcceptsDropOptions): boolean {\n if (!allowRecursion) {\n const targetIsDescendantOfSource = isDeepEqual(\n sourceIndexPath,\n targetIndexPath.slice(0, sourceIndexPath.length)\n );\n\n if (targetIsDescendantOfSource) return false;\n }\n\n const areSiblings = isDeepEqual(\n sourceIndexPath.slice(0, -1),\n targetIndexPath.slice(0, -1)\n );\n\n if (areSiblings && position !== \"inside\") {\n if (!allowSiblings) {\n return false;\n }\n\n return defaultAcceptsDrop({\n sourceIndex: sourceIndexPath.at(-1)!,\n targetIndex: targetIndexPath.at(-1)!,\n position,\n sourceListId: \"\",\n targetListId: \"\",\n });\n }\n\n return true;\n}\n","import { Sketch } from '@noya-app/noya-file-format';\n\nexport const SUPPORTED_IMAGE_UPLOAD_TYPES = [\n 'image/png' as const,\n 'image/jpeg' as const,\n 'image/webp' as const,\n 'application/pdf' as const,\n 'image/svg+xml' as const,\n];\n\nexport const SUPPORTED_CANVAS_UPLOAD_TYPES = [\n ...SUPPORTED_IMAGE_UPLOAD_TYPES,\n '' as const,\n];\n\nexport type SupportedImageUploadType =\n (typeof SUPPORTED_IMAGE_UPLOAD_TYPES)[number];\n\nexport type SupportedCanvasUploadType =\n (typeof SUPPORTED_CANVAS_UPLOAD_TYPES)[number];\n\nexport type SketchPattern = {\n // This _class doesn't exist in Sketch, but it's convenient in `switch`\n // statements to be able to reference _class.\n _class: 'pattern';\n image?: Sketch.FileRef | Sketch.DataRef;\n patternFillType: Sketch.PatternFillType;\n patternTileScale: number;\n};\n","import { round } from \"@noya-app/noya-utils\";\nimport * as React from \"react\";\nimport { InputField } from \"./InputField\";\nimport { LabeledField } from \"./LabeledField\";\n\nexport type SetNumberMode = \"replace\" | \"adjust\";\n\nexport function getNewValue(\n value: number,\n mode: SetNumberMode,\n delta?: number\n) {\n return delta === undefined\n ? value\n : mode === \"replace\"\n ? delta\n : value + delta;\n}\n\nexport type DimensionValue = number | undefined;\n\ninterface Props {\n id?: string;\n value: DimensionValue;\n onSetValue: (value: number, mode: SetNumberMode) => void;\n label?: string;\n size?: number;\n placeholder?: string;\n disabled?: boolean;\n trigger?: \"change\" | \"submit\";\n}\n\nexport const DimensionInput = React.memo(function DimensionInput({\n id,\n value,\n onSetValue,\n label,\n size,\n placeholder = \"multi\",\n disabled,\n trigger = \"submit\",\n}: Props) {\n const handleNudgeValue = React.useCallback(\n (value: number) => onSetValue(value, \"adjust\"),\n [onSetValue]\n );\n\n const handleSetValue = React.useCallback(\n (value: number) => onSetValue(value, \"replace\"),\n [onSetValue]\n );\n\n return (\n <LabeledField label={label} labelPosition=\"inset\">\n <InputField.Root id={id} width={size}>\n <InputField.NumberInput\n value={value === undefined ? value : round(value, 2)}\n placeholder={value === undefined ? placeholder : undefined}\n onNudge={handleNudgeValue}\n disabled={disabled}\n {...(trigger === \"change\"\n ? { onChange: handleSetValue }\n : { onSubmit: handleSetValue })}\n />\n </InputField.Root>\n </LabeledField>\n );\n});\n","import React, {\n ForwardedRef,\n forwardRef,\n LabelHTMLAttributes,\n memo,\n ReactNode,\n} from \"react\";\nimport { Spacer } from \"./Spacer\";\nimport { textStyles } from \"./Text\";\nimport { cx } from \"../utils/classNames\";\n\nexport const Section = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cx(`flex-none flex flex-col `, className)}\n {...props}\n />\n));\n\nexport const SectionHeader = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cx(`flex items-center `, className)} {...props} />\n));\n\ntype TitleTextStyle = \"small\" | \"heading5\" | \"heading4\" | \"heading3\";\n\nexport const Title = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n $textStyle?: TitleTextStyle;\n }\n>(({ className, $textStyle, ...props }, ref) => (\n <div\n ref={ref}\n className={cx(\n `flex select-none ${$textStyle ? `${textStyles[$textStyle]} text-text` : \"font-sans text-label uppercase text-text-muted font-bold\"} `,\n className\n )}\n {...props}\n />\n));\n\nexport const Row = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cx(`flex-1 flex flex-row items-center `, className)}\n {...props}\n />\n));\n\nexport const Column = forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cx(`flex-1 flex flex-col gap-1 `, className)}\n {...props}\n />\n));\n\nexport const Checkbox = forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement>\n>(({ className, ...props }, ref) => (\n <input\n ref={ref}\n type=\"checkbox\"\n className={cx(`m-0 focus:z-interactable `, className)}\n {...props}\n />\n));\n\nexport const Text = forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => (\n <span\n ref={ref}\n className={cx(`font-sans text-heading5 font-normal `, className)}\n {...props}\n />\n));\n\nexport const VerticalSeparator = () => (\n <Spacer.Vertical size=\"inspector-v-separator\" />\n);\n\nexport const HorizontalSeparator = () => (\n <Spacer.Horizontal size=\"inspector-h-separator\" />\n);\n\n// const SliderRowLabel = forwardRef<\n// HTMLSpanElement,\n// React.HTMLAttributes<HTMLSpanElement>\n// >(({ className, ...props }, ref) => (\n// <span\n// ref={ref}\n// className={`font-sans text-heading5 font-normal text-text-muted -mb-[6px] `, className}\n// {...props}\n// />\n// ));\n\nexport const RowLabel = forwardRef(function RowLabel(\n {\n className,\n $textStyle,\n ...props\n }: LabelHTMLAttributes<HTMLLabelElement> & {\n $textStyle?: TitleTextStyle | \"label\";\n },\n ref: ForwardedRef<HTMLLabelElement>\n) {\n return (\n <label\n ref={ref}\n className={cx(\n `font-sans text-label uppercase flex items-center leading-[19px] font-bold text-text-subtle z-label ${$textStyle && textStyles[$textStyle]} `,\n className\n )}\n {...props}\n />\n );\n});\n\ninterface LabeledRowProps {\n id?: string;\n children: ReactNode;\n label: ReactNode;\n labelTextStyle?: TitleTextStyle;\n right?: ReactNode;\n className?: string;\n}\n\nexport const LabeledRow = memo(function LabeledRow({\n id,\n children,\n label,\n labelTextStyle,\n right,\n className,\n}: LabeledRowProps) {\n return (\n <Row id={id} className={className}>\n <Column>\n <RowLabel $textStyle={labelTextStyle}>\n {label}\n {right && <Spacer.Horizontal />}\n {right}\n </RowLabel>\n <Row>{children}</Row>\n </Column>\n </Row>\n );\n});\n\n// interface LabeledSliderRowProps {\n// children: ReactNode;\n// label: string;\n// }\n\n// export const LabeledSliderRow = memo(function LabeledSliderRow({\n// children,\n// label,\n// }: LabeledSliderRowProps) {\n// return (\n// <Row>\n// <Column>\n// <SliderRowLabel>{label}</SliderRowLabel>\n// <Row>{children}</Row>\n// </Column>\n// </Row>\n// );\n// });\n","import React from \"react\";\nimport { cssVarNames, cssVars } from \"../theme\";\nimport { Divider, DividerVertical } from \"./Divider\";\nimport { Spacer } from \"./Spacer\";\n\nexport interface BaseToolbarProps {\n children?: React.ReactNode;\n left?: React.ReactNode;\n right?: React.ReactNode;\n logo?: React.ReactNode;\n showDivider?: boolean;\n}\n\nconst toolbarStyle = {\n [cssVarNames.colors.buttonBackground]: \"transparent\",\n [cssVarNames.colors.inputBackground]: \"transparent\",\n};\n\nexport function BaseToolbar({\n children,\n left,\n right,\n logo,\n showDivider = true,\n}: BaseToolbarProps) {\n return (\n <div className=\"flex flex-col\" style={toolbarStyle}>\n <div\n className=\"flex items-center pr-2.5 bg-sidebar-background flex-none relative @container/toolbar\"\n style={{\n flex: `0 0 ${cssVars.spacing.toolbarHeight}`,\n }}\n >\n {logo && (\n <>\n {logo}\n <DividerVertical />\n </>\n )}\n <Spacer.Horizontal size={10} />\n {left && (\n <>\n <div className=\"flex gap-toolbar-separator\">{left}</div>\n <Spacer.Horizontal size={10} />\n </>\n )}\n <div className=\"flex items-center justify-center text-text-muted pointer-events-none @2xl/toolbar:absolute inset-0\">\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n pointerEvents: \"all\",\n }}\n >\n {children}\n </div>\n </div>\n <Spacer.Horizontal />\n <Spacer.Horizontal size={10} />\n <div className=\"flex gap-toolbar-separator\">{right}</div>\n </div>\n {showDivider && <Divider variant=\"strong\" />}\n </div>\n );\n}\n","import { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport React, { ComponentProps } from \"react\";\n\nimport { memoGeneric } from \"@noya-app/react-utils\";\nimport { BaseToolbar } from \"./BaseToolbar\";\nimport { Button } from \"./Button\";\nimport { DividerVertical } from \"./Divider\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport {\n getKeyboardShortcutsForMenuItems,\n isSelectableMenuItem,\n MenuItem,\n SelectableMenuItem,\n SubMenuItem,\n} from \"./internal/Menu\";\nimport { Tooltip } from \"./Tooltip\";\n\nconst iconButtonStyle = {\n height: 27,\n width: 27,\n minWidth: 27,\n};\n\nexport const ToolbarMenuDropdown = memoGeneric(function ToolbarMenuDropdown<\n T extends string,\n>({\n item,\n onSelectMenuItem,\n}: {\n item: SubMenuItem<T>;\n onSelectMenuItem?: (value: T) => void;\n}) {\n const [open, setOpen] = React.useState(false);\n\n return (\n <DropdownMenu\n open={open}\n onOpenChange={setOpen}\n items={item.items}\n onSelect={(value) => {\n if (onSelectMenuItem && value) {\n onSelectMenuItem(value);\n }\n }}\n >\n <Button\n disabled={item.disabled}\n active={item.checked || open}\n icon={item.icon}\n iconRight=\"DropdownChevronIcon\"\n >\n {item.title}\n </Button>\n </DropdownMenu>\n );\n});\n\nexport const ToolbarMenuButton = memoGeneric(function ToolbarMenuButton<\n T extends string,\n>({\n item,\n onSelectMenuItem,\n as,\n}: {\n item: SelectableMenuItem<T>;\n onSelectMenuItem?: (value: T) => void;\n as?: ComponentProps<typeof Button>[\"as\"];\n}) {\n const content = (\n <Button\n as={as}\n disabled={item.disabled}\n active={item.checked}\n icon={item.icon}\n style={item.icon && !item.title ? iconButtonStyle : undefined}\n {...(as === \"a\" && { href: item.value })}\n onClick={() => {\n if (onSelectMenuItem && item.value) {\n onSelectMenuItem(item.value);\n }\n }}\n >\n {item.title}\n </Button>\n );\n\n return item.tooltip ? (\n <Tooltip sideOffset={10} content={item.tooltip}>\n {content}\n </Tooltip>\n ) : (\n content\n );\n});\n\nexport const ToolbarMenuItem = memoGeneric(function ToolbarMenuItem<\n T extends string,\n>({\n item,\n onSelectMenuItem,\n buttonAs,\n}: {\n item: MenuItem<T>;\n onSelectMenuItem?: (value: T) => void;\n buttonAs?: ComponentProps<typeof Button>[\"as\"];\n}) {\n if (item.type === \"sectionHeader\") return null;\n\n if (item.type === \"separator\") {\n return <DividerVertical overflow={4} />;\n }\n\n if (isSelectableMenuItem(item)) {\n return (\n <ToolbarMenuButton\n item={item}\n onSelectMenuItem={onSelectMenuItem}\n as={buttonAs}\n />\n );\n }\n\n return (\n <ToolbarMenuDropdown item={item} onSelectMenuItem={onSelectMenuItem} />\n );\n});\n\nexport const ToolbarMenu = memoGeneric(function ToolbarMenu<T extends string>({\n items,\n onSelectMenuItem,\n buttonAs,\n}: {\n items: MenuItem<T>[];\n onSelectMenuItem?: (value: T) => void;\n buttonAs?: ComponentProps<typeof Button>[\"as\"];\n}) {\n return (\n <>\n {items.map((item, i) => {\n return (\n <ToolbarMenuItem\n key={i}\n item={item}\n onSelectMenuItem={onSelectMenuItem}\n buttonAs={buttonAs}\n />\n );\n })}\n </>\n );\n});\n\nexport interface ToolbarProps<T extends string = string> {\n children?: React.ReactNode;\n logo?: React.ReactNode;\n leftMenuItems?: MenuItem<T>[];\n rightMenuItems?: MenuItem<T>[];\n onSelectMenuItem?: (value: T) => void;\n /** Whether to bind keyboard shortcuts for menu items. @default true */\n shouldBindKeyboardShortcuts?: boolean;\n}\n\nexport function Toolbar<T extends string = string>({\n children,\n logo,\n leftMenuItems = [],\n rightMenuItems = [],\n onSelectMenuItem,\n shouldBindKeyboardShortcuts = true,\n}: ToolbarProps<T>) {\n // Register keyboard shortcuts for all menu items\n const allMenuItems = React.useMemo(\n () => [...leftMenuItems, ...rightMenuItems],\n [leftMenuItems, rightMenuItems]\n );\n\n useKeyboardShortcuts(\n React.useMemo(\n () =>\n onSelectMenuItem && shouldBindKeyboardShortcuts\n ? getKeyboardShortcutsForMenuItems(allMenuItems, onSelectMenuItem)\n : {},\n [allMenuItems, onSelectMenuItem, shouldBindKeyboardShortcuts]\n )\n );\n\n return (\n <BaseToolbar\n logo={logo}\n left={\n leftMenuItems.length > 0 && (\n <div className=\"flex gap-2\">\n <ToolbarMenu\n items={leftMenuItems}\n onSelectMenuItem={onSelectMenuItem}\n />\n </div>\n )\n }\n right={\n rightMenuItems.length > 0 && (\n <div className=\"flex gap-2\">\n <ToolbarMenu\n items={rightMenuItems}\n onSelectMenuItem={onSelectMenuItem}\n />\n </div>\n )\n }\n >\n {children}\n </BaseToolbar>\n );\n}\n"],"mappings":";;;;;;;AAEA,YAAYA,YAAW;;;ACwBvB,YAAY,WAAW;AAOhB,SAAS,QAEd,cACA,aAA0C,QAC1C;AACA,QAAM,CAACC,OAAM,OAAO,IAAU,eAA2B,MAAS;AAElE,EAAM,gBAAU,MAAM;AACpB,QAAI,aAAa,SAAS;AACxB,YAAM,mBAAmB,aAAa;AACtC,YAAM,iBAAiB,IAAI,eAAe,CAAC,YAAY;AACrD,YAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B;AAAA,QACF;AAIA,YAAI,CAAC,QAAQ,QAAQ;AACnB;AAAA,QACF;AAEA,cAAM,QAAQ,QAAQ,CAAC;AACvB,YAAI;AACJ,YAAI;AAEJ,YAAI,mBAAmB,OAAO;AAC5B,gBAAM,kBAAkB,MAAM,eAAe;AAE7C,gBAAM,aAAa,MAAM,QAAQ,eAAe,IAC5C,gBAAgB,CAAC,IACjB;AACJ,kBAAQ,WAAW,YAAY;AAC/B,mBAAS,WAAW,WAAW;AAAA,QACjC,OAAO;AAGL,gBAAM,OAAO,iBAAiB,sBAAsB;AACpD,kBAAQ,KAAK;AACb,mBAAS,KAAK;AAAA,QAChB;AAEA,gBAAQ,CAAC,gBAAgB;AACvB,cACE,gBACC,YAAY,UAAU,SAAS,eAAe,cAC9C,YAAY,WAAW,UAAU,eAAe,UACjD;AACA,mBAAO;AAAA,UACT;AAEA,iBAAO,EAAE,OAAO,OAAO;AAAA,QACzB,CAAC;AAAA,MACH,CAAC;AAED,qBAAe,QAAQ,kBAAkB,EAAE,KAAK,aAAa,CAAC;AAE9D,aAAO,MAAM;AACX,gBAAQ,MAAS;AACjB,uBAAe,UAAU,gBAAgB;AAAA,MAC3C;AAAA,IACF;AACA;AAAA,EACF,GAAG,CAAC,cAAc,UAAU,CAAC;AAE7B,SAAOA;AACT;;;AD3FA,IAAM,QAA6B;AAAA,EACjC,SAAS;AAAA,EACT,MAAM;AAAA,EACN,eAAe;AACjB;AAOO,IAAM,YAAkB,YAAK,SAASC,WAAU;AAAA,EACrD;AAAA,EACA;AACF,GAAU;AACR,QAAM,eAAqB,cAA8B,IAAI;AAC7D,QAAM,gBAAgB,QAAQ,YAAY;AAE1C,SACE,qCAAC,SAAI,KAAK,cAAc,OAAc,aACnC,iBACC,cAAc,QAAQ,KACtB,cAAc,SAAS,KACvB,SAAS,aAAa,CAC1B;AAEJ,CAAC;AAQM,IAAM,2BAAiC;AAAA,EAC5C,SAASC,0BAAyB;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAkC;AAChC,UAAM,eAAqB,cAA8B,IAAI;AAC7D,UAAM,gBAAgB,QAAQ,cAAc,SAAS;AAErD,WACE,qCAAC,SAAI,KAAK,cAAc,OAAc,aACnC,iBACC,cAAc,SAAS,IAAI,KAC3B,SAAS,cAAc,SAAS,CAAC,CACrC;AAAA,EAEJ;AACF;;;AExDA,OAAOC,UAA+B,eAAAC,cAAa,UAAAC,eAAc;;;ACAjE,SAAoB,aAAa,YAAAC,iBAAgB;AAE1C,SAAS,kBACd,KACA,WACA;AACA,QAAM,CAAC,oBAAoB,qBAAqB,IAAIA,UAAS,KAAK;AAElE,QAAM,iBAAiB,YAAY,CAAC,UAAqB;AACvD,UAAM,eAAe;AAAA,EACvB,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAkB;AAAA,IACtB,CAAC,UAAqB;AACpB,YAAM,eAAe;AACrB,UAAI,CAAC,IAAI,SAAS,SAAS,MAAM,aAAqB,GAAG;AACvD,8BAAsB,IAAI;AAAA,MAC5B;AAAA,IACF;AAAA,IACA,CAAC,GAAG;AAAA,EACN;AAEA,QAAM,kBAAkB;AAAA,IACtB,CAAC,UAAqB;AACpB,YAAM,eAAe;AACrB,UAAI,CAAC,IAAI,SAAS,SAAS,MAAM,aAAqB,GAAG;AACvD,8BAAsB,KAAK;AAAA,MAC7B;AAAA,IACF;AAAA,IACA,CAAC,GAAG;AAAA,EACN;AAEA,QAAM,aAAa;AAAA,IACjB,CAAC,UAAqB;AACpB,YAAM,eAAe;AACrB,kBAAY,KAAK;AACjB,4BAAsB,KAAK;AAAA,IAC7B;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,MACL,iBAAiB,CAAC;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,iBAAiB;AAAA,MACf,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,aAAa;AAAA,MACb,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,EACF;AACF;;;AC3DA,SAAgB,YAAY,QAAAC,aAAY;AAcjC,IAAM,cAAcC;AACpB,IAAM,oBAAoB;;;AFF1B,SAAS,gBACd,MACA,oBACsB;AACtB,SACE,mBAAmB,SAAS,KAAK,IAAS,KACzC,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,SAAS;AAErD;AAQO,IAAM,iBAAiB,YAAY,SAASC,gBAEjD,EAAE,UAAU,aAAa,oBAAoB,GAAG,MAAM,GAAa;AACnE,QAAM,MAAMC,QAAuB,IAAI;AAEvC,QAAM,aAAaC;AAAA,IACjB,CAAC,UAAqB;AACpB,YAAM,eAAe;AAErB,YAAM,cAAc;AAAA,QAClB,SAAS,MAAM,YAAY;AAAA,QAC3B,SAAS,MAAM,YAAY;AAAA,MAC7B;AAEA,YAAM,mBAAmB,MAAM,KAAK,MAAM,aAAa,KAAK,EAAE;AAAA,QAC5D,CAAC,SAAS;AACR,cAAI,CAAC,gBAAgB,MAAM,kBAAkB,GAAG;AAC9C,mBAAO,CAAC,KAAK,IAAI;AAAA,UACnB,OAAO;AACL,mBAAO,CAAC;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAEA,UAAI,iBAAiB,SAAS,GAAG;AAC/B;AAAA,UACE,iBAAiB,iBAAiB;AAAA,YAChC;AAAA,UACF,CAAC,yDAAyD,mBAAmB;AAAA,YAC3E;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,YAAM,QAAQ,MAAM,KAAK,MAAM,aAAa,KAAK,EAAE;AAAA,QAAQ,CAAC,SAC1D,gBAAgB,MAAM,kBAAkB,IAAI,CAAC,IAAI,IAAI,CAAC;AAAA,MACxD;AAEA,kBAAY,OAAO,WAAW;AAAA,IAChC;AAAA,IACA,CAAC,aAAa,kBAAkB;AAAA,EAClC;AAEA,QAAM,EAAE,iBAAiB,mBAAmB,IAAI;AAAA,IAC9C;AAAA,IACA;AAAA,EACF;AAEA,SACE,gBAAAC,OAAA,cAAC,SAAI,KAAW,GAAG,iBAAkB,GAAG,SACrC,OAAO,aAAa,aAAa,SAAS,kBAAkB,IAAI,QACnE;AAEJ,CAAC;;;AGhFD,SAAS,eAAAC,cAAa,YAAAC,iBAAgB;AAYtC,IAAM,OAAO,MAAM;AAAC;AAEb,SAAS,4BAA8D;AAAA,EAC5E,cAAAC;AAAA,EACA;AAAA,EACA;AACF,GAAyD;AACvD,QAAM,CAAC,eAAe,gBAAgB,IAAID,UAAS,SAASC,aAAY;AAExE,QAAM,WAAWF;AAAA,IACf,CAACG,WAAkB,SAAgB;AACjC,uBAAiBA,MAAK;AACtB,iBAAWA,QAAO,GAAG,IAAI;AAAA,IAC3B;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,MAAI,UAAU,QAAW;AACvB,WAAO,CAAC,OAAO,YAAY,IAAI;AAAA,EACjC;AAEA,SAAO,CAAC,eAAe,QAAQ;AACjC;;;AClCA,SAAS,mBAAmB;AAC5B,SAAS,UAAAC,eAAc;;;ACDvB,SAAS,eAAAC,oBAAmB;AAC5B,SAAS,eAAAC,cAAa,SAAS,YAAAC,iBAAgB;;;ACD/C,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;;;ACApC,SAAS,aAAAC,YAAW,UAAAC,eAAc;;;ACFlC,YAAYC,YAAW;AAKhB,IAAM,4BACX,OAAO,WAAW,cAAoB,yBAAwB;;;ACJhE,SAAyB,eAAAC,cAAa,mBAAAC,kBAAiB,UAAAC,eAAc;;;ACArE,SAAS,UAAAC,eAAc;;;ACFvB,SAAS,eAAAC,oBAAmB;;;ACArB,SAAS,UACd,KACA,OACM;AACN,MAAI,OAAO,QAAQ,YAAY;AAC7B,QAAI,KAAK;AAAA,EACX,WAAW,KAAK;AACd,QAAI,UAAU;AAAA,EAChB;AACF;;;ADNO,SAAS,aACd,KACA,YACA;AACA,SAAOC;AAAA,IACL,CAAC,UAAa;AACZ,gBAAU,KAAK,KAAK;AACpB,gBAAU,YAAY,KAAK;AAAA,IAC7B;AAAA,IACA,CAAC,KAAK,UAAU;AAAA,EAClB;AACF;;;AEZA,SAAS,eAAAC,cAAa,WAAAC,UAAS,YAAAC,iBAAgB;;;ACA/C;AAAA,EAEE,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,OACK;AAGP,SAAS,gBACP,SACA,YACAC,eACU;AACV,SAAQ,QAAQ,QAAQ,UAAU,KAAkBA,iBAAgB;AACtE;AAiBO,SAAS,yBAGd,SAA2B,YAAeA,eAAkB;AAC5D,QAAM,CAAC,OAAO,QAAQ,IAAID;AAAA,IAAmB,MAC3C,gBAAgB,SAAS,YAAYC,aAAY;AAAA,EACnD;AAEA,EAAAH,WAAU,MAAM;AACd,UAAM,WAAW,gBAAgB,SAAS,YAAYG,aAAY;AAClE,aAAS,QAAQ;AAAA,EACnB,GAAG,CAACA,eAAc,SAAS,UAAU,CAAC;AAEtC,QAAM,WAAWJ;AAAA,IACf,CAAC,WAAqC;AACpC,YAAM,WACJ,OAAO,WAAW,aACd,OAAO,gBAAgB,SAAS,YAAYI,aAAY,CAAC,IACzD;AACN,cAAQ,QAAQ,YAAY,QAAQ;AACpC,eAAS,QAAQ;AAAA,IACnB;AAAA,IACA,CAACA,eAAc,SAAS,UAAU;AAAA,EACpC;AAGA,EAAAH,WAAU,MAAM;AACd,UAAM,UAAU,QAAQ,YAAY,YAAY,CAAC,aAAa;AAC5D,eAAS,QAAoB;AAAA,IAC/B,CAAC;AAED,WAAO,MAAM,QAAQ;AAAA,EACvB,GAAG,CAAC,SAAS,UAAU,CAAC;AAExB,SAAOC,SAAQ,MAAM,CAAC,OAAO,QAAQ,GAAY,CAAC,UAAU,KAAK,CAAC;AACpE;;;ACnEA,SAAS,aAAAG,YAAW,YAAAC,iBAAgB;;;ACApC,SAAS,sBAAsB;AAC/B,SAAS,UAAAC,eAAc;;;ACDvB,SAAS,eAAAC,cAAa,UAAAC,eAAc;AAGpC,IAAMC,QAAO,MAAM;AAAC;AAQb,SAAS,kBACd,UACG;AACH,QAAM,cAAcC,QAAO,YAAYD,KAAI;AAE3C,4BAA0B,MAAM;AAC9B,gBAAY,UAAU,YAAYA;AAAA,EACpC,GAAG,CAAC,QAAQ,CAAC;AAEb,SAAOE;AAAA,IACL,IAAI,SAAuC,YAAY,QAAQ,GAAG,IAAI;AAAA,IACtE,CAAC,WAAW;AAAA,EACd;AACF;;;ACxBA,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;;;ACApC,SAAS,6BAA6B;AACtC,SAAS,aAAAC,YAAW,YAAAC,kBAAgB;;;ACC7B,IAAM,UAAN,MAAoC;AAAA,EACzC,YAAY,UAAyC,CAAC,GAAG;AACvD,SAAK,4BAA4B,QAAQ,6BAA6B;AAAA,EACxE;AAAA,EAEA;AAAA,EAEA,YAAsC,CAAC;AAAA,EAEvC,cAAc,CAAC,GAAyB,UAA8B,CAAC,MAAM;AAC3E,QAAI,QAAQ,MAAM;AAChB,YAAM,UAAU,IAAI,SAAY;AAC9B,aAAK,eAAe,OAAO;AAC3B,eAAO,EAAE,GAAG,IAAI;AAAA,MAClB;AACA,WAAK,UAAU,KAAK,OAAO;AAAA,IAC7B,OAAO;AACL,WAAK,UAAU,KAAK,CAAC;AAAA,IACvB;AAEA,QAAI,KAAK,eAAe,SAAS,GAAG;AAClC,YAAM,eAAe,KAAK;AAE1B,WAAK,iBAAiB,CAAC;AAEvB,mBAAa,QAAQ,CAAC,UAAU;AAC9B,aAAK,KAAK,GAAG,KAAK;AAAA,MACpB,CAAC;AAAA,IACH;AAEA,WAAO,MAAM,KAAK,eAAe,CAAC;AAAA,EACpC;AAAA,EAEA,iBAAiB,CAAC,MAA4B;AAC5C,UAAM,QAAQ,KAAK,UAAU,QAAQ,CAAC;AAEtC,QAAI,UAAU,GAAI;AAElB,SAAK,UAAU,OAAO,OAAO,CAAC;AAAA,EAChC;AAAA,EAEA,OAAO,IAAI,SAAY;AACrB,QAAI,KAAK,6BAA6B,KAAK,UAAU,WAAW,GAAG;AACjE,WAAK,eAAe,KAAK,IAAI;AAE7B;AAAA,IACF;AAEA,SAAK,UAAU,QAAQ,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAAA,EAC1C;AAAA,EAEA,iBAAsB,CAAC;AACzB;;;AC7CO,IAAM,gBAAN,MAEP;AAAA,EACE,QAAQ,YAA8B;AACpC,QAAI,OAAO,iBAAiB,aAAa;AACvC,aAAO;AAAA,IACT;AAEA,WAAO,aAAa,QAAQ,UAAU;AAAA,EACxC;AAAA,EAEA,QAAQ,YAAe,OAA4B;AACjD,QAAI,OAAO,iBAAiB,aAAa;AACvC;AAAA,IACF;AAEA,QAAI,UAAU,MAAM;AAClB,mBAAa,WAAW,UAAU;AAAA,IACpC,OAAO;AACL,mBAAa,QAAQ,YAAY,KAAK;AAAA,IACxC;AAEA,SAAK,QAAQ,KAAK,YAAY,KAAK;AAAA,EACrC;AAAA,EAEA,UAAU,IAAI,QAA4B;AAAA,EAE1C,eAAe;AAAA,EAEf,YACE,YACA,UACY;AAEZ,QAAI,CAAC,KAAK,gBAAgB,OAAO,WAAW,aAAa;AACvD,WAAK,eAAe;AAEpB,aAAO,iBAAiB,WAAW,CAAC,UAAwB;AAC1D,aAAK,QAAQ,KAAK,MAAM,KAAY,MAAM,QAAQ;AAAA,MACpD,CAAC;AAAA,IACH;AAEA,WAAO,KAAK,QAAQ,YAAY,CAAC,KAAK,UAAU;AAC9C,UAAI,QAAQ,YAAY;AACtB,iBAAS,KAAK;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,gBAAgB,IAAI,cAAc;;;AC5D/C,OAAOC,WAAS,WAAAC,iBAAe;;;ACD/B,OAAO,oBAAoB;;;ACkCpB,SAAS,iBACd,KACqB;AACrB,SAAO,IAAI,QAAQ,YAAY,KAAK,EAAE,YAAY;AACpD;AAEO,SAAS,iBACd,KACqB;AACrB,SAAO,IAAI;AAAA,IAAQ;AAAA,IAAa,CAAC,GAAG,WAClC,OAAO,YAAY;AAAA,EACrB;AACF;AAGO,SAAS,wBACd,KACA,UACyB;AACzB,MAAI,MAAM,QAAQ,GAAG,KAAK,eAAe,OAAO,eAAe,KAAK;AAClE,WAAO;AAAA,EACT;AAEA,QAAM,SAAc,CAAC;AAErB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,UAAM,WAAW,iBAAiB,GAAG;AACrC,WAAO,QAAQ,IACb,SACA,OAAO,UAAU,YACjB,CAAC,MAAM,QAAQ,KAAK,KACpB,EAAE,iBAAiB,QACnB,EAAE,iBAAiB,OACf,wBAAwB,OAAO,QAAQ,IACvC,YAAY,OAAO,UAAU,WAC3B,SAAS,KAAK,IACd;AAAA,EACV;AAEA,SAAO;AACT;AAEO,SAAS,gBAAgB,KAAa;AAC3C,SAAO,IAAI,MAAM,gBAAgB,IAAI,CAAC,KAAK;AAC7C;;;ADvEO,IAAM,UAAU,wBAAwB,eAAe,MAAM,MAAM;AAEnE,IAAM,cAAc;AAAA,EACzB,eAAe,MAAM;AAAA,EACrB;AACF;AAEO,IAAM,eAAe;;;AEd5B,SAAS,4BAA4B;AAErC,YAAY,uBAAuB;AACnC,OAAOC;AAAA,EAIL,WAAAC;AAAA,OACK;;;ACRP,YAAYC,YAAW;AAIvB,IAAM,qBAA2B,qBAE/B,MAAS;AAEJ,IAAM,sBAA4B,YAAK,SAASC,qBAAoB;AAAA,EACzE;AAAA,EACA;AACF,GAGG;AACD,SACE,qCAAC,mBAAmB,UAAnB,EAA4B,OAAO,iBACjC,QACH;AAEJ,CAAC;AAEM,SAAS,mBAA2B;AACzC,SAAa,kBAAW,kBAAkB,KAAK;AACjD;AAEO,IAAM,yBAAyB;AAC/B,IAAM,sBAAsB;AAE5B,SAAS,iBAAiB,IAAa;AAC5C,SAAO;AAAA,IACL,CAAC,mBAAmB,GAAG;AAAA,EACzB;AACF;AAEO,SAAS,sBAAsB,SAAsB;AAC1D,MAAI,EAAE,mBAAmB,cAAc;AACrC;AAAA,EACF;AAEA,QAAM,UAAU,QAAQ,QAAQ,IAAI,mBAAmB,GAAG;AAE1D,MAAI,CAAC,WAAW,EAAE,mBAAmB,cAAc;AACjD;AAAA,EACF;AAEA,SAAO,QAAQ,QAAQ,sBAAsB;AAC/C;;;AC/CA,SAAS,+BAA+B;AACxC,OAAOC,WAAS,QAAAC,cAAuB;;;ACDvC,SAAS,0BAAwC;AACjD,YAAYC,aAAW;;;ACDvB,YAAY,oBAAoB;AAChC,OAAOC,aAA0B;;;ACDjC,YAAYC,aAAW;;;ACAvB,OAAOC;AAAA,EAGL,cAAAC;AAAA,EAEA,eAAAC;AAAA,EACA,WAAAC;AAAA,OACK;;;ACPP,OAAOC,qBAAoB;AAQ3B,IAAM,YAAY,OAAO,KAAKA,gBAAe,MAAM,OAAO,MAAM,EAAE;AAAA,EAChE,CAAC,QAAQ,QAAQ,GAAG;AACtB;AACA,IAAM,eAAe,IAAI,IAAI,SAAS;AACtC,IAAM,WAAW,OAAO,KAAKA,gBAAe,MAAM,OAAO,QAAQ,EAAE;AAAA,EACjE,CAAC,QAAQ,QAAQ,GAAG;AACtB;AACA,IAAM,cAAc,IAAI,IAAI,QAAQ;AACpC,IAAM,WAAW;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,IAAI,CAAC,QAAQ,QAAQ,GAAG,EAAE;AAC5B,IAAM,cAAc,IAAI,IAAI,QAAQ;AACpC,IAAM,cAAc,oBAAI,IAAI;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,kBAAkB,oBAAI,IAAI,CAAC,YAAY,YAAY,SAAS,QAAQ,CAAC;AAC3E,IAAM,SAAwC;AAAA,EAC5C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AACZ;AAEO,SAAS,MAAM,MAA+B;AACnD,SAAO,KAAK,OAAO,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK;AAC7C;AAEA,IAAM,gCAAgC,CAAC;AAAA,EACrC;AAAA,EACA;AACF,MAGM;AACJ,QAAM,mBAAmB,WAAW,SAAS,CAAC,QAAQ,aAAa,IAAI,GAAG,CAAC;AAC3E,SAAO,WAAW,QAAQ,CAAC,cAAc;AACvC,QAAI,aAAa,IAAI,SAAS,GAAG;AAC/B,aAAO,qBAAqB,YAAY,CAAC,SAAS,IAAI,CAAC;AAAA,IACzD;AACA,WAAO,CAAC,SAAS;AAAA,EACnB,CAAC;AACH;AAEO,SAAS,2BACd,YACA,SACQ;AACR,QAAM,UAAU,MAAM,QAAQ,UAAU,IACpC,GAAG,GAAG,UAAU,IAChB,GAAG,UAAU;AACjB,MAAI,iBAAiB,QAAQ,MAAM,KAAK;AACxC,WAAS,YAAY,QAAQ,CAAC,aAAa;AACzC,qBAAiB,8BAA8B;AAAA,MAC7C,YAAY;AAAA,MACZ,cAAc,OAAO,QAAQ;AAAA,IAC/B,CAAC;AAAA,EACH,CAAC;AACD,SAAO,eAAe,KAAK,GAAG;AAChC;;;AC9EA,YAAY,WAAW;AACvB,YAAYC,YAAW;AAMhB,SAAS,WACd,UACiB;AACjB,MAAI,OAAO,aAAa,UAAU;AAChC,UAAM,OAAO,MAAM,QAAoB;AAEvC,WAAO,qCAAC,UAAK;AAAA,EACf;AAEA,SAAO;AACT;;;ACfA,YAAYC,YAAW;AAWvB,IAAM,iBAAuB;AAAA,EAC3B,CAAC,EAAE,MAAAC,OAAM,QAAQ,GAAG,MAAM,GAAG,QAAuC;AAClE,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,SAAS,iBAAiB,OAAO,IAAIA,UAAS,SAAY,gBAAgB,EAAE;AAAA,QAC1F,OACEA,QACI;AAAA,UACE,WAAW,GAAGA,KAAI;AAAA,QACpB,IACA;AAAA,QAEL,GAAG;AAAA,QACJ;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAMA,IAAM,mBAAyB;AAAA,EAC7B,CAAC,EAAE,MAAAA,OAAM,QAAQ,GAAG,MAAM,GAAG,QAAuC;AAClE,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,SAAS,iBAAiB,OAAO,IAAIA,UAAS,SAAY,gBAAgB,EAAE;AAAA,QAC1F,OACEA,QACI;AAAA,UACE,UAAU,GAAGA,KAAI;AAAA,QACnB,IACA;AAAA,QAEL,GAAG;AAAA,QACJ;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEO,IAAU;AAAA,CAAV,CAAUC,YAAV;AACE,EAAMA,QAAA,WAAW;AACjB,EAAMA,QAAA,aAAa;AAAA,GAFX;;;ACvDjB,YAAY,sBAAsB;AAClC,YAAYC,aAAW;;;ACDvB,OAAOC,UAAuB,cAAAC,mBAAwC;AAmBtE,IAAM,WAA6C;AAAA,EACjD,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT;AAEO,IAAM,aAAsC;AAAA,EACjD,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT;AAiBO,IAAM,OAAOC,YAAW,SAASC,MACtC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAAC;AAAA,EACA,GAAG;AACL,GACA,cACA;AACA,QAAM,YAAY,MAAM,SAAS,OAAO,KAAK;AAE7C,SACE,gBAAAC,OAAA;AAAA,IAAC;AAAA;AAAA,MAEC,KAAK;AAAA,MACL,WAAW;AAAA,QACT,GAAG,WAAW,OAAO,CAAC,SAAS,iBAAiB,OAAO,KAAK,CAAC,KAAK,MAAM;AAAA,QACxE;AAAA,MACF;AAAA,MACA,OAAOD;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAK,QAAQ,EAAE,KAAK;AAAA,MACpB,GAAG;AAAA;AAAA,IAEH;AAAA,EACH;AAEJ,CAAC;AAIM,IAAM,WAAWF;AAAA,EACtB,CAAC,OAAoB,QACnB,gBAAAG,OAAA,cAAC,QAAK,KAAW,GAAG,OAAO,SAAQ,YAAW;AAElD;AAEO,IAAM,WAAWH;AAAA,EACtB,CAAC,OAAoB,QACnB,gBAAAG,OAAA,cAAC,QAAK,KAAW,GAAG,OAAO,SAAQ,YAAW;AAElD;AAEO,IAAM,WAAWH;AAAA,EACtB,CAAC,OAAoB,QACnB,gBAAAG,OAAA,cAAC,QAAK,KAAW,GAAG,OAAO,SAAQ,YAAW;AAElD;AAEO,IAAM,WAAWH;AAAA,EACtB,CAAC,OAAoB,QACnB,gBAAAG,OAAA,cAAC,QAAK,KAAW,GAAG,OAAO,SAAQ,YAAW;AAElD;AAEO,IAAM,WAAWH;AAAA,EACtB,CAAC,OAAoB,QACnB,gBAAAG,OAAA,cAAC,QAAK,KAAW,GAAG,OAAO,SAAQ,YAAW;AAElD;AAEO,IAAM,OAAOH;AAAA,EAClB,CAAC,OAAoB,QACnB,gBAAAG,OAAA,cAAC,QAAK,KAAW,GAAG,OAAO,SAAQ,QAAO;AAE9C;AAEO,IAAM,QAAQH;AAAA,EACnB,CAAC,OAAoB,QACnB,gBAAAG,OAAA,cAAC,QAAK,KAAW,GAAG,OAAO,SAAQ,SAAQ;AAE/C;AAQO,IAAM,SAAS,CAAC,EAAE,SAAS,MAChC,gBAAAA,OAAA;AAAA,EAAC;AAAA;AAAA,IACC,OAAO;AAAA,MACL,WAAW;AAAA,IACb;AAAA;AAAA,EAEC;AACH;;;AD7IK,IAAM,UAAgB,aAAK,SAASC,SAAQ;AAAA,EACjD;AAAA,EACA;AAAA,EACA,aAAa;AACf,GAAU;AACR,QAAM,gBAAgB,iBAAiB;AAEvC,SACE,sCAAkB,2BAAjB,MACC,sCAAkB,uBAAjB,MACC,sCAAkB,0BAAjB,EAAyB,SAAO,QAAE,QAAS,GAC5C,sCAAkB,yBAAjB,MACC;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACE,GAAG,iBAAiB,aAAa;AAAA,MAClC,MAAK;AAAA,MACL,OAAM;AAAA,MACN;AAAA,MACA,kBAAkB;AAAA,MAClB,WAAW,GAAG,WAAW,KAAK;AAAA;AAAA,IAE7B;AAAA,EAEH,CACF,CACF,CACF;AAEJ,CAAC;;;AJpBD,IAAM,gBAA+C;AAAA,EACnD,QACE;AAAA,EACF,SACE;AAAA,EACF,WACE;AAAA,EACF,iBAAiB;AAAA,EACjB,UACE;AAAA,EACF,MAAM;AAAA,EACN,MAAM;AACR;AAEA,IAAM,aAA2D;AAAA,EAC/D,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AACR;AA0BO,IAAM,SAASC,YAAW,SAASC,QACxC;AAAA,EACE;AAAA,EACA;AAAA,EACA,OAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAAC,QAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,IAAI,YAAY;AAAA,EAChB,GAAG;AACL,GACA,cACA;AACA,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,WAAW,eAAe;AAAA,IAC1B,CAAC,WAAW,SAAS,MAAM,IAAI,cAAc;AAAA,IAC7C,SACI,6GACA,cAAc,OAAO;AAAA,IACzB,WACE,YAAY,SACR,SACA,YAAY,cAAcA,UAAS,UACjC,aACA,YAAY,SACV,SACAA,KACV;AAAA,EACF;AAEA,QAAM,kBAAkBC,SAAQ,MAAM;AACpC,WAAO,YACH,2BAA2B,CAAC,eAAe,SAAS,GAAG;AAAA,MACrD,YAAY,CAAC,UAAU;AAAA,IACzB,CAAC,IACD;AAAA,EACN,GAAG,CAAC,WAAW,aAAa,CAAC;AAE7B,QAAM,gBACJ,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX,OAAOH;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAeI,cAAY,CAAC,UAA4B;AACtD,cAAM,gBAAgB;AAAA,MACxB,GAAG,CAAC,CAAC;AAAA,MACJ,GAAG;AAAA;AAAA,IAEJ,gBAAAD,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO;AAAA;AAAA,MAEN,QAAQ,WAAW,IAAI;AAAA,MACvB,QAAQ,YAAY,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,QAAM,MAAC,MAAM,GAAG;AAAA,MACvD;AAAA,MACA,cAAc,QAAQ,aACrB,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,QAAM,MAAC,MAAM,GAAG;AAAA,MAEpC,aAAa,WAAW,SAAS;AAAA,IACpC;AAAA,EACF;AAGF,SAAO,UACL,gBAAAA,QAAA,cAAC,WAAQ,SAAS,WAAU,aAAc,IAE1C;AAEJ,CAAC;AAED,IAAO,iBAAQ;;;AD7IR,IAAM,aAAmB;AAAA,EACxB,mBAAW,SAASE,YACxB,EAAE,UAAU,UAAU,OAAO,MAAAC,OAAM,cAAc,GAAG,MAAM,GAC1D,cACA;AACA,UAAM,OAAO,MAAM,QAAQ;AAE3B,UAAMC,SAAc,gBAAQ,MAA2B;AACrD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,GAAID,SAAQ,EAAE,WAAWA,MAAK;AAAA,QAC9B,GAAG;AAAA,MACL;AAAA,IACF,GAAG,CAAC,cAAcA,KAAI,CAAC;AAEvB,WACE,sCAAC,UAAO,KAAK,cAAe,GAAG,OAAO,SAAQ,QAAO,cAAcC,UACjE;AAAA,MAAC;AAAA;AAAA,QACC,OACE,UACC,WAAW,QAAQ,OAAO,eAAe,QAAQ,OAAO;AAAA,QAE1D,GAAID,SAAQ,EAAE,OAAOA,OAAM,QAAQA,MAAK;AAAA;AAAA,IAC3C,CACF;AAAA,EAEJ,CAAC;AACH;;;ADpCO,IAAM,QAAQ,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAIM;AACJ,SACE,gBAAAE,QAAA;AAAA,IAAgB;AAAA,IAAf;AAAA,MACC,WAAU;AAAA,MACT,GAAG;AAAA;AAAA,IAEH,SACC,gBAAAA,QAAA;AAAA,MAAgB;AAAA,MAAf;AAAA,QACC,WAAW,YAAY,WAAW,KAAK;AAAA;AAAA,MAEtC;AAAA,IACH;AAAA,IAEF,gBAAAA,QAAA;AAAA,MAAgB;AAAA,MAAf;AAAA,QACC,WAAW,GAAG,WAAW,KAAK;AAAA;AAAA,MAE7B;AAAA,IACH;AAAA,IACC,YACC,gBAAAA,QAAA,cAAgB,uBAAf,EAAsB,SAAO,MAAC,SAAQ,MACpC,QACH;AAAA,IAEF,gBAAAA,QAAA,cAAgB,sBAAf,EAAqB,cAAW,SAAQ,SAAO,QAC9C,gBAAAA,QAAA,cAAC,cAAW,UAAS,cAAa,CACpC;AAAA,EACF;AAEJ;AAEO,IAAM,gBAAgB,CAAC,EAAE,SAAS,MACvC,gBAAAA,QAAA,cAAgB,yBAAf,MACE,UACD,gBAAAA,QAAA,cAAgB,yBAAf,EAAwB,WAAU,wHAAuH,CAC5J;;;AQhDF,OAAOC;AAAA,EACL,iBAAAC;AAAA,EAEA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OACK;;;ACRP,YAAY,qBAAqB;AACjC,OAAOC;AAAA,EAGL,cAAAC;AAAA,EAEA;AAAA,EACA,UAAAC;AAAA,OACK;AAKP,IAAM,gBAAgBC,YAGpB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAC,QAAA;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW,GAAG,uCAAuC,SAAS;AAAA,IAC7D,GAAG;AAAA;AACN,CACD;AAED,IAAM,gBAAgBD,YAGpB,CAAC,EAAE,WAAW,UAAU,GAAG,MAAM,GAAG,QAAQ;AAC5C,SACE,gBAAAC,QAAA;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,IAEH;AAAA,EACH;AAEJ,CAAC;AAED,IAAM,cAAcD,YAGlB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAC,QAAA;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AAED,IAAM,oBAAoBD,YAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAC,QAAA;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AAqBM,IAAM,SAASD,YAAW,SAASE,QACxC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,yBAAyB;AAAA,EACzB;AAAA,EACA,kBAAkB;AACpB,GACA,cACA;AACA,QAAM,aAAaC,QAAuB,IAAI;AAE9C,sBAAoB,cAAc,OAAO;AAAA,IACvC,gBAAgB,SAAS;AACvB,UAAI,CAAC,WAAW,QAAS,QAAO;AAChC,aAAO,WAAW,QAAQ,SAAS,OAAO;AAAA,IAC5C;AAAA,EACF,EAAE;AAEF,SACE,gBAAAH,QAAA,cAAiB,sBAAhB,EAAqB,MAAY,gBAChC,gBAAAA,QAAA,cAAC,mBAAc,GACf,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,OAAOE;AAAA,MACP;AAAA,MACC,GAAI,2BAA2B,SAAS;AAAA,QACvC,sBAAsB,CAAC,UAAU,MAAM,eAAe;AAAA,QACtD,mBAAmB,CAAC,UAAU,MAAM,eAAe;AAAA,MACrD;AAAA;AAAA,IAEC,mBACC,gBAAAF,QAAA,cAAiB,uBAAhB,EAAsB,SAAO,QAC5B,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,UAAS;AAAA,QACT,WAAU;AAAA,QACV,OAAO;AAAA,UACL,UAAU;AAAA,UACV,KAAK;AAAA,UACL,OAAO;AAAA,QACT;AAAA;AAAA,IACF,CACF;AAAA,IAED,SACC,gBAAAA,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA,cAAC,mBAAa,KAAM,GACpB,gBAAAA,QAAA,cAAC,OAAO,UAAP,EAAgB,MAAM,cAAc,KAAK,IAAI,CAChD;AAAA,IAED,eACC,gBAAAA,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA,cAAC,yBAAmB,WAAY,GAChC,gBAAAA,QAAA,cAAC,OAAO,UAAP,EAAgB,MAAM,IAAI,CAC7B;AAAA,IAED;AAAA,EACH,CACF;AAEJ,CAAC;AAEM,IAAM,mBAAmBD,YAAW,SAASK,kBAClD,EAAE,OAAAF,QAAO,GAAG,KAAK,GACjB,cACA;AACA,SACE,gBAAAF,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAU;AAAA,MACV,OAAOE;AAAA,MACN,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;;;AC/KD,SAAS,2BAA2B;AAGpC,OAAOG;AAAA,EACL,iBAAAC;AAAA,EAGA,cAAAC;AAAA,EACA,QAAAC;AAAA,EAEA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,OACK;;;ACfP,OAAOC,aAA0B;AAG1B,IAAM,eAAeA,QAAM,cAG/B;AAAA,EACD,SAAS;AAAA,EACT,OAAO;AACT,CAAC;AAOM,IAAM,WAAW,CAAC,EAAE,OAAO,QAAQ,MAAsB;AAC9D,QAAM,EAAE,OAAO,kBAAkB,SAAS,mBAAmB,IAC3DA,QAAM,WAAW,YAAY;AAE/B,SAAO;AAAA,IACL,OAAO,SAAS;AAAA,IAChB,SAAS,WAAW;AAAA,EACtB;AACF;AAEO,IAAM,uBACXA,QAAM,cAAyC;AAAA,EAC7C,UAAU;AACZ,CAAC;AAEI,IAAM,mBAAmB,MAAM;AACpC,QAAM,EAAE,SAAS,IAAIA,QAAM,WAAW,oBAAoB;AAC1D,SAAO;AACT;AASO,IAAM,oBAAoBA,QAAM,cAAsC;AAAA,EAC3E,OAAO;AACT,CAAC;AAEM,IAAM,gBAAgB,MAAM;AACjC,QAAM,EAAE,MAAM,IAAIA,QAAM,WAAW,iBAAiB;AACpD,SAAO;AACT;;;ACjDe,SAAR,YAA6B,GAIb;AACrB,MAAI,UAAU;AACd,MAAI,SAAS;AAEb,UAAQ,EAAE,KAAK;AAAA,IACb,KAAK;AACH,eAAS;AACT,gBAAU;AACV;AAAA,IACF,KAAK;AACH,eAAS;AACT,gBAAU;AACV;AAAA,EACJ;AAEA,MAAI,CAAC,QAAS;AAEd,MAAI,EAAE,UAAU;AACd,cAAU;AAAA,EACZ,WAAW,EAAE,QAAQ;AACnB,cAAU;AAAA,EACZ;AAEA,SAAO,UAAU,SAAS;AAC5B;;;ACzBA,IAAM,qBAAqB;AAEpB,IAAM,oBAAoB,CAACC,QAAkB,aAAa;AAC/D,SAAO;AAAA,IACL;AAAA,IACAA,UAAS,UACL,YACAA,UAAS,WACP,cACAA,UAAS,UACP,cACA;AAAA,IACRA,UAAS,UAAU,iBAAiB;AAAA,EACtC;AACF;AAEO,IAAM,kBAAkB;;;ACpB/B,SAAS,mBAAmB;AAC5B,OAAOC;AAAA,EAIL,cAAAC;AAAA,EAKA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OACK;;;ACfP,SAAS,iBAAAC,gBAAe,cAAAC,aAAY,aAAAC,kBAAiB;AAQrD,IAAM,eAAgB,uBAAM;AAC1B,QAAM,YAA4B,CAAC;AAEnC,QAAM,QAAqC;AAAA,IACzC,YAAY,GAAG;AACb,gBAAU,KAAK,CAAC;AAAA,IAClB;AAAA,IACA,eAAe,GAAG;AAChB,YAAM,QAAQ,UAAU,QAAQ,CAAC;AACjC,UAAI,UAAU,GAAI;AAClB,gBAAU,OAAO,OAAO,CAAC;AAAA,IAC3B;AAAA,IACA,UAAU;AACR,gBAAU,QAAQ,CAAC,MAAM;AACvB,UAAE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT,GAAG;AAEH,IAAM,yBACJF,eAA2C,YAAY;AAElD,IAAM,0BAA0B,uBAAuB;AASvD,IAAM,qBAAqB,MAAmC;AACnE,SAAOC,YAAW,sBAAsB;AAC1C;AAEO,SAAS,2BAA2B,GAAe;AACxD,QAAM,UAAU,mBAAmB;AAEnC,EAAAC,WAAU,MAAM;AACd,YAAQ,YAAY,CAAC;AAErB,WAAO,MAAM;AACX,cAAQ,eAAe,CAAC;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,SAAS,CAAC,CAAC;AACjB;AAEO,SAAS,4BAA4B;AAC1C,SAAO,mBAAmB,EAAE;AAC9B;;;ADhBA,IAAM,oBAAoBC,YAAW,SAASC,mBAC5C,EAAE,WAAW,eAAe,OAAO,GAAG,KAAK,GAC3C,cACA;AACA,SACE,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACJ,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,UAAQ;AAAA,MACR,WAAU;AAAA;AAAA,EACZ;AAEJ,CAAC;AAQD,IAAM,sBAAsBF,YAAW,SAASG,qBAC9C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GACA,cACA;AACA,QAAM,aAAaC;AAAA,IACjB,CAAC,UAA8C;AAC7C,eAAS,KAAK;AAEd,sBAAgB,KAAK;AAAA,IACvB;AAAA,IACA,CAAC,QAAQ,aAAa;AAAA,EACxB;AAEA,QAAM,qBAAqBA;AAAA,IACzB,CAAC,UAA8C;AAC7C,uBAAiB,KAAK;AAEtB,sBAAgB,IAAI;AAAA,IACtB;AAAA,IACA,CAAC,gBAAgB,aAAa;AAAA,EAChC;AAEA,QAAM,cAAcA;AAAA,IAClB,CAAC,UAA8C;AAC7C,gBAAU,KAAK;AAEf,sBAAgB,IAAI;AAAA,IACtB;AAAA,IACA,CAAC,SAAS,aAAa;AAAA,EACzB;AAEA,SACE,gBAAAF,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACJ,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA,UAAUE;AAAA,QACR,CAAC,UACC,SAAS,MAAM,OAAO,KAAK;AAAA,QAC7B,CAAC,QAAQ;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,SAAS;AAAA;AAAA,EACX;AAEJ,CAAC;AAUD,IAAM,uBAAuBJ,YAAW,SAASK,sBAC/C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,+BAA+B;AAAA,EAC/B;AAAA,EACA,eAAe;AAAA,EACf,GAAG;AACL,GACA,cACA;AACA,QAAM,MAAMH,QAAM,OAAyB,IAAI;AAE/C,QAAM,cAAcI,SAAO,KAAK;AAChC,cAAY,UAAU;AAItB,QAAM,cAAcA,SAAO,KAAK;AAEhC,QAAM,+BAA+BA,SAAO,KAAK;AAEjD,QAAM,CAAC,eAAe,gBAAgB,IAAIC,WAAS,EAAE;AAErD,EAAAC,iBAAgB,MAAM;AACpB,qBAAiB,KAAK;AAAA,EACxB,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,eAAeJ,cAAY,MAAM;AAGrC,UAAM,kBAAkB,6BAA6B,UACjD,QACA;AAEJ,iCAA6B,UAAU;AAEvC,QAAI,oBAAoB,SAAS,CAAC,6BAA8B;AAEhE,aAAS,eAAe;AAExB,gBAAY,UAAU;AAEtB,qBAAiB,YAAY,OAAO;AAAA,EACtC,GAAG,CAAC,8BAA8B,OAAO,eAAe,QAAQ,CAAC;AAEjE;AAAA,IACEA,cAAY,MAAM;AAChB,UAAI,IAAI,YAAY,SAAS,cAAe;AAE5C,mBAAa;AAAA,IACf,GAAG,CAAC,YAAY,CAAC;AAAA,EACnB;AAEA,QAAM,gBAAgBA;AAAA,IACpB,CAAC,UAAiD;AAChD,UAAI,MAAM,QAAQ,SAAS;AACzB,qBAAa;AAEb,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAAA,MACxB,WAAW,MAAM,QAAQ,UAAU;AACjC,qCAA6B,UAAU;AAEvC,YAAI,SAAS,KAAK;AAAA,MACpB,OAAO;AACL,oBAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,WAAW,YAAY;AAAA,EAC1B;AAEA,QAAM,eAAeA;AAAA,IACnB,CAAC,UAA+C;AAC9C,kBAAY,UAAU;AAEtB,uBAAiB,MAAM,OAAO,KAAK;AAAA,IACrC;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,aAAaA;AAAA,IACjB,CAAC,UAA8C;AAC7C,eAAS,KAAK;AAEd,sBAAgB,KAAK;AAErB,UAAI,cAAc;AAChB,qBAAa;AAAA,MACf;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,eAAe,cAAc,YAAY;AAAA,EACpD;AAEA,QAAM,qBAAqBA;AAAA,IACzB,CAAC,UAA8C;AAC7C,uBAAiB,KAAK;AAEtB,sBAAgB,IAAI;AAAA,IACtB;AAAA,IACA,CAAC,gBAAgB,aAAa;AAAA,EAChC;AAEA,QAAM,uBAAuBE;AAAA,IAC3B;AAAA,EACF;AACA,QAAM,qBAAqBA,SAAO,YAAY;AAC9C,qBAAmB,UAAU;AAE7B,EAAAG,YAAU,MAAM;AACd,QAAI,+BAA+B;AACjC,UAAI,qBAAqB,SAAS;AAChC,qBAAa,qBAAqB,OAAO;AAAA,MAC3C;AAEA,2BAAqB,UAAU,WAAW,MAAM;AAC9C,YAAI,YAAY,YAAY,MAAO;AAEnC,2BAAmB,QAAQ;AAAA,MAC7B,GAAG,6BAA6B;AAAA,IAClC;AAGA,WAAO,MAAM;AACX,UAAI,qBAAqB,SAAS;AAChC,qBAAa,qBAAqB,OAAO;AAAA,MAC3C;AAAA,IACF;AAAA,EAEF,GAAG,CAAC,eAAe,6BAA6B,CAAC;AAEjD,SACE,gBAAAP,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,YAAY,KAAK,YAAY;AAAA,MACjC,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,gBAAgB;AAAA;AAAA,EAClB;AAEJ,CAAC;AAOD,IAAO,oBAAQF,YAAW,SAAS,UACjC,OACA,cACA;AACA,QAAM,cAA8B;AAAA,IAClC,eAAeI;AAAA,MACb,CAAC,UAA8B,MAAM,gBAAgB;AAAA,MACrD,CAAC;AAAA,IACH;AAAA,IACA,SAASA;AAAA,MACP,CAAC,UAA4B,MAAM,gBAAgB;AAAA,MACnD,CAAC;AAAA,IACH;AAAA,IACA,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,UAAU;AAAA,IACV,GAAG;AAAA,EACL;AAEA,MAAI,cAAc,aAAa;AAC7B,WAAO,gBAAAF,QAAA,cAAC,qBAAkB,KAAK,cAAe,GAAG,aAAa,UAAQ,MAAC;AAAA,EACzE,WAAW,cAAc,aAAa;AACpC,WAAO,gBAAAA,QAAA,cAAC,uBAAoB,KAAK,cAAe,GAAG,aAAa;AAAA,EAClE,OAAO;AACL,WAAO,gBAAAA,QAAA,cAAC,wBAAqB,KAAK,cAAe,GAAG,aAAa;AAAA,EACnE;AACF,CAAC;;;AE1TD,OAAOQ,WAA8B,cAAAC,aAAY,QAAAC,aAAY;AAO7D,IAAM,cAAc;AACpB,IAAM,kBACJ;AAEK,IAAM,QAAQC;AAAA,EACnBC,YAAyC,SAASC,OAChD,EAAE,WAAW,UAAU,GAAG,MAAM,GAChC,KACA;AACA,WACE,gBAAAC,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,YACE,YAAY,CAAC,SAAS,MAAM;AAAA,UAC9B;AAAA,QACF;AAAA,QACC,GAAG;AAAA;AAAA,MAEH;AAAA,IACH;AAAA,EAEJ,CAAC;AACH;;;ACnCA,YAAY,sBAAsB;AAClC,OAAOC,WAAyB,aAAAC,aAAW,OAAO,UAAAC,gBAAc;;;ACFhE,YAAYC,aAAW;AAiBvB,IAAM,qBAA2B,sBAAuC;AAAA,EACtE,gBAAgB;AAClB,CAAC;AAED,IAAM,4BACE,sBAA8C;AAAA,EAClD,eAAe,MAAM;AAAA,EAAC;AAAA,EACtB,kBAAkB,MAAM;AAAA,EAAC;AAC3B,CAAC;AAEI,IAAM,sBAA4B,aAAK,SAASC,qBAAoB;AAAA,EACzE;AACF,GAEG;AACD,QAAM,CAAC,aAAa,cAAc,IAAU,iBAAmB,CAAC,CAAC;AAEjE,QAAM,QAAc;AAAA,IAClB,OAAO,EAAE,gBAAgB,YAAY,SAAS,EAAE;AAAA,IAChD,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,gBAAsB;AAAA,IAC1B,OAAO;AAAA,MACL,eAAe,CAAC,WAAmB;AACjC,uBAAe,CAAC,SAAS,CAAC,GAAG,MAAM,MAAM,CAAC;AAAA,MAC5C;AAAA,MACA,kBAAkB,CAAC,WAAmB;AACpC,uBAAe,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,MAAM,MAAM,CAAC;AAAA,MAC3D;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SACE,sCAAC,mBAAmB,UAAnB,EAA4B,SAC3B,sCAAC,0BAA0B,UAA1B,EAAmC,OAAO,iBACxC,QACH,CACF;AAEJ,CAAC;AAEM,SAAS,oBAA6B;AAC3C,SAAa,mBAAW,kBAAkB,EAAE;AAC9C;AAEO,SAAS,yBAAyD;AACvE,SAAa,mBAAW,yBAAyB;AACnD;;;ADvDA,IAAM,cAAmC;AAAA,EACvC,KAAK;AAAA,EACL,YAAY;AACd;AA2BO,IAAM,eAAe;AAAA,EAC1B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AACV;AAEO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAU;AACR,QAAM,YAAY,MAAM;AACxB,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,aAAaC,SAAuB,IAAI;AAC9C,QAAM,CAAC,QAAQ,SAAS,IAAI,4BAA4B;AAAA,IACtD,OAAO;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,EAChB,CAAC;AAED,QAAM,EAAE,eAAe,iBAAiB,IAAI,uBAAuB;AAEnE,EAAAC,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,kBAAc,iBAAiB,SAAS;AAExC,WAAO,MAAM;AACX,uBAAiB,iBAAiB,SAAS;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,eAAe,QAAQ,eAAe,kBAAkB,SAAS,CAAC;AAEtE,SACE,gBAAAC,QAAA,cAAkB,uBAAjB,EAAsB,MAAM,QAAQ,cAAc,aACjD,gBAAAA,QAAA,cAAkB,0BAAjB,EAAyB,SAAO,QAAE,OAAQ,GAC3C,gBAAAA,QAAA,cAAkB,yBAAjB,EAAwB,WAAW,mBAClC,gBAAAA,QAAA;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACE,GAAG,iBAAiB,aAAa;AAAA,MAClC,KAAK;AAAA,MACL,WAAW;AAAA,QACT,aAAa;AAAA,QACb,YAAY,WAAW,aAAa;AAAA,QACpC,YAAY,YAAY,aAAa;AAAA,QACrC;AAAA,MACF;AAAA,MACA;AAAA,MACA,OAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,sBAAsB,CAAC,UAAU;AAC/B,YACE;AAAA,UACE,MAAM,OAAO;AAAA,UACb,WAAW;AAAA,QACb,GACA;AACA,gBAAM,eAAe;AAAA,QACvB;AAEA,+BAAuB,KAAK;AAAA,MAC9B;AAAA,MACA,kBAAkB;AAAA,MAClB,cAAc;AAAA;AAAA,IASb;AAAA,IACA,aACC,gBAAAA,QAAA,cAAkB,wBAAjB,EAAuB,WAAU,2BAA0B;AAAA,IAE7D,YACC,gBAAAA,QAAA;AAAA,MAAkB;AAAA,MAAjB;AAAA,QACC,WAAU;AAAA,QACV,OAAO;AAAA;AAAA,MAEP,gBAAAA,QAAA,cAAC,cAAW,UAAS,cAAa,SAAS,cAAc;AAAA,IAC3D;AAAA,EAEJ,CACF,CACF;AAEJ;AAOA,SAAS,qBACP,OACA,SACA;AACA,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,OAAO,SAAS;AACtB,QAAM,wBAAwB,KAAK,MAAM;AACzC,OAAK,MAAM,gBAAgB;AAG3B,QAAM,kBAAkB,SAAS;AAAA,IAC/B,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAGA,OAAK,MAAM,gBAAgB;AAE3B,QAAM,SAAS,gBAAgB,GAAG,CAAC;AAEnC,SAAO,UAAU,QAAQ,SAAS,MAAM;AAC1C;;;APxIA,IAAM,oBAAoBC,eAAsC;AAAA,EAC9D,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,eAAe,MAAM;AAAA,EAAC;AAAA,EACtB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AACV,CAAC;AAEM,IAAM,uBAAuB,MAAMC,YAAW,iBAAiB;AAEtE,IAAMC,QAAO,MAAM;AAAC;AAEb,IAAM,kBAAkB,CAAC;AAAA,EAC9B,WAAW;AAAA,EACX,aAAa;AAAA,EACb;AACF,OAIO;AAAA,EACL,aAAa,GAAG,YAAY,SAAS,aAAa,aAAa,aAAa,KAAK,CAAC;AAAA,EAClF,cAAc,GAAG,YAAY,SAAS,WAAW,WAAW,WAAW,KAAK,CAAC;AAC/E;AAaA,IAAM,yBAAyB,YAAY,SAASC,wBAElD,EAAE,IAAI,OAAO,UAAU,SAAS,GAA+B;AAC/D,SACE,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,OAAM;AAAA,MACN,YAAY;AAAA;AAAA,IAEX,YACC,gBAAAA,QAAA,cAAC,oBAAiB,SAAQ,YAAW,MACnC,gBAAAA,QAAA,cAAC,yBAAoB,CACvB;AAAA,EAEJ;AAEJ,CAAC;AAOD,IAAM,mBAAmBC;AAAA,EACvBC,YAAW,SAASC,kBAClB,OAIA,cACA;AACA,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAAC;AAAA,MACA,UAAU;AAAA,MACV,KAAK;AAAA,MACL,GAAG;AAAA,IACL,IAAI;AACJ,UAAM,EAAE,MAAAC,OAAM,SAAS,IAAI,qBAAqB;AAEhD,UAAM,qBAAqBC;AAAA,MACzB,CAAC,UAA+C;AAC9C,YAAI,YAAY,OAAO,aAAa,YAAY;AAC9C,mBAAS,SAAS,MAAM;AAExB,mBAAS,SAAS,kBAAkB,GAAG,SAAS,QAAQ,MAAM,MAAM;AAAA,QACtE;AAEA,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAAA,MACxB;AAAA,MACA,CAAC,QAAQ;AAAA,IACX;AAEA,UAAM,oBAAoBA;AAAA,MACxB,CAAC,UAAiD;AAChD,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAAA,MACxB;AAAA,MACA,CAAC;AAAA,IACH;AAEA,UAAM,gBAAgBC;AAAA,MACpB,OAAO;AAAA,QACL,GAAI,YAAY,cAAc;AAAA,UAC5B,aAAa;AAAA,UACb,cAAc;AAAA,QAChB;AAAA,QACA,GAAGH;AAAA,MACL;AAAA,MACA,CAACA,QAAO,OAAO;AAAA,IACjB;AAEA,WACE,gBAAAJ,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACP,KAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAAS,WAAW;AAAA,QACpB,eAAe;AAAA,QACf,UAAU;AAAA,QACV,MAAMK,UAAS,WAAW,WAAWA;AAAA,QACrC,WAAW;AAAA,UACT;AAAA,UACA,YAAY,cAAc;AAAA,QAC5B;AAAA,QACC,GAAG;AAAA;AAAA,MAEH;AAAA,IACH;AAAA,EAEJ,CAAC;AACH;AA4BA,IAAM,eAAeH;AAAA,EACnB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,OAAAE;AAAA,IACA,GAAG;AAAA,EACL,GACA,iBACG;AACH,UAAM,EAAE,UAAU,UAAU,MAAAC,OAAM,IAAI,WAAW,IAAI,qBAAqB;AAE1E,UAAM,MAAM,aAAa,UAAU,YAAY;AAE/C,UAAM,gBAAgB,gBAAgB;AAAA,MACpC;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,WACI,oBACA,WACE,uBACA;AAAA,MACN;AAAA,MACA,cAAc,QAAQ,UAAU;AAAA,MAChCA,UAAS,UACL,wCACAA,UAAS,UACP,yBACAA,UAAS,WACP,uBACA,aAAa,UAAU;AAAA,MAC/B;AAAA,IACF;AAEA,UAAM,kBAAkBE;AAAA,MACtB,MACE,2BAA2B,gBAAgB;AAAA,QACzC,YAAY,CAAC,MAAM;AAAA,MACrB,CAAC;AAAA,MACH,CAAC,cAAc;AAAA,IACjB;AAEA,QAAI,OAAO,QAAQ;AACjB,aACE,gBAAAP,QAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACC,GAAG;AAAA,UACJ,WAAW;AAAA,UACX,OAAO,EAAE,GAAG,eAAe,GAAGI,OAAM;AAAA;AAAA,QAEnC;AAAA,MACH;AAAA,IAEJ;AAEA,WACE,gBAAAJ,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO,SAAS;AAAA,QAChB;AAAA,QACA,UAAU,aAAa,MAAM;AAAA,QAAC;AAAA,QAC7B,GAAG;AAAA,QACJ,WAAW;AAAA,QACX,OAAO,EAAE,GAAG,eAAe,GAAGI,OAAM;AAAA;AAAA,IACtC;AAAA,EAEJ;AACF;AAQA,IAAM,kBAAkBF,YAAW,SAASM,iBAE1C,EAAE,WAAW,SAAS,GAAG,KAAK,GAC9B,cACA;AACA,QAAM,EAAE,eAAe,SAAS,IAAI,qBAAqB;AAEzD,QAAM,MAAM,aAAa,UAAU,YAAY;AAE/C,QAAM,oBAAoBF;AAAA,IACxB,CAAC,cAAuB;AACtB,oBAAc,SAAS;AAAA,IACzB;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEA,SACE,gBAAAN,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,eAAe;AAAA,MACd,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;AAED,IAAM,sBAAsB,CAAC,UAIvB;AACJ,SACE,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,IAAG;AAAA,MACH,OAAOO;AAAA,QACL,OAAO;AAAA,UACL,UAAU;AAAA,UACV,OAAO;AAAA,UACP,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,YAAY;AAAA,QACd;AAAA,QACA,CAAC;AAAA,MACH;AAAA;AAAA,IAEA,gBAAAP,QAAA,cAAC,UAAK,OAAO,EAAE,SAAS,EAAE,KAAI,MAAM,MAAO;AAAA,IAC1C,MAAM,aACL,gBAAAA,QAAA,cAAC,UAAK,OAAO,EAAE,SAAS,IAAI,KACzB,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,CACxC;AAAA,EAEJ;AAEJ;AA0BA,SAAS,YAAY,OAAe;AAClC,SAAO,QAAQ,OAAO,KAAK,IAAI;AACjC;AAEA,SAAS,sBAAsB,OAAmC;AAChE,QAAM,EAAE,OAAO,aAAa,SAAS,QAAQ,UAAU,GAAG,KAAK,IAAI;AACnE,QAAM,WAAW,cAAc,QAAQ,MAAM,WAAW;AACxD,QAAM,WAAW,cAAc,QAAQ,MAAM,WAAW;AAKxD,QAAM,CAAC,eAAe,gBAAgB,IAAIS,WAA6B;AAEvE,QAAM,eAAeH;AAAA,IACnB,CAACI,WAAkB;AACjB,YAAM,WAAW,YAAYA,MAAK;AAElC,UAAI,CAAC,MAAM,QAAQ,GAAG;AACpB,mBAAW,QAAQ;AAAA,MACrB;AAAA,IACF;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,QAAM,gBAAgBJ;AAAA,IACpB,CAAC,UAAiD;AAChD,YAAM,SAAS,YAAY,KAAK;AAEhC,UAAI,CAAC,OAAQ;AAEb,gBAAU,MAAM;AAChB,uBAAiB,MAAS;AAE1B,YAAM,eAAe;AACrB,YAAM,gBAAgB;AAAA,IACxB;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,QAAM,eAAeA;AAAA,IACnB,CAACI,WAAkB;AACjB,UAAIA,WAAU,MAAMA,WAAU,OAAOA,WAAU,KAAK;AAClD,yBAAiBA,MAAK;AACtB;AAAA,MACF;AAEA,UAAIA,OAAM,SAAS,GAAG,GAAG;AACvB,yBAAiBA,MAAK;AACtB;AAAA,MACF;AAEA,uBAAiB,MAAS;AAE1B,YAAM,WAAW,YAAYA,MAAK;AAElC,UAAI,CAAC,MAAM,QAAQ,GAAG;AACpB,mBAAW,QAAQ;AAAA,MACrB;AAAA,IACF;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,QAAM,aAAaJ;AAAA,IACjB,CAAC,UAA8C;AAC7C,uBAAiB,MAAS;AAC1B,eAAS,KAAK;AAAA,IAChB;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,SACE,gBAAAN,QAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OACE,kBAAkB,SACd,OAAO,aAAa,IACpB,UAAU,SACR,KACA,OAAO,KAAK;AAAA,MAEpB;AAAA,MACA,WAAW,CAAC,WAAW,gBAAgB;AAAA,MACvC,QAAQ;AAAA,MACP,GAAI,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,MACrC,GAAI,cAAc,QACf,EAAE,UAAU,WAAWF,QAAO,aAAa,IAC3C,EAAE,UAAU,WAAWA,QAAO,aAAa;AAAA;AAAA,EACjD;AAEJ;AAMA,IAAM,gBAAgBI,YAQpB,CAAC,EAAE,QAAQ,WAAW,GAAG,MAAM,GAAG,QAClC,gBAAAF,QAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACxD,OAAO;AAAA,MACL,UAAU,UAAU,WAAW,IAAI,GAAG,MAAM,OAAO;AAAA,MACnD,GAAG,MAAM;AAAA,IACX;AAAA,IACC,GAAG;AAAA;AACN,CACD;AA0BD,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,MAAAK,QAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,OAAAD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAAwB;AACtB,QAAM,WAAWO,OAAM;AAEvB,QAAM,CAAC,WAAW,YAAY,IAAIX,QAAM,SAAS,KAAK;AAEtD,QAAM,WAAWA,QAAM,OAAwB,IAAI;AACnD,QAAM,WAAWA,QAAM,OAAyB,IAAI;AACpD,QAAM,SAASA,QAAM,OAAwB,IAAI;AAEjD,QAAM,oBAAoB,QAAQ,UAAU,OAAO;AACnD,QAAM,oBAAoB,QAAQ,UAAU,OAAO;AACnD,QAAM,kBAAkB,QAAQ,QAAQ,OAAO;AAC/C,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,EAAE,MAAM,IAAI,SAAS,EAAE,SAAS,GAAG,CAAC;AAE1C,QAAM,YAAY,kBAAkBK,KAAI;AAExC,QAAM,oBAAoBC;AAAA,IACxB,CAACM,eAAuB;AACtB,mBAAaA,UAAS;AACtB,sBAAgBA,UAAS;AAAA,IAC3B;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEA,QAAM,aAAa,mBAAmB,SAAS;AAC/C,QAAM,WAAW,iBAAiB,SAAS;AAE3C,QAAM,eAAeL;AAAA,IACnB,OAA+B;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAAF;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf,IAAI,MAAM;AAAA,IACZ;AAAA,IACA,CAAC,YAAY,UAAUA,OAAM,WAAW,mBAAmB,IAAI,QAAQ;AAAA,EACzE;AAEA,QAAM,aAAaE;AAAA,IACjB,MACE,gBAAAP,QAAA,cAAC,SAAM,SAAS,IAAI,WAAU,yBAC3B,aAAa,KAChB;AAAA,IAEF,CAAC,IAAI,WAAW,KAAK;AAAA,EACvB;AAEA,QAAM,cACJ,gBAAAA,QAAA,cAAC,iBAAc,QAAQ,OAAO,OAAOI,QAAO,aACzC,UACA,SACC,gBAAAJ,QAAA,cAAC,UAAK,KAAK,UAAU,WAAW,GAAG,iBAAiB,cAAc,KAC/D,KACH,IAEA,OAAO,UACP,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW,GAAG,WAAW,SAAS,OAAO,WAAW,YAAY;AAAA;AAAA,IAE/D,YACG,aACA,SAAS,kBAAkB,WAAW;AAAA,IACzC;AAAA,EACH,CAEJ;AAGF,QAAM,sBAAsBO;AAAA,IAC1B,MACE,oBAAoB,EAAE,OAAO,kBAAkB,QAAQ,EAAE,IAAI;AAAA,IAC/D,CAAC,iBAAiB;AAAA,EACpB;AAEA,SACE,gBAAAP,QAAA,cAAC,kBAAkB,UAAlB,EAA2B,OAAO,gBAChC,uBACC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,MACA,WAAW;AAAA,MACX,iBAAiB,CAAC,UAAU;AAC1B,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAAA,MACxB;AAAA,MACA,kBAAkB,CAAC,UAAU;AAC3B,cAAM,eAAe;AACrB,cAAM,gBAAgB;AAAA,MACxB;AAAA;AAAA,IAEC,uBACC,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO;AAAA;AAAA,MAEN,qBAAqB,mBAAmB;AAAA,IAC3C;AAAA,EAEJ,IAEA,WAEJ;AAEJ;AAEA,IAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAAI;AAAA,EACA,GAAG;AACL,MAMM;AACJ,QAAM,EAAE,IAAI,SAAS,IAAI,qBAAqB;AAE9C,QAAM,gBAAgB,gBAAgB;AAAA,IACpC;AAAA,EACF,CAAC;AACD,QAAM,iBAAiBG;AAAA,IACrB,OAAO,EAAE,GAAG,eAAe,GAAGH,OAAM;AAAA,IACpC,CAAC,eAAeA,MAAK;AAAA,EACvB;AACA,SACE,gBAAAJ,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,WACI,oBACA,WACE,uBACA;AAAA,QACN;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAMA,IAAM,0BAA0B;AAAA,EAC9B,MAAMC,MAAK,cAAc;AAAA,EACzB,OAAOA,MAAK,eAAe;AAAA,EAC3B,WAAWA,MAAK,mBAAmB;AAAA,EACnC,aAAaA,MAAK,qBAAqB;AAAA,EACvC,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,kBAAkB;AACpB;AAGA,IAAM,sBAAsBC;AAAA,EAC1B,SAAS,WAAW,OAAwB,KAAK;AAC/C,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAAG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAAD;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AAEJ,WACE,gBAAAJ,QAAA;AAAA,MAAC,wBAAwB;AAAA,MAAxB;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAMK;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAOD;AAAA,QACP;AAAA;AAAA,MAEA,gBAAAJ,QAAA,cAAC,wBAAwB,OAAxB,EAA8B,KAAW,GAAG,YAAY;AAAA,MACxD;AAAA,IACH;AAAA,EAEJ;AACF;AAGA,IAAMa,cAAa,OAAO,OAAO,qBAAqB,uBAAuB;;;AFntB7E,SAAS,wBAA2B;AAClC,MAAI,UAA8B,MAAM;AAAA,EAAC;AACzC,MAAI,SAA+B,MAAM;AAAA,EAAC;AAE1C,QAAM,UAAU,IAAI,QAAW,CAAC,KAAK,QAAQ;AAC3C,cAAU;AACV,aAAS;AAAA,EACX,CAAC;AAED,SAAO,EAAE,SAAS,SAAS,OAAO;AACpC;AAgCA,IAAM,gBAAgBC,eAA8C,MAAS;AAkCtE,IAAM,iBAAiB,SAASC,gBAAe;AAAA,EACpD;AACF,GAEG;AACD,QAAM,CAAC,UAAU,WAAW,IAAIC,WAAqC;AAErE,QAAM,SAAS,CAAC,CAAC;AAEjB,QAAM,QAAQC,cAAY,MAAM;AAC9B,QAAI,UAAU;AACZ,UAAI,SAAS,SAAS,SAAS;AAC7B,iBAAS,QAAQ,MAAS;AAAA,MAC5B,OAAO;AACL,iBAAS,QAAQ,KAAK;AAAA,MACxB;AAAA,IACF;AAEA,gBAAY,MAAS;AAAA,EACvB,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,WAAWC,SAAO,KAAK;AAC7B,WAAS,UAAU;AAEnB,QAAM,SAASD,cAAY,MAAM;AAC/B,QAAI,CAAC,YAAY,SAAS,SAAS,QAAS;AAE5C,aAAS,QAAQ,SAAS,UAAU;AACpC,gBAAY,MAAS;AAAA,EACvB,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,OAA8CA,cAAY,CAAC,YAAY;AAC3E,UAAM,EAAE,SAAS,QAAQ,IAAI,sBAA0C;AAEvE,UAAM,EAAE,OAAO,aAAa,cAAc,aAAa,OAAAE,QAAO,UAAU,IACtE,OAAO,YAAY,WAAW,EAAE,OAAO,QAAQ,IAAI;AAErD,gBAAY;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,YAAY,gBAAgB;AAAA,MAC5B;AAAA,MACA,OAAAA;AAAA,MACA;AAAA,MACA,SAAS,CAAC,UAA8B;AACtC,gBAAQ,KAAK;AACb,oBAAY,MAAS;AAAA,MACvB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,mBACJF,cAAY,CAAC,YAAY;AACvB,UAAM,EAAE,SAAS,QAAQ,IAAI,sBAA+B;AAE5D,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAAE;AAAA,MACA;AAAA,IACF,IAAI,OAAO,YAAY,WAAW,EAAE,OAAO,QAAQ,IAAI;AAEvD,gBAAY;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAAA;AAAA,MACA;AAAA,MACA,SAAS,CAAC,UAAmB;AAC3B,gBAAQ,KAAK;AACb,oBAAY,MAAS;AAAA,MACvB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEP,QAAM,mBAAqDF;AAAA,IACzD,CAAC,YAAY;AACX,YAAM,EAAE,SAAS,QAAQ,IAAI,sBAA4B;AAEzD,YAAM,EAAE,OAAO,aAAa,OAAAE,QAAO,UAAU,IAAI;AAEjD,YAAMC,YACJ,OAAO,QAAQ,aAAa,aACxB,QAAQ,SAAS,EAAE,OAAO,SAAS,QAAQ,CAAC,IAC5C,QAAQ;AAEd,kBAAY;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,OAAAD;AAAA,QACA;AAAA,QACA,UAAAC;AAAA,QACA,SAAS,MAAM;AACb,kBAAQ;AACR,sBAAY,MAAS;AAAA,QACvB;AAAA,MACF,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,gBAAgBH;AAAA,IACpB,CAAC,UAAiD;AAChD,UAAI,MAAM,QAAQ,QAAS;AAE3B,YAAM,gBAAgB;AACtB,YAAM,eAAe;AAErB,aAAO;AAAA,IACT;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,QAAM,WAAWC,SAAyB,IAAI;AAC9C,QAAM,YAAYA,SAAgB,IAAI;AAEtC,QAAM,kBAAkBD,cAAY,CAAC,YAAyB;AAC5D,QAAI,CAAC,UAAU,QAAS,QAAO;AAE/B,WAAO,UAAU,QAAQ,gBAAgB,OAAO;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,SACE,gBAAAI,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACC,OAAOC;AAAA,QACL,OAAO;AAAA,UACL,YAAY;AAAA,UACZ,iBAAiB;AAAA,UACjB,wBAAwB;AAAA,UACxB;AAAA,QACF;AAAA,QACA,CAAC,iBAAiB,MAAM,kBAAkB,gBAAgB;AAAA,MAC5D;AAAA;AAAA,IAEC;AAAA,EACH,GACA,gBAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,OAAO,UAAU;AAAA,MACjB,aAAa,UAAU;AAAA,MACvB,MAAM;AAAA,MACN,OAAO,UAAU;AAAA,MACjB,WAAW,UAAU;AAAA,MACrB,cAAcJ;AAAA,QACZ,CAACM,YAAoB;AACnB,cAAI,CAACA,SAAQ;AACX,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,CAAC,KAAK;AAAA,MACR;AAAA,MACA,iBAAiBN;AAAA,QACf,CAAC,UAAiB;AAChB,gBAAM,gBAAgB;AACtB,gBAAM,eAAe;AAErB,cAAI,CAAC,YAAY,SAAS,SAAS,QAAS;AAE5C,mBAAS,SAAS,MAAM;AACxB,mBAAS,SAAS;AAAA,YAChB;AAAA,YACA,SAAS,QAAQ,MAAM;AAAA,UACzB;AAAA,QACF;AAAA,QACA,CAAC,QAAQ;AAAA,MACX;AAAA;AAAA,IAEC,UAAU,SAAS,iBAClB,gBAAAI,QAAA,cAAC,SAAI,WAAU,uCACb,gBAAAA,QAAA,cAAC,OAAO,YAAP,IAAkB,GACnB,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM;AACb,mBAAS,QAAQ,KAAK;AACtB,sBAAY,MAAS;AAAA,QACvB;AAAA;AAAA,MAEC,SAAS,qBAAqB;AAAA,IACjC,GACA,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,IAAI,GAC7B,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM;AACb,mBAAS,QAAQ,IAAI;AACrB,sBAAY,MAAS;AAAA,QACvB;AAAA;AAAA,MAEC,SAAS,sBAAsB;AAAA,IAClC,CACF,IACE,UAAU,SAAS,WACrB,gBAAAA,QAAA,cAAAA,QAAA,gBAAG,SAAS,QAAS,IAErB,gBAAAA,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA,cAACG,YAAW,MAAX,MACC,gBAAAH,QAAA;AAAA,MAACG,YAAW;AAAA,MAAX;AAAA,QACC,KAAK;AAAA,QACL,aACE,UAAU,SAAS,UAAU,SAAS,cAAc;AAAA,QAEtD,OAAO,UAAU,SAAS,UAAU,SAAS,aAAa;AAAA,QAC1D,UAAU,CAAC,UAAkB;AAC3B;AAAA,YAAY,CAACC,cACXA,WAAU,SAAS,UACf;AAAA,cACE,GAAGA;AAAA,cACH,YAAY;AAAA,YACd,IACA;AAAA,UACN;AAAA,QACF;AAAA,QACA,WAAW;AAAA;AAAA,IACb,CACF,GACA,gBAAAJ,QAAA,cAAC,OAAO,UAAP,EAAgB,MAAM,IAAI,GAC3B,gBAAAA,QAAA,cAAC,SAAI,WAAU,uCACb,gBAAAA,QAAA,cAAC,OAAO,YAAP,IAAkB,GACnB,gBAAAA,QAAA,cAAC,UAAO,SAAS,SAAO,QAAM,GAC9B,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,IAAI,GAC7B,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,UACE,CAAC,YAAY,SAAS,SAAS,WAAW,CAAC,SAAS;AAAA,QAEtD,SAAS;AAAA;AAAA,MACV;AAAA,IAED,CACF,CACF;AAAA,EAEJ,CACF;AAEJ;AAEO,SAAS,mBAAuC;AACrD,QAAM,QAAQK,YAAW,aAAa;AAEtC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,SAAO;AACT;AAEO,SAAS,qBAAqB;AACnC,SAAO,iBAAiB,EAAE;AAC5B;AAEO,SAAS,2BAA2B;AACzC,SAAO,iBAAiB,EAAE;AAC5B;AAEO,SAAS,4BAA4B;AAC1C,SAAO,iBAAiB,EAAE;AAC5B;AAEO,SAAS,gBAAgB;AAC9B,SAAO,iBAAiB,EAAE;AAC5B;;;AWxWA,SAAS,YAAY;AACrB,OAAOC,WAAS,iBAAAC,gBAAe,cAAAC,aAAY,WAAAC,UAAS,YAAAC,kBAAgB;AACpE,SAAS,oBAAoB;AAO7B,IAAM,wBAAwBH,eAE5B,MAAS;AAMX,IAAM,uBAAuBA,eAE3B,MAAS;AAEJ,IAAM,yBAAyB,CAAC;AAAA,EACrC;AACF,MAEM;AACJ,QAAM,CAAC,SAAS,UAAU,IAAIG,WAA0C,CAAC,CAAC;AAE1E,QAAM,eAAeD,SAAQ,MAAM;AACjC,UAAM,eAAe,CAAC,YAA6B;AACjD,YAAM,KAAK,KAAK;AAEhB,iBAAW,CAACE,cAAa;AAAA,QACvB,GAAGA;AAAA,QACH,CAAC,EAAE,GACD,gBAAAL,QAAA,cAAC,qBAAqB,UAArB,EAA8B,OAAO,EAAE,GAAG,KACxC,OACH;AAAA,MAEJ,EAAE;AAEF,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,CAAC,OAAe;AAClC,iBAAW,CAACK,aAAY;AACtB,cAAM,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,IAAIA;AAC7B,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,WAAO,EAAE,cAAc,YAAY;AAAA,EACrC,GAAG,CAAC,CAAC;AAEL,SACE,gBAAAL,QAAA,cAAC,sBAAsB,UAAtB,EAA+B,OAAO,gBACpC,UACA,OAAO,QAAQ,OAAO,EAAE;AAAA,IAAI,CAAC,CAAC,IAAI,OAAO,MACxC,aAAa,SAAS,SAAS,MAAM,EAAE;AAAA,EACzC,CACF;AAEJ;AAEO,IAAM,2BAA2B,MAAM;AAC5C,QAAM,UAAUE,YAAW,qBAAqB;AAEhD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,mCAAmC,MAAM;AACpD,QAAM,UAAUA,YAAW,oBAAoB;AAE/C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAEA,SAAO;AACT;;;ApBzEA,IAAM,mCACE,sBAAqD;AAAA,EACzD,UAAU;AACZ,CAAC;AAEI,IAAM,oCAA0C;AAAA,EACrD,SAASI,mCAAkC;AAAA,IACzC;AAAA,IACA;AAAA,EACF,GAGG;AACD,UAAM,CAAC,kBAAkB,mBAAmB,IACpC,iBAAuB,YAAY,KAAK;AAEhD,IAAM,kBAAU,MAAM;AACpB,UAAI,aAAa,OAAW;AAE5B,UAAI,OAAO,cAAc,aAAa;AACpC,4BAAoB,mBAAmB,SAAS,CAAC;AAAA,MACnD;AAAA,IACF,GAAG,CAAC,QAAQ,CAAC;AAEb,UAAM,eAAqB;AAAA,MACzB,OAAO,EAAE,UAAU,YAAY,iBAAiB;AAAA,MAChD,CAAC,UAAU,gBAAgB;AAAA,IAC7B;AAEA,WACE,sCAAC,iCAAiC,UAAjC,EAA0C,OAAO,gBAChD,sCAAC,2BACC,sCAAC,sBACC,sCAAC,qBACC,sCAAC,8BAAwB,QAAS,CACpC,CACF,CACF,CACF;AAAA,EAEJ;AACF;AAEO,SAAS,+BAAsE;AACpF,SAAa,mBAAW,gCAAgC;AAC1D;;;AqBxDA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAMP,SAAS,gBACP,UACA,mBACa;AACb,SAAO,SAAS,QAAQ,QAAQ,EAAE,QAAQ,CAAC,UAAU;AACnD,QAAI,qBAAqB,eAAe,KAAK,KAAK,MAAM,SAAS,UAAU;AACzE,aAAO,gBAAgB,MAAM,MAAM,UAAU,iBAAiB;AAAA,IAChE;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,UAAU,KAAsB;AACvC,SAAO,KAAK,GAAG;AACjB;AAEe,SAAR,sBACLC,WACAC,YACA,SACA;AACA,QAAM,gBAAgB;AAAA,IACpBD;AAAA,IACA,SAAS,qBAAqB;AAAA,EAChC;AAEA,WAAS,IAAI,cAAc,SAAS,GAAG,IAAI,GAAG,KAAK;AACjD,QAAI,MACF,OAAOC,eAAc,aACjBA,WAAU,IACV,eAAeA,UAAS,IACtB,aAAaA,YAAW,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,IAC7CA;AAER,QAAI,eAAe,GAAG,KAAK,IAAI,OAAO,MAAM;AAC1C,YAAM,aAAa,KAAK,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC;AAAA,IAC/C;AAEA,QAAI,CAAC,OAAO,OAAO,QAAQ,UAAW;AAEtC,kBAAc,OAAO,GAAG,GAAG,GAAG;AAAA,EAChC;AAEA,SAAO;AACT;;;AtBQO,IAAM,YAA2B;AAAA,EACtC,MAAM;AACR;AA2DO,IAAM,uBAAuB,CAClC,SACkC;AAClC,SAAO,KAAK,SAAS;AACvB;AAEO,IAAM,0BAA0B,CACrC,SACqC,CAAC,qBAAqB,IAAI;AAE1D,IAAM,0BAA0B,CACrC,SACkC,KAAK,SAAS;AAE3C,IAAM,gCAAgC,CAC3C,SAEA,qBAAqB,IAAI,KAAK,WAAW,QAAQ,WAAW;AAEvD,IAAM,iBAAiB,CAC5B,MACA,UACW;AACX,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO,MAAM,SAAS;AAAA,IACxB,KAAK;AACH,aAAO,KAAK;AAAA,IACd,KAAK;AACH,aAAO,KAAK;AAAA,IACd;AACE,aAAO,KAAK;AAAA,EAChB;AACF;AAEO,IAAM,iBAAiB;AACvB,IAAM,uBAAuB;AAC7B,IAAM,wBAAwB;AAE9B,IAAM,SAAS;AAAA,EACpB,gBAAgB;AAAA,EAChB,mBACE;AAAA,EACF,uBACE;AAAA,EACF,WAAW,CAAC,EAAE,SAAS,MAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjD,WAAW,uBAAuB,EAAE;AAAA;AAAA,EAExC,eAAe;AAAA,IACb,WAAW;AAAA,IACX,OAAO;AAAA,MACL,aAAa,CAAC;AAAA,IAChB;AAAA,EACF;AAAA,EACA,cACE;AACJ;AAEA,SAAS,qBACP,MACe;AACf,MAAI,KAAK,SAAS,YAAa,QAAO,CAAC;AACvC,MAAI,KAAK,SAAS,gBAAiB,QAAO,CAAC;AAE3C,MAAI,KAAK,SAAS,UAAW,QAAO,KAAK,MAAM,QAAQ,oBAAoB;AAE3E,MAAI,KAAK,YAAY,CAAC,KAAK,SAAS,CAAC,KAAK,SAAU,QAAO,CAAC;AAE5D,SAAO,CAAC,CAAC,KAAK,UAAU,KAAK,KAAK,CAAC;AACrC;AAEO,SAAS,iCACd,WACA,UAC4B;AAC5B,SAAO,OAAO;AAAA,IACZ,UACG,QAAQ,oBAAoB,EAC5B,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,MAAM,SAAS,KAAK,CAAC,CAAC;AAAA,EACvD;AACF;AAEA,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAIE,gBAAAC,QAAA;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT,WAAW;AAAA,MACX;AAAA,MACA,cAAc;AAAA,IAChB;AAAA;AAAA,EAEC;AACH;AAGK,IAAM,mBAAmBC,OAAK,SAASC,kBAAiB;AAAA,EAC7D;AACF,GAEG;AACD,QAAM,WAAW,6BAA6B,EAAE;AAEhD,QAAM,EAAE,MAAM,WAAAC,WAAU,IAAI,wBAAwB,UAAU,QAAQ;AAEtE,QAAM,cAAc,KAAK,IAAI,CAAC,QAC5B,gBAAAH,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,YAAY,aAAa,SAAS,IAAI,WAAW;AAAA;AAAA,IAEhD;AAAA,EACH,CACD;AAED,SACE,gBAAAA,QAAA,cAAAA,QAAA,gBACGG,aACG;AAAA,IACE;AAAA,IACA,gBAAAH,QAAA,cAAC,uBAAiBG,UAAU;AAAA,EAC9B,IACA,WACN;AAEJ,CAAC;AAEM,IAAM,gBAAgBF,OAAK,SAASG,eAAc;AAAA,EACvD;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,GAGG;AACD,SACE,gBAAAJ,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,UACE,YAAY,UACR,cAAc,WAAW,KAAK,kCAC9B;AAAA,UACJ;AAAA,UACA,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,YAAY,CAAC,MAAM;AAAA,QACrB;AAAA,MACF;AAAA;AAAA,IAEC,YACC,gBAAAA,QAAA;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACC,MAAM,iBAAiB,uBAAuB;AAAA;AAAA,IAChD;AAAA,IAED;AAAA,EACH;AAEJ,CAAC;;;AuBtSD,SAAS,wBAAwB;AAGjC,OAAOK,aAAW;;;ACAlB,OAAOC,WAAS,eAAAC,qBAAmB;AAY5B,IAAM,aAAaC,QAAM;AAAA,EAC9B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAAC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GASA,iBACG;AACH,UAAM,mBAAmBC,cAAY,MAAM;AACzC,UAAI,CAAC,MAAO;AACZ,iBAAW,KAAK;AAAA,IAClB,GAAG,CAAC,UAAU,KAAK,CAAC;AAGpB,UAAM,yBAAyBA;AAAA,MAC7B,CAAC,UAA4C;AAC3C,cAAM,gBAAgB;AAAA,MACxB;AAAA,MACA,CAAC;AAAA,IACH;AAEA,QAAI,WAAWD,YAAW,cAAc;AACtC,aACE,gBAAAD,QAAA,cAAC,SAAI,WAAU,UACb,gBAAAA,QAAA;AAAA,QAACC,YAAW;AAAA,QAAX;AAAA,UACC;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,WAAW;AAAA,YACT,OAAO,UAAU,EAAE,SAAS,CAAC;AAAA,YAC7B,OAAO;AAAA,YACP,gBAAgB,OAAO;AAAA,UACzB;AAAA;AAAA,QAEA,gBAAAD,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,uBAAuB;AAAA,QAC/CC,YAAW,iBACV,gBAAAD,QAAA,cAACC,YAAW,eAAX,EAA0B,GAAG,OAAO,iBACnC,gBAAAD,QAAA,cAAC,eAAU,CACb;AAAA,QAED,QACC,gBAAAA,QAAA,cAAAA,QAAA,gBACG,WAAW,IAAI,GAChB,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,GAAG,CAC9B;AAAA,QAED;AAAA,QACA,YACC,gBAAAA,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA,cAAC,OAAO,YAAP,IAAkB,GACnB,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,IAAI,GAC7B,gBAAAA,QAAA,cAAC,oBAAiB,UAAoB,CACxC;AAAA,MAEJ,CACF;AAAA,IAEJ;AAEA,WACE,gBAAAA,QAAA,cAAC,SAAI,WAAU,UACb,gBAAAA,QAAA;AAAA,MAACC,YAAW;AAAA,MAAX;AAAA,QACC,WAAW;AAAA,UACT,OAAO,UAAU,EAAE,SAAS,CAAC;AAAA,UAC7B,OAAO;AAAA,UACP,gBAAgB,OAAO;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,QACT,GAAG;AAAA;AAAA,MAEJ,gBAAAD,QAAA,cAAC,SAAI,WAAU,8BACZ,YAAY,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,uBAAuB,GAC5D,UACC,gBAAAA,QAAA,cAAC,SAAK,GAAG,OAAO,iBACd,gBAAAA,QAAA,cAAC,eAAU,CACb,IACE,WACF,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,iBAAiB,sBAAsB,IAC9D,MACH,QACC,gBAAAA,QAAA,cAAAA,QAAA,gBACG,WAAW,IAAI,GAChB,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,GAAG,CAC9B,GAEF,gBAAAA,QAAA,cAACC,YAAW,UAAX,MAAqB,QAAS,GAC9B,YACC,gBAAAD,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA,cAAC,OAAO,YAAP,IAAkB,GACnB,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,IAAI,GAC7B,gBAAAA,QAAA,cAAC,oBAAiB,UAAoB,CACxC,CAEJ;AAAA,IACF,CACF;AAAA,EAEJ;AACF;AAEA,SAAS,YAAY;AACnB,SACE,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,eAAY;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ;AAAA;AAAA,IAER,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,GAAE;AAAA,QACF,aAAY;AAAA,QACZ,eAAc;AAAA,QACd,gBAAe;AAAA,QACf,QAAO;AAAA;AAAA,IACT;AAAA,EACF;AAEJ;;;ADhGO,IAAM,eAAe,CAAmB;AAAA,EAC7C;AAAA,EACA,YAAAG;AAAA,EACA;AACF,MAA4B;AAC1B,QAAM,gBAAgB,iBAAiB;AAEvC,QAAM,iBAAiB,MAAM;AAAA,IAC3B,CAAC,SACC,KAAK,SAAS,eAAe,KAAK,SAAS,mBAAmB,KAAK;AAAA,EACvE;AAEA,SACE,gBAAAC,QAAA,cAAAA,QAAA,gBACG,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,eACE,gBAAAA,QAAA;AAAA,UAACD,YAAW;AAAA,UAAX;AAAA,YACC,KAAK;AAAA,YACL,WAAW,OAAO;AAAA;AAAA,QACpB;AAAA,MAGJ,KAAK;AACH,eACE,gBAAAC,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,UAAU;AAAA,YACnB,KAAK,KAAK;AAAA,YACT,GAAG;AAAA,YACJ,UAAU;AAAA;AAAA,QACZ;AAAA,MAEJ,KAAK;AACH,YACE,KAAK,SACLD,YAAW,OACXA,YAAW,cACXA,YAAW,cACXA,YAAW,QACX;AACA,iBACE,gBAAAC,QAAA,cAACD,YAAW,KAAX,EAAe,KAAK,KAAK,MACxB,gBAAAC,QAAA;AAAA,YAACD,YAAW;AAAA,YAAX;AAAA,cACC,WAAW;AAAA,gBACT,OAAO,UAAU,EAAE,UAAU,KAAK,SAAS,CAAC;AAAA,gBAC5C,OAAO;AAAA,cACT;AAAA,cACA,SAAO;AAAA,cACP,SAAS,CAAC,MAAM;AACd,kBAAE,gBAAgB;AAClB,kBAAE,eAAe;AAAA,cACnB;AAAA,cACA,UAAU,KAAK;AAAA;AAAA,YAEf,gBAAAC,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,KAAK;AAAA,gBACZ,MAAM,KAAK;AAAA,gBACX,SAAS,KAAK;AAAA,gBACd;AAAA,gBACA,YAAYD;AAAA,gBACZ,UAAU;AAAA,gBACV,UAAU,KAAK;AAAA;AAAA,cAEf,gBAAAC,QAAA,cAAC,SAAI,WAAU,8BACZ,KAAK,KACR;AAAA,cACA,gBAAAA,QAAA,cAAC,oBAAiB,WAAU,SAAQ;AAAA,YACtC;AAAA,UACF,GACA,gBAAAA,QAAA,cAACD,YAAW,QAAX,MACC,gBAAAC,QAAA;AAAA,YAACD,YAAW;AAAA,YAAX;AAAA,cACE,GAAG,iBAAiB,aAAa;AAAA,cAClC,aAAa;AAAA,cACb,WAAW,OAAO;AAAA;AAAA,YAElB,gBAAAC,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,KAAK;AAAA,gBACZ,YAAYD;AAAA,gBACZ;AAAA;AAAA,YACF;AAAA,UACF,CACF,CACF;AAAA,QAEJ,MAAO,QAAO;AAAA,MAChB;AACE,eACE,gBAAAC,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,KAAK;AAAA,YACV,OAAO,KAAK;AAAA,YACZ,MAAM,KAAK;AAAA,YACX,SAAS,KAAK;AAAA,YACd,UAAU,KAAK;AAAA,YACf;AAAA,YACA,YAAYD;AAAA,YACZ,UAAU;AAAA,YACV,cAAc,KAAK;AAAA,YACnB,UAAU,KAAK;AAAA;AAAA,UAEd,KAAK,SAAS,KAAK;AAAA,QACtB;AAAA,IAEN;AAAA,EACF,CAAC,CACH;AAEJ;;;AzBxIA,IAAM,aAAa;AAAA,EACjB,WAA6B;AAAA,EAC7B,UAAUE,QAAM;AAAA,EAChB,MAAwB;AAAA,EACxB,cAAgC;AAAA,EAChC,eAAiC;AAAA,EACjC,YAA8B;AAAA,EAC9B,YAA8B;AAAA,EAC9B,KAAuB;AAAA,EACvB,QAA0B;AAC5B;AAEA,IAAM,mBAAmB,kBAAkB,SAASC,kBAElD,OAA6B,cAAyC;AACtE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,gBAAgB,iBAAiB;AAEvC,QAAM,SAASC;AAAA,IACb,MACE,gCAAgC,QAC5B,CAAC,IACD,iCAAiC,OAAO,QAAQ;AAAA,IACtD,CAAC,OAAO,UAAU,2BAA2B;AAAA,EAC/C;AAEA,uBAAqB,MAAM;AAE3B,QAAM,gBAAgBA;AAAA,IACpB,OAAO;AAAA,MACL,WAAW;AAAA,MACX,UAAU;AAAA,MACV,GAAG;AAAA,IACL;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AAEA,SACE,gBAAAF,QAAA,cAAmB,wBAAlB,EAAuB,cAA4B,QAClD,gBAAAA,QAAA;AAAA,IAAmB;AAAA,IAAlB;AAAA,MACC,KAAK;AAAA,MACL,SAAO;AAAA;AAAA,IAEN;AAAA,EACH,GACA,gBAAAA,QAAA,cAAmB,0BAAlB,MACC,gBAAAA,QAAA;AAAA,IAAmB;AAAA,IAAlB;AAAA,MACE,GAAG,iBAAiB,aAAa;AAAA,MAClC,WAAW,OAAO;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACC,GAAI,EAAE,iBAAiB;AAAA;AAAA,IAEvB,MAAM,WAAW,IAAI,aAAa;AAAA,IACnC,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EACF,CACF,CACF;AAEJ,CAAC;AAEM,IAAM,eAAe,YAAY,gBAAgB;;;AHjGjD,IAAM,aAAa,YAAY,SAASG,YAE7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAAC;AAAA,EACA,UAAU;AAAA,EACV;AACF,GAA2B;AACzB,QAAM,gBAAgBC,UAAQ,MAAM;AAClC,WAAO;AAAA,MACL,iBAAiB,WACb,QAAQ,OAAO,gBACf,QAAQ,OAAO;AAAA,MACnB,SAAS,YAAY,SAAS,IAAI;AAAA,MAClC,GAAGD;AAAA,IACL;AAAA,EACF,GAAG,CAAC,UAAUA,QAAO,OAAO,CAAC;AAE7B,SACE,gBAAAE,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP;AAAA,MACA;AAAA;AAAA,IAEA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA,UAAS;AAAA,QACT,OAAO,UAAU,WAAW,QAAQ,OAAO,UAAU;AAAA,QACrD;AAAA;AAAA,IACF;AAAA,EACF;AAEJ,CAAC;;;A8BzDD,YAAYC,aAAW;AAWhB,IAAM,oBAA0B,aAAK,SAASC,mBAAkB;AAAA,EACrE,MAAAC,QAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,aAAa;AAAA,EACb;AACF,GAAU;AACR,QAAM,eAAqB,gBAAQ,OAAO,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC;AACjE,QAAM,gBAAsB;AAAA,IAC1B,OAAO;AAAA,MACL,QAAQ,aAAa,UAAU;AAAA,MAC/B,gBAAgB;AAAA,MAChB,OAAO,GAAGA,KAAI;AAAA,MACd,QAAQ,GAAGA,KAAI;AAAA,IACjB;AAAA,IACA,CAACA,OAAM,OAAO,UAAU;AAAA,EAC1B;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,oCAAoC,SAAS;AAAA,MAC3D,OAAO;AAAA;AAAA,IAEP,sCAAC,SAAI,OAAO,eAAe,WAAU,8BAA6B;AAAA,EACpE;AAEJ,CAAC;;;ACpCD,YAAY,qBAAqB;AACjC,OAAOC,WAAS,cAAAC,cAAY,WAAAC,iBAAe;;;ACDpC,IAAM,uBAA+C;AAAA,EAC1D,KAAK;AAAA;AAAA,EACL,QAAQ;AAAA;AAAA,EACR,OAAO;AAAA;AAAA,EACP,QAAQ;AAAA;AAAA,EACR,MAAM;AAAA;AAAA,EACN,OAAO;AAAA;AAAA,EACP,SAAS;AAAA;AAAA,EACT,MAAM;AAAA;AAAA,EACN,MAAM;AAAA;AAAA,EACN,KAAK;AAAA;AAAA,EACL,MAAM;AAAA;AAAA,EACN,QAAQ;AAAA;AAAA,EACR,QAAQ;AAAA;AAAA,EACR,QAAQ;AAAA;AAAA,EACR,SAAS;AAAA;AAAA,EACT,MAAM;AAAA;AAAA,EACN,MAAM;AAAA;AACR;AAEA,SAAS,SAAS,QAAgB;AAChC,MAAI,OAAO;AACX,aAAW,QAAQ,QAAQ;AACzB,WAAO,KAAK,WAAW,CAAC,MAAM,QAAQ,KAAK;AAAA,EAC7C;AACA,SAAO;AACT;AAEA,SAAS,gBAAmB,OAAY,MAAiB;AACvD,SAAO,MAAM,KAAK,IAAI,IAAI,IAAI,MAAM,MAAM;AAC5C;AAMO,SAAS,gBAAgB,KAAa;AAC3C,QAAM,OAAO,SAAS,GAAG;AACzB,QAAM,kBAAkB;AAAA,IACtB,OAAO,OAAO,oBAAoB;AAAA,IAClC;AAAA,EACF;AACA,SAAO;AACT;;;ADtCA,IAAM,uBAAuB,CAC3BC,OACA,YACwB;AACxB,QAAM,aAAa,YAAY,SAAS,IAAIA,QAAO,KAAK,IAAI;AAC5D,QAAM,YAAY,GAAGA,QAAO,UAAU;AACtC,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AACF;AAEA,IAAM,aAAaC,QAAM;AAAA,EAKvB,CACE;AAAA,IACE;AAAA,IACA,MAAAD,QAAO;AAAA,IACP,OAAAE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,gBAAgBC;AAAA,MACpB,OAAO;AAAA,QACL,OAAO,GAAGH,KAAI;AAAA,QACd,QAAQ,GAAGA,KAAI;AAAA,QACf;AAAA,QACA,GAAGE;AAAA,MACL;AAAA,MACA,CAAC,iBAAiBF,OAAME,MAAK;AAAA,IAC/B;AAEA,WACE,gBAAAD,QAAA;AAAA,MAAiB;AAAA,MAAhB;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,UACT;AAAA,UACA,YAAY,UAAU;AAAA,UACtB;AAAA,QACF;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,IAAM,cAAcA,QAAM,WAIxB,CAAC,EAAE,WAAW,MAAAD,QAAO,IAAI,UAAU,UAAU,GAAG,MAAM,GAAG,QAAQ;AACjE,SACE,gBAAAC,QAAA;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,qBAAqBD,OAAM,OAAO;AAAA,MACxC,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;AAED,SAAS,YAAY,MAAe;AAClC,SAAO,MAAM,GAAG,CAAC,GAAG,kBAAkB;AACxC;AAEA,IAAM,iBAAiBC,QAAM;AAAA,EAK3B,CACE,EAAE,WAAW,UAAU,OAAAC,QAAO,MAAAF,QAAO,IAAI,iBAAiB,GAAG,MAAM,GACnE,QACG;AACH,WACE,gBAAAC,QAAA;AAAA,MAAiB;AAAA,MAAhB;AAAA,QACC;AAAA,QACA,OAAO;AAAA,UACL;AAAA,UACA,UAAU,GAAGD,QAAO,GAAG;AAAA,UACvB,YAAY,GAAGA,KAAI;AAAA;AAAA,UACnB,GAAGE;AAAA,QACL;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACC,GAAG;AAAA;AAAA,MAEH;AAAA,IACH;AAAA,EAEJ;AACF;AAqBO,IAAM,SAASD,QAAM;AAAA,EAC1BG,aAAW,SAASC,QAClB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAAL,QAAO;AAAA,IACP;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,cACA;AACA,UAAM,qBACJ,mBAAmB,gBAAgB,UAAU,QAAQ,EAAE;AAEzD,WACE,gBAAAC,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,MAAMD;AAAA,QACN,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA,QACC,GAAG;AAAA;AAAA,MAEH,QACC,gBAAAC,QAAA,cAAC,eAAY,KAAK,OAAO,KAAK,MAAM,MAAMD,OAAM,SAAkB,IAElE,gBAAAC,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,iBAAiB;AAAA,UACjB,MAAMD;AAAA,UACN;AAAA;AAAA,QAEC,YAAY,YAAY,IAAI;AAAA,MAC/B;AAAA,IAEJ;AAAA,EAEJ,CAAC;AACH;AAEA,IAAM,iBAAiBC,QAAM,KAAK,SAASK,gBAAe;AAAA,EACxD,MAAAN,QAAO;AAAA,EACP;AACF,GAGG;AACD,SACE,gBAAAC,QAAA,cAAC,cAAW,MAAMD,OAAM,iBAAgB,0BAAyB,UAAQ,QACvE,gBAAAC,QAAA,cAAC,kBAAe,iBAAgB,0BAAyB,MAAMD,SAAM,KACjE,KACJ,CACF;AAEJ,CAAC;AAEM,IAAM,cAAcC,QAAM,KAAK,SAASM,aAAY;AAAA,EACzD,MAAAP,QAAO;AAAA,EACP;AAAA,EACA,MAAM;AAAA,EACN;AACF,GAMG;AACD,QAAM,cAAcC,QAAM,SAAS,MAAM,QAAQ;AAEjD,QAAM,gBAAgB,cAAc;AAEpC,QAAM,gBAAgBE,UAAQ,MAAM;AAClC,UAAM,oBAAoBF,QAAM,SAAS,QAAQ,QAAQ,EACtD,IAAI,CAAC,UAAUA,QAAM,aAAa,OAA6B,EAAE,MAAAD,MAAK,CAAC,CAAC,EACxE,MAAM,GAAG,GAAG;AAEf,QAAI,cAAc,KAAK;AACrB,aAAO;AAAA,QACL,gBAAAC,QAAA,cAAC,kBAAe,KAAI,YAAW,MAAMD,OAAM,OAAO,eAAe;AAAA,QACjE,GAAG;AAAA,MACL;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,KAAKA,OAAM,aAAa,aAAa,CAAC;AAEpD,SACE,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACAD,QAAO,KAAK,SAAS;AAAA,QACrB;AAAA,MACF;AAAA;AAAA,IAEC,cAAc,IAAI,CAAC,OAAO,UAAU;AACnC,aACE,gBAAAC,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,GAAG,YAAYD,QAAO,KAAK,UAAU,SAAS;AAAA,UACzD,KAAK;AAAA;AAAA,QAEJ;AAAA,MACH;AAAA,IAEJ,CAAC;AAAA,EACH;AAEJ,CAAC;;;AEjPD,OAAOQ,WAAS,cAAAC,oBAAkB;AAE3B,IAAM,OAAOA,aAAW,SAASC,MACtC,OACA,KACA;AACA,QAAM,OAAO,MAAM,QAAQ,QAAQ,OAAO;AAE1C,SACE,gBAAAF,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACL,GAAG;AAAA,MACJ,WAAU;AAAA;AAAA,IAEV,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IACA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,UAAS;AAAA,QACT,UAAS;AAAA,QACT,GAAE;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IACA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IACA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,UAAS;AAAA,QACT,UAAS;AAAA,QACT,GAAE;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EACF;AAEJ,CAAC;;;ACjCD,OAAOG,WAAS,cAAAC,oBAAkB;;;ACNlC,OAAOC;AAAA,EAEL,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,OACK;AAIA,IAAM,gBAAgB,CAAC,UAA8B;AAC1D,QAAM,cAAcC,SAAmC,IAAI;AAE3D,EAAAC,YAAU,MAAM;AACd,QAAI,UAAU,OAAW;AACzB,QAAI,CAAC,YAAY,QAAS;AAE1B,gBAAY,QAAQ,MAAM,SAAS;AACnC,gBAAY,QAAQ,MAAM,SAAS,GAAG,YAAY,QAAQ,YAAY;AAAA,EACxE,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO;AACT;AAEO,IAAM,WAAWC;AAAA,EACtBC,aAAW,SAASC,UAClB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,GAAG;AAAA,EACL,GAKA,cACA;AACA,UAAM,EAAE,SAAS,GAAG,IAAI,SAAS,EAAE,SAAS,KAAK,GAAG,CAAC;AACrD,UAAM,gBAAgB;AAAA,MACpB,aAAa,SAAS,KAAK,eAAe,KAAK;AAAA,IACjD;AAEA,UAAM,eAAeC;AAAA,MACnB,CAAC,UAAkD;AACjD,uBAAe,MAAM,OAAO,KAAK;AACjC,mBAAW,KAAK;AAAA,MAClB;AAAA,MACA,CAAC,cAAc,QAAQ;AAAA,IACzB;AAEA,UAAM,YAAYA;AAAA,MAChB,CAACC,WAAsC;AACrC,YAAI,YAAY;AACd,wBAAc,UAAUA;AAAA,QAC1B;AACA,kBAAU,cAAcA,MAAK;AAAA,MAC/B;AAAA,MACA,CAAC,YAAY,eAAe,YAAY;AAAA,IAC1C;AAEA,WACE,gBAAAC,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACC,GAAG;AAAA,QACJ;AAAA,QACA,KAAK;AAAA,QACL,UAAU;AAAA,QACV;AAAA;AAAA,IACF;AAAA,EAEJ,CAAC;AACH;AAEO,IAAM,cAAcL;AAAA,EACzBC,aAAW,SAASK,aAClB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GAOA,cACA;AACA,WACE,gBAAAD,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAW,GAAG,0BAA0B,SAAS;AAAA;AAAA,MAEjD,gBAAAA,QAAA,cAAC,YAAS,WAAW,mBAAoB,GAAG,MAAM,KAAK,aAAa;AAAA,MACpE,gBAAAA,QAAA,cAAC,SAAI,WAAW,GAAG,0BAA0B,YAAY,KAAI,GAAI;AAAA,IACnE;AAAA,EAEJ,CAAC;AACH;;;ADjGO,IAAM,8BAA8B,MAAM;AAC/C,SACE,gBAAAE,QAAA,cAAC,SAAI,WAAU,gBACb,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAM;AAAA,MACN,iBAAiB,QAAQ,OAAO;AAAA;AAAA,IAEhC,gBAAAA,QAAA,cAAC,QAAK,OAAO,EAAE,OAAO,GAAG,GAAG,MAAM,QAAQ,OAAO,SAAS;AAAA,EAC5D,GACA,gBAAAA,QAAA,cAAC,SAAI,WAAU,mBAAgB,QAAC,CAClC;AAEJ;AAUO,IAAM,mBAAmBC,aAG9B,CAAC,EAAE,OAAO,UAAU,eAAe,WAAW,SAAS,GAAG,QAC1D,gBAAAD,QAAA;AAAA,EAAC;AAAA;AAAA,IACC,YAAU;AAAA,IACV,WAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAkB;AAAA,IAClB,aAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,KACE,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,UAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU,CAAC,MAAM,KAAK,KAAK;AAAA,QAC3B,WAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO,QAAQ,OAAO;AAAA,QACtB,OAAO;AAAA,UACL,iBAAiB,QAAQ,OAAO;AAAA,QAClC;AAAA;AAAA,IACF;AAAA;AAEJ,CACD;AAWM,IAAM,oBAAoBC;AAAA,EAI/B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAC;AAAA,EACF,GACA,QACG;AACH,WACE,gBAAAF,QAAA,cAAC,SAAI,WAAW,GAAG,wBAAwB,SAAS,GAAG,OAAOE,UAC5D,gBAAAF,QAAA,cAAC,SAAI,WAAU,gCAA+B,OAC5C,gBAAAA,QAAA,cAAC,SAAI,WAAU,mCACZ,eAAe,GACf,YAAY,yBAAyB,IAAI,IAC5C,CACF,GACA,gBAAAA,QAAA,cAAC,SAAI,WAAU,uCAAqC,YAAY,CAAE,CACpE;AAAA,EAEJ;AACF;;;AErGA,SAAS,eAAAG,oBAAmB;AAC5B,OAAOC;AAAA,EACL,YAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OACK;AA4BP,IAAM,kBAAkB;AAcxB,IAAM,yBAEF;AAAA,EACF,UAAU;AAAA,IACR,SAAS;AAAA,IACT,YAAY,WAAW,eAAe;AAAA,EACxC;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,YAAY,WAAW,eAAe;AAAA,EACxC;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,YAAY,WAAW,eAAe;AAAA,EACxC;AACF;AAEA,IAAM,gBAAgB,CAAC;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA0B;AACxB,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA;AAAA,IAAyB,MACnE,wBAAwB,YACpB,YACA,YACE,aACA;AAAA,EACR;AACA,QAAM,aAAaD,SAAe;AAClC,QAAM,iBAAiBA,SAAO,IAAI;AAElC,QAAM,wBAAwB;AAAA,IAC5B,GAAG;AAAA,IACH,GAAG;AAAA,IACH,QAAQ,CAAC;AAAA,IACT,YAAY;AAAA,IACZ,oBAAoB;AAAA,EACtB;AAEA,EAAAD,iBAAgB,MAAM;AACpB,QAAI;AAEJ,QAAI,aAAa,mBAAmB,WAAW;AAC7C,UAAI,eAAe,WAAW,sBAAsB;AAClD,0BAAkB,SAAS;AAC3B,uBAAe,UAAU;AACzB;AAAA,MACF;AAGA,cAAQ,sBAAsB,MAAM;AAClC,0BAAkB,UAAU;AAC5B,gBAAQ,sBAAsB,MAAM;AAClC,4BAAkB,SAAS;AAAA,QAC7B,CAAC;AAAA,MACH,CAAC;AAAA,IACH,WAAW,CAAC,aAAa,mBAAmB,UAAU;AACpD,wBAAkB,SAAS;AAC3B,iBAAW,UAAU,OAAO,WAAW,MAAM;AAC3C,0BAAkB,QAAQ;AAC1B,uBAAe;AAAA,MACjB,GAAG,QAAQ;AAAA,IACb;AAEA,WAAO,MAAM;AACX,UAAI,MAAO,sBAAqB,KAAK;AACrC,UAAI,WAAW,QAAS,cAAa,WAAW,OAAO;AAAA,IACzD;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,mBAAmB,YAAY,CAAC,WAAW;AAC7C,WAAO;AAAA,EACT;AAEA,SACE,gBAAAL,QAAA,cAAC,SAAI,OAAO,sBAAsB,cAAc,GAAG,aAChD,QACH;AAEJ;AAQO,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACF,MAA4B;AAC1B,QAAM,CAAC,iBAAiB,kBAAkB,IAAIO,WAAyB,CAAC,CAAC;AACzE,QAAM,sBAAsBD,SAA6B,CAAC,CAAC;AAC3D,QAAM,sBAAsBA,SAAoB,oBAAI,IAAI,CAAC;AACzD,QAAM,oBAAoBA,SAAuB,CAAC,CAAC;AAEnD,EAAAF,YAAU,MAAM;AACd,UAAM,cAAcH,UAAS,QAAQ,QAAQ,EAAE;AAAA,MAC7CC;AAAA,IACF;AAEA,uBAAmB,CAAC,SAAS;AAC3B,UAAI,CAAC,KAAK,UAAU,sBAAsB;AACxC,eAAO,YAAY,IAAI,CAAC,WAAW;AAAA,UACjC;AAAA,UACA,WAAW;AAAA,UACX;AAAA,QACF,EAAE;AAAA,MACJ;AAGA,YAAM,UAAU,KAAK,IAAI,CAAC,YAAY;AACpC,cAAM,iBAAiB,YAAY;AAAA,UACjC,CAAC,UACCH,aAAY,MAAM,KAAK,QAAQ,MAAM,GAAG,KACxCA,aAAY,OAAO,QAAQ,KAAK;AAAA,QACpC;AAEA,YAAI,CAAC,gBAAgB;AACnB,8BAAoB,QAAQ,IAAI,QAAQ,MAAM,KAAK,SAAS,KAAK,EAAE;AAAA,QACrE;AAEA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,WAAW;AAAA,UACX,UAAU,CAAC,iBACP,OACA,oBAAoB,QAAQ;AAAA,YAC1B,QAAQ,MAAM,KAAK,SAAS,KAAK;AAAA,UACnC;AAAA,QACN;AAAA,MACF,CAAC;AAGD,YAAM,aAAa,YAChB;AAAA,QACC,CAAC,UACC,CAAC,KAAK;AAAA,UACJ,CAAC,MACCA,aAAY,EAAE,MAAM,KAAK,MAAM,GAAG,KAClCA,aAAY,EAAE,OAAO,KAAK;AAAA,QAC9B;AAAA,MACJ,EACC,IAAI,CAAC,WAAW;AAAA,QACf;AAAA,QACA,WAAW,SAAS,SAAS,QAAQ;AAAA,MACvC,EAAE;AAEJ,0BAAoB,UAAU;AAE9B,UAAI,SAAS,UAAU,oBAAoB,QAAQ,OAAO,GAAG;AAC3D,0BAAkB,UAAU;AAC5B,eAAO;AAAA,MACT;AAEA,aAAO,CAAC,GAAG,SAAS,GAAG,UAAU;AAAA,IACnC,CAAC;AAAA,EACH,GAAG,CAAC,UAAU,sBAAsB,IAAI,CAAC;AAEzC,QAAM,cAAcI,cAAY,CAAC,aAAqB;AACpD,QAAI,CAAC,oBAAoB,QAAQ,IAAI,QAAQ,EAAG;AAChD,wBAAoB,QAAQ,OAAO,QAAQ;AAE3C,uBAAmB,CAAC,SAAS;AAC3B,YAAM,WAAW,KAAK;AAAA,QACpB,CAAC,YAAY,QAAQ,MAAM,KAAK,SAAS,MAAM;AAAA,MACjD;AAEA,UACE,oBAAoB,QAAQ,SAAS,KACrC,kBAAkB,QAAQ,SAAS,GACnC;AACA,cAAM,mBAAmB,kBAAkB,QAAQ,IAAI,CAAC,aAAa;AAAA,UACnE,GAAG;AAAA,UACH,WAAW;AAAA,QACb,EAAE;AACF,0BAAkB,UAAU,CAAC;AAC7B,eAAO,CAAC,GAAG,UAAU,GAAG,gBAAgB;AAAA,MAC1C;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,SACE,gBAAAH,QAAA,cAAAA,QAAA,gBACG,gBAAgB,IAAI,CAAC,EAAE,OAAO,WAAW,sBAAAQ,sBAAqB,MAC7D,gBAAAR,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,MAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA,sBAAsBQ;AAAA,MACtB,gBAAgB,MAAM,YAAY,MAAM,KAAK,SAAS,KAAK,EAAE;AAAA,MAC7D;AAAA;AAAA,IAEC;AAAA,EACH,CACD,CACH;AAEJ;;;AC3QA,OAAOC,aAAyC;AAKhD,IAAM,eAAe;AAAA,EACnB,iBAAiB,QAAQ,OAAO;AAAA,EAChC,OAAO,QAAQ,OAAO;AACxB;AAQO,SAAS,OAAO,EAAE,QAAQ,YAAY,WAAW,OAAAC,OAAM,GAAgB;AAC5E,SACE,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,GAAG,cAAc,GAAGD,OAAM;AAAA;AAAA,IAEnC,gBAAAC,QAAA,cAAC,SAAM,OAAM,kBAAgB,KAAM;AAAA,EACrC;AAEJ;;;AC5BA,SAAS,cAAAC,oBAAkB;AAE3B,OAAOC,aAAW;AAUX,IAAM,iBAAiBC,aAAW,SAASC,gBAChD,EAAE,UAAU,WAAW,SAAS,GAAG,MAAM,GACzC,KACA;AACA,SACE,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,SAAQ;AAAA,MACR,WAAW;AAAA,QACT;AAAA,QACA,WACE;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IAEC;AAAA,EACH;AAEJ,CAAC;AAED,IAAM,aAAa;AAAA,EACjB,QAAQ;AACV;AAEO,IAAM,kBAAkB,MAAM;AACnC,SACE,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA;AAAA,IAEP,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,QAAQ,QAAQ,OAAO;AAAA,QACvB,aAAY;AAAA,QACZ,eAAc;AAAA,QACd,gBAAe;AAAA;AAAA,IACjB;AAAA,EACF;AAEJ;;;AC1DA,YAAYC,aAAW;AASvB,IAAM,oBAAoB;AAAA,EACxB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AACb;AAEO,IAAM,WAAiB;AAAA,EACtB,mBAA4C,SAASC,UACzD,EAAE,WAAW,OAAAC,QAAO,cAAc,WAAW,GAAG,MAAM,GACtD,KACA;AACA,UAAM,EAAE,SAAS,GAAG,IAAI,SAAS,EAAE,SAAS,MAAM,GAAG,CAAC;AACtD,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,kBAAkB,WAAW;AAAA,UAC7B;AAAA,QACF;AAAA,QACA,OAAOA;AAAA;AAAA,MAEP;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAmBX,gBAAc,MAAM;AAAA,UACnB,GAAG;AAAA,UACJ;AAAA;AAAA,MACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAYX,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,OAAM;AAAA,UACN,eAAY;AAAA;AAAA,QAEZ;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,QAAO;AAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EAEJ,CAAC;AACH;;;ACpFA,SAAS,YAAY,gBAAgB;AACrC,OAAOC,WAAS,cAAAC,cAAY,QAAAC,cAAY;;;ACSxC,YAAYC,aAAW;AAkCvB,IAAI,kCAAkC;AACtC,IAAI,aAAa;AAEjB,SAAS,qCAAqC;AAC5C,oCAAkC;AAMlC,aAAW,SAAS,uCAAuC;AACzD,sCAAkC;AAAA,EACpC,GAAG,EAAE;AACP;AAEA,SAAS,yBAAyB,OAAqB;AACrD,MAAI,MAAM,gBAAgB,SAAS;AACjC,uCAAmC;AAAA,EACrC;AACF;AAEA,SAAS,yBAAyB;AAChC,MAAI,OAAO,aAAa,aAAa;AACnC;AAAA,EACF;AAEA,WAAS,iBAAiB,aAAa,wBAAwB;AAE/D;AACA,SAAO,SAAS,4BAA4B;AAC1C;AACA,QAAI,aAAa,GAAG;AAClB;AAAA,IACF;AACA,aAAS,oBAAoB,aAAa,wBAAwB;AAAA,EACpE;AACF;AAMO,SAAS,SAAS,QAAoB,CAAC,GAAgB;AAC5D,QAAM,EAAE,cAAc,eAAe,YAAY,WAAW,IAAI;AAEhE,QAAM,CAAC,WAAW,UAAU,IAAU,iBAAS,KAAK;AACpD,QAAM,QAAc,eAAO;AAAA,IACzB,WAAW;AAAA,IACX,2BAA2B;AAAA,EAC7B,CAAC,EAAE;AAEH,EAAM,kBAAU,wBAAwB,CAAC,CAAC;AAE1C,QAAM,aAAmB;AAAA,IACvB,SAAS,gBAAgB;AACvB,eAAS,kBACP,OACA,aACA;AACA,YAAI,cAAc,gBAAgB,WAAW,MAAM,WAAW;AAC5D;AAAA,QACF;AAEA,cAAM,YAAY;AAClB,cAAM,SAAS,MAAM;AAErB,YAAI,cAAc;AAChB,uBAAa;AAAA,YACX,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,eAAe;AACjB,wBAAc,IAAI;AAAA,QACpB;AAEA,mBAAW,IAAI;AAAA,MACjB;AAEA,eAAS,gBACP,OACA,aACA;AACA,YAAI,cAAc,gBAAgB,WAAW,CAAC,MAAM,WAAW;AAC7D;AAAA,QACF;AAEA,cAAM,YAAY;AAClB,cAAM,SAAS,MAAM;AAErB,YAAI,YAAY;AACd,qBAAW;AAAA,YACT,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,eAAe;AACjB,wBAAc,KAAK;AAAA,QACrB;AAEA,mBAAW,KAAK;AAAA,MAClB;AAEA,YAAMC,cAAgD;AAAA,QACpD,eAAe,OAAwC;AACrD,cAAI,mCAAmC,MAAM,gBAAgB,SAAS;AACpE;AAAA,UACF;AACA,4BAAkB,OAAO,MAAM,WAAW;AAAA,QAC5C;AAAA,QACA,eAAe,OAAwC;AACrD,0BAAgB,OAAO,MAAM,WAAW;AAAA,QAC1C;AAAA,MACF;AAEA,aAAOA;AAAA,IACT;AAAA,IACA,CAAC,YAAY,OAAO,cAAc,eAAe,UAAU;AAAA,EAC7D;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ADjKA,IAAM,cACJ;AAEF,IAAM,cAAc;AAAA,EAClB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,IAAM,gBAAgB;AAAA,EACpB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AACX;AAEA,IAAM,eAAe;AAAA,EACnB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,QAAQ;AAAA,EACV;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,QAAQ;AAAA,EACV;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,QAAQ;AAAA,EACV;AACF;AAEA,IAAM,mBAAmB;AAEzB,IAAM,mBAAmB;AAAA,EACvB,OAAO;AAAA,IACL,KAAK;AAAA,IACL,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,QAAQ;AAAA,EACV;AACF;AAuBO,IAAM,OAAOC;AAAA,EAClBC,aAAW,SAASC,MAClB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAC;AAAA,IACA,MAAAC,QAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,cACA;AACA,UAAM,EAAE,YAAY,iBAAiB,IAAI,SAAS;AAAA,MAChD,eAAe;AAAA,IACjB,CAAC;AAED,UAAM,cAAc,CAAC,YAAY,CAAC,aAAa,UAAU,QAAQ;AACjE,UAAM,gBAAgB,CAAC,CAAC,eAAe,cAAc;AAErD,UAAM,SAAS,aAAa,eAAe,SAAS;AACpD,UAAM,iBACJ,YAAY,UACR,GAAG,OAAO,IAAI,IAAI,OAAO,EAAE,KAC3B,YAAY,aACV,GAAG,OAAO,IAAI,mBAAmB,cAAc,eAAe,SAAS,CAAC,UAAU,OAAO,MAAM,uBAC/F;AAER,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,YAAYA,KAAI;AAAA,MAChB,aAAa;AAAA,MACb;AAAA,MACA,iBAAiB;AAAA,MACjB,YAAY;AAAA,MACZ;AAAA,IACF;AAEA,UAAM,QACJ,gBAAgB,YACZ,QAAQ,OAAO,UACf,gBAAgB,cACd,QAAQ,OAAO,YACf,QAAQ,OAAO;AAEvB,WACE,gBAAAC,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAW;AAAA,QACX,OAAOF;AAAA,QACP,SAAS;AAAA,QACT;AAAA,QACC,GAAG;AAAA;AAAA,MAEH,WACC,gBAAAE,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,GAAG,kBAAkB,iBAAiBD,KAAI,EAAE,GAAG;AAAA,UAC1D,SACE,UACC,CAAC,UAAU;AACV,kBAAM,gBAAgB;AACtB,kBAAM;AAAA,UACR;AAAA,UAEF;AAAA;AAAA,MACF;AAAA,MAED;AAAA,MACA,aACC,gBAAAC,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,GAAG,kBAAkB,iBAAiBD,KAAI,EAAE,MAAM;AAAA,UAC5D,GAAI;AAAA,UACL,SACE,aACC,CAAC,UAAU;AACV,kBAAM,gBAAgB;AACtB,qBAAS;AAAA,UACX;AAAA,UAEF;AAAA;AAAA,MACF;AAAA,IAEJ;AAAA,EAEJ,CAAC;AACH;;;AEtLA,OAAOE,aAAW;;;ACIlB,OAAOC,WAAS,uBAAAC,sBAAqB,UAAAC,UAAQ,YAAAC,kBAAgB;;;ACDtD,SAAS,gBACd,QACA,aACA,WACA,OACU;AACV,QAAM,aAAa,OAAO,WAAW,OAAO;AAE5C,MAAI,CAAC,SAAU,CAAC,MAAM,YAAY,CAAC,YAAa;AAE9C,WAAO,CAAC,SAAS;AAAA,EACnB;AAEA,MAAI,YAAY;AACd,UAAM,aAAa,YAAY,SAAS,SAAS;AACjD,WAAO,aACH,YAAY,OAAO,CAAC,OAAO,OAAO,SAAS,IAC3C,CAAC,GAAG,aAAa,SAAS;AAAA,EAChC;AAEA,MAAI,MAAM,YAAY,YAAY,SAAS,GAAG;AAE5C,UAAM,qBAAqB,OAAO,QAAQ,YAAY,CAAC,CAAC;AACxD,UAAM,oBAAoB,OAAO;AAAA,MAC/B,YAAY,YAAY,SAAS,CAAC;AAAA,IACpC;AACA,UAAM,eAAe,OAAO,QAAQ,SAAS;AAG7C,UAAM,WACJ,KAAK,IAAI,eAAe,kBAAkB,IAC1C,KAAK,IAAI,eAAe,iBAAiB,IACrC,YAAY,CAAC,IACb,YAAY,YAAY,SAAS,CAAC;AAExC,UAAM,cAAc,OAAO,QAAQ,QAAQ;AAC3C,UAAM,QAAQ,KAAK,IAAI,aAAa,YAAY;AAChD,UAAM,MAAM,KAAK,IAAI,aAAa,YAAY;AAE9C,WAAO,OAAO,MAAM,OAAO,MAAM,CAAC;AAAA,EACpC;AAEA,SAAO,CAAC,SAAS;AACnB;;;AC9CA,OAAOC;AAAA,EACL,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OACK;AAuCP,IAAM,uBAAuB,CAAC,UAC5B,gBAAAC,QAAA,cAAC,kBAAgB,GAAG,OAAO;AAGtB,IAAM,eAAeC;AAAA,EAC1BC,aAAW,SAASC,cAClB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA,OAAAC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,WAAW;AAAA,IACX,GAAG;AAAA,EACL,GACA,KACA;AACA,UAAM,CAAC,YAAY,aAAa,IAAIC,WAAS,KAAK;AAElD,IAAAC,YAAU,MAAM;AACd,oBAAc,KAAK;AAAA,IACrB,GAAG,CAAC,KAAK,CAAC;AAEV,UAAM,CAAC,iBAAiB,UAAU,IAAID,WAAS,KAAK;AACpD,UAAM,UAAU,eAAe;AAC/B,UAAM,WAAWE,SAAyB,IAAI;AAC9C,UAAM,aAAaA,SAAwC,IAAI;AAE/D,UAAM,iBAAiBA,SAAO,KAAK;AAEnC,UAAM,gBAAgBC;AAAA,MACpB,CAAC,UAAiD;AAChD,YAAI,MAAM,QAAQ,UAAU;AAC1B,wBAAc,KAAK;AACnB,yBAAe,UAAU;AAAA,QAC3B;AAGA,YAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,UAAU;AACnD,mBAAS,SAAS,KAAK;AAAA,QACzB;AAEA,YAAI,MAAM,QAAQ,UAAU;AAC1B,qBAAW,SAAS,MAAM;AAAA,QAC5B;AAGA,YAAI,MAAM,QAAQ,OAAO;AACvB;AAAA,QACF;AAEA,cAAM,gBAAgB;AAAA,MACxB;AAAA,MACA,CAAC,KAAK;AAAA,IACR;AAEA,IAAAC,qBAAoB,KAAK,OAAO;AAAA,MAC9B,cAAc,MAAM;AAClB,mBAAW,IAAI;AAAA,MACjB;AAAA,IACF,EAAE;AAEF,aAAS,aAAa;AACpB,eAAS,SAAS,MAAM;AACxB,eAAS,SAAS,kBAAkB,GAAG,SAAS,QAAQ,MAAM,MAAM;AAAA,IACtE;AAEA,IAAAH,YAAU,MAAM;AACd,UAAI,YAAa;AACjB,UAAI,SAAS;AAIX,mBAAW,YAAY,CAAC;AAAA,MAC1B;AAAA,IACF,GAAG,CAAC,SAAS,WAAW,CAAC;AAEzB,UAAM,eAAe,cAAc,eAAe;AAElD,UAAM,UAAU,SAAS;AAAA,MACvB,UAAU;AAAA,MACV,SAAS,MAAM,WAAW,IAAI;AAAA,MAC9B,KAAK;AAAA,MACL;AAAA,MACA,WAAW,CAAC,MAA2B;AACrC,YAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,qBAAW,IAAI;AAAA,QACjB;AAAA,MACF;AAAA,MACA,OAAO;AAAA,MACP,WAAW;AAAA,IACb,CAAC;AAED,UAAM,QACJ,gBAAAN,QAAA,cAAC,SAAI,WAAU,yCACb,gBAAAA,QAAA,cAACU,YAAW,MAAX,EAAgB,eAAe,cAC9B,gBAAAV,QAAA;AAAA,MAACU,YAAW;AAAA,MAAX;AAAA,QACC,KAAK;AAAA,QACL,OAAO;AAAA,UACL,YAAY;AAAA;AAAA,UACZ,GAAG;AAAA,QACL;AAAA,QACA,WAAW;AAAA,QACV,GAAG;AAAA,QACJ,OAAO;AAAA,QACP;AAAA,QACA,WAAW;AAAA,QACX,QAAQ,MAAM;AACZ,qBAAW,KAAK;AAEhB,cAAI,eAAe,SAAS;AAC1B,2BAAe,UAAU;AACzB;AAAA,UACF;AAEA,qBAAW,UAAU;AACrB,mBAAS;AAAA,QACX;AAAA,QACC,GAAI,WACD;AAAA,UACE,UAAU,CAACC,WAAU;AACnB,0BAAcA,MAAK;AACnB,uBAAWA,MAAK;AAAA,UAClB;AAAA,QACF,IACA;AAAA,UACE,UAAU,CAACA,WAAU;AACnB,0BAAcA,MAAK;AACnB,uBAAWA,MAAK;AAChB,uBAAW,KAAK;AAAA,UAClB;AAAA,UACA,UAAU,CAACA,WAAU;AACnB,0BAAcA,MAAK;AAAA,UACrB;AAAA,QACF;AAAA;AAAA,IACN,CACF,CACF;AAGF,WACE,gBAAAX,QAAA,cAAC,SAAI,WAAW,GAAG,iBAAiB,SAAS,GAAG,OAAOI,UACpD,SACA,WAAW,CAAC,YAAY,KAC3B;AAAA,EAEJ,CAAC;AACH;;;AC1MA,OAAOQ;AAAA,EACL,iBAAAC;AAAA,EAGA,cAAAC;AAAA,EACA,QAAAC;AAAA,EAEA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,OACK;;;ACZP,SAAS,wBAAAC,6BAA4B;AAErC,YAAY,sBAAsB;AAClC,OAAOC,WAAoB,eAAAC,eAAa,WAAAC,iBAAe;AAuBvD,IAAMC,cAAa;AAAA,EACjB,WAA4B;AAAA,EAC5B,UAAUC,QAAM;AAAA,EAChB,MAAuB;AAAA,EACvB,cAA+B;AAAA,EAC/B,eAAgC;AAAA,EAChC,YAA6B;AAAA,EAC7B,YAA6B;AAAA,EAC7B,KAAsB;AAAA,EACtB,QAAyB;AAC3B;AAcA,SAAS,gBAAkC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiB;AACf,QAAM,SAASC;AAAA,IACb,MACE,gCAAgC,QAC5B,CAAC,IACD,iCAAiC,OAAO,QAAQ;AAAA,IACtD,CAAC,OAAO,UAAU,2BAA2B;AAAA,EAC/C;AAEA,QAAM,gBAAgB,iBAAiB;AAEvC,EAAAC,sBAAqB,MAAM;AAM3B,QAAM,gBAAgBC,cAAY,CAAC,UAA8B;AAC/D,UAAM,eAAe;AAAA,EACvB,GAAG,CAAC,CAAC;AAEL,QAAM,mBAAmBA;AAAA,IACvB,CAAC,UAAa;AACZ,UAAI,CAAC,MAAO;AAEZ,eAAS,KAAK;AAAA,IAChB;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,SACE,gBAAAH,QAAA,cAAkB,uBAAjB,EAAsB,gBACrB,gBAAAA,QAAA,cAAkB,0BAAjB,EAAyB,SAAO,MAAC,iBAC/B,QACH,GACA,gBAAAA,QAAA,cAAkB,yBAAjB,MACC,gBAAAA,QAAA;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACE,GAAG,iBAAiB,aAAa;AAAA,MAClC,WAAW,OAAO;AAAA;AAAA,IAElB,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,YAAYD;AAAA,QACZ,UAAU;AAAA;AAAA,IACZ;AAAA,EACF,CACF,CACF;AAEJ;AAEO,IAAM,cAAc,YAAY,eAAe;;;AC3GtD,YAAY,qBAAqB;AACjC,YAAYK,aAAW;AAQhB,IAAM,aAAmB,aAAK,SAASC,YAAW,EAAE,SAAS,GAAU;AAC5E,QAAM,CAAC,kBAAkB,mBAAmB,IACpC,iBAAgC,IAAI;AAE5C,SACE,sCAAC,SAAI,WAAU,oBACb,sCAAiB,sBAAhB,EAAqB,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO,KAC3D;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,WAAU;AAAA,MACV,KAAW;AAAA,QACT,CAAC,QAA+B,oBAAoB,GAAG;AAAA,QACvD,CAAC;AAAA,MACH;AAAA;AAAA,IAEC,OAAO,aAAa,aACjB,mBACE,SAAS,gBAAgB,IACzB,OACF;AAAA,EACN,GACA;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACC,aAAY;AAAA,MACZ,WAAU;AAAA;AAAA,IAEV,sCAAiB,uBAAhB,EAAsB,WAAU,uDAAsD;AAAA,EACzF,CACF,CACF;AAEJ,CAAC;;;AFfD,IAAM,YAAY,CAAC;AAAA,EACjB;AAAA,EACA;AACF,MAGM;AACJ,SACE,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,kBACE;AAAA,MACJ;AAAA;AAAA,IAEC;AAAA,EACH;AAEJ;AAEA,IAAM,kBAAkB,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AACJ,SACE,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,kBACE;AAAA,MACJ;AAAA;AAAA,IAEC;AAAA,EACH;AAEJ;AAEA,IAAM,eAAe,CAAC;AAAA,EACpB,OAAO;AAAA,EACP;AACF,MAGM;AACJ,SACE,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,iEAAiE,OAAO,cAAc,iBAAiB;AAAA;AAAA,IAEjH;AAAA,EACH;AAEJ;AAyBA,IAAM,eAAe,kBAAkB,SAASC,cAG9C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,6BAA6B,0BAA0B;AAAA,EACvD,GAAG;AACL,GACA,cACA;AACA,QAAM,EAAE,WAAW,IAAI,SAAS;AAAA,IAC9B;AAAA,EACF,CAAC;AAED,QAAM,EAAE,cAAc,UAAU,SAAS,IAAIC,YAAW,eAAe;AAEvE,QAAM,cAAcC;AAAA,IAClB,CAAC,UAA4B;AAC3B,YAAM,gBAAgB;AACtB,YAAM,eAAe;AAErB,gBAAU,KAAK;AACf,iBAAW,KAAK;AAAA,IAClB;AAAA,IACA,CAAC,SAAS,QAAQ;AAAA,EACpB;AAEA,QAAM,gBAAgBA;AAAA,IACpB,CAAC,UAA+B;AAC9B,kBAAY,KAAK;AACjB,UAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAC9C,cAAM,gBAAgB;AACtB,cAAM,eAAe;AAErB,mBAAW,KAAK;AAAA,MAClB,OAAO;AACL;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,UAAU,SAAS;AAAA,EACtB;AAEA,MAAI,UACF,gBAAAJ,QAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,2BAA2B;AAAA,QAC3B;AAAA,MACF;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACJ,GAAG;AAAA,MACJ,UAAU,WAAW,SAAY;AAAA,MACjC,WAAW;AAAA,MACX,SAAS;AAAA,MACT;AAAA,MACA;AAAA;AAAA,IAEA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,WAAW,0BAA0B;AAAA,QACvC;AAAA,QACA,OAAOE;AAAA;AAAA,MAEN;AAAA,IACH;AAAA,IACC,iBAAiB,WAChB,gBAAAF,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA,cAAC,OAAO,UAAP,EAAgB,MAAM,GAAG,GAC1B,gBAAAA,QAAA,cAAC,iBAAW,SAAS,GAAI,GACzB,gBAAAA,QAAA,cAAC,OAAO,UAAP,EAAgB,MAAM,GAAG,GAC1B,gBAAAA,QAAA,cAAC,uBAAiB,YAAY,GAAI,CACpC;AAAA,IAED,iBAAiB,aAAa,YAAY,SAAS,aAClD,gBAAAA,QAAA,cAAC,SAAI,WAAU,qGACZ,SAAS,gBAAAA,QAAA,cAAC,aAAU,gBAAc,QAAE,KAAM,GAC1C,YACC,gBAAAA,QAAA,cAAC,mBAAgB,gBAAc,QAAE,QAAS,CAE9C;AAAA,IAED,UACC,gBAAAA,QAAA,cAAC,SAAI,WAAU,+FACZ,MACH;AAAA,IAED,WACC,gBAAAA,QAAA,cAAC,SAAI,WAAU,4LACb,gBAAAA,QAAA,cAAC,qBAAkB,SAAS,KAAK,MAAM,IAAI,CAC7C;AAAA,EAEJ;AAGF,MAAI,aAAa,kBAAkB;AACjC,cACE,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,cAAc;AAAA;AAAA,MAEb;AAAA,IACH;AAAA,EAEJ;AAEA,MAAI,iBAAiB,UAAU;AAC7B,cACE,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SACE,gBAAAA,QAAA,cAAC,SAAI,WAAU,2BACb,gBAAAA,QAAA,cAAC,iBAAW,KAAM,GAClB,gBAAAA,QAAA,cAAC,uBAAiB,QAAS,CAC7B;AAAA;AAAA,MAGD;AAAA,IACH;AAAA,EAEJ;AAEA,SAAO;AACT,CAAC;AAUD,IAAM,kBAAkBK,eAAoC;AAAA,EAC1D,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,UAAU;AAAA,EACV,UAAU;AAAA,EACV,KAAK;AACP,CAAC;AAgBD,IAAM,eAAeC,aAAW,SAASC,cACvC;AAAA,EACE,iBAAiB;AAAA,EACjB,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,GAAG;AACL,GACA,cACA;AACA,QAAM,cAAcH;AAAA,IAClB,CAAC,UAA4B;AAC3B,YAAM,gBAAgB;AACtB,YAAM,eAAe;AAErB,gBAAU;AAAA,IACZ;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,QAAM,eAAeI;AAAA,IACnB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,UAAU,UAAU,KAAK,gBAAgB,YAAY;AAAA,EACxD;AAEA,QAAM,kBAAkBA,UAAQ,MAAM;AACpC,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA,aAAa,oBAAoB;AAAA,MACjC;AAAA,IACF;AAEA,WAAO,2BAA2B,CAAC,eAAe,SAAS,GAAG;AAAA,MAC5D,YAAY,CAAC,MAAM;AAAA,IACrB,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,UAAU,CAAC;AAE1B,QAAM,UAAU,gBAAAR,QAAA,cAAC,SAAI,WAAW,GAAG,OAAO,gBAAgB,KAAI,QAAS;AAEvE,SACE,gBAAAA,QAAA,cAAC,gBAAgB,UAAhB,EAAyB,OAAO,gBAC/B,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,WAAW;AAAA,MACV,GAAG;AAAA,MACJ,KAAK;AAAA;AAAA,IAEJ,aAAa,gBAAAA,QAAA,cAAC,kBAAY,OAAQ,IAAgB;AAAA,EACrD,CACF;AAEJ,CAAC;AAED,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,gBAAgB,IAAI,IAAIG,YAAW,eAAe;AAE1D,QAAMM,UAA8B;AAAA,IAClC,qBAAqB,4BAA4B,cAAc;AAAA,IAC/D,KAAK,GAAG,GAAG;AAAA,EACb;AAEA,QAAM,UAAUT,QAAM,SAAS,MAAM,QAAQ,MAAM;AAEnD,SAAO,WAAW,mBAChB,iBAAiB,IAEjB,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW,GAAG,kBAAkB,SAAS;AAAA,MACzC,OAAOS;AAAA;AAAA,IAEN;AAAA,EACH;AAEJ;AAEA,SAAS,sBAAsB,EAAE,MAAM,GAAsB;AAC3D,QAAM,UAAU,MAAM,MAAM,GAAG;AAE/B,SACE,gBAAAT,QAAA,cAAC,SAAI,WAAU,UACb,gBAAAA,QAAA,cAAC,OAAO,UAAP,EAAgB,MAAM,IAAI,GAC1B;AAAA,IACC,QAAQ,IAAI,CAACU,QAAO,UAClB,gBAAAV,QAAA,cAAC,gBAAa,MAAM,UAAU,QAAQ,SAAS,KAC5CU,MACH,CACD;AAAA,IACD,gBAAAV,QAAA,cAAC,oBAAa,KAAG;AAAA,EACnB,CACF;AAEJ;AAEO,IAAU;AAAA,CAAV,CAAUW,cAAV;AACE,EAAMA,UAAA,OAAOC,OAAK,YAAY;AAC9B,EAAMD,UAAA,OAAO,YAAY,YAAY;AACrC,EAAMA,UAAA,UAAUC,OAAK,eAAe;AACpC,EAAMD,UAAA,gBAAgBC,OAAK,qBAAqB;AAAA,GAJxC;;;AHzXV,IAAM,cAAc,CAACC,UAA6B;AAEvD,QAAM,QAMF;AAAA,IACF,KAAK;AAAA,MACH,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,IAAI;AAAA,MACF,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,QAAQ;AAAA,MACN,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,aAAa;AAAA,MACX,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,IAAI;AAAA,MACF,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,EACF;AAEA,SAAO,MAAMA,KAAI;AACnB;AAEA,IAAM,aAAuB,CAAC;AAEvB,IAAM,OAAO;AAAA,EAClB,kBAAkB,SAASC,MACzB,OACA,KACA;AACA,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA,MAGA;AAAA;AAAA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA;AAAA;AAAA,MAGd,MAAAD,QAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA;AAAA;AAAA,MAGb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IAEF,IAAI;AAEJ,UAAM,CAAC,WAAW,YAAY,IAAIE,WAAiB;AACnD,UAAM,CAAC,oBAAoB,aAAa,IAAIA,WAAiB;AAC7D,UAAM,CAAC,gBAAgB,iBAAiB,IAAIA,WAAiB;AAE7D,IAAAC,qBAAoB,KAAK,OAAO;AAAA,MAC9B,UAAU,CAAC,OAAe;AACxB,sBAAc,EAAE;AAAA,MAClB;AAAA,IACF,EAAE;AAEF,UAAM,mBAAmB,iBAAiB;AAC1C,UAAM,aAAa,kBAAkB;AAErC,UAAM,eAAe,CAAC,QAAgB,UAA+B;AACnE,UAAI,CAAC,kBAAmB;AAExB,oBAAc,MAAS;AAEvB,YAAM,iBAAiB;AAAA,QACrB,MAAM,IAAI,KAAK;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,wBAAkB,gBAAgB,KAAK;AAAA,IACzC;AAEA,UAAM,mBAAmB,CAAC,QAAW,eAAkB;AACrD,UAAI,CAAC,iBAAkB;AAEvB,YAAM,gBAAgB,MAAM;AAAA,QAAO,CAAC,SAClC,YAAY,SAAS,MAAM,IAAI,CAAC;AAAA,MAClC;AAEA;AAAA,QACE;AAAA,QACA,cAAc,WAAW,IAAI,CAAC,UAAU,IAAI;AAAA,MAC9C;AAAA,IACF;AAEA,UAAM,oBAAoBC,SAAuB,IAAI;AACrD,UAAM,EAAE,oBAAoB,gBAAgB,IAAI;AAAA,MAC9C;AAAA,MACA;AAAA,IACF;AAEA,UAAM,EAAE,gBAAgB,IAAI,IAAI,YAAYJ,KAAI;AAEhD,WACE,gBAAAK,QAAA;AAAA,MAAC,SAAS;AAAA,MAAT;AAAA,QACC,MAAK;AAAA,QACL,oBAAiB;AAAA,QACjB,wBAAsB;AAAA,QACtB;AAAA,QACA,YAAY,MAAM,SAAS,KAAK;AAAA,QAChC,kBAAkB,GAAG,MAAM,WAAW,KAAK,aAAa;AAAA,QACxD;AAAA,QACA,WAAW;AAAA,UACT,sBAAsB;AAAA,UACtB;AAAA,QACF;AAAA,QACC,GAAG;AAAA,QACJ,KAAK;AAAA;AAAA,MAEJ,MAAM,SAAS,IACd,gBAAAA,QAAA,cAAC,SAAS,SAAT,MACE,MAAM,IAAI,CAAC,SAAS;AACnB,cAAM,KAAK,MAAM,IAAI;AACrB,cAAM,iBAAiB,mBAAmB;AAC1C,cAAM,YACJ,kBAAkB,MAClB,qBAAqB,MACrB;AACF,cAAM,kBAAkB,eAAe,IAAI,KAAK;AAChD,cAAM,aAAa,YAAY,SAAS,EAAE;AAC1C,cAAM,aACJ,mBAAmB,YAAY,eAAe;AAChD,cAAM,oBAAoB,mBAAmB;AAC7C,cAAM,YAAY,kBAAkB;AAAA,UAClC;AAAA,UACA,UAAU;AAAA,UACV,MAAAL;AAAA,QACF,CAAC;AACD,cAAM,eAAe,CAAC,SAAkB;AACtC,4BAAkB,OAAO,KAAK,MAAS;AAEvC,cAAI,QAAQ,CAAC,YAAY;AACvB,yBAAa,EAAE;AAAA,UACjB;AAAA,QACF;AACA,cAAM,UACH,aAAa,eACd,CAAC,eACA,OAAO,iBAAiB,aACrB,aAAa,EAAE,MAAM,UAAU,YAAY,aAAa,CAAC,IACzD,iBAAiB,UACjB,aACE,gBAAAK,QAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,UAAU,CAACC,YAAW,iBAAiBA,SAAQ,IAAI;AAAA,YACnD,UAAU;AAAA,YACV;AAAA;AAAA,QACF;AAGR,eACE,gBAAAD,QAAA;AAAA,UAAC,SAAS;AAAA,UAAT;AAAA,YACC,KAAK;AAAA,YACL;AAAA,YACA,MAAK;AAAA,YACL,iBAAe;AAAA,YACf,cAAY,QAAQ,IAAI;AAAA,YACxB,SAAS;AAAA,YACT,6BAA6B,4BAA4B;AAAA,YACzD,eAAe,CAAC,eAAe;AAC7B,2BAAa,aAAa,KAAK,MAAS;AAAA,YAC1C;AAAA,YACA,OACE,gBAAAA,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,UAAU,aAAa,SAAY;AAAA,gBACnC,OAAO,QAAQ,IAAI;AAAA,gBACnB,SAAS;AAAA,gBACT,aAAa;AAAA,gBACb,UAAU,CAAC,mBAAmB,CAAC;AAAA,gBAC/B,UAAU,CAAC,UAAU;AACnB,6BAAW,MAAM,KAAK;AACtB,gCAAc,MAAS;AAAA,gBACzB;AAAA,gBACA,QAAQ,MAAM;AACZ,gCAAc,MAAS;AAAA,gBACzB;AAAA,gBAEA,eAAc;AAAA;AAAA,cAEb,CAACE,WACA,gBAAAF,QAAA;AAAA,gBAAC;AAAA;AAAA,kBACE,GAAGE;AAAA,kBACJ,WAAW;AAAA,oBACT,aACI,iCACA;AAAA,oBACJ;AAAA,kBACF;AAAA;AAAA,cACF;AAAA,YAEJ;AAAA,YAEF,UACE,gBAAAF,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT,cAAc;AAAA,gBAChB;AAAA;AAAA,cAEC,eAAe,MAAM,UAAU;AAAA,YAClC;AAAA,YAEF,SAAS;AAAA,YACT,UAAU;AAAA,YACV,SAAS,MAAM;AACb,4BAAc,EAAE;AAAA,YAClB;AAAA,YACA,UAAU,CAAC,UAAU;AACnB,2BAAa,IAAI,KAAK;AAAA,YACxB;AAAA,YACA,WAAW,CAAC,UAAU;AACpB,kBAAI,MAAM,QAAQ,SAAS;AACzB,8BAAc,EAAE;AAAA,cAClB;AAAA,YACF;AAAA,YACA,eAAe,MAAM;AACnB,kCAAoB,EAAE;AAAA,YACxB;AAAA,YACA;AAAA,YACA,kBAAkB,CAACC,YAAW,iBAAiBA,SAAQ,IAAI;AAAA,YAC3D;AAAA,YACA,kBAAkB,CAAC,SAAkB;AACnC,kBAAI,QAAQ,CAAC,YAAY;AACvB,6BAAa,EAAE;AAAA,cACjB;AAAA,YACF;AAAA;AAAA,UAGC,aACC,gBAAAD,QAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,cAAc;AAAA,cAChB;AAAA,cACA,UAAU;AAAA;AAAA,YAET;AAAA,UACH;AAAA,QAEJ;AAAA,MAEJ,CAAC,CACH,IAEA,mBAAmB;AAAA,IAEvB;AAAA,EAEJ,CAAC;AACH;;;AM7SA,OAAOG,WAAS,QAAAC,QAAM,uBAAAC,sBAAqB,UAAAC,UAAQ,YAAAC,kBAAgB;;;ACJnE,SAAS,aAAa;AAEtB,SAAS,eAAAC,oBAAmB;AAC5B,OAAOC;AAAA,EACL,YAAAC;AAAA,EACA,iBAAAC;AAAA,EAGA,cAAAC;AAAA,EAEA,kBAAAC;AAAA,EACA,QAAAC;AAAA,EAIA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,OACK;AACP,SAAS,sBAAgD;AACzD,SAAkC,wBAAwB;;;ACxB1D,SAAS,cAAc;AACvB,SAAS,4BAA4B;AAErC,SAAS,2BAA8B,UAA8B;AACnE,QAAM,CAAC,OAAO,GAAG,IAAI,IAAI;AAEzB,SAAO,KAAK;AAAA,IACV,CAAC,QAAQ,YAAY,qBAAqB,QAAQ,OAAO;AAAA,IACzD;AAAA,EACF;AACF;AAEO,SAAS,sBAEX,aAAqB;AACxB,QAAM,aAAa,OAAO,YAAY,IAAI,OAAO,IAAI,EAAE,KAAK,CAAgB;AAE5E,SAAO,OAAO;AAAA,IACZ,WAAW,IAAI,CAAC,cAAc;AAC5B,YAAM,WAAW,YAAY,QAAQ,CAAC,eAAe;AACnD,cAAM,QAAQ,WAAW,SAAS;AAClC,eAAO,QAAQ,CAAC,KAAK,IAAI,CAAC;AAAA,MAC5B,CAAC;AAED,aAAO,CAAC,WAAW,wBAAwB,GAAG,QAAQ,CAAC;AAAA,IACzD,CAAC;AAAA,EACH;AACF;;;AC3BA,SAA2B,oBAAoB;AAC/C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,YAAYC,aAAW;;;ACIvB,OAAOC,aAAW;AA2BX,IAAM,0BACXA,QAAM,cAAkD,IAAI;AAEvD,SAAS,oBACd,SAC6B;AAC7B,QAAM,QAAQA,QAAM,WAAW,OAAO;AAEtC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,6BAA6B;AAC3C,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,QAAM,SAElD,oBAAI,IAAI,CAAC;AAEX,QAAM,eAAeA,QAAM,YAAY,CAAC,SAAyB;AAC/D,uBAAmB,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,CAAC;AAAA,EAC/D,GAAG,CAAC,CAAC;AAEL,QAAM,iBAAiBA,QAAM,YAAY,CAAC,WAAmB;AAC3D,uBAAmB,CAAC,SAAS;AAC3B,YAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,aAAO,OAAO,MAAM;AACpB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,cAAc,gBAAgB,gBAAgB;AACzD;AAIO,IAAM,oBACXA,QAAM,cAA4C,IAAI;AAEjD,SAAS,cACd,SACuB;AACvB,QAAM,QAAQA,QAAM,WAAW,OAAO;AAEtC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AAEA,SAAO;AACT;AAOO,IAAM,iBAAiBA,QAAM,cAAuB,KAAK;;;ACjGhE;AAAA,EAEE;AAAA,EAEA;AAAA,EAGA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAgB,mBAAmB,kBAAkB;AACrD,SAAS,iBAAiB;AAE1B,YAAYC,aAAW;AACvB,SAAS,WAAAC,iBAAe;AACxB,SAAS,gBAAAC,qBAAoB;AAyBtB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,IAChB,yBAAyB;AAAA,IACzB,mBAAmB;AAAA,EACrB;AACF,GAA4B;AAC1B,QAAM,UAAU;AAAA,IACd,UAAU,eAAe;AAAA,MACvB,sBAAsB;AAAA,QACpB,UAAU;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,UAAU,WAAW;AAC3B,QAAM,CAAC,WAAW,YAAY,IAAU,iBAAoB;AAAA,IAC1D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,EACb,CAAC;AAID,QAAM,EAAE,cAAc,gBAAgB,gBAAgB,IACpD,2BAA2B;AAE7B,QAAM,oBAA0B,eAA4B,IAAI;AAEhE,QAAM,kBAAwB;AAAA,IAC5B,CAAC,UAA0B;AAEzB,wBAAkB,UAAU,MAAM;AAGlC,iBAAW,CAAC,QAAQ,IAAI,KAAK,iBAAiB;AAC5C,cAAM,YAAY,KAAK,KAAK,UAAU,CAAC,QAAQ,QAAQ,MAAM,OAAO,EAAE;AAEtE,YAAI,aAAa,GAAG;AAClB,gBAAM,WAAqB;AAAA,YACzB,QAAQ,MAAM,OAAO;AAAA,YACrB;AAAA,YACA,OAAO;AAAA,UACT;AAEA,uBAAa;AAAA,YACX,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,WAAW;AAAA,UACb,CAAC;AACD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,eAAe;AAAA,EAClB;AAEA,QAAM,iBAAuB;AAAA,IAC3B,CAAC,UAAyB;AACxB,YAAM,EAAE,QAAQ,KAAK,IAAI;AAEzB,UAAI,CAAC,kBAAkB,WAAW,CAAC,UAAU,OAAQ;AAErD,YAAM,aAAa,eAAe;AAAA,QAChC,iBAAiB;AAAA,UACf,GAAG,kBAAkB,QAAQ;AAAA,UAC7B,GAAG,kBAAkB,QAAQ;AAAA,QAC/B;AAAA,QACA,OAAO,EAAE,GAAG,MAAM,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE;AAAA,QAC5C;AAAA,QACA;AAAA,QACA,QAAQ,UAAU;AAAA,QAClB;AAAA,MACF,CAAC;AAED,mBAAa;AAAA,QACX,QAAQ,UAAU;AAAA,QAClB,QAAQ,YAAY,UAAU;AAAA,QAC9B,WAAW,YAAY,aAAa;AAAA,MACtC,CAAC;AAAA,IACH;AAAA,IACA,CAAC,iBAAiB,UAAU,MAAM;AAAA,EACpC;AAEA,QAAM,mBAAmB,kBAAkB,UAAU;AAErD,QAAM,gBAAsB;AAAA,IAC1B,CAAC,UAAwB;AACvB,YAAM,EAAE,QAAQ,KAAK,IAAI;AAEzB,UAAI,CAAC,kBAAkB,WAAW,CAAC,UAAU,OAAQ;AAErD,YAAM,aAAa,eAAe;AAAA,QAChC,iBAAiB;AAAA,UACf,GAAG,kBAAkB,QAAQ;AAAA,UAC7B,GAAG,kBAAkB,QAAQ;AAAA,QAC/B;AAAA,QACA,OAAO,EAAE,GAAG,MAAM,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE;AAAA,QAC5C;AAAA,QACA;AAAA,QACA,QAAQ,UAAU;AAAA,QAClB;AAAA,MACF,CAAC;AAED,mBAAa;AAAA,QACX,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,WAAW;AAAA,MACb,CAAC;AACD,wBAAkB,UAAU;AAE5B,UAAI,CAAC,WAAY;AAEjB,YAAM,aAAa,gBAAgB,IAAI,WAAW,OAAO,MAAM;AAC/D,YAAM,aAAa,gBAAgB,IAAI,WAAW,OAAO,MAAM;AAE/D,UAAI,CAAC,cAAc,CAAC,WAAY;AAEhC,YAAM,aAAqC;AAAA,QACzC,aAAa,WAAW,OAAO;AAAA,QAC/B,aAAa,WAAW,OAAO;AAAA,QAC/B,UAAU,WAAW;AAAA,QACrB,cAAc,WAAW,OAAO;AAAA,QAChC,cAAc,WAAW,OAAO;AAAA,MAClC;AAGA,iBAAW,WAAW,UAAU;AAEhC,UAAI,WAAW,OAAO,WAAW,WAAW,OAAO,QAAQ;AACzD,mBAAW,WAAW,UAAU;AAAA,MAClC;AAEA,yBAAmB,UAAU;AAAA,IAC/B;AAAA,IACA,CAAC,iBAAiB,UAAU,QAAQ,gBAAgB;AAAA,EACtD;AAEA,QAAM,eAAkD;AAAA,IACtD,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,cAAc,cAAc;AAAA,EAC/B;AAEA,QAAM,aAAa,UAAU,SACzB,gBAAgB,IAAI,UAAU,OAAO,MAAM,IAC3C;AACJ,QAAM,yBAAsD;AAAA,IAC1D,MAAM;AAAA,IACN,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,qBAAqBC,UAAQ,MAAM;AACvC,WAAO,+BAA+B,eAAe;AAAA,EACvD,GAAG,CAAC,eAAe,CAAC;AAEpB,SACE,sCAAC,eAAe,UAAf,EAAwB,OAAO,QAC9B,sCAAC,gBAAgB,wBAAwB,UAAxC,EAAiD,OAAO,gBACvD;AAAA,IAAC,gBAAgB,kBAAkB;AAAA,IAAlC;AAAA,MACC,OAAO;AAAA;AAAA,IAEP;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA;AAAA,MAEV;AAAA,MACA,WACC,YAAY,iBACZ,UAAU,UACVC;AAAA,QACE,sCAAC,eAAY,eAAe,QACzB,WAAW,cAAc,UAAU,OAAO,MAAM,CACnD;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACJ;AAAA,EACF,CACF,CACF;AAEJ;AAEA,SAAS,aAAa;AACpB,QAAM,CAAC,SAAS,UAAU,IAAU,iBAAS,KAAK;AAElD,EAAM,kBAAU,MAAM;AACpB,eAAW,IAAI;AAAA,EACjB,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;AAEO,SAAS,iBACd,WACA;AACA,SAAO,SAAS,iBAAiB,OAAU;AACzC,UAAM,iBAAuB,mBAAW,cAAc;AAEtD,QAAI,CAAC,gBAAgB;AACnB,aACE,sCAAC,0BACC,sCAAC,aAAW,GAAG,OAAO,CACxB;AAAA,IAEJ;AAEA,WAAO,sCAAC,aAAW,GAAG,OAAO;AAAA,EAC/B;AACF;AAGO,IAAM,iCACX,CAAC,oBACD,CAAC,eAAe;AACd,QAAM,oBAAoB,cAAc,UAAU;AAElD,MAAI,kBAAkB,SAAS,GAAG;AAChC,UAAM,iBAAiB,kBAAkB,OAAO,CAAC,cAAc;AAC7D,iBAAW,UAAU,gBAAgB,KAAK,GAAG;AAC3C,YAAI,UAAU,OAAO,QAAQ;AAC3B,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT,CAAC;AAED,QAAI,eAAe,SAAS,GAAG;AAC7B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,gBAAgB,kBAAkB,GAAG,CAAC;AAC5C,QAAM,iBAAiB,cAAc,UAAU;AAI/C,MAAI,WAAW,sBAAsB,eAAe;AAClD,UAAM,OAAO,gBAAgB,IAAI,cAAc,EAAY;AAE3D,QAAI,MAAM;AACR,YAAM,QAAQ,UAAU,KAAK,MAAM,CAAC;AAEpC,iBAAW,QAAQ,OAAO;AACxB,cAAM,cAAc,KAAK;AAAA,UACvB,CAAC,QAAQ,WAAW,eAAe,IAAI,GAAG;AAAA,QAC5C;AAEA,cAAM,SAAS;AAAA,UACb,GAAG,YAAY,IAAI,CAAC,UAAU;AAAA,YAC5B,GAAG,KAAK;AAAA,YACR,GAAG,KAAK;AAAA,YACR,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA,UACf,EAAE;AAAA,QACJ;AAEA,YAAI,kBAAkB,QAAQ,WAAW,kBAAkB,GAAG;AAC5D,iBAAO,eAAe;AAAA,YAAO,CAAC,WAC5B,KAAK,KAAK,CAAC,OAAO,OAAO,OAAO,EAAE;AAAA,UACpC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,SAAO;AACT;AAEF,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAac;AACZ,MAAI,CAAC,QAAQ,OAAO,OAAO,KAAK,GAAI;AAGpC,MAAI,eAA8B;AAClC,MAAI,cAAsB;AAE1B,aAAW,CAAC,QAAQ,IAAI,KAAK,iBAAiB;AAC5C,UAAM,YAAY,KAAK,KAAK,UAAU,CAAC,QAAQ,QAAQ,KAAK,EAAE;AAE9D,QAAI,aAAa,GAAG;AAClB,qBAAe;AACf,oBAAc;AACd;AAAA,IACF;AAGA,QAAI,KAAK,OAAO,QAAQ;AACtB,qBAAe;AACf,oBAAc,KAAK,KAAK;AACxB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aACJ,iBAAiB,OAAO,gBAAgB,IAAI,YAAY,IAAI;AAC9D,QAAM,aAAa,gBAAgB,IAAI,OAAO,MAAM;AAEpD,MACE,CAAC,cACD,CAAC,cACD,CAAC,WAAW,gBAAgB;AAAA,IAC1B,cAAc,WAAW;AAAA,IACzB,cAAc,WAAW;AAAA,EAC3B,CAAC,GACD;AACA;AAAA,EACF;AAGA,MAAI,KAAK,OAAO,WAAW,IAAI;AAC7B,UAAM,UAAU,WAAW,YAAY;AAAA,MACrC,aAAa,OAAO;AAAA,MACpB,aAAa,KAAK,IAAI,GAAG,WAAW,KAAK,SAAS,CAAC;AAAA;AAAA,MACnD,UAAU;AAAA,MACV,cAAc,WAAW;AAAA,MACzB,cAAc,WAAW;AAAA,IAC3B,CAAC;AAED,QAAI,SAAS;AACX,aAAO;AAAA,QACL;AAAA,QACA,QAAQ;AAAA,UACN,QAAQ,KAAK;AAAA,UACb,QAAQ,WAAW;AAAA,UACnB,OAAO;AAAA,QACT;AAAA,QACA,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,gBAAgB;AAC/B,QAAM,SAAS,gBAAgB;AAC/B,QAAM,WAAW,SAAS,MAAM;AAChC,QAAM,WAAW,SAAS,MAAM;AAChC,QAAM,mBAAmB,EAAE,GAAG,UAAU,GAAG,SAAS;AAEpD,QAAM,YAAY,WAAW,iBAAiB;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,WAAW;AAAA,IACzB,cAAc,WAAW;AAAA,EAC3B,CAAC;AAED,MAAI,WAAW;AACb,WAAO;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,QACN,QAAQ,KAAK;AAAA,QACb,QAAQ,WAAW;AAAA,QACnB,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AC5aA,YAAYC,aAAW;AAsChB,IAAM,2BAA2B,CACtC,OACA,aACW;AACX,SAAO,aAAa,UAAU,QAAQ,QAAQ;AAChD;AAEO,IAAM,qBAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,MAAI,aAAa,SAAU,QAAO;AAElC,QAAM,aAAa,yBAAyB,aAAa,QAAQ;AAEjE,MAAI,gBAAgB,cAAc,cAAc,MAAM,YAAY;AAChE,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAYO,IAAM,sBACL,sBAAwC;AAAA,EAC5C,MAAM,CAAC;AAAA,EACP,aAAa;AAAA,EACb,MAAM;AAAA,EACN,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,EACvB,mBAAmB,MAAM;AAAA,EAAC;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,QAAQ;AACV,CAAC;AAcI,SAAS,sBAAsB;AAAA,EACpC,aAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkE;AAChE,QAAM,cAAc,KAAK,UAAU,CAAC,OAAO,OAAO,QAAQ;AAC1D,QAAM,YAAY,KAAK,UAAU,CAAC,OAAO,OAAO,MAAM;AAEtD,MAAI,cAAc,GAAI,QAAO;AAC7B,MAAI,gBAAgB,MAAM,iBAAiB,aAAc,QAAO;AAEhE,QAAM,oBAAoBA,aAAY;AAAA,IACpC,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV;AAAA,IACA;AAAA,EACF,CAAC;AAGD,MACE,yBAAyB,cAAc,aAAa,WAAW,KAC/D,mBACA;AACA,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAGA,QAAM,eAAeA,aAAY;AAAA,IAC/B,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,eACH;AAAA;AAAA,IAEA,oBACE,WACA;AAAA;AACR;AAEA,SAAS,yBACP,cACA,aACA,aACS;AACT,SACE,eAAe,eAAe,cAAc,KAC5C,eAAe,eAAgB,cAAc,IAAK;AAEtD;AAEA,SAAS,kBACP,cACA,aACA,aACmB;AACnB,MAAI,cAAc,eAAe,cAAc,EAAG,QAAO;AACzD,SAAO;AACT;AAEO,IAAM,uBAAuB;AAE7B,SAAS,kBAAkB,QAAgB,QAA0B;AAC1E,SAAO,GAAG,MAAM,GAAG,oBAAoB,GAAG,MAAM;AAClD;AAEO,SAAS,iBAAiB,KAG/B;AACA,QAAM,CAAC,QAAQ,MAAM,IAAI,IAAI,MAAM,oBAAoB;AACvD,SAAO,EAAE,QAAQ,OAAO;AAC1B;;;AH3IA,IAAMC,uBAA4B,sBAAwC;AAAA,EACxE,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,0BAA0B;AAAA,EAC1B,mBAAmB;AACrB,CAAC;AAGD,SAAS,yBAAyB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAAC;AAAA,EACA;AACF,GAMqC;AACnC,QAAM,EAAE,kBAAkB,IAAU,mBAAWD,oBAAmB;AAClE,QAAM,aAAa,cAAc,iBAAiB;AAClD,QAAM,EAAE,QAAQ,OAAO,IAAI;AAE3B,MAAI,CAAC,UAAU,CAAC,OAAQ;AAExB,MAAI,OAAO,WAAW,UAAU,OAAO,WAAW,QAAQ;AACxD,WAAO,WAAW,aAAa;AAAA,EACjC;AAEA,QAAM,oBACJ,OAAO,UAAU,KAAK,SAAY,2BAA2B,OAAO,KAAK;AAE3E,QAAM,gBACJ,sBAAsB,UAAa,sBAAsB,KACrD,QACAC,aAAY;AAAA,IACV,aAAa,OAAO;AAAA,IACpB,aAAa;AAAA,IACb,UAAU;AAAA,IACV,cAAc,OAAO;AAAA,IACrB,cAAc,OAAO;AAAA,EACvB,CAAC;AAEP,QAAM,oBACJ,OAAO,UAAU,KACb,SACAA,aAAY;AAAA,IACV,aAAa,OAAO;AAAA,IACpB,aAAa,OAAO;AAAA,IACpB,UAAU;AAAA,IACV,cAAc,OAAO;AAAA,IACrB,cAAc,OAAO;AAAA,EACvB,CAAC;AAEP,QAAM,yBAAyB,sBAAsB;AAErD,QAAM,wBACJ,CAAC,qBAAqB,iBAAiB;AAEzC,SAAO,wBAAwB,WAAW;AAC5C;AAgBA,SAAS,aAA2C;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,aAAAA,cAAa,QAAQ,yBAAyB,IAC9C,mBAAWD,oBAAmB;AAEtC,QAAM,cAAc,kBAAkB,QAAQ,EAAE;AAEhD,QAAM,EAAE,YAAY,WAAW,YAAY,YAAY,MAAM,IAAI,YAAY;AAAA,IAC3E,IAAI;AAAA,IACJ;AAAA,EACF,CAAC;AAED,QAAM,MAAY;AAAA,IAChB,CAAC,SAA0B,WAAW,IAAI;AAAA,IAC1C,CAAC,UAAU;AAAA,EACb;AAEA,QAAM,uBAAuB,yBAAyB;AAAA,IACpD;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,aAAAC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAAA,IACd;AAAA,IACA,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,IACA,OAAO;AAAA,MACL,SAAS,aAAa,MAAM;AAAA,IAC9B;AAAA,EACF,CAAC;AACH;AAEA,SAAS,cAAc;AAAA,EACrB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAAA,eAAc;AAAA,EACd,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAc;AACZ,QAAM,YAAkB,cAAM;AAC9B,QAAM,KAAK,UAAU;AACrB,QAAM,OAAa,gBAAQ,MAAM;AAC/B,WAAO,SAAS,IAAI,CAAC,QAAQ,kBAAkB,IAAI,GAAG,CAAC;AAAA,EACzD,GAAG,CAAC,UAAU,EAAE,CAAC;AAEjB,QAAM,EAAE,cAAc,eAAe,IAAI;AAAA,IACvC,iBAAiB,2BAA2B;AAAA,EAC9C;AAEA,QAAM,EAAE,YAAY,gBAAgB,IAAI,aAAa;AAAA,IACnD;AAAA,EACF,CAAC;AAGD,EAAM,kBAAU,MAAM;AACpB,UAAM,aAA6B;AAAA,MACjC;AAAA,MACA;AAAA,MACA,YAAY,eAAe,MAAM;AAAA,MAAC;AAAA,MAClC,eAAe,CAACC,QAAO;AACrB,cAAM,QAAQ,KAAK,UAAU,CAAC,QAAQ,QAAQA,GAAE;AAChD,eAAO,gBAAgB,KAAK,KAAK;AAAA,MACnC;AAAA,MACA,iBAAiB,oBAAoB,MAAM;AAAA,MAC3C,aAAAD;AAAA,MACA,kBAAkB,CAAC,eAAe;AAChC,cAAM,EAAE,kBAAkB,QAAQ,MAAM,cAAc,aAAa,IACjE;AAEF,cAAM,cACJ,SAAS,MAAM,iBAAiB,IAAI,iBAAiB;AACvD,cAAM,eAAe,SAAS,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK;AAC/D,cAAM,cAAc,SAAS,MAAM,KAAK,KAAK,QAAQ,KAAK,KAAK;AAE/D,cAAM,uBAAuB,sBAAsB;AAAA,UACjD,aAAAA;AAAA,UACA;AAAA,UACA,UAAU,OAAO;AAAA,UACjB,QAAQ,KAAK;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAED,eAAO;AAAA,MACT;AAAA,IACF;AAEA,iBAAa,UAAU;AAEvB,WAAO,MAAM;AACX,qBAAe,EAAE;AAAA,IACnB;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,eAA+C;AAAA,IACnD,OAAO;AAAA,MACL;AAAA,MACA,aAAAA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA,mBACE,iBAAiB,qBAAqB;AAAA,IAC1C;AAAA,IACA,CAAC,MAAMA,cAAa,IAAI,0BAA0B,eAAe;AAAA,EACnE;AAKA,EAAM,kBAAU,MAAM;AACpB,QAAI,cAAc;AAChB,sBAAgB,aAAa,OAAO;AAAA,IACtC;AAAA,EACF,CAAC;AAED,SACE,sCAACD,qBAAoB,UAApB,EAA6B,OAAO,gBACnC;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP,UACE,SAAS,MACL,gCACA;AAAA;AAAA,IAGL;AAAA,EACH,CACF;AAEJ;AAEA,IAAM,eAAe,iBAAiB,aAAa;AAcnD,IAAM,YAAY,SAASG,WAA+C;AAAA,EACxE;AAAA,EACA;AAAA,EACA,sBAAsB;AAAA,EACtB;AAAA,EACA,GAAG;AACL,GAAmC;AACjC,QAAM,OAAa;AAAA,IACjB,MAAM,MAAM,IAAI,YAAY;AAAA,IAC5B,CAAC,OAAO,YAAY;AAAA,EACtB;AAEA,QAAM,gBAAsB;AAAA,IAC1B,CAAC,UAAkB;AACjB,aAAO;AAAA,QACL,MAAM,KAAK;AAAA,QACX;AAAA,UACE,KAAK,MAAM;AAAA,UAAC;AAAA,UACZ,OAAO,CAAC;AAAA,UACR,UAAU;AAAA,UACV,iBAAiB;AAAA,UACjB,gBAAgB;AAAA,UAChB,wBAAwB;AAAA,UACxB,oBAAoB;AAAA,UACpB,MAAM;AAAA,QACR;AAAA,QACA,EAAE,WAAW,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,IACA,CAAC,YAAY,KAAK;AAAA,EACpB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,eAAe,sBAAsB,gBAAgB;AAAA;AAAA,IAEpD,KAAK,IAAI,CAAC,KAAK,UACd,sCAAC,gBAAuB,KAAU,IAAI,OACnC,CAAC,UAAU;AACV,aAAO,WAAW,MAAM,KAAK,GAAG,OAAO,EAAE,WAAW,MAAM,CAAC;AAAA,IAC7D,CACF,CACD;AAAA,EACH;AAEJ;AAEO,IAAM,WAAW,OAAO,OAAO,WAAW;AAAA,EAC/C,MAAM;AAAA,EACN,MAAM;AACR,CAAC;;;AF9SD,IAAM,aAAa;AACnB,IAAM,8BAA8B;AA+BpC,IAAM,0BAA0BC,gBAA4C;AAAA,EAC1E,aAAa;AACf,CAAC;AACA,wBAAgC,cAAc;AAE/C,IAAM,iBAAiBA,gBAAmC;AAAA,EACxD,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,KAAK;AAAA,EACL,SAAS;AAAA,EACT,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,aAAa;AACf,CAAC;AACA,eAAuB,cAAc;AAMtC,IAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAIE,gBAAAC,QAAA;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AAAA,EAEH;AACH;AAgBF,SAAS,yBAAyB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,WAAWC,SAAgC,IAAI;AAErD,EAAAC,iBAAgB,MAAM;AACpB,UAAM,UAAU,SAAS;AAEzB,QAAI,CAAC,WAAW,CAAC,UAAW;AAI5B,YAAQ,MAAM;AAGd,eAAW,MAAM;AACf,cAAQ,OAAO;AAAA,IACjB,GAAG,CAAC;AAAA,EACN,GAAG,CAAC,SAAS,CAAC;AAEd,SACE,gBAAAF,QAAA;AAAA,IAACG,YAAW;AAAA,IAAX;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,8BAA4B;AAAA,MAC5B,WAAW,GAAG,gDAAgD,SAAS;AAAA,MACvE;AAAA;AAAA,EACF;AAEJ;AAMA,IAAM,eAAeC;AAAA,EAmBnB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAC;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA;AAAA,IACpB;AAAA,IACA,cAAc;AAAA,IACd,wBAAwB;AAAA,IACxB,iBAAiB;AAAA,IACjB,GAAG;AAAA,EACL,GACA,QACG;AACH,WACE,gBAAAL,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,cAAY;AAAA,QACZ,wBAAsB;AAAA,QACtB,iBAAe,gBAAgB;AAAA,QAC/B,WAAW;AAAA,UACT,oBAAoB,0BAA0B,UAC1C,uEACA;AAAA,UACJ,CAAC,oBACC,aACA;AAAA,UACF,CAAC,oBAAoB,aAAa;AAAA,UAClC,aAAa,mBAAmB;AAAA,UAChC,oBAAoB;AAAA,UACpB;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL,KAAK;AAAA,UACL,GAAI,aAAa,UAAU;AAAA,YACzB,YAAY,YAAY,QAAQ;AAAA,YAChC,cAAc,YAAY,QAAQ;AAAA,YAClC,eAAe,YAAY,QAAQ;AAAA,YACnC,aAAa,YAAY,QAAQ;AAAA,YACjC,cAAc,YAAY,QAAQ;AAAA,YAClC,YAAY,YAAY,QAAQ;AAAA,YAChC,aAAa,YAAY,QAAQ;AAAA,YACjC,WAAW,YAAY,QAAQ;AAAA,YAC/B,cAAc,YAAY,QAAQ;AAAA,UACpC;AAAA,UACA,GAAI,aACF,CAAC,oBAAoB;AAAA,YACnB,iBACE,iBAAiB,YACb,QAAQ,OAAO,4BAA4B,IAC3C,QAAQ,OAAO,YAAY;AAAA,UACnC;AAAA,UACF,GAAI,aACF,CAAC,qBACA,sBAAsB,YACrB,sBAAsB,WAAW;AAAA,YACjC,sBAAsB;AAAA,YACtB,qBAAqB;AAAA,UACvB;AAAA,UACF,GAAI,aACF,CAAC,qBACA,sBAAsB,YACrB,sBAAsB,YAAY;AAAA,YAClC,yBAAyB;AAAA,YACzB,wBAAwB;AAAA,UAC1B;AAAA,UACF,GAAI,YACF,CAAC,aAAa;AAAA,YACZ,YAAY,QAAQ,OAAO;AAAA,UAC7B;AAAA,UACF,GAAI,qBAAqB;AAAA,YACvB,YAAY;AAAA,cACV,iBAAiB,YACb,iBAAiB,cACf,QAAQ,OAAO,iBACf,QAAQ,OAAO,6BACjB,QAAQ,OAAO;AAAA,YACrB;AAAA,UACF;AAAA,UACA,GAAI,YAAY;AAAA,YACd,cAAc,aAAa,QAAQ,OAAO,aAAa;AAAA,UACzD;AAAA,UACA,GAAI,oBAAoB;AAAA,YACtB,iBAAiB;AAAA,YACjB,WAAW;AAAA,cACT,iBAAiB;AAAA,YACnB;AAAA,YACA,YAAY;AAAA,cACV,iBAAiB;AAAA,YACnB;AAAA,UACF;AAAA,UACA,GAAGK;AAAA,QACL;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,IAAM,+BAA+BD;AAAA,EASnC,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAC;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,WACE,gBAAAL,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACC,GAAG;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,cAAc;AAAA,UACd,eAAe;AAAA,UACf,GAAI,0BAA0B,WAC1B;AAAA,YACE,OAAO;AAAA,YACP,WAAW,aAAa,QAAQ,OAAO,iBAAiB,eACtD,iBAAiB,cACb,QAAQ,OAAO,YACf,QAAQ,OAAO,WACrB;AAAA,UACF,IACA;AAAA,YACE,KACE,0BAA0B,UACtB,EAAE,IAAI,OAAO,KACb;AAAA,YACN,QACE,0BAA0B,UACtB,EAAE,IAAI,OAAO,KACb;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,iBACE,iBAAiB,cACb,QAAQ,OAAO,YACf,QAAQ,OAAO;AAAA,YACrB,QAAQ;AAAA,YACR,WAAW;AAAA,UACb;AAAA,UACJ,GAAGK;AAAA,QACL;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AA8CA,IAAM,cAAc,kBAAkB,SAASC,aAG7C;AAAA,EACE;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAAD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACA,cACA;AACA,UAAQ,KAAK,IAAI,GAAG,KAAK;AAEzB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL;AAAA,EACF,IAAIE,aAAW,cAAc;AAC7B,QAAM,EAAE,WAAW,IAAI,SAAS;AAAA,IAC9B;AAAA,EACF,CAAC;AACD,QAAM,EAAE,aAAa,cAAc,IAAIA,aAAW,uBAAuB;AAEzE,QAAM,cAAcC;AAAA,IAClB,CAAC,UAA4B;AAI3B,YAAM,eAAe;AAGrB,UAAI,MAAM,WAAW,EAAG;AAExB,gBAAU,KAAK;AAAA,IACjB;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,QAAM,oBAAoBA;AAAA,IACxB,CAAC,UAA4B;AAC3B,YAAM,gBAAgB;AAEtB,sBAAgB;AAAA,IAClB;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEA,QAAM,cAAcC,UAAQ,MAAM;AAChC,WAAO,gBACH;AAAA;AAAA,MAEE,WAAW;AAAA,MACX,OAAO;AAAA,MACP,GAAGJ;AAAA,IACL,IACAA;AAAA,EACN,GAAG,CAAC,eAAeA,MAAK,CAAC;AAEzB,QAAM,gBAAgB,CACpB;AAAA,IACE,sBAAsB;AAAA,IACtB,GAAG;AAAA,EACL,GAGA,QACG;AACH,UAAM,YAAY;AAClB,UAAM,uBACJ,4BAA4B;AAE9B,UAAM,UACJ,gBAAAL,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA,kBAAkB;AAAA,QAClB;AAAA,QACA;AAAA,QACA,MAAM,OAAO;AAAA,QACb,kBAAkB;AAAA,QACjB,GAAG;AAAA,QACJ,eAAe;AAAA,QACf,aAAa,cAAc;AAAA,QAC3B,WAAW;AAAA,QACX,UAAU;AAAA,QACV,WAAW;AAAA,QACX,UAAU;AAAA,QACV,uBAAuB;AAAA,QACvB,mBAAmB;AAAA,QACnB,mBAAmB,mBAAmB;AAAA,QACtC,iBAAe;AAAA,QACf,UAAU,CAAC,iBAAiB;AAAA,QAC5B;AAAA,QACA,OAAO;AAAA,QACN,GAAI;AAAA,QACJ,GAAG;AAAA,UACF,EAAE,eAAe,YAAY,cAAe;AAAA,UAC5C,EAAE,CAAC,cAAc,GAAG,YAAY;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY,CAAC,CAAC;AAAA;AAAA,MAEb,wBACC,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,cAAc;AAAA,UACd,uBAAuB;AAAA,UACvB,aAAa,QAAQ;AAAA,UACrB,MAAM,WAAW,UAAU,IAAI;AAAA,UAC/B,OACE,OAAO,uBAAuB,aAC1B,mBAAmB;AAAA,YACjB;AAAA,YACA;AAAA,YACA,UAAU;AAAA,UACZ,CAAC,IACD;AAAA;AAAA,MAER;AAAA,MAED,QAAQ,KAAK,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,QAAQ,aAAa;AAAA,MAC3D;AAAA,IACH;AAGF,QAAI,aAAa,kBAAkB;AACjC,aACE,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP,UAAU;AAAA,UACV,cAAc;AAAA;AAAA,QAEb;AAAA,MACH;AAAA,IAEJ;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,IAAI;AAClB,WACE,gBAAAA,QAAA,cAAC,SAAS,MAAT,EAA2B,IAAQ,UAAU,qBAAqB,SAChE,CAAC,EAAE,KAAK,aAAa,GAAG,cAAc,MACrC;AAAA,MACE;AAAA,MACAU,aAAY,aAAa,YAAY;AAAA,IACvC,CAEJ;AAAA,EAEJ;AAEA,SAAO,cAAc,CAAC,GAAU,YAAY;AAC9C,CAAC;AAMD,IAAM,oBAAoBX;AAAA,EACxB,MAAM;AACR;AACC,kBAA0B,cAAc;AAEzC,IAAM,qBAAqBY,OAAK,SAASC,oBAAmB;AAAA,EAC1D;AAAA,EACA,OAAAP;AACF,GAA4B;AAC1B,QAAM,aAAaE,aAAW,iBAAiB;AAE/C,SACE,gBAAAP,QAAA,cAAC,SAAI,KAAK,OAAO,OAAOK,UACrB,WAAW,KAAK,CACnB;AAEJ,CAAC;AAmBD,IAAM,uBAAuB,kBAAkB,SAASQ,sBACtD;AAAA,EACE,MAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACA,KACA;AACA,QAAM,UAAUb,SAAmC,IAAI;AAEvD,EAAAc,qBAAoB,KAAK,OAAO;AAAA,IAC9B,cAAc,OAAO;AACnB,cAAQ,SAAS,aAAa,KAAK;AAAA,IACrC;AAAA,EACF,EAAE;AAEF,EAAAb,iBAAgB,MAAM;AACpB,YAAQ,SAAS,gBAAgB,CAAC;AAAA,EACpC,GAAG;AAAA;AAAA;AAAA,IAGD;AAAA,EACF,CAAC;AAKD,QAAM,YAAYO;AAAA,IAChB,OAAsB;AAAA,MACpB,WAAW;AAAA,MACX,WAAW;AAAA,MACX,UAAU;AAAA,IACZ;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SACE,gBAAAT,QAAA,cAAC,kBAAkB,UAAlB,EAA2B,OAAO,cACjC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,OAAOS,UAAQ,OAAO,EAAE,MAAM,WAAW,IAAI,CAAC,CAAC;AAAA;AAAA,IAE9CD;AAAA,MACC,CAAC;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MACF,MAOE,gBAAAR,QAAA,cAAC,SAAI,KAAK,iBACR,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UAEL,KAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAU,CAAC,EAAE,aAAa,MAAgC;AACxD,0BAAc,EAAE,WAAW,aAAa,CAAC;AAAA,UAC3C;AAAA,UACA,qBAAqB;AAAA,UACrB,OAAOc,MAAK;AAAA,UACZ,QAAQA,MAAK;AAAA,UACb,WAAW,MAAM;AAAA,UACjB,UAAU;AAAA,UACV,mBAAmB;AAAA;AAAA,QAElB;AAAA,MACH,CACF;AAAA,MAEF;AAAA,QACE;AAAA,QACA;AAAA,QACAA,MAAK;AAAA,QACLA,MAAK;AAAA,QACL,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF,CACF;AAEJ,CAAC;AAED,IAAM,kBAAkBH;AAAA,EACtB;AACF;AA+DA,IAAM,oBAAoB,kBAAkB,SAASK,mBACnD;AAAA,EACE;AAAA,EACA;AAAA,EACA,OAAAX;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB;AAAA,EACA,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV;AAAA,EACA,cAAc;AAAA,EACd,aAAAY;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACA,cACA;AACA,QAAM,cAAcT;AAAA,IAClB,CAAC,UAA4B;AAC3B,UACE,MAAM,kBAAkB,eACxB,MAAM,OAAO,UAAU,SAAS,kBAAkB;AAElD;AAIF,UAAI,CAAC,MAAM,mBAAmB,GAAG;AAC/B,kBAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,QAAM,cAAcA;AAAA,IAClB,CAAC,UAAkB,WAAW,KAAK,KAAK,GAAG,OAAO,EAAE,eAAe,MAAM,CAAC;AAAA,IAC1E,CAAC,MAAM,UAAU;AAAA,EACnB;AAGA,QAAM,sBAAsBC;AAAA,IAC1B,OAA4B;AAAA,MAC1B;AAAA,MACA,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,IACnB;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,sBAAsBD;AAAA,IAC1B,CAAC,MAA+C;AAC9C,UAAI,YAAY,UAAU,YAAY;AACpC,eAAO;AAET,YAAM,UAAU,YAAY,CAAC;AAE7B,UAAI,CAACU,gBAAe,OAAO,EAAG;AAE9B,YAAM,YAAY,IAAI,KAAK,KAAK,YAAY,IAAI,CAAC;AACjD,YAAM,YAAY,IAAI,IAAI,KAAK,UAAU,YAAY,IAAI,CAAC;AAE1D,YAAM,OAAiCA,gBAAe,SAAS,IAC3D,YACA;AACJ,YAAM,OAAiCA,gBAAe,SAAS,IAC3D,YACA;AAEJ,YAAM,eAAe,CAAC;AACtB,YAAM,kBACJ,CAAC,QACD,QAAQ,MAAM,mBACb,QAAQ,KAAK,MAAM;AAEtB,UAAI;AAEJ,UAAI,gBAAgB,iBAAiB;AACnC,qBAAa;AAAA,MACf,WAAW,iBAAiB;AAC1B,qBAAa;AAAA,MACf,WAAW,cAAc;AACvB,qBAAa;AAAA,MACf,OAAO;AACL,qBAAa;AAAA,MACf;AAEA,UAAI,mBAAoC;AAExC,UAAI,QAAQ,MAAM,UAAU;AAC1B,cAAM,eACJ,QAAQ,CAAC,KAAK,MAAM,mBAAmB,KAAK,MAAM;AACpD,cAAM,eACJ,QAAQ,CAAC,KAAK,MAAM,mBAAmB,KAAK,MAAM;AAEpD,YAAI,gBAAgB,cAAc;AAChC,6BAAmB;AAAA,QACrB,WAAW,gBAAgB,CAAC,cAAc;AACxC,6BAAmB;AAAA,QACrB,WAAW,CAAC,gBAAgB,cAAc;AACxC,6BAAmB;AAAA,QACrB;AAAA,MACF;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB,QAAQ,MAAM;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,8BAA8BT;AAAA,IAClC,OAAqC,EAAE,aAAa,eAAe,KAAK;AAAA,IACxE,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,gBAAgBD;AAAA,IACpB,CAAC,UACC,gBAAAR,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,KAAK,KAC1B,gBAAAA,QAAA,cAAC,wBAAwB,UAAxB,EAAiC,OAAO,+BACtC,WAAW,KAAK,KAAK,GAAG,OAAO,EAAE,eAAe,KAAK,CAAC,CACzD,CACF;AAAA,IAEF,CAAC,6BAA6B,YAAY,IAAI;AAAA,EAChD;AAEA,QAAM,qBAAqBQ;AAAA,IACzB,CAAC,UAAkB;AACjB,YAAM,eAAe,oBAAoB,KAAK;AAC9C,YAAM,UAAU,YAAY,KAAK;AAEjC,UAAI,CAAC,gBAAgB,CAACU,gBAAe,OAAO,EAAG,QAAO;AAEtD,aACE,gBAAAlB,QAAA,cAAC,eAAe,UAAf,EAAwB,KAAK,QAAQ,KAAK,OAAO,gBAC/C,OACH;AAAA,IAEJ;AAAA,IACA,CAAC,qBAAqB,WAAW;AAAA,EACnC;AAEA,QAAM,MAAMS,UAAQ,MAAM,KAAK,IAAI,YAAY,GAAG,CAAC,cAAc,IAAI,CAAC;AAEtE,QAAM,eAAe,CAAC,aACpB,WACE,gBAAAT,QAAA;AAAA,IAAC,SAAS;AAAA,IAAT;AAAA,MACC,IAAI;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA,aAAaiB;AAAA,MACb;AAAA,MACA;AAAA;AAAA,IAEC;AAAA,EACH,IAEA;AAGJ,QAAM,iBAAiB,CACrB,aACI,aAAa,gBAAAjB,QAAA,cAAC,kBAAY,QAAS,IAAgB,SAAS,IAAI;AAEtE,QAAM,gBAAgBQ;AAAA,IACpB,CAAC,UAAkB;AACjB,YAAM,QAAQ,oBAAoB,KAAK;AACvC,YAAM,SACJ,OAAO,mBAAmB,MAAM,yBAAyB,UACrD,8BACA;AACN,aAAO;AAAA,IACT;AAAA,IACA,CAAC,mBAAmB;AAAA,EACtB;AAEA,QAAM,SAASA;AAAA,IACb,CAAC,UAAkB,aAAa,KAAK,KAAK,GAAG,KAAK;AAAA,IAClD,CAAC,MAAM,YAAY;AAAA,EACrB;AAEA,QAAM,uBAAuBC,UAAQ,OAAO,EAAE,YAAY,IAAI,CAAC,WAAW,CAAC;AAC3E,QAAM,WAAWA,UAAQ,OAAO,EAAE,KAAK,GAAG,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;AAE3D,SACE,gBAAAT,QAAA,cAAC,wBAAwB,UAAxB,EAAiC,OAAO,wBACvC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,mBAAiB;AAAA,MACjB,oBAAkB;AAAA,MAClB,wBAAsB;AAAA,MACtB,WAAW;AAAA,QACT;AAAA,UACE,iCAAiC,aAAa,WAAW,WAAW;AAAA,UACpE;AAAA,QACF;AAAA,QACA;AAAA,UACE,YAAY,CAAC,MAAM;AAAA,QACrB;AAAA,MACF;AAAA,MACA,OAAO,EAAE,GAAG,UAAU,GAAGK,OAAM;AAAA,MAC9B,GAAG;AAAA,QACF,CAAC,cAAc,GAAG;AAAA,MACpB;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IAEC,KAAK,WAAW,KAAK,mBAClB,iBAAiB,IACjB;AAAA,MAAe,CAAC,qBACd;AAAA,QACE,cACE,gBAAAL,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,eAAe;AAAA,YACf,OAAO;AAAA,YACP,MAAM;AAAA,YACN;AAAA,YACA,cAAc;AAAA,YACd,YAAY;AAAA;AAAA,QACd,IAEA,MAAM,GAAG,KAAK,MAAM,EAAE,IAAI,kBAAkB;AAAA,MAEhD;AAAA,IACF;AAAA,EACN,CACF;AAEJ,CAAC;AAED,IAAM,eAAe,YAAY,iBAAiB;AAElD,IAAM,wBAAwBI,aAAW,SAASe,uBAChD,EAAE,UAAU,GAAG,KAAK,GACpB,cACA;AACA,QAAM,QAAwBV;AAAA,IAC5B,MACEW,UAAS,QAAQ,QAAQ,EAAE;AAAA,MAAQ,CAAC,UAClCF,gBAAe,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC;AAAA,IACrC;AAAA,IACF,CAAC,QAAQ;AAAA,EACX;AAEA,SACE,gBAAAlB,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACJ,GAAG;AAAA,MACJ,MAAM;AAAA,MACN,cAAcQ;AAAA,QACZ,CAAC,EAAE,IAAI,GAAoC,UACzC,OAAO,QAAQ,WAAW,OAAO,OAAO,OAAO,SAAS;AAAA,QAC1D,CAAC;AAAA,MACH;AAAA,MACA,YAAYA,cAAY,CAAC,SAAuB,MAAM,CAAC,CAAC;AAAA;AAAA,EAC1D;AAEJ,CAAC;AAED,IAAM,mBAAmBG,OAAK,qBAAqB;AAEnD,IAAM,sBAAsB,kBAAkB,SAASU,qBAGrD,OACA,cACA;AACA,MAAI,cAAc,OAAO;AACvB,WAAO,gBAAArB,QAAA,cAAC,oBAAiB,KAAK,cAAe,GAAG,OAAO;AAAA,EACzD,OAAO;AACL,WAAO,gBAAAA,QAAA,cAAC,gBAAa,KAAK,cAAe,GAAG,OAAO;AAAA,EACrD;AACF,CAAC;AAKD,IAAM,iBAAiB,YAAY,mBAAmB;AAE/C,IAAU;AAAA,CAAV,CAAUsB,cAAV;AACE,EAAMA,UAAA,WAAWX,OAAK,gBAAgB;AACtC,EAAMW,UAAA,mBAAmBX,OAAK,wBAAwB;AACtD,EAAMW,UAAA,MAAM,YAAY,WAAW;AACnC,EAAMA,UAAA,OAAO;AACb,EAAMA,UAAA,aAAa;AAMnB,EAAMA,UAAA,gBAAgB;AACtB,EAAMA,UAAA,YAAY;AAClB,EAAMA,UAAA,2BAA2B;AACjC,EAAMA,UAAA,kBAAkB,CAAC;AAAA,IAC9B;AAAA,IACA;AAAA,EACF,MAGM;AACJ,WACE,iBAAiBA,UAAA,YAAY,qBAAqBA,UAAA;AAAA,EAEtD;AACO,EAAMA,UAAA,uBAAuB;AAAA,GAzBrB;;;AMxnCjB,OAAOC,WAAkC,eAAAC,eAAa,cAAAC,oBAAkB;AAqBxE,IAAM,UAAU,kBAAkB,SAASC,SACzC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GACA,cACA;AACA,QAAM,EAAE,WAAW,IAAIC,aAAW,SAAS,UAAU;AAErD,QAAM,qBAAqBC;AAAA,IACzB,CAAC,UAA4B;AAC3B,YAAM,gBAAgB;AACtB,uBAAiB,EAAE,QAAQ,MAAM,OAAO,CAAC;AAAA,IAC3C;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAEA,SACE,gBAAAC,QAAA,cAAC,SAAS,KAAT,EAAa,KAAK,cAAe,GAAG,QAClC,cACC,gBAAAA,QAAA,cAAAA,QAAA,gBACG,aAAa,SACZ,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,IAAI,IAE7B,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,MACX,UAAU,WAAW,qBAAqB;AAAA,MAC1C,SAAS;AAAA,MACT,UAAU,KAAK;AAAA;AAAA,EACjB,GAEF,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,GAAG,CAC9B,GAED,QACC,gBAAAA,QAAA,cAAAA,QAAA,gBACG,WAAW,IAAI,GAChB,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,IAAI,CAC/B,GAED,QACH;AAEJ,CAAC;AAMM,IAAU;AAAA,CAAV,CAAUC,cAAV;AACE,EAAMA,UAAA,OAAO,SAAS;AACtB,EAAMA,UAAA,WAAW,SAAS;AAC1B,EAAMA,UAAA,mBAAmB,SAAS;AAClC,EAAMA,UAAA,MAAM,YAAY,OAAO;AAAA,GAJvB;;;APzDjB,IAAM,kBAAkB;AAAA,EACtB,qBAAqB,QAAQ,OAAO;AACtC;AAEA,IAAMC,cAAuB,CAAC;AAEvB,IAAM,OAAO;AAAA,EAClB,kBAAkB,SAASC,MACzB,OACA,KACA;AACA,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,sBAAsB;AAAA,MACtB,iBAAiB;AAAA,MACjB,MAAAC,QAAO;AAAA,MACP,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,aAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAcH;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAEJ,UAAM,CAAC,mBAAmB,YAAY,IAAII,WAAiB;AAC3D,UAAM,CAAC,oBAAoB,aAAa,IAAIA,WAAiB;AAC7D,UAAM,CAAC,gBAAgB,iBAAiB,IAAIA,WAAiB;AAC7D,UAAM,YAAY,qBAAqB;AACvC,UAAM,aAAa,kBAAkB;AAErC,UAAM,eAAe,CAAC,QAAgB,UAA+B;AACnE,UAAI,CAAC,kBAAmB;AAExB,oBAAc,MAAS;AACvB,YAAM,iBAAiB;AAAA,QACrB,MAAM,IAAI,KAAK;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,wBAAkB,gBAAgB,KAAK;AAAA,IACzC;AAEA,UAAM,mBAAmB,CAAC,QAAW,eAAkB;AACrD,UAAI,CAAC,iBAAkB;AAEvB,YAAM,gBAAgB,MAAM;AAAA,QAAO,CAAC,SAClC,YAAY,SAAS,MAAM,IAAI,CAAC;AAAA,MAClC;AAEA;AAAA,QACE;AAAA,QACA,cAAc,WAAW,IAAI,CAAC,UAAU,IAAI;AAAA,MAC9C;AAAA,IACF;AAEA,UAAM,gBAAgB,aAAa,WAAW;AAE9C,UAAM,oBAAoBC,SAAuB,IAAI;AACrD,UAAM,EAAE,oBAAoB,gBAAgB,IAAI;AAAA,MAC9C;AAAA,MACA;AAAA,IACF;AAEA,IAAAC,qBAAoB,KAAK,OAAO;AAAA,MAC9B,UAAU,CAAC,OAAe;AACxB,sBAAc,EAAE;AAAA,MAClB;AAAA,IACF,EAAE;AAEF,WACE,gBAAAC,QAAA;AAAA,MAAC,cAAc;AAAA,MAAd;AAAA,QACC,SAAQ;AAAA,QACR,WAAW;AAAA,UACT;AAAA,UACA,sBAAsB;AAAA,UACtB,cAAc;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA,MAAM;AAAA,QACN,cAAc;AAAA,QACd,MAAK;AAAA,QACL,oBAAiB;AAAA,QACjB,wBAAsB;AAAA,QACtB;AAAA,QACA;AAAA,QACA,aAAaJ;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACC,GAAG;AAAA,QACJ,YAAY,CACV,MACA,GACA,EAAE,cAAc,MACb;AACH,gBAAM,KAAK,MAAM,IAAI;AACrB,gBAAM,iBAAiB,mBAAmB;AAC1C,gBAAM,aACH,cAAc,MAAM,mBAAmB,CAAC;AAC3C,gBAAM,WAAW,cAAc,IAAI;AACnC,gBAAM,kBAAkB,eAAe,IAAI,KAAK;AAChD,gBAAM,aAAa,YAAY,SAAS,EAAE;AAC1C,gBAAM,aAAa,mBAAmB,YAAY,eAAe;AACjE,gBAAM,oBAAoB,mBAAmB;AAE7C,gBAAM,YAAY,kBAAkB;AAAA,YAClC;AAAA,YACA,UAAU;AAAA,YACV,MAAAD;AAAA,UACF,CAAC;AACD,gBAAM,eAAe,CAAC,SAAkB;AACtC,8BAAkB,OAAO,KAAK,MAAS;AAEvC,gBAAI,QAAQ,CAAC,YAAY;AACvB,2BAAa,EAAE;AAAA,YACjB;AAAA,UACF;AACA,gBAAM,UACH,aAAa,eACd,CAAC,eACA,OAAO,iBAAiB,aACrB,aAAa,EAAE,MAAM,UAAU,YAAY,aAAa,CAAC,IACzD,iBAAiB,UACjB,aACE,gBAAAK,QAAA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,UAAU,CAACC,YAAW,iBAAiBA,SAAQ,IAAI;AAAA,cACnD,UAAU;AAAA,cACV;AAAA,cACA,SAAQ;AAAA,cACR,OAAO;AAAA,gBACL,iBAAiB,aACb,QAAQ,OAAO,6BACf;AAAA,gBACJ,OAAO,aACH,QAAQ,OAAO,uBACf;AAAA,cACN;AAAA;AAAA,UACF;AAGR,gBAAM,MACJ,UACC,mBAAmB,SAAS,eAAe,MAAM,UAAU;AAC9D,gBAAM,QACJ,mBAAmB,WAAW,eAAe,MAAM,UAAU;AAE/D,iBACE,gBAAAD,QAAA;AAAA,YAAC,cAAc;AAAA,YAAd;AAAA,cACC;AAAA,cACA,KAAK;AAAA,cACL,MAAK;AAAA,cACL;AAAA,cACA,wBAAsB;AAAA,cACtB,cAAY,QAAQ,IAAI;AAAA,cACxB,iBAAe;AAAA,cACf,WAAW,GAAG,+BAA+B,MAAML,KAAI,CAAC;AAAA,cACxD,0BACE,4BAA4B,KAAK,WAAW;AAAA,cAE9C,kBAAkB,GAAG,cAAc,iBAAiB;AAAA,cACpD,OAAO;AAAA,cACP,SAAS;AAAA,cACT,UAAU;AAAA,cACV;AAAA,cACA,OAAO,WAAW,IAAI;AAAA,cACtB,eAAe,CAAC,YACd,aAAa,UAAU,KAAK,MAAS;AAAA,cAEvC,SAAS,CAAC,MAA0B;AAClC,6BAAa,IAAI,CAAC;AAClB,8BAAc,EAAE;AAAA,cAClB;AAAA,cACA,eAAe,MAAM;AACnB,oCAAoB,EAAE;AAAA,cACxB;AAAA,cACA,WAAW,CAAC,MAA2B;AACrC,oBAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,IAAK;AACxC,kBAAE,eAAe;AACjB,6BAAa,IAAI,CAAC;AAClB,oBAAI,EAAE,QAAQ,SAAS;AACrB,gCAAc,EAAE;AAAA,gBAClB;AAAA,cACF;AAAA,cACA;AAAA,cACA,kBAAkB,CAACM,YAAW,iBAAiBA,SAAQ,IAAI;AAAA,cAC3D,eAAe,MAAM;AACnB,oBAAI,CAAC,YAAY;AACf,+BAAa,EAAE;AAAA,gBACjB;AAAA,cACF;AAAA,cACA,UAAU;AAAA,cACV,gBAAgB,MAAM;AACpB,oBAAI,CAAC,WAAY;AACjB,8BAAc,MAAM,CAAC,QAAQ;AAAA,cAC/B;AAAA,cACA;AAAA;AAAA,YAEA,gBAAAD,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,GAAG,iCAAiC,UAAUL,KAAI,CAAC;AAAA;AAAA,cAE7D,aACC,gBAAAK,QAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA,kBAAkB,UAAU,iBAAiBL,KAAI;AAAA,oBACjD,cAAc;AAAA,oBACdA,UAAS,UAAU,eAAe;AAAA,kBACpC;AAAA,kBACA,UAAU;AAAA;AAAA,gBAET;AAAA,cACH;AAAA,cAEF,gBAAAK,QAAA,cAAC,SAAI,WAAU,8BACb,gBAAAA,QAAA,cAAC,SAAI,WAAU,uDACb,gBAAAA,QAAA,cAAC,SAAI,WAAU,gCAA+B,UAAU,MACrD,aACC,gBAAAA,QAAA;AAAA,gBAAC,cAAc;AAAA,gBAAd;AAAA,kBACC,OAAO,QAAQ,IAAI;AAAA,kBACnB,aAAa,iBAAiB,IAAI,KAAK;AAAA,kBACvC,WAAW,aAAaL,KAAI;AAAA,kBAC5B,WAAW,CAAC;AAAA,kBACZ,iBAAiB,CAAC,UAAkB;AAClC,+BAAW,MAAM,KAAK;AACtB,kCAAc,MAAS;AAAA,kBACzB;AAAA,kBACA,WAAW,CAAC,MAA2B;AACrC,sBAAE,gBAAgB;AAAA,kBACpB;AAAA;AAAA,cACF,IAEA,gBAAAK,QAAA;AAAA,gBAAC,cAAc;AAAA,gBAAd;AAAA,kBACC,WAAW;AAAA,oBACT,aAAaL,KAAI;AAAA,oBACjB,cAAc;AAAA,kBAChB;AAAA;AAAA,gBAEC,QAAQ,IAAI;AAAA,cACf,CAEJ,GACC,OAAO,mBAAmB,SACzB,gBAAAK,QAAA,cAAC,mBAAgB,UAAU,cACxB,GACH,CAEJ,GACC,SACC,gBAAAA,QAAA,cAAC,mBAAgB,UAAU,cACxB,KACH,CAEJ;AAAA,cACC,OAAO,mBAAmB,WACzB,gBAAAA,QAAA,cAAC,mBAAgB,UAAU,cAAa,GAAI;AAAA,YAEhD;AAAA,UACF;AAAA,QAEJ;AAAA;AAAA,IACF;AAAA,EAEJ,CAAC;AACH;AAEA,IAAM,kBAAkBE,OAAK,SAASC,iBAAgB;AAAA,EACpD;AAAA,EACA;AACF,GAGG;AACD,SACE,gBAAAH,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,2BAA2B,YAAY,cAAc;AAAA,MACnE,UAAU;AAAA;AAAA,IAET;AAAA,EACH;AAEJ,CAAC;AAED,IAAM,QAA4C;AAAA,EAChD,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,OAAO;AAAA,EACP,IAAI;AACN;AAEA,IAAM,mBAAuD;AAAA,EAC3D,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,OAAO;AAAA,EACP,IAAI;AACN;AAEA,IAAM,YAAgD;AAAA,EACpD,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,OAAO;AAAA,EACP,IAAI;AACN;AAEA,IAAM,eAAmD;AAAA,EACvD,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,OAAO;AAAA,EACP,IAAI;AACN;;;AP/QO,IAAM,aAAa,kBAAkB,SAASI,YAGnD,OAA8B,KAAwC;AACtE,QAAM,EAAE,UAAU,GAAG,KAAK,IAAI;AAE9B,SAAO,aAAa,SAClB,gBAAAC,QAAA,cAAC,QAAK,KAAW,GAAG,MAAM,IAE1B,gBAAAA,QAAA,cAAC,QAAK,KAAW,GAAG,MAAM;AAE9B,CAAC;;;Ae/GD,OAAOC,WAAS,cAAAC,oBAAkB;AAK3B,IAAM,qBAAqB;AAAA,EAChC,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAQO,IAAM,cAAcC,aAAW,SAASC,aAC7C,EAAE,OAAO,MAAAC,QAAO,SAAS,SAAS,OAAAC,QAAO,GAAG,MAAM,GAClD,KACA;AACA,QAAM,SAAS,mBAAmBD,KAAI;AAEtC,SACE,gBAAAE,QAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS,UACL,aAAa,QAAQ,OAAO,OAAO,KACnC;AAAA,QACJ,eAAe;AAAA,QACf,WAAW,UACP,mBAAmB,QAAQ,OAAO,UAAU,KAC5C;AAAA,QACJ,GAAGD;AAAA,MACL;AAAA;AAAA,EACF;AAEJ,CAAC;;;AC5CD,YAAY,0BAA0B;AACtC,OAAOE,WAAS,WAAAC,iBAAe;AAyBxB,SAAS,mBAAmB,OAAgC;AACjE,QAAM;AAAA,IACJ;AAAA,IACA,MAAAC,QAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAC;AAAA,EACF,IAAI;AACJ,QAAMC,UAASC,UAAQ,MAAM;AAC3B,WAAO;AAAA,MACL,SAAS;AAAA,MACT,qBAAqB,4BAA4B,mBAAmBH,KAAI,CAAC;AAAA,MACzE,KAAK;AAAA,MACL,GAAGC;AAAA,IACL;AAAA,EACF,GAAG,CAACD,OAAMC,MAAK,CAAC;AAEhB,QAAM,UACJ,gBAAAG,QAAA,cAAC,SAAI,WAAsB,IAAQ,OAAOF,WACvC,QAAQ,IAAI,CAAC,WAAW;AACvB,UAAM,OACJ,gBAAAE,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAO;AAAA,QACP,MAAMJ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QAEA,WAAW,GAAG,WAAW,mBAAmB,gBAAgB;AAAA,QAC5D,SAAS,UAAU;AAAA;AAAA,IACrB;AAEF,WACE,gBAAAI,QAAA;AAAA,MAAsB;AAAA,MAArB;AAAA,QACC,SAAO;AAAA,QACP,OAAO;AAAA,QACP,KAAK;AAAA,QACL,UAAU;AAAA;AAAA,MAET;AAAA,IACH;AAAA,EAEJ,CAAC,CACH;AAEF,SACE,gBAAAA,QAAA;AAAA,IAAsB;AAAA,IAArB;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,WAAU;AAAA,MACV,UAAU;AAAA;AAAA,IAET;AAAA,EACH;AAEJ;;;ACzFA,SAAS,uBAAAC,4BAA2B;AAEpC,OAAOC;AAAA,EAGL,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OACK;;;ACXP,SAAS,SAAS,iBAAiB;AACnC,SAAS,4BAA4B;;;ACDrC,SAAqB,0BAA0B;AAExC,SAAS,WAAW,EAAE,MAAM,MAAM,GAAoC;AAC3E,SAAO,mBAAmB,EAAE,MAAM,MAAM,MAAM,CAAC;AACjD;AAMO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,iBAAiB;AACnB,GAIG;AACD,QAAM,cAAc,MAAM;AAAA,IACxB,CAAC,MAAM,WAAwB;AAAA,MAC7B;AAAA,MACA,GAAG,WAAW,EAAE,MAAM,MAAM,MAAM,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,MAAI,CAAC,MAAO,QAAO;AAEnB,SAAO,YACJ,OAAO,CAAC,EAAE,MAAM,MAAM,QAAQ,cAAc,EAC5C,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACrC;AAQO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AACF,GAGa;AACX,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,OAAO,IAAI,EAAE,CAAC;AAAA,EAC9C;AAEA,QAAM,SAAmB,CAAC;AAC1B,MAAI,iBAAiB;AAErB,QAAM,UAAwB,YAAY;AAAA,IACxC,GAAI,UAAU,cAAc,CAAC;AAAA,IAC7B,GAAI,UAAU,oBAAoB,CAAC;AAAA,EACrC,CAAC;AAED,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,QAAQ,gBAAgB;AAChC,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,MAAM,KAAK,MAAM,gBAAgB,MAAM,KAAK;AAAA,MAC9C,CAAC;AAAA,IACH;AAEA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,MAAM,KAAK,MAAM,MAAM,OAAO,MAAM,GAAG;AAAA,IACzC,CAAC;AAED,qBAAiB,MAAM;AAAA,EACzB;AAEA,MAAI,iBAAiB,KAAK,QAAQ;AAChC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,MAAM,KAAK,MAAM,cAAc;AAAA,IACjC,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,YAAY,QAAoC;AACvD,QAAM,SAAuB,CAAC;AAE9B,QAAM,SAAS,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAE3D,MAAI;AAEJ,aAAWC,UAAS,QAAQ;AAC1B,QAAI,CAAC,SAAS;AACZ,gBAAUA;AAAA,IACZ,WAAWA,OAAM,SAAS,QAAQ,KAAK;AACrC,cAAQ,MAAM,KAAK,IAAI,QAAQ,KAAKA,OAAM,GAAG;AAAA,IAC/C,OAAO;AACL,aAAO,KAAK,OAAO;AACnB,gBAAUA;AAAA,IACZ;AAAA,EACF;AAEA,MAAI,SAAS;AACX,WAAO,KAAK,OAAO;AAAA,EACrB;AAEA,SAAO;AACT;;;ADvFO,IAAM,gBAAN,MAAsC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAA8B,CAAC;AAAA,EAC/B,UAAU;AAAA,EACV;AAAA,EAER,YACE,OACA,cACA,sBACA;AACA,SAAK,QAAQ;AACb,SAAK,qBAAqB;AAAA,MACxB,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAGA,SAAK,SAAS;AACd,SAAK,gBAAgB;AAGrB,SAAK,kBAAkB;AAAA,MACrB;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,eAAe;AAAA,QAEf,eAAe,KAAK,MAAM;AAAA,UAAQ,CAAC,MAAM,UACvC,wBAAwB,IAAI,IACxB,OACA,qBAAqB,IAAI,IACvB;AAAA,YACE,GAAG;AAAA,YACH;AAAA,YACA,OAAO;AAAA,UACT,IACA,CAAC;AAAA,QACT;AAAA,QACA,oBAAoB,KAAK;AAAA,MAC3B;AAAA,IACF;AAGA,QAAI,cAAc;AAEhB,YAAM,WAAW,KAAK,MAAM;AAAA,QAC1B,CAAC,SACC,KAAK,SAAS,UACd,KAAK,OAAO,SAAS,EAAE,YAAY,MAAM,aAAa,YAAY;AAAA,MACtE;AAGA,YAAM,gBAAgB,KAAK,iBAAiB;AAG5C,UAAI,CAAC,YAAY,CAAC,cAAc,UAAU,CAAC,sBAAsB;AAC/D,aAAK,SAAS;AACd,aAAK,gBAAgB;AACrB,aAAK,kBAAkB;AAAA,UACrB;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,eAAe;AAAA,YAEf,eAAe,KAAK,MAAM;AAAA,cAAQ,CAAC,SACjC,qBAAqB,IAAI,IACrB;AAAA,gBACE;AAAA,kBACE,GAAG;AAAA,kBACH,OAAO;AAAA,kBACP,OAAO;AAAA,gBACT;AAAA,cACF,IACA,KAAK,SAAS,kBACZ,CAAC,IAAI,IACL,CAAC;AAAA,YACT;AAAA,YACA,oBAAoB,KAAK;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,YAAY,CAAC,aAAuC;AAClD,SAAK,YAAY,KAAK,QAAQ;AAC9B,WAAO,MAAM;AACX,WAAK,cAAc,KAAK,YAAY,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,IAClE;AAAA,EACF;AAAA,EAEQ,eAAe;AACrB,SAAK;AACL,SAAK,kBAAkB;AACvB,SAAK,YAAY,QAAQ,CAAC,aAAa,SAAS,CAAC;AAAA,EACnD;AAAA,EAEQ,mBAAwC;AAC9C,WAAO,0BAA0B,KAAK,OAAO,KAAK,MAAM;AAAA,EAC1D;AAAA,EAEA,cAAc,MAAgC;AAC5C,QAAI,KAAK,mBAAmB,KAAK,gBAAgB,CAAC,MAAM,KAAK,SAAS;AACpE,aAAO,KAAK,gBAAgB,CAAC;AAAA,IAC/B;AAEA,UAAM,WAAW;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,eAAe,KAAK;AAAA,MACpB,eAAe,KAAK,iBAAiB;AAAA,MACrC,oBAAoB,KAAK;AAAA,IAC3B;AAEA,SAAK,kBAAkB,CAAC,KAAK,SAAS,QAAQ;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAsB;AAC7B,SAAK,QAAQ;AACb,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,UAAU,QAAgB;AACxB,SAAK,SAAS;AACd,UAAM,gBAAgB,KAAK,iBAAiB;AAG5C,UAAM,kBAAkB,cAAc;AAAA,MACpC,CAAC,SACC,qBAAqB,IAAI,KACzB,KAAK,OAAO,SAAS,EAAE,YAAY,EAAE,WAAW,OAAO,YAAY,CAAC;AAAA,IACxE;AAGA,UAAM,uBAAuB,cAAc;AAAA,MAAU,CAAC,SACpD,qBAAqB,IAAI;AAAA,IAC3B;AAEA,SAAK,gBACH,mBAAmB,IAAI,kBAAkB;AAE3C,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,cAAc,WAA0B;AACtC,UAAM,gBAAgB,KAAK,iBAAiB;AAC5C,SAAK,gBAAgB,aAAa;AAAA,MAChC,OAAO;AAAA,MACP,cAAc,KAAK;AAAA,MACnB,WAAW,cAAc,SAAS,SAAS;AAAA,MAC3C,YAAY,CAAC,SAAS,wBAAwB,IAAI;AAAA,IACpD,CAAC;AACD,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,kBACE,MACmC;AACnC,UAAM,eAAe,QAAQ,KAAK,iBAAiB,EAAE,KAAK,aAAa;AACvE,QAAI,gBAAgB,qBAAqB,YAAY,GAAG;AACtD,WAAK,qBAAqB;AAAA,QACxB,QAAQ,aAAa,MAAO,SAAS;AAAA,QACrC,UAAU,aAAa,MAAO,SAAS;AAAA,MACzC;AACA,WAAK,SAAS,aAAa,MAAO,SAAS;AAC3C,WAAK,aAAa;AAClB,aAAO;AAAA,IACT,OAAO;AAGL,WAAK,0BAA0B;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,4BAA4B;AAC1B,SAAK,SAAS,KAAK,mBAAmB;AACtC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAM,YAAY,IAAI;AACpB,SAAK,SAAS;AACd,SAAK,gBAAgB;AACrB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,kBAAiD;AAC/C,UAAM,gBAAgB,KAAK,iBAAiB;AAC5C,WAAO,cAAc,KAAK,aAAa;AAAA,EACzC;AAAA,EAEA,oBAAwC;AACtC,UAAM,eAAe,KAAK,gBAAgB;AAC1C,QAAI,gBAAgB,qBAAqB,YAAY;AACnD,aAAO,aAAa,MAAO,SAAS;AAAA,EACxC;AAAA,EAEA,iBAAiB,OAAe;AAC9B,UAAM,gBAAgB,KAAK,iBAAiB;AAG5C,QAAI,wBAAwB,cAAc,KAAK,CAAC,GAAG;AAEjD,eAAS,IAAI,QAAQ,GAAG,IAAI,cAAc,QAAQ,KAAK;AACrD,YAAI,qBAAqB,cAAc,CAAC,CAAC,GAAG;AAC1C,eAAK,gBAAgB;AACrB,eAAK,aAAa;AAClB;AAAA,QACF;AAAA,MACF;AAEA,eAAS,IAAI,QAAQ,GAAG,KAAK,GAAG,KAAK;AACnC,YAAI,qBAAqB,cAAc,CAAC,CAAC,GAAG;AAC1C,eAAK,gBAAgB;AACrB,eAAK,aAAa;AAClB;AAAA,QACF;AAAA,MACF;AAEA;AAAA,IACF;AAEA,SAAK,gBAAgB;AACrB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,sBAAsB,QAAgB;AACpC,SAAK,qBAAqB;AAAA,MACxB;AAAA,MACA,UAAU;AAAA,IACZ;AACA,SAAK,SAAS;AACd,SAAK,aAAa;AAAA,EACpB;AACF;AAEO,SAAS,0BACd,OACA,OACqB;AACrB,QAAM,WAAW,QAAQ,OAAO,CAAC,IAAI,MAAM,qBAAqB,CAAC,CAAC;AAClE,MAAI,SAA8B,CAAC;AACnC,MAAI,eAAe;AAEnB,QAAM,kBAAkB,CACtB,MACA,WACuB;AAAA,IACvB,GAAG;AAAA,IACH,OAAO,eAAe;AAAA,IACtB,OAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,CACvB,MACA,oBACsB;AACtB,UAAM,WAAW,gBAAgB,KAAK,KAAK;AAC3C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO,eAAe,KAAK;AAAA,IAC7B;AAAA,EACF;AAEA,aAAW,WAAW,UAAU;AAC9B,UAAM,CAAC,gBAAgB,eAAe,IAAI;AAAA,MACxC,QAAQ;AAAA,QACN,CAAC,SACC,KAAK,SAAS,aAAa,KAAK,SAAS;AAAA,MAC7C;AAAA,MACA,CAAC,SAAwC,wBAAwB,IAAI;AAAA,IACvE;AAEA,QAAI;AAEJ,QAAI,CAAC,MAAM,KAAK,GAAG;AAEjB,iBAAW,gBAAgB;AAAA,QAAI,CAAC,MAAM,UACpC,gBAAgB,MAAM,KAAK;AAAA,MAC7B;AAAA,IACF,OAAO;AACL,YAAM,cAAc,YAAY;AAAA,QAC9B,OAAO,gBAAgB,IAAI,CAAC,SAAS,KAAK,MAAM,SAAS,CAAC;AAAA,QAC1D;AAAA,MACF,CAAC;AAED,YAAM,cAAc,IAAI,IAAI,YAAY,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AACjE,YAAM,aAAa,gBAAgB;AAAA,QACjC,CAAC,MAAM,UACL,MAAM,iBAAiB,CAAC,YAAY,IAAI,KAAK,IACzC,CAAC,gBAAgB,MAAM,KAAK,CAAC,IAC7B,CAAC;AAAA,MACT;AAEA,iBAAW,YACR,IAAI,CAAC,SAAS,iBAAiB,MAAM,eAAe,CAAC,EACrD,OAAO,UAAU;AAAA,IACtB;AAGA,QAAI,SAAS,SAAS,KAAK,CAAC,MAAM,KAAK,GAAG;AACxC,YAAM,kBACJ,eAAe,SAAS,KAAK,eAAe,CAAC,GAAG,kBAC5C,eAAe,CAAC,GAAG,kBACnB;AAEN,UAAI,oBAAoB,QAAW;AACjC,mBAAW,SAAS,MAAM,GAAG,eAAe;AAAA,MAC9C;AAEA,aAAO,KAAK,GAAG,gBAAgB,GAAG,QAAQ;AAAA,IAC5C;AAEA,oBAAgB,gBAAgB;AAAA,EAClC;AAEA,SAAO;AACT;AAEO,SAAS,aAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKW;AAET,iBACE,eAAe,IACX,IACA,gBAAgB,MAAM,SACpB,MAAM,SAAS,IACf;AAGR,MAAI,MAAM,MAAM,UAAU,EAAG,QAAO;AAEpC,MAAI,YAAY;AAEhB,KAAG;AAED,QAAI,cAAc,QAAQ;AACxB,mBAAa,YAAY,KAAK,MAAM;AAAA,IACtC,OAAO;AACL,mBAAa,YAAY,IAAI,MAAM,UAAU,MAAM;AAAA,IACrD;AAGA,QAAI,cAAc,aAAc,QAAO;AAAA,EACzC,SAAS,WAAW,MAAM,SAAS,CAAC;AAEpC,SAAO;AACT;AAEO,SAAS,iBAAmC,OAAyB;AAC1E,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;;;AEnYA,SAAS,iBAAiB;AAE1B,OAAOC,aAA6B;AA4B7B,IAAM,eAAe;AAAA,EAC1B,kBAAkB,SAASC,cACzB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAC;AAAA,IACA;AAAA,IACA,eAAe;AAAA,EACjB,GACA,cACA;AACA,WACE,gBAAAC,QAAA;AAAA,MAAC,SAAS;AAAA,MAAT;AAAA,QACC,KAAK;AAAA,QACL,YAAU;AAAA,QACV,cAAc,CAAC,SAA4B;AACzC,cAAI,KAAK,SAAS,gBAAiB,QAAO,KAAK;AAE/C,iBAAO,KAAK;AAAA,QACd;AAAA,QACA,MAAM;AAAA,QACN,aAAa;AAAA,QACb,gBAAe;AAAA,QACf,sBAAqB;AAAA,QACrB,OAAOD;AAAA,QACP,YAAY,CAAC,MAAM,MAAM;AACvB,cAAI,KAAK,SAAS,iBAAiB;AACjC,mBACE,gBAAAC,QAAA,cAAC,SAAS,KAAT,EAAa,KAAK,KAAK,IAAI,iBAAe,QACxC,YACC,gBAAAA,QAAA;AAAA,cAAC,OAAO;AAAA,cAAP;AAAA,gBACC,MACE,iBACA,uBACA;AAAA;AAAA,YAEJ,GAED,KAAK,KACR;AAAA,UAEJ;AAEA,gBAAM,SAAS,cAAc;AAAA,YAC3B,MAAM,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,KAAK;AAAA,YACzD,WAAW;AAAA,UACb,CAAC;AAED,iBACE,gBAAAA,QAAA;AAAA,YAAC,SAAS;AAAA,YAAT;AAAA,cACC,KAAK,KAAK;AAAA,cACV,UAAU,MAAM;AAAA,cAChB,UAAU,KAAK;AAAA,cACf,SAAS,MAAM,CAAC,KAAK,YAAY,aAAa,IAAI;AAAA,cAClD,eAAe,CAAC,YAAY;AAC1B,oBAAI,WAAW,CAAC,KAAK,UAAU;AAC7B,+BAAa,CAAC;AAAA,gBAChB;AAAA,cACF;AAAA;AAAA,YAEA,gBAAAA,QAAA,cAAC,SAAI,WAAU,sCACZ,YAAY,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,uBAAuB,GAC5D,KAAK,UACJ,gBAAAA,QAAA,cAAC,SAAK,GAAG,OAAO,iBACd,gBAAAA,QAAA,cAAC,eAAU,CACb,IACE,WACF,gBAAAA,QAAA;AAAA,cAAC,OAAO;AAAA,cAAP;AAAA,gBACC,MAAM,iBAAiB;AAAA;AAAA,YACzB,IACE,MACH,iBAAiB,UAAU,KAAK,QAC/B,gBAAAA,QAAA,cAAAA,QAAA,gBACG,WAAW,KAAK,IAAI,GACrB,gBAAAA,QAAA,cAAC,OAAO,YAAP,EAAkB,MAAM,GAAG,CAC9B,GAED,OAAO,IAAI,CAAC,OAAO,MAClB,gBAAAA,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK,GAAG,KAAK,KAAK,UAAU,CAAC;AAAA,gBAC7B,WAAW;AAAA,kBACT,MAAM,SAAS,UAAU,cAAc;AAAA,kBACvC;AAAA,gBACF;AAAA;AAAA,cAEC,MAAM;AAAA,YACT,CACD,CACH;AAAA,aACE,KAAK,YAAa,KAAK,QAAQ,iBAAiB,YAChD,gBAAAA,QAAA,cAAAA,QAAA,gBACG,KAAK,WACJ,gBAAAA,QAAA,cAAC,oBAAiB,UAAU,KAAK,UAAU,IAE3C,KAAK,QAAQ,WAAW,KAAK,IAAI,CAErC;AAAA,UAEJ;AAAA,QAEJ;AAAA;AAAA,IACF;AAAA,EAEJ,CAAC;AACH;;;AHvDO,IAAM,WAAW;AAAA,EACtB,kBAAkB,SAASC,UACzB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,yBAAyB;AAAA,IACzB,WAAW;AAAA,IACX,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,cACA;AAGA,UAAM,QAAQC,UAAQ,MAAoD;AACxE,UAAI,KAAK,SAAS,UAAU;AAC1B,eAAO;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,UAAU,KAAK;AAAA,UACf,cAAc,KAAK;AAAA,UACnB,aAAa,KAAK;AAAA,UAClB,QAAQ,KAAK;AAAA,UACb,sBAAsB,KAAK;AAAA,QAC7B;AAAA,MACF,OAAO;AACL,eAAO;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,UAAU,KAAK;AAAA,UACf,cAAc,KAAK;AAAA,UACnB,aAAa,KAAK;AAAA,UAClB,QAAQ,KAAK;AAAA,QACf;AAAA,MACF;AAAA,IACF,GAAG;AAAA,MACD,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP,CAAC;AAED,UAAM,MAAMC,SAAyB,IAAI;AAEzC,aAAS,wBAAwB;AAC/B,UAAI,MAAM,SAAS,UAAU;AAC3B,eAAO,MAAM,SAAS;AAAA,MACxB,OAAO;AACL,eAAO,MAAM,OAAO,OAAO,SAAS,KAAK;AAAA,MAC3C;AAAA,IACF;AAEA,UAAM,qBAAqB,sBAAsB;AAEjD,UAAM,CAAC,aAAa,IAAIC;AAAA,MACtB,MACE,IAAI;AAAA,QACF;AAAA,QACA;AAAA,QACA,MAAM,SAAS,aAAa,MAAM,wBAAwB;AAAA,MAC5D;AAAA,IACJ;AACA,UAAM,QAAQ,iBAAiB,aAAa;AAC5C,UAAM,CAAC,WAAW,YAAY,IAAIA,WAAS,KAAK;AAChD,UAAM,UAAUD,SAAiC,IAAI;AACrD,UAAM,CAAC,YAAY,aAAa,IAAIC,WAAS,KAAK;AAClD,UAAM,EAAE,SAAS,GAAG,IAAI,SAAS;AAAA,MAC/B,SAAS,KAAK;AAAA,IAChB,CAAC;AAGD,IAAAC,YAAU,MAAM;AACd,oBAAc,SAAS,KAAK;AAAA,IAC9B,GAAG,CAAC,OAAO,aAAa,CAAC;AAEzB,IAAAA,YAAU,MAAM;AACd,oBAAc,UAAU,kBAAkB;AAAA,IAC5C,GAAG,CAAC,eAAe,kBAAkB,CAAC;AAEtC,UAAM,EAAE,QAAQ,eAAe,cAAc,IAAI;AAEjD,UAAM,iBACJ,aAAa,EAAE,0BAA0B,WAAW;AAEtD,IAAAA,YAAU,MAAM;AACd,UAAI,QAAQ,SAAS;AACnB,gBAAQ,QAAQ,cAAc,aAAa;AAAA,MAC7C;AAAA,IACF,GAAG,CAAC,aAAa,CAAC;AAElB,UAAM,aAAaC,cAAY,MAAM;AACnC,UAAI,SAAS,KAAK;AAClB,oBAAc,MAAM,kBAAkB;AACtC,UAAI,MAAM,SAAS,UAAU;AAC3B,cAAM;AAAA,UACJ,MAAM,WAAW,MAAM,mBAAmB;AAAA,UAC1C;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,eAAe,cAAc,gBAAgB;AACnD,YAAI,gBAAgB,qBAAqB,YAAY,GAAG;AACtD,gBAAM;AAAA,YACJ,MAAM,WAAW,MAAM,mBAAmB;AAAA,YAC1C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,mBAAa,KAAK;AAAA,IACpB,GAAG,CAAC,QAAQ,oBAAoB,OAAO,OAAO,aAAa,CAAC;AAE5D,UAAM,cAAmDA;AAAA,MACvD,CAAC,UAAU;AACT,qBAAa,IAAI;AACjB,sBAAc;AAAA,UACZ,qBAAqB,iBAAiB,KAAK;AAAA,QAC7C;AACA,YAAI,IAAI,SAAS;AACf,gBAAM,SAAS,IAAI,QAAQ,MAAM;AACjC,cAAI,QAAQ,kBAAkB,QAAQ,MAAM;AAAA,QAC9C;AACA,kBAAU,KAAK;AAAA,MACjB;AAAA,MACA,CAAC,oBAAoB,SAAS,kBAAkB,aAAa;AAAA,IAC/D;AAEA,UAAM,wBAAwBA;AAAA,MAC5B,CAAC,SAA4B;AAC3B,YAAI,KAAK,SAAS,OAAW;AAE7B,cAAM,eAAe,cAAc,kBAAkB,IAAI;AACzD,YAAI,CAAC,aAAc;AAEnB,YAAI,MAAM,SAAS,UAAU;AAC3B,gBAAM,eAAe,aAAa,KAAK;AACvC,gBAAM,cAAc,MAAS;AAAA,QAC/B,OAAO;AACL,gBAAM,eAAe,YAAY;AACjC,gBAAM,cAAc,MAAS;AAAA,QAC/B;AACA,sBAAc,IAAI;AAAA,MACpB;AAAA,MACA,CAAC,OAAO,aAAa;AAAA,IACvB;AAEA,UAAM,oBAAoBA;AAAA,MACxB,CAAC,UAAkB;AACjB,sBAAc,iBAAiB,KAAK;AACpC,cAAM,OAAO,cAAc,gBAAgB;AAC3C,YAAI,QAAQ,qBAAqB,IAAI,GAAG;AACtC,cAAI,MAAM,SAAS,UAAU;AAC3B,kBAAM,cAAc,KAAK,KAAK;AAAA,UAChC,OAAO;AACL,kBAAM,cAAc,IAAI;AAAA,UAC1B;AAAA,QACF,OAAO;AACL,gBAAM,cAAc,MAAS;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,CAAC,OAAO,aAAa;AAAA,IACvB;AAEA,UAAM,eAAeA;AAAA,MACnB,CAAC,UAAkB;AACjB,YAAI,SAAU;AACd,sBAAc,UAAU,KAAK;AAC7B,YAAI,MAAM,SAAS,UAAU;AAC3B,gBAAM,WAAW,KAAK;AAAA,QACxB,OAAO;AACL,gBAAM,eAAe,cAAc,gBAAgB;AACnD,cAAI,gBAAgB,qBAAqB,YAAY,GAAG;AACtD,kBAAM,WAAW,YAAY;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAC,UAAU,OAAO,aAAa;AAAA,IACjC;AAEA,UAAM,gBAAgBA;AAAA,MACpB,CAAC,UAAiD;AAChD,YAAI,UAAU;AACd,cAAM,OAAO,cAAc,gBAAgB;AAE3C,gBAAQ,MAAM,KAAK;AAAA,UACjB,KAAK;AAAA,UACL,KAAK;AACH,0BAAc;AAAA,cACZ,MAAM,QAAQ,cAAc,SAAS;AAAA,YACvC;AACA,sBAAU;AACV;AAAA,UACF,KAAK;AAAA,UACL,KAAK,UAAU;AACb,gBAAI,gBAAgB;AAClB,kBAAI,MAAM;AACR,sCAAsB,IAAI;AAAA,cAC5B,WACE,MAAM,SAAS,YACf,MAAM,sBACN;AAGA,8BAAc,sBAAsB,MAAM;AAC1C,2BAAW;AAAA,cACb,OAAO;AACL,8BAAc,0BAA0B;AAAA,cAC1C;AAAA,YACF,OAAO;AACL,kBAAI,SAAS,MAAM;AAAA,YACrB;AACA;AAAA,UACF;AAAA,UACA,KAAK,OAAO;AACV,gBAAI,MAAM;AACR,kBAAI,MAAM,UAAU;AAClB;AAAA,cACF;AAEA,kBAAI,gBAAgB,UAAU;AAC5B,sCAAsB,IAAI;AAC1B,0BAAU;AAAA,cACZ,OAAO;AAIL,sBAAM,eAAe;AACrB,sBAAM,gBAAgB;AACtB,oBAAI,wBAAwB,IAAI,EAAG;AACnC,oBAAI,qBAAqB,IAAI,GAAG;AAC9B,sBAAI,KAAK,UAAU,QAAQ;AACzB,0CAAsB,IAAI;AAAA,kBAC5B,OAAO;AACL,kCAAc,UAAU,KAAK,OAAO,SAAS,KAAK,EAAE;AACpD,wBAAI,SAAS,MAAM;AAAA,kBACrB;AAAA,gBACF;AACA,0BAAU;AAAA,cACZ;AAAA,YACF,WACE,MAAM,SAAS,YACf,MAAM,wBACN,WAAW,IACX;AAEA,4BAAc,sBAAsB,MAAM;AAC1C,yBAAW;AACX,wBAAU;AAAA,YACZ;AACA;AAAA,UACF;AAAA,UACA,KAAK;AACH,gBAAI,IAAI,SAAS;AACf,kBAAI,QAAQ,KAAK;AACjB,4BAAc,0BAA0B;AAAA,YAC1C;AACA,sBAAU;AACV;AAAA,UACF,KAAK;AAAA,UACL,KAAK,UAAU;AACb,gBAAI,WAAW,IAAI;AACjB,kCAAoB;AAAA,YACtB;AACA;AAAA,UACF;AAAA,QACF;AAEA,YAAI,SAAS;AACX,gBAAM,eAAe;AACrB,gBAAM,gBAAgB;AAAA,QACxB;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,iBAAiB,cAAc,kBAAkB;AAEvD,IAAAC,qBAAoB,cAAc,OAAO;AAAA,MACvC,OAAO,MAAM;AACX,YAAI,SAAS,MAAM;AACnB,YAAI,IAAI,SAAS;AACf,gBAAM,SAAS,IAAI,QAAQ,MAAM;AACjC,cAAI,QAAQ,kBAAkB,QAAQ,MAAM;AAAA,QAC9C;AAAA,MACF;AAAA,MACA,UAAU,CAAC,UAA0C;AACnD,YAAI,OAAO,UAAU,UAAU;AAC7B,wBAAc,UAAU,KAAK;AAAA,QAC/B,OAAO;AACL,wBAAc,UAAU,MAAM,KAAK;AAAA,QACrC;AAAA,MACF;AAAA,MACA,oBAAoB,MAAM;AACxB,YAAI,SAAS,kBAAkB,GAAG,IAAI,QAAQ,MAAM,MAAM;AAAA,MAC5D;AAAA,IACF,EAAE;AAEF,UAAM,qBAAqBD;AAAA,MACzB,CAAC,UAA4B;AAC3B,cAAM,gBAAgB;AAEtB,YAAI,gBAAgB;AAClB,qBAAW;AACX;AAAA,QACF;AAGA,sBAAc;AAAA,UACZ,qBAAqB,iBAAiB,KAAK;AAAA,QAC7C;AACA,YAAI,SAAS,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,IAAAD,YAAU,MAAM;AACd,UAAI,CAAC,WAAY;AACjB,UAAI,SAAS,kBAAkB,IAAI,QAAS;AAC5C,oBAAc,KAAK;AACnB,UAAI,SAAS,MAAM;AACnB,iBAAW;AAAA,IACb,GAAG,CAAC,YAAY,UAAU,CAAC;AAE3B,UAAM,EAAE,oBAAoB,eAAe,IAAIH;AAAA,MAC7C,OAAO;AAAA,QACL,oBAAoB,cAAc;AAAA,UAAO,CAAC,SACxC,wBAAwB,IAAI;AAAA,QAC9B,EAAE;AAAA,QACF,gBAAgB,cAAc;AAAA,UAAO,CAAC,SACpC,qBAAqB,IAAI;AAAA,QAC3B,EAAE;AAAA,MACJ;AAAA,MACA,CAAC,aAAa;AAAA,IAChB;AAEA,UAAM,kBAAkB,MAAM;AAAA,MAC5B,CAAC,SAAS,qBAAqB,IAAI,KAAK,KAAK;AAAA,IAC/C;AAEA,WACE,gBAAAM,QAAA;AAAA,MAACC,YAAW;AAAA,MAAX;AAAA,QACC;AAAA,QACA,MAAMT;AAAA,QACN,YAAY;AAAA,QACZ,KACE,gBAAAQ,QAAA,cAAAA,QAAA,gBACG,WACC,gBAAAA,QAAA,cAAC,SAAI,WAAU,YACb,gBAAAA,QAAA,cAAC,uBAAkB,CACrB,GAED,CAAC,YACA,gBAAAA,QAAA;AAAA,UAACC,YAAW;AAAA,UAAX;AAAA,YACC,SAAQ;AAAA,YACR,SAAS;AAAA;AAAA,UAET,gBAAAD,QAAA;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,iBAAiB,eAAe;AAAA,cAClC;AAAA;AAAA,UACF;AAAA,QACF,CAEJ;AAAA,QAEF,sBAAsB,CAAC,EAAE,MAAM,MAAM;AACnC,gBAAM,SAAS,KAAK;AAAA,YAClB,SAAS,gBAAgB;AAAA,cACvB;AAAA,cACA;AAAA,YACF,CAAC;AAAA,YACD,SAAS,YAAY;AAAA,UACvB;AAEA,gBAAM,WAAW,EAAE,OAAO,OAAO;AAEjC,iBACE,gBAAAF,QAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,kBAAkB,CAAC,WAAW,SAAS;AAAA,cACzC;AAAA;AAAA,YAEC,cAAc,SAAS,KAAK,CAAC,UAC5B,gBAAAA,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,OAAO;AAAA,gBACP;AAAA,gBACA,cAAc;AAAA,gBACd,cAAc;AAAA,gBACd;AAAA,gBACA,OAAO;AAAA,kBACL,MAAM,OAAO,MAAM;AAAA,gBACrB;AAAA,gBACA,UAAU;AAAA;AAAA,YACZ,IAEA,gBAAAA,QAAA,cAAC,SAAI,WAAU,4DACb,gBAAAA,QAAA,cAAC,SAAM,WAAU,wBACd,UAAU,eAAe,YAC5B,CACF;AAAA,UAEJ;AAAA,QAEJ;AAAA;AAAA,MAEA,gBAAAA,QAAA;AAAA,QAACC,YAAW;AAAA,QAAX;AAAA,UACC;AAAA,UACA,OAAO;AAAA,UACP,MAAK;AAAA,UACL;AAAA,UACA,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,gBAAgB;AAAA,UAChB,WAAW,CAAC,WAAW,gBAAgB;AAAA,UACvC,OAAOR;AAAA,UACP;AAAA,UACA,gBAAe;AAAA,UACf,cAAa;AAAA,UACb,aAAY;AAAA,UACZ,MAAK;AAAA,UACL,qBAAkB;AAAA,UAClB,iBAAc;AAAA,UACd,aAAU;AAAA,UACV,iBAAe;AAAA,UACf,iBAAc;AAAA,UACb,GAAI,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA;AAAA,MACxC;AAAA,MACC,UACC,kBACA,eAAe,YAAY,EAAE,WAAW,OAAO,YAAY,CAAC,KAC1D,gBAAAO,QAAA;AAAA,QAACC,YAAW;AAAA,QAAX;AAAA,UACC,OAAO;AAAA,UACP,QAAQ;AAAA,UACR;AAAA;AAAA,MACF;AAAA,MAEH;AAAA,IACH;AAAA,EAEJ,CAAC;AACH;;;AIriBA,OAAOE,WAAS,QAAAC,cAAY;;;ACF5B,SAAS,sBAAAC,qBAAoB,2BAA2B;AACxD,OAAOC;AAAA,EACL,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OACK;;;ACTP,OAAOC,WAAS,QAAAC,cAAY;AAYrB,IAAM,UAAUC,OAAK,SAASC,SAAQ;AAAA,EAC3C,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA,OAAAC;AAAA,EACA,GAAG;AACL,GAAiB;AACf,SACE,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,YAAY,WACR,sBACA,YAAY,WACV,sBACA;AAAA,QACN;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,YAAY,IAAI,QAAQ;AAAA,QACxB,aAAa,IAAI,QAAQ;AAAA,QACzB,GAAGD;AAAA,MACL;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;AAEM,IAAM,kBAAkBF,OAAK,SAASI,iBAAgB;AAAA,EAC3D,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA,OAAAF;AAAA,EACA,GAAG;AACL,GAAiB;AACf,SACE,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,YAAY,WACR,sBACA,YAAY,WACV,sBACA;AAAA,QACN;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,WAAW,IAAI,QAAQ;AAAA,QACvB,cAAc,IAAI,QAAQ;AAAA,QAC1B,GAAGD;AAAA,MACL;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;;;ADpCM,IAAM,uBAAuBG,aAAW,SAASC,sBACtD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AACF,GASA,cACA;AACA,QAAM,CAAC,OAAO,QAAQ,IAAIC,WAAS;AAAA,IACjC,QAAQ,cAAc;AAAA,IACtB,OAAO;AAAA,EACT,CAAC;AAED,QAAM,EAAE,OAAO,OAAO,IAAI;AAE1B,QAAM,UAAUC,QAAM,OAAiC,IAAI;AAE3D,QAAM,kBAAkB,MAAM,KAAK,CAAC,SAAS,KAAK,OAAO;AAEzD,EAAAC,YAAU,MAAM;AACd,YAAQ,SAAS,cAAc,KAAK;AAAA,EACtC,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,UAAUC;AAAA,IACd,MACE,YAAY;AAAA,MACV,OAAO,MAAM;AAAA,QAAI,CAAC,SAChB,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,KAAK;AAAA,MACrD;AAAA,MACA,OAAO;AAAA,IACT,CAAC,EAAE,IAAI,CAAC,UAAU;AAAA,MAChB,GAAG;AAAA,MACH,GAAG,MAAM,KAAK,KAAK;AAAA,IACrB,EAAE;AAAA,IACJ,CAAC,OAAO,MAAM;AAAA,EAChB;AAEA,QAAM,YAAYC,cAAY,CAACC,YAAmB;AAChD,aAAS,CAACC,YAAW,EAAE,GAAGA,QAAO,QAAAD,SAAQ,OAAO,EAAE,EAAE;AAAA,EACtD,GAAG,CAAC,CAAC;AAEL,QAAM,WAAWD,cAAY,CAACG,WAAkB;AAC9C,aAAS,CAACD,YAAW,EAAE,GAAGA,QAAO,OAAAC,OAAM,EAAE;AAAA,EAC3C,GAAG,CAAC,CAAC;AAEL,EAAAL,YAAU,MAAM;AACd,cAAU,QAAQ,KAAK,CAAE;AAAA,EAC3B,GAAG,CAAC,OAAO,SAAS,OAAO,CAAC;AAE5B,QAAM,eAAe;AAErB,QAAM,WACJ,QAAQ,SAAS,IACb;AAAA,IACE;AAAA,IACA,QAAQ,KAAK,IAAI,QAAQ,SAAS,IAAI,KAAK,GAAG;AAAA,EAChD,IACA;AAAA,IACE;AAAA,IACA,QAAQ;AAAA,EACV;AAEN,QAAM,cAAc;AAAA,IAClB,OAAO,SAAS;AAAA,IAChB,QAAQ,eAAe,SAAS;AAAA,EAClC;AAEA,QAAM,iBAAiBE;AAAA,IACrB,CAAC,SAAqC;AACpC,eAAS,IAAI;AACb,cAAQ;AAAA,IACV;AAAA,IACA,CAAC,UAAU,OAAO;AAAA,EACpB;AAEA,QAAM,gBAAgBA;AAAA,IACpB,CAAC,UAAiD;AAChD,0BAAoB,MAAM,aAAaI,oBAAmB,SAAS,GAAG;AAAA,QACpE,SAAS,MAAM;AACb,gBAAM,YAAY,aAAa;AAAA,YAC7B,OAAO;AAAA,YACP,cAAc;AAAA,YACd,WAAW;AAAA,YACX,YAAY,CAAC,SAAS,KAAK,YAAY;AAAA,UACzC,CAAC;AACD,mBAAS,SAAS;AAAA,QACpB;AAAA,QACA,WAAW,MAAM;AACf,gBAAM,YAAY,aAAa;AAAA,YAC7B,OAAO;AAAA,YACP,cAAc;AAAA,YACd,WAAW;AAAA,YACX,YAAY,CAAC,SAAS,KAAK,YAAY;AAAA,UACzC,CAAC;AACD,mBAAS,SAAS;AAAA,QACpB;AAAA,QACA,KAAK,MAAM,eAAe,QAAQ,KAAK,CAAE;AAAA,QACzC,OAAO,MAAM,eAAe,QAAQ,KAAK,CAAE;AAAA,QAC3C,QAAQ,MAAM,QAAQ;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,IACA,CAAC,OAAO,SAAS,gBAAgB,SAAS,QAAQ;AAAA,EACpD;AAEA,QAAM,WAAWC,SAAyB,IAAI;AAE9C,EAAAC,qBAAoB,cAAc,OAAO;AAAA,IACvC,OAAO,MAAM;AACX,eAAS,SAAS,MAAM;AAAA,IAC1B;AAAA,EACF,EAAE;AAEF,SACE,gBAAAT,QAAA,cAAC,SAAK,GAAG,aAAa,WAAU,mCAC9B,gBAAAA,QAAA,cAACU,YAAW,MAAX,EAAgB,WAAU,iBACzB,gBAAAV,QAAA;AAAA,IAACU,YAAW;AAAA,IAAX;AAAA,MACC,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAY;AAAA,MACZ,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,WAAW;AAAA,QACX,iBAAiB,QAAQ,OAAO;AAAA,QAChC,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,aAAa,kBACT,GAAG,iBAAiB,uBAAuB,KAAK,qBAAqB,OACrE;AAAA,QACJ,cAAc;AAAA,MAChB;AAAA,MACA,UAAU;AAAA,MACV,WAAW;AAAA;AAAA,EACb,CACF,GACA,gBAAAV,QAAA,cAAC,aAAQ,GACR,QAAQ,SAAS,IAChB,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,OAAO;AAAA,MACP,eAAe,qBAAqB;AAAA,MACpC,cAAc,CAAC,SAAS;AACtB,YAAI,qBAAqB,IAAI,GAAG;AAC9B,yBAAe,IAAI;AAAA,QACrB;AAAA,MACF;AAAA,MACA,cAAc;AAAA,MACd,UAAU;AAAA;AAAA,EACZ,IAEA,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAU;AAAA;AAAA,IAEV,gBAAAA,QAAA,cAAC,SAAM,OAAM,kBAAe,YAAU;AAAA,EACxC,CAEJ;AAEJ,CAAC;;;ADnMM,IAAM,iBAAiBW,OAAK,SAASC,gBAAe;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,UAAUC,QAAM,OAA8B,IAAI;AAExD,QAAM,cAAcA,QAAM,YAAY,MAAM;AAC1C,0BAAsB,KAAK;AAAA,EAC7B,GAAG,CAAC,qBAAqB,CAAC;AAE1B,SACE,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,eAAe;AAAA,QACf,UAAU;AAAA,QACV,WAAW;AAAA,QACX,SAAS;AAAA,QACT,KAAK;AAAA,QACL,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,cAAc,CAAC,UAAU;AACvB,8BAAsB,KAAK;AAAA,MAC7B;AAAA,MACA,wBAAsB;AAAA,MACtB,iBAAiB,MAAM;AACrB,gBAAQ,SAAS,MAAM;AACvB,mBAAW,MAAM;AACf,kBAAQ,SAAS,MAAM;AAAA,QACzB,GAAG,CAAC;AAAA,MACN;AAAA;AAAA,IAEA,gBAAAA,QAAA,cAAC,SAAI,WAAU,0BACb,gBAAAA,QAAA,cAAC,iBACE,CAACC,UACA,gBAAAD,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAOC,MAAK;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA;AAAA,IACX,CAEJ,CACF;AAAA,EACF;AAEJ,CAAC;;;AGpED,OAAOC,aAAW;AAOX,IAAM,aAAa,CAAC,EAAE,QAAQ,MAAM,MAAM,MAC/C,gBAAAC,QAAA;AAAA,EAAC;AAAA;AAAA,IACC,KAAK;AAAA,IACL,SACE,gBAAAA,QAAA,cAAC,SAAI,WAAU,mBACb,gBAAAA,QAAA,cAAC,aAAO,IAAK,CACf;AAAA;AAAA,EAGF,gBAAAA,QAAA,cAAC,UAAO,MAAM,cAAc,QAAgB,MAAY,OAAc;AACxE;AASK,IAAM,2BAA2B,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,MAAqC;AACnC,SACE,gBAAAA,QAAA,cAAC,SAAI,WAAU,kBACb,gBAAAA,QAAA,cAAC,eAAY,MAAM,cAAc,WAAU,UACxC,YAAY,CACf,GACC,qBACC,gBAAAA,QAAA,cAAC,WAAQ,SAAQ,kBACf,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAK;AAAA;AAAA,IACN;AAAA,EAED,CACF,CAEJ;AAEJ;;;ACjDA,SAAS,2BAA2B;AAEpC,OAAOC,WAAS,eAAAC,eAAa,YAAAC,kBAAgB;AAStC,IAAM,sBAAsB,YAAY,SAASC,qBAEtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,OAAAC;AACF,GAOG;AACD,QAAM,CAAC,MAAM,OAAO,IAAIC,WAAS,KAAK;AACtC,QAAM,CAAC,cAAc,eAAe,IAAIA,WAG9B,IAAI;AAEd,QAAM,2BAA2BC;AAAA,IAC/B,CAAC,UAA8B;AAC7B,UAAI,MAAM;AACR,wBAAgB,IAAI;AACpB;AAAA,MACF;AAEA,sBAAgB;AAAA,QACd,GAAG,MAAM;AAAA,QACT,GAAG,MAAM;AAAA,MACX,CAAC;AAAA,IACH;AAAA,IACA,CAAC,IAAI;AAAA,EACP;AAEA,QAAM,kBAAkBA;AAAA,IACtB,CAAC,UAA8B;AAC7B,UAAI,QAAQ,CAAC,cAAc;AACzB,wBAAgB,IAAI;AACpB;AAAA,MACF;AAEA,YAAM,KAAK,MAAM,UAAU,aAAa;AACxC,YAAM,KAAK,MAAM,UAAU,aAAa;AACxC,YAAM,WAAW,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AAE5D,UAAI,WAAW,GAAG;AAChB,gBAAQ,IAAI;AAAA,MACd;AAEA,sBAAgB,IAAI;AAAA,IACtB;AAAA,IACA,CAAC,cAAc,IAAI;AAAA,EACrB;AAEA,QAAM,mBAAmBA;AAAA,IACvB,CAAC,WAAoB;AACnB,UAAI,CAAC,OAAQ,SAAQ,KAAK;AAAA,IAC5B;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,SACE,gBAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAOH;AAAA,MACP,sBAAsB;AAAA,MACtB,aAAa;AAAA,MACb,SAAS,CAAC,UAAU;AAClB,cAAM,gBAAgB;AACtB,cAAM,eAAe;AACrB,kBAAU;AAAA,MACZ;AAAA;AAAA,IAEC,SAAS,WACR,gBAAAG,QAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA,6BAA6B;AAAA;AAAA,MAE7B,gBAAAA,QAAA,cAAC,SAAI,WAAU,kCACb,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,aAAa,OAAO,QAAQ,OAAO,OAAO;AAAA;AAAA,MACnD,CACF;AAAA,IACF,IAEA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,aAAa,OAAO,QAAQ,OAAO,OAAO;AAAA;AAAA,IACnD;AAAA,EAEJ;AAEJ,CAAC;;;AC/GD,YAAYC,aAAY;AACxB,YAAYC,aAAW;AACvB,SAAS,uBAAAC,4BAA2B;AAmB7B,IAAM,SAAe;AAAA,EACpB,mBAAW,SAASC,QACxB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAC;AAAA,IACA,cAAc;AAAA,IACd,OAAO;AAAA,IACP,YAAY;AAAA,IACZ;AAAA,EACF,GACA,cACA;AACA,UAAM,CAAC,cAAc,eAAe,IAAI,4BAA4B;AAAA,MAClE,cAAc;AAAA,MACd,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,CAAC;AAED,IAAAC,qBAAoB,cAAc,OAAO;AAAA,MACvC,QAAQ,MAAM;AACZ,wBAAgB,IAAI;AAAA,MACtB;AAAA,MACA,UAAU,MAAM;AACd,wBAAgB,KAAK;AAAA,MACvB;AAAA,MACA,YAAY,MAAM;AAChB,eAAO;AAAA,MACT;AAAA,IACF,EAAE;AAEF,UAAM,QACJ,8DACE;AAAA,MAAQ;AAAA,MAAP;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,gBAAgB,aAAa,aAAa;AAAA,QAC5C;AAAA;AAAA,IACF,GACA;AAAA,MAAQ;AAAA,MAAP;AAAA,QACC;AAAA,QACA,OAAOD;AAAA,QACP,WAAW;AAAA,UACT;AAAA,UACA,gBAAgB,aAAa,aAAa;AAAA,UAC1C,SAAS,SAAS,oBAAoB;AAAA,UACtC;AAAA,QACF;AAAA;AAAA,MAEC,SAAS,sCAAQ,eAAP,MAAc,KAAM;AAAA,MAC9B;AAAA,IACH,CACF;AAGF,WACE;AAAA,MAAQ;AAAA,MAAP;AAAA,QACC,KAAI;AAAA,QACJ,MAAM;AAAA,QACN,cAAc;AAAA;AAAA,MAEd,sCAAQ,iBAAP,EAAe,KAAI,aAAW,OAAQ;AAAA,MACtC,YACC,sCAAQ,gBAAP,EAAc,WAAW,mBAAkB,KAAM,IAElD;AAAA,IAEJ;AAAA,EAEJ,CAAC;AACH;;;ACjGA,OAAOE,aAA+B;AAmB/B,IAAM,OAAO,CAAC;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AACb,MAAiB;AACf,QAAM,oBAAoB;AAAA,IACxB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ;AAAA,EACV,EAAE,SAAS;AAEX,QAAM,kBAAkB;AAAA,IACtB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ;AAAA,EACV,EAAE,SAAS;AAEX,SACE,gBAAAC,QAAA,cAAC,SAAI,WAAW,GAAG,YAAY,SAAS,GAAG,OAAO,EAAE,OAAO,KACxD,aAAa,UAAU,WAAW,MACnC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,eAAe,iBAAiB;AAAA,QAChC;AAAA,QACA,UAAU,MAAM,MAAM;AAAA,MACxB;AAAA,MACA,OAAO;AAAA,QACL,OAAO,SAAS;AAAA,QAChB,QAAQ,UAAU;AAAA,MACpB;AAAA;AAAA,EACF,GACC,aAAa,SAAS,WAAW,IACpC;AAEJ;;;ACrDA,OAAOC,aAAW;AASX,IAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACE,gBAAAC,QAAA,cAAC,WAAQ,WAAW,GAAG,WAAW,aAAa,GAAI,GAAG,SACnD,QACH;AAGK,IAAM,2BAA2B,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,MAKE,gBAAAA,QAAA,cAAC,SAAI,WAAU,6BACZ,oBACC,gBAAAA,QAAA;AAAA,EAAC;AAAA;AAAA,IACC,UAAS;AAAA,IACT,SAAS;AAAA,IACT,cAAW;AAAA,IACX,SAAQ;AAAA;AACV,GAED,QACH;AAGK,IAAM,yBAAyB;AAAA,EACpC,SAASC,wBACP,EAAE,GAAG,MAAM,GACX,KACA;AACA,WAAO,gBAAAD,QAAA,cAAC,cAAiB,KAAU,WAAU,gBAAgB,GAAG,OAAO;AAAA,EACzE;AACF;AAEO,IAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA,MAAAE;AAAA,EACA;AACF,MAKE,gBAAAF,QAAA;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACTE,UAAS,UAAU,oBAAoB;AAAA,MACvC,WAAW,iBAAiB;AAAA,IAC9B;AAAA;AAAA,EAEC;AACH;AAGK,IAAM,yBAAyB,CAAC;AAAA,EACrC,QAAQ;AAAA,EACR,GAAG;AACL,MAAmB,gBAAAF,QAAA,cAAC,UAAO,OAAc,WAAU,QAAQ,GAAG,OAAO;;;AC/ErE,OAAOG,WAAS,cAAAC,cAAY,QAAAC,cAAY;;;ACDxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgFO,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,4BAAA,YAAS,KAAT;AACA,EAAAA,4BAAA,YAAS,KAAT;AACA,EAAAA,4BAAA,aAAU,KAAV;AAHU,SAAAA;AAAA,GAAA;AA2CL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,wBAAA,eAAY,KAAZ;AACA,EAAAA,wBAAA,UAAO,KAAP;AACA,EAAAA,wBAAA,QAAK,KAAL;AAHU,SAAAA;AAAA,GAAA;AA8DL,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,oBAAA,WAAQ,KAAR;AACA,EAAAA,oBAAA,cAAW,KAAX;AACA,EAAAA,oBAAA,aAAU,KAAV;AACA,EAAAA,oBAAA,YAAS,QAAT;AAJU,SAAAA;AAAA,GAAA;AASL,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gCAAA,YAAS,KAAT;AACA,EAAAA,gCAAA,YAAS,KAAT;AACA,EAAAA,gCAAA,aAAU,KAAV;AAHU,SAAAA;AAAA,GAAA;AAgBL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,sBAAA,YAAS,KAAT;AACA,EAAAA,sBAAA,YAAS,KAAT;AACA,EAAAA,sBAAA,cAAW,KAAX;AACA,EAAAA,sBAAA,eAAY,KAAZ;AACA,EAAAA,sBAAA,aAAU,KAAV;AACA,EAAAA,sBAAA,YAAS,KAAT;AACA,EAAAA,sBAAA,gBAAa,KAAb;AACA,EAAAA,sBAAA,aAAU,KAAV;AACA,EAAAA,sBAAA,eAAY,KAAZ;AACA,EAAAA,sBAAA,eAAY,KAAZ;AACA,EAAAA,sBAAA,gBAAa,MAAb;AACA,EAAAA,sBAAA,eAAY,MAAZ;AACA,EAAAA,sBAAA,SAAM,MAAN;AACA,EAAAA,sBAAA,gBAAa,MAAb;AACA,EAAAA,sBAAA,WAAQ,MAAR;AACA,EAAAA,sBAAA,gBAAa,MAAb;AACA,EAAAA,sBAAA,gBAAa,MAAb;AACA,EAAAA,sBAAA,iBAAc,MAAd;AAlBU,SAAAA;AAAA,GAAA;AAiCL,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,4BAAA,UAAO,KAAP;AACA,EAAAA,4BAAA,WAAQ,KAAR;AACA,EAAAA,4BAAA,gBAAa,KAAb;AAHU,SAAAA;AAAA,GAAA;AAQL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,8BAAA,WAAQ,KAAR;AACA,EAAAA,8BAAA,WAAQ,KAAR;AACA,EAAAA,8BAAA,WAAQ,KAAR;AAHU,SAAAA;AAAA,GAAA;AAoBL,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,oBAAA,cAAW,KAAX;AACA,EAAAA,oBAAA,YAAS,KAAT;AACA,EAAAA,oBAAA,UAAO,KAAP;AACA,EAAAA,oBAAA,gBAAa,KAAb;AAJU,SAAAA;AAAA,GAAA;AA0BL,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,kCAAA,UAAO,KAAP;AACA,EAAAA,kCAAA,UAAO,KAAP;AACA,EAAAA,kCAAA,aAAU,KAAV;AACA,EAAAA,kCAAA,SAAM,KAAN;AAJU,SAAAA;AAAA,GAAA;AAyCL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,wBAAA,eAAY,KAAZ;AACA,EAAAA,wBAAA,iBAAc,KAAd;AACA,EAAAA,wBAAA,UAAO,KAAP;AACA,EAAAA,wBAAA,gBAAa,KAAb;AACA,EAAAA,wBAAA,kBAAe,KAAf;AACA,EAAAA,wBAAA,gBAAa,KAAb;AACA,EAAAA,wBAAA,kBAAe,KAAf;AAPU,SAAAA;AAAA,GAAA;AAYL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,0BAAA,aAAU,KAAV;AACA,EAAAA,0BAAA,aAAU,KAAV;AAFU,SAAAA;AAAA,GAAA;AAwBL,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,8CAAA,SAAM,KAAN;AACA,EAAAA,8CAAA,YAAS,KAAT;AACA,EAAAA,8CAAA,YAAS,KAAT;AAHU,SAAAA;AAAA,GAAA;AAmBL,IAAK,0BAAL,kBAAKC,6BAAL;AACL,EAAAA,kDAAA,UAAO,KAAP;AACA,EAAAA,kDAAA,WAAQ,KAAR;AACA,EAAAA,kDAAA,cAAW,KAAX;AACA,EAAAA,kDAAA,eAAY,KAAZ;AACA,EAAAA,kDAAA,aAAU,KAAV;AALU,SAAAA;AAAA,GAAA;AAUL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,8BAAA,UAAO,KAAP;AACA,EAAAA,8BAAA,eAAY,KAAZ;AACA,EAAAA,8BAAA,eAAY,KAAZ;AAHU,SAAAA;AAAA,GAAA;AAQL,IAAK,iBAAL,kBAAKC,oBAAL;AACL,EAAAA,gCAAA,UAAO,KAAP;AACA,EAAAA,gCAAA,gBAAa,KAAb;AAFU,SAAAA;AAAA,GAAA;AAoIL,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,oCAAA,UAAO,MAAP;AACA,EAAAA,oCAAA,WAAQ,KAAR;AACA,EAAAA,oCAAA,cAAW,KAAX;AACA,EAAAA,oCAAA,kBAAe,KAAf;AACA,EAAAA,oCAAA,gBAAa,KAAb;AALU,SAAAA;AAAA,GAAA;AAgCL,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,kBAAA,SAAM;AACN,EAAAA,kBAAA,SAAM;AACN,EAAAA,kBAAA,UAAO;AACP,EAAAA,kBAAA,SAAM;AACN,EAAAA,kBAAA,SAAM;AACN,EAAAA,kBAAA,UAAO;AACP,EAAAA,kBAAA,SAAM;AAPI,SAAAA;AAAA,GAAA;AAYL,IAAK,2BAAL,kBAAKC,8BAAL;AACL,EAAAA,oDAAA,YAAS,KAAT;AACA,EAAAA,oDAAA,YAAS,KAAT;AAFU,SAAAA;AAAA,GAAA;AAOL,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,oCAAA,WAAQ,KAAR;AACA,EAAAA,oCAAA,WAAQ,KAAR;AACA,EAAAA,oCAAA,YAAS,KAAT;AAHU,SAAAA;AAAA,GAAA;AA4BL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,8BAAA,UAAO,KAAP;AACA,EAAAA,8BAAA,mBAAgB,KAAhB;AACA,EAAAA,8BAAA,oBAAiB,KAAjB;AACA,EAAAA,8BAAA,qBAAkB,KAAlB;AACA,EAAAA,8BAAA,kBAAe,KAAf;AALU,SAAAA;AAAA,GAAA;AAUL,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,sCAAA,eAAY,KAAZ;AACA,EAAAA,sCAAA,eAAY,KAAZ;AACA,EAAAA,sCAAA,cAAW,KAAX;AAHU,SAAAA;AAAA,GAAA;AAQL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,wBAAA,aAAU,KAAV;AACA,EAAAA,wBAAA,eAAY,KAAZ;AACA,EAAAA,wBAAA,YAAS,KAAT;AACA,EAAAA,wBAAA,WAAQ,KAAR;AAJU,SAAAA;AAAA,GAAA;AA4DL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,wCAAA,gBAAa,KAAb;AACA,EAAAA,wCAAA,cAAW,KAAX;AAFU,SAAAA;AAAA,GAAA;AAOL,IAAK,uBAAL,kBAAKC,0BAAL;AACL,EAAAA,4CAAA,SAAM,KAAN;AACA,EAAAA,4CAAA,YAAS,KAAT;AACA,EAAAA,4CAAA,SAAM,KAAN;AAHU,SAAAA;AAAA,GAAA;AAkIL,IAAK,wBAAL,kBAAKC,2BAAL;AACL,EAAAA,8CAAA,cAAW,MAAX;AACA,EAAAA,8CAAA,YAAS,KAAT;AACA,EAAAA,8CAAA,aAAU,KAAV;AACA,EAAAA,8CAAA,YAAS,KAAT;AAJU,SAAAA;AAAA,GAAA;AAsBL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,sBAAA,UAAO,KAAP;AACA,EAAAA,sBAAA,cAAW,KAAX;AACA,EAAAA,sBAAA,cAAW,KAAX;AACA,EAAAA,sBAAA,gBAAa,KAAb;AACA,EAAAA,sBAAA,kBAAe,KAAf;AALU,SAAAA;AAAA,GAAA;AAgSL,IAAK,uBAAL,kBAAKC,0BAAL;AACL,EAAAA,4CAAA,UAAO,KAAP;AACA,EAAAA,4CAAA,YAAS,KAAT;AACA,EAAAA,4CAAA,wBAAqB,KAArB;AAHU,SAAAA;AAAA,GAAA;AAQL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,8BAAA,cAAW,KAAX;AACA,EAAAA,8BAAA,WAAQ,KAAR;AACA,EAAAA,8BAAA,yBAAsB,KAAtB;AAHU,SAAAA;AAAA,GAAA;AAscL,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,UAAA,mBAAgB;AAChB,EAAAA,UAAA,UAAO;AACP,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,oBAAiB;AACjB,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,kBAAe;AACf,EAAAA,UAAA,aAAU;AAPA,SAAAA;AAAA,GAAA;AAYL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,8BAAA,UAAO,KAAP;AACA,EAAAA,8BAAA,WAAQ,KAAR;AAFU,SAAAA;AAAA,GAAA;AA8LL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,2BAAwB;AACxB,EAAAA,YAAA,+BAA4B;AAC5B,EAAAA,YAAA,kCAA+B;AAC/B,EAAAA,YAAA,8BAA2B;AAC3B,EAAAA,YAAA,8BAA2B;AAC3B,EAAAA,YAAA,iCAA8B;AAC9B,EAAAA,YAAA,oCAAiC;AACjC,EAAAA,YAAA,8BAA2B;AAC3B,EAAAA,YAAA,6BAA0B;AAC1B,EAAAA,YAAA,oCAAiC;AACjC,EAAAA,YAAA,iCAA8B;AAC9B,EAAAA,YAAA,0BAAuB;AACvB,EAAAA,YAAA,yBAAsB;AACtB,EAAAA,YAAA,iCAA8B;AAC9B,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,sBAAmB;AACnB,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,mBAAgB;AAChB,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,mBAAgB;AAChB,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,kBAAe;AACf,EAAAA,YAAA,mBAAgB;AAChB,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,oBAAiB;AACjB,EAAAA,YAAA,mBAAgB;AAChB,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,kBAAe;AACf,EAAAA,YAAA,6BAA0B;AAC1B,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,iBAAc;AACd,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,mBAAgB;AAChB,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,oBAAiB;AACjB,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,oBAAiB;AACjB,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,iBAAc;AACd,EAAAA,YAAA,0BAAuB;AACvB,EAAAA,YAAA,8BAA2B;AAC3B,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,oBAAiB;AACjB,EAAAA,YAAA,kBAAe;AACf,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,iBAAc;AACd,EAAAA,YAAA,mBAAgB;AAChB,EAAAA,YAAA,iBAAc;AApEJ,SAAAA;AAAA,GAAA;;;ACjxDZ,YAAYC,aAAW;;;ACFvB,YAAYC,aAAW;AAMvB,IAAM,mBAAyB;AAAA,EAC7B;AACF;AAEO,IAAM,oBAA0B,aAAK,SAASC,mBAAkB;AAAA,EACrE;AAAA,EACA;AACF,GAGG;AACD,QAAM,eAAqB;AAAA,IACzB,OAAO,EAAE,cAAc,iBAAiB,MAAM,QAAW;AAAA,IACzD,CAAC,YAAY;AAAA,EACf;AAEA,SACE,sCAAC,iBAAiB,UAAjB,EAA0B,OAAO,gBAC/B,QACH;AAEJ,CAAC;AAEM,SAAS,aAAa,KAAsC;AACjE,QAAM,QAAc,mBAAW,gBAAgB;AAE/C,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AAEA,SAAO,MAAM,aAAa,GAAG;AAC/B;;;ACrCA,SAAS,mBAAAC,kBAAiB,WAAAC,iBAAe;AAElC,SAAS,aAAa,QAA0C;AACrE,QAAM,YAAYA,UAAQ,MAAM;AAC9B,QAAI,kBAAkB,KAAM,QAAO,IAAI,gBAAgB,MAAM;AAE7D,UAAM,QACJ,kBAAkB,aACd,SACA,WAAW,SACX,IAAI,WAAW,MAAM,IACrB,IAAI,WAAW;AAErB,WAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAAA,EAC9C,GAAG,CAAC,MAAM,CAAC;AAEX,EAAAD,iBAAgB,MAAM;AACpB,WAAO,MAAM,IAAI,gBAAgB,SAAS;AAAA,EAC5C,GAAG,CAAC,SAAS,CAAC;AAEd,SAAO;AACT;;;ACrBA;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AAGA,SAAS,kBAAkB,OAAgC;AAChE,SAAO;AAAA,IACL,GAAG,KAAK,MAAM,MAAM,MAAM,GAAG;AAAA,IAC7B,GAAG,KAAK,MAAM,MAAM,QAAQ,GAAG;AAAA,IAC/B,GAAG,KAAK,MAAM,MAAM,OAAO,GAAG;AAAA,IAC9B,GAAG,MAAM;AAAA,EACX;AACF;AAEO,SAAS,wBAAwB,OAA6B;AACnE,SAAO,iBAAiB,WAAW,kBAAkB,KAAK,CAAC,CAAC;AAC9D;AAEO,SAAS,kBAAkB,OAAgC;AAChE,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,OAAO,MAAM;AAAA,IACb,KAAK,MAAM,IAAI;AAAA,IACf,OAAO,MAAM,IAAI;AAAA,IACjB,MAAM,MAAM,IAAI;AAAA,EAClB;AACF;AAEO,SAAS,iBAAiB,OAA6B;AAC5D,SAAO,UAAU,kBAAkB,KAAK,CAAC,EAAE,YAAY;AACzD;;;AC9BA,IAAM,eAAe,CAAC,OAA8B,QAClD,CAAC,GAAG,KAAK,EACN,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ,EACtC;AAAA,EACC,CAAC,MACC,GAAG,wBAAwB,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,GACrD,QAAQ,MAAM,MAAM,KACtB;AACJ,EACC,KAAK,MAAM;AAET,SAAS,sBACd,OACA,MACA,WACA;AACA,MAAI,SAAS,cAAO,aAAa,SAAS;AACxC,WAAO,kBAAkB,aAAa,OAAO,GAAG,CAAC;AAAA,EACnD;AAEA,QAAM,QAAQ,aAAa,OAAO,GAAG;AACrC,QAAM,WACJ,SAAS,cAAO,aAAa,SACzB,2BACA,mBAAmB,cAAc,SAAY,YAAY,GAAG;AAElE,SAAO,GAAG,QAAQ,KAAK,KAAK;AAC9B;;;AJpBA,IAAM,oBAAoB,CAAC,cAAsB;AAAA,sEACqB,SAAS;AAAA;AAAA;AAAA;AAK/E,IAAM,aAAmB,aAAK,SAASE,YAAW;AAAA,EAChD,YAAAC;AACF,GAEG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAGA,cAAa,OAAOA,WAAU,MAAM,qBAAqB;AAAA;AAAA,EACzE;AAEJ,CAAC;AAED,SAAS,0BACP,UACA,WACA;AACA,UAAQ,UAAU;AAAA,IAChB,KAAK,cAAO,gBAAgB;AAC1B,aAAO;AAAA,IACT,KAAK,cAAO,gBAAgB;AAC1B,aAAO,cAAc,YAAY,GAAG;AAAA,IACtC,KAAK,cAAO,gBAAgB;AAC1B,aAAO;AAAA,IACT,KAAK,cAAO,gBAAgB;AAC1B,aAAO;AAAA,EACX;AACF;AAEO,IAAM,2BAAiC;AAAA,EAC5C,SAASC,0BAAyB;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIG;AACD,UAAM,QAAQ,aAAa,QAAQ;AAEnC,UAAM,MAAM,aAAa,KAAK;AAE9B,UAAMC,QAAO,0BAA0B,UAAU,SAAS;AAE1D,UAAMF,cAAmB;AAAA,MACvB,MACE;AAAA,QACEE;AAAA,QACA,OAAO,GAAG;AAAA,QACV,aAAa,cAAO,gBAAgB,OAAO,WAAW;AAAA,MACxD,EAAE,KAAK,GAAG;AAAA,MACZ,CAAC,UAAUA,OAAM,GAAG;AAAA,IACtB;AAEA,WAAO,sCAAC,cAAW,YAAYF,aAAY;AAAA,EAC7C;AACF;AAEA,IAAM,yBAA+B,aAAK,SAASG,wBAAuB;AAAA,EACxE;AACF,GAEG;AACD,QAAMH,cAAmB;AAAA,IACvB,MAAM,wBAAwB,KAAK;AAAA,IACnC,CAAC,KAAK;AAAA,EACR;AAEA,SAAO,sCAAC,cAAW,YAAYA,aAAY;AAC7C,CAAC;AAED,IAAM,4BAAkC;AAAA,EACtC,SAASI,2BAA0B;AAAA,IACjC;AAAA,EACF,GAEG;AACD,UAAMJ,cAAmB;AAAA,MACvB,MAAM,sBAAsB,SAAS,OAAO,SAAS,cAAc,GAAG;AAAA,MACtE,CAAC,SAAS,cAAc,SAAS,KAAK;AAAA,IACxC;AAEA,WAAO,sCAAC,cAAW,YAAYA,aAAY;AAAA,EAC7C;AACF;AAMA,IAAM,aAAa,uCAAuC;AAAA,EACxD,QAAQ,OAAO;AACjB,CAAC;AAEM,IAAM,wBAA8B,aAAK,SAASK,uBAAsB;AAAA,EAC7E;AACF,GAAU;AACR,MAAI,CAAC,MAAO,QAAO,sCAAC,cAAW,YAAwB;AAEvD,UAAQ,MAAM,QAAQ;AAAA,IACpB,KAAK;AACH,aAAO,sCAAC,0BAAuB,OAAO,OAAO;AAAA,IAC/C,KAAK;AACH,aAAO,sCAAC,6BAA0B,UAAU,OAAO;AAAA,IACrD,KAAK;AACH,UAAI,CAAC,MAAM,MAAO,QAAO;AAEzB,aACE;AAAA,QAAC;AAAA;AAAA,UACC,UAAU,MAAM;AAAA,UAChB,WAAW,MAAM;AAAA,UACjB,UAAU,MAAM,MAAM;AAAA;AAAA,MACxB;AAAA,EAEN;AACF,CAAC;;;AF7HD,IAAM,aAAaC,aAGjB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAC,QAAA;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AAOM,IAAM,iBAAiBC;AAAA,EAC5BF,aAAqC,SAASG,gBAC5C,EAAE,IAAI,OAAO,GAAG,KAAK,GACrB,KACA;AACA,WACE,gBAAAF,QAAA,cAAC,cAAW,KAAU,IAAS,GAAG,QAChC,gBAAAA,QAAA,cAAC,yBAAsB,OAAc,CACvC;AAAA,EAEJ,CAAC;AACH;;;AO5BA,OAAOG,WAAS,eAAAC,eAAa,UAAAC,UAAQ,YAAAC,kBAAgB;AAoBrD,IAAMC,UAAS;AAAA,EACb,UAAU;AAAA,IACR,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,cAAc;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACb,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,UAAU;AAAA;AAAA,EAEZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AAAA,EACA,aAAa;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,QAAQ;AAAA;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,IACT,eAAe;AAAA,EACjB;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,EACZ;AACF;AAEA,IAAM,wBAAwB;AAAA,EAC5B,KAAK,EAAE,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,OAAO,QAAQ,YAAY;AAAA,EAC3E,OAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,MAAM,EAAE,KAAK,KAAK,MAAM,KAAK,QAAQ,KAAK,OAAO,OAAO,QAAQ,YAAY;AAAA,EAC5E,SAAS;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACF;AAEA,SAAS,qBAAqB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SACE,gBAAAJ,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA,cAAC,SAAM,WAAU,kCAAgC,KAAM,GACtD,gBACD,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,WAAU;AAAA,MACV,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,aAAa;AAAA,MACf;AAAA;AAAA,EACF,CACF;AAEJ;AAEO,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA,gBAAgB;AAClB,MAAM;AACJ,QAAM,CAAC,UAAU,WAAW,IAAIG,WAAS,EAAE,GAAG,UAAU,GAAG,SAAS,CAAC;AACrE,QAAM,CAACE,OAAM,OAAO,IAAIF,WAAS;AAAA,IAC/B,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,CAAC,YAAY,aAAa,IAAIA,WAAS,KAAK;AAClD,QAAM,CAAC,YAAY,aAAa,IAAIA,WAAS,KAAK;AAClD,QAAM,CAAC,YAAY,aAAa,IAAIA,WAAS,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AAC3D,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,WAAwB,IAAI;AAC1E,QAAM,aAAaD,SAAuB,IAAI;AAE9C,QAAM,4BAA4B,CAAC,YAAqB;AACtD,QAAI,SAAS;AACX,eAAS,KAAK,MAAM,aAAa;AAAA,IACnC,OAAO;AACL,eAAS,KAAK,MAAM,aAAa;AAAA,IACnC;AAAA,EACF;AAEA,QAAM,kBAAkBD,cAAY,CAAC,MAAwB;AAC3D,QAAI,CAAC,WAAW,QAAS;AAEzB,UAAM,OAAO,WAAW,QAAQ,sBAAsB;AACtD,kBAAc;AAAA,MACZ,GAAG,EAAE,UAAU,KAAK;AAAA,MACpB,GAAG,EAAE,UAAU,KAAK;AAAA,IACtB,CAAC;AACD,kBAAc,IAAI;AAAA,EACpB,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAoBA;AAAA,IACxB,CAAC,cAAsB,CAAC,MAAwB;AAC9C,QAAE,gBAAgB;AAClB,oBAAc,IAAI;AAClB,yBAAmB,SAAS;AAC5B,gCAA0B,IAAI;AAAA,IAChC;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkBA;AAAA,IACtB,CAAC,MAAkB;AACjB,UAAI,YAAY;AACd,oBAAY;AAAA,UACV,GAAG,EAAE,UAAU,WAAW;AAAA,UAC1B,GAAG,EAAE,UAAU,WAAW;AAAA,QAC5B,CAAC;AAAA,MACH,WAAW,cAAc,iBAAiB;AACxC,cAAM,OAAO,WAAW,QAAS,sBAAsB;AAEvD,YAAI,WAAWI,MAAK;AACpB,YAAI,YAAYA,MAAK;AACrB,YAAI,OAAO,SAAS;AACpB,YAAI,OAAO,SAAS;AAEpB,YAAI,SAAS,KAAK,eAAe,GAAG;AAClC,qBAAW,KAAK,IAAI,EAAE,UAAU,KAAK,MAAM,QAAQ;AAAA,QACrD;AACA,YAAI,UAAU,KAAK,eAAe,GAAG;AACnC,sBAAY,KAAK,IAAI,EAAE,UAAU,KAAK,KAAK,SAAS;AAAA,QACtD;AACA,YAAI,QAAQ,KAAK,eAAe,GAAG;AACjC,gBAAM,iBAAiB,KAAK,QAAQ,EAAE;AACtC,cAAI,kBAAkB,UAAU;AAC9B,uBAAW;AACX,mBAAO,KAAK,QAAQ;AAAA,UACtB,OAAO;AACL,uBAAW;AACX,mBAAO,EAAE;AAAA,UACX;AAAA,QACF;AACA,YAAI,OAAO,KAAK,eAAe,GAAG;AAChC,gBAAM,kBAAkB,KAAK,SAAS,EAAE;AACxC,cAAI,mBAAmB,WAAW;AAChC,wBAAY;AACZ,mBAAO,KAAK,SAAS;AAAA,UACvB,OAAO;AACL,wBAAY;AACZ,mBAAO,EAAE;AAAA,UACX;AAAA,QACF;AAEA,gBAAQ,EAAE,OAAO,UAAU,QAAQ,UAAU,CAAC;AAC9C,oBAAY,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC;AAAA,MAClC;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgBJ,cAAY,CAAC,OAAmB;AACpD,kBAAc,KAAK;AACnB,kBAAc,KAAK;AACnB,uBAAmB,IAAI;AACvB,8BAA0B,KAAK;AAAA,EACjC,GAAG,CAAC,CAAC;AAEL,EAAAD,QAAM,UAAU,MAAM;AACpB,aAAS,iBAAiB,aAAa,eAAe;AACtD,aAAS,iBAAiB,WAAW,aAAa;AAElD,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,eAAe;AACzD,eAAS,oBAAoB,WAAW,aAAa;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,iBAAiB,aAAa,CAAC;AAEnC,QAAM,wBAAwB,yBAAyB;AACvD,QAAM,wBAAwB,iCAAiC;AAE/D,QAAM,cAAcC,cAAY,MAAM;AACpC,QAAI,QAAS,SAAQ;AACrB,0BAAsB,YAAY,sBAAsB,EAAE;AAAA,EAC5D,GAAG,CAAC,sBAAsB,IAAI,uBAAuB,OAAO,CAAC;AAE7D,SACE,gBAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,OAAO;AAAA,QACL,GAAGI,QAAO;AAAA,QACV,KAAK,SAAS;AAAA,QACd,MAAM,SAAS;AAAA,QACf,OAAOC,MAAK;AAAA,QACZ,QAAQA,MAAK;AAAA,QACb,SAAS,aAAa,QAAQ,OAAO,OAAO;AAAA,QAC5C,iBAAiB,QAAQ,OAAO;AAAA,QAChC,QAAQ,QAAQ,OAAO;AAAA,MACzB;AAAA;AAAA,IAEA,gBAAAL,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,GAAGI,QAAO;AAAA,UACV,iBAAiB,QAAQ,OAAO;AAAA,QAClC;AAAA,QACA,aAAa;AAAA;AAAA,MAEZ,cAAc,EAAE,OAAO,gBAAgB,SAAS,YAAY,CAAC;AAAA,IAChE;AAAA,IACA,gBAAAJ,QAAA,cAAC,aAAQ;AAAA,IACT,gBAAAA,QAAA,cAAC,SAAI,OAAOI,QAAO,WAAU,QAAS;AAAA,IACrC,OAAO,QAAQ,qBAAqB,EAAE,IAAI,CAAC,CAAC,WAAWE,MAAK,MAC3D,gBAAAN,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAO,EAAE,GAAGI,QAAO,cAAc,GAAGE,OAAM;AAAA,QAC1C,aAAa,kBAAkB,SAAS;AAAA;AAAA,IAC1C,CACD;AAAA,EACH;AAEJ;;;ACzTA;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EAEf;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,OACK;AAEP,YAAYC,aAAW;AAchB,IAAM,iBAAuB,aAAK,SAASC,gBAAe;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAU;AACR,QAAM,aAA0C;AAAA,IAC9C,OAAO;AAAA,MACL,cAAc,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MACvC,QAAQC;AAAA,MACR,UAAU;AAAA,MACV,OAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,YAAkB;AAAA,IACtB,MAAM,kBAAkB,MAAM,YAAY,EAAE,KAAK;AAAA,IACjD,CAAC,OAAO,YAAY;AAAA,EACtB;AAEA,QAAM,oBAA0B;AAAA,IAC9B,CAACC,WAAqB;AACpB,oBAAc,kBAAkBA,MAAK,CAAC;AAAA,IACxC;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEA,QAAM,wBAA8B;AAAA,IAClC,CAACA,QAAkB,aAAqB;AACtC,YAAM,kBAAkBA,MAAK,GAAG,QAAQ;AAAA,IAC1C;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU;AAAA,MACV;AAAA,MACA,OAAO;AAAA;AAAA,IAEP;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP;AAAA;AAAA,IACF;AAAA,IACA,sCAAC,OAAO,UAAP,EAAgB,MAAM,IAAI;AAAA,IAC3B,sCAAC,gBAAW;AAAA,IACZ,sCAAC,OAAO,UAAP,EAAgB,MAAM,IAAI;AAAA,IAC3B,sCAAC,SAAI;AAAA,IACL,sCAAC,OAAO,UAAP,EAAgB,MAAM,GAAG;AAAA,IAC1B,sCAAC,WAAM;AAAA,EACT;AAEJ,CAAC;;;ACjFD,OAAOC,WAAS,cAAAC,cAAY,QAAAC,cAAY;AAEjC,IAAM,qBAAqBA;AAAA,EAChCD,aAAW,SAASE,oBAClB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAC;AAAA,EACF,GASA,cACA;AACA,WACE,gBAAAJ,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,UAAU;AAAA,UACV,YAAY,QAAQ,OAAO;AAAA,UAC3B,GAAGI;AAAA,QACL;AAAA;AAAA,MAEC;AAAA,MACA,WACC,gBAAAJ,QAAA,cAAC,kBACC,gBAAAA,QAAA,cAAC,SAAI,WAAU,4BACZ,eACG,sBAAsB,UAAU,gBAAAA,QAAA,cAAC,aAAQ,CAAE,IAC3C,QACN,CACF,IACE,WACF,gBAAAA,QAAA,cAAC,SAAI,WAAU,mCAAiC,QAAS,IACvD;AAAA,IACN;AAAA,EAEJ,CAAC;AACH;;;ACzDA,YAAY,UAAU;AACtB,YAAYK,aAAW;AAOhB,IAAM,qBAA2B,aAAK,SAASC,oBAAmB;AAAA,EACvE;AAAA,EACA;AACF,GAAmB;AACjB,QAAM,aAA6B,iBAAS,QAAQ,QAAQ,EACzD;AAAA,IAAQ,CAAC,UACF,uBAAe,KAAK,KAAK,MAAM,SAAe,mBAC/C,MAAM,MAAM,WACb,CAAC,KAAK;AAAA,EACZ,EACC;AAAA,IAAI,CAAC,UACE,uBAAe,KAAK,KAAK,QAAQ,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,EACxE,EACC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE;AACtB,QAAM,gBAAgB,WAAW,KAAK,GAAG;AACzC,QAAM,eAAqB,eAA8B,IAAI;AAE7D,QAAM,OAAa,gBAAQ,MAAM;AAC/B,WAAO,OAAO;AAAA,MACZ,cACG,MAAM,GAAG,EACT,IAAI,CAAC,OAAO,CAAC,IAAU,kBAA2B,CAAC,CAAC;AAAA,IACzD;AAAA,EACF,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,gBAAsB,gBAAQ,MAAM;AACxC,WAAO,cAAc,MAAM,GAAG,EAAE,IAAI,CAAC,IAAI,UACvC;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,KAAK,KAAK,EAAE;AAAA,QACZ,OAAO,EAAE,UAAU,YAAY,MAAM,kBAAkB;AAAA;AAAA,MAEtD,YAAY;AAAA,QACX;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,CACD;AAAA,EACH,GAAG,CAAC,MAAM,eAAe,WAAW,CAAC;AAErC,EAAM,wBAAgB,MAAM;AAC1B,QAAI,CAAC,aAAa,QAAS;AAE3B,UAAM,gBAAgB,aAAa,QAAQ,sBAAsB;AAEjE,UAAM,SAAS,IAAS,YAAO;AAC/B,UAAM,YAA6B,CAAC;AACpC,UAAM,UAAoB,CAAC;AAE3B,WAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,GAAG,GAAG,OAAO,SAAS;AACvD,UAAI,CAAC,IAAI,QAAS;AAIlB,YAAM,gBAAgB,SAAS,eAAe,EAAE;AAChD,YAAM,aAAa,cAAc,sBAAsB;AACvD,iBAAW,IAAI,cAAc;AAC7B,YAAM,YAAY,IAAI,QAAQ,sBAAsB;AACpD,gBAAU,IAAI,IAAI,QAAQ;AAI1B,cAAQ,KAAK,UAAU,MAAM;AAE7B,YAAM,kBAAkB,WAAW,IAAI,WAAW,QAAQ;AAE1D,YAAM,YAAY,IAAS,cAAS;AACpC,aAAO,gBAAgB,WAAgB,cAAS,IAAI;AACpD,aAAO;AAAA,QACL,IAAS;AAAA,UACP,IAAS,gBAAW,SAAS;AAAA,UACxB,cAAS;AAAA,UACd,IAAS,gBAAW,eAAe;AAAA,UAC9B,cAAS;AAAA,QAChB;AAAA,MACF;AAEA,UAAI,UAAU,GAAG;AACf,eAAO;AAAA,UACL,IAAS;AAAA,YACP,IAAS,gBAAW,SAAS;AAAA,YACxB,cAAS;AAAA,YACd,IAAS,gBAAW,UAAU,QAAQ,CAAC;AAAA,YAClC,cAAS;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAaA,UAAI,UAAU,KAAK,SAAS,GAAG;AAM7B,eAAO;AAAA,UACL,IAAS;AAAA,YACP,IAAS,gBAAW,SAAS;AAAA,YACxB,cAAS;AAAA,YACd,IAAS,gBAAW,cAAc,QAAQ,UAAU,QAAQ,CAAC;AAAA,YACxD,cAAS;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAEA,aAAO,aAAa,WAAW,UAAU,IAAI,UAAU,QAAQ,CAAC;AAEhE,gBAAU,KAAK,SAAS;AAAA,IAC1B,CAAC;AAED,WAAO,gBAAgB;AAEvB,WAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,GAAG,GAAG,UAAU;AAClD,UAAI,CAAC,IAAI,QAAS;AAIlB,YAAM,YAAY,IAAI,QAAQ,sBAAsB;AAEpD,UAAI,QAAQ,MAAM;AAAA,QAChB;AAAA,QACA,GAAG,UAAU,KAAK,EAAE,MAAM,IAAI,UAAU,QAAQ,CAAC;AAAA,MACnD;AAAA,IACF,CAAC;AAED,iBAAa,QAAQ,MAAM;AAAA,MACzB;AAAA,MACA,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,MAAM,aAAa,CAAC;AAExB,SACE,sCAAC,SAAI,WAAU,iCAAgC,KAAK,gBAClD,sCAAC,SAAI,WAAU,8BAA4B,QAAS,GACpD,sCAAC,SAAI,WAAU,0CACZ,aACH,CACF;AAEJ,CAAC;;;AC7JD,OAAOC,WAAS,QAAAC,QAAM,WAAAC,iBAAe;;;ACArC,OAAOC,aAAW;AAEX,IAAM,gBAAgBA,QAAM,cAEhC;AAAA,EACD,aAAa;AACf,CAAC;AAEM,IAAM,YAAY,MAAM;AAC7B,QAAM,EAAE,YAAY,IAAIA,QAAM,WAAW,aAAa;AACtD,SAAO;AACT;;;ADCO,IAAM,qBAAqB,CAAC,kBACjC;AAAA,EACE;AAAA,EACA,kBAAkB,SAAS;AAAA,EAC3B,kBAAkB,WAAW;AAC/B;AAEF,IAAM,qBAAgD;AAAA,EACpD,UAAU;AACZ;AAEO,IAAM,eAAeC,OAAK,SAASC,cAAa;AAAA,EACrD;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,OAAAC;AAAA,EACA,YAAY;AAAA,EACZ,GAAG;AACL,GAWG;AACD,QAAM,cAAc,UAAU;AAC9B,QAAM,wBAAwB,cAAc;AAC5C,QAAM,aAAa,yBAAyB;AAE5C,QAAM,2BAA2B,iBAAiB;AAClD,QAAM,gBACJ,qBAAqB,4BAA4B;AAEnD,QAAM,sBAAsBC;AAAA,IAC1B,MAAM,mBAAmB,aAAa;AAAA,IACtC,CAAC,aAAa;AAAA,EAChB;AAEA,QAAM,oBAAoBA;AAAA,IACxB,OAAO,EAAE,SAAS,MAAM;AAAA,IACxB,CAAC,SAAS,KAAK;AAAA,EACjB;AAEA,QAAM,cAAcA;AAAA,IAClB,OAAO;AAAA,MACL,OAAO,cAAc;AAAA,MACrB,WAAW,cAAc;AAAA,MACzB,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,aAAaA;AAAA,IACjB,OAAO;AAAA,MACL,UAAU,eAAe,aAAa,cAAc,IAAI,CAAC;AAAA,IAC3D;AAAA,IACA,CAAC,YAAY,WAAW;AAAA,EAC1B;AAEA,QAAM,aAAaA;AAAA,IACjB,OAAO;AAAA,MACL,UAAU,QAAQ,UAAU,QAAQ,cAAc,CAAC;AAAA,MACnD,GAAG;AAAA,IACL;AAAA,IACA,CAAC,YAAY,aAAa,cAAc;AAAA,EAC1C;AAEA,SACE,gBAAAC,QAAA,cAAC,aAAa,UAAb,EAAsB,OAAO,qBAE3B,kBAAkB,UACjB,gBAAAA,QAAA,cAAC,qBAAqB,UAArB,EAA8B,OAAO,sBACnC,QACH,IAEA,gBAAAA,QAAA,cAAC,SAAI,WAAW,GAAG,wBAAwB,SAAS,GAAG,OAAOF,UAC3D,QAAQ,WAAW,KAAK,gBAAAE,QAAA,cAAC,SAAI,OAAO,aAAa,GAClD,gBAAAA,QAAA,cAAC,SAAI,WAAW,uBACd,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MAGT,WACE,kBAAkB,WAAW,kBAAkB,QAC3C,eACA;AAAA,MAEN,OAAO;AAAA,MACN,GAAG;AAAA;AAAA,IAEH;AAAA,EACH,GACC,kBAAkB,UACjB,gBAAAA,QAAA,cAAC,SAAI,WAAU,kBAAiB,OAAO,cACpC,QACH,IAEA,QAEJ,CACF,CAEJ;AAEJ,CAAC;;;AE7HD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAOC,WAAS,QAAAC,QAAM,WAAAC,iBAAe;;;ACWrC,IAAM,YAAuB;AAAA,EAC3B,YAAY;AAAA,IACV,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB,CAAC,QAAQ,QAAQ,MAAM;AAAA,EACzC;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB,CAAC,OAAO,KAAK;AAAA,EAC/B;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,kBAAkB,KAAK;AAAA,EACrC;AAAA,EACA,MAAM;AAAA,IACJ,WAAW,CAAC,WAAW,gBAAgB,eAAe,YAAY;AAAA,EACpE;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,OAAO;AAAA,IACrB,gBAAgB,CAAC,MAAM,OAAO;AAAA,EAChC;AAAA,EACA,SAAS;AAAA,IACP,WAAW,CAAC,qBAAqB;AAAA,IACjC,gBAAgB,CAAC,OAAO,SAAS,KAAK;AAAA,EACxC;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB,CAAC,aAAa;AAAA,IAC9B,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,WAAW,CAAC,iBAAiB,oBAAoB,mBAAmB;AAAA,EACtE;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,gBAAgB,cAAc,SAAS;AAAA,IACnD,gBAAgB,CAAC,QAAQ;AAAA,EAC3B;AAAA,EACA,iBAAiB;AAAA,IACf,gBAAgB,CAAC,QAAQ,cAAc;AAAA,EACzC;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,oBAAoB,kBAAkB;AAAA,EACpD;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,gBAAgB,CAAC,QAAQ,YAAY,KAAK;AAAA,EAC5C;AAAA,EACA,UAAU;AAAA,IACR,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,OAAO;AAAA,IACxB,aAAa,CAAC,OAAO;AAAA,EACvB;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB,CAAC,KAAK;AAAA,IACtB,aAAa,CAAC,KAAK;AAAA,EACrB;AAAA,EACA,mBAAmB;AAAA,IACjB,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,OAAO,aAAa;AAAA,IAClC,gBAAgB,CAAC,MAAM,OAAO,OAAO,QAAQ,OAAO,QAAQ,OAAO,MAAM;AAAA,IACzE,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,OAAO,KAAK;AAAA,EAC/B;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,OAAO,OAAO;AAAA,IAC/B,WAAW,CAAC,UAAU;AAAA,EACxB;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,kBAAkB;AAAA,IAChC,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,cAAc,aAAa;AAAA,EACzC;AAAA,EACA,WAAW;AAAA,IACT,WAAW,CAAC,4BAA4B,yBAAyB;AAAA,EACnE;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,YAAY,YAAY;AAAA,EACtC;AAAA,EACA,cAAc;AAAA,IACZ,WAAW,CAAC,gBAAgB,iBAAiB;AAAA,EAC/C;AAAA,EACA,YAAY;AAAA,IACV,WAAW,CAAC,YAAY,WAAW;AAAA,EACrC;AAAA,EACA,KAAK;AAAA,IACH,WAAW,CAAC,aAAa;AAAA,EAC3B;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB,CAAC,GAAG;AAAA,EACtB;AAAA,EACA,GAAG;AAAA,IACD,aAAa,CAAC,GAAG;AAAA,IACjB,gBAAgB,CAAC,KAAK,KAAK,IAAI;AAAA,EACjC;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,OAAO;AAAA,IACxB,WAAW,CAAC,eAAe;AAAA,EAC7B;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,WAAW;AAAA,IAC5B,WAAW,CAAC,WAAW;AAAA,EACzB;AAAA,EACA,WAAW;AAAA,IACT,WAAW,CAAC,yBAAyB,qBAAqB;AAAA,EAC5D;AAAA,EACA,cAAc;AAAA,IACZ,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,aAAa;AAAA,IACX,gBAAgB,CAAC,OAAO,QAAQ,OAAO,KAAK;AAAA,EAC9C;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,SAAS;AAAA,IACP,aAAa,CAAC,SAAS;AAAA,IACvB,gBAAgB,CAAC,OAAO,QAAQ,MAAM;AAAA,EACxC;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,OAAO;AAAA,IACxB,WAAW,CAAC,kBAAkB,gBAAgB;AAAA,EAChD;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,OAAO;AAAA,IACrB,gBAAgB,CAAC,OAAO,KAAK;AAAA,EAC/B;AAAA,EACA,gBAAgB;AAAA,IACd,WAAW,CAAC,kBAAkB;AAAA,EAChC;AAAA,EACA,mBAAmB;AAAA,IACjB,WAAW,CAAC,sBAAsB,uBAAuB,iBAAiB;AAAA,EAC5E;AAAA,EACA,YAAY;AAAA,IACV,WAAW,CAAC,cAAc,QAAQ;AAAA,EACpC;AAAA,EACA,cAAc;AAAA,IACZ,aAAa,CAAC,cAAc;AAAA,IAC5B,gBAAgB,CAAC,UAAU,QAAQ,MAAM;AAAA,EAC3C;AAAA,EACA,YAAY;AAAA,IACV,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,gBAAgB,CAAC,MAAM,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK;AAAA,EAChE;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,MAAM,OAAO,OAAO,OAAO,MAAM,OAAO,IAAI;AAAA,EAC/D;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,QAAQ;AAAA,IACtB,gBAAgB,CAAC,MAAM,OAAO,QAAQ;AAAA,EACxC;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,gBAAgB,CAAC,SAAS;AAAA,EAC5B;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,OAAO,OAAO,KAAK;AAAA,IACjC,gBAAgB,CAAC,OAAO,OAAO,KAAK;AAAA,EACtC;AAAA,EACA,UAAU;AAAA,IACR,aAAa,CAAC,UAAU;AAAA,IACxB,gBAAgB,CAAC,WAAW,UAAU;AAAA,EACxC;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,UAAU;AAAA,IACxB,gBAAgB,CAAC,MAAM,KAAK;AAAA,EAC9B;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,GAAG;AAAA,IACD,aAAa,CAAC,GAAG;AAAA,IACjB,gBAAgB,CAAC,KAAK,IAAI;AAAA,EAC5B;AAAA,EACA,kBAAkB;AAAA,IAChB,gBAAgB,CAAC,gBAAgB,QAAQ;AAAA,EAC3C;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,MAAM;AAAA,EACzB;AAAA,EACA,UAAU;AAAA,IACR,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,WAAW,CAAC,WAAW;AAAA,EACzB;AAAA,EACA,MAAM;AAAA,IACJ,WAAW,CAAC,aAAa,YAAY;AAAA,EACvC;AAAA,EACA,YAAY;AAAA,IACV,WAAW,CAAC,kBAAkB,iBAAiB;AAAA,EACjD;AAAA,EACA,cAAc;AAAA,IACZ,WAAW,CAAC,qBAAqB,oBAAoB;AAAA,EACvD;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,OAAO;AAAA,IACrB,gBAAgB,CAAC,SAAS,QAAQ;AAAA,EACpC;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,MAAM;AAAA,EACtB;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,eAAe,YAAY;AAAA,IACzC,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,kBAAkB;AAAA,IAChB,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,gBAAgB,CAAC,gBAAgB,iBAAiB;AAAA,EACpD;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB,CAAC,cAAc,eAAe;AAAA,IAC9C,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB,CAAC,UAAU,KAAK;AAAA,EAClC;AAAA,EACA,eAAe;AAAA,IACb,WAAW,CAAC,qBAAqB,mBAAmB;AAAA,EACtD;AAAA,EACA,kBAAkB;AAAA,IAChB,WAAW,CAAC,qBAAqB;AAAA,EACnC;AAAA,EACA,KAAK;AAAA,IACH,WAAW,CAAC,YAAY,SAAS;AAAA,EACnC;AAAA,EACA,cAAc;AAAA,IACZ,aAAa,CAAC,cAAc;AAAA,IAC5B,WAAW,CAAC,eAAe;AAAA,EAC7B;AAAA,EACA,KAAK;AAAA,IACH,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,QAAQ;AAAA,IACtB,gBAAgB,CAAC,MAAM,OAAO,OAAO,QAAQ,MAAM;AAAA,EACrD;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,cAAc,iBAAiB,qBAAqB;AAAA,EAClE;AAAA,EACA,KAAK;AAAA,IACH,gBAAgB,CAAC,KAAK;AAAA,IACtB,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,QAAQ;AAAA,EACtB;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,QAAQ;AAAA,IACtB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,WAAW,CAAC,iBAAiB,eAAe;AAAA,EAC9C;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,gBAAgB,CAAC,OAAO,KAAK;AAAA,EAC/B;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,WAAW,CAAC,aAAa;AAAA,EAC3B;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB,CAAC,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,EAChE;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,QAAQ;AAAA,IACtB,gBAAgB,CAAC,MAAM,OAAO,OAAO,QAAQ;AAAA,EAC/C;AAAA,EACA,KAAK;AAAA,IACH,WAAW,CAAC,UAAU,iBAAiB;AAAA,EACzC;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,WAAW,CAAC,8BAA8B,+BAA+B;AAAA,EAC3E;AAAA,EACA,aAAa;AAAA,IACX,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,OAAO,cAAc,cAAc,QAAQ;AAAA,IACzD,gBAAgB,CAAC,OAAO;AAAA,IACxB,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB,CAAC,iBAAiB,gBAAgB;AAAA,EACpD;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,aAAa;AAAA,EAC3B;AAAA,EACA,gBAAgB;AAAA,IACd,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,OAAO;AAAA,IACxB,aAAa,CAAC,OAAO;AAAA,EACvB;AAAA,EACA,UAAU;AAAA,IACR,WAAW,CAAC,UAAU,UAAU,WAAW,aAAa;AAAA,EAC1D;AAAA,EACA,eAAe;AAAA,IACb,gBAAgB,CAAC,QAAQ,SAAS,UAAU,UAAU,UAAU,SAAS;AAAA,EAC3E;AAAA,EACA,IAAI;AAAA,IACF,aAAa,CAAC,IAAI;AAAA,IAClB,gBAAgB,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,gBAAgB;AAAA,IACd,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW,CAAC,aAAa,SAAS,MAAM;AAAA,EAC1C;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,UAAU;AAAA,IACxB,gBAAgB,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB,CAAC,QAAQ;AAAA,IACzB,WAAW,CAAC,qBAAqB,WAAW,2BAA2B;AAAA,EACzE;AAAA,EACA,SAAS;AAAA,IACP,aAAa,CAAC,SAAS;AAAA,IACvB,gBAAgB,CAAC,WAAW,KAAK;AAAA,IACjC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,QAAQ;AAAA,IACtB,gBAAgB,CAAC,QAAQ;AAAA,EAC3B;AAAA,EACA,MAAM;AAAA,IACJ,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,MAAM;AAAA,EACzB;AAAA,EACA,YAAY;AAAA,IACV,aAAa,CAAC,YAAY;AAAA,IAC1B,gBAAgB,CAAC,OAAO,UAAU;AAAA,EACpC;AAAA,EACA,SAAS;AAAA,IACP,WAAW,CAAC,qBAAqB,mBAAmB;AAAA,EACtD;AAAA,EACA,SAAS;AAAA,IACP,aAAa,CAAC,SAAS;AAAA,IACvB,gBAAgB,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,QAAQ,MAAM;AAAA,IAC5B,gBAAgB,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,MAAM;AAAA,IACJ,WAAW,CAAC,eAAe,YAAY;AAAA,EACzC;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,UAAU;AAAA,EACxB;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,OAAO,QAAQ,SAAS,WAAW,KAAK;AAAA,EAC3D;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB,CAAC,QAAQ,MAAM;AAAA,IAC/B,WAAW,CAAC,OAAO;AAAA,EACrB;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB,CAAC,MAAM;AAAA,EACzB;AAAA,EACA,MAAM;AAAA,IACJ,WAAW,CAAC,aAAa,aAAa,WAAW;AAAA,EACnD;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,qBAAqB,iBAAiB;AAAA,EACpD;AAAA,EACA,cAAc;AAAA,IACZ,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,QAAQ,KAAK;AAAA,EAChC;AAAA,EACA,qBAAqB;AAAA,IACnB,WAAW,CAAC,eAAe;AAAA,IAC3B,gBAAgB,CAAC,eAAe;AAAA,EAClC;AAAA,EACA,kBAAkB;AAAA,IAChB,gBAAgB,CAAC,UAAU,WAAW,SAAS;AAAA,EACjD;AAAA,EACA,oBAAoB;AAAA,IAClB,aAAa,CAAC,iBAAiB;AAAA,IAC/B,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,mBAAmB;AAAA,IACjB,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,aAAa,CAAC,YAAY;AAAA,IAC1B,gBAAgB,CAAC,OAAO,MAAM,OAAO,KAAK;AAAA,EAC5C;AAAA,EACA,MAAM;AAAA,IACJ,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,OAAO;AAAA,IACrB,gBAAgB,CAAC,SAAS,UAAU,MAAM,YAAY;AAAA,EACxD;AAAA,EACA,eAAe;AAAA,IACb,gBAAgB,CAAC,aAAa;AAAA,EAChC;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,OAAO;AAAA,IACrB,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,OAAO;AAAA,IACrB,gBAAgB,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,SAAS;AAAA,IACP,aAAa,CAAC,SAAS;AAAA,IACvB,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB,CAAC,MAAM;AAAA,IACvB,WAAW,CAAC,YAAY,WAAW;AAAA,EACrC;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,KAAK;AAAA,IACH,gBAAgB,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,UAAU,UAAU;AAAA,IACxE,WAAW,CAAC,WAAW;AAAA,EACzB;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB,CAAC,MAAM,KAAK;AAAA,EAC9B;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB,CAAC,aAAa,UAAU;AAAA,IACxC,WAAW,CAAC,SAAS;AAAA,EACvB;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,OAAO,UAAU,SAAS,aAAa;AAAA,IACrD,gBAAgB,CAAC,OAAO,OAAO,OAAO,KAAK;AAAA,EAC7C;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,MAAM;AAAA,EACzB;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,UAAU,cAAc;AAAA,IACtC,gBAAgB,CAAC,OAAO,KAAK;AAAA,EAC/B;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB,CAAC,QAAQ;AAAA,IACzB,WAAW,CAAC,kBAAkB,WAAW;AAAA,IACzC,aAAa,CAAC,QAAQ;AAAA,EACxB;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB,CAAC,QAAQ,OAAO,MAAM,MAAM;AAAA,EAC9C;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,KAAK;AAAA,IACtB,WAAW,CAAC,aAAa;AAAA,EAC3B;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB,CAAC,MAAM;AAAA,IACvB,WAAW,CAAC,SAAS;AAAA,EACvB;AAAA,EACA,UAAU;AAAA,IACR,aAAa,CAAC,UAAU;AAAA,IACxB,gBAAgB,CAAC,IAAI;AAAA,IACrB,WAAW,CAAC,YAAY,eAAe,QAAQ;AAAA,EACjD;AAAA,EACA,gBAAgB;AAAA,IACd,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,UAAU;AAAA,IACR,aAAa,CAAC,UAAU;AAAA,IACxB,gBAAgB,CAAC,MAAM,YAAY,KAAK;AAAA,EAC1C;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,QAAQ;AAAA,EACxB;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,WAAW;AAAA,EACzB;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB,CAAC,OAAO,SAAS;AAAA,EACnC;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,eAAe,mBAAmB;AAAA,IAC9C,gBAAgB,CAAC,MAAM;AAAA,EACzB;AAAA,EACA,MAAM;AAAA,IACJ,WAAW,CAAC,OAAO,MAAM;AAAA,EAC3B;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB,CAAC,MAAM;AAAA,IACvB,WAAW,CAAC,aAAa;AAAA,EAC3B;AAAA,EACA,WAAW;AAAA,IACT,WAAW,CAAC,gBAAgB,mBAAmB,mBAAmB;AAAA,EACpE;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB,CAAC,QAAQ,QAAQ,KAAK;AAAA,EACxC;AAAA,EACA,iBAAiB;AAAA,IACf,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,gBAAgB,CAAC,OAAO,QAAQ,OAAO,KAAK;AAAA,EAC9C;AAAA,EACA,cAAc;AAAA,IACZ,WAAW,CAAC,0BAA0B,wBAAwB;AAAA,EAChE;AAAA,EACA,MAAM;AAAA,IACJ,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,WAAW,CAAC,gBAAgB,eAAe,gBAAgB,cAAc;AAAA,EAC3E;AAAA,EACA,MAAM;AAAA,IACJ,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,gBAAgB,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,YAAY;AAAA,IACxB,gBAAgB,CAAC,SAAS,aAAa,aAAa;AAAA,EACtD;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,OAAO,QAAQ;AAAA,IAC7B,gBAAgB,CAAC,OAAO,QAAQ;AAAA,EAClC;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,YAAY;AAAA,IACV,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,IACP,WAAW,CAAC,gBAAgB,oBAAoB;AAAA,EAClD;AAAA,EACA,cAAc;AAAA,IACZ,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,YAAY;AAAA,IACV,WAAW,CAAC,mBAAmB;AAAA,EACjC;AAAA,EACA,KAAK;AAAA,IACH,WAAW,CAAC,QAAQ;AAAA,EACtB;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,gBAAgB,WAAW,WAAW;AAAA,IAClD,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,UAAU;AAAA,IACR,aAAa,CAAC,UAAU;AAAA,IACxB,gBAAgB,CAAC,OAAO,UAAU;AAAA,EACpC;AAAA,EACA,eAAe;AAAA,IACb,WAAW,CAAC,aAAa;AAAA,EAC3B;AAAA,EACA,MAAM;AAAA,IACJ,WAAW,CAAC,WAAW,kBAAkB,gBAAgB;AAAA,EAC3D;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,MAAM,OAAO,KAAK;AAAA,EACrC;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,gBAAgB;AAAA,IACd,WAAW,CAAC,gBAAgB,UAAU,UAAU,eAAe;AAAA,EACjE;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,QAAQ,SAAS,MAAM;AAAA,IACrC,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,aAAa;AAAA,IACX,WAAW,CAAC,WAAW;AAAA,EACzB;AAAA,EACA,MAAM;AAAA,IACJ,WAAW,CAAC,WAAW;AAAA,EACzB;AAAA,EACA,UAAU;AAAA,IACR,gBAAgB,CAAC,MAAM,QAAQ,UAAU;AAAA,EAC3C;AAAA,EACA,YAAY;AAAA,IACV,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,WAAW,CAAC,eAAe,gBAAgB,gBAAgB,aAAa;AAAA,EAC1E;AAAA,EACA,aAAa;AAAA,IACX,WAAW,CAAC,gBAAgB;AAAA,EAC9B;AAAA,EACA,MAAM;AAAA,IACJ,WAAW,CAAC,uBAAuB,eAAe;AAAA,EACpD;AAAA,EACA,eAAe;AAAA,IACb,WAAW,CAAC,aAAa;AAAA,EAC3B;AAAA,EACA,SAAS;AAAA,IACP,aAAa,CAAC,SAAS;AAAA,IACvB,gBAAgB,CAAC,QAAQ,KAAK;AAAA,IAC9B,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,aAAa,CAAC,YAAY;AAAA,IAC1B,gBAAgB,CAAC,OAAO,QAAQ,QAAQ,UAAU,QAAQ,MAAM;AAAA,EAClE;AAAA,EACA,cAAc;AAAA,IACZ,WAAW,CAAC,2BAA2B,wBAAwB;AAAA,EACjE;AAAA,EACA,SAAS;AAAA,IACP,WAAW,CAAC,gBAAgB,gBAAgB,aAAa;AAAA,EAC3D;AAAA,EACA,mBAAmB;AAAA,IACjB,WAAW,CAAC,iBAAiB;AAAA,EAC/B;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,YAAY;AAAA,IACxB,gBAAgB,CAAC,QAAQ;AAAA,EAC3B;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,QAAQ;AAAA,IACtB,gBAAgB,CAAC,KAAK,KAAK;AAAA,EAC7B;AAAA,EACA,YAAY;AAAA,IACV,aAAa,CAAC,OAAO,cAAc,wBAAwB;AAAA,IAC3D,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,OAAO;AAAA,IACrB,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,QAAQ,KAAK;AAAA,IAC9B,WAAW,CAAC,eAAe,kBAAkB,kBAAkB;AAAA,EACjE;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB,gBAAgB,CAAC,OAAO,OAAO,KAAK;AAAA,EACtC;AAAA,EACA,iBAAiB;AAAA,IACf,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,QAAQ;AAAA,IACtB,gBAAgB,CAAC,IAAI;AAAA,EACvB;AAAA,EACA,GAAG;AAAA,IACD,aAAa,CAAC,KAAK,SAAS;AAAA,IAC5B,gBAAgB,CAAC,KAAK,KAAK;AAAA,IAC3B,WAAW,CAAC,WAAW;AAAA,EACzB;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,SAAS,iBAAiB;AAAA,IACxC,gBAAgB,CAAC,UAAU,QAAQ;AAAA,EACrC;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,aAAa,cAAc,cAAc,QAAQ;AAAA,EAC/D;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,UAAU,aAAa;AAAA,IACrC,gBAAgB,CAAC,MAAM,KAAK;AAAA,EAC9B;AAAA,EACA,SAAS;AAAA,IACP,WAAW,CAAC,cAAc;AAAA,EAC5B;AAAA,EACA,SAAS;AAAA,IACP,WAAW,CAAC,kBAAkB;AAAA,EAChC;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,mBAAmB,iBAAiB;AAAA,EAClD;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,aAAa,CAAC,UAAU;AAAA,IACxB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB,CAAC,QAAQ,SAAS,QAAQ,OAAO;AAAA,EACnD;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,WAAW,CAAC,cAAc;AAAA,EAC5B;AAAA,EACA,YAAY;AAAA,IACV,WAAW,CAAC,SAAS;AAAA,EACvB;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,MAAM,OAAO,KAAK;AAAA,IACnC,WAAW,CAAC,eAAe;AAAA,EAC7B;AAAA,EACA,MAAM;AAAA,IACJ,WAAW,CAAC,aAAa,YAAY;AAAA,EACvC;AAAA,EACA,eAAe;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,MAAM,KAAK;AAAA,EAC9B;AAAA,EACA,YAAY;AAAA,IACV,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,QAAQ,MAAM;AAAA,IAC5B,gBAAgB,CAAC,QAAQ,MAAM;AAAA,EACjC;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,OAAO;AAAA,IACrB,gBAAgB,CAAC,SAAS,IAAI;AAAA,EAChC;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,eAAe;AAAA,IAC7B,gBAAgB,CAAC,aAAa;AAAA,EAChC;AAAA,EACA,UAAU;AAAA,IACR,WAAW,CAAC,eAAe,gBAAgB,UAAU;AAAA,EACvD;AAAA,EACA,oBAAoB;AAAA,IAClB,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB,WAAW,CAAC,gBAAgB;AAAA,EAC9B;AAAA,EACA,SAAS;AAAA,IACP,WAAW,CAAC,aAAa;AAAA,EAC3B;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,cAAc;AAAA,EAC5B;AAAA,EACA,YAAY;AAAA,IACV,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,QAAQ,QAAQ,MAAM;AAAA,IACpC,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB,CAAC,QAAQ;AAAA,EAC3B;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,aAAa,CAAC,UAAU;AAAA,IACxB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,eAAe;AAAA,IACb,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB,CAAC,MAAM;AAAA,EACzB;AAAA,EACA,YAAY;AAAA,IACV,WAAW,CAAC,eAAe;AAAA,EAC7B;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,OAAO,MAAM,KAAK;AAAA,EACrC;AAAA,EACA,SAAS;AAAA,IACP,WAAW,CAAC,qBAAqB,mBAAmB;AAAA,EACtD;AAAA,EACA,UAAU;AAAA,IACR,WAAW,CAAC,sBAAsB,oBAAoB;AAAA,EACxD;AAAA,EACA,oBAAoB;AAAA,IAClB,gBAAgB,CAAC,gBAAgB,gBAAgB;AAAA,EACnD;AAAA,EACA,iBAAiB;AAAA,IACf,gBAAgB,CAAC,aAAa,aAAa;AAAA,EAC7C;AAAA,EACA,WAAW;AAAA,IACT,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,oBAAoB;AAAA,IAClB,WAAW,CAAC,oBAAoB,iBAAiB;AAAA,EACnD;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB,CAAC,mBAAmB,mBAAmB;AAAA,EACzD;AAAA,EACA,kBAAkB;AAAA,IAChB,gBAAgB,CAAC,MAAM,KAAK;AAAA,EAC9B;AAAA,EACA,iBAAiB;AAAA,IACf,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,aAAa,CAAC,QAAQ;AAAA,IACtB,gBAAgB,CAAC,QAAQ;AAAA,EAC3B;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,OAAO;AAAA,IACrB,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,WAAW,CAAC,aAAa;AAAA,EAC3B;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,WAAW;AAAA,IACT,aAAa,CAAC,WAAW;AAAA,IACzB,gBAAgB,CAAC,MAAM,WAAW,UAAU,WAAW,WAAW;AAAA,EACpE;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,WAAW;AAAA,IACzB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,MAAM;AAAA,IACJ,gBAAgB,CAAC,MAAM;AAAA,IACvB,WAAW,CAAC,WAAW,UAAU;AAAA,EACnC;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,MAAM;AAAA,EACzB;AAAA,EACA,OAAO;AAAA,IACL,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,MAAM;AAAA,IACJ,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,MAAM;AAAA,EACzB;AAAA,EACA,OAAO;AAAA,IACL,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,gBAAgB,CAAC,MAAM,MAAM;AAAA,EAC/B;AAAA,EACA,qBAAqB;AAAA,IACnB,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,gBAAgB,CAAC,eAAe;AAAA,EAClC;AAAA,EACA,kBAAkB;AAAA,IAChB,gBAAgB,CAAC,QAAQ,SAAS,OAAO;AAAA,EAC3C;AAAA,EACA,oBAAoB;AAAA,IAClB,aAAa,CAAC,iBAAiB;AAAA,IAC/B,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,mBAAmB;AAAA,IACjB,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,aAAa,CAAC,YAAY;AAAA,IAC1B,gBAAgB,CAAC,MAAM,OAAO,KAAK;AAAA,EACrC;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,OAAO;AAAA,IACrB,gBAAgB,CAAC,KAAK;AAAA,IACtB,WAAW,CAAC,YAAY;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA,IACL,aAAa,CAAC,WAAW;AAAA,IACzB,gBAAgB,CAAC,OAAO;AAAA,EAC1B;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,IAAI;AAAA,IACF,WAAW,CAAC,SAAS;AAAA,EACvB;AAAA,EACA,GAAG;AAAA,IACD,aAAa,CAAC,GAAG;AAAA,IACjB,gBAAgB,CAAC,GAAG;AAAA,IACpB,WAAW,CAAC,aAAa,OAAO;AAAA,EAClC;AAAA,EACA,mBAAmB;AAAA,IACjB,gBAAgB,CAAC,QAAQ;AAAA,EAC3B;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,iBAAiB;AAAA,IACf,WAAW,CAAC,iBAAiB,YAAY;AAAA,EAC3C;AAAA,EACA,QAAQ;AAAA,IACN,WAAW,CAAC,eAAe,UAAU;AAAA,EACvC;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB,CAAC,OAAO,MAAM,KAAK;AAAA,EACrC;AAAA,EACA,KAAK;AAAA,IACH,gBAAgB,CAAC,MAAM;AAAA,EACzB;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,MAAM;AAAA,IACpB,gBAAgB,CAAC,SAAS,UAAU,QAAQ,OAAO,SAAS;AAAA,EAC9D;AAAA,EACA,iBAAiB;AAAA,IACf,aAAa,CAAC,cAAc,IAAI;AAAA,IAChC,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa,CAAC;AAAA,EACd,iBAAiB;AAAA,IACf,WAAW,CAAC,eAAe;AAAA,EAC7B;AAAA,EACA,QAAQ;AAAA,IACN,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,aAAa,CAAC,KAAK;AAAA,IACnB,gBAAgB,CAAC,KAAK;AAAA,EACxB;AAAA,EACA,gBAAgB;AAAA,IACd,gBAAgB,CAAC,OAAO,MAAM;AAAA,EAChC;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAA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","names":["React","size","AutoSizer","SingleDimensionAutoSizer","React","useCallback","useRef","useState","memo","memo","FileDropTarget","useRef","useCallback","React","useCallback","useState","defaultValue","value","useRef","isDeepEqual","useCallback","useState","useEffect","useState","useEffect","useRef","React","useCallback","useLayoutEffect","useRef","useRef","useCallback","useCallback","useCallback","useMemo","useState","useCallback","useEffect","useMemo","useState","defaultValue","useEffect","useState","useRef","useCallback","useRef","noop","useRef","useCallback","useEffect","useState","useEffect","useState","React","useMemo","React","useMemo","React","PortalScopeProvider","React","memo","React","React","React","React","forwardRef","useCallback","useMemo","tailwindConfig","React","React","size","Spacer","React","React","forwardRef","forwardRef","Text","style","React","Tooltip","forwardRef","Button","style","size","useMemo","React","useCallback","IconButton","size","style","React","React","createContext","useCallback","useContext","useMemo","useRef","useState","React","forwardRef","useRef","forwardRef","React","Dialog","style","useRef","FullscreenDialog","React","createContext","forwardRef","memo","useCallback","useContext","useId","useMemo","useState","React","size","React","forwardRef","useCallback","useEffect","useLayoutEffect","useRef","useState","createContext","useContext","useEffect","forwardRef","ReadOnlyTextInput","React","ControlledTextInput","useCallback","SubmittableTextInput","useRef","useState","useLayoutEffect","useEffect","React","forwardRef","memo","memo","forwardRef","Label","React","React","useEffect","useRef","React","OpenPortalsProvider","useRef","useEffect","React","createContext","useContext","noop","InputFieldDropdownMenu","React","memo","forwardRef","InputFieldButton","style","size","useCallback","useMemo","InputFieldInput","useState","value","useId","isFocused","InputField","createContext","DialogProvider","useState","useCallback","useRef","style","children","React","useMemo","isOpen","InputField","contents","useContext","React","createContext","useContext","useMemo","useState","windows","DesignSystemConfigurationProvider","elements","separator","React","memo","KeyboardShortcut","separator","SectionHeader","React","React","useCallback","React","Components","useCallback","Components","React","React","DropdownMenuRoot","useMemo","ActionMenu","style","useMemo","React","React","ActivityIndicator","size","React","forwardRef","useMemo","size","React","style","useMemo","forwardRef","Avatar","OverflowAvatar","AvatarStack","React","forwardRef","Logo","React","forwardRef","React","forwardRef","memo","useCallback","useEffect","useRef","useRef","useEffect","memo","forwardRef","TextArea","useCallback","value","React","TextAreaRow","React","forwardRef","style","isDeepEqual","React","Children","isValidElement","useCallback","useEffect","useLayoutEffect","useRef","useState","skipInitialAnimation","React","style","React","forwardRef","React","forwardRef","BreadcrumbText","React","React","Checkbox","style","React","forwardRef","memo","React","hoverProps","memo","forwardRef","Chip","style","size","React","React","React","useImperativeHandle","useRef","useState","React","forwardRef","memo","useCallback","useEffect","useImperativeHandle","useRef","useState","React","memo","forwardRef","EditableText","style","useState","useEffect","useRef","useCallback","useImperativeHandle","InputField","value","React","createContext","forwardRef","memo","useCallback","useContext","useMemo","useKeyboardShortcuts","React","useCallback","useMemo","Components","React","useMemo","useKeyboardShortcuts","useCallback","React","ScrollArea","React","GridViewItem","style","useContext","useCallback","createContext","forwardRef","GridViewRoot","useMemo","styles","title","GridView","memo","size","Grid","useState","useImperativeHandle","useRef","React","action","props","React","memo","useImperativeHandle","useRef","useState","composeRefs","React","Children","createContext","forwardRef","isValidElement","memo","useCallback","useContext","useImperativeHandle","useLayoutEffect","useMemo","useRef","React","React","React","useMemo","createPortal","useMemo","createPortal","React","acceptsDrop","SortableItemContext","acceptsDrop","id","Sortable_","createContext","React","useRef","useLayoutEffect","InputField","forwardRef","style","ListViewRow","useContext","useCallback","useMemo","composeRefs","memo","VirtualizedListRow","VirtualizedListInner","size","useImperativeHandle","ListViewRootInner","acceptsDrop","isValidElement","ChildrenListViewInner","Children","SimpleListViewInner","ListView","React","useCallback","useContext","TreeRow","useContext","useCallback","React","TreeView","emptyArray","List","size","acceptsDrop","useState","useRef","useImperativeHandle","React","action","memo","DetailContainer","Collection","React","React","forwardRef","forwardRef","ColorSwatch","size","style","React","React","useMemo","size","style","styles","useMemo","React","DropdownChevronIcon","React","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","range","React","ComboboxMenu","style","React","Combobox","size","style","useMemo","useRef","useState","useEffect","useCallback","useImperativeHandle","React","InputField","DropdownChevronIcon","React","memo","getCurrentPlatform","React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","React","memo","memo","Divider","style","React","DividerVertical","forwardRef","SearchCompletionMenu","useState","React","useEffect","useMemo","useCallback","search","state","index","getCurrentPlatform","useRef","useImperativeHandle","InputField","memo","CommandPalette","React","size","React","React","React","useCallback","useState","DraggableMenuButton","style","useState","useCallback","React","Dialog","React","useImperativeHandle","Drawer","style","useImperativeHandle","React","React","React","React","FileExplorerCollection","size","React","forwardRef","memo","GradientType","ColorSpace","FillType","BorderPosition","BlendMode","LineCapStyle","LineJoinStyle","BlurType","PatternFillType","MarkerType","WindingRule","TextVerticalAlignment","TextHorizontalAlignment","TextTransform","UnderlineStyle","BooleanOperation","ExportFileFormat","ExportFormatNamingScheme","VisibleScaleType","AnimationType","LayerListExpanded","ResizeType","InferredLayoutAxis","InferredLayoutAnchor","PointsRadiusBehaviour","CurveMode","LineSpacingBehaviour","TextBehaviour","BundleId","NumericalBool","ClassValue","React","React","ImageDataProvider","useLayoutEffect","useMemo","Background","background","PatternPreviewBackground","size","ColorPreviewBackground","GradientPreviewBackground","FillPreviewBackground","forwardRef","React","memo","FillInputField","React","useCallback","useRef","useState","styles","size","style","rgbaToHsva","React","GradientPicker","rgbaToHsva","value","React","forwardRef","memo","InspectorContainer","style","React","LabeledElementView","React","memo","useMemo","React","memo","LabeledField","style","useMemo","React","React","memo","useMemo","languageIds","fileExtensions","fileNames","memo","MediaThumbnail","size","useMemo","React","React","forwardRef","memo","useMemo","memo","forwardRef","Message","styles","useMemo","React","React","React","React","React","memo","useMemo","style","ToggleGroupPrimitive","React","createContext","forwardRef","useCallback","useContext","useMemo","createContext","forwardRef","SegmentedControlItem","useContext","React","SegmentedControl","style","useMemo","useCallback","value","React","memo","useMemo","createPortal","SelectionToolbarContainer","size","DropdownChevronIcon","React","useMemo","useState","SelectMenuTrigger","style","React","DropdownChevronIcon","Components","SelectMenu","useState","open","useMemo","React","memo","useCallback","useMemo","memo","Slider","style","useMemo","useCallback","arrayValue","React","React","Provider","React","Switch","style","React","memo","useMemo","memo","UserPointerContainer","style","React","UserNameTag","size","UserPointer","useMemo","useKeyboardShortcuts","React","forwardRef","memo","useCallback","useImperativeHandle","useRef","useState","useEffect","useState","size","React","memo","useLayoutEffect","useRef","useState","useLayoutEffect","useRef","useRef","useLayoutEffect","memo","DrawerWorkspaceLayout","useRef","useState","useLayoutEffect","React","React","memo","useRef","memo","PanelWorkspaceLayout","useRef","React","forwardRef","WorkspaceLayout","style","React","size","useRef","useState","useCallback","useImperativeHandle","useKeyboardShortcuts","memo","PanelInner","useState","useEffect","elements","separator","isDeepEqual","isDeepEqual","React","DimensionInput","size","value","InputField","Checkbox","Section","SectionHeader","Text","Title","React","forwardRef","memo","Section","forwardRef","React","SectionHeader","Title","Checkbox","Text","RowLabel","memo","LabeledRow","React","React","useKeyboardShortcuts","React","ToolbarMenuDropdown","React","ToolbarMenuButton","ToolbarMenuItem","ToolbarMenu","useKeyboardShortcuts"]}
|