A design system in a box. hip-ui.tngl.io/docs/introduction
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

editable text

+5160 -70
+2 -2
README.md
··· 32 32 33 33 #### react-aria wrappers 34 34 35 - - [ ] Sheet 36 35 - [ ] Grid List 37 36 - [ ] Navigation Menu 38 - - [ ] Toast 39 37 40 38 ### Maybe 41 39 42 40 - [ ] Field 43 41 - [ ] Item 42 + - [ ] Sheet 44 43 45 44 ### Done 46 45 46 + - [x] Toast 47 47 - [x] Drawer 48 48 - [x] Tabs 49 49 - [x] Menubar
+2
apps/docs/package.json
··· 26 26 "@tanstack/react-router-ssr-query": "^1.133.27", 27 27 "@tanstack/react-start": "^1.133.27", 28 28 "@tanstack/router-plugin": "^1.133.27", 29 + "@tldraw/editor": "^4.1.2", 29 30 "change-case": "catalog:", 30 31 "dedent": "catalog:", 31 32 "glob": "^11.0.3", ··· 42 43 "remark-frontmatter": "^5.0.0", 43 44 "shiki": "^3.13.0", 44 45 "tailwindcss": "^4.1.16", 46 + "tldraw": "^4.1.2", 45 47 "unplugin-stylex": "^0.5.5", 46 48 "vite-tsconfig-paths": "^5.1.4" 47 49 },
+13 -15
apps/docs/src/components/disclosure/index.tsx
··· 45 45 gap: spacing["2"], 46 46 justifyContent: "space-between", 47 47 padding: { 48 - ":is([data-size=sm] *)": `${spacing["2"]} ${spacing["3"]}`, 49 - ":is([data-size=md] *)": `${spacing["3"]} ${spacing["4"]}`, 50 - ":is([data-size=lg] *)": `${spacing["4"]} ${spacing["5"]}`, 48 + ":is([data-size=sm] *)": `${spacing["2"]} ${spacing["2"]}`, 49 + ":is([data-size=md] *)": `${spacing["3"]} ${spacing["3"]}`, 50 + ":is([data-size=lg] *)": `${spacing["4"]} ${spacing["4"]}`, 51 51 }, 52 52 textAlign: "left", 53 53 transitionDuration: animationDuration.fast, ··· 91 91 }, 92 92 panelContent: { 93 93 padding: { 94 - ":is([data-size=sm] *)": `${spacing["2"]} ${spacing["3"]}`, 95 - ":is([data-size=md] *)": `${spacing["3"]} ${spacing["4"]}`, 96 - ":is([data-size=lg] *)": `${spacing["4"]} ${spacing["5"]}`, 94 + ":is([data-size=sm] *)": `${spacing["2"]} ${spacing["2"]}`, 95 + ":is([data-size=md] *)": `${spacing["3"]} ${spacing["3"]}`, 96 + ":is([data-size=lg] *)": `${spacing["4"]} ${spacing["4"]}`, 97 97 }, 98 98 }, 99 99 }); ··· 113 113 const size = sizeProp || use(SizeContext); 114 114 115 115 return ( 116 - <SizeContext value={size}> 117 - <AriaDisclosure 118 - {...props} 119 - data-size={size} 120 - {...stylex.props(styles.disclosure, style)} 121 - > 122 - {children} 123 - </AriaDisclosure> 124 - </SizeContext> 116 + <AriaDisclosure 117 + {...props} 118 + data-size={size} 119 + {...stylex.props(styles.disclosure, style)} 120 + > 121 + {children} 122 + </AriaDisclosure> 125 123 ); 126 124 } 127 125
+3 -8
apps/docs/src/components/drawer/NonModalDrawer.tsx
··· 9 9 10 10 export function NonModalDrawer(props: React.ComponentProps<"div">) { 11 11 const state = use(OverlayTriggerStateContext); 12 - 13 - if (!state) { 14 - throw new Error("No overlay trigger state found"); 15 - } 16 - 17 12 const modalRef = useRef<HTMLDivElement>(null); 18 13 const { overlayProps } = useOverlay( 19 - { isOpen: state.isOpen, onClose: state.close }, 14 + { isOpen: state?.isOpen, onClose: state?.close }, 20 15 modalRef, 21 16 ); 22 17 const entering = useEnterAnimation(modalRef) || false; 23 - const exiting = useExitAnimation(modalRef, state.isOpen); 18 + const exiting = useExitAnimation(modalRef, state?.isOpen || false); 24 19 25 - if (!state.isOpen && !exiting) { 20 + if (!state?.isOpen && !exiting) { 26 21 return null; 27 22 } 28 23
+199
apps/docs/src/components/editable-text/index.tsx
··· 1 + "use client"; 2 + 3 + import { useControlledState } from "@react-stately/utils"; 4 + import * as stylex from "@stylexjs/stylex"; 5 + import { 6 + useRef, 7 + useState, 8 + KeyboardEvent, 9 + useEffect, 10 + useEffectEvent, 11 + } from "react"; 12 + import { mergeProps, useLongPress } from "react-aria"; 13 + import { Input, TextField as AriaTextField } from "react-aria-components"; 14 + 15 + import { radius } from "../theme/radius.stylex"; 16 + import { spacing } from "../theme/spacing.stylex"; 17 + import { StyleXComponentProps } from "../theme/types"; 18 + 19 + const focusClosestFocusableElement = () => { 20 + const focusableElements = document.activeElement?.parentElement?.closest( 21 + "button, input, textarea, select, a, [tabindex]:not([tabindex='-1'])", 22 + ); 23 + if (!focusableElements) return; 24 + (focusableElements as HTMLElement).focus(); 25 + }; 26 + 27 + const styles = stylex.create({ 28 + input: { 29 + backgroundColor: "transparent", 30 + borderRadius: radius["sm"], 31 + borderWidth: 0, 32 + display: "inline-block", 33 + fontFamily: "inherit", 34 + fontSize: "inherit", 35 + fontWeight: "inherit", 36 + letterSpacing: "inherit", 37 + lineHeight: "inherit", 38 + minWidth: 0, 39 + textAlign: "inherit", 40 + textDecoration: "inherit", 41 + textTransform: "inherit", 42 + 43 + outlineColor: "blue", 44 + outlineStyle: "solid", 45 + outlineWidth: { 46 + default: "0px", 47 + ":focus": "1px", 48 + }, 49 + 50 + marginBottom: `calc(${spacing["1"]} * -1)`, 51 + marginLeft: `calc(${spacing["2"]} * -1)`, 52 + marginRight: `calc(${spacing["2"]} * -1)`, 53 + marginTop: `calc(${spacing["1"]} * -1)`, 54 + paddingBottom: spacing["1"], 55 + paddingLeft: spacing["2"], 56 + paddingRight: spacing["2"], 57 + paddingTop: spacing["1"], 58 + }, 59 + }); 60 + 61 + export interface EditableTextProps 62 + extends StyleXComponentProps< 63 + Omit<React.ComponentProps<"span">, "children" | "onChange"> 64 + > { 65 + /** 66 + * The current value of the editable text. 67 + */ 68 + children: string; 69 + /** 70 + * Callback fired when the value changes. 71 + */ 72 + onChange?: (value: string) => void; 73 + 74 + /** 75 + * Whether the component is read-only. 76 + */ 77 + isReadOnly?: boolean; 78 + /** 79 + * Whether to show the input field on mount. 80 + */ 81 + defaultEditing?: boolean; 82 + /** 83 + * Whether the component is currently in editing mode (controlled). 84 + */ 85 + isEditing?: boolean; 86 + /** 87 + * Callback fired when the editing state changes. 88 + */ 89 + onEditingChange?: (isEditing: boolean) => void; 90 + } 91 + 92 + export function EditableText({ 93 + children, 94 + onChange, 95 + isReadOnly, 96 + defaultEditing, 97 + isEditing: isEditingProp, 98 + onEditingChange, 99 + style, 100 + ...props 101 + }: EditableTextProps) { 102 + const [isEditingState, setIsEditingState] = useControlledState( 103 + isEditingProp, 104 + defaultEditing ?? false, 105 + onEditingChange, 106 + ); 107 + const [editValue, setEditValue] = useState(children); 108 + const inputRef = useRef<HTMLInputElement>(null); 109 + 110 + const isEditing = 111 + isEditingProp === undefined ? isEditingState : isEditingProp; 112 + const setIsEditing = (newIsEditing: boolean) => { 113 + if (isEditingProp === undefined) { 114 + setIsEditingState(newIsEditing); 115 + } 116 + onEditingChange?.(newIsEditing); 117 + }; 118 + 119 + const handleStartEditing = () => { 120 + if (isReadOnly) return; 121 + setEditValue(children); 122 + setIsEditing(true); 123 + // Focus the input after it's rendered 124 + setTimeout(() => { 125 + inputRef.current?.focus(); 126 + inputRef.current?.select(); 127 + }, 0); 128 + }; 129 + 130 + const handleCommit = (newValue: string) => { 131 + focusClosestFocusableElement(); 132 + setIsEditing(false); 133 + if (newValue !== children) { 134 + onChange?.(newValue); 135 + } 136 + }; 137 + 138 + const handleCancel = () => { 139 + focusClosestFocusableElement(); 140 + setIsEditing(false); 141 + setEditValue(children); 142 + }; 143 + 144 + const handleKeyDown = useEffectEvent((e: Event) => { 145 + const event = e as unknown as KeyboardEvent; 146 + 147 + if (event.key === "Enter") { 148 + e.preventDefault(); 149 + handleCommit(editValue); 150 + } else if (event.key === "Escape") { 151 + e.preventDefault(); 152 + handleCancel(); 153 + } 154 + 155 + e.stopPropagation(); 156 + }); 157 + 158 + const handleBlur = () => { 159 + handleCommit(editValue); 160 + }; 161 + 162 + const { longPressProps } = useLongPress({ 163 + onLongPress: handleStartEditing, 164 + }); 165 + 166 + useEffect(() => { 167 + if (!isEditing) return; 168 + 169 + globalThis.addEventListener("keydown", handleKeyDown, { 170 + capture: true, 171 + }); 172 + return () => { 173 + globalThis.removeEventListener("keydown", handleKeyDown, { 174 + capture: true, 175 + }); 176 + }; 177 + }, [isEditing]); 178 + 179 + if (isEditing) { 180 + return ( 181 + <AriaTextField 182 + value={editValue} 183 + onChange={setEditValue} 184 + onKeyDown={(e) => e.stopPropagation()} 185 + onKeyUp={(e) => e.stopPropagation()} 186 + isReadOnly={isReadOnly} 187 + {...stylex.props(style)} 188 + > 189 + <Input 190 + {...stylex.props(styles.input)} 191 + ref={inputRef} 192 + onBlur={handleBlur} 193 + /> 194 + </AriaTextField> 195 + ); 196 + } 197 + 198 + return <span {...mergeProps(props, longPressProps)}>{children}</span>; 199 + }
+10
apps/docs/src/components/theme/animations.stylex.tsx
··· 9 9 }, 10 10 }); 11 11 12 + const fadeOut = stylex.keyframes({ 13 + from: { 14 + opacity: 1, 15 + }, 16 + to: { 17 + opacity: 0, 18 + }, 19 + }); 20 + 12 21 const zoomIn = stylex.keyframes({ 13 22 from: { 14 23 transform: "scale(0.8)", ··· 92 101 93 102 export const animations = stylex.defineVars({ 94 103 fadeIn, 104 + fadeOut, 95 105 zoomIn, 96 106 slideInRight, 97 107 slideOutRight,
+1
apps/docs/src/components/theme/types.ts
··· 20 20 | "success" 21 21 | "warning" 22 22 | "critical"; 23 + export type ToastVariant = "neuthral" | "success" | "warning" | "critical"; 23 24 24 25 export type StyleXComponentProps<T extends object> = Omit< 25 26 T,
+5 -1
apps/docs/src/components/theme/useListBoxItemStyles.ts
··· 19 19 userSelect: "none", 20 20 21 21 boxSizing: "border-box", 22 - fontWeight: fontWeight["medium"], 22 + fontWeight: { 23 + default: fontWeight["normal"], 24 + [":is([data-react-aria-pressable=true][data-selected=true])"]: 25 + fontWeight["medium"], 26 + }, 23 27 outline: { 24 28 default: "none", 25 29 ":focus": "none",
-4
apps/docs/src/components/theme/usePopoverStyles.ts
··· 10 10 popover: { 11 11 borderRadius: radius["md"], 12 12 boxShadow: shadow["md"], 13 - minWidth: spacing["40"], 14 13 outline: "none", 15 14 overflow: "auto", 16 - 17 - paddingBottom: spacing["1"], 18 - paddingTop: spacing["1"], 19 15 }, 20 16 animation: { 21 17 "--origin-x": {
+180
apps/docs/src/components/toast/Toast.tsx
··· 1 + "use client"; 2 + 3 + import * as stylex from "@stylexjs/stylex"; 4 + import { X } from "lucide-react"; 5 + import { 6 + UNSTABLE_ToastRegion as AriaToastRegion, 7 + UNSTABLE_Toast as Toast, 8 + UNSTABLE_ToastContent as ToastContent, 9 + ToastRegionProps as AriaToastRegionProps, 10 + Text, 11 + QueuedToast, 12 + } from "react-aria-components"; 13 + 14 + import { IconButton } from "../icon-button"; 15 + import { 16 + criticalColor, 17 + successColor, 18 + uiColor, 19 + warningColor, 20 + } from "../theme/semantic-color.stylex"; 21 + import { spacing } from "../theme/spacing.stylex"; 22 + import { StyleXComponentProps } from "../theme/types"; 23 + import { lineHeight, typeramp } from "../theme/typography.stylex"; 24 + import { toasts, ToastContentType } from "./queue"; 25 + import { usePopoverStyles } from "../theme/usePopoverStyles"; 26 + import { Button } from "../button"; 27 + 28 + const styles = stylex.create({ 29 + region: { 30 + bottom: spacing["4"], 31 + display: "flex", 32 + flexDirection: "column-reverse", 33 + gap: spacing["2"], 34 + outline: "none", 35 + position: "fixed", 36 + right: spacing["4"], 37 + zIndex: 9999, 38 + }, 39 + toast: { 40 + display: "flex", 41 + flexDirection: "row", 42 + alignItems: "center", 43 + justifyContent: "space-between", 44 + gap: spacing["4"], 45 + paddingLeft: spacing["4"], 46 + paddingRight: spacing["4"], 47 + paddingTop: spacing["3"], 48 + paddingBottom: spacing["3"], 49 + minWidth: spacing["60"], 50 + }, 51 + content: { 52 + display: "flex", 53 + flex: "1 1 auto", 54 + flexDirection: "column", 55 + gap: spacing["2.5"], 56 + minWidth: 0, 57 + }, 58 + title: { 59 + fontWeight: 600, 60 + lineHeight: lineHeight["none"], 61 + color: { 62 + default: uiColor.text1, 63 + ":is([data-variant=critical] *)": criticalColor.textContrast, 64 + ":is([data-variant=success] *)": successColor.textContrast, 65 + ":is([data-variant=warning] *)": warningColor.text2, 66 + }, 67 + }, 68 + description: { 69 + color: { 70 + default: uiColor.text1, 71 + ":is([data-variant=critical] *)": criticalColor.text1, 72 + ":is([data-variant=success] *)": successColor.text1, 73 + ":is([data-variant=warning] *)": warningColor.text1, 74 + }, 75 + }, 76 + icon: { 77 + display: "flex", 78 + alignItems: "center", 79 + justifyContent: "center", 80 + flexShrink: 0, 81 + 82 + ":is(*) svg": { 83 + flexShrink: 0, 84 + height: spacing["4"], 85 + pointerEvents: "none", 86 + width: spacing["4"], 87 + color: { 88 + ":is([data-variant=critical] *)": criticalColor.solid1, 89 + ":is([data-variant=success] *)": successColor.solid1, 90 + ":is([data-variant=warning] *)": warningColor.solid1, 91 + }, 92 + }, 93 + }, 94 + critical: { 95 + backgroundColor: criticalColor.component1, 96 + borderColor: criticalColor.border2, 97 + color: criticalColor.text2, 98 + }, 99 + success: { 100 + backgroundColor: successColor.component1, 101 + borderColor: successColor.border2, 102 + color: successColor.text2, 103 + }, 104 + warning: { 105 + backgroundColor: warningColor.component1, 106 + borderColor: warningColor.border2, 107 + color: warningColor.text2, 108 + }, 109 + }); 110 + 111 + function ToastItem({ toast }: { toast: QueuedToast<ToastContentType> }) { 112 + const popoverStyles = usePopoverStyles(); 113 + 114 + return ( 115 + <Toast 116 + toast={toast} 117 + data-variant={toast.content.variant} 118 + {...stylex.props( 119 + popoverStyles.wrapper, 120 + styles.toast, 121 + toast.content.variant === "critical" && styles.critical, 122 + toast.content.variant === "success" && styles.success, 123 + toast.content.variant === "warning" && styles.warning, 124 + )} 125 + > 126 + {toast.content.icon && ( 127 + <div {...stylex.props(styles.icon)}>{toast.content.icon}</div> 128 + )} 129 + <ToastContent {...stylex.props(styles.content)}> 130 + <Text slot="title" {...stylex.props(typeramp.body, styles.title)}> 131 + {toast.content.title} 132 + </Text> 133 + <Text 134 + slot="description" 135 + {...stylex.props(styles.description, typeramp.label)} 136 + > 137 + {toast.content.description} 138 + </Text> 139 + </ToastContent> 140 + {toast.content.action ? ( 141 + <Button 142 + size="sm" 143 + variant={toast.content.action.variant} 144 + onPress={() => { 145 + toast.content.action?.onPress(); 146 + toasts.close(toast.key); 147 + }} 148 + > 149 + {toast.content.action.label} 150 + </Button> 151 + ) : ( 152 + <IconButton 153 + aria-label="Close" 154 + size="sm" 155 + variant="tertiary" 156 + slot="close" 157 + > 158 + <X /> 159 + </IconButton> 160 + )} 161 + </Toast> 162 + ); 163 + } 164 + 165 + export interface ToastRegionProps 166 + extends StyleXComponentProps< 167 + Omit<AriaToastRegionProps<ToastContentType>, "children" | "queue"> 168 + > {} 169 + 170 + export function ToastRegion({ style, ...props }: ToastRegionProps) { 171 + return ( 172 + <AriaToastRegion 173 + queue={toasts} 174 + {...stylex.props(styles.region, style)} 175 + {...props} 176 + > 177 + {({ toast }) => <ToastItem toast={toast} />} 178 + </AriaToastRegion> 179 + ); 180 + }
+2
apps/docs/src/components/toast/index.tsx
··· 1 + export { toasts, type ToastContentType } from "./queue"; 2 + export { type ToastRegionProps, ToastRegion } from "./Toast";
+28
apps/docs/src/components/toast/queue.ts
··· 1 + import { flushSync } from "react-dom"; 2 + import { ToastQueue } from "react-stately"; 3 + import { ButtonVariant, ToastVariant } from "../theme/types"; 4 + 5 + export interface ToastContentType { 6 + variant?: ToastVariant; 7 + icon?: React.ReactNode; 8 + title: string; 9 + description?: string; 10 + action?: { 11 + label: string; 12 + variant?: ButtonVariant; 13 + onPress: () => void; 14 + }; 15 + } 16 + 17 + export const toasts = new ToastQueue<ToastContentType>({ 18 + // Wrap state updates in a CSS view transition. 19 + wrapUpdate(fn) { 20 + if ("startViewTransition" in document) { 21 + document.startViewTransition(() => { 22 + flushSync(fn); 23 + }); 24 + } else { 25 + fn(); 26 + } 27 + }, 28 + });
+39 -8
apps/docs/src/components/tree/index.tsx
··· 15 15 import { SizeContext } from "../context"; 16 16 import { animationDuration } from "../theme/animations.stylex"; 17 17 import { radius } from "../theme/radius.stylex"; 18 - import { ui } from "../theme/semantic-color.stylex"; 18 + import { primaryColor, ui } from "../theme/semantic-color.stylex"; 19 19 import { spacing } from "../theme/spacing.stylex"; 20 20 import { Size, StyleXComponentProps } from "../theme/types"; 21 21 import { useListBoxItemStyles } from "../theme/useListBoxItemStyles"; ··· 26 26 }, 27 27 itemInner: { 28 28 gap: spacing["1"], 29 + paddingLeft: spacing["0.5"], 30 + }, 31 + selected: { 32 + backgroundColor: primaryColor.component2, 29 33 }, 30 34 spacer: { 31 - width: `calc((var(--tree-item-level, 0) - 1) * ${spacing["4"]})`, 35 + width: `calc((var(--tree-item-level, 0) - 1) * ${spacing["3"]})`, 32 36 }, 33 37 content: { 34 38 alignItems: "center", ··· 51 55 default: "rotate(0deg)", 52 56 ":is([aria-expanded=true] *)": "rotate(90deg)", 53 57 }, 58 + 59 + // eslint-disable-next-line @stylexjs/no-legacy-contextual-styles, @stylexjs/valid-styles 60 + ":is(*) svg": { 61 + height: spacing["3"], 62 + width: spacing["3"], 63 + }, 54 64 }, 55 65 addon: { 56 66 marginBottom: `calc(${spacing["2"]} * -1)`, ··· 98 108 selectionBehavior, 99 109 selectionMode, 100 110 allowsDragging, 111 + isSelected, 101 112 }) => ( 102 - <div {...stylex.props(listBoxItemStyles.inner, styles.itemInner)}> 113 + <div 114 + {...stylex.props( 115 + listBoxItemStyles.inner, 116 + styles.itemInner, 117 + isSelected && selectionBehavior === "replace" && styles.selected, 118 + )} 119 + > 103 120 {allowsDragging && ( 104 121 <div {...stylex.props(styles.dragButtonWrapper)}> 105 122 <Button ··· 117 134 <Button 118 135 slot="chevron" 119 136 {...stylex.props( 120 - styles.chevron, 121 137 ui.textDim, 122 138 listBoxItemStyles.addon, 139 + styles.chevron, 123 140 !hasChildItems && styles.hidden, 124 141 )} 125 142 > 126 - <ChevronRight size={16} /> 143 + <ChevronRight /> 127 144 </Button> 128 145 129 146 <div {...stylex.props(styles.content)}> ··· 145 162 ); 146 163 } 147 164 148 - interface TreeItemProps<T extends object> 165 + interface TreeItemBaseProps<T extends object> 149 166 extends StyleXComponentProps< 150 167 Omit<AriaTreeItemProps<T>, "textValue" | "children"> 151 168 >, 152 169 Pick<TreeItemContentProps, "prefix" | "suffix"> { 170 + children?: React.ReactNode; 171 + } 172 + 173 + interface TreeItemTextProps<T extends object> extends TreeItemBaseProps<T> { 153 174 title: string; 154 - children?: React.ReactNode; 175 + textValue?: string; 176 + } 177 + 178 + interface TreeItemNodeProps<T extends object> extends TreeItemBaseProps<T> { 179 + title: React.ReactNode; 180 + textValue: string; 155 181 } 156 182 183 + type TreeItemProps<T extends object> = 184 + | TreeItemTextProps<T> 185 + | TreeItemNodeProps<T>; 186 + 157 187 export function TreeItem<T extends object>({ 158 188 style, 159 189 title, 160 190 prefix, 161 191 suffix, 192 + textValue, 162 193 ...props 163 194 }: TreeItemProps<T>) { 164 195 const listBoxItemStyles = useListBoxItemStyles(); 165 196 166 197 return ( 167 198 <AriaTreeItem 168 - textValue={title} 199 + textValue={textValue ?? (typeof title === "string" ? title : "")} 169 200 {...props} 170 201 data-react-aria-pressable 171 202 {...stylex.props(
+40
apps/docs/src/docs/components/editable-text.mdx
··· 1 + --- 2 + title: Editable Text 3 + description: An inline editable text component that switches between display and edit modes. By default the component will enter edit mode for a long press. 4 + --- 5 + 6 + import { PropDocs } from '../../lib/PropDocs' 7 + import { Example } from '../../lib/Example' 8 + import { Basic } from '../../examples/editable-text/basic' 9 + import { Composition } from '../../examples/editable-text/composition' 10 + 11 + <Example src={Basic} /> 12 + 13 + ## Installation 14 + 15 + Run the following command to add the editable text component to your project. 16 + 17 + ```bash 18 + pnpm hip install editable-text 19 + ``` 20 + 21 + ## Props 22 + 23 + This component is built using [React Aria Components](https://react-spectrum.adobe.com/react-aria/). 24 + 25 + <PropDocs components={["EditableText"]} /> 26 + 27 + ## Features 28 + 29 + ### Composition 30 + 31 + The editable text component can be composed with other components. 32 + 33 + <Example src={Composition} /> 34 + 35 + ## Related Components 36 + 37 + - [TextField](/docs/components/text-field) - For standard text input fields 38 + - [TextArea](/docs/components/text-area) - For multi-line text input 39 + - [Text](/docs/components/text) - For displaying static text 40 +
+54
apps/docs/src/docs/components/toast.mdx
··· 1 + --- 2 + title: Toast 3 + description: A Toast displays a brief, temporary notification of actions, errors, or other events in an application. 4 + --- 5 + 6 + import { PropDocs } from '../../lib/PropDocs' 7 + import { Example } from '../../lib/Example' 8 + import { Basic } from '../../examples/toast/basic' 9 + import { Actions } from '../../examples/toast/actions' 10 + import { Icons } from '../../examples/toast/icons' 11 + 12 + <Example src={Basic} /> 13 + 14 + ## Installation 15 + 16 + Run the following command to add the toast component to your project. 17 + 18 + ```bash 19 + pnpm hip install toast 20 + ``` 21 + 22 + ## Props 23 + 24 + This component is built using [React Aria Toast](https://react-spectrum.adobe.com/react-aria/Toast.html). 25 + 26 + <PropDocs components={["ToastRegion", "Toast", "ToastContent", "ToastTitle", "ToastDescription", "ToastClose"]} /> 27 + 28 + ## Features 29 + 30 + ### Actions 31 + 32 + Toasts can include an action button to perform an action when the user clicks on it. 33 + 34 + <Example src={Actions} /> 35 + 36 + ### Variants and Icons 37 + 38 + Toasts can be one of the following variants: 39 + 40 + - `success` 41 + - `warning` 42 + - `critical` 43 + 44 + Each variant can include an icon to display alongside the title and description. 45 + 46 + <Example src={Icons} /> 47 + 48 + ## Related Components 49 + 50 + - [Dialog](/docs/components/dialog) - For modal dialogs 51 + - [AlertDialog](/docs/components/alert-dialog) - For critical actions and confirmations 52 + - [Popover](/docs/components/popover) - For non-modal overlays 53 + - [Button](/docs/components/button) - For triggering toasts 54 +
+10
apps/docs/src/docs/components/tree.mdx
··· 6 6 import { PropDocs } from '../../lib/PropDocs' 7 7 import { Example } from '../../lib/Example' 8 8 import { Basic } from '../../examples/tree/basic' 9 + import { DragAndDrop } from '../../examples/tree/drag-and-drop' 9 10 10 11 <Example src={Basic} /> 11 12 ··· 22 23 This component is built using the [React Aria Tree](https://react-spectrum.adobe.com/react-aria/Tree.html). 23 24 24 25 <PropDocs components={["Tree", "TreeItem"]} /> 26 + 27 + ### Features 28 + 29 + #### Drag and Drop 30 + 31 + The tree supports drag and drop by providing the `dragAndDropHooks` prop to the `Tree` component. 32 + React more about it [here](https://react-spectrum.adobe.com/react-aria/Tree.html#drag-and-drop). 33 + 34 + <Example src={DragAndDrop} /> 25 35 26 36 ## Related Components 27 37
+8
apps/docs/src/docs/showcase/canvas-editor.mdx
··· 1 + --- 2 + title: Canvas Editor 3 + description: An example showing what building a canvas editor looks like with Hip. 4 + --- 5 + 6 + import { CanvasEditor } from "../../showcases/canvas-editor"; 7 + 8 + <CanvasEditor />
+8
apps/docs/src/examples/editable-text/basic.tsx
··· 1 + import { useState } from "react"; 2 + 3 + import { EditableText } from "@/components/editable-text"; 4 + 5 + export function Basic() { 6 + const [value, setValue] = useState("Click to edit"); 7 + return <EditableText onChange={setValue}>{value}</EditableText>; 8 + }
+52
apps/docs/src/examples/editable-text/composition.tsx
··· 1 + import * as stylex from "@stylexjs/stylex"; 2 + import { useState } from "react"; 3 + 4 + import { Card } from "@/components/card"; 5 + import { EditableText } from "@/components/editable-text"; 6 + import { ListBox, ListBoxItem } from "@/components/listbox"; 7 + 8 + import { spacing } from "../../components/theme/spacing.stylex"; 9 + 10 + const styles = stylex.create({ 11 + card: { 12 + paddingBottom: spacing["1"], 13 + paddingTop: spacing["1"], 14 + width: "300px", 15 + }, 16 + }); 17 + 18 + const initialItems = [ 19 + { id: "item1", name: "Task 1" }, 20 + { id: "item2", name: "Task 2" }, 21 + { id: "item3", name: "Task 3" }, 22 + ]; 23 + 24 + export function Composition() { 25 + const [items, setItems] = useState(initialItems); 26 + 27 + const updateItem = (id: string, newName: string) => { 28 + setItems((prevItems) => 29 + prevItems.map((item) => 30 + item.id === id ? { ...item, name: newName } : item, 31 + ), 32 + ); 33 + }; 34 + 35 + return ( 36 + <Card style={styles.card}> 37 + <ListBox 38 + items={items} 39 + selectionMode="single" 40 + defaultSelectedKeys={["item1"]} 41 + > 42 + {(item) => ( 43 + <ListBoxItem key={item.id} id={item.id}> 44 + <EditableText onChange={(value) => updateItem(item.id, value)}> 45 + {item.name} 46 + </EditableText> 47 + </ListBoxItem> 48 + )} 49 + </ListBox> 50 + </Card> 51 + ); 52 + }
+42
apps/docs/src/examples/toast/actions.tsx
··· 1 + "use client"; 2 + 3 + import { Button } from "@/components/button"; 4 + import { ToastRegion, toasts } from "@/components/toast"; 5 + 6 + export function Actions() { 7 + return ( 8 + <> 9 + <ToastRegion /> 10 + <Button 11 + onPress={() => 12 + toasts.add( 13 + { 14 + title: "File deleted", 15 + description: "The file has been moved to the trash.", 16 + action: { 17 + label: "Undo", 18 + variant: "primary", 19 + onPress: () => { 20 + toasts.add( 21 + { 22 + title: "Undone", 23 + description: "The file has been restored.", 24 + }, 25 + { 26 + timeout: 3000, 27 + }, 28 + ); 29 + }, 30 + }, 31 + }, 32 + { 33 + timeout: 5000, 34 + }, 35 + ) 36 + } 37 + > 38 + Delete File 39 + </Button> 40 + </> 41 + ); 42 + }
+27
apps/docs/src/examples/toast/basic.tsx
··· 1 + "use client"; 2 + 3 + import { Button } from "@/components/button"; 4 + import { ToastRegion, toasts } from "@/components/toast"; 5 + 6 + export function Basic() { 7 + return ( 8 + <> 9 + <ToastRegion /> 10 + <Button 11 + onPress={() => 12 + toasts.add( 13 + { 14 + title: "Toast complete!", 15 + description: "Great success.", 16 + }, 17 + { 18 + timeout: 3000, 19 + }, 20 + ) 21 + } 22 + > 23 + Show Toast 24 + </Button> 25 + </> 26 + ); 27 + }
+84
apps/docs/src/examples/toast/icons.tsx
··· 1 + "use client"; 2 + 3 + import { CheckCircle, AlertCircle, XCircle, Info } from "lucide-react"; 4 + 5 + import { Button } from "@/components/button"; 6 + import { Flex } from "@/components/flex"; 7 + import { ToastRegion, toasts } from "@/components/toast"; 8 + 9 + export function Icons() { 10 + return ( 11 + <> 12 + <ToastRegion /> 13 + <Flex gap="4" wrap> 14 + <Button 15 + onPress={() => 16 + toasts.add( 17 + { 18 + variant: "success", 19 + icon: <CheckCircle />, 20 + title: "Success", 21 + description: "Your changes have been saved successfully.", 22 + }, 23 + { 24 + timeout: 3000, 25 + }, 26 + ) 27 + } 28 + > 29 + Show Success Toast 30 + </Button> 31 + <Button 32 + onPress={() => 33 + toasts.add( 34 + { 35 + icon: <Info />, 36 + title: "Information", 37 + description: "Here's some helpful information for you.", 38 + }, 39 + { 40 + timeout: 3000, 41 + }, 42 + ) 43 + } 44 + > 45 + Show Info Toast 46 + </Button> 47 + <Button 48 + onPress={() => 49 + toasts.add( 50 + { 51 + variant: "warning", 52 + icon: <AlertCircle />, 53 + title: "Warning", 54 + description: "Please review your input before submitting.", 55 + }, 56 + { 57 + timeout: 3000, 58 + }, 59 + ) 60 + } 61 + > 62 + Show Warning Toast 63 + </Button> 64 + <Button 65 + onPress={() => 66 + toasts.add( 67 + { 68 + variant: "critical", 69 + icon: <XCircle />, 70 + title: "Error", 71 + description: "Something went wrong. Please try again.", 72 + }, 73 + { 74 + timeout: 3000, 75 + }, 76 + ) 77 + } 78 + > 79 + Show Error Toast 80 + </Button> 81 + </Flex> 82 + </> 83 + ); 84 + }
+122
apps/docs/src/examples/tree/drag-and-drop.tsx
··· 1 + "use client"; 2 + 3 + import * as stylex from "@stylexjs/stylex"; 4 + import { useDragAndDrop } from "react-aria-components"; 5 + import { useTreeData } from "react-stately"; 6 + import { DropIndicator, DropIndicatorProps } from "react-aria-components"; 7 + 8 + import { Tree, TreeItem } from "@/components/tree"; 9 + import { primaryColor } from "../../components/theme/semantic-color.stylex"; 10 + 11 + const styles = stylex.create({ 12 + root: { 13 + width: "min(80%, 300px)", 14 + }, 15 + dropIndicator: { 16 + outlineColor: primaryColor.solid1, 17 + outlineStyle: "solid", 18 + outlineWidth: "1px", 19 + }, 20 + }); 21 + 22 + interface TreeItem { 23 + id: string; 24 + name: string; 25 + children?: TreeItem[]; 26 + } 27 + 28 + function TreeDropIndicator(props: DropIndicatorProps) { 29 + return <DropIndicator {...props} {...stylex.props(styles.dropIndicator)} />; 30 + } 31 + 32 + const initialItems: TreeItem[] = [ 33 + { 34 + id: "1", 35 + name: "Documents", 36 + children: [ 37 + { id: "1-1", name: "Project Proposal.pdf" }, 38 + { id: "1-2", name: "Meeting Notes.docx" }, 39 + { 40 + id: "1-3", 41 + name: "Designs", 42 + children: [ 43 + { id: "1-3-1", name: "Mockup.png" }, 44 + { id: "1-3-2", name: "Wireframe.pdf" }, 45 + ], 46 + }, 47 + ], 48 + }, 49 + { 50 + id: "2", 51 + name: "Images", 52 + children: [ 53 + { id: "2-1", name: "Photo1.jpg" }, 54 + { id: "2-2", name: "Photo2.jpg" }, 55 + ], 56 + }, 57 + { 58 + id: "3", 59 + name: "Videos", 60 + children: [{ id: "3-1", name: "Presentation.mp4" }], 61 + }, 62 + ]; 63 + 64 + export function DragAndDrop() { 65 + const tree = useTreeData({ 66 + initialItems, 67 + getKey: (item) => item.id, 68 + getChildren: (item) => item.children ?? [], 69 + }); 70 + 71 + const { dragAndDropHooks } = useDragAndDrop({ 72 + getItems: (keys) => 73 + Array.from(keys).map((key) => { 74 + const item = tree.getItem(key); 75 + return { 76 + "text/plain": item?.value.name ?? "", 77 + }; 78 + }), 79 + onMove(e) { 80 + if (e.target.dropPosition === "before") { 81 + tree.moveBefore(e.target.key, e.keys); 82 + } else if (e.target.dropPosition === "after") { 83 + tree.moveAfter(e.target.key, e.keys); 84 + } else if (e.target.dropPosition === "on") { 85 + // Move items to become children of the target 86 + let targetNode = tree.getItem(e.target.key); 87 + if (targetNode) { 88 + let targetIndex = targetNode.children 89 + ? targetNode.children.length 90 + : 0; 91 + let keyArray = Array.from(e.keys); 92 + for (let i = 0; i < keyArray.length; i++) { 93 + tree.move(keyArray[i], e.target.key, targetIndex + i); 94 + } 95 + } 96 + } 97 + }, 98 + renderDropIndicator(target) { 99 + return <TreeDropIndicator target={target} />; 100 + }, 101 + }); 102 + 103 + return ( 104 + <Tree 105 + style={styles.root} 106 + items={tree.items} 107 + dragAndDropHooks={dragAndDropHooks} 108 + > 109 + {function renderTreeItem(item): React.ReactNode { 110 + return ( 111 + <TreeItem 112 + key={item.value.id} 113 + id={item.value.id} 114 + title={item.value.name} 115 + > 116 + {item.children?.map((child) => renderTreeItem(child))} 117 + </TreeItem> 118 + ); 119 + }} 120 + </Tree> 121 + ); 122 + }
+1270
apps/docs/src/showcases/canvas-editor.tsx
··· 1 + "use client"; 2 + import "tldraw/tldraw.css"; 3 + import * as stylex from "@stylexjs/stylex"; 4 + import { 5 + Plus, 6 + MousePointer, 7 + Square, 8 + Hand, 9 + HelpCircle, 10 + Folder, 11 + ImageIcon, 12 + NotebookIcon, 13 + Pencil, 14 + ArrowRight, 15 + CaseSensitive, 16 + Eraser, 17 + ArrowUpRight, 18 + TypeIcon, 19 + NotebookText, 20 + Undo, 21 + Redo, 22 + Trash2, 23 + Copy, 24 + Layers2, 25 + Layers, 26 + Blend, 27 + SquareAsterisk, 28 + SquareDashed, 29 + Scan, 30 + PanelBottomDashed, 31 + TextAlignCenter, 32 + TextAlignEnd, 33 + TextAlignStart, 34 + AlignStartHorizontal, 35 + AlignCenterHorizontal, 36 + AlignEndHorizontal, 37 + TriangleRight, 38 + } from "lucide-react"; 39 + import { createContext, memo, use, useState } from "react"; 40 + import { useDragAndDrop } from "react-aria-components"; 41 + import { 42 + ArrowShapeUtil, 43 + Editor, 44 + TLArrowShape, 45 + Tldraw, 46 + TLGeoShape, 47 + TLShapeId, 48 + useActions, 49 + useValue, 50 + } from "tldraw"; 51 + 52 + import { 53 + Disclosure, 54 + DisclosurePanel, 55 + DisclosureTitle, 56 + } from "@/components/disclosure"; 57 + import { EditableText } from "@/components/editable-text"; 58 + import { Flex } from "@/components/flex"; 59 + import { Grid } from "@/components/grid"; 60 + import { IconButton } from "@/components/icon-button"; 61 + import { ListBox, ListBoxItem } from "@/components/listbox"; 62 + import { NumberField } from "@/components/number-field"; 63 + import { Select, SelectItem } from "@/components/select"; 64 + import { Separator } from "@/components/separator"; 65 + import { TableDropIndicator } from "@/components/table"; 66 + import { usePopoverStyles } from "@/components/theme/usePopoverStyles"; 67 + import { ToggleButton } from "@/components/toggle-button"; 68 + import { ToggleButtonGroup } from "@/components/toggle-button-group"; 69 + import { Toolbar, ToolbarGroup } from "@/components/toolbar"; 70 + import { Tooltip } from "@/components/tooltip"; 71 + import { Tree, TreeItem } from "@/components/tree"; 72 + import { Text } from "@/components/typography/text"; 73 + 74 + import { radius } from "../components/theme/radius.stylex"; 75 + import { uiColor } from "../components/theme/semantic-color.stylex"; 76 + import { shadow } from "../components/theme/shadow.stylex"; 77 + import { spacing } from "../components/theme/spacing.stylex"; 78 + 79 + const styles = stylex.create({ 80 + main: { 81 + backgroundColor: uiColor.bg, 82 + borderColor: uiColor.border2, 83 + borderRadius: radius.lg, 84 + borderStyle: "solid", 85 + borderWidth: 1, 86 + boxShadow: shadow.md, 87 + display: "flex", 88 + flexDirection: "column", 89 + height: 800, 90 + marginTop: spacing["16"], 91 + overflow: "hidden", 92 + position: "relative", 93 + width: 1200, 94 + }, 95 + editor: { 96 + flexGrow: 1, 97 + }, 98 + leftSidebar: { 99 + backgroundColor: uiColor.bgSubtle, 100 + borderRightColor: uiColor.border2, 101 + borderRightStyle: "solid", 102 + borderRightWidth: 1, 103 + display: "flex", 104 + flexDirection: "column", 105 + }, 106 + sidebarHeader: { 107 + borderBottomColor: uiColor.border2, 108 + borderBottomStyle: "solid", 109 + borderBottomWidth: 1, 110 + paddingBottom: spacing["3"], 111 + paddingLeft: spacing["4"], 112 + paddingRight: spacing["4"], 113 + paddingTop: spacing["3"], 114 + }, 115 + projectTitle: { 116 + alignItems: "center", 117 + display: "flex", 118 + gap: spacing["2"], 119 + }, 120 + 121 + bottom: { 122 + marginTop: "auto", 123 + }, 124 + sidebarTitle: { 125 + height: spacing["10"], 126 + paddingLeft: spacing["4"], 127 + paddingRight: spacing["2.5"], 128 + }, 129 + sidebarContent: { 130 + overflowY: "auto", 131 + }, 132 + grow: { 133 + flexBasis: "0%", 134 + flexGrow: 1, 135 + flexShrink: 1, 136 + minWidth: 0, 137 + }, 138 + canvasArea: { 139 + outline: "none", 140 + position: "relative", 141 + }, 142 + rightSidebar: { 143 + backgroundColor: uiColor.bgSubtle, 144 + borderLeftColor: uiColor.border2, 145 + borderLeftStyle: "solid", 146 + borderLeftWidth: 1, 147 + display: "flex", 148 + flexDirection: "column", 149 + overflow: "hidden", 150 + }, 151 + rightHeader: { 152 + alignItems: "center", 153 + borderBottomColor: uiColor.border2, 154 + borderBottomStyle: "solid", 155 + borderBottomWidth: 1, 156 + display: "flex", 157 + gap: spacing["2"], 158 + justifyContent: "space-between", 159 + paddingBottom: spacing["3"], 160 + paddingLeft: spacing["3"], 161 + paddingRight: spacing["3"], 162 + paddingTop: spacing["3"], 163 + }, 164 + bottomToolbar: { 165 + bottom: 0, 166 + display: "flex", 167 + justifyContent: "center", 168 + left: "50%", 169 + marginBottom: spacing["6"], 170 + position: "absolute", 171 + transform: "translateX(-50%)", 172 + width: "100%", 173 + }, 174 + sidebarFooter: { 175 + paddingBottom: spacing["3"], 176 + paddingLeft: spacing["4"], 177 + paddingRight: spacing["4"], 178 + paddingTop: spacing["1.5"], 179 + }, 180 + }); 181 + 182 + function getShapeName(editor: Editor, shapeId: TLShapeId) { 183 + const shape = editor.getShape(shapeId); 184 + 185 + if (!shape) return "Unknown shape"; 186 + 187 + return ( 188 + // meta.name is the first choice, then the shape's text, then the capitalized shape type 189 + (shape.meta.name as string) || 190 + editor.getShapeUtil(shape).getText(shape) || 191 + shape.type + " shape" 192 + ); 193 + } 194 + 195 + function ShapeTreeItem({ shapeId }: { shapeId: TLShapeId }) { 196 + const editor = useEditorContext(); 197 + 198 + const shape = useValue("shape", () => editor.getShape(shapeId), [editor]); 199 + const children = useValue( 200 + "children", 201 + () => editor.getSortedChildIdsForParent(shapeId), 202 + [editor], 203 + ); 204 + const shapeName = useValue("shapeName", () => getShapeName(editor, shapeId), [ 205 + editor, 206 + ]); 207 + 208 + return ( 209 + <TreeItem 210 + key={shapeId} 211 + id={shapeId} 212 + textValue={shapeName} 213 + title={ 214 + <EditableText 215 + onChange={(value) => { 216 + if (!shape?.type) return; 217 + editor.updateShape({ 218 + id: shapeId, 219 + type: shape.type, 220 + meta: { 221 + name: value, 222 + }, 223 + }); 224 + }} 225 + > 226 + {shapeName} 227 + </EditableText> 228 + } 229 + value={shape} 230 + prefix={ 231 + children.length > 0 ? ( 232 + <Folder /> 233 + ) : shape?.type === "text" ? ( 234 + <CaseSensitive /> 235 + ) : shape?.type === "image" ? ( 236 + <ImageIcon /> 237 + ) : shape?.type === "note" ? ( 238 + <NotebookIcon /> 239 + ) : shape?.type === "draw" ? ( 240 + <Pencil /> 241 + ) : shape?.type === "arrow" ? ( 242 + <ArrowRight /> 243 + ) : shape?.type === "geo" ? ( 244 + <Square /> 245 + ) : null 246 + } 247 + > 248 + {children.map((childId) => ( 249 + <ShapeTreeItem key={childId} shapeId={childId} /> 250 + ))} 251 + </TreeItem> 252 + ); 253 + } 254 + 255 + function ShapeTree() { 256 + const editor = useEditorContext(); 257 + const selectedShapeIds = useValue( 258 + "selectedShapeIds", 259 + () => editor.getSelectedShapeIds(), 260 + [editor], 261 + ); 262 + const shapeIds = useValue( 263 + "shapeIds", 264 + () => editor.getSortedChildIdsForParent(editor.getCurrentPageId()), 265 + [editor], 266 + ); 267 + const { dragAndDropHooks } = useDragAndDrop<TLShapeId>({ 268 + getItems: (_, items) => { 269 + return items.map((item) => { 270 + const shape = editor.getShape(item); 271 + if (!shape) return { "text/plain": "" }; 272 + return { 273 + "text/plain": `${shape.type} ${shape.typeName}`, 274 + }; 275 + }); 276 + }, 277 + onMove(e) { 278 + const targetShape = editor.getShape(e.target.key as TLShapeId); 279 + const draggedShapeIds = [...e.keys] as TLShapeId[]; 280 + 281 + if (!targetShape || draggedShapeIds.length === 0) return; 282 + if (draggedShapeIds.includes(e.target.key as TLShapeId)) return; 283 + 284 + const parentId = targetShape.parentId; 285 + const draggedShapes = draggedShapeIds 286 + .map((id) => editor.getShape(id)) 287 + .filter( 288 + (shape): shape is NonNullable<typeof shape> => shape !== undefined, 289 + ); 290 + 291 + if (draggedShapes.length === 0) return; 292 + 293 + if (e.target.dropPosition === "before") { 294 + const firstIndex = targetShape.index; 295 + editor.reparentShapes(draggedShapeIds, parentId, firstIndex); 296 + 297 + if (parentId && draggedShapeIds[0]) { 298 + editor.reparentShapes( 299 + [targetShape.id], 300 + parentId, 301 + editor.getShape(draggedShapeIds[0])?.index, 302 + ); 303 + } 304 + } else { 305 + editor.reparentShapes(draggedShapeIds, parentId, targetShape.index); 306 + } 307 + }, 308 + renderDropIndicator(target) { 309 + return <TableDropIndicator target={target} />; 310 + }, 311 + }); 312 + 313 + return ( 314 + <Tree 315 + aria-labelledby="layers-title" 316 + selectionMode="multiple" 317 + selectionBehavior="replace" 318 + dragAndDropHooks={dragAndDropHooks} 319 + selectedKeys={selectedShapeIds} 320 + onSelectionChange={(keys) => { 321 + if (keys === "all") return; 322 + editor.select(...([...keys] as TLShapeId[])); 323 + }} 324 + > 325 + {shapeIds.map((shapeId) => ( 326 + <ShapeTreeItem key={shapeId} shapeId={shapeId} /> 327 + ))} 328 + </Tree> 329 + ); 330 + } 331 + 332 + function ZoomControl() { 333 + const editor = useEditorContext(); 334 + const zoom = useValue("zoom", () => editor.getZoomLevel(), [editor]); 335 + 336 + return ( 337 + <NumberField 338 + aria-label="Zoom level" 339 + value={zoom} 340 + formatOptions={{ 341 + style: "percent", 342 + minimumFractionDigits: 0, 343 + maximumFractionDigits: 0, 344 + }} 345 + onChange={(v) => { 346 + editor.setCamera({ 347 + ...editor.getCamera(), 348 + z: v, 349 + }); 350 + }} 351 + /> 352 + ); 353 + } 354 + 355 + function LeftSidebar() { 356 + const editor = useEditorContext(); 357 + const [projectName, setProjectName] = useState("Untitled"); 358 + const pages = useValue("pageIds", () => editor.getPages(), [editor]); 359 + const currentPage = useValue("currentPage", () => editor.getCurrentPage(), [ 360 + editor, 361 + ]); 362 + 363 + return ( 364 + <div {...stylex.props(styles.leftSidebar)}> 365 + <div {...stylex.props(styles.sidebarHeader)}> 366 + <Flex direction="column" gap="1"> 367 + <div {...stylex.props(styles.projectTitle)}> 368 + <Text size="base" weight="medium"> 369 + <EditableText onChange={(value) => setProjectName(value)}> 370 + {projectName} 371 + </EditableText> 372 + </Text> 373 + </div> 374 + </Flex> 375 + </div> 376 + 377 + <Flex 378 + direction="column" 379 + gap="2" 380 + style={[styles.sidebarContent, styles.grow]} 381 + > 382 + <Flex direction="column"> 383 + <Flex 384 + direction="row" 385 + gap="2" 386 + justify="between" 387 + align="center" 388 + style={styles.sidebarTitle} 389 + > 390 + <Text 391 + size="sm" 392 + weight="semibold" 393 + variant="secondary" 394 + id="pages-title" 395 + > 396 + Pages 397 + </Text> 398 + <IconButton 399 + aria-label="Add page" 400 + size="sm" 401 + variant="tertiary" 402 + onPress={() => { 403 + editor.createPage({ name: "Page 1" }); 404 + const newPage = editor.getPages().at(-1); 405 + if (newPage) { 406 + editor.setCurrentPage(newPage.id); 407 + } 408 + }} 409 + > 410 + <Plus size={16} /> 411 + </IconButton> 412 + </Flex> 413 + <ListBox 414 + aria-label="Pages" 415 + items={pages} 416 + selectionMode="single" 417 + selectedKeys={[currentPage.id]} 418 + onSelectionChange={(keys) => { 419 + if (keys === "all") return; 420 + const page = pages.find((page) => page.id === [...keys][0]); 421 + if (page) { 422 + editor.setCurrentPage(page); 423 + } 424 + }} 425 + > 426 + {(page) => ( 427 + <ListBoxItem key={page.id} id={page.id}> 428 + <EditableText 429 + onChange={(value) => { 430 + editor.updatePage({ 431 + id: page.id, 432 + name: value, 433 + }); 434 + }} 435 + > 436 + {page.name} 437 + </EditableText> 438 + </ListBoxItem> 439 + )} 440 + </ListBox> 441 + </Flex> 442 + 443 + <Separator /> 444 + 445 + <Flex direction="column"> 446 + <Flex 447 + direction="row" 448 + gap="2" 449 + justify="between" 450 + align="center" 451 + style={styles.sidebarTitle} 452 + > 453 + <Text 454 + size="sm" 455 + weight="semibold" 456 + variant="secondary" 457 + id="layers-title" 458 + > 459 + Layers 460 + </Text> 461 + </Flex> 462 + <ShapeTree /> 463 + </Flex> 464 + 465 + <Separator style={styles.bottom} /> 466 + <Flex direction="column" gap="4" style={styles.sidebarFooter}> 467 + <ZoomControl /> 468 + </Flex> 469 + </Flex> 470 + </div> 471 + ); 472 + } 473 + 474 + function ArrowProperties() { 475 + const editor = useEditorContext(); 476 + const s = useValue("shape", () => editor.getSelectedShapes()[0], [editor]); 477 + 478 + if (!s || s.type !== ArrowShapeUtil.type) return null; 479 + 480 + const shape = s as TLArrowShape; 481 + 482 + return ( 483 + <> 484 + <Disclosure defaultExpanded> 485 + <DisclosureTitle> 486 + <Text size="sm" weight="semibold"> 487 + Arrow Properties 488 + </Text> 489 + </DisclosureTitle> 490 + <DisclosurePanel> 491 + <Flex direction="column" gap="3"> 492 + <Select 493 + label="Line Style" 494 + value={shape.props.kind} 495 + onChange={(value) => { 496 + editor.updateShape({ 497 + id: shape.id, 498 + type: shape.type, 499 + props: { kind: value }, 500 + }); 501 + }} 502 + > 503 + <SelectItem id="arc">Arc</SelectItem> 504 + <SelectItem id="elbow">Elbow</SelectItem> 505 + </Select> 506 + <Flex direction="row" gap="2"> 507 + <Select 508 + label="Start Arrow" 509 + style={styles.grow} 510 + value={shape.props.arrowheadStart} 511 + onChange={(value) => { 512 + editor.updateShape({ 513 + id: shape.id, 514 + type: shape.type, 515 + props: { arrowheadStart: value }, 516 + }); 517 + }} 518 + > 519 + <SelectItem id="none">None</SelectItem> 520 + <SelectItem id="arrow">Arrow</SelectItem> 521 + <SelectItem id="triangle">Triangle</SelectItem> 522 + <SelectItem id="triangle">Triangle</SelectItem> 523 + <SelectItem id="square">Square</SelectItem> 524 + <SelectItem id="dot">Dot</SelectItem> 525 + <SelectItem id="diamond">Diamond</SelectItem> 526 + <SelectItem id="inverted">Inverted</SelectItem> 527 + <SelectItem id="bar">Bar</SelectItem> 528 + </Select> 529 + <Select 530 + label="End Arrow" 531 + style={styles.grow} 532 + value={shape.props.arrowheadEnd} 533 + onChange={(value) => { 534 + editor.updateShape({ 535 + id: shape.id, 536 + type: shape.type, 537 + props: { arrowheadEnd: value }, 538 + }); 539 + }} 540 + > 541 + <SelectItem id="none">None</SelectItem> 542 + <SelectItem id="arrow">Arrow</SelectItem> 543 + <SelectItem id="triangle">Triangle</SelectItem> 544 + <SelectItem id="triangle">Triangle</SelectItem> 545 + <SelectItem id="square">Square</SelectItem> 546 + <SelectItem id="dot">Dot</SelectItem> 547 + <SelectItem id="diamond">Diamond</SelectItem> 548 + <SelectItem id="inverted">Inverted</SelectItem> 549 + <SelectItem id="bar">Bar</SelectItem> 550 + </Select> 551 + </Flex> 552 + </Flex> 553 + </DisclosurePanel> 554 + </Disclosure> 555 + <Separator /> 556 + </> 557 + ); 558 + } 559 + 560 + function GeometricShapeProperties() { 561 + const editor = useEditorContext(); 562 + const s = useValue("shape", () => editor.getSelectedShapes()[0], [editor]); 563 + 564 + if (!s || s.type !== "geo") return null; 565 + 566 + const shape = s as TLGeoShape; 567 + 568 + return ( 569 + <> 570 + <Disclosure defaultExpanded> 571 + <DisclosureTitle> 572 + <Text size="sm" weight="semibold"> 573 + Shape 574 + </Text> 575 + </DisclosureTitle> 576 + <DisclosurePanel> 577 + <Flex direction="column" gap="2"> 578 + <Select 579 + aria-label="Shape type" 580 + value={shape.props.geo} 581 + onChange={(value) => { 582 + editor.updateShape({ 583 + id: shape.id, 584 + type: shape.type, 585 + props: { geo: value }, 586 + }); 587 + }} 588 + > 589 + <SelectItem id="rectangle">Rectangle</SelectItem> 590 + <SelectItem id="ellipse">Ellipse</SelectItem> 591 + <SelectItem id="triangle">Triangle</SelectItem> 592 + <SelectItem id="diamond">Diamond</SelectItem> 593 + <SelectItem id="star">star</SelectItem> 594 + <SelectItem id="pentagon">pentagon</SelectItem> 595 + <SelectItem id="hexagon">hexagon</SelectItem> 596 + <SelectItem id="octagon">octagon</SelectItem> 597 + <SelectItem id="rhombus">rhombus</SelectItem> 598 + <SelectItem id="rhombus-left">rhombus-left</SelectItem> 599 + <SelectItem id="oval">oval</SelectItem> 600 + <SelectItem id="arrow-left">arrow-left</SelectItem> 601 + <SelectItem id="arrow-right">arrow-right</SelectItem> 602 + <SelectItem id="arrow-up">arrow-up</SelectItem> 603 + <SelectItem id="arrow-down">arrow-down</SelectItem> 604 + <SelectItem id="cloud">cloud</SelectItem> 605 + <SelectItem id="x-box">x-box</SelectItem> 606 + <SelectItem id="check-box">check-box</SelectItem> 607 + <SelectItem id="heart">heart</SelectItem> 608 + </Select> 609 + </Flex> 610 + </DisclosurePanel> 611 + </Disclosure> 612 + <Separator /> 613 + </> 614 + ); 615 + } 616 + 617 + function AppearanceProperties() { 618 + const editor = useEditorContext(); 619 + const shape = useValue("shape", () => editor.getSelectedShapes()[0], [ 620 + editor, 621 + ]); 622 + 623 + if ( 624 + !shape || 625 + !("size" in shape.props && "fill" in shape.props && "dash" in shape.props) 626 + ) { 627 + return null; 628 + } 629 + 630 + return ( 631 + <> 632 + <Disclosure defaultExpanded> 633 + <DisclosureTitle> 634 + <Text size="sm" weight="semibold"> 635 + Appearance 636 + </Text> 637 + </DisclosureTitle> 638 + <DisclosurePanel> 639 + <Flex direction="column" gap="2"> 640 + <ToggleButtonGroup 641 + variant="separate" 642 + itemsPerRow={4} 643 + selectedKeys={[shape.props.size]} 644 + onSelectionChange={(keys) => { 645 + const newSize = [...keys][0]; 646 + if (newSize) { 647 + editor.updateShape({ 648 + id: shape.id, 649 + type: shape.type, 650 + props: { 651 + size: newSize, 652 + }, 653 + }); 654 + } 655 + }} 656 + > 657 + <Tooltip text="Small"> 658 + <ToggleButton id="s" variant="outline"> 659 + S 660 + </ToggleButton> 661 + </Tooltip> 662 + <Tooltip text="Medium"> 663 + <ToggleButton id="m" variant="outline"> 664 + M 665 + </ToggleButton> 666 + </Tooltip> 667 + <Tooltip text="Large"> 668 + <ToggleButton id="l" variant="outline"> 669 + L 670 + </ToggleButton> 671 + </Tooltip> 672 + <Tooltip text="Solid"> 673 + <ToggleButton id="xl" variant="outline"> 674 + XL 675 + </ToggleButton> 676 + </Tooltip> 677 + </ToggleButtonGroup> 678 + <ToggleButtonGroup 679 + variant="separate" 680 + itemsPerRow={4} 681 + selectedKeys={[shape.props.fill]} 682 + onSelectionChange={(keys) => { 683 + const newFill = [...keys][0]; 684 + if (newFill) { 685 + editor.updateShape({ 686 + id: shape.id, 687 + type: shape.type, 688 + props: { 689 + fill: newFill, 690 + }, 691 + }); 692 + } 693 + }} 694 + > 695 + <Tooltip text="Fill: None"> 696 + <ToggleButton id="none" variant="outline"> 697 + <Blend /> 698 + </ToggleButton> 699 + </Tooltip> 700 + <Tooltip text="Fill: Partial"> 701 + <ToggleButton id="semi" variant="outline"> 702 + <Layers2 /> 703 + </ToggleButton> 704 + </Tooltip> 705 + <Tooltip text="Fill: Solid"> 706 + <ToggleButton id="solid" variant="outline"> 707 + <Layers /> 708 + </ToggleButton> 709 + </Tooltip> 710 + <Tooltip text="Fill: Pattern"> 711 + <ToggleButton id="pattern" variant="outline"> 712 + <SquareAsterisk /> 713 + </ToggleButton> 714 + </Tooltip> 715 + </ToggleButtonGroup> 716 + <ToggleButtonGroup 717 + variant="separate" 718 + itemsPerRow={4} 719 + selectedKeys={[shape.props.dash]} 720 + onSelectionChange={(keys) => { 721 + const newStroke = [...keys][0]; 722 + if (newStroke) { 723 + editor.updateShape({ 724 + id: shape.id, 725 + type: shape.type, 726 + props: { 727 + dash: newStroke, 728 + }, 729 + }); 730 + } 731 + }} 732 + > 733 + <Tooltip text="Stroke: Dashed"> 734 + <ToggleButton id="dashed" variant="outline"> 735 + <PanelBottomDashed /> 736 + </ToggleButton> 737 + </Tooltip> 738 + <Tooltip text="Stroke: Draw"> 739 + <ToggleButton id="draw" variant="outline"> 740 + <Scan /> 741 + </ToggleButton> 742 + </Tooltip> 743 + <Tooltip text="Stroke: Dotted"> 744 + <ToggleButton id="dotted" variant="outline"> 745 + <SquareDashed /> 746 + </ToggleButton> 747 + </Tooltip> 748 + <Tooltip text="Stroke: Solid"> 749 + <ToggleButton id="solid" variant="outline"> 750 + <Square /> 751 + </ToggleButton> 752 + </Tooltip> 753 + </ToggleButtonGroup> 754 + </Flex> 755 + </DisclosurePanel> 756 + </Disclosure> 757 + <Separator /> 758 + </> 759 + ); 760 + } 761 + 762 + function FontSettingsProperties() { 763 + const editor = useEditorContext(); 764 + const shapeId = useValue("shapeId", () => editor.getSelectedShapes()[0]?.id, [ 765 + editor, 766 + ]); 767 + const shapeType = useValue( 768 + "shapeType", 769 + () => editor.getSelectedShapes()[0]?.type, 770 + [editor], 771 + ); 772 + const fontFamily = useValue( 773 + "fontFamily", 774 + () => { 775 + if (!shapeId) return null; 776 + const shape = editor.getShape(shapeId); 777 + if (!shape || !("font" in shape.props)) return null; 778 + return shape.props.font; 779 + }, 780 + [editor], 781 + ); 782 + const align = useValue( 783 + "align", 784 + () => { 785 + if (!shapeId) return null; 786 + const shape = editor.getShape(shapeId); 787 + if (!shape || !("align" in shape.props)) return null; 788 + return shape.props.align; 789 + }, 790 + [editor], 791 + ); 792 + const verticalAlign = useValue( 793 + "verticalAlign", 794 + () => { 795 + if (!shapeId) return null; 796 + const shape = editor.getShape(shapeId); 797 + if (!shape || !("verticalAlign" in shape.props)) return null; 798 + return shape.props.verticalAlign; 799 + }, 800 + [editor], 801 + ); 802 + 803 + if (!fontFamily || !shapeId || !shapeType) { 804 + return null; 805 + } 806 + 807 + return ( 808 + <> 809 + <Disclosure defaultExpanded> 810 + <DisclosureTitle> 811 + <Text size="sm" weight="semibold"> 812 + Font Settings 813 + </Text> 814 + </DisclosureTitle> 815 + <DisclosurePanel> 816 + <Flex direction="column" gap="2"> 817 + <Select 818 + label="Family" 819 + placeholder="Select font family" 820 + value={fontFamily} 821 + onChange={(value) => { 822 + editor.updateShape({ 823 + id: shapeId, 824 + type: shapeType, 825 + props: { font: value }, 826 + }); 827 + }} 828 + > 829 + <SelectItem id="draw">Draw</SelectItem> 830 + <SelectItem id="sans">Sans</SelectItem> 831 + <SelectItem id="serif">Serif</SelectItem> 832 + <SelectItem id="mono">Mono</SelectItem> 833 + </Select> 834 + {align && ( 835 + <ToggleButtonGroup 836 + variant="separate" 837 + itemsPerRow={4} 838 + selectedKeys={[align]} 839 + onSelectionChange={(keys) => { 840 + const newAlign = [...keys][0]; 841 + if (newAlign) { 842 + editor.updateShape({ 843 + id: shapeId, 844 + type: shapeType, 845 + props: { align: newAlign }, 846 + }); 847 + } 848 + }} 849 + > 850 + <Tooltip text="Align: Start"> 851 + <ToggleButton id="start" variant="outline"> 852 + <TextAlignStart /> 853 + </ToggleButton> 854 + </Tooltip> 855 + <Tooltip text="Align: Middle"> 856 + <ToggleButton id="middle" variant="outline"> 857 + <TextAlignCenter /> 858 + </ToggleButton> 859 + </Tooltip> 860 + <Tooltip text="Align: End"> 861 + <ToggleButton id="end" variant="outline"> 862 + <TextAlignEnd /> 863 + </ToggleButton> 864 + </Tooltip> 865 + </ToggleButtonGroup> 866 + )} 867 + {verticalAlign && ( 868 + <ToggleButtonGroup 869 + variant="separate" 870 + itemsPerRow={4} 871 + selectedKeys={[verticalAlign]} 872 + onSelectionChange={(keys) => { 873 + const newAlign = [...keys][0]; 874 + if (newAlign) { 875 + editor.updateShape({ 876 + id: shapeId, 877 + type: shapeType, 878 + props: { verticalAlign: newAlign }, 879 + }); 880 + } 881 + }} 882 + > 883 + <Tooltip text="Vertical Align: Start"> 884 + <ToggleButton id="start" variant="outline"> 885 + <AlignStartHorizontal /> 886 + </ToggleButton> 887 + </Tooltip> 888 + <Tooltip text="Vertical Align: Middle"> 889 + <ToggleButton id="middle" variant="outline"> 890 + <AlignCenterHorizontal /> 891 + </ToggleButton> 892 + </Tooltip> 893 + <Tooltip text="Vertical Align: End"> 894 + <ToggleButton id="end" variant="outline"> 895 + <AlignEndHorizontal /> 896 + </ToggleButton> 897 + </Tooltip> 898 + </ToggleButtonGroup> 899 + )} 900 + </Flex> 901 + </DisclosurePanel> 902 + </Disclosure> 903 + <Separator /> 904 + </> 905 + ); 906 + } 907 + 908 + function DimensionsProperties() { 909 + const editor = useEditorContext(); 910 + const shape = useValue("shape", () => editor.getSelectedShapes()[0], [ 911 + editor, 912 + ]); 913 + 914 + if (!shape) { 915 + return null; 916 + } 917 + 918 + return ( 919 + <> 920 + <Disclosure defaultExpanded> 921 + <DisclosureTitle> 922 + <Text size="sm" weight="semibold"> 923 + Dimensions 924 + </Text> 925 + </DisclosureTitle> 926 + <DisclosurePanel> 927 + <Flex direction="column" gap="2"> 928 + <Flex direction="row" gap="2"> 929 + <NumberField 930 + aria-label="X position" 931 + hideStepper 932 + style={styles.grow} 933 + value={shape.x} 934 + prefix={ 935 + <Text size="xs" weight="semibold" variant="secondary"> 936 + X 937 + </Text> 938 + } 939 + onChange={(x) => { 940 + editor.updateShape({ 941 + id: shape.id, 942 + type: shape.type, 943 + x, 944 + }); 945 + }} 946 + /> 947 + <NumberField 948 + aria-label="Y position" 949 + hideStepper 950 + style={styles.grow} 951 + value={shape.y} 952 + prefix={ 953 + <Text size="xs" weight="semibold" variant="secondary"> 954 + Y 955 + </Text> 956 + } 957 + onChange={(y) => { 958 + editor.updateShape({ 959 + id: shape.id, 960 + type: shape.type, 961 + y, 962 + }); 963 + }} 964 + /> 965 + </Flex> 966 + {"w" in shape.props && "h" in shape.props && ( 967 + <Flex direction="row" gap="2"> 968 + <NumberField 969 + aria-label="Width" 970 + hideStepper 971 + style={styles.grow} 972 + value={shape.props.w} 973 + prefix={ 974 + <Text size="xs" weight="semibold" variant="secondary"> 975 + W 976 + </Text> 977 + } 978 + onChange={(w) => { 979 + editor.updateShape({ 980 + id: shape.id, 981 + type: shape.type, 982 + props: { w }, 983 + }); 984 + }} 985 + /> 986 + <NumberField 987 + aria-label="Height" 988 + hideStepper 989 + style={styles.grow} 990 + value={shape.props.h} 991 + prefix={ 992 + <Text size="xs" weight="semibold" variant="secondary"> 993 + H 994 + </Text> 995 + } 996 + onChange={(h) => { 997 + editor.updateShape({ 998 + id: shape.id, 999 + type: shape.type, 1000 + props: { h }, 1001 + }); 1002 + }} 1003 + /> 1004 + </Flex> 1005 + )} 1006 + <Flex direction="row" gap="2"> 1007 + <NumberField 1008 + aria-label="Rotation" 1009 + hideStepper 1010 + style={styles.grow} 1011 + value={shape.rotation * (180 / Math.PI)} 1012 + prefix={<TriangleRight />} 1013 + onChange={(rotation) => { 1014 + editor.updateShape({ 1015 + id: shape.id, 1016 + type: shape.type, 1017 + rotation: rotation * (Math.PI / 180), 1018 + }); 1019 + }} 1020 + /> 1021 + <div {...stylex.props(styles.grow)} /> 1022 + </Flex> 1023 + </Flex> 1024 + </DisclosurePanel> 1025 + </Disclosure> 1026 + <Separator /> 1027 + </> 1028 + ); 1029 + } 1030 + 1031 + const RightSidebar = memo(function RightSidebar() { 1032 + const editor = useEditorContext(); 1033 + const shapeTitles = useValue( 1034 + "shapeTitles", 1035 + () => editor.getSelectedShapes().map((shape) => shape.typeName), 1036 + [editor], 1037 + ); 1038 + 1039 + if (shapeTitles.length > 1) { 1040 + return ( 1041 + <div {...stylex.props(styles.rightSidebar)}> 1042 + <Text size="sm" weight="semibold"> 1043 + {shapeTitles.length} shapes selected 1044 + </Text> 1045 + </div> 1046 + ); 1047 + } 1048 + 1049 + const shapeTitle = shapeTitles[0]; 1050 + 1051 + if (!shapeTitle) { 1052 + return ( 1053 + <div {...stylex.props(styles.rightSidebar)}> 1054 + <div {...stylex.props(styles.rightHeader)}> 1055 + <Text size="sm" weight="semibold"> 1056 + No shape selected 1057 + </Text> 1058 + </div> 1059 + </div> 1060 + ); 1061 + } 1062 + 1063 + return ( 1064 + <div {...stylex.props(styles.rightSidebar)}> 1065 + <div {...stylex.props(styles.rightHeader)}> 1066 + <Text size="sm" weight="semibold"> 1067 + {shapeTitle} 1068 + </Text> 1069 + </div> 1070 + 1071 + <DimensionsProperties /> 1072 + <AppearanceProperties /> 1073 + <FontSettingsProperties /> 1074 + <ArrowProperties /> 1075 + <GeometricShapeProperties /> 1076 + </div> 1077 + ); 1078 + }); 1079 + 1080 + function BottomToolbar() { 1081 + const popoverStyles = usePopoverStyles(); 1082 + const editor = useEditorContext(); 1083 + const selectedToolId = useValue( 1084 + "selectedTool", 1085 + () => editor.getCurrentToolId(), 1086 + [editor], 1087 + ); 1088 + const canUndo = useValue("canUndo", () => editor.getCanUndo(), [editor]); 1089 + const canRedo = useValue("canRedo", () => editor.getCanRedo(), [editor]); 1090 + 1091 + const actions = useActions(); 1092 + 1093 + return ( 1094 + <div {...stylex.props(styles.bottomToolbar)}> 1095 + <Toolbar orientation="horizontal"> 1096 + <div {...stylex.props(popoverStyles.wrapper)}> 1097 + <IconButton 1098 + aria-label="Undo" 1099 + size="lg" 1100 + variant="tertiary" 1101 + isDisabled={!canUndo} 1102 + onPress={() => void actions.undo?.onSelect("actions-menu")} 1103 + > 1104 + <Undo /> 1105 + </IconButton> 1106 + <IconButton 1107 + aria-label="Redo" 1108 + size="lg" 1109 + variant="tertiary" 1110 + isDisabled={!canRedo} 1111 + onPress={() => void actions.redo?.onSelect("actions-menu")} 1112 + > 1113 + <Redo /> 1114 + </IconButton> 1115 + </div> 1116 + <div {...stylex.props(popoverStyles.wrapper)}> 1117 + <IconButton 1118 + aria-label="Undo" 1119 + size="lg" 1120 + variant="tertiary" 1121 + onPress={() => void actions.delete?.onSelect("actions-menu")} 1122 + > 1123 + <Trash2 /> 1124 + </IconButton> 1125 + <IconButton 1126 + aria-label="Redo" 1127 + size="lg" 1128 + variant="tertiary" 1129 + onPress={() => void actions.duplicate?.onSelect("actions-menu")} 1130 + > 1131 + <Copy /> 1132 + </IconButton> 1133 + </div> 1134 + <div {...stylex.props(popoverStyles.wrapper)}> 1135 + <ToolbarGroup> 1136 + <ToggleButtonGroup 1137 + selectionMode="single" 1138 + defaultSelectedKeys={[selectedToolId]} 1139 + onSelectionChange={(keys) => { 1140 + const newToolId = [...keys][0]; 1141 + 1142 + if (newToolId) { 1143 + editor.setCurrentTool(newToolId as string); 1144 + } 1145 + }} 1146 + > 1147 + <ToggleButton 1148 + id="select" 1149 + aria-label="Select" 1150 + variant={selectedToolId === "select" ? "primary" : "tertiary"} 1151 + size="lg" 1152 + > 1153 + <MousePointer /> 1154 + </ToggleButton> 1155 + <ToggleButton 1156 + id="hand" 1157 + aria-label="Move" 1158 + variant={selectedToolId === "hand" ? "primary" : "tertiary"} 1159 + size="lg" 1160 + > 1161 + <Hand /> 1162 + </ToggleButton> 1163 + <ToggleButton 1164 + id="draw" 1165 + aria-label="Draw" 1166 + variant={selectedToolId === "draw" ? "primary" : "tertiary"} 1167 + size="lg" 1168 + > 1169 + <Pencil /> 1170 + </ToggleButton> 1171 + <ToggleButton 1172 + id="eraser" 1173 + aria-label="Erase" 1174 + variant={selectedToolId === "eraser" ? "primary" : "tertiary"} 1175 + size="lg" 1176 + > 1177 + <Eraser /> 1178 + </ToggleButton> 1179 + <ToggleButton 1180 + id="arrow" 1181 + aria-label="Arrow" 1182 + variant={selectedToolId === "arrow" ? "primary" : "tertiary"} 1183 + size="lg" 1184 + > 1185 + <ArrowUpRight /> 1186 + </ToggleButton> 1187 + <ToggleButton 1188 + id="text" 1189 + aria-label="Type" 1190 + variant={selectedToolId === "text" ? "primary" : "tertiary"} 1191 + size="lg" 1192 + > 1193 + <TypeIcon /> 1194 + </ToggleButton> 1195 + <ToggleButton 1196 + id="note" 1197 + aria-label="Note" 1198 + variant={selectedToolId === "note" ? "primary" : "tertiary"} 1199 + size="lg" 1200 + > 1201 + <NotebookText /> 1202 + </ToggleButton> 1203 + <ToggleButton 1204 + id="geo" 1205 + aria-label="Geo" 1206 + variant={selectedToolId === "geo" ? "primary" : "tertiary"} 1207 + size="lg" 1208 + > 1209 + <Square /> 1210 + </ToggleButton> 1211 + </ToggleButtonGroup> 1212 + </ToolbarGroup> 1213 + </div> 1214 + <div {...stylex.props(popoverStyles.wrapper)}> 1215 + <ToolbarGroup> 1216 + <IconButton aria-label="Help" size="lg" variant="tertiary"> 1217 + <HelpCircle /> 1218 + </IconButton> 1219 + </ToolbarGroup> 1220 + </div> 1221 + </Toolbar> 1222 + </div> 1223 + ); 1224 + } 1225 + 1226 + const EditorContext = createContext<Editor | null>(null); 1227 + function useEditorContext() { 1228 + const editor = use(EditorContext); 1229 + if (!editor) { 1230 + throw new Error("Editor context not found"); 1231 + } 1232 + return editor; 1233 + } 1234 + 1235 + export function CanvasEditor() { 1236 + const [editor, setEditor] = useState<Editor | null>(null); 1237 + 1238 + return ( 1239 + <div {...stylex.props(styles.main)}> 1240 + <Grid columns="240px 1fr 240px" style={styles.editor}> 1241 + {editor && ( 1242 + <EditorContext value={editor}> 1243 + <LeftSidebar /> 1244 + </EditorContext> 1245 + )} 1246 + <Tldraw 1247 + {...stylex.props(styles.canvasArea)} 1248 + onMount={(editor) => setEditor(editor)} 1249 + components={{ 1250 + Toolbar: null, 1251 + NavigationPanel: null, 1252 + // MenuPanel: null, 1253 + StylePanel: null, 1254 + }} 1255 + > 1256 + {editor && ( 1257 + <EditorContext value={editor}> 1258 + <BottomToolbar /> 1259 + </EditorContext> 1260 + )} 1261 + </Tldraw> 1262 + {editor && ( 1263 + <EditorContext value={editor}> 1264 + <RightSidebar /> 1265 + </EditorContext> 1266 + )} 1267 + </Grid> 1268 + </div> 1269 + ); 1270 + }
+1
apps/docs/tsconfig.json
··· 20 20 "noUnusedParameters": true, 21 21 "noFallthroughCasesInSwitch": true, 22 22 "noUncheckedSideEffectImports": true, 23 + "noUncheckedIndexedAccess": true, 23 24 "baseUrl": ".", 24 25 "paths": { 25 26 "@/*": ["./src/*"],
+4
packages/hip-ui/src/cli/install.tsx
··· 35 35 import { disclosureGroupConfig } from "../components/disclosure-group/disclosure-group-config.js"; 36 36 import { disclosureConfig } from "../components/disclosure/disclosure-config.js"; 37 37 import { drawerConfig } from "../components/drawer/drawer-config.js"; 38 + import { editableTextConfig } from "../components/editable-text/editable-text-config.js"; 38 39 import { fileDropZoneConfig } from "../components/file-drop-zone/file-drop-zone-config.js"; 39 40 import { flexConfig } from "../components/flex/flex-config.js"; 40 41 import { formConfig } from "../components/form/form-config.js"; ··· 68 69 import { textAreaConfig } from "../components/text-area/text-area-config.js"; 69 70 import { textFieldConfig } from "../components/text-field/text-field-config.js"; 70 71 import { timeFieldConfig } from "../components/time-field/time-field-config.js"; 72 + import { toastConfig } from "../components/toast/toast-config.js"; 71 73 import { toggleButtonGroupConfig } from "../components/toggle-button-group/toggle-button-group-config.js"; 72 74 import { toggleButtonConfig } from "../components/toggle-button/toggle-button-config.js"; 73 75 import { toolbarConfig } from "../components/toolbar/toolbar-config.js"; ··· 146 148 rangeCalendarConfig, 147 149 tabsConfig, 148 150 drawerConfig, 151 + editableTextConfig, 152 + toastConfig, 149 153 ]; 150 154 151 155 function StringSetting({
+13 -15
packages/hip-ui/src/components/disclosure/index.tsx
··· 45 45 gap: spacing["2"], 46 46 justifyContent: "space-between", 47 47 padding: { 48 - ":is([data-size=sm] *)": `${spacing["2"]} ${spacing["3"]}`, 49 - ":is([data-size=md] *)": `${spacing["3"]} ${spacing["4"]}`, 50 - ":is([data-size=lg] *)": `${spacing["4"]} ${spacing["5"]}`, 48 + ":is([data-size=sm] *)": `${spacing["2"]} ${spacing["2"]}`, 49 + ":is([data-size=md] *)": `${spacing["3"]} ${spacing["3"]}`, 50 + ":is([data-size=lg] *)": `${spacing["4"]} ${spacing["4"]}`, 51 51 }, 52 52 textAlign: "left", 53 53 transitionDuration: animationDuration.fast, ··· 91 91 }, 92 92 panelContent: { 93 93 padding: { 94 - ":is([data-size=sm] *)": `${spacing["2"]} ${spacing["3"]}`, 95 - ":is([data-size=md] *)": `${spacing["3"]} ${spacing["4"]}`, 96 - ":is([data-size=lg] *)": `${spacing["4"]} ${spacing["5"]}`, 94 + ":is([data-size=sm] *)": `${spacing["2"]} ${spacing["2"]}`, 95 + ":is([data-size=md] *)": `${spacing["3"]} ${spacing["3"]}`, 96 + ":is([data-size=lg] *)": `${spacing["4"]} ${spacing["4"]}`, 97 97 }, 98 98 }, 99 99 }); ··· 113 113 const size = sizeProp || use(SizeContext); 114 114 115 115 return ( 116 - <SizeContext value={size}> 117 - <AriaDisclosure 118 - {...props} 119 - data-size={size} 120 - {...stylex.props(styles.disclosure, style)} 121 - > 122 - {children} 123 - </AriaDisclosure> 124 - </SizeContext> 116 + <AriaDisclosure 117 + {...props} 118 + data-size={size} 119 + {...stylex.props(styles.disclosure, style)} 120 + > 121 + {children} 122 + </AriaDisclosure> 125 123 ); 126 124 } 127 125
+1 -4
packages/hip-ui/src/components/drawer/index.tsx
··· 18 18 import { Size, StyleXComponentProps } from "../theme/types"; 19 19 import { typeramp } from "../theme/typography.stylex"; 20 20 import { useDialogStyles } from "../theme/useDialogStyles"; 21 - import { 22 - NonModalDrawer, 23 - ModalOverlay as NonModalModalOverlay, 24 - } from "./NonModalDrawer"; 21 + import { NonModalDrawer } from "./NonModalDrawer"; 25 22 26 23 const styles = stylex.create({ 27 24 overlay: {
+20
packages/hip-ui/src/components/editable-text/editable-text-config.ts
··· 1 + import { ComponentConfig } from "../../types"; 2 + 3 + export const editableTextConfig: ComponentConfig = { 4 + name: "editable-text", 5 + filepath: "./index.tsx", 6 + hipDependencies: [ 7 + "../theme/spacing.stylex.tsx", 8 + "../theme/radius.stylex.tsx", 9 + "../theme/semantic-color.stylex.tsx", 10 + "../theme/typography.stylex.tsx", 11 + "../theme/types.ts", 12 + "../theme/useInputStyles.ts", 13 + "../context.ts", 14 + "../typography/text.tsx", 15 + ], 16 + dependencies: { 17 + "react-aria-components": "^1.13.0", 18 + }, 19 + }; 20 +
+199
packages/hip-ui/src/components/editable-text/index.tsx
··· 1 + "use client"; 2 + 3 + import { useControlledState } from "@react-stately/utils"; 4 + import * as stylex from "@stylexjs/stylex"; 5 + import { 6 + useRef, 7 + useState, 8 + KeyboardEvent, 9 + useEffect, 10 + useEffectEvent, 11 + } from "react"; 12 + import { mergeProps, useLongPress } from "react-aria"; 13 + import { Input, TextField as AriaTextField } from "react-aria-components"; 14 + 15 + import { radius } from "../theme/radius.stylex"; 16 + import { spacing } from "../theme/spacing.stylex"; 17 + import { StyleXComponentProps } from "../theme/types"; 18 + 19 + const focusClosestFocusableElement = () => { 20 + const focusableElements = document.activeElement?.parentElement?.closest( 21 + "button, input, textarea, select, a, [tabindex]:not([tabindex='-1'])", 22 + ); 23 + if (!focusableElements) return; 24 + (focusableElements as HTMLElement).focus(); 25 + }; 26 + 27 + const styles = stylex.create({ 28 + input: { 29 + backgroundColor: "transparent", 30 + borderRadius: radius["sm"], 31 + borderWidth: 0, 32 + display: "inline-block", 33 + fontFamily: "inherit", 34 + fontSize: "inherit", 35 + fontWeight: "inherit", 36 + letterSpacing: "inherit", 37 + lineHeight: "inherit", 38 + minWidth: 0, 39 + textAlign: "inherit", 40 + textDecoration: "inherit", 41 + textTransform: "inherit", 42 + 43 + outlineColor: "blue", 44 + outlineStyle: "solid", 45 + outlineWidth: { 46 + default: "0px", 47 + ":focus": "1px", 48 + }, 49 + 50 + marginBottom: `calc(${spacing["1"]} * -1)`, 51 + marginLeft: `calc(${spacing["2"]} * -1)`, 52 + marginRight: `calc(${spacing["2"]} * -1)`, 53 + marginTop: `calc(${spacing["1"]} * -1)`, 54 + paddingBottom: spacing["1"], 55 + paddingLeft: spacing["2"], 56 + paddingRight: spacing["2"], 57 + paddingTop: spacing["1"], 58 + }, 59 + }); 60 + 61 + export interface EditableTextProps 62 + extends StyleXComponentProps< 63 + Omit<React.ComponentProps<"span">, "children" | "onChange"> 64 + > { 65 + /** 66 + * The current value of the editable text. 67 + */ 68 + children: string; 69 + /** 70 + * Callback fired when the value changes. 71 + */ 72 + onChange?: (value: string) => void; 73 + 74 + /** 75 + * Whether the component is read-only. 76 + */ 77 + isReadOnly?: boolean; 78 + /** 79 + * Whether to show the input field on mount. 80 + */ 81 + defaultEditing?: boolean; 82 + /** 83 + * Whether the component is currently in editing mode (controlled). 84 + */ 85 + isEditing?: boolean; 86 + /** 87 + * Callback fired when the editing state changes. 88 + */ 89 + onEditingChange?: (isEditing: boolean) => void; 90 + } 91 + 92 + export function EditableText({ 93 + children, 94 + onChange, 95 + isReadOnly, 96 + defaultEditing, 97 + isEditing: isEditingProp, 98 + onEditingChange, 99 + style, 100 + ...props 101 + }: EditableTextProps) { 102 + const [isEditingState, setIsEditingState] = useControlledState( 103 + isEditingProp, 104 + defaultEditing ?? false, 105 + onEditingChange, 106 + ); 107 + const [editValue, setEditValue] = useState(children); 108 + const inputRef = useRef<HTMLInputElement>(null); 109 + 110 + const isEditing = 111 + isEditingProp === undefined ? isEditingState : isEditingProp; 112 + const setIsEditing = (newIsEditing: boolean) => { 113 + if (isEditingProp === undefined) { 114 + setIsEditingState(newIsEditing); 115 + } 116 + onEditingChange?.(newIsEditing); 117 + }; 118 + 119 + const handleStartEditing = () => { 120 + if (isReadOnly) return; 121 + setEditValue(children); 122 + setIsEditing(true); 123 + // Focus the input after it's rendered 124 + setTimeout(() => { 125 + inputRef.current?.focus(); 126 + inputRef.current?.select(); 127 + }, 0); 128 + }; 129 + 130 + const handleCommit = (newValue: string) => { 131 + focusClosestFocusableElement(); 132 + setIsEditing(false); 133 + if (newValue !== children) { 134 + onChange?.(newValue); 135 + } 136 + }; 137 + 138 + const handleCancel = () => { 139 + focusClosestFocusableElement(); 140 + setIsEditing(false); 141 + setEditValue(children); 142 + }; 143 + 144 + const handleKeyDown = useEffectEvent((e: Event) => { 145 + const event = e as unknown as KeyboardEvent; 146 + 147 + if (event.key === "Enter") { 148 + e.preventDefault(); 149 + handleCommit(editValue); 150 + } else if (event.key === "Escape") { 151 + e.preventDefault(); 152 + handleCancel(); 153 + } 154 + 155 + e.stopPropagation(); 156 + }); 157 + 158 + const handleBlur = () => { 159 + handleCommit(editValue); 160 + }; 161 + 162 + const { longPressProps } = useLongPress({ 163 + onLongPress: handleStartEditing, 164 + }); 165 + 166 + useEffect(() => { 167 + if (!isEditing) return; 168 + 169 + globalThis.addEventListener("keydown", handleKeyDown, { 170 + capture: true, 171 + }); 172 + return () => { 173 + globalThis.removeEventListener("keydown", handleKeyDown, { 174 + capture: true, 175 + }); 176 + }; 177 + }, [isEditing]); 178 + 179 + if (isEditing) { 180 + return ( 181 + <AriaTextField 182 + value={editValue} 183 + onChange={setEditValue} 184 + onKeyDown={(e) => e.stopPropagation()} 185 + onKeyUp={(e) => e.stopPropagation()} 186 + isReadOnly={isReadOnly} 187 + {...stylex.props(style)} 188 + > 189 + <Input 190 + {...stylex.props(styles.input)} 191 + ref={inputRef} 192 + onBlur={handleBlur} 193 + /> 194 + </AriaTextField> 195 + ); 196 + } 197 + 198 + return <span {...mergeProps(props, longPressProps)}>{children}</span>; 199 + }
+10
packages/hip-ui/src/components/theme/animations.stylex.tsx
··· 9 9 }, 10 10 }); 11 11 12 + const fadeOut = stylex.keyframes({ 13 + from: { 14 + opacity: 1, 15 + }, 16 + to: { 17 + opacity: 0, 18 + }, 19 + }); 20 + 12 21 const zoomIn = stylex.keyframes({ 13 22 from: { 14 23 transform: "scale(0.8)", ··· 92 101 93 102 export const animations = stylex.defineVars({ 94 103 fadeIn, 104 + fadeOut, 95 105 zoomIn, 96 106 slideInRight, 97 107 slideOutRight,
+1
packages/hip-ui/src/components/theme/types.ts
··· 20 20 | "success" 21 21 | "warning" 22 22 | "critical"; 23 + export type ToastVariant = "neuthral" | "success" | "warning" | "critical"; 23 24 24 25 export type StyleXComponentProps<T extends object> = Omit< 25 26 T,
+5 -1
packages/hip-ui/src/components/theme/useListBoxItemStyles.ts
··· 19 19 userSelect: "none", 20 20 21 21 boxSizing: "border-box", 22 - fontWeight: fontWeight["medium"], 22 + fontWeight: { 23 + default: fontWeight["normal"], 24 + [":is([data-react-aria-pressable=true][data-selected=true])"]: 25 + fontWeight["medium"], 26 + }, 23 27 outline: { 24 28 default: "none", 25 29 ":focus": "none",
-4
packages/hip-ui/src/components/theme/usePopoverStyles.ts
··· 10 10 popover: { 11 11 borderRadius: radius["md"], 12 12 boxShadow: shadow["md"], 13 - minWidth: spacing["40"], 14 13 outline: "none", 15 14 overflow: "auto", 16 - 17 - paddingBottom: spacing["1"], 18 - paddingTop: spacing["1"], 19 15 }, 20 16 animation: { 21 17 "--origin-x": {
+180
packages/hip-ui/src/components/toast/Toast.tsx
··· 1 + "use client"; 2 + 3 + import * as stylex from "@stylexjs/stylex"; 4 + import { X } from "lucide-react"; 5 + import { 6 + UNSTABLE_ToastRegion as AriaToastRegion, 7 + UNSTABLE_Toast as Toast, 8 + UNSTABLE_ToastContent as ToastContent, 9 + ToastRegionProps as AriaToastRegionProps, 10 + Text, 11 + QueuedToast, 12 + } from "react-aria-components"; 13 + 14 + import { IconButton } from "../icon-button"; 15 + import { 16 + criticalColor, 17 + successColor, 18 + uiColor, 19 + warningColor, 20 + } from "../theme/semantic-color.stylex"; 21 + import { spacing } from "../theme/spacing.stylex"; 22 + import { StyleXComponentProps } from "../theme/types"; 23 + import { lineHeight, typeramp } from "../theme/typography.stylex"; 24 + import { toasts, ToastContentType } from "./queue"; 25 + import { usePopoverStyles } from "../theme/usePopoverStyles"; 26 + import { Button } from "../button"; 27 + 28 + const styles = stylex.create({ 29 + region: { 30 + bottom: spacing["4"], 31 + display: "flex", 32 + flexDirection: "column-reverse", 33 + gap: spacing["2"], 34 + outline: "none", 35 + position: "fixed", 36 + right: spacing["4"], 37 + zIndex: 9999, 38 + }, 39 + toast: { 40 + display: "flex", 41 + flexDirection: "row", 42 + alignItems: "center", 43 + justifyContent: "space-between", 44 + gap: spacing["4"], 45 + paddingLeft: spacing["4"], 46 + paddingRight: spacing["4"], 47 + paddingTop: spacing["3"], 48 + paddingBottom: spacing["3"], 49 + minWidth: spacing["60"], 50 + }, 51 + content: { 52 + display: "flex", 53 + flex: "1 1 auto", 54 + flexDirection: "column", 55 + gap: spacing["2.5"], 56 + minWidth: 0, 57 + }, 58 + title: { 59 + fontWeight: 600, 60 + lineHeight: lineHeight["none"], 61 + color: { 62 + default: uiColor.text1, 63 + ":is([data-variant=critical] *)": criticalColor.textContrast, 64 + ":is([data-variant=success] *)": successColor.textContrast, 65 + ":is([data-variant=warning] *)": warningColor.text2, 66 + }, 67 + }, 68 + description: { 69 + color: { 70 + default: uiColor.text1, 71 + ":is([data-variant=critical] *)": criticalColor.text1, 72 + ":is([data-variant=success] *)": successColor.text1, 73 + ":is([data-variant=warning] *)": warningColor.text1, 74 + }, 75 + }, 76 + icon: { 77 + display: "flex", 78 + alignItems: "center", 79 + justifyContent: "center", 80 + flexShrink: 0, 81 + 82 + ":is(*) svg": { 83 + flexShrink: 0, 84 + height: spacing["4"], 85 + pointerEvents: "none", 86 + width: spacing["4"], 87 + color: { 88 + ":is([data-variant=critical] *)": criticalColor.solid1, 89 + ":is([data-variant=success] *)": successColor.solid1, 90 + ":is([data-variant=warning] *)": warningColor.solid1, 91 + }, 92 + }, 93 + }, 94 + critical: { 95 + backgroundColor: criticalColor.component1, 96 + borderColor: criticalColor.border2, 97 + color: criticalColor.text2, 98 + }, 99 + success: { 100 + backgroundColor: successColor.component1, 101 + borderColor: successColor.border2, 102 + color: successColor.text2, 103 + }, 104 + warning: { 105 + backgroundColor: warningColor.component1, 106 + borderColor: warningColor.border2, 107 + color: warningColor.text2, 108 + }, 109 + }); 110 + 111 + function ToastItem({ toast }: { toast: QueuedToast<ToastContentType> }) { 112 + const popoverStyles = usePopoverStyles(); 113 + 114 + return ( 115 + <Toast 116 + toast={toast} 117 + data-variant={toast.content.variant} 118 + {...stylex.props( 119 + popoverStyles.wrapper, 120 + styles.toast, 121 + toast.content.variant === "critical" && styles.critical, 122 + toast.content.variant === "success" && styles.success, 123 + toast.content.variant === "warning" && styles.warning, 124 + )} 125 + > 126 + {toast.content.icon && ( 127 + <div {...stylex.props(styles.icon)}>{toast.content.icon}</div> 128 + )} 129 + <ToastContent {...stylex.props(styles.content)}> 130 + <Text slot="title" {...stylex.props(typeramp.body, styles.title)}> 131 + {toast.content.title} 132 + </Text> 133 + <Text 134 + slot="description" 135 + {...stylex.props(styles.description, typeramp.label)} 136 + > 137 + {toast.content.description} 138 + </Text> 139 + </ToastContent> 140 + {toast.content.action ? ( 141 + <Button 142 + size="sm" 143 + variant={toast.content.action.variant} 144 + onPress={() => { 145 + toast.content.action?.onPress(); 146 + toasts.close(toast.key); 147 + }} 148 + > 149 + {toast.content.action.label} 150 + </Button> 151 + ) : ( 152 + <IconButton 153 + aria-label="Close" 154 + size="sm" 155 + variant="tertiary" 156 + slot="close" 157 + > 158 + <X /> 159 + </IconButton> 160 + )} 161 + </Toast> 162 + ); 163 + } 164 + 165 + export interface ToastRegionProps 166 + extends StyleXComponentProps< 167 + Omit<AriaToastRegionProps<ToastContentType>, "children" | "queue"> 168 + > {} 169 + 170 + export function ToastRegion({ style, ...props }: ToastRegionProps) { 171 + return ( 172 + <AriaToastRegion 173 + queue={toasts} 174 + {...stylex.props(styles.region, style)} 175 + {...props} 176 + > 177 + {({ toast }) => <ToastItem toast={toast} />} 178 + </AriaToastRegion> 179 + ); 180 + }
+2
packages/hip-ui/src/components/toast/index.tsx
··· 1 + export { toasts, type ToastContentType } from "./queue"; 2 + export { type ToastRegionProps, ToastRegion } from "./Toast";
+28
packages/hip-ui/src/components/toast/queue.ts
··· 1 + import { flushSync } from "react-dom"; 2 + import { ToastQueue } from "react-stately"; 3 + import { ButtonVariant, ToastVariant } from "../theme/types"; 4 + 5 + export interface ToastContentType { 6 + variant?: ToastVariant; 7 + icon?: React.ReactNode; 8 + title: string; 9 + description?: string; 10 + action?: { 11 + label: string; 12 + variant?: ButtonVariant; 13 + onPress: () => void; 14 + }; 15 + } 16 + 17 + export const toasts = new ToastQueue<ToastContentType>({ 18 + // Wrap state updates in a CSS view transition. 19 + wrapUpdate(fn) { 20 + if ("startViewTransition" in document) { 21 + document.startViewTransition(() => { 22 + flushSync(fn); 23 + }); 24 + } else { 25 + fn(); 26 + } 27 + }, 28 + });
+21
packages/hip-ui/src/components/toast/toast-config.ts
··· 1 + import { ComponentConfig } from "../../types"; 2 + 3 + export const toastConfig: ComponentConfig = { 4 + name: "toast", 5 + filepath: "./index.tsx", 6 + hipDependencies: [ 7 + "../theme/spacing.stylex.tsx", 8 + "../theme/radius.stylex.tsx", 9 + "../theme/semantic-color.stylex.tsx", 10 + "../theme/typography.stylex.tsx", 11 + "../theme/shadow.stylex.tsx", 12 + "../theme/types.ts", 13 + "../icon-button/index.tsx", 14 + "./queue.ts", 15 + "./Toast.tsx", 16 + ], 17 + dependencies: { 18 + "react-aria-components": "^1.13.0", 19 + "lucide-react": "^0.545.0", 20 + }, 21 + };
+39 -8
packages/hip-ui/src/components/tree/index.tsx
··· 15 15 import { SizeContext } from "../context"; 16 16 import { animationDuration } from "../theme/animations.stylex"; 17 17 import { radius } from "../theme/radius.stylex"; 18 - import { ui } from "../theme/semantic-color.stylex"; 18 + import { primaryColor, ui } from "../theme/semantic-color.stylex"; 19 19 import { spacing } from "../theme/spacing.stylex"; 20 20 import { Size, StyleXComponentProps } from "../theme/types"; 21 21 import { useListBoxItemStyles } from "../theme/useListBoxItemStyles"; ··· 26 26 }, 27 27 itemInner: { 28 28 gap: spacing["1"], 29 + paddingLeft: spacing["0.5"], 30 + }, 31 + selected: { 32 + backgroundColor: primaryColor.component2, 29 33 }, 30 34 spacer: { 31 - width: `calc((var(--tree-item-level, 0) - 1) * ${spacing["4"]})`, 35 + width: `calc((var(--tree-item-level, 0) - 1) * ${spacing["3"]})`, 32 36 }, 33 37 content: { 34 38 alignItems: "center", ··· 51 55 default: "rotate(0deg)", 52 56 ":is([aria-expanded=true] *)": "rotate(90deg)", 53 57 }, 58 + 59 + // eslint-disable-next-line @stylexjs/no-legacy-contextual-styles, @stylexjs/valid-styles 60 + ":is(*) svg": { 61 + height: spacing["3"], 62 + width: spacing["3"], 63 + }, 54 64 }, 55 65 addon: { 56 66 marginBottom: `calc(${spacing["2"]} * -1)`, ··· 98 108 selectionBehavior, 99 109 selectionMode, 100 110 allowsDragging, 111 + isSelected, 101 112 }) => ( 102 - <div {...stylex.props(listBoxItemStyles.inner, styles.itemInner)}> 113 + <div 114 + {...stylex.props( 115 + listBoxItemStyles.inner, 116 + styles.itemInner, 117 + isSelected && selectionBehavior === "replace" && styles.selected, 118 + )} 119 + > 103 120 {allowsDragging && ( 104 121 <div {...stylex.props(styles.dragButtonWrapper)}> 105 122 <Button ··· 117 134 <Button 118 135 slot="chevron" 119 136 {...stylex.props( 120 - styles.chevron, 121 137 ui.textDim, 122 138 listBoxItemStyles.addon, 139 + styles.chevron, 123 140 !hasChildItems && styles.hidden, 124 141 )} 125 142 > 126 - <ChevronRight size={16} /> 143 + <ChevronRight /> 127 144 </Button> 128 145 129 146 <div {...stylex.props(styles.content)}> ··· 145 162 ); 146 163 } 147 164 148 - interface TreeItemProps<T extends object> 165 + interface TreeItemBaseProps<T extends object> 149 166 extends StyleXComponentProps< 150 167 Omit<AriaTreeItemProps<T>, "textValue" | "children"> 151 168 >, 152 169 Pick<TreeItemContentProps, "prefix" | "suffix"> { 170 + children?: React.ReactNode; 171 + } 172 + 173 + interface TreeItemTextProps<T extends object> extends TreeItemBaseProps<T> { 153 174 title: string; 154 - children?: React.ReactNode; 175 + textValue?: string; 176 + } 177 + 178 + interface TreeItemNodeProps<T extends object> extends TreeItemBaseProps<T> { 179 + title: React.ReactNode; 180 + textValue: string; 155 181 } 156 182 183 + type TreeItemProps<T extends object> = 184 + | TreeItemTextProps<T> 185 + | TreeItemNodeProps<T>; 186 + 157 187 export function TreeItem<T extends object>({ 158 188 style, 159 189 title, 160 190 prefix, 161 191 suffix, 192 + textValue, 162 193 ...props 163 194 }: TreeItemProps<T>) { 164 195 const listBoxItemStyles = useListBoxItemStyles(); 165 196 166 197 return ( 167 198 <AriaTreeItem 168 - textValue={title} 199 + textValue={textValue ?? (typeof title === "string" ? title : "")} 169 200 {...props} 170 201 data-react-aria-pressable 171 202 {...stylex.props(
+2435
pnpm-lock.yaml
··· 125 125 '@tanstack/router-plugin': 126 126 specifier: ^1.133.27 127 127 version: 1.133.27(@tanstack/react-router@1.133.27(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.102.1(esbuild@0.25.11)) 128 + '@tldraw/editor': 129 + specifier: ^4.1.2 130 + version: 4.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 128 131 change-case: 129 132 specifier: 'catalog:' 130 133 version: 5.4.4 ··· 173 176 tailwindcss: 174 177 specifier: ^4.1.16 175 178 version: 4.1.16 179 + tldraw: 180 + specifier: ^4.1.2 181 + version: 4.1.2(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 176 182 unplugin-stylex: 177 183 specifier: ^0.5.5 178 184 version: 0.5.5(@stylexjs/stylex@0.16.2)(rollup@4.52.5)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(jsdom@27.0.1(postcss@8.5.6))(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) ··· 947 953 '@fal-works/esbuild-plugin-global-externals@2.1.2': 948 954 resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} 949 955 956 + '@floating-ui/core@1.7.3': 957 + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} 958 + 959 + '@floating-ui/dom@1.7.4': 960 + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} 961 + 962 + '@floating-ui/react-dom@2.1.6': 963 + resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} 964 + peerDependencies: 965 + react: '>=16.8.0' 966 + react-dom: '>=16.8.0' 967 + 968 + '@floating-ui/utils@0.2.10': 969 + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} 970 + 950 971 '@formatjs/ecma402-abstract@2.3.6': 951 972 resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} 952 973 ··· 1194 1215 resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 1195 1216 engines: {node: '>=14'} 1196 1217 1218 + '@popperjs/core@2.11.8': 1219 + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} 1220 + 1197 1221 '@poppinss/colors@4.1.5': 1198 1222 resolution: {integrity: sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==} 1199 1223 ··· 1206 1230 '@radix-ui/colors@3.0.0': 1207 1231 resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} 1208 1232 1233 + '@radix-ui/number@1.1.1': 1234 + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} 1235 + 1236 + '@radix-ui/primitive@1.1.3': 1237 + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} 1238 + 1239 + '@radix-ui/react-accessible-icon@1.1.7': 1240 + resolution: {integrity: sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==} 1241 + peerDependencies: 1242 + '@types/react': '*' 1243 + '@types/react-dom': '*' 1244 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1245 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1246 + peerDependenciesMeta: 1247 + '@types/react': 1248 + optional: true 1249 + '@types/react-dom': 1250 + optional: true 1251 + 1252 + '@radix-ui/react-accordion@1.2.12': 1253 + resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} 1254 + peerDependencies: 1255 + '@types/react': '*' 1256 + '@types/react-dom': '*' 1257 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1258 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1259 + peerDependenciesMeta: 1260 + '@types/react': 1261 + optional: true 1262 + '@types/react-dom': 1263 + optional: true 1264 + 1265 + '@radix-ui/react-alert-dialog@1.1.15': 1266 + resolution: {integrity: sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==} 1267 + peerDependencies: 1268 + '@types/react': '*' 1269 + '@types/react-dom': '*' 1270 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1271 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1272 + peerDependenciesMeta: 1273 + '@types/react': 1274 + optional: true 1275 + '@types/react-dom': 1276 + optional: true 1277 + 1278 + '@radix-ui/react-arrow@1.1.7': 1279 + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} 1280 + peerDependencies: 1281 + '@types/react': '*' 1282 + '@types/react-dom': '*' 1283 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1284 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1285 + peerDependenciesMeta: 1286 + '@types/react': 1287 + optional: true 1288 + '@types/react-dom': 1289 + optional: true 1290 + 1291 + '@radix-ui/react-aspect-ratio@1.1.7': 1292 + resolution: {integrity: sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==} 1293 + peerDependencies: 1294 + '@types/react': '*' 1295 + '@types/react-dom': '*' 1296 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1297 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1298 + peerDependenciesMeta: 1299 + '@types/react': 1300 + optional: true 1301 + '@types/react-dom': 1302 + optional: true 1303 + 1304 + '@radix-ui/react-avatar@1.1.10': 1305 + resolution: {integrity: sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==} 1306 + peerDependencies: 1307 + '@types/react': '*' 1308 + '@types/react-dom': '*' 1309 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1310 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1311 + peerDependenciesMeta: 1312 + '@types/react': 1313 + optional: true 1314 + '@types/react-dom': 1315 + optional: true 1316 + 1317 + '@radix-ui/react-checkbox@1.3.3': 1318 + resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} 1319 + peerDependencies: 1320 + '@types/react': '*' 1321 + '@types/react-dom': '*' 1322 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1323 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1324 + peerDependenciesMeta: 1325 + '@types/react': 1326 + optional: true 1327 + '@types/react-dom': 1328 + optional: true 1329 + 1330 + '@radix-ui/react-collapsible@1.1.12': 1331 + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} 1332 + peerDependencies: 1333 + '@types/react': '*' 1334 + '@types/react-dom': '*' 1335 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1336 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1337 + peerDependenciesMeta: 1338 + '@types/react': 1339 + optional: true 1340 + '@types/react-dom': 1341 + optional: true 1342 + 1343 + '@radix-ui/react-collection@1.1.7': 1344 + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} 1345 + peerDependencies: 1346 + '@types/react': '*' 1347 + '@types/react-dom': '*' 1348 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1349 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1350 + peerDependenciesMeta: 1351 + '@types/react': 1352 + optional: true 1353 + '@types/react-dom': 1354 + optional: true 1355 + 1356 + '@radix-ui/react-compose-refs@1.1.2': 1357 + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} 1358 + peerDependencies: 1359 + '@types/react': '*' 1360 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1361 + peerDependenciesMeta: 1362 + '@types/react': 1363 + optional: true 1364 + 1365 + '@radix-ui/react-context-menu@2.2.16': 1366 + resolution: {integrity: sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==} 1367 + peerDependencies: 1368 + '@types/react': '*' 1369 + '@types/react-dom': '*' 1370 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1371 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1372 + peerDependenciesMeta: 1373 + '@types/react': 1374 + optional: true 1375 + '@types/react-dom': 1376 + optional: true 1377 + 1378 + '@radix-ui/react-context@1.1.2': 1379 + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} 1380 + peerDependencies: 1381 + '@types/react': '*' 1382 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1383 + peerDependenciesMeta: 1384 + '@types/react': 1385 + optional: true 1386 + 1387 + '@radix-ui/react-dialog@1.1.15': 1388 + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} 1389 + peerDependencies: 1390 + '@types/react': '*' 1391 + '@types/react-dom': '*' 1392 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1393 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1394 + peerDependenciesMeta: 1395 + '@types/react': 1396 + optional: true 1397 + '@types/react-dom': 1398 + optional: true 1399 + 1400 + '@radix-ui/react-direction@1.1.1': 1401 + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} 1402 + peerDependencies: 1403 + '@types/react': '*' 1404 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1405 + peerDependenciesMeta: 1406 + '@types/react': 1407 + optional: true 1408 + 1409 + '@radix-ui/react-dismissable-layer@1.1.11': 1410 + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} 1411 + peerDependencies: 1412 + '@types/react': '*' 1413 + '@types/react-dom': '*' 1414 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1415 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1416 + peerDependenciesMeta: 1417 + '@types/react': 1418 + optional: true 1419 + '@types/react-dom': 1420 + optional: true 1421 + 1422 + '@radix-ui/react-dropdown-menu@2.1.16': 1423 + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} 1424 + peerDependencies: 1425 + '@types/react': '*' 1426 + '@types/react-dom': '*' 1427 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1428 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1429 + peerDependenciesMeta: 1430 + '@types/react': 1431 + optional: true 1432 + '@types/react-dom': 1433 + optional: true 1434 + 1435 + '@radix-ui/react-focus-guards@1.1.3': 1436 + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} 1437 + peerDependencies: 1438 + '@types/react': '*' 1439 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1440 + peerDependenciesMeta: 1441 + '@types/react': 1442 + optional: true 1443 + 1444 + '@radix-ui/react-focus-scope@1.1.7': 1445 + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} 1446 + peerDependencies: 1447 + '@types/react': '*' 1448 + '@types/react-dom': '*' 1449 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1450 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1451 + peerDependenciesMeta: 1452 + '@types/react': 1453 + optional: true 1454 + '@types/react-dom': 1455 + optional: true 1456 + 1457 + '@radix-ui/react-form@0.1.8': 1458 + resolution: {integrity: sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==} 1459 + peerDependencies: 1460 + '@types/react': '*' 1461 + '@types/react-dom': '*' 1462 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1463 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1464 + peerDependenciesMeta: 1465 + '@types/react': 1466 + optional: true 1467 + '@types/react-dom': 1468 + optional: true 1469 + 1470 + '@radix-ui/react-hover-card@1.1.15': 1471 + resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==} 1472 + peerDependencies: 1473 + '@types/react': '*' 1474 + '@types/react-dom': '*' 1475 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1476 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1477 + peerDependenciesMeta: 1478 + '@types/react': 1479 + optional: true 1480 + '@types/react-dom': 1481 + optional: true 1482 + 1483 + '@radix-ui/react-id@1.1.1': 1484 + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} 1485 + peerDependencies: 1486 + '@types/react': '*' 1487 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1488 + peerDependenciesMeta: 1489 + '@types/react': 1490 + optional: true 1491 + 1492 + '@radix-ui/react-label@2.1.7': 1493 + resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==} 1494 + peerDependencies: 1495 + '@types/react': '*' 1496 + '@types/react-dom': '*' 1497 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1498 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1499 + peerDependenciesMeta: 1500 + '@types/react': 1501 + optional: true 1502 + '@types/react-dom': 1503 + optional: true 1504 + 1505 + '@radix-ui/react-menu@2.1.16': 1506 + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} 1507 + peerDependencies: 1508 + '@types/react': '*' 1509 + '@types/react-dom': '*' 1510 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1511 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1512 + peerDependenciesMeta: 1513 + '@types/react': 1514 + optional: true 1515 + '@types/react-dom': 1516 + optional: true 1517 + 1518 + '@radix-ui/react-menubar@1.1.16': 1519 + resolution: {integrity: sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==} 1520 + peerDependencies: 1521 + '@types/react': '*' 1522 + '@types/react-dom': '*' 1523 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1524 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1525 + peerDependenciesMeta: 1526 + '@types/react': 1527 + optional: true 1528 + '@types/react-dom': 1529 + optional: true 1530 + 1531 + '@radix-ui/react-navigation-menu@1.2.14': 1532 + resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} 1533 + peerDependencies: 1534 + '@types/react': '*' 1535 + '@types/react-dom': '*' 1536 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1537 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1538 + peerDependenciesMeta: 1539 + '@types/react': 1540 + optional: true 1541 + '@types/react-dom': 1542 + optional: true 1543 + 1544 + '@radix-ui/react-one-time-password-field@0.1.8': 1545 + resolution: {integrity: sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==} 1546 + peerDependencies: 1547 + '@types/react': '*' 1548 + '@types/react-dom': '*' 1549 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1550 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1551 + peerDependenciesMeta: 1552 + '@types/react': 1553 + optional: true 1554 + '@types/react-dom': 1555 + optional: true 1556 + 1557 + '@radix-ui/react-password-toggle-field@0.1.3': 1558 + resolution: {integrity: sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==} 1559 + peerDependencies: 1560 + '@types/react': '*' 1561 + '@types/react-dom': '*' 1562 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1563 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1564 + peerDependenciesMeta: 1565 + '@types/react': 1566 + optional: true 1567 + '@types/react-dom': 1568 + optional: true 1569 + 1570 + '@radix-ui/react-popover@1.1.15': 1571 + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} 1572 + peerDependencies: 1573 + '@types/react': '*' 1574 + '@types/react-dom': '*' 1575 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1576 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1577 + peerDependenciesMeta: 1578 + '@types/react': 1579 + optional: true 1580 + '@types/react-dom': 1581 + optional: true 1582 + 1583 + '@radix-ui/react-popper@1.2.8': 1584 + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} 1585 + peerDependencies: 1586 + '@types/react': '*' 1587 + '@types/react-dom': '*' 1588 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1589 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1590 + peerDependenciesMeta: 1591 + '@types/react': 1592 + optional: true 1593 + '@types/react-dom': 1594 + optional: true 1595 + 1596 + '@radix-ui/react-portal@1.1.9': 1597 + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} 1598 + peerDependencies: 1599 + '@types/react': '*' 1600 + '@types/react-dom': '*' 1601 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1602 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1603 + peerDependenciesMeta: 1604 + '@types/react': 1605 + optional: true 1606 + '@types/react-dom': 1607 + optional: true 1608 + 1609 + '@radix-ui/react-presence@1.1.5': 1610 + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} 1611 + peerDependencies: 1612 + '@types/react': '*' 1613 + '@types/react-dom': '*' 1614 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1615 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1616 + peerDependenciesMeta: 1617 + '@types/react': 1618 + optional: true 1619 + '@types/react-dom': 1620 + optional: true 1621 + 1622 + '@radix-ui/react-primitive@2.1.3': 1623 + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} 1624 + peerDependencies: 1625 + '@types/react': '*' 1626 + '@types/react-dom': '*' 1627 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1628 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1629 + peerDependenciesMeta: 1630 + '@types/react': 1631 + optional: true 1632 + '@types/react-dom': 1633 + optional: true 1634 + 1635 + '@radix-ui/react-progress@1.1.7': 1636 + resolution: {integrity: sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==} 1637 + peerDependencies: 1638 + '@types/react': '*' 1639 + '@types/react-dom': '*' 1640 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1641 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1642 + peerDependenciesMeta: 1643 + '@types/react': 1644 + optional: true 1645 + '@types/react-dom': 1646 + optional: true 1647 + 1648 + '@radix-ui/react-radio-group@1.3.8': 1649 + resolution: {integrity: sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==} 1650 + peerDependencies: 1651 + '@types/react': '*' 1652 + '@types/react-dom': '*' 1653 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1654 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1655 + peerDependenciesMeta: 1656 + '@types/react': 1657 + optional: true 1658 + '@types/react-dom': 1659 + optional: true 1660 + 1661 + '@radix-ui/react-roving-focus@1.1.11': 1662 + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} 1663 + peerDependencies: 1664 + '@types/react': '*' 1665 + '@types/react-dom': '*' 1666 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1667 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1668 + peerDependenciesMeta: 1669 + '@types/react': 1670 + optional: true 1671 + '@types/react-dom': 1672 + optional: true 1673 + 1674 + '@radix-ui/react-scroll-area@1.2.10': 1675 + resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} 1676 + peerDependencies: 1677 + '@types/react': '*' 1678 + '@types/react-dom': '*' 1679 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1680 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1681 + peerDependenciesMeta: 1682 + '@types/react': 1683 + optional: true 1684 + '@types/react-dom': 1685 + optional: true 1686 + 1687 + '@radix-ui/react-select@2.2.6': 1688 + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} 1689 + peerDependencies: 1690 + '@types/react': '*' 1691 + '@types/react-dom': '*' 1692 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1693 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1694 + peerDependenciesMeta: 1695 + '@types/react': 1696 + optional: true 1697 + '@types/react-dom': 1698 + optional: true 1699 + 1700 + '@radix-ui/react-separator@1.1.7': 1701 + resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} 1702 + peerDependencies: 1703 + '@types/react': '*' 1704 + '@types/react-dom': '*' 1705 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1706 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1707 + peerDependenciesMeta: 1708 + '@types/react': 1709 + optional: true 1710 + '@types/react-dom': 1711 + optional: true 1712 + 1713 + '@radix-ui/react-slider@1.3.6': 1714 + resolution: {integrity: sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==} 1715 + peerDependencies: 1716 + '@types/react': '*' 1717 + '@types/react-dom': '*' 1718 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1719 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1720 + peerDependenciesMeta: 1721 + '@types/react': 1722 + optional: true 1723 + '@types/react-dom': 1724 + optional: true 1725 + 1726 + '@radix-ui/react-slot@1.2.3': 1727 + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} 1728 + peerDependencies: 1729 + '@types/react': '*' 1730 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1731 + peerDependenciesMeta: 1732 + '@types/react': 1733 + optional: true 1734 + 1735 + '@radix-ui/react-switch@1.2.6': 1736 + resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} 1737 + peerDependencies: 1738 + '@types/react': '*' 1739 + '@types/react-dom': '*' 1740 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1741 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1742 + peerDependenciesMeta: 1743 + '@types/react': 1744 + optional: true 1745 + '@types/react-dom': 1746 + optional: true 1747 + 1748 + '@radix-ui/react-tabs@1.1.13': 1749 + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} 1750 + peerDependencies: 1751 + '@types/react': '*' 1752 + '@types/react-dom': '*' 1753 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1754 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1755 + peerDependenciesMeta: 1756 + '@types/react': 1757 + optional: true 1758 + '@types/react-dom': 1759 + optional: true 1760 + 1761 + '@radix-ui/react-toast@1.2.15': 1762 + resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} 1763 + peerDependencies: 1764 + '@types/react': '*' 1765 + '@types/react-dom': '*' 1766 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1767 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1768 + peerDependenciesMeta: 1769 + '@types/react': 1770 + optional: true 1771 + '@types/react-dom': 1772 + optional: true 1773 + 1774 + '@radix-ui/react-toggle-group@1.1.11': 1775 + resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} 1776 + peerDependencies: 1777 + '@types/react': '*' 1778 + '@types/react-dom': '*' 1779 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1780 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1781 + peerDependenciesMeta: 1782 + '@types/react': 1783 + optional: true 1784 + '@types/react-dom': 1785 + optional: true 1786 + 1787 + '@radix-ui/react-toggle@1.1.10': 1788 + resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} 1789 + peerDependencies: 1790 + '@types/react': '*' 1791 + '@types/react-dom': '*' 1792 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1793 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1794 + peerDependenciesMeta: 1795 + '@types/react': 1796 + optional: true 1797 + '@types/react-dom': 1798 + optional: true 1799 + 1800 + '@radix-ui/react-toolbar@1.1.11': 1801 + resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==} 1802 + peerDependencies: 1803 + '@types/react': '*' 1804 + '@types/react-dom': '*' 1805 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1806 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1807 + peerDependenciesMeta: 1808 + '@types/react': 1809 + optional: true 1810 + '@types/react-dom': 1811 + optional: true 1812 + 1813 + '@radix-ui/react-tooltip@1.2.8': 1814 + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} 1815 + peerDependencies: 1816 + '@types/react': '*' 1817 + '@types/react-dom': '*' 1818 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1819 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1820 + peerDependenciesMeta: 1821 + '@types/react': 1822 + optional: true 1823 + '@types/react-dom': 1824 + optional: true 1825 + 1826 + '@radix-ui/react-use-callback-ref@1.1.1': 1827 + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} 1828 + peerDependencies: 1829 + '@types/react': '*' 1830 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1831 + peerDependenciesMeta: 1832 + '@types/react': 1833 + optional: true 1834 + 1835 + '@radix-ui/react-use-controllable-state@1.2.2': 1836 + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} 1837 + peerDependencies: 1838 + '@types/react': '*' 1839 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1840 + peerDependenciesMeta: 1841 + '@types/react': 1842 + optional: true 1843 + 1844 + '@radix-ui/react-use-effect-event@0.0.2': 1845 + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} 1846 + peerDependencies: 1847 + '@types/react': '*' 1848 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1849 + peerDependenciesMeta: 1850 + '@types/react': 1851 + optional: true 1852 + 1853 + '@radix-ui/react-use-escape-keydown@1.1.1': 1854 + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} 1855 + peerDependencies: 1856 + '@types/react': '*' 1857 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1858 + peerDependenciesMeta: 1859 + '@types/react': 1860 + optional: true 1861 + 1862 + '@radix-ui/react-use-is-hydrated@0.1.0': 1863 + resolution: {integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==} 1864 + peerDependencies: 1865 + '@types/react': '*' 1866 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1867 + peerDependenciesMeta: 1868 + '@types/react': 1869 + optional: true 1870 + 1871 + '@radix-ui/react-use-layout-effect@1.1.1': 1872 + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} 1873 + peerDependencies: 1874 + '@types/react': '*' 1875 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1876 + peerDependenciesMeta: 1877 + '@types/react': 1878 + optional: true 1879 + 1880 + '@radix-ui/react-use-previous@1.1.1': 1881 + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} 1882 + peerDependencies: 1883 + '@types/react': '*' 1884 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1885 + peerDependenciesMeta: 1886 + '@types/react': 1887 + optional: true 1888 + 1889 + '@radix-ui/react-use-rect@1.1.1': 1890 + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} 1891 + peerDependencies: 1892 + '@types/react': '*' 1893 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1894 + peerDependenciesMeta: 1895 + '@types/react': 1896 + optional: true 1897 + 1898 + '@radix-ui/react-use-size@1.1.1': 1899 + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} 1900 + peerDependencies: 1901 + '@types/react': '*' 1902 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1903 + peerDependenciesMeta: 1904 + '@types/react': 1905 + optional: true 1906 + 1907 + '@radix-ui/react-visually-hidden@1.2.3': 1908 + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} 1909 + peerDependencies: 1910 + '@types/react': '*' 1911 + '@types/react-dom': '*' 1912 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1913 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 1914 + peerDependenciesMeta: 1915 + '@types/react': 1916 + optional: true 1917 + '@types/react-dom': 1918 + optional: true 1919 + 1920 + '@radix-ui/rect@1.1.1': 1921 + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} 1922 + 1209 1923 '@react-aria/autocomplete@3.0.0-rc.3': 1210 1924 resolution: {integrity: sha512-vemf7h3hvIDk3MxiiPryysfYgJDg8R72X46dRIeg0+cXKYxjPYou64/DTucSV2z5J6RC5JalINu0jIDaLhEILw==} 1211 1925 peerDependencies: ··· 1791 2505 resolution: {integrity: sha512-ugGHOZU6WbOdeTdbjnaEc+Ms7/WhsUCg+T3PCOIeOT9FG02Ce189yJ/+hd7oqL/tVwIhEMYJIqSCgSELFox+QA==} 1792 2506 peerDependencies: 1793 2507 react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 2508 + 2509 + '@remirror/core-constants@3.0.0': 2510 + resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} 1794 2511 1795 2512 '@remix-run/node-fetch-server@0.8.1': 1796 2513 resolution: {integrity: sha512-J1dev372wtJqmqn9U/qbpbZxbJSQrogNN2+Qv1lKlpATpe/WQ9aCZfl/xSb9d2Rgh1IyLSvNxZAXPZxruO6Xig==} ··· 2445 3162 '@types/react-dom': 2446 3163 optional: true 2447 3164 3165 + '@tiptap/core@2.27.1': 3166 + resolution: {integrity: sha512-nkerkl8syHj44ZzAB7oA2GPmmZINKBKCa79FuNvmGJrJ4qyZwlkDzszud23YteFZEytbc87kVd/fP76ROS6sLg==} 3167 + peerDependencies: 3168 + '@tiptap/pm': ^2.7.0 3169 + 3170 + '@tiptap/extension-blockquote@2.27.1': 3171 + resolution: {integrity: sha512-QrUX3muElDrNjKM3nqCSAtm3H3pT33c6ON8kwRiQboOAjT/9D57Cs7XEVY7r6rMaJPeKztrRUrNVF9w/w/6B0A==} 3172 + peerDependencies: 3173 + '@tiptap/core': ^2.7.0 3174 + 3175 + '@tiptap/extension-bold@2.27.1': 3176 + resolution: {integrity: sha512-g4l4p892x/r7mhea8syp3fNYODxsDrimgouQ+q4DKXIgQmm5+uNhyuEPexP3I8TFNXqQ4DlMNFoM9yCqk97etQ==} 3177 + peerDependencies: 3178 + '@tiptap/core': ^2.7.0 3179 + 3180 + '@tiptap/extension-bubble-menu@2.27.1': 3181 + resolution: {integrity: sha512-ki1R27VsSvY2tT9Q2DIlcATwLOoEjf5DsN+5sExarQ8S/ZxT/tvIjRxB8Dx7lb2a818W5f/NER26YchGtmHfpg==} 3182 + peerDependencies: 3183 + '@tiptap/core': ^2.7.0 3184 + '@tiptap/pm': ^2.7.0 3185 + 3186 + '@tiptap/extension-bullet-list@2.27.1': 3187 + resolution: {integrity: sha512-5FmnfXkJ76wN4EbJNzBhAlmQxho8yEMIJLchTGmXdsD/n/tsyVVtewnQYaIOj/Z7naaGySTGDmjVtLgTuQ+Sxw==} 3188 + peerDependencies: 3189 + '@tiptap/core': ^2.7.0 3190 + 3191 + '@tiptap/extension-code-block@2.27.1': 3192 + resolution: {integrity: sha512-wCI5VIOfSAdkenCWFvh4m8FFCJ51EOK+CUmOC/PWUjyo2Dgn8QC8HMi015q8XF7886T0KvYVVoqxmxJSUDAYNg==} 3193 + peerDependencies: 3194 + '@tiptap/core': ^2.7.0 3195 + '@tiptap/pm': ^2.7.0 3196 + 3197 + '@tiptap/extension-code@2.27.1': 3198 + resolution: {integrity: sha512-i65wUGJevzBTIIUBHBc1ggVa27bgemvGl/tY1/89fEuS/0Xmre+OQjw8rCtSLevoHSiYYLgLRlvjtUSUhE4kgg==} 3199 + peerDependencies: 3200 + '@tiptap/core': ^2.7.0 3201 + 3202 + '@tiptap/extension-document@2.27.1': 3203 + resolution: {integrity: sha512-NtJzJY7Q/6XWjpOm5OXKrnEaofrcc1XOTYlo/SaTwl8k2bZo918Vl0IDBWhPVDsUN7kx767uHwbtuQZ+9I82hA==} 3204 + peerDependencies: 3205 + '@tiptap/core': ^2.7.0 3206 + 3207 + '@tiptap/extension-dropcursor@2.27.1': 3208 + resolution: {integrity: sha512-3MBQRGHHZ0by3OT0CWbLKS7J3PH9PpobrXjmIR7kr0nde7+bHqxXiVNuuIf501oKU9rnEUSedipSHkLYGkmfsA==} 3209 + peerDependencies: 3210 + '@tiptap/core': ^2.7.0 3211 + '@tiptap/pm': ^2.7.0 3212 + 3213 + '@tiptap/extension-floating-menu@2.27.1': 3214 + resolution: {integrity: sha512-nUk/8DbiXO69l6FDwkWso94BTf52IBoWALo+YGWT6o+FO6cI9LbUGghEX2CdmQYXCvSvwvISF2jXeLQWNZvPZQ==} 3215 + peerDependencies: 3216 + '@tiptap/core': ^2.7.0 3217 + '@tiptap/pm': ^2.7.0 3218 + 3219 + '@tiptap/extension-gapcursor@2.27.1': 3220 + resolution: {integrity: sha512-A9e1jr+jGhDWzNSXtIO6PYVYhf5j/udjbZwMja+wCE/3KvZU9V3IrnGKz1xNW+2Q2BDOe1QO7j5uVL9ElR6nTA==} 3221 + peerDependencies: 3222 + '@tiptap/core': ^2.7.0 3223 + '@tiptap/pm': ^2.7.0 3224 + 3225 + '@tiptap/extension-hard-break@2.27.1': 3226 + resolution: {integrity: sha512-W4hHa4Io6QCTwpyTlN6UAvqMIQ7t56kIUByZhyY9EWrg/+JpbfpxE1kXFLPB4ZGgwBknFOw+e4bJ1j3oAbTJFw==} 3227 + peerDependencies: 3228 + '@tiptap/core': ^2.7.0 3229 + 3230 + '@tiptap/extension-heading@2.27.1': 3231 + resolution: {integrity: sha512-6xoC7igZlW1EmnQ5WVH9IL7P1nCQb3bBUaIDLvk7LbweEogcTUECI4Xg1vxMOVmj9tlDe1I4BsgfcKpB5KEsZw==} 3232 + peerDependencies: 3233 + '@tiptap/core': ^2.7.0 3234 + 3235 + '@tiptap/extension-highlight@2.27.1': 3236 + resolution: {integrity: sha512-ntuYX09tvHQE/R/8WbTOxbFuQhRr2jhTkKz/gLwDD2o8IhccSy3f0nm+mVmVamKQnbsBBbLohojd5IGOnX9f1A==} 3237 + peerDependencies: 3238 + '@tiptap/core': ^2.7.0 3239 + 3240 + '@tiptap/extension-history@2.27.1': 3241 + resolution: {integrity: sha512-K8PHC9gegSAt0wzSlsd4aUpoEyIJYOmVVeyniHr1P1mIblW1KYEDbRGbDlrLALTyUEfMcBhdIm8zrB9X2Nihvg==} 3242 + peerDependencies: 3243 + '@tiptap/core': ^2.7.0 3244 + '@tiptap/pm': ^2.7.0 3245 + 3246 + '@tiptap/extension-horizontal-rule@2.27.1': 3247 + resolution: {integrity: sha512-WxXWGEEsqDmGIF2o9av+3r9Qje4CKrqrpeQY6aRO5bxvWX9AabQCfasepayBok6uwtvNzh3Xpsn9zbbSk09dNA==} 3248 + peerDependencies: 3249 + '@tiptap/core': ^2.7.0 3250 + '@tiptap/pm': ^2.7.0 3251 + 3252 + '@tiptap/extension-italic@2.27.1': 3253 + resolution: {integrity: sha512-rcm0GyniWW0UhcNI9+1eIK64GqWQLyIIrWGINslvqSUoBc+WkfocLvv4CMpRkzKlfsAxwVIBuH2eLxHKDtAREA==} 3254 + peerDependencies: 3255 + '@tiptap/core': ^2.7.0 3256 + 3257 + '@tiptap/extension-link@2.27.1': 3258 + resolution: {integrity: sha512-cCwWPZsnVh9MXnGOqSIRXPPuUixRDK8eMN2TvqwbxUBb1TU7b/HtNvfMU4tAOqAuMRJ0aJkFuf3eB0Gi8LVb1g==} 3259 + peerDependencies: 3260 + '@tiptap/core': ^2.7.0 3261 + '@tiptap/pm': ^2.7.0 3262 + 3263 + '@tiptap/extension-list-item@2.27.1': 3264 + resolution: {integrity: sha512-dtsxvtzxfwOJP6dKGf0vb2MJAoDF2NxoiWzpq0XTvo7NGGYUHfuHjX07Zp0dYqb4seaDXjwsi5BIQUOp3+WMFQ==} 3265 + peerDependencies: 3266 + '@tiptap/core': ^2.7.0 3267 + 3268 + '@tiptap/extension-ordered-list@2.27.1': 3269 + resolution: {integrity: sha512-U1/sWxc2TciozQsZjH35temyidYUjvroHj3PUPzPyh19w2fwKh1NSbFybWuoYs6jS3XnMSwnM2vF52tOwvfEmA==} 3270 + peerDependencies: 3271 + '@tiptap/core': ^2.7.0 3272 + 3273 + '@tiptap/extension-paragraph@2.27.1': 3274 + resolution: {integrity: sha512-R3QdrHcUdFAsdsn2UAIvhY0yWyHjqGyP/Rv8RRdN0OyFiTKtwTPqreKMHKJOflgX4sMJl/OpHTpNG1Kaf7Lo2A==} 3275 + peerDependencies: 3276 + '@tiptap/core': ^2.7.0 3277 + 3278 + '@tiptap/extension-strike@2.27.1': 3279 + resolution: {integrity: sha512-S9I//K8KPgfFTC5I5lorClzXk0g4lrAv9y5qHzHO5EOWt7AFl0YTg2oN8NKSIBK4bHRnPIrjJJKv+dDFnUp5jQ==} 3280 + peerDependencies: 3281 + '@tiptap/core': ^2.7.0 3282 + 3283 + '@tiptap/extension-text-style@2.27.1': 3284 + resolution: {integrity: sha512-NagQ9qLk0Ril83gfrk+C65SvTqPjL3WVnLF2arsEVnCrxcx3uDOvdJW67f/K5HEwEHsoqJ4Zq9Irco/koXrOXA==} 3285 + peerDependencies: 3286 + '@tiptap/core': ^2.7.0 3287 + 3288 + '@tiptap/extension-text@2.27.1': 3289 + resolution: {integrity: sha512-a4GCT+GZ9tUwl82F4CEum9/+WsuW0/De9Be/NqrMmi7eNfAwbUTbLCTFU0gEvv25WMHCoUzaeNk/qGmzeVPJ1Q==} 3290 + peerDependencies: 3291 + '@tiptap/core': ^2.7.0 3292 + 3293 + '@tiptap/pm@2.27.1': 3294 + resolution: {integrity: sha512-ijKo3+kIjALthYsnBmkRXAuw2Tswd9gd7BUR5OMfIcjGp8v576vKxOxrRfuYiUM78GPt//P0sVc1WV82H5N0PQ==} 3295 + 3296 + '@tiptap/react@2.27.1': 3297 + resolution: {integrity: sha512-leJximSjYJuhLJQv9azOP9R7w6zuxVgKOHYT4w83Gte7GhWMpNL6xRWzld280vyq/YW/cSYjPb/8ESEOgKNBdQ==} 3298 + peerDependencies: 3299 + '@tiptap/core': ^2.7.0 3300 + '@tiptap/pm': ^2.7.0 3301 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 3302 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 3303 + 3304 + '@tiptap/starter-kit@2.27.1': 3305 + resolution: {integrity: sha512-uQQlP0Nmn9eq19qm8YoOeloEfmcGbPpB1cujq54Q6nPgxaBozR7rE7tXbFTinxRW2+Hr7XyNWhpjB7DMNkdU2Q==} 3306 + 3307 + '@tldraw/editor@4.1.2': 3308 + resolution: {integrity: sha512-UJkwauIuCwYF5I9aS/zc6Jzfiur9TSuzPTRPze4PKIul77GoPnP8UoPuEBZtZHYq4Jmn8nvy8Rkc+ckM4Q+2gQ==} 3309 + peerDependencies: 3310 + react: ^18.2.0 || ^19.0.0 3311 + react-dom: ^18.2.0 || ^19.0.0 3312 + 3313 + '@tldraw/state-react@4.1.2': 3314 + resolution: {integrity: sha512-P794F82zl9JObF+kH+S8Wg75pbm2u0ijgbRYyizllQSFReFCwU5OZ5exxPe3/HW3I+fIskd+KfOTHISHB6RV4A==} 3315 + peerDependencies: 3316 + react: ^18.2.0 || ^19.0.0 3317 + react-dom: ^18.2.0 || ^19.0.0 3318 + 3319 + '@tldraw/state@4.1.2': 3320 + resolution: {integrity: sha512-yAJ40GyP/pwTRJdey9GFHP9Of+kF3sajU+k65EwGA4zQq4Wya7W5JhnPLDXFIm7W/MNGKkEw0Pv3KfMbez+w0A==} 3321 + 3322 + '@tldraw/store@4.1.2': 3323 + resolution: {integrity: sha512-hSBN/yR+ueGOVDfTaJ9II1c9rGxZr85YT/+o6Y4+oDVqO12f8fRd8iP9/ozxPPgHKNw1wcEi/YBGwSzZW8Vvww==} 3324 + peerDependencies: 3325 + react: ^18.2.0 || ^19.0.0 3326 + 3327 + '@tldraw/tlschema@4.1.2': 3328 + resolution: {integrity: sha512-Jqxwb8KdavTfHC3BfvKZNPRe/Fx98SvoWQCJ/iIfqbaOB0ifqabaQtpJL0sRlkMPrqzNLeewxlB1Ft2wWZHr/A==} 3329 + peerDependencies: 3330 + react: ^18.2.0 || ^19.0.0 3331 + react-dom: ^18.2.0 || ^19.0.0 3332 + 3333 + '@tldraw/utils@4.1.2': 3334 + resolution: {integrity: sha512-9GG9mA0OaVJgNSPkObypWIhRJvCcyH905ynwfZz6g2ott1MCCZC0CWtj5pRIg98lV3eQlem1sQxSX8L8Go0ilg==} 3335 + 3336 + '@tldraw/validate@4.1.2': 3337 + resolution: {integrity: sha512-SqaCVkm2T2E9WtF9LeYs2/aLVdd0FitL1+4UM9WuzhR524A2eDvM8P4a7PNaApNUAfVmbTJnZ2eJRHDH6QyRAA==} 3338 + 2448 3339 '@tybys/wasm-util@0.10.1': 2449 3340 resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} 2450 3341 ··· 2472 3363 '@types/command-line-usage@5.0.4': 2473 3364 resolution: {integrity: sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==} 2474 3365 3366 + '@types/core-js@2.5.8': 3367 + resolution: {integrity: sha512-VgnAj6tIAhJhZdJ8/IpxdatM8G4OD3VWGlp6xIxUGENZlpbob9Ty4VVdC1FIEp0aK6DBscDDjyzy5FB60TuNqg==} 3368 + 2475 3369 '@types/debug@4.1.12': 2476 3370 resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} 2477 3371 ··· 2496 3390 '@types/json-schema@7.0.15': 2497 3391 resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 2498 3392 3393 + '@types/linkify-it@5.0.0': 3394 + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} 3395 + 3396 + '@types/markdown-it@14.1.2': 3397 + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} 3398 + 2499 3399 '@types/mdast@4.0.4': 2500 3400 resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} 3401 + 3402 + '@types/mdurl@2.0.0': 3403 + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} 2501 3404 2502 3405 '@types/mdx@2.0.13': 2503 3406 resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} ··· 2527 3430 2528 3431 '@types/unist@3.0.3': 2529 3432 resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} 3433 + 3434 + '@types/use-sync-external-store@0.0.6': 3435 + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} 2530 3436 2531 3437 '@typescript-eslint/eslint-plugin@8.46.2': 2532 3438 resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} ··· 2684 3590 resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} 2685 3591 cpu: [x64] 2686 3592 os: [win32] 3593 + 3594 + '@use-gesture/core@10.3.1': 3595 + resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} 3596 + 3597 + '@use-gesture/react@10.3.1': 3598 + resolution: {integrity: sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g==} 3599 + peerDependencies: 3600 + react: '>= 16.8.0' 2687 3601 2688 3602 '@vercel/nft@0.30.3': 2689 3603 resolution: {integrity: sha512-UEq+eF0ocEf9WQCV1gktxKhha36KDs7jln5qii6UpPf5clMqDc0p3E7d9l2Smx0i9Pm1qpq4S4lLfNl97bbv6w==} ··· 2933 3847 argparse@2.0.1: 2934 3848 resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 2935 3849 3850 + aria-hidden@1.2.6: 3851 + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} 3852 + engines: {node: '>=10'} 3853 + 2936 3854 aria-query@5.3.0: 2937 3855 resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 2938 3856 ··· 3204 4122 citty@0.1.6: 3205 4123 resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} 3206 4124 4125 + classnames@2.5.1: 4126 + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} 4127 + 3207 4128 clean-regexp@1.0.0: 3208 4129 resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} 3209 4130 engines: {node: '>=4'} ··· 3329 4250 3330 4251 core-js-compat@3.46.0: 3331 4252 resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} 4253 + 4254 + core-js@3.46.0: 4255 + resolution: {integrity: sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==} 3332 4256 3333 4257 core-util-is@1.0.3: 3334 4258 resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} ··· 3342 4266 resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} 3343 4267 engines: {node: '>= 14'} 3344 4268 4269 + crelt@1.0.6: 4270 + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} 4271 + 3345 4272 croner@9.1.0: 3346 4273 resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==} 3347 4274 engines: {node: '>=18.0'} ··· 3501 4428 detect-libc@2.1.2: 3502 4429 resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 3503 4430 engines: {node: '>=8'} 4431 + 4432 + detect-node-es@1.1.0: 4433 + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} 3504 4434 3505 4435 devlop@1.1.0: 3506 4436 resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} ··· 3879 4809 event-target-shim@5.0.1: 3880 4810 resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 3881 4811 engines: {node: '>=6'} 4812 + 4813 + eventemitter3@4.0.7: 4814 + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} 3882 4815 3883 4816 events-universal@1.0.1: 3884 4817 resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} ··· 3992 4925 resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} 3993 4926 engines: {node: '>=0.4.x'} 3994 4927 4928 + fractional-indexing@3.2.0: 4929 + resolution: {integrity: sha512-PcOxmqwYCW7O2ovKRU8OoQQj2yqTfEB/yeTYk4gPid6dN5ODRfU1hXd9tTVZzax/0NkO7AxpHykvZnT1aYp/BQ==} 4930 + engines: {node: ^14.13.1 || >=16.0.0} 4931 + 3995 4932 fresh@2.0.0: 3996 4933 resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} 3997 4934 engines: {node: '>= 0.8'} ··· 4030 4967 get-intrinsic@1.3.0: 4031 4968 resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 4032 4969 engines: {node: '>= 0.4'} 4970 + 4971 + get-nonce@1.0.1: 4972 + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} 4973 + engines: {node: '>=6'} 4033 4974 4034 4975 get-port-please@3.2.0: 4035 4976 resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} ··· 4198 5139 hookable@5.5.3: 4199 5140 resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 4200 5141 5142 + hotkeys-js@3.13.15: 5143 + resolution: {integrity: sha512-gHh8a/cPTCpanraePpjRxyIlxDFrIhYqjuh01UHWEwDpglJKCnvLW8kqSx5gQtOuSsJogNZXLhOdbSExpgUiqg==} 5144 + 4201 5145 hsl-regex@1.0.0: 4202 5146 resolution: {integrity: sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==} 4203 5147 ··· 4243 5187 iconv-lite@0.6.3: 4244 5188 resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 4245 5189 engines: {node: '>=0.10.0'} 5190 + 5191 + idb@7.1.1: 5192 + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} 4246 5193 4247 5194 ieee754@1.2.1: 4248 5195 resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} ··· 4439 5386 resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 4440 5387 engines: {node: '>=12'} 4441 5388 5389 + is-plain-object@5.0.0: 5390 + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} 5391 + engines: {node: '>=0.10.0'} 5392 + 4442 5393 is-potential-custom-element-name@1.0.1: 4443 5394 resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} 4444 5395 ··· 4556 5507 resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 4557 5508 hasBin: true 4558 5509 5510 + jittered-fractional-indexing@1.0.0: 5511 + resolution: {integrity: sha512-sCFp83Upn1UzNgqSpWabWfkFtBwIjH+QyyJxLCGRamsIwOCs0Fx0yYxva9/NYV/iMLlUN3/xZY8/ZdYIwIlJ5g==} 5512 + engines: {node: '>=18.0.0'} 5513 + 4559 5514 js-tokens@4.0.0: 4560 5515 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 4561 5516 ··· 4720 5675 resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 4721 5676 engines: {node: '>=14'} 4722 5677 5678 + linkify-it@5.0.0: 5679 + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} 5680 + 5681 + linkifyjs@4.3.2: 5682 + resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==} 5683 + 4723 5684 listhen@1.9.0: 4724 5685 resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==} 4725 5686 hasBin: true ··· 4745 5706 lodash.isarguments@3.1.0: 4746 5707 resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} 4747 5708 5709 + lodash.isequal@4.5.0: 5710 + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} 5711 + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. 5712 + 5713 + lodash.isequalwith@4.4.0: 5714 + resolution: {integrity: sha512-dcZON0IalGBpRmJBmMkaoV7d3I80R2O+FrzsZyHdNSFrANq/cgDqKQNmAHE8UEj4+QYWwwhkQOVdLHiAopzlsQ==} 5715 + 4748 5716 lodash.merge@4.6.2: 4749 5717 resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 4750 5718 5719 + lodash.throttle@4.1.1: 5720 + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} 5721 + 5722 + lodash.uniq@4.5.0: 5723 + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} 5724 + 4751 5725 lodash@4.17.21: 4752 5726 resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 4753 5727 ··· 4803 5777 resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} 4804 5778 engines: {node: '>=16'} 4805 5779 5780 + markdown-it@14.1.0: 5781 + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} 5782 + hasBin: true 5783 + 4806 5784 math-intrinsics@1.1.0: 4807 5785 resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 4808 5786 engines: {node: '>= 0.4'} ··· 4839 5817 4840 5818 mdn-data@2.12.2: 4841 5819 resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} 5820 + 5821 + mdurl@2.0.0: 5822 + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} 4842 5823 4843 5824 mdx-bundler@10.1.1: 4844 5825 resolution: {integrity: sha512-87FtxC7miUPznwqEaAlJARinHJ6Qin9kDuG2E2BCCNEOszr62kHpqivI/IF/CmwObVSpvApVFFxN1ftM/Gykvw==} ··· 5150 6131 resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 5151 6132 engines: {node: '>= 0.8.0'} 5152 6133 6134 + orderedmap@2.1.1: 6135 + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} 6136 + 5153 6137 own-keys@1.0.1: 5154 6138 resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 5155 6139 engines: {node: '>= 0.4'} ··· 5301 6285 property-information@7.1.0: 5302 6286 resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} 5303 6287 6288 + prosemirror-changeset@2.3.1: 6289 + resolution: {integrity: sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==} 6290 + 6291 + prosemirror-collab@1.3.1: 6292 + resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} 6293 + 6294 + prosemirror-commands@1.7.1: 6295 + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} 6296 + 6297 + prosemirror-dropcursor@1.8.2: 6298 + resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} 6299 + 6300 + prosemirror-gapcursor@1.4.0: 6301 + resolution: {integrity: sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==} 6302 + 6303 + prosemirror-history@1.4.1: 6304 + resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} 6305 + 6306 + prosemirror-inputrules@1.5.1: 6307 + resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} 6308 + 6309 + prosemirror-keymap@1.2.3: 6310 + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} 6311 + 6312 + prosemirror-markdown@1.13.2: 6313 + resolution: {integrity: sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==} 6314 + 6315 + prosemirror-menu@1.2.5: 6316 + resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==} 6317 + 6318 + prosemirror-model@1.25.4: 6319 + resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} 6320 + 6321 + prosemirror-schema-basic@1.2.4: 6322 + resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} 6323 + 6324 + prosemirror-schema-list@1.5.1: 6325 + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} 6326 + 6327 + prosemirror-state@1.4.4: 6328 + resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} 6329 + 6330 + prosemirror-tables@1.8.1: 6331 + resolution: {integrity: sha512-DAgDoUYHCcc6tOGpLVPSU1k84kCUWTWnfWX3UDy2Delv4ryH0KqTD6RBI6k4yi9j9I8gl3j8MkPpRD/vWPZbug==} 6332 + 6333 + prosemirror-trailing-node@3.0.0: 6334 + resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} 6335 + peerDependencies: 6336 + prosemirror-model: ^1.22.1 6337 + prosemirror-state: ^1.4.2 6338 + prosemirror-view: ^1.33.8 6339 + 6340 + prosemirror-transform@1.10.4: 6341 + resolution: {integrity: sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==} 6342 + 6343 + prosemirror-view@1.41.3: 6344 + resolution: {integrity: sha512-SqMiYMUQNNBP9kfPhLO8WXEk/fon47vc52FQsUiJzTBuyjKgEcoAwMyF04eQ4WZ2ArMn7+ReypYL60aKngbACQ==} 6345 + 6346 + punycode.js@2.3.1: 6347 + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} 6348 + engines: {node: '>=6'} 6349 + 5304 6350 punycode@2.3.1: 5305 6351 resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 5306 6352 engines: {node: '>=6'} ··· 5310 6356 5311 6357 queue-microtask@1.2.3: 5312 6358 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 6359 + 6360 + radix-ui@1.4.3: 6361 + resolution: {integrity: sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==} 6362 + peerDependencies: 6363 + '@types/react': '*' 6364 + '@types/react-dom': '*' 6365 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 6366 + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 6367 + peerDependenciesMeta: 6368 + '@types/react': 6369 + optional: true 6370 + '@types/react-dom': 6371 + optional: true 5313 6372 5314 6373 radix3@1.1.2: 5315 6374 resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} ··· 5366 6425 resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} 5367 6426 engines: {node: '>=0.10.0'} 5368 6427 6428 + react-remove-scroll-bar@2.3.8: 6429 + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} 6430 + engines: {node: '>=10'} 6431 + peerDependencies: 6432 + '@types/react': '*' 6433 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 6434 + peerDependenciesMeta: 6435 + '@types/react': 6436 + optional: true 6437 + 6438 + react-remove-scroll@2.7.1: 6439 + resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} 6440 + engines: {node: '>=10'} 6441 + peerDependencies: 6442 + '@types/react': '*' 6443 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc 6444 + peerDependenciesMeta: 6445 + '@types/react': 6446 + optional: true 6447 + 5369 6448 react-server-dom-webpack@19.2.0: 5370 6449 resolution: {integrity: sha512-ar2H1q9SvonShYYYszHx7gE3v9NF3K01AvrIvQMIRNXj+CiUDjI2C7XKexDSlOzqwSlxgDivaMdYwfEBYD6NjQ==} 5371 6450 engines: {node: '>=0.10.0'} ··· 5378 6457 resolution: {integrity: sha512-lYt2o1dd6dK8Bb4GRh08RG/2u64bSA1cqtRqtw4jEMgxC7Q17RFcIumBbChErndSdLzafEG/UBwV6shOfig6yw==} 5379 6458 peerDependencies: 5380 6459 react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 6460 + 6461 + react-style-singleton@2.2.3: 6462 + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} 6463 + engines: {node: '>=10'} 6464 + peerDependencies: 6465 + '@types/react': '*' 6466 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc 6467 + peerDependenciesMeta: 6468 + '@types/react': 6469 + optional: true 5381 6470 5382 6471 react@19.2.0: 5383 6472 resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} ··· 5546 6635 resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} 5547 6636 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 5548 6637 hasBin: true 6638 + 6639 + rope-sequence@1.3.4: 6640 + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} 5549 6641 5550 6642 rou3@0.7.8: 5551 6643 resolution: {integrity: sha512-21X/el5fdOaEsqwl3an/d9kpZ8hshVIyrwFCpsoleJ4ccAGRbN+PVoxyXzWXkHDxfMkVnLe4yzx+imz2qoem2Q==} ··· 5957 7049 resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} 5958 7050 engines: {node: '>=14.0.0'} 5959 7051 7052 + tippy.js@6.3.7: 7053 + resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} 7054 + 7055 + tldraw@4.1.2: 7056 + resolution: {integrity: sha512-1eW9blERh7Fb5vX6ecHxQrEDCIUGBIvwJ3II4YVqetKdP66BfmA77N+lkA80IPtaIw5EgC24FpHn/5rE9rmm1w==} 7057 + peerDependencies: 7058 + react: ^18.2.0 || ^19.0.0 7059 + react-dom: ^18.2.0 || ^19.0.0 7060 + 5960 7061 tldts-core@7.0.17: 5961 7062 resolution: {integrity: sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==} 5962 7063 ··· 6111 7212 typical@5.2.0: 6112 7213 resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} 6113 7214 engines: {node: '>=8'} 7215 + 7216 + uc.micro@2.1.0: 7217 + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} 6114 7218 6115 7219 ufo@1.6.1: 6116 7220 resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} ··· 6273 7377 uri-js@4.4.1: 6274 7378 resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 6275 7379 7380 + use-callback-ref@1.3.3: 7381 + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} 7382 + engines: {node: '>=10'} 7383 + peerDependencies: 7384 + '@types/react': '*' 7385 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc 7386 + peerDependenciesMeta: 7387 + '@types/react': 7388 + optional: true 7389 + 7390 + use-sidecar@1.1.3: 7391 + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} 7392 + engines: {node: '>=10'} 7393 + peerDependencies: 7394 + '@types/react': '*' 7395 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc 7396 + peerDependenciesMeta: 7397 + '@types/react': 7398 + optional: true 7399 + 6276 7400 use-sync-external-store@1.6.0: 6277 7401 resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} 6278 7402 peerDependencies: ··· 6453 7577 optional: true 6454 7578 jsdom: 6455 7579 optional: true 7580 + 7581 + w3c-keyname@2.2.8: 7582 + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} 6456 7583 6457 7584 w3c-xmlserializer@5.0.0: 6458 7585 resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} ··· 7207 8334 7208 8335 '@fal-works/esbuild-plugin-global-externals@2.1.2': {} 7209 8336 8337 + '@floating-ui/core@1.7.3': 8338 + dependencies: 8339 + '@floating-ui/utils': 0.2.10 8340 + 8341 + '@floating-ui/dom@1.7.4': 8342 + dependencies: 8343 + '@floating-ui/core': 1.7.3 8344 + '@floating-ui/utils': 0.2.10 8345 + 8346 + '@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8347 + dependencies: 8348 + '@floating-ui/dom': 1.7.4 8349 + react: 19.2.0 8350 + react-dom: 19.2.0(react@19.2.0) 8351 + 8352 + '@floating-ui/utils@0.2.10': {} 8353 + 7210 8354 '@formatjs/ecma402-abstract@2.3.6': 7211 8355 dependencies: 7212 8356 '@formatjs/fast-memoize': 2.2.7 ··· 7498 8642 '@pkgjs/parseargs@0.11.0': 7499 8643 optional: true 7500 8644 8645 + '@popperjs/core@2.11.8': {} 8646 + 7501 8647 '@poppinss/colors@4.1.5': 7502 8648 dependencies: 7503 8649 kleur: 4.1.5 ··· 7512 8658 7513 8659 '@radix-ui/colors@3.0.0': {} 7514 8660 8661 + '@radix-ui/number@1.1.1': {} 8662 + 8663 + '@radix-ui/primitive@1.1.3': {} 8664 + 8665 + '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8666 + dependencies: 8667 + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8668 + react: 19.2.0 8669 + react-dom: 19.2.0(react@19.2.0) 8670 + optionalDependencies: 8671 + '@types/react': 19.2.0 8672 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8673 + 8674 + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8675 + dependencies: 8676 + '@radix-ui/primitive': 1.1.3 8677 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8678 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8679 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8680 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8681 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8682 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8683 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8684 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 8685 + react: 19.2.0 8686 + react-dom: 19.2.0(react@19.2.0) 8687 + optionalDependencies: 8688 + '@types/react': 19.2.0 8689 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8690 + 8691 + '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8692 + dependencies: 8693 + '@radix-ui/primitive': 1.1.3 8694 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8695 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8696 + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8697 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8698 + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) 8699 + react: 19.2.0 8700 + react-dom: 19.2.0(react@19.2.0) 8701 + optionalDependencies: 8702 + '@types/react': 19.2.0 8703 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8704 + 8705 + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8706 + dependencies: 8707 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8708 + react: 19.2.0 8709 + react-dom: 19.2.0(react@19.2.0) 8710 + optionalDependencies: 8711 + '@types/react': 19.2.0 8712 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8713 + 8714 + '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8715 + dependencies: 8716 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8717 + react: 19.2.0 8718 + react-dom: 19.2.0(react@19.2.0) 8719 + optionalDependencies: 8720 + '@types/react': 19.2.0 8721 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8722 + 8723 + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8724 + dependencies: 8725 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8726 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8727 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8728 + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.0)(react@19.2.0) 8729 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8730 + react: 19.2.0 8731 + react-dom: 19.2.0(react@19.2.0) 8732 + optionalDependencies: 8733 + '@types/react': 19.2.0 8734 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8735 + 8736 + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8737 + dependencies: 8738 + '@radix-ui/primitive': 1.1.3 8739 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8740 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8741 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8742 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8743 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 8744 + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8745 + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8746 + react: 19.2.0 8747 + react-dom: 19.2.0(react@19.2.0) 8748 + optionalDependencies: 8749 + '@types/react': 19.2.0 8750 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8751 + 8752 + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8753 + dependencies: 8754 + '@radix-ui/primitive': 1.1.3 8755 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8756 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8757 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8758 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8759 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8760 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 8761 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8762 + react: 19.2.0 8763 + react-dom: 19.2.0(react@19.2.0) 8764 + optionalDependencies: 8765 + '@types/react': 19.2.0 8766 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8767 + 8768 + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8769 + dependencies: 8770 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8771 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8772 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8773 + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) 8774 + react: 19.2.0 8775 + react-dom: 19.2.0(react@19.2.0) 8776 + optionalDependencies: 8777 + '@types/react': 19.2.0 8778 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8779 + 8780 + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.0)(react@19.2.0)': 8781 + dependencies: 8782 + react: 19.2.0 8783 + optionalDependencies: 8784 + '@types/react': 19.2.0 8785 + 8786 + '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8787 + dependencies: 8788 + '@radix-ui/primitive': 1.1.3 8789 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8790 + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8791 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8792 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8793 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 8794 + react: 19.2.0 8795 + react-dom: 19.2.0(react@19.2.0) 8796 + optionalDependencies: 8797 + '@types/react': 19.2.0 8798 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8799 + 8800 + '@radix-ui/react-context@1.1.2(@types/react@19.2.0)(react@19.2.0)': 8801 + dependencies: 8802 + react: 19.2.0 8803 + optionalDependencies: 8804 + '@types/react': 19.2.0 8805 + 8806 + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8807 + dependencies: 8808 + '@radix-ui/primitive': 1.1.3 8809 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8810 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8811 + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8812 + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.2.0) 8813 + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8814 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8815 + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8816 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8817 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8818 + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) 8819 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 8820 + aria-hidden: 1.2.6 8821 + react: 19.2.0 8822 + react-dom: 19.2.0(react@19.2.0) 8823 + react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.2.0) 8824 + optionalDependencies: 8825 + '@types/react': 19.2.0 8826 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8827 + 8828 + '@radix-ui/react-direction@1.1.1(@types/react@19.2.0)(react@19.2.0)': 8829 + dependencies: 8830 + react: 19.2.0 8831 + optionalDependencies: 8832 + '@types/react': 19.2.0 8833 + 8834 + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8835 + dependencies: 8836 + '@radix-ui/primitive': 1.1.3 8837 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8838 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8839 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8840 + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8841 + react: 19.2.0 8842 + react-dom: 19.2.0(react@19.2.0) 8843 + optionalDependencies: 8844 + '@types/react': 19.2.0 8845 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8846 + 8847 + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8848 + dependencies: 8849 + '@radix-ui/primitive': 1.1.3 8850 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8851 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8852 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8853 + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8854 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8855 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 8856 + react: 19.2.0 8857 + react-dom: 19.2.0(react@19.2.0) 8858 + optionalDependencies: 8859 + '@types/react': 19.2.0 8860 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8861 + 8862 + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.0)(react@19.2.0)': 8863 + dependencies: 8864 + react: 19.2.0 8865 + optionalDependencies: 8866 + '@types/react': 19.2.0 8867 + 8868 + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8869 + dependencies: 8870 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8871 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8872 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8873 + react: 19.2.0 8874 + react-dom: 19.2.0(react@19.2.0) 8875 + optionalDependencies: 8876 + '@types/react': 19.2.0 8877 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8878 + 8879 + '@radix-ui/react-form@0.1.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8880 + dependencies: 8881 + '@radix-ui/primitive': 1.1.3 8882 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8883 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8884 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8885 + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8886 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8887 + react: 19.2.0 8888 + react-dom: 19.2.0(react@19.2.0) 8889 + optionalDependencies: 8890 + '@types/react': 19.2.0 8891 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8892 + 8893 + '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8894 + dependencies: 8895 + '@radix-ui/primitive': 1.1.3 8896 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8897 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8898 + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8899 + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8900 + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8901 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8902 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8903 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 8904 + react: 19.2.0 8905 + react-dom: 19.2.0(react@19.2.0) 8906 + optionalDependencies: 8907 + '@types/react': 19.2.0 8908 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8909 + 8910 + '@radix-ui/react-id@1.1.1(@types/react@19.2.0)(react@19.2.0)': 8911 + dependencies: 8912 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8913 + react: 19.2.0 8914 + optionalDependencies: 8915 + '@types/react': 19.2.0 8916 + 8917 + '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8918 + dependencies: 8919 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8920 + react: 19.2.0 8921 + react-dom: 19.2.0(react@19.2.0) 8922 + optionalDependencies: 8923 + '@types/react': 19.2.0 8924 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8925 + 8926 + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8927 + dependencies: 8928 + '@radix-ui/primitive': 1.1.3 8929 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8930 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8931 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8932 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8933 + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8934 + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.2.0) 8935 + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8936 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8937 + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8938 + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8939 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8940 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8941 + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8942 + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) 8943 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8944 + aria-hidden: 1.2.6 8945 + react: 19.2.0 8946 + react-dom: 19.2.0(react@19.2.0) 8947 + react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.2.0) 8948 + optionalDependencies: 8949 + '@types/react': 19.2.0 8950 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8951 + 8952 + '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8953 + dependencies: 8954 + '@radix-ui/primitive': 1.1.3 8955 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8956 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8957 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8958 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8959 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8960 + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8961 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8962 + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8963 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 8964 + react: 19.2.0 8965 + react-dom: 19.2.0(react@19.2.0) 8966 + optionalDependencies: 8967 + '@types/react': 19.2.0 8968 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8969 + 8970 + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8971 + dependencies: 8972 + '@radix-ui/primitive': 1.1.3 8973 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8974 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8975 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8976 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8977 + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8978 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8979 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8980 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8981 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8982 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 8983 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8984 + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.0)(react@19.2.0) 8985 + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8986 + react: 19.2.0 8987 + react-dom: 19.2.0(react@19.2.0) 8988 + optionalDependencies: 8989 + '@types/react': 19.2.0 8990 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 8991 + 8992 + '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 8993 + dependencies: 8994 + '@radix-ui/number': 1.1.1 8995 + '@radix-ui/primitive': 1.1.3 8996 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 8997 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8998 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 8999 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9000 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9001 + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9002 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9003 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.0)(react@19.2.0) 9004 + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.0)(react@19.2.0) 9005 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9006 + react: 19.2.0 9007 + react-dom: 19.2.0(react@19.2.0) 9008 + optionalDependencies: 9009 + '@types/react': 19.2.0 9010 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9011 + 9012 + '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9013 + dependencies: 9014 + '@radix-ui/primitive': 1.1.3 9015 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9016 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9017 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9018 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9019 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9020 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.0)(react@19.2.0) 9021 + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.0)(react@19.2.0) 9022 + react: 19.2.0 9023 + react-dom: 19.2.0(react@19.2.0) 9024 + optionalDependencies: 9025 + '@types/react': 19.2.0 9026 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9027 + 9028 + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9029 + dependencies: 9030 + '@radix-ui/primitive': 1.1.3 9031 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9032 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9033 + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9034 + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.2.0) 9035 + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9036 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9037 + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9038 + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9039 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9040 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9041 + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) 9042 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9043 + aria-hidden: 1.2.6 9044 + react: 19.2.0 9045 + react-dom: 19.2.0(react@19.2.0) 9046 + react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.2.0) 9047 + optionalDependencies: 9048 + '@types/react': 19.2.0 9049 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9050 + 9051 + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9052 + dependencies: 9053 + '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9054 + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9055 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9056 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9057 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9058 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9059 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9060 + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9061 + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9062 + '@radix-ui/rect': 1.1.1 9063 + react: 19.2.0 9064 + react-dom: 19.2.0(react@19.2.0) 9065 + optionalDependencies: 9066 + '@types/react': 19.2.0 9067 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9068 + 9069 + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9070 + dependencies: 9071 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9072 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9073 + react: 19.2.0 9074 + react-dom: 19.2.0(react@19.2.0) 9075 + optionalDependencies: 9076 + '@types/react': 19.2.0 9077 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9078 + 9079 + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9080 + dependencies: 9081 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9082 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9083 + react: 19.2.0 9084 + react-dom: 19.2.0(react@19.2.0) 9085 + optionalDependencies: 9086 + '@types/react': 19.2.0 9087 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9088 + 9089 + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9090 + dependencies: 9091 + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) 9092 + react: 19.2.0 9093 + react-dom: 19.2.0(react@19.2.0) 9094 + optionalDependencies: 9095 + '@types/react': 19.2.0 9096 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9097 + 9098 + '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9099 + dependencies: 9100 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9101 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9102 + react: 19.2.0 9103 + react-dom: 19.2.0(react@19.2.0) 9104 + optionalDependencies: 9105 + '@types/react': 19.2.0 9106 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9107 + 9108 + '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9109 + dependencies: 9110 + '@radix-ui/primitive': 1.1.3 9111 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9112 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9113 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9114 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9115 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9116 + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9117 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9118 + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9119 + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9120 + react: 19.2.0 9121 + react-dom: 19.2.0(react@19.2.0) 9122 + optionalDependencies: 9123 + '@types/react': 19.2.0 9124 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9125 + 9126 + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9127 + dependencies: 9128 + '@radix-ui/primitive': 1.1.3 9129 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9130 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9131 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9132 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9133 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9134 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9135 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9136 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9137 + react: 19.2.0 9138 + react-dom: 19.2.0(react@19.2.0) 9139 + optionalDependencies: 9140 + '@types/react': 19.2.0 9141 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9142 + 9143 + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9144 + dependencies: 9145 + '@radix-ui/number': 1.1.1 9146 + '@radix-ui/primitive': 1.1.3 9147 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9148 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9149 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9150 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9151 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9152 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9153 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9154 + react: 19.2.0 9155 + react-dom: 19.2.0(react@19.2.0) 9156 + optionalDependencies: 9157 + '@types/react': 19.2.0 9158 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9159 + 9160 + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9161 + dependencies: 9162 + '@radix-ui/number': 1.1.1 9163 + '@radix-ui/primitive': 1.1.3 9164 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9165 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9166 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9167 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9168 + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9169 + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.2.0) 9170 + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9171 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9172 + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9173 + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9174 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9175 + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) 9176 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9177 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9178 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9179 + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9180 + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9181 + aria-hidden: 1.2.6 9182 + react: 19.2.0 9183 + react-dom: 19.2.0(react@19.2.0) 9184 + react-remove-scroll: 2.7.1(@types/react@19.2.0)(react@19.2.0) 9185 + optionalDependencies: 9186 + '@types/react': 19.2.0 9187 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9188 + 9189 + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9190 + dependencies: 9191 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9192 + react: 19.2.0 9193 + react-dom: 19.2.0(react@19.2.0) 9194 + optionalDependencies: 9195 + '@types/react': 19.2.0 9196 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9197 + 9198 + '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9199 + dependencies: 9200 + '@radix-ui/number': 1.1.1 9201 + '@radix-ui/primitive': 1.1.3 9202 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9203 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9204 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9205 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9206 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9207 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9208 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9209 + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9210 + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9211 + react: 19.2.0 9212 + react-dom: 19.2.0(react@19.2.0) 9213 + optionalDependencies: 9214 + '@types/react': 19.2.0 9215 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9216 + 9217 + '@radix-ui/react-slot@1.2.3(@types/react@19.2.0)(react@19.2.0)': 9218 + dependencies: 9219 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9220 + react: 19.2.0 9221 + optionalDependencies: 9222 + '@types/react': 19.2.0 9223 + 9224 + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9225 + dependencies: 9226 + '@radix-ui/primitive': 1.1.3 9227 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9228 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9229 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9230 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9231 + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9232 + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9233 + react: 19.2.0 9234 + react-dom: 19.2.0(react@19.2.0) 9235 + optionalDependencies: 9236 + '@types/react': 19.2.0 9237 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9238 + 9239 + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9240 + dependencies: 9241 + '@radix-ui/primitive': 1.1.3 9242 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9243 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9244 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9245 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9246 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9247 + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9248 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9249 + react: 19.2.0 9250 + react-dom: 19.2.0(react@19.2.0) 9251 + optionalDependencies: 9252 + '@types/react': 19.2.0 9253 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9254 + 9255 + '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9256 + dependencies: 9257 + '@radix-ui/primitive': 1.1.3 9258 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9259 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9260 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9261 + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9262 + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9263 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9264 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9265 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9266 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9267 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9268 + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9269 + react: 19.2.0 9270 + react-dom: 19.2.0(react@19.2.0) 9271 + optionalDependencies: 9272 + '@types/react': 19.2.0 9273 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9274 + 9275 + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9276 + dependencies: 9277 + '@radix-ui/primitive': 1.1.3 9278 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9279 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9280 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9281 + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9282 + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9283 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9284 + react: 19.2.0 9285 + react-dom: 19.2.0(react@19.2.0) 9286 + optionalDependencies: 9287 + '@types/react': 19.2.0 9288 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9289 + 9290 + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9291 + dependencies: 9292 + '@radix-ui/primitive': 1.1.3 9293 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9294 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9295 + react: 19.2.0 9296 + react-dom: 19.2.0(react@19.2.0) 9297 + optionalDependencies: 9298 + '@types/react': 19.2.0 9299 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9300 + 9301 + '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9302 + dependencies: 9303 + '@radix-ui/primitive': 1.1.3 9304 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9305 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9306 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9307 + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9308 + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9309 + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9310 + react: 19.2.0 9311 + react-dom: 19.2.0(react@19.2.0) 9312 + optionalDependencies: 9313 + '@types/react': 19.2.0 9314 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9315 + 9316 + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9317 + dependencies: 9318 + '@radix-ui/primitive': 1.1.3 9319 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9320 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 9321 + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9322 + '@radix-ui/react-id': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9323 + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9324 + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9325 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9326 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9327 + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) 9328 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 9329 + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9330 + react: 19.2.0 9331 + react-dom: 19.2.0(react@19.2.0) 9332 + optionalDependencies: 9333 + '@types/react': 19.2.0 9334 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9335 + 9336 + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.0)(react@19.2.0)': 9337 + dependencies: 9338 + react: 19.2.0 9339 + optionalDependencies: 9340 + '@types/react': 19.2.0 9341 + 9342 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.0)(react@19.2.0)': 9343 + dependencies: 9344 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.0)(react@19.2.0) 9345 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9346 + react: 19.2.0 9347 + optionalDependencies: 9348 + '@types/react': 19.2.0 9349 + 9350 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.0)(react@19.2.0)': 9351 + dependencies: 9352 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9353 + react: 19.2.0 9354 + optionalDependencies: 9355 + '@types/react': 19.2.0 9356 + 9357 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.0)(react@19.2.0)': 9358 + dependencies: 9359 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9360 + react: 19.2.0 9361 + optionalDependencies: 9362 + '@types/react': 19.2.0 9363 + 9364 + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.0)(react@19.2.0)': 9365 + dependencies: 9366 + react: 19.2.0 9367 + use-sync-external-store: 1.6.0(react@19.2.0) 9368 + optionalDependencies: 9369 + '@types/react': 19.2.0 9370 + 9371 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.0)(react@19.2.0)': 9372 + dependencies: 9373 + react: 19.2.0 9374 + optionalDependencies: 9375 + '@types/react': 19.2.0 9376 + 9377 + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.0)(react@19.2.0)': 9378 + dependencies: 9379 + react: 19.2.0 9380 + optionalDependencies: 9381 + '@types/react': 19.2.0 9382 + 9383 + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.0)(react@19.2.0)': 9384 + dependencies: 9385 + '@radix-ui/rect': 1.1.1 9386 + react: 19.2.0 9387 + optionalDependencies: 9388 + '@types/react': 19.2.0 9389 + 9390 + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.0)(react@19.2.0)': 9391 + dependencies: 9392 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 9393 + react: 19.2.0 9394 + optionalDependencies: 9395 + '@types/react': 19.2.0 9396 + 9397 + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 9398 + dependencies: 9399 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 9400 + react: 19.2.0 9401 + react-dom: 19.2.0(react@19.2.0) 9402 + optionalDependencies: 9403 + '@types/react': 19.2.0 9404 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 9405 + 9406 + '@radix-ui/rect@1.1.1': {} 9407 + 7515 9408 '@react-aria/autocomplete@3.0.0-rc.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 7516 9409 dependencies: 7517 9410 '@react-aria/combobox': 3.14.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) ··· 8553 10446 '@react-types/shared': 3.32.1(react@19.2.0) 8554 10447 react: 19.2.0 8555 10448 10449 + '@remirror/core-constants@3.0.0': {} 10450 + 8556 10451 '@remix-run/node-fetch-server@0.8.1': {} 8557 10452 8558 10453 '@rolldown/pluginutils@1.0.0-beta.34': {} ··· 9319 11214 '@types/react': 19.2.0 9320 11215 '@types/react-dom': 19.2.0(@types/react@19.2.0) 9321 11216 11217 + '@tiptap/core@2.27.1(@tiptap/pm@2.27.1)': 11218 + dependencies: 11219 + '@tiptap/pm': 2.27.1 11220 + 11221 + '@tiptap/extension-blockquote@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11222 + dependencies: 11223 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11224 + 11225 + '@tiptap/extension-bold@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11226 + dependencies: 11227 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11228 + 11229 + '@tiptap/extension-bubble-menu@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': 11230 + dependencies: 11231 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11232 + '@tiptap/pm': 2.27.1 11233 + tippy.js: 6.3.7 11234 + 11235 + '@tiptap/extension-bullet-list@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11236 + dependencies: 11237 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11238 + 11239 + '@tiptap/extension-code-block@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': 11240 + dependencies: 11241 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11242 + '@tiptap/pm': 2.27.1 11243 + 11244 + '@tiptap/extension-code@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11245 + dependencies: 11246 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11247 + 11248 + '@tiptap/extension-document@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11249 + dependencies: 11250 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11251 + 11252 + '@tiptap/extension-dropcursor@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': 11253 + dependencies: 11254 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11255 + '@tiptap/pm': 2.27.1 11256 + 11257 + '@tiptap/extension-floating-menu@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': 11258 + dependencies: 11259 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11260 + '@tiptap/pm': 2.27.1 11261 + tippy.js: 6.3.7 11262 + 11263 + '@tiptap/extension-gapcursor@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': 11264 + dependencies: 11265 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11266 + '@tiptap/pm': 2.27.1 11267 + 11268 + '@tiptap/extension-hard-break@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11269 + dependencies: 11270 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11271 + 11272 + '@tiptap/extension-heading@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11273 + dependencies: 11274 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11275 + 11276 + '@tiptap/extension-highlight@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11277 + dependencies: 11278 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11279 + 11280 + '@tiptap/extension-history@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': 11281 + dependencies: 11282 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11283 + '@tiptap/pm': 2.27.1 11284 + 11285 + '@tiptap/extension-horizontal-rule@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': 11286 + dependencies: 11287 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11288 + '@tiptap/pm': 2.27.1 11289 + 11290 + '@tiptap/extension-italic@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11291 + dependencies: 11292 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11293 + 11294 + '@tiptap/extension-link@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)': 11295 + dependencies: 11296 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11297 + '@tiptap/pm': 2.27.1 11298 + linkifyjs: 4.3.2 11299 + 11300 + '@tiptap/extension-list-item@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11301 + dependencies: 11302 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11303 + 11304 + '@tiptap/extension-ordered-list@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11305 + dependencies: 11306 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11307 + 11308 + '@tiptap/extension-paragraph@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11309 + dependencies: 11310 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11311 + 11312 + '@tiptap/extension-strike@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11313 + dependencies: 11314 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11315 + 11316 + '@tiptap/extension-text-style@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11317 + dependencies: 11318 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11319 + 11320 + '@tiptap/extension-text@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))': 11321 + dependencies: 11322 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11323 + 11324 + '@tiptap/pm@2.27.1': 11325 + dependencies: 11326 + prosemirror-changeset: 2.3.1 11327 + prosemirror-collab: 1.3.1 11328 + prosemirror-commands: 1.7.1 11329 + prosemirror-dropcursor: 1.8.2 11330 + prosemirror-gapcursor: 1.4.0 11331 + prosemirror-history: 1.4.1 11332 + prosemirror-inputrules: 1.5.1 11333 + prosemirror-keymap: 1.2.3 11334 + prosemirror-markdown: 1.13.2 11335 + prosemirror-menu: 1.2.5 11336 + prosemirror-model: 1.25.4 11337 + prosemirror-schema-basic: 1.2.4 11338 + prosemirror-schema-list: 1.5.1 11339 + prosemirror-state: 1.4.4 11340 + prosemirror-tables: 1.8.1 11341 + prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3) 11342 + prosemirror-transform: 1.10.4 11343 + prosemirror-view: 1.41.3 11344 + 11345 + '@tiptap/react@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 11346 + dependencies: 11347 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11348 + '@tiptap/extension-bubble-menu': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) 11349 + '@tiptap/extension-floating-menu': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) 11350 + '@tiptap/pm': 2.27.1 11351 + '@types/use-sync-external-store': 0.0.6 11352 + fast-deep-equal: 3.1.3 11353 + react: 19.2.0 11354 + react-dom: 19.2.0(react@19.2.0) 11355 + use-sync-external-store: 1.6.0(react@19.2.0) 11356 + 11357 + '@tiptap/starter-kit@2.27.1': 11358 + dependencies: 11359 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11360 + '@tiptap/extension-blockquote': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11361 + '@tiptap/extension-bold': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11362 + '@tiptap/extension-bullet-list': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11363 + '@tiptap/extension-code': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11364 + '@tiptap/extension-code-block': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) 11365 + '@tiptap/extension-document': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11366 + '@tiptap/extension-dropcursor': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) 11367 + '@tiptap/extension-gapcursor': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) 11368 + '@tiptap/extension-hard-break': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11369 + '@tiptap/extension-heading': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11370 + '@tiptap/extension-history': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) 11371 + '@tiptap/extension-horizontal-rule': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) 11372 + '@tiptap/extension-italic': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11373 + '@tiptap/extension-list-item': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11374 + '@tiptap/extension-ordered-list': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11375 + '@tiptap/extension-paragraph': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11376 + '@tiptap/extension-strike': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11377 + '@tiptap/extension-text': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11378 + '@tiptap/extension-text-style': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 11379 + '@tiptap/pm': 2.27.1 11380 + 11381 + '@tldraw/editor@4.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 11382 + dependencies: 11383 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 11384 + '@tiptap/pm': 2.27.1 11385 + '@tiptap/react': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 11386 + '@tldraw/state': 4.1.2 11387 + '@tldraw/state-react': 4.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 11388 + '@tldraw/store': 4.1.2(react@19.2.0) 11389 + '@tldraw/tlschema': 4.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 11390 + '@tldraw/utils': 4.1.2 11391 + '@tldraw/validate': 4.1.2 11392 + '@types/core-js': 2.5.8 11393 + '@use-gesture/react': 10.3.1(react@19.2.0) 11394 + classnames: 2.5.1 11395 + core-js: 3.46.0 11396 + eventemitter3: 4.0.7 11397 + idb: 7.1.1 11398 + is-plain-object: 5.0.0 11399 + react: 19.2.0 11400 + react-dom: 19.2.0(react@19.2.0) 11401 + 11402 + '@tldraw/state-react@4.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 11403 + dependencies: 11404 + '@tldraw/state': 4.1.2 11405 + '@tldraw/utils': 4.1.2 11406 + react: 19.2.0 11407 + react-dom: 19.2.0(react@19.2.0) 11408 + 11409 + '@tldraw/state@4.1.2': 11410 + dependencies: 11411 + '@tldraw/utils': 4.1.2 11412 + 11413 + '@tldraw/store@4.1.2(react@19.2.0)': 11414 + dependencies: 11415 + '@tldraw/state': 4.1.2 11416 + '@tldraw/utils': 4.1.2 11417 + react: 19.2.0 11418 + 11419 + '@tldraw/tlschema@4.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 11420 + dependencies: 11421 + '@tldraw/state': 4.1.2 11422 + '@tldraw/store': 4.1.2(react@19.2.0) 11423 + '@tldraw/utils': 4.1.2 11424 + '@tldraw/validate': 4.1.2 11425 + react: 19.2.0 11426 + react-dom: 19.2.0(react@19.2.0) 11427 + 11428 + '@tldraw/utils@4.1.2': 11429 + dependencies: 11430 + jittered-fractional-indexing: 1.0.0 11431 + lodash.isequal: 4.5.0 11432 + lodash.isequalwith: 4.4.0 11433 + lodash.throttle: 4.1.1 11434 + lodash.uniq: 4.5.0 11435 + 11436 + '@tldraw/validate@4.1.2': 11437 + dependencies: 11438 + '@tldraw/utils': 4.1.2 11439 + 9322 11440 '@tybys/wasm-util@0.10.1': 9323 11441 dependencies: 9324 11442 tslib: 2.8.1 ··· 9356 11474 9357 11475 '@types/command-line-usage@5.0.4': {} 9358 11476 11477 + '@types/core-js@2.5.8': {} 11478 + 9359 11479 '@types/debug@4.1.12': 9360 11480 dependencies: 9361 11481 '@types/ms': 2.1.0 ··· 9384 11504 9385 11505 '@types/json-schema@7.0.15': {} 9386 11506 11507 + '@types/linkify-it@5.0.0': {} 11508 + 11509 + '@types/markdown-it@14.1.2': 11510 + dependencies: 11511 + '@types/linkify-it': 5.0.0 11512 + '@types/mdurl': 2.0.0 11513 + 9387 11514 '@types/mdast@4.0.4': 9388 11515 dependencies: 9389 11516 '@types/unist': 3.0.3 11517 + 11518 + '@types/mdurl@2.0.0': {} 9390 11519 9391 11520 '@types/mdx@2.0.13': {} 9392 11521 ··· 9411 11540 '@types/unist@2.0.11': {} 9412 11541 9413 11542 '@types/unist@3.0.3': {} 11543 + 11544 + '@types/use-sync-external-store@0.0.6': {} 9414 11545 9415 11546 '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': 9416 11547 dependencies: ··· 9566 11697 '@unrs/resolver-binding-win32-x64-msvc@1.11.1': 9567 11698 optional: true 9568 11699 11700 + '@use-gesture/core@10.3.1': {} 11701 + 11702 + '@use-gesture/react@10.3.1(react@19.2.0)': 11703 + dependencies: 11704 + '@use-gesture/core': 10.3.1 11705 + react: 19.2.0 11706 + 9569 11707 '@vercel/nft@0.30.3(rollup@4.52.5)': 9570 11708 dependencies: 9571 11709 '@mapbox/node-pre-gyp': 2.0.0 ··· 9926 12064 9927 12065 argparse@2.0.1: {} 9928 12066 12067 + aria-hidden@1.2.6: 12068 + dependencies: 12069 + tslib: 2.8.1 12070 + 9929 12071 aria-query@5.3.0: 9930 12072 dependencies: 9931 12073 dequal: 2.0.3 ··· 10220 12362 dependencies: 10221 12363 consola: 3.4.2 10222 12364 12365 + classnames@2.5.1: {} 12366 + 10223 12367 clean-regexp@1.0.0: 10224 12368 dependencies: 10225 12369 escape-string-regexp: 1.0.5 ··· 10339 12483 core-js-compat@3.46.0: 10340 12484 dependencies: 10341 12485 browserslist: 4.27.0 12486 + 12487 + core-js@3.46.0: {} 10342 12488 10343 12489 core-util-is@1.0.3: {} 10344 12490 ··· 10349 12495 crc-32: 1.2.2 10350 12496 readable-stream: 4.7.0 10351 12497 12498 + crelt@1.0.6: {} 12499 + 10352 12500 croner@9.1.0: {} 10353 12501 10354 12502 cross-spawn@7.0.6: ··· 10479 12627 detect-libc@1.0.3: {} 10480 12628 10481 12629 detect-libc@2.1.2: {} 12630 + 12631 + detect-node-es@1.1.0: {} 10482 12632 10483 12633 devlop@1.1.0: 10484 12634 dependencies: ··· 11074 13224 11075 13225 event-target-shim@5.0.1: {} 11076 13226 13227 + eventemitter3@4.0.7: {} 13228 + 11077 13229 events-universal@1.0.1: 11078 13230 dependencies: 11079 13231 bare-events: 2.8.1 ··· 11187 13339 11188 13340 format@0.2.2: {} 11189 13341 13342 + fractional-indexing@3.2.0: {} 13343 + 11190 13344 fresh@2.0.0: {} 11191 13345 11192 13346 fsevents@2.3.3: ··· 11225 13379 has-symbols: 1.1.0 11226 13380 hasown: 2.0.2 11227 13381 math-intrinsics: 1.1.0 13382 + 13383 + get-nonce@1.0.1: {} 11228 13384 11229 13385 get-port-please@3.2.0: {} 11230 13386 ··· 11451 13607 11452 13608 hookable@5.5.3: {} 11453 13609 13610 + hotkeys-js@3.13.15: {} 13611 + 11454 13612 hsl-regex@1.0.0: {} 11455 13613 11456 13614 hsla-regex@1.0.0: {} ··· 11501 13659 iconv-lite@0.6.3: 11502 13660 dependencies: 11503 13661 safer-buffer: 2.1.2 13662 + 13663 + idb@7.1.1: {} 11504 13664 11505 13665 ieee754@1.2.1: {} 11506 13666 ··· 11712 13872 11713 13873 is-plain-obj@4.1.0: {} 11714 13874 13875 + is-plain-object@5.0.0: {} 13876 + 11715 13877 is-potential-custom-element-name@1.0.1: {} 11716 13878 11717 13879 is-reference@1.2.1: ··· 11834 13996 supports-color: 8.1.1 11835 13997 11836 13998 jiti@2.6.1: {} 13999 + 14000 + jittered-fractional-indexing@1.0.0: 14001 + dependencies: 14002 + fractional-indexing: 3.2.0 11837 14003 11838 14004 js-tokens@4.0.0: {} 11839 14005 ··· 11977 14143 11978 14144 lilconfig@3.1.3: {} 11979 14145 14146 + linkify-it@5.0.0: 14147 + dependencies: 14148 + uc.micro: 2.1.0 14149 + 14150 + linkifyjs@4.3.2: {} 14151 + 11980 14152 listhen@1.9.0: 11981 14153 dependencies: 11982 14154 '@parcel/watcher': 2.5.1 ··· 12016 14188 12017 14189 lodash.isarguments@3.1.0: {} 12018 14190 14191 + lodash.isequal@4.5.0: {} 14192 + 14193 + lodash.isequalwith@4.4.0: {} 14194 + 12019 14195 lodash.merge@4.6.2: {} 12020 14196 14197 + lodash.throttle@4.1.1: {} 14198 + 14199 + lodash.uniq@4.5.0: {} 14200 + 12021 14201 lodash@4.17.21: {} 12022 14202 12023 14203 longest-streak@3.1.0: {} ··· 12063 14243 map-obj@1.0.1: {} 12064 14244 12065 14245 markdown-extensions@2.0.0: {} 14246 + 14247 + markdown-it@14.1.0: 14248 + dependencies: 14249 + argparse: 2.0.1 14250 + entities: 4.5.0 14251 + linkify-it: 5.0.0 14252 + mdurl: 2.0.0 14253 + punycode.js: 2.3.1 14254 + uc.micro: 2.1.0 12066 14255 12067 14256 math-intrinsics@1.1.0: {} 12068 14257 ··· 12177 14366 '@types/mdast': 4.0.4 12178 14367 12179 14368 mdn-data@2.12.2: {} 14369 + 14370 + mdurl@2.0.0: {} 12180 14371 12181 14372 mdx-bundler@10.1.1(esbuild@0.25.11): 12182 14373 dependencies: ··· 12697 14888 type-check: 0.4.0 12698 14889 word-wrap: 1.2.5 12699 14890 14891 + orderedmap@2.1.1: {} 14892 + 12700 14893 own-keys@1.0.1: 12701 14894 dependencies: 12702 14895 get-intrinsic: 1.3.0 ··· 12840 15033 12841 15034 property-information@7.1.0: {} 12842 15035 15036 + prosemirror-changeset@2.3.1: 15037 + dependencies: 15038 + prosemirror-transform: 1.10.4 15039 + 15040 + prosemirror-collab@1.3.1: 15041 + dependencies: 15042 + prosemirror-state: 1.4.4 15043 + 15044 + prosemirror-commands@1.7.1: 15045 + dependencies: 15046 + prosemirror-model: 1.25.4 15047 + prosemirror-state: 1.4.4 15048 + prosemirror-transform: 1.10.4 15049 + 15050 + prosemirror-dropcursor@1.8.2: 15051 + dependencies: 15052 + prosemirror-state: 1.4.4 15053 + prosemirror-transform: 1.10.4 15054 + prosemirror-view: 1.41.3 15055 + 15056 + prosemirror-gapcursor@1.4.0: 15057 + dependencies: 15058 + prosemirror-keymap: 1.2.3 15059 + prosemirror-model: 1.25.4 15060 + prosemirror-state: 1.4.4 15061 + prosemirror-view: 1.41.3 15062 + 15063 + prosemirror-history@1.4.1: 15064 + dependencies: 15065 + prosemirror-state: 1.4.4 15066 + prosemirror-transform: 1.10.4 15067 + prosemirror-view: 1.41.3 15068 + rope-sequence: 1.3.4 15069 + 15070 + prosemirror-inputrules@1.5.1: 15071 + dependencies: 15072 + prosemirror-state: 1.4.4 15073 + prosemirror-transform: 1.10.4 15074 + 15075 + prosemirror-keymap@1.2.3: 15076 + dependencies: 15077 + prosemirror-state: 1.4.4 15078 + w3c-keyname: 2.2.8 15079 + 15080 + prosemirror-markdown@1.13.2: 15081 + dependencies: 15082 + '@types/markdown-it': 14.1.2 15083 + markdown-it: 14.1.0 15084 + prosemirror-model: 1.25.4 15085 + 15086 + prosemirror-menu@1.2.5: 15087 + dependencies: 15088 + crelt: 1.0.6 15089 + prosemirror-commands: 1.7.1 15090 + prosemirror-history: 1.4.1 15091 + prosemirror-state: 1.4.4 15092 + 15093 + prosemirror-model@1.25.4: 15094 + dependencies: 15095 + orderedmap: 2.1.1 15096 + 15097 + prosemirror-schema-basic@1.2.4: 15098 + dependencies: 15099 + prosemirror-model: 1.25.4 15100 + 15101 + prosemirror-schema-list@1.5.1: 15102 + dependencies: 15103 + prosemirror-model: 1.25.4 15104 + prosemirror-state: 1.4.4 15105 + prosemirror-transform: 1.10.4 15106 + 15107 + prosemirror-state@1.4.4: 15108 + dependencies: 15109 + prosemirror-model: 1.25.4 15110 + prosemirror-transform: 1.10.4 15111 + prosemirror-view: 1.41.3 15112 + 15113 + prosemirror-tables@1.8.1: 15114 + dependencies: 15115 + prosemirror-keymap: 1.2.3 15116 + prosemirror-model: 1.25.4 15117 + prosemirror-state: 1.4.4 15118 + prosemirror-transform: 1.10.4 15119 + prosemirror-view: 1.41.3 15120 + 15121 + prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.3): 15122 + dependencies: 15123 + '@remirror/core-constants': 3.0.0 15124 + escape-string-regexp: 4.0.0 15125 + prosemirror-model: 1.25.4 15126 + prosemirror-state: 1.4.4 15127 + prosemirror-view: 1.41.3 15128 + 15129 + prosemirror-transform@1.10.4: 15130 + dependencies: 15131 + prosemirror-model: 1.25.4 15132 + 15133 + prosemirror-view@1.41.3: 15134 + dependencies: 15135 + prosemirror-model: 1.25.4 15136 + prosemirror-state: 1.4.4 15137 + prosemirror-transform: 1.10.4 15138 + 15139 + punycode.js@2.3.1: {} 15140 + 12843 15141 punycode@2.3.1: {} 12844 15142 12845 15143 quansync@0.2.11: {} 12846 15144 12847 15145 queue-microtask@1.2.3: {} 12848 15146 15147 + radix-ui@1.4.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): 15148 + dependencies: 15149 + '@radix-ui/primitive': 1.1.3 15150 + '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15151 + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15152 + '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15153 + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15154 + '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15155 + '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15156 + '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15157 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15158 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15159 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.0)(react@19.2.0) 15160 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.0)(react@19.2.0) 15161 + '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15162 + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15163 + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.0)(react@19.2.0) 15164 + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15165 + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15166 + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.0)(react@19.2.0) 15167 + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15168 + '@radix-ui/react-form': 0.1.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15169 + '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15170 + '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15171 + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15172 + '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15173 + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15174 + '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15175 + '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15176 + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15177 + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15178 + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15179 + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15180 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15181 + '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15182 + '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15183 + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15184 + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15185 + '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15186 + '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15187 + '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15188 + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.0)(react@19.2.0) 15189 + '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15190 + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15191 + '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15192 + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15193 + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15194 + '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15195 + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15196 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.0)(react@19.2.0) 15197 + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.0)(react@19.2.0) 15198 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.0)(react@19.2.0) 15199 + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.0)(react@19.2.0) 15200 + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.0)(react@19.2.0) 15201 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.0)(react@19.2.0) 15202 + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.0)(react@19.2.0) 15203 + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 15204 + react: 19.2.0 15205 + react-dom: 19.2.0(react@19.2.0) 15206 + optionalDependencies: 15207 + '@types/react': 19.2.0 15208 + '@types/react-dom': 19.2.0(@types/react@19.2.0) 15209 + 12849 15210 radix3@1.1.2: {} 12850 15211 12851 15212 randombytes@2.1.0: ··· 12962 15323 12963 15324 react-refresh@0.18.0: {} 12964 15325 15326 + react-remove-scroll-bar@2.3.8(@types/react@19.2.0)(react@19.2.0): 15327 + dependencies: 15328 + react: 19.2.0 15329 + react-style-singleton: 2.2.3(@types/react@19.2.0)(react@19.2.0) 15330 + tslib: 2.8.1 15331 + optionalDependencies: 15332 + '@types/react': 19.2.0 15333 + 15334 + react-remove-scroll@2.7.1(@types/react@19.2.0)(react@19.2.0): 15335 + dependencies: 15336 + react: 19.2.0 15337 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.0)(react@19.2.0) 15338 + react-style-singleton: 2.2.3(@types/react@19.2.0)(react@19.2.0) 15339 + tslib: 2.8.1 15340 + use-callback-ref: 1.3.3(@types/react@19.2.0)(react@19.2.0) 15341 + use-sidecar: 1.1.3(@types/react@19.2.0)(react@19.2.0) 15342 + optionalDependencies: 15343 + '@types/react': 19.2.0 15344 + 12965 15345 react-server-dom-webpack@19.2.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(webpack@5.102.1): 12966 15346 dependencies: 12967 15347 acorn-loose: 8.5.2 ··· 13000 15380 '@react-stately/tree': 3.9.3(react@19.2.0) 13001 15381 '@react-types/shared': 3.32.1(react@19.2.0) 13002 15382 react: 19.2.0 15383 + 15384 + react-style-singleton@2.2.3(@types/react@19.2.0)(react@19.2.0): 15385 + dependencies: 15386 + get-nonce: 1.0.1 15387 + react: 19.2.0 15388 + tslib: 2.8.1 15389 + optionalDependencies: 15390 + '@types/react': 19.2.0 13003 15391 13004 15392 react@19.2.0: {} 13005 15393 ··· 13252 15640 '@rollup/rollup-win32-x64-gnu': 4.52.5 13253 15641 '@rollup/rollup-win32-x64-msvc': 4.52.5 13254 15642 fsevents: 2.3.3 15643 + 15644 + rope-sequence@1.3.4: {} 13255 15645 13256 15646 rou3@0.7.8: {} 13257 15647 ··· 13721 16111 13722 16112 tinyspy@4.0.4: {} 13723 16113 16114 + tippy.js@6.3.7: 16115 + dependencies: 16116 + '@popperjs/core': 2.11.8 16117 + 16118 + tldraw@4.1.2(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): 16119 + dependencies: 16120 + '@tiptap/core': 2.27.1(@tiptap/pm@2.27.1) 16121 + '@tiptap/extension-code': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 16122 + '@tiptap/extension-highlight': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)) 16123 + '@tiptap/extension-link': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1) 16124 + '@tiptap/pm': 2.27.1 16125 + '@tiptap/react': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 16126 + '@tiptap/starter-kit': 2.27.1 16127 + '@tldraw/editor': 4.1.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 16128 + '@tldraw/store': 4.1.2(react@19.2.0) 16129 + classnames: 2.5.1 16130 + hotkeys-js: 3.13.15 16131 + idb: 7.1.1 16132 + lz-string: 1.5.0 16133 + radix-ui: 1.4.3(@types/react-dom@19.2.0(@types/react@19.2.0))(@types/react@19.2.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 16134 + react: 19.2.0 16135 + react-dom: 19.2.0(react@19.2.0) 16136 + transitivePeerDependencies: 16137 + - '@types/react' 16138 + - '@types/react-dom' 16139 + 13724 16140 tldts-core@7.0.17: {} 13725 16141 13726 16142 tldts@7.0.17: ··· 13864 16280 13865 16281 typical@5.2.0: {} 13866 16282 16283 + uc.micro@2.1.0: {} 16284 + 13867 16285 ufo@1.6.1: {} 13868 16286 13869 16287 ultrahtml@1.6.0: {} ··· 14078 16496 dependencies: 14079 16497 punycode: 2.3.1 14080 16498 16499 + use-callback-ref@1.3.3(@types/react@19.2.0)(react@19.2.0): 16500 + dependencies: 16501 + react: 19.2.0 16502 + tslib: 2.8.1 16503 + optionalDependencies: 16504 + '@types/react': 19.2.0 16505 + 16506 + use-sidecar@1.1.3(@types/react@19.2.0)(react@19.2.0): 16507 + dependencies: 16508 + detect-node-es: 1.1.0 16509 + react: 19.2.0 16510 + tslib: 2.8.1 16511 + optionalDependencies: 16512 + '@types/react': 19.2.0 16513 + 14081 16514 use-sync-external-store@1.6.0(react@19.2.0): 14082 16515 dependencies: 14083 16516 react: 19.2.0 ··· 14252 16685 - terser 14253 16686 - tsx 14254 16687 - yaml 16688 + 16689 + w3c-keyname@2.2.8: {} 14255 16690 14256 16691 w3c-xmlserializer@5.0.0: 14257 16692 dependencies: