@noya-app/noya-designsystem 0.1.25 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ActivityIndicator.tsx","../src/components/Avatar.tsx","../src/components/Stack.tsx","../src/utils/breakpoints.ts","../src/utils/withSeparatorElements.ts","../src/components/Button.tsx","../src/components/Tooltip.tsx","../src/components/Chip.tsx","../src/contexts/DesignSystemConfiguration.tsx","../src/components/Toast.tsx","../src/components/IconButton.tsx","../src/components/Icons.tsx","../src/theme/dark.ts","../src/theme/light.ts","../src/mediaQuery.ts","../src/contexts/DialogContext.tsx","../src/components/Dialog.tsx","../src/components/Spacer.tsx","../src/components/InputField.tsx","../../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/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/useLateReference.ts","../../noya-react-utils/src/hooks/useLazyValue.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","../../noya-react-utils/src/utils/assignRef.ts","../src/utils/handleNudge.ts","../src/components/DropdownMenu.tsx","../src/components/internal/Menu.tsx","../src/components/internal/TextInput.tsx","../src/contexts/GlobalInputBlurContext.tsx","../src/components/Popover.tsx","../src/contexts/FloatingWindowContext.tsx","../src/hooks/useHover.ts","../src/components/ContextMenu.tsx","../src/components/Divider.tsx","../src/components/DraggableMenuButton.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/Grid.tsx","../src/components/GridView.tsx","../src/components/ScrollArea.tsx","../src/components/InputFieldWithCompletions.tsx","../src/utils/fuzzyScorer.ts","../src/components/ListView.tsx","../src/hooks/mergeEventHandlers.ts","../src/components/Sortable.tsx","../src/components/Text.tsx","../src/components/InspectorContainer.tsx","../src/components/Label.tsx","../src/components/LabeledElementView.tsx","../src/components/Progress.tsx","../src/components/RadioGroup.tsx","../src/components/Select.tsx","../src/components/SelectMenu.tsx","../src/components/Slider.tsx","../src/components/Switch.tsx","../src/components/TreeView.tsx","../src/components/WorkspaceLayout.tsx","../src/hooks/usePreservePanelSize.tsx","../src/hooks/useWindowSize.tsx","../src/hooks/usePlatform.ts","../src/utils/createSectionedMenu.ts","../src/utils/sketchPattern.ts","../src/components/ArrayController.tsx","../src/components/InspectorPrimitives.tsx","../src/components/DimensionInput.tsx"],"sourcesContent":["import React, { memo } from \"react\";\nimport styled, { keyframes } from \"styled-components\";\n\ninterface Props {\n size?: number;\n opacity?: number;\n color?: string;\n trackColor?: string;\n}\n\ninterface SpinnerProps {\n $opacity: number;\n}\n\ninterface SpinnerCircleProps {\n $size: number;\n $color: string;\n $trackColor: string;\n}\n\nconst spin = keyframes`\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n`;\n\nconst Spinner = styled.div<SpinnerProps>`\n display: flex;\n justify-content: center;\n align-items: center;\n opacity: ${({ $opacity }: SpinnerProps) => $opacity};\n`;\n\n// Use css syntax to support keyframes\nconst SpinnerCircle = styled.div<SpinnerCircleProps>`\n border: 2px solid ${({ $trackColor }) => $trackColor};\n border-top: 2px solid ${({ $color }) => $color};\n border-radius: 50%;\n width: ${({ $size }) => `${$size}px`};\n height: ${({ $size }) => `${$size}px`};\n animation: ${spin} 1s linear infinite;\n`;\n\nexport const ActivityIndicator = memo(function ActivityIndicator({\n size = 16,\n opacity = 1,\n color = \"black\",\n trackColor = \"rgba(0, 0, 0, 0.1)\",\n}: Props) {\n return (\n <Spinner $opacity={opacity}>\n <SpinnerCircle $size={size} $color={color} $trackColor={trackColor} />\n </Spinner>\n );\n});\n","import * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport React, { forwardRef } from \"react\";\nimport styled from \"styled-components\";\nimport { Stack } from \"./Stack\";\n\nconst AvatarRoot = styled(AvatarPrimitive.Root)<{\n size: number;\n overflow: number;\n}>(({ theme, size, overflow }) => ({\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n verticalAlign: \"middle\",\n overflow: \"hidden\",\n userSelect: \"none\",\n width: size,\n height: size,\n borderRadius: \"100%\",\n backgroundColor: theme.colors.inputBackground,\n ...(overflow && {\n margin: `-${overflow}px`,\n }),\n\n \"&:hover\": {\n boxShadow: `0 0 0 2px ${theme.colors.sidebar.background}`,\n opacity: 0.9,\n },\n}));\n\nconst AvatarImage = styled(AvatarPrimitive.Image)({\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n borderRadius: \"inherit\",\n});\n\nconst AvatarFallback = styled(AvatarPrimitive.Fallback)<{\n size: number;\n}>(({ theme, size }) => ({\n fontSize: \"0.8rem\",\n fontWeight: 500,\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"white\",\n lineHeight: `${size}px`,\n}));\n\nexport const Avatar = forwardRef(function Avatar(\n {\n image,\n name,\n fallback,\n size = 19,\n overflow = 0,\n ...props\n }: {\n image?: string;\n name?: string;\n fallback?: string;\n size?: number;\n overflow?: number;\n style?: React.CSSProperties;\n className?: string;\n },\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n) {\n return (\n <AvatarRoot ref={forwardedRef} size={size} overflow={overflow} {...props}>\n <AvatarImage src={image} alt={name} />\n <AvatarFallback size={size}>{fallback}</AvatarFallback>\n </AvatarRoot>\n );\n});\n\nconst AvatarStackItemWrapper = styled.div<{\n $size: number;\n}>(({ $size, theme }) => ({\n position: \"relative\",\n width: $size,\n height: $size,\n marginLeft: \"-8px\",\n // outline: `2px solid ${theme.colors.sidebar.background}`,\n borderRadius: \"50%\",\n clipPath: `circle(50%)`,\n overflow: \"hidden\",\n}));\n\nexport function AvatarStack({\n size = 19,\n children,\n}: {\n size?: number;\n children: React.ReactNode;\n}) {\n const childrenArray = React.Children.toArray(children).map((child) => {\n return React.cloneElement(child as React.ReactElement, { size });\n });\n\n return (\n <Stack.H>\n {childrenArray.map((child, index) => {\n if (index === 0) return child;\n\n return (\n <AvatarStackItemWrapper $size={size} key={index}>\n {child}\n </AvatarStackItemWrapper>\n );\n })}\n </Stack.H>\n );\n}\n","import React, {\n Children,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n memo,\n ReactHTML,\n ReactNode,\n} from \"react\";\nimport styled from \"styled-components\";\nimport { BreakpointCollection, mergeBreakpoints } from \"../utils/breakpoints\";\nimport withSeparatorElements from \"../utils/withSeparatorElements\";\n\ninterface StyleProps {\n display?: \"flex\" | \"inline-flex\" | \"none\" | \"block\";\n visibility?: CSSProperties[\"visibility\"];\n position?: CSSProperties[\"position\"];\n zIndex?: CSSProperties[\"zIndex\"];\n gap?: CSSProperties[\"gap\"];\n inset?: CSSProperties[\"inset\"];\n top?: CSSProperties[\"top\"];\n right?: CSSProperties[\"right\"];\n bottom?: CSSProperties[\"bottom\"];\n left?: CSSProperties[\"left\"];\n flexDirection?: CSSProperties[\"flexDirection\"];\n justifyContent?: CSSProperties[\"justifyContent\"];\n alignItems?: CSSProperties[\"alignItems\"];\n alignSelf?: CSSProperties[\"alignSelf\"];\n flex?: CSSProperties[\"flex\"];\n flexWrap?: CSSProperties[\"flexWrap\"];\n height?: CSSProperties[\"height\"];\n minHeight?: CSSProperties[\"minHeight\"];\n maxHeight?: CSSProperties[\"maxHeight\"];\n width?: CSSProperties[\"width\"];\n minWidth?: CSSProperties[\"minWidth\"];\n maxWidth?: CSSProperties[\"maxWidth\"];\n aspectRatio?: CSSProperties[\"aspectRatio\"];\n padding?: CSSProperties[\"padding\"];\n paddingVertical?: string | number;\n paddingHorizontal?: string | number;\n margin?: CSSProperties[\"margin\"];\n background?: CSSProperties[\"background\"];\n backgroundSize?: CSSProperties[\"backgroundSize\"];\n backgroundPosition?: CSSProperties[\"backgroundPosition\"];\n borderRadius?: CSSProperties[\"borderRadius\"];\n overflowX?: CSSProperties[\"overflowX\"];\n overflowY?: CSSProperties[\"overflowY\"];\n overflow?: CSSProperties[\"overflow\"];\n textOverflow?: CSSProperties[\"textOverflow\"];\n boxShadow?: CSSProperties[\"boxShadow\"];\n outline?: CSSProperties[\"outline\"];\n border?: CSSProperties[\"border\"];\n borderTop?: CSSProperties[\"borderTop\"];\n borderRight?: CSSProperties[\"borderRight\"];\n borderBottom?: CSSProperties[\"borderBottom\"];\n borderLeft?: CSSProperties[\"borderLeft\"];\n cursor?: CSSProperties[\"cursor\"];\n userSelect?: CSSProperties[\"userSelect\"];\n transition?: CSSProperties[\"transition\"];\n opacity?: CSSProperties[\"opacity\"];\n filter?: CSSProperties[\"filter\"];\n color?: CSSProperties[\"color\"];\n order?: CSSProperties[\"order\"];\n pointerEvents?: CSSProperties[\"pointerEvents\"];\n lineHeight?: CSSProperties[\"lineHeight\"];\n isolation?: CSSProperties[\"isolation\"];\n backdropFilter?: CSSProperties[\"backdropFilter\"];\n}\n\nexport type StackBreakpointList = BreakpointCollection<StyleProps>;\n\ninterface Props extends StyleProps {\n id?: string;\n as?: keyof ReactHTML;\n className?: string;\n children?: ReactNode;\n separator?: Parameters<typeof withSeparatorElements>[1];\n breakpoints?: StackBreakpointList | null | false;\n href?: string; // Shouldn't be here, ideally\n tabIndex?: number;\n}\n\nconst Element = styled.div<{\n $styleProps: StyleProps;\n $breakpoints?: StackBreakpointList | null | false;\n}>(({ $styleProps, $breakpoints }) => ({\n ...$styleProps,\n ...mergeBreakpoints($breakpoints || []),\n}));\n\nconst StackBase = forwardRef(function StackBase(\n {\n id,\n className,\n as,\n children,\n separator,\n breakpoints,\n tabIndex,\n href,\n ...rest\n }: Props,\n forwardedRef: ForwardedRef<HTMLElement>\n) {\n const elements = separator\n ? withSeparatorElements(Children.toArray(children), separator)\n : children;\n\n const styleProps: StyleProps = {\n display: \"flex\",\n position: \"relative\",\n alignItems: \"stretch\",\n ...rest,\n };\n\n return (\n <Element\n ref={forwardedRef as any}\n id={id}\n className={className}\n as={as}\n $styleProps={styleProps}\n $breakpoints={breakpoints}\n tabIndex={tabIndex}\n {...(href && { href })}\n >\n {elements}\n </Element>\n );\n});\n\ntype StackProps = Omit<Props, \"flexDirection\">;\n\nconst VerticalStack = memo(\n forwardRef(function VStack(\n props: StackProps,\n forwardedRef: ForwardedRef<HTMLElement>\n ) {\n return <StackBase {...props} flexDirection=\"column\" ref={forwardedRef} />;\n })\n);\n\nconst HorizontalStack = memo(\n forwardRef(function HStack(\n props: StackProps,\n forwardedRef: ForwardedRef<HTMLElement>\n ) {\n return <StackBase {...props} flexDirection=\"row\" ref={forwardedRef} />;\n })\n);\n\nexport const Stack = {\n V: VerticalStack,\n H: HorizontalStack,\n};\n","import { CSSObject } from \"styled-components\";\n\ntype BreakpointKey = number | string;\n\nexport type Breakpoint<T extends object> = [BreakpointKey, T];\n\nexport type BreakpointCollection<T extends object> =\n | Breakpoint<T>[]\n | Record<BreakpointKey, T>;\n\nexport type StyleMap = Record<string, CSSObject>;\n\nexport function mergeBreakpoints(\n breakpoints: BreakpointCollection<CSSObject>\n): StyleMap;\nexport function mergeBreakpoints<T extends object>(\n breakpoints: BreakpointCollection<T>,\n transform?: (value: T) => CSSObject\n): StyleMap;\nexport function mergeBreakpoints<T extends object>(\n breakpoints: BreakpointCollection<T>,\n transform?: (value: T) => CSSObject\n): StyleMap {\n const breakpointMap = Array.isArray(breakpoints)\n ? breakpoints.reduce(\n (result: Record<number, T>, item: any /* TODO Fix type */) => {\n const [key, value] = item;\n result[key] = result[key] ? { ...result[key], ...value } : value;\n return result;\n },\n {}\n )\n : breakpoints;\n\n const breakpointList = Object.entries(breakpointMap) as Breakpoint<T>[];\n\n const transformedList = breakpointList\n .sort((a, b) => Number(b[0]) - Number(a[0]))\n .map(([width, value]: Breakpoint<T>) => [\n `@media (min-width: ${width}px)`,\n transform?.(value) ?? value,\n ]);\n\n return Object.fromEntries(transformedList);\n}\n","import { Children, cloneElement, isValidElement, ReactNode } from \"react\";\n\nfunction createKey(key: string | number) {\n return `s-${key}`;\n}\n\nexport default function withSeparatorElements(\n elements: ReactNode,\n separator: ReactNode | (() => ReactNode)\n) {\n const childrenArray = Children.toArray(elements);\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 React, {\n CSSProperties,\n ForwardedRef,\n forwardRef,\n ReactNode,\n useCallback,\n} from \"react\";\nimport styled from \"styled-components\";\nimport { Tooltip } from \"./Tooltip\";\n\ntype ButtonVariant =\n | \"normal\"\n | \"primary\"\n | \"primaryGradient\"\n | \"secondary\"\n | \"secondaryBright\"\n | \"white\"\n | \"thin\"\n | \"floating\"\n | \"none\";\n\ntype ButtonSize = \"normal\" | \"large\";\n\n/* ----------------------------------------------------------------------------\n * Element\n * ------------------------------------------------------------------------- */\n\nexport const ButtonElement = styled.button<{\n $active: boolean;\n $variant: ButtonVariant;\n $size: ButtonSize;\n $flex?: CSSProperties[\"flex\"];\n $defaultBackground?: string;\n}>(\n ({\n theme,\n $active,\n disabled,\n $variant,\n $size,\n $flex,\n $defaultBackground = theme.colors.inputBackground,\n }) => ({\n ...($size === \"large\"\n ? theme.textStyles.heading4\n : theme.textStyles.button),\n textDecoration: \"none\",\n lineHeight: \"1\",\n flex: $flex ?? \"0 0 auto\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n WebkitAppRegion: \"no-drag\",\n userSelect: \"none\",\n minWidth: $variant === \"normal\" ? \"31px\" : undefined,\n textAlign: \"left\",\n borderRadius: \"4px\",\n paddingTop: $variant === \"none\" ? \"0px\" : \"4px\",\n paddingRight:\n $variant === \"none\" ? \"0px\" : $variant === \"thin\" ? \"1px\" : \"6px\",\n paddingBottom: $variant === \"none\" ? \"0px\" : \"4px\",\n paddingLeft:\n $variant === \"none\" ? \"0px\" : $variant === \"thin\" ? \"1px\" : \"6px\",\n ...($size === \"large\" && {\n paddingTop: \"12px\",\n paddingRight: \"16px\",\n paddingBottom: \"12px\",\n paddingLeft: \"16px\",\n }),\n background: $active\n ? theme.colors.primary\n : $variant === \"primaryGradient\"\n ? `linear-gradient(90deg, ${theme.colors.primary}, ${theme.colors.primaryLight})`\n : $variant === \"none\" || $variant === \"thin\"\n ? \"transparent\"\n : $defaultBackground,\n color: $active ? \"white\" : theme.colors.text,\n opacity: disabled ? 0.25 : 1,\n \"&:focus\": {\n outline: `2px solid ${theme.colors.primary}`,\n boxShadow: `0 0 0 1px ${theme.colors.popover.background} inset`,\n },\n \"&:hover\": {\n background:\n $variant === \"primaryGradient\" || $active\n ? theme.colors.primaryLight\n : theme.colors.inputBackgroundLight,\n },\n \"&:active\": {\n background:\n $variant === \"primaryGradient\" || $active\n ? theme.colors.primary\n : theme.colors.activeBackground,\n },\n ...($variant === \"primary\" && {\n background: theme.colors.primary,\n color: \"white\",\n \"&:hover\": {\n background: theme.colors.primaryLight,\n },\n \"&:active\": {\n background: theme.colors.primary,\n },\n }),\n ...($variant === \"secondary\" && {\n background: theme.colors.secondary,\n color: \"white\",\n \"&:hover\": {\n background: theme.colors.secondaryLight,\n },\n \"&:active\": {\n background: theme.colors.secondary,\n },\n }),\n ...($variant === \"secondaryBright\" && {\n background: \"#0ab557\",\n color: \"white\",\n \"&:hover\": {\n opacity: 0.8,\n },\n \"&:active\": {\n opacity: 0.9,\n },\n }),\n ...($variant === \"white\" && {\n background: \"white\",\n \"&:hover\": {\n opacity: 0.8,\n },\n \"&:active\": {\n opacity: 0.9,\n },\n }),\n ...($variant === \"floating\" && {\n background: \"white\",\n color: theme.colors.text,\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.1)\",\n fontSize: \"12px\",\n padding: \"0px 4px\",\n }),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n\n \"& *\": {\n pointerEvents: \"none\",\n },\n })\n);\n\n/* ----------------------------------------------------------------------------\n * Content\n * ------------------------------------------------------------------------- */\n\nconst ButtonContent = styled.span(({ theme }) => ({\n // Line height of small text - maybe figure out better way to ensure\n // icons don't have a smaller height\n minHeight: \"19px\",\n display: \"flex\",\n alignItems: \"center\",\n flex: \"1\",\n justifyContent: \"center\",\n\n // Helps with alignment with the default small text\n lineHeight: \"15px\",\n}));\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nexport interface ButtonRootProps {\n id?: string;\n className?: string;\n style?: CSSProperties;\n flex?: CSSProperties[\"flex\"];\n tabIndex?: number;\n children: ReactNode;\n active?: boolean;\n disabled?: boolean;\n variant?: ButtonVariant;\n size?: ButtonSize;\n tooltip?: ReactNode;\n onClick?: (event: React.MouseEvent) => void;\n onPointerDown?: (event: React.PointerEvent) => void;\n contentStyle?: CSSProperties;\n defaultBackground?: string;\n as?: React.ElementType;\n href?: string;\n target?: string;\n rel?: string;\n}\n\nexport const Button = forwardRef(function Button(\n {\n id,\n className,\n style,\n flex,\n tabIndex,\n tooltip,\n active = false,\n disabled = false,\n variant = \"normal\",\n size = \"normal\",\n contentStyle,\n defaultBackground,\n onClick,\n children,\n ...rest // Propagate any other props so this component works as a Slot\n }: ButtonRootProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const buttonElement = (\n <ButtonElement\n ref={forwardedRef}\n id={id}\n className={className}\n style={style}\n $flex={flex}\n tabIndex={tabIndex}\n $active={active}\n disabled={disabled}\n $variant={variant}\n $size={size}\n $defaultBackground={defaultBackground}\n onClick={onClick}\n // Prevent double clicking a button from triggering any callbacks in ancestors\n onDoubleClick={useCallback((event: React.MouseEvent) => {\n event.stopPropagation();\n }, [])}\n {...rest}\n >\n <ButtonContent style={contentStyle}>{children}</ButtonContent>\n </ButtonElement>\n );\n\n return tooltip ? (\n <Tooltip content={tooltip}>{buttonElement}</Tooltip>\n ) : (\n buttonElement\n );\n});\n","import * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport React, { memo, ReactNode } from 'react';\nimport styled from 'styled-components';\n\n// const Arrow = styled(TooltipPrimitive.Arrow)(({ theme }) => ({\n// fill: theme.colors.popover.background,\n// }));\n\nconst Content = styled(TooltipPrimitive.Content)(({ theme }) => ({\n ...theme.textStyles.small,\n color: theme.colors.text,\n borderRadius: 3,\n padding: `${theme.sizes.spacing.small}px ${theme.sizes.spacing.medium}px`,\n backgroundColor: theme.colors.popover.background,\n boxShadow: '0 2px 4px rgba(0,0,0,0.2), 0 0 12px rgba(0,0,0,0.1)',\n border: `1px solid ${theme.colors.dividerStrong}`,\n}));\n\ninterface Props {\n children: ReactNode;\n content: ReactNode;\n}\n\nexport const Tooltip = memo(function Tooltip({ children, content }: Props) {\n return (\n <TooltipPrimitive.Provider>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <Content\n side=\"bottom\"\n align=\"center\"\n sideOffset={2}\n collisionPadding={8}\n >\n {content}\n {/* <Arrow /> */}\n </Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n});\n","import { Cross1Icon, PlusIcon } from \"@noya-app/noya-icons\";\nimport React, { forwardRef, memo } from \"react\";\nimport styled from \"styled-components\";\nimport { useDesignSystemTheme } from \"../contexts/DesignSystemConfiguration\";\nimport { useHover } from \"../hooks/useHover\";\n\ntype ChipColorScheme = \"primary\" | \"secondary\" | \"error\";\ntype ChipSize = \"small\" | \"medium\" | \"large\";\ntype ChipVariant = \"solid\" | \"outlined\" | \"ghost\";\n\nconst ChipElement = styled.span<{\n $colorScheme?: ChipColorScheme;\n $size: ChipSize;\n $monospace: boolean;\n $variant: ChipVariant;\n $isInteractive: boolean;\n}>(({ theme, $colorScheme, $size, $variant, $monospace, $isInteractive }) => {\n const color =\n $colorScheme === \"primary\"\n ? theme.colors.primary\n : $colorScheme === \"secondary\"\n ? theme.colors.secondary\n : theme.colors.text;\n\n const backgroundColor =\n $colorScheme === \"primary\"\n ? \"rgb(238, 229, 255)\"\n : $colorScheme === \"secondary\"\n ? \"rgb(205, 238, 231)\"\n : $colorScheme === \"error\"\n ? \"rgb(255, 219, 219)\"\n : theme.colors.inputBackground;\n\n const subtleColor =\n $colorScheme === \"primary\"\n ? \"rgba(238, 229, 255, 0.2)\"\n : $colorScheme === \"secondary\"\n ? \"rgba(205, 238, 231, 0.2)\"\n : $colorScheme === \"error\"\n ? \"rgba(255, 219, 219, 0.2)\"\n : \"rgba(0, 0, 0, 0.1)\";\n\n return {\n textTransform: \"initial\",\n borderRadius: 4,\n userSelect: \"none\",\n display: \"inline-flex\",\n alignItems: \"center\",\n // lineHeight: \"1.4\",\n lineHeight: \"15px\",\n whiteSpace: \"pre\",\n ...($size === \"large\"\n ? {\n fontSize: \"11px\",\n padding: \"4px 8px\",\n }\n : $size === \"medium\"\n ? {\n fontSize: \"10px\",\n padding: \"2px 6px\",\n }\n : {\n fontSize: \"9px\",\n padding: \"0px 4px\",\n }),\n ...($monospace && {\n fontFamily: theme.fonts.monospace,\n }),\n ...($variant === \"solid\"\n ? {\n color,\n backgroundColor,\n }\n : $variant === \"outlined\"\n ? {\n color,\n backgroundColor: \"transparent\",\n boxShadow: `0 0 0 1px ${subtleColor} inset`,\n }\n : {}),\n \"&:hover\": {\n ...($variant === \"outlined\" && {\n backgroundColor: subtleColor,\n boxShadow: \"none\",\n }),\n },\n ...($isInteractive && {\n cursor: \"pointer\",\n \"&:hover\": {\n opacity: 0.85,\n },\n }),\n };\n});\n\nconst DeleteElement = styled(Cross1Icon)<{\n size: ChipSize;\n}>(({ size }) => ({\n position: \"relative\",\n marginRight: \"-2px\",\n cursor: \"pointer\",\n opacity: 0.5,\n\n ...(size === \"large\"\n ? {\n marginLeft: \"2px\",\n // top: '-1px',\n transform: \"scale(0.75)\",\n }\n : {\n transform: \"scale(0.6)\",\n }),\n\n \"&:hover\": {\n opacity: 0.85,\n },\n}));\n\nconst ignoredProps = new Set([\"size\", \"isOnlyChild\"]);\n\nconst AddElement = styled(PlusIcon).withConfig({\n shouldForwardProp: (prop) => !ignoredProps.has(prop),\n})<{\n size: ChipSize;\n isOnlyChild: boolean;\n}>(({ size, isOnlyChild }) => ({\n position: \"relative\",\n marginLeft: \"-2px\",\n cursor: \"pointer\",\n opacity: 0.5,\n\n ...(size === \"large\"\n ? {\n marginRight: \"2px\",\n top: \"-1px\",\n transform: \"scale(0.75)\",\n }\n : {\n marginRight: \"-2px\",\n transform: \"scale(0.6)\",\n }),\n\n \"&:hover\": {\n opacity: 0.85,\n },\n}));\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}\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 ...rest\n }: ChipProps,\n forwardedRef: React.ForwardedRef<HTMLSpanElement>\n ) {\n const theme = useDesignSystemTheme();\n\n const { hoverProps: hoverDeleteProps } = useHover({\n onHoverChange: onHoverDeleteChange,\n });\n\n const handleClick = !children && !deletable && addable ? onAdd : onClick;\n\n const color =\n colorScheme === \"primary\"\n ? theme.colors.primary\n : colorScheme === \"secondary\"\n ? theme.colors.secondary\n : theme.colors.text;\n\n return (\n <ChipElement\n ref={forwardedRef}\n $variant={variant}\n $colorScheme={colorScheme}\n style={style}\n onClick={handleClick}\n $size={size}\n $monospace={monospace}\n $isInteractive={!!handleClick || clickable === true}\n tabIndex={tabIndex}\n {...rest}\n >\n {addable && (\n <AddElement\n size={size}\n isOnlyChild={!children && !deletable}\n onClick={\n onAdd\n ? (event) => {\n event.stopPropagation();\n onAdd?.();\n }\n : undefined\n }\n color={color}\n />\n )}\n {children}\n {deletable && (\n <DeleteElement\n size={size}\n {...(hoverDeleteProps as any)}\n onClick={\n onDelete\n ? (event) => {\n event.stopPropagation();\n onDelete?.();\n }\n : undefined\n }\n color={color}\n />\n )}\n </ChipElement>\n );\n })\n);\n","import { getCurrentPlatform, PlatformName } from \"@noya-app/noya-keymap\";\nimport React, {\n createContext,\n memo,\n ReactNode,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { ThemeProvider, useTheme } from \"styled-components\";\nimport { ToastProvider } from \"../components/Toast\";\nimport { Theme } from \"../theme\";\nimport * as darkTheme from \"../theme/dark\";\nimport * as lightTheme from \"../theme/light\";\nimport { DialogProvider } from \"./DialogContext\";\nimport { FloatingWindowProvider } from \"./FloatingWindowContext\";\n\nexport const DesignSystemThemeProvider = memo(\n function DesignSystemThemeProvider({\n children,\n theme,\n }: {\n children: ReactNode;\n theme?: Theme;\n }) {\n let parentTheme: Theme | undefined;\n\n try {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n parentTheme = useTheme();\n } catch (e) {\n // console.error(e);\n }\n\n if (theme) {\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n } else if (parentTheme) {\n return children;\n } else {\n return <ThemeProvider theme={lightTheme}>{children}</ThemeProvider>;\n }\n }\n);\n\nexport type DesignSystemConfigurationContextValue = {\n platform: PlatformName;\n};\n\nconst DesignSystemConfigurationContext =\n createContext<DesignSystemConfigurationContextValue>({\n platform: \"key\",\n });\n\nexport const DesignSystemConfigurationProvider = memo(\n function DesignSystemConfigurationProvider({\n children,\n theme,\n platform,\n }: {\n children: ReactNode;\n theme?: Theme | \"light\" | \"dark\";\n platform?: PlatformName;\n }) {\n const [internalPlatform, setInternalPlatform] = useState<PlatformName>(\n platform ?? \"key\"\n );\n\n useEffect(() => {\n if (platform !== undefined) return;\n\n if (typeof navigator !== \"undefined\") {\n setInternalPlatform(getCurrentPlatform(navigator));\n }\n }, [platform]);\n\n const contextValue = useMemo(\n () => ({ platform: platform ?? internalPlatform }),\n [platform, internalPlatform]\n );\n\n const resolvedTheme =\n theme === \"light\"\n ? lightTheme\n : theme === \"dark\"\n ? darkTheme\n : theme ?? lightTheme;\n\n return (\n <DesignSystemConfigurationContext.Provider value={contextValue}>\n <ThemeProvider theme={resolvedTheme}>\n <DialogProvider>\n <ToastProvider>\n <FloatingWindowProvider>{children}</FloatingWindowProvider>\n </ToastProvider>\n </DialogProvider>\n </ThemeProvider>\n </DesignSystemConfigurationContext.Provider>\n );\n }\n);\n\nexport function useDesignSystemConfiguration(): DesignSystemConfigurationContextValue {\n return useContext(DesignSystemConfigurationContext);\n}\n\nexport function useDesignSystemTheme() {\n return useTheme();\n}\n","import * as ToastPrimitive from '@radix-ui/react-toast';\nimport React, { ReactNode } from 'react';\nimport styled from 'styled-components';\nimport { IconButton } from './IconButton';\n\nconst ToastViewport = styled(ToastPrimitive.Viewport)({\n position: 'fixed',\n bottom: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 20,\n gap: 10,\n minWidth: 200,\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 2147483647,\n outline: 'none',\n});\n\nconst ToastRoot = styled(ToastPrimitive.Root)(({ theme }) => ({\n borderRadius: 4,\n fontSize: 14,\n backgroundColor: theme.colors.popover.background,\n boxShadow: '0 2px 4px rgba(0,0,0,0.2), 0 0 12px rgba(0,0,0,0.1)',\n color: theme.colors.textMuted,\n\n padding: '8px 10px',\n display: 'grid',\n gridTemplateAreas: '\"title action\" \"description action\"',\n gridTemplateColumns: 'auto max-content',\n columnGap: 10,\n alignItems: 'center',\n}));\n\nconst ToastTitle = styled(ToastPrimitive.Title)(({ theme }) => ({\n gridArea: 'title',\n marginBottom: 5,\n ...theme.textStyles.label,\n fontWeight: 'bold',\n color: theme.colors.text,\n}));\n\nconst ToastDescription = styled(ToastPrimitive.Description)(({ theme }) => ({\n gridArea: 'description',\n ...theme.textStyles.small,\n color: theme.colors.textMuted,\n}));\n\nconst ToastAction = styled(ToastPrimitive.Action)({\n gridArea: 'action',\n});\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 <ToastRoot {...props}>\n {title && <ToastTitle>{title}</ToastTitle>}\n <ToastDescription>{content}</ToastDescription>\n {children && (\n <ToastAction asChild altText=\"\">\n {children}\n </ToastAction>\n )}\n <ToastPrimitive.Close aria-label=\"Close\" asChild>\n <IconButton iconName=\"Cross1Icon\" />\n </ToastPrimitive.Close>\n </ToastRoot>\n );\n};\n\nexport const ToastProvider = ({ children }: { children: React.ReactNode }) => (\n <ToastPrimitive.Provider>\n {children}\n <ToastViewport />\n </ToastPrimitive.Provider>\n);\n","import React, {\n CSSProperties,\n ForwardedRef,\n forwardRef,\n memo,\n useMemo,\n} from \"react\";\nimport { useTheme } from \"styled-components\";\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?: CSSProperties;\n selected?: boolean;\n color?: string;\n size?: number;\n};\n\nexport const IconButton = memo(\n forwardRef(function IconButton(\n { selected, iconName, color, size, contentStyle, ...props }: Props,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n ) {\n const { icon: iconColor, iconSelected: iconSelectedColor } =\n useTheme().colors;\n\n const Icon = Icons[iconName];\n\n const style = useMemo((): 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={color ?? (selected ? iconSelectedColor : iconColor)}\n {...(size && { width: size, height: size })}\n />\n </Button>\n );\n })\n);\n","import * as Icons from \"@noya-app/noya-icons\";\nimport React, { ReactNode } from \"react\";\n\nexport type IconName = keyof typeof Icons;\n\nexport { Icons };\n\nexport function renderIcon(\n iconName: Exclude<ReactNode, string> | IconName\n): ReactNode {\n if (typeof iconName === \"string\") {\n const Icon = Icons[iconName as IconName];\n\n return <Icon />;\n }\n\n return iconName;\n}\n","import produce from \"immer\";\nimport * as lightTheme from \"./light\";\n\nexport const name: string = \"dark\";\n\nexport const colors = produce(lightTheme.colors, (colors) => {\n colors.logo.fill = \"rgb(248,248,250)\";\n colors.logo.highlight = \"rgb(248,248,250)\";\n colors.text = \"rgb(248,248,250)\";\n colors.textMuted = \"rgb(180,179,182)\";\n colors.textDisabled = \"rgb(100,99,102)\";\n colors.inputBackground = \"rgba(181,178,255,0.08)\";\n colors.inputBackgroundLight = \"rgba(181,178,255,0.10)\";\n colors.codeBackground = \"rgb(20,19,23)\";\n colors.dividerSubtle = \"rgba(255,255,255,0.04)\";\n colors.divider = \"rgba(255,255,255,0.08)\";\n colors.dividerStrong = \"rgba(0,0,0,1)\";\n colors.primary = \"rgb(119, 66, 255)\";\n colors.primaryLight = \"rgb(134, 86, 255)\";\n colors.secondaryBright = \"#36fe91\";\n colors.canvas.background = \"rgb(20,19,23)\";\n colors.canvas.sliceOutline = \"rgb(150,150,150)\";\n colors.canvas.grid = \"rgba(0,0,0,0.1)\";\n colors.sidebar.background = \"rgb(34,33,39)\";\n colors.sidebar.backgroundTransparent = \"rgba(34,33,39,0.95)\";\n colors.popover.background = \"rgba(34,33,39,1)\";\n colors.popover.divider = colors.divider;\n colors.listView.raisedBackground = \"rgba(181,178,255,0.1)\";\n colors.listView.editingBackground = \"#000\";\n colors.slider.background = \"#BBB\";\n colors.radioGroup.background = colors.inputBackground;\n colors.mask = \"rgb(102,187,106)\";\n colors.transparentChecker = \"rgba(255,255,255,0.3)\";\n colors.scrollbar = \"rgba(199,199,199,0.2)\";\n colors.placeholderDots = \"rgba(255,255,255,0.3)\";\n colors.dragOutline = \"white\";\n colors.activeBackground = \"rgba(181,178,255,0.08)\";\n colors.thumbnailBackground = \"#1f1d33\";\n colors.thumbnailShadow = \"#1f1d3366\";\n colors.breadcrumb.text = colors.textMuted;\n colors.breadcrumb.textHover = colors.textSubtle;\n colors.breadcrumb.icon = colors.icon;\n});\n\nexport { fonts, sizes, textStyles } from \"./light\";\n","import { CSSObject } from \"styled-components\";\nimport { mediaQuery } from \"../mediaQuery\";\n\nexport const name: string = \"light\";\n\nexport const colors = {\n logo: {\n fill: \"rgb(175,175,175)\",\n highlight: \"rgb(175,175,175)\",\n },\n text: \"rgb(38, 48, 83)\",\n textMuted: \"rgb(85, 85, 85)\",\n textSubtle: \"rgb(121, 121, 121)\",\n textDisabled: \"rgb(160, 160, 160)\",\n textDecorativeLight: \"rgb(168, 185, 212)\",\n dividerSubtle: \"rgba(0, 0, 0, 0.04)\",\n divider: \"rgba(0, 0, 0, 0.07)\",\n dividerStrong: \"rgba(0, 0, 0, 0.09)\",\n primary: \"rgb(132, 63, 255)\",\n primaryLight: \"rgb(147, 86, 255)\",\n secondary: \"rgb(0, 151, 117)\",\n secondaryLight: \"rgb(0, 160, 129)\",\n secondaryBright: \"#0ab557\",\n warning: \"rgb(251, 211, 0)\",\n neutralBackground: \"rgb(222,223,232)\",\n inputBackground: \"rgb(240, 240, 242)\",\n inputBackgroundLight: \"rgb(243, 243, 245)\",\n codeBackground: \"rgb(250, 250, 250)\",\n codeBackgroundLight: \"rgb(250, 250, 250)\",\n get codeBackgroundDark() {\n return colors.text;\n },\n codeBackgroundDecorativeDark: \"#435080\",\n selectedBackground: \"rgb(242, 245, 250)\",\n transparentChecker: \"rgba(255,255,255,0.8)\",\n activeBackground: \"rgba(0,0,0,0.1)\",\n scrollbar: \"rgba(199,199,199,0.8)\",\n placeholderDots: \"rgba(0,0,0,0.3)\",\n breadcrumb: {\n get text() {\n return colors.textMuted;\n },\n get textHover() {\n return colors.textSubtle;\n },\n get icon() {\n return colors.icon;\n },\n },\n listView: {\n raisedBackground: \"rgba(0,0,0,0.03)\",\n editingBackground: \"#fff\",\n },\n canvas: {\n background: \"rgb(249,249,249)\",\n get selectionStroke() {\n return colors.primary;\n },\n dragHandleStroke: \"rgba(180,180,180,0.5)\",\n measurement: \"rgb(207,92,42)\",\n sliceOutline: \"rgb(210,210,210)\",\n grid: \"rgba(0,0,0,0.05)\",\n },\n sidebar: {\n background: \"rgb(252,252,252)\",\n backgroundTransparent: \"rgba(252,252,252,0.85)\",\n },\n popover: {\n background: \"rgb(252,252,252)\",\n divider: \"transparent\",\n },\n slider: {\n background: \"white\",\n border: \"#BBB\",\n },\n radioGroup: {\n background: \"white\",\n },\n icon: \"rgb(139, 139, 139)\",\n iconSelected: \"rgb(220, 220, 220)\",\n mask: \"rgb(12,193,67)\",\n imageOverlay:\n \"linear-gradient(0deg, rgba(132, 63, 255,0.55), rgba(132, 63, 255,0.55))\",\n get dragOutline() {\n return colors.primary;\n },\n selection: \"rgb(179,215,254)\",\n thumbnailBackground: \"#f0efff\",\n thumbnailShadow: \"#D3CEED66\",\n};\n\nexport const fonts = {\n normal:\n \"'__Inter_6b0edc', '__Inter_Fallback_6b0edc', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif\",\n monospace: \"Menlo, Monaco, Consolas, 'Courier New', monospace\",\n};\n\n// The last one, 0.85, I just eyeballed\nconst typeScale = [3.052, 2.441, 1.953, 1.563, 1.25, 1, 0.85]; // Major third\n\nexport const textStyles = {\n title: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[0]}rem`,\n fontWeight: \"bold\",\n lineHeight: \"1.4\",\n letterSpacing: \"-0.05em\",\n [mediaQuery.small]: {\n fontSize: \"36px\",\n },\n } as CSSObject,\n subtitle: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[3]}rem`,\n fontWeight: 500,\n lineHeight: \"1.75\",\n letterSpacing: \"-0.05em\",\n [mediaQuery.small]: {\n fontSize: \"18px\",\n },\n } as CSSObject,\n heading1: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[2]}rem`,\n fontWeight: 500,\n lineHeight: \"1.75\",\n letterSpacing: \"-0.025em\",\n } as CSSObject,\n heading2: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[3]}rem`,\n fontWeight: 500,\n lineHeight: \"1.75\",\n letterSpacing: \"-0.025em\",\n } as CSSObject,\n heading3: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[4]}rem`,\n fontWeight: 500,\n lineHeight: \"1.75\",\n letterSpacing: \"-0.025em\",\n } as CSSObject,\n heading4: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[5]}rem`,\n fontWeight: 500,\n lineHeight: \"1.75\",\n } as CSSObject,\n heading5: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[6]}rem`,\n fontWeight: 500,\n lineHeight: \"1.75\",\n } as CSSObject,\n body: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[5]}rem`,\n fontWeight: 400,\n lineHeight: \"1.75\",\n } as CSSObject,\n small: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[6]}rem`,\n fontWeight: 400,\n lineHeight: \"19px\",\n // lineHeight: \"1.4\",\n } as CSSObject,\n button: {\n fontFamily: fonts.normal,\n fontSize: \"0.8rem\",\n fontWeight: 500,\n lineHeight: \"1.4\",\n letterSpacing: \"-0.2px\",\n } as CSSObject,\n code: {\n fontFamily: fonts.monospace,\n fontSize: \"90%\",\n lineHeight: \"1.5\",\n } as CSSObject,\n label: {\n fontFamily: fonts.normal,\n fontSize: \"0.62rem\",\n fontWeight: 400,\n lineHeight: \"19px\",\n // lineHeight: \"1.4\",\n textTransform: \"uppercase\",\n letterSpacing: \"-0.3px\",\n } as CSSObject,\n};\n\nexport const sizes = {\n sidebarWidth: 260,\n toolbar: {\n height: 46,\n itemSeparator: 8,\n },\n inspector: {\n horizontalSeparator: 8,\n verticalSeparator: 10,\n },\n spacing: {\n nano: 2,\n micro: 4,\n small: 8,\n medium: 16,\n large: 32,\n xlarge: 64,\n xxlarge: 128,\n },\n dialog: {\n padding: 16,\n },\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 React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styled from \"styled-components\";\nimport { Button } from \"../components/Button\";\nimport { Dialog, IDialog } from \"../components/Dialog\";\nimport { InputField } from \"../components/InputField\";\nimport { Spacer } from \"../components/Spacer\";\n\nexport const Row = styled.div(({ theme }) => ({\n flex: \"1\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n}));\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\nexport type DialogContextValue = {\n openInputDialog(\n title: string,\n inputValue?: string\n ): Promise<string | undefined>;\n\n containsElement(element: HTMLElement): boolean;\n};\n\nconst DialogContext = createContext<DialogContextValue | undefined>(undefined);\n\nexport const DialogProvider = function DialogProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const [contents, setContents] = useState<\n | {\n title: string;\n inputValue: string;\n resolve: (value: string | undefined) => void;\n }\n | undefined\n >();\n\n const isOpen = !!contents;\n\n const close = useCallback(() => {\n if (!contents) return;\n\n contents.resolve(undefined);\n }, [contents]);\n\n const submit = useCallback(() => {\n if (!contents || !contents.inputValue) return;\n\n contents.resolve(contents.inputValue);\n setContents(undefined);\n }, [contents]);\n\n const open: DialogContextValue[\"openInputDialog\"] = useCallback(\n (title, inputValue = \"\") => {\n const { promise, resolve } = createDeferredPromise<string | undefined>();\n\n setContents({\n title,\n inputValue,\n resolve: (value) => {\n resolve(value);\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 () => ({ openInputDialog: open, containsElement }),\n [containsElement, open]\n )}\n >\n {children}\n </DialogContext.Provider>\n <Dialog\n ref={dialogRef}\n title={contents?.title}\n open={isOpen}\n onOpenChange={useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n close();\n }\n },\n [close]\n )}\n onOpenAutoFocus={useCallback((event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n\n inputRef.current?.focus();\n\n // Select the entire input value\n inputRef.current?.setSelectionRange(0, inputRef.current.value.length);\n }, [])}\n >\n <InputField.Root>\n <InputField.Input\n ref={inputRef}\n value={contents?.inputValue ?? \"\"}\n onChange={(value) => {\n setContents((contents) =>\n contents\n ? {\n ...contents,\n inputValue: value,\n }\n : undefined\n );\n }}\n onKeyDown={handleKeyDown}\n />\n </InputField.Root>\n <Spacer.Vertical size={20} />\n <Row>\n <Spacer.Horizontal />\n <Button onClick={close}>Cancel</Button>\n <Spacer.Horizontal size={16} />\n <Button disabled={!contents?.inputValue} onClick={submit}>\n Submit\n </Button>\n </Row>\n </Dialog>\n </>\n );\n};\n\nfunction useDialog(): 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 useDialog().openInputDialog;\n}\n\nexport function useDialogContainsElement() {\n return useDialog().containsElement;\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 styled from \"styled-components\";\nimport { IconButton } from \"./IconButton\";\nimport { Spacer } from \"./Spacer\";\n\nconst StyledOverlay = styled(DialogPrimitive.Overlay)({\n backgroundColor: \"rgba(0,0,0,0.5)\",\n position: \"fixed\",\n inset: 0,\n});\n\nconst StyledContent = styled(DialogPrimitive.Content)(({ theme }) => ({\n boxShadow:\n \"hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px\",\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"90vw\",\n maxWidth: \"450px\",\n maxHeight: \"85vh\",\n padding: theme.sizes.dialog.padding,\n borderRadius: 2,\n ...theme.textStyles.small,\n backgroundColor: theme.colors.popover.background,\n overflowY: \"auto\",\n color: theme.colors.textMuted,\n \"&:focus\": { outline: \"none\" },\n pointerEvents: \"all\",\n zIndex: 1000,\n}));\n\nconst StyledTitle = styled(DialogPrimitive.Title)(({ theme }) => ({\n margin: 0,\n ...theme.textStyles.body,\n color: theme.colors.text,\n}));\n\nconst StyledDescription = styled(DialogPrimitive.Description)(({ theme }) => ({\n margin: 0,\n ...theme.textStyles.small,\n color: theme.colors.textMuted,\n}));\n\nexport const CloseButtonContainer = styled.div(({ theme }) => ({\n position: \"absolute\",\n top: theme.sizes.dialog.padding,\n right: theme.sizes.dialog.padding,\n zIndex: 1,\n backgroundColor: theme.colors.popover.background,\n padding: \"4px 6px\",\n borderRadius: \"2px\",\n // boxShadow: `0 0 2px rgba(0, 0, 0, 0.2)`,\n border: `1px solid rgba(128,128,128,0.2)`,\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}\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 }: 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\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 {...(closeOnInteractOutside === false && {\n onPointerDownOutside: (event) => {\n event.preventDefault();\n },\n onInteractOutside: (event) => {\n event.preventDefault();\n },\n })}\n >\n <CloseButtonContainer>\n <DialogPrimitive.Close asChild>\n <IconButton iconName=\"Cross1Icon\" />\n </DialogPrimitive.Close>\n </CloseButtonContainer>\n {title && (\n <>\n <StyledTitle>{title}</StyledTitle>\n <Spacer.Vertical size={description ? 10 : 20} />\n </>\n )}\n {description && (\n <>\n <Spacer.Vertical size={10} />\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 style={{\n width: \"100%\",\n height: \"100%\",\n maxWidth: \"100%\",\n maxHeight: \"100%\",\n top: \"0\",\n left: \"0\",\n transform: \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n padding: 0,\n ...style,\n }}\n {...rest}\n />\n );\n});\n","/* eslint-disable react/jsx-pascal-case */\nimport React, { ForwardedRef, forwardRef } from \"react\";\nimport styled from \"styled-components\";\n\ninterface Props {\n size?: number | string;\n inline?: boolean;\n}\n\ninterface Props_ {\n $size?: number | string;\n $inline?: boolean;\n}\n\n/* ----------------------------------------------------------------------------\n * Vertical\n * ------------------------------------------------------------------------- */\n\nconst SpacerVertical_ = styled.span<Props_>(({ $size, $inline }) => ({\n display: $inline ? \"inline-block\" : \"block\",\n ...($size === undefined ? { flex: 1 } : { minHeight: $size }),\n}));\n\nconst SpacerVertical = forwardRef<HTMLSpanElement, Props>(\n ({ size, inline, ...props }, ref: ForwardedRef<HTMLSpanElement>) => {\n return (\n <SpacerVertical_ $size={size} $inline={inline} {...props} ref={ref} />\n );\n }\n);\n\n/* ----------------------------------------------------------------------------\n * Horizontal\n * ------------------------------------------------------------------------- */\n\nconst SpacerHorizontal_ = styled.span<Props_>(({ $size, $inline }) => ({\n display: $inline ? \"inline-block\" : \"block\",\n ...($size === undefined ? { flex: 1 } : { minWidth: $size }),\n}));\n\nconst SpacerHorizontal = forwardRef<HTMLSpanElement, Props>(\n ({ size, inline, ...props }, ref: ForwardedRef<HTMLSpanElement>) => {\n return (\n <SpacerHorizontal_ $size={size} $inline={inline} {...props} ref={ref} />\n );\n }\n);\n\nexport namespace Spacer {\n export const Vertical = SpacerVertical;\n export const Horizontal = SpacerHorizontal;\n}\n","import { CaretDownIcon } from \"@noya-app/noya-icons\";\nimport { assignRef } from \"@noya-app/react-utils\";\nimport { Property } from \"csstype\";\nimport React, {\n Children,\n createContext,\n ForwardedRef,\n forwardRef,\n isValidElement,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styled from \"styled-components\";\nimport handleNudge from \"../utils/handleNudge\";\nimport { Button } from \"./Button\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport { MenuItem } from \"./internal/Menu\";\nimport TextInput, { TextInputProps } from \"./internal/TextInput\";\nimport { Popover } from \"./Popover\";\nimport { Stack } from \"./Stack\";\n\ntype LabelPosition = \"start\" | \"end\";\n\nexport type InputFieldSize = \"small\" | \"medium\" | \"large\";\n\ntype InputFieldContextValue = {\n labelPosition: LabelPosition;\n labelSize: number;\n hasLabel: boolean;\n hasDropdown: boolean;\n size: InputFieldSize;\n isFocused: boolean;\n onFocusChange: (isFocused: boolean) => void;\n inputRef?: ForwardedRef<HTMLInputElement>;\n setInputRef?: (ref: ForwardedRef<HTMLInputElement>) => void;\n setLabelWidth?: (width: number) => void;\n};\n\nconst InputFieldContext = createContext<InputFieldContextValue>({\n labelPosition: \"end\",\n labelSize: 6,\n hasLabel: false,\n hasDropdown: false,\n size: \"medium\",\n isFocused: false,\n onFocusChange: () => {},\n});\n\n/* ----------------------------------------------------------------------------\n * Label\n * ------------------------------------------------------------------------- */\n\nconst LabelContainer = styled.label<{\n pointerEvents: Property.PointerEvents;\n $labelPosition: LabelPosition;\n $hasDropdown: boolean;\n}>(({ theme, $labelPosition, $hasDropdown, pointerEvents }) => ({\n ...theme.textStyles.label,\n fontWeight: \"bold\",\n color: theme.colors.textDisabled,\n position: \"absolute\",\n top: 0,\n right: $labelPosition === \"end\" ? 0 : undefined,\n bottom: 0,\n left: $labelPosition === \"start\" ? 0 : undefined,\n display: \"flex\",\n alignItems: \"center\",\n pointerEvents,\n userSelect: \"none\",\n ...($labelPosition === \"start\"\n ? { justifyContent: \"flex-start\", paddingLeft: \"6px\" }\n : {\n justifyContent: \"flex-end\",\n paddingRight: $hasDropdown ? \"16px\" : \"6px\",\n }),\n}));\n\ninterface InputFieldLabelProps {\n children?: ReactNode;\n pointerEvents?: Property.PointerEvents;\n style?: React.CSSProperties;\n}\n\nconst InputFieldLabel = memo(\n forwardRef(function InputFieldLabel(\n { children = false, pointerEvents = \"none\", style }: InputFieldLabelProps,\n forwardedRef: ForwardedRef<HTMLLabelElement>\n ) {\n const { labelPosition, hasDropdown, setLabelWidth } =\n useContext(InputFieldContext);\n\n const ref = useRef<HTMLLabelElement | null>(null);\n\n useLayoutEffect(() => {\n if (!setLabelWidth) return;\n\n const width = ref.current?.getBoundingClientRect().width;\n\n if (!width) return;\n\n setLabelWidth(width);\n }, [setLabelWidth]);\n\n return (\n <LabelContainer\n ref={(element) => {\n ref.current = element;\n assignRef(forwardedRef, element);\n }}\n pointerEvents={pointerEvents}\n $labelPosition={labelPosition}\n $hasDropdown={hasDropdown}\n style={style}\n >\n {children}\n </LabelContainer>\n );\n })\n);\n\n/* ----------------------------------------------------------------------------\n * Dropdown\n * ------------------------------------------------------------------------- */\n\nconst DropdownContainer = styled.span(({ theme }) => ({\n position: \"absolute\",\n top: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n flexDirection: \"column\",\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 = memo(function InputFieldDropdownMenu<\n T extends string,\n>({ id, items, onSelect, children }: InputFieldDropdownProps<T>) {\n const { size } = useContext(InputFieldContext);\n\n const contentStyle = useMemo(\n () => ({\n margin: \"-4px 0\",\n minHeight: size === \"small\" ? \"15px\" : undefined,\n }),\n [size]\n );\n\n return (\n <DropdownContainer>\n <DropdownMenu<T> items={items} onSelect={onSelect}>\n {children || (\n <Button id={id} variant=\"thin\" flex=\"1\" contentStyle={contentStyle}>\n <CaretDownIcon />\n </Button>\n )}\n </DropdownMenu>\n </DropdownContainer>\n );\n});\n\n/* ----------------------------------------------------------------------------\n * Button\n * ------------------------------------------------------------------------- */\n\nconst ButtonContainer = styled.span<{ $size: InputFieldSize }>(\n ({ theme, $size }) => ({\n position: \"absolute\",\n right: $size === \"large\" ? \"9px\" : $size === \"medium\" ? \"4px\" : \"2px\",\n top: $size === \"large\" ? \"8px\" : $size === \"medium\" ? \"4px\" : \"2px\",\n })\n);\n\nconst InputFieldButton = memo(function InputFieldButton({\n children,\n onClick,\n}: {\n children?: ReactNode;\n onClick?: () => void;\n}) {\n const { size, inputRef } = useContext(InputFieldContext);\n\n const defaultHandleClick = useCallback(\n (event: React.MouseEvent) => {\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((event: React.PointerEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }, []);\n\n return (\n <ButtonContainer $size={size}>\n <Button\n variant=\"floating\"\n onClick={onClick ?? defaultHandleClick}\n onPointerDown={handlePointerDown}\n tabIndex={-1}\n >\n {children}\n </Button>\n </ButtonContainer>\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\nexport const InputElement = styled(TextInput)<{\n disabled?: boolean;\n readOnly?: boolean;\n $labelPosition: LabelPosition;\n $labelSize: number;\n $hasLabel: boolean;\n $hasDropdown: boolean;\n $textAlign?: Property.TextAlign;\n $variant?: InputFieldVariant;\n $size: InputFieldSize;\n}>(({\n theme,\n $labelPosition,\n $labelSize,\n $hasDropdown,\n $textAlign,\n disabled,\n $hasLabel,\n readOnly,\n $variant = \"normal\",\n $size,\n}) => {\n return {\n // placeholder\n \"&::placeholder\": {\n color: theme.colors.textDisabled,\n },\n ...theme.textStyles.small,\n color: readOnly\n ? theme.colors.textMuted\n : disabled\n ? theme.colors.textDisabled\n : theme.colors.text,\n ...($size === \"small\" && {\n fontSize: \"11px\",\n }),\n width: \"0px\", // Reset intrinsic width\n flex: \"1 1 0px\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n minWidth: \"0\",\n textAlign: $textAlign ?? \"left\",\n alignSelf: \"stretch\",\n borderRadius: \"4px\",\n paddingTop: $size === \"large\" ? \"10px\" : $size === \"medium\" ? \"4px\" : \"1px\",\n paddingBottom:\n $size === \"large\" ? \"10px\" : $size === \"medium\" ? \"4px\" : \"1px\",\n paddingLeft:\n ($size === \"large\" ? 10 : $size === \"medium\" ? 6 : 4) +\n ($hasLabel && $labelPosition === \"start\" ? 6 + $labelSize : 0) +\n \"px\",\n paddingRight:\n ($size === \"large\" ? 10 : $size === \"medium\" ? 6 : 4) +\n ($hasLabel && $labelPosition === \"end\" ? 6 + $labelSize : 0) +\n ($hasDropdown ? 11 : 0) +\n \"px\",\n background: theme.colors.inputBackground,\n \"&:focus\": {\n boxShadow: `0 0 0 2px ${theme.colors.primary}`,\n },\n ...($variant === \"bare\" && {\n paddingTop: \"4px\",\n paddingRight: \"4px\",\n paddingBottom: \"4px\",\n paddingLeft: \"4px\",\n marginTop: \"-4px\",\n marginRight: \"-4px\",\n marginBottom: \"-4px\",\n marginLeft: \"-4px\",\n }),\n\n // '&[type=\"search\"]::-webkit-search-cancel-button': {\n // appearance: \"none\",\n // height: \"15px\",\n // width: \"15px\",\n // background: `url(\"data:image/svg+xml;utf8,${createCrossSVGString(\n // theme.colors.icon\n // )}\") no-repeat`,\n // },\n };\n});\n\nconst InputFieldInput = forwardRef(function InputFieldInput(\n // onFocusChange should only be passed from the root, never directly\n {\n textAlign,\n variant,\n ...rest\n }: TextInputProps & {\n textAlign?: Property.TextAlign;\n variant?: \"bare\";\n },\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n const {\n labelPosition,\n labelSize,\n hasDropdown,\n hasLabel,\n size,\n onFocusChange,\n setInputRef,\n } = useContext(InputFieldContext);\n\n const handleFocusChange = useCallback(\n (isFocused: boolean) => {\n onFocusChange(isFocused);\n },\n [onFocusChange]\n );\n\n useLayoutEffect(() => {\n setInputRef?.(forwardedRef);\n }, [forwardedRef, setInputRef]);\n\n return (\n <InputElement\n ref={forwardedRef}\n $labelPosition={labelPosition}\n $labelSize={labelSize}\n $hasLabel={hasLabel}\n $hasDropdown={hasDropdown}\n $size={size}\n $variant={variant}\n $textAlign={textAlign}\n onFocusChange={handleFocusChange}\n {...rest}\n />\n );\n});\n\nconst InputFieldTypeahead = (props: { value: string }) => {\n const {\n labelPosition,\n labelSize,\n hasDropdown,\n hasLabel,\n size,\n onFocusChange,\n } = useContext(InputFieldContext);\n\n return (\n <InputElement\n $labelPosition={labelPosition}\n $labelSize={labelSize}\n $hasLabel={hasLabel}\n $hasDropdown={hasDropdown}\n $size={size}\n onFocusChange={onFocusChange}\n readOnly\n placeholder={props.value}\n value=\"\"\n style={{\n position: \"absolute\",\n top: -1,\n left: 0,\n right: 0,\n bottom: -1,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n background: \"transparent\",\n boxShadow: \"none\",\n }}\n />\n );\n};\n\n/* ----------------------------------------------------------------------------\n * NumberInput\n * ------------------------------------------------------------------------- */\n\ntype InputFieldNumberInputProps = Omit<\n TextInputProps,\n \"value\" | \"onChange\" | \"onKeyDown\" | \"onSubmit\"\n> & {\n value: number | undefined;\n onNudge?: (value: number) => void;\n variant?: \"bare\";\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, ...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={handleKeyDown}\n onBlur={handleBlur}\n {...(\"onChange\" in props\n ? { onChange: handleChange }\n : { onSubmit: handleSubmit })}\n />\n );\n}\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nconst RootContainer = styled.div<{ $width?: number; $flex?: string }>(\n ({ theme, $flex, $width }) => ({\n flex: $flex ?? \"1\",\n display: \"flex\",\n flexDirection: \"row\",\n position: \"relative\",\n maxWidth: typeof $width === \"number\" ? `${$width}px` : undefined,\n })\n);\n\ninterface InputFieldRootProps {\n id?: string;\n flex?: string;\n children?: ReactNode;\n width?: number;\n labelPosition?: LabelPosition;\n labelSize?: number;\n hasDropdown?: boolean;\n size?: InputFieldSize;\n renderPopoverContent?: (options: { width: number }) => ReactNode;\n onFocusChange?: (isFocused: boolean) => void;\n style?: React.CSSProperties;\n className?: string;\n}\n\nfunction InputFieldRoot({\n id,\n flex,\n children,\n width,\n labelPosition = \"end\",\n labelSize,\n size = \"medium\",\n renderPopoverContent,\n onFocusChange,\n style,\n className,\n}: InputFieldRootProps) {\n const childrenArray = Children.toArray(children);\n\n const hasDropdown = childrenArray.some(\n (child) => isValidElement(child) && child.type === InputFieldDropdownMenu\n );\n const hasLabel = childrenArray.some(\n (child) => isValidElement(child) && child.type === InputFieldLabel\n );\n\n const [isFocused, setIsFocused] = React.useState(false);\n\n const [measuredLabelSize, setMeasuredLabelSize] = React.useState<number>();\n const [measuredWidth, setMeasuredWidth] = React.useState<number>();\n\n const handleFocusChange = useCallback(\n (isFocused: boolean) => {\n setIsFocused(isFocused);\n onFocusChange?.(isFocused);\n },\n [onFocusChange]\n );\n\n const [inputRef, setInputRef] =\n React.useState<ForwardedRef<HTMLInputElement>>();\n\n // eslint-disable-next-line @shopify/prefer-early-return\n useEffect(() => {\n if (inputRef && typeof inputRef !== \"function\") {\n setMeasuredWidth?.(\n isFocused ? inputRef?.current?.getBoundingClientRect().width : undefined\n );\n }\n }, [inputRef, isFocused]);\n\n const contextValue = useMemo(\n (): InputFieldContextValue => ({\n labelPosition,\n labelSize: measuredLabelSize ?? labelSize ?? 6,\n hasDropdown,\n hasLabel,\n size,\n isFocused,\n onFocusChange: handleFocusChange,\n inputRef,\n setInputRef,\n setLabelWidth: setMeasuredLabelSize,\n }),\n [\n labelPosition,\n measuredLabelSize,\n labelSize,\n hasDropdown,\n hasLabel,\n size,\n isFocused,\n handleFocusChange,\n inputRef,\n ]\n );\n\n const rootElement = (\n <RootContainer\n id={id}\n $width={width}\n $flex={flex}\n style={style}\n className={className}\n >\n {children}\n </RootContainer>\n );\n\n return (\n <InputFieldContext.Provider value={contextValue}>\n {renderPopoverContent ? (\n <Popover\n open={true}\n trigger={rootElement}\n sideOffset={3}\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 {measuredWidth && (\n <Stack.V width={measuredWidth} overflow=\"hidden\">\n {renderPopoverContent({ width: measuredWidth })}\n </Stack.V>\n )}\n </Popover>\n ) : (\n rootElement\n )}\n </InputFieldContext.Provider>\n );\n}\n\nconst PrimitiveInputField = styled.input(({ theme, readOnly, disabled }) => {\n return {\n // placeholder\n \"&::placeholder\": {\n color: theme.colors.textDisabled,\n },\n ...theme.textStyles.small,\n color: readOnly\n ? theme.colors.textMuted\n : disabled\n ? theme.colors.textDisabled\n : theme.colors.text,\n width: \"0px\", // Reset intrinsic width\n flex: \"1 1 0px\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n minWidth: \"0\",\n alignSelf: \"stretch\",\n borderRadius: \"4px\",\n paddingTop: \"4px\",\n paddingBottom: \"4px\",\n paddingLeft: \"6px\",\n paddingRight: \"6px\",\n background: theme.colors.inputBackground,\n \"&:focus\": {\n boxShadow: `0 0 0 2px ${theme.colors.primary}`,\n },\n userSelect: \"all\",\n pointerEvents: \"all\",\n };\n});\n\nexport namespace InputField {\n export const Root = memo(InputFieldRoot);\n export const Input = memo(InputFieldInput);\n export const Typeahead = memo(InputFieldTypeahead);\n export const NumberInput = memo(InputFieldNumberInput);\n export const DropdownMenu = InputFieldDropdownMenu;\n export const Button = InputFieldButton;\n export const Label = InputFieldLabel;\n export const PrimitiveElement = PrimitiveInputField;\n}\n","import React, { CSSProperties, ReactNode, memo, useRef } from \"react\";\nimport { useSize } from \"../hooks/useSize\";\n\ntype Size = { width: number; height: number };\n\nconst style: CSSProperties = {\n display: \"flex\",\n flex: \"1 0 0\",\n flexDirection: \"column\",\n};\n\ninterface Props {\n children: (size: Size) => ReactNode;\n className?: string;\n}\n\nexport const AutoSizer = memo(function AutoSizer({\n children,\n className,\n}: Props) {\n const containerRef = 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) => ReactNode;\n dimension: \"width\" | \"height\";\n className?: string;\n}\n\nexport const SingleDimensionAutoSizer = memo(function SingleDimensionAutoSizer({\n children,\n dimension,\n className,\n}: SingleDimensionAutoSizerProps) {\n const containerRef = 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","// 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, {\n CSSProperties,\n DragEvent,\n ReactNode,\n memo,\n useCallback,\n} from \"react\";\nimport { useFileDropTarget } from \"../hooks/useFileDropTarget\";\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\ninterface Props<T extends string> {\n children: ReactNode | ((isActive: boolean) => ReactNode);\n onDropFiles: (file: TypedFile<T>[], offsetPoint: OffsetPoint) => void;\n supportedFileTypes: T[];\n}\n\nconst style: CSSProperties = { display: \"flex\", flex: 1 };\n\nexport const FileDropTarget = memo(function FileDropTarget<T extends string>({\n children,\n onDropFiles,\n supportedFileTypes,\n}: Props<T>) {\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(handleFile);\n\n return (\n <div style={style} {...dropTargetProps}>\n {typeof children === \"function\" ? children(isDropTargetActive) : children}\n </div>\n );\n});\n","import { DragEvent, useCallback, useState } from 'react';\n\nexport function useFileDropTarget(dropEvent: (event: DragEvent) => void) {\n const [isDropTargetActive, setIsDropTargetActive] = useState(false);\n\n const handleDragEvent = useCallback((event: DragEvent, on?: boolean) => {\n if (on !== undefined) setIsDropTargetActive(on);\n event.preventDefault();\n }, []);\n\n const handleDropEvent = useCallback(\n (event: DragEvent) => {\n dropEvent(event);\n setIsDropTargetActive(false);\n },\n [dropEvent, setIsDropTargetActive],\n );\n\n return {\n dropTargetProps: {\n onDragOver: handleDragEvent,\n onDragEnter: (event: DragEvent) => handleDragEvent(event, true),\n onDragLeave: (event: DragEvent) => handleDragEvent(event, false),\n onDrop: handleDropEvent,\n },\n isDropTargetActive,\n };\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 { 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, 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","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","// 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 { CheckIcon, ChevronRightIcon } from \"@noya-app/noya-icons\";\nimport { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport * as RadixDropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport React, {\n ComponentProps,\n ForwardedRef,\n SyntheticEvent,\n forwardRef,\n memo,\n useCallback,\n useMemo,\n} from \"react\";\nimport styled from \"styled-components\";\nimport { MenuItemProps, MenuProps } from \"./ContextMenu\";\nimport { renderIcon } from \"./Icons\";\nimport { Spacer } from \"./Spacer\";\nimport {\n CHECKBOX_RIGHT_INSET,\n CHECKBOX_WIDTH,\n KeyboardShortcut,\n SEPARATOR_ITEM,\n getKeyboardShortcutsForMenuItems,\n styles,\n} from \"./internal/Menu\";\n\n/* ----------------------------------------------------------------------------\n * Separator\n * ------------------------------------------------------------------------- */\n\nconst SeparatorElement = styled(RadixDropdownMenu.Separator)(\n styles.separatorStyle\n);\n\n/* ----------------------------------------------------------------------------\n * Item\n * ------------------------------------------------------------------------- */\n\nconst ItemElement = styled(RadixDropdownMenu.Item)(styles.itemStyle);\n\nconst CheckboxItemElement = styled(RadixDropdownMenu.CheckboxItem)(\n styles.itemStyle\n);\n\nconst StyledItemIndicator = styled(RadixDropdownMenu.ItemIndicator)(\n styles.itemIndicatorStyle\n);\n\nconst DropdownMenuItem = memo(function ContextMenuItem<T extends string>({\n value,\n children,\n onSelect,\n checked,\n disabled,\n indented,\n icon,\n items,\n shortcut,\n}: MenuItemProps<T>) {\n const handleSelectItem = useCallback(() => {\n if (!value) return;\n\n onSelect(value);\n }, [onSelect, value]);\n\n if (checked) {\n return (\n <CheckboxItemElement\n checked={checked}\n disabled={disabled}\n onSelect={handleSelectItem}\n >\n <StyledItemIndicator>\n <CheckIcon />\n </StyledItemIndicator>\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n {children}\n </CheckboxItemElement>\n );\n }\n\n const element = (\n <ItemElement disabled={disabled} onSelect={handleSelectItem}>\n {indented && (\n <Spacer.Horizontal size={CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET} />\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 {items && items.length > 0 && (\n <>\n <Spacer.Horizontal />\n <Spacer.Horizontal size={16} />\n <ChevronRightIcon />\n </>\n )}\n </ItemElement>\n );\n\n if (items && items.length > 0) {\n return (\n <DropdownMenuRoot\n isNested\n items={items}\n onSelect={onSelect}\n alignOffset={-5}\n >\n {element}\n </DropdownMenuRoot>\n );\n } else {\n return element;\n }\n});\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nconst Content = styled(RadixDropdownMenu.Content)(styles.contentStyle);\nconst SubContent = styled(RadixDropdownMenu.SubContent)(styles.contentStyle);\n\nconst DropdownMenuRoot = forwardRef(function DropdownMenuRoot<T extends string>(\n {\n items,\n children,\n onSelect,\n isNested,\n shouldBindKeyboardShortcuts,\n onOpenChange,\n open,\n onCloseAutoFocus,\n side,\n sideOffset = 4,\n align,\n alignOffset,\n collisionPadding = 8,\n }: MenuProps<T> & {\n open?: boolean;\n onCloseAutoFocus?: React.EventHandler<SyntheticEvent<unknown>>;\n } & Pick<\n ComponentProps<typeof RadixDropdownMenu.Content>,\n \"side\" | \"sideOffset\" | \"align\" | \"alignOffset\" | \"collisionPadding\"\n >,\n forwardedRef: ForwardedRef<HTMLElement>\n) {\n const hasCheckedItem = items.some(\n (item) => item !== SEPARATOR_ITEM && item.checked\n );\n\n const keymap = useMemo(\n () =>\n isNested || shouldBindKeyboardShortcuts === false\n ? {}\n : getKeyboardShortcutsForMenuItems(items, onSelect),\n [isNested, items, onSelect, shouldBindKeyboardShortcuts]\n );\n\n useKeyboardShortcuts(keymap);\n\n const RootComponent = isNested\n ? RadixDropdownMenu.Sub\n : RadixDropdownMenu.Root;\n const TriggerComponent = isNested\n ? RadixDropdownMenu.SubTrigger\n : RadixDropdownMenu.Trigger;\n const ContentComponent = isNested ? SubContent : Content;\n\n const contentStyle = useMemo(() => ({ zIndex: 1000 }), []);\n\n return (\n <RootComponent onOpenChange={onOpenChange} open={open}>\n <TriggerComponent ref={forwardedRef as ForwardedRef<any>} asChild>\n {children}\n </TriggerComponent>\n <RadixDropdownMenu.Portal>\n <ContentComponent\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n style={contentStyle}\n collisionPadding={collisionPadding}\n {...({ onCloseAutoFocus } as any)}\n >\n {items.map((item, index) =>\n item === SEPARATOR_ITEM ? (\n <SeparatorElement key={index} />\n ) : (\n <DropdownMenuItem\n key={item.value ?? index}\n value={item.value}\n indented={hasCheckedItem}\n checked={item.checked ?? false}\n disabled={item.disabled ?? false}\n icon={item.icon}\n onSelect={onSelect}\n items={item.items}\n shortcut={item.shortcut}\n >\n {item.title}\n </DropdownMenuItem>\n )\n )}\n </ContentComponent>\n </RadixDropdownMenu.Portal>\n </RootComponent>\n );\n});\n\nexport const DropdownMenu = memo(DropdownMenuRoot);\n","import { getShortcutDisplayParts } from \"@noya-app/noya-keymap\";\nimport React, { memo, ReactNode } from \"react\";\nimport styled, { CSSObject } from \"styled-components\";\nimport { useDesignSystemConfiguration } from \"../../contexts/DesignSystemConfiguration\";\nimport { Theme } from \"../../theme\";\nimport withSeparatorElements from \"../../utils/withSeparatorElements\";\nimport { IconName } from \"../Icons\";\n\nexport const SEPARATOR_ITEM = \"separator\";\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 RegularMenuItem<T extends string> = {\n value?: T;\n title: ReactNode;\n shortcut?: string;\n checked?: boolean;\n disabled?: boolean;\n icon?: Exclude<ReactNode, string> | IconName;\n items?: MenuItem<T>[];\n role?: MenuItemRole;\n};\n\nexport type MenuItem<T extends string> =\n | typeof SEPARATOR_ITEM\n | RegularMenuItem<T>;\n\n// Extract type T of RegularMenuItem<T> within MenuItem<T>\nexport type ExtractMenuItemType<T> =\n T extends RegularMenuItem<infer U> ? U : never;\n\nexport const CHECKBOX_WIDTH = 15;\nexport const CHECKBOX_RIGHT_INSET = 3;\n\nexport const styles = {\n separatorStyle: ({ theme }: { theme: Theme }): CSSObject => ({\n height: \"1px\",\n backgroundColor: theme.colors.divider,\n margin: \"4px -4px\",\n }),\n\n itemStyle: ({\n theme,\n disabled,\n }: {\n theme: Theme;\n disabled?: boolean;\n }): CSSObject => ({\n ...theme.textStyles.button,\n flex: \"0 0 auto\",\n userSelect: \"none\",\n cursor: \"pointer\",\n borderRadius: \"3px\",\n padding: \"6px 8px\",\n ...(disabled && {\n color: theme.colors.textDisabled,\n }),\n \"&:focus\": {\n outline: \"none\",\n color: \"white\",\n backgroundColor: theme.colors.primary,\n\n \"& kbd\": {\n color: \"white\",\n },\n },\n \"&:active\": {\n background: theme.colors.primaryLight,\n },\n display: \"flex\",\n alignItems: \"center\",\n }),\n\n itemIndicatorStyle: {\n display: \"flex\",\n alignItems: \"center\",\n left: `-${CHECKBOX_WIDTH / 2}px`,\n position: \"relative\",\n marginRight: `-${CHECKBOX_RIGHT_INSET}px`,\n } as CSSObject,\n\n contentStyle: ({\n theme,\n scrollable,\n }: {\n theme: Theme;\n scrollable?: boolean;\n }): CSSObject => ({\n borderRadius: 4,\n backgroundColor: theme.colors.popover.background,\n color: theme.colors.text,\n boxShadow: \"0 2px 4px rgba(0,0,0,0.2), 0 0 12px rgba(0,0,0,0.1)\",\n padding: \"4px\",\n border: `1px solid ${theme.colors.popover.divider}`,\n zIndex: 1000,\n ...(scrollable && {\n height: \"100%\",\n maxHeight: \"calc(100vh - 80px)\",\n overflow: \"hidden auto\",\n }),\n }),\n};\n\nfunction getKeyboardShortcuts<T extends string>(\n item: MenuItem<T>\n): [string, T][] {\n if (item === SEPARATOR_ITEM) return [];\n\n if (item.items) 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 = styled.kbd<{\n $fixedWidth?: boolean;\n}>(\n ({ theme, $fixedWidth }): CSSObject => ({\n ...theme.textStyles.small,\n color: theme.colors.textDisabled,\n ...($fixedWidth && {\n width: \"0.9rem\",\n textAlign: \"center\",\n }),\n })\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","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 />\n );\n});\n\ntype ControlledProps = Props & {\n onChange: (value: string) => void;\n};\n\nconst ControlledTextInput = forwardRef(function ControlledTextInput(\n {\n onKeyDown,\n value,\n onChange,\n onFocusChange,\n onBlur,\n onFocusCapture,\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 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 />\n );\n});\n\ntype SubmittableProps = Props & {\n onSubmit: (value: string) => void;\n allowSubmittingWithSameValue?: boolean;\n submitAutomaticallyAfterDelay?: number;\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 ...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 handleSubmit();\n },\n [onBlur, onFocusChange, handleSubmit]\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 * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport React, { ComponentProps } from \"react\";\nimport styled from \"styled-components\";\nimport { IconButton } from \"./IconButton\";\n\ntype PopoverVariant = \"normal\" | \"large\";\n\nconst ContentElement = styled(PopoverPrimitive.Content)<{\n variant?: PopoverVariant;\n}>(({ theme, variant }) => ({\n borderRadius: 4,\n fontSize: 14,\n backgroundColor: theme.colors.popover.background,\n boxShadow: \"0 2px 4px rgba(0,0,0,0.2), 0 0 12px rgba(0,0,0,0.1)\",\n maxHeight: \"600px\",\n overflowY: \"auto\",\n color: theme.colors.textMuted,\n ...(variant === \"large\" && { width: \"680px\" }),\n ...(variant === \"normal\" && { width: \"240px\" }),\n zIndex: 1000,\n}));\n\nconst ArrowElement = styled(PopoverPrimitive.Arrow)(({ theme }) => ({\n fill: theme.colors.popover.background,\n}));\n\nconst PopoverClose = styled(PopoverPrimitive.Close)(({ theme }) => ({\n all: \"unset\",\n fontFamily: \"inherit\",\n borderRadius: \"100%\",\n height: 25,\n width: 25,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"absolute\",\n top: 5,\n right: 5,\n}));\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}\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}: Props) {\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{trigger}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <ContentElement\n variant={variant}\n side={side}\n align=\"center\"\n sideOffset={sideOffset}\n onOpenAutoFocus={onOpenAutoFocus}\n onCloseAutoFocus={onCloseAutoFocus}\n onInteractOutside={onInteractOutside}\n onFocusOutside={onFocusOutside}\n onPointerDownOutside={onPointerDownOutside}\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 && <ArrowElement />}\n {closable && (\n <PopoverClose>\n <IconButton iconName=\"Cross2Icon\" onClick={onClickClose} />\n </PopoverClose>\n )}\n </ContentElement>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\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","// 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 { CheckIcon, ChevronRightIcon } from \"@noya-app/noya-icons\";\nimport { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport * as RadixContextMenu from \"@radix-ui/react-context-menu\";\nimport React, { ReactNode, memo, useCallback, useMemo } from \"react\";\nimport styled from \"styled-components\";\nimport { renderIcon } from \"./Icons\";\nimport { Spacer } from \"./Spacer\";\nimport {\n CHECKBOX_RIGHT_INSET,\n CHECKBOX_WIDTH,\n KeyboardShortcut,\n MenuItem,\n SEPARATOR_ITEM,\n getKeyboardShortcutsForMenuItems,\n styles,\n} from \"./internal/Menu\";\n\n/* ----------------------------------------------------------------------------\n * Separator\n * ------------------------------------------------------------------------- */\n\nconst SeparatorElement = styled(RadixContextMenu.Separator)(\n styles.separatorStyle\n);\n\n/* ----------------------------------------------------------------------------\n * Item\n * ------------------------------------------------------------------------- */\n\nconst ItemElement = styled(RadixContextMenu.Item)(styles.itemStyle);\n\nconst CheckboxItemElement = styled(RadixContextMenu.CheckboxItem)(\n styles.itemStyle\n);\n\nconst StyledItemIndicator = styled(RadixContextMenu.ItemIndicator)(\n styles.itemIndicatorStyle\n);\n\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 ContextMenuItem = memo(function ContextMenuItem<T extends string>({\n value,\n children,\n onSelect,\n checked,\n disabled,\n indented,\n icon,\n items,\n shortcut,\n}: MenuItemProps<T>) {\n // The pointer event within the context menu will bubble outside of the\n // context menu unless we stop it here.\n const handlePointerDown = useCallback(\n (event: React.PointerEvent) => event.stopPropagation(),\n []\n );\n\n const handleSelectItem = useCallback(() => {\n if (!value) return;\n\n onSelect(value);\n }, [onSelect, value]);\n\n if (checked) {\n return (\n <CheckboxItemElement\n checked={checked}\n disabled={disabled}\n onSelect={handleSelectItem}\n >\n <StyledItemIndicator>\n <CheckIcon />\n </StyledItemIndicator>\n {children}\n </CheckboxItemElement>\n );\n }\n\n const element = (\n <ItemElement\n disabled={disabled}\n onSelect={handleSelectItem}\n onPointerDown={handlePointerDown}\n >\n {indented && (\n <Spacer.Horizontal size={CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET} />\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 {items && items.length > 0 && (\n <>\n <Spacer.Horizontal />\n <Spacer.Horizontal size={16} />\n <ChevronRightIcon />\n </>\n )}\n </ItemElement>\n );\n\n if (items && items.length > 0) {\n return (\n <ContextMenuRoot isNested items={items} onSelect={onSelect}>\n {element}\n </ContextMenuRoot>\n );\n } else {\n return element;\n }\n});\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nconst Content = styled(RadixContextMenu.Content)(styles.contentStyle);\nconst SubContent = styled(RadixContextMenu.SubContent)(styles.contentStyle);\n\nexport interface MenuProps<T extends string> {\n children: ReactNode;\n items: MenuItem<T>[];\n onSelect: (value: T) => void;\n isNested?: boolean;\n shouldBindKeyboardShortcuts?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction ContextMenuRoot<T extends string>({\n items,\n children,\n onSelect,\n isNested,\n shouldBindKeyboardShortcuts,\n onOpenChange,\n}: MenuProps<T>) {\n const hasCheckedItem = items.some(\n (item) => item !== SEPARATOR_ITEM && item.checked\n );\n\n const keymap = useMemo(\n () =>\n isNested || shouldBindKeyboardShortcuts === false\n ? {}\n : getKeyboardShortcutsForMenuItems(items, onSelect),\n [isNested, items, onSelect, shouldBindKeyboardShortcuts]\n );\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 RootComponent = isNested ? RadixContextMenu.Sub : RadixContextMenu.Root;\n const TriggerComponent = isNested\n ? RadixContextMenu.SubTrigger\n : RadixContextMenu.Trigger;\n const ContentComponent: typeof Content = isNested ? SubContent : Content;\n\n return (\n <RootComponent onOpenChange={onOpenChange}>\n <TriggerComponent asChild onPointerDown={onPointerDown}>\n {children}\n </TriggerComponent>\n <RadixContextMenu.Portal>\n <ContentComponent>\n {items.map((item, index) =>\n item === SEPARATOR_ITEM ? (\n <SeparatorElement key={index} />\n ) : (\n <ContextMenuItem\n key={item.value ?? index}\n value={item.value}\n indented={hasCheckedItem}\n checked={item.checked ?? false}\n disabled={item.disabled ?? false}\n icon={item.icon}\n onSelect={onSelect}\n items={item.items}\n shortcut={item.shortcut}\n >\n {item.title}\n </ContextMenuItem>\n )\n )}\n </ContentComponent>\n </RadixContextMenu.Portal>\n </RootComponent>\n );\n}\n\nexport const ContextMenu = memo(ContextMenuRoot);\n","import React, { memo } from \"react\";\nimport styled from \"styled-components\";\n\n/* ----------------------------------------------------------------------------\n * Divider\n * ------------------------------------------------------------------------- */\n\ntype DividerVariant = \"normal\" | \"strong\" | \"subtle\";\n\nconst DividerContainer = styled.div<\n DividerProps_ & {\n $orientation: \"horizontal\" | \"vertical\";\n }\n>(({ theme, $variant = \"normal\", $orientation, $overflow = 0 }) => ({\n ...($orientation === \"horizontal\"\n ? { height: \"1px\", minHeight: \"1px\", margin: `0px -${$overflow}px` }\n : { width: \"1px\", minWidth: \"1px\", margin: `-${$overflow}px 0px` }),\n background:\n $variant === \"strong\"\n ? theme.colors.dividerStrong\n : $variant === \"subtle\"\n ? theme.colors.dividerSubtle\n : theme.colors.divider,\n alignSelf: \"stretch\",\n}));\n\ninterface DividerProps_ {\n $variant?: DividerVariant;\n $overflow?: number;\n}\n\ninterface DividerProps {\n variant?: DividerVariant;\n overflow?: number;\n}\n\nexport const Divider = memo(function Divider({\n variant,\n overflow,\n ...props\n}: DividerProps) {\n return (\n <DividerContainer\n $orientation=\"horizontal\"\n $variant={variant}\n $overflow={overflow}\n {...props}\n />\n );\n});\n\nexport const DividerVertical = memo(function DividerVertical({\n variant,\n overflow,\n ...props\n}: DividerProps) {\n return (\n <DividerContainer\n $orientation=\"vertical\"\n $variant={variant}\n $overflow={overflow}\n {...props}\n />\n );\n});\n","import { DragHandleDots2Icon } from \"@noya-app/noya-icons\";\nimport React, { memo, useCallback, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { useDesignSystemTheme } from \"../contexts/DesignSystemConfiguration\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport { MenuItem } from \"./internal/Menu\";\n\nconst DotButtonElement = styled.div(({ theme }) => ({\n cursor: \"pointer\",\n borderRadius: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"2px 0\",\n \"&:hover\": {\n background: theme.colors.inputBackgroundLight,\n },\n \"&:active\": {\n background: theme.colors.activeBackground,\n },\n}));\n\nconst TriggerElement = styled.div({\n pointerEvents: \"none\",\n height: \"15px\",\n});\n\n/**\n * A button that opens a menu when clicked, but also allows dragging the\n */\nexport const DraggableMenuButton = memo(function DraggableMenuButton<\n T extends string,\n>({\n items,\n onSelect,\n isVisible = true,\n}: {\n items?: MenuItem<T>[];\n onSelect?: (value: T) => void;\n isVisible?: boolean;\n}) {\n const color = useDesignSystemTheme().colors.icon;\n const [open, setOpen] = useState(false);\n const [downPosition, setDownPosition] = React.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\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 <DotButtonElement\n onPointerDownCapture={handlePointerDownCapture}\n onPointerUp={handlePointerUp}\n onClick={(event) => {\n event.stopPropagation();\n event.preventDefault();\n }}\n >\n {items && onSelect ? (\n <DropdownMenu\n open={open}\n onOpenChange={handleOpenChange}\n items={items}\n onSelect={onSelect}\n shouldBindKeyboardShortcuts={false}\n >\n <TriggerElement>\n <DragHandleDots2Icon\n color={isVisible || open ? color : \"transparent\"}\n />\n </TriggerElement>\n </DropdownMenu>\n ) : (\n <DragHandleDots2Icon\n color={isVisible || open ? color : \"transparent\"}\n />\n )}\n </DotButtonElement>\n );\n});\n","import { Sketch } from \"@noya-app/noya-file-format\";\nimport React, { CSSProperties, ForwardedRef, forwardRef, memo } from \"react\";\nimport styled from \"styled-components\";\nimport { SketchPattern } from \"../utils/sketchPattern\";\nimport { FillPreviewBackground } from \"./FillPreviewBackground\";\n\nconst Container = styled.button<{ $flex?: CSSProperties[\"flex\"] }>(\n ({ theme, $flex }) => ({\n outline: \"none\",\n padding: 0,\n width: \"50px\",\n height: \"27px\",\n borderRadius: \"4px\",\n overflow: \"hidden\",\n border: \"none\",\n boxShadow: `0 0 0 1px ${theme.colors.divider} inset`,\n background: \"transparent\",\n \"&:focus\": {\n boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${theme.colors.primary}`,\n },\n position: \"relative\",\n flex: $flex,\n })\n);\n\ninterface Props {\n id?: string;\n value?: Sketch.Color | Sketch.Gradient | SketchPattern;\n flex?: CSSProperties[\"flex\"];\n}\n\nexport const FillInputField = memo(\n forwardRef(function FillInputField(\n { id, value, flex, ...rest }: Props,\n ref: ForwardedRef<HTMLButtonElement>\n ) {\n return (\n <Container ref={ref} id={id} $flex={flex} {...rest}>\n <FillPreviewBackground value={value} />\n </Container>\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 React, { memo, useMemo } from \"react\";\nimport styled, { useTheme } from \"styled-components\";\nimport { useImageData } from \"../contexts/ImageDataContext\";\nimport { useObjectURL } from \"../hooks/useObjectURL\";\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 = styled.span<{ background: string }>(({ background }) => ({\n background,\n position: \"absolute\",\n inset: 0,\n}));\n\nconst HorizontalDotsBackground = memo(function HorizontalDotsBackground() {\n const { inputBackground, placeholderDots } = useTheme().colors;\n\n const background = useMemo(\n () =>\n [\n `center url(\"data:image/svg+xml;utf8,${dotsHorizontalSvg(\n placeholderDots\n )}\") no-repeat`,\n inputBackground,\n ].join(\",\"),\n [inputBackground, placeholderDots]\n );\n\n return <Background background={background} />;\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 = memo(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 = 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\nconst ColorPreviewBackground = memo(function ColorPreviewBackground({\n color,\n}: {\n color: Sketch.Color;\n}) {\n const background = useMemo(() => sketchColorToRgbaString(color), [color]);\n\n return <Background background={background} />;\n});\n\nconst GradientPreviewBackground = memo(function GradientPreviewBackground({\n gradient,\n}: {\n gradient: Sketch.Gradient;\n}) {\n const background = useMemo(\n () => getGradientBackground(gradient.stops, gradient.gradientType, 180),\n [gradient.gradientType, gradient.stops]\n );\n\n return <Background background={background} />;\n});\n\ninterface Props {\n value?: Sketch.Color | Sketch.Gradient | SketchPattern;\n}\n\nexport const FillPreviewBackground = memo(function FillPreviewBackground({\n value,\n}: Props) {\n if (!value) return <HorizontalDotsBackground />;\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 React, {\n createContext,\n memo,\n ReactNode,\n useContext,\n useMemo,\n} from \"react\";\n\nexport type ImageDataContextValue = {\n getImageData: (ref: string) => ArrayBuffer | undefined;\n};\n\nconst ImageDataContext = createContext<ImageDataContextValue | undefined>(\n undefined\n);\n\nexport const ImageDataProvider = memo(function ImageDataProvider({\n children,\n getImageData,\n}: {\n children: ReactNode;\n getImageData?: (ref: string) => ArrayBuffer | undefined;\n}) {\n const contextValue = 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 = 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 Divider,\n IconButton,\n Small,\n useCurrentFloatingWindowInternal,\n useDesignSystemTheme,\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 flex=\"1\" fontWeight=\"500\" color=\"text\">\n {title}\n </Small>\n {toolbarContent}\n <IconButton\n iconName=\"Cross3Icon\"\n onClick={onClose}\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 theme = useDesignSystemTheme();\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 ${theme.colors.divider}`,\n backgroundColor: theme.colors.canvas.background,\n }}\n >\n <div\n style={{\n ...styles.toolbar,\n backgroundColor: theme.colors.sidebar.background,\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 React, { memo, useCallback, useMemo } 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 = memo(function GradientPicker({\n value,\n selectedStop,\n onChangeColor,\n onChangePosition,\n onAdd,\n onDelete,\n onSelectStop,\n}: Props) {\n const colorModel: ColorModel<RgbaColor> = 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 = useMemo(\n () => sketchColorToRgba(value[selectedStop].color),\n [value, selectedStop],\n );\n\n const handleChangeColor = useCallback(\n (value: RgbaColor) => {\n onChangeColor(rgbaToSketchColor(value));\n },\n [onChangeColor],\n );\n\n const handleAddGradientStop = 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 styled from 'styled-components';\nimport { Colors } from '../theme';\n\nexport type GridProps = {\n columns?: string;\n rows?: string;\n alignItems?: 'start' | 'center' | 'end';\n justifyItems?: 'start' | 'center' | 'end';\n placeItems?: 'start' | 'center' | 'end';\n width?: number | string;\n minWidth?: number | string;\n maxWidth?: number | string;\n height?: number | string;\n minHeight?: number | string;\n maxHeight?: number | string;\n padding?: number | string;\n paddingX?: number | string;\n paddingXStart?: number | string;\n paddingXEnd?: number | string;\n paddingY?: number | string;\n paddingYStart?: number | string;\n paddingYEnd?: number | string;\n gap?: number | string;\n gapX?: number | string;\n gapY?: number | string;\n background?: keyof Colors;\n};\n\nconst Grid = styled.div<GridProps>((props) => ({\n display: 'grid',\n gridTemplateColumns: props.columns,\n gridTemplateRows: props.rows,\n alignItems: props.alignItems,\n justifyItems: props.justifyItems,\n width: props.width,\n minWidth: props.minWidth ?? 0,\n maxWidth: props.maxWidth,\n height: props.height,\n minHeight: props.minHeight ?? 0,\n maxHeight: props.maxHeight,\n padding: props.padding,\n paddingInline: props.paddingX,\n paddingInlineStart: props.paddingXStart,\n paddingInlineEnd: props.paddingXEnd,\n paddingBlock: props.paddingY,\n paddingBlockStart: props.paddingYStart,\n paddingBlockEnd: props.paddingYEnd,\n gap: props.gap,\n gapRow: props.gapX,\n gapColumn: props.gapY,\n background: props.background,\n}));\n\nexport default Grid;\n","import { KeyModifiers } from \"@noya-app/noya-keymap\";\nimport React, {\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport styled, { keyframes } from \"styled-components\";\nimport { useHover } from \"../hooks/useHover\";\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 { Stack } from \"./Stack\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport type GridViewSize = \"xxs\" | \"xs\" | \"small\" | \"medium\" | \"large\" | \"xl\";\n\nconst sizes: Record<\n GridViewSize,\n {\n itemWidth: number;\n itemHeight: number;\n gap: number;\n }\n> = {\n xxs: {\n itemWidth: 36,\n itemHeight: 36,\n gap: 5,\n },\n xs: {\n itemWidth: 87,\n itemHeight: 87,\n gap: 9,\n },\n small: {\n itemWidth: 160,\n itemHeight: 170,\n gap: 20,\n },\n medium: {\n itemWidth: 220,\n itemHeight: 220,\n gap: 16,\n },\n large: {\n itemWidth: 280,\n itemHeight: 280,\n gap: 24,\n },\n xl: {\n itemWidth: 400,\n itemHeight: 400,\n gap: 32,\n },\n};\n\nconst Grid = styled.div<{\n size: GridViewSize;\n padding: CSSProperties[\"padding\"];\n}>(({ theme, size, padding }) => {\n return {\n color: theme.colors.text,\n display: \"grid\",\n gridTemplateColumns: `repeat(auto-fill, minmax(${sizes[size].itemWidth}px, 1fr))`,\n // gridAutoRows: `${sizes[size].itemHeight}px`,\n gap: `${sizes[size].gap}px`,\n // gridTemplateColumns: `repeat(auto-fill, minmax(\n // ${size === 'large' ? '280px' : size === 'small' ? '160px' : '116px'}\n // , 1fr))`,\n // gridAutoRows:\n // size === 'large' ? '280px' : size === 'small' ? '170px' : '116px',\n // gap: size === 'large' || size === 'small' ? `20px` : `12px`,\n padding,\n };\n});\n\nconst Container = styled.div<{ scrollable: boolean }>(\n ({ theme, scrollable }) => ({\n flex: scrollable ? \"1\" : \"0 0 auto\",\n display: \"flex\",\n flexDirection: \"column\",\n })\n);\n\nconst ContentContainer = styled.div<{\n selected?: boolean;\n hovered?: boolean;\n bordered: boolean;\n disabled: boolean;\n}>(({ theme, selected, hovered, bordered, disabled }) => ({\n display: \"flex\",\n flex: \"1\",\n backgroundColor: theme.colors.sidebar.background,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: \"2px\",\n border: `1px solid ${\n selected\n ? theme.colors.primary\n : // : hovered\n // ? `rgb(132, 63, 255, 0.5)`\n bordered\n ? theme.colors.divider\n : \"transparent\"\n }`,\n overflow: \"hidden\",\n\n cursor: \"pointer\",\n ...(disabled\n ? { opacity: 0.5 }\n : {\n \"&:hover\": { opacity: 0.85 },\n \"&:active\": { opacity: 0.7 },\n }),\n}));\n\nconst ItemContainer = styled.div(({ theme }) => ({\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n\n \"&:focus\": {\n boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${theme.colors.primary}`,\n outline: \"none\",\n },\n}));\n\nconst ItemTitle = styled.span<{ showBackground: boolean }>(\n ({ theme, showBackground }) => ({\n ...theme.textStyles.small,\n lineHeight: \"1\",\n color: theme.colors.text,\n fontWeight: 500,\n userSelect: \"none\",\n whiteSpace: \"pre\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n\n ...(showBackground && {\n background: theme.colors.sidebar.background,\n // border: `1px solid ${theme.colors.dividerSubtle}`,\n padding: \"2px 4px\",\n borderRadius: \"2px\",\n backdropFilter: \"blur(4px)\",\n }),\n })\n);\n\nconst ItemDescription = styled.span<{ showBackground: boolean }>(\n ({ theme, showBackground }) => ({\n ...theme.textStyles.small,\n fontSize: \"0.7rem\",\n lineHeight: \"1\",\n color: theme.colors.textMuted,\n userSelect: \"none\",\n whiteSpace: \"pre\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n\n ...(showBackground && {\n background: theme.colors.sidebar.background,\n // border: `1px solid ${theme.colors.dividerSubtle}`,\n padding: \"2px 4px\",\n borderRadius: \"2px\",\n backdropFilter: \"blur(4px)\",\n }),\n })\n);\n\nconst SectionTitle = styled.span<{ last?: boolean }>(\n ({ theme, last = false }) => ({\n ...theme.textStyles.heading3,\n color: last ? theme.colors.text : theme.colors.textMuted,\n fontWeight: 500,\n userSelect: \"none\",\n whiteSpace: \"pre\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n lineHeight: \"1\",\n })\n);\n\nconst SectionHeaderContainer = styled.div(({ theme }) => ({\n padding: \"0 20px\",\n}));\n\nconst TextOverlay = styled.div({\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"end\",\n alignItems: \"start\",\n padding: \"4px\",\n pointerEvents: \"none\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n gap: \"2px\",\n});\n\nconst shimmer = keyframes({\n \"0%\": {\n backgroundPosition: \"-200% 0\",\n },\n \"100%\": {\n backgroundPosition: \"200% 0\",\n },\n});\n\nconst Shimmer = styled.div`\n pointer-events: none;\n position: absolute;\n inset: 0;\n animation: ${shimmer} 6s infinite linear;\n background: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0),\n rgba(226, 232, 240, 0.5),\n rgba(255, 255, 255, 0)\n );\n background-size: 200% 100%;\n display: flex;\n flex-direction: column;\n justify-content: start;\n align-items: end;\n padding: 4px;\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 onPress?: (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 style?: CSSProperties;\n}\n\nconst GridViewItem = forwardRef(function GridViewItem<\n MenuItemType extends string,\n>(\n {\n id,\n title,\n subtitle,\n loading,\n selected,\n onClick,\n onPress,\n onDoubleClick,\n onHoverChange,\n children,\n menuItems,\n onSelectMenuItem,\n onContextMenu,\n style,\n }: ItemProps<MenuItemType>,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const [hovered, setHovered] = React.useState(false);\n\n const { hoverProps } = useHover({\n onHoverChange: (isHovering) => {\n onHoverChange?.(isHovering);\n setHovered(isHovering);\n },\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 onPress?.(event);\n },\n [onClick, onPress]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.stopPropagation();\n event.preventDefault();\n\n onPress?.(event);\n } else {\n return;\n }\n },\n [onPress]\n );\n\n let element = (\n <ItemContainer\n id={id}\n ref={forwardedRef}\n {...hoverProps}\n tabIndex={disabled ? undefined : 0}\n onKeyDown={handleKeyDown}\n >\n <ContentContainer\n disabled={disabled}\n bordered={bordered}\n selected={selected}\n hovered={!disabled && hovered}\n onClick={handleClick}\n onDoubleClick={onDoubleClick}\n onContextMenu={onContextMenu}\n style={style}\n >\n {children}\n </ContentContainer>\n {textPosition === \"below\" && (\n <>\n <Spacer.Vertical size={8} />\n <ItemTitle showBackground={false}>{title || \" \"}</ItemTitle>\n <ItemDescription showBackground={false}>\n {subtitle || \" \"}\n </ItemDescription>\n </>\n )}\n {textPosition === \"overlay\" && hovered && (title || subtitle) && (\n <TextOverlay>\n {title && <ItemTitle showBackground>{title}</ItemTitle>}\n {subtitle && (\n <ItemDescription showBackground>{subtitle}</ItemDescription>\n )}\n </TextOverlay>\n )}\n {loading && (\n <Shimmer>\n <ActivityIndicator opacity={0.5} size={13} />\n </Shimmer>\n )}\n </ItemContainer>\n );\n\n if (menuItems && onSelectMenuItem) {\n element = (\n <ContextMenu<MenuItemType> items={menuItems} onSelect={onSelectMenuItem}>\n {element}\n </ContextMenu>\n );\n }\n\n if (textPosition === \"toolip\") {\n element = (\n <Tooltip\n content={\n <Stack.V gap={2}>\n <ItemTitle showBackground={false}>{title}</ItemTitle>\n <ItemDescription showBackground={false}>{subtitle}</ItemDescription>\n </Stack.V>\n }\n >\n {element}\n </Tooltip>\n );\n }\n\n return element;\n});\n\ntype GridViewContextValue = {\n size: GridViewSize;\n textPosition: \"overlay\" | \"below\" | \"toolip\";\n bordered: boolean;\n disabled: boolean;\n};\n\nconst GridViewContext = createContext<GridViewContextValue>({\n size: \"small\",\n textPosition: \"below\",\n bordered: false,\n disabled: false,\n});\n\ninterface GridViewRootProps extends Partial<GridViewContextValue> {\n children: ReactNode;\n onClick?: () => void;\n scrollable?: boolean;\n}\n\nfunction GridViewRoot({\n size = \"small\",\n children,\n scrollable = true,\n onClick,\n textPosition = \"below\",\n bordered = false,\n disabled = false,\n}: GridViewRootProps) {\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 size,\n textPosition,\n bordered,\n disabled,\n }),\n [bordered, disabled, size, textPosition]\n );\n\n return (\n <GridViewContext.Provider value={contextValue}>\n <Container onClick={handleClick} scrollable={scrollable}>\n {scrollable ? <ScrollArea>{children}</ScrollArea> : children}\n </Container>\n </GridViewContext.Provider>\n );\n}\n\nfunction GridViewSection({\n children,\n padding = \"20px\",\n}: {\n children?: ReactNode;\n padding?: CSSProperties[\"padding\"];\n}) {\n const { size } = useContext(GridViewContext);\n\n return (\n <Grid size={size} padding={padding}>\n {children}\n </Grid>\n );\n}\n\nfunction GridViewSectionHeader({ title }: { title: string }) {\n const grouped = title.split(\"/\");\n\n return (\n <SectionHeaderContainer>\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 </SectionHeaderContainer>\n );\n}\n\nexport namespace GridView {\n export const Root = memo(GridViewRoot);\n export const Item = memo(GridViewItem);\n export const Section = memo(GridViewSection);\n export const SectionHeader = memo(GridViewSectionHeader);\n}\n","import * as RadixScrollArea from \"@radix-ui/react-scroll-area\";\nimport React, { memo, ReactNode, useCallback, useState } from \"react\";\nimport styled from \"styled-components\";\n\nconst SCROLLBAR_SIZE = 10;\n\nconst StyledViewport = styled(RadixScrollArea.Viewport)({\n width: \"100%\",\n height: \"100%\",\n // Override the `display: table` in the child, since this allows\n // elements to expand beyond the width of the viewport.\n \"& > div\": {\n display: \"block !important\",\n },\n});\n\nconst StyledScrollbar = styled(RadixScrollArea.Scrollbar)({\n display: \"flex\",\n padding: \"3px\",\n '&[data-orientation=\"vertical\"]': {\n width: SCROLLBAR_SIZE,\n },\n});\n\nconst StyledThumb = styled(RadixScrollArea.Thumb)(({ theme }) => ({\n flex: 1,\n borderRadius: SCROLLBAR_SIZE,\n backgroundColor: theme.colors.scrollbar,\n}));\n\nconst Container = styled.div({\n flex: \"1 1 0px\",\n minHeight: 0,\n});\n\ninterface Props {\n children?: ReactNode | ((scrollElementRef: HTMLDivElement) => ReactNode);\n}\n\nexport const ScrollArea = memo(function ScrollArea({ children }: Props) {\n const [scrollElementRef, setScrollElementRef] =\n useState<HTMLDivElement | null>(null);\n\n return (\n <Container>\n <RadixScrollArea.Root style={{ width: \"100%\", height: \"100%\" }}>\n <StyledViewport\n ref={useCallback(\n (ref: HTMLDivElement | null) => setScrollElementRef(ref),\n []\n )}\n >\n {typeof children === \"function\"\n ? scrollElementRef\n ? children(scrollElementRef)\n : null\n : children}\n </StyledViewport>\n <StyledScrollbar orientation=\"vertical\" className=\"scroll-component\">\n <StyledThumb className=\"scroll-component\" />\n </StyledScrollbar>\n </RadixScrollArea.Root>\n </Container>\n );\n});\n","import { Size } from \"@noya-app/noya-geometry\";\nimport { chunkBy, partition } from \"@noya-app/noya-utils\";\nimport React, {\n FocusEventHandler,\n ForwardedRef,\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styled from \"styled-components\";\nimport {\n CompletionItem,\n CompletionListItem,\n CompletionSectionHeader,\n} from \"../utils/completions\";\nimport { IToken, fuzzyFilter, fuzzyTokenize } from \"../utils/fuzzyScorer\";\nimport { ActivityIndicator } from \"./ActivityIndicator\";\nimport { InputField, InputFieldSize } from \"./InputField\";\nimport { IVirtualizedList, ListView } from \"./ListView\";\nimport { Spacer } from \"./Spacer\";\nimport { Stack } from \"./Stack\";\nimport { Small } from \"./Text\";\n\nfunction filterWithGroupedSections(\n items: (CompletionItem | CompletionSectionHeader)[],\n query: string\n): CompletionListItem[] {\n const sections = chunkBy(items, (a, b) => b.type !== \"sectionHeader\");\n\n return sections.flatMap((section) => {\n const [headers, regular] = partition(\n section,\n (item): item is CompletionSectionHeader => item.type === \"sectionHeader\"\n );\n const maxVisibleItems =\n headers.length > 0 ? headers[0].maxVisibleItems : undefined;\n\n const scoredItems = fuzzyFilter({\n items: regular.map((item) => item.name),\n query,\n });\n\n const usedIndexes = new Set(scoredItems.map((item) => item.index));\n const extraItems = regular.flatMap((item, index): CompletionListItem[] =>\n item.alwaysInclude && !usedIndexes.has(index)\n ? [{ ...item, index, score: 0 }]\n : []\n );\n let newItems = scoredItems\n .map((item): CompletionListItem => ({ ...item, ...regular[item.index] }))\n .concat(extraItems);\n\n if (maxVisibleItems !== undefined) {\n newItems = newItems.slice(0, maxVisibleItems);\n }\n\n if (newItems.length === 0) return [];\n\n return [...headers, ...newItems];\n });\n}\n\nexport const CompletionToken = styled.span<{ $type: IToken[\"type\"] }>(\n ({ $type }) => ({\n fontWeight: $type === \"match\" ? \"bold\" : \"normal\",\n whiteSpace: \"pre\",\n })\n);\n\ninterface CompletionMenuProps {\n items: CompletionListItem[];\n selectedIndex: number;\n onSelectItem: (item: CompletionListItem) => void;\n onHoverIndex: (index: number) => void;\n listSize: Size;\n}\n\nexport const CompletionMenu = memo(\n forwardRef(function CompletionMenu(\n {\n items,\n selectedIndex,\n onSelectItem,\n onHoverIndex,\n listSize,\n }: CompletionMenuProps,\n forwardedRef: ForwardedRef<IVirtualizedList>\n ) {\n return (\n <ListView.Root\n ref={forwardedRef}\n scrollable\n keyExtractor={(item) => item.id}\n data={items}\n virtualized={listSize}\n pressEventName=\"onPointerDown\"\n sectionHeaderVariant=\"label\"\n renderItem={(item, i) => {\n if (item.type === \"sectionHeader\") {\n return (\n <ListView.Row key={item.id} isSectionHeader>\n {item.name}\n </ListView.Row>\n );\n }\n\n const tokens = fuzzyTokenize({\n item: item.name,\n itemScore: item,\n });\n\n return (\n <ListView.Row\n key={item.id}\n selected={i === selectedIndex}\n onPress={() => onSelectItem(item)}\n onHoverChange={(hovered) => {\n if (hovered) {\n onHoverIndex(i);\n }\n }}\n >\n {tokens.map((token, j) => (\n <CompletionToken key={j} $type={token.type}>\n {token.text}\n </CompletionToken>\n ))}\n {item.icon && (\n <>\n <Spacer.Horizontal />\n {item.icon}\n </>\n )}\n </ListView.Row>\n );\n }}\n />\n );\n })\n);\n\ntype Props = {\n loading?: boolean;\n initialValue?: string;\n placeholder?: string;\n items: (CompletionItem | CompletionSectionHeader)[];\n onChange?: (value: string) => void;\n onHoverItem?: (item: CompletionItem | undefined) => void;\n onSelectItem?: (item: CompletionItem) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onBlur?: (didSubmit: boolean, value: string) => void;\n onDeleteWhenEmpty?: () => void;\n size?: InputFieldSize;\n style?: React.CSSProperties;\n className?: string;\n children?: React.ReactNode;\n hideChildrenWhenFocused?: boolean;\n hideMenuWhenEmptyValue?: boolean;\n};\n\nexport interface IInputFieldWithCompletions {\n focus(): void;\n setValue(value: string): void;\n selectAllInputText(): void;\n}\n\nexport const InputFieldWithCompletions = memo(\n forwardRef(function InputFieldWithCompletions(\n {\n loading,\n initialValue = \"\",\n placeholder,\n items,\n size,\n onChange,\n onSelectItem,\n onHoverItem,\n onFocus,\n onBlur,\n onDeleteWhenEmpty,\n style,\n className,\n children,\n hideChildrenWhenFocused = false,\n hideMenuWhenEmptyValue = false,\n }: Props,\n forwardedRef: ForwardedRef<IInputFieldWithCompletions>\n ) {\n const ref = useRef<HTMLInputElement>(null);\n\n const [isFocused, setIsFocused] = useState(false);\n const [state, _setState] = useState({\n filter: initialValue,\n selectedIndex: 0,\n });\n\n const updateState = useCallback(\n (\n newState: { filter?: string; selectedIndex?: number },\n hoverItem?: \"resetHover\"\n ) => {\n const nextState = { ...state, ...newState };\n const nextItems = filterWithGroupedSections(items, nextState.filter);\n\n // If we would be selecting a header, find the next valid index\n if (nextItems[nextState.selectedIndex]?.type === \"sectionHeader\") {\n nextState.selectedIndex = getNextIndex(\n nextItems,\n nextState.selectedIndex,\n \"next\",\n (item) => item.type === \"sectionHeader\"\n );\n }\n\n if (hoverItem === \"resetHover\") {\n onHoverItem?.(undefined);\n } else {\n const nextItem = nextItems[nextState.selectedIndex];\n\n if (nextItem && nextItem.type !== \"sectionHeader\") {\n onHoverItem?.(nextItem);\n } else {\n onHoverItem?.(undefined);\n }\n }\n\n _setState(nextState);\n if (newState.filter !== undefined) {\n onChange?.(newState.filter);\n }\n },\n [items, onChange, onHoverItem, state]\n );\n\n const initialValueRef = useRef(initialValue);\n\n useLayoutEffect(() => {\n if (initialValueRef.current === initialValue) return;\n initialValueRef.current = initialValue;\n updateState({ filter: initialValue });\n }, [initialValue, updateState]);\n\n const { filter, selectedIndex } = state;\n\n const listRef = React.useRef<ListView.VirtualizedList>(null);\n\n const filteredItems = useMemo(\n () => filterWithGroupedSections(items, filter),\n [items, filter]\n );\n\n const [normalItems, sectionHeaderItems] = partition(\n filteredItems,\n (item) => item.type !== \"sectionHeader\"\n );\n\n const height = Math.min(\n ListView.calculateHeight(\n normalItems.length,\n sectionHeaderItems.length,\n \"label\"\n ),\n ListView.rowHeight * 10.5\n );\n\n useEffect(() => {\n if (listRef.current) {\n listRef.current.scrollToIndex(selectedIndex);\n }\n }, [selectedIndex]);\n\n // Keep track of the last submitted value so we can detect whether a blur\n // event was caused by selecting an item or not\n const lastSubmittedValueRef = useRef<\n { filter: string; itemName: string } | undefined\n >(undefined);\n\n const selectItem = useCallback(\n (item: CompletionListItem) => {\n if (item.type === \"sectionHeader\") return;\n\n lastSubmittedValueRef.current = {\n filter,\n itemName: item.name,\n };\n\n onSelectItem?.(item);\n onHoverItem?.(undefined);\n\n if (ref && typeof ref === \"object\") {\n ref.current?.blur();\n }\n },\n [filter, onSelectItem, onHoverItem, ref]\n );\n\n const handleChange = useCallback(\n (value: string) => updateState({ selectedIndex: 0, filter: value }),\n [updateState]\n );\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n const didSubmit = lastSubmittedValueRef.current?.filter === filter;\n updateState({ selectedIndex: 0, filter: initialValue }, \"resetHover\");\n onBlur?.(didSubmit, filter);\n }, [filter, initialValue, onBlur, updateState]);\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = useCallback(\n (event) => {\n setIsFocused(true);\n updateState({ selectedIndex: 0, filter: initialValue });\n onFocus?.(event);\n },\n [initialValue, onFocus, updateState]\n );\n\n const handleIndexChange = useCallback(\n (index: number) => updateState({ selectedIndex: index }),\n [updateState]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n let handled = false;\n\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n handleIndexChange(\n getNextIndex(\n filteredItems,\n selectedIndex,\n event.key === \"ArrowDown\" ? \"next\" : \"previous\",\n (item) => item.type === \"sectionHeader\"\n )\n );\n\n handled = true;\n break;\n case \"Enter\": {\n const item = filteredItems[selectedIndex];\n if (item) {\n selectItem(item);\n }\n\n handled = true;\n break;\n }\n case \"Tab\": {\n // Update the filter to the selected item\n const item = filteredItems[selectedIndex];\n if (item) {\n handleChange(item.name);\n }\n\n handled = true;\n break;\n }\n case \"Escape\":\n if (ref && typeof ref === \"object\") {\n ref.current?.blur();\n }\n\n handled = true;\n break;\n case \"Backspace\":\n case \"Delete\": {\n if (filter === \"\") {\n onDeleteWhenEmpty?.();\n }\n\n break;\n }\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [\n handleIndexChange,\n filteredItems,\n selectedIndex,\n ref,\n selectItem,\n handleChange,\n filter,\n onDeleteWhenEmpty,\n ]\n );\n\n const display = !filter && hideMenuWhenEmptyValue ? \"none\" : \"flex\";\n\n const typeaheadValue = filteredItems[selectedIndex]?.name;\n\n useImperativeHandle(forwardedRef, () => ({\n focus: () => {\n ref.current?.focus();\n },\n setValue: (value: string) => {\n handleChange(value);\n },\n selectAllInputText: () => {\n ref.current?.setSelectionRange(0, ref.current.value.length);\n },\n }));\n\n return (\n <InputField.Root\n size={size}\n labelSize={16}\n renderPopoverContent={({ width }) => {\n const listSize = { width, height };\n\n return (\n <Stack.V flex={`0 0 ${height}px`} display={display}>\n {filteredItems.length > 0 ? (\n <CompletionMenu\n ref={listRef}\n items={filteredItems}\n selectedIndex={selectedIndex}\n onSelectItem={selectItem}\n onHoverIndex={handleIndexChange}\n listSize={listSize}\n />\n ) : (\n <Stack.V\n height=\"100px\"\n padding=\"20px\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Small color=\"textDisabled\">\n {loading ? \"Loading\" : \"No results\"}\n </Small>\n </Stack.V>\n )}\n </Stack.V>\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={handleKeyDown}\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={isFocused && display !== \"none\"}\n aria-controls=\"component-listbox\"\n />\n {filter && typeaheadValue && typeaheadValue.startsWith(filter) && (\n <InputField.Typeahead value={typeaheadValue} />\n )}\n {(!isFocused || !hideChildrenWhenFocused) && children}\n {loading && isFocused && (\n <InputField.Label>\n <ActivityIndicator />\n </InputField.Label>\n )}\n </InputField.Root>\n );\n })\n);\n\nfunction getNextIndex<T>(\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","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 const tokens: IToken[] = [];\n\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 { range } from \"@noya-app/noya-utils\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport React, {\n Children,\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\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 styled from \"styled-components\";\nimport { mergeEventHandlers } from \"../hooks/mergeEventHandlers\";\nimport { useHover } from \"../hooks/useHover\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { InputField } from \"./InputField\";\nimport { MenuItem } from \"./internal/Menu\";\nimport { ScrollArea } from \"./ScrollArea\";\nimport {\n DropValidator,\n normalizeListDestinationIndex,\n RelativeDropPosition,\n Sortable,\n} from \"./Sortable\";\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 = 27;\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 isDragging?: 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 = styled.span(({ theme }) => ({\n flex: \"1 1 0\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"pre\",\n}));\n\n/* ----------------------------------------------------------------------------\n * EditableRowTitle\n * ------------------------------------------------------------------------- */\n\nconst ListViewEditableRowTitleElement = styled(InputField.Input)(\n ({ theme }) => ({\n background: theme.colors.listView.editingBackground,\n })\n) as typeof InputField.Input;\n\nexport interface EditableRowProps {\n value: string;\n onSubmitEditing: (value: string) => void;\n autoFocus: boolean;\n placeholder?: string;\n}\n\nfunction ListViewEditableRowTitle({\n value,\n onSubmitEditing,\n autoFocus,\n placeholder,\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 setTimeout(() => {\n element.select();\n }, 0);\n }, [autoFocus]);\n\n return (\n <ListViewEditableRowTitleElement\n ref={inputRef}\n variant=\"bare\"\n value={value}\n placeholder={placeholder}\n onSubmit={onSubmitEditing}\n allowSubmittingWithSameValue\n />\n );\n}\n\nfunction getPositionMargin(marginType: ListRowMarginType) {\n return {\n top: marginType === \"top\" || marginType === \"vertical\" ? 8 : 0,\n bottom: marginType === \"bottom\" || marginType === \"vertical\" ? 8 : 0,\n };\n}\n\n/* ----------------------------------------------------------------------------\n * Row\n * ------------------------------------------------------------------------- */\n\nconst RowContainer = styled.div<{\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}>(\n ({\n theme,\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 }) => {\n const margin = getPositionMargin($marginType);\n\n return {\n ...($isSectionHeader && $sectionHeaderVariant === \"label\"\n ? theme.textStyles.label\n : theme.textStyles.small),\n ...($isSectionHeader && { fontWeight: 500 }),\n gap: $gap,\n flex: \"0 0 auto\",\n userSelect: \"none\",\n cursor: \"default\",\n ...($variant !== \"bare\" && {\n paddingTop: \"6px\",\n paddingRight: \"12px\",\n paddingBottom: \"6px\",\n paddingLeft: \"12px\",\n ...($variant === \"padded\" && {\n borderRadius: \"2px\",\n marginLeft: \"8px\",\n marginRight: \"8px\",\n marginTop: `${margin.top}px`,\n marginBottom: `${margin.bottom}px`,\n }),\n }),\n color: theme.colors.textMuted,\n ...($isSectionHeader && {\n backgroundColor: theme.colors.listView.raisedBackground,\n ...($sectionHeaderVariant === \"label\" && {\n color: theme.colors.textDisabled,\n }),\n }),\n ...($disabled && {\n color: theme.colors.textDisabled,\n }),\n ...($selected && {\n color: \"white\",\n backgroundColor: theme.colors[$colorScheme],\n }),\n display: \"flex\",\n alignItems: \"center\",\n ...($selected &&\n !$isSectionHeader &&\n ($selectedPosition === \"middle\" || $selectedPosition === \"last\") && {\n borderTopRightRadius: \"0px\",\n borderTopLeftRadius: \"0px\",\n }),\n ...($selected &&\n !$isSectionHeader &&\n ($selectedPosition === \"middle\" || $selectedPosition === \"first\") && {\n borderBottomRightRadius: \"0px\",\n borderBottomLeftRadius: \"0px\",\n }),\n position: \"relative\",\n ...($hovered && {\n boxShadow: `0 0 0 1px ${theme.colors[$colorScheme]} inset`,\n }),\n ...($showsActiveState && {\n \"&:active\": {\n backgroundColor: $selected\n ? $colorScheme === \"secondary\"\n ? theme.colors.secondaryLight\n : theme.colors.primaryLight\n : theme.colors.activeBackground,\n },\n }),\n ...($divider && {\n borderBottom: `1px solid ${theme.colors.dividerSubtle}`,\n }),\n ...($backgroundColor && {\n backgroundColor: $backgroundColor,\n \"&:hover\": {\n backgroundColor: $backgroundColor,\n },\n \"&:active\": {\n backgroundColor: $backgroundColor,\n },\n }),\n };\n }\n);\n\nconst ListViewDragIndicatorElement = styled.div<{\n $relativeDropPosition: RelativeDropPosition;\n $gap: number;\n $offsetLeft: number;\n $colorScheme: ListColorScheme;\n}>(({ theme, $relativeDropPosition, $offsetLeft, $colorScheme, $gap }) => ({\n zIndex: 1,\n position: \"absolute\",\n borderRadius: \"3px\",\n ...($relativeDropPosition === \"inside\"\n ? {\n inset: 2,\n boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${\n $colorScheme === \"secondary\"\n ? theme.colors.secondary\n : theme.colors.dragOutline\n }`,\n }\n : {\n top: $relativeDropPosition === \"above\" ? -(3 + $gap / 2) : undefined,\n bottom: $relativeDropPosition === \"below\" ? -(3 + $gap / 2) : undefined,\n left: $offsetLeft,\n right: 0,\n height: 6,\n background: theme.colors[$colorScheme],\n border: `2px solid white`,\n boxShadow: \"0 0 2px rgba(0,0,0,0.5)\",\n }),\n}));\n\ninterface ListViewClickInfo {\n shiftKey: boolean;\n altKey: boolean;\n metaKey: boolean;\n ctrlKey: boolean;\n}\n\ninterface ListViewRowProps<MenuItemType extends string = string> {\n id?: string;\n tabIndex?: number;\n selected?: boolean;\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 dragIndicatorStyle?:\n | CSSProperties\n | ((props: {\n depth: number;\n indentation: number;\n position: RelativeDropPosition;\n }) => CSSProperties);\n}\n\nconst ListViewRow = forwardRef(function ListViewRow<\n MenuItemType extends string,\n>(\n {\n id,\n tabIndex = 0,\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 }: 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, isDragging } = 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 isDragging\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 }, [isDragging, style]);\n\n const renderContent = (\n {\n relativeDropPosition,\n ...renderProps\n }: React.ComponentProps<typeof RowContainer> & {\n relativeDropPosition?: RelativeDropPosition;\n },\n ref: Ref<HTMLElement>\n ) => {\n const Component = RowContainer;\n\n const element = (\n <Component\n ref={ref as any}\n $colorScheme={colorScheme}\n onContextMenu={onContextMenu}\n $isSectionHeader={isSectionHeader}\n id={id}\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={!isDragging && 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 >\n {relativeDropPosition && (\n <ListViewDragIndicatorElement\n $colorScheme={colorScheme}\n $relativeDropPosition={relativeDropPosition}\n $offsetLeft={33 + 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 = forwardRef(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}\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\nconst RootContainer = styled.div<{\n $scrollable?: boolean;\n $gap?: number;\n}>(({ theme, $scrollable, $gap }) => ({\n flex: $scrollable ? \"1 0 0\" : \"0 0 auto\",\n display: \"flex\",\n flexDirection: \"column\",\n flexWrap: \"nowrap\",\n color: theme.colors.textMuted,\n gap: $gap,\n}));\n\ntype ListViewItemInfo = {\n isDragging: boolean;\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\" | \"padded\" | \"bare\";\n\ntype ListViewSectionHeaderVariant = \"normal\" | \"label\";\n\ntype ListViewRootProps = {\n id?: string;\n className?: string;\n style?: CSSProperties;\n onPress?: () => void;\n scrollable?: boolean;\n expandable?: boolean;\n onMoveItem?: (\n sourceIndex: number,\n destinationIndex: number,\n position: RelativeDropPosition\n ) => void;\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};\n\nconst ListViewRootInner = forwardRef(function ListViewRootInner<T>(\n {\n id,\n className,\n style,\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 }: 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, { isDragging: 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: \"normal\",\n isSectionHeader: false,\n }),\n [colorScheme, sortable, expandable, divider, pressEventName, variant, gap]\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 () => ({ indentation, isDragging: 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, { isDragging: 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 onMoveItem={onMoveItem}\n keys={ids}\n renderOverlay={renderOverlay}\n acceptsDrop={acceptsDrop}\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 margin = child?.marginType\n ? getPositionMargin(child.marginType)\n : { top: 0, bottom: 0 };\n const height =\n (child?.isSectionHeader && child.sectionHeaderVariant === \"label\"\n ? SECTION_HEADER_LABEL_HEIGHT\n : ROW_HEIGHT) +\n (variant === \"padded\" ? margin.top + margin.bottom : 0);\n return height;\n },\n [getItemContextValue, variant]\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\n return (\n <ListViewDraggingContext.Provider value={draggingContextValue}>\n <RootContainer\n id={id}\n className={className}\n style={style}\n {...{\n [pressEventName]: handleClick,\n }}\n $gap={gap}\n $scrollable={scrollable}\n >\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 </RootContainer>\n </ListViewDraggingContext.Provider>\n );\n});\n\nconst ListViewRoot = memo(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 = forwardRef(function SimpleListViewInner<T = any>(\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 = memo(SimpleListViewInner);\n\nexport namespace ListView {\n export const RowTitle = memo(ListViewRowTitle);\n export const EditableRowTitle = memo(ListViewEditableRowTitle);\n export const Row = memo(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 items: number,\n headerCount: number,\n headerVariant: ListViewSectionHeaderVariant\n ) => {\n return (\n items * rowHeight +\n headerCount *\n (headerVariant === \"label\" ? sectionHeaderLabelHeight : rowHeight)\n );\n };\n export const normalizeDestinationIndex = normalizeListDestinationIndex;\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 {\n closestCenter,\n DndContext,\n DragEndEvent,\n DragMoveEvent,\n DragOverlay,\n DragStartEvent,\n PointerSensor,\n Translate,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport React, {\n createContext,\n memo,\n ReactNode,\n Ref,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport type RelativeDropPosition = \"above\" | \"below\" | \"inside\";\n\nexport type DropValidator = (\n sourceIndex: number,\n destinationIndex: number,\n position: RelativeDropPosition\n) => boolean;\n\nexport const normalizeListDestinationIndex = (\n index: number,\n position: \"above\" | \"below\"\n): number => {\n return position === \"above\" ? index : index + 1;\n};\n\nconst defaultAcceptsDrop: DropValidator = (\n sourceIndex,\n destinationIndex,\n position\n) => {\n if (position === \"inside\") return false;\n\n const normalized = normalizeListDestinationIndex(destinationIndex, position);\n\n if (sourceIndex === normalized || sourceIndex + 1 === normalized) {\n return false;\n }\n\n return true;\n};\n\nconst SortableItemContext = createContext<{\n keys: string[];\n position: Translate;\n acceptsDrop: DropValidator;\n setActivatorEvent: (event: PointerEvent) => void;\n axis: \"x\" | \"y\";\n}>({\n keys: [],\n position: { x: 0, y: 0 },\n acceptsDrop: defaultAcceptsDrop,\n setActivatorEvent: () => {},\n axis: \"y\",\n});\n\nfunction validateDropIndicator(\n acceptsDrop: DropValidator,\n keys: string[],\n activeId: string,\n overId: string,\n offsetStart: number,\n elementStart: number,\n elementSize: number\n): RelativeDropPosition | undefined {\n const activeIndex = keys.indexOf(activeId);\n const overIndex = keys.indexOf(overId);\n\n const acceptsDropInside = acceptsDrop(activeIndex, overIndex, \"inside\");\n\n // If we're in the center of the element, prefer dropping inside\n if (\n offsetStart >= elementStart + elementSize / 3 &&\n offsetStart <= elementStart + (elementSize * 2) / 3 &&\n acceptsDropInside\n )\n return \"inside\";\n\n // Are we over the top or bottom half of the element?\n const indicator =\n offsetStart < elementStart + elementSize / 2 ? \"above\" : \"below\";\n\n // Drop above or below if possible, falling back to inside\n return acceptsDrop(activeIndex, overIndex, indicator)\n ? indicator\n : acceptsDropInside\n ? \"inside\"\n : undefined;\n}\n\n/* ----------------------------------------------------------------------------\n * Item\n * ------------------------------------------------------------------------- */\n\ntype UseSortableReturnType = ReturnType<typeof useSortable>;\n\ninterface ItemProps<T> {\n id: string;\n disabled?: boolean;\n children: (\n props: {\n ref: Ref<T>;\n relativeDropPosition?: RelativeDropPosition;\n [key: string]: any;\n } & UseSortableReturnType[\"attributes\"]\n ) => JSX.Element;\n}\n\nfunction SortableItem<T extends HTMLElement>({\n id,\n disabled,\n children,\n}: ItemProps<T>) {\n const { keys, position, acceptsDrop, setActivatorEvent, axis } =\n useContext(SortableItemContext);\n const sortable = useSortable({ id, disabled });\n\n const {\n active,\n activatorEvent,\n attributes,\n listeners,\n setNodeRef,\n isDragging,\n index,\n overIndex,\n over,\n } = sortable;\n\n if (activatorEvent) {\n setActivatorEvent(activatorEvent as PointerEvent);\n }\n\n const eventX = (activatorEvent as PointerEvent | null)?.clientX ?? 0;\n const eventY = (activatorEvent as PointerEvent | null)?.clientY ?? 0;\n const offsetLeft = eventX + position.x;\n const offsetTop = eventY + position.y;\n\n const ref = useCallback((node: T) => setNodeRef(node), [setNodeRef]);\n\n return children({\n ref,\n ...attributes,\n ...listeners,\n relativeDropPosition:\n index >= 0 && index === overIndex && !isDragging && active && over\n ? validateDropIndicator(\n acceptsDrop,\n keys,\n active.id,\n over.id,\n axis === \"x\" ? offsetLeft : offsetTop,\n axis === \"x\" ? over.rect.offsetLeft : over.rect.offsetTop,\n axis === \"x\" ? over.rect.width : over.rect.height\n )\n : undefined,\n });\n}\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\ninterface RootProps {\n keys: string[];\n children: ReactNode;\n renderOverlay?: (index: number) => ReactNode;\n onMoveItem?: (\n sourceIndex: number,\n destinationIndex: number,\n position: RelativeDropPosition\n ) => void;\n acceptsDrop?: DropValidator;\n axis?: \"x\" | \"y\";\n}\n\nfunction SortableRoot({\n keys,\n children,\n onMoveItem,\n renderOverlay,\n acceptsDrop = defaultAcceptsDrop,\n axis = \"y\",\n}: RootProps) {\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 4,\n },\n })\n );\n\n const [activeIndex, setActiveIndex] = useState<number | undefined>();\n const activatorEvent = useRef<PointerEvent | null>(null);\n\n const setActivatorEvent = useCallback((event: PointerEvent) => {\n activatorEvent.current = event;\n }, []);\n\n const [position, setPosition] = useState<Translate>({ x: 0, y: 0 });\n\n const handleDragStart = useCallback(\n (event: DragStartEvent) => {\n setActiveIndex(keys.indexOf(event.active.id));\n },\n [keys]\n );\n\n const handleDragMove = useCallback((event: DragMoveEvent) => {\n setPosition({ ...event.delta });\n }, []);\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n\n setActiveIndex(undefined);\n\n if (over && active.id !== over.id) {\n const oldIndex = keys.indexOf(active.id);\n const newIndex = keys.indexOf(over.id);\n\n const eventX = activatorEvent.current?.clientX ?? 0;\n const eventY = activatorEvent.current?.clientY ?? 0;\n const offsetLeft = eventX + position.x;\n const offsetTop = eventY + position.y;\n\n const indicator = validateDropIndicator(\n acceptsDrop,\n keys,\n active.id,\n over.id,\n axis === \"x\" ? offsetLeft : offsetTop,\n axis === \"x\" ? over.rect.offsetLeft : over.rect.offsetTop,\n axis === \"x\" ? over.rect.width : over.rect.height\n );\n\n if (!indicator) return;\n\n onMoveItem?.(oldIndex, newIndex, indicator);\n }\n },\n [acceptsDrop, axis, keys, onMoveItem, position.x, position.y]\n );\n\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n return (\n <SortableItemContext.Provider\n value={useMemo(\n () => ({\n keys,\n acceptsDrop,\n position,\n setActivatorEvent,\n axis,\n }),\n [acceptsDrop, axis, keys, position, setActivatorEvent]\n )}\n >\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={keys} strategy={verticalListSortingStrategy}>\n {children}\n </SortableContext>\n {mounted &&\n renderOverlay &&\n createPortal(\n <DragOverlay dropAnimation={null}>\n {activeIndex !== undefined &&\n activeIndex >= 0 &&\n renderOverlay(activeIndex)}\n </DragOverlay>,\n document.body\n )}\n </DndContext>\n </SortableItemContext.Provider>\n );\n}\n\nexport namespace Sortable {\n export const Item = memo(SortableItem);\n export const Root = memo(SortableRoot);\n}\n","import React, { ForwardedRef, forwardRef, ReactHTML, ReactNode } from \"react\";\nimport styled, { CSSProperties } from \"styled-components\";\nimport { Theme, ThemeColorName } from \"../theme\";\nimport { BreakpointCollection, mergeBreakpoints } from \"../utils/breakpoints\";\n\nconst elements: Record<keyof Theme[\"textStyles\"], 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\ntype StyleProps = {\n flex?: CSSProperties[\"flex\"];\n padding?: CSSProperties[\"padding\"];\n background?: CSSProperties[\"background\"];\n borderRadius?: CSSProperties[\"borderRadius\"];\n textAlign?: CSSProperties[\"textAlign\"];\n fontWeight?: CSSProperties[\"fontWeight\"];\n fontStyle?: CSSProperties[\"fontStyle\"];\n fontSize?: CSSProperties[\"fontSize\"];\n lineHeight?: CSSProperties[\"lineHeight\"];\n fontFamily?: CSSProperties[\"fontFamily\"];\n wordBreak?: CSSProperties[\"wordBreak\"];\n whiteSpace?: CSSProperties[\"whiteSpace\"];\n height?: CSSProperties[\"height\"];\n width?: CSSProperties[\"width\"];\n minWidth?: CSSProperties[\"minWidth\"];\n maxWidth?: CSSProperties[\"maxWidth\"];\n opacity?: CSSProperties[\"opacity\"];\n position?: CSSProperties[\"position\"];\n overflow?: CSSProperties[\"overflow\"];\n textOverflow?: CSSProperties[\"textOverflow\"];\n textDecoration?: CSSProperties[\"textDecoration\"];\n display?: CSSProperties[\"display\"];\n top?: CSSProperties[\"top\"];\n right?: CSSProperties[\"right\"];\n bottom?: CSSProperties[\"bottom\"];\n left?: CSSProperties[\"left\"];\n userSelect?: CSSProperties[\"userSelect\"];\n cursor?: CSSProperties[\"cursor\"];\n};\n\nexport type TextBreakpointList = BreakpointCollection<StyleProps>;\n\ninterface Props extends StyleProps {\n as?: keyof ReactHTML;\n href?: string;\n className?: string;\n variant: keyof Theme[\"textStyles\"];\n breakpoints?: BreakpointCollection<StyleProps> | null | false;\n color?: ThemeColorName;\n children: ReactNode;\n onClick?: () => void;\n onDoubleClick?: () => void;\n onKeyDown?: (event: React.KeyboardEvent<HTMLSpanElement>) => void;\n tabIndex?: number;\n}\n\nconst StyledElement = styled.span<{\n $variant: keyof Theme[\"textStyles\"];\n $styleProps: StyleProps;\n $color: ThemeColorName;\n $breakpoints: BreakpointCollection<StyleProps> | null | false;\n}>(({ theme, $variant, $styleProps, $breakpoints, $color }) => ({\n ...(theme.textStyles as any)[$variant],\n color: $color ? theme.colors[$color] : undefined,\n ...$styleProps,\n ...mergeBreakpoints($breakpoints || []),\n}));\n\nexport const Text = forwardRef(function Text(\n {\n as,\n variant,\n breakpoints,\n children,\n className,\n color,\n href,\n tabIndex,\n onClick,\n onKeyDown,\n ...rest\n }: Props,\n forwardedRef: ForwardedRef<HTMLElement>\n) {\n const element = as ?? elements[variant] ?? \"span\";\n\n return (\n <StyledElement\n ref={forwardedRef}\n as={element}\n className={className}\n tabIndex={tabIndex}\n $variant={variant}\n $breakpoints={breakpoints}\n $styleProps={rest}\n $color={color}\n onClick={onClick}\n onKeyDown={onKeyDown}\n {...((href && { href }) as any)}\n >\n {children}\n </StyledElement>\n );\n});\n\ntype PresetProps = Omit<Props, \"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 {\n Divider,\n ScrollArea,\n Stack,\n useDesignSystemTheme,\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 const theme = useDesignSystemTheme();\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: theme.colors.sidebar.background,\n ...style,\n }}\n >\n {header}\n {children ? (\n <ScrollArea>\n <Stack.V position=\"relative\">\n {showDividers\n ? withSeparatorElements(children, <Divider />)\n : children}\n </Stack.V>\n </ScrollArea>\n ) : fallback ? (\n <Stack.V position=\"relative\" height=\"100%\">\n {fallback}\n </Stack.V>\n ) : null}\n </div>\n );\n })\n);\n","import React, { memo, ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { Spacer } from \"./Spacer\";\n\n/* ----------------------------------------------------------------------------\n * Label\n * ------------------------------------------------------------------------- */\n\nconst LabelLabel = styled.label<{ $selected?: boolean }>(\n ({ theme, $selected }) => ({\n ...theme.textStyles.small,\n color: theme.colors.textMuted,\n ...($selected && {\n color: theme.colors.text,\n }),\n fontSize: \"11px\",\n flex: \"0 0 auto\",\n minWidth: \"0\",\n letterSpacing: \"0.4px\",\n whiteSpace: \"pre\", // prevent breaking - may need to make this an option\n })\n);\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nconst LabelContainer = styled.span(({ theme }) => ({\n flex: \"0 0 auto\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n minWidth: \"0\",\n textAlign: \"left\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n}));\n\ninterface LabelRootProps {\n label: ReactNode;\n children: ReactNode;\n}\n\nfunction LabelRoot({ label, children }: LabelRootProps) {\n return (\n <LabelContainer>\n {children}\n {label && (\n <>\n <Spacer.Vertical size={2} />\n <LabelLabel>{label}</LabelLabel>\n </>\n )}\n </LabelContainer>\n );\n}\n\nexport namespace Label {\n export const Label = memo(LabelLabel);\n export const Root = memo(LabelRoot);\n}\n","import * as kiwi from 'kiwi.js';\nimport React, {\n Children,\n createRef,\n Fragment,\n isValidElement,\n memo,\n ReactNode,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div(({ theme }) => ({\n display: 'flex',\n flex: '1',\n flexDirection: 'column',\n position: 'relative',\n}));\n\nconst Tools = styled.div(({ theme }) => ({\n display: 'flex',\n flex: '1',\n alignItems: 'center',\n}));\n\nconst Labels = styled.div(({ theme }) => ({\n height: 'var(--height)',\n position: 'relative',\n overflow: 'hidden',\n userSelect: 'none',\n}));\n\ninterface ContainerProps {\n children: ReactNode;\n renderLabel: (provided: { id: string; index: number }) => ReactNode;\n}\n\nexport const LabeledElementView = memo(function LabeledElementView({\n children,\n renderLabel,\n}: ContainerProps) {\n const elementIds: string[] = Children.toArray(children)\n .flatMap((child) =>\n isValidElement(child) && child.type === Fragment\n ? (child.props.children as ReactNode[])\n : [child],\n )\n .map((child) =>\n isValidElement(child) && 'id' in child.props ? child.props.id : null,\n )\n .filter((id) => !!id);\n const serializedIds = elementIds.join(',');\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n const refs = useMemo(() => {\n return Object.fromEntries(\n serializedIds.split(',').map((id) => [id, createRef<HTMLSpanElement>()]),\n );\n }, [serializedIds]);\n\n const labelElements = 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 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 <Container ref={containerRef}>\n <Tools>{children}</Tools>\n <Labels>{labelElements}</Labels>\n </Container>\n );\n});\n","import { clamp } from '@noya-app/noya-utils';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\nimport React, { CSSProperties } from 'react';\nimport styled from 'styled-components';\n\ntype ProgressVariant = 'normal' | 'warning' | 'primary' | 'secondary';\n\nexport function Progress({\n value,\n width,\n height = 5,\n flex,\n variant = 'normal',\n}: {\n value: number;\n height?: CSSProperties['height'];\n width?: CSSProperties['width'];\n flex?: CSSProperties['flex'];\n variant?: ProgressVariant;\n}) {\n const clampedValue = clamp(value, 0, 100);\n\n return (\n <ProgressRoot value={clampedValue} style={{ width, flex, height }}>\n <ProgressIndicator\n variant={variant}\n style={{ transform: `translateX(-${100 - clampedValue}%)` }}\n />\n </ProgressRoot>\n );\n}\n\nconst ProgressRoot = styled(ProgressPrimitive.Root)(({ theme }) => ({\n position: 'relative',\n overflow: 'hidden',\n background: theme.colors.inputBackground,\n\n // Fix overflow clipping in Safari\n // https://gist.github.com/domske/b66047671c780a238b51c51ffde8d3a0\n transform: 'translateZ(0)',\n}));\n\nconst ProgressIndicator = styled(ProgressPrimitive.Indicator)<{\n variant: ProgressVariant;\n}>(({ theme, variant }) => ({\n backgroundColor:\n variant === 'primary'\n ? theme.colors.primary\n : variant === 'secondary'\n ? theme.colors.secondary\n : variant === 'warning'\n ? theme.colors.warning\n : theme.colors.text,\n width: '100%',\n height: '100%',\n transition: 'transform 660ms cubic-bezier(0.65, 0, 0.35, 1)',\n}));\n","import * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport React, {\n createContext,\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport styled from \"styled-components\";\nimport { Tooltip } from \"./Tooltip\";\n\ntype RadioGroupColorScheme = \"primary\" | \"secondary\";\n\nconst ignoredProps = new Set([\"colorScheme\"]);\n\nconst StyledRoot = styled(ToggleGroupPrimitive.Root).withConfig({\n shouldForwardProp: (prop) => !ignoredProps.has(prop),\n})<{\n colorScheme?: RadioGroupColorScheme;\n}>(({ theme, colorScheme }) => ({\n appearance: \"none\",\n width: \"0px\", // Reset intrinsic width\n flex: \"1 1 0px\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n minWidth: \"0\",\n textAlign: \"left\",\n alignSelf: \"stretch\",\n borderRadius: \"4px\",\n background: theme.colors.inputBackground,\n \"&:focus\": {\n boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${\n theme.colors[colorScheme ?? \"primary\"]\n }`,\n },\n display: \"flex\",\n alignItems: \"stretch\",\n minHeight: \"27px\",\n padding: colorScheme === undefined ? \"2px\" : 0,\n}));\n\nconst StyledItem = styled(ToggleGroupPrimitive.Item).withConfig({\n shouldForwardProp: (prop) => !ignoredProps.has(prop),\n})<{\n colorScheme?: RadioGroupColorScheme;\n}>(({ theme, colorScheme }) => ({\n ...theme.textStyles.small,\n position: \"relative\",\n flex: \"1 1 0\",\n appearance: \"none\",\n border: \"none\",\n background: \"none\",\n color: \"rgb(139, 139, 139)\",\n padding: 0,\n margin: 0,\n borderRadius: \"4px\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n verticalAlign: \"middle\",\n '&[aria-checked=\"true\"]': {\n backgroundColor: colorScheme\n ? theme.colors[colorScheme]\n : theme.colors.radioGroup.background,\n color: colorScheme ? theme.colors.radioGroup.background : theme.colors.text,\n boxShadow: colorScheme ? undefined : `0 1px 1px rgba(0,0,0,0.1)`,\n },\n \"&:focus\": {\n outline: \"none\",\n boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${\n theme.colors[colorScheme ?? \"primary\"]\n }`,\n },\n}));\n\ninterface ItemProps {\n value: string;\n tooltip?: ReactNode;\n children: ReactNode;\n disabled?: boolean;\n}\n\nconst ToggleGroupItem = forwardRef(function ToggleGroupItem(\n { value, tooltip, children, disabled = false }: ItemProps,\n forwardedRef: React.ForwardedRef<HTMLButtonElement>\n) {\n const { colorScheme } = useContext(RadioGroupContext);\n\n const itemElement = (\n <StyledItem\n ref={forwardedRef}\n value={value}\n disabled={disabled}\n colorScheme={colorScheme}\n >\n {children}\n </StyledItem>\n );\n\n return tooltip ? (\n <Tooltip content={tooltip}>{itemElement}</Tooltip>\n ) : (\n itemElement\n );\n});\n\ntype RadioGroupContextValue = {\n colorScheme?: RadioGroupColorScheme;\n};\n\nconst RadioGroupContext = createContext<RadioGroupContextValue>({\n colorScheme: \"primary\",\n});\n\ninterface Props {\n id?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n colorScheme?: RadioGroupColorScheme;\n allowEmpty?: boolean;\n children: ReactNode;\n}\n\nfunction ToggleGroupRoot({\n id,\n value,\n onValueChange,\n colorScheme,\n allowEmpty,\n children,\n}: Props) {\n const contextValue = useMemo(() => ({ colorScheme }), [colorScheme]);\n\n const handleValueChange = useCallback(\n (value: string) => {\n if (!allowEmpty && !value) return;\n onValueChange?.(value);\n },\n [allowEmpty, onValueChange]\n );\n\n return (\n <RadioGroupContext.Provider value={contextValue}>\n <StyledRoot\n id={id}\n type=\"single\"\n value={value}\n colorScheme={colorScheme}\n onValueChange={handleValueChange}\n >\n {children}\n </StyledRoot>\n </RadioGroupContext.Provider>\n );\n}\n\nexport namespace RadioGroup {\n export const Root = memo(ToggleGroupRoot);\n export const Item = memo(ToggleGroupItem);\n}\n","import { memoize } from \"@noya-app/noya-utils\";\nimport React, {\n createContext,\n CSSProperties,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport styled from \"styled-components\";\n\ntype SelectContextValue = {\n addListener: (value: string, listener: () => void) => void;\n removeListener: (value: string) => void;\n};\n\nconst SelectContext = createContext<SelectContextValue | undefined>(undefined);\n\ninterface SelectOptionProps<T extends string> {\n value: T;\n title?: string;\n onSelect?: () => void;\n}\n\nexport const SelectOption = memo(function SelectOption<T extends string>({\n value,\n title,\n onSelect,\n}: SelectOptionProps<T>) {\n const { addListener, removeListener } = useContext(SelectContext)!;\n\n useEffect(() => {\n if (!onSelect) return;\n\n addListener(value, onSelect);\n\n return () => removeListener(value);\n }, [addListener, onSelect, removeListener, value]);\n\n return <option value={value}>{title ?? value}</option>;\n});\n\nconst createChevronSVGString = memoize((color: string) =>\n `\n <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 15' fill='${color}'>\n <path d='M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z'></path>\n </svg>\n`.replace(/\\n/g, \"\")\n);\n\nconst SelectContainer = styled.div<{ $flex: CSSProperties[\"flex\"] }>(\n ({ $flex }) => ({\n flex: $flex ?? \"1 1 0px\",\n display: \"flex\",\n flexDirection: \"row\",\n position: \"relative\",\n })\n);\n\nconst SelectElement = styled.select<{ $flex: CSSProperties[\"flex\"] }>(\n ({ theme, $flex }) => ({\n appearance: \"none\",\n ...theme.textStyles.small,\n color: theme.colors.text,\n lineHeight: \"19px\",\n width: \"0px\", // Reset intrinsic width\n flex: $flex ?? \"1 1 0px\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n minWidth: \"0\",\n textAlign: \"left\",\n alignSelf: \"stretch\",\n borderRadius: \"4px\",\n paddingTop: \"4px\",\n paddingBottom: \"4px\",\n paddingLeft: \"6px\",\n paddingRight: \"23px\",\n background: [\n `calc(100% - 6px) / 15px url(\"data:image/svg+xml;utf8,${createChevronSVGString(\n theme.colors.icon\n )}\") no-repeat`,\n theme.colors.inputBackground,\n ].join(\",\"),\n \"&:focus\": {\n boxShadow: `0 0 0 2px ${theme.colors.primary}`,\n },\n })\n);\n\nconst SelectLabel = styled.label(({ theme }) => ({\n ...theme.textStyles.label,\n color: theme.colors.textDisabled,\n lineHeight: \"19px\",\n position: \"absolute\",\n inset: \"0\",\n fontWeight: \"bold\",\n fontSize: \"60%\",\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"end\",\n paddingRight: \"24px\",\n}));\n\ntype ChildrenProps<T> =\n | {\n children: ReactNode;\n }\n | {\n options: readonly T[];\n getTitle?: (option: T, index: number) => string;\n onChange: (value: T) => void;\n };\n\ntype Props<T extends string> = ChildrenProps<T> & {\n id: string;\n flex?: CSSProperties[\"flex\"];\n value: T;\n label?: ReactNode;\n};\n\nexport const Select = memo(function Select<T extends string>({\n id,\n flex,\n value,\n label,\n ...rest\n}: Props<T>) {\n const options = \"options\" in rest ? rest.options : undefined;\n const getTitle = \"options\" in rest ? rest.getTitle : undefined;\n const onChange = \"options\" in rest ? rest.onChange : undefined;\n const children = \"options\" in rest ? undefined : rest.children;\n\n const optionElements = useMemo(\n () =>\n options\n ? options.map((option, index) => (\n <SelectOption\n key={option}\n value={option}\n title={getTitle?.(option, index)}\n onSelect={() => onChange?.(option)}\n />\n ))\n : children,\n [children, getTitle, onChange, options]\n );\n\n const listeners = useRef<Map<string, () => void>>(new Map());\n\n const contextValue: SelectContextValue = useMemo(\n () => ({\n addListener: (value, listener) => listeners.current.set(value, listener),\n removeListener: (value) => listeners.current.delete(value),\n }),\n []\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <SelectContainer $flex={flex}>\n <SelectElement\n id={id}\n $flex={flex}\n value={value}\n onChange={useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) =>\n listeners.current.get(event.target.value)?.(),\n [listeners]\n )}\n onPointerDown={(event) => event.stopPropagation()}\n >\n {optionElements}\n </SelectElement>\n </SelectContainer>\n {label && <SelectLabel htmlFor={id}>{label}</SelectLabel>}\n </SelectContext.Provider>\n );\n});\n","import { DropdownChevronIcon } from \"@noya-app/noya-icons\";\nimport * as Select from \"@radix-ui/react-select\";\nimport React, { CSSProperties, memo } from \"react\";\nimport { styled } from \"styled-components\";\nimport { Button } from \"./Button\";\nimport { renderIcon } from \"./Icons\";\nimport { Spacer } from \"./Spacer\";\nimport { MenuItem, RegularMenuItem, styles } from \"./internal/Menu\";\n\ntype Props<T extends string> = {\n id?: string;\n style?: React.CSSProperties;\n className?: string;\n menuItems: MenuItem<T>[];\n value: T;\n onSelect?: (value: T) => void;\n placeholder?: string;\n disabled?: boolean;\n readOnly?: boolean;\n};\n\nconst readOnlyStyle: CSSProperties = {\n justifyContent: \"flex-start\",\n textAlign: \"left\",\n};\n\nexport const SelectMenu = memo(function SelectMenu<T extends string = string>({\n id,\n style,\n className,\n menuItems,\n value,\n onSelect,\n placeholder,\n disabled,\n readOnly,\n}: Props<T>) {\n const selectedItem = menuItems.find(\n (item): item is RegularMenuItem<T> =>\n typeof item !== \"string\" && item.value === value\n );\n const icon = selectedItem?.icon;\n\n if (readOnly) {\n return (\n <Button\n id={id}\n style={style}\n contentStyle={readOnlyStyle}\n className={className}\n disabled={disabled}\n >\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n {selectedItem?.title ?? value}\n </Button>\n );\n }\n\n return (\n <Select.Root value={value} onValueChange={onSelect}>\n <Select.SelectTrigger asChild>\n <Button id={id} style={style} className={className} disabled={disabled}>\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n <Select.Value placeholder={placeholder} />\n <Spacer.Horizontal />\n <DropdownChevronIcon />\n </Button>\n </Select.SelectTrigger>\n <Select.Portal>\n <SelectContent>\n <SelectViewport>\n {menuItems.map((menuItem) => {\n if (typeof menuItem === \"string\") {\n return <StyledSeparator />;\n }\n\n const value = menuItem.value ?? \"\";\n\n return (\n <SelectItem key={value} value={value} icon={menuItem.icon}>\n {menuItem.title ?? value}\n </SelectItem>\n );\n })}\n </SelectViewport>\n </SelectContent>\n </Select.Portal>\n </Select.Root>\n );\n});\n\nconst SelectContent = styled(Select.Content)(styles.contentStyle);\n\nconst SelectViewport = styled(Select.Viewport)({});\n\nconst SelectItem = React.forwardRef(\n (\n {\n children,\n icon,\n ...props\n }: Select.SelectItemProps & { icon?: React.ReactNode },\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n ) => {\n return (\n <StyledItem {...props} ref={forwardedRef}>\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n <Select.ItemText>{children}</Select.ItemText>\n </StyledItem>\n );\n }\n);\n\nconst StyledItem = styled(Select.Item)(styles.itemStyle);\nconst StyledSeparator = styled(Select.Separator)(styles.separatorStyle);\n","import * as RadixSlider from '@radix-ui/react-slider';\nimport React, { useCallback, useMemo } from 'react';\nimport styled from 'styled-components';\n\nconst StyledSlider = styled(RadixSlider.Root)({\n flex: '1',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n userSelect: 'none',\n touchAction: 'none',\n height: '16px',\n});\n\nconst StyledTrack = styled(RadixSlider.Track)(({ theme }) => ({\n backgroundColor: theme.colors.divider,\n position: 'relative',\n flexGrow: 1,\n height: '2px',\n}));\n\nconst StyledRange = styled(RadixSlider.Range)(({ theme }) => ({\n position: 'absolute',\n backgroundColor: theme.colors.primary,\n borderRadius: '9999px',\n height: '100%',\n}));\n\nconst StyledThumb = styled(RadixSlider.Thumb)(({ theme }) => ({\n display: 'block',\n width: '12px',\n height: '12px',\n backgroundColor: theme.colors.slider.background,\n border: `1px solid ${theme.colors.slider.border}`,\n borderRadius: '20px',\n ':focus': {\n outline: 'none',\n },\n}));\n\ninterface Props {\n id?: string;\n value: number;\n onValueChange: (value: number) => void;\n min: number;\n max: number;\n}\n\nexport const Slider = function Slider({\n id,\n value,\n onValueChange,\n min,\n max,\n}: Props) {\n const arrayValue = useMemo(\n () => [Math.min(Math.max(value, min), max)],\n [value, min, max],\n );\n\n const handleValueChange = useCallback(\n (arrayValue: number[]) => {\n onValueChange(arrayValue[0]);\n },\n [onValueChange],\n );\n\n return (\n <StyledSlider\n min={min}\n max={max}\n id={id}\n value={arrayValue}\n onValueChange={handleValueChange}\n >\n <StyledTrack>\n <StyledRange />\n </StyledTrack>\n <StyledThumb />\n </StyledSlider>\n );\n};\n","import * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\ntype SwitchColorScheme = \"normal\" | \"primary\" | \"secondary\";\n\nconst SwitchRoot = styled(SwitchPrimitive.Root)<{\n $colorScheme: SwitchColorScheme;\n}>(({ theme, $colorScheme }) => ({\n all: \"unset\",\n width: 32,\n height: 19,\n backgroundColor: theme.colors.activeBackground,\n borderRadius: \"9999px\",\n position: \"relative\",\n WebkitTapHighlightColor: \"rgba(0, 0, 0, 0)\",\n cursor: \"pointer\",\n \"&:focus\": {\n outline: `2px solid ${theme.colors.primary}`,\n outlineOffset: \"1px\",\n },\n '&[data-state=\"checked\"]': {\n backgroundColor:\n $colorScheme === \"primary\"\n ? theme.colors.primary\n : $colorScheme === \"secondary\"\n ? theme.colors.secondary\n : undefined,\n },\n}));\n\nconst SwitchThumb = styled(SwitchPrimitive.Thumb)({\n display: \"block\",\n width: 15,\n height: 15,\n backgroundColor: \"white\",\n borderRadius: \"9999px\",\n transition: \"transform 100ms\",\n transform: \"translateX(2px)\",\n willChange: \"transform\",\n '&[data-state=\"checked\"]': { transform: \"translateX(15px)\" },\n});\n\ninterface Props {\n value: boolean;\n onChange: (value: boolean) => void;\n colorScheme?: SwitchColorScheme;\n disabled?: boolean;\n}\n\nexport const Switch = function Switch({\n value,\n onChange,\n colorScheme = \"normal\",\n disabled,\n}: Props) {\n return (\n <SwitchRoot\n $colorScheme={colorScheme}\n checked={value}\n disabled={disabled}\n onCheckedChange={(newValue) => {\n onChange(newValue);\n }}\n >\n <SwitchThumb />\n </SwitchRoot>\n );\n};\n","import React, {\n ForwardedRef,\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useContext,\n} 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 onClickChevron?: ({ altKey }: { altKey: boolean }) => void;\n};\n\ntype TreeViewRowProps<MenuItemType extends string> =\n ListView.RowProps<MenuItemType> & TreeRowBaseProps;\n\nconst TreeRow = forwardRef(function TreeRow<MenuItemType extends string>(\n {\n icon,\n expanded,\n onClickChevron,\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 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 = memo(TreeRow);\n export type ClickInfo = ListView.ClickInfo;\n export type RowProps<MenuItemType extends string> =\n TreeViewRowProps<MenuItemType>;\n}\n","import { useDesignSystemTheme } from \"@noya-app/noya-designsystem\";\nimport { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport React, { forwardRef, useImperativeHandle, 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 PanelLayoutState,\n RIGHT_SIDEBAR_ID,\n usePreservePanelSize,\n} from \"../hooks/usePreservePanelSize\";\nimport { useWindowSize } from \"../hooks/useWindowSize\";\n\ninterface Props {\n autoSavePrefix?: string;\n leftSidebarContent?: React.ReactNode;\n children?: React.ReactNode;\n rightSidebarContent?: React.ReactNode;\n hasRightSidebar?: boolean;\n hasLeftSidebar?: boolean;\n onChangeLayoutState?: (layoutState: PanelLayoutState) => void;\n leftSidebarCanResize?: boolean;\n id?: string;\n className?: string;\n style?: React.CSSProperties;\n\n /**\n * Accepts a number (px) or % string (e.g. \"50%\").\n * Use % to avoid flicker server-rendering.\n */\n leftSidebarInitialSize?: number | string;\n leftSidebarMinSize?: number | string;\n\n /**\n * Accepts a number (px) or % string (e.g. \"50%\").\n * Use % to avoid flicker server-rendering.\n */\n rightSidebarInitialSize?: number | string;\n rightSidebarMinSize?: number | string;\n}\n\nexport type IWorkspaceLayout = {\n setLeftSidebarExpanded: (expanded: boolean) => void;\n setRightSidebarExpanded: (expanded: boolean) => void;\n toggleAllSidebars: () => void;\n toggleLeftSidebar: () => void;\n toggleRightSidebar: () => void;\n};\n\nexport const WorkspaceLayout = forwardRef(function WorkspaceLayout(\n {\n autoSavePrefix,\n leftSidebarContent: leftPanelContent,\n children: centerPanelContent,\n rightSidebarContent: rightPanelContent,\n hasLeftSidebar = !!leftPanelContent,\n hasRightSidebar = !!rightPanelContent,\n onChangeLayoutState,\n leftSidebarInitialSize = 280,\n rightSidebarInitialSize = 400,\n leftSidebarMinSize,\n rightSidebarMinSize,\n leftSidebarCanResize = false,\n id,\n className,\n style,\n }: Props,\n forwardedRef: React.ForwardedRef<IWorkspaceLayout>\n) {\n const windowSize = useWindowSize();\n function getPercentage(size: number | string) {\n return typeof size === \"string\"\n ? parseFloat(size)\n : (size / windowSize.width) * 100;\n }\n const leftSidebarPercentage = getPercentage(leftSidebarInitialSize);\n const rightSidebarPercentage = getPercentage(rightSidebarInitialSize);\n const leftSidebarMinPercentage =\n leftSidebarMinSize !== undefined\n ? getPercentage(leftSidebarMinSize)\n : undefined;\n const rightSidebarMinPercentage =\n rightSidebarMinSize !== undefined\n ? getPercentage(rightSidebarMinSize)\n : undefined;\n\n const panelGroupRef = useRef<ImperativePanelGroupHandle>(null);\n const leftSidebarRef = useRef<ImperativePanelHandle>(null);\n const rightSidebarRef = useRef<ImperativePanelHandle>(null);\n\n usePreservePanelSize(panelGroupRef, onChangeLayoutState);\n\n const theme = useDesignSystemTheme();\n\n useImperativeHandle(forwardedRef, () => ({\n setLeftSidebarExpanded: (expanded: boolean) => {\n if (expanded) {\n leftSidebarRef.current?.expand();\n } else {\n leftSidebarRef.current?.collapse();\n }\n },\n setRightSidebarExpanded: (expanded: boolean) => {\n if (expanded) {\n rightSidebarRef.current?.expand();\n } else {\n rightSidebarRef.current?.collapse();\n }\n },\n toggleAllSidebars: () => {\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 toggleLeftSidebar: () => {\n const isLeftSidebarExpanded = leftSidebarRef.current?.isExpanded();\n\n if (isLeftSidebarExpanded) {\n leftSidebarRef.current?.collapse();\n } else {\n leftSidebarRef.current?.expand();\n }\n },\n toggleRightSidebar: () => {\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 (leftPanelContent ? leftSidebarPercentage : 0) -\n (rightPanelContent ? rightSidebarPercentage : 0);\n\n return (\n <div\n id={id}\n className={className}\n style={{\n backgroundColor: theme.colors.canvas.background,\n display: \"flex\",\n flexDirection: \"row\",\n ...style,\n }}\n >\n <PanelGroup\n ref={panelGroupRef}\n id={EDITOR_PANEL_GROUP_ID}\n direction=\"horizontal\"\n autoSaveId={\n autoSavePrefix\n ? `${autoSavePrefix}--${EDITOR_PANEL_GROUP_ID}`\n : undefined\n }\n style={{ flex: \"1\" }}\n >\n {hasLeftSidebar && (\n <>\n <Panel\n id={LEFT_SIDEBAR_ID}\n order={1}\n ref={leftSidebarRef}\n defaultSize={leftSidebarPercentage}\n minSize={leftSidebarMinPercentage ?? leftSidebarPercentage}\n {...(!leftSidebarCanResize && { maxSize: leftSidebarPercentage })}\n collapsible\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n position: \"relative\",\n }}\n >\n {leftPanelContent}\n </Panel>\n <PanelResizeHandle\n style={{\n cursor: \"col-resize\",\n width: \"1px\",\n height: \"100%\",\n backgroundColor: theme.colors.divider,\n }}\n />\n </>\n )}\n <Panel\n id={CONTENT_AREA_ID}\n order={2}\n defaultSize={centerPanelPercentage}\n minSize={10}\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n position: \"relative\",\n }}\n >\n {centerPanelContent}\n </Panel>\n {hasRightSidebar && (\n <>\n <PanelResizeHandle\n style={{\n cursor: \"col-resize\",\n width: \"1px\",\n height: \"100%\",\n backgroundColor: theme.colors.divider,\n }}\n />\n <Panel\n id={RIGHT_SIDEBAR_ID}\n order={3}\n ref={rightSidebarRef}\n minSize={rightSidebarMinPercentage ?? rightSidebarPercentage}\n defaultSize={rightSidebarPercentage}\n collapsible\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n position: \"relative\",\n }}\n >\n {rightPanelContent}\n </Panel>\n </>\n )}\n </PanelGroup>\n </div>\n );\n});\n","import React, { useLayoutEffect, useRef } from \"react\";\nimport { ImperativePanelGroupHandle } from \"react-resizable-panels\";\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 type PanelLayoutState = {\n leftSidebarCollapsed: boolean;\n rightSidebarCollapsed: boolean;\n};\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 const leftSidebarWidth = (oldPanelPercentages[0] / 100) * oldWindowWidth;\n\n const newLeftSidebarPercentage =\n (leftSidebarWidth / windowSize.width) * 100;\n\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 }, [panelGroupRef, windowSize.width]);\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 { 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 {\n MenuItem,\n RegularMenuItem,\n SEPARATOR_ITEM,\n} from '../components/internal/Menu';\n\nexport type Optional<T> = T | false | null | undefined;\n\nfunction withSeparators<T>(elements: T[], separator: T) {\n const result: 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<\n Optional<RegularMenuItem<T>>[]\n>[];\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<MenuItem<T>[]>(nonEmptySections, [\n SEPARATOR_ITEM,\n ]).flat();\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 { range } from \"@noya-app/noya-utils\";\nimport React, { ReactNode, memo, useCallback, useMemo } from \"react\";\nimport styled, { useTheme } from \"styled-components\";\nimport withSeparatorElements from \"../utils/withSeparatorElements\";\nimport { Button } from \"./Button\";\nimport { IconButton } from \"./IconButton\";\nimport * as InspectorPrimitives from \"./InspectorPrimitives\";\nimport { ListView } from \"./ListView\";\nimport { RelativeDropPosition, Sortable } from \"./Sortable\";\nimport { Spacer } from \"./Spacer\";\nimport { Stack } from \"./Stack\";\n\nconst ElementRow = styled.div({\n flex: \"0 0 auto\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n});\n\nconst ItemContainer = styled.div({\n position: \"relative\",\n});\n\nexport interface ArrayControllerProps<Item> {\n id: string;\n items: Item[];\n title: ReactNode;\n sortable?: boolean;\n reversed?: boolean;\n expanded?: boolean;\n getKey?: (item: Item) => string;\n onMoveItem?: (sourceIndex: number, destinationIndex: number) => void;\n onClickPlus?: () => void;\n onClickTrash?: () => void;\n onClickExpand?: () => void;\n renderItem: (props: { item: Item; index: number }) => ReactNode;\n renderExpandedContent?: () => ReactNode;\n padding?: number;\n}\n\nexport const ArrayController = memo(function ArrayController<Item>({\n id,\n items,\n title,\n sortable = false,\n reversed = true,\n expanded = false,\n getKey,\n onMoveItem,\n onClickPlus,\n onClickTrash,\n onClickExpand,\n renderItem,\n renderExpandedContent,\n padding = 10,\n}: ArrayControllerProps<Item>) {\n const iconColor = useTheme().colors.icon;\n const primaryLightColor = useTheme().colors.primaryLight;\n\n const keys = useMemo(\n () => items.map((item, index) => getKey?.(item) ?? index.toString()),\n [getKey, items]\n );\n\n const indexes = reversed\n ? range(0, items.length).reverse()\n : range(0, items.length);\n\n const handleMoveItem = useCallback(\n (\n sourceIndex: number,\n destinationIndex: number,\n position: RelativeDropPosition\n ) => {\n if (reversed) {\n if (position === \"above\") {\n position = \"below\";\n } else if (position === \"below\") {\n position = \"above\";\n }\n }\n\n onMoveItem?.(\n sourceIndex,\n position === \"below\" ? destinationIndex + 1 : destinationIndex\n );\n },\n [onMoveItem, reversed]\n );\n\n const renderRow = (index: number) => {\n return (\n <ElementRow key={keys[index]}>\n {renderItem({ item: items[index], index: index })}\n </ElementRow>\n );\n };\n\n return (\n <InspectorPrimitives.Section id={id} $padding={padding} $gap=\"2px\">\n <InspectorPrimitives.SectionHeader>\n <Button variant=\"none\" onClick={onClickPlus}>\n <InspectorPrimitives.Title>{title}</InspectorPrimitives.Title>\n </Button>\n <Spacer.Horizontal />\n {withSeparatorElements(\n [\n onClickTrash && (\n <IconButton\n id={`${id}-trash`}\n iconName=\"TrashIcon\"\n color={iconColor}\n onClick={onClickTrash}\n />\n ),\n onClickExpand && (\n <IconButton\n id={`${id}-gear`}\n iconName=\"GearIcon\"\n color={expanded ? primaryLightColor : iconColor}\n onClick={onClickExpand}\n />\n ),\n onClickPlus && (\n <IconButton\n id={`${id}-add`}\n iconName=\"PlusIcon\"\n color={iconColor}\n onClick={onClickPlus}\n />\n ),\n ],\n <Spacer.Horizontal size={8} />\n )}\n </InspectorPrimitives.SectionHeader>\n <Stack.V gap=\"4px\">\n {sortable ? (\n <Sortable.Root\n keys={keys}\n renderOverlay={renderRow}\n onMoveItem={handleMoveItem}\n >\n {indexes.map((index) => (\n <Sortable.Item<HTMLDivElement> id={keys[index]} key={keys[index]}>\n {({ relativeDropPosition, ...sortableProps }) => (\n <ItemContainer {...sortableProps}>\n {renderRow(index)}\n {relativeDropPosition && (\n <ListView.DragIndicator\n $gap={0}\n $colorScheme=\"primary\"\n $relativeDropPosition={relativeDropPosition}\n $offsetLeft={0}\n />\n )}\n </ItemContainer>\n )}\n </Sortable.Item>\n ))}\n </Sortable.Root>\n ) : (\n indexes.map(renderRow)\n )}\n </Stack.V>\n {expanded && renderExpandedContent?.()}\n </InspectorPrimitives.Section>\n );\n});\n","import React, { CSSProperties, memo, ReactNode } from \"react\";\nimport styled, { useTheme } from \"styled-components\";\nimport { Spacer } from \"./Spacer\";\n\nexport const Section = styled.div<{\n $padding?: CSSProperties[\"padding\"];\n $gap?: CSSProperties[\"gap\"];\n}>(({ theme, $padding = \"10px\", $gap }) => ({\n flex: \"0 0 auto\",\n display: \"flex\",\n flexDirection: \"column\",\n padding: $padding,\n gap: $gap,\n}));\n\nexport const SectionHeader = styled.div(({ theme }) => ({\n display: \"flex\",\n alignItems: \"center\",\n}));\n\nexport const Title = styled.div<{\n $textStyle?: \"small\" | \"heading5\" | \"heading4\" | \"heading3\";\n}>(({ theme, $textStyle }) => ({\n display: \"flex\",\n flexDirection: \"row\",\n userSelect: \"none\",\n ...($textStyle\n ? {\n ...theme.textStyles[$textStyle],\n color: theme.colors.text,\n }\n : {\n ...theme.textStyles.label,\n color: theme.colors.textSubtle,\n fontWeight: \"bold\",\n }),\n}));\n\nexport const Row = styled.div<{ $gap?: CSSProperties[\"gap\"] }>(\n ({ theme, $gap }) => ({\n flex: \"1\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: $gap,\n })\n);\n\nexport const Column = styled.div(({ theme }) => ({\n flex: \"1\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n}));\n\nexport const Checkbox = styled.input(({ theme }) => ({\n margin: 0,\n}));\n\nexport const Text = styled.span(({ theme }) => ({\n ...theme.textStyles.small,\n}));\n\nexport const VerticalSeparator = () => (\n <Spacer.Vertical size={useTheme().sizes.inspector.verticalSeparator} />\n);\n\nexport const HorizontalSeparator = () => (\n <Spacer.Horizontal size={useTheme().sizes.inspector.horizontalSeparator} />\n);\n\nconst SliderRowLabel = styled.span(({ theme }) => ({\n ...theme.textStyles.small,\n color: theme.colors.textMuted,\n marginBottom: \"-6px\",\n}));\n\nexport const RowLabel = styled.span<{\n $textStyle?: \"small\" | \"heading5\" | \"heading4\" | \"heading3\";\n}>(({ theme, $textStyle }) => ({\n // marginBottom: '6px',\n display: \"flex\",\n ...($textStyle\n ? {\n ...theme.textStyles[$textStyle],\n }\n : {\n ...theme.textStyles.label,\n color: theme.colors.textSubtle,\n fontWeight: \"bold\",\n }),\n lineHeight: \"19px\", // Button height\n alignItems: \"center\",\n}));\n\nexport const LabeledRow = memo(function LabeledRow({\n id,\n children,\n label,\n labelTextStyle,\n gap,\n right,\n}: {\n id?: string;\n children: ReactNode;\n label: ReactNode;\n labelTextStyle?: \"small\" | \"heading5\" | \"heading4\" | \"heading3\";\n gap?: CSSProperties[\"gap\"];\n right?: ReactNode;\n}) {\n return (\n <Row id={id}>\n <Column>\n <RowLabel $textStyle={labelTextStyle}>\n {label}\n {right && <Spacer.Horizontal />}\n {right}\n </RowLabel>\n <Row $gap={gap}>{children}</Row>\n </Column>\n </Row>\n );\n});\n\nexport const LabeledSliderRow = memo(function LabeledRow({\n children,\n label,\n}: {\n children: ReactNode;\n label: string;\n}) {\n return (\n <Row>\n <Column>\n <SliderRowLabel>{label}</SliderRowLabel>\n <Row>{children}</Row>\n </Column>\n </Row>\n );\n});\n","import { round } from \"@noya-app/noya-utils\";\nimport React, { memo, useCallback } from \"react\";\nimport { InputField } from \"./InputField\";\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 = 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 = useCallback(\n (value: number) => onSetValue(value, \"adjust\"),\n [onSetValue]\n );\n\n const handleSetValue = useCallback(\n (value: number) => onSetValue(value, \"replace\"),\n [onSetValue]\n );\n\n return (\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 {label && <InputField.Label>{label}</InputField.Label>}\n </InputField.Root>\n );\n});\n"],"mappings":"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","names":["ActivityIndicator","size","React","forwardRef","styled","React","Children","memo","styled","elements","styled","StackBase","elements","Children","React","memo","styled","size","forwardRef","Avatar","name","React","React","forwardRef","styled","React","memo","styled","Content","Tooltip","styled","forwardRef","Button","style","size","React","React","forwardRef","memo","styled","React","createContext","memo","useContext","useEffect","useMemo","useState","useTheme","React","styled","React","forwardRef","memo","React","React","memo","forwardRef","IconButton","size","style","React","styled","React","colors","name","name","colors","React","createContext","useCallback","useContext","useMemo","useRef","useState","styled","React","forwardRef","styled","React","forwardRef","styled","size","Spacer","styled","forwardRef","Dialog","style","React","FullscreenDialog","React","memo","useRef","React","size","memo","AutoSizer","useRef","React","SingleDimensionAutoSizer","React","memo","useCallback","useCallback","useState","style","memo","FileDropTarget","useCallback","React","useRef","isDeepEqual","useCallback","useMemo","useState","useEffect","useState","useEffect","useRef","useCallback","useRef","useRef","useCallback","useMemo","useState","useCallback","useEffect","useMemo","useState","useEffect","useState","useRef","useCallback","useLayoutEffect","useRef","useEffect","useState","useEffect","useState","React","Children","createContext","forwardRef","isValidElement","memo","useCallback","useContext","useEffect","useLayoutEffect","useMemo","useRef","useState","styled","React","forwardRef","memo","useCallback","useMemo","styled","React","memo","styled","styled","memo","KeyboardShortcut","React","styled","memo","useCallback","React","Content","SubContent","forwardRef","DropdownMenuRoot","useMemo","React","forwardRef","useCallback","useEffect","useLayoutEffect","useRef","useState","useEffect","forwardRef","ReadOnlyTextInput","React","ControlledTextInput","useCallback","SubmittableTextInput","useRef","useState","useLayoutEffect","useEffect","React","styled","styled","React","createContext","styled","memo","forwardRef","InputFieldLabel","style","useContext","useRef","useLayoutEffect","React","InputFieldDropdownMenu","size","useMemo","InputFieldButton","useCallback","InputFieldInput","useState","value","Children","isValidElement","isFocused","useEffect","InputField","styled","createContext","DialogProvider","useState","useCallback","useRef","React","useMemo","isOpen","contents","useContext","React","createContext","useContext","useMemo","useState","windows","memo","DesignSystemThemeProvider","useTheme","React","createContext","DesignSystemConfigurationProvider","useState","useEffect","useMemo","useContext","React","hoverProps","styled","size","memo","forwardRef","Chip","style","React","CheckIcon","ChevronRightIcon","useKeyboardShortcuts","React","memo","useCallback","useMemo","styled","SeparatorElement","styled","ItemElement","CheckboxItemElement","StyledItemIndicator","ContextMenuItem","memo","useCallback","React","CheckIcon","ChevronRightIcon","Content","SubContent","useMemo","useKeyboardShortcuts","React","memo","styled","Divider","DividerVertical","React","memo","useCallback","useState","styled","styled","memo","DraggableMenuButton","useState","React","useCallback","React","forwardRef","memo","styled","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","memo","useMemo","styled","useTheme","React","createContext","memo","useContext","useMemo","ImageDataProvider","useLayoutEffect","useMemo","styled","memo","HorizontalDotsBackground","useTheme","useMemo","React","PatternPreviewBackground","size","ColorPreviewBackground","GradientPreviewBackground","FillPreviewBackground","styled","memo","forwardRef","FillInputField","React","React","useCallback","useRef","useState","styles","size","style","rgbaToHsva","React","memo","useCallback","useMemo","memo","GradientPicker","useMemo","rgbaToHsva","useCallback","value","React","styled","React","createContext","forwardRef","memo","useCallback","useContext","useMemo","styled","keyframes","React","memo","useCallback","useState","styled","Container","ScrollArea","sizes","Grid","styled","size","Container","keyframes","forwardRef","GridViewItem","style","React","useContext","useCallback","createContext","useMemo","title","GridView","memo","React","forwardRef","memo","useCallback","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useRef","useState","styled","range","composeRefs","React","Children","createContext","forwardRef","isValidElement","memo","useCallback","useContext","useImperativeHandle","useLayoutEffect","useMemo","useRef","styled","React","createContext","memo","useCallback","useContext","useEffect","useMemo","useRef","useState","createPortal","Sortable","createContext","styled","useRef","useLayoutEffect","React","forwardRef","ListViewRow","style","useContext","useCallback","useMemo","composeRefs","memo","VirtualizedListRow","VirtualizedListInner","size","useImperativeHandle","RootContainer","ListViewRootInner","isValidElement","ChildrenListViewInner","Children","SimpleListViewInner","ListView","React","forwardRef","styled","styled","forwardRef","Text","React","styled","memo","forwardRef","CompletionMenu","React","InputFieldWithCompletions","size","style","useRef","useState","useCallback","useLayoutEffect","useMemo","useEffect","useImperativeHandle","React","forwardRef","memo","InspectorContainer","style","React","memo","styled","styled","LabelContainer","React","memo","React","Children","isValidElement","memo","useLayoutEffect","useMemo","useRef","styled","Container","LabeledElementView","React","styled","React","createContext","forwardRef","memo","useCallback","useContext","useMemo","styled","ignoredProps","styled","forwardRef","ToggleGroupItem","useContext","React","createContext","useMemo","useCallback","value","RadioGroup","memo","React","createContext","memo","useCallback","useContext","useEffect","useMemo","useRef","styled","SelectOption","Select","value","Select","React","memo","styled","memo","SelectMenu","style","React","value","styled","StyledItem","React","useCallback","useMemo","styled","StyledThumb","Slider","arrayValue","React","styled","Switch","React","forwardRef","memo","useCallback","useContext","forwardRef","TreeRow","useContext","useCallback","React","TreeView","memo","useKeyboardShortcuts","React","forwardRef","useImperativeHandle","useRef","useLayoutEffect","useRef","useEffect","useState","size","useRef","useLayoutEffect","forwardRef","WorkspaceLayout","style","size","useRef","useImperativeHandle","useKeyboardShortcuts","React","elements","range","React","memo","useCallback","useMemo","styled","useTheme","Row","Text","Title","React","memo","styled","useTheme","styled","Title","Row","Text","React","useTheme","memo","LabeledRow","styled","ItemContainer","memo","ArrayController","useTheme","useMemo","range","useCallback","React","Title","React","memo","useCallback","memo","DimensionInput","size","useCallback","value","React"]}
1
+ {"version":3,"sources":["../src/components/ActivityIndicator.tsx","../src/components/Avatar.tsx","../src/components/Stack.tsx","../src/utils/breakpoints.ts","../src/utils/withSeparatorElements.ts","../src/components/Button.tsx","../src/components/Tooltip.tsx","../src/components/Chip.tsx","../src/contexts/DesignSystemConfiguration.tsx","../src/components/Toast.tsx","../src/components/IconButton.tsx","../src/components/Icons.tsx","../src/theme/dark.ts","../src/theme/light.ts","../src/mediaQuery.ts","../src/contexts/DialogContext.tsx","../src/components/Dialog.tsx","../src/components/Spacer.tsx","../src/components/InputField.tsx","../../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/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/useLateReference.ts","../../noya-react-utils/src/hooks/useLazyValue.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","../../noya-react-utils/src/utils/assignRef.ts","../src/utils/handleNudge.ts","../src/components/DropdownMenu.tsx","../src/components/internal/Menu.tsx","../src/components/internal/TextInput.tsx","../src/contexts/GlobalInputBlurContext.tsx","../src/components/Popover.tsx","../src/contexts/FloatingWindowContext.tsx","../src/hooks/useHover.ts","../src/components/ContextMenu.tsx","../src/components/Divider.tsx","../src/components/DraggableMenuButton.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/Grid.tsx","../src/components/GridView.tsx","../src/components/ScrollArea.tsx","../src/components/InputFieldWithCompletions.tsx","../src/utils/fuzzyScorer.ts","../src/components/ListView.tsx","../src/hooks/mergeEventHandlers.ts","../src/components/Sortable.tsx","../src/components/Text.tsx","../src/components/InspectorContainer.tsx","../src/components/Label.tsx","../src/components/LabeledElementView.tsx","../src/components/Progress.tsx","../src/components/RadioGroup.tsx","../src/components/Select.tsx","../src/components/SelectMenu.tsx","../src/components/Slider.tsx","../src/components/Switch.tsx","../src/components/TextArea.tsx","../src/components/TreeView.tsx","../src/components/WorkspaceLayout.tsx","../src/hooks/usePreservePanelSize.tsx","../src/hooks/useWindowSize.tsx","../src/hooks/usePlatform.ts","../src/utils/createSectionedMenu.ts","../src/utils/sketchPattern.ts","../src/components/ArrayController.tsx","../src/components/InspectorPrimitives.tsx","../src/components/DimensionInput.tsx"],"sourcesContent":["import React, { memo } from \"react\";\nimport styled, { keyframes } from \"styled-components\";\n\ninterface Props {\n size?: number;\n opacity?: number;\n color?: string;\n trackColor?: string;\n}\n\ninterface SpinnerProps {\n $opacity: number;\n}\n\ninterface SpinnerCircleProps {\n $size: number;\n $color: string;\n $trackColor: string;\n}\n\nconst spin = keyframes`\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n`;\n\nconst Spinner = styled.div<SpinnerProps>`\n display: flex;\n justify-content: center;\n align-items: center;\n opacity: ${({ $opacity }: SpinnerProps) => $opacity};\n`;\n\n// Use css syntax to support keyframes\nconst SpinnerCircle = styled.div<SpinnerCircleProps>`\n border: 2px solid ${({ $trackColor }) => $trackColor};\n border-top: 2px solid ${({ $color }) => $color};\n border-radius: 50%;\n width: ${({ $size }) => `${$size}px`};\n height: ${({ $size }) => `${$size}px`};\n animation: ${spin} 1s linear infinite;\n`;\n\nexport const ActivityIndicator = memo(function ActivityIndicator({\n size = 16,\n opacity = 1,\n color = \"black\",\n trackColor = \"rgba(0, 0, 0, 0.1)\",\n}: Props) {\n return (\n <Spinner $opacity={opacity}>\n <SpinnerCircle $size={size} $color={color} $trackColor={trackColor} />\n </Spinner>\n );\n});\n","import * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport React, { forwardRef } from \"react\";\nimport styled from \"styled-components\";\nimport { Stack } from \"./Stack\";\n\nconst AvatarRoot = styled(AvatarPrimitive.Root)<{\n size: number;\n overflow: number;\n}>(({ theme, size, overflow }) => ({\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n verticalAlign: \"middle\",\n overflow: \"hidden\",\n userSelect: \"none\",\n width: size,\n height: size,\n borderRadius: \"100%\",\n backgroundColor: theme.colors.inputBackground,\n ...(overflow && {\n margin: `-${overflow}px`,\n }),\n\n \"&:hover\": {\n boxShadow: `0 0 0 2px ${theme.colors.sidebar.background}`,\n opacity: 0.9,\n },\n}));\n\nconst AvatarImage = styled(AvatarPrimitive.Image)({\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n borderRadius: \"inherit\",\n});\n\nconst AvatarFallback = styled(AvatarPrimitive.Fallback)<{\n size: number;\n}>(({ theme, size }) => ({\n fontSize: \"0.8rem\",\n fontWeight: 500,\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"white\",\n lineHeight: `${size}px`,\n}));\n\nexport const Avatar = forwardRef(function Avatar(\n {\n image,\n name,\n fallback,\n size = 19,\n overflow = 0,\n ...props\n }: {\n image?: string;\n name?: string;\n fallback?: string;\n size?: number;\n overflow?: number;\n style?: React.CSSProperties;\n className?: string;\n },\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n) {\n return (\n <AvatarRoot ref={forwardedRef} size={size} overflow={overflow} {...props}>\n <AvatarImage src={image} alt={name} />\n <AvatarFallback size={size}>{fallback}</AvatarFallback>\n </AvatarRoot>\n );\n});\n\nconst AvatarStackItemWrapper = styled.div<{\n $size: number;\n}>(({ $size, theme }) => ({\n position: \"relative\",\n width: $size,\n height: $size,\n marginLeft: \"-8px\",\n // outline: `2px solid ${theme.colors.sidebar.background}`,\n borderRadius: \"50%\",\n clipPath: `circle(50%)`,\n overflow: \"hidden\",\n}));\n\nexport function AvatarStack({\n size = 19,\n children,\n}: {\n size?: number;\n children: React.ReactNode;\n}) {\n const childrenArray = React.Children.toArray(children).map((child) => {\n return React.cloneElement(child as React.ReactElement, { size });\n });\n\n return (\n <Stack.H>\n {childrenArray.map((child, index) => {\n if (index === 0) return child;\n\n return (\n <AvatarStackItemWrapper $size={size} key={index}>\n {child}\n </AvatarStackItemWrapper>\n );\n })}\n </Stack.H>\n );\n}\n","import React, {\n Children,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n memo,\n ReactHTML,\n ReactNode,\n} from \"react\";\nimport styled from \"styled-components\";\nimport { BreakpointCollection, mergeBreakpoints } from \"../utils/breakpoints\";\nimport withSeparatorElements from \"../utils/withSeparatorElements\";\n\ninterface StyleProps {\n display?: \"flex\" | \"inline-flex\" | \"none\" | \"block\";\n visibility?: CSSProperties[\"visibility\"];\n position?: CSSProperties[\"position\"];\n zIndex?: CSSProperties[\"zIndex\"];\n gap?: CSSProperties[\"gap\"];\n inset?: CSSProperties[\"inset\"];\n top?: CSSProperties[\"top\"];\n right?: CSSProperties[\"right\"];\n bottom?: CSSProperties[\"bottom\"];\n left?: CSSProperties[\"left\"];\n flexDirection?: CSSProperties[\"flexDirection\"];\n justifyContent?: CSSProperties[\"justifyContent\"];\n alignItems?: CSSProperties[\"alignItems\"];\n alignSelf?: CSSProperties[\"alignSelf\"];\n flex?: CSSProperties[\"flex\"];\n flexWrap?: CSSProperties[\"flexWrap\"];\n height?: CSSProperties[\"height\"];\n minHeight?: CSSProperties[\"minHeight\"];\n maxHeight?: CSSProperties[\"maxHeight\"];\n width?: CSSProperties[\"width\"];\n minWidth?: CSSProperties[\"minWidth\"];\n maxWidth?: CSSProperties[\"maxWidth\"];\n aspectRatio?: CSSProperties[\"aspectRatio\"];\n padding?: CSSProperties[\"padding\"];\n paddingVertical?: string | number;\n paddingHorizontal?: string | number;\n margin?: CSSProperties[\"margin\"];\n background?: CSSProperties[\"background\"];\n backgroundSize?: CSSProperties[\"backgroundSize\"];\n backgroundPosition?: CSSProperties[\"backgroundPosition\"];\n borderRadius?: CSSProperties[\"borderRadius\"];\n overflowX?: CSSProperties[\"overflowX\"];\n overflowY?: CSSProperties[\"overflowY\"];\n overflow?: CSSProperties[\"overflow\"];\n textOverflow?: CSSProperties[\"textOverflow\"];\n boxShadow?: CSSProperties[\"boxShadow\"];\n outline?: CSSProperties[\"outline\"];\n border?: CSSProperties[\"border\"];\n borderTop?: CSSProperties[\"borderTop\"];\n borderRight?: CSSProperties[\"borderRight\"];\n borderBottom?: CSSProperties[\"borderBottom\"];\n borderLeft?: CSSProperties[\"borderLeft\"];\n cursor?: CSSProperties[\"cursor\"];\n userSelect?: CSSProperties[\"userSelect\"];\n transition?: CSSProperties[\"transition\"];\n opacity?: CSSProperties[\"opacity\"];\n filter?: CSSProperties[\"filter\"];\n color?: CSSProperties[\"color\"];\n order?: CSSProperties[\"order\"];\n pointerEvents?: CSSProperties[\"pointerEvents\"];\n lineHeight?: CSSProperties[\"lineHeight\"];\n isolation?: CSSProperties[\"isolation\"];\n backdropFilter?: CSSProperties[\"backdropFilter\"];\n}\n\nexport type StackBreakpointList = BreakpointCollection<StyleProps>;\n\ninterface Props extends StyleProps {\n id?: string;\n as?: keyof ReactHTML;\n className?: string;\n children?: ReactNode;\n separator?: Parameters<typeof withSeparatorElements>[1];\n breakpoints?: StackBreakpointList | null | false;\n href?: string; // Shouldn't be here, ideally\n tabIndex?: number;\n}\n\nconst Element = styled.div<{\n $styleProps: StyleProps;\n $breakpoints?: StackBreakpointList | null | false;\n}>(({ $styleProps, $breakpoints }) => ({\n ...$styleProps,\n ...mergeBreakpoints($breakpoints || []),\n}));\n\nconst StackBase = forwardRef(function StackBase(\n {\n id,\n className,\n as,\n children,\n separator,\n breakpoints,\n tabIndex,\n href,\n ...rest\n }: Props,\n forwardedRef: ForwardedRef<HTMLElement>\n) {\n const elements = separator\n ? withSeparatorElements(Children.toArray(children), separator)\n : children;\n\n const styleProps: StyleProps = {\n display: \"flex\",\n position: \"relative\",\n alignItems: \"stretch\",\n ...rest,\n };\n\n return (\n <Element\n ref={forwardedRef as any}\n id={id}\n className={className}\n as={as}\n $styleProps={styleProps}\n $breakpoints={breakpoints}\n tabIndex={tabIndex}\n {...(href && { href })}\n >\n {elements}\n </Element>\n );\n});\n\ntype StackProps = Omit<Props, \"flexDirection\">;\n\nconst VerticalStack = memo(\n forwardRef(function VStack(\n props: StackProps,\n forwardedRef: ForwardedRef<HTMLElement>\n ) {\n return <StackBase {...props} flexDirection=\"column\" ref={forwardedRef} />;\n })\n);\n\nconst HorizontalStack = memo(\n forwardRef(function HStack(\n props: StackProps,\n forwardedRef: ForwardedRef<HTMLElement>\n ) {\n return <StackBase {...props} flexDirection=\"row\" ref={forwardedRef} />;\n })\n);\n\nexport const Stack = {\n V: VerticalStack,\n H: HorizontalStack,\n};\n","import { CSSObject } from \"styled-components\";\n\ntype BreakpointKey = number | string;\n\nexport type Breakpoint<T extends object> = [BreakpointKey, T];\n\nexport type BreakpointCollection<T extends object> =\n | Breakpoint<T>[]\n | Record<BreakpointKey, T>;\n\nexport type StyleMap = Record<string, CSSObject>;\n\nexport function mergeBreakpoints(\n breakpoints: BreakpointCollection<CSSObject>\n): StyleMap;\nexport function mergeBreakpoints<T extends object>(\n breakpoints: BreakpointCollection<T>,\n transform?: (value: T) => CSSObject\n): StyleMap;\nexport function mergeBreakpoints<T extends object>(\n breakpoints: BreakpointCollection<T>,\n transform?: (value: T) => CSSObject\n): StyleMap {\n const breakpointMap = Array.isArray(breakpoints)\n ? breakpoints.reduce(\n (result: Record<number, T>, item: any /* TODO Fix type */) => {\n const [key, value] = item;\n result[key] = result[key] ? { ...result[key], ...value } : value;\n return result;\n },\n {}\n )\n : breakpoints;\n\n const breakpointList = Object.entries(breakpointMap) as Breakpoint<T>[];\n\n const transformedList = breakpointList\n .sort((a, b) => Number(b[0]) - Number(a[0]))\n .map(([width, value]: Breakpoint<T>) => [\n `@media (min-width: ${width}px)`,\n transform?.(value) ?? value,\n ]);\n\n return Object.fromEntries(transformedList);\n}\n","import { Children, cloneElement, isValidElement, ReactNode } from \"react\";\n\nfunction createKey(key: string | number) {\n return `s-${key}`;\n}\n\nexport default function withSeparatorElements(\n elements: ReactNode,\n separator: ReactNode | (() => ReactNode)\n) {\n const childrenArray = Children.toArray(elements);\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 React, {\n CSSProperties,\n ForwardedRef,\n forwardRef,\n ReactNode,\n useCallback,\n} from \"react\";\nimport styled from \"styled-components\";\nimport { Tooltip } from \"./Tooltip\";\n\ntype ButtonVariant =\n | \"normal\"\n | \"primary\"\n | \"primaryGradient\"\n | \"secondary\"\n | \"secondaryBright\"\n | \"white\"\n | \"thin\"\n | \"floating\"\n | \"none\";\n\ntype ButtonSize = \"normal\" | \"large\";\n\n/* ----------------------------------------------------------------------------\n * Element\n * ------------------------------------------------------------------------- */\n\nexport const ButtonElement = styled.button<{\n $active: boolean;\n $variant: ButtonVariant;\n $size: ButtonSize;\n $flex?: CSSProperties[\"flex\"];\n $defaultBackground?: string;\n}>(\n ({\n theme,\n $active,\n disabled,\n $variant,\n $size,\n $flex,\n $defaultBackground = theme.colors.inputBackground,\n }) => ({\n ...($size === \"large\"\n ? theme.textStyles.heading4\n : theme.textStyles.button),\n textDecoration: \"none\",\n lineHeight: \"1\",\n flex: $flex ?? \"0 0 auto\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n WebkitAppRegion: \"no-drag\",\n userSelect: \"none\",\n minWidth: $variant === \"normal\" ? \"31px\" : undefined,\n textAlign: \"left\",\n borderRadius: \"4px\",\n paddingTop: $variant === \"none\" ? \"0px\" : \"4px\",\n paddingRight:\n $variant === \"none\" ? \"0px\" : $variant === \"thin\" ? \"1px\" : \"6px\",\n paddingBottom: $variant === \"none\" ? \"0px\" : \"4px\",\n paddingLeft:\n $variant === \"none\" ? \"0px\" : $variant === \"thin\" ? \"1px\" : \"6px\",\n ...($size === \"large\" && {\n paddingTop: \"12px\",\n paddingRight: \"16px\",\n paddingBottom: \"12px\",\n paddingLeft: \"16px\",\n }),\n background: $active\n ? theme.colors.primary\n : $variant === \"primaryGradient\"\n ? `linear-gradient(90deg, ${theme.colors.primary}, ${theme.colors.primaryLight})`\n : $variant === \"none\" || $variant === \"thin\"\n ? \"transparent\"\n : $defaultBackground,\n color: $active ? \"white\" : theme.colors.text,\n opacity: disabled ? 0.25 : 1,\n \"&:focus\": {\n outline: `2px solid ${theme.colors.primary}`,\n boxShadow: `0 0 0 1px ${theme.colors.popover.background} inset`,\n },\n \"&:hover\": {\n background:\n $variant === \"primaryGradient\" || $active\n ? theme.colors.primaryLight\n : theme.colors.inputBackgroundLight,\n },\n \"&:active\": {\n background:\n $variant === \"primaryGradient\" || $active\n ? theme.colors.primary\n : theme.colors.activeBackground,\n },\n ...($variant === \"primary\" && {\n background: theme.colors.primary,\n color: \"white\",\n \"&:hover\": {\n background: theme.colors.primaryLight,\n },\n \"&:active\": {\n background: theme.colors.primary,\n },\n }),\n ...($variant === \"secondary\" && {\n background: theme.colors.secondary,\n color: \"white\",\n \"&:hover\": {\n background: theme.colors.secondaryLight,\n },\n \"&:active\": {\n background: theme.colors.secondary,\n },\n }),\n ...($variant === \"secondaryBright\" && {\n background: \"#0ab557\",\n color: \"white\",\n \"&:hover\": {\n opacity: 0.8,\n },\n \"&:active\": {\n opacity: 0.9,\n },\n }),\n ...($variant === \"white\" && {\n background: \"white\",\n \"&:hover\": {\n opacity: 0.8,\n },\n \"&:active\": {\n opacity: 0.9,\n },\n }),\n ...($variant === \"floating\" && {\n background: \"white\",\n color: theme.colors.text,\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.1)\",\n fontSize: \"12px\",\n padding: \"0px 4px\",\n \"&:hover\": {\n opacity: 0.8,\n },\n \"&:active\": {\n opacity: 0.9,\n },\n }),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n\n \"& *\": {\n pointerEvents: \"none\",\n },\n })\n);\n\n/* ----------------------------------------------------------------------------\n * Content\n * ------------------------------------------------------------------------- */\n\nconst ButtonContent = styled.span(({ theme }) => ({\n // Line height of small text - maybe figure out better way to ensure\n // icons don't have a smaller height\n minHeight: \"19px\",\n display: \"flex\",\n alignItems: \"center\",\n flex: \"1\",\n justifyContent: \"center\",\n\n // Helps with alignment with the default small text\n lineHeight: \"15px\",\n}));\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nexport interface ButtonRootProps {\n id?: string;\n className?: string;\n style?: CSSProperties;\n flex?: CSSProperties[\"flex\"];\n tabIndex?: number;\n children: ReactNode;\n active?: boolean;\n disabled?: boolean;\n variant?: ButtonVariant;\n size?: ButtonSize;\n tooltip?: ReactNode;\n onClick?: (event: React.MouseEvent) => void;\n onPointerDown?: (event: React.PointerEvent) => void;\n contentStyle?: CSSProperties;\n defaultBackground?: string;\n as?: React.ElementType;\n htmlFor?: string;\n href?: string;\n target?: string;\n rel?: string;\n}\n\nexport const Button = forwardRef(function Button(\n {\n id,\n className,\n style,\n flex,\n tabIndex,\n tooltip,\n active = false,\n disabled = false,\n variant = \"normal\",\n size = \"normal\",\n contentStyle,\n defaultBackground,\n onClick,\n children,\n ...rest // Propagate any other props so this component works as a Slot\n }: ButtonRootProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const buttonElement = (\n <ButtonElement\n ref={forwardedRef}\n id={id}\n className={className}\n style={style}\n $flex={flex}\n tabIndex={tabIndex}\n $active={active}\n disabled={disabled}\n $variant={variant}\n $size={size}\n $defaultBackground={defaultBackground}\n onClick={onClick}\n // Prevent double clicking a button from triggering any callbacks in ancestors\n onDoubleClick={useCallback((event: React.MouseEvent) => {\n event.stopPropagation();\n }, [])}\n {...rest}\n >\n <ButtonContent style={contentStyle}>{children}</ButtonContent>\n </ButtonElement>\n );\n\n return tooltip ? (\n <Tooltip content={tooltip}>{buttonElement}</Tooltip>\n ) : (\n buttonElement\n );\n});\n","import * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport React, { memo, ReactNode } from 'react';\nimport styled from 'styled-components';\n\n// const Arrow = styled(TooltipPrimitive.Arrow)(({ theme }) => ({\n// fill: theme.colors.popover.background,\n// }));\n\nconst Content = styled(TooltipPrimitive.Content)(({ theme }) => ({\n ...theme.textStyles.small,\n color: theme.colors.text,\n borderRadius: 3,\n padding: `${theme.sizes.spacing.small}px ${theme.sizes.spacing.medium}px`,\n backgroundColor: theme.colors.popover.background,\n boxShadow: '0 2px 4px rgba(0,0,0,0.2), 0 0 12px rgba(0,0,0,0.1)',\n border: `1px solid ${theme.colors.dividerStrong}`,\n}));\n\ninterface Props {\n children: ReactNode;\n content: ReactNode;\n}\n\nexport const Tooltip = memo(function Tooltip({ children, content }: Props) {\n return (\n <TooltipPrimitive.Provider>\n <TooltipPrimitive.Root>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <Content\n side=\"bottom\"\n align=\"center\"\n sideOffset={2}\n collisionPadding={8}\n >\n {content}\n {/* <Arrow /> */}\n </Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n});\n","import { Cross1Icon, PlusIcon } from \"@noya-app/noya-icons\";\nimport React, { forwardRef, memo } from \"react\";\nimport styled from \"styled-components\";\nimport { useDesignSystemTheme } from \"../contexts/DesignSystemConfiguration\";\nimport { useHover } from \"../hooks/useHover\";\n\ntype ChipColorScheme = \"primary\" | \"secondary\" | \"error\";\ntype ChipSize = \"small\" | \"medium\" | \"large\";\ntype ChipVariant = \"solid\" | \"outlined\" | \"ghost\";\n\nconst ChipElement = styled.span<{\n $colorScheme?: ChipColorScheme;\n $size: ChipSize;\n $monospace: boolean;\n $variant: ChipVariant;\n $isInteractive: boolean;\n}>(({ theme, $colorScheme, $size, $variant, $monospace, $isInteractive }) => {\n const color =\n $colorScheme === \"primary\"\n ? theme.colors.primary\n : $colorScheme === \"secondary\"\n ? theme.colors.secondary\n : theme.colors.text;\n\n const backgroundColor =\n $colorScheme === \"primary\"\n ? theme.colors.primaryPastel\n : $colorScheme === \"secondary\"\n ? theme.colors.secondaryPastel\n : $colorScheme === \"error\"\n ? \"rgb(255, 219, 219)\"\n : theme.colors.inputBackground;\n\n const subtleColor =\n $colorScheme === \"primary\"\n ? \"rgba(238, 229, 255, 0.2)\"\n : $colorScheme === \"secondary\"\n ? \"rgba(205, 238, 231, 0.2)\"\n : $colorScheme === \"error\"\n ? \"rgba(255, 219, 219, 0.2)\"\n : \"rgba(0, 0, 0, 0.1)\";\n\n return {\n textTransform: \"initial\",\n borderRadius: 4,\n userSelect: \"none\",\n display: \"inline-flex\",\n alignItems: \"center\",\n // lineHeight: \"1.4\",\n lineHeight: \"15px\",\n whiteSpace: \"pre\",\n ...($size === \"large\"\n ? {\n fontSize: \"11px\",\n padding: \"4px 8px\",\n }\n : $size === \"medium\"\n ? {\n fontSize: \"10px\",\n padding: \"2px 6px\",\n }\n : {\n fontSize: \"9px\",\n padding: \"0px 4px\",\n }),\n ...($monospace && {\n fontFamily: theme.fonts.monospace,\n }),\n ...($variant === \"solid\"\n ? {\n color,\n backgroundColor,\n }\n : $variant === \"outlined\"\n ? {\n color,\n backgroundColor: \"transparent\",\n boxShadow: `0 0 0 1px ${subtleColor} inset`,\n }\n : {}),\n \"&:hover\": {\n ...($variant === \"outlined\" && {\n backgroundColor: subtleColor,\n boxShadow: \"none\",\n }),\n },\n ...($isInteractive && {\n cursor: \"pointer\",\n \"&:hover\": {\n opacity: 0.85,\n },\n }),\n };\n});\n\nconst DeleteElement = styled(Cross1Icon)<{\n size: ChipSize;\n}>(({ size }) => ({\n position: \"relative\",\n marginRight: \"-2px\",\n cursor: \"pointer\",\n opacity: 0.5,\n\n ...(size === \"large\"\n ? {\n marginLeft: \"2px\",\n // top: '-1px',\n transform: \"scale(0.75)\",\n }\n : {\n transform: \"scale(0.6)\",\n }),\n\n \"&:hover\": {\n opacity: 0.85,\n },\n}));\n\nconst ignoredProps = new Set([\"size\", \"isOnlyChild\"]);\n\nconst AddElement = styled(PlusIcon).withConfig({\n shouldForwardProp: (prop) => !ignoredProps.has(prop),\n})<{\n size: ChipSize;\n isOnlyChild: boolean;\n}>(({ size, isOnlyChild }) => ({\n position: \"relative\",\n marginLeft: \"-2px\",\n cursor: \"pointer\",\n opacity: 0.5,\n\n ...(size === \"large\"\n ? {\n marginRight: \"2px\",\n top: \"-1px\",\n transform: \"scale(0.75)\",\n }\n : {\n marginRight: \"-2px\",\n transform: \"scale(0.6)\",\n }),\n\n \"&:hover\": {\n opacity: 0.85,\n },\n}));\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}\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 ...rest\n }: ChipProps,\n forwardedRef: React.ForwardedRef<HTMLSpanElement>\n ) {\n const theme = useDesignSystemTheme();\n\n const { hoverProps: hoverDeleteProps } = useHover({\n onHoverChange: onHoverDeleteChange,\n });\n\n const handleClick = !children && !deletable && addable ? onAdd : onClick;\n\n const color =\n colorScheme === \"primary\"\n ? theme.colors.primary\n : colorScheme === \"secondary\"\n ? theme.colors.secondary\n : theme.colors.text;\n\n return (\n <ChipElement\n ref={forwardedRef}\n $variant={variant}\n $colorScheme={colorScheme}\n style={style}\n onClick={handleClick}\n $size={size}\n $monospace={monospace}\n $isInteractive={!!handleClick || clickable === true}\n tabIndex={tabIndex}\n {...rest}\n >\n {addable && (\n <AddElement\n size={size}\n isOnlyChild={!children && !deletable}\n onClick={\n onAdd\n ? (event) => {\n event.stopPropagation();\n onAdd?.();\n }\n : undefined\n }\n color={color}\n />\n )}\n {children}\n {deletable && (\n <DeleteElement\n size={size}\n {...(hoverDeleteProps as any)}\n onClick={\n onDelete\n ? (event) => {\n event.stopPropagation();\n onDelete?.();\n }\n : undefined\n }\n color={color}\n />\n )}\n </ChipElement>\n );\n })\n);\n","import { getCurrentPlatform, PlatformName } from \"@noya-app/noya-keymap\";\nimport React, {\n createContext,\n memo,\n ReactNode,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { ThemeProvider, useTheme } from \"styled-components\";\nimport { ToastProvider } from \"../components/Toast\";\nimport { Theme } from \"../theme\";\nimport * as darkTheme from \"../theme/dark\";\nimport * as lightTheme from \"../theme/light\";\nimport { DialogProvider } from \"./DialogContext\";\nimport { FloatingWindowProvider } from \"./FloatingWindowContext\";\n\nexport const DesignSystemThemeProvider = memo(\n function DesignSystemThemeProvider({\n children,\n theme,\n }: {\n children: ReactNode;\n theme?: Theme;\n }) {\n let parentTheme: Theme | undefined;\n\n try {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n parentTheme = useTheme();\n } catch (e) {\n // console.error(e);\n }\n\n if (theme) {\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n } else if (parentTheme) {\n return children;\n } else {\n return <ThemeProvider theme={lightTheme}>{children}</ThemeProvider>;\n }\n }\n);\n\nexport type DesignSystemConfigurationContextValue = {\n platform: PlatformName;\n};\n\nconst DesignSystemConfigurationContext =\n createContext<DesignSystemConfigurationContextValue>({\n platform: \"key\",\n });\n\nexport const DesignSystemConfigurationProvider = memo(\n function DesignSystemConfigurationProvider({\n children,\n theme,\n platform,\n }: {\n children: ReactNode;\n theme?: Theme | \"light\" | \"dark\";\n platform?: PlatformName;\n }) {\n const [internalPlatform, setInternalPlatform] = useState<PlatformName>(\n platform ?? \"key\"\n );\n\n useEffect(() => {\n if (platform !== undefined) return;\n\n if (typeof navigator !== \"undefined\") {\n setInternalPlatform(getCurrentPlatform(navigator));\n }\n }, [platform]);\n\n const contextValue = useMemo(\n () => ({ platform: platform ?? internalPlatform }),\n [platform, internalPlatform]\n );\n\n const resolvedTheme =\n theme === \"light\"\n ? lightTheme\n : theme === \"dark\"\n ? darkTheme\n : theme ?? lightTheme;\n\n return (\n <DesignSystemConfigurationContext.Provider value={contextValue}>\n <ThemeProvider theme={resolvedTheme}>\n <DialogProvider>\n <ToastProvider>\n <FloatingWindowProvider>{children}</FloatingWindowProvider>\n </ToastProvider>\n </DialogProvider>\n </ThemeProvider>\n </DesignSystemConfigurationContext.Provider>\n );\n }\n);\n\nexport function useDesignSystemConfiguration(): DesignSystemConfigurationContextValue {\n return useContext(DesignSystemConfigurationContext);\n}\n\nexport function useDesignSystemTheme() {\n return useTheme();\n}\n","import * as ToastPrimitive from '@radix-ui/react-toast';\nimport React, { ReactNode } from 'react';\nimport styled from 'styled-components';\nimport { IconButton } from './IconButton';\n\nconst ToastViewport = styled(ToastPrimitive.Viewport)({\n position: 'fixed',\n bottom: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 20,\n gap: 10,\n minWidth: 200,\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 2147483647,\n outline: 'none',\n});\n\nconst ToastRoot = styled(ToastPrimitive.Root)(({ theme }) => ({\n borderRadius: 4,\n fontSize: 14,\n backgroundColor: theme.colors.popover.background,\n boxShadow: '0 2px 4px rgba(0,0,0,0.2), 0 0 12px rgba(0,0,0,0.1)',\n color: theme.colors.textMuted,\n\n padding: '8px 10px',\n display: 'grid',\n gridTemplateAreas: '\"title action\" \"description action\"',\n gridTemplateColumns: 'auto max-content',\n columnGap: 10,\n alignItems: 'center',\n}));\n\nconst ToastTitle = styled(ToastPrimitive.Title)(({ theme }) => ({\n gridArea: 'title',\n marginBottom: 5,\n ...theme.textStyles.label,\n fontWeight: 'bold',\n color: theme.colors.text,\n}));\n\nconst ToastDescription = styled(ToastPrimitive.Description)(({ theme }) => ({\n gridArea: 'description',\n ...theme.textStyles.small,\n color: theme.colors.textMuted,\n}));\n\nconst ToastAction = styled(ToastPrimitive.Action)({\n gridArea: 'action',\n});\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 <ToastRoot {...props}>\n {title && <ToastTitle>{title}</ToastTitle>}\n <ToastDescription>{content}</ToastDescription>\n {children && (\n <ToastAction asChild altText=\"\">\n {children}\n </ToastAction>\n )}\n <ToastPrimitive.Close aria-label=\"Close\" asChild>\n <IconButton iconName=\"Cross1Icon\" />\n </ToastPrimitive.Close>\n </ToastRoot>\n );\n};\n\nexport const ToastProvider = ({ children }: { children: React.ReactNode }) => (\n <ToastPrimitive.Provider>\n {children}\n <ToastViewport />\n </ToastPrimitive.Provider>\n);\n","import React, {\n CSSProperties,\n ForwardedRef,\n forwardRef,\n memo,\n useMemo,\n} from \"react\";\nimport { useTheme } from \"styled-components\";\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?: CSSProperties;\n selected?: boolean;\n color?: string;\n size?: number;\n};\n\nexport const IconButton = memo(\n forwardRef(function IconButton(\n { selected, iconName, color, size, contentStyle, ...props }: Props,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n ) {\n const { icon: iconColor, iconSelected: iconSelectedColor } =\n useTheme().colors;\n\n const Icon = Icons[iconName];\n\n const style = useMemo((): 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={color ?? (selected ? iconSelectedColor : iconColor)}\n {...(size && { width: size, height: size })}\n />\n </Button>\n );\n })\n);\n","import * as Icons from \"@noya-app/noya-icons\";\nimport React, { ReactNode } from \"react\";\n\nexport type IconName = keyof typeof Icons;\n\nexport { Icons };\n\nexport function renderIcon(\n iconName: Exclude<ReactNode, string> | IconName\n): ReactNode {\n if (typeof iconName === \"string\") {\n const Icon = Icons[iconName as IconName];\n\n return <Icon />;\n }\n\n return iconName;\n}\n","import produce from \"immer\";\nimport * as lightTheme from \"./light\";\n\nexport const name: string = \"dark\";\n\nexport const colors = produce(lightTheme.colors, (colors) => {\n colors.logo.fill = \"rgb(248,248,250)\";\n colors.logo.highlight = \"rgb(248,248,250)\";\n colors.text = \"rgb(248,248,250)\";\n colors.textMuted = \"rgb(180,179,182)\";\n colors.textDisabled = \"rgb(100,99,102)\";\n colors.inputBackground = \"rgba(181,178,255,0.08)\";\n colors.inputBackgroundLight = \"rgba(181,178,255,0.10)\";\n colors.codeBackground = \"rgb(20,19,23)\";\n colors.dividerSubtle = \"rgba(255,255,255,0.04)\";\n colors.divider = \"rgba(255,255,255,0.08)\";\n colors.dividerStrong = \"rgba(0,0,0,1)\";\n colors.primary = \"rgb(119, 66, 255)\";\n colors.primaryLight = \"rgb(134, 86, 255)\";\n colors.secondaryBright = \"#36fe91\";\n colors.canvas.background = \"rgb(20,19,23)\";\n colors.canvas.sliceOutline = \"rgb(150,150,150)\";\n colors.canvas.grid = \"rgba(0,0,0,0.1)\";\n colors.sidebar.background = \"rgb(34,33,39)\";\n colors.sidebar.backgroundTransparent = \"rgba(34,33,39,0.95)\";\n colors.popover.background = \"rgba(34,33,39,1)\";\n colors.popover.divider = colors.divider;\n colors.listView.raisedBackground = \"rgba(181,178,255,0.1)\";\n colors.listView.editingBackground = \"#000\";\n colors.slider.background = \"#BBB\";\n colors.radioGroup.background = colors.inputBackground;\n colors.mask = \"rgb(102,187,106)\";\n colors.transparentChecker = \"rgba(255,255,255,0.3)\";\n colors.scrollbar = \"rgba(199,199,199,0.2)\";\n colors.placeholderDots = \"rgba(255,255,255,0.3)\";\n colors.dragOutline = \"white\";\n colors.activeBackground = \"rgba(181,178,255,0.08)\";\n colors.thumbnailBackground = \"#1f1d33\";\n colors.thumbnailShadow = \"#1f1d3366\";\n colors.breadcrumb.text = colors.textMuted;\n colors.breadcrumb.textHover = colors.textSubtle;\n colors.breadcrumb.icon = colors.icon;\n});\n\nexport { fonts, sizes, textStyles } from \"./light\";\n","import { CSSObject } from \"styled-components\";\nimport { mediaQuery } from \"../mediaQuery\";\n\nexport const name: string = \"light\";\n\nexport const colors = {\n logo: {\n fill: \"rgb(150, 152, 172)\",\n highlight: \"rgb(150, 152, 172)\",\n },\n background: \"rgb(255,255,255)\",\n text: \"rgb(38, 48, 83)\",\n textMuted: \"rgb(107, 113, 136)\",\n textSubtle: \"rgb(117, 121, 129)\",\n textDisabled: \"rgb(150, 152, 172)\",\n textDecorativeLight: \"rgb(168, 185, 212)\",\n dividerSubtle: \"rgba(30, 50, 100, 0.04)\",\n divider: \"rgba(30, 50, 100, 0.07)\",\n dividerStrong: \"rgba(30, 50, 100, 0.09)\",\n primary: \"rgb(103, 70, 255)\",\n primaryLight: \"rgb(147, 86, 255)\",\n primaryPastel: \"rgba(234, 230, 255)\",\n secondary: \"rgb(0, 151, 117)\",\n secondaryLight: \"rgb(0, 160, 129)\",\n secondaryPastel: \"rgb(205, 238, 231)\",\n secondaryBright: \"#0ab557\",\n warning: \"rgb(251, 211, 0)\",\n neutralBackground: \"rgb(222,223,232)\",\n inputBackground: \"rgb(240, 242, 246)\",\n inputBackgroundLight: \"rgb(243, 245, 249)\",\n codeBackground: \"rgb(250, 250, 250)\",\n codeBackgroundLight: \"rgb(250, 250, 250)\",\n get codeBackgroundDark() {\n return colors.text;\n },\n codeBackgroundDecorativeDark: \"#435080\",\n selectedBackground: \"rgb(242, 245, 250)\",\n transparentChecker: \"rgba(255,255,255,0.8)\",\n activeBackground: \"rgba(0,0,0,0.1)\",\n scrollbar: \"rgba(199,199,199,0.8)\",\n placeholderDots: \"rgba(0,0,0,0.3)\",\n breadcrumb: {\n get text() {\n return colors.textMuted;\n },\n get textHover() {\n return colors.textSubtle;\n },\n get icon() {\n return colors.icon;\n },\n },\n listView: {\n raisedBackground: \"rgba(0,0,0,0.03)\",\n editingBackground: \"#fff\",\n },\n canvas: {\n // background: \"white\",\n background: \"rgb(249,249,249)\",\n get selectionStroke() {\n return colors.primary;\n },\n dragHandleStroke: \"rgba(180,180,180,0.5)\",\n measurement: \"rgb(207,92,42)\",\n sliceOutline: \"rgb(210,210,210)\",\n grid: \"rgba(0,0,0,0.05)\",\n },\n sidebar: {\n background: \"rgb(255,255,255)\",\n backgroundTransparent: \"rgba(255,255,255,0.85)\",\n },\n popover: {\n background: \"rgb(252,252,252)\",\n divider: \"transparent\",\n },\n slider: {\n background: \"white\",\n border: \"#BBB\",\n },\n radioGroup: {\n background: \"white\",\n },\n icon: \"rgb(129, 131, 165)\",\n iconSelected: \"rgb(220, 220, 220)\",\n mask: \"rgb(12,193,67)\",\n imageOverlay:\n \"linear-gradient(0deg, rgba(132, 63, 255,0.55), rgba(132, 63, 255,0.55))\",\n get dragOutline() {\n return colors.primary;\n },\n selection: \"rgb(179,215,254)\",\n thumbnailBackground: \"#f0efff\",\n thumbnailShadow: \"#D3CEED66\",\n};\n\nexport const fonts = {\n normal:\n \"'__Inter_6b0edc', '__Inter_Fallback_6b0edc', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif\",\n monospace: \"Menlo, Monaco, Consolas, 'Courier New', monospace\",\n};\n\n// The last one, 0.85, I just eyeballed\nconst typeScale = [3.052, 2.441, 1.953, 1.563, 1.25, 1, 0.85]; // Major third\n\nexport const textStyles = {\n title: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[0]}rem`,\n fontWeight: \"bold\",\n lineHeight: \"1.4\",\n letterSpacing: \"-0.05em\",\n [mediaQuery.small]: {\n fontSize: \"36px\",\n },\n } as CSSObject,\n subtitle: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[3]}rem`,\n fontWeight: 500,\n lineHeight: \"1.75\",\n letterSpacing: \"-0.05em\",\n [mediaQuery.small]: {\n fontSize: \"18px\",\n },\n } as CSSObject,\n heading1: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[2]}rem`,\n fontWeight: 600,\n lineHeight: \"1.6\",\n letterSpacing: \"-0.025em\",\n } as CSSObject,\n heading2: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[3]}rem`,\n fontWeight: 500,\n lineHeight: \"1.5\",\n letterSpacing: \"-0.025em\",\n } as CSSObject,\n heading3: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[4]}rem`,\n fontWeight: 400,\n lineHeight: \"1.4\",\n letterSpacing: \"-0.025em\",\n } as CSSObject,\n heading4: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[5]}rem`,\n fontWeight: 500,\n lineHeight: \"1.4\",\n } as CSSObject,\n heading5: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[6]}rem`,\n fontWeight: 500,\n lineHeight: \"1.4\",\n } as CSSObject,\n body: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[5]}rem`,\n fontWeight: 400,\n lineHeight: \"1.4\",\n } as CSSObject,\n small: {\n fontFamily: fonts.normal,\n fontSize: `${typeScale[6]}rem`,\n fontWeight: 400,\n lineHeight: \"19px\",\n // lineHeight: \"1.4\",\n } as CSSObject,\n button: {\n fontFamily: fonts.normal,\n fontSize: \"0.8rem\",\n fontWeight: 500,\n lineHeight: \"1.4\",\n letterSpacing: \"-0.2px\",\n } as CSSObject,\n code: {\n fontFamily: fonts.monospace,\n fontSize: \"90%\",\n lineHeight: \"1.5\",\n } as CSSObject,\n label: {\n fontFamily: fonts.normal,\n fontSize: \"0.62rem\",\n fontWeight: 400,\n lineHeight: \"19px\",\n // lineHeight: \"1.4\",\n textTransform: \"uppercase\",\n letterSpacing: \"-0.3px\",\n } as CSSObject,\n};\n\nexport const sizes = {\n sidebarWidth: 260,\n toolbar: {\n height: 46,\n itemSeparator: 8,\n },\n inspector: {\n horizontalSeparator: 8,\n verticalSeparator: 10,\n },\n spacing: {\n nano: 2,\n micro: 4,\n small: 8,\n medium: 16,\n large: 32,\n xlarge: 64,\n xxlarge: 128,\n },\n dialog: {\n padding: 16,\n },\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 React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styled from \"styled-components\";\nimport { Button } from \"../components/Button\";\nimport { Dialog, IDialog } from \"../components/Dialog\";\nimport { InputField } from \"../components/InputField\";\nimport { Spacer } from \"../components/Spacer\";\n\nexport const Row = styled.div(({ theme }) => ({\n flex: \"1\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n}));\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\nexport type DialogContextValue = {\n openInputDialog(\n title: string,\n inputValue?: string\n ): Promise<string | undefined>;\n\n containsElement(element: HTMLElement): boolean;\n};\n\nconst DialogContext = createContext<DialogContextValue | undefined>(undefined);\n\nexport const DialogProvider = function DialogProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const [contents, setContents] = useState<\n | {\n title: string;\n inputValue: string;\n resolve: (value: string | undefined) => void;\n }\n | undefined\n >();\n\n const isOpen = !!contents;\n\n const close = useCallback(() => {\n if (!contents) return;\n\n contents.resolve(undefined);\n }, [contents]);\n\n const submit = useCallback(() => {\n if (!contents || !contents.inputValue) return;\n\n contents.resolve(contents.inputValue);\n setContents(undefined);\n }, [contents]);\n\n const open: DialogContextValue[\"openInputDialog\"] = useCallback(\n (title, inputValue = \"\") => {\n const { promise, resolve } = createDeferredPromise<string | undefined>();\n\n setContents({\n title,\n inputValue,\n resolve: (value) => {\n resolve(value);\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 () => ({ openInputDialog: open, containsElement }),\n [containsElement, open]\n )}\n >\n {children}\n </DialogContext.Provider>\n <Dialog\n ref={dialogRef}\n title={contents?.title}\n open={isOpen}\n onOpenChange={useCallback(\n (isOpen: boolean) => {\n if (!isOpen) {\n close();\n }\n },\n [close]\n )}\n onOpenAutoFocus={useCallback((event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n\n inputRef.current?.focus();\n\n // Select the entire input value\n inputRef.current?.setSelectionRange(0, inputRef.current.value.length);\n }, [])}\n >\n <InputField.Root>\n <InputField.Input\n ref={inputRef}\n value={contents?.inputValue ?? \"\"}\n onChange={(value) => {\n setContents((contents) =>\n contents\n ? {\n ...contents,\n inputValue: value,\n }\n : undefined\n );\n }}\n onKeyDown={handleKeyDown}\n />\n </InputField.Root>\n <Spacer.Vertical size={20} />\n <Row>\n <Spacer.Horizontal />\n <Button onClick={close}>Cancel</Button>\n <Spacer.Horizontal size={16} />\n <Button disabled={!contents?.inputValue} onClick={submit}>\n Submit\n </Button>\n </Row>\n </Dialog>\n </>\n );\n};\n\nfunction useDialog(): 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 useDialog().openInputDialog;\n}\n\nexport function useDialogContainsElement() {\n return useDialog().containsElement;\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 styled from \"styled-components\";\nimport { IconButton } from \"./IconButton\";\nimport { Spacer } from \"./Spacer\";\n\nconst StyledOverlay = styled(DialogPrimitive.Overlay)({\n backgroundColor: \"rgba(0,0,0,0.5)\",\n position: \"fixed\",\n inset: 0,\n});\n\nconst StyledContent = styled(DialogPrimitive.Content)(({ theme }) => ({\n boxShadow:\n \"hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px\",\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"90vw\",\n maxWidth: \"450px\",\n maxHeight: \"85vh\",\n padding: theme.sizes.dialog.padding,\n borderRadius: 2,\n ...theme.textStyles.small,\n backgroundColor: theme.colors.popover.background,\n overflowY: \"auto\",\n color: theme.colors.textMuted,\n \"&:focus\": { outline: \"none\" },\n pointerEvents: \"all\",\n zIndex: 1000,\n}));\n\nconst StyledTitle = styled(DialogPrimitive.Title)(({ theme }) => ({\n margin: 0,\n ...theme.textStyles.body,\n color: theme.colors.text,\n}));\n\nconst StyledDescription = styled(DialogPrimitive.Description)(({ theme }) => ({\n margin: 0,\n ...theme.textStyles.small,\n color: theme.colors.textMuted,\n}));\n\nexport const CloseButtonContainer = styled.div(({ theme }) => ({\n position: \"absolute\",\n top: theme.sizes.dialog.padding,\n right: theme.sizes.dialog.padding,\n zIndex: 1,\n backgroundColor: theme.colors.popover.background,\n padding: \"4px 6px\",\n borderRadius: \"2px\",\n // boxShadow: `0 0 2px rgba(0, 0, 0, 0.2)`,\n border: `1px solid rgba(128,128,128,0.2)`,\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}\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 }: 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\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 {...(closeOnInteractOutside === false && {\n onPointerDownOutside: (event) => {\n event.preventDefault();\n },\n onInteractOutside: (event) => {\n event.preventDefault();\n },\n })}\n >\n <CloseButtonContainer>\n <DialogPrimitive.Close asChild>\n <IconButton iconName=\"Cross1Icon\" />\n </DialogPrimitive.Close>\n </CloseButtonContainer>\n {title && (\n <>\n <StyledTitle>{title}</StyledTitle>\n <Spacer.Vertical size={description ? 10 : 20} />\n </>\n )}\n {description && (\n <>\n <Spacer.Vertical size={10} />\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 style={{\n width: \"100%\",\n height: \"100%\",\n maxWidth: \"100%\",\n maxHeight: \"100%\",\n top: \"0\",\n left: \"0\",\n transform: \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n padding: 0,\n ...style,\n }}\n {...rest}\n />\n );\n});\n","/* eslint-disable react/jsx-pascal-case */\nimport React, { ForwardedRef, forwardRef } from \"react\";\nimport styled from \"styled-components\";\n\ninterface Props {\n size?: number | string;\n inline?: boolean;\n}\n\ninterface Props_ {\n $size?: number | string;\n $inline?: boolean;\n}\n\n/* ----------------------------------------------------------------------------\n * Vertical\n * ------------------------------------------------------------------------- */\n\nconst SpacerVertical_ = styled.span<Props_>(({ $size, $inline }) => ({\n display: $inline ? \"inline-block\" : \"block\",\n ...($size === undefined ? { flex: 1 } : { minHeight: $size }),\n}));\n\nconst SpacerVertical = forwardRef<HTMLSpanElement, Props>(\n ({ size, inline, ...props }, ref: ForwardedRef<HTMLSpanElement>) => {\n return (\n <SpacerVertical_ $size={size} $inline={inline} {...props} ref={ref} />\n );\n }\n);\n\n/* ----------------------------------------------------------------------------\n * Horizontal\n * ------------------------------------------------------------------------- */\n\nconst SpacerHorizontal_ = styled.span<Props_>(({ $size, $inline }) => ({\n display: $inline ? \"inline-block\" : \"block\",\n ...($size === undefined ? { flex: 1 } : { minWidth: $size }),\n}));\n\nconst SpacerHorizontal = forwardRef<HTMLSpanElement, Props>(\n ({ size, inline, ...props }, ref: ForwardedRef<HTMLSpanElement>) => {\n return (\n <SpacerHorizontal_ $size={size} $inline={inline} {...props} ref={ref} />\n );\n }\n);\n\nexport namespace Spacer {\n export const Vertical = SpacerVertical;\n export const Horizontal = SpacerHorizontal;\n}\n","import { CaretDownIcon } from \"@noya-app/noya-icons\";\nimport { assignRef } from \"@noya-app/react-utils\";\nimport { Property } from \"csstype\";\nimport React, {\n Children,\n createContext,\n ForwardedRef,\n forwardRef,\n isValidElement,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styled from \"styled-components\";\nimport handleNudge from \"../utils/handleNudge\";\nimport { Button } from \"./Button\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport { MenuItem } from \"./internal/Menu\";\nimport TextInput, { TextInputProps } from \"./internal/TextInput\";\nimport { Popover } from \"./Popover\";\nimport { Stack } from \"./Stack\";\n\ntype LabelPosition = \"start\" | \"end\";\n\nexport type InputFieldSize = \"small\" | \"medium\" | \"large\";\n\ntype InputFieldContextValue = {\n labelPosition: LabelPosition;\n labelSize: number;\n hasLabel: boolean;\n hasDropdown: boolean;\n size: InputFieldSize;\n isFocused: boolean;\n onFocusChange: (isFocused: boolean) => void;\n inputRef?: ForwardedRef<HTMLInputElement>;\n setInputRef?: (ref: ForwardedRef<HTMLInputElement>) => void;\n setLabelWidth?: (width: number) => void;\n};\n\nconst InputFieldContext = createContext<InputFieldContextValue>({\n labelPosition: \"end\",\n labelSize: 6,\n hasLabel: false,\n hasDropdown: false,\n size: \"medium\",\n isFocused: false,\n onFocusChange: () => {},\n});\n\n/* ----------------------------------------------------------------------------\n * Label\n * ------------------------------------------------------------------------- */\n\nconst LabelContainer = styled.label<{\n pointerEvents: Property.PointerEvents;\n $labelPosition: LabelPosition;\n $hasDropdown: boolean;\n}>(({ theme, $labelPosition, $hasDropdown, pointerEvents }) => ({\n ...theme.textStyles.label,\n fontWeight: \"bold\",\n color: theme.colors.textDisabled,\n position: \"absolute\",\n top: 0,\n right: $labelPosition === \"end\" ? 0 : undefined,\n bottom: 0,\n left: $labelPosition === \"start\" ? 0 : undefined,\n display: \"flex\",\n alignItems: \"center\",\n pointerEvents,\n userSelect: \"none\",\n ...($labelPosition === \"start\"\n ? { justifyContent: \"flex-start\", paddingLeft: \"6px\" }\n : {\n justifyContent: \"flex-end\",\n paddingRight: $hasDropdown ? \"16px\" : \"6px\",\n }),\n}));\n\ninterface InputFieldLabelProps {\n children?: ReactNode;\n pointerEvents?: Property.PointerEvents;\n style?: React.CSSProperties;\n}\n\nconst InputFieldLabel = memo(\n forwardRef(function InputFieldLabel(\n { children = false, pointerEvents = \"none\", style }: InputFieldLabelProps,\n forwardedRef: ForwardedRef<HTMLLabelElement>\n ) {\n const { labelPosition, hasDropdown, setLabelWidth } =\n useContext(InputFieldContext);\n\n const ref = useRef<HTMLLabelElement | null>(null);\n\n useLayoutEffect(() => {\n if (!setLabelWidth) return;\n\n const width = ref.current?.getBoundingClientRect().width;\n\n if (!width) return;\n\n setLabelWidth(width);\n }, [setLabelWidth]);\n\n return (\n <LabelContainer\n ref={(element) => {\n ref.current = element;\n assignRef(forwardedRef, element);\n }}\n pointerEvents={pointerEvents}\n $labelPosition={labelPosition}\n $hasDropdown={hasDropdown}\n style={style}\n >\n {children}\n </LabelContainer>\n );\n })\n);\n\n/* ----------------------------------------------------------------------------\n * Dropdown\n * ------------------------------------------------------------------------- */\n\nconst DropdownContainer = styled.span(({ theme }) => ({\n position: \"absolute\",\n top: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n flexDirection: \"column\",\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 = memo(function InputFieldDropdownMenu<\n T extends string,\n>({ id, items, onSelect, children }: InputFieldDropdownProps<T>) {\n const { size } = useContext(InputFieldContext);\n\n const contentStyle = useMemo(\n () => ({\n margin: \"-4px 0\",\n minHeight: size === \"small\" ? \"15px\" : undefined,\n }),\n [size]\n );\n\n return (\n <DropdownContainer>\n <DropdownMenu<T> items={items} onSelect={onSelect}>\n {children || (\n <Button id={id} variant=\"thin\" flex=\"1\" contentStyle={contentStyle}>\n <CaretDownIcon />\n </Button>\n )}\n </DropdownMenu>\n </DropdownContainer>\n );\n});\n\n/* ----------------------------------------------------------------------------\n * Button\n * ------------------------------------------------------------------------- */\n\nconst ButtonContainer = styled.span<{ $size: InputFieldSize }>(\n ({ theme, $size }) => ({\n position: \"absolute\",\n right: $size === \"large\" ? \"9px\" : $size === \"medium\" ? \"4px\" : \"2px\",\n top: $size === \"large\" ? \"8px\" : $size === \"medium\" ? \"4px\" : \"2px\",\n })\n);\n\nconst InputFieldButton = memo(function InputFieldButton({\n children,\n onClick,\n}: {\n children?: ReactNode;\n onClick?: () => void;\n}) {\n const { size, inputRef } = useContext(InputFieldContext);\n\n const defaultHandleClick = useCallback(\n (event: React.MouseEvent) => {\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((event: React.PointerEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }, []);\n\n return (\n <ButtonContainer $size={size}>\n <Button\n variant=\"floating\"\n onClick={onClick ?? defaultHandleClick}\n onPointerDown={handlePointerDown}\n tabIndex={-1}\n >\n {children}\n </Button>\n </ButtonContainer>\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\nexport const InputElement = styled(TextInput)<{\n disabled?: boolean;\n readOnly?: boolean;\n $labelPosition: LabelPosition;\n $labelSize: number;\n $hasLabel: boolean;\n $hasDropdown: boolean;\n $textAlign?: Property.TextAlign;\n $variant?: InputFieldVariant;\n $size: InputFieldSize;\n}>(({\n theme,\n $labelPosition,\n $labelSize,\n $hasDropdown,\n $textAlign,\n disabled,\n $hasLabel,\n readOnly,\n $variant = \"normal\",\n $size,\n}) => {\n return {\n // placeholder\n \"&::placeholder\": {\n color: theme.colors.textDisabled,\n },\n ...theme.textStyles.small,\n color: readOnly\n ? theme.colors.textMuted\n : disabled\n ? theme.colors.textDisabled\n : theme.colors.text,\n ...($size === \"small\" && {\n fontSize: \"11px\",\n }),\n width: \"0px\", // Reset intrinsic width\n flex: \"1 1 0px\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n minWidth: \"0\",\n textAlign: $textAlign ?? \"left\",\n alignSelf: \"stretch\",\n borderRadius: \"4px\",\n paddingTop: $size === \"large\" ? \"10px\" : $size === \"medium\" ? \"4px\" : \"1px\",\n paddingBottom:\n $size === \"large\" ? \"10px\" : $size === \"medium\" ? \"4px\" : \"1px\",\n paddingLeft:\n ($size === \"large\" ? 10 : $size === \"medium\" ? 6 : 4) +\n ($hasLabel && $labelPosition === \"start\" ? 6 + $labelSize : 0) +\n \"px\",\n paddingRight:\n ($size === \"large\" ? 10 : $size === \"medium\" ? 6 : 4) +\n ($hasLabel && $labelPosition === \"end\" ? 6 + $labelSize : 0) +\n ($hasDropdown ? 11 : 0) +\n \"px\",\n background: theme.colors.inputBackground,\n \"&:focus\": {\n boxShadow: `0 0 0 2px ${theme.colors.primary}`,\n },\n ...($variant === \"bare\" && {\n paddingTop: \"4px\",\n paddingRight: \"4px\",\n paddingBottom: \"4px\",\n paddingLeft: \"4px\",\n marginTop: \"-4px\",\n marginRight: \"-4px\",\n marginBottom: \"-4px\",\n marginLeft: \"-4px\",\n }),\n\n // '&[type=\"search\"]::-webkit-search-cancel-button': {\n // appearance: \"none\",\n // height: \"15px\",\n // width: \"15px\",\n // background: `url(\"data:image/svg+xml;utf8,${createCrossSVGString(\n // theme.colors.icon\n // )}\") no-repeat`,\n // },\n };\n});\n\nconst InputFieldInput = forwardRef(function InputFieldInput(\n // onFocusChange should only be passed from the root, never directly\n {\n textAlign,\n variant,\n ...rest\n }: TextInputProps & {\n textAlign?: Property.TextAlign;\n variant?: \"bare\";\n },\n forwardedRef: ForwardedRef<HTMLInputElement>\n) {\n const {\n labelPosition,\n labelSize,\n hasDropdown,\n hasLabel,\n size,\n onFocusChange,\n setInputRef,\n } = useContext(InputFieldContext);\n\n const handleFocusChange = useCallback(\n (isFocused: boolean) => {\n onFocusChange(isFocused);\n },\n [onFocusChange]\n );\n\n useLayoutEffect(() => {\n setInputRef?.(forwardedRef);\n }, [forwardedRef, setInputRef]);\n\n return (\n <InputElement\n ref={forwardedRef}\n $labelPosition={labelPosition}\n $labelSize={labelSize}\n $hasLabel={hasLabel}\n $hasDropdown={hasDropdown}\n $size={size}\n $variant={variant}\n $textAlign={textAlign}\n onFocusChange={handleFocusChange}\n {...rest}\n />\n );\n});\n\nconst InputFieldTypeahead = (props: { prefix: string; value: string }) => {\n const {\n labelPosition,\n labelSize,\n hasDropdown,\n hasLabel,\n size,\n // onFocusChange,\n } = useContext(InputFieldContext);\n\n return (\n <InputElement\n as=\"span\"\n $labelPosition={labelPosition}\n $labelSize={labelSize}\n $hasLabel={hasLabel}\n $hasDropdown={hasDropdown}\n $size={size}\n // onFocusChange={onFocusChange}\n // readOnly\n // placeholder={props.value}\n value=\"\"\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n background: \"transparent\",\n boxShadow: \"none\",\n }}\n >\n <span style={{ opacity: 0 }}>{props.prefix}</span>\n <span style={{ opacity: 0.5 }}>\n {props.value.slice(props.prefix.length)}\n </span>\n </InputElement>\n );\n};\n\n/* ----------------------------------------------------------------------------\n * NumberInput\n * ------------------------------------------------------------------------- */\n\ntype InputFieldNumberInputProps = Omit<\n TextInputProps,\n \"value\" | \"onChange\" | \"onKeyDown\" | \"onSubmit\"\n> & {\n value: number | undefined;\n onNudge?: (value: number) => void;\n variant?: \"bare\";\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, ...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={handleKeyDown}\n onBlur={handleBlur}\n {...(\"onChange\" in props\n ? { onChange: handleChange }\n : { onSubmit: handleSubmit })}\n />\n );\n}\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nconst RootContainer = styled.div<{ $width?: number; $flex?: string }>(\n ({ theme, $flex, $width }) => ({\n flex: $flex ?? \"1\",\n display: \"flex\",\n flexDirection: \"row\",\n position: \"relative\",\n maxWidth: typeof $width === \"number\" ? `${$width}px` : undefined,\n })\n);\n\ninterface InputFieldRootProps {\n id?: string;\n flex?: string;\n children?: ReactNode;\n width?: number;\n labelPosition?: LabelPosition;\n labelSize?: number;\n hasDropdown?: boolean;\n size?: InputFieldSize;\n renderPopoverContent?: (options: { width: number }) => ReactNode;\n onFocusChange?: (isFocused: boolean) => void;\n style?: React.CSSProperties;\n className?: string;\n}\n\nfunction InputFieldRoot({\n id,\n flex,\n children,\n width,\n labelPosition = \"end\",\n labelSize,\n size = \"medium\",\n renderPopoverContent,\n onFocusChange,\n style,\n className,\n}: InputFieldRootProps) {\n const childrenArray = Children.toArray(children);\n\n const hasDropdown = childrenArray.some(\n (child) => isValidElement(child) && child.type === InputFieldDropdownMenu\n );\n const hasLabel = childrenArray.some(\n (child) => isValidElement(child) && child.type === InputFieldLabel\n );\n\n const [isFocused, setIsFocused] = React.useState(false);\n\n const [measuredLabelSize, setMeasuredLabelSize] = React.useState<number>();\n const [measuredWidth, setMeasuredWidth] = React.useState<number>();\n\n const handleFocusChange = useCallback(\n (isFocused: boolean) => {\n setIsFocused(isFocused);\n onFocusChange?.(isFocused);\n },\n [onFocusChange]\n );\n\n const [inputRef, setInputRef] =\n React.useState<ForwardedRef<HTMLInputElement>>();\n\n // eslint-disable-next-line @shopify/prefer-early-return\n useEffect(() => {\n if (inputRef && typeof inputRef !== \"function\") {\n setMeasuredWidth?.(\n isFocused ? inputRef?.current?.getBoundingClientRect().width : undefined\n );\n }\n }, [inputRef, isFocused]);\n\n const contextValue = useMemo(\n (): InputFieldContextValue => ({\n labelPosition,\n labelSize: measuredLabelSize ?? labelSize ?? 6,\n hasDropdown,\n hasLabel,\n size,\n isFocused,\n onFocusChange: handleFocusChange,\n inputRef,\n setInputRef,\n setLabelWidth: setMeasuredLabelSize,\n }),\n [\n labelPosition,\n measuredLabelSize,\n labelSize,\n hasDropdown,\n hasLabel,\n size,\n isFocused,\n handleFocusChange,\n inputRef,\n ]\n );\n\n const rootElement = (\n <RootContainer\n id={id}\n $width={width}\n $flex={flex}\n style={style}\n className={className}\n >\n {children}\n </RootContainer>\n );\n\n return (\n <InputFieldContext.Provider value={contextValue}>\n {renderPopoverContent ? (\n <Popover\n open={true}\n trigger={rootElement}\n sideOffset={3}\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 {measuredWidth && (\n <Stack.V width={measuredWidth} overflow=\"hidden\">\n {renderPopoverContent({ width: measuredWidth })}\n </Stack.V>\n )}\n </Popover>\n ) : (\n rootElement\n )}\n </InputFieldContext.Provider>\n );\n}\n\nconst PrimitiveInputField = styled.input(({ theme, readOnly, disabled }) => {\n return {\n // placeholder\n \"&::placeholder\": {\n color: theme.colors.textDisabled,\n },\n ...theme.textStyles.small,\n color: readOnly\n ? theme.colors.textMuted\n : disabled\n ? theme.colors.textDisabled\n : theme.colors.text,\n width: \"0px\", // Reset intrinsic width\n flex: \"1 1 0px\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n minWidth: \"0\",\n alignSelf: \"stretch\",\n borderRadius: \"4px\",\n paddingTop: \"4px\",\n paddingBottom: \"4px\",\n paddingLeft: \"6px\",\n paddingRight: \"6px\",\n background: theme.colors.inputBackground,\n \"&:focus\": {\n boxShadow: `0 0 0 2px ${theme.colors.primary}`,\n },\n userSelect: \"all\",\n pointerEvents: \"all\",\n };\n});\n\nexport namespace InputField {\n export const Root = memo(InputFieldRoot);\n export const Input = memo(InputFieldInput);\n export const Typeahead = memo(InputFieldTypeahead);\n export const NumberInput = memo(InputFieldNumberInput);\n export const DropdownMenu = InputFieldDropdownMenu;\n export const Button = InputFieldButton;\n export const Label = InputFieldLabel;\n export const PrimitiveElement = PrimitiveInputField;\n}\n","import React, { CSSProperties, ReactNode, memo, useRef } from \"react\";\nimport { useSize } from \"../hooks/useSize\";\n\ntype Size = { width: number; height: number };\n\nconst style: CSSProperties = {\n display: \"flex\",\n flex: \"1 0 0\",\n flexDirection: \"column\",\n};\n\ninterface Props {\n children: (size: Size) => ReactNode;\n className?: string;\n}\n\nexport const AutoSizer = memo(function AutoSizer({\n children,\n className,\n}: Props) {\n const containerRef = 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) => ReactNode;\n dimension: \"width\" | \"height\";\n className?: string;\n}\n\nexport const SingleDimensionAutoSizer = memo(function SingleDimensionAutoSizer({\n children,\n dimension,\n className,\n}: SingleDimensionAutoSizerProps) {\n const containerRef = 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","// 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, memo, useCallback, useRef } from \"react\";\nimport { useFileDropTarget } from \"../hooks/useFileDropTarget\";\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 = memo(function FileDropTarget<T extends string>({\n children,\n onDropFiles,\n supportedFileTypes,\n ...props\n}: 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 return {\n dropTargetProps: {\n onDragOver: handleDragOver,\n onDragEnter: handleDragEnter,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n },\n isDropTargetActive,\n };\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 { 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, 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","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","// 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 { CheckIcon, ChevronRightIcon } from \"@noya-app/noya-icons\";\nimport { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport * as RadixDropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport React, {\n ComponentProps,\n ForwardedRef,\n SyntheticEvent,\n forwardRef,\n memo,\n useCallback,\n useMemo,\n} from \"react\";\nimport styled from \"styled-components\";\nimport { MenuItemProps, MenuProps } from \"./ContextMenu\";\nimport { renderIcon } from \"./Icons\";\nimport { Spacer } from \"./Spacer\";\nimport {\n CHECKBOX_RIGHT_INSET,\n CHECKBOX_WIDTH,\n KeyboardShortcut,\n SEPARATOR_ITEM,\n getKeyboardShortcutsForMenuItems,\n styles,\n} from \"./internal/Menu\";\n\n/* ----------------------------------------------------------------------------\n * Separator\n * ------------------------------------------------------------------------- */\n\nconst SeparatorElement = styled(RadixDropdownMenu.Separator)(\n styles.separatorStyle\n);\n\n/* ----------------------------------------------------------------------------\n * Item\n * ------------------------------------------------------------------------- */\n\nconst ItemElement = styled(RadixDropdownMenu.Item)(styles.itemStyle);\n\nconst CheckboxItemElement = styled(RadixDropdownMenu.CheckboxItem)(\n styles.itemStyle\n);\n\nconst StyledItemIndicator = styled(RadixDropdownMenu.ItemIndicator)(\n styles.itemIndicatorStyle\n);\n\nconst DropdownMenuItem = memo(function ContextMenuItem<T extends string>({\n value,\n children,\n onSelect,\n checked,\n disabled,\n indented,\n icon,\n items,\n shortcut,\n}: MenuItemProps<T>) {\n const handleSelectItem = useCallback(() => {\n if (!value) return;\n\n onSelect(value);\n }, [onSelect, value]);\n\n if (checked) {\n return (\n <CheckboxItemElement\n checked={checked}\n disabled={disabled}\n onSelect={handleSelectItem}\n >\n <StyledItemIndicator>\n <CheckIcon />\n </StyledItemIndicator>\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n {children}\n </CheckboxItemElement>\n );\n }\n\n const element = (\n <ItemElement disabled={disabled} onSelect={handleSelectItem}>\n {indented && (\n <Spacer.Horizontal size={CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET} />\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 {items && items.length > 0 && (\n <>\n <Spacer.Horizontal />\n <Spacer.Horizontal size={16} />\n <ChevronRightIcon />\n </>\n )}\n </ItemElement>\n );\n\n if (items && items.length > 0) {\n return (\n <DropdownMenuRoot\n isNested\n items={items}\n onSelect={onSelect}\n alignOffset={-5}\n >\n {element}\n </DropdownMenuRoot>\n );\n } else {\n return element;\n }\n});\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nconst Content = styled(RadixDropdownMenu.Content)(styles.contentStyle);\nconst SubContent = styled(RadixDropdownMenu.SubContent)(styles.contentStyle);\n\nconst DropdownMenuRoot = forwardRef(function DropdownMenuRoot<T extends string>(\n {\n items,\n children,\n onSelect,\n isNested,\n shouldBindKeyboardShortcuts,\n onOpenChange,\n open,\n onCloseAutoFocus,\n side,\n sideOffset = 4,\n align,\n alignOffset,\n collisionPadding = 8,\n }: MenuProps<T> & {\n open?: boolean;\n onCloseAutoFocus?: React.EventHandler<SyntheticEvent<unknown>>;\n } & Pick<\n ComponentProps<typeof RadixDropdownMenu.Content>,\n \"side\" | \"sideOffset\" | \"align\" | \"alignOffset\" | \"collisionPadding\"\n >,\n forwardedRef: ForwardedRef<HTMLElement>\n) {\n const hasCheckedItem = items.some(\n (item) => item !== SEPARATOR_ITEM && item.checked\n );\n\n const keymap = useMemo(\n () =>\n isNested || shouldBindKeyboardShortcuts === false\n ? {}\n : getKeyboardShortcutsForMenuItems(items, onSelect),\n [isNested, items, onSelect, shouldBindKeyboardShortcuts]\n );\n\n useKeyboardShortcuts(keymap);\n\n const RootComponent = isNested\n ? RadixDropdownMenu.Sub\n : RadixDropdownMenu.Root;\n const TriggerComponent = isNested\n ? RadixDropdownMenu.SubTrigger\n : RadixDropdownMenu.Trigger;\n const ContentComponent = isNested ? SubContent : Content;\n\n const contentStyle = useMemo(() => ({ zIndex: 1000 }), []);\n\n return (\n <RootComponent onOpenChange={onOpenChange} open={open}>\n <TriggerComponent ref={forwardedRef as ForwardedRef<any>} asChild>\n {children}\n </TriggerComponent>\n <RadixDropdownMenu.Portal>\n <ContentComponent\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n style={contentStyle}\n collisionPadding={collisionPadding}\n {...({ onCloseAutoFocus } as any)}\n >\n {items.map((item, index) =>\n item === SEPARATOR_ITEM ? (\n <SeparatorElement key={index} />\n ) : (\n <DropdownMenuItem\n key={item.value ?? index}\n value={item.value}\n indented={hasCheckedItem}\n checked={item.checked ?? false}\n disabled={item.disabled ?? false}\n icon={item.icon}\n onSelect={onSelect}\n items={item.items}\n shortcut={item.shortcut}\n >\n {item.title}\n </DropdownMenuItem>\n )\n )}\n </ContentComponent>\n </RadixDropdownMenu.Portal>\n </RootComponent>\n );\n});\n\nexport const DropdownMenu = memo(DropdownMenuRoot);\n","import { getShortcutDisplayParts } from \"@noya-app/noya-keymap\";\nimport React, { memo, ReactNode } from \"react\";\nimport styled, { CSSObject } from \"styled-components\";\nimport { useDesignSystemConfiguration } from \"../../contexts/DesignSystemConfiguration\";\nimport { Theme } from \"../../theme\";\nimport withSeparatorElements from \"../../utils/withSeparatorElements\";\nimport { IconName } from \"../Icons\";\n\nexport const SEPARATOR_ITEM = \"separator\";\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 RegularMenuItem<T extends string> = {\n value?: T;\n title: ReactNode;\n shortcut?: string;\n checked?: boolean;\n disabled?: boolean;\n icon?: Exclude<ReactNode, string> | IconName;\n items?: MenuItem<T>[];\n role?: MenuItemRole;\n};\n\nexport type MenuItem<T extends string> =\n | typeof SEPARATOR_ITEM\n | RegularMenuItem<T>;\n\n// Extract type T of RegularMenuItem<T> within MenuItem<T>\nexport type ExtractMenuItemType<T> =\n T extends RegularMenuItem<infer U> ? U : never;\n\nexport const CHECKBOX_WIDTH = 15;\nexport const CHECKBOX_RIGHT_INSET = 3;\n\nexport const styles = {\n separatorStyle: ({ theme }: { theme: Theme }): CSSObject => ({\n height: \"1px\",\n backgroundColor: theme.colors.divider,\n margin: \"4px -4px\",\n }),\n\n itemStyle: ({\n theme,\n disabled,\n }: {\n theme: Theme;\n disabled?: boolean;\n }): CSSObject => ({\n ...theme.textStyles.button,\n flex: \"0 0 auto\",\n userSelect: \"none\",\n cursor: \"pointer\",\n borderRadius: \"3px\",\n padding: \"6px 8px\",\n ...(disabled && {\n color: theme.colors.textDisabled,\n }),\n \"&:focus\": {\n outline: \"none\",\n color: \"white\",\n backgroundColor: theme.colors.primary,\n\n \"& kbd\": {\n color: \"white\",\n },\n },\n \"&:active\": {\n background: theme.colors.primaryLight,\n },\n display: \"flex\",\n alignItems: \"center\",\n }),\n\n itemIndicatorStyle: {\n display: \"flex\",\n alignItems: \"center\",\n left: `-${CHECKBOX_WIDTH / 2}px`,\n position: \"relative\",\n marginRight: `-${CHECKBOX_RIGHT_INSET}px`,\n } as CSSObject,\n\n contentStyle: ({\n theme,\n scrollable,\n }: {\n theme: Theme;\n scrollable?: boolean;\n }): CSSObject => ({\n borderRadius: 4,\n backgroundColor: theme.colors.popover.background,\n color: theme.colors.text,\n boxShadow: \"0 2px 4px rgba(0,0,0,0.2), 0 0 12px rgba(0,0,0,0.1)\",\n padding: \"4px\",\n border: `1px solid ${theme.colors.popover.divider}`,\n zIndex: 1000,\n ...(scrollable && {\n height: \"100%\",\n maxHeight: \"calc(100vh - 80px)\",\n overflow: \"hidden auto\",\n }),\n }),\n};\n\nfunction getKeyboardShortcuts<T extends string>(\n item: MenuItem<T>\n): [string, T][] {\n if (item === SEPARATOR_ITEM) return [];\n\n if (item.items) 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 = styled.kbd<{\n $fixedWidth?: boolean;\n}>(\n ({ theme, $fixedWidth }): CSSObject => ({\n ...theme.textStyles.small,\n color: theme.colors.textDisabled,\n ...($fixedWidth && {\n width: \"0.9rem\",\n textAlign: \"center\",\n }),\n })\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","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 />\n );\n});\n\ntype ControlledProps = Props & {\n onChange: (value: string) => void;\n};\n\nconst ControlledTextInput = forwardRef(function ControlledTextInput(\n {\n onKeyDown,\n value,\n onChange,\n onFocusChange,\n onBlur,\n onFocusCapture,\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 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 />\n );\n});\n\ntype SubmittableProps = Props & {\n onSubmit: (value: string) => void;\n allowSubmittingWithSameValue?: boolean;\n submitAutomaticallyAfterDelay?: number;\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 ...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 handleSubmit();\n },\n [onBlur, onFocusChange, handleSubmit]\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 * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport React, { ComponentProps } from \"react\";\nimport styled from \"styled-components\";\nimport { IconButton } from \"./IconButton\";\n\ntype PopoverVariant = \"normal\" | \"large\";\n\nconst ContentElement = styled(PopoverPrimitive.Content)<{\n variant?: PopoverVariant;\n}>(({ theme, variant }) => ({\n borderRadius: 4,\n fontSize: 14,\n backgroundColor: theme.colors.popover.background,\n boxShadow: \"0 2px 4px rgba(0,0,0,0.2), 0 0 12px rgba(0,0,0,0.1)\",\n maxHeight: \"600px\",\n overflowY: \"auto\",\n color: theme.colors.textMuted,\n ...(variant === \"large\" && { width: \"680px\" }),\n ...(variant === \"normal\" && { width: \"240px\" }),\n zIndex: 1000,\n}));\n\nconst ArrowElement = styled(PopoverPrimitive.Arrow)(({ theme }) => ({\n fill: theme.colors.popover.background,\n}));\n\nconst PopoverClose = styled(PopoverPrimitive.Close)(({ theme }) => ({\n all: \"unset\",\n fontFamily: \"inherit\",\n borderRadius: \"100%\",\n height: 25,\n width: 25,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"absolute\",\n top: 5,\n right: 5,\n}));\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}\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}: Props) {\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>{trigger}</PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <ContentElement\n variant={variant}\n side={side}\n align=\"center\"\n sideOffset={sideOffset}\n onOpenAutoFocus={onOpenAutoFocus}\n onCloseAutoFocus={onCloseAutoFocus}\n onInteractOutside={onInteractOutside}\n onFocusOutside={onFocusOutside}\n onPointerDownOutside={onPointerDownOutside}\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 && <ArrowElement />}\n {closable && (\n <PopoverClose>\n <IconButton iconName=\"Cross2Icon\" onClick={onClickClose} />\n </PopoverClose>\n )}\n </ContentElement>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\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","// 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 { CheckIcon, ChevronRightIcon } from \"@noya-app/noya-icons\";\nimport { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport * as RadixContextMenu from \"@radix-ui/react-context-menu\";\nimport React, { ReactNode, memo, useCallback, useMemo } from \"react\";\nimport styled from \"styled-components\";\nimport { renderIcon } from \"./Icons\";\nimport { Spacer } from \"./Spacer\";\nimport {\n CHECKBOX_RIGHT_INSET,\n CHECKBOX_WIDTH,\n KeyboardShortcut,\n MenuItem,\n SEPARATOR_ITEM,\n getKeyboardShortcutsForMenuItems,\n styles,\n} from \"./internal/Menu\";\n\n/* ----------------------------------------------------------------------------\n * Separator\n * ------------------------------------------------------------------------- */\n\nconst SeparatorElement = styled(RadixContextMenu.Separator)(\n styles.separatorStyle\n);\n\n/* ----------------------------------------------------------------------------\n * Item\n * ------------------------------------------------------------------------- */\n\nconst ItemElement = styled(RadixContextMenu.Item)(styles.itemStyle);\n\nconst CheckboxItemElement = styled(RadixContextMenu.CheckboxItem)(\n styles.itemStyle\n);\n\nconst StyledItemIndicator = styled(RadixContextMenu.ItemIndicator)(\n styles.itemIndicatorStyle\n);\n\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 ContextMenuItem = memo(function ContextMenuItem<T extends string>({\n value,\n children,\n onSelect,\n checked,\n disabled,\n indented,\n icon,\n items,\n shortcut,\n}: MenuItemProps<T>) {\n // The pointer event within the context menu will bubble outside of the\n // context menu unless we stop it here.\n const handlePointerDown = useCallback(\n (event: React.PointerEvent) => event.stopPropagation(),\n []\n );\n\n const handleSelectItem = useCallback(() => {\n if (!value) return;\n\n onSelect(value);\n }, [onSelect, value]);\n\n if (checked) {\n return (\n <CheckboxItemElement\n checked={checked}\n disabled={disabled}\n onSelect={handleSelectItem}\n >\n <StyledItemIndicator>\n <CheckIcon />\n </StyledItemIndicator>\n {children}\n </CheckboxItemElement>\n );\n }\n\n const element = (\n <ItemElement\n disabled={disabled}\n onSelect={handleSelectItem}\n onPointerDown={handlePointerDown}\n >\n {indented && (\n <Spacer.Horizontal size={CHECKBOX_WIDTH - CHECKBOX_RIGHT_INSET} />\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 {items && items.length > 0 && (\n <>\n <Spacer.Horizontal />\n <Spacer.Horizontal size={16} />\n <ChevronRightIcon />\n </>\n )}\n </ItemElement>\n );\n\n if (items && items.length > 0) {\n return (\n <ContextMenuRoot isNested items={items} onSelect={onSelect}>\n {element}\n </ContextMenuRoot>\n );\n } else {\n return element;\n }\n});\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nconst Content = styled(RadixContextMenu.Content)(styles.contentStyle);\nconst SubContent = styled(RadixContextMenu.SubContent)(styles.contentStyle);\n\nexport interface MenuProps<T extends string> {\n children: ReactNode;\n items: MenuItem<T>[];\n onSelect: (value: T) => void;\n isNested?: boolean;\n shouldBindKeyboardShortcuts?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction ContextMenuRoot<T extends string>({\n items,\n children,\n onSelect,\n isNested,\n shouldBindKeyboardShortcuts,\n onOpenChange,\n}: MenuProps<T>) {\n const hasCheckedItem = items.some(\n (item) => item !== SEPARATOR_ITEM && item.checked\n );\n\n const keymap = useMemo(\n () =>\n isNested || shouldBindKeyboardShortcuts === false\n ? {}\n : getKeyboardShortcutsForMenuItems(items, onSelect),\n [isNested, items, onSelect, shouldBindKeyboardShortcuts]\n );\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 RootComponent = isNested ? RadixContextMenu.Sub : RadixContextMenu.Root;\n const TriggerComponent = isNested\n ? RadixContextMenu.SubTrigger\n : RadixContextMenu.Trigger;\n const ContentComponent: typeof Content = isNested ? SubContent : Content;\n\n return (\n <RootComponent onOpenChange={onOpenChange}>\n <TriggerComponent asChild onPointerDown={onPointerDown}>\n {children}\n </TriggerComponent>\n <RadixContextMenu.Portal>\n <ContentComponent>\n {items.map((item, index) =>\n item === SEPARATOR_ITEM ? (\n <SeparatorElement key={index} />\n ) : (\n <ContextMenuItem\n key={item.value ?? index}\n value={item.value}\n indented={hasCheckedItem}\n checked={item.checked ?? false}\n disabled={item.disabled ?? false}\n icon={item.icon}\n onSelect={onSelect}\n items={item.items}\n shortcut={item.shortcut}\n >\n {item.title}\n </ContextMenuItem>\n )\n )}\n </ContentComponent>\n </RadixContextMenu.Portal>\n </RootComponent>\n );\n}\n\nexport const ContextMenu = memo(ContextMenuRoot);\n","import React, { memo } from \"react\";\nimport styled from \"styled-components\";\n\n/* ----------------------------------------------------------------------------\n * Divider\n * ------------------------------------------------------------------------- */\n\ntype DividerVariant = \"normal\" | \"strong\" | \"subtle\";\n\nconst DividerContainer = styled.div<\n DividerProps_ & {\n $orientation: \"horizontal\" | \"vertical\";\n }\n>(({ theme, $variant = \"normal\", $orientation, $overflow = 0 }) => ({\n ...($orientation === \"horizontal\"\n ? { height: \"1px\", minHeight: \"1px\", margin: `0px -${$overflow}px` }\n : { width: \"1px\", minWidth: \"1px\", margin: `-${$overflow}px 0px` }),\n background:\n $variant === \"strong\"\n ? theme.colors.dividerStrong\n : $variant === \"subtle\"\n ? theme.colors.dividerSubtle\n : theme.colors.divider,\n alignSelf: \"stretch\",\n}));\n\ninterface DividerProps_ {\n $variant?: DividerVariant;\n $overflow?: number;\n}\n\ninterface DividerProps {\n variant?: DividerVariant;\n overflow?: number;\n}\n\nexport const Divider = memo(function Divider({\n variant,\n overflow,\n ...props\n}: DividerProps) {\n return (\n <DividerContainer\n $orientation=\"horizontal\"\n $variant={variant}\n $overflow={overflow}\n {...props}\n />\n );\n});\n\nexport const DividerVertical = memo(function DividerVertical({\n variant,\n overflow,\n ...props\n}: DividerProps) {\n return (\n <DividerContainer\n $orientation=\"vertical\"\n $variant={variant}\n $overflow={overflow}\n {...props}\n />\n );\n});\n","import { DragHandleDots2Icon } from \"@noya-app/noya-icons\";\nimport React, { memo, useCallback, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { useDesignSystemTheme } from \"../contexts/DesignSystemConfiguration\";\nimport { DropdownMenu } from \"./DropdownMenu\";\nimport { MenuItem } from \"./internal/Menu\";\n\nconst DotButtonElement = styled.div(({ theme }) => ({\n cursor: \"pointer\",\n borderRadius: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"2px 0\",\n \"&:hover\": {\n background: theme.colors.inputBackgroundLight,\n },\n \"&:active\": {\n background: theme.colors.activeBackground,\n },\n}));\n\nconst TriggerElement = styled.div({\n pointerEvents: \"none\",\n height: \"15px\",\n});\n\n/**\n * A button that opens a menu when clicked, but also allows dragging the\n */\nexport const DraggableMenuButton = memo(function DraggableMenuButton<\n T extends string,\n>({\n items,\n onSelect,\n isVisible = true,\n}: {\n items?: MenuItem<T>[];\n onSelect?: (value: T) => void;\n isVisible?: boolean;\n}) {\n const color = useDesignSystemTheme().colors.icon;\n const [open, setOpen] = useState(false);\n const [downPosition, setDownPosition] = React.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\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 <DotButtonElement\n onPointerDownCapture={handlePointerDownCapture}\n onPointerUp={handlePointerUp}\n onClick={(event) => {\n event.stopPropagation();\n event.preventDefault();\n }}\n >\n {items && onSelect ? (\n <DropdownMenu\n open={open}\n onOpenChange={handleOpenChange}\n items={items}\n onSelect={onSelect}\n shouldBindKeyboardShortcuts={false}\n >\n <TriggerElement>\n <DragHandleDots2Icon\n color={isVisible || open ? color : \"transparent\"}\n />\n </TriggerElement>\n </DropdownMenu>\n ) : (\n <DragHandleDots2Icon\n color={isVisible || open ? color : \"transparent\"}\n />\n )}\n </DotButtonElement>\n );\n});\n","import { Sketch } from \"@noya-app/noya-file-format\";\nimport React, { CSSProperties, ForwardedRef, forwardRef, memo } from \"react\";\nimport styled from \"styled-components\";\nimport { SketchPattern } from \"../utils/sketchPattern\";\nimport { FillPreviewBackground } from \"./FillPreviewBackground\";\n\nconst Container = styled.button<{ $flex?: CSSProperties[\"flex\"] }>(\n ({ theme, $flex }) => ({\n outline: \"none\",\n padding: 0,\n width: \"50px\",\n height: \"27px\",\n borderRadius: \"4px\",\n overflow: \"hidden\",\n border: \"none\",\n boxShadow: `0 0 0 1px ${theme.colors.divider} inset`,\n background: \"transparent\",\n \"&:focus\": {\n boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${theme.colors.primary}`,\n },\n position: \"relative\",\n flex: $flex,\n })\n);\n\ninterface Props {\n id?: string;\n value?: Sketch.Color | Sketch.Gradient | SketchPattern;\n flex?: CSSProperties[\"flex\"];\n}\n\nexport const FillInputField = memo(\n forwardRef(function FillInputField(\n { id, value, flex, ...rest }: Props,\n ref: ForwardedRef<HTMLButtonElement>\n ) {\n return (\n <Container ref={ref} id={id} $flex={flex} {...rest}>\n <FillPreviewBackground value={value} />\n </Container>\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 React, { memo, useMemo } from \"react\";\nimport styled, { useTheme } from \"styled-components\";\nimport { useImageData } from \"../contexts/ImageDataContext\";\nimport { useObjectURL } from \"../hooks/useObjectURL\";\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 = styled.span<{ background: string }>(({ background }) => ({\n background,\n position: \"absolute\",\n inset: 0,\n}));\n\nconst HorizontalDotsBackground = memo(function HorizontalDotsBackground() {\n const { inputBackground, placeholderDots } = useTheme().colors;\n\n const background = useMemo(\n () =>\n [\n `center url(\"data:image/svg+xml;utf8,${dotsHorizontalSvg(\n placeholderDots\n )}\") no-repeat`,\n inputBackground,\n ].join(\",\"),\n [inputBackground, placeholderDots]\n );\n\n return <Background background={background} />;\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 = memo(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 = 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\nconst ColorPreviewBackground = memo(function ColorPreviewBackground({\n color,\n}: {\n color: Sketch.Color;\n}) {\n const background = useMemo(() => sketchColorToRgbaString(color), [color]);\n\n return <Background background={background} />;\n});\n\nconst GradientPreviewBackground = memo(function GradientPreviewBackground({\n gradient,\n}: {\n gradient: Sketch.Gradient;\n}) {\n const background = useMemo(\n () => getGradientBackground(gradient.stops, gradient.gradientType, 180),\n [gradient.gradientType, gradient.stops]\n );\n\n return <Background background={background} />;\n});\n\ninterface Props {\n value?: Sketch.Color | Sketch.Gradient | SketchPattern;\n}\n\nexport const FillPreviewBackground = memo(function FillPreviewBackground({\n value,\n}: Props) {\n if (!value) return <HorizontalDotsBackground />;\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 React, {\n createContext,\n memo,\n ReactNode,\n useContext,\n useMemo,\n} from \"react\";\n\nexport type ImageDataContextValue = {\n getImageData: (ref: string) => ArrayBuffer | undefined;\n};\n\nconst ImageDataContext = createContext<ImageDataContextValue | undefined>(\n undefined\n);\n\nexport const ImageDataProvider = memo(function ImageDataProvider({\n children,\n getImageData,\n}: {\n children: ReactNode;\n getImageData?: (ref: string) => ArrayBuffer | undefined;\n}) {\n const contextValue = 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 = 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 Divider,\n IconButton,\n Small,\n useCurrentFloatingWindowInternal,\n useDesignSystemTheme,\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 flex=\"1\" fontWeight=\"500\" color=\"text\">\n {title}\n </Small>\n {toolbarContent}\n <IconButton\n iconName=\"Cross3Icon\"\n onClick={onClose}\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 theme = useDesignSystemTheme();\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 ${theme.colors.divider}`,\n backgroundColor: theme.colors.canvas.background,\n }}\n >\n <div\n style={{\n ...styles.toolbar,\n backgroundColor: theme.colors.sidebar.background,\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 React, { memo, useCallback, useMemo } 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 = memo(function GradientPicker({\n value,\n selectedStop,\n onChangeColor,\n onChangePosition,\n onAdd,\n onDelete,\n onSelectStop,\n}: Props) {\n const colorModel: ColorModel<RgbaColor> = 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 = useMemo(\n () => sketchColorToRgba(value[selectedStop].color),\n [value, selectedStop],\n );\n\n const handleChangeColor = useCallback(\n (value: RgbaColor) => {\n onChangeColor(rgbaToSketchColor(value));\n },\n [onChangeColor],\n );\n\n const handleAddGradientStop = 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 styled from 'styled-components';\nimport { Colors } from '../theme';\n\nexport type GridProps = {\n columns?: string;\n rows?: string;\n alignItems?: 'start' | 'center' | 'end';\n justifyItems?: 'start' | 'center' | 'end';\n placeItems?: 'start' | 'center' | 'end';\n width?: number | string;\n minWidth?: number | string;\n maxWidth?: number | string;\n height?: number | string;\n minHeight?: number | string;\n maxHeight?: number | string;\n padding?: number | string;\n paddingX?: number | string;\n paddingXStart?: number | string;\n paddingXEnd?: number | string;\n paddingY?: number | string;\n paddingYStart?: number | string;\n paddingYEnd?: number | string;\n gap?: number | string;\n gapX?: number | string;\n gapY?: number | string;\n background?: keyof Colors;\n};\n\nconst Grid = styled.div<GridProps>((props) => ({\n display: 'grid',\n gridTemplateColumns: props.columns,\n gridTemplateRows: props.rows,\n alignItems: props.alignItems,\n justifyItems: props.justifyItems,\n width: props.width,\n minWidth: props.minWidth ?? 0,\n maxWidth: props.maxWidth,\n height: props.height,\n minHeight: props.minHeight ?? 0,\n maxHeight: props.maxHeight,\n padding: props.padding,\n paddingInline: props.paddingX,\n paddingInlineStart: props.paddingXStart,\n paddingInlineEnd: props.paddingXEnd,\n paddingBlock: props.paddingY,\n paddingBlockStart: props.paddingYStart,\n paddingBlockEnd: props.paddingYEnd,\n gap: props.gap,\n gapRow: props.gapX,\n gapColumn: props.gapY,\n background: props.background,\n}));\n\nexport default Grid;\n","import { KeyModifiers } from \"@noya-app/noya-keymap\";\nimport React, {\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport styled, { keyframes } from \"styled-components\";\nimport { useHover } from \"../hooks/useHover\";\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 { Stack } from \"./Stack\";\nimport { Tooltip } from \"./Tooltip\";\n\nexport type GridViewSize = \"xxs\" | \"xs\" | \"small\" | \"medium\" | \"large\" | \"xl\";\n\nconst sizes: Record<\n GridViewSize,\n {\n itemWidth: number;\n itemHeight: number;\n gap: number;\n }\n> = {\n xxs: {\n itemWidth: 36,\n itemHeight: 36,\n gap: 5,\n },\n xs: {\n itemWidth: 87,\n itemHeight: 87,\n gap: 9,\n },\n small: {\n itemWidth: 160,\n itemHeight: 170,\n gap: 20,\n },\n medium: {\n itemWidth: 220,\n itemHeight: 220,\n gap: 16,\n },\n large: {\n itemWidth: 280,\n itemHeight: 280,\n gap: 24,\n },\n xl: {\n itemWidth: 400,\n itemHeight: 400,\n gap: 32,\n },\n};\n\nconst Grid = styled.div<{\n size: GridViewSize;\n padding: CSSProperties[\"padding\"];\n}>(({ theme, size, padding }) => {\n return {\n color: theme.colors.text,\n display: \"grid\",\n gridTemplateColumns: `repeat(auto-fill, minmax(${sizes[size].itemWidth}px, 1fr))`,\n // gridAutoRows: `${sizes[size].itemHeight}px`,\n gap: `${sizes[size].gap}px`,\n // gridTemplateColumns: `repeat(auto-fill, minmax(\n // ${size === 'large' ? '280px' : size === 'small' ? '160px' : '116px'}\n // , 1fr))`,\n // gridAutoRows:\n // size === 'large' ? '280px' : size === 'small' ? '170px' : '116px',\n // gap: size === 'large' || size === 'small' ? `20px` : `12px`,\n padding,\n };\n});\n\nconst Container = styled.div<{ scrollable: boolean }>(\n ({ theme, scrollable }) => ({\n flex: scrollable ? \"1\" : \"0 0 auto\",\n display: \"flex\",\n flexDirection: \"column\",\n })\n);\n\nconst ContentContainer = styled.div<{\n selected?: boolean;\n hovered?: boolean;\n bordered: boolean;\n disabled: boolean;\n}>(({ theme, selected, hovered, bordered, disabled }) => ({\n display: \"flex\",\n flex: \"1\",\n backgroundColor: theme.colors.sidebar.background,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: \"2px\",\n border: `1px solid ${\n selected\n ? theme.colors.primary\n : // : hovered\n // ? `rgb(132, 63, 255, 0.5)`\n bordered\n ? theme.colors.divider\n : \"transparent\"\n }`,\n overflow: \"hidden\",\n\n cursor: \"pointer\",\n ...(disabled\n ? { opacity: 0.5 }\n : {\n \"&:hover\": { opacity: 0.85 },\n \"&:active\": { opacity: 0.7 },\n }),\n}));\n\nconst ItemContainer = styled.div(({ theme }) => ({\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n\n \"&:focus\": {\n boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${theme.colors.primary}`,\n outline: \"none\",\n },\n}));\n\nconst ItemTitle = styled.span<{ showBackground: boolean }>(\n ({ theme, showBackground }) => ({\n ...theme.textStyles.small,\n lineHeight: \"1\",\n color: theme.colors.text,\n fontWeight: 500,\n userSelect: \"none\",\n whiteSpace: \"pre\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n\n ...(showBackground && {\n background: theme.colors.sidebar.background,\n // border: `1px solid ${theme.colors.dividerSubtle}`,\n padding: \"2px 4px\",\n borderRadius: \"2px\",\n backdropFilter: \"blur(4px)\",\n }),\n })\n);\n\nconst ItemDescription = styled.span<{ showBackground: boolean }>(\n ({ theme, showBackground }) => ({\n ...theme.textStyles.small,\n fontSize: \"0.7rem\",\n lineHeight: \"1\",\n color: theme.colors.textMuted,\n userSelect: \"none\",\n whiteSpace: \"pre\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n\n ...(showBackground && {\n background: theme.colors.sidebar.background,\n // border: `1px solid ${theme.colors.dividerSubtle}`,\n padding: \"2px 4px\",\n borderRadius: \"2px\",\n backdropFilter: \"blur(4px)\",\n }),\n })\n);\n\nconst SectionTitle = styled.span<{ last?: boolean }>(\n ({ theme, last = false }) => ({\n ...theme.textStyles.heading3,\n color: last ? theme.colors.text : theme.colors.textMuted,\n fontWeight: 500,\n userSelect: \"none\",\n whiteSpace: \"pre\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n lineHeight: \"1\",\n })\n);\n\nconst SectionHeaderContainer = styled.div(({ theme }) => ({\n padding: \"0 20px\",\n}));\n\nconst TextOverlay = styled.div({\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"end\",\n alignItems: \"start\",\n padding: \"4px\",\n pointerEvents: \"none\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n gap: \"2px\",\n});\n\nconst shimmer = keyframes({\n \"0%\": {\n backgroundPosition: \"-200% 0\",\n },\n \"100%\": {\n backgroundPosition: \"200% 0\",\n },\n});\n\nconst Shimmer = styled.div`\n pointer-events: none;\n position: absolute;\n inset: 0;\n animation: ${shimmer} 6s infinite linear;\n background: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0),\n rgba(226, 232, 240, 0.5),\n rgba(255, 255, 255, 0)\n );\n background-size: 200% 100%;\n display: flex;\n flex-direction: column;\n justify-content: start;\n align-items: end;\n padding: 4px;\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 onPress?: (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 style?: CSSProperties;\n}\n\nconst GridViewItem = forwardRef(function GridViewItem<\n MenuItemType extends string,\n>(\n {\n id,\n title,\n subtitle,\n loading,\n selected,\n onClick,\n onPress,\n onDoubleClick,\n onHoverChange,\n children,\n menuItems,\n onSelectMenuItem,\n onContextMenu,\n style,\n }: ItemProps<MenuItemType>,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const [hovered, setHovered] = React.useState(false);\n\n const { hoverProps } = useHover({\n onHoverChange: (isHovering) => {\n onHoverChange?.(isHovering);\n setHovered(isHovering);\n },\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 onPress?.(event);\n },\n [onClick, onPress]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.stopPropagation();\n event.preventDefault();\n\n onPress?.(event);\n } else {\n return;\n }\n },\n [onPress]\n );\n\n let element = (\n <ItemContainer\n id={id}\n ref={forwardedRef}\n {...hoverProps}\n tabIndex={disabled ? undefined : 0}\n onKeyDown={handleKeyDown}\n >\n <ContentContainer\n disabled={disabled}\n bordered={bordered}\n selected={selected}\n hovered={!disabled && hovered}\n onClick={handleClick}\n onDoubleClick={onDoubleClick}\n onContextMenu={onContextMenu}\n style={style}\n >\n {children}\n </ContentContainer>\n {textPosition === \"below\" && (\n <>\n <Spacer.Vertical size={8} />\n <ItemTitle showBackground={false}>{title || \" \"}</ItemTitle>\n <ItemDescription showBackground={false}>\n {subtitle || \" \"}\n </ItemDescription>\n </>\n )}\n {textPosition === \"overlay\" && hovered && (title || subtitle) && (\n <TextOverlay>\n {title && <ItemTitle showBackground>{title}</ItemTitle>}\n {subtitle && (\n <ItemDescription showBackground>{subtitle}</ItemDescription>\n )}\n </TextOverlay>\n )}\n {loading && (\n <Shimmer>\n <ActivityIndicator opacity={0.5} size={13} />\n </Shimmer>\n )}\n </ItemContainer>\n );\n\n if (menuItems && onSelectMenuItem) {\n element = (\n <ContextMenu<MenuItemType> items={menuItems} onSelect={onSelectMenuItem}>\n {element}\n </ContextMenu>\n );\n }\n\n if (textPosition === \"toolip\") {\n element = (\n <Tooltip\n content={\n <Stack.V gap={2}>\n <ItemTitle showBackground={false}>{title}</ItemTitle>\n <ItemDescription showBackground={false}>{subtitle}</ItemDescription>\n </Stack.V>\n }\n >\n {element}\n </Tooltip>\n );\n }\n\n return element;\n});\n\ntype GridViewContextValue = {\n size: GridViewSize;\n textPosition: \"overlay\" | \"below\" | \"toolip\";\n bordered: boolean;\n disabled: boolean;\n};\n\nconst GridViewContext = createContext<GridViewContextValue>({\n size: \"small\",\n textPosition: \"below\",\n bordered: false,\n disabled: false,\n});\n\ninterface GridViewRootProps extends Partial<GridViewContextValue> {\n children: ReactNode;\n onClick?: () => void;\n scrollable?: boolean;\n}\n\nfunction GridViewRoot({\n size = \"small\",\n children,\n scrollable = true,\n onClick,\n textPosition = \"below\",\n bordered = false,\n disabled = false,\n}: GridViewRootProps) {\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 size,\n textPosition,\n bordered,\n disabled,\n }),\n [bordered, disabled, size, textPosition]\n );\n\n return (\n <GridViewContext.Provider value={contextValue}>\n <Container onClick={handleClick} scrollable={scrollable}>\n {scrollable ? <ScrollArea>{children}</ScrollArea> : children}\n </Container>\n </GridViewContext.Provider>\n );\n}\n\nfunction GridViewSection({\n children,\n padding = \"20px\",\n}: {\n children?: ReactNode;\n padding?: CSSProperties[\"padding\"];\n}) {\n const { size } = useContext(GridViewContext);\n\n return (\n <Grid size={size} padding={padding}>\n {children}\n </Grid>\n );\n}\n\nfunction GridViewSectionHeader({ title }: { title: string }) {\n const grouped = title.split(\"/\");\n\n return (\n <SectionHeaderContainer>\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 </SectionHeaderContainer>\n );\n}\n\nexport namespace GridView {\n export const Root = memo(GridViewRoot);\n export const Item = memo(GridViewItem);\n export const Section = memo(GridViewSection);\n export const SectionHeader = memo(GridViewSectionHeader);\n}\n","import * as RadixScrollArea from \"@radix-ui/react-scroll-area\";\nimport React, { memo, ReactNode, useCallback, useState } from \"react\";\nimport styled from \"styled-components\";\n\nconst SCROLLBAR_SIZE = 10;\n\nconst StyledViewport = styled(RadixScrollArea.Viewport)({\n width: \"100%\",\n height: \"100%\",\n // Override the `display: table` in the child, since this allows\n // elements to expand beyond the width of the viewport.\n \"& > div\": {\n display: \"block !important\",\n },\n});\n\nconst StyledScrollbar = styled(RadixScrollArea.Scrollbar)({\n display: \"flex\",\n padding: \"3px\",\n '&[data-orientation=\"vertical\"]': {\n width: SCROLLBAR_SIZE,\n },\n});\n\nconst StyledThumb = styled(RadixScrollArea.Thumb)(({ theme }) => ({\n flex: 1,\n borderRadius: SCROLLBAR_SIZE,\n backgroundColor: theme.colors.scrollbar,\n}));\n\nconst Container = styled.div({\n flex: \"1 1 0px\",\n minHeight: 0,\n});\n\ninterface Props {\n children?: ReactNode | ((scrollElementRef: HTMLDivElement) => ReactNode);\n}\n\nexport const ScrollArea = memo(function ScrollArea({ children }: Props) {\n const [scrollElementRef, setScrollElementRef] =\n useState<HTMLDivElement | null>(null);\n\n return (\n <Container>\n <RadixScrollArea.Root style={{ width: \"100%\", height: \"100%\" }}>\n <StyledViewport\n ref={useCallback(\n (ref: HTMLDivElement | null) => setScrollElementRef(ref),\n []\n )}\n >\n {typeof children === \"function\"\n ? scrollElementRef\n ? children(scrollElementRef)\n : null\n : children}\n </StyledViewport>\n <StyledScrollbar orientation=\"vertical\" className=\"scroll-component\">\n <StyledThumb className=\"scroll-component\" />\n </StyledScrollbar>\n </RadixScrollArea.Root>\n </Container>\n );\n});\n","import { Size } from \"@noya-app/noya-geometry\";\nimport { chunkBy, partition } from \"@noya-app/noya-utils\";\nimport React, {\n FocusEventHandler,\n ForwardedRef,\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styled from \"styled-components\";\nimport {\n CompletionItem,\n CompletionListItem,\n CompletionSectionHeader,\n} from \"../utils/completions\";\nimport { IToken, fuzzyFilter, fuzzyTokenize } from \"../utils/fuzzyScorer\";\nimport { ActivityIndicator } from \"./ActivityIndicator\";\nimport { InputField, InputFieldSize } from \"./InputField\";\nimport { IVirtualizedList, ListView } from \"./ListView\";\nimport { Spacer } from \"./Spacer\";\nimport { Stack } from \"./Stack\";\nimport { Small } from \"./Text\";\n\nfunction filterWithGroupedSections(\n items: (CompletionItem | CompletionSectionHeader)[],\n query: string\n): CompletionListItem[] {\n const sections = chunkBy(items, (a, b) => b.type !== \"sectionHeader\");\n\n return sections.flatMap((section) => {\n const [headers, regular] = partition(\n section,\n (item): item is CompletionSectionHeader => item.type === \"sectionHeader\"\n );\n const maxVisibleItems =\n headers.length > 0 ? headers[0].maxVisibleItems : undefined;\n\n const scoredItems = fuzzyFilter({\n items: regular.map((item) => item.name),\n query,\n });\n\n const usedIndexes = new Set(scoredItems.map((item) => item.index));\n const extraItems = regular.flatMap((item, index): CompletionListItem[] =>\n item.alwaysInclude && !usedIndexes.has(index)\n ? [{ ...item, index, score: 0 }]\n : []\n );\n let newItems = scoredItems\n .map((item): CompletionListItem => ({ ...item, ...regular[item.index] }))\n .concat(extraItems);\n\n if (maxVisibleItems !== undefined) {\n newItems = newItems.slice(0, maxVisibleItems);\n }\n\n if (newItems.length === 0) return [];\n\n return [...headers, ...newItems];\n });\n}\n\nexport const CompletionToken = styled.span<{ $type: IToken[\"type\"] }>(\n ({ $type }) => ({\n fontWeight: $type === \"match\" ? \"bold\" : \"normal\",\n whiteSpace: \"pre\",\n })\n);\n\ninterface CompletionMenuProps {\n items: CompletionListItem[];\n selectedIndex: number;\n onSelectItem: (item: CompletionListItem) => void;\n onHoverIndex: (index: number) => void;\n listSize: Size;\n}\n\nexport const CompletionMenu = memo(\n forwardRef(function CompletionMenu(\n {\n items,\n selectedIndex,\n onSelectItem,\n onHoverIndex,\n listSize,\n }: CompletionMenuProps,\n forwardedRef: ForwardedRef<IVirtualizedList>\n ) {\n return (\n <ListView.Root\n ref={forwardedRef}\n scrollable\n keyExtractor={(item) => item.id}\n data={items}\n virtualized={listSize}\n pressEventName=\"onPointerDown\"\n sectionHeaderVariant=\"label\"\n renderItem={(item, i) => {\n if (item.type === \"sectionHeader\") {\n return (\n <ListView.Row key={item.id} isSectionHeader>\n {item.name}\n </ListView.Row>\n );\n }\n\n const tokens = fuzzyTokenize({\n item: item.name,\n itemScore: item,\n });\n\n return (\n <ListView.Row\n key={item.id}\n selected={i === selectedIndex}\n onPress={() => onSelectItem(item)}\n onHoverChange={(hovered) => {\n if (hovered) {\n onHoverIndex(i);\n }\n }}\n >\n {tokens.map((token, j) => (\n <CompletionToken key={j} $type={token.type}>\n {token.text}\n </CompletionToken>\n ))}\n {item.icon && (\n <>\n <Spacer.Horizontal />\n {item.icon}\n </>\n )}\n </ListView.Row>\n );\n }}\n />\n );\n })\n);\n\ntype Props = {\n loading?: boolean;\n initialValue?: string;\n placeholder?: string;\n items: (CompletionItem | CompletionSectionHeader)[];\n onChange?: (value: string) => void;\n onHoverItem?: (item: CompletionItem | undefined) => void;\n onSelectItem?: (item: CompletionItem) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onBlur?: (didSubmit: boolean, value: string) => void;\n onDeleteWhenEmpty?: () => void;\n size?: InputFieldSize;\n style?: React.CSSProperties;\n className?: string;\n children?: React.ReactNode;\n hideChildrenWhenFocused?: boolean;\n hideMenuWhenEmptyValue?: boolean;\n};\n\nexport interface IInputFieldWithCompletions {\n focus(): void;\n setValue(value: string): void;\n selectAllInputText(): void;\n}\n\nexport const InputFieldWithCompletions = memo(\n forwardRef(function InputFieldWithCompletions(\n {\n loading,\n initialValue = \"\",\n placeholder,\n items,\n size,\n onChange,\n onSelectItem,\n onHoverItem,\n onFocus,\n onBlur,\n onDeleteWhenEmpty,\n style,\n className,\n children,\n hideChildrenWhenFocused = false,\n hideMenuWhenEmptyValue = false,\n }: Props,\n forwardedRef: ForwardedRef<IInputFieldWithCompletions>\n ) {\n const ref = useRef<HTMLInputElement>(null);\n\n const [isFocused, setIsFocused] = useState(false);\n const [state, _setState] = useState({\n filter: initialValue,\n selectedIndex: 0,\n });\n\n const updateState = useCallback(\n (\n newState: { filter?: string; selectedIndex?: number },\n hoverItem?: \"resetHover\"\n ) => {\n const nextState = { ...state, ...newState };\n const nextItems = filterWithGroupedSections(items, nextState.filter);\n\n // If we would be selecting a header, find the next valid index\n if (nextItems[nextState.selectedIndex]?.type === \"sectionHeader\") {\n nextState.selectedIndex = getNextIndex(\n nextItems,\n nextState.selectedIndex,\n \"next\",\n (item) => item.type === \"sectionHeader\"\n );\n }\n\n if (hoverItem === \"resetHover\") {\n onHoverItem?.(undefined);\n } else {\n const nextItem = nextItems[nextState.selectedIndex];\n\n if (nextItem && nextItem.type !== \"sectionHeader\") {\n onHoverItem?.(nextItem);\n } else {\n onHoverItem?.(undefined);\n }\n }\n\n _setState(nextState);\n if (newState.filter !== undefined) {\n onChange?.(newState.filter);\n }\n },\n [items, onChange, onHoverItem, state]\n );\n\n const initialValueRef = useRef(initialValue);\n\n useLayoutEffect(() => {\n if (initialValueRef.current === initialValue) return;\n initialValueRef.current = initialValue;\n updateState({ filter: initialValue });\n }, [initialValue, updateState]);\n\n const { filter, selectedIndex } = state;\n\n const listRef = React.useRef<ListView.VirtualizedList>(null);\n\n const filteredItems = useMemo(\n () => filterWithGroupedSections(items, filter),\n [items, filter]\n );\n\n const [normalItems, sectionHeaderItems] = partition(\n filteredItems,\n (item) => item.type !== \"sectionHeader\"\n );\n\n const height = Math.min(\n ListView.calculateHeight(\n normalItems.length,\n sectionHeaderItems.length,\n \"label\"\n ),\n ListView.rowHeight * 10.5\n );\n\n useEffect(() => {\n if (listRef.current) {\n listRef.current.scrollToIndex(selectedIndex);\n }\n }, [selectedIndex]);\n\n // Keep track of the last submitted value so we can detect whether a blur\n // event was caused by selecting an item or not\n const lastSubmittedValueRef = useRef<\n { filter: string; itemName: string } | undefined\n >(undefined);\n\n const selectItem = useCallback(\n (item: CompletionListItem) => {\n if (item.type === \"sectionHeader\") return;\n\n lastSubmittedValueRef.current = {\n filter,\n itemName: item.name,\n };\n\n onSelectItem?.(item);\n onHoverItem?.(undefined);\n\n if (ref && typeof ref === \"object\") {\n ref.current?.blur();\n }\n },\n [filter, onSelectItem, onHoverItem, ref]\n );\n\n const handleChange = useCallback(\n (value: string) => updateState({ selectedIndex: 0, filter: value }),\n [updateState]\n );\n\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n const didSubmit = lastSubmittedValueRef.current?.filter === filter;\n updateState({ selectedIndex: 0, filter: initialValue }, \"resetHover\");\n onBlur?.(didSubmit, filter);\n }, [filter, initialValue, onBlur, updateState]);\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = useCallback(\n (event) => {\n setIsFocused(true);\n updateState({ selectedIndex: 0, filter: initialValue });\n onFocus?.(event);\n },\n [initialValue, onFocus, updateState]\n );\n\n const handleIndexChange = useCallback(\n (index: number) => updateState({ selectedIndex: index }),\n [updateState]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n let handled = false;\n\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n handleIndexChange(\n getNextIndex(\n filteredItems,\n selectedIndex,\n event.key === \"ArrowDown\" ? \"next\" : \"previous\",\n (item) => item.type === \"sectionHeader\"\n )\n );\n\n handled = true;\n break;\n case \"Enter\": {\n const item = filteredItems[selectedIndex];\n if (item) {\n selectItem(item);\n }\n\n handled = true;\n break;\n }\n case \"Tab\": {\n // Update the filter to the selected item\n const item = filteredItems[selectedIndex];\n if (item) {\n handleChange(item.name);\n }\n\n handled = true;\n break;\n }\n case \"Escape\":\n if (ref && typeof ref === \"object\") {\n ref.current?.blur();\n }\n\n handled = true;\n break;\n case \"Backspace\":\n case \"Delete\": {\n if (filter === \"\") {\n onDeleteWhenEmpty?.();\n }\n\n break;\n }\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [\n handleIndexChange,\n filteredItems,\n selectedIndex,\n ref,\n selectItem,\n handleChange,\n filter,\n onDeleteWhenEmpty,\n ]\n );\n\n const display = !filter && hideMenuWhenEmptyValue ? \"none\" : \"flex\";\n\n const typeaheadValue = filteredItems[selectedIndex]?.name;\n\n useImperativeHandle(forwardedRef, () => ({\n focus: () => {\n ref.current?.focus();\n },\n setValue: (value: string) => {\n handleChange(value);\n },\n selectAllInputText: () => {\n ref.current?.setSelectionRange(0, ref.current.value.length);\n },\n }));\n\n return (\n <InputField.Root\n size={size}\n labelSize={16}\n renderPopoverContent={({ width }) => {\n const listSize = { width, height };\n\n return (\n <Stack.V flex={`0 0 ${height}px`} display={display}>\n {filteredItems.length > 0 ? (\n <CompletionMenu\n ref={listRef}\n items={filteredItems}\n selectedIndex={selectedIndex}\n onSelectItem={selectItem}\n onHoverIndex={handleIndexChange}\n listSize={listSize}\n />\n ) : (\n <Stack.V\n height=\"100px\"\n padding=\"20px\"\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n <Small color=\"textDisabled\">\n {loading ? \"Loading\" : \"No results\"}\n </Small>\n </Stack.V>\n )}\n </Stack.V>\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={handleKeyDown}\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={isFocused && display !== \"none\"}\n aria-controls=\"component-listbox\"\n />\n {filter &&\n typeaheadValue &&\n typeaheadValue.toLowerCase().startsWith(filter.toLowerCase()) && (\n <InputField.Typeahead value={typeaheadValue} prefix={filter} />\n )}\n {(!isFocused || !hideChildrenWhenFocused) && children}\n {loading && isFocused && (\n <InputField.Label>\n <ActivityIndicator />\n </InputField.Label>\n )}\n </InputField.Root>\n );\n })\n);\n\nfunction getNextIndex<T>(\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","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 const tokens: IToken[] = [];\n\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 { range } from \"@noya-app/noya-utils\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport React, {\n Children,\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\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 styled from \"styled-components\";\nimport { mergeEventHandlers } from \"../hooks/mergeEventHandlers\";\nimport { useHover } from \"../hooks/useHover\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport { InputField } from \"./InputField\";\nimport { MenuItem } from \"./internal/Menu\";\nimport { ScrollArea } from \"./ScrollArea\";\nimport {\n DropValidator,\n normalizeListDestinationIndex,\n RelativeDropPosition,\n Sortable,\n} from \"./Sortable\";\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 = 27;\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 isDragging?: 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 = styled.span(({ theme }) => ({\n flex: \"1 1 0\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"pre\",\n}));\n\n/* ----------------------------------------------------------------------------\n * EditableRowTitle\n * ------------------------------------------------------------------------- */\n\nconst ListViewEditableRowTitleElement = styled(InputField.Input)(\n ({ theme }) => ({\n background: theme.colors.listView.editingBackground,\n })\n) as typeof InputField.Input;\n\nexport interface EditableRowProps {\n value: string;\n onSubmitEditing: (value: string) => void;\n autoFocus: boolean;\n placeholder?: string;\n}\n\nfunction ListViewEditableRowTitle({\n value,\n onSubmitEditing,\n autoFocus,\n placeholder,\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 setTimeout(() => {\n element.select();\n }, 0);\n }, [autoFocus]);\n\n return (\n <ListViewEditableRowTitleElement\n ref={inputRef}\n variant=\"bare\"\n value={value}\n placeholder={placeholder}\n onSubmit={onSubmitEditing}\n allowSubmittingWithSameValue\n />\n );\n}\n\nfunction getPositionMargin(marginType: ListRowMarginType) {\n return {\n top: marginType === \"top\" || marginType === \"vertical\" ? 8 : 0,\n bottom: marginType === \"bottom\" || marginType === \"vertical\" ? 8 : 0,\n };\n}\n\n/* ----------------------------------------------------------------------------\n * Row\n * ------------------------------------------------------------------------- */\n\nconst RowContainer = styled.div<{\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}>(\n ({\n theme,\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 }) => {\n const margin = getPositionMargin($marginType);\n\n return {\n ...($isSectionHeader && $sectionHeaderVariant === \"label\"\n ? theme.textStyles.label\n : theme.textStyles.small),\n ...($isSectionHeader && { fontWeight: 500 }),\n gap: $gap,\n flex: \"0 0 auto\",\n userSelect: \"none\",\n cursor: \"default\",\n ...($variant !== \"bare\" && {\n paddingTop: \"6px\",\n paddingRight: \"12px\",\n paddingBottom: \"6px\",\n paddingLeft: \"12px\",\n ...($variant === \"padded\" && {\n borderRadius: \"2px\",\n marginLeft: \"8px\",\n marginRight: \"8px\",\n marginTop: `${margin.top}px`,\n marginBottom: `${margin.bottom}px`,\n }),\n }),\n color: theme.colors.textMuted,\n ...($isSectionHeader && {\n backgroundColor: theme.colors.listView.raisedBackground,\n ...($sectionHeaderVariant === \"label\" && {\n color: theme.colors.textDisabled,\n }),\n }),\n ...($disabled && {\n color: theme.colors.textDisabled,\n }),\n ...($selected && {\n color: \"white\",\n backgroundColor: theme.colors[$colorScheme],\n }),\n display: \"flex\",\n alignItems: \"center\",\n ...($selected &&\n !$isSectionHeader &&\n ($selectedPosition === \"middle\" || $selectedPosition === \"last\") && {\n borderTopRightRadius: \"0px\",\n borderTopLeftRadius: \"0px\",\n }),\n ...($selected &&\n !$isSectionHeader &&\n ($selectedPosition === \"middle\" || $selectedPosition === \"first\") && {\n borderBottomRightRadius: \"0px\",\n borderBottomLeftRadius: \"0px\",\n }),\n position: \"relative\",\n ...($hovered && {\n boxShadow: `0 0 0 1px ${theme.colors[$colorScheme]} inset`,\n }),\n ...($showsActiveState && {\n \"&:active\": {\n backgroundColor: $selected\n ? $colorScheme === \"secondary\"\n ? theme.colors.secondaryLight\n : theme.colors.primaryLight\n : theme.colors.activeBackground,\n },\n }),\n ...($divider && {\n borderBottom: `1px solid ${theme.colors.dividerSubtle}`,\n }),\n ...($backgroundColor && {\n backgroundColor: $backgroundColor,\n \"&:hover\": {\n backgroundColor: $backgroundColor,\n },\n \"&:active\": {\n backgroundColor: $backgroundColor,\n },\n }),\n };\n }\n);\n\nconst ListViewDragIndicatorElement = styled.div<{\n $relativeDropPosition: RelativeDropPosition;\n $gap: number;\n $offsetLeft: number;\n $colorScheme: ListColorScheme;\n}>(({ theme, $relativeDropPosition, $offsetLeft, $colorScheme, $gap }) => ({\n zIndex: 1,\n position: \"absolute\",\n borderRadius: \"3px\",\n ...($relativeDropPosition === \"inside\"\n ? {\n inset: 2,\n boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${\n $colorScheme === \"secondary\"\n ? theme.colors.secondary\n : theme.colors.dragOutline\n }`,\n }\n : {\n top: $relativeDropPosition === \"above\" ? -(3 + $gap / 2) : undefined,\n bottom: $relativeDropPosition === \"below\" ? -(3 + $gap / 2) : undefined,\n left: $offsetLeft,\n right: 0,\n height: 6,\n background: theme.colors[$colorScheme],\n border: `2px solid white`,\n boxShadow: \"0 0 2px rgba(0,0,0,0.5)\",\n }),\n}));\n\ninterface ListViewClickInfo {\n shiftKey: boolean;\n altKey: boolean;\n metaKey: boolean;\n ctrlKey: boolean;\n}\n\ninterface ListViewRowProps<MenuItemType extends string = string> {\n id?: string;\n tabIndex?: number;\n selected?: boolean;\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: {\n depth: number;\n indentation: number;\n position: RelativeDropPosition;\n }) => CSSProperties);\n}\n\nconst ListViewRow = forwardRef(function ListViewRow<\n MenuItemType extends string,\n>(\n {\n id,\n tabIndex = 0,\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 }: 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, isDragging } = 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 isDragging\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 }, [isDragging, style]);\n\n const renderContent = (\n {\n relativeDropPosition,\n ...renderProps\n }: React.ComponentProps<typeof RowContainer> & {\n relativeDropPosition?: RelativeDropPosition;\n },\n ref: Ref<HTMLElement>\n ) => {\n const Component = RowContainer;\n\n const element = (\n <Component\n ref={ref as any}\n $colorScheme={colorScheme}\n onContextMenu={onContextMenu}\n $isSectionHeader={isSectionHeader}\n id={id}\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={!isDragging && 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 >\n {relativeDropPosition && (\n <ListViewDragIndicatorElement\n $colorScheme={colorScheme}\n $relativeDropPosition={relativeDropPosition}\n $offsetLeft={33 + 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 = forwardRef(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}\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\nconst RootContainer = styled.div<{\n $scrollable?: boolean;\n $gap?: number;\n}>(({ theme, $scrollable, $gap }) => ({\n flex: $scrollable ? \"1 0 0\" : \"0 0 auto\",\n display: \"flex\",\n flexDirection: \"column\",\n flexWrap: \"nowrap\",\n color: theme.colors.textMuted,\n gap: $gap,\n}));\n\ntype ListViewItemInfo = {\n isDragging: boolean;\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\" | \"padded\" | \"bare\";\n\ntype ListViewSectionHeaderVariant = \"normal\" | \"label\";\n\ntype ListViewRootProps = {\n id?: string;\n className?: string;\n style?: CSSProperties;\n onPress?: () => void;\n scrollable?: boolean;\n expandable?: boolean;\n onMoveItem?: (\n sourceIndex: number,\n destinationIndex: number,\n position: RelativeDropPosition\n ) => void;\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};\n\nconst ListViewRootInner = forwardRef(function ListViewRootInner<T>(\n {\n id,\n className,\n style,\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 }: 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, { isDragging: 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: \"normal\",\n isSectionHeader: false,\n }),\n [colorScheme, sortable, expandable, divider, pressEventName, variant, gap]\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 () => ({ indentation, isDragging: 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, { isDragging: 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 onMoveItem={onMoveItem}\n keys={ids}\n renderOverlay={renderOverlay}\n acceptsDrop={acceptsDrop}\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 margin = child?.marginType\n ? getPositionMargin(child.marginType)\n : { top: 0, bottom: 0 };\n const height =\n (child?.isSectionHeader && child.sectionHeaderVariant === \"label\"\n ? SECTION_HEADER_LABEL_HEIGHT\n : ROW_HEIGHT) +\n (variant === \"padded\" ? margin.top + margin.bottom : 0);\n return height;\n },\n [getItemContextValue, variant]\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\n return (\n <ListViewDraggingContext.Provider value={draggingContextValue}>\n <RootContainer\n id={id}\n className={className}\n style={style}\n {...{\n [pressEventName]: handleClick,\n }}\n $gap={gap}\n $scrollable={scrollable}\n >\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 </RootContainer>\n </ListViewDraggingContext.Provider>\n );\n});\n\nconst ListViewRoot = memo(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 = forwardRef(function SimpleListViewInner<T = any>(\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 = memo(SimpleListViewInner);\n\nexport namespace ListView {\n export const RowTitle = memo(ListViewRowTitle);\n export const EditableRowTitle = memo(ListViewEditableRowTitle);\n export const Row = memo(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 items: number,\n headerCount: number,\n headerVariant: ListViewSectionHeaderVariant\n ) => {\n return (\n items * rowHeight +\n headerCount *\n (headerVariant === \"label\" ? sectionHeaderLabelHeight : rowHeight)\n );\n };\n export const normalizeDestinationIndex = normalizeListDestinationIndex;\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 {\n closestCenter,\n DndContext,\n DragEndEvent,\n DragMoveEvent,\n DragOverlay,\n DragStartEvent,\n PointerSensor,\n Translate,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport React, {\n createContext,\n memo,\n ReactNode,\n Ref,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport type RelativeDropPosition = \"above\" | \"below\" | \"inside\";\n\nexport type DropValidator = (\n sourceIndex: number,\n destinationIndex: number,\n position: RelativeDropPosition\n) => boolean;\n\nexport const normalizeListDestinationIndex = (\n index: number,\n position: \"above\" | \"below\"\n): number => {\n return position === \"above\" ? index : index + 1;\n};\n\nconst defaultAcceptsDrop: DropValidator = (\n sourceIndex,\n destinationIndex,\n position\n) => {\n if (position === \"inside\") return false;\n\n const normalized = normalizeListDestinationIndex(destinationIndex, position);\n\n if (sourceIndex === normalized || sourceIndex + 1 === normalized) {\n return false;\n }\n\n return true;\n};\n\nconst SortableItemContext = createContext<{\n keys: string[];\n position: Translate;\n acceptsDrop: DropValidator;\n setActivatorEvent: (event: PointerEvent) => void;\n axis: \"x\" | \"y\";\n}>({\n keys: [],\n position: { x: 0, y: 0 },\n acceptsDrop: defaultAcceptsDrop,\n setActivatorEvent: () => {},\n axis: \"y\",\n});\n\nfunction validateDropIndicator(\n acceptsDrop: DropValidator,\n keys: string[],\n activeId: string,\n overId: string,\n offsetStart: number,\n elementStart: number,\n elementSize: number\n): RelativeDropPosition | undefined {\n const activeIndex = keys.indexOf(activeId);\n const overIndex = keys.indexOf(overId);\n\n const acceptsDropInside = acceptsDrop(activeIndex, overIndex, \"inside\");\n\n // If we're in the center of the element, prefer dropping inside\n if (\n offsetStart >= elementStart + elementSize / 3 &&\n offsetStart <= elementStart + (elementSize * 2) / 3 &&\n acceptsDropInside\n )\n return \"inside\";\n\n // Are we over the top or bottom half of the element?\n const indicator =\n offsetStart < elementStart + elementSize / 2 ? \"above\" : \"below\";\n\n // Drop above or below if possible, falling back to inside\n return acceptsDrop(activeIndex, overIndex, indicator)\n ? indicator\n : acceptsDropInside\n ? \"inside\"\n : undefined;\n}\n\n/* ----------------------------------------------------------------------------\n * Item\n * ------------------------------------------------------------------------- */\n\ntype UseSortableReturnType = ReturnType<typeof useSortable>;\n\ninterface ItemProps<T> {\n id: string;\n disabled?: boolean;\n children: (\n props: {\n ref: Ref<T>;\n relativeDropPosition?: RelativeDropPosition;\n [key: string]: any;\n } & UseSortableReturnType[\"attributes\"]\n ) => JSX.Element;\n}\n\nfunction SortableItem<T extends HTMLElement>({\n id,\n disabled,\n children,\n}: ItemProps<T>) {\n const { keys, position, acceptsDrop, setActivatorEvent, axis } =\n useContext(SortableItemContext);\n const sortable = useSortable({ id, disabled });\n\n const {\n active,\n activatorEvent,\n attributes,\n listeners,\n setNodeRef,\n isDragging,\n index,\n overIndex,\n over,\n } = sortable;\n\n if (activatorEvent) {\n setActivatorEvent(activatorEvent as PointerEvent);\n }\n\n const eventX = (activatorEvent as PointerEvent | null)?.clientX ?? 0;\n const eventY = (activatorEvent as PointerEvent | null)?.clientY ?? 0;\n const offsetLeft = eventX + position.x;\n const offsetTop = eventY + position.y;\n\n const ref = useCallback((node: T) => setNodeRef(node), [setNodeRef]);\n\n return children({\n ref,\n ...attributes,\n ...listeners,\n relativeDropPosition:\n index >= 0 && index === overIndex && !isDragging && active && over\n ? validateDropIndicator(\n acceptsDrop,\n keys,\n active.id,\n over.id,\n axis === \"x\" ? offsetLeft : offsetTop,\n axis === \"x\" ? over.rect.offsetLeft : over.rect.offsetTop,\n axis === \"x\" ? over.rect.width : over.rect.height\n )\n : undefined,\n });\n}\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\ninterface RootProps {\n keys: string[];\n children: ReactNode;\n renderOverlay?: (index: number) => ReactNode;\n onMoveItem?: (\n sourceIndex: number,\n destinationIndex: number,\n position: RelativeDropPosition\n ) => void;\n acceptsDrop?: DropValidator;\n axis?: \"x\" | \"y\";\n}\n\nfunction SortableRoot({\n keys,\n children,\n onMoveItem,\n renderOverlay,\n acceptsDrop = defaultAcceptsDrop,\n axis = \"y\",\n}: RootProps) {\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 4,\n },\n })\n );\n\n const [activeIndex, setActiveIndex] = useState<number | undefined>();\n const activatorEvent = useRef<PointerEvent | null>(null);\n\n const setActivatorEvent = useCallback((event: PointerEvent) => {\n activatorEvent.current = event;\n }, []);\n\n const [position, setPosition] = useState<Translate>({ x: 0, y: 0 });\n\n const handleDragStart = useCallback(\n (event: DragStartEvent) => {\n setActiveIndex(keys.indexOf(event.active.id));\n },\n [keys]\n );\n\n const handleDragMove = useCallback((event: DragMoveEvent) => {\n setPosition({ ...event.delta });\n }, []);\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n\n setActiveIndex(undefined);\n\n if (over && active.id !== over.id) {\n const oldIndex = keys.indexOf(active.id);\n const newIndex = keys.indexOf(over.id);\n\n const eventX = activatorEvent.current?.clientX ?? 0;\n const eventY = activatorEvent.current?.clientY ?? 0;\n const offsetLeft = eventX + position.x;\n const offsetTop = eventY + position.y;\n\n const indicator = validateDropIndicator(\n acceptsDrop,\n keys,\n active.id,\n over.id,\n axis === \"x\" ? offsetLeft : offsetTop,\n axis === \"x\" ? over.rect.offsetLeft : over.rect.offsetTop,\n axis === \"x\" ? over.rect.width : over.rect.height\n );\n\n if (!indicator) return;\n\n onMoveItem?.(oldIndex, newIndex, indicator);\n }\n },\n [acceptsDrop, axis, keys, onMoveItem, position.x, position.y]\n );\n\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n return (\n <SortableItemContext.Provider\n value={useMemo(\n () => ({\n keys,\n acceptsDrop,\n position,\n setActivatorEvent,\n axis,\n }),\n [acceptsDrop, axis, keys, position, setActivatorEvent]\n )}\n >\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={keys} strategy={verticalListSortingStrategy}>\n {children}\n </SortableContext>\n {mounted &&\n renderOverlay &&\n createPortal(\n <DragOverlay dropAnimation={null}>\n {activeIndex !== undefined &&\n activeIndex >= 0 &&\n renderOverlay(activeIndex)}\n </DragOverlay>,\n document.body\n )}\n </DndContext>\n </SortableItemContext.Provider>\n );\n}\n\nexport namespace Sortable {\n export const Item = memo(SortableItem);\n export const Root = memo(SortableRoot);\n}\n","import React, { ForwardedRef, forwardRef, ReactHTML, ReactNode } from \"react\";\nimport styled, { CSSProperties } from \"styled-components\";\nimport { Theme, ThemeColorName } from \"../theme\";\nimport { BreakpointCollection, mergeBreakpoints } from \"../utils/breakpoints\";\n\nconst elements: Record<keyof Theme[\"textStyles\"], 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\ntype StyleProps = {\n flex?: CSSProperties[\"flex\"];\n padding?: CSSProperties[\"padding\"];\n background?: CSSProperties[\"background\"];\n borderRadius?: CSSProperties[\"borderRadius\"];\n textAlign?: CSSProperties[\"textAlign\"];\n fontWeight?: CSSProperties[\"fontWeight\"];\n fontStyle?: CSSProperties[\"fontStyle\"];\n fontSize?: CSSProperties[\"fontSize\"];\n lineHeight?: CSSProperties[\"lineHeight\"];\n fontFamily?: CSSProperties[\"fontFamily\"];\n wordBreak?: CSSProperties[\"wordBreak\"];\n whiteSpace?: CSSProperties[\"whiteSpace\"];\n height?: CSSProperties[\"height\"];\n width?: CSSProperties[\"width\"];\n minWidth?: CSSProperties[\"minWidth\"];\n maxWidth?: CSSProperties[\"maxWidth\"];\n opacity?: CSSProperties[\"opacity\"];\n position?: CSSProperties[\"position\"];\n overflow?: CSSProperties[\"overflow\"];\n textOverflow?: CSSProperties[\"textOverflow\"];\n textDecoration?: CSSProperties[\"textDecoration\"];\n display?: CSSProperties[\"display\"];\n top?: CSSProperties[\"top\"];\n right?: CSSProperties[\"right\"];\n bottom?: CSSProperties[\"bottom\"];\n left?: CSSProperties[\"left\"];\n userSelect?: CSSProperties[\"userSelect\"];\n cursor?: CSSProperties[\"cursor\"];\n};\n\nexport type TextBreakpointList = BreakpointCollection<StyleProps>;\n\ninterface Props extends StyleProps {\n as?: keyof ReactHTML;\n href?: string;\n className?: string;\n style?: React.CSSProperties;\n variant: keyof Theme[\"textStyles\"];\n breakpoints?: BreakpointCollection<StyleProps> | null | false;\n color?: ThemeColorName;\n children: ReactNode;\n onClick?: () => void;\n onDoubleClick?: () => void;\n onKeyDown?: (event: React.KeyboardEvent<HTMLSpanElement>) => void;\n tabIndex?: number;\n}\n\nconst StyledElement = styled.span<{\n $variant: keyof Theme[\"textStyles\"];\n $styleProps: StyleProps;\n $color: ThemeColorName;\n $breakpoints: BreakpointCollection<StyleProps> | null | false;\n}>(({ theme, $variant, $styleProps, $breakpoints, $color }) => ({\n ...(theme.textStyles as any)[$variant],\n color: $color ? theme.colors[$color] : undefined,\n ...$styleProps,\n ...mergeBreakpoints($breakpoints || []),\n}));\n\nexport const Text = forwardRef(function Text(\n {\n as,\n variant,\n breakpoints,\n children,\n className,\n color,\n href,\n tabIndex,\n onClick,\n onKeyDown,\n style,\n ...rest\n }: Props,\n forwardedRef: ForwardedRef<HTMLElement>\n) {\n const element = as ?? elements[variant] ?? \"span\";\n\n return (\n <StyledElement\n ref={forwardedRef}\n as={element}\n className={className}\n style={style}\n tabIndex={tabIndex}\n $variant={variant}\n $breakpoints={breakpoints}\n $styleProps={rest}\n $color={color}\n onClick={onClick}\n onKeyDown={onKeyDown}\n {...((href && { href }) as any)}\n >\n {children}\n </StyledElement>\n );\n});\n\ntype PresetProps = Omit<Props, \"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 {\n Divider,\n ScrollArea,\n Stack,\n useDesignSystemTheme,\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 const theme = useDesignSystemTheme();\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: theme.colors.sidebar.background,\n ...style,\n }}\n >\n {header}\n {children ? (\n <ScrollArea>\n <Stack.V position=\"relative\">\n {showDividers\n ? withSeparatorElements(children, <Divider />)\n : children}\n </Stack.V>\n </ScrollArea>\n ) : fallback ? (\n <Stack.V position=\"relative\" height=\"100%\">\n {fallback}\n </Stack.V>\n ) : null}\n </div>\n );\n })\n);\n","import React, { memo, ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { Spacer } from \"./Spacer\";\n\n/* ----------------------------------------------------------------------------\n * Label\n * ------------------------------------------------------------------------- */\n\nconst LabelLabel = styled.label<{ $selected?: boolean }>(\n ({ theme, $selected }) => ({\n ...theme.textStyles.small,\n color: theme.colors.textMuted,\n ...($selected && {\n color: theme.colors.text,\n }),\n fontSize: \"11px\",\n flex: \"0 0 auto\",\n minWidth: \"0\",\n letterSpacing: \"0.4px\",\n whiteSpace: \"pre\", // prevent breaking - may need to make this an option\n })\n);\n\n/* ----------------------------------------------------------------------------\n * Root\n * ------------------------------------------------------------------------- */\n\nconst LabelContainer = styled.span(({ theme }) => ({\n flex: \"0 0 auto\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n minWidth: \"0\",\n textAlign: \"left\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n}));\n\ninterface LabelRootProps {\n label: ReactNode;\n children: ReactNode;\n}\n\nfunction LabelRoot({ label, children }: LabelRootProps) {\n return (\n <LabelContainer>\n {children}\n {label && (\n <>\n <Spacer.Vertical size={2} />\n <LabelLabel>{label}</LabelLabel>\n </>\n )}\n </LabelContainer>\n );\n}\n\nexport namespace Label {\n export const Label = memo(LabelLabel);\n export const Root = memo(LabelRoot);\n}\n","import * as kiwi from 'kiwi.js';\nimport React, {\n Children,\n createRef,\n Fragment,\n isValidElement,\n memo,\n ReactNode,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div(({ theme }) => ({\n display: 'flex',\n flex: '1',\n flexDirection: 'column',\n position: 'relative',\n}));\n\nconst Tools = styled.div(({ theme }) => ({\n display: 'flex',\n flex: '1',\n alignItems: 'center',\n}));\n\nconst Labels = styled.div(({ theme }) => ({\n height: 'var(--height)',\n position: 'relative',\n overflow: 'hidden',\n userSelect: 'none',\n}));\n\ninterface ContainerProps {\n children: ReactNode;\n renderLabel: (provided: { id: string; index: number }) => ReactNode;\n}\n\nexport const LabeledElementView = memo(function LabeledElementView({\n children,\n renderLabel,\n}: ContainerProps) {\n const elementIds: string[] = Children.toArray(children)\n .flatMap((child) =>\n isValidElement(child) && child.type === Fragment\n ? (child.props.children as ReactNode[])\n : [child],\n )\n .map((child) =>\n isValidElement(child) && 'id' in child.props ? child.props.id : null,\n )\n .filter((id) => !!id);\n const serializedIds = elementIds.join(',');\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n const refs = useMemo(() => {\n return Object.fromEntries(\n serializedIds.split(',').map((id) => [id, createRef<HTMLSpanElement>()]),\n );\n }, [serializedIds]);\n\n const labelElements = 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 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 <Container ref={containerRef}>\n <Tools>{children}</Tools>\n <Labels>{labelElements}</Labels>\n </Container>\n );\n});\n","import { clamp } from '@noya-app/noya-utils';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\nimport React, { CSSProperties } from 'react';\nimport styled from 'styled-components';\n\ntype ProgressVariant = 'normal' | 'warning' | 'primary' | 'secondary';\n\nexport function Progress({\n value,\n width,\n height = 5,\n flex,\n variant = 'normal',\n}: {\n value: number;\n height?: CSSProperties['height'];\n width?: CSSProperties['width'];\n flex?: CSSProperties['flex'];\n variant?: ProgressVariant;\n}) {\n const clampedValue = clamp(value, 0, 100);\n\n return (\n <ProgressRoot value={clampedValue} style={{ width, flex, height }}>\n <ProgressIndicator\n variant={variant}\n style={{ transform: `translateX(-${100 - clampedValue}%)` }}\n />\n </ProgressRoot>\n );\n}\n\nconst ProgressRoot = styled(ProgressPrimitive.Root)(({ theme }) => ({\n position: 'relative',\n overflow: 'hidden',\n background: theme.colors.inputBackground,\n\n // Fix overflow clipping in Safari\n // https://gist.github.com/domske/b66047671c780a238b51c51ffde8d3a0\n transform: 'translateZ(0)',\n}));\n\nconst ProgressIndicator = styled(ProgressPrimitive.Indicator)<{\n variant: ProgressVariant;\n}>(({ theme, variant }) => ({\n backgroundColor:\n variant === 'primary'\n ? theme.colors.primary\n : variant === 'secondary'\n ? theme.colors.secondary\n : variant === 'warning'\n ? theme.colors.warning\n : theme.colors.text,\n width: '100%',\n height: '100%',\n transition: 'transform 660ms cubic-bezier(0.65, 0, 0.35, 1)',\n}));\n","import * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport React, {\n createContext,\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\nimport styled from \"styled-components\";\nimport { Tooltip } from \"./Tooltip\";\n\ntype RadioGroupColorScheme = \"primary\" | \"secondary\";\n\nconst ignoredProps = new Set([\"colorScheme\"]);\n\nconst StyledRoot = styled(ToggleGroupPrimitive.Root).withConfig({\n shouldForwardProp: (prop) => !ignoredProps.has(prop),\n})<{\n colorScheme?: RadioGroupColorScheme;\n}>(({ theme, colorScheme }) => ({\n appearance: \"none\",\n width: \"0px\", // Reset intrinsic width\n flex: \"1 1 0px\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n minWidth: \"0\",\n textAlign: \"left\",\n alignSelf: \"stretch\",\n borderRadius: \"4px\",\n background: theme.colors.inputBackground,\n \"&:focus\": {\n boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${\n theme.colors[colorScheme ?? \"primary\"]\n }`,\n },\n display: \"flex\",\n alignItems: \"stretch\",\n minHeight: \"27px\",\n padding: colorScheme === undefined ? \"2px\" : 0,\n}));\n\nconst StyledItem = styled(ToggleGroupPrimitive.Item).withConfig({\n shouldForwardProp: (prop) => !ignoredProps.has(prop),\n})<{\n colorScheme?: RadioGroupColorScheme;\n}>(({ theme, colorScheme }) => ({\n ...theme.textStyles.small,\n position: \"relative\",\n flex: \"1 1 0\",\n appearance: \"none\",\n border: \"none\",\n background: \"none\",\n color: \"rgb(139, 139, 139)\",\n padding: 0,\n margin: 0,\n borderRadius: \"4px\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n verticalAlign: \"middle\",\n '&[aria-checked=\"true\"]': {\n backgroundColor: colorScheme\n ? theme.colors[colorScheme]\n : theme.colors.radioGroup.background,\n color: colorScheme ? theme.colors.radioGroup.background : theme.colors.text,\n boxShadow: colorScheme ? undefined : `0 1px 1px rgba(0,0,0,0.1)`,\n },\n \"&:focus\": {\n outline: \"none\",\n boxShadow: `0 0 0 1px ${theme.colors.sidebar.background}, 0 0 0 3px ${\n theme.colors[colorScheme ?? \"primary\"]\n }`,\n },\n}));\n\ninterface ItemProps {\n value: string;\n tooltip?: ReactNode;\n children: ReactNode;\n disabled?: boolean;\n}\n\nconst ToggleGroupItem = forwardRef(function ToggleGroupItem(\n { value, tooltip, children, disabled = false }: ItemProps,\n forwardedRef: React.ForwardedRef<HTMLButtonElement>\n) {\n const { colorScheme } = useContext(RadioGroupContext);\n\n const itemElement = (\n <StyledItem\n ref={forwardedRef}\n value={value}\n disabled={disabled}\n colorScheme={colorScheme}\n >\n {children}\n </StyledItem>\n );\n\n return tooltip ? (\n <Tooltip content={tooltip}>{itemElement}</Tooltip>\n ) : (\n itemElement\n );\n});\n\ntype RadioGroupContextValue = {\n colorScheme?: RadioGroupColorScheme;\n};\n\nconst RadioGroupContext = createContext<RadioGroupContextValue>({\n colorScheme: \"primary\",\n});\n\ninterface Props {\n id?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n colorScheme?: RadioGroupColorScheme;\n allowEmpty?: boolean;\n children: ReactNode;\n}\n\nfunction ToggleGroupRoot({\n id,\n value,\n onValueChange,\n colorScheme,\n allowEmpty,\n children,\n}: Props) {\n const contextValue = useMemo(() => ({ colorScheme }), [colorScheme]);\n\n const handleValueChange = useCallback(\n (value: string) => {\n if (!allowEmpty && !value) return;\n onValueChange?.(value);\n },\n [allowEmpty, onValueChange]\n );\n\n return (\n <RadioGroupContext.Provider value={contextValue}>\n <StyledRoot\n id={id}\n type=\"single\"\n value={value}\n colorScheme={colorScheme}\n onValueChange={handleValueChange}\n >\n {children}\n </StyledRoot>\n </RadioGroupContext.Provider>\n );\n}\n\nexport namespace RadioGroup {\n export const Root = memo(ToggleGroupRoot);\n export const Item = memo(ToggleGroupItem);\n}\n","import { memoize } from \"@noya-app/noya-utils\";\nimport React, {\n createContext,\n CSSProperties,\n memo,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport styled from \"styled-components\";\n\ntype SelectContextValue = {\n addListener: (value: string, listener: () => void) => void;\n removeListener: (value: string) => void;\n};\n\nconst SelectContext = createContext<SelectContextValue | undefined>(undefined);\n\ninterface SelectOptionProps<T extends string> {\n value: T;\n title?: string;\n onSelect?: () => void;\n}\n\nexport const SelectOption = memo(function SelectOption<T extends string>({\n value,\n title,\n onSelect,\n}: SelectOptionProps<T>) {\n const { addListener, removeListener } = useContext(SelectContext)!;\n\n useEffect(() => {\n if (!onSelect) return;\n\n addListener(value, onSelect);\n\n return () => removeListener(value);\n }, [addListener, onSelect, removeListener, value]);\n\n return <option value={value}>{title ?? value}</option>;\n});\n\nconst createChevronSVGString = memoize((color: string) =>\n `\n <svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 15' fill='${color}'>\n <path d='M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z'></path>\n </svg>\n`.replace(/\\n/g, \"\")\n);\n\nconst SelectContainer = styled.div<{ $flex: CSSProperties[\"flex\"] }>(\n ({ $flex }) => ({\n flex: $flex ?? \"1 1 0px\",\n display: \"flex\",\n flexDirection: \"row\",\n position: \"relative\",\n })\n);\n\nconst SelectElement = styled.select<{ $flex: CSSProperties[\"flex\"] }>(\n ({ theme, $flex }) => ({\n appearance: \"none\",\n ...theme.textStyles.small,\n color: theme.colors.text,\n lineHeight: \"19px\",\n width: \"0px\", // Reset intrinsic width\n flex: $flex ?? \"1 1 0px\",\n position: \"relative\",\n border: \"0\",\n outline: \"none\",\n minWidth: \"0\",\n textAlign: \"left\",\n alignSelf: \"stretch\",\n borderRadius: \"4px\",\n paddingTop: \"4px\",\n paddingBottom: \"4px\",\n paddingLeft: \"6px\",\n paddingRight: \"23px\",\n background: [\n `calc(100% - 6px) / 15px url(\"data:image/svg+xml;utf8,${createChevronSVGString(\n theme.colors.icon\n )}\") no-repeat`,\n theme.colors.inputBackground,\n ].join(\",\"),\n \"&:focus\": {\n boxShadow: `0 0 0 2px ${theme.colors.primary}`,\n },\n })\n);\n\nconst SelectLabel = styled.label(({ theme }) => ({\n ...theme.textStyles.label,\n color: theme.colors.textDisabled,\n lineHeight: \"19px\",\n position: \"absolute\",\n inset: \"0\",\n fontWeight: \"bold\",\n fontSize: \"60%\",\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"end\",\n paddingRight: \"24px\",\n}));\n\ntype ChildrenProps<T> =\n | {\n children: ReactNode;\n }\n | {\n options: readonly T[];\n getTitle?: (option: T, index: number) => string;\n onChange: (value: T) => void;\n };\n\ntype Props<T extends string> = ChildrenProps<T> & {\n id: string;\n flex?: CSSProperties[\"flex\"];\n value: T;\n label?: ReactNode;\n};\n\nexport const Select = memo(function Select<T extends string>({\n id,\n flex,\n value,\n label,\n ...rest\n}: Props<T>) {\n const options = \"options\" in rest ? rest.options : undefined;\n const getTitle = \"options\" in rest ? rest.getTitle : undefined;\n const onChange = \"options\" in rest ? rest.onChange : undefined;\n const children = \"options\" in rest ? undefined : rest.children;\n\n const optionElements = useMemo(\n () =>\n options\n ? options.map((option, index) => (\n <SelectOption\n key={option}\n value={option}\n title={getTitle?.(option, index)}\n onSelect={() => onChange?.(option)}\n />\n ))\n : children,\n [children, getTitle, onChange, options]\n );\n\n const listeners = useRef<Map<string, () => void>>(new Map());\n\n const contextValue: SelectContextValue = useMemo(\n () => ({\n addListener: (value, listener) => listeners.current.set(value, listener),\n removeListener: (value) => listeners.current.delete(value),\n }),\n []\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <SelectContainer $flex={flex}>\n <SelectElement\n id={id}\n $flex={flex}\n value={value}\n onChange={useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) =>\n listeners.current.get(event.target.value)?.(),\n [listeners]\n )}\n onPointerDown={(event) => event.stopPropagation()}\n >\n {optionElements}\n </SelectElement>\n </SelectContainer>\n {label && <SelectLabel htmlFor={id}>{label}</SelectLabel>}\n </SelectContext.Provider>\n );\n});\n","import { DropdownChevronIcon } from \"@noya-app/noya-icons\";\nimport * as Select from \"@radix-ui/react-select\";\nimport React, { CSSProperties, memo } from \"react\";\nimport { styled } from \"styled-components\";\nimport { Button } from \"./Button\";\nimport { renderIcon } from \"./Icons\";\nimport { Spacer } from \"./Spacer\";\nimport { MenuItem, RegularMenuItem, styles } from \"./internal/Menu\";\n\ntype Props<T extends string> = {\n id?: string;\n style?: React.CSSProperties;\n className?: string;\n menuItems: MenuItem<T>[];\n value: T;\n onSelect?: (value: T) => void;\n placeholder?: string;\n disabled?: boolean;\n readOnly?: boolean;\n};\n\nconst readOnlyStyle: CSSProperties = {\n justifyContent: \"flex-start\",\n textAlign: \"left\",\n};\n\nconst flexStyle: CSSProperties = {\n flex: 1,\n};\n\nexport const SelectMenu = memo(function SelectMenu<T extends string = string>({\n id,\n style,\n className,\n menuItems,\n value,\n onSelect,\n placeholder,\n disabled,\n readOnly,\n}: Props<T>) {\n const selectedItem = menuItems.find(\n (item): item is RegularMenuItem<T> =>\n typeof item !== \"string\" && item.value === value\n );\n const icon = selectedItem?.icon;\n\n if (readOnly) {\n return (\n <Button\n id={id}\n style={style}\n contentStyle={readOnlyStyle}\n className={className}\n disabled={disabled}\n >\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal inline size={6} />\n </>\n )}\n <span style={flexStyle}>{selectedItem?.title ?? value}</span>\n </Button>\n );\n }\n\n return (\n <Select.Root value={value} onValueChange={onSelect}>\n <Select.SelectTrigger asChild>\n <Button id={id} style={style} className={className} disabled={disabled}>\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal inline size={6} />\n </>\n )}\n <span style={flexStyle}>\n <Select.Value placeholder={placeholder} />\n </span>\n <Spacer.Horizontal inline size={6} />\n <DropdownChevronIcon />\n </Button>\n </Select.SelectTrigger>\n <Select.Portal>\n <SelectContent>\n <SelectViewport>\n {menuItems.map((menuItem) => {\n if (typeof menuItem === \"string\") {\n return <StyledSeparator />;\n }\n\n const value = menuItem.value ?? \"\";\n\n return (\n <SelectItem key={value} value={value} icon={menuItem.icon}>\n {menuItem.title ?? value}\n </SelectItem>\n );\n })}\n </SelectViewport>\n </SelectContent>\n </Select.Portal>\n </Select.Root>\n );\n});\n\nconst SelectContent = styled(Select.Content)(styles.contentStyle);\n\nconst SelectViewport = styled(Select.Viewport)({});\n\nconst SelectItem = React.forwardRef(\n (\n {\n children,\n icon,\n ...props\n }: Select.SelectItemProps & { icon?: React.ReactNode },\n forwardedRef: React.ForwardedRef<HTMLDivElement>\n ) => {\n return (\n <StyledItem {...props} ref={forwardedRef}>\n {icon && (\n <>\n {renderIcon(icon)}\n <Spacer.Horizontal size={8} />\n </>\n )}\n <Select.ItemText>{children}</Select.ItemText>\n </StyledItem>\n );\n }\n);\n\nconst StyledItem = styled(Select.Item)(styles.itemStyle);\nconst StyledSeparator = styled(Select.Separator)(styles.separatorStyle);\n","import * as RadixSlider from '@radix-ui/react-slider';\nimport React, { useCallback, useMemo } from 'react';\nimport styled from 'styled-components';\n\nconst StyledSlider = styled(RadixSlider.Root)({\n flex: '1',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n userSelect: 'none',\n touchAction: 'none',\n height: '16px',\n});\n\nconst StyledTrack = styled(RadixSlider.Track)(({ theme }) => ({\n backgroundColor: theme.colors.divider,\n position: 'relative',\n flexGrow: 1,\n height: '2px',\n}));\n\nconst StyledRange = styled(RadixSlider.Range)(({ theme }) => ({\n position: 'absolute',\n backgroundColor: theme.colors.primary,\n borderRadius: '9999px',\n height: '100%',\n}));\n\nconst StyledThumb = styled(RadixSlider.Thumb)(({ theme }) => ({\n display: 'block',\n width: '12px',\n height: '12px',\n backgroundColor: theme.colors.slider.background,\n border: `1px solid ${theme.colors.slider.border}`,\n borderRadius: '20px',\n ':focus': {\n outline: 'none',\n },\n}));\n\ninterface Props {\n id?: string;\n value: number;\n onValueChange: (value: number) => void;\n min: number;\n max: number;\n}\n\nexport const Slider = function Slider({\n id,\n value,\n onValueChange,\n min,\n max,\n}: Props) {\n const arrayValue = useMemo(\n () => [Math.min(Math.max(value, min), max)],\n [value, min, max],\n );\n\n const handleValueChange = useCallback(\n (arrayValue: number[]) => {\n onValueChange(arrayValue[0]);\n },\n [onValueChange],\n );\n\n return (\n <StyledSlider\n min={min}\n max={max}\n id={id}\n value={arrayValue}\n onValueChange={handleValueChange}\n >\n <StyledTrack>\n <StyledRange />\n </StyledTrack>\n <StyledThumb />\n </StyledSlider>\n );\n};\n","import * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\ntype SwitchColorScheme = \"normal\" | \"primary\" | \"secondary\";\n\nconst SwitchRoot = styled(SwitchPrimitive.Root)<{\n $colorScheme: SwitchColorScheme;\n}>(({ theme, $colorScheme }) => ({\n all: \"unset\",\n width: 32,\n height: 19,\n backgroundColor: theme.colors.activeBackground,\n borderRadius: \"9999px\",\n position: \"relative\",\n WebkitTapHighlightColor: \"rgba(0, 0, 0, 0)\",\n cursor: \"pointer\",\n \"&:focus\": {\n outline: `2px solid ${theme.colors.primary}`,\n outlineOffset: \"1px\",\n },\n '&[data-state=\"checked\"]': {\n backgroundColor:\n $colorScheme === \"primary\"\n ? theme.colors.primary\n : $colorScheme === \"secondary\"\n ? theme.colors.secondary\n : undefined,\n },\n}));\n\nconst SwitchThumb = styled(SwitchPrimitive.Thumb)({\n display: \"block\",\n width: 15,\n height: 15,\n backgroundColor: \"white\",\n borderRadius: \"9999px\",\n transition: \"transform 100ms\",\n transform: \"translateX(2px)\",\n willChange: \"transform\",\n '&[data-state=\"checked\"]': { transform: \"translateX(15px)\" },\n});\n\ninterface Props {\n value: boolean;\n onChange: (value: boolean) => void;\n colorScheme?: SwitchColorScheme;\n disabled?: boolean;\n}\n\nexport const Switch = function Switch({\n value,\n onChange,\n colorScheme = \"normal\",\n disabled,\n}: Props) {\n return (\n <SwitchRoot\n $colorScheme={colorScheme}\n checked={value}\n disabled={disabled}\n onCheckedChange={(newValue) => {\n onChange(newValue);\n }}\n >\n <SwitchThumb />\n </SwitchRoot>\n );\n};\n","import { assignRef } from \"@noya-app/react-utils\";\nimport React, { forwardRef, memo, useCallback, useEffect, useRef } from \"react\";\nimport styled from \"styled-components\";\n\nconst TextAreaElement = styled.textarea(({ theme }) => ({\n ...theme.textStyles.small,\n color: theme.colors.text,\n background: theme.colors.inputBackground,\n width: \"0px\",\n flex: \"1 1 auto\",\n padding: \"4px 6px\",\n border: \"none\",\n outline: \"none\",\n height: 100,\n borderRadius: \"4px\",\n \"&::placeholder\": {\n color: theme.colors.textDisabled,\n },\n \"&:focus\": {\n boxShadow: `0 0 0 2px ${theme.colors.primary}`,\n },\n // readonly\n \"&:read-only\": {\n color: theme.colors.textDisabled,\n },\n resize: \"none\",\n}));\n\nexport const useAutoResize = (value: string) => {\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n\n useEffect(() => {\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 AutoResizingTextArea = memo(\n forwardRef(function AutoResizingTextArea(\n {\n value,\n onChangeText,\n ...rest\n }: Omit<\n React.ComponentProps<typeof TextAreaElement>,\n \"onChange\" | \"value\"\n > & {\n onChangeText: (value: string) => void;\n value?: string;\n },\n forwardedRef: React.ForwardedRef<HTMLTextAreaElement>\n ) {\n const ref = useAutoResize(value || rest.placeholder || \"\");\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) =>\n onChangeText(event.target.value),\n [onChangeText]\n );\n\n const handleRef = useCallback(\n (value: HTMLTextAreaElement | null) => {\n ref.current = value;\n assignRef(forwardedRef, value);\n },\n [ref, forwardedRef]\n );\n\n return (\n <TextAreaElement\n ref={handleRef}\n {...rest}\n onChange={handleChange}\n value={value}\n />\n );\n })\n);\n","import React, {\n ForwardedRef,\n forwardRef,\n memo,\n ReactNode,\n useCallback,\n useContext,\n} 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 onClickChevron?: ({ altKey }: { altKey: boolean }) => void;\n};\n\ntype TreeViewRowProps<MenuItemType extends string> =\n ListView.RowProps<MenuItemType> & TreeRowBaseProps;\n\nconst TreeRow = forwardRef(function TreeRow<MenuItemType extends string>(\n {\n icon,\n expanded,\n onClickChevron,\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 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 = memo(TreeRow);\n export type ClickInfo = ListView.ClickInfo;\n export type RowProps<MenuItemType extends string> =\n TreeViewRowProps<MenuItemType>;\n}\n","import { useDesignSystemTheme } from \"@noya-app/noya-designsystem\";\nimport { useKeyboardShortcuts } from \"@noya-app/noya-keymap\";\nimport React, { forwardRef, useImperativeHandle, 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 PanelLayoutState,\n RIGHT_SIDEBAR_ID,\n usePreservePanelSize,\n} from \"../hooks/usePreservePanelSize\";\nimport { useWindowSize } from \"../hooks/useWindowSize\";\n\ninterface Props {\n autoSavePrefix?: string;\n leftSidebarContent?: React.ReactNode;\n children?: React.ReactNode;\n rightSidebarContent?: React.ReactNode;\n hasRightSidebar?: boolean;\n hasLeftSidebar?: boolean;\n onChangeLayoutState?: (layoutState: PanelLayoutState) => void;\n leftSidebarCanResize?: boolean;\n id?: string;\n className?: string;\n style?: React.CSSProperties;\n\n /**\n * Accepts a number (px) or % string (e.g. \"50%\").\n * Use % to avoid flicker server-rendering.\n */\n leftSidebarInitialSize?: number | string;\n leftSidebarMinSize?: number | string;\n\n /**\n * Accepts a number (px) or % string (e.g. \"50%\").\n * Use % to avoid flicker server-rendering.\n */\n rightSidebarInitialSize?: number | string;\n rightSidebarMinSize?: number | string;\n}\n\nexport type IWorkspaceLayout = {\n setLeftSidebarExpanded: (expanded: boolean) => void;\n setRightSidebarExpanded: (expanded: boolean) => void;\n toggleAllSidebars: () => void;\n toggleLeftSidebar: () => void;\n toggleRightSidebar: () => void;\n};\n\nexport const WorkspaceLayout = forwardRef(function WorkspaceLayout(\n {\n autoSavePrefix,\n leftSidebarContent: leftPanelContent,\n children: centerPanelContent,\n rightSidebarContent: rightPanelContent,\n hasLeftSidebar = !!leftPanelContent,\n hasRightSidebar = !!rightPanelContent,\n onChangeLayoutState,\n leftSidebarInitialSize = 280,\n rightSidebarInitialSize = 400,\n leftSidebarMinSize,\n rightSidebarMinSize,\n leftSidebarCanResize = false,\n id,\n className,\n style,\n }: Props,\n forwardedRef: React.ForwardedRef<IWorkspaceLayout>\n) {\n const windowSize = useWindowSize();\n function getPercentage(size: number | string) {\n return typeof size === \"string\"\n ? parseFloat(size)\n : (size / windowSize.width) * 100;\n }\n const leftSidebarPercentage = getPercentage(leftSidebarInitialSize);\n const rightSidebarPercentage = getPercentage(rightSidebarInitialSize);\n const leftSidebarMinPercentage =\n leftSidebarMinSize !== undefined\n ? getPercentage(leftSidebarMinSize)\n : undefined;\n const rightSidebarMinPercentage =\n rightSidebarMinSize !== undefined\n ? getPercentage(rightSidebarMinSize)\n : undefined;\n\n const panelGroupRef = useRef<ImperativePanelGroupHandle>(null);\n const leftSidebarRef = useRef<ImperativePanelHandle>(null);\n const rightSidebarRef = useRef<ImperativePanelHandle>(null);\n\n usePreservePanelSize(panelGroupRef, onChangeLayoutState);\n\n const theme = useDesignSystemTheme();\n\n useImperativeHandle(forwardedRef, () => ({\n setLeftSidebarExpanded: (expanded: boolean) => {\n if (expanded) {\n leftSidebarRef.current?.expand();\n } else {\n leftSidebarRef.current?.collapse();\n }\n },\n setRightSidebarExpanded: (expanded: boolean) => {\n if (expanded) {\n rightSidebarRef.current?.expand();\n } else {\n rightSidebarRef.current?.collapse();\n }\n },\n toggleAllSidebars: () => {\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 toggleLeftSidebar: () => {\n const isLeftSidebarExpanded = leftSidebarRef.current?.isExpanded();\n\n if (isLeftSidebarExpanded) {\n leftSidebarRef.current?.collapse();\n } else {\n leftSidebarRef.current?.expand();\n }\n },\n toggleRightSidebar: () => {\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 (leftPanelContent ? leftSidebarPercentage : 0) -\n (rightPanelContent ? rightSidebarPercentage : 0);\n\n return (\n <div\n id={id}\n className={className}\n style={{\n backgroundColor: theme.colors.canvas.background,\n display: \"flex\",\n flexDirection: \"row\",\n ...style,\n }}\n >\n <PanelGroup\n ref={panelGroupRef}\n id={EDITOR_PANEL_GROUP_ID}\n direction=\"horizontal\"\n autoSaveId={\n autoSavePrefix\n ? `${autoSavePrefix}--${EDITOR_PANEL_GROUP_ID}`\n : undefined\n }\n style={{ flex: \"1\" }}\n >\n {hasLeftSidebar && (\n <>\n <Panel\n id={LEFT_SIDEBAR_ID}\n order={1}\n ref={leftSidebarRef}\n defaultSize={leftSidebarPercentage}\n minSize={leftSidebarMinPercentage ?? leftSidebarPercentage}\n {...(!leftSidebarCanResize && { maxSize: leftSidebarPercentage })}\n collapsible\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n position: \"relative\",\n }}\n >\n {leftPanelContent}\n </Panel>\n <PanelResizeHandle\n style={{\n cursor: \"col-resize\",\n width: \"1px\",\n height: \"100%\",\n backgroundColor: theme.colors.divider,\n }}\n />\n </>\n )}\n <Panel\n id={CONTENT_AREA_ID}\n order={2}\n defaultSize={centerPanelPercentage}\n minSize={10}\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n position: \"relative\",\n }}\n >\n {centerPanelContent}\n </Panel>\n {hasRightSidebar && (\n <>\n <PanelResizeHandle\n style={{\n cursor: \"col-resize\",\n width: \"1px\",\n height: \"100%\",\n backgroundColor: theme.colors.divider,\n }}\n />\n <Panel\n id={RIGHT_SIDEBAR_ID}\n order={3}\n ref={rightSidebarRef}\n minSize={rightSidebarMinPercentage ?? rightSidebarPercentage}\n defaultSize={rightSidebarPercentage}\n collapsible\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n position: \"relative\",\n }}\n >\n {rightPanelContent}\n </Panel>\n </>\n )}\n </PanelGroup>\n </div>\n );\n});\n","import React, { useLayoutEffect, useRef } from \"react\";\nimport { ImperativePanelGroupHandle } from \"react-resizable-panels\";\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 type PanelLayoutState = {\n leftSidebarCollapsed: boolean;\n rightSidebarCollapsed: boolean;\n};\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 const leftSidebarWidth = (oldPanelPercentages[0] / 100) * oldWindowWidth;\n\n const newLeftSidebarPercentage =\n (leftSidebarWidth / windowSize.width) * 100;\n\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 }, [panelGroupRef, windowSize.width]);\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 { 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 {\n MenuItem,\n RegularMenuItem,\n SEPARATOR_ITEM,\n} from '../components/internal/Menu';\n\nexport type Optional<T> = T | false | null | undefined;\n\nfunction withSeparators<T>(elements: T[], separator: T) {\n const result: 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<\n Optional<RegularMenuItem<T>>[]\n>[];\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<MenuItem<T>[]>(nonEmptySections, [\n SEPARATOR_ITEM,\n ]).flat();\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 { range } from \"@noya-app/noya-utils\";\nimport React, { ReactNode, memo, useCallback, useMemo } from \"react\";\nimport styled, { useTheme } from \"styled-components\";\nimport withSeparatorElements from \"../utils/withSeparatorElements\";\nimport { Button } from \"./Button\";\nimport { IconButton } from \"./IconButton\";\nimport * as InspectorPrimitives from \"./InspectorPrimitives\";\nimport { ListView } from \"./ListView\";\nimport { RelativeDropPosition, Sortable } from \"./Sortable\";\nimport { Spacer } from \"./Spacer\";\nimport { Stack } from \"./Stack\";\n\nconst ElementRow = styled.div({\n flex: \"0 0 auto\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n});\n\nconst ItemContainer = styled.div({\n position: \"relative\",\n});\n\nexport interface ArrayControllerProps<Item> {\n id: string;\n items: Item[];\n title: ReactNode;\n sortable?: boolean;\n reversed?: boolean;\n expanded?: boolean;\n getKey?: (item: Item) => string;\n onMoveItem?: (sourceIndex: number, destinationIndex: number) => void;\n onClickPlus?: () => void;\n onClickTrash?: () => void;\n onClickExpand?: () => void;\n renderItem: (props: { item: Item; index: number }) => ReactNode;\n renderExpandedContent?: () => ReactNode;\n padding?: number;\n}\n\nexport const ArrayController = memo(function ArrayController<Item>({\n id,\n items,\n title,\n sortable = false,\n reversed = true,\n expanded = false,\n getKey,\n onMoveItem,\n onClickPlus,\n onClickTrash,\n onClickExpand,\n renderItem,\n renderExpandedContent,\n padding = 10,\n}: ArrayControllerProps<Item>) {\n const iconColor = useTheme().colors.icon;\n const primaryLightColor = useTheme().colors.primaryLight;\n\n const keys = useMemo(\n () => items.map((item, index) => getKey?.(item) ?? index.toString()),\n [getKey, items]\n );\n\n const indexes = reversed\n ? range(0, items.length).reverse()\n : range(0, items.length);\n\n const handleMoveItem = useCallback(\n (\n sourceIndex: number,\n destinationIndex: number,\n position: RelativeDropPosition\n ) => {\n if (reversed) {\n if (position === \"above\") {\n position = \"below\";\n } else if (position === \"below\") {\n position = \"above\";\n }\n }\n\n onMoveItem?.(\n sourceIndex,\n position === \"below\" ? destinationIndex + 1 : destinationIndex\n );\n },\n [onMoveItem, reversed]\n );\n\n const renderRow = (index: number) => {\n return (\n <ElementRow key={keys[index]}>\n {renderItem({ item: items[index], index: index })}\n </ElementRow>\n );\n };\n\n return (\n <InspectorPrimitives.Section id={id} $padding={padding} $gap=\"2px\">\n <InspectorPrimitives.SectionHeader>\n <Button variant=\"none\" onClick={onClickPlus}>\n <InspectorPrimitives.Title>{title}</InspectorPrimitives.Title>\n </Button>\n <Spacer.Horizontal />\n {withSeparatorElements(\n [\n onClickTrash && (\n <IconButton\n id={`${id}-trash`}\n iconName=\"TrashIcon\"\n color={iconColor}\n onClick={onClickTrash}\n />\n ),\n onClickExpand && (\n <IconButton\n id={`${id}-gear`}\n iconName=\"GearIcon\"\n color={expanded ? primaryLightColor : iconColor}\n onClick={onClickExpand}\n />\n ),\n onClickPlus && (\n <IconButton\n id={`${id}-add`}\n iconName=\"PlusIcon\"\n color={iconColor}\n onClick={onClickPlus}\n />\n ),\n ],\n <Spacer.Horizontal size={8} />\n )}\n </InspectorPrimitives.SectionHeader>\n <Stack.V gap=\"4px\">\n {sortable ? (\n <Sortable.Root\n keys={keys}\n renderOverlay={renderRow}\n onMoveItem={handleMoveItem}\n >\n {indexes.map((index) => (\n <Sortable.Item<HTMLDivElement> id={keys[index]} key={keys[index]}>\n {({ relativeDropPosition, ...sortableProps }) => (\n <ItemContainer {...sortableProps}>\n {renderRow(index)}\n {relativeDropPosition && (\n <ListView.DragIndicator\n $gap={0}\n $colorScheme=\"primary\"\n $relativeDropPosition={relativeDropPosition}\n $offsetLeft={0}\n />\n )}\n </ItemContainer>\n )}\n </Sortable.Item>\n ))}\n </Sortable.Root>\n ) : (\n indexes.map(renderRow)\n )}\n </Stack.V>\n {expanded && renderExpandedContent?.()}\n </InspectorPrimitives.Section>\n );\n});\n","import React, { CSSProperties, memo, ReactNode } from \"react\";\nimport styled, { useTheme } from \"styled-components\";\nimport { Spacer } from \"./Spacer\";\n\nexport const Section = styled.div<{\n $padding?: CSSProperties[\"padding\"];\n $gap?: CSSProperties[\"gap\"];\n}>(({ theme, $padding = \"10px\", $gap }) => ({\n flex: \"0 0 auto\",\n display: \"flex\",\n flexDirection: \"column\",\n padding: $padding,\n gap: $gap,\n}));\n\nexport const SectionHeader = styled.div(({ theme }) => ({\n display: \"flex\",\n alignItems: \"center\",\n}));\n\nexport const Title = styled.div<{\n $textStyle?: \"small\" | \"heading5\" | \"heading4\" | \"heading3\";\n}>(({ theme, $textStyle }) => ({\n display: \"flex\",\n flexDirection: \"row\",\n userSelect: \"none\",\n ...($textStyle\n ? {\n ...theme.textStyles[$textStyle],\n color: theme.colors.text,\n }\n : {\n ...theme.textStyles.label,\n color: theme.colors.textMuted,\n fontWeight: \"bold\",\n }),\n}));\n\nexport const Row = styled.div<{ $gap?: CSSProperties[\"gap\"] }>(\n ({ theme, $gap }) => ({\n flex: \"1\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: $gap,\n })\n);\n\nexport const Column = styled.div(({ theme }) => ({\n flex: \"1\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n}));\n\nexport const Checkbox = styled.input(({ theme }) => ({\n margin: 0,\n}));\n\nexport const Text = styled.span(({ theme }) => ({\n ...theme.textStyles.small,\n}));\n\nexport const VerticalSeparator = () => (\n <Spacer.Vertical size={useTheme().sizes.inspector.verticalSeparator} />\n);\n\nexport const HorizontalSeparator = () => (\n <Spacer.Horizontal size={useTheme().sizes.inspector.horizontalSeparator} />\n);\n\nconst SliderRowLabel = styled.span(({ theme }) => ({\n ...theme.textStyles.small,\n color: theme.colors.textMuted,\n marginBottom: \"-6px\",\n}));\n\nexport const RowLabel = styled.span<{\n $textStyle?: \"small\" | \"heading5\" | \"heading4\" | \"heading3\";\n}>(({ theme, $textStyle }) => ({\n // marginBottom: '6px',\n display: \"flex\",\n ...($textStyle\n ? {\n ...theme.textStyles[$textStyle],\n }\n : {\n ...theme.textStyles.label,\n color: theme.colors.textSubtle,\n fontWeight: \"bold\",\n }),\n lineHeight: \"19px\", // Button height\n alignItems: \"center\",\n}));\n\nexport const LabeledRow = memo(function LabeledRow({\n id,\n children,\n label,\n labelTextStyle,\n gap,\n right,\n}: {\n id?: string;\n children: ReactNode;\n label: ReactNode;\n labelTextStyle?: \"small\" | \"heading5\" | \"heading4\" | \"heading3\";\n gap?: CSSProperties[\"gap\"];\n right?: ReactNode;\n}) {\n return (\n <Row id={id}>\n <Column>\n <RowLabel $textStyle={labelTextStyle}>\n {label}\n {right && <Spacer.Horizontal />}\n {right}\n </RowLabel>\n <Row $gap={gap}>{children}</Row>\n </Column>\n </Row>\n );\n});\n\nexport const LabeledSliderRow = memo(function LabeledRow({\n children,\n label,\n}: {\n children: ReactNode;\n label: string;\n}) {\n return (\n <Row>\n <Column>\n <SliderRowLabel>{label}</SliderRowLabel>\n <Row>{children}</Row>\n </Column>\n </Row>\n );\n});\n","import { round } from \"@noya-app/noya-utils\";\nimport React, { memo, useCallback } from \"react\";\nimport { InputField } from \"./InputField\";\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 = 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 = useCallback(\n (value: number) => onSetValue(value, \"adjust\"),\n [onSetValue]\n );\n\n const handleSetValue = useCallback(\n (value: number) => onSetValue(value, \"replace\"),\n [onSetValue]\n );\n\n return (\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 {label && <InputField.Label>{label}</InputField.Label>}\n </InputField.Root>\n );\n});\n"],"mappings":"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","names":["ActivityIndicator","size","React","forwardRef","styled","React","Children","memo","styled","elements","styled","StackBase","elements","Children","React","memo","styled","size","forwardRef","Avatar","name","React","React","forwardRef","styled","React","memo","styled","Content","Tooltip","styled","forwardRef","Button","style","size","React","React","forwardRef","memo","styled","React","createContext","memo","useContext","useEffect","useMemo","useState","useTheme","React","styled","React","forwardRef","memo","React","React","memo","forwardRef","IconButton","size","style","React","styled","React","colors","name","name","colors","React","createContext","useCallback","useContext","useMemo","useRef","useState","styled","React","forwardRef","styled","React","forwardRef","styled","size","Spacer","styled","forwardRef","Dialog","style","React","FullscreenDialog","React","memo","useRef","React","size","memo","AutoSizer","useRef","React","SingleDimensionAutoSizer","React","memo","useCallback","useRef","useCallback","useState","memo","FileDropTarget","useRef","useCallback","React","useRef","isDeepEqual","useCallback","useMemo","useState","useEffect","useState","useEffect","useRef","useCallback","useRef","useRef","useCallback","useMemo","useState","useCallback","useEffect","useMemo","useState","useEffect","useState","useRef","useCallback","useLayoutEffect","useRef","useEffect","useState","useEffect","useState","React","Children","createContext","forwardRef","isValidElement","memo","useCallback","useContext","useEffect","useLayoutEffect","useMemo","useRef","useState","styled","React","forwardRef","memo","useCallback","useMemo","styled","React","memo","styled","styled","memo","KeyboardShortcut","React","styled","memo","useCallback","React","Content","SubContent","forwardRef","DropdownMenuRoot","useMemo","React","forwardRef","useCallback","useEffect","useLayoutEffect","useRef","useState","useEffect","forwardRef","ReadOnlyTextInput","React","ControlledTextInput","useCallback","SubmittableTextInput","useRef","useState","useLayoutEffect","useEffect","React","styled","styled","React","createContext","styled","memo","forwardRef","InputFieldLabel","style","useContext","useRef","useLayoutEffect","React","InputFieldDropdownMenu","size","useMemo","InputFieldButton","useCallback","InputFieldInput","useState","value","Children","isValidElement","isFocused","useEffect","InputField","styled","createContext","DialogProvider","useState","useCallback","useRef","React","useMemo","isOpen","contents","useContext","React","createContext","useContext","useMemo","useState","windows","memo","DesignSystemThemeProvider","useTheme","React","createContext","DesignSystemConfigurationProvider","useState","useEffect","useMemo","useContext","React","hoverProps","styled","size","memo","forwardRef","Chip","style","React","CheckIcon","ChevronRightIcon","useKeyboardShortcuts","React","memo","useCallback","useMemo","styled","SeparatorElement","styled","ItemElement","CheckboxItemElement","StyledItemIndicator","ContextMenuItem","memo","useCallback","React","CheckIcon","ChevronRightIcon","Content","SubContent","useMemo","useKeyboardShortcuts","React","memo","styled","Divider","DividerVertical","React","memo","useCallback","useState","styled","styled","memo","DraggableMenuButton","useState","React","useCallback","React","forwardRef","memo","styled","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","memo","useMemo","styled","useTheme","React","createContext","memo","useContext","useMemo","ImageDataProvider","useLayoutEffect","useMemo","styled","memo","HorizontalDotsBackground","useTheme","useMemo","React","PatternPreviewBackground","size","ColorPreviewBackground","GradientPreviewBackground","FillPreviewBackground","styled","memo","forwardRef","FillInputField","React","React","useCallback","useRef","useState","styles","size","style","rgbaToHsva","React","memo","useCallback","useMemo","memo","GradientPicker","useMemo","rgbaToHsva","useCallback","value","React","styled","React","createContext","forwardRef","memo","useCallback","useContext","useMemo","styled","keyframes","React","memo","useCallback","useState","styled","Container","ScrollArea","sizes","Grid","styled","size","Container","keyframes","forwardRef","GridViewItem","style","React","useContext","useCallback","createContext","useMemo","title","GridView","memo","React","forwardRef","memo","useCallback","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useRef","useState","styled","range","composeRefs","React","Children","createContext","forwardRef","isValidElement","memo","useCallback","useContext","useImperativeHandle","useLayoutEffect","useMemo","useRef","styled","React","createContext","memo","useCallback","useContext","useEffect","useMemo","useRef","useState","createPortal","Sortable","createContext","styled","useRef","useLayoutEffect","React","forwardRef","ListViewRow","style","useContext","useCallback","useMemo","composeRefs","memo","VirtualizedListRow","VirtualizedListInner","size","useImperativeHandle","RootContainer","ListViewRootInner","isValidElement","ChildrenListViewInner","Children","SimpleListViewInner","ListView","React","forwardRef","styled","styled","forwardRef","Text","style","React","styled","memo","forwardRef","CompletionMenu","React","InputFieldWithCompletions","size","style","useRef","useState","useCallback","useLayoutEffect","useMemo","useEffect","useImperativeHandle","React","forwardRef","memo","InspectorContainer","style","React","memo","styled","styled","LabelContainer","React","memo","React","Children","isValidElement","memo","useLayoutEffect","useMemo","useRef","styled","Container","LabeledElementView","React","styled","React","createContext","forwardRef","memo","useCallback","useContext","useMemo","styled","ignoredProps","styled","forwardRef","ToggleGroupItem","useContext","React","createContext","useMemo","useCallback","value","RadioGroup","memo","React","createContext","memo","useCallback","useContext","useEffect","useMemo","useRef","styled","SelectOption","Select","value","Select","React","memo","styled","memo","SelectMenu","style","React","value","styled","StyledItem","React","useCallback","useMemo","styled","StyledThumb","Slider","arrayValue","React","styled","Switch","React","forwardRef","memo","useCallback","useEffect","useRef","styled","AutoResizingTextArea","value","React","forwardRef","memo","useCallback","useContext","forwardRef","TreeRow","useContext","useCallback","React","TreeView","memo","useKeyboardShortcuts","React","forwardRef","useImperativeHandle","useRef","useLayoutEffect","useRef","useEffect","useState","size","useRef","useLayoutEffect","forwardRef","WorkspaceLayout","style","size","useRef","useImperativeHandle","useKeyboardShortcuts","React","elements","range","React","memo","useCallback","useMemo","styled","useTheme","Row","Text","Title","React","memo","styled","useTheme","styled","Title","Row","Text","React","useTheme","memo","LabeledRow","styled","ItemContainer","memo","ArrayController","useTheme","useMemo","range","useCallback","React","Title","React","memo","useCallback","memo","DimensionInput","size","useCallback","value","React"]}