hazo_ui 2.2.6 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +255 -0
- package/dist/index.cjs +2438 -4518
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +35 -63
- package/dist/index.d.ts +35 -63
- package/dist/index.js +2398 -4497
- package/dist/index.js.map +1 -1
- package/dist/styles.css +0 -127
- package/package.json +35 -42
- package/tailwind.preset.d.ts +8 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/button.tsx","../src/components/ui/dialog.tsx","../src/components/ui/command.tsx","../src/components/ui/popover.tsx","../src/components/ui/input.tsx","../src/components/ui/select.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/calendar.tsx","../src/components/hazo_ui_multi_filter_dialog/index.tsx","../src/components/ui/switch.tsx","../src/components/ui/label.tsx","../src/components/hazo_ui_multi_sort_dialog/index.tsx","../src/components/ui/radio-group.tsx","../src/components/hazo_ui_flex_radio/index.tsx","../src/components/hazo_ui_flex_input/index.tsx","../src/components/hazo_ui_richtext_editor/constants.ts","../src/components/hazo_ui_richtext_editor/components/toolbar/color_picker_popover.tsx","../src/components/hazo_ui_richtext_editor/components/toolbar/table_size_picker.tsx","../src/components/hazo_ui_richtext_editor/components/toolbar/index.tsx","../src/components/ui/tabs.tsx","../src/components/hazo_ui_richtext_editor/components/view_tabs/index.tsx","../src/components/ui/scroll_area.tsx","../src/components/hazo_ui_richtext_editor/components/variables_modal/index.tsx","../node_modules/@tiptap/core/src/helpers/createChainableState.ts","../node_modules/@tiptap/core/src/CommandManager.ts","../node_modules/@tiptap/core/src/commands/index.ts","../node_modules/@tiptap/core/src/commands/blur.ts","../node_modules/@tiptap/core/src/commands/clearContent.ts","../node_modules/@tiptap/core/src/commands/clearNodes.ts","../node_modules/@tiptap/core/src/commands/command.ts","../node_modules/@tiptap/core/src/commands/createParagraphNear.ts","../node_modules/@tiptap/core/src/commands/cut.ts","../node_modules/@tiptap/core/src/commands/deleteCurrentNode.ts","../node_modules/@tiptap/core/src/helpers/getNodeType.ts","../node_modules/@tiptap/core/src/commands/deleteNode.ts","../node_modules/@tiptap/core/src/commands/deleteRange.ts","../node_modules/@tiptap/core/src/commands/deleteSelection.ts","../node_modules/@tiptap/core/src/commands/enter.ts","../node_modules/@tiptap/core/src/commands/exitCode.ts","../node_modules/@tiptap/core/src/utilities/isRegExp.ts","../node_modules/@tiptap/core/src/utilities/objectIncludes.ts","../node_modules/@tiptap/core/src/helpers/getMarkRange.ts","../node_modules/@tiptap/core/src/helpers/getMarkType.ts","../node_modules/@tiptap/core/src/commands/extendMarkRange.ts","../node_modules/@tiptap/core/src/commands/first.ts","../node_modules/@tiptap/core/src/helpers/isTextSelection.ts","../node_modules/@tiptap/core/src/utilities/minMax.ts","../node_modules/@tiptap/core/src/helpers/resolveFocusPosition.ts","../node_modules/@tiptap/core/src/utilities/isAndroid.ts","../node_modules/@tiptap/core/src/utilities/isiOS.ts","../node_modules/@tiptap/core/src/commands/focus.ts","../node_modules/@tiptap/core/src/commands/forEach.ts","../node_modules/@tiptap/core/src/commands/insertContent.ts","../node_modules/@tiptap/core/src/utilities/elementFromString.ts","../node_modules/@tiptap/core/src/helpers/createNodeFromContent.ts","../node_modules/@tiptap/core/src/helpers/selectionToInsertionEnd.ts","../node_modules/@tiptap/core/src/commands/insertContentAt.ts","../node_modules/@tiptap/core/src/commands/join.ts","../node_modules/@tiptap/core/src/commands/joinItemBackward.ts","../node_modules/@tiptap/core/src/commands/joinItemForward.ts","../node_modules/@tiptap/core/src/commands/joinTextblockBackward.ts","../node_modules/@tiptap/core/src/commands/joinTextblockForward.ts","../node_modules/@tiptap/core/src/utilities/isMacOS.ts","../node_modules/@tiptap/core/src/commands/keyboardShortcut.ts","../node_modules/@tiptap/core/src/helpers/isNodeActive.ts","../node_modules/@tiptap/core/src/commands/lift.ts","../node_modules/@tiptap/core/src/commands/liftEmptyBlock.ts","../node_modules/@tiptap/core/src/commands/liftListItem.ts","../node_modules/@tiptap/core/src/commands/newlineInCode.ts","../node_modules/@tiptap/core/src/helpers/getSchemaTypeNameByName.ts","../node_modules/@tiptap/core/src/utilities/deleteProps.ts","../node_modules/@tiptap/core/src/commands/resetAttributes.ts","../node_modules/@tiptap/core/src/commands/scrollIntoView.ts","../node_modules/@tiptap/core/src/commands/selectAll.ts","../node_modules/@tiptap/core/src/commands/selectNodeBackward.ts","../node_modules/@tiptap/core/src/commands/selectNodeForward.ts","../node_modules/@tiptap/core/src/commands/selectParentNode.ts","../node_modules/@tiptap/core/src/commands/selectTextblockEnd.ts","../node_modules/@tiptap/core/src/commands/selectTextblockStart.ts","../node_modules/@tiptap/core/src/helpers/createDocument.ts","../node_modules/@tiptap/core/src/commands/setContent.ts","../node_modules/@tiptap/core/src/helpers/getMarkAttributes.ts","../node_modules/@tiptap/core/src/helpers/combineTransactionSteps.ts","../node_modules/@tiptap/core/src/helpers/defaultBlockAt.ts","../node_modules/@tiptap/core/src/helpers/findParentNodeClosestToPos.ts","../node_modules/@tiptap/core/src/helpers/findParentNode.ts","../node_modules/@tiptap/core/src/helpers/getExtensionField.ts","../node_modules/@tiptap/core/src/utilities/isFunction.ts","../node_modules/@tiptap/core/src/utilities/callOrReturn.ts","../node_modules/@tiptap/core/src/helpers/splitExtensions.ts","../node_modules/@tiptap/core/src/utilities/mergeAttributes.ts","../node_modules/@tiptap/core/src/helpers/getTextBetween.ts","../node_modules/@tiptap/core/src/helpers/getTextSerializersFromSchema.ts","../node_modules/@tiptap/core/src/utilities/removeDuplicates.ts","../node_modules/@tiptap/core/src/helpers/getChangedRanges.ts","../node_modules/@tiptap/core/src/helpers/getSplittedAttributes.ts","../node_modules/@tiptap/core/src/helpers/isMarkActive.ts","../node_modules/@tiptap/core/src/helpers/isList.ts","../node_modules/@tiptap/core/src/helpers/isNodeEmpty.ts","../node_modules/@tiptap/core/src/commands/setMark.ts","../node_modules/@tiptap/core/src/commands/setMeta.ts","../node_modules/@tiptap/core/src/commands/setNode.ts","../node_modules/@tiptap/core/src/commands/setNodeSelection.ts","../node_modules/@tiptap/core/src/commands/setTextDirection.ts","../node_modules/@tiptap/core/src/commands/setTextSelection.ts","../node_modules/@tiptap/core/src/commands/sinkListItem.ts","../node_modules/@tiptap/core/src/commands/splitBlock.ts","../node_modules/@tiptap/core/src/commands/splitListItem.ts","../node_modules/@tiptap/core/src/commands/toggleList.ts","../node_modules/@tiptap/core/src/commands/toggleMark.ts","../node_modules/@tiptap/core/src/commands/toggleNode.ts","../node_modules/@tiptap/core/src/commands/toggleWrap.ts","../node_modules/@tiptap/core/src/commands/undoInputRule.ts","../node_modules/@tiptap/core/src/commands/unsetAllMarks.ts","../node_modules/@tiptap/core/src/commands/unsetMark.ts","../node_modules/@tiptap/core/src/commands/unsetTextDirection.ts","../node_modules/@tiptap/core/src/commands/updateAttributes.ts","../node_modules/@tiptap/core/src/commands/wrapIn.ts","../node_modules/@tiptap/core/src/commands/wrapInList.ts","../node_modules/@tiptap/core/src/utilities/isPlainObject.ts","../node_modules/@tiptap/core/src/utilities/mergeDeep.ts","../node_modules/@tiptap/core/src/Extendable.ts","../node_modules/@tiptap/core/src/extensions/index.ts","../node_modules/@tiptap/core/src/Extension.ts","../node_modules/@tiptap/core/src/extensions/clipboardTextSerializer.ts","../node_modules/@tiptap/core/src/extensions/commands.ts","../node_modules/@tiptap/core/src/extensions/delete.ts","../node_modules/@tiptap/core/src/extensions/drop.ts","../node_modules/@tiptap/core/src/extensions/editable.ts","../node_modules/@tiptap/core/src/extensions/focusEvents.ts","../node_modules/@tiptap/core/src/extensions/keymap.ts","../node_modules/@tiptap/core/src/extensions/paste.ts","../node_modules/@tiptap/core/src/extensions/tabindex.ts","../node_modules/@tiptap/core/src/extensions/textDirection.ts","../node_modules/@tiptap/core/src/utilities/markdown/index.ts","../node_modules/@tiptap/core/src/utilities/markdown/attributeUtils.ts","../node_modules/@tiptap/core/src/utilities/markdown/createAtomBlockMarkdownSpec.ts","../node_modules/@tiptap/core/src/utilities/markdown/createBlockMarkdownSpec.ts","../node_modules/@tiptap/core/src/utilities/markdown/createInlineMarkdownSpec.ts","../node_modules/@tiptap/core/src/utilities/markdown/parseIndentedBlocks.ts","../node_modules/@tiptap/core/src/utilities/markdown/renderNestedMarkdownContent.ts","../node_modules/@tiptap/core/src/Node.ts","../src/components/hazo_ui_richtext_editor/extensions/font_size_extension.ts","../src/components/hazo_ui_richtext_editor/components/variables_modal/variable_chip.tsx","../src/components/hazo_ui_richtext_editor/extensions/variable_extension.ts","../src/components/hazo_ui_richtext_editor/extensions/column_layout_extension.ts","../src/components/hazo_ui_richtext_editor/index.tsx"],"names":["React","React2","jsx","React3","React4","React5","React6","jsxs","React7","CalendarIcon","CheckIcon","X","React8","Label","React9","Trash2","useState","useEffect","Plus","ChevronsUpDown","React10","isSelected","parts","React11","React12","React13","command","Fragment","React15","FiCode","React16","React17","run","originalCreateParagraphNear","originalDeleteSelection","originalExitCode","mark","TextSelection","ProseMirrorNode","Selection","isTextSelection","originalJoinUp","originalJoinDown","originalJoinBackward","originalJoinForward","joinPoint","originalCommand","isActive","originalLift","originalLiftEmptyBlock","originalLiftListItem","originalNewlineInCode","originalSelectNodeBackward","originalSelectNodeForward","originalSelectParentNode","originalSelectTextblockEnd","originalSelectTextblockStart","document","style","range","NodeSelection","originalSinkListItem","first","newNextTypeAttributes","nextType","canSplit","originalWrapIn","originalWrapInList","Plugin","_a","_b","_c","PluginKey","tr","parseAttributes","serializeAttributes","h","nextIndent","Node","get_current_font_size","React18","editor"],"mappings":"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","file":"index.js","sourcesContent":["// Utility functions for hazo_ui component library\n// Provides className merging utility (cn function)\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges class names using clsx and tailwind-merge\n * @param inputs - Class values to merge\n * @returns Merged class string\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n","// Button component for hazo_ui library\n// Based on shadcn/ui button component\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n\n","// Dialog component for hazo_ui library\n// Based on shadcn/ui dialog component\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n\n","// Command component for hazo_ui library\n// Based on shadcn/ui command component (simplified version)\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Command = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n));\nCommand.displayName = \"Command\";\n\nconst CommandInput = React.forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement>\n>(({ className, ...props }, ref) => (\n <input\n ref={ref}\n className={cn(\n \"flex h-11 w-full rounded-md border border-input bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 px-3\",\n className\n )}\n {...props}\n />\n));\nCommandInput.displayName = \"CommandInput\";\n\nconst CommandList = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n {...props}\n />\n));\nCommandList.displayName = \"CommandList\";\n\nconst CommandEmpty = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>((props, ref) => (\n <div\n ref={ref}\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n));\nCommandEmpty.displayName = \"CommandEmpty\";\n\nconst CommandGroup = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nCommandGroup.displayName = \"CommandGroup\";\n\nconst CommandItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n onSelect?: (value: string) => void;\n value?: string;\n }\n>(({ className, onSelect, value, ...props }, ref) => {\n const handleClick = () => {\n if (onSelect && value) {\n onSelect(value);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n onClick={handleClick}\n {...props}\n />\n );\n});\nCommandItem.displayName = \"CommandItem\";\n\nexport {\n Command,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n};\n\n","// Popover component for hazo_ui library\n// Based on shadcn/ui popover component\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent };\n\n","// Input component for hazo_ui library\n// Based on shadcn/ui input component\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n\n","// Select component for hazo_ui library\n// Based on shadcn/ui select component\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Select = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n\n","// Tooltip component for hazo_ui library\n// Based on shadcn/ui tooltip component\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n\n","// Calendar component for hazo_ui library\n// Based on shadcn/ui calendar component\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { cn } from \"../../lib/utils\";\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n }}\n {...props}\n />\n );\n}\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n\n","\"use client\";\n\n/**\n * Hazo UI Multi Filter Dialog Component\n * \n * Reusable component for multi-field filtering with different input types.\n * Allows users to select multiple fields for filtering with appropriate input controls.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../ui/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport { Input } from \"../ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { Calendar as CalendarComponent } from \"../ui/calendar\";\nimport { Filter, Trash2, Plus, Check as CheckIcon, ChevronsUpDown, Calendar as CalendarIcon, X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { format } from \"date-fns\";\n\nexport interface FilterField {\n value: string;\n label: string;\n type: 'text' | 'number' | 'combobox' | 'boolean' | 'date';\n textConfig?: {\n minLength?: number;\n maxLength?: number;\n };\n numberConfig?: {\n min?: number;\n max?: number;\n allowDecimal?: boolean;\n decimalLength?: number;\n };\n comboboxOptions?: Array<{ label: string; value: string }>;\n booleanLabels?: {\n trueLabel?: string;\n falseLabel?: string;\n };\n}\n\nexport interface FilterConfig {\n field: string;\n operator?: string; // For number fields: equals, not_equals, greater_than, less_than, greater_equal, less_equal\n value: any;\n}\n\ninterface HazoUiMultiFilterDialogProps {\n availableFields: FilterField[];\n onFilterChange: (filterConfig: FilterConfig[]) => void;\n initialFilters?: FilterConfig[];\n title?: string;\n description?: string;\n}\n\ninterface FilterFieldItemProps {\n filterConfig: FilterConfig;\n fieldConfig: FilterField;\n onValueChange: (value: any) => void;\n onOperatorChange?: (operator: string) => void;\n onDelete: () => void;\n}\n\nfunction FilterFieldItem({\n filterConfig,\n fieldConfig,\n onValueChange,\n onOperatorChange,\n onDelete,\n}: FilterFieldItemProps) {\n const [isCalendarOpen, setIsCalendarOpen] = useState(false);\n\n const renderInput = () => {\n switch (fieldConfig.type) {\n case 'text':\n return (\n <Input\n type=\"text\"\n value={filterConfig.value || ''}\n onChange={(e) => {\n const value = e.target.value;\n if (fieldConfig.textConfig?.maxLength && value.length > fieldConfig.textConfig.maxLength) {\n return;\n }\n onValueChange(value);\n }}\n placeholder=\"Enter text...\"\n minLength={fieldConfig.textConfig?.minLength}\n maxLength={fieldConfig.textConfig?.maxLength}\n className=\"cls_filter_text_input w-full min-w-0\"\n />\n );\n\n case 'number':\n const numberOperators = [\n { value: 'equals', label: 'Equals' },\n { value: 'not_equals', label: 'Not Equals' },\n { value: 'greater_than', label: 'Greater Than' },\n { value: 'less_than', label: 'Less Than' },\n { value: 'greater_equal', label: 'Greater or Equal' },\n { value: 'less_equal', label: 'Less or Equal' },\n ];\n\n return (\n <div className=\"cls_number_filter_container flex flex-col sm:flex-row items-stretch sm:items-center gap-2 w-full\">\n <Select\n value={filterConfig.operator || 'equals'}\n onValueChange={(value) => onOperatorChange?.(value)}\n >\n <SelectTrigger className=\"cls_operator_select w-full sm:w-[140px] shrink-0\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {numberOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n type=\"number\"\n value={filterConfig.value !== undefined && filterConfig.value !== null ? filterConfig.value : ''}\n onChange={(e) => {\n const value = e.target.value;\n if (value === '') {\n onValueChange('');\n return;\n }\n let numValue = fieldConfig.numberConfig?.allowDecimal\n ? parseFloat(value)\n : parseInt(value, 10);\n \n if (isNaN(numValue)) {\n return;\n }\n\n // Apply decimal length restriction\n if (fieldConfig.numberConfig?.allowDecimal && fieldConfig.numberConfig?.decimalLength) {\n const decimalPlaces = value.split('.')[1]?.length || 0;\n if (decimalPlaces > fieldConfig.numberConfig.decimalLength) {\n return;\n }\n }\n\n // Apply min/max restrictions\n if (fieldConfig.numberConfig?.min !== undefined && numValue < fieldConfig.numberConfig.min) {\n numValue = fieldConfig.numberConfig.min;\n }\n if (fieldConfig.numberConfig?.max !== undefined && numValue > fieldConfig.numberConfig.max) {\n numValue = fieldConfig.numberConfig.max;\n }\n\n onValueChange(numValue);\n }}\n placeholder=\"Enter number...\"\n min={fieldConfig.numberConfig?.min}\n max={fieldConfig.numberConfig?.max}\n step={fieldConfig.numberConfig?.allowDecimal ? 0.01 : 1}\n className=\"cls_filter_number_input flex-1 min-w-0\"\n />\n </div>\n );\n\n case 'combobox':\n return (\n <Select\n value={filterConfig.value || ''}\n onValueChange={(value) => onValueChange(value)}\n >\n <SelectTrigger className=\"cls_filter_combobox_select w-full min-w-0\">\n <SelectValue placeholder=\"Select option...\" />\n </SelectTrigger>\n <SelectContent>\n {fieldConfig.comboboxOptions?.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n\n case 'boolean':\n const trueLabel = fieldConfig.booleanLabels?.trueLabel || 'On';\n const falseLabel = fieldConfig.booleanLabels?.falseLabel || 'Off';\n \n return (\n <Select\n value={filterConfig.value !== undefined && filterConfig.value !== null ? String(filterConfig.value) : ''}\n onValueChange={(value) => onValueChange(value === 'true')}\n >\n <SelectTrigger className=\"cls_filter_boolean_select w-full min-w-0\">\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">{trueLabel}</SelectItem>\n <SelectItem value=\"false\">{falseLabel}</SelectItem>\n </SelectContent>\n </Select>\n );\n\n case 'date':\n const dateOperators = [\n { value: 'equals', label: 'Equals' },\n { value: 'not_equals', label: 'Not Equals' },\n { value: 'greater_than', label: 'Greater Than' },\n { value: 'less_than', label: 'Less Than' },\n { value: 'greater_equal', label: 'Greater or Equal' },\n { value: 'less_equal', label: 'Less or Equal' },\n ];\n\n const selectedDate = filterConfig.value \n ? (typeof filterConfig.value === 'string' ? new Date(filterConfig.value) : filterConfig.value)\n : undefined;\n\n return (\n <div className=\"cls_date_filter_container flex flex-col sm:flex-row items-stretch sm:items-center gap-2 w-full\">\n <Select\n value={filterConfig.operator || 'equals'}\n onValueChange={(value) => onOperatorChange?.(value)}\n >\n <SelectTrigger className=\"cls_operator_select w-full sm:w-[140px] shrink-0\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {dateOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Popover open={isCalendarOpen} onOpenChange={setIsCalendarOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn(\n \"cls_date_picker_trigger w-full justify-start text-left font-normal min-w-0\",\n !selectedDate && \"text-muted-foreground\"\n )}\n >\n <CalendarIcon className=\"cls_calendar_icon mr-2 h-4 w-4 shrink-0\" />\n <span className=\"cls_date_text truncate\">\n {selectedDate ? (\n format(selectedDate, \"MMM d, yyyy\")\n ) : (\n \"Pick a date\"\n )}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_calendar_popover w-auto p-0\" align=\"start\">\n <CalendarComponent\n mode=\"single\"\n selected={selectedDate}\n onSelect={(date) => {\n onValueChange(date);\n setIsCalendarOpen(false);\n }}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n </div>\n );\n\n default:\n return null;\n }\n };\n\n return (\n <div className=\"cls_filter_field_item flex flex-col sm:flex-row items-start sm:items-center gap-3 p-3 border rounded-md bg-card\">\n <span className=\"cls_field_label text-sm font-medium min-w-[120px] sm:min-w-[100px] truncate\">{fieldConfig.label}</span>\n <div className=\"cls_field_input_container flex-1 min-w-0 w-full sm:w-auto\">\n {renderInput()}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onDelete}\n className=\"cls_delete_btn h-8 w-8 p-0 text-destructive hover:text-destructive shrink-0\"\n aria-label={`Remove ${fieldConfig.label} filter`}\n >\n <Trash2 className=\"cls_delete_icon h-4 w-4\" />\n </Button>\n </div>\n );\n}\n\nexport function HazoUiMultiFilterDialog({\n availableFields,\n onFilterChange,\n initialFilters = [],\n title = \"Filter\",\n description = \"Add multiple fields to filter by. Select a field and set its filter value.\",\n}: HazoUiMultiFilterDialogProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [filterFields, setFilterFields] = useState<FilterConfig[]>(initialFilters);\n const [isComboboxOpen, setIsComboboxOpen] = useState(false);\n\n // Sync local state with initialFilters when dialog opens\n useEffect(() => {\n if (isOpen) {\n setFilterFields(initialFilters);\n }\n }, [isOpen, initialFilters]);\n\n const handleAddField = (fieldValue: string) => {\n // Check if field is already added\n if (filterFields.some(ff => ff.field === fieldValue)) {\n return;\n }\n\n const fieldConfig = availableFields.find(af => af.value === fieldValue);\n if (!fieldConfig) {\n return;\n }\n\n let defaultValue: any = '';\n if (fieldConfig.type === 'boolean') {\n defaultValue = false;\n } else if (fieldConfig.type === 'number') {\n defaultValue = fieldConfig.numberConfig?.min || 0;\n } else if (fieldConfig.type === 'date') {\n defaultValue = new Date(); // Default to today\n }\n\n const newFilter: FilterConfig = {\n field: fieldValue,\n operator: (fieldConfig.type === 'number' || fieldConfig.type === 'date') ? 'equals' : undefined,\n value: defaultValue,\n };\n setFilterFields([...filterFields, newFilter]);\n setIsComboboxOpen(false);\n };\n\n const handleDeleteField = (fieldValue: string) => {\n setFilterFields(filterFields.filter(ff => ff.field !== fieldValue));\n };\n\n const handleValueChange = (fieldValue: string, value: any) => {\n setFilterFields(\n filterFields.map(ff =>\n ff.field === fieldValue ? { ...ff, value } : ff\n )\n );\n };\n\n const handleOperatorChange = (fieldValue: string, operator: string) => {\n setFilterFields(\n filterFields.map(ff =>\n ff.field === fieldValue ? { ...ff, operator } : ff\n )\n );\n };\n\n const handleApply = () => {\n // Call onFilterChange with the current filter configuration\n onFilterChange([...filterFields]);\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setFilterFields(initialFilters);\n setIsOpen(false);\n };\n\n const handleClearAll = () => {\n setFilterFields([]);\n };\n\n // Get available fields that haven't been added yet\n const availableFieldsToAdd = availableFields.filter(\n af => !filterFields.some(ff => ff.field === af.value)\n );\n\n // Get field config helper\n const getFieldConfig = (fieldValue: string): FilterField | undefined => {\n return availableFields.find(af => af.value === fieldValue);\n };\n\n // Check if there are active filters\n const hasActiveFilters = initialFilters.length > 0;\n\n // Format tooltip content showing active filters\n const tooltipContent = hasActiveFilters ? (\n <div className=\"cls_filter_tooltip_content space-y-1\">\n <div className=\"cls_tooltip_title text-xs font-semibold mb-1\">Active Filters:</div>\n {initialFilters.map((filterConfig) => {\n const fieldConfig = getFieldConfig(filterConfig.field);\n if (!fieldConfig) return null;\n \n let displayValue = String(filterConfig.value);\n if (fieldConfig.type === 'boolean') {\n displayValue = filterConfig.value\n ? (fieldConfig.booleanLabels?.trueLabel || 'On')\n : (fieldConfig.booleanLabels?.falseLabel || 'Off');\n } else if (fieldConfig.type === 'combobox') {\n const option = fieldConfig.comboboxOptions?.find(opt => opt.value === filterConfig.value);\n displayValue = option?.label || displayValue;\n } else if (fieldConfig.type === 'date') {\n const dateValue = filterConfig.value instanceof Date \n ? filterConfig.value \n : new Date(filterConfig.value);\n if (!isNaN(dateValue.getTime())) {\n displayValue = format(dateValue, \"MMM d, yyyy\");\n }\n }\n \n const operatorLabel = filterConfig.operator\n ? filterConfig.operator.replace('_', ' ').replace(/\\b\\w/g, l => l.toUpperCase()) + ' '\n : '';\n \n return (\n <div key={filterConfig.field} className=\"cls_tooltip_item text-xs\">\n {fieldConfig.label}: {operatorLabel}{displayValue}\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"cls_filter_tooltip_content text-xs\">No active filters</div>\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"cls_filter_button\"\n aria-label=\"Open filter dialog\"\n >\n <Filter\n className={cn(\n \"cls_filter_icon h-4 w-4 mr-2\",\n hasActiveFilters && \"text-blue-600\"\n )}\n />\n Filter\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent>\n {tooltipContent}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <DialogContent className=\"cls_filter_dialog_content max-w-lg w-full max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>\n {description}\n </DialogDescription>\n </DialogHeader>\n <div className=\"cls_filter_dialog_body space-y-4 py-4\">\n {/* Add Field Combobox */}\n <div className=\"cls_add_field_section\">\n <Popover open={isComboboxOpen} onOpenChange={setIsComboboxOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={isComboboxOpen}\n className=\"cls_add_field_combobox w-full justify-between\"\n >\n <div className=\"cls_combobox_content flex items-center\">\n <Plus className=\"cls_plus_icon h-4 w-4 mr-2\" />\n <span>Add field</span>\n </div>\n <ChevronsUpDown className=\"cls_chevron_icon ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_combobox_popover w-full p-0\">\n <Command>\n <CommandInput placeholder=\"Search fields...\" className=\"cls_command_input\" />\n <CommandList>\n {availableFieldsToAdd.length === 0 ? (\n <CommandEmpty>No fields found.</CommandEmpty>\n ) : (\n <CommandGroup>\n {availableFieldsToAdd.map((field) => (\n <CommandItem\n key={field.value}\n value={field.label}\n onSelect={() => handleAddField(field.value)}\n className=\"cls_command_item\"\n >\n <CheckIcon\n className={cn(\n \"cls_check_icon mr-2 h-4 w-4\",\n false ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n {field.label}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n\n {/* Filter Fields List */}\n {filterFields.length > 0 ? (\n <div className=\"cls_filter_fields_list space-y-2\">\n {filterFields.map((filterConfig) => {\n const fieldConfig = getFieldConfig(filterConfig.field);\n if (!fieldConfig) return null;\n\n return (\n <FilterFieldItem\n key={filterConfig.field}\n filterConfig={filterConfig}\n fieldConfig={fieldConfig}\n onValueChange={(value) => handleValueChange(filterConfig.field, value)}\n onOperatorChange={(operator) => handleOperatorChange(filterConfig.field, operator)}\n onDelete={() => handleDeleteField(filterConfig.field)}\n />\n );\n })}\n </div>\n ) : (\n <div className=\"cls_empty_filter_fields text-center py-8 text-sm text-muted-foreground\">\n No filter fields added. Click \"Add field\" to add filtering criteria.\n </div>\n )}\n </div>\n <DialogFooter>\n {filterFields.length > 0 && (\n <Button\n variant=\"outline\"\n onClick={handleClearAll}\n className=\"cls_clear_all_btn\"\n >\n <X className=\"cls_clear_all_icon h-4 w-4 mr-2\" />\n Clear All\n </Button>\n )}\n <Button\n onClick={handleApply}\n className=\"cls_apply_btn\"\n >\n Apply\n </Button>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n className=\"cls_cancel_btn\"\n >\n Cancel\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n","// Switch component for hazo_ui library\n// Based on shadcn/ui switch component\nimport * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport { cn } from \"../../lib/utils\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n\n","// Label component for hazo_ui library\n// Based on shadcn/ui label component (placeholder - not used in HazoUiMultiFilterDialog but included for completeness)\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement> {}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, ...props }, ref) => {\n return (\n <label\n ref={ref}\n className={cn(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className\n )}\n {...props}\n />\n );\n }\n);\nLabel.displayName = \"Label\";\n\nexport { Label };\n\n","\"use client\";\n\n/**\n * Hazo UI Multi Sort Dialog Component\n * \n * Reusable component for multi-field sorting with drag-and-drop reordering.\n * Allows users to select multiple fields for sorting, reorder them, and set ascending/descending direction.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../ui/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport { Switch } from \"../ui/switch\";\nimport { Label } from \"../ui/label\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { ArrowUpDown, GripVertical, Trash2, Plus, Check as CheckIcon, ChevronsUpDown } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nexport interface SortField {\n value: string;\n label: string;\n}\n\nexport interface SortConfig {\n field: string;\n direction: 'asc' | 'desc';\n}\n\ninterface HazoUiMultiSortDialogProps {\n availableFields: SortField[];\n onSortChange: (sortConfig: SortConfig[]) => void;\n initialSortFields?: SortConfig[];\n title?: string;\n description?: string;\n}\n\ninterface SortableSortFieldItemProps {\n sortConfig: SortConfig;\n fieldLabel: string;\n onDirectionChange: (direction: 'asc' | 'desc') => void;\n onDelete: () => void;\n}\n\nfunction SortableSortFieldItem({\n sortConfig,\n fieldLabel,\n onDirectionChange,\n onDelete,\n}: SortableSortFieldItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: sortConfig.field });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className=\"cls_sortable_sort_field_item flex items-center gap-3 p-3 border rounded-md bg-card\"\n >\n <div\n {...attributes}\n {...listeners}\n className=\"cls_drag_handle cursor-grab active:cursor-grabbing text-muted-foreground hover:text-foreground\"\n >\n <GripVertical className=\"cls_drag_icon h-4 w-4\" />\n </div>\n <span className=\"cls_field_label flex-1 text-sm font-medium\">{fieldLabel}</span>\n <div className=\"cls_direction_control flex items-center gap-2\">\n <Label htmlFor={`switch-${sortConfig.field}`} className=\"cls_direction_label text-xs text-muted-foreground\">\n {sortConfig.direction === 'asc' ? 'Ascending' : 'Descending'}\n </Label>\n <Switch\n id={`switch-${sortConfig.field}`}\n checked={sortConfig.direction === 'desc'}\n onCheckedChange={(checked) => onDirectionChange(checked ? 'desc' : 'asc')}\n aria-label={`Toggle sort direction for ${fieldLabel}`}\n />\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onDelete}\n className=\"cls_delete_btn h-8 w-8 p-0 text-destructive hover:text-destructive\"\n aria-label={`Remove ${fieldLabel} from sort`}\n >\n <Trash2 className=\"cls_delete_icon h-4 w-4\" />\n </Button>\n </div>\n );\n}\n\nexport function HazoUiMultiSortDialog({\n availableFields,\n onSortChange,\n initialSortFields = [],\n title = \"Sort\",\n description = \"Add multiple fields to sort by and reorder them. Use the switch to toggle between ascending and descending.\",\n}: HazoUiMultiSortDialogProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [sortFields, setSortFields] = useState<SortConfig[]>(initialSortFields);\n const [isComboboxOpen, setIsComboboxOpen] = useState(false);\n \n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n // Sync local state with initialSortFields when dialog opens\n useEffect(() => {\n if (isOpen) {\n setSortFields(initialSortFields);\n }\n }, [isOpen, initialSortFields]);\n\n const handleAddField = (fieldValue: string) => {\n // Check if field is already added\n if (sortFields.some(sf => sf.field === fieldValue)) {\n return;\n }\n\n const newField: SortConfig = {\n field: fieldValue,\n direction: 'asc',\n };\n setSortFields([...sortFields, newField]);\n setIsComboboxOpen(false);\n };\n\n const handleDeleteField = (fieldValue: string) => {\n setSortFields(sortFields.filter(sf => sf.field !== fieldValue));\n };\n\n const handleDirectionChange = (fieldValue: string, direction: 'asc' | 'desc') => {\n setSortFields(\n sortFields.map(sf =>\n sf.field === fieldValue ? { ...sf, direction } : sf\n )\n );\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (!over || active.id === over.id) {\n return;\n }\n\n const oldIndex = sortFields.findIndex(sf => sf.field === active.id);\n const newIndex = sortFields.findIndex(sf => sf.field === over.id);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n setSortFields(arrayMove(sortFields, oldIndex, newIndex));\n }\n };\n\n const handleApply = () => {\n // Call onSortChange with the current sort configuration\n onSortChange([...sortFields]);\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setSortFields(initialSortFields);\n setIsOpen(false);\n };\n\n const handleClearAll = () => {\n setSortFields([]);\n };\n\n // Get available fields that haven't been added yet\n const availableFieldsToAdd = availableFields.filter(\n af => !sortFields.some(sf => sf.field === af.value)\n );\n\n // Get field label helper\n const getFieldLabel = (fieldValue: string): string => {\n return availableFields.find(af => af.value === fieldValue)?.label || fieldValue;\n };\n\n // Check if there are active sort fields\n const hasActiveSorts = initialSortFields.length > 0;\n\n // Format tooltip content showing active sort fields\n const tooltipContent = hasActiveSorts ? (\n <div className=\"cls_sort_tooltip_content space-y-1\">\n <div className=\"cls_tooltip_title text-xs font-semibold mb-1\">Active Sorts:</div>\n {initialSortFields.map((sortConfig, index) => (\n <div key={sortConfig.field} className=\"cls_tooltip_item text-xs\">\n {index + 1}. {getFieldLabel(sortConfig.field)} ({sortConfig.direction === 'asc' ? 'Asc' : 'Desc'})\n </div>\n ))}\n </div>\n ) : (\n <div className=\"cls_sort_tooltip_content text-xs\">No active sorts</div>\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"cls_sort_button\"\n aria-label=\"Open sort dialog\"\n >\n <ArrowUpDown \n className={cn(\n \"cls_sort_icon h-4 w-4 mr-2\",\n hasActiveSorts && \"text-blue-600\"\n )} \n />\n Sort\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent>\n {tooltipContent}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <DialogContent className=\"cls_sort_dialog_content max-w-lg\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>\n {description}\n </DialogDescription>\n </DialogHeader>\n <div className=\"cls_sort_dialog_body space-y-4 py-4\">\n {/* Add Field Combobox */}\n <div className=\"cls_add_field_section\">\n <Popover open={isComboboxOpen} onOpenChange={setIsComboboxOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={isComboboxOpen}\n className=\"cls_add_field_combobox w-full justify-between\"\n >\n <div className=\"cls_combobox_content flex items-center\">\n <Plus className=\"cls_plus_icon h-4 w-4 mr-2\" />\n <span>Add field</span>\n </div>\n <ChevronsUpDown className=\"cls_chevron_icon ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_combobox_popover w-full p-0\">\n <Command>\n <CommandInput placeholder=\"Search fields...\" className=\"cls_command_input\" />\n <CommandList>\n {availableFieldsToAdd.length === 0 ? (\n <CommandEmpty>No fields found.</CommandEmpty>\n ) : (\n <CommandGroup>\n {availableFieldsToAdd.map((field) => (\n <CommandItem\n key={field.value}\n value={field.label}\n onSelect={() => handleAddField(field.value)}\n className=\"cls_command_item\"\n >\n <CheckIcon\n className={cn(\n \"cls_check_icon mr-2 h-4 w-4\",\n false ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n {field.label}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n\n {/* Sort Fields List */}\n {sortFields.length > 0 ? (\n <div className=\"cls_sort_fields_list space-y-2\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={sortFields.map(sf => sf.field)}\n strategy={verticalListSortingStrategy}\n >\n {sortFields.map((sortConfig) => (\n <SortableSortFieldItem\n key={sortConfig.field}\n sortConfig={sortConfig}\n fieldLabel={getFieldLabel(sortConfig.field)}\n onDirectionChange={(direction) =>\n handleDirectionChange(sortConfig.field, direction)\n }\n onDelete={() => handleDeleteField(sortConfig.field)}\n />\n ))}\n </SortableContext>\n </DndContext>\n </div>\n ) : (\n <div className=\"cls_empty_sort_fields text-center py-8 text-sm text-muted-foreground\">\n No sort fields added. Click \"Add field\" to add sorting criteria.\n </div>\n )}\n </div>\n <DialogFooter>\n {sortFields.length > 0 && (\n <Button\n variant=\"outline\"\n onClick={handleClearAll}\n className=\"cls_clear_all_btn\"\n >\n <Trash2 className=\"cls_clear_all_icon h-4 w-4 mr-2\" />\n Clear All\n </Button>\n )}\n <Button\n onClick={handleApply}\n className=\"cls_apply_btn\"\n >\n Apply\n </Button>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n className=\"cls_cancel_btn\"\n >\n Cancel\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n","// Radio group component for hazo_ui library\n// Based on shadcn/ui radio group component\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n );\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n\n\n","\"use client\";\n\n/**\n * Hazo UI Flex Radio Component\n * \n * Flexible radio button/icon selection component with support for single and multi-selection modes,\n * customizable layouts, and react-icons integration.\n */\n\nimport { RadioGroup, RadioGroupItem } from \"../ui/radio-group\";\nimport { Button } from \"../ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { cn } from \"../../lib/utils\";\n// Import icon sets - tree-shaking will remove unused ones\nimport * as FaIcons from \"react-icons/fa\";\nimport * as MdIcons from \"react-icons/md\";\nimport * as HiIcons from \"react-icons/hi\";\nimport * as BiIcons from \"react-icons/bi\";\nimport * as AiIcons from \"react-icons/ai\";\nimport * as BsIcons from \"react-icons/bs\";\nimport * as FiIcons from \"react-icons/fi\";\nimport * as IoIcons from \"react-icons/io5\";\nimport * as RiIcons from \"react-icons/ri\";\nimport * as TbIcons from \"react-icons/tb\";\nimport * as CiIcons from \"react-icons/ci\";\n\n// Icon set mapping\nconst iconSetMap: Record<string, any> = {\n fa: FaIcons,\n md: MdIcons,\n hi: HiIcons,\n bi: BiIcons,\n ai: AiIcons,\n bs: BsIcons,\n fi: FiIcons,\n io: IoIcons,\n io5: IoIcons,\n ri: RiIcons,\n tb: TbIcons,\n ci: CiIcons,\n};\n\n/**\n * Get icon library for a given icon set\n */\nfunction getIconLibrary(iconSet: string): any {\n if (!iconSet) return null;\n const normalizedSet = iconSet.toLowerCase();\n return iconSetMap[normalizedSet] || null;\n}\n\nexport interface HazoUiFlexRadioItem {\n label: string;\n value: string;\n icon_selected?: string;\n icon_unselected?: string;\n fgcolor?: string; // Foreground color for the icon (text/icon color)\n bgcolor?: string; // Background color for the icon button\n}\n\nexport interface HazoUiFlexRadioProps {\n layout?: \"horizontal\" | \"vertical\";\n style?: \"radio\" | \"icons\";\n display_label?: boolean;\n icon_set?: string; // Package name like 'fa', 'md', etc.\n data: HazoUiFlexRadioItem[];\n selection: \"single\" | \"multi\";\n value: string | string[];\n onChange: (value: string | string[]) => void;\n className?: string;\n compressed?: boolean; // When true, removes padding and spacing between elements\n}\n\n/**\n * Get icon component from react-icons based on icon set and icon name\n */\nfunction getIconComponent(iconSet: string | undefined, iconName: string | undefined): React.ComponentType<any> | null {\n if (!iconSet || !iconName) return null;\n \n const iconLibrary = getIconLibrary(iconSet);\n if (!iconLibrary) return null;\n \n const IconComponent = iconLibrary[iconName];\n return IconComponent || null;\n}\n\n/**\n * Hazo UI Flex Radio Component\n * Supports single and multi-selection with radio buttons or icons\n */\nexport function HazoUiFlexRadio({\n layout = \"horizontal\",\n style = \"radio\",\n display_label = true,\n icon_set,\n data,\n selection = \"single\",\n value,\n onChange,\n className,\n compressed = false,\n}: HazoUiFlexRadioProps) {\n // Icon library is loaded lazily when needed\n\n /**\n * Handle single selection change\n */\n const handleSingleSelection = (selectedValue: string) => {\n onChange(selectedValue);\n };\n\n /**\n * Handle multi selection change\n */\n const handleMultiSelection = (selectedValue: string) => {\n const currentValues = Array.isArray(value) ? value : [];\n const isSelected = currentValues.includes(selectedValue);\n \n if (isSelected) {\n // Remove from selection\n onChange(currentValues.filter((v) => v !== selectedValue));\n } else {\n // Add to selection\n onChange([...currentValues, selectedValue]);\n }\n };\n\n /**\n * Check if an item is selected\n */\n const isSelected = (itemValue: string): boolean => {\n if (selection === \"single\") {\n return value === itemValue;\n } else {\n const currentValues = Array.isArray(value) ? value : [];\n return currentValues.includes(itemValue);\n }\n };\n\n /**\n * Render radio style option\n */\n const renderRadioOption = (item: HazoUiFlexRadioItem) => {\n const selected = isSelected(item.value);\n \n if (selection === \"single\") {\n const optionContent = (\n <div\n className={cn(\n \"cls_radio_option flex items-center gap-2\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n compressed ? \"\" : \"p-2 rounded-md\",\n \"hover:bg-accent transition-colors\",\n selected && \"bg-accent\"\n )}\n >\n <RadioGroupItem\n value={item.value}\n id={`radio-${item.value}`}\n className=\"cls_radio_item shrink-0\"\n />\n {display_label && (\n <label\n htmlFor={`radio-${item.value}`}\n className=\"cls_radio_label text-sm font-medium cursor-pointer flex-1\"\n >\n {item.label}\n </label>\n )}\n </div>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {optionContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n } else {\n // Multi-selection with checkbox-like behavior\n const optionContent = (\n <div\n className={cn(\n \"cls_radio_option flex items-center gap-2 cursor-pointer\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n compressed ? \"\" : \"p-2 rounded-md\",\n \"hover:bg-accent transition-colors\",\n selected && \"bg-accent\"\n )}\n onClick={() => handleMultiSelection(item.value)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleMultiSelection(item.value);\n }\n }}\n >\n <div\n className={cn(\n \"cls_checkbox_indicator h-4 w-4 rounded-sm border-2 border-primary flex items-center justify-center transition-colors shrink-0\",\n selected ? \"bg-primary\" : \"bg-background\"\n )}\n >\n {selected && (\n <svg\n className=\"cls_checkmark h-3 w-3 text-primary-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {display_label && (\n <span className=\"cls_checkbox_label text-sm font-medium flex-1\">\n {item.label}\n </span>\n )}\n </div>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {optionContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n }\n };\n\n /**\n * Render icon style option\n */\n const renderIconOption = (item: HazoUiFlexRadioItem) => {\n const selected = isSelected(item.value);\n \n // Get icon components\n const SelectedIcon = icon_set && item.icon_selected\n ? getIconComponent(icon_set, item.icon_selected)\n : null;\n const UnselectedIcon = icon_set && item.icon_unselected\n ? getIconComponent(icon_set, item.icon_unselected)\n : null;\n \n const IconComponent = selected && SelectedIcon ? SelectedIcon : (UnselectedIcon || SelectedIcon);\n \n // Apply custom colors if provided\n const buttonStyles: React.CSSProperties = {};\n if (item.bgcolor) {\n buttonStyles.backgroundColor = item.bgcolor;\n }\n \n const buttonContent = (\n <Button\n variant={selected ? \"default\" : \"ghost\"}\n size=\"default\"\n className={cn(\n \"cls_icon_option border-0\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n \"gap-2 h-auto\",\n compressed ? \"py-0 px-0\" : \"py-2 px-3 sm:py-3 sm:px-4\",\n // Only apply default colors if custom colors are not provided\n !item.bgcolor && selected && \"bg-primary text-primary-foreground\",\n !item.bgcolor && !selected && \"hover:bg-accent\"\n )}\n style={Object.keys(buttonStyles).length > 0 ? buttonStyles : undefined}\n onClick={() => {\n if (selection === \"single\") {\n handleSingleSelection(item.value);\n } else {\n handleMultiSelection(item.value);\n }\n }}\n aria-label={item.label}\n aria-pressed={selected}\n >\n {IconComponent && (\n <IconComponent \n className=\"cls_icon h-4 w-4 sm:h-5 sm:w-5\" \n style={item.fgcolor ? { color: item.fgcolor } : undefined}\n />\n )}\n {display_label && (\n <span \n className=\"cls_icon_label text-sm font-medium\"\n style={item.fgcolor ? { color: item.fgcolor } : undefined}\n >\n {item.label}\n </span>\n )}\n </Button>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {buttonContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n };\n\n // Container classes with single outline\n const containerClasses = cn(\n \"cls_hazo_ui_flex_radio border border-input rounded-md\",\n compressed ? \"\" : \"p-2 sm:p-3\",\n layout === \"horizontal\"\n ? cn(\n \"flex flex-row flex-wrap\",\n compressed ? \"gap-0\" : \"gap-2 sm:gap-3\"\n )\n : cn(\n \"flex flex-col\",\n compressed ? \"gap-0\" : \"gap-2 sm:gap-3\"\n ),\n className\n );\n \n // RadioGroup needs grid override for flex layout\n const radioGroupClasses = cn(\n containerClasses,\n \"!flex !flex-row !flex-wrap\" // Override RadioGroup's default grid\n );\n\n if (style === \"icons\") {\n // Icon style - use buttons\n return (\n <TooltipProvider delayDuration={1000}>\n <div className={containerClasses} role={selection === \"single\" ? \"radiogroup\" : \"group\"}>\n {data.map((item) => renderIconOption(item))}\n </div>\n </TooltipProvider>\n );\n } else {\n // Radio style - use RadioGroup for single, custom for multi\n if (selection === \"single\") {\n return (\n <TooltipProvider delayDuration={1000}>\n <RadioGroup\n value={typeof value === \"string\" ? value : \"\"}\n onValueChange={handleSingleSelection}\n className={layout === \"horizontal\" \n ? cn(radioGroupClasses, \"!flex-row\")\n : cn(radioGroupClasses, \"!flex-col\")\n }\n >\n {data.map((item) => renderRadioOption(item))}\n </RadioGroup>\n </TooltipProvider>\n );\n } else {\n return (\n <TooltipProvider delayDuration={1000}>\n <div className={containerClasses} role=\"group\">\n {data.map((item) => renderRadioOption(item))}\n </div>\n </TooltipProvider>\n );\n }\n }\n}\n\n","\"use client\";\n\n/**\n * Hazo UI Flex Input Component\n * \n * Enhanced input component with type validation, character restrictions, and error messaging.\n * Extends shadcn Input component with additional validation props.\n */\n\nimport * as React from \"react\";\nimport { Input, type InputProps } from \"../ui/input\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface HazoUiFlexInputProps extends Omit<InputProps, \"type\"> {\n input_type?: \"mixed\" | \"numeric\" | \"email\" | \"alpha\";\n text_len_min?: number;\n text_len_max?: number;\n num_min?: number;\n num_max?: number;\n regex?: string | RegExp;\n num_decimals?: number;\n format_guide?: string;\n format_guide_info?: boolean;\n}\n\n/**\n * Validate input value based on input_type and constraints\n */\nfunction validateInput(\n value: string,\n input_type: \"mixed\" | \"numeric\" | \"email\" | \"alpha\",\n text_len_min?: number,\n text_len_max?: number,\n num_min?: number,\n num_max?: number,\n regex?: string | RegExp,\n num_decimals?: number\n): { isValid: boolean; errorMessage?: string } {\n // Empty value validation\n if (value === \"\") {\n return { isValid: true };\n }\n\n // Type-specific validation\n switch (input_type) {\n case \"numeric\": {\n // Check if value is a valid number\n const numValue = parseFloat(value);\n if (isNaN(numValue)) {\n return { isValid: false, errorMessage: \"Must be a valid number\" };\n }\n\n // Check decimal places\n if (num_decimals !== undefined) {\n const decimalPlaces = value.split(\".\")[1]?.length || 0;\n if (decimalPlaces > num_decimals) {\n return {\n isValid: false,\n errorMessage: `Maximum ${num_decimals} decimal place${num_decimals !== 1 ? \"s\" : \"\"} allowed`,\n };\n }\n }\n\n // Check min/max\n if (num_min !== undefined && numValue < num_min) {\n return { isValid: false, errorMessage: `Must be at least ${num_min}` };\n }\n if (num_max !== undefined && numValue > num_max) {\n return { isValid: false, errorMessage: `Must be at most ${num_max}` };\n }\n break;\n }\n\n case \"alpha\": {\n // Check if value contains only letters\n const alphaRegex = /^[A-Za-z\\s]*$/;\n if (!alphaRegex.test(value)) {\n return { isValid: false, errorMessage: \"Only letters are allowed\" };\n }\n break;\n }\n\n case \"email\": {\n // Basic email validation\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return { isValid: false, errorMessage: \"Must be a valid email address\" };\n }\n break;\n }\n\n case \"mixed\": {\n // Check length constraints\n if (text_len_min !== undefined && value.length < text_len_min) {\n return {\n isValid: false,\n errorMessage: `Must be at least ${text_len_min} character${text_len_min !== 1 ? \"s\" : \"\"}`,\n };\n }\n if (text_len_max !== undefined && value.length > text_len_max) {\n return {\n isValid: false,\n errorMessage: `Must be at most ${text_len_max} character${text_len_max !== 1 ? \"s\" : \"\"}`,\n };\n }\n break;\n }\n }\n\n // Regex validation (applies to all types if provided)\n if (regex) {\n const regexPattern = typeof regex === \"string\" ? new RegExp(regex) : regex;\n if (!regexPattern.test(value)) {\n return { isValid: false, errorMessage: \"Invalid format\" };\n }\n }\n\n return { isValid: true };\n}\n\n/**\n * Filter input value based on input_type to prevent invalid characters\n */\nfunction filterInputValue(\n value: string,\n input_type: \"mixed\" | \"numeric\" | \"email\" | \"alpha\",\n num_decimals?: number\n): string {\n switch (input_type) {\n case \"numeric\": {\n // Allow digits, decimal point, and minus sign\n let filtered = value.replace(/[^\\d.-]/g, \"\");\n\n // Handle decimal point - only allow one\n const parts = filtered.split(\".\");\n if (parts.length > 2) {\n filtered = parts[0] + \".\" + parts.slice(1).join(\"\");\n }\n\n // If num_decimals is 0, don't allow decimal point\n if (num_decimals === 0 && filtered.includes(\".\")) {\n filtered = filtered.replace(\".\", \"\");\n }\n\n // Limit decimal places\n if (num_decimals !== undefined && num_decimals > 0) {\n const parts = filtered.split(\".\");\n if (parts.length === 2 && parts[1].length > num_decimals) {\n filtered = parts[0] + \".\" + parts[1].substring(0, num_decimals);\n }\n }\n\n return filtered;\n }\n\n case \"alpha\": {\n // Allow only letters and spaces\n return value.replace(/[^A-Za-z\\s]/g, \"\");\n }\n\n case \"email\":\n case \"mixed\":\n default: {\n // Allow all characters for email and mixed\n return value;\n }\n }\n}\n\nexport const HazoUiFlexInput = React.forwardRef<\n HTMLInputElement,\n HazoUiFlexInputProps\n>(\n (\n {\n className,\n input_type = \"mixed\",\n text_len_min,\n text_len_max,\n num_min,\n num_max,\n regex,\n num_decimals,\n format_guide,\n format_guide_info = false,\n value: controlledValue,\n onChange,\n onBlur,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState<string>(\n typeof controlledValue === \"string\" ? controlledValue : (typeof controlledValue === \"number\" ? String(controlledValue) : \"\")\n );\n const [errorMessage, setErrorMessage] = React.useState<string | undefined>();\n\n // Use controlled value if provided, otherwise use internal state\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled\n ? (typeof controlledValue === \"string\" ? controlledValue : String(controlledValue || \"\"))\n : internalValue;\n\n // Sync internal state when controlled value changes externally\n React.useEffect(() => {\n if (isControlled) {\n const newValue = typeof controlledValue === \"string\" ? controlledValue : String(controlledValue || \"\");\n if (newValue !== internalValue) {\n setInternalValue(newValue);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlledValue, isControlled]);\n\n /**\n * Handle input change with character filtering\n */\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let newValue = e.target.value;\n\n // Apply character filtering for numeric and alpha types\n if (input_type === \"numeric\" || input_type === \"alpha\") {\n newValue = filterInputValue(newValue, input_type, num_decimals);\n }\n\n // Update internal state if uncontrolled\n if (!isControlled) {\n setInternalValue(newValue);\n }\n\n // Clear error on change\n if (errorMessage) {\n setErrorMessage(undefined);\n }\n\n // Call original onChange if provided\n if (onChange) {\n const syntheticEvent = {\n ...e,\n target: { ...e.target, value: newValue },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n /**\n * Handle blur event with validation\n */\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n const validation = validateInput(\n currentValue,\n input_type,\n text_len_min,\n text_len_max,\n num_min,\n num_max,\n regex,\n num_decimals\n );\n\n if (!validation.isValid) {\n setErrorMessage(validation.errorMessage || format_guide || \"Invalid input\");\n } else {\n setErrorMessage(undefined);\n }\n\n // Call original onBlur if provided\n if (onBlur) {\n onBlur(e);\n }\n };\n\n // Determine input type for HTML input element\n const htmlInputType =\n input_type === \"email\" ? \"email\" : input_type === \"numeric\" ? \"text\" : \"text\";\n\n // Determine if input has error\n const hasError = errorMessage !== undefined;\n\n return (\n <div className=\"cls_hazo_ui_flex_input_container w-full\">\n <Input\n ref={ref}\n type={htmlInputType}\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n className={cn(\n hasError && \"border-destructive focus-visible:ring-destructive\",\n className\n )}\n {...props}\n />\n {hasError && errorMessage && (\n <p className=\"cls_error_message mt-1 text-sm text-destructive\">\n {errorMessage}\n </p>\n )}\n {format_guide_info && format_guide && (\n <p\n className={cn(\n \"cls_format_guide_info mt-1 text-xs italic text-muted-foreground\",\n hasError && \"mt-0\"\n )}\n >\n {format_guide}\n </p>\n )}\n </div>\n );\n }\n);\n\nHazoUiFlexInput.displayName = \"HazoUiFlexInput\";\n\n","/**\n * Constants for HazoRichtextEditor component\n *\n * Contains font families, block types, font sizes, and preset colors.\n */\n\nimport type { FontFamilyOption } from \"./types\";\n\n/**\n * Available font families\n */\nexport const FONT_FAMILIES: FontFamilyOption[] = [\n { value: \"Arial\", label: \"Arial\" },\n { value: \"Verdana\", label: \"Verdana\" },\n { value: \"Times New Roman\", label: \"Times New Roman\" },\n { value: \"Georgia\", label: \"Georgia\" },\n { value: \"Courier New\", label: \"Courier New\" },\n { value: \"Trebuchet MS\", label: \"Trebuchet MS\" },\n];\n\n/**\n * Font size presets for increment/decrement\n */\nexport const FONT_SIZES = [8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 28, 32, 36, 48, 72];\n\n/**\n * Default font size\n */\nexport const DEFAULT_FONT_SIZE = 16;\n\n/**\n * Minimum font size\n */\nexport const MIN_FONT_SIZE = 8;\n\n/**\n * Maximum font size\n */\nexport const MAX_FONT_SIZE = 72;\n\n/**\n * Preset colors for color picker\n */\nexport const PRESET_COLORS = [\n \"#000000\",\n \"#ffffff\",\n \"#f44336\",\n \"#e91e63\",\n \"#9c27b0\",\n \"#673ab7\",\n \"#3f51b5\",\n \"#2196f3\",\n \"#03a9f4\",\n \"#00bcd4\",\n \"#009688\",\n \"#4caf50\",\n \"#8bc34a\",\n \"#cddc39\",\n \"#ffeb3b\",\n \"#ffc107\",\n \"#ff9800\",\n \"#ff5722\",\n \"#795548\",\n \"#9e9e9e\",\n];\n\n/**\n * Default text color\n */\nexport const DEFAULT_TEXT_COLOR = \"#000000\";\n\n/**\n * Default highlight color\n */\nexport const DEFAULT_HIGHLIGHT_COLOR = \"#ffff00\";\n\n/**\n * Block type identifiers\n */\nexport const BLOCK_TYPES = {\n PARAGRAPH: \"paragraph\",\n HEADING_1: \"heading-1\",\n HEADING_2: \"heading-2\",\n HEADING_3: \"heading-3\",\n BULLET_LIST: \"bulletList\",\n ORDERED_LIST: \"orderedList\",\n TASK_LIST: \"taskList\",\n CODE_BLOCK: \"codeBlock\",\n BLOCKQUOTE: \"blockquote\",\n} as const;\n\n/**\n * Text alignment options\n */\nexport const TEXT_ALIGNMENTS = [\"left\", \"center\", \"right\", \"justify\"] as const;\n\n/**\n * Default min height for editor\n */\nexport const DEFAULT_MIN_HEIGHT = \"200px\";\n\n/**\n * Default max height for editor\n */\nexport const DEFAULT_MAX_HEIGHT = \"500px\";\n\n/**\n * Default placeholder text\n */\nexport const DEFAULT_PLACEHOLDER = \"Start typing...\";\n\n/**\n * Tab identifiers\n */\nexport const VIEW_TABS = {\n VISUAL: \"visual\",\n HTML: \"html\",\n TEXT: \"text\",\n} as const;\n","/**\n * Color Picker Popover Component\n *\n * A popover containing a color picker for selecting text and highlight colors.\n * Uses react-colorful for the color picker UI.\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { HexColorPicker } from \"react-colorful\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../../ui/popover\";\nimport { Button } from \"../../../ui/button\";\nimport { Input } from \"../../../ui/input\";\nimport { cn } from \"../../../../lib/utils\";\nimport { PRESET_COLORS } from \"../../constants\";\nimport type { ColorPickerPopoverProps } from \"../../types\";\n\n/**\n * Color Picker Popover component for selecting colors\n */\nexport function ColorPickerPopover({\n color,\n on_color_change,\n trigger_icon,\n trigger_label = \"Pick color\",\n}: ColorPickerPopoverProps) {\n const [is_open, set_is_open] = React.useState(false);\n const [hex_input, set_hex_input] = React.useState(color);\n\n // Sync hex input when color prop changes\n React.useEffect(() => {\n set_hex_input(color);\n }, [color]);\n\n // Handle hex input change\n const handle_hex_input_change = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n set_hex_input(value);\n\n // Validate and apply hex color\n if (/^#[0-9A-Fa-f]{6}$/.test(value)) {\n on_color_change(value);\n }\n };\n\n // Handle preset color selection\n const handle_preset_select = (preset_color: string) => {\n on_color_change(preset_color);\n set_hex_input(preset_color);\n };\n\n return (\n <Popover open={is_open} onOpenChange={set_is_open}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"cls_color_picker_trigger h-8 w-8 p-0\"\n aria-label={trigger_label}\n >\n <div className=\"cls_color_picker_icon_wrapper relative\">\n {trigger_icon}\n <div\n className=\"cls_color_picker_indicator absolute -bottom-0.5 left-1/2 -translate-x-1/2 h-1 w-4 rounded-full\"\n style={{ backgroundColor: color }}\n />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_color_picker_popover w-64 p-3\" align=\"start\">\n <div className=\"cls_color_picker_content space-y-3\">\n {/* Color picker */}\n <HexColorPicker\n color={color}\n onChange={(new_color) => {\n on_color_change(new_color);\n set_hex_input(new_color);\n }}\n className=\"cls_color_picker_main !w-full\"\n />\n\n {/* Hex input */}\n <div className=\"cls_color_picker_hex_input flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Hex:</span>\n <Input\n value={hex_input}\n onChange={handle_hex_input_change}\n className=\"h-8 font-mono text-sm\"\n placeholder=\"#000000\"\n />\n </div>\n\n {/* Preset colors */}\n <div className=\"cls_color_picker_presets\">\n <span className=\"text-xs text-muted-foreground mb-2 block\">Presets</span>\n <div className=\"grid grid-cols-10 gap-1\">\n {PRESET_COLORS.map((preset_color) => (\n <button\n key={preset_color}\n onClick={() => handle_preset_select(preset_color)}\n className={cn(\n \"cls_color_preset h-5 w-5 rounded border border-border transition-transform\",\n \"hover:scale-110 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1\",\n color === preset_color && \"ring-2 ring-primary ring-offset-1\"\n )}\n style={{ backgroundColor: preset_color }}\n aria-label={`Select color ${preset_color}`}\n />\n ))}\n </div>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport default ColorPickerPopover;\n","/**\n * Table Size Picker Component\n *\n * Grid-based picker for selecting table dimensions (rows x columns)\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\n\ninterface TableSizePickerProps {\n /** Maximum number of rows to show in the grid */\n max_rows?: number;\n /** Maximum number of columns to show in the grid */\n max_cols?: number;\n /** Callback when a size is selected */\n on_select: (rows: number, cols: number) => void;\n}\n\nexport function TableSizePicker({\n max_rows = 8,\n max_cols = 8,\n on_select,\n}: TableSizePickerProps) {\n const [hover_row, set_hover_row] = React.useState(0);\n const [hover_col, set_hover_col] = React.useState(0);\n\n return (\n <div className=\"cls_table_size_picker p-2\">\n <div className=\"cls_table_size_label text-sm text-muted-foreground mb-2 text-center\">\n {hover_row > 0 && hover_col > 0\n ? `${hover_row} x ${hover_col} Table`\n : \"Select table size\"}\n </div>\n <div\n className=\"cls_table_size_grid grid gap-1\"\n style={{\n gridTemplateColumns: `repeat(${max_cols}, 1fr)`,\n }}\n onMouseLeave={() => {\n set_hover_row(0);\n set_hover_col(0);\n }}\n >\n {Array.from({ length: max_rows * max_cols }).map((_, index) => {\n const row = Math.floor(index / max_cols) + 1;\n const col = (index % max_cols) + 1;\n const is_highlighted = row <= hover_row && col <= hover_col;\n\n return (\n <div\n key={index}\n className={cn(\n \"cls_table_size_cell w-4 h-4 border border-border rounded-sm cursor-pointer transition-colors\",\n is_highlighted\n ? \"bg-primary border-primary\"\n : \"bg-background hover:bg-muted\"\n )}\n onMouseEnter={() => {\n set_hover_row(row);\n set_hover_col(col);\n }}\n onClick={() => on_select(row, col)}\n />\n );\n })}\n </div>\n </div>\n );\n}\n\nexport default TableSizePicker;\n","/**\n * Toolbar Component for HazoRichtextEditor\n *\n * Main toolbar containing all formatting controls, insert options,\n * and action buttons for the rich text editor.\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport type { Editor } from \"@tiptap/react\";\nimport { Button } from \"../../../ui/button\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"../../../ui/tooltip\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../../ui/select\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../../../ui/popover\";\nimport { cn } from \"../../../../lib/utils\";\nimport { ColorPickerPopover } from \"./color_picker_popover\";\nimport { TableSizePicker } from \"./table_size_picker\";\nimport {\n FONT_FAMILIES,\n DEFAULT_TEXT_COLOR,\n DEFAULT_HIGHLIGHT_COLOR,\n DEFAULT_FONT_SIZE,\n} from \"../../constants\";\nimport type { ToolbarProps } from \"../../types\";\n\n// Icons\nimport {\n FiBold,\n FiItalic,\n FiUnderline,\n FiAlignLeft,\n FiAlignCenter,\n FiAlignRight,\n FiAlignJustify,\n FiList,\n FiMinus,\n FiPlus,\n FiCode,\n FiLink,\n FiPaperclip,\n FiImage,\n FiTable,\n FiColumns,\n FiType,\n FiChevronDown,\n FiTrash2,\n} from \"react-icons/fi\";\nimport {\n LuHeading1,\n LuHeading2,\n LuHeading3,\n LuListOrdered,\n LuListTodo,\n LuQuote,\n LuStrikethrough,\n LuSubscript,\n LuSuperscript,\n LuUndo2,\n LuRedo2,\n LuHighlighter,\n LuColumns2,\n LuTableProperties,\n} from \"react-icons/lu\";\nimport { MdFormatClear } from \"react-icons/md\";\nimport { BiBracket } from \"react-icons/bi\";\nimport { RiInsertRowBottom, RiInsertColumnRight, RiDeleteRow, RiDeleteColumn } from \"react-icons/ri\";\n\n/**\n * Toolbar button with tooltip\n */\ninterface ToolbarButtonProps {\n icon: React.ReactNode;\n label: string;\n on_click: () => void;\n is_active?: boolean;\n disabled?: boolean;\n className?: string;\n}\n\nfunction ToolbarButton({ icon, label, on_click, is_active, disabled, className }: ToolbarButtonProps) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={on_click}\n disabled={disabled}\n className={cn(\n \"cls_toolbar_button h-8 w-8 p-0\",\n is_active && \"bg-accent text-accent-foreground\",\n className\n )}\n >\n {icon}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{label}</p>\n </TooltipContent>\n </Tooltip>\n );\n}\n\n/**\n * Toolbar divider\n */\nfunction ToolbarDivider() {\n return <div className=\"cls_toolbar_divider mx-1 h-6 w-px bg-border\" />;\n}\n\n/**\n * Get current font size from editor\n */\nfunction get_current_font_size(editor: Editor | null): number {\n if (!editor) return DEFAULT_FONT_SIZE;\n const attrs = editor.getAttributes(\"textStyle\");\n if (attrs?.fontSize) {\n const parsed = parseInt(attrs.fontSize.replace(\"px\", \"\"), 10);\n return isNaN(parsed) ? DEFAULT_FONT_SIZE : parsed;\n }\n return DEFAULT_FONT_SIZE;\n}\n\n/**\n * Main Toolbar component\n */\nexport function Toolbar({ editor, on_open_variables_modal, variables, on_image_embed, on_add_attachment }: ToolbarProps) {\n const [link_url, set_link_url] = React.useState(\"\");\n const [is_link_popover_open, set_is_link_popover_open] = React.useState(false);\n const [is_block_type_open, set_is_block_type_open] = React.useState(false);\n const [is_table_popover_open, set_is_table_popover_open] = React.useState(false);\n const [is_table_controls_open, set_is_table_controls_open] = React.useState(false);\n const [is_columns_popover_open, set_is_columns_popover_open] = React.useState(false);\n const [is_uploading_image, set_is_uploading_image] = React.useState(false);\n const [is_uploading_attachment, set_is_uploading_attachment] = React.useState(false);\n const image_input_ref = React.useRef<HTMLInputElement>(null);\n const attachment_input_ref = React.useRef<HTMLInputElement>(null);\n\n if (!editor) {\n return null;\n }\n\n // Check if cursor is inside a table\n const is_in_table = editor.isActive(\"table\");\n\n // Get current values\n const current_font_family = editor.getAttributes(\"textStyle\").fontFamily || \"Arial\";\n const current_text_color = editor.getAttributes(\"textStyle\").color || DEFAULT_TEXT_COLOR;\n const current_highlight_color =\n editor.getAttributes(\"highlight\").color || DEFAULT_HIGHLIGHT_COLOR;\n const current_font_size = get_current_font_size(editor);\n\n // Handle link insertion\n const handle_insert_link = () => {\n if (link_url) {\n editor.chain().focus().setLink({ href: link_url }).run();\n set_link_url(\"\");\n set_is_link_popover_open(false);\n }\n };\n\n // Handle image embed (inserts into editor)\n const handle_image_change = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file || !on_image_embed) return;\n\n set_is_uploading_image(true);\n try {\n await on_image_embed(file);\n } catch (error) {\n console.error(\"Image embed failed:\", error);\n } finally {\n set_is_uploading_image(false);\n if (image_input_ref.current) {\n image_input_ref.current.value = \"\";\n }\n }\n };\n\n // Handle attachment (stores in separate array)\n const handle_attachment_change = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file || !on_add_attachment) return;\n\n set_is_uploading_attachment(true);\n try {\n await on_add_attachment(file);\n } catch (error) {\n console.error(\"Attachment failed:\", error);\n } finally {\n set_is_uploading_attachment(false);\n if (attachment_input_ref.current) {\n attachment_input_ref.current.value = \"\";\n }\n }\n };\n\n // Handle block type selection\n const select_block_type = (command: () => void) => {\n command();\n set_is_block_type_open(false);\n };\n\n // Handle table insertion\n const handle_insert_table = (rows: number, cols: number) => {\n editor.chain().focus().insertTable({ rows, cols, withHeaderRow: true }).run();\n set_is_table_popover_open(false);\n };\n\n return (\n <TooltipProvider delayDuration={300}>\n <div className=\"cls_toolbar flex flex-wrap items-center gap-0.5 p-2 border-b border-border bg-muted/30\">\n {/* Undo/Redo */}\n <ToolbarButton\n icon={<LuUndo2 className=\"h-4 w-4\" />}\n label=\"Undo\"\n on_click={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().undo()}\n />\n <ToolbarButton\n icon={<LuRedo2 className=\"h-4 w-4\" />}\n label=\"Redo\"\n on_click={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().redo()}\n />\n\n <ToolbarDivider />\n\n {/* Font family select */}\n <Select\n value={current_font_family}\n onValueChange={(value) => editor.chain().focus().setFontFamily(value).run()}\n >\n <SelectTrigger className=\"cls_toolbar_font_family h-8 w-32 text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {FONT_FAMILIES.map((font) => (\n <SelectItem key={font.value} value={font.value} style={{ fontFamily: font.value }}>\n {font.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <ToolbarDivider />\n\n {/* Font size controls */}\n <ToolbarButton\n icon={<FiMinus className=\"h-4 w-4\" />}\n label=\"Decrease font size\"\n on_click={() => editor.chain().focus().decreaseFontSize().run()}\n />\n <span className=\"cls_toolbar_font_size w-8 text-center text-xs tabular-nums\">\n {current_font_size}\n </span>\n <ToolbarButton\n icon={<FiPlus className=\"h-4 w-4\" />}\n label=\"Increase font size\"\n on_click={() => editor.chain().focus().increaseFontSize().run()}\n />\n\n <ToolbarDivider />\n\n {/* Block type dropdown */}\n <Popover open={is_block_type_open} onOpenChange={set_is_block_type_open}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"cls_toolbar_block_type h-8 gap-1 px-2\">\n <LuHeading1 className=\"h-4 w-4\" />\n <FiChevronDown className=\"h-3 w-3\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_block_type_popover w-48 p-1\" align=\"start\">\n <div className=\"cls_block_type_list space-y-0.5\">\n <Button\n variant={editor.isActive(\"paragraph\") ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => select_block_type(() => editor.chain().focus().setParagraph().run())}\n >\n <FiType className=\"mr-2 h-4 w-4\" />\n Paragraph\n </Button>\n <Button\n variant={editor.isActive(\"heading\", { level: 1 }) ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => select_block_type(() => editor.chain().focus().toggleHeading({ level: 1 }).run())}\n >\n <LuHeading1 className=\"mr-2 h-4 w-4\" />\n Heading 1\n </Button>\n <Button\n variant={editor.isActive(\"heading\", { level: 2 }) ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => select_block_type(() => editor.chain().focus().toggleHeading({ level: 2 }).run())}\n >\n <LuHeading2 className=\"mr-2 h-4 w-4\" />\n Heading 2\n </Button>\n <Button\n variant={editor.isActive(\"heading\", { level: 3 }) ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => select_block_type(() => editor.chain().focus().toggleHeading({ level: 3 }).run())}\n >\n <LuHeading3 className=\"mr-2 h-4 w-4\" />\n Heading 3\n </Button>\n <Button\n variant={editor.isActive(\"bulletList\") ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => select_block_type(() => editor.chain().focus().toggleBulletList().run())}\n >\n <FiList className=\"mr-2 h-4 w-4\" />\n Bullet List\n </Button>\n <Button\n variant={editor.isActive(\"orderedList\") ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => select_block_type(() => editor.chain().focus().toggleOrderedList().run())}\n >\n <LuListOrdered className=\"mr-2 h-4 w-4\" />\n Numbered List\n </Button>\n <Button\n variant={editor.isActive(\"taskList\") ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => select_block_type(() => editor.chain().focus().toggleTaskList().run())}\n >\n <LuListTodo className=\"mr-2 h-4 w-4\" />\n Task List\n </Button>\n <Button\n variant={editor.isActive(\"blockquote\") ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => select_block_type(() => editor.chain().focus().toggleBlockquote().run())}\n >\n <LuQuote className=\"mr-2 h-4 w-4\" />\n Quote\n </Button>\n <Button\n variant={editor.isActive(\"codeBlock\") ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => select_block_type(() => editor.chain().focus().toggleCodeBlock().run())}\n >\n <FiCode className=\"mr-2 h-4 w-4\" />\n Code Block\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n\n <ToolbarDivider />\n\n {/* Text formatting */}\n <ToolbarButton\n icon={<FiBold className=\"h-4 w-4\" />}\n label=\"Bold\"\n on_click={() => editor.chain().focus().toggleBold().run()}\n is_active={editor.isActive(\"bold\")}\n />\n <ToolbarButton\n icon={<FiItalic className=\"h-4 w-4\" />}\n label=\"Italic\"\n on_click={() => editor.chain().focus().toggleItalic().run()}\n is_active={editor.isActive(\"italic\")}\n />\n <ToolbarButton\n icon={<FiUnderline className=\"h-4 w-4\" />}\n label=\"Underline\"\n on_click={() => editor.chain().focus().toggleUnderline().run()}\n is_active={editor.isActive(\"underline\")}\n />\n <ToolbarButton\n icon={<LuStrikethrough className=\"h-4 w-4\" />}\n label=\"Strikethrough\"\n on_click={() => editor.chain().focus().toggleStrike().run()}\n is_active={editor.isActive(\"strike\")}\n />\n <ToolbarButton\n icon={<LuSubscript className=\"h-4 w-4\" />}\n label=\"Subscript\"\n on_click={() => editor.chain().focus().toggleSubscript().run()}\n is_active={editor.isActive(\"subscript\")}\n />\n <ToolbarButton\n icon={<LuSuperscript className=\"h-4 w-4\" />}\n label=\"Superscript\"\n on_click={() => editor.chain().focus().toggleSuperscript().run()}\n is_active={editor.isActive(\"superscript\")}\n />\n\n <ToolbarDivider />\n\n {/* Text color */}\n <ColorPickerPopover\n color={current_text_color}\n on_color_change={(color) => editor.chain().focus().setColor(color).run()}\n trigger_icon={<FiType className=\"h-4 w-4\" />}\n trigger_label=\"Text color\"\n />\n\n {/* Highlight color */}\n <ColorPickerPopover\n color={current_highlight_color}\n on_color_change={(color) => editor.chain().focus().toggleHighlight({ color }).run()}\n trigger_icon={<LuHighlighter className=\"h-4 w-4\" />}\n trigger_label=\"Highlight color\"\n />\n\n <ToolbarDivider />\n\n {/* Text alignment */}\n <ToolbarButton\n icon={<FiAlignLeft className=\"h-4 w-4\" />}\n label=\"Align left\"\n on_click={() => editor.chain().focus().setTextAlign(\"left\").run()}\n is_active={editor.isActive({ textAlign: \"left\" })}\n />\n <ToolbarButton\n icon={<FiAlignCenter className=\"h-4 w-4\" />}\n label=\"Align center\"\n on_click={() => editor.chain().focus().setTextAlign(\"center\").run()}\n is_active={editor.isActive({ textAlign: \"center\" })}\n />\n <ToolbarButton\n icon={<FiAlignRight className=\"h-4 w-4\" />}\n label=\"Align right\"\n on_click={() => editor.chain().focus().setTextAlign(\"right\").run()}\n is_active={editor.isActive({ textAlign: \"right\" })}\n />\n <ToolbarButton\n icon={<FiAlignJustify className=\"h-4 w-4\" />}\n label=\"Justify\"\n on_click={() => editor.chain().focus().setTextAlign(\"justify\").run()}\n is_active={editor.isActive({ textAlign: \"justify\" })}\n />\n\n <ToolbarDivider />\n\n {/* Link */}\n <Popover open={is_link_popover_open} onOpenChange={set_is_link_popover_open}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"cls_toolbar_link h-8 w-8 p-0\",\n editor.isActive(\"link\") && \"bg-accent text-accent-foreground\"\n )}\n >\n <FiLink className=\"h-4 w-4\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_link_popover w-72 p-3\" align=\"start\">\n <div className=\"cls_link_form space-y-2\">\n <label className=\"text-sm font-medium\">Insert Link</label>\n <input\n type=\"url\"\n placeholder=\"https://example.com\"\n value={link_url}\n onChange={(e) => set_link_url(e.target.value)}\n className=\"cls_link_input w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n onKeyDown={(e) => e.key === \"Enter\" && handle_insert_link()}\n />\n <div className=\"flex justify-end gap-2\">\n {editor.isActive(\"link\") && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n editor.chain().focus().unsetLink().run();\n set_is_link_popover_open(false);\n }}\n >\n Remove\n </Button>\n )}\n <Button size=\"sm\" onClick={handle_insert_link}>\n Insert\n </Button>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n\n {/* Image embed */}\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"cls_toolbar_image h-8 w-8 p-0\"\n onClick={() => image_input_ref.current?.click()}\n disabled={is_uploading_image}\n >\n <FiImage className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Insert image</p>\n </TooltipContent>\n </Tooltip>\n <input\n ref={image_input_ref}\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={handle_image_change}\n />\n\n {/* File attachment */}\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"cls_toolbar_attach h-8 w-8 p-0\"\n onClick={() => attachment_input_ref.current?.click()}\n disabled={is_uploading_attachment}\n >\n <FiPaperclip className=\"h-4 w-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Add attachment</p>\n </TooltipContent>\n </Tooltip>\n <input\n ref={attachment_input_ref}\n type=\"file\"\n accept=\"image/*,.pdf,.doc,.docx,.xls,.xlsx,.txt,.zip,.rar\"\n className=\"hidden\"\n onChange={handle_attachment_change}\n />\n\n <ToolbarDivider />\n\n {/* Table with size picker */}\n <Popover open={is_table_popover_open} onOpenChange={set_is_table_popover_open}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n \"cls_toolbar_table h-8 w-8 p-0\",\n editor.isActive(\"table\") && \"bg-accent text-accent-foreground\"\n )}\n >\n <FiTable className=\"h-4 w-4\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_table_popover w-auto p-0\" align=\"start\">\n <TableSizePicker\n max_rows={6}\n max_cols={6}\n on_select={handle_insert_table}\n />\n </PopoverContent>\n </Popover>\n\n {/* Table controls - only show when inside a table */}\n {is_in_table && (\n <Popover open={is_table_controls_open} onOpenChange={set_is_table_controls_open}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"cls_toolbar_table_controls h-8 gap-1 px-2\">\n <LuTableProperties className=\"h-4 w-4\" />\n <FiChevronDown className=\"h-3 w-3\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_table_controls_popover w-48 p-1\" align=\"start\">\n <div className=\"cls_table_controls_list space-y-0.5\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => {\n editor.chain().focus().addRowAfter().run();\n set_is_table_controls_open(false);\n }}\n >\n <RiInsertRowBottom className=\"mr-2 h-4 w-4\" />\n Add Row Below\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => {\n editor.chain().focus().addRowBefore().run();\n set_is_table_controls_open(false);\n }}\n >\n <RiInsertRowBottom className=\"mr-2 h-4 w-4 rotate-180\" />\n Add Row Above\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => {\n editor.chain().focus().addColumnAfter().run();\n set_is_table_controls_open(false);\n }}\n >\n <RiInsertColumnRight className=\"mr-2 h-4 w-4\" />\n Add Column Right\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => {\n editor.chain().focus().addColumnBefore().run();\n set_is_table_controls_open(false);\n }}\n >\n <RiInsertColumnRight className=\"mr-2 h-4 w-4 rotate-180\" />\n Add Column Left\n </Button>\n <div className=\"my-1 h-px bg-border\" />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start text-destructive hover:text-destructive\"\n onClick={() => {\n editor.chain().focus().deleteRow().run();\n set_is_table_controls_open(false);\n }}\n >\n <RiDeleteRow className=\"mr-2 h-4 w-4\" />\n Delete Row\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start text-destructive hover:text-destructive\"\n onClick={() => {\n editor.chain().focus().deleteColumn().run();\n set_is_table_controls_open(false);\n }}\n >\n <RiDeleteColumn className=\"mr-2 h-4 w-4\" />\n Delete Column\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start text-destructive hover:text-destructive\"\n onClick={() => {\n editor.chain().focus().deleteTable().run();\n set_is_table_controls_open(false);\n }}\n >\n <FiTrash2 className=\"mr-2 h-4 w-4\" />\n Delete Table\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n )}\n\n {/* Horizontal Rule */}\n <ToolbarButton\n icon={<FiMinus className=\"h-4 w-4\" />}\n label=\"Horizontal line\"\n on_click={() => editor.chain().focus().setHorizontalRule().run()}\n />\n\n {/* Columns dropdown */}\n <Popover open={is_columns_popover_open} onOpenChange={set_is_columns_popover_open}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"cls_toolbar_columns h-8 w-8 p-0\">\n <FiColumns className=\"h-4 w-4\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_columns_popover w-36 p-1\" align=\"start\">\n <div className=\"cls_columns_list space-y-0.5\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => {\n editor.chain().focus().insertColumnLayout(2).run();\n set_is_columns_popover_open(false);\n }}\n >\n <LuColumns2 className=\"mr-2 h-4 w-4\" />\n 2 Columns\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start\"\n onClick={() => {\n editor.chain().focus().insertColumnLayout(3).run();\n set_is_columns_popover_open(false);\n }}\n >\n <FiColumns className=\"mr-2 h-4 w-4\" />\n 3 Columns\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n\n {/* Variables button */}\n {variables && variables.length > 0 && (\n <>\n <ToolbarDivider />\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={on_open_variables_modal}\n className=\"cls_toolbar_variables h-8 gap-1 px-2\"\n >\n <BiBracket className=\"h-4 w-4\" />\n <span className=\"text-xs\">Variables</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>Insert variable</p>\n </TooltipContent>\n </Tooltip>\n </>\n )}\n\n {/* Clear formatting */}\n <ToolbarDivider />\n <ToolbarButton\n icon={<MdFormatClear className=\"h-4 w-4\" />}\n label=\"Clear formatting\"\n on_click={() => editor.chain().focus().unsetAllMarks().clearNodes().run()}\n />\n </div>\n </TooltipProvider>\n );\n}\n\nexport default Toolbar;\n","\"use client\";\n\n/**\n * Tabs component based on Radix UI\n *\n * Provides accessible tab navigation for switching between views.\n */\n\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"cls_tabs_list inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"cls_tabs_trigger inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"cls_tabs_content mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","/**\n * View Tabs Component for HazoRichtextEditor\n *\n * Provides tabbed views for visual editing, HTML preview/code, and plain text.\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../../ui/tabs\";\nimport { Button } from \"../../../ui/button\";\nimport { cn } from \"../../../../lib/utils\";\nimport type { ViewTabsProps, ViewTab, HtmlViewMode } from \"../../types\";\nimport { DEFAULT_MIN_HEIGHT, DEFAULT_MAX_HEIGHT } from \"../../constants\";\nimport { FiEye, FiCode } from \"react-icons/fi\";\n\n/**\n * HTML View component with preview/code toggle\n */\ninterface HtmlViewProps {\n html_content: string;\n on_html_change: (html: string) => void;\n html_view_mode: HtmlViewMode;\n on_html_view_mode_change: (mode: HtmlViewMode) => void;\n min_height?: string;\n max_height?: string;\n read_only?: boolean;\n}\n\nfunction HtmlView({\n html_content,\n on_html_change,\n html_view_mode,\n on_html_view_mode_change,\n min_height,\n max_height,\n read_only,\n}: HtmlViewProps) {\n return (\n <div className=\"cls_html_view\">\n {/* Mode toggle */}\n <div className=\"cls_html_view_toggle flex items-center gap-1 p-2 border-b border-border bg-muted/30\">\n <Button\n variant={html_view_mode === \"preview\" ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n onClick={() => on_html_view_mode_change(\"preview\")}\n className=\"h-7 gap-1 px-2\"\n >\n <FiEye className=\"h-3.5 w-3.5\" />\n <span className=\"text-xs\">Preview</span>\n </Button>\n <Button\n variant={html_view_mode === \"code\" ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n onClick={() => on_html_view_mode_change(\"code\")}\n className=\"h-7 gap-1 px-2\"\n >\n <FiCode className=\"h-3.5 w-3.5\" />\n <span className=\"text-xs\">Code</span>\n </Button>\n </div>\n\n {/* Content area */}\n <div\n className=\"cls_html_view_content overflow-auto\"\n style={{\n minHeight: min_height || DEFAULT_MIN_HEIGHT,\n maxHeight: max_height || DEFAULT_MAX_HEIGHT,\n }}\n >\n {html_view_mode === \"preview\" ? (\n <div\n className=\"cls_html_preview prose prose-sm max-w-none p-4\"\n dangerouslySetInnerHTML={{ __html: html_content }}\n />\n ) : (\n <textarea\n value={html_content}\n onChange={(e) => on_html_change(e.target.value)}\n readOnly={read_only}\n className={cn(\n \"cls_html_code w-full h-full p-4 font-mono text-sm\",\n \"bg-muted/20 resize-none border-none outline-none\",\n \"focus:ring-0\"\n )}\n style={{\n minHeight: min_height || DEFAULT_MIN_HEIGHT,\n }}\n spellCheck={false}\n />\n )}\n </div>\n </div>\n );\n}\n\n/**\n * Plain Text View component\n */\ninterface TextViewProps {\n text_content: string;\n on_text_change: (text: string) => void;\n min_height?: string;\n max_height?: string;\n read_only?: boolean;\n}\n\nfunction TextView({\n text_content,\n on_text_change,\n min_height,\n max_height,\n read_only,\n}: TextViewProps) {\n return (\n <div\n className=\"cls_text_view overflow-auto\"\n style={{\n minHeight: min_height || DEFAULT_MIN_HEIGHT,\n maxHeight: max_height || DEFAULT_MAX_HEIGHT,\n }}\n >\n <textarea\n value={text_content}\n onChange={(e) => on_text_change(e.target.value)}\n readOnly={read_only}\n className={cn(\n \"cls_text_area w-full h-full p-4 text-sm\",\n \"bg-background resize-none border-none outline-none\",\n \"focus:ring-0\"\n )}\n style={{\n minHeight: min_height || DEFAULT_MIN_HEIGHT,\n }}\n spellCheck={true}\n />\n </div>\n );\n}\n\n/**\n * Visual Editor View component\n * This wraps the TipTap EditorContent\n */\ninterface VisualViewProps {\n children: React.ReactNode;\n min_height?: string;\n max_height?: string;\n}\n\nfunction VisualView({ children, min_height, max_height }: VisualViewProps) {\n return (\n <div\n className=\"cls_visual_view overflow-auto\"\n style={{\n minHeight: min_height || DEFAULT_MIN_HEIGHT,\n maxHeight: max_height || DEFAULT_MAX_HEIGHT,\n }}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Main View Tabs component\n */\nexport function ViewTabs({\n active_tab,\n on_tab_change,\n // editor is unused but kept in props interface for consistency\n html_content,\n text_content,\n on_html_change,\n on_text_change,\n html_view_mode,\n on_html_view_mode_change,\n min_height,\n max_height,\n read_only,\n children,\n}: ViewTabsProps & { children: React.ReactNode }) {\n return (\n <Tabs\n value={active_tab}\n onValueChange={(value) => on_tab_change(value as ViewTab)}\n className=\"cls_view_tabs\"\n >\n <div className=\"cls_view_tabs_header flex items-center justify-between border-b border-border\">\n <TabsList className=\"cls_view_tabs_list h-9 bg-transparent p-0 border-none rounded-none\">\n <TabsTrigger\n value=\"visual\"\n className={cn(\n \"cls_view_tab_trigger rounded-none border-b-2 border-transparent px-4 py-2\",\n \"data-[state=active]:border-primary data-[state=active]:bg-transparent\"\n )}\n >\n Visual\n </TabsTrigger>\n <TabsTrigger\n value=\"html\"\n className={cn(\n \"cls_view_tab_trigger rounded-none border-b-2 border-transparent px-4 py-2\",\n \"data-[state=active]:border-primary data-[state=active]:bg-transparent\"\n )}\n >\n HTML\n </TabsTrigger>\n <TabsTrigger\n value=\"text\"\n className={cn(\n \"cls_view_tab_trigger rounded-none border-b-2 border-transparent px-4 py-2\",\n \"data-[state=active]:border-primary data-[state=active]:bg-transparent\"\n )}\n >\n Text\n </TabsTrigger>\n </TabsList>\n </div>\n\n <TabsContent value=\"visual\" className=\"cls_view_tab_content mt-0\">\n <VisualView min_height={min_height} max_height={max_height}>\n {children}\n </VisualView>\n </TabsContent>\n\n <TabsContent value=\"html\" className=\"cls_view_tab_content mt-0\">\n <HtmlView\n html_content={html_content}\n on_html_change={on_html_change}\n html_view_mode={html_view_mode}\n on_html_view_mode_change={on_html_view_mode_change}\n min_height={min_height}\n max_height={max_height}\n read_only={read_only}\n />\n </TabsContent>\n\n <TabsContent value=\"text\" className=\"cls_view_tab_content mt-0\">\n <TextView\n text_content={text_content}\n on_text_change={on_text_change}\n min_height={min_height}\n max_height={max_height}\n read_only={read_only}\n />\n </TabsContent>\n </Tabs>\n );\n}\n\nexport default ViewTabs;\n","\"use client\";\n\n/**\n * Scroll Area component based on Radix UI\n *\n * Provides custom scrollable areas with styled scrollbars.\n */\n\nimport * as React from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"cls_scroll_area relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n));\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"cls_scroll_bar flex touch-none select-none transition-colors\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"cls_scroll_thumb relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","/**\n * Variables Modal Component\n *\n * Displays a searchable list of available template variables that can be\n * inserted into the editor. Variables are grouped by category.\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"../../../ui/dialog\";\nimport { Input } from \"../../../ui/input\";\nimport { ScrollArea } from \"../../../ui/scroll_area\";\nimport { cn } from \"../../../../lib/utils\";\nimport type { Variable, VariablesModalProps } from \"../../types\";\nimport { FiSearch } from \"react-icons/fi\";\n\n/**\n * Group variables by their category\n */\nfunction group_variables_by_category(variables: Variable[]): Map<string, Variable[]> {\n const grouped = new Map<string, Variable[]>();\n\n for (const variable of variables) {\n const category = variable.category || \"General\";\n const existing = grouped.get(category) || [];\n grouped.set(category, [...existing, variable]);\n }\n\n return grouped;\n}\n\n/**\n * Variables Modal component for selecting template variables\n */\nexport function VariablesModal({\n is_open,\n on_close,\n variables,\n on_select_variable,\n}: VariablesModalProps) {\n const [search_query, set_search_query] = React.useState(\"\");\n\n // Filter variables based on search query\n const filtered_variables = React.useMemo(() => {\n if (!search_query.trim()) {\n return variables;\n }\n const query = search_query.toLowerCase();\n return variables.filter(\n (v) =>\n v.text.toLowerCase().includes(query) ||\n v.description.toLowerCase().includes(query) ||\n (v.category && v.category.toLowerCase().includes(query))\n );\n }, [variables, search_query]);\n\n // Group filtered variables by category\n const grouped_variables = React.useMemo(\n () => group_variables_by_category(filtered_variables),\n [filtered_variables]\n );\n\n // Handle variable selection\n const handle_select = (variable: Variable) => {\n on_select_variable(variable);\n on_close();\n set_search_query(\"\");\n };\n\n // Reset search when modal closes\n React.useEffect(() => {\n if (!is_open) {\n set_search_query(\"\");\n }\n }, [is_open]);\n\n return (\n <Dialog open={is_open} onOpenChange={(open) => !open && on_close()}>\n <DialogContent className=\"cls_variables_modal sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>Insert Variable</DialogTitle>\n <DialogDescription>\n Select a variable to insert into the editor. Variables will be replaced with actual\n values when the content is processed.\n </DialogDescription>\n </DialogHeader>\n\n {/* Search input */}\n <div className=\"cls_variables_modal_search relative\">\n <FiSearch className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n placeholder=\"Search variables...\"\n value={search_query}\n onChange={(e) => set_search_query(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n\n {/* Variables list */}\n <ScrollArea className=\"cls_variables_modal_list h-[300px] pr-4\">\n {filtered_variables.length === 0 ? (\n <div className=\"cls_variables_modal_empty py-8 text-center text-muted-foreground\">\n No variables found\n </div>\n ) : (\n <div className=\"cls_variables_modal_groups space-y-4\">\n {Array.from(grouped_variables.entries()).map(([category, vars]) => (\n <div key={category} className=\"cls_variables_modal_group\">\n <h4 className=\"cls_variables_modal_category mb-2 text-sm font-medium text-muted-foreground\">\n {category}\n </h4>\n <div className=\"space-y-1\">\n {vars.map((variable) => (\n <button\n key={variable.text}\n onClick={() => handle_select(variable)}\n className={cn(\n \"cls_variable_item w-full text-left px-3 py-2 rounded-md\",\n \"hover:bg-accent transition-colors\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n )}\n >\n <div className=\"cls_variable_item_name font-mono text-sm text-primary\">\n {`{{${variable.text}}}`}\n </div>\n <div className=\"cls_variable_item_description text-xs text-muted-foreground mt-0.5\">\n {variable.description}\n </div>\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n </ScrollArea>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport default VariablesModal;\n","import type { EditorState, Transaction } from '@tiptap/pm/state'\n\n/**\n * Takes a Transaction & Editor State and turns it into a chainable state object\n * @param config The transaction and state to create the chainable state from\n * @returns A chainable Editor state object\n */\nexport function createChainableState(config: { transaction: Transaction; state: EditorState }): EditorState {\n const { state, transaction } = config\n let { selection } = transaction\n let { doc } = transaction\n let { storedMarks } = transaction\n\n return {\n ...state,\n apply: state.apply.bind(state),\n applyTransaction: state.applyTransaction.bind(state),\n plugins: state.plugins,\n schema: state.schema,\n reconfigure: state.reconfigure.bind(state),\n toJSON: state.toJSON.bind(state),\n get storedMarks() {\n return storedMarks\n },\n get selection() {\n return selection\n },\n get doc() {\n return doc\n },\n get tr() {\n selection = transaction.selection\n doc = transaction.doc\n storedMarks = transaction.storedMarks\n\n return transaction\n },\n }\n}\n","import type { EditorState, Transaction } from '@tiptap/pm/state'\n\nimport type { Editor } from './Editor.js'\nimport { createChainableState } from './helpers/createChainableState.js'\nimport type { AnyCommands, CanCommands, ChainedCommands, CommandProps, SingleCommands } from './types.js'\n\nexport class CommandManager {\n editor: Editor\n\n rawCommands: AnyCommands\n\n customState?: EditorState\n\n constructor(props: { editor: Editor; state?: EditorState }) {\n this.editor = props.editor\n this.rawCommands = this.editor.extensionManager.commands\n this.customState = props.state\n }\n\n get hasCustomState(): boolean {\n return !!this.customState\n }\n\n get state(): EditorState {\n return this.customState || this.editor.state\n }\n\n get commands(): SingleCommands {\n const { rawCommands, editor, state } = this\n const { view } = editor\n const { tr } = state\n const props = this.buildProps(tr)\n\n return Object.fromEntries(\n Object.entries(rawCommands).map(([name, command]) => {\n const method = (...args: any[]) => {\n const callback = command(...args)(props)\n\n if (!tr.getMeta('preventDispatch') && !this.hasCustomState) {\n view.dispatch(tr)\n }\n\n return callback\n }\n\n return [name, method]\n }),\n ) as unknown as SingleCommands\n }\n\n get chain(): () => ChainedCommands {\n return () => this.createChain()\n }\n\n get can(): () => CanCommands {\n return () => this.createCan()\n }\n\n public createChain(startTr?: Transaction, shouldDispatch = true): ChainedCommands {\n const { rawCommands, editor, state } = this\n const { view } = editor\n const callbacks: boolean[] = []\n const hasStartTransaction = !!startTr\n const tr = startTr || state.tr\n\n const run = () => {\n if (!hasStartTransaction && shouldDispatch && !tr.getMeta('preventDispatch') && !this.hasCustomState) {\n view.dispatch(tr)\n }\n\n return callbacks.every(callback => callback === true)\n }\n\n const chain = {\n ...Object.fromEntries(\n Object.entries(rawCommands).map(([name, command]) => {\n const chainedCommand = (...args: never[]) => {\n const props = this.buildProps(tr, shouldDispatch)\n const callback = command(...args)(props)\n\n callbacks.push(callback)\n\n return chain\n }\n\n return [name, chainedCommand]\n }),\n ),\n run,\n } as unknown as ChainedCommands\n\n return chain\n }\n\n public createCan(startTr?: Transaction): CanCommands {\n const { rawCommands, state } = this\n const dispatch = false\n const tr = startTr || state.tr\n const props = this.buildProps(tr, dispatch)\n const formattedCommands = Object.fromEntries(\n Object.entries(rawCommands).map(([name, command]) => {\n return [name, (...args: never[]) => command(...args)({ ...props, dispatch: undefined })]\n }),\n ) as unknown as SingleCommands\n\n return {\n ...formattedCommands,\n chain: () => this.createChain(tr, dispatch),\n } as CanCommands\n }\n\n public buildProps(tr: Transaction, shouldDispatch = true): CommandProps {\n const { rawCommands, editor, state } = this\n const { view } = editor\n\n const props: CommandProps = {\n tr,\n editor,\n view,\n state: createChainableState({\n state,\n transaction: tr,\n }),\n dispatch: shouldDispatch ? () => undefined : undefined,\n chain: () => this.createChain(tr, shouldDispatch),\n can: () => this.createCan(tr),\n get commands() {\n return Object.fromEntries(\n Object.entries(rawCommands).map(([name, command]) => {\n return [name, (...args: never[]) => command(...args)(props)]\n }),\n ) as unknown as SingleCommands\n },\n }\n\n return props\n }\n}\n","export * from './blur.js'\nexport * from './clearContent.js'\nexport * from './clearNodes.js'\nexport * from './command.js'\nexport * from './createParagraphNear.js'\nexport * from './cut.js'\nexport * from './deleteCurrentNode.js'\nexport * from './deleteNode.js'\nexport * from './deleteRange.js'\nexport * from './deleteSelection.js'\nexport * from './enter.js'\nexport * from './exitCode.js'\nexport * from './extendMarkRange.js'\nexport * from './first.js'\nexport * from './focus.js'\nexport * from './forEach.js'\nexport * from './insertContent.js'\nexport * from './insertContentAt.js'\nexport * from './join.js'\nexport * from './joinItemBackward.js'\nexport * from './joinItemForward.js'\nexport * from './joinTextblockBackward.js'\nexport * from './joinTextblockForward.js'\nexport * from './keyboardShortcut.js'\nexport * from './lift.js'\nexport * from './liftEmptyBlock.js'\nexport * from './liftListItem.js'\nexport * from './newlineInCode.js'\nexport * from './resetAttributes.js'\nexport * from './scrollIntoView.js'\nexport * from './selectAll.js'\nexport * from './selectNodeBackward.js'\nexport * from './selectNodeForward.js'\nexport * from './selectParentNode.js'\nexport * from './selectTextblockEnd.js'\nexport * from './selectTextblockStart.js'\nexport * from './setContent.js'\nexport * from './setMark.js'\nexport * from './setMeta.js'\nexport * from './setNode.js'\nexport * from './setNodeSelection.js'\nexport * from './setTextDirection.js'\nexport * from './setTextSelection.js'\nexport * from './sinkListItem.js'\nexport * from './splitBlock.js'\nexport * from './splitListItem.js'\nexport * from './toggleList.js'\nexport * from './toggleMark.js'\nexport * from './toggleNode.js'\nexport * from './toggleWrap.js'\nexport * from './undoInputRule.js'\nexport * from './unsetAllMarks.js'\nexport * from './unsetMark.js'\nexport * from './unsetTextDirection.js'\nexport * from './updateAttributes.js'\nexport * from './wrapIn.js'\nexport * from './wrapInList.js'\n","import type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n blur: {\n /**\n * Removes focus from the editor.\n * @example editor.commands.blur()\n */\n blur: () => ReturnType\n }\n }\n}\n\nexport const blur: RawCommands['blur'] =\n () =>\n ({ editor, view }) => {\n requestAnimationFrame(() => {\n if (!editor.isDestroyed) {\n ;(view.dom as HTMLElement).blur()\n\n // Browsers should remove the caret on blur but safari does not.\n // See: https://github.com/ueberdosis/tiptap/issues/2405\n window?.getSelection()?.removeAllRanges()\n }\n })\n\n return true\n }\n","import type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n clearContent: {\n /**\n * Clear the whole document.\n * @example editor.commands.clearContent()\n */\n clearContent: (\n /**\n * Whether to emit an update event.\n * @default true\n */\n emitUpdate?: boolean,\n ) => ReturnType\n }\n }\n}\n\nexport const clearContent: RawCommands['clearContent'] =\n (emitUpdate = true) =>\n ({ commands }) => {\n return commands.setContent('', { emitUpdate })\n }\n","import { liftTarget } from '@tiptap/pm/transform'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n clearNodes: {\n /**\n * Normalize nodes to a simple paragraph.\n * @example editor.commands.clearNodes()\n */\n clearNodes: () => ReturnType\n }\n }\n}\n\nexport const clearNodes: RawCommands['clearNodes'] =\n () =>\n ({ state, tr, dispatch }) => {\n const { selection } = tr\n const { ranges } = selection\n\n if (!dispatch) {\n return true\n }\n\n ranges.forEach(({ $from, $to }) => {\n state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.type.isText) {\n return\n }\n\n const { doc, mapping } = tr\n const $mappedFrom = doc.resolve(mapping.map(pos))\n const $mappedTo = doc.resolve(mapping.map(pos + node.nodeSize))\n const nodeRange = $mappedFrom.blockRange($mappedTo)\n\n if (!nodeRange) {\n return\n }\n\n const targetLiftDepth = liftTarget(nodeRange)\n\n if (node.type.isTextblock) {\n const { defaultType } = $mappedFrom.parent.contentMatchAt($mappedFrom.index())\n\n tr.setNodeMarkup(nodeRange.start, defaultType)\n }\n\n if (targetLiftDepth || targetLiftDepth === 0) {\n tr.lift(nodeRange, targetLiftDepth)\n }\n })\n })\n\n return true\n }\n","import type { Command, RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n command: {\n /**\n * Define a command inline.\n * @param fn The command function.\n * @example\n * editor.commands.command(({ tr, state }) => {\n * ...\n * return true\n * })\n */\n command: (fn: (props: Parameters<Command>[0]) => boolean) => ReturnType\n }\n }\n}\n\nexport const command: RawCommands['command'] = fn => props => {\n return fn(props)\n}\n","import { createParagraphNear as originalCreateParagraphNear } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n createParagraphNear: {\n /**\n * Create a paragraph nearby.\n * @example editor.commands.createParagraphNear()\n */\n createParagraphNear: () => ReturnType\n }\n }\n}\n\nexport const createParagraphNear: RawCommands['createParagraphNear'] =\n () =>\n ({ state, dispatch }) => {\n return originalCreateParagraphNear(state, dispatch)\n }\n","import { TextSelection } from '@tiptap/pm/state'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n cut: {\n /**\n * Cuts content from a range and inserts it at a given position.\n * @param range The range to cut.\n * @param range.from The start position of the range.\n * @param range.to The end position of the range.\n * @param targetPos The position to insert the content at.\n * @example editor.commands.cut({ from: 1, to: 3 }, 5)\n */\n cut: ({ from, to }: { from: number; to: number }, targetPos: number) => ReturnType\n }\n }\n}\n\nexport const cut: RawCommands['cut'] =\n (originRange, targetPos) =>\n ({ editor, tr }) => {\n const { state } = editor\n\n const contentSlice = state.doc.slice(originRange.from, originRange.to)\n\n tr.deleteRange(originRange.from, originRange.to)\n const newPos = tr.mapping.map(targetPos)\n\n tr.insert(newPos, contentSlice.content)\n\n tr.setSelection(new TextSelection(tr.doc.resolve(Math.max(newPos - 1, 0))))\n\n return true\n }\n","import type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n deleteCurrentNode: {\n /**\n * Delete the node that currently has the selection anchor.\n * @example editor.commands.deleteCurrentNode()\n */\n deleteCurrentNode: () => ReturnType\n }\n }\n}\n\nexport const deleteCurrentNode: RawCommands['deleteCurrentNode'] =\n () =>\n ({ tr, dispatch }) => {\n const { selection } = tr\n const currentNode = selection.$anchor.node()\n\n // if there is content inside the current node, break out of this command\n if (currentNode.content.size > 0) {\n return false\n }\n\n const $pos = tr.selection.$anchor\n\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth)\n\n if (node.type === currentNode.type) {\n if (dispatch) {\n const from = $pos.before(depth)\n const to = $pos.after(depth)\n\n tr.delete(from, to).scrollIntoView()\n }\n\n return true\n }\n }\n\n return false\n }\n","import type { NodeType, Schema } from '@tiptap/pm/model'\n\nexport function getNodeType(nameOrType: string | NodeType, schema: Schema): NodeType {\n if (typeof nameOrType === 'string') {\n if (!schema.nodes[nameOrType]) {\n throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`)\n }\n\n return schema.nodes[nameOrType]\n }\n\n return nameOrType\n}\n","import type { NodeType } from '@tiptap/pm/model'\n\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n deleteNode: {\n /**\n * Delete a node with a given type or name.\n * @param typeOrName The type or name of the node.\n * @example editor.commands.deleteNode('paragraph')\n */\n deleteNode: (typeOrName: string | NodeType) => ReturnType\n }\n }\n}\n\nexport const deleteNode: RawCommands['deleteNode'] =\n typeOrName =>\n ({ tr, state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema)\n const $pos = tr.selection.$anchor\n\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth)\n\n if (node.type === type) {\n if (dispatch) {\n const from = $pos.before(depth)\n const to = $pos.after(depth)\n\n tr.delete(from, to).scrollIntoView()\n }\n\n return true\n }\n }\n\n return false\n }\n","import type { Range, RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n deleteRange: {\n /**\n * Delete a given range.\n * @param range The range to delete.\n * @example editor.commands.deleteRange({ from: 1, to: 3 })\n */\n deleteRange: (range: Range) => ReturnType\n }\n }\n}\n\nexport const deleteRange: RawCommands['deleteRange'] =\n range =>\n ({ tr, dispatch }) => {\n const { from, to } = range\n\n if (dispatch) {\n tr.delete(from, to)\n }\n\n return true\n }\n","import { deleteSelection as originalDeleteSelection } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n deleteSelection: {\n /**\n * Delete the selection, if there is one.\n * @example editor.commands.deleteSelection()\n */\n deleteSelection: () => ReturnType\n }\n }\n}\n\nexport const deleteSelection: RawCommands['deleteSelection'] =\n () =>\n ({ state, dispatch }) => {\n return originalDeleteSelection(state, dispatch)\n }\n","import type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n enter: {\n /**\n * Trigger enter.\n * @example editor.commands.enter()\n */\n enter: () => ReturnType\n }\n }\n}\n\nexport const enter: RawCommands['enter'] =\n () =>\n ({ commands }) => {\n return commands.keyboardShortcut('Enter')\n }\n","import { exitCode as originalExitCode } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n exitCode: {\n /**\n * Exit from a code block.\n * @example editor.commands.exitCode()\n */\n exitCode: () => ReturnType\n }\n }\n}\n\nexport const exitCode: RawCommands['exitCode'] =\n () =>\n ({ state, dispatch }) => {\n return originalExitCode(state, dispatch)\n }\n","export function isRegExp(value: any): value is RegExp {\n return Object.prototype.toString.call(value) === '[object RegExp]'\n}\n","import { isRegExp } from './isRegExp.js'\n\n/**\n * Check if object1 includes object2\n * @param object1 Object\n * @param object2 Object\n */\nexport function objectIncludes(\n object1: Record<string, any>,\n object2: Record<string, any>,\n options: { strict: boolean } = { strict: true },\n): boolean {\n const keys = Object.keys(object2)\n\n if (!keys.length) {\n return true\n }\n\n return keys.every(key => {\n if (options.strict) {\n return object2[key] === object1[key]\n }\n\n if (isRegExp(object2[key])) {\n return object2[key].test(object1[key])\n }\n\n return object2[key] === object1[key]\n })\n}\n","import type { Mark as ProseMirrorMark, MarkType, ResolvedPos } from '@tiptap/pm/model'\n\nimport type { Range } from '../types.js'\nimport { objectIncludes } from '../utilities/objectIncludes.js'\n\nfunction findMarkInSet(\n marks: ProseMirrorMark[],\n type: MarkType,\n attributes: Record<string, any> = {},\n): ProseMirrorMark | undefined {\n return marks.find(item => {\n return (\n item.type === type &&\n objectIncludes(\n // Only check equality for the attributes that are provided\n Object.fromEntries(Object.keys(attributes).map(k => [k, item.attrs[k]])),\n attributes,\n )\n )\n })\n}\n\nfunction isMarkInSet(marks: ProseMirrorMark[], type: MarkType, attributes: Record<string, any> = {}): boolean {\n return !!findMarkInSet(marks, type, attributes)\n}\n\n/**\n * Get the range of a mark at a resolved position.\n */\nexport function getMarkRange(\n /**\n * The position to get the mark range for.\n */\n $pos: ResolvedPos,\n /**\n * The mark type to get the range for.\n */\n type: MarkType,\n /**\n * The attributes to match against.\n * If not provided, only the first mark at the position will be matched.\n */\n attributes?: Record<string, any>,\n): Range | void {\n if (!$pos || !type) {\n return\n }\n let start = $pos.parent.childAfter($pos.parentOffset)\n\n // If the cursor is at the start of a text node that does not have the mark, look backward\n if (!start.node || !start.node.marks.some(mark => mark.type === type)) {\n start = $pos.parent.childBefore($pos.parentOffset)\n }\n\n // If there is no text node with the mark even backward, return undefined\n if (!start.node || !start.node.marks.some(mark => mark.type === type)) {\n return\n }\n\n // Default to only matching against the first mark's attributes\n attributes = attributes || start.node.marks[0]?.attrs\n\n // We now know that the cursor is either at the start, middle or end of a text node with the specified mark\n // so we can look it up on the targeted mark\n const mark = findMarkInSet([...start.node.marks], type, attributes)\n\n if (!mark) {\n return\n }\n\n let startIndex = start.index\n let startPos = $pos.start() + start.offset\n let endIndex = startIndex + 1\n let endPos = startPos + start.node.nodeSize\n\n while (startIndex > 0 && isMarkInSet([...$pos.parent.child(startIndex - 1).marks], type, attributes)) {\n startIndex -= 1\n startPos -= $pos.parent.child(startIndex).nodeSize\n }\n\n while (endIndex < $pos.parent.childCount && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)) {\n endPos += $pos.parent.child(endIndex).nodeSize\n endIndex += 1\n }\n\n return {\n from: startPos,\n to: endPos,\n }\n}\n","import type { MarkType, Schema } from '@tiptap/pm/model'\n\nexport function getMarkType(nameOrType: string | MarkType, schema: Schema): MarkType {\n if (typeof nameOrType === 'string') {\n if (!schema.marks[nameOrType]) {\n throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`)\n }\n\n return schema.marks[nameOrType]\n }\n\n return nameOrType\n}\n","import type { MarkType } from '@tiptap/pm/model'\nimport { TextSelection } from '@tiptap/pm/state'\n\nimport { getMarkRange } from '../helpers/getMarkRange.js'\nimport { getMarkType } from '../helpers/getMarkType.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n extendMarkRange: {\n /**\n * Extends the text selection to the current mark by type or name.\n * @param typeOrName The type or name of the mark.\n * @param attributes The attributes of the mark.\n * @example editor.commands.extendMarkRange('bold')\n * @example editor.commands.extendMarkRange('mention', { userId: \"1\" })\n */\n extendMarkRange: (\n /**\n * The type or name of the mark.\n */\n typeOrName: string | MarkType,\n\n /**\n * The attributes of the mark.\n */\n attributes?: Record<string, any>,\n ) => ReturnType\n }\n }\n}\n\nexport const extendMarkRange: RawCommands['extendMarkRange'] =\n (typeOrName, attributes = {}) =>\n ({ tr, state, dispatch }) => {\n const type = getMarkType(typeOrName, state.schema)\n const { doc, selection } = tr\n const { $from, from, to } = selection\n\n if (dispatch) {\n const range = getMarkRange($from, type, attributes)\n\n if (range && range.from <= from && range.to >= to) {\n const newSelection = TextSelection.create(doc, range.from, range.to)\n\n tr.setSelection(newSelection)\n }\n }\n\n return true\n }\n","import type { Command, CommandProps, RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n first: {\n /**\n * Runs one command after the other and stops at the first which returns true.\n * @param commands The commands to run.\n * @example editor.commands.first([command1, command2])\n */\n first: (commands: Command[] | ((props: CommandProps) => Command[])) => ReturnType\n }\n }\n}\n\nexport const first: RawCommands['first'] = commands => props => {\n const items = typeof commands === 'function' ? commands(props) : commands\n\n for (let i = 0; i < items.length; i += 1) {\n if (items[i](props)) {\n return true\n }\n }\n\n return false\n}\n","import { TextSelection } from '@tiptap/pm/state'\n\nexport function isTextSelection(value: unknown): value is TextSelection {\n return value instanceof TextSelection\n}\n","export function minMax(value = 0, min = 0, max = 0): number {\n return Math.min(Math.max(value, min), max)\n}\n","import type { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport { Selection, TextSelection } from '@tiptap/pm/state'\n\nimport type { FocusPosition } from '../types.js'\nimport { minMax } from '../utilities/minMax.js'\n\nexport function resolveFocusPosition(doc: ProseMirrorNode, position: FocusPosition = null): Selection | null {\n if (!position) {\n return null\n }\n\n const selectionAtStart = Selection.atStart(doc)\n const selectionAtEnd = Selection.atEnd(doc)\n\n if (position === 'start' || position === true) {\n return selectionAtStart\n }\n\n if (position === 'end') {\n return selectionAtEnd\n }\n\n const minPos = selectionAtStart.from\n const maxPos = selectionAtEnd.to\n\n if (position === 'all') {\n return TextSelection.create(doc, minMax(0, minPos, maxPos), minMax(doc.content.size, minPos, maxPos))\n }\n\n return TextSelection.create(doc, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos))\n}\n","export function isAndroid(): boolean {\n return navigator.platform === 'Android' || /android/i.test(navigator.userAgent)\n}\n","export function isiOS(): boolean {\n return (\n ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes('Mac') && 'ontouchend' in document)\n )\n}\n","import { isTextSelection } from '../helpers/isTextSelection.js'\nimport { resolveFocusPosition } from '../helpers/resolveFocusPosition.js'\nimport type { FocusPosition, RawCommands } from '../types.js'\nimport { isAndroid } from '../utilities/isAndroid.js'\nimport { isiOS } from '../utilities/isiOS.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n focus: {\n /**\n * Focus the editor at the given position.\n * @param position The position to focus at.\n * @param options.scrollIntoView Scroll the focused position into view after focusing\n * @example editor.commands.focus()\n * @example editor.commands.focus(32, { scrollIntoView: false })\n */\n focus: (\n /**\n * The position to focus at.\n */\n position?: FocusPosition,\n\n /**\n * Optional options\n * @default { scrollIntoView: true }\n */\n options?: {\n scrollIntoView?: boolean\n },\n ) => ReturnType\n }\n }\n}\n\nexport const focus: RawCommands['focus'] =\n (position = null, options = {}) =>\n ({ editor, view, tr, dispatch }) => {\n options = {\n scrollIntoView: true,\n ...options,\n }\n\n const delayedFocus = () => {\n // focus within `requestAnimationFrame` breaks focus on iOS and Android\n // so we have to call this\n if (isiOS() || isAndroid()) {\n ;(view.dom as HTMLElement).focus()\n }\n\n // For React we have to focus asynchronously. Otherwise wild things happen.\n // see: https://github.com/ueberdosis/tiptap/issues/1520\n requestAnimationFrame(() => {\n if (!editor.isDestroyed) {\n view.focus()\n\n if (options?.scrollIntoView) {\n editor.commands.scrollIntoView()\n }\n }\n })\n }\n\n if ((view.hasFocus() && position === null) || position === false) {\n return true\n }\n\n // we don’t try to resolve a NodeSelection or CellSelection\n if (dispatch && position === null && !isTextSelection(editor.state.selection)) {\n delayedFocus()\n return true\n }\n\n // pass through tr.doc instead of editor.state.doc\n // since transactions could change the editors state before this command has been run\n const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection\n const isSameSelection = editor.state.selection.eq(selection)\n\n if (dispatch) {\n if (!isSameSelection) {\n tr.setSelection(selection)\n }\n\n // `tr.setSelection` resets the stored marks\n // so we’ll restore them if the selection is the same as before\n if (isSameSelection && tr.storedMarks) {\n tr.setStoredMarks(tr.storedMarks)\n }\n\n delayedFocus()\n }\n\n return true\n }\n","import type { CommandProps, RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n forEach: {\n /**\n * Loop through an array of items.\n */\n forEach: <T>(\n items: T[],\n fn: (\n item: T,\n props: CommandProps & {\n index: number\n },\n ) => boolean,\n ) => ReturnType\n }\n }\n}\n\nexport const forEach: RawCommands['forEach'] = (items, fn) => props => {\n return items.every((item, index) => fn(item, { ...props, index }))\n}\n","import type { Fragment, Node as ProseMirrorNode, ParseOptions } from '@tiptap/pm/model'\n\nimport type { Content, RawCommands } from '../types.js'\n\nexport interface InsertContentOptions {\n /**\n * Options for parsing the content.\n */\n parseOptions?: ParseOptions\n\n /**\n * Whether to update the selection after inserting the content.\n */\n updateSelection?: boolean\n applyInputRules?: boolean\n applyPasteRules?: boolean\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n insertContent: {\n /**\n * Insert a node or string of HTML at the current position.\n * @example editor.commands.insertContent('<h1>Example</h1>')\n * @example editor.commands.insertContent('<h1>Example</h1>', { updateSelection: false })\n */\n insertContent: (\n /**\n * The ProseMirror content to insert.\n */\n value: Content | ProseMirrorNode | Fragment,\n\n /**\n * Optional options\n */\n options?: InsertContentOptions,\n ) => ReturnType\n }\n }\n}\n\nexport const insertContent: RawCommands['insertContent'] =\n (value, options) =>\n ({ tr, commands }) => {\n return commands.insertContentAt({ from: tr.selection.from, to: tr.selection.to }, value, options)\n }\n","const removeWhitespaces = (node: HTMLElement) => {\n const children = node.childNodes\n\n for (let i = children.length - 1; i >= 0; i -= 1) {\n const child = children[i]\n\n if (child.nodeType === 3 && child.nodeValue && /^(\\n\\s\\s|\\n)$/.test(child.nodeValue)) {\n node.removeChild(child)\n } else if (child.nodeType === 1) {\n removeWhitespaces(child as HTMLElement)\n }\n }\n\n return node\n}\n\nexport function elementFromString(value: string): HTMLElement {\n if (typeof window === 'undefined') {\n throw new Error('[tiptap error]: there is no window object available, so this function cannot be used')\n }\n // add a wrapper to preserve leading and trailing whitespace\n const wrappedValue = `<body>${value}</body>`\n\n const html = new window.DOMParser().parseFromString(wrappedValue, 'text/html').body\n\n return removeWhitespaces(html)\n}\n","import type { ParseOptions } from '@tiptap/pm/model'\nimport { DOMParser, Fragment, Node as ProseMirrorNode, Schema } from '@tiptap/pm/model'\n\nimport type { Content } from '../types.js'\nimport { elementFromString } from '../utilities/elementFromString.js'\n\nexport type CreateNodeFromContentOptions = {\n slice?: boolean\n parseOptions?: ParseOptions\n errorOnInvalidContent?: boolean\n}\n\n/**\n * Takes a JSON or HTML content and creates a Prosemirror node or fragment from it.\n * @param content The JSON or HTML content to create the node from\n * @param schema The Prosemirror schema to use for the node\n * @param options Options for the parser\n * @returns The created Prosemirror node or fragment\n */\nexport function createNodeFromContent(\n content: Content | ProseMirrorNode | Fragment,\n schema: Schema,\n options?: CreateNodeFromContentOptions,\n): ProseMirrorNode | Fragment {\n if (content instanceof ProseMirrorNode || content instanceof Fragment) {\n return content\n }\n options = {\n slice: true,\n parseOptions: {},\n ...options,\n }\n\n const isJSONContent = typeof content === 'object' && content !== null\n const isTextContent = typeof content === 'string'\n\n if (isJSONContent) {\n try {\n const isArrayContent = Array.isArray(content) && content.length > 0\n\n // if the JSON Content is an array of nodes, create a fragment for each node\n if (isArrayContent) {\n return Fragment.fromArray(content.map(item => schema.nodeFromJSON(item)))\n }\n\n const node = schema.nodeFromJSON(content)\n\n if (options.errorOnInvalidContent) {\n node.check()\n }\n\n return node\n } catch (error) {\n if (options.errorOnInvalidContent) {\n throw new Error('[tiptap error]: Invalid JSON content', { cause: error as Error })\n }\n\n console.warn('[tiptap warn]: Invalid content.', 'Passed value:', content, 'Error:', error)\n\n return createNodeFromContent('', schema, options)\n }\n }\n\n if (isTextContent) {\n // Check for invalid content\n if (options.errorOnInvalidContent) {\n let hasInvalidContent = false\n let invalidContent = ''\n\n // A copy of the current schema with a catch-all node at the end\n const contentCheckSchema = new Schema({\n topNode: schema.spec.topNode,\n marks: schema.spec.marks,\n // Prosemirror's schemas are executed such that: the last to execute, matches last\n // This means that we can add a catch-all node at the end of the schema to catch any content that we don't know how to handle\n nodes: schema.spec.nodes.append({\n __tiptap__private__unknown__catch__all__node: {\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: '*',\n getAttrs: e => {\n // If this is ever called, we know that the content has something that we don't know how to handle in the schema\n hasInvalidContent = true\n // Try to stringify the element for a more helpful error message\n invalidContent = typeof e === 'string' ? e : e.outerHTML\n return null\n },\n },\n ],\n },\n }),\n })\n\n if (options.slice) {\n DOMParser.fromSchema(contentCheckSchema).parseSlice(elementFromString(content), options.parseOptions)\n } else {\n DOMParser.fromSchema(contentCheckSchema).parse(elementFromString(content), options.parseOptions)\n }\n\n if (options.errorOnInvalidContent && hasInvalidContent) {\n throw new Error('[tiptap error]: Invalid HTML content', {\n cause: new Error(`Invalid element found: ${invalidContent}`),\n })\n }\n }\n\n const parser = DOMParser.fromSchema(schema)\n\n if (options.slice) {\n return parser.parseSlice(elementFromString(content), options.parseOptions).content\n }\n\n return parser.parse(elementFromString(content), options.parseOptions)\n }\n\n return createNodeFromContent('', schema, options)\n}\n","import type { Transaction } from '@tiptap/pm/state'\nimport { Selection } from '@tiptap/pm/state'\nimport { ReplaceAroundStep, ReplaceStep } from '@tiptap/pm/transform'\n\n// source: https://github.com/ProseMirror/prosemirror-state/blob/master/src/selection.js#L466\nexport function selectionToInsertionEnd(tr: Transaction, startLen: number, bias: number) {\n const last = tr.steps.length - 1\n\n if (last < startLen) {\n return\n }\n\n const step = tr.steps[last]\n\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) {\n return\n }\n\n const map = tr.mapping.maps[last]\n let end = 0\n\n map.forEach((_from, _to, _newFrom, newTo) => {\n if (end === 0) {\n end = newTo\n }\n })\n\n tr.setSelection(Selection.near(tr.doc.resolve(end), bias))\n}\n","import type { Node as ProseMirrorNode, ParseOptions } from '@tiptap/pm/model'\nimport { Fragment } from '@tiptap/pm/model'\n\nimport { createNodeFromContent } from '../helpers/createNodeFromContent.js'\nimport { selectionToInsertionEnd } from '../helpers/selectionToInsertionEnd.js'\nimport type { Content, Range, RawCommands } from '../types.js'\n\nexport interface InsertContentAtOptions {\n /**\n * Options for parsing the content.\n */\n parseOptions?: ParseOptions\n\n /**\n * Whether to update the selection after inserting the content.\n */\n updateSelection?: boolean\n\n /**\n * Whether to apply input rules after inserting the content.\n */\n applyInputRules?: boolean\n\n /**\n * Whether to apply paste rules after inserting the content.\n */\n applyPasteRules?: boolean\n\n /**\n * Whether to throw an error if the content is invalid.\n */\n errorOnInvalidContent?: boolean\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n insertContentAt: {\n /**\n * Insert a node or string of HTML at a specific position.\n * @example editor.commands.insertContentAt(0, '<h1>Example</h1>')\n */\n insertContentAt: (\n /**\n * The position to insert the content at.\n */\n position: number | Range,\n\n /**\n * The ProseMirror content to insert.\n */\n value: Content | ProseMirrorNode | Fragment,\n\n /**\n * Optional options\n */\n options?: InsertContentAtOptions,\n ) => ReturnType\n }\n }\n}\n\nconst isFragment = (nodeOrFragment: ProseMirrorNode | Fragment): nodeOrFragment is Fragment => {\n return !('type' in nodeOrFragment)\n}\n\nexport const insertContentAt: RawCommands['insertContentAt'] =\n (position, value, options) =>\n ({ tr, dispatch, editor }) => {\n if (dispatch) {\n options = {\n parseOptions: editor.options.parseOptions,\n updateSelection: true,\n applyInputRules: false,\n applyPasteRules: false,\n ...options,\n }\n\n let content: Fragment | ProseMirrorNode\n\n const emitContentError = (error: Error) => {\n editor.emit('contentError', {\n editor,\n error,\n disableCollaboration: () => {\n if (\n 'collaboration' in editor.storage &&\n typeof editor.storage.collaboration === 'object' &&\n editor.storage.collaboration\n ) {\n ;(editor.storage.collaboration as any).isDisabled = true\n }\n },\n })\n }\n\n const parseOptions: ParseOptions = {\n preserveWhitespace: 'full',\n ...options.parseOptions,\n }\n\n // If `emitContentError` is enabled, we want to check the content for errors\n // but ignore them (do not remove the invalid content from the document)\n if (!options.errorOnInvalidContent && !editor.options.enableContentCheck && editor.options.emitContentError) {\n try {\n createNodeFromContent(value, editor.schema, {\n parseOptions,\n errorOnInvalidContent: true,\n })\n } catch (e) {\n emitContentError(e as Error)\n }\n }\n\n try {\n content = createNodeFromContent(value, editor.schema, {\n parseOptions,\n errorOnInvalidContent: options.errorOnInvalidContent ?? editor.options.enableContentCheck,\n })\n } catch (e) {\n emitContentError(e as Error)\n return false\n }\n\n let { from, to } =\n typeof position === 'number' ? { from: position, to: position } : { from: position.from, to: position.to }\n\n let isOnlyTextContent = true\n let isOnlyBlockContent = true\n const nodes = isFragment(content) ? content : [content]\n\n nodes.forEach(node => {\n // check if added node is valid\n node.check()\n\n isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false\n\n isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false\n })\n\n // check if we can replace the wrapping node by\n // the newly inserted content\n // example:\n // replace an empty paragraph by an inserted image\n // instead of inserting the image below the paragraph\n if (from === to && isOnlyBlockContent) {\n const { parent } = tr.doc.resolve(from)\n const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount\n\n if (isEmptyTextBlock) {\n from -= 1\n to += 1\n }\n }\n\n let newContent\n\n // if there is only plain text we have to use `insertText`\n // because this will keep the current marks\n if (isOnlyTextContent) {\n // if value is string, we can use it directly\n // otherwise if it is an array, we have to join it\n if (Array.isArray(value)) {\n newContent = value.map(v => v.text || '').join('')\n } else if (value instanceof Fragment) {\n let text = ''\n\n value.forEach(node => {\n if (node.text) {\n text += node.text\n }\n })\n\n newContent = text\n } else if (typeof value === 'object' && !!value && !!value.text) {\n newContent = value.text\n } else {\n newContent = value as string\n }\n\n tr.insertText(newContent, from, to)\n } else {\n newContent = content\n\n const $from = tr.doc.resolve(from)\n const $fromNode = $from.node()\n const fromSelectionAtStart = $from.parentOffset === 0\n const isTextSelection = $fromNode.isText || $fromNode.isTextblock\n const hasContent = $fromNode.content.size > 0\n\n if (fromSelectionAtStart && isTextSelection && hasContent) {\n from = Math.max(0, from - 1)\n }\n\n tr.replaceWith(from, to, newContent)\n }\n\n // set cursor at end of inserted content\n if (options.updateSelection) {\n selectionToInsertionEnd(tr, tr.steps.length - 1, -1)\n }\n\n if (options.applyInputRules) {\n tr.setMeta('applyInputRules', { from, text: newContent })\n }\n\n if (options.applyPasteRules) {\n tr.setMeta('applyPasteRules', { from, text: newContent })\n }\n }\n\n return true\n }\n","import {\n joinBackward as originalJoinBackward,\n joinDown as originalJoinDown,\n joinForward as originalJoinForward,\n joinUp as originalJoinUp,\n} from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n joinUp: {\n /**\n * Join the selected block or, if there is a text selection, the closest ancestor block of the selection that can be joined, with the sibling above it.\n * @example editor.commands.joinUp()\n */\n joinUp: () => ReturnType\n }\n joinDown: {\n /**\n * Join the selected block, or the closest ancestor of the selection that can be joined, with the sibling after it.\n * @example editor.commands.joinDown()\n */\n joinDown: () => ReturnType\n }\n joinBackward: {\n /**\n * If the selection is empty and at the start of a textblock, try to reduce the distance between that block and the one before it—if there's a block directly before it that can be joined, join them.\n * If not, try to move the selected block closer to the next one in the document structure by lifting it out of its\n * parent or moving it into a parent of the previous block. Will use the view for accurate (bidi-aware) start-of-textblock detection if given.\n * @example editor.commands.joinBackward()\n */\n joinBackward: () => ReturnType\n }\n joinForward: {\n /**\n * If the selection is empty and the cursor is at the end of a textblock, try to reduce or remove the boundary between that block and the one after it,\n * either by joining them or by moving the other block closer to this one in the tree structure.\n * Will use the view for accurate start-of-textblock detection if given.\n * @example editor.commands.joinForward()\n */\n joinForward: () => ReturnType\n }\n }\n}\n\nexport const joinUp: RawCommands['joinUp'] =\n () =>\n ({ state, dispatch }) => {\n return originalJoinUp(state, dispatch)\n }\n\nexport const joinDown: RawCommands['joinDown'] =\n () =>\n ({ state, dispatch }) => {\n return originalJoinDown(state, dispatch)\n }\n\nexport const joinBackward: RawCommands['joinBackward'] =\n () =>\n ({ state, dispatch }) => {\n return originalJoinBackward(state, dispatch)\n }\n\nexport const joinForward: RawCommands['joinForward'] =\n () =>\n ({ state, dispatch }) => {\n return originalJoinForward(state, dispatch)\n }\n","import { joinPoint } from '@tiptap/pm/transform'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n joinItemBackward: {\n /**\n * Join two items backward.\n * @example editor.commands.joinItemBackward()\n */\n joinItemBackward: () => ReturnType\n }\n }\n}\n\nexport const joinItemBackward: RawCommands['joinItemBackward'] =\n () =>\n ({ state, dispatch, tr }) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, -1)\n\n if (point === null || point === undefined) {\n return false\n }\n\n tr.join(point, 2)\n\n if (dispatch) {\n dispatch(tr)\n }\n\n return true\n } catch {\n return false\n }\n }\n","import { joinPoint } from '@tiptap/pm/transform'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n joinItemForward: {\n /**\n * Join two items Forwards.\n * @example editor.commands.joinItemForward()\n */\n joinItemForward: () => ReturnType\n }\n }\n}\n\nexport const joinItemForward: RawCommands['joinItemForward'] =\n () =>\n ({ state, dispatch, tr }) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, +1)\n\n if (point === null || point === undefined) {\n return false\n }\n\n tr.join(point, 2)\n\n if (dispatch) {\n dispatch(tr)\n }\n\n return true\n } catch {\n return false\n }\n }\n","import { joinTextblockBackward as originalCommand } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n joinTextblockBackward: {\n /**\n * A more limited form of joinBackward that only tries to join the current textblock to the one before it, if the cursor is at the start of a textblock.\n */\n joinTextblockBackward: () => ReturnType\n }\n }\n}\n\nexport const joinTextblockBackward: RawCommands['joinTextblockBackward'] =\n () =>\n ({ state, dispatch }) => {\n return originalCommand(state, dispatch)\n }\n","import { joinTextblockForward as originalCommand } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n joinTextblockForward: {\n /**\n * A more limited form of joinForward that only tries to join the current textblock to the one after it, if the cursor is at the end of a textblock.\n */\n joinTextblockForward: () => ReturnType\n }\n }\n}\n\nexport const joinTextblockForward: RawCommands['joinTextblockForward'] =\n () =>\n ({ state, dispatch }) => {\n return originalCommand(state, dispatch)\n }\n","export function isMacOS(): boolean {\n return typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false\n}\n","import type { RawCommands } from '../types.js'\nimport { isiOS } from '../utilities/isiOS.js'\nimport { isMacOS } from '../utilities/isMacOS.js'\n\nfunction normalizeKeyName(name: string) {\n const parts = name.split(/-(?!$)/)\n let result = parts[parts.length - 1]\n\n if (result === 'Space') {\n result = ' '\n }\n\n let alt\n let ctrl\n let shift\n let meta\n\n for (let i = 0; i < parts.length - 1; i += 1) {\n const mod = parts[i]\n\n if (/^(cmd|meta|m)$/i.test(mod)) {\n meta = true\n } else if (/^a(lt)?$/i.test(mod)) {\n alt = true\n } else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true\n } else if (/^s(hift)?$/i.test(mod)) {\n shift = true\n } else if (/^mod$/i.test(mod)) {\n if (isiOS() || isMacOS()) {\n meta = true\n } else {\n ctrl = true\n }\n } else {\n throw new Error(`Unrecognized modifier name: ${mod}`)\n }\n }\n\n if (alt) {\n result = `Alt-${result}`\n }\n\n if (ctrl) {\n result = `Ctrl-${result}`\n }\n\n if (meta) {\n result = `Meta-${result}`\n }\n\n if (shift) {\n result = `Shift-${result}`\n }\n\n return result\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n keyboardShortcut: {\n /**\n * Trigger a keyboard shortcut.\n * @param name The name of the keyboard shortcut.\n * @example editor.commands.keyboardShortcut('Mod-b')\n */\n keyboardShortcut: (name: string) => ReturnType\n }\n }\n}\n\nexport const keyboardShortcut: RawCommands['keyboardShortcut'] =\n name =>\n ({ editor, view, tr, dispatch }) => {\n const keys = normalizeKeyName(name).split(/-(?!$)/)\n const key = keys.find(item => !['Alt', 'Ctrl', 'Meta', 'Shift'].includes(item))\n const event = new KeyboardEvent('keydown', {\n key: key === 'Space' ? ' ' : key,\n altKey: keys.includes('Alt'),\n ctrlKey: keys.includes('Ctrl'),\n metaKey: keys.includes('Meta'),\n shiftKey: keys.includes('Shift'),\n bubbles: true,\n cancelable: true,\n })\n\n const capturedTransaction = editor.captureTransaction(() => {\n view.someProp('handleKeyDown', f => f(view, event))\n })\n\n capturedTransaction?.steps.forEach(step => {\n const newStep = step.map(tr.mapping)\n\n if (newStep && dispatch) {\n tr.maybeStep(newStep)\n }\n })\n\n return true\n }\n","import type { NodeType } from '@tiptap/pm/model'\nimport type { EditorState } from '@tiptap/pm/state'\n\nimport type { NodeRange } from '../types.js'\nimport { objectIncludes } from '../utilities/objectIncludes.js'\nimport { getNodeType } from './getNodeType.js'\n\nexport function isNodeActive(\n state: EditorState,\n typeOrName: NodeType | string | null,\n attributes: Record<string, any> = {},\n): boolean {\n const { from, to, empty } = state.selection\n const type = typeOrName ? getNodeType(typeOrName, state.schema) : null\n\n const nodeRanges: NodeRange[] = []\n\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return\n }\n\n const relativeFrom = Math.max(from, pos)\n const relativeTo = Math.min(to, pos + node.nodeSize)\n\n nodeRanges.push({\n node,\n from: relativeFrom,\n to: relativeTo,\n })\n })\n\n const selectionRange = to - from\n const matchedNodeRanges = nodeRanges\n .filter(nodeRange => {\n if (!type) {\n return true\n }\n\n return type.name === nodeRange.node.type.name\n })\n .filter(nodeRange => objectIncludes(nodeRange.node.attrs, attributes, { strict: false }))\n\n if (empty) {\n return !!matchedNodeRanges.length\n }\n\n const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0)\n\n return range >= selectionRange\n}\n","import { lift as originalLift } from '@tiptap/pm/commands'\nimport type { NodeType } from '@tiptap/pm/model'\n\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport { isNodeActive } from '../helpers/isNodeActive.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n lift: {\n /**\n * Removes an existing wrap if possible lifting the node out of it\n * @param typeOrName The type or name of the node.\n * @param attributes The attributes of the node.\n * @example editor.commands.lift('paragraph')\n * @example editor.commands.lift('heading', { level: 1 })\n */\n lift: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType\n }\n }\n}\n\nexport const lift: RawCommands['lift'] =\n (typeOrName, attributes = {}) =>\n ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema)\n const isActive = isNodeActive(state, type, attributes)\n\n if (!isActive) {\n return false\n }\n\n return originalLift(state, dispatch)\n }\n","import { liftEmptyBlock as originalLiftEmptyBlock } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n liftEmptyBlock: {\n /**\n * If the cursor is in an empty textblock that can be lifted, lift the block.\n * @example editor.commands.liftEmptyBlock()\n */\n liftEmptyBlock: () => ReturnType\n }\n }\n}\n\nexport const liftEmptyBlock: RawCommands['liftEmptyBlock'] =\n () =>\n ({ state, dispatch }) => {\n return originalLiftEmptyBlock(state, dispatch)\n }\n","import type { NodeType } from '@tiptap/pm/model'\nimport { liftListItem as originalLiftListItem } from '@tiptap/pm/schema-list'\n\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n liftListItem: {\n /**\n * Create a command to lift the list item around the selection up into a wrapping list.\n * @param typeOrName The type or name of the node.\n * @example editor.commands.liftListItem('listItem')\n */\n liftListItem: (typeOrName: string | NodeType) => ReturnType\n }\n }\n}\n\nexport const liftListItem: RawCommands['liftListItem'] =\n typeOrName =>\n ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema)\n\n return originalLiftListItem(type)(state, dispatch)\n }\n","import { newlineInCode as originalNewlineInCode } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n newlineInCode: {\n /**\n * Add a newline character in code.\n * @example editor.commands.newlineInCode()\n */\n newlineInCode: () => ReturnType\n }\n }\n}\n\nexport const newlineInCode: RawCommands['newlineInCode'] =\n () =>\n ({ state, dispatch }) => {\n return originalNewlineInCode(state, dispatch)\n }\n","import type { Schema } from '@tiptap/pm/model'\n\n/**\n * Get the type of a schema item by its name.\n * @param name The name of the schema item\n * @param schema The Prosemiror schema to search in\n * @returns The type of the schema item (`node` or `mark`), or null if it doesn't exist\n */\nexport function getSchemaTypeNameByName(name: string, schema: Schema): 'node' | 'mark' | null {\n if (schema.nodes[name]) {\n return 'node'\n }\n\n if (schema.marks[name]) {\n return 'mark'\n }\n\n return null\n}\n","/**\n * Remove a property or an array of properties from an object\n * @param obj Object\n * @param key Key to remove\n */\nexport function deleteProps(obj: Record<string, any>, propOrProps: string | string[]): Record<string, any> {\n const props = typeof propOrProps === 'string' ? [propOrProps] : propOrProps\n\n return Object.keys(obj).reduce((newObj: Record<string, any>, prop) => {\n if (!props.includes(prop)) {\n newObj[prop] = obj[prop]\n }\n\n return newObj\n }, {})\n}\n","import type { MarkType, NodeType } from '@tiptap/pm/model'\n\nimport { getMarkType } from '../helpers/getMarkType.js'\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport { getSchemaTypeNameByName } from '../helpers/getSchemaTypeNameByName.js'\nimport type { RawCommands } from '../types.js'\nimport { deleteProps } from '../utilities/deleteProps.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n resetAttributes: {\n /**\n * Resets some node attributes to the default value.\n * @param typeOrName The type or name of the node.\n * @param attributes The attributes of the node to reset.\n * @example editor.commands.resetAttributes('heading', 'level')\n */\n resetAttributes: (typeOrName: string | NodeType | MarkType, attributes: string | string[]) => ReturnType\n }\n }\n}\n\nexport const resetAttributes: RawCommands['resetAttributes'] =\n (typeOrName, attributes) =>\n ({ tr, state, dispatch }) => {\n let nodeType: NodeType | null = null\n let markType: MarkType | null = null\n\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === 'string' ? typeOrName : typeOrName.name,\n state.schema,\n )\n\n if (!schemaType) {\n return false\n }\n\n if (schemaType === 'node') {\n nodeType = getNodeType(typeOrName as NodeType, state.schema)\n }\n\n if (schemaType === 'mark') {\n markType = getMarkType(typeOrName as MarkType, state.schema)\n }\n\n let canReset = false\n\n tr.selection.ranges.forEach(range => {\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n canReset = true\n\n if (dispatch) {\n tr.setNodeMarkup(pos, undefined, deleteProps(node.attrs, attributes))\n }\n }\n\n if (markType && node.marks.length) {\n node.marks.forEach(mark => {\n if (markType === mark.type) {\n canReset = true\n\n if (dispatch) {\n tr.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes)))\n }\n }\n })\n }\n })\n })\n\n return canReset\n }\n","import type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n scrollIntoView: {\n /**\n * Scroll the selection into view.\n * @example editor.commands.scrollIntoView()\n */\n scrollIntoView: () => ReturnType\n }\n }\n}\n\nexport const scrollIntoView: RawCommands['scrollIntoView'] =\n () =>\n ({ tr, dispatch }) => {\n if (dispatch) {\n tr.scrollIntoView()\n }\n\n return true\n }\n","import { AllSelection } from '@tiptap/pm/state'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n selectAll: {\n /**\n * Select the whole document.\n * @example editor.commands.selectAll()\n */\n selectAll: () => ReturnType\n }\n }\n}\n\nexport const selectAll: RawCommands['selectAll'] =\n () =>\n ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = new AllSelection(tr.doc)\n\n tr.setSelection(selection)\n }\n\n return true\n }\n","import { selectNodeBackward as originalSelectNodeBackward } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n selectNodeBackward: {\n /**\n * Select a node backward.\n * @example editor.commands.selectNodeBackward()\n */\n selectNodeBackward: () => ReturnType\n }\n }\n}\n\nexport const selectNodeBackward: RawCommands['selectNodeBackward'] =\n () =>\n ({ state, dispatch }) => {\n return originalSelectNodeBackward(state, dispatch)\n }\n","import { selectNodeForward as originalSelectNodeForward } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n selectNodeForward: {\n /**\n * Select a node forward.\n * @example editor.commands.selectNodeForward()\n */\n selectNodeForward: () => ReturnType\n }\n }\n}\n\nexport const selectNodeForward: RawCommands['selectNodeForward'] =\n () =>\n ({ state, dispatch }) => {\n return originalSelectNodeForward(state, dispatch)\n }\n","import { selectParentNode as originalSelectParentNode } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n selectParentNode: {\n /**\n * Select the parent node.\n * @example editor.commands.selectParentNode()\n */\n selectParentNode: () => ReturnType\n }\n }\n}\n\nexport const selectParentNode: RawCommands['selectParentNode'] =\n () =>\n ({ state, dispatch }) => {\n return originalSelectParentNode(state, dispatch)\n }\n","// @ts-ignore\n// TODO: add types to @types/prosemirror-commands\nimport { selectTextblockEnd as originalSelectTextblockEnd } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n selectTextblockEnd: {\n /**\n * Moves the cursor to the end of current text block.\n * @example editor.commands.selectTextblockEnd()\n */\n selectTextblockEnd: () => ReturnType\n }\n }\n}\n\nexport const selectTextblockEnd: RawCommands['selectTextblockEnd'] =\n () =>\n ({ state, dispatch }) => {\n return originalSelectTextblockEnd(state, dispatch)\n }\n","// @ts-ignore\n// TODO: add types to @types/prosemirror-commands\nimport { selectTextblockStart as originalSelectTextblockStart } from '@tiptap/pm/commands'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n selectTextblockStart: {\n /**\n * Moves the cursor to the start of current text block.\n * @example editor.commands.selectTextblockStart()\n */\n selectTextblockStart: () => ReturnType\n }\n }\n}\n\nexport const selectTextblockStart: RawCommands['selectTextblockStart'] =\n () =>\n ({ state, dispatch }) => {\n return originalSelectTextblockStart(state, dispatch)\n }\n","import type { Fragment, Node as ProseMirrorNode, ParseOptions, Schema } from '@tiptap/pm/model'\n\nimport type { Content } from '../types.js'\nimport { createNodeFromContent } from './createNodeFromContent.js'\n\n/**\n * Create a new Prosemirror document node from content.\n * @param content The JSON or HTML content to create the document from\n * @param schema The Prosemirror schema to use for the document\n * @param parseOptions Options for the parser\n * @returns The created Prosemirror document node\n */\nexport function createDocument(\n content: Content | ProseMirrorNode | Fragment,\n schema: Schema,\n parseOptions: ParseOptions = {},\n options: { errorOnInvalidContent?: boolean } = {},\n): ProseMirrorNode {\n return createNodeFromContent(content, schema, {\n slice: false,\n parseOptions,\n errorOnInvalidContent: options.errorOnInvalidContent,\n }) as ProseMirrorNode\n}\n","import type { Fragment, Node as ProseMirrorNode, ParseOptions } from '@tiptap/pm/model'\n\nimport { createDocument } from '../helpers/createDocument.js'\nimport type { Content, RawCommands } from '../types.js'\n\nexport interface SetContentOptions {\n /**\n * Options for parsing the content.\n * @default {}\n */\n parseOptions?: ParseOptions\n\n /**\n * Whether to throw an error if the content is invalid.\n */\n errorOnInvalidContent?: boolean\n\n /**\n * Whether to emit an update event.\n * @default true\n */\n emitUpdate?: boolean\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n setContent: {\n /**\n * Replace the whole document with new content.\n * @param content The new content.\n * @param emitUpdate Whether to emit an update event.\n * @param parseOptions Options for parsing the content.\n * @example editor.commands.setContent('<p>Example text</p>')\n */\n setContent: (\n /**\n * The new content.\n */\n content: Content | Fragment | ProseMirrorNode,\n\n /**\n * Options for `setContent`.\n */\n options?: SetContentOptions,\n ) => ReturnType\n }\n }\n}\n\nexport const setContent: RawCommands['setContent'] =\n (content, { errorOnInvalidContent, emitUpdate = true, parseOptions = {} } = {}) =>\n ({ editor, tr, dispatch, commands }) => {\n const { doc } = tr\n\n // This is to keep backward compatibility with the previous behavior\n // TODO remove this in the next major version\n if (parseOptions.preserveWhitespace !== 'full') {\n const document = createDocument(content, editor.schema, parseOptions, {\n errorOnInvalidContent: errorOnInvalidContent ?? editor.options.enableContentCheck,\n })\n\n if (dispatch) {\n tr.replaceWith(0, doc.content.size, document).setMeta('preventUpdate', !emitUpdate)\n }\n return true\n }\n\n if (dispatch) {\n tr.setMeta('preventUpdate', !emitUpdate)\n }\n\n return commands.insertContentAt({ from: 0, to: doc.content.size }, content, {\n parseOptions,\n errorOnInvalidContent: errorOnInvalidContent ?? editor.options.enableContentCheck,\n })\n }\n","import type { Mark, MarkType } from '@tiptap/pm/model'\nimport type { EditorState } from '@tiptap/pm/state'\n\nimport { getMarkType } from './getMarkType.js'\n\nexport function getMarkAttributes(state: EditorState, typeOrName: string | MarkType): Record<string, any> {\n const type = getMarkType(typeOrName, state.schema)\n const { from, to, empty } = state.selection\n const marks: Mark[] = []\n\n if (empty) {\n if (state.storedMarks) {\n marks.push(...state.storedMarks)\n }\n\n marks.push(...state.selection.$head.marks())\n } else {\n state.doc.nodesBetween(from, to, node => {\n marks.push(...node.marks)\n })\n }\n\n const mark = marks.find(markItem => markItem.type.name === type.name)\n\n if (!mark) {\n return {}\n }\n\n return { ...mark.attrs }\n}\n","import type { Node as ProseMirrorNode } from '@tiptap/pm/model'\nimport type { Transaction } from '@tiptap/pm/state'\nimport { Transform } from '@tiptap/pm/transform'\n\n/**\n * Returns a new `Transform` based on all steps of the passed transactions.\n * @param oldDoc The Prosemirror node to start from\n * @param transactions The transactions to combine\n * @returns A new `Transform` with all steps of the passed transactions\n */\nexport function combineTransactionSteps(oldDoc: ProseMirrorNode, transactions: Transaction[]): Transform {\n const transform = new Transform(oldDoc)\n\n transactions.forEach(transaction => {\n transaction.steps.forEach(step => {\n transform.step(step)\n })\n })\n\n return transform\n}\n","import type { ContentMatch, NodeType } from '@tiptap/pm/model'\n\n/**\n * Gets the default block type at a given match\n * @param match The content match to get the default block type from\n * @returns The default block type or null\n */\nexport function defaultBlockAt(match: ContentMatch): NodeType | null {\n for (let i = 0; i < match.edgeCount; i += 1) {\n const { type } = match.edge(i)\n\n if (type.isTextblock && !type.hasRequiredAttrs()) {\n return type\n }\n }\n\n return null\n}\n","import type { Node as ProseMirrorNode, ResolvedPos } from '@tiptap/pm/model'\n\nimport type { Predicate } from '../types.js'\n\n/**\n * Finds the closest parent node to a resolved position that matches a predicate.\n * @param $pos The resolved position to search from\n * @param predicate The predicate to match\n * @returns The closest parent node to the resolved position that matches the predicate\n * @example ```js\n * findParentNodeClosestToPos($from, node => node.type.name === 'paragraph')\n * ```\n */\nexport function findParentNodeClosestToPos(\n $pos: ResolvedPos,\n predicate: Predicate,\n):\n | {\n pos: number\n start: number\n depth: number\n node: ProseMirrorNode\n }\n | undefined {\n for (let i = $pos.depth; i > 0; i -= 1) {\n const node = $pos.node(i)\n\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node,\n }\n }\n }\n}\n","import type { Selection } from '@tiptap/pm/state'\n\nimport type { Predicate } from '../types.js'\nimport { findParentNodeClosestToPos } from './findParentNodeClosestToPos.js'\n\n/**\n * Finds the closest parent node to the current selection that matches a predicate.\n * @param predicate The predicate to match\n * @returns A command that finds the closest parent node to the current selection that matches the predicate\n * @example ```js\n * findParentNode(node => node.type.name === 'paragraph')\n * ```\n */\nexport function findParentNode(\n predicate: Predicate,\n): (selection: Selection) => ReturnType<typeof findParentNodeClosestToPos> {\n return (selection: Selection) => findParentNodeClosestToPos(selection.$from, predicate)\n}\n","import type { ExtensionConfig } from '../Extension.js'\nimport type { MarkConfig } from '../Mark.js'\nimport type { NodeConfig } from '../Node.js'\nimport type { AnyExtension, MaybeThisParameterType, RemoveThis } from '../types.js'\n\n/**\n * Returns a field from an extension\n * @param extension The Tiptap extension\n * @param field The field, for example `renderHTML` or `priority`\n * @param context The context object that should be passed as `this` into the function\n * @returns The field value\n */\nexport function getExtensionField<T = any, E extends AnyExtension = any>(\n extension: E,\n field: keyof ExtensionConfig | keyof MarkConfig | keyof NodeConfig,\n context?: Omit<MaybeThisParameterType<T>, 'parent'>,\n): RemoveThis<T> {\n if (extension.config[field as keyof typeof extension.config] === undefined && extension.parent) {\n return getExtensionField(extension.parent, field, context)\n }\n\n if (typeof extension.config[field as keyof typeof extension.config] === 'function') {\n const value = (extension.config[field as keyof typeof extension.config] as any).bind({\n ...context,\n parent: extension.parent ? getExtensionField(extension.parent, field, context) : null,\n })\n\n return value\n }\n\n return extension.config[field as keyof typeof extension.config] as RemoveThis<T>\n}\n","// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport function isFunction(value: any): value is Function {\n return typeof value === 'function'\n}\n","import type { MaybeReturnType } from '../types.js'\nimport { isFunction } from './isFunction.js'\n\n/**\n * Optionally calls `value` as a function.\n * Otherwise it is returned directly.\n * @param value Function or any value.\n * @param context Optional context to bind to function.\n * @param props Optional props to pass to function.\n */\nexport function callOrReturn<T>(value: T, context: any = undefined, ...props: any[]): MaybeReturnType<T> {\n if (isFunction(value)) {\n if (context) {\n return value.bind(context)(...props)\n }\n\n return value(...props)\n }\n\n return value as MaybeReturnType<T>\n}\n","import type { Extension } from '../Extension.js'\nimport type { Mark } from '../Mark.js'\nimport type { Node } from '../Node.js'\nimport type { Extensions } from '../types.js'\n\nexport function splitExtensions(extensions: Extensions) {\n const baseExtensions = extensions.filter(extension => extension.type === 'extension') as Extension[]\n const nodeExtensions = extensions.filter(extension => extension.type === 'node') as Node[]\n const markExtensions = extensions.filter(extension => extension.type === 'mark') as Mark[]\n\n return {\n baseExtensions,\n nodeExtensions,\n markExtensions,\n }\n}\n","export function mergeAttributes(...objects: Record<string, any>[]): Record<string, any> {\n return objects\n .filter(item => !!item)\n .reduce((items, item) => {\n const mergedAttributes = { ...items }\n\n Object.entries(item).forEach(([key, value]) => {\n const exists = mergedAttributes[key]\n\n if (!exists) {\n mergedAttributes[key] = value\n\n return\n }\n\n if (key === 'class') {\n const valueClasses: string[] = value ? String(value).split(' ') : []\n const existingClasses: string[] = mergedAttributes[key] ? mergedAttributes[key].split(' ') : []\n\n const insertClasses = valueClasses.filter(valueClass => !existingClasses.includes(valueClass))\n\n mergedAttributes[key] = [...existingClasses, ...insertClasses].join(' ')\n } else if (key === 'style') {\n const newStyles: string[] = value\n ? value\n .split(';')\n .map((style: string) => style.trim())\n .filter(Boolean)\n : []\n const existingStyles: string[] = mergedAttributes[key]\n ? mergedAttributes[key]\n .split(';')\n .map((style: string) => style.trim())\n .filter(Boolean)\n : []\n\n const styleMap = new Map<string, string>()\n\n existingStyles.forEach(style => {\n const [property, val] = style.split(':').map(part => part.trim())\n\n styleMap.set(property, val)\n })\n\n newStyles.forEach(style => {\n const [property, val] = style.split(':').map(part => part.trim())\n\n styleMap.set(property, val)\n })\n\n mergedAttributes[key] = Array.from(styleMap.entries())\n .map(([property, val]) => `${property}: ${val}`)\n .join('; ')\n } else {\n mergedAttributes[key] = value\n }\n })\n\n return mergedAttributes\n }, {})\n}\n","import type { Node as ProseMirrorNode } from '@tiptap/pm/model'\n\nimport type { Range, TextSerializer } from '../types.js'\n\n/**\n * Gets the text between two positions in a Prosemirror node\n * and serializes it using the given text serializers and block separator (see getText)\n * @param startNode The Prosemirror node to start from\n * @param range The range of the text to get\n * @param options Options for the text serializer & block separator\n * @returns The text between the two positions\n */\nexport function getTextBetween(\n startNode: ProseMirrorNode,\n range: Range,\n options?: {\n blockSeparator?: string\n textSerializers?: Record<string, TextSerializer>\n },\n): string {\n const { from, to } = range\n const { blockSeparator = '\\n\\n', textSerializers = {} } = options || {}\n let text = ''\n\n startNode.nodesBetween(from, to, (node, pos, parent, index) => {\n if (node.isBlock && pos > from) {\n text += blockSeparator\n }\n\n const textSerializer = textSerializers?.[node.type.name]\n\n if (textSerializer) {\n if (parent) {\n text += textSerializer({\n node,\n pos,\n parent,\n index,\n range,\n })\n }\n // do not descend into child nodes when there exists a serializer\n return false\n }\n\n if (node.isText) {\n text += node?.text?.slice(Math.max(from, pos) - pos, to - pos) // eslint-disable-line\n }\n })\n\n return text\n}\n","import type { Schema } from '@tiptap/pm/model'\n\nimport type { TextSerializer } from '../types.js'\n\n/**\n * Find text serializers `toText` in a Prosemirror schema\n * @param schema The Prosemirror schema to search in\n * @returns A record of text serializers by node name\n */\nexport function getTextSerializersFromSchema(schema: Schema): Record<string, TextSerializer> {\n return Object.fromEntries(\n Object.entries(schema.nodes)\n .filter(([, node]) => node.spec.toText)\n .map(([name, node]) => [name, node.spec.toText]),\n )\n}\n","/**\n * Removes duplicated values within an array.\n * Supports numbers, strings and objects.\n */\nexport function removeDuplicates<T>(array: T[], by = JSON.stringify): T[] {\n const seen: Record<any, any> = {}\n\n return array.filter(item => {\n const key = by(item)\n\n return Object.prototype.hasOwnProperty.call(seen, key) ? false : (seen[key] = true)\n })\n}\n","import type { Step, Transform } from '@tiptap/pm/transform'\n\nimport type { Range } from '../types.js'\nimport { removeDuplicates } from '../utilities/removeDuplicates.js'\n\nexport type ChangedRange = {\n oldRange: Range\n newRange: Range\n}\n\n/**\n * Removes duplicated ranges and ranges that are\n * fully captured by other ranges.\n */\nfunction simplifyChangedRanges(changes: ChangedRange[]): ChangedRange[] {\n const uniqueChanges = removeDuplicates(changes)\n\n return uniqueChanges.length === 1\n ? uniqueChanges\n : uniqueChanges.filter((change, index) => {\n const rest = uniqueChanges.filter((_, i) => i !== index)\n\n return !rest.some(otherChange => {\n return (\n change.oldRange.from >= otherChange.oldRange.from &&\n change.oldRange.to <= otherChange.oldRange.to &&\n change.newRange.from >= otherChange.newRange.from &&\n change.newRange.to <= otherChange.newRange.to\n )\n })\n })\n}\n\n/**\n * Returns a list of changed ranges\n * based on the first and last state of all steps.\n */\nexport function getChangedRanges(transform: Transform): ChangedRange[] {\n const { mapping, steps } = transform\n const changes: ChangedRange[] = []\n\n mapping.maps.forEach((stepMap, index) => {\n const ranges: Range[] = []\n\n // This accounts for step changes where no range was actually altered\n // e.g. when setting a mark, node attribute, etc.\n // @ts-ignore\n if (!stepMap.ranges.length) {\n const { from, to } = steps[index] as Step & {\n from?: number\n to?: number\n }\n\n if (from === undefined || to === undefined) {\n return\n }\n\n ranges.push({ from, to })\n } else {\n stepMap.forEach((from, to) => {\n ranges.push({ from, to })\n })\n }\n\n ranges.forEach(({ from, to }) => {\n const newStart = mapping.slice(index).map(from, -1)\n const newEnd = mapping.slice(index).map(to)\n const oldStart = mapping.invert().map(newStart, -1)\n const oldEnd = mapping.invert().map(newEnd)\n\n changes.push({\n oldRange: {\n from: oldStart,\n to: oldEnd,\n },\n newRange: {\n from: newStart,\n to: newEnd,\n },\n })\n })\n })\n\n return simplifyChangedRanges(changes)\n}\n","import type { ExtensionAttribute } from '../types.js'\n\n/**\n * Return attributes of an extension that should be splitted by keepOnSplit flag\n * @param extensionAttributes Array of extension attributes\n * @param typeName The type of the extension\n * @param attributes The attributes of the extension\n * @returns The splitted attributes\n */\nexport function getSplittedAttributes(\n extensionAttributes: ExtensionAttribute[],\n typeName: string,\n attributes: Record<string, any>,\n): Record<string, any> {\n return Object.fromEntries(\n Object.entries(attributes).filter(([name]) => {\n const extensionAttribute = extensionAttributes.find(item => {\n return item.type === typeName && item.name === name\n })\n\n if (!extensionAttribute) {\n return false\n }\n\n return extensionAttribute.attribute.keepOnSplit\n }),\n )\n}\n","import type { MarkType } from '@tiptap/pm/model'\nimport type { EditorState } from '@tiptap/pm/state'\n\nimport type { MarkRange } from '../types.js'\nimport { objectIncludes } from '../utilities/objectIncludes.js'\nimport { getMarkType } from './getMarkType.js'\n\nexport function isMarkActive(\n state: EditorState,\n typeOrName: MarkType | string | null,\n attributes: Record<string, any> = {},\n): boolean {\n const { empty, ranges } = state.selection\n const type = typeOrName ? getMarkType(typeOrName, state.schema) : null\n\n if (empty) {\n return !!(state.storedMarks || state.selection.$from.marks())\n .filter(mark => {\n if (!type) {\n return true\n }\n\n return type.name === mark.type.name\n })\n .find(mark => objectIncludes(mark.attrs, attributes, { strict: false }))\n }\n\n let selectionRange = 0\n const markRanges: MarkRange[] = []\n\n ranges.forEach(({ $from, $to }) => {\n const from = $from.pos\n const to = $to.pos\n\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText && !node.marks.length) {\n return\n }\n\n const relativeFrom = Math.max(from, pos)\n const relativeTo = Math.min(to, pos + node.nodeSize)\n const range = relativeTo - relativeFrom\n\n selectionRange += range\n\n markRanges.push(\n ...node.marks.map(mark => ({\n mark,\n from: relativeFrom,\n to: relativeTo,\n })),\n )\n })\n })\n\n if (selectionRange === 0) {\n return false\n }\n\n // calculate range of matched mark\n const matchedRange = markRanges\n .filter(markRange => {\n if (!type) {\n return true\n }\n\n return type.name === markRange.mark.type.name\n })\n .filter(markRange => objectIncludes(markRange.mark.attrs, attributes, { strict: false }))\n .reduce((sum, markRange) => sum + markRange.to - markRange.from, 0)\n\n // calculate range of marks that excludes the searched mark\n // for example `code` doesn’t allow any other marks\n const excludedRange = markRanges\n .filter(markRange => {\n if (!type) {\n return true\n }\n\n return markRange.mark.type !== type && markRange.mark.type.excludes(type)\n })\n .reduce((sum, markRange) => sum + markRange.to - markRange.from, 0)\n\n // we only include the result of `excludedRange`\n // if there is a match at all\n const range = matchedRange > 0 ? matchedRange + excludedRange : matchedRange\n\n return range >= selectionRange\n}\n","import { getExtensionField } from '../helpers/getExtensionField.js'\nimport type { NodeConfig } from '../index.js'\nimport type { Extensions } from '../types.js'\nimport { callOrReturn } from '../utilities/callOrReturn.js'\nimport { splitExtensions } from './splitExtensions.js'\n\nexport function isList(name: string, extensions: Extensions): boolean {\n const { nodeExtensions } = splitExtensions(extensions)\n const extension = nodeExtensions.find(item => item.name === name)\n\n if (!extension) {\n return false\n }\n\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n }\n const group = callOrReturn(getExtensionField<NodeConfig['group']>(extension, 'group', context))\n\n if (typeof group !== 'string') {\n return false\n }\n\n return group.split(' ').includes('list')\n}\n","import type { Node as ProseMirrorNode } from '@tiptap/pm/model'\n\n/**\n * Returns true if the given prosemirror node is empty.\n */\nexport function isNodeEmpty(\n node: ProseMirrorNode,\n {\n checkChildren = true,\n ignoreWhitespace = false,\n }: {\n /**\n * When true (default), it will also check if all children are empty.\n */\n checkChildren?: boolean\n /**\n * When true, it will ignore whitespace when checking for emptiness.\n */\n ignoreWhitespace?: boolean\n } = {},\n): boolean {\n if (ignoreWhitespace) {\n if (node.type.name === 'hardBreak') {\n // Hard breaks are considered empty\n return true\n }\n if (node.isText) {\n return /^\\s*$/m.test(node.text ?? '')\n }\n }\n\n if (node.isText) {\n return !node.text\n }\n\n if (node.isAtom || node.isLeaf) {\n return false\n }\n\n if (node.content.childCount === 0) {\n return true\n }\n\n if (checkChildren) {\n let isContentEmpty = true\n\n node.content.forEach(childNode => {\n if (isContentEmpty === false) {\n // Exit early for perf\n return\n }\n\n if (!isNodeEmpty(childNode, { ignoreWhitespace, checkChildren })) {\n isContentEmpty = false\n }\n })\n\n return isContentEmpty\n }\n\n return false\n}\n","import type { MarkType, ResolvedPos } from '@tiptap/pm/model'\nimport type { EditorState, Transaction } from '@tiptap/pm/state'\n\nimport { getMarkAttributes } from '../helpers/getMarkAttributes.js'\nimport { getMarkType } from '../helpers/getMarkType.js'\nimport { isTextSelection } from '../helpers/index.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n setMark: {\n /**\n * Add a mark with new attributes.\n * @param typeOrName The mark type or name.\n * @example editor.commands.setMark('bold', { level: 1 })\n */\n setMark: (typeOrName: string | MarkType, attributes?: Record<string, any>) => ReturnType\n }\n }\n}\n\nfunction canSetMark(state: EditorState, tr: Transaction, newMarkType: MarkType) {\n const { selection } = tr\n let cursor: ResolvedPos | null = null\n\n if (isTextSelection(selection)) {\n cursor = selection.$cursor\n }\n\n if (cursor) {\n const currentMarks = state.storedMarks ?? cursor.marks()\n const parentAllowsMarkType = cursor.parent.type.allowsMarkType(newMarkType)\n\n // There can be no current marks that exclude the new mark, and the parent must allow this mark type\n return (\n parentAllowsMarkType &&\n (!!newMarkType.isInSet(currentMarks) || !currentMarks.some(mark => mark.type.excludes(newMarkType)))\n )\n }\n\n const { ranges } = selection\n\n return ranges.some(({ $from, $to }) => {\n let someNodeSupportsMark =\n $from.depth === 0 ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType) : false\n\n state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => {\n // If we already found a mark that we can enable, return false to bypass the remaining search\n if (someNodeSupportsMark) {\n return false\n }\n\n if (node.isInline) {\n const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType)\n const currentMarksAllowMarkType =\n !!newMarkType.isInSet(node.marks) || !node.marks.some(otherMark => otherMark.type.excludes(newMarkType))\n\n someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType\n }\n return !someNodeSupportsMark\n })\n\n return someNodeSupportsMark\n })\n}\nexport const setMark: RawCommands['setMark'] =\n (typeOrName, attributes = {}) =>\n ({ tr, state, dispatch }) => {\n const { selection } = tr\n const { empty, ranges } = selection\n const type = getMarkType(typeOrName, state.schema)\n\n if (dispatch) {\n if (empty) {\n const oldAttributes = getMarkAttributes(state, type)\n\n tr.addStoredMark(\n type.create({\n ...oldAttributes,\n ...attributes,\n }),\n )\n } else {\n ranges.forEach(range => {\n const from = range.$from.pos\n const to = range.$to.pos\n\n state.doc.nodesBetween(from, to, (node, pos) => {\n const trimmedFrom = Math.max(pos, from)\n const trimmedTo = Math.min(pos + node.nodeSize, to)\n const someHasMark = node.marks.find(mark => mark.type === type)\n\n // if there is already a mark of this type\n // we know that we have to merge its attributes\n // otherwise we add a fresh new mark\n if (someHasMark) {\n node.marks.forEach(mark => {\n if (type === mark.type) {\n tr.addMark(\n trimmedFrom,\n trimmedTo,\n type.create({\n ...mark.attrs,\n ...attributes,\n }),\n )\n }\n })\n } else {\n tr.addMark(trimmedFrom, trimmedTo, type.create(attributes))\n }\n })\n })\n }\n }\n\n return canSetMark(state, tr, type)\n }\n","import type { Plugin, PluginKey } from '@tiptap/pm/state'\n\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n setMeta: {\n /**\n * Store a metadata property in the current transaction.\n * @param key The key of the metadata property.\n * @param value The value to store.\n * @example editor.commands.setMeta('foo', 'bar')\n */\n setMeta: (key: string | Plugin | PluginKey, value: any) => ReturnType\n }\n }\n}\n\nexport const setMeta: RawCommands['setMeta'] =\n (key, value) =>\n ({ tr }) => {\n tr.setMeta(key, value)\n\n return true\n }\n","import { setBlockType } from '@tiptap/pm/commands'\nimport type { NodeType } from '@tiptap/pm/model'\n\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n setNode: {\n /**\n * Replace a given range with a node.\n * @param typeOrName The type or name of the node\n * @param attributes The attributes of the node\n * @example editor.commands.setNode('paragraph')\n */\n setNode: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType\n }\n }\n}\n\nexport const setNode: RawCommands['setNode'] =\n (typeOrName, attributes = {}) =>\n ({ state, dispatch, chain }) => {\n const type = getNodeType(typeOrName, state.schema)\n\n let attributesToCopy: Record<string, any> | undefined\n\n if (state.selection.$anchor.sameParent(state.selection.$head)) {\n // only copy attributes if the selection is pointing to a node of the same type\n attributesToCopy = state.selection.$anchor.parent.attrs\n }\n\n // TODO: use a fallback like insertContent?\n if (!type.isTextblock) {\n console.warn('[tiptap warn]: Currently \"setNode()\" only supports text block nodes.')\n\n return false\n }\n\n return (\n chain()\n // try to convert node to default node if needed\n .command(({ commands }) => {\n const canSetBlock = setBlockType(type, { ...attributesToCopy, ...attributes })(state)\n\n if (canSetBlock) {\n return true\n }\n\n return commands.clearNodes()\n })\n .command(({ state: updatedState }) => {\n return setBlockType(type, { ...attributesToCopy, ...attributes })(updatedState, dispatch)\n })\n .run()\n )\n }\n","import { NodeSelection } from '@tiptap/pm/state'\n\nimport type { RawCommands } from '../types.js'\nimport { minMax } from '../utilities/minMax.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n setNodeSelection: {\n /**\n * Creates a NodeSelection.\n * @param position - Position of the node.\n * @example editor.commands.setNodeSelection(10)\n */\n setNodeSelection: (position: number) => ReturnType\n }\n }\n}\n\nexport const setNodeSelection: RawCommands['setNodeSelection'] =\n position =>\n ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr\n const from = minMax(position, 0, doc.content.size)\n const selection = NodeSelection.create(doc, from)\n\n tr.setSelection(selection)\n }\n\n return true\n }\n","import type { Range, RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n setTextDirection: {\n /**\n * Set the text direction for nodes.\n * If no position is provided, it will use the current selection.\n * @param direction The text direction to set ('ltr', 'rtl', or 'auto')\n * @param position Optional position or range to apply the direction to\n * @example editor.commands.setTextDirection('rtl')\n * @example editor.commands.setTextDirection('ltr', { from: 0, to: 10 })\n */\n setTextDirection: (direction: 'ltr' | 'rtl' | 'auto', position?: number | Range) => ReturnType\n }\n }\n}\n\nexport const setTextDirection: RawCommands['setTextDirection'] =\n (direction, position) =>\n ({ tr, state, dispatch }) => {\n const { selection } = state\n let from: number\n let to: number\n\n if (typeof position === 'number') {\n from = position\n to = position\n } else if (position && 'from' in position && 'to' in position) {\n from = position.from\n to = position.to\n } else {\n from = selection.from\n to = selection.to\n }\n\n if (dispatch) {\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return\n }\n\n tr.setNodeMarkup(pos, undefined, {\n ...node.attrs,\n dir: direction,\n })\n })\n }\n\n return true\n }\n","import { TextSelection } from '@tiptap/pm/state'\n\nimport type { Range, RawCommands } from '../types.js'\nimport { minMax } from '../utilities/minMax.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n setTextSelection: {\n /**\n * Creates a TextSelection.\n * @param position The position of the selection.\n * @example editor.commands.setTextSelection(10)\n */\n setTextSelection: (position: number | Range) => ReturnType\n }\n }\n}\n\nexport const setTextSelection: RawCommands['setTextSelection'] =\n position =>\n ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr\n const { from, to } = typeof position === 'number' ? { from: position, to: position } : position\n const minPos = TextSelection.atStart(doc).from\n const maxPos = TextSelection.atEnd(doc).to\n const resolvedFrom = minMax(from, minPos, maxPos)\n const resolvedEnd = minMax(to, minPos, maxPos)\n const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd)\n\n tr.setSelection(selection)\n }\n\n return true\n }\n","import type { NodeType } from '@tiptap/pm/model'\nimport { sinkListItem as originalSinkListItem } from '@tiptap/pm/schema-list'\n\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n sinkListItem: {\n /**\n * Sink the list item down into an inner list.\n * @param typeOrName The type or name of the node.\n * @example editor.commands.sinkListItem('listItem')\n */\n sinkListItem: (typeOrName: string | NodeType) => ReturnType\n }\n }\n}\n\nexport const sinkListItem: RawCommands['sinkListItem'] =\n typeOrName =>\n ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema)\n\n return originalSinkListItem(type)(state, dispatch)\n }\n","import type { EditorState } from '@tiptap/pm/state'\nimport { NodeSelection, TextSelection } from '@tiptap/pm/state'\nimport { canSplit } from '@tiptap/pm/transform'\n\nimport { defaultBlockAt } from '../helpers/defaultBlockAt.js'\nimport { getSplittedAttributes } from '../helpers/getSplittedAttributes.js'\nimport type { RawCommands } from '../types.js'\n\nfunction ensureMarks(state: EditorState, splittableMarks?: string[]) {\n const marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks())\n\n if (marks) {\n const filteredMarks = marks.filter(mark => splittableMarks?.includes(mark.type.name))\n\n state.tr.ensureMarks(filteredMarks)\n }\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n splitBlock: {\n /**\n * Forks a new node from an existing node.\n * @param options.keepMarks Keep marks from the previous node.\n * @example editor.commands.splitBlock()\n * @example editor.commands.splitBlock({ keepMarks: true })\n */\n splitBlock: (options?: { keepMarks?: boolean }) => ReturnType\n }\n }\n}\n\nexport const splitBlock: RawCommands['splitBlock'] =\n ({ keepMarks = true } = {}) =>\n ({ tr, state, dispatch, editor }) => {\n const { selection, doc } = tr\n const { $from, $to } = selection\n const extensionAttributes = editor.extensionManager.attributes\n const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs)\n\n if (selection instanceof NodeSelection && selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(doc, $from.pos)) {\n return false\n }\n\n if (dispatch) {\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks)\n }\n\n tr.split($from.pos).scrollIntoView()\n }\n\n return true\n }\n\n if (!$from.parent.isBlock) {\n return false\n }\n\n const atEnd = $to.parentOffset === $to.parent.content.size\n\n const deflt = $from.depth === 0 ? undefined : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)))\n\n let types =\n atEnd && deflt\n ? [\n {\n type: deflt,\n attrs: newAttributes,\n },\n ]\n : undefined\n\n let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types)\n\n if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : undefined)) {\n can = true\n types = deflt\n ? [\n {\n type: deflt,\n attrs: newAttributes,\n },\n ]\n : undefined\n }\n\n if (dispatch) {\n if (can) {\n if (selection instanceof TextSelection) {\n tr.deleteSelection()\n }\n\n tr.split(tr.mapping.map($from.pos), 1, types)\n\n if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {\n const first = tr.mapping.map($from.before())\n const $first = tr.doc.resolve(first)\n\n if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {\n tr.setNodeMarkup(tr.mapping.map($from.before()), deflt)\n }\n }\n }\n\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks)\n }\n\n tr.scrollIntoView()\n }\n\n return can\n }\n","import type { Node as ProseMirrorNode, NodeType } from '@tiptap/pm/model'\nimport { Fragment, Slice } from '@tiptap/pm/model'\nimport { TextSelection } from '@tiptap/pm/state'\nimport { canSplit } from '@tiptap/pm/transform'\n\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport { getSplittedAttributes } from '../helpers/getSplittedAttributes.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n splitListItem: {\n /**\n * Splits one list item into two list items.\n * @param typeOrName The type or name of the node.\n * @param overrideAttrs The attributes to ensure on the new node.\n * @example editor.commands.splitListItem('listItem')\n */\n splitListItem: (typeOrName: string | NodeType, overrideAttrs?: Record<string, any>) => ReturnType\n }\n }\n}\n\nexport const splitListItem: RawCommands['splitListItem'] =\n (typeOrName, overrideAttrs = {}) =>\n ({ tr, state, dispatch, editor }) => {\n const type = getNodeType(typeOrName, state.schema)\n const { $from, $to } = state.selection\n\n // @ts-ignore\n // eslint-disable-next-line\n const node: ProseMirrorNode = state.selection.node\n\n if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to)) {\n return false\n }\n\n const grandParent = $from.node(-1)\n\n if (grandParent.type !== type) {\n return false\n }\n\n const extensionAttributes = editor.extensionManager.attributes\n\n if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth === 2 || $from.node(-3).type !== type || $from.index(-2) !== $from.node(-2).childCount - 1) {\n return false\n }\n\n if (dispatch) {\n let wrap = Fragment.empty\n // eslint-disable-next-line\n const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3\n\n // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {\n wrap = Fragment.from($from.node(d).copy(wrap))\n }\n\n const depthAfter =\n // eslint-disable-next-line no-nested-ternary\n $from.indexAfter(-1) < $from.node(-2).childCount\n ? 1\n : $from.indexAfter(-2) < $from.node(-3).childCount\n ? 2\n : 3\n\n // Add a second list item with an empty default start node\n const newNextTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs,\n }\n const nextType = type.contentMatch.defaultType?.createAndFill(newNextTypeAttributes) || undefined\n\n wrap = wrap.append(Fragment.from(type.createAndFill(null, nextType) || undefined))\n\n const start = $from.before($from.depth - (depthBefore - 1))\n\n tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0))\n\n let sel = -1\n\n tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {\n if (sel > -1) {\n return false\n }\n\n if (n.isTextblock && n.content.size === 0) {\n sel = pos + 1\n }\n })\n\n if (sel > -1) {\n tr.setSelection(TextSelection.near(tr.doc.resolve(sel)))\n }\n\n tr.scrollIntoView()\n }\n\n return true\n }\n\n const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null\n\n const newTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs),\n ...overrideAttrs,\n }\n const newNextTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs,\n }\n\n tr.delete($from.pos, $to.pos)\n\n const types = nextType\n ? [\n { type, attrs: newTypeAttributes },\n { type: nextType, attrs: newNextTypeAttributes },\n ]\n : [{ type, attrs: newTypeAttributes }]\n\n if (!canSplit(tr.doc, $from.pos, 2)) {\n return false\n }\n\n if (dispatch) {\n const { selection, storedMarks } = state\n const { splittableMarks } = editor.extensionManager\n const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks())\n\n tr.split($from.pos, 2, types).scrollIntoView()\n\n if (!marks || !dispatch) {\n return true\n }\n\n const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name))\n\n tr.ensureMarks(filteredMarks)\n }\n\n return true\n }\n","import type { NodeType } from '@tiptap/pm/model'\nimport type { Transaction } from '@tiptap/pm/state'\nimport { canJoin } from '@tiptap/pm/transform'\n\nimport { findParentNode } from '../helpers/findParentNode.js'\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport { isList } from '../helpers/isList.js'\nimport type { RawCommands } from '../types.js'\n\nconst joinListBackwards = (tr: Transaction, listType: NodeType): boolean => {\n const list = findParentNode(node => node.type === listType)(tr.selection)\n\n if (!list) {\n return true\n }\n\n const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth)\n\n if (before === undefined) {\n return true\n }\n\n const nodeBefore = tr.doc.nodeAt(before)\n const canJoinBackwards = list.node.type === nodeBefore?.type && canJoin(tr.doc, list.pos)\n\n if (!canJoinBackwards) {\n return true\n }\n\n tr.join(list.pos)\n\n return true\n}\n\nconst joinListForwards = (tr: Transaction, listType: NodeType): boolean => {\n const list = findParentNode(node => node.type === listType)(tr.selection)\n\n if (!list) {\n return true\n }\n\n const after = tr.doc.resolve(list.start).after(list.depth)\n\n if (after === undefined) {\n return true\n }\n\n const nodeAfter = tr.doc.nodeAt(after)\n const canJoinForwards = list.node.type === nodeAfter?.type && canJoin(tr.doc, after)\n\n if (!canJoinForwards) {\n return true\n }\n\n tr.join(after)\n\n return true\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n toggleList: {\n /**\n * Toggle between different list types.\n * @param listTypeOrName The type or name of the list.\n * @param itemTypeOrName The type or name of the list item.\n * @param keepMarks Keep marks when toggling.\n * @param attributes Attributes for the new list.\n * @example editor.commands.toggleList('bulletList', 'listItem')\n */\n toggleList: (\n listTypeOrName: string | NodeType,\n itemTypeOrName: string | NodeType,\n keepMarks?: boolean,\n attributes?: Record<string, any>,\n ) => ReturnType\n }\n }\n}\n\nexport const toggleList: RawCommands['toggleList'] =\n (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) =>\n ({ editor, tr, state, dispatch, chain, commands, can }) => {\n const { extensions, splittableMarks } = editor.extensionManager\n const listType = getNodeType(listTypeOrName, state.schema)\n const itemType = getNodeType(itemTypeOrName, state.schema)\n const { selection, storedMarks } = state\n const { $from, $to } = selection\n const range = $from.blockRange($to)\n\n const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks())\n\n if (!range) {\n return false\n }\n\n const parentList = findParentNode(node => isList(node.type.name, extensions))(selection)\n\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n // remove list\n if (parentList.node.type === listType) {\n return commands.liftListItem(itemType)\n }\n\n // change list type\n if (isList(parentList.node.type.name, extensions) && listType.validContent(parentList.node.content) && dispatch) {\n return chain()\n .command(() => {\n tr.setNodeMarkup(parentList.pos, listType)\n\n return true\n })\n .command(() => joinListBackwards(tr, listType))\n .command(() => joinListForwards(tr, listType))\n .run()\n }\n }\n if (!keepMarks || !marks || !dispatch) {\n return (\n chain()\n // try to convert node to default node if needed\n .command(() => {\n const canWrapInList = can().wrapInList(listType, attributes)\n\n if (canWrapInList) {\n return true\n }\n\n return commands.clearNodes()\n })\n .wrapInList(listType, attributes)\n .command(() => joinListBackwards(tr, listType))\n .command(() => joinListForwards(tr, listType))\n .run()\n )\n }\n\n return (\n chain()\n // try to convert node to default node if needed\n .command(() => {\n const canWrapInList = can().wrapInList(listType, attributes)\n\n const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name))\n\n tr.ensureMarks(filteredMarks)\n\n if (canWrapInList) {\n return true\n }\n\n return commands.clearNodes()\n })\n .wrapInList(listType, attributes)\n .command(() => joinListBackwards(tr, listType))\n .command(() => joinListForwards(tr, listType))\n .run()\n )\n }\n","import type { MarkType } from '@tiptap/pm/model'\n\nimport { getMarkType } from '../helpers/getMarkType.js'\nimport { isMarkActive } from '../helpers/isMarkActive.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n toggleMark: {\n /**\n * Toggle a mark on and off.\n * @param typeOrName The mark type or name.\n * @param attributes The attributes of the mark.\n * @param options.extendEmptyMarkRange Removes the mark even across the current selection. Defaults to `false`.\n * @example editor.commands.toggleMark('bold')\n */\n toggleMark: (\n /**\n * The mark type or name.\n */\n typeOrName: string | MarkType,\n\n /**\n * The attributes of the mark.\n */\n attributes?: Record<string, any>,\n\n options?: {\n /**\n * Removes the mark even across the current selection. Defaults to `false`.\n */\n extendEmptyMarkRange?: boolean\n },\n ) => ReturnType\n }\n }\n}\n\nexport const toggleMark: RawCommands['toggleMark'] =\n (typeOrName, attributes = {}, options = {}) =>\n ({ state, commands }) => {\n const { extendEmptyMarkRange = false } = options\n const type = getMarkType(typeOrName, state.schema)\n const isActive = isMarkActive(state, type, attributes)\n\n if (isActive) {\n return commands.unsetMark(type, { extendEmptyMarkRange })\n }\n\n return commands.setMark(type, attributes)\n }\n","import type { NodeType } from '@tiptap/pm/model'\n\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport { isNodeActive } from '../helpers/isNodeActive.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n toggleNode: {\n /**\n * Toggle a node with another node.\n * @param typeOrName The type or name of the node.\n * @param toggleTypeOrName The type or name of the node to toggle.\n * @param attributes The attributes of the node.\n * @example editor.commands.toggleNode('heading', 'paragraph')\n */\n toggleNode: (\n typeOrName: string | NodeType,\n toggleTypeOrName: string | NodeType,\n attributes?: Record<string, any>,\n ) => ReturnType\n }\n }\n}\n\nexport const toggleNode: RawCommands['toggleNode'] =\n (typeOrName, toggleTypeOrName, attributes = {}) =>\n ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema)\n const toggleType = getNodeType(toggleTypeOrName, state.schema)\n const isActive = isNodeActive(state, type, attributes)\n\n let attributesToCopy: Record<string, any> | undefined\n\n if (state.selection.$anchor.sameParent(state.selection.$head)) {\n // only copy attributes if the selection is pointing to a node of the same type\n attributesToCopy = state.selection.$anchor.parent.attrs\n }\n\n if (isActive) {\n return commands.setNode(toggleType, attributesToCopy)\n }\n\n // If the node is not active, we want to set the new node type with the given attributes\n // Copying over the attributes from the current node if the selection is pointing to a node of the same type\n return commands.setNode(type, { ...attributesToCopy, ...attributes })\n }\n","import type { NodeType } from '@tiptap/pm/model'\n\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport { isNodeActive } from '../helpers/isNodeActive.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n toggleWrap: {\n /**\n * Wraps nodes in another node, or removes an existing wrap.\n * @param typeOrName The type or name of the node.\n * @param attributes The attributes of the node.\n * @example editor.commands.toggleWrap('blockquote')\n */\n toggleWrap: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType\n }\n }\n}\n\nexport const toggleWrap: RawCommands['toggleWrap'] =\n (typeOrName, attributes = {}) =>\n ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema)\n const isActive = isNodeActive(state, type, attributes)\n\n if (isActive) {\n return commands.lift(type)\n }\n\n return commands.wrapIn(type, attributes)\n }\n","import type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n undoInputRule: {\n /**\n * Undo an input rule.\n * @example editor.commands.undoInputRule()\n */\n undoInputRule: () => ReturnType\n }\n }\n}\n\nexport const undoInputRule: RawCommands['undoInputRule'] =\n () =>\n ({ state, dispatch }) => {\n const plugins = state.plugins\n\n for (let i = 0; i < plugins.length; i += 1) {\n const plugin = plugins[i]\n let undoable\n\n // @ts-ignore\n // eslint-disable-next-line\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n const tr = state.tr\n const toUndo = undoable.transform\n\n for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) {\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]))\n }\n\n if (undoable.text) {\n const marks = tr.doc.resolve(undoable.from).marks()\n\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks))\n } else {\n tr.delete(undoable.from, undoable.to)\n }\n }\n\n return true\n }\n }\n\n return false\n }\n","import type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n unsetAllMarks: {\n /**\n * Remove all marks in the current selection.\n * @example editor.commands.unsetAllMarks()\n */\n unsetAllMarks: () => ReturnType\n }\n }\n}\n\nexport const unsetAllMarks: RawCommands['unsetAllMarks'] =\n () =>\n ({ tr, dispatch }) => {\n const { selection } = tr\n const { empty, ranges } = selection\n\n if (empty) {\n return true\n }\n\n if (dispatch) {\n ranges.forEach(range => {\n tr.removeMark(range.$from.pos, range.$to.pos)\n })\n }\n\n return true\n }\n","import type { MarkType } from '@tiptap/pm/model'\n\nimport { getMarkRange } from '../helpers/getMarkRange.js'\nimport { getMarkType } from '../helpers/getMarkType.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n unsetMark: {\n /**\n * Remove all marks in the current selection.\n * @param typeOrName The mark type or name.\n * @param options.extendEmptyMarkRange Removes the mark even across the current selection. Defaults to `false`.\n * @example editor.commands.unsetMark('bold')\n */\n unsetMark: (\n /**\n * The mark type or name.\n */\n typeOrName: string | MarkType,\n\n options?: {\n /**\n * Removes the mark even across the current selection. Defaults to `false`.\n */\n extendEmptyMarkRange?: boolean\n },\n ) => ReturnType\n }\n }\n}\n\nexport const unsetMark: RawCommands['unsetMark'] =\n (typeOrName, options = {}) =>\n ({ tr, state, dispatch }) => {\n const { extendEmptyMarkRange = false } = options\n const { selection } = tr\n const type = getMarkType(typeOrName, state.schema)\n const { $from, empty, ranges } = selection\n\n if (!dispatch) {\n return true\n }\n\n if (empty && extendEmptyMarkRange) {\n let { from, to } = selection\n const attrs = $from.marks().find(mark => mark.type === type)?.attrs\n const range = getMarkRange($from, type, attrs)\n\n if (range) {\n from = range.from\n to = range.to\n }\n\n tr.removeMark(from, to, type)\n } else {\n ranges.forEach(range => {\n tr.removeMark(range.$from.pos, range.$to.pos, type)\n })\n }\n\n tr.removeStoredMark(type)\n\n return true\n }\n","import type { Range, RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n unsetTextDirection: {\n /**\n * Remove the text direction attribute from nodes.\n * If no position is provided, it will use the current selection.\n * @param position Optional position or range to remove the direction from\n * @example editor.commands.unsetTextDirection()\n * @example editor.commands.unsetTextDirection({ from: 0, to: 10 })\n */\n unsetTextDirection: (position?: number | Range) => ReturnType\n }\n }\n}\n\nexport const unsetTextDirection: RawCommands['unsetTextDirection'] =\n position =>\n ({ tr, state, dispatch }) => {\n const { selection } = state\n let from: number\n let to: number\n\n if (typeof position === 'number') {\n from = position\n to = position\n } else if (position && 'from' in position && 'to' in position) {\n from = position.from\n to = position.to\n } else {\n from = selection.from\n to = selection.to\n }\n\n if (dispatch) {\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return\n }\n\n const newAttrs = { ...node.attrs }\n\n delete newAttrs.dir\n\n tr.setNodeMarkup(pos, undefined, newAttrs)\n })\n }\n\n return true\n }\n","import type { Mark, MarkType, Node, NodeType } from '@tiptap/pm/model'\nimport type { SelectionRange } from '@tiptap/pm/state'\n\nimport { getMarkType } from '../helpers/getMarkType.js'\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport { getSchemaTypeNameByName } from '../helpers/getSchemaTypeNameByName.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n updateAttributes: {\n /**\n * Update attributes of a node or mark.\n * @param typeOrName The type or name of the node or mark.\n * @param attributes The attributes of the node or mark.\n * @example editor.commands.updateAttributes('mention', { userId: \"2\" })\n */\n updateAttributes: (\n /**\n * The type or name of the node or mark.\n */\n typeOrName: string | NodeType | MarkType,\n\n /**\n * The attributes of the node or mark.\n */\n attributes: Record<string, any>,\n ) => ReturnType\n }\n }\n}\n\nexport const updateAttributes: RawCommands['updateAttributes'] =\n (typeOrName, attributes = {}) =>\n ({ tr, state, dispatch }) => {\n let nodeType: NodeType | null = null\n let markType: MarkType | null = null\n\n const schemaType = getSchemaTypeNameByName(\n typeof typeOrName === 'string' ? typeOrName : typeOrName.name,\n state.schema,\n )\n\n if (!schemaType) {\n return false\n }\n\n if (schemaType === 'node') {\n nodeType = getNodeType(typeOrName as NodeType, state.schema)\n }\n\n if (schemaType === 'mark') {\n markType = getMarkType(typeOrName as MarkType, state.schema)\n }\n\n let canUpdate = false\n\n tr.selection.ranges.forEach((range: SelectionRange) => {\n const from = range.$from.pos\n const to = range.$to.pos\n\n let lastPos: number | undefined\n let lastNode: Node | undefined\n let trimmedFrom: number\n let trimmedTo: number\n\n if (tr.selection.empty) {\n state.doc.nodesBetween(from, to, (node: Node, pos: number) => {\n if (nodeType && nodeType === node.type) {\n canUpdate = true\n trimmedFrom = Math.max(pos, from)\n trimmedTo = Math.min(pos + node.nodeSize, to)\n lastPos = pos\n lastNode = node\n }\n })\n } else {\n state.doc.nodesBetween(from, to, (node: Node, pos: number) => {\n if (pos < from && nodeType && nodeType === node.type) {\n canUpdate = true\n trimmedFrom = Math.max(pos, from)\n trimmedTo = Math.min(pos + node.nodeSize, to)\n lastPos = pos\n lastNode = node\n }\n\n if (pos >= from && pos <= to) {\n if (nodeType && nodeType === node.type) {\n canUpdate = true\n\n if (dispatch) {\n tr.setNodeMarkup(pos, undefined, {\n ...node.attrs,\n ...attributes,\n })\n }\n }\n\n if (markType && node.marks.length) {\n node.marks.forEach((mark: Mark) => {\n if (markType === mark.type) {\n canUpdate = true\n\n if (dispatch) {\n const trimmedFrom2 = Math.max(pos, from)\n const trimmedTo2 = Math.min(pos + node.nodeSize, to)\n\n tr.addMark(\n trimmedFrom2,\n trimmedTo2,\n markType.create({\n ...mark.attrs,\n ...attributes,\n }),\n )\n }\n }\n })\n }\n }\n })\n }\n\n if (lastNode) {\n if (lastPos !== undefined && dispatch) {\n tr.setNodeMarkup(lastPos, undefined, {\n ...lastNode.attrs,\n ...attributes,\n })\n }\n\n if (markType && lastNode.marks.length) {\n lastNode.marks.forEach((mark: Mark) => {\n if (markType === mark.type && dispatch) {\n tr.addMark(\n trimmedFrom,\n trimmedTo,\n markType.create({\n ...mark.attrs,\n ...attributes,\n }),\n )\n }\n })\n }\n }\n })\n\n return canUpdate\n }\n","import { wrapIn as originalWrapIn } from '@tiptap/pm/commands'\nimport type { NodeType } from '@tiptap/pm/model'\n\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n wrapIn: {\n /**\n * Wraps nodes in another node.\n * @param typeOrName The type or name of the node.\n * @param attributes The attributes of the node.\n * @example editor.commands.wrapIn('blockquote')\n */\n wrapIn: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType\n }\n }\n}\n\nexport const wrapIn: RawCommands['wrapIn'] =\n (typeOrName, attributes = {}) =>\n ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema)\n\n return originalWrapIn(type, attributes)(state, dispatch)\n }\n","import type { NodeType } from '@tiptap/pm/model'\nimport { wrapInList as originalWrapInList } from '@tiptap/pm/schema-list'\n\nimport { getNodeType } from '../helpers/getNodeType.js'\nimport type { RawCommands } from '../types.js'\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n wrapInList: {\n /**\n * Wrap a node in a list.\n * @param typeOrName The type or name of the node.\n * @param attributes The attributes of the node.\n * @example editor.commands.wrapInList('bulletList')\n */\n wrapInList: (typeOrName: string | NodeType, attributes?: Record<string, any>) => ReturnType\n }\n }\n}\n\nexport const wrapInList: RawCommands['wrapInList'] =\n (typeOrName, attributes = {}) =>\n ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema)\n\n return originalWrapInList(type, attributes)(state, dispatch)\n }\n","// see: https://github.com/mesqueeb/is-what/blob/88d6e4ca92fb2baab6003c54e02eedf4e729e5ab/src/index.ts\n\nfunction getType(value: any): string {\n return Object.prototype.toString.call(value).slice(8, -1)\n}\n\nexport function isPlainObject(value: any): value is Record<string, any> {\n if (getType(value) !== 'Object') {\n return false\n }\n\n return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype\n}\n","import { isPlainObject } from './isPlainObject.js'\n\nexport function mergeDeep(target: Record<string, any>, source: Record<string, any>): Record<string, any> {\n const output = { ...target }\n\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach(key => {\n if (isPlainObject(source[key]) && isPlainObject(target[key])) {\n output[key] = mergeDeep(target[key], source[key])\n } else {\n output[key] = source[key]\n }\n })\n }\n\n return output\n}\n","import type { Plugin } from '@tiptap/pm/state'\n\nimport type { Editor } from './Editor.js'\nimport { getExtensionField } from './helpers/getExtensionField.js'\nimport type { ExtensionConfig, MarkConfig, NodeConfig } from './index.js'\nimport type { InputRule } from './InputRule.js'\nimport type { Mark } from './Mark.js'\nimport type { Node } from './Node.js'\nimport type { PasteRule } from './PasteRule.js'\nimport type {\n AnyConfig,\n EditorEvents,\n Extensions,\n GlobalAttributes,\n JSONContent,\n KeyboardShortcutCommand,\n MarkdownParseHelpers,\n MarkdownParseResult,\n MarkdownRendererHelpers,\n MarkdownToken,\n MarkdownTokenizer,\n ParentConfig,\n RawCommands,\n RenderContext,\n} from './types.js'\nimport { callOrReturn } from './utilities/callOrReturn.js'\nimport { mergeDeep } from './utilities/mergeDeep.js'\n\nexport interface ExtendableConfig<\n Options = any,\n Storage = any,\n Config extends\n | ExtensionConfig<Options, Storage>\n | NodeConfig<Options, Storage>\n | MarkConfig<Options, Storage>\n | ExtendableConfig<Options, Storage> = ExtendableConfig<Options, Storage, any, any>,\n PMType = any,\n> {\n /**\n * The extension name - this must be unique.\n * It will be used to identify the extension.\n *\n * @example 'myExtension'\n */\n name: string\n\n /**\n * The priority of your extension. The higher, the earlier it will be called\n * and will take precedence over other extensions with a lower priority.\n * @default 100\n * @example 101\n */\n priority?: number\n\n /**\n * This method will add options to this extension\n * @see https://tiptap.dev/docs/editor/guide/custom-extensions#settings\n * @example\n * addOptions() {\n * return {\n * myOption: 'foo',\n * myOtherOption: 10,\n * }\n */\n addOptions?: (this: { name: string; parent: ParentConfig<Config>['addOptions'] }) => Options\n\n /**\n * The default storage this extension can save data to.\n * @see https://tiptap.dev/docs/editor/guide/custom-extensions#storage\n * @example\n * defaultStorage: {\n * prefetchedUsers: [],\n * loading: false,\n * }\n */\n addStorage?: (this: { name: string; options: Options; parent: ParentConfig<Config>['addStorage'] }) => Storage\n\n /**\n * This function adds globalAttributes to specific nodes.\n * @see https://tiptap.dev/docs/editor/guide/custom-extensions#global-attributes\n * @example\n * addGlobalAttributes() {\n * return [\n * {\n // Extend the following extensions\n * types: [\n * 'heading',\n * 'paragraph',\n * ],\n * // … with those attributes\n * attributes: {\n * textAlign: {\n * default: 'left',\n * renderHTML: attributes => ({\n * style: `text-align: ${attributes.textAlign}`,\n * }),\n * parseHTML: element => element.style.textAlign || 'left',\n * },\n * },\n * },\n * ]\n * }\n */\n addGlobalAttributes?: (this: {\n name: string\n options: Options\n storage: Storage\n extensions: (Node | Mark)[]\n parent: ParentConfig<Config>['addGlobalAttributes']\n }) => GlobalAttributes\n\n /**\n * This function adds commands to the editor\n * @see https://tiptap.dev/docs/editor/guide/custom-extensions#commands\n * @example\n * addCommands() {\n * return {\n * myCommand: () => ({ chain }) => chain().setMark('type', 'foo').run(),\n * }\n * }\n */\n addCommands?: (this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['addCommands']\n }) => Partial<RawCommands>\n\n /**\n * This function registers keyboard shortcuts.\n * @see https://tiptap.dev/docs/editor/guide/custom-extensions#keyboard-shortcuts\n * @example\n * addKeyboardShortcuts() {\n * return {\n * 'Mod-l': () => this.editor.commands.toggleBulletList(),\n * }\n * },\n */\n addKeyboardShortcuts?: (this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['addKeyboardShortcuts']\n }) => {\n [key: string]: KeyboardShortcutCommand\n }\n\n /**\n * This function adds input rules to the editor.\n * @see https://tiptap.dev/docs/editor/guide/custom-extensions#input-rules\n * @example\n * addInputRules() {\n * return [\n * markInputRule({\n * find: inputRegex,\n * type: this.type,\n * }),\n * ]\n * },\n */\n addInputRules?: (this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['addInputRules']\n }) => InputRule[]\n\n /**\n * This function adds paste rules to the editor.\n * @see https://tiptap.dev/docs/editor/guide/custom-extensions#paste-rules\n * @example\n * addPasteRules() {\n * return [\n * markPasteRule({\n * find: pasteRegex,\n * type: this.type,\n * }),\n * ]\n * },\n */\n addPasteRules?: (this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['addPasteRules']\n }) => PasteRule[]\n\n /**\n * This function adds Prosemirror plugins to the editor\n * @see https://tiptap.dev/docs/editor/guide/custom-extensions#prosemirror-plugins\n * @example\n * addProseMirrorPlugins() {\n * return [\n * customPlugin(),\n * ]\n * }\n */\n addProseMirrorPlugins?: (this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['addProseMirrorPlugins']\n }) => Plugin[]\n\n /**\n * This function adds additional extensions to the editor. This is useful for\n * building extension kits.\n * @example\n * addExtensions() {\n * return [\n * BulletList,\n * OrderedList,\n * ListItem\n * ]\n * }\n */\n addExtensions?: (this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<Config>['addExtensions']\n }) => Extensions\n\n /**\n * The markdown token name\n *\n * This is the name of the token that this extension uses to parse and render markdown and comes from the Marked Lexer.\n *\n * @see https://github.com/markedjs/marked/blob/master/src/Tokens.ts\n *\n */\n markdownTokenName?: string\n\n /**\n * The parse function used by the markdown parser to convert markdown tokens to ProseMirror nodes.\n */\n parseMarkdown?: (token: MarkdownToken, helpers: MarkdownParseHelpers) => MarkdownParseResult\n\n /**\n * The serializer function used by the markdown serializer to convert ProseMirror nodes to markdown tokens.\n */\n renderMarkdown?: (node: JSONContent, helpers: MarkdownRendererHelpers, ctx: RenderContext) => string\n\n /**\n * The markdown tokenizer responsible for turning a markdown string into tokens\n *\n * Custom tokenizers are only needed when you want to parse non-standard markdown token.\n */\n markdownTokenizer?: MarkdownTokenizer\n\n /**\n * Optional markdown options for indentation\n */\n markdownOptions?: {\n /**\n * Defines if this markdown element should indent it's child elements\n */\n indentsContent?: boolean\n }\n\n /**\n * This function extends the schema of the node.\n * @example\n * extendNodeSchema() {\n * return {\n * group: 'inline',\n * selectable: false,\n * }\n * }\n */\n extendNodeSchema?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<Config>['extendNodeSchema']\n },\n extension: Node,\n ) => Record<string, any>)\n | null\n\n /**\n * This function extends the schema of the mark.\n * @example\n * extendMarkSchema() {\n * return {\n * group: 'inline',\n * selectable: false,\n * }\n * }\n */\n extendMarkSchema?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<Config>['extendMarkSchema']\n },\n extension: Mark,\n ) => Record<string, any>)\n | null\n\n /**\n * The editor is not ready yet.\n */\n onBeforeCreate?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['onBeforeCreate']\n },\n event: EditorEvents['beforeCreate'],\n ) => void)\n | null\n\n /**\n * The editor is ready.\n */\n onCreate?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['onCreate']\n },\n event: EditorEvents['create'],\n ) => void)\n | null\n\n /**\n * The content has changed.\n */\n onUpdate?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['onUpdate']\n },\n event: EditorEvents['update'],\n ) => void)\n | null\n\n /**\n * The selection has changed.\n */\n onSelectionUpdate?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['onSelectionUpdate']\n },\n event: EditorEvents['selectionUpdate'],\n ) => void)\n | null\n\n /**\n * The editor state has changed.\n */\n onTransaction?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['onTransaction']\n },\n event: EditorEvents['transaction'],\n ) => void)\n | null\n\n /**\n * The editor is focused.\n */\n onFocus?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['onFocus']\n },\n event: EditorEvents['focus'],\n ) => void)\n | null\n\n /**\n * The editor isn’t focused anymore.\n */\n onBlur?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['onBlur']\n },\n event: EditorEvents['blur'],\n ) => void)\n | null\n\n /**\n * The editor is destroyed.\n */\n onDestroy?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: PMType\n parent: ParentConfig<Config>['onDestroy']\n },\n event: EditorEvents['destroy'],\n ) => void)\n | null\n}\n\nexport class Extendable<\n Options = any,\n Storage = any,\n Config = ExtensionConfig<Options, Storage> | NodeConfig<Options, Storage> | MarkConfig<Options, Storage>,\n> {\n type = 'extendable'\n parent: Extendable | null = null\n\n child: Extendable | null = null\n\n name = ''\n\n config: Config = {\n name: this.name,\n } as Config\n\n constructor(config: Partial<Config> = {}) {\n this.config = {\n ...this.config,\n ...config,\n }\n\n this.name = (this.config as any).name\n }\n\n get options(): Options {\n return {\n ...(callOrReturn(\n getExtensionField<AnyConfig['addOptions']>(this as any, 'addOptions', {\n name: this.name,\n }),\n ) || {}),\n }\n }\n\n get storage(): Readonly<Storage> {\n return {\n ...(callOrReturn(\n getExtensionField<AnyConfig['addStorage']>(this as any, 'addStorage', {\n name: this.name,\n options: this.options,\n }),\n ) || {}),\n }\n }\n\n configure(options: Partial<Options> = {}) {\n const extension = this.extend<Options, Storage, Config>({\n ...this.config,\n addOptions: () => {\n return mergeDeep(this.options as Record<string, any>, options) as Options\n },\n })\n\n extension.name = this.name\n extension.parent = this.parent\n\n return extension\n }\n\n extend<\n ExtendedOptions = Options,\n ExtendedStorage = Storage,\n ExtendedConfig =\n | ExtensionConfig<ExtendedOptions, ExtendedStorage>\n | NodeConfig<ExtendedOptions, ExtendedStorage>\n | MarkConfig<ExtendedOptions, ExtendedStorage>,\n >(extendedConfig: Partial<ExtendedConfig> = {}): Extendable<ExtendedOptions, ExtendedStorage> {\n const extension = new (this.constructor as any)({ ...this.config, ...extendedConfig })\n\n extension.parent = this\n this.child = extension\n extension.name = 'name' in extendedConfig ? extendedConfig.name : extension.parent.name\n\n return extension\n }\n}\n","export { ClipboardTextSerializer } from './clipboardTextSerializer.js'\nexport { Commands } from './commands.js'\nexport { Delete } from './delete.js'\nexport { Drop } from './drop.js'\nexport { Editable } from './editable.js'\nexport { FocusEvents, focusEventsPluginKey } from './focusEvents.js'\nexport { Keymap } from './keymap.js'\nexport { Paste } from './paste.js'\nexport { Tabindex } from './tabindex.js'\nexport { TextDirection } from './textDirection.js'\n","import type { Editor } from './Editor.js'\nimport { type ExtendableConfig, Extendable } from './Extendable.js'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface ExtensionConfig<Options = any, Storage = any>\n extends ExtendableConfig<Options, Storage, ExtensionConfig<Options, Storage>, null> {}\n\n/**\n * The Extension class is the base class for all extensions.\n * @see https://tiptap.dev/api/extensions#create-a-new-extension\n */\nexport class Extension<Options = any, Storage = any> extends Extendable<\n Options,\n Storage,\n ExtensionConfig<Options, Storage>\n> {\n type = 'extension'\n\n /**\n * Create a new Extension instance\n * @param config - Extension configuration object or a function that returns a configuration object\n */\n static create<O = any, S = any>(\n config: Partial<ExtensionConfig<O, S>> | (() => Partial<ExtensionConfig<O, S>>) = {},\n ) {\n // If the config is a function, execute it to get the configuration object\n const resolvedConfig = typeof config === 'function' ? config() : config\n return new Extension<O, S>(resolvedConfig)\n }\n\n configure(options?: Partial<Options>) {\n return super.configure(options) as Extension<Options, Storage>\n }\n\n extend<\n ExtendedOptions = Options,\n ExtendedStorage = Storage,\n ExtendedConfig = ExtensionConfig<ExtendedOptions, ExtendedStorage>,\n >(\n extendedConfig?:\n | (() => Partial<ExtendedConfig>)\n | (Partial<ExtendedConfig> &\n ThisType<{\n name: string\n options: ExtendedOptions\n storage: ExtendedStorage\n editor: Editor\n type: null\n }>),\n ): Extension<ExtendedOptions, ExtendedStorage> {\n // If the extended config is a function, execute it to get the configuration object\n const resolvedConfig = typeof extendedConfig === 'function' ? extendedConfig() : extendedConfig\n return super.extend(resolvedConfig) as Extension<ExtendedOptions, ExtendedStorage>\n }\n}\n","import { Plugin, PluginKey } from '@tiptap/pm/state'\n\nimport { Extension } from '../Extension.js'\nimport { getTextBetween } from '../helpers/getTextBetween.js'\nimport { getTextSerializersFromSchema } from '../helpers/getTextSerializersFromSchema.js'\n\nexport type ClipboardTextSerializerOptions = {\n blockSeparator?: string\n}\n\nexport const ClipboardTextSerializer = Extension.create<ClipboardTextSerializerOptions>({\n name: 'clipboardTextSerializer',\n\n addOptions() {\n return {\n blockSeparator: undefined,\n }\n },\n\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('clipboardTextSerializer'),\n props: {\n clipboardTextSerializer: () => {\n const { editor } = this\n const { state, schema } = editor\n const { doc, selection } = state\n const { ranges } = selection\n const from = Math.min(...ranges.map(range => range.$from.pos))\n const to = Math.max(...ranges.map(range => range.$to.pos))\n const textSerializers = getTextSerializersFromSchema(schema)\n const range = { from, to }\n\n return getTextBetween(doc, range, {\n ...(this.options.blockSeparator !== undefined ? { blockSeparator: this.options.blockSeparator } : {}),\n textSerializers,\n })\n },\n },\n }),\n ]\n },\n})\n","import * as commands from '../commands/index.js'\nimport { Extension } from '../Extension.js'\n\nexport * from '../commands/index.js'\n\nexport const Commands = Extension.create({\n name: 'commands',\n\n addCommands() {\n return {\n ...commands,\n }\n },\n})\n","import { RemoveMarkStep } from '@tiptap/pm/transform'\n\nimport { Extension } from '../Extension.js'\nimport { combineTransactionSteps, getChangedRanges } from '../helpers/index.js'\n\n/**\n * This extension allows you to be notified when the user deletes content you are interested in.\n */\nexport const Delete = Extension.create({\n name: 'delete',\n\n onUpdate({ transaction, appendedTransactions }) {\n const callback = () => {\n if (\n this.editor.options.coreExtensionOptions?.delete?.filterTransaction?.(transaction) ??\n transaction.getMeta('y-sync$')\n ) {\n return\n }\n const nextTransaction = combineTransactionSteps(transaction.before, [transaction, ...appendedTransactions])\n const changes = getChangedRanges(nextTransaction)\n\n changes.forEach(change => {\n if (\n nextTransaction.mapping.mapResult(change.oldRange.from).deletedAfter &&\n nextTransaction.mapping.mapResult(change.oldRange.to).deletedBefore\n ) {\n nextTransaction.before.nodesBetween(change.oldRange.from, change.oldRange.to, (node, from) => {\n const to = from + node.nodeSize - 2\n const isFullyWithinRange = change.oldRange.from <= from && to <= change.oldRange.to\n\n this.editor.emit('delete', {\n type: 'node',\n node,\n from,\n to,\n newFrom: nextTransaction.mapping.map(from),\n newTo: nextTransaction.mapping.map(to),\n deletedRange: change.oldRange,\n newRange: change.newRange,\n partial: !isFullyWithinRange,\n editor: this.editor,\n transaction,\n combinedTransform: nextTransaction,\n })\n })\n }\n })\n\n const mapping = nextTransaction.mapping\n nextTransaction.steps.forEach((step, index) => {\n if (step instanceof RemoveMarkStep) {\n const newStart = mapping.slice(index).map(step.from, -1)\n const newEnd = mapping.slice(index).map(step.to)\n const oldStart = mapping.invert().map(newStart, -1)\n const oldEnd = mapping.invert().map(newEnd)\n\n const foundBeforeMark = nextTransaction.doc.nodeAt(newStart - 1)?.marks.some(mark => mark.eq(step.mark))\n const foundAfterMark = nextTransaction.doc.nodeAt(newEnd)?.marks.some(mark => mark.eq(step.mark))\n\n this.editor.emit('delete', {\n type: 'mark',\n mark: step.mark,\n from: step.from,\n to: step.to,\n deletedRange: {\n from: oldStart,\n to: oldEnd,\n },\n newRange: {\n from: newStart,\n to: newEnd,\n },\n partial: Boolean(foundAfterMark || foundBeforeMark),\n editor: this.editor,\n transaction,\n combinedTransform: nextTransaction,\n })\n }\n })\n }\n\n if (this.editor.options.coreExtensionOptions?.delete?.async ?? true) {\n setTimeout(callback, 0)\n } else {\n callback()\n }\n },\n})\n","import { Plugin, PluginKey } from '@tiptap/pm/state'\n\nimport { Extension } from '../Extension.js'\n\nexport const Drop = Extension.create({\n name: 'drop',\n\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('tiptapDrop'),\n\n props: {\n handleDrop: (_, e, slice, moved) => {\n this.editor.emit('drop', {\n editor: this.editor,\n event: e,\n slice,\n moved,\n })\n },\n },\n }),\n ]\n },\n})\n","import { Plugin, PluginKey } from '@tiptap/pm/state'\n\nimport { Extension } from '../Extension.js'\n\nexport const Editable = Extension.create({\n name: 'editable',\n\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('editable'),\n props: {\n editable: () => this.editor.options.editable,\n },\n }),\n ]\n },\n})\n","import { Plugin, PluginKey } from '@tiptap/pm/state'\n\nimport { Extension } from '../Extension.js'\n\nexport const focusEventsPluginKey = new PluginKey('focusEvents')\n\nexport const FocusEvents = Extension.create({\n name: 'focusEvents',\n\n addProseMirrorPlugins() {\n const { editor } = this\n\n return [\n new Plugin({\n key: focusEventsPluginKey,\n props: {\n handleDOMEvents: {\n focus: (view, event: Event) => {\n editor.isFocused = true\n\n const transaction = editor.state.tr.setMeta('focus', { event }).setMeta('addToHistory', false)\n\n view.dispatch(transaction)\n\n return false\n },\n blur: (view, event: Event) => {\n editor.isFocused = false\n\n const transaction = editor.state.tr.setMeta('blur', { event }).setMeta('addToHistory', false)\n\n view.dispatch(transaction)\n\n return false\n },\n },\n },\n }),\n ]\n },\n})\n","import { Plugin, PluginKey, Selection } from '@tiptap/pm/state'\n\nimport { CommandManager } from '../CommandManager.js'\nimport { Extension } from '../Extension.js'\nimport { createChainableState } from '../helpers/createChainableState.js'\nimport { isNodeEmpty } from '../helpers/isNodeEmpty.js'\nimport { isiOS } from '../utilities/isiOS.js'\nimport { isMacOS } from '../utilities/isMacOS.js'\n\nexport const Keymap = Extension.create({\n name: 'keymap',\n\n addKeyboardShortcuts() {\n const handleBackspace = () =>\n this.editor.commands.first(({ commands }) => [\n () => commands.undoInputRule(),\n\n // maybe convert first text block node to default node\n () =>\n commands.command(({ tr }) => {\n const { selection, doc } = tr\n const { empty, $anchor } = selection\n const { pos, parent } = $anchor\n const $parentPos = $anchor.parent.isTextblock && pos > 0 ? tr.doc.resolve(pos - 1) : $anchor\n const parentIsIsolating = $parentPos.parent.type.spec.isolating\n\n const parentPos = $anchor.pos - $anchor.parentOffset\n\n const isAtStart =\n parentIsIsolating && $parentPos.parent.childCount === 1\n ? parentPos === $anchor.pos\n : Selection.atStart(doc).from === pos\n\n if (\n !empty ||\n !parent.type.isTextblock ||\n parent.textContent.length ||\n !isAtStart ||\n (isAtStart && $anchor.parent.type.name === 'paragraph') // prevent clearNodes when no nodes to clear, otherwise history stack is appended\n ) {\n return false\n }\n\n return commands.clearNodes()\n }),\n\n () => commands.deleteSelection(),\n () => commands.joinBackward(),\n () => commands.selectNodeBackward(),\n ])\n\n const handleDelete = () =>\n this.editor.commands.first(({ commands }) => [\n () => commands.deleteSelection(),\n () => commands.deleteCurrentNode(),\n () => commands.joinForward(),\n () => commands.selectNodeForward(),\n ])\n\n const handleEnter = () =>\n this.editor.commands.first(({ commands }) => [\n () => commands.newlineInCode(),\n () => commands.createParagraphNear(),\n () => commands.liftEmptyBlock(),\n () => commands.splitBlock(),\n ])\n\n const baseKeymap = {\n Enter: handleEnter,\n 'Mod-Enter': () => this.editor.commands.exitCode(),\n Backspace: handleBackspace,\n 'Mod-Backspace': handleBackspace,\n 'Shift-Backspace': handleBackspace,\n Delete: handleDelete,\n 'Mod-Delete': handleDelete,\n 'Mod-a': () => this.editor.commands.selectAll(),\n }\n\n const pcKeymap = {\n ...baseKeymap,\n }\n\n const macKeymap = {\n ...baseKeymap,\n 'Ctrl-h': handleBackspace,\n 'Alt-Backspace': handleBackspace,\n 'Ctrl-d': handleDelete,\n 'Ctrl-Alt-Backspace': handleDelete,\n 'Alt-Delete': handleDelete,\n 'Alt-d': handleDelete,\n 'Ctrl-a': () => this.editor.commands.selectTextblockStart(),\n 'Ctrl-e': () => this.editor.commands.selectTextblockEnd(),\n }\n\n if (isiOS() || isMacOS()) {\n return macKeymap\n }\n\n return pcKeymap\n },\n\n addProseMirrorPlugins() {\n return [\n // With this plugin we check if the whole document was selected and deleted.\n // In this case we will additionally call `clearNodes()` to convert e.g. a heading\n // to a paragraph if necessary.\n // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well\n // with many other commands.\n new Plugin({\n key: new PluginKey('clearDocument'),\n appendTransaction: (transactions, oldState, newState) => {\n if (transactions.some(tr => tr.getMeta('composition'))) {\n return\n }\n\n const docChanges = transactions.some(transaction => transaction.docChanged) && !oldState.doc.eq(newState.doc)\n\n const ignoreTr = transactions.some(transaction => transaction.getMeta('preventClearDocument'))\n\n if (!docChanges || ignoreTr) {\n return\n }\n\n const { empty, from, to } = oldState.selection\n const allFrom = Selection.atStart(oldState.doc).from\n const allEnd = Selection.atEnd(oldState.doc).to\n const allWasSelected = from === allFrom && to === allEnd\n\n if (empty || !allWasSelected) {\n return\n }\n\n const isEmpty = isNodeEmpty(newState.doc)\n\n if (!isEmpty) {\n return\n }\n\n const tr = newState.tr\n const state = createChainableState({\n state: newState,\n transaction: tr,\n })\n const { commands } = new CommandManager({\n editor: this.editor,\n state,\n })\n\n commands.clearNodes()\n\n if (!tr.steps.length) {\n return\n }\n\n return tr\n },\n }),\n ]\n },\n})\n","import { Plugin, PluginKey } from '@tiptap/pm/state'\n\nimport { Extension } from '../Extension.js'\n\nexport const Paste = Extension.create({\n name: 'paste',\n\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('tiptapPaste'),\n\n props: {\n handlePaste: (_view, e, slice) => {\n this.editor.emit('paste', {\n editor: this.editor,\n event: e,\n slice,\n })\n },\n },\n }),\n ]\n },\n})\n","import { Plugin, PluginKey } from '@tiptap/pm/state'\n\nimport { Extension } from '../Extension.js'\n\nexport const Tabindex = Extension.create({\n name: 'tabindex',\n\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('tabindex'),\n props: {\n attributes: (): { [name: string]: string } => (this.editor.isEditable ? { tabindex: '0' } : {}),\n },\n }),\n ]\n },\n})\n","import { Plugin, PluginKey } from '@tiptap/pm/state'\n\nimport { Extension } from '../Extension.js'\nimport { splitExtensions } from '../helpers/splitExtensions.js'\n\nexport interface TextDirectionOptions {\n direction: 'ltr' | 'rtl' | 'auto' | undefined\n}\n\n/**\n * The TextDirection extension adds support for setting text direction (LTR/RTL/auto)\n * on all nodes in the editor.\n *\n * This extension adds a global `dir` attribute to all node types, which can be used\n * to control bidirectional text rendering. The direction can be set globally via\n * editor options or per-node using commands.\n */\nexport const TextDirection = Extension.create<TextDirectionOptions>({\n name: 'textDirection',\n\n addOptions() {\n return {\n direction: undefined,\n }\n },\n\n addGlobalAttributes() {\n // Only add the dir attribute to nodes if text direction is configured\n // This prevents null/undefined values from appearing in JSON exports\n if (!this.options.direction) {\n return []\n }\n\n const { nodeExtensions } = splitExtensions(this.extensions)\n\n return [\n {\n types: nodeExtensions.filter(extension => extension.name !== 'text').map(extension => extension.name),\n attributes: {\n dir: {\n default: this.options.direction,\n parseHTML: element => {\n const dir = element.getAttribute('dir')\n\n if (dir && (dir === 'ltr' || dir === 'rtl' || dir === 'auto')) {\n return dir\n }\n\n return this.options.direction\n },\n renderHTML: attributes => {\n if (!attributes.dir) {\n return {}\n }\n\n return {\n dir: attributes.dir,\n }\n },\n },\n },\n },\n ]\n },\n\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('textDirection'),\n props: {\n attributes: (): { [name: string]: string } => {\n const direction = this.options.direction\n\n if (!direction) {\n return {}\n }\n\n return {\n dir: direction,\n }\n },\n },\n }),\n ]\n },\n})\n","/**\n * @fileoverview Markdown utilities for creating standardized markdown specs.\n *\n * This module provides utilities for creating complete markdown specifications\n * for different types of nodes using unified syntax patterns.\n */\n\nexport * from './attributeUtils.js'\nexport * from './createAtomBlockMarkdownSpec.js'\nexport * from './createBlockMarkdownSpec.js'\nexport * from './createInlineMarkdownSpec.js'\nexport * from './parseIndentedBlocks.js'\nexport * from './renderNestedMarkdownContent.js'\n","/**\n * @fileoverview Utility functions for parsing and serializing markdown attributes.\n *\n * These utilities handle the common patterns for parsing attribute strings\n * in various markdown syntaxes like Pandoc attributes.\n */\n\n/**\n * Parses a Pandoc-style attribute string into an object.\n *\n * Supports the following patterns:\n * - Classes: `.className` → `{ class: 'className' }`\n * - IDs: `#myId` → `{ id: 'myId' }`\n * - Key-value pairs: `key=\"value\"` → `{ key: 'value' }`\n * - Boolean attributes: `disabled` → `{ disabled: true }`\n *\n * @param attrString - The attribute string to parse\n * @returns Parsed attributes object\n *\n * @example\n * ```ts\n * parseAttributes('.btn #submit disabled type=\"button\"')\n * // → { class: 'btn', id: 'submit', disabled: true, type: 'button' }\n * ```\n */\nexport function parseAttributes(attrString: string): Record<string, any> {\n if (!attrString?.trim()) {\n return {}\n }\n\n const attributes: Record<string, any> = {}\n\n // First, extract and remove quoted strings to avoid parsing content inside them\n const quotedStrings: string[] = []\n const tempString = attrString.replace(/[\"']([^\"']*)[\"']/g, match => {\n quotedStrings.push(match)\n return `__QUOTED_${quotedStrings.length - 1}__`\n })\n\n // Parse classes (.className) - only outside of quoted strings\n const classMatches = tempString.match(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g)\n if (classMatches) {\n const classes = classMatches.map(match => match.trim().slice(1)) // Remove the dot\n attributes.class = classes.join(' ')\n }\n\n // Parse IDs (#myId) - only outside of quoted strings\n const idMatch = tempString.match(/(?:^|\\s)#([a-zA-Z][\\w-]*)/)\n if (idMatch) {\n attributes.id = idMatch[1]\n }\n\n // Parse key-value pairs (key=\"value\" or key='value') - restore quoted strings\n const kvRegex = /([a-zA-Z][\\w-]*)\\s*=\\s*(__QUOTED_\\d+__)/g\n const kvMatches = Array.from(tempString.matchAll(kvRegex))\n kvMatches.forEach(([, key, quotedRef]) => {\n const quotedIndex = parseInt(quotedRef.match(/__QUOTED_(\\d+)__/)?.[1] || '0', 10)\n const quotedValue = quotedStrings[quotedIndex]\n if (quotedValue) {\n // Remove the outer quotes\n attributes[key] = quotedValue.slice(1, -1)\n }\n })\n\n // Parse boolean attributes (standalone words that aren't classes/IDs)\n const cleanString = tempString\n .replace(/(?:^|\\s)\\.([a-zA-Z][\\w-]*)/g, '') // Remove classes\n .replace(/(?:^|\\s)#([a-zA-Z][\\w-]*)/g, '') // Remove IDs\n .replace(/([a-zA-Z][\\w-]*)\\s*=\\s*__QUOTED_\\d+__/g, '') // Remove key-value pairs\n .trim()\n\n if (cleanString) {\n const booleanAttrs = cleanString.split(/\\s+/).filter(Boolean)\n booleanAttrs.forEach(attr => {\n if (attr.match(/^[a-zA-Z][\\w-]*$/)) {\n attributes[attr] = true\n }\n })\n }\n\n return attributes\n}\n\n/**\n * Serializes an attributes object back to a Pandoc-style attribute string.\n *\n * @param attributes - The attributes object to serialize\n * @returns Serialized attribute string\n *\n * @example\n * ```ts\n * serializeAttributes({ class: 'btn primary', id: 'submit', disabled: true, type: 'button' })\n * // → '.btn.primary #submit disabled type=\"button\"'\n * ```\n */\nexport function serializeAttributes(attributes: Record<string, any>): string {\n if (!attributes || Object.keys(attributes).length === 0) {\n return ''\n }\n\n const parts: string[] = []\n\n // Handle classes\n if (attributes.class) {\n const classes = String(attributes.class).split(/\\s+/).filter(Boolean)\n classes.forEach(cls => parts.push(`.${cls}`))\n }\n\n // Handle ID\n if (attributes.id) {\n parts.push(`#${attributes.id}`)\n }\n\n // Handle other attributes\n Object.entries(attributes).forEach(([key, value]) => {\n if (key === 'class' || key === 'id') {\n return // Already handled\n }\n\n if (value === true) {\n // Boolean attribute\n parts.push(key)\n } else if (value !== false && value != null) {\n // Key-value attribute\n parts.push(`${key}=\"${String(value)}\"`)\n }\n })\n\n return parts.join(' ')\n}\n","import type {\n JSONContent,\n MarkdownParseHelpers,\n MarkdownParseResult,\n MarkdownToken,\n MarkdownTokenizer,\n} from '../../types.js'\nimport {\n parseAttributes as defaultParseAttributes,\n serializeAttributes as defaultSerializeAttributes,\n} from './attributeUtils.js'\n\nexport interface AtomBlockMarkdownSpecOptions {\n /** The Tiptap node name this spec is for */\n nodeName: string\n /** The markdown syntax name (defaults to nodeName if not provided) */\n name?: string\n /** Function to parse attributes from token attribute string */\n parseAttributes?: (attrString: string) => Record<string, any>\n /** Function to serialize attributes back to string for rendering */\n serializeAttributes?: (attrs: Record<string, any>) => string\n /** Default attributes to apply when parsing */\n defaultAttributes?: Record<string, any>\n /** Required attributes that must be present for successful parsing */\n requiredAttributes?: string[]\n /** Attributes that are allowed to be rendered back to markdown (whitelist) */\n allowedAttributes?: string[]\n}\n\n/**\n * Creates a complete markdown spec for atomic block nodes using Pandoc syntax.\n *\n * The generated spec handles:\n * - Parsing self-closing blocks with `:::blockName {attributes}`\n * - Extracting and parsing attributes\n * - Validating required attributes\n * - Rendering blocks back to markdown\n *\n * @param options - Configuration for the atomic block markdown spec\n * @returns Complete markdown specification object\n *\n * @example\n * ```ts\n * const youtubeSpec = createAtomBlockMarkdownSpec({\n * nodeName: 'youtube',\n * requiredAttributes: ['src'],\n * defaultAttributes: { start: 0 },\n * allowedAttributes: ['src', 'start', 'width', 'height'] // Only these get rendered to markdown\n * })\n *\n * // Usage in extension:\n * export const Youtube = Node.create({\n * // ... other config\n * markdown: youtubeSpec\n * })\n * ```\n */\nexport function createAtomBlockMarkdownSpec(options: AtomBlockMarkdownSpecOptions): {\n parseMarkdown: (token: MarkdownToken, h: MarkdownParseHelpers) => MarkdownParseResult\n markdownTokenizer: MarkdownTokenizer\n renderMarkdown: (node: JSONContent) => string\n} {\n const {\n nodeName,\n name: markdownName,\n parseAttributes = defaultParseAttributes,\n serializeAttributes = defaultSerializeAttributes,\n defaultAttributes = {},\n requiredAttributes = [],\n allowedAttributes,\n } = options\n\n // Use markdownName for syntax, fallback to nodeName\n const blockName = markdownName || nodeName\n\n // Helper function to filter attributes based on allowlist\n const filterAttributes = (attrs: Record<string, any>) => {\n if (!allowedAttributes) {\n return attrs\n }\n\n const filtered: Record<string, any> = {}\n allowedAttributes.forEach(key => {\n if (key in attrs) {\n filtered[key] = attrs[key]\n }\n })\n return filtered\n }\n\n return {\n parseMarkdown: (token: MarkdownToken, h: MarkdownParseHelpers) => {\n const attrs = { ...defaultAttributes, ...token.attributes }\n return h.createNode(nodeName, attrs, [])\n },\n\n markdownTokenizer: {\n name: nodeName,\n level: 'block' as const,\n start(src: string) {\n const regex = new RegExp(`^:::${blockName}(?:\\\\s|$)`, 'm')\n const index = src.match(regex)?.index\n return index !== undefined ? index : -1\n },\n tokenize(src, _tokens, _lexer) {\n // Use non-global regex to match from the start of the string\n // Include optional newline to ensure we consume the entire line\n const regex = new RegExp(`^:::${blockName}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*:::(?:\\\\n|$)`)\n const match = src.match(regex)\n\n if (!match) {\n return undefined\n }\n\n // Parse attributes if present\n const attrString = match[1] || ''\n const attributes = parseAttributes(attrString)\n\n // Validate required attributes\n const missingRequired = requiredAttributes.find(required => !(required in attributes))\n if (missingRequired) {\n return undefined\n }\n\n return {\n type: nodeName,\n raw: match[0],\n attributes,\n }\n },\n },\n\n renderMarkdown: node => {\n const filteredAttrs = filterAttributes(node.attrs || {})\n const attrs = serializeAttributes(filteredAttrs)\n const attrString = attrs ? ` {${attrs}}` : ''\n\n return `:::${blockName}${attrString} :::`\n },\n }\n}\n","import type {\n JSONContent,\n MarkdownParseHelpers,\n MarkdownParseResult,\n MarkdownRendererHelpers,\n MarkdownToken,\n MarkdownTokenizer,\n} from '../../types.js'\nimport {\n parseAttributes as defaultParseAttributes,\n serializeAttributes as defaultSerializeAttributes,\n} from './attributeUtils.js'\n\nexport interface BlockMarkdownSpecOptions {\n /** The Tiptap node name this spec is for */\n nodeName: string\n /** The markdown syntax name (defaults to nodeName if not provided) */\n name?: string\n /** Function to extract content from the node for serialization */\n getContent?: (token: MarkdownToken) => string\n /** Function to parse attributes from the attribute string */\n parseAttributes?: (attrString: string) => Record<string, any>\n /** Function to serialize attributes to string */\n serializeAttributes?: (attrs: Record<string, any>) => string\n /** Default attributes to apply when parsing */\n defaultAttributes?: Record<string, any>\n /** Content type: 'block' allows paragraphs/lists/etc, 'inline' only allows bold/italic/links/etc */\n content?: 'block' | 'inline'\n /** Allowlist of attributes to include in markdown (if not provided, all attributes are included) */\n allowedAttributes?: string[]\n}\n\n/**\n * Creates a complete markdown spec for block-level nodes using Pandoc syntax.\n *\n * The generated spec handles:\n * - Parsing blocks with `:::blockName {attributes}` syntax\n * - Extracting and parsing attributes\n * - Rendering blocks back to markdown with proper formatting\n * - Nested content support\n *\n * @param options - Configuration for the block markdown spec\n * @returns Complete markdown specification object\n *\n * @example\n * ```ts\n * const calloutSpec = createBlockMarkdownSpec({\n * nodeName: 'callout',\n * defaultAttributes: { type: 'info' },\n * allowedAttributes: ['type', 'title'] // Only these get rendered to markdown\n * })\n *\n * // Usage in extension:\n * export const Callout = Node.create({\n * // ... other config\n * markdown: calloutSpec\n * })\n * ```\n */\nexport function createBlockMarkdownSpec(options: BlockMarkdownSpecOptions): {\n parseMarkdown: (token: MarkdownToken, h: MarkdownParseHelpers) => MarkdownParseResult\n markdownTokenizer: MarkdownTokenizer\n renderMarkdown: (node: JSONContent, h: MarkdownRendererHelpers) => string\n} {\n const {\n nodeName,\n name: markdownName,\n getContent,\n parseAttributes = defaultParseAttributes,\n serializeAttributes = defaultSerializeAttributes,\n defaultAttributes = {},\n content = 'block',\n allowedAttributes,\n } = options\n\n // Use markdownName for syntax, fallback to nodeName\n const blockName = markdownName || nodeName\n\n // Helper function to filter attributes based on allowlist\n const filterAttributes = (attrs: Record<string, any>) => {\n if (!allowedAttributes) {\n return attrs\n }\n\n const filtered: Record<string, any> = {}\n allowedAttributes.forEach(key => {\n if (key in attrs) {\n filtered[key] = attrs[key]\n }\n })\n return filtered\n }\n\n return {\n parseMarkdown: (token, h) => {\n let nodeContent: JSONContent[]\n\n if (getContent) {\n const contentResult = getContent(token)\n // If getContent returns a string, wrap it in a text node\n nodeContent = typeof contentResult === 'string' ? [{ type: 'text', text: contentResult }] : contentResult\n } else if (content === 'block') {\n nodeContent = h.parseChildren(token.tokens || [])\n } else {\n nodeContent = h.parseInline(token.tokens || [])\n }\n\n const attrs = { ...defaultAttributes, ...token.attributes }\n\n return h.createNode(nodeName, attrs, nodeContent)\n },\n\n markdownTokenizer: {\n name: nodeName,\n level: 'block' as const,\n start(src) {\n const regex = new RegExp(`^:::${blockName}`, 'm')\n const index = src.match(regex)?.index\n return index !== undefined ? index : -1\n },\n tokenize(src, _tokens, lexer) {\n // Match the opening tag with optional attributes\n const openingRegex = new RegExp(`^:::${blockName}(?:\\\\s+\\\\{([^}]*)\\\\})?\\\\s*\\\\n`)\n const openingMatch = src.match(openingRegex)\n\n if (!openingMatch) {\n return undefined\n }\n\n const [openingTag, attrString = ''] = openingMatch\n const attributes = parseAttributes(attrString)\n\n // Find the matching closing tag by tracking nesting level\n let level = 1\n const position = openingTag.length\n let matchedContent = ''\n\n // Pattern to match any block opening (:::word) or closing (:::)\n const blockPattern = /^:::([\\w-]*)(\\s.*)?/gm\n const remaining = src.slice(position)\n\n blockPattern.lastIndex = 0\n\n // run until no more matches are found\n for (;;) {\n const match = blockPattern.exec(remaining)\n if (match === null) {\n break\n }\n const matchPos = match.index\n const blockType = match[1] // Empty string for closing tag, block name for opening\n\n if (match[2]?.endsWith(':::')) {\n // this is an atom ::: node, we skip it\n continue\n }\n\n if (blockType) {\n // Opening tag found - increase level\n level += 1\n } else {\n // Closing tag found - decrease level\n level -= 1\n\n if (level === 0) {\n // Found our matching closing tag\n // Don't trim yet - keep newlines for tokenizer regex matching\n const rawContent = remaining.slice(0, matchPos)\n matchedContent = rawContent.trim()\n const fullMatch = src.slice(0, position + matchPos + match[0].length)\n\n // Tokenize the content\n let contentTokens: MarkdownToken[] = []\n if (matchedContent) {\n if (content === 'block') {\n // Use rawContent for tokenization to preserve line boundaries for regex matching\n contentTokens = lexer.blockTokens(rawContent)\n\n // Parse inline tokens for any token that has text content but no tokens\n contentTokens.forEach(token => {\n if (token.text && (!token.tokens || token.tokens.length === 0)) {\n token.tokens = lexer.inlineTokens(token.text)\n }\n })\n\n // Clean up empty trailing paragraphs\n while (contentTokens.length > 0) {\n const lastToken = contentTokens[contentTokens.length - 1]\n if (lastToken.type === 'paragraph' && (!lastToken.text || lastToken.text.trim() === '')) {\n contentTokens.pop()\n } else {\n break\n }\n }\n } else {\n contentTokens = lexer.inlineTokens(matchedContent)\n }\n }\n\n return {\n type: nodeName,\n raw: fullMatch,\n attributes,\n content: matchedContent,\n tokens: contentTokens,\n }\n }\n }\n }\n\n // No matching closing tag found\n return undefined\n },\n },\n\n renderMarkdown: (node, h) => {\n const filteredAttrs = filterAttributes(node.attrs || {})\n const attrs = serializeAttributes(filteredAttrs)\n const attrString = attrs ? ` {${attrs}}` : ''\n const renderedContent = h.renderChildren(node.content || [], '\\n\\n')\n\n return `:::${blockName}${attrString}\\n\\n${renderedContent}\\n\\n:::`\n },\n }\n}\n","import type {\n JSONContent,\n MarkdownParseHelpers,\n MarkdownParseResult,\n MarkdownToken,\n MarkdownTokenizer,\n} from '../../types.js'\n\n/**\n * Parse shortcode attributes like 'id=\"madonna\" handle=\"john\" name=\"John Doe\"'\n * Requires all values to be quoted with either single or double quotes\n */\nfunction parseShortcodeAttributes(attrString: string): Record<string, any> {\n if (!attrString.trim()) {\n return {}\n }\n\n const attributes: Record<string, any> = {}\n // Match key=value pairs, only accepting quoted values\n const regex = /(\\w+)=(?:\"([^\"]*)\"|'([^']*)')/g\n let match = regex.exec(attrString)\n\n while (match !== null) {\n const [, key, doubleQuoted, singleQuoted] = match\n attributes[key] = doubleQuoted || singleQuoted\n match = regex.exec(attrString)\n }\n\n return attributes\n}\n\n/**\n * Serialize attributes back to shortcode format\n * Always quotes all values with double quotes\n */\nfunction serializeShortcodeAttributes(attrs: Record<string, any>): string {\n return Object.entries(attrs)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ')\n}\n\n/**\n * Configuration for an allowed attribute in markdown serialization.\n * Can be a simple string (attribute name) or an object with additional options.\n */\nexport type AllowedAttribute =\n | string\n | {\n /** The attribute name */\n name: string\n /**\n * If provided, the attribute will be skipped during serialization when its value\n * equals this default value. This keeps markdown output clean by omitting\n * attributes that have their default values.\n */\n skipIfDefault?: any\n }\n\nexport interface InlineMarkdownSpecOptions {\n /** The Tiptap node name this spec is for */\n nodeName: string\n /** The shortcode name (defaults to nodeName if not provided) */\n name?: string\n /** Function to extract content from the node for serialization */\n getContent?: (node: any) => string\n /** Function to parse attributes from the attribute string */\n parseAttributes?: (attrString: string) => Record<string, any>\n /** Function to serialize attributes to string */\n serializeAttributes?: (attrs: Record<string, any>) => string\n /** Default attributes to apply when parsing */\n defaultAttributes?: Record<string, any>\n /** Whether this is a self-closing shortcode (no content, like [emoji name=party]) */\n selfClosing?: boolean\n /**\n * Allowlist of attributes to include in markdown serialization.\n * If not provided, all attributes are included.\n *\n * Each item can be either:\n * - A string: the attribute name (always included if present)\n * - An object: `{ name: string, skipIfDefault?: any }` for conditional inclusion\n *\n * @example\n * // Simple string attributes (backward compatible)\n * allowedAttributes: ['id', 'label']\n *\n * // Mixed with conditional attributes\n * allowedAttributes: [\n * 'id',\n * 'label',\n * { name: 'mentionSuggestionChar', skipIfDefault: '@' }\n * ]\n */\n allowedAttributes?: AllowedAttribute[]\n}\n\n/**\n * Creates a complete markdown spec for inline nodes using attribute syntax.\n *\n * The generated spec handles:\n * - Parsing shortcode syntax with `[nodeName attributes]content[/nodeName]` format\n * - Self-closing shortcodes like `[emoji name=party_popper]`\n * - Extracting and parsing attributes from the opening tag\n * - Rendering inline elements back to shortcode markdown\n * - Supporting both content-based and self-closing inline elements\n *\n * @param options - Configuration for the inline markdown spec\n * @returns Complete markdown specification object\n *\n * @example\n * ```ts\n * // Self-closing mention: [mention id=\"madonna\" label=\"Madonna\"]\n * const mentionSpec = createInlineMarkdownSpec({\n * nodeName: 'mention',\n * selfClosing: true,\n * defaultAttributes: { type: 'user' },\n * allowedAttributes: ['id', 'label'] // Only these get rendered to markdown\n * })\n *\n * // Self-closing emoji: [emoji name=\"party_popper\"]\n * const emojiSpec = createInlineMarkdownSpec({\n * nodeName: 'emoji',\n * selfClosing: true,\n * allowedAttributes: ['name']\n * })\n *\n * // With content: [highlight color=\"yellow\"]text[/highlight]\n * const highlightSpec = createInlineMarkdownSpec({\n * nodeName: 'highlight',\n * selfClosing: false,\n * allowedAttributes: ['color', 'style']\n * })\n *\n * // Usage in extension:\n * export const Mention = Node.create({\n * name: 'mention', // Must match nodeName\n * // ... other config\n * markdown: mentionSpec\n * })\n * ```\n */\nexport function createInlineMarkdownSpec(options: InlineMarkdownSpecOptions): {\n parseMarkdown: (token: MarkdownToken, h: MarkdownParseHelpers) => MarkdownParseResult\n markdownTokenizer: MarkdownTokenizer\n renderMarkdown: (node: JSONContent) => string\n} {\n const {\n nodeName,\n name: shortcodeName,\n getContent,\n parseAttributes = parseShortcodeAttributes,\n serializeAttributes = serializeShortcodeAttributes,\n defaultAttributes = {},\n selfClosing = false,\n allowedAttributes,\n } = options\n\n // Use shortcodeName for markdown syntax, fallback to nodeName\n const shortcode = shortcodeName || nodeName\n\n // Helper function to filter attributes based on allowlist\n const filterAttributes = (attrs: Record<string, any>) => {\n if (!allowedAttributes) {\n return attrs\n }\n\n const filtered: Record<string, any> = {}\n allowedAttributes.forEach(attr => {\n // Handle both string and object formats for backward compatibility\n const attrName = typeof attr === 'string' ? attr : attr.name\n const skipIfDefault = typeof attr === 'string' ? undefined : attr.skipIfDefault\n\n if (attrName in attrs) {\n const value = attrs[attrName]\n\n // Skip if value equals the default (when skipIfDefault is specified)\n if (skipIfDefault !== undefined && value === skipIfDefault) {\n return\n }\n\n filtered[attrName] = value\n }\n })\n return filtered\n }\n\n // Escape special regex characters in shortcode name\n const escapedShortcode = shortcode.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\n return {\n parseMarkdown: (token: MarkdownToken, h: MarkdownParseHelpers) => {\n const attrs = { ...defaultAttributes, ...token.attributes }\n\n if (selfClosing) {\n // Self-closing nodes like mentions are atomic - no content\n return h.createNode(nodeName, attrs)\n }\n\n // Nodes with content\n const content = getContent ? getContent(token) : token.content || ''\n if (content) {\n // For inline content, create text nodes using the proper helper\n return h.createNode(nodeName, attrs, [h.createTextNode(content)])\n }\n return h.createNode(nodeName, attrs, [])\n },\n\n markdownTokenizer: {\n name: nodeName,\n level: 'inline' as const,\n start(src: string) {\n // Create a non-global version for finding the start position\n const startPattern = selfClosing\n ? new RegExp(`\\\\[${escapedShortcode}\\\\s*[^\\\\]]*\\\\]`)\n : new RegExp(`\\\\[${escapedShortcode}\\\\s*[^\\\\]]*\\\\][\\\\s\\\\S]*?\\\\[\\\\/${escapedShortcode}\\\\]`)\n\n const match = src.match(startPattern)\n const index = match?.index\n return index !== undefined ? index : -1\n },\n tokenize(src, _tokens, _lexer) {\n // Use non-global regex to match from the start of the string\n const tokenPattern = selfClosing\n ? new RegExp(`^\\\\[${escapedShortcode}\\\\s*([^\\\\]]*)\\\\]`)\n : new RegExp(`^\\\\[${escapedShortcode}\\\\s*([^\\\\]]*)\\\\]([\\\\s\\\\S]*?)\\\\[\\\\/${escapedShortcode}\\\\]`)\n\n const match = src.match(tokenPattern)\n\n if (!match) {\n return undefined\n }\n\n let content = ''\n let attrString = ''\n\n if (selfClosing) {\n // Self-closing: [shortcode attr=\"value\"]\n const [, attrs] = match\n attrString = attrs\n } else {\n // With content: [shortcode attr=\"value\"]content[/shortcode]\n const [, attrs, contentMatch] = match\n attrString = attrs\n content = contentMatch || ''\n }\n\n // Parse attributes from the attribute string\n const attributes = parseAttributes(attrString.trim())\n\n return {\n type: nodeName,\n raw: match[0],\n content: content.trim(),\n attributes,\n }\n },\n },\n\n renderMarkdown: (node: JSONContent) => {\n let content = ''\n if (getContent) {\n content = getContent(node)\n } else if (node.content && node.content.length > 0) {\n // Extract text from content array for inline nodes\n content = node.content\n .filter((child: any) => child.type === 'text')\n .map((child: any) => child.text)\n .join('')\n }\n\n const filteredAttrs = filterAttributes(node.attrs || {})\n const attrs = serializeAttributes(filteredAttrs)\n const attrString = attrs ? ` ${attrs}` : ''\n\n if (selfClosing) {\n return `[${shortcode}${attrString}]`\n }\n\n return `[${shortcode}${attrString}]${content}[/${shortcode}]`\n },\n }\n}\n","/**\n * @fileoverview Utility for parsing indented markdown blocks with hierarchical nesting.\n *\n * This utility handles the complex logic of parsing markdown blocks that can contain\n * nested content based on indentation levels, maintaining proper hierarchical structure\n * for lists, task lists, and other indented block types.\n */\n\nexport interface ParsedBlock {\n type: string\n raw: string\n mainContent: string\n indentLevel: number\n nestedContent?: string\n nestedTokens?: any[]\n [key: string]: any\n}\n\nexport interface BlockParserConfig {\n /** Regex pattern to match block items */\n itemPattern: RegExp\n /** Function to extract data from regex match */\n extractItemData: (match: RegExpMatchArray) => {\n mainContent: string\n indentLevel: number\n [key: string]: any\n }\n /** Function to create the final token */\n createToken: (data: any, nestedTokens?: any[]) => ParsedBlock\n /** Base indentation to remove from nested content (default: 2 spaces) */\n baseIndentSize?: number\n /**\n * Custom parser for nested content. If provided, this will be called instead\n * of the default lexer.blockTokens() for parsing nested content.\n * This allows recursive parsing of the same block type.\n */\n customNestedParser?: (dedentedContent: string) => any[] | undefined\n}\n\n/**\n * Parses markdown text into hierarchical indented blocks with proper nesting.\n *\n * This utility handles:\n * - Line-by-line parsing with pattern matching\n * - Hierarchical nesting based on indentation levels\n * - Nested content collection and parsing\n * - Empty line handling\n * - Content dedenting for nested blocks\n *\n * The key difference from flat parsing is that this maintains the hierarchical\n * structure where nested items become `nestedTokens` of their parent items,\n * rather than being flattened into a single array.\n *\n * @param src - The markdown source text to parse\n * @param config - Configuration object defining how to parse and create tokens\n * @param lexer - Markdown lexer for parsing nested content\n * @returns Parsed result with hierarchical items, or undefined if no matches\n *\n * @example\n * ```ts\n * const result = parseIndentedBlocks(src, {\n * itemPattern: /^(\\s*)([-+*])\\s+\\[([ xX])\\]\\s+(.*)$/,\n * extractItemData: (match) => ({\n * indentLevel: match[1].length,\n * mainContent: match[4],\n * checked: match[3].toLowerCase() === 'x'\n * }),\n * createToken: (data, nestedTokens) => ({\n * type: 'taskItem',\n * checked: data.checked,\n * text: data.mainContent,\n * nestedTokens\n * })\n * }, lexer)\n * ```\n */\nexport function parseIndentedBlocks(\n src: string,\n config: BlockParserConfig,\n lexer: {\n inlineTokens: (src: string) => any[]\n blockTokens: (src: string) => any[]\n },\n):\n | {\n items: ParsedBlock[]\n raw: string\n }\n | undefined {\n const lines = src.split('\\n')\n const items: ParsedBlock[] = []\n let totalRaw = ''\n let i = 0\n const baseIndentSize = config.baseIndentSize || 2\n\n while (i < lines.length) {\n const currentLine = lines[i]\n const itemMatch = currentLine.match(config.itemPattern)\n\n if (!itemMatch) {\n // Not a matching item - stop if we have items, otherwise this isn't our block type\n if (items.length > 0) {\n break\n } else if (currentLine.trim() === '') {\n i += 1\n totalRaw = `${totalRaw}${currentLine}\\n`\n continue\n } else {\n return undefined\n }\n }\n\n const itemData = config.extractItemData(itemMatch)\n const { indentLevel, mainContent } = itemData\n totalRaw = `${totalRaw}${currentLine}\\n`\n\n // Collect content for this item (including nested items)\n const itemContent = [mainContent] // Start with the main text\n i += 1\n\n // Look ahead for nested content (indented more than current item)\n while (i < lines.length) {\n const nextLine = lines[i]\n\n if (nextLine.trim() === '') {\n // Empty line - might be end of nested content\n const nextNonEmptyIndex = lines.slice(i + 1).findIndex(l => l.trim() !== '')\n if (nextNonEmptyIndex === -1) {\n // No more content\n break\n }\n\n const nextNonEmpty = lines[i + 1 + nextNonEmptyIndex]\n const nextIndent = nextNonEmpty.match(/^(\\s*)/)?.[1]?.length || 0\n\n if (nextIndent > indentLevel) {\n // Nested content continues after empty line\n itemContent.push(nextLine)\n totalRaw = `${totalRaw}${nextLine}\\n`\n i += 1\n continue\n } else {\n // End of nested content\n break\n }\n }\n\n const nextIndent = nextLine.match(/^(\\s*)/)?.[1]?.length || 0\n\n if (nextIndent > indentLevel) {\n // This is nested content for the current item\n itemContent.push(nextLine)\n totalRaw = `${totalRaw}${nextLine}\\n`\n i += 1\n } else {\n // Same or less indentation - this belongs to parent level\n break\n }\n }\n\n // Parse nested content if present\n let nestedTokens: any[] | undefined\n const nestedContent = itemContent.slice(1)\n\n if (nestedContent.length > 0) {\n // Remove the base indentation from nested content\n const dedentedNested = nestedContent\n .map(nestedLine => nestedLine.slice(indentLevel + baseIndentSize)) // Remove base indent + 2 spaces\n .join('\\n')\n\n if (dedentedNested.trim()) {\n // Use custom nested parser if provided, otherwise fall back to default\n if (config.customNestedParser) {\n nestedTokens = config.customNestedParser(dedentedNested)\n } else {\n nestedTokens = lexer.blockTokens(dedentedNested)\n }\n }\n }\n\n // Create the token using the provided factory function\n const token = config.createToken(itemData, nestedTokens)\n items.push(token)\n }\n\n if (items.length === 0) {\n return undefined\n }\n\n return {\n items,\n raw: totalRaw,\n }\n}\n","import type { JSONContent } from '@tiptap/core'\n\n/**\n * @fileoverview Utility functions for rendering nested content in markdown.\n *\n * This module provides reusable utilities for extensions that need to render\n * content with a prefix on the main line and properly indented nested content.\n */\n\n/**\n * Utility function for rendering content with a main line prefix and nested indented content.\n *\n * This function handles the common pattern of rendering content with:\n * 1. A main line with a prefix (like \"- \" for lists, \"> \" for blockquotes, etc.)\n * 2. Nested content that gets indented properly\n *\n * @param node - The ProseMirror node representing the content\n * @param h - The markdown renderer helper\n * @param prefixOrGenerator - Either a string prefix or a function that generates the prefix from context\n * @param ctx - Optional context object (used when prefixOrGenerator is a function)\n * @returns The rendered markdown string\n *\n * @example\n * ```ts\n * // For a bullet list item with static prefix\n * return renderNestedMarkdownContent(node, h, '- ')\n *\n * // For a task item with static prefix\n * const prefix = `- [${node.attrs?.checked ? 'x' : ' '}] `\n * return renderNestedMarkdownContent(node, h, prefix)\n *\n * // For a blockquote with static prefix\n * return renderNestedMarkdownContent(node, h, '> ')\n *\n * // For content with dynamic prefix based on context\n * return renderNestedMarkdownContent(node, h, ctx => {\n * if (ctx.parentType === 'orderedList') {\n * return `${ctx.index + 1}. `\n * }\n * return '- '\n * }, ctx)\n *\n * // Custom extension example\n * const CustomContainer = Node.create({\n * name: 'customContainer',\n * // ... other config\n * markdown: {\n * render: (node, h) => {\n * const type = node.attrs?.type || 'info'\n * return renderNestedMarkdownContent(node, h, `[${type}] `)\n * }\n * }\n * })\n * ```\n */\nexport function renderNestedMarkdownContent(\n node: JSONContent,\n h: {\n renderChildren: (nodes: JSONContent[]) => string\n indent: (text: string) => string\n },\n prefixOrGenerator: string | ((ctx: any) => string),\n ctx?: any,\n): string {\n if (!node || !Array.isArray(node.content)) {\n return ''\n }\n\n // Determine the prefix based on the input\n const prefix = typeof prefixOrGenerator === 'function' ? prefixOrGenerator(ctx) : prefixOrGenerator\n\n const [content, ...children] = node.content\n\n // Render the main content (typically a paragraph)\n const mainContent = h.renderChildren([content])\n const output = [`${prefix}${mainContent}`]\n\n // Handle nested children with proper indentation\n if (children && children.length > 0) {\n children.forEach(child => {\n const childContent = h.renderChildren([child])\n if (childContent) {\n // Split the child content by lines and indent each line\n const indentedChild = childContent\n .split('\\n')\n .map(line => (line ? h.indent(line) : ''))\n .join('\\n')\n output.push(indentedChild)\n }\n })\n }\n\n return output.join('\\n')\n}\n","import type { DOMOutputSpec, Node as ProseMirrorNode, NodeSpec, NodeType } from '@tiptap/pm/model'\n\nimport type { Editor } from './Editor.js'\nimport type { ExtendableConfig } from './Extendable.js'\nimport { Extendable } from './Extendable.js'\nimport type { Attributes, NodeViewRenderer, ParentConfig } from './types.js'\n\nexport interface NodeConfig<Options = any, Storage = any>\n extends ExtendableConfig<Options, Storage, NodeConfig<Options, Storage>, NodeType> {\n /**\n * Node View\n */\n addNodeView?:\n | ((this: {\n name: string\n options: Options\n storage: Storage\n editor: Editor\n type: NodeType\n parent: ParentConfig<NodeConfig<Options, Storage>>['addNodeView']\n }) => NodeViewRenderer | null)\n | null\n\n /**\n * Defines if this node should be a top level node (doc)\n * @default false\n * @example true\n */\n topNode?: boolean\n\n /**\n * The content expression for this node, as described in the [schema\n * guide](/docs/guide/#schema.content_expressions). When not given,\n * the node does not allow any content.\n *\n * You can read more about it on the Prosemirror documentation here\n * @see https://prosemirror.net/docs/guide/#schema.content_expressions\n * @default undefined\n * @example content: 'block+'\n * @example content: 'headline paragraph block*'\n */\n content?:\n | NodeSpec['content']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['content']\n editor?: Editor\n }) => NodeSpec['content'])\n\n /**\n * The marks that are allowed inside of this node. May be a\n * space-separated string referring to mark names or groups, `\"_\"`\n * to explicitly allow all marks, or `\"\"` to disallow marks. When\n * not given, nodes with inline content default to allowing all\n * marks, other nodes default to not allowing marks.\n *\n * @example marks: 'strong em'\n */\n marks?:\n | NodeSpec['marks']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['marks']\n editor?: Editor\n }) => NodeSpec['marks'])\n\n /**\n * The group or space-separated groups to which this node belongs,\n * which can be referred to in the content expressions for the\n * schema.\n *\n * By default Tiptap uses the groups 'block' and 'inline' for nodes. You\n * can also use custom groups if you want to group specific nodes together\n * and handle them in your schema.\n * @example group: 'block'\n * @example group: 'inline'\n * @example group: 'customBlock' // this uses a custom group\n */\n group?:\n | NodeSpec['group']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['group']\n editor?: Editor\n }) => NodeSpec['group'])\n\n /**\n * Should be set to true for inline nodes. (Implied for text nodes.)\n */\n inline?:\n | NodeSpec['inline']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['inline']\n editor?: Editor\n }) => NodeSpec['inline'])\n\n /**\n * Can be set to true to indicate that, though this isn't a [leaf\n * node](https://prosemirror.net/docs/ref/#model.NodeType.isLeaf), it doesn't have directly editable\n * content and should be treated as a single unit in the view.\n *\n * @example atom: true\n */\n atom?:\n | NodeSpec['atom']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['atom']\n editor?: Editor\n }) => NodeSpec['atom'])\n\n /**\n * Controls whether nodes of this type can be selected as a [node\n * selection](https://prosemirror.net/docs/ref/#state.NodeSelection). Defaults to true for non-text\n * nodes.\n *\n * @default true\n * @example selectable: false\n */\n selectable?:\n | NodeSpec['selectable']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['selectable']\n editor?: Editor\n }) => NodeSpec['selectable'])\n\n /**\n * Determines whether nodes of this type can be dragged without\n * being selected. Defaults to false.\n *\n * @default: false\n * @example: draggable: true\n */\n draggable?:\n | NodeSpec['draggable']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['draggable']\n editor?: Editor\n }) => NodeSpec['draggable'])\n\n /**\n * Can be used to indicate that this node contains code, which\n * causes some commands to behave differently.\n */\n code?:\n | NodeSpec['code']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['code']\n editor?: Editor\n }) => NodeSpec['code'])\n\n /**\n * Controls way whitespace in this a node is parsed. The default is\n * `\"normal\"`, which causes the [DOM parser](https://prosemirror.net/docs/ref/#model.DOMParser) to\n * collapse whitespace in normal mode, and normalize it (replacing\n * newlines and such with spaces) otherwise. `\"pre\"` causes the\n * parser to preserve spaces inside the node. When this option isn't\n * given, but [`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) is true, `whitespace`\n * will default to `\"pre\"`. Note that this option doesn't influence\n * the way the node is rendered—that should be handled by `toDOM`\n * and/or styling.\n */\n whitespace?:\n | NodeSpec['whitespace']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['whitespace']\n editor?: Editor\n }) => NodeSpec['whitespace'])\n\n /**\n * Allows a **single** node to be set as linebreak equivalent (e.g. hardBreak).\n * When converting between block types that have whitespace set to \"pre\"\n * and don't support the linebreak node (e.g. codeBlock) and other block types\n * that do support the linebreak node (e.g. paragraphs) - this node will be used\n * as the linebreak instead of stripping the newline.\n *\n * See [linebreakReplacement](https://prosemirror.net/docs/ref/#model.NodeSpec.linebreakReplacement).\n */\n linebreakReplacement?:\n | NodeSpec['linebreakReplacement']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['linebreakReplacement']\n editor?: Editor\n }) => NodeSpec['linebreakReplacement'])\n\n /**\n * When enabled, enables both\n * [`definingAsContext`](https://prosemirror.net/docs/ref/#model.NodeSpec.definingAsContext) and\n * [`definingForContent`](https://prosemirror.net/docs/ref/#model.NodeSpec.definingForContent).\n *\n * @default false\n * @example isolating: true\n */\n defining?:\n | NodeSpec['defining']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['defining']\n editor?: Editor\n }) => NodeSpec['defining'])\n\n /**\n * When enabled (default is false), the sides of nodes of this type\n * count as boundaries that regular editing operations, like\n * backspacing or lifting, won't cross. An example of a node that\n * should probably have this enabled is a table cell.\n */\n isolating?:\n | NodeSpec['isolating']\n | ((this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['isolating']\n editor?: Editor\n }) => NodeSpec['isolating'])\n\n /**\n * Associates DOM parser information with this node, which can be\n * used by [`DOMParser.fromSchema`](https://prosemirror.net/docs/ref/#model.DOMParser^fromSchema) to\n * automatically derive a parser. The `node` field in the rules is\n * implied (the name of this node will be filled in automatically).\n * If you supply your own parser, you do not need to also specify\n * parsing rules in your schema.\n *\n * @example parseHTML: [{ tag: 'div', attrs: { 'data-id': 'my-block' } }]\n */\n parseHTML?: (this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['parseHTML']\n editor?: Editor\n }) => NodeSpec['parseDOM']\n\n /**\n * A description of a DOM structure. Can be either a string, which is\n * interpreted as a text node, a DOM node, which is interpreted as\n * itself, a `{dom, contentDOM}` object, or an array.\n *\n * An array describes a DOM element. The first value in the array\n * should be a string—the name of the DOM element, optionally prefixed\n * by a namespace URL and a space. If the second element is plain\n * object, it is interpreted as a set of attributes for the element.\n * Any elements after that (including the 2nd if it's not an attribute\n * object) are interpreted as children of the DOM elements, and must\n * either be valid `DOMOutputSpec` values, or the number zero.\n *\n * The number zero (pronounced “hole”) is used to indicate the place\n * where a node's child nodes should be inserted. If it occurs in an\n * output spec, it should be the only child element in its parent\n * node.\n *\n * @example toDOM: ['div[data-id=\"my-block\"]', { class: 'my-block' }, 0]\n */\n renderHTML?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['renderHTML']\n editor?: Editor\n },\n props: {\n node: ProseMirrorNode\n HTMLAttributes: Record<string, any>\n },\n ) => DOMOutputSpec)\n | null\n\n /**\n * renders the node as text\n * @example renderText: () => 'foo\n */\n renderText?:\n | ((\n this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['renderText']\n editor?: Editor\n },\n props: {\n node: ProseMirrorNode\n pos: number\n parent: ProseMirrorNode\n index: number\n },\n ) => string)\n | null\n\n /**\n * Add attributes to the node\n * @example addAttributes: () => ({ class: 'foo' })\n */\n addAttributes?: (this: {\n name: string\n options: Options\n storage: Storage\n parent: ParentConfig<NodeConfig<Options, Storage>>['addAttributes']\n editor?: Editor\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n }) => Attributes | {}\n}\n\n/**\n * The Node class is used to create custom node extensions.\n * @see https://tiptap.dev/api/extensions#create-a-new-extension\n */\nexport class Node<Options = any, Storage = any> extends Extendable<Options, Storage, NodeConfig<Options, Storage>> {\n type = 'node'\n\n /**\n * Create a new Node instance\n * @param config - Node configuration object or a function that returns a configuration object\n */\n static create<O = any, S = any>(config: Partial<NodeConfig<O, S>> | (() => Partial<NodeConfig<O, S>>) = {}) {\n // If the config is a function, execute it to get the configuration object\n const resolvedConfig = typeof config === 'function' ? config() : config\n return new Node<O, S>(resolvedConfig)\n }\n\n configure(options?: Partial<Options>) {\n return super.configure(options) as Node<Options, Storage>\n }\n\n extend<\n ExtendedOptions = Options,\n ExtendedStorage = Storage,\n ExtendedConfig extends NodeConfig<ExtendedOptions, ExtendedStorage> = NodeConfig<ExtendedOptions, ExtendedStorage>,\n >(\n extendedConfig?:\n | (() => Partial<ExtendedConfig>)\n | (Partial<ExtendedConfig> &\n ThisType<{\n name: string\n options: ExtendedOptions\n storage: ExtendedStorage\n editor: Editor\n type: NodeType\n }>),\n ): Node<ExtendedOptions, ExtendedStorage> {\n // If the extended config is a function, execute it to get the configuration object\n const resolvedConfig = typeof extendedConfig === 'function' ? extendedConfig() : extendedConfig\n return super.extend(resolvedConfig) as Node<ExtendedOptions, ExtendedStorage>\n }\n}\n","/**\n * Font Size Extension for TipTap\n *\n * Allows setting font size as a text style mark with increment/decrement operations.\n */\n\nimport { Extension, CommandProps } from \"@tiptap/core\";\nimport \"@tiptap/extension-text-style\";\nimport { FONT_SIZES, DEFAULT_FONT_SIZE, MIN_FONT_SIZE, MAX_FONT_SIZE } from \"../constants\";\n\nexport interface FontSizeOptions {\n types: string[];\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n hazoFontSize: {\n /**\n * Set the font size\n */\n setFontSize: (size: string) => ReturnType;\n /**\n * Unset the font size\n */\n unsetFontSize: () => ReturnType;\n /**\n * Increase the font size\n */\n increaseFontSize: () => ReturnType;\n /**\n * Decrease the font size\n */\n decreaseFontSize: () => ReturnType;\n };\n }\n}\n\n/**\n * Get current font size from editor\n */\nfunction get_current_font_size(editor: CommandProps[\"editor\"]): number {\n const attrs = editor.getAttributes(\"textStyle\");\n if (attrs?.fontSize) {\n const parsed = parseInt(attrs.fontSize.replace(\"px\", \"\"), 10);\n return isNaN(parsed) ? DEFAULT_FONT_SIZE : parsed;\n }\n return DEFAULT_FONT_SIZE;\n}\n\n/**\n * Get next font size based on direction\n */\nfunction get_next_font_size(current: number, direction: \"increase\" | \"decrease\"): number {\n // Find the closest preset size\n let index = FONT_SIZES.findIndex((s) => s >= current);\n\n if (index === -1) {\n // Current is larger than all presets\n index = FONT_SIZES.length - 1;\n }\n\n if (direction === \"increase\") {\n // If current is exactly at a preset, move to next\n if (FONT_SIZES[index] === current) {\n return Math.min(FONT_SIZES[index + 1] ?? MAX_FONT_SIZE, MAX_FONT_SIZE);\n }\n // Otherwise move to the found index (next larger)\n return Math.min(FONT_SIZES[index], MAX_FONT_SIZE);\n } else {\n // Decrease\n if (FONT_SIZES[index] === current && index > 0) {\n return Math.max(FONT_SIZES[index - 1], MIN_FONT_SIZE);\n }\n // Move to previous preset\n const prev_index = index > 0 ? index - 1 : 0;\n return Math.max(FONT_SIZES[prev_index], MIN_FONT_SIZE);\n }\n}\n\nexport const FontSizeExtension = Extension.create<FontSizeOptions>({\n name: \"hazoFontSize\",\n\n addOptions() {\n return {\n types: [\"textStyle\"],\n };\n },\n\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n fontSize: {\n default: null,\n parseHTML: (element) => element.style.fontSize?.replace(/['\"]+/g, \"\"),\n renderHTML: (attributes) => {\n if (!attributes.fontSize) {\n return {};\n }\n return {\n style: `font-size: ${attributes.fontSize}`,\n };\n },\n },\n },\n },\n ];\n },\n\n addCommands() {\n return {\n setFontSize:\n (size: string) =>\n ({ chain }: CommandProps) => {\n return chain().setMark(\"textStyle\", { fontSize: size }).run();\n },\n unsetFontSize:\n () =>\n ({ chain }: CommandProps) => {\n return chain()\n .setMark(\"textStyle\", { fontSize: null })\n .removeEmptyTextStyle()\n .run();\n },\n increaseFontSize:\n () =>\n ({ chain, editor }: CommandProps) => {\n const current_size = get_current_font_size(editor);\n const next_size = get_next_font_size(current_size, \"increase\");\n return chain()\n .setMark(\"textStyle\", { fontSize: `${next_size}px` })\n .run();\n },\n decreaseFontSize:\n () =>\n ({ chain, editor }: CommandProps) => {\n const current_size = get_current_font_size(editor);\n const next_size = get_next_font_size(current_size, \"decrease\");\n return chain()\n .setMark(\"textStyle\", { fontSize: `${next_size}px` })\n .run();\n },\n };\n },\n});\n\nexport default FontSizeExtension;\n","/**\n * Variable Chip Node View Component\n *\n * Renders a variable as a styled chip/badge in the TipTap editor.\n * Used by the VariableExtension to display variables visually.\n */\n\n\"use client\";\n\nimport { NodeViewWrapper } from \"@tiptap/react\";\nimport type { NodeViewProps } from \"@tiptap/react\";\n\n/**\n * Variable Chip component for displaying variables as inline chips in the editor\n */\nfunction VariableChipNodeView({ node }: NodeViewProps) {\n const { variable_name, variable_text } = node.attrs;\n\n return (\n <NodeViewWrapper\n as=\"span\"\n className=\"cls_variable_chip inline-flex items-center px-2 py-0.5 mx-0.5 rounded-md bg-primary/10 text-primary text-sm font-medium border border-primary/20 cursor-default select-none\"\n contentEditable={false}\n >\n <span className=\"cls_variable_chip_icon mr-1 text-xs opacity-70\">{\"{\"}</span>\n <span className=\"cls_variable_chip_text\">{variable_text || variable_name}</span>\n <span className=\"cls_variable_chip_icon ml-1 text-xs opacity-70\">{\"}\"}</span>\n </NodeViewWrapper>\n );\n}\n\nexport default VariableChipNodeView;\n","/**\n * Variable Extension for TipTap\n *\n * Creates inline variable nodes that display as styled chips\n * and render as {{variable_name}} in HTML output.\n */\n\nimport { Node, mergeAttributes } from \"@tiptap/core\";\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport VariableChipNodeView from \"../components/variables_modal/variable_chip\";\n\nexport interface VariableOptions {\n HTMLAttributes: Record<string, unknown>;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n variable: {\n /**\n * Insert a variable at the current position\n */\n insertVariable: (variable_name: string, variable_text: string) => ReturnType;\n };\n }\n}\n\nexport const VariableExtension = Node.create<VariableOptions>({\n name: \"variable\",\n\n group: \"inline\",\n\n inline: true,\n\n // Atomic means it's not editable directly\n atom: true,\n\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n\n addAttributes() {\n return {\n variable_name: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-variable-name\"),\n renderHTML: (attributes) => ({\n \"data-variable-name\": attributes.variable_name,\n }),\n },\n variable_text: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-variable-text\"),\n renderHTML: (attributes) => ({\n \"data-variable-text\": attributes.variable_text,\n }),\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"variable\"]',\n },\n ];\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n \"span\",\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n \"data-type\": \"variable\",\n class: \"cls_variable_chip_output\",\n }),\n `{{${node.attrs.variable_name}}}`,\n ];\n },\n\n // Include variable placeholder in plain text output\n renderText({ node }) {\n return `{{${node.attrs.variable_name}}}`;\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(VariableChipNodeView);\n },\n\n addCommands() {\n return {\n insertVariable:\n (variable_name: string, variable_text: string) =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: { variable_name, variable_text },\n });\n },\n };\n },\n});\n\nexport default VariableExtension;\n","/**\n * Column Layout Extension for TipTap\n *\n * Creates responsive column layouts (2-column, 3-column).\n */\n\nimport { Node, mergeAttributes } from \"@tiptap/core\";\n\nexport interface ColumnLayoutOptions {\n HTMLAttributes: Record<string, unknown>;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n columnLayout: {\n /**\n * Insert a column layout\n */\n insertColumnLayout: (columns: number) => ReturnType;\n };\n }\n}\n\n/**\n * Column Layout container node\n */\nexport const ColumnLayoutExtension = Node.create<ColumnLayoutOptions>({\n name: \"columnLayout\",\n\n group: \"block\",\n\n content: \"column+\",\n\n defining: true,\n\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n\n addAttributes() {\n return {\n columns: {\n default: 2,\n parseHTML: (element) => parseInt(element.getAttribute(\"data-columns\") || \"2\", 10),\n renderHTML: (attributes) => ({\n \"data-columns\": attributes.columns,\n }),\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'div[data-type=\"column-layout\"]',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n const columns = HTMLAttributes.columns || 2;\n return [\n \"div\",\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n \"data-type\": \"column-layout\",\n class: `cls_column_layout cls_columns_${columns}`,\n style: `display: grid; grid-template-columns: repeat(${columns}, 1fr); gap: 1rem;`,\n }),\n 0,\n ];\n },\n\n addCommands() {\n return {\n insertColumnLayout:\n (columns: number) =>\n ({ commands }) => {\n const column_content = Array(columns)\n .fill(null)\n .map(() => ({\n type: \"column\",\n content: [{ type: \"paragraph\" }],\n }));\n\n return commands.insertContent({\n type: this.name,\n attrs: { columns },\n content: column_content,\n });\n },\n };\n },\n});\n\n/**\n * Individual column node\n */\nexport const ColumnExtension = Node.create({\n name: \"column\",\n\n group: \"column\",\n\n content: \"block+\",\n\n defining: true,\n\n parseHTML() {\n return [\n {\n tag: 'div[data-type=\"column\"]',\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"div\",\n mergeAttributes(HTMLAttributes, {\n \"data-type\": \"column\",\n class: \"cls_column\",\n style: \"min-width: 0;\",\n }),\n 0,\n ];\n },\n});\n\nexport default ColumnLayoutExtension;\n","/**\n * HazoRichtextEditor Component\n *\n * A feature-rich rich text editor built on TipTap with support for:\n * - Text formatting (bold, italic, underline, strikethrough, sub/superscript)\n * - Font family and size controls\n * - Text and highlight colors\n * - Block types (headings, lists, quotes, code blocks)\n * - Tables and column layouts\n * - Image and link insertion\n * - Template variables\n * - HTML and plain text views\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { Underline } from \"@tiptap/extension-underline\";\nimport { TextStyle } from \"@tiptap/extension-text-style\";\nimport { Color } from \"@tiptap/extension-color\";\nimport { Highlight } from \"@tiptap/extension-highlight\";\nimport { FontFamily } from \"@tiptap/extension-font-family\";\nimport { TextAlign } from \"@tiptap/extension-text-align\";\nimport { Link } from \"@tiptap/extension-link\";\nimport { Image } from \"@tiptap/extension-image\";\nimport { Table } from \"@tiptap/extension-table\";\nimport { TableRow } from \"@tiptap/extension-table-row\";\nimport { TableCell } from \"@tiptap/extension-table-cell\";\nimport { TableHeader } from \"@tiptap/extension-table-header\";\nimport { TaskList } from \"@tiptap/extension-task-list\";\nimport { TaskItem } from \"@tiptap/extension-task-item\";\nimport { Subscript } from \"@tiptap/extension-subscript\";\nimport { Superscript } from \"@tiptap/extension-superscript\";\nimport { Placeholder } from \"@tiptap/extension-placeholder\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../ui/button\";\nimport { Toolbar } from \"./components/toolbar\";\nimport { ViewTabs } from \"./components/view_tabs\";\nimport { VariablesModal } from \"./components/variables_modal\";\nimport { FontSizeExtension } from \"./extensions/font_size_extension\";\nimport { VariableExtension } from \"./extensions/variable_extension\";\nimport { ColumnLayoutExtension, ColumnExtension } from \"./extensions/column_layout_extension\";\nimport { DEFAULT_MIN_HEIGHT, DEFAULT_MAX_HEIGHT, DEFAULT_PLACEHOLDER } from \"./constants\";\nimport type {\n HazoRichtextEditorProps,\n ViewTab,\n HtmlViewMode,\n Variable,\n EditorState,\n Attachment,\n} from \"./types\";\n\n/**\n * Format file size in human readable format\n */\nfunction format_file_size(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n}\n\n/**\n * HazoRichtextEditor - A feature-rich rich text editor component\n */\nexport function HazoRichtextEditor({\n initial_html = \"\",\n initial_text = \"\",\n variables = [],\n initial_attachments = [],\n on_save,\n on_change,\n on_attachments_change,\n on_file_attach,\n placeholder = DEFAULT_PLACEHOLDER,\n min_height = DEFAULT_MIN_HEIGHT,\n max_height = DEFAULT_MAX_HEIGHT,\n read_only = false,\n show_save_button = true,\n save_button_text = \"Save\",\n className,\n}: HazoRichtextEditorProps) {\n // Editor state\n const [state, set_state] = React.useState<EditorState>({\n active_tab: \"visual\",\n html_view_mode: \"preview\",\n html_content: initial_html,\n text_content: initial_text,\n is_variables_modal_open: false,\n });\n\n // Attachments state\n const [attachments, set_attachments] = React.useState<Attachment[]>(initial_attachments);\n\n // Initialize TipTap editor\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: {\n levels: [1, 2, 3],\n },\n }),\n Underline,\n TextStyle,\n Color,\n Highlight.configure({\n multicolor: true,\n }),\n FontFamily,\n FontSizeExtension,\n TextAlign.configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Link.configure({\n openOnClick: false,\n HTMLAttributes: {\n class: \"cls_editor_link text-primary underline cursor-pointer\",\n },\n }),\n Image.configure({\n HTMLAttributes: {\n class: \"cls_editor_image max-w-full h-auto rounded-md\",\n },\n }),\n Table.configure({\n resizable: true,\n HTMLAttributes: {\n class: \"cls_editor_table border-collapse w-full\",\n },\n }),\n TableRow,\n TableCell.configure({\n HTMLAttributes: {\n class: \"cls_editor_table_cell border border-border p-2\",\n },\n }),\n TableHeader.configure({\n HTMLAttributes: {\n class: \"cls_editor_table_header border border-border p-2 bg-muted font-medium\",\n },\n }),\n TaskList.configure({\n HTMLAttributes: {\n class: \"cls_editor_task_list\",\n },\n }),\n TaskItem.configure({\n nested: true,\n HTMLAttributes: {\n class: \"cls_editor_task_item\",\n },\n }),\n Subscript,\n Superscript,\n Placeholder.configure({\n placeholder,\n emptyEditorClass: \"cls_editor_empty\",\n }),\n VariableExtension,\n ColumnLayoutExtension,\n ColumnExtension,\n ],\n content: initial_html || `<p>${initial_text}</p>`,\n editable: !read_only,\n immediatelyRender: false,\n onUpdate: ({ editor }) => {\n const html = editor.getHTML();\n const text = editor.getText();\n\n set_state((prev) => ({\n ...prev,\n html_content: html,\n text_content: text,\n }));\n\n on_change?.(html, text);\n },\n });\n\n // Sync content when switching tabs\n React.useEffect(() => {\n if (editor && state.active_tab === \"visual\") {\n // When switching to visual, update editor content if HTML was edited\n const current_html = editor.getHTML();\n if (current_html !== state.html_content && state.html_content) {\n editor.commands.setContent(state.html_content);\n }\n }\n }, [state.active_tab, editor, state.html_content]);\n\n // Handle tab change\n const handle_tab_change = (tab: ViewTab) => {\n if (editor && tab !== \"visual\" && state.active_tab === \"visual\") {\n // Leaving visual mode - update state with current editor content\n set_state((prev) => ({\n ...prev,\n active_tab: tab,\n html_content: editor.getHTML(),\n text_content: editor.getText(),\n }));\n } else {\n set_state((prev) => ({\n ...prev,\n active_tab: tab,\n }));\n }\n };\n\n // Handle HTML content change\n const handle_html_change = (html: string) => {\n set_state((prev) => ({\n ...prev,\n html_content: html,\n }));\n };\n\n // Handle text content change\n const handle_text_change = (text: string) => {\n set_state((prev) => ({\n ...prev,\n text_content: text,\n }));\n };\n\n // Handle HTML view mode change\n const handle_html_view_mode_change = (mode: HtmlViewMode) => {\n set_state((prev) => ({\n ...prev,\n html_view_mode: mode,\n }));\n };\n\n // Handle variable selection\n const handle_variable_select = (variable: Variable) => {\n if (editor) {\n editor.chain().focus().insertVariable(variable.text, variable.description).run();\n }\n };\n\n // Handle save\n const handle_save = () => {\n const html = editor?.getHTML() || state.html_content;\n const text = editor?.getText() || state.text_content;\n on_save?.(html, text, attachments);\n };\n\n // Open variables modal\n const open_variables_modal = () => {\n set_state((prev) => ({\n ...prev,\n is_variables_modal_open: true,\n }));\n };\n\n // Close variables modal\n const close_variables_modal = () => {\n set_state((prev) => ({\n ...prev,\n is_variables_modal_open: false,\n }));\n };\n\n // Generate unique ID for attachments\n const generate_attachment_id = () => {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n };\n\n // Handle adding attachment (stores as base64)\n const handle_add_attachment = async (file: File): Promise<void> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const new_attachment: Attachment = {\n id: generate_attachment_id(),\n name: file.name,\n type: file.type,\n size: file.size,\n data: reader.result as string,\n };\n const updated_attachments = [...attachments, new_attachment];\n set_attachments(updated_attachments);\n on_attachments_change?.(updated_attachments);\n resolve();\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n };\n\n // Handle removing attachment\n const handle_remove_attachment = (id: string) => {\n const updated_attachments = attachments.filter((a) => a.id !== id);\n set_attachments(updated_attachments);\n on_attachments_change?.(updated_attachments);\n };\n\n // Handle image embed (inserts image into editor AND adds as attachment)\n const handle_image_embed = async (file: File): Promise<string> => {\n let url: string;\n let base64_data: string;\n\n if (on_file_attach) {\n // Use custom handler (e.g., upload to server)\n url = await on_file_attach(file);\n // Still need base64 for attachment\n base64_data = await new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n } else {\n // Convert to base64 data URL\n base64_data = await new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n url = base64_data;\n }\n\n // Insert into editor\n if (editor) {\n editor.chain().focus().setImage({ src: url, alt: file.name }).run();\n }\n\n // Also add as attachment\n const new_attachment: Attachment = {\n id: generate_attachment_id(),\n name: file.name,\n type: file.type,\n size: file.size,\n data: base64_data,\n };\n const updated_attachments = [...attachments, new_attachment];\n set_attachments(updated_attachments);\n on_attachments_change?.(updated_attachments);\n\n return url;\n };\n\n return (\n <div\n className={cn(\n \"cls_richtext_editor border border-border rounded-lg overflow-hidden bg-background\",\n className\n )}\n >\n {/* Toolbar - only show in visual mode and not read-only */}\n {state.active_tab === \"visual\" && !read_only && (\n <Toolbar\n editor={editor}\n on_open_variables_modal={open_variables_modal}\n variables={variables}\n on_image_embed={handle_image_embed}\n on_add_attachment={handle_add_attachment}\n />\n )}\n\n {/* View tabs and content */}\n <ViewTabs\n active_tab={state.active_tab}\n on_tab_change={handle_tab_change}\n editor={editor}\n html_content={state.html_content}\n text_content={state.text_content}\n on_html_change={handle_html_change}\n on_text_change={handle_text_change}\n html_view_mode={state.html_view_mode}\n on_html_view_mode_change={handle_html_view_mode_change}\n min_height={min_height}\n max_height={max_height}\n read_only={read_only}\n >\n {/* Editor content for visual view */}\n <EditorContent\n editor={editor}\n className={cn(\n \"cls_editor_content prose prose-sm max-w-none p-4\",\n \"focus-within:outline-none\",\n \"[&_.ProseMirror]:outline-none [&_.ProseMirror]:min-h-[inherit]\",\n \"[&_.ProseMirror_p.is-editor-empty:first-child::before]:text-muted-foreground\",\n \"[&_.ProseMirror_p.is-editor-empty:first-child::before]:content-[attr(data-placeholder)]\",\n \"[&_.ProseMirror_p.is-editor-empty:first-child::before]:float-left\",\n \"[&_.ProseMirror_p.is-editor-empty:first-child::before]:h-0\",\n \"[&_.ProseMirror_p.is-editor-empty:first-child::before]:pointer-events-none\"\n )}\n />\n </ViewTabs>\n\n {/* Attachments section */}\n {attachments.length > 0 && (\n <div className=\"cls_attachments_section border-t border-border p-3 bg-muted/20\">\n <div className=\"cls_attachments_header text-xs font-medium text-muted-foreground mb-2\">\n Attachments ({attachments.length})\n </div>\n <div className=\"cls_attachments_list flex flex-wrap gap-2\">\n {attachments.map((attachment) => (\n <div\n key={attachment.id}\n className=\"cls_attachment_item flex items-center gap-2 px-2 py-1 rounded-md bg-background border border-border text-sm\"\n >\n {/* Show thumbnail for images */}\n {attachment.type.startsWith(\"image/\") ? (\n <img\n src={attachment.data}\n alt={attachment.name}\n className=\"cls_attachment_thumbnail h-6 w-6 object-cover rounded\"\n />\n ) : (\n <span className=\"cls_attachment_icon text-muted-foreground\">📎</span>\n )}\n <span className=\"cls_attachment_name max-w-[150px] truncate\">\n {attachment.name}\n </span>\n <span className=\"cls_attachment_size text-xs text-muted-foreground\">\n ({format_file_size(attachment.size)})\n </span>\n {!read_only && (\n <button\n onClick={() => handle_remove_attachment(attachment.id)}\n className=\"cls_attachment_remove ml-1 text-muted-foreground hover:text-destructive\"\n aria-label=\"Remove attachment\"\n >\n ×\n </button>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Footer with save button */}\n {show_save_button && on_save && (\n <div className=\"cls_richtext_editor_footer flex items-center justify-end p-3 border-t border-border bg-muted/30\">\n <Button onClick={handle_save} size=\"sm\">\n {save_button_text}\n </Button>\n </div>\n )}\n\n {/* Variables modal */}\n <VariablesModal\n is_open={state.is_variables_modal_open}\n on_close={close_variables_modal}\n variables={variables}\n on_select_variable={handle_variable_select}\n />\n </div>\n );\n}\n\n// Re-export types for consumers\nexport type {\n HazoRichtextEditorProps,\n Variable,\n ViewTab,\n HtmlViewMode,\n FileAttachment,\n Attachment,\n} from \"./types\";\n\nexport default HazoRichtextEditor;\n"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/@babel/runtime/helpers/extends.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/components/ui/dialog.tsx","../src/components/ui/command.tsx","../src/components/ui/popover.tsx","../src/components/ui/input.tsx","../src/components/ui/select.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/calendar.tsx","../src/components/hazo_ui_multi_filter_dialog/index.tsx","../src/components/ui/switch.tsx","../src/components/ui/label.tsx","../src/components/hazo_ui_multi_sort_dialog/index.tsx","../src/components/ui/radio-group.tsx","../src/components/hazo_ui_flex_radio/index.tsx","../src/components/hazo_ui_flex_input/index.tsx","../src/components/hazo_ui_rte/toolbar/toolbar_button.tsx","../node_modules/@uiw/react-color-sketch/esm/index.js","../node_modules/@uiw/react-color-saturation/esm/index.js","../node_modules/@uiw/color-convert/esm/index.js","../node_modules/@uiw/react-drag-event-interactive/esm/index.js","../node_modules/@uiw/react-drag-event-interactive/esm/utils.js","../node_modules/@uiw/react-color-saturation/esm/Pointer.js","../node_modules/@uiw/react-color-alpha/esm/index.js","../node_modules/@uiw/react-color-alpha/esm/Pointer.js","../node_modules/@uiw/react-color-editable-input/esm/index.js","../node_modules/@uiw/react-color-editable-input-rgba/esm/index.js","../node_modules/@uiw/react-color-hue/esm/index.js","../node_modules/@uiw/react-color-swatch/esm/index.js","../src/components/hazo_ui_rte/types.ts","../src/components/hazo_ui_rte/utils.ts","../src/components/hazo_ui_rte/toolbar/toolbar.tsx","../src/components/hazo_ui_rte/attachments/attachments_list.tsx","../src/components/hazo_ui_rte/extensions/font_size_extension.tsx","../src/components/hazo_ui_rte/extensions/variable_extension.tsx","../src/components/ui/tabs.tsx","../src/components/hazo_ui_rte/index.tsx"],"names":["exports","_extends","_objectWithoutPropertiesLoose","React","React2","jsx","React3","React4","React5","React6","jsxs","React7","CalendarIcon","CheckIcon","X","React8","Label","React9","Trash2","useState","useEffect","Plus","ChevronsUpDown","React10","isSelected","parts","React11","React12","import_extends","import_objectWithoutPropertiesLoose","translateColor","color","clamp","useRef","useCallback","_jsx","_excluded","useMemo","esm_default","Pointer","validHex","value","_jsxs","Fragment","_","LuImage","React24","React25","editor"],"mappings":"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","file":"index.js","sourcesContent":["function _extends() {\n return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// Utility functions for hazo_ui component library\n// Provides className merging utility (cn function)\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merges class names using clsx and tailwind-merge\n * @param inputs - Class values to merge\n * @returns Merged class string\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n","// Button component for hazo_ui library\n// Based on shadcn/ui button component\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n\n","// Dialog component for hazo_ui library\n// Based on shadcn/ui dialog component\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n\n","// Command component for hazo_ui library\n// Based on shadcn/ui command component (simplified version)\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Command = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground\",\n className\n )}\n {...props}\n />\n));\nCommand.displayName = \"Command\";\n\nconst CommandInput = React.forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement>\n>(({ className, ...props }, ref) => (\n <input\n ref={ref}\n className={cn(\n \"flex h-11 w-full rounded-md border border-input bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 px-3\",\n className\n )}\n {...props}\n />\n));\nCommandInput.displayName = \"CommandInput\";\n\nconst CommandList = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"max-h-[300px] overflow-y-auto overflow-x-hidden\", className)}\n {...props}\n />\n));\nCommandList.displayName = \"CommandList\";\n\nconst CommandEmpty = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>((props, ref) => (\n <div\n ref={ref}\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n));\nCommandEmpty.displayName = \"CommandEmpty\";\n\nconst CommandGroup = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nCommandGroup.displayName = \"CommandGroup\";\n\nconst CommandItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n onSelect?: (value: string) => void;\n value?: string;\n }\n>(({ className, onSelect, value, ...props }, ref) => {\n const handleClick = () => {\n if (onSelect && value) {\n onSelect(value);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n onClick={handleClick}\n {...props}\n />\n );\n});\nCommandItem.displayName = \"CommandItem\";\n\nexport {\n Command,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n};\n\n","// Popover component for hazo_ui library\n// Based on shadcn/ui popover component\nimport * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\n\nconst Popover = PopoverPrimitive.Root;\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent };\n\n","// Input component for hazo_ui library\n// Based on shadcn/ui input component\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n\n","// Select component for hazo_ui library\n// Based on shadcn/ui select component\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Select = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n\n","// Tooltip component for hazo_ui library\n// Based on shadcn/ui tooltip component\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n\n","// Calendar component for hazo_ui library\n// Based on shadcn/ui calendar component\nimport * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { DayPicker } from \"react-day-picker\";\nimport { cn } from \"../../lib/utils\";\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>;\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n }}\n {...props}\n />\n );\n}\nCalendar.displayName = \"Calendar\";\n\nexport { Calendar };\n\n","\"use client\";\n\n/**\n * Hazo UI Multi Filter Dialog Component\n * \n * Reusable component for multi-field filtering with different input types.\n * Allows users to select multiple fields for filtering with appropriate input controls.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../ui/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport { Input } from \"../ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { Calendar as CalendarComponent } from \"../ui/calendar\";\nimport { Filter, Trash2, Plus, Check as CheckIcon, ChevronsUpDown, Calendar as CalendarIcon, X } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport { format } from \"date-fns\";\n\nexport interface FilterField {\n value: string;\n label: string;\n type: 'text' | 'number' | 'combobox' | 'boolean' | 'date';\n textConfig?: {\n minLength?: number;\n maxLength?: number;\n };\n numberConfig?: {\n min?: number;\n max?: number;\n allowDecimal?: boolean;\n decimalLength?: number;\n };\n comboboxOptions?: Array<{ label: string; value: string }>;\n booleanLabels?: {\n trueLabel?: string;\n falseLabel?: string;\n };\n}\n\nexport interface FilterConfig {\n field: string;\n operator?: string; // For number fields: equals, not_equals, greater_than, less_than, greater_equal, less_equal\n value: any;\n}\n\ninterface HazoUiMultiFilterDialogProps {\n availableFields: FilterField[];\n onFilterChange: (filterConfig: FilterConfig[]) => void;\n initialFilters?: FilterConfig[];\n title?: string;\n description?: string;\n}\n\ninterface FilterFieldItemProps {\n filterConfig: FilterConfig;\n fieldConfig: FilterField;\n onValueChange: (value: any) => void;\n onOperatorChange?: (operator: string) => void;\n onDelete: () => void;\n}\n\nfunction FilterFieldItem({\n filterConfig,\n fieldConfig,\n onValueChange,\n onOperatorChange,\n onDelete,\n}: FilterFieldItemProps) {\n const [isCalendarOpen, setIsCalendarOpen] = useState(false);\n\n const renderInput = () => {\n switch (fieldConfig.type) {\n case 'text':\n return (\n <Input\n type=\"text\"\n value={filterConfig.value || ''}\n onChange={(e) => {\n const value = e.target.value;\n if (fieldConfig.textConfig?.maxLength && value.length > fieldConfig.textConfig.maxLength) {\n return;\n }\n onValueChange(value);\n }}\n placeholder=\"Enter text...\"\n minLength={fieldConfig.textConfig?.minLength}\n maxLength={fieldConfig.textConfig?.maxLength}\n className=\"cls_filter_text_input w-full min-w-0\"\n />\n );\n\n case 'number':\n const numberOperators = [\n { value: 'equals', label: 'Equals' },\n { value: 'not_equals', label: 'Not Equals' },\n { value: 'greater_than', label: 'Greater Than' },\n { value: 'less_than', label: 'Less Than' },\n { value: 'greater_equal', label: 'Greater or Equal' },\n { value: 'less_equal', label: 'Less or Equal' },\n ];\n\n return (\n <div className=\"cls_number_filter_container flex flex-col sm:flex-row items-stretch sm:items-center gap-2 w-full\">\n <Select\n value={filterConfig.operator || 'equals'}\n onValueChange={(value) => onOperatorChange?.(value)}\n >\n <SelectTrigger className=\"cls_operator_select w-full sm:w-[140px] shrink-0\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {numberOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n type=\"number\"\n value={filterConfig.value !== undefined && filterConfig.value !== null ? filterConfig.value : ''}\n onChange={(e) => {\n const value = e.target.value;\n if (value === '') {\n onValueChange('');\n return;\n }\n let numValue = fieldConfig.numberConfig?.allowDecimal\n ? parseFloat(value)\n : parseInt(value, 10);\n \n if (isNaN(numValue)) {\n return;\n }\n\n // Apply decimal length restriction\n if (fieldConfig.numberConfig?.allowDecimal && fieldConfig.numberConfig?.decimalLength) {\n const decimalPlaces = value.split('.')[1]?.length || 0;\n if (decimalPlaces > fieldConfig.numberConfig.decimalLength) {\n return;\n }\n }\n\n // Apply min/max restrictions\n if (fieldConfig.numberConfig?.min !== undefined && numValue < fieldConfig.numberConfig.min) {\n numValue = fieldConfig.numberConfig.min;\n }\n if (fieldConfig.numberConfig?.max !== undefined && numValue > fieldConfig.numberConfig.max) {\n numValue = fieldConfig.numberConfig.max;\n }\n\n onValueChange(numValue);\n }}\n placeholder=\"Enter number...\"\n min={fieldConfig.numberConfig?.min}\n max={fieldConfig.numberConfig?.max}\n step={fieldConfig.numberConfig?.allowDecimal ? 0.01 : 1}\n className=\"cls_filter_number_input flex-1 min-w-0\"\n />\n </div>\n );\n\n case 'combobox':\n return (\n <Select\n value={filterConfig.value || ''}\n onValueChange={(value) => onValueChange(value)}\n >\n <SelectTrigger className=\"cls_filter_combobox_select w-full min-w-0\">\n <SelectValue placeholder=\"Select option...\" />\n </SelectTrigger>\n <SelectContent>\n {fieldConfig.comboboxOptions?.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n\n case 'boolean':\n const trueLabel = fieldConfig.booleanLabels?.trueLabel || 'On';\n const falseLabel = fieldConfig.booleanLabels?.falseLabel || 'Off';\n \n return (\n <Select\n value={filterConfig.value !== undefined && filterConfig.value !== null ? String(filterConfig.value) : ''}\n onValueChange={(value) => onValueChange(value === 'true')}\n >\n <SelectTrigger className=\"cls_filter_boolean_select w-full min-w-0\">\n <SelectValue placeholder=\"Select...\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">{trueLabel}</SelectItem>\n <SelectItem value=\"false\">{falseLabel}</SelectItem>\n </SelectContent>\n </Select>\n );\n\n case 'date':\n const dateOperators = [\n { value: 'equals', label: 'Equals' },\n { value: 'not_equals', label: 'Not Equals' },\n { value: 'greater_than', label: 'Greater Than' },\n { value: 'less_than', label: 'Less Than' },\n { value: 'greater_equal', label: 'Greater or Equal' },\n { value: 'less_equal', label: 'Less or Equal' },\n ];\n\n const selectedDate = filterConfig.value \n ? (typeof filterConfig.value === 'string' ? new Date(filterConfig.value) : filterConfig.value)\n : undefined;\n\n return (\n <div className=\"cls_date_filter_container flex flex-col sm:flex-row items-stretch sm:items-center gap-2 w-full\">\n <Select\n value={filterConfig.operator || 'equals'}\n onValueChange={(value) => onOperatorChange?.(value)}\n >\n <SelectTrigger className=\"cls_operator_select w-full sm:w-[140px] shrink-0\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {dateOperators.map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Popover open={isCalendarOpen} onOpenChange={setIsCalendarOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn(\n \"cls_date_picker_trigger w-full justify-start text-left font-normal min-w-0\",\n !selectedDate && \"text-muted-foreground\"\n )}\n >\n <CalendarIcon className=\"cls_calendar_icon mr-2 h-4 w-4 shrink-0\" />\n <span className=\"cls_date_text truncate\">\n {selectedDate ? (\n format(selectedDate, \"MMM d, yyyy\")\n ) : (\n \"Pick a date\"\n )}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_calendar_popover w-auto p-0\" align=\"start\">\n <CalendarComponent\n mode=\"single\"\n selected={selectedDate}\n onSelect={(date) => {\n onValueChange(date);\n setIsCalendarOpen(false);\n }}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n </div>\n );\n\n default:\n return null;\n }\n };\n\n return (\n <div className=\"cls_filter_field_item flex flex-col sm:flex-row items-start sm:items-center gap-3 p-3 border rounded-md bg-card\">\n <span className=\"cls_field_label text-sm font-medium min-w-[120px] sm:min-w-[100px] truncate\">{fieldConfig.label}</span>\n <div className=\"cls_field_input_container flex-1 min-w-0 w-full sm:w-auto\">\n {renderInput()}\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onDelete}\n className=\"cls_delete_btn h-8 w-8 p-0 text-destructive hover:text-destructive shrink-0\"\n aria-label={`Remove ${fieldConfig.label} filter`}\n >\n <Trash2 className=\"cls_delete_icon h-4 w-4\" />\n </Button>\n </div>\n );\n}\n\nexport function HazoUiMultiFilterDialog({\n availableFields,\n onFilterChange,\n initialFilters = [],\n title = \"Filter\",\n description = \"Add multiple fields to filter by. Select a field and set its filter value.\",\n}: HazoUiMultiFilterDialogProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [filterFields, setFilterFields] = useState<FilterConfig[]>(initialFilters);\n const [isComboboxOpen, setIsComboboxOpen] = useState(false);\n\n // Sync local state with initialFilters when dialog opens\n useEffect(() => {\n if (isOpen) {\n setFilterFields(initialFilters);\n }\n }, [isOpen, initialFilters]);\n\n const handleAddField = (fieldValue: string) => {\n // Check if field is already added\n if (filterFields.some(ff => ff.field === fieldValue)) {\n return;\n }\n\n const fieldConfig = availableFields.find(af => af.value === fieldValue);\n if (!fieldConfig) {\n return;\n }\n\n let defaultValue: any = '';\n if (fieldConfig.type === 'boolean') {\n defaultValue = false;\n } else if (fieldConfig.type === 'number') {\n defaultValue = fieldConfig.numberConfig?.min || 0;\n } else if (fieldConfig.type === 'date') {\n defaultValue = new Date(); // Default to today\n }\n\n const newFilter: FilterConfig = {\n field: fieldValue,\n operator: (fieldConfig.type === 'number' || fieldConfig.type === 'date') ? 'equals' : undefined,\n value: defaultValue,\n };\n setFilterFields([...filterFields, newFilter]);\n setIsComboboxOpen(false);\n };\n\n const handleDeleteField = (fieldValue: string) => {\n setFilterFields(filterFields.filter(ff => ff.field !== fieldValue));\n };\n\n const handleValueChange = (fieldValue: string, value: any) => {\n setFilterFields(\n filterFields.map(ff =>\n ff.field === fieldValue ? { ...ff, value } : ff\n )\n );\n };\n\n const handleOperatorChange = (fieldValue: string, operator: string) => {\n setFilterFields(\n filterFields.map(ff =>\n ff.field === fieldValue ? { ...ff, operator } : ff\n )\n );\n };\n\n const handleApply = () => {\n // Call onFilterChange with the current filter configuration\n onFilterChange([...filterFields]);\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setFilterFields(initialFilters);\n setIsOpen(false);\n };\n\n const handleClearAll = () => {\n setFilterFields([]);\n };\n\n // Get available fields that haven't been added yet\n const availableFieldsToAdd = availableFields.filter(\n af => !filterFields.some(ff => ff.field === af.value)\n );\n\n // Get field config helper\n const getFieldConfig = (fieldValue: string): FilterField | undefined => {\n return availableFields.find(af => af.value === fieldValue);\n };\n\n // Check if there are active filters\n const hasActiveFilters = initialFilters.length > 0;\n\n // Format tooltip content showing active filters\n const tooltipContent = hasActiveFilters ? (\n <div className=\"cls_filter_tooltip_content space-y-1\">\n <div className=\"cls_tooltip_title text-xs font-semibold mb-1\">Active Filters:</div>\n {initialFilters.map((filterConfig) => {\n const fieldConfig = getFieldConfig(filterConfig.field);\n if (!fieldConfig) return null;\n \n let displayValue = String(filterConfig.value);\n if (fieldConfig.type === 'boolean') {\n displayValue = filterConfig.value\n ? (fieldConfig.booleanLabels?.trueLabel || 'On')\n : (fieldConfig.booleanLabels?.falseLabel || 'Off');\n } else if (fieldConfig.type === 'combobox') {\n const option = fieldConfig.comboboxOptions?.find(opt => opt.value === filterConfig.value);\n displayValue = option?.label || displayValue;\n } else if (fieldConfig.type === 'date') {\n const dateValue = filterConfig.value instanceof Date \n ? filterConfig.value \n : new Date(filterConfig.value);\n if (!isNaN(dateValue.getTime())) {\n displayValue = format(dateValue, \"MMM d, yyyy\");\n }\n }\n \n const operatorLabel = filterConfig.operator\n ? filterConfig.operator.replace('_', ' ').replace(/\\b\\w/g, l => l.toUpperCase()) + ' '\n : '';\n \n return (\n <div key={filterConfig.field} className=\"cls_tooltip_item text-xs\">\n {fieldConfig.label}: {operatorLabel}{displayValue}\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"cls_filter_tooltip_content text-xs\">No active filters</div>\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"cls_filter_button\"\n aria-label=\"Open filter dialog\"\n >\n <Filter\n className={cn(\n \"cls_filter_icon h-4 w-4 mr-2\",\n hasActiveFilters && \"text-blue-600\"\n )}\n />\n Filter\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent>\n {tooltipContent}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <DialogContent className=\"cls_filter_dialog_content max-w-lg w-full max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>\n {description}\n </DialogDescription>\n </DialogHeader>\n <div className=\"cls_filter_dialog_body space-y-4 py-4\">\n {/* Add Field Combobox */}\n <div className=\"cls_add_field_section\">\n <Popover open={isComboboxOpen} onOpenChange={setIsComboboxOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={isComboboxOpen}\n className=\"cls_add_field_combobox w-full justify-between\"\n >\n <div className=\"cls_combobox_content flex items-center\">\n <Plus className=\"cls_plus_icon h-4 w-4 mr-2\" />\n <span>Add field</span>\n </div>\n <ChevronsUpDown className=\"cls_chevron_icon ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_combobox_popover w-full p-0\">\n <Command>\n <CommandInput placeholder=\"Search fields...\" className=\"cls_command_input\" />\n <CommandList>\n {availableFieldsToAdd.length === 0 ? (\n <CommandEmpty>No fields found.</CommandEmpty>\n ) : (\n <CommandGroup>\n {availableFieldsToAdd.map((field) => (\n <CommandItem\n key={field.value}\n value={field.label}\n onSelect={() => handleAddField(field.value)}\n className=\"cls_command_item\"\n >\n <CheckIcon\n className={cn(\n \"cls_check_icon mr-2 h-4 w-4\",\n false ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n {field.label}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n\n {/* Filter Fields List */}\n {filterFields.length > 0 ? (\n <div className=\"cls_filter_fields_list space-y-2\">\n {filterFields.map((filterConfig) => {\n const fieldConfig = getFieldConfig(filterConfig.field);\n if (!fieldConfig) return null;\n\n return (\n <FilterFieldItem\n key={filterConfig.field}\n filterConfig={filterConfig}\n fieldConfig={fieldConfig}\n onValueChange={(value) => handleValueChange(filterConfig.field, value)}\n onOperatorChange={(operator) => handleOperatorChange(filterConfig.field, operator)}\n onDelete={() => handleDeleteField(filterConfig.field)}\n />\n );\n })}\n </div>\n ) : (\n <div className=\"cls_empty_filter_fields text-center py-8 text-sm text-muted-foreground\">\n No filter fields added. Click \"Add field\" to add filtering criteria.\n </div>\n )}\n </div>\n <DialogFooter>\n {filterFields.length > 0 && (\n <Button\n variant=\"outline\"\n onClick={handleClearAll}\n className=\"cls_clear_all_btn\"\n >\n <X className=\"cls_clear_all_icon h-4 w-4 mr-2\" />\n Clear All\n </Button>\n )}\n <Button\n onClick={handleApply}\n className=\"cls_apply_btn\"\n >\n Apply\n </Button>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n className=\"cls_cancel_btn\"\n >\n Cancel\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n","// Switch component for hazo_ui library\n// Based on shadcn/ui switch component\nimport * as React from \"react\";\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\";\nimport { cn } from \"../../lib/utils\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n\n","// Label component for hazo_ui library\n// Based on shadcn/ui label component (placeholder - not used in HazoUiMultiFilterDialog but included for completeness)\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement> {}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, ...props }, ref) => {\n return (\n <label\n ref={ref}\n className={cn(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className\n )}\n {...props}\n />\n );\n }\n);\nLabel.displayName = \"Label\";\n\nexport { Label };\n\n","\"use client\";\n\n/**\n * Hazo UI Multi Sort Dialog Component\n * \n * Reusable component for multi-field sorting with drag-and-drop reordering.\n * Allows users to select multiple fields for sorting, reorder them, and set ascending/descending direction.\n */\n\nimport { useState, useEffect } from 'react';\nimport { Button } from \"../ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"../ui/dialog\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../ui/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\nimport { Switch } from \"../ui/switch\";\nimport { Label } from \"../ui/label\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { ArrowUpDown, GripVertical, Trash2, Plus, Check as CheckIcon, ChevronsUpDown } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nexport interface SortField {\n value: string;\n label: string;\n}\n\nexport interface SortConfig {\n field: string;\n direction: 'asc' | 'desc';\n}\n\ninterface HazoUiMultiSortDialogProps {\n availableFields: SortField[];\n onSortChange: (sortConfig: SortConfig[]) => void;\n initialSortFields?: SortConfig[];\n title?: string;\n description?: string;\n}\n\ninterface SortableSortFieldItemProps {\n sortConfig: SortConfig;\n fieldLabel: string;\n onDirectionChange: (direction: 'asc' | 'desc') => void;\n onDelete: () => void;\n}\n\nfunction SortableSortFieldItem({\n sortConfig,\n fieldLabel,\n onDirectionChange,\n onDelete,\n}: SortableSortFieldItemProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: sortConfig.field });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className=\"cls_sortable_sort_field_item flex items-center gap-3 p-3 border rounded-md bg-card\"\n >\n <div\n {...attributes}\n {...listeners}\n className=\"cls_drag_handle cursor-grab active:cursor-grabbing text-muted-foreground hover:text-foreground\"\n >\n <GripVertical className=\"cls_drag_icon h-4 w-4\" />\n </div>\n <span className=\"cls_field_label flex-1 text-sm font-medium\">{fieldLabel}</span>\n <div className=\"cls_direction_control flex items-center gap-2\">\n <Label htmlFor={`switch-${sortConfig.field}`} className=\"cls_direction_label text-xs text-muted-foreground\">\n {sortConfig.direction === 'asc' ? 'Ascending' : 'Descending'}\n </Label>\n <Switch\n id={`switch-${sortConfig.field}`}\n checked={sortConfig.direction === 'desc'}\n onCheckedChange={(checked) => onDirectionChange(checked ? 'desc' : 'asc')}\n aria-label={`Toggle sort direction for ${fieldLabel}`}\n />\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onDelete}\n className=\"cls_delete_btn h-8 w-8 p-0 text-destructive hover:text-destructive\"\n aria-label={`Remove ${fieldLabel} from sort`}\n >\n <Trash2 className=\"cls_delete_icon h-4 w-4\" />\n </Button>\n </div>\n );\n}\n\nexport function HazoUiMultiSortDialog({\n availableFields,\n onSortChange,\n initialSortFields = [],\n title = \"Sort\",\n description = \"Add multiple fields to sort by and reorder them. Use the switch to toggle between ascending and descending.\",\n}: HazoUiMultiSortDialogProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [sortFields, setSortFields] = useState<SortConfig[]>(initialSortFields);\n const [isComboboxOpen, setIsComboboxOpen] = useState(false);\n \n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n // Sync local state with initialSortFields when dialog opens\n useEffect(() => {\n if (isOpen) {\n setSortFields(initialSortFields);\n }\n }, [isOpen, initialSortFields]);\n\n const handleAddField = (fieldValue: string) => {\n // Check if field is already added\n if (sortFields.some(sf => sf.field === fieldValue)) {\n return;\n }\n\n const newField: SortConfig = {\n field: fieldValue,\n direction: 'asc',\n };\n setSortFields([...sortFields, newField]);\n setIsComboboxOpen(false);\n };\n\n const handleDeleteField = (fieldValue: string) => {\n setSortFields(sortFields.filter(sf => sf.field !== fieldValue));\n };\n\n const handleDirectionChange = (fieldValue: string, direction: 'asc' | 'desc') => {\n setSortFields(\n sortFields.map(sf =>\n sf.field === fieldValue ? { ...sf, direction } : sf\n )\n );\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (!over || active.id === over.id) {\n return;\n }\n\n const oldIndex = sortFields.findIndex(sf => sf.field === active.id);\n const newIndex = sortFields.findIndex(sf => sf.field === over.id);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n setSortFields(arrayMove(sortFields, oldIndex, newIndex));\n }\n };\n\n const handleApply = () => {\n // Call onSortChange with the current sort configuration\n onSortChange([...sortFields]);\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setSortFields(initialSortFields);\n setIsOpen(false);\n };\n\n const handleClearAll = () => {\n setSortFields([]);\n };\n\n // Get available fields that haven't been added yet\n const availableFieldsToAdd = availableFields.filter(\n af => !sortFields.some(sf => sf.field === af.value)\n );\n\n // Get field label helper\n const getFieldLabel = (fieldValue: string): string => {\n return availableFields.find(af => af.value === fieldValue)?.label || fieldValue;\n };\n\n // Check if there are active sort fields\n const hasActiveSorts = initialSortFields.length > 0;\n\n // Format tooltip content showing active sort fields\n const tooltipContent = hasActiveSorts ? (\n <div className=\"cls_sort_tooltip_content space-y-1\">\n <div className=\"cls_tooltip_title text-xs font-semibold mb-1\">Active Sorts:</div>\n {initialSortFields.map((sortConfig, index) => (\n <div key={sortConfig.field} className=\"cls_tooltip_item text-xs\">\n {index + 1}. {getFieldLabel(sortConfig.field)} ({sortConfig.direction === 'asc' ? 'Asc' : 'Desc'})\n </div>\n ))}\n </div>\n ) : (\n <div className=\"cls_sort_tooltip_content text-xs\">No active sorts</div>\n );\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <DialogTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"cls_sort_button\"\n aria-label=\"Open sort dialog\"\n >\n <ArrowUpDown \n className={cn(\n \"cls_sort_icon h-4 w-4 mr-2\",\n hasActiveSorts && \"text-blue-600\"\n )} \n />\n Sort\n </Button>\n </DialogTrigger>\n </TooltipTrigger>\n <TooltipContent>\n {tooltipContent}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n <DialogContent className=\"cls_sort_dialog_content max-w-lg\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>\n {description}\n </DialogDescription>\n </DialogHeader>\n <div className=\"cls_sort_dialog_body space-y-4 py-4\">\n {/* Add Field Combobox */}\n <div className=\"cls_add_field_section\">\n <Popover open={isComboboxOpen} onOpenChange={setIsComboboxOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={isComboboxOpen}\n className=\"cls_add_field_combobox w-full justify-between\"\n >\n <div className=\"cls_combobox_content flex items-center\">\n <Plus className=\"cls_plus_icon h-4 w-4 mr-2\" />\n <span>Add field</span>\n </div>\n <ChevronsUpDown className=\"cls_chevron_icon ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"cls_combobox_popover w-full p-0\">\n <Command>\n <CommandInput placeholder=\"Search fields...\" className=\"cls_command_input\" />\n <CommandList>\n {availableFieldsToAdd.length === 0 ? (\n <CommandEmpty>No fields found.</CommandEmpty>\n ) : (\n <CommandGroup>\n {availableFieldsToAdd.map((field) => (\n <CommandItem\n key={field.value}\n value={field.label}\n onSelect={() => handleAddField(field.value)}\n className=\"cls_command_item\"\n >\n <CheckIcon\n className={cn(\n \"cls_check_icon mr-2 h-4 w-4\",\n false ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n {field.label}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n </div>\n\n {/* Sort Fields List */}\n {sortFields.length > 0 ? (\n <div className=\"cls_sort_fields_list space-y-2\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={sortFields.map(sf => sf.field)}\n strategy={verticalListSortingStrategy}\n >\n {sortFields.map((sortConfig) => (\n <SortableSortFieldItem\n key={sortConfig.field}\n sortConfig={sortConfig}\n fieldLabel={getFieldLabel(sortConfig.field)}\n onDirectionChange={(direction) =>\n handleDirectionChange(sortConfig.field, direction)\n }\n onDelete={() => handleDeleteField(sortConfig.field)}\n />\n ))}\n </SortableContext>\n </DndContext>\n </div>\n ) : (\n <div className=\"cls_empty_sort_fields text-center py-8 text-sm text-muted-foreground\">\n No sort fields added. Click \"Add field\" to add sorting criteria.\n </div>\n )}\n </div>\n <DialogFooter>\n {sortFields.length > 0 && (\n <Button\n variant=\"outline\"\n onClick={handleClearAll}\n className=\"cls_clear_all_btn\"\n >\n <Trash2 className=\"cls_clear_all_icon h-4 w-4 mr-2\" />\n Clear All\n </Button>\n )}\n <Button\n onClick={handleApply}\n className=\"cls_apply_btn\"\n >\n Apply\n </Button>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n className=\"cls_cancel_btn\"\n >\n Cancel\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n","// Radio group component for hazo_ui library\n// Based on shadcn/ui radio group component\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { Circle } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n );\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n\n\n","\"use client\";\n\n/**\n * Hazo UI Flex Radio Component\n * \n * Flexible radio button/icon selection component with support for single and multi-selection modes,\n * customizable layouts, and react-icons integration.\n */\n\nimport { RadioGroup, RadioGroupItem } from \"../ui/radio-group\";\nimport { Button } from \"../ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from \"../ui/tooltip\";\nimport { cn } from \"../../lib/utils\";\n// Import icon sets - tree-shaking will remove unused ones\nimport * as FaIcons from \"react-icons/fa\";\nimport * as MdIcons from \"react-icons/md\";\nimport * as HiIcons from \"react-icons/hi\";\nimport * as BiIcons from \"react-icons/bi\";\nimport * as AiIcons from \"react-icons/ai\";\nimport * as BsIcons from \"react-icons/bs\";\nimport * as FiIcons from \"react-icons/fi\";\nimport * as IoIcons from \"react-icons/io5\";\nimport * as RiIcons from \"react-icons/ri\";\nimport * as TbIcons from \"react-icons/tb\";\nimport * as CiIcons from \"react-icons/ci\";\n\n// Icon set mapping\nconst iconSetMap: Record<string, any> = {\n fa: FaIcons,\n md: MdIcons,\n hi: HiIcons,\n bi: BiIcons,\n ai: AiIcons,\n bs: BsIcons,\n fi: FiIcons,\n io: IoIcons,\n io5: IoIcons,\n ri: RiIcons,\n tb: TbIcons,\n ci: CiIcons,\n};\n\n/**\n * Get icon library for a given icon set\n */\nfunction getIconLibrary(iconSet: string): any {\n if (!iconSet) return null;\n const normalizedSet = iconSet.toLowerCase();\n return iconSetMap[normalizedSet] || null;\n}\n\nexport interface HazoUiFlexRadioItem {\n label: string;\n value: string;\n icon_selected?: string;\n icon_unselected?: string;\n fgcolor?: string; // Foreground color for the icon (text/icon color)\n bgcolor?: string; // Background color for the icon button\n}\n\nexport interface HazoUiFlexRadioProps {\n layout?: \"horizontal\" | \"vertical\";\n style?: \"radio\" | \"icons\";\n display_label?: boolean;\n icon_set?: string; // Package name like 'fa', 'md', etc.\n data: HazoUiFlexRadioItem[];\n selection: \"single\" | \"multi\";\n value: string | string[];\n onChange: (value: string | string[]) => void;\n className?: string;\n compressed?: boolean; // When true, removes padding and spacing between elements\n}\n\n/**\n * Get icon component from react-icons based on icon set and icon name\n */\nfunction getIconComponent(iconSet: string | undefined, iconName: string | undefined): React.ComponentType<any> | null {\n if (!iconSet || !iconName) return null;\n \n const iconLibrary = getIconLibrary(iconSet);\n if (!iconLibrary) return null;\n \n const IconComponent = iconLibrary[iconName];\n return IconComponent || null;\n}\n\n/**\n * Hazo UI Flex Radio Component\n * Supports single and multi-selection with radio buttons or icons\n */\nexport function HazoUiFlexRadio({\n layout = \"horizontal\",\n style = \"radio\",\n display_label = true,\n icon_set,\n data,\n selection = \"single\",\n value,\n onChange,\n className,\n compressed = false,\n}: HazoUiFlexRadioProps) {\n // Icon library is loaded lazily when needed\n\n /**\n * Handle single selection change\n */\n const handleSingleSelection = (selectedValue: string) => {\n onChange(selectedValue);\n };\n\n /**\n * Handle multi selection change\n */\n const handleMultiSelection = (selectedValue: string) => {\n const currentValues = Array.isArray(value) ? value : [];\n const isSelected = currentValues.includes(selectedValue);\n \n if (isSelected) {\n // Remove from selection\n onChange(currentValues.filter((v) => v !== selectedValue));\n } else {\n // Add to selection\n onChange([...currentValues, selectedValue]);\n }\n };\n\n /**\n * Check if an item is selected\n */\n const isSelected = (itemValue: string): boolean => {\n if (selection === \"single\") {\n return value === itemValue;\n } else {\n const currentValues = Array.isArray(value) ? value : [];\n return currentValues.includes(itemValue);\n }\n };\n\n /**\n * Render radio style option\n */\n const renderRadioOption = (item: HazoUiFlexRadioItem) => {\n const selected = isSelected(item.value);\n \n if (selection === \"single\") {\n const optionContent = (\n <div\n className={cn(\n \"cls_radio_option flex items-center gap-2\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n compressed ? \"\" : \"p-2 rounded-md\",\n \"hover:bg-accent transition-colors\",\n selected && \"bg-accent\"\n )}\n >\n <RadioGroupItem\n value={item.value}\n id={`radio-${item.value}`}\n className=\"cls_radio_item shrink-0\"\n />\n {display_label && (\n <label\n htmlFor={`radio-${item.value}`}\n className=\"cls_radio_label text-sm font-medium cursor-pointer flex-1\"\n >\n {item.label}\n </label>\n )}\n </div>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {optionContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n } else {\n // Multi-selection with checkbox-like behavior\n const optionContent = (\n <div\n className={cn(\n \"cls_radio_option flex items-center gap-2 cursor-pointer\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n compressed ? \"\" : \"p-2 rounded-md\",\n \"hover:bg-accent transition-colors\",\n selected && \"bg-accent\"\n )}\n onClick={() => handleMultiSelection(item.value)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleMultiSelection(item.value);\n }\n }}\n >\n <div\n className={cn(\n \"cls_checkbox_indicator h-4 w-4 rounded-sm border-2 border-primary flex items-center justify-center transition-colors shrink-0\",\n selected ? \"bg-primary\" : \"bg-background\"\n )}\n >\n {selected && (\n <svg\n className=\"cls_checkmark h-3 w-3 text-primary-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {display_label && (\n <span className=\"cls_checkbox_label text-sm font-medium flex-1\">\n {item.label}\n </span>\n )}\n </div>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {optionContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n }\n };\n\n /**\n * Render icon style option\n */\n const renderIconOption = (item: HazoUiFlexRadioItem) => {\n const selected = isSelected(item.value);\n \n // Get icon components\n const SelectedIcon = icon_set && item.icon_selected\n ? getIconComponent(icon_set, item.icon_selected)\n : null;\n const UnselectedIcon = icon_set && item.icon_unselected\n ? getIconComponent(icon_set, item.icon_unselected)\n : null;\n \n const IconComponent = selected && SelectedIcon ? SelectedIcon : (UnselectedIcon || SelectedIcon);\n \n // Apply custom colors if provided\n const buttonStyles: React.CSSProperties = {};\n if (item.bgcolor) {\n buttonStyles.backgroundColor = item.bgcolor;\n }\n \n const buttonContent = (\n <Button\n variant={selected ? \"default\" : \"ghost\"}\n size=\"default\"\n className={cn(\n \"cls_icon_option border-0\",\n layout === \"horizontal\" ? \"flex-row\" : \"flex-col\",\n \"gap-2 h-auto\",\n compressed ? \"py-0 px-0\" : \"py-2 px-3 sm:py-3 sm:px-4\",\n // Only apply default colors if custom colors are not provided\n !item.bgcolor && selected && \"bg-primary text-primary-foreground\",\n !item.bgcolor && !selected && \"hover:bg-accent\"\n )}\n style={Object.keys(buttonStyles).length > 0 ? buttonStyles : undefined}\n onClick={() => {\n if (selection === \"single\") {\n handleSingleSelection(item.value);\n } else {\n handleMultiSelection(item.value);\n }\n }}\n aria-label={item.label}\n aria-pressed={selected}\n >\n {IconComponent && (\n <IconComponent \n className=\"cls_icon h-4 w-4 sm:h-5 sm:w-5\" \n style={item.fgcolor ? { color: item.fgcolor } : undefined}\n />\n )}\n {display_label && (\n <span \n className=\"cls_icon_label text-sm font-medium\"\n style={item.fgcolor ? { color: item.fgcolor } : undefined}\n >\n {item.label}\n </span>\n )}\n </Button>\n );\n \n return (\n <Tooltip key={item.value} delayDuration={1000}>\n <TooltipTrigger asChild>\n {buttonContent}\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"cls_tooltip_text\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n );\n };\n\n // Container classes with single outline\n const containerClasses = cn(\n \"cls_hazo_ui_flex_radio border border-input rounded-md\",\n compressed ? \"\" : \"p-2 sm:p-3\",\n layout === \"horizontal\"\n ? cn(\n \"flex flex-row flex-wrap\",\n compressed ? \"gap-0\" : \"gap-2 sm:gap-3\"\n )\n : cn(\n \"flex flex-col\",\n compressed ? \"gap-0\" : \"gap-2 sm:gap-3\"\n ),\n className\n );\n \n // RadioGroup needs grid override for flex layout\n const radioGroupClasses = cn(\n containerClasses,\n \"!flex !flex-row !flex-wrap\" // Override RadioGroup's default grid\n );\n\n if (style === \"icons\") {\n // Icon style - use buttons\n return (\n <TooltipProvider delayDuration={1000}>\n <div className={containerClasses} role={selection === \"single\" ? \"radiogroup\" : \"group\"}>\n {data.map((item) => renderIconOption(item))}\n </div>\n </TooltipProvider>\n );\n } else {\n // Radio style - use RadioGroup for single, custom for multi\n if (selection === \"single\") {\n return (\n <TooltipProvider delayDuration={1000}>\n <RadioGroup\n value={typeof value === \"string\" ? value : \"\"}\n onValueChange={handleSingleSelection}\n className={layout === \"horizontal\" \n ? cn(radioGroupClasses, \"!flex-row\")\n : cn(radioGroupClasses, \"!flex-col\")\n }\n >\n {data.map((item) => renderRadioOption(item))}\n </RadioGroup>\n </TooltipProvider>\n );\n } else {\n return (\n <TooltipProvider delayDuration={1000}>\n <div className={containerClasses} role=\"group\">\n {data.map((item) => renderRadioOption(item))}\n </div>\n </TooltipProvider>\n );\n }\n }\n}\n\n","\"use client\";\n\n/**\n * Hazo UI Flex Input Component\n * \n * Enhanced input component with type validation, character restrictions, and error messaging.\n * Extends shadcn Input component with additional validation props.\n */\n\nimport * as React from \"react\";\nimport { Input, type InputProps } from \"../ui/input\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface HazoUiFlexInputProps extends Omit<InputProps, \"type\"> {\n input_type?: \"mixed\" | \"numeric\" | \"email\" | \"alpha\";\n text_len_min?: number;\n text_len_max?: number;\n num_min?: number;\n num_max?: number;\n regex?: string | RegExp;\n num_decimals?: number;\n format_guide?: string;\n format_guide_info?: boolean;\n}\n\n/**\n * Validate input value based on input_type and constraints\n */\nfunction validateInput(\n value: string,\n input_type: \"mixed\" | \"numeric\" | \"email\" | \"alpha\",\n text_len_min?: number,\n text_len_max?: number,\n num_min?: number,\n num_max?: number,\n regex?: string | RegExp,\n num_decimals?: number\n): { isValid: boolean; errorMessage?: string } {\n // Empty value validation\n if (value === \"\") {\n return { isValid: true };\n }\n\n // Type-specific validation\n switch (input_type) {\n case \"numeric\": {\n // Check if value is a valid number\n const numValue = parseFloat(value);\n if (isNaN(numValue)) {\n return { isValid: false, errorMessage: \"Must be a valid number\" };\n }\n\n // Check decimal places\n if (num_decimals !== undefined) {\n const decimalPlaces = value.split(\".\")[1]?.length || 0;\n if (decimalPlaces > num_decimals) {\n return {\n isValid: false,\n errorMessage: `Maximum ${num_decimals} decimal place${num_decimals !== 1 ? \"s\" : \"\"} allowed`,\n };\n }\n }\n\n // Check min/max\n if (num_min !== undefined && numValue < num_min) {\n return { isValid: false, errorMessage: `Must be at least ${num_min}` };\n }\n if (num_max !== undefined && numValue > num_max) {\n return { isValid: false, errorMessage: `Must be at most ${num_max}` };\n }\n break;\n }\n\n case \"alpha\": {\n // Check if value contains only letters\n const alphaRegex = /^[A-Za-z\\s]*$/;\n if (!alphaRegex.test(value)) {\n return { isValid: false, errorMessage: \"Only letters are allowed\" };\n }\n break;\n }\n\n case \"email\": {\n // Basic email validation\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return { isValid: false, errorMessage: \"Must be a valid email address\" };\n }\n break;\n }\n\n case \"mixed\": {\n // Check length constraints\n if (text_len_min !== undefined && value.length < text_len_min) {\n return {\n isValid: false,\n errorMessage: `Must be at least ${text_len_min} character${text_len_min !== 1 ? \"s\" : \"\"}`,\n };\n }\n if (text_len_max !== undefined && value.length > text_len_max) {\n return {\n isValid: false,\n errorMessage: `Must be at most ${text_len_max} character${text_len_max !== 1 ? \"s\" : \"\"}`,\n };\n }\n break;\n }\n }\n\n // Regex validation (applies to all types if provided)\n if (regex) {\n const regexPattern = typeof regex === \"string\" ? new RegExp(regex) : regex;\n if (!regexPattern.test(value)) {\n return { isValid: false, errorMessage: \"Invalid format\" };\n }\n }\n\n return { isValid: true };\n}\n\n/**\n * Filter input value based on input_type to prevent invalid characters\n */\nfunction filterInputValue(\n value: string,\n input_type: \"mixed\" | \"numeric\" | \"email\" | \"alpha\",\n num_decimals?: number\n): string {\n switch (input_type) {\n case \"numeric\": {\n // Allow digits, decimal point, and minus sign\n let filtered = value.replace(/[^\\d.-]/g, \"\");\n\n // Handle decimal point - only allow one\n const parts = filtered.split(\".\");\n if (parts.length > 2) {\n filtered = parts[0] + \".\" + parts.slice(1).join(\"\");\n }\n\n // If num_decimals is 0, don't allow decimal point\n if (num_decimals === 0 && filtered.includes(\".\")) {\n filtered = filtered.replace(\".\", \"\");\n }\n\n // Limit decimal places\n if (num_decimals !== undefined && num_decimals > 0) {\n const parts = filtered.split(\".\");\n if (parts.length === 2 && parts[1].length > num_decimals) {\n filtered = parts[0] + \".\" + parts[1].substring(0, num_decimals);\n }\n }\n\n return filtered;\n }\n\n case \"alpha\": {\n // Allow only letters and spaces\n return value.replace(/[^A-Za-z\\s]/g, \"\");\n }\n\n case \"email\":\n case \"mixed\":\n default: {\n // Allow all characters for email and mixed\n return value;\n }\n }\n}\n\nexport const HazoUiFlexInput = React.forwardRef<\n HTMLInputElement,\n HazoUiFlexInputProps\n>(\n (\n {\n className,\n input_type = \"mixed\",\n text_len_min,\n text_len_max,\n num_min,\n num_max,\n regex,\n num_decimals,\n format_guide,\n format_guide_info = false,\n value: controlledValue,\n onChange,\n onBlur,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState<string>(\n typeof controlledValue === \"string\" ? controlledValue : (typeof controlledValue === \"number\" ? String(controlledValue) : \"\")\n );\n const [errorMessage, setErrorMessage] = React.useState<string | undefined>();\n\n // Use controlled value if provided, otherwise use internal state\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled\n ? (typeof controlledValue === \"string\" ? controlledValue : String(controlledValue || \"\"))\n : internalValue;\n\n // Sync internal state when controlled value changes externally\n React.useEffect(() => {\n if (isControlled) {\n const newValue = typeof controlledValue === \"string\" ? controlledValue : String(controlledValue || \"\");\n if (newValue !== internalValue) {\n setInternalValue(newValue);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlledValue, isControlled]);\n\n /**\n * Handle input change with character filtering\n */\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let newValue = e.target.value;\n\n // Apply character filtering for numeric and alpha types\n if (input_type === \"numeric\" || input_type === \"alpha\") {\n newValue = filterInputValue(newValue, input_type, num_decimals);\n }\n\n // Update internal state if uncontrolled\n if (!isControlled) {\n setInternalValue(newValue);\n }\n\n // Clear error on change\n if (errorMessage) {\n setErrorMessage(undefined);\n }\n\n // Call original onChange if provided\n if (onChange) {\n const syntheticEvent = {\n ...e,\n target: { ...e.target, value: newValue },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n /**\n * Handle blur event with validation\n */\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n const validation = validateInput(\n currentValue,\n input_type,\n text_len_min,\n text_len_max,\n num_min,\n num_max,\n regex,\n num_decimals\n );\n\n if (!validation.isValid) {\n setErrorMessage(validation.errorMessage || format_guide || \"Invalid input\");\n } else {\n setErrorMessage(undefined);\n }\n\n // Call original onBlur if provided\n if (onBlur) {\n onBlur(e);\n }\n };\n\n // Determine input type for HTML input element\n const htmlInputType =\n input_type === \"email\" ? \"email\" : input_type === \"numeric\" ? \"text\" : \"text\";\n\n // Determine if input has error\n const hasError = errorMessage !== undefined;\n\n return (\n <div className=\"cls_hazo_ui_flex_input_container w-full\">\n <Input\n ref={ref}\n type={htmlInputType}\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n className={cn(\n hasError && \"border-destructive focus-visible:ring-destructive\",\n className\n )}\n {...props}\n />\n {hasError && errorMessage && (\n <p className=\"cls_error_message mt-1 text-sm text-destructive\">\n {errorMessage}\n </p>\n )}\n {format_guide_info && format_guide && (\n <p\n className={cn(\n \"cls_format_guide_info mt-1 text-xs italic text-muted-foreground\",\n hasError && \"mt-0\"\n )}\n >\n {format_guide}\n </p>\n )}\n </div>\n );\n }\n);\n\nHazoUiFlexInput.displayName = \"HazoUiFlexInput\";\n\n","\"use client\";\n\n/**\n * Toolbar Button Component\n *\n * Reusable button component for the RTE toolbar with active/disabled states\n * and tooltip support.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../../ui/tooltip\";\n\nexport interface ToolbarButtonProps {\n onClick?: () => void;\n is_active?: boolean;\n disabled?: boolean;\n tooltip?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const ToolbarButton = React.forwardRef<\n HTMLButtonElement,\n ToolbarButtonProps\n>(\n (\n { onClick, is_active = false, disabled = false, tooltip, className, children },\n ref\n ) => {\n const button = (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={cn(\n \"cls_rte_toolbar_button\",\n \"inline-flex items-center justify-center\",\n \"h-8 w-8 rounded-md\",\n \"text-sm font-medium\",\n \"transition-colors duration-150\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n // Default state\n \"bg-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground\",\n // Active state\n is_active && \"bg-accent text-accent-foreground\",\n // Disabled state\n disabled && \"opacity-50 cursor-not-allowed hover:bg-transparent hover:text-muted-foreground\",\n className\n )}\n >\n {children}\n </button>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"text-xs\">\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n }\n);\n\nToolbarButton.displayName = \"ToolbarButton\";\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"onChange\", \"width\", \"presetColors\", \"color\", \"editableDisable\", \"disableAlpha\", \"style\"];\nimport React, { useState, Fragment } from 'react';\nimport Saturation from '@uiw/react-color-saturation';\nimport Alpha from '@uiw/react-color-alpha';\nimport EditableInput from '@uiw/react-color-editable-input';\nimport RGBA from '@uiw/react-color-editable-input-rgba';\nimport Hue from '@uiw/react-color-hue';\nimport { validHex, hsvaToHex, hsvaToRgbaString, hexToHsva, color as handleColor } from '@uiw/color-convert';\nimport Swatch from '@uiw/react-color-swatch';\nimport { useEffect } from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar PRESET_COLORS = ['#D0021B', '#F5A623', '#f8e61b', '#8B572A', '#7ED321', '#417505', '#BD10E0', '#9013FE', '#4A90E2', '#50E3C2', '#B8E986', '#000000', '#4A4A4A', '#9B9B9B', '#FFFFFF'];\nvar Bar = props => /*#__PURE__*/_jsx(\"div\", {\n style: {\n boxShadow: 'rgb(0 0 0 / 60%) 0px 0px 2px',\n width: 4,\n top: 1,\n bottom: 1,\n left: props.left,\n borderRadius: 1,\n position: 'absolute',\n backgroundColor: '#fff'\n }\n});\nvar Sketch = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n prefixCls = 'w-color-sketch',\n className,\n onChange,\n width = 218,\n presetColors = PRESET_COLORS,\n color,\n editableDisable = true,\n disableAlpha = false,\n style\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var [hsva, setHsva] = useState({\n h: 209,\n s: 36,\n v: 90,\n a: 1\n });\n useEffect(() => {\n if (typeof color === 'string' && validHex(color)) {\n setHsva(hexToHsva(color));\n }\n if (typeof color === 'object') {\n setHsva(color);\n }\n }, [color]);\n var handleChange = hsv => {\n setHsva(hsv);\n onChange && onChange(handleColor(hsv));\n };\n var handleHex = (value, evn) => {\n if (typeof value === 'string' && validHex(value) && /(3|6)/.test(String(value.length))) {\n handleChange(hexToHsva(value));\n }\n };\n var handleAlphaChange = newAlpha => handleChange(_extends({}, hsva, {\n a: newAlpha.a\n }));\n var handleSaturationChange = newColor => handleChange(_extends({}, hsva, newColor, {\n a: hsva.a\n }));\n var styleMain = _extends({\n '--sketch-background': 'rgb(255, 255, 255)',\n '--sketch-box-shadow': 'rgb(0 0 0 / 15%) 0px 0px 0px 1px, rgb(0 0 0 / 15%) 0px 8px 16px',\n '--sketch-swatch-box-shadow': 'rgb(0 0 0 / 15%) 0px 0px 0px 1px inset',\n '--sketch-alpha-box-shadow': 'rgb(0 0 0 / 15%) 0px 0px 0px 1px inset, rgb(0 0 0 / 25%) 0px 0px 4px inset',\n '--sketch-swatch-border-top': '1px solid rgb(238, 238, 238)',\n background: 'var(--sketch-background)',\n borderRadius: 4,\n boxShadow: 'var(--sketch-box-shadow)',\n width\n }, style);\n var styleAlpha = {\n borderRadius: 2,\n background: hsvaToRgbaString(hsva),\n boxShadow: 'var(--sketch-alpha-box-shadow)'\n };\n var styleSwatch = {\n borderTop: 'var(--sketch-swatch-border-top)',\n paddingTop: 10,\n paddingLeft: 10\n };\n var styleSwatchRect = {\n marginRight: 10,\n marginBottom: 10,\n borderRadius: 3,\n boxShadow: 'var(--sketch-swatch-box-shadow)'\n };\n return /*#__PURE__*/_jsxs(\"div\", _extends({}, other, {\n className: prefixCls + \" \" + (className || ''),\n ref: ref,\n style: styleMain,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n style: {\n padding: '10px 10px 8px'\n },\n children: [/*#__PURE__*/_jsx(Saturation, {\n hsva: hsva,\n style: {\n width: 'auto',\n height: 150\n },\n onChange: handleSaturationChange\n }), /*#__PURE__*/_jsxs(\"div\", {\n style: {\n display: 'flex',\n marginTop: 4\n },\n children: [/*#__PURE__*/_jsxs(\"div\", {\n style: {\n flex: 1\n },\n children: [/*#__PURE__*/_jsx(Hue, {\n width: \"auto\",\n height: 10,\n hue: hsva.h,\n pointer: Bar,\n innerProps: {\n style: {\n marginLeft: 1,\n marginRight: 5\n }\n },\n onChange: newHue => handleChange(_extends({}, hsva, newHue))\n }), !disableAlpha && /*#__PURE__*/_jsx(Alpha, {\n width: \"auto\",\n height: 10,\n hsva: hsva,\n pointer: Bar,\n style: {\n marginTop: 4\n },\n innerProps: {\n style: {\n marginLeft: 1,\n marginRight: 5\n }\n },\n onChange: handleAlphaChange\n })]\n }), !disableAlpha && /*#__PURE__*/_jsx(Alpha, {\n width: 24,\n height: 24,\n hsva: hsva,\n radius: 2,\n style: {\n marginLeft: 4\n },\n bgProps: {\n style: {\n background: 'transparent'\n }\n },\n innerProps: {\n style: styleAlpha\n },\n pointer: () => /*#__PURE__*/_jsx(Fragment, {})\n })]\n })]\n }), editableDisable && /*#__PURE__*/_jsxs(\"div\", {\n style: {\n display: 'flex',\n margin: '0 10px 3px 10px'\n },\n children: [/*#__PURE__*/_jsx(EditableInput, {\n label: \"Hex\",\n value: hsvaToHex(hsva).replace(/^#/, '').toLocaleUpperCase(),\n onChange: (evn, val) => handleHex(val, evn),\n style: {\n minWidth: 58\n }\n }), /*#__PURE__*/_jsx(RGBA, {\n hsva: hsva,\n style: {\n marginLeft: 6\n },\n aProps: !disableAlpha ? {} : false,\n onChange: result => handleChange(result.hsva)\n })]\n }), presetColors && presetColors.length > 0 && /*#__PURE__*/_jsx(Swatch, {\n style: styleSwatch,\n colors: presetColors,\n color: hsvaToHex(hsva),\n onChange: hsvColor => handleChange(hsvColor),\n rectProps: {\n style: styleSwatchRect\n }\n })]\n }));\n});\nSketch.displayName = 'Sketch';\nexport default Sketch;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"radius\", \"pointer\", \"className\", \"hue\", \"style\", \"hsva\", \"onChange\"];\nimport React, { useCallback, useMemo } from 'react';\nimport { hsvaToHslaString } from '@uiw/color-convert';\nimport Interactive from '@uiw/react-drag-event-interactive';\nimport { Pointer } from \"./Pointer.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar Saturation = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _hsva$h;\n var {\n prefixCls = 'w-color-saturation',\n radius = 0,\n pointer,\n className,\n hue = 0,\n style,\n hsva,\n onChange\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var containerStyle = _extends({\n width: 200,\n height: 200,\n borderRadius: radius\n }, style, {\n position: 'relative'\n });\n var handleChange = (interaction, event) => {\n onChange && hsva && onChange({\n h: hsva.h,\n s: interaction.left * 100,\n v: (1 - interaction.top) * 100,\n a: hsva.a\n // source: 'hsv',\n });\n };\n var handleKeyDown = useCallback(event => {\n if (!hsva || !onChange) return;\n var step = 1; // 1% step for saturation and value\n var newS = hsva.s;\n var newV = hsva.v;\n var changed = false;\n switch (event.key) {\n case 'ArrowLeft':\n newS = Math.max(0, hsva.s - step);\n changed = true;\n event.preventDefault();\n break;\n case 'ArrowRight':\n newS = Math.min(100, hsva.s + step);\n changed = true;\n event.preventDefault();\n break;\n case 'ArrowUp':\n newV = Math.min(100, hsva.v + step);\n changed = true;\n event.preventDefault();\n break;\n case 'ArrowDown':\n newV = Math.max(0, hsva.v - step);\n changed = true;\n event.preventDefault();\n break;\n default:\n return;\n }\n if (changed) {\n onChange({\n h: hsva.h,\n s: newS,\n v: newV,\n a: hsva.a\n });\n }\n }, [hsva, onChange]);\n var pointerElement = useMemo(() => {\n if (!hsva) return null;\n var comProps = {\n top: 100 - hsva.v + \"%\",\n left: hsva.s + \"%\",\n color: hsvaToHslaString(hsva)\n };\n if (pointer && typeof pointer === 'function') {\n return pointer(_extends({\n prefixCls\n }, comProps));\n }\n return /*#__PURE__*/_jsx(Pointer, _extends({\n prefixCls: prefixCls\n }, comProps));\n }, [hsva, pointer, prefixCls]);\n var handleClick = useCallback(event => {\n event.target.focus();\n }, []);\n return /*#__PURE__*/_jsx(Interactive, _extends({\n className: [prefixCls, className || ''].filter(Boolean).join(' ')\n }, other, {\n style: _extends({\n position: 'absolute',\n inset: 0,\n cursor: 'crosshair',\n backgroundImage: \"linear-gradient(0deg, #000, transparent), linear-gradient(90deg, #fff, hsl(\" + ((_hsva$h = hsva == null ? void 0 : hsva.h) != null ? _hsva$h : hue) + \", 100%, 50%))\"\n }, containerStyle, {\n outline: 'none'\n }),\n ref: ref,\n onMove: handleChange,\n onDown: handleChange,\n onKeyDown: handleKeyDown,\n onClick: handleClick,\n children: pointerElement\n }));\n});\nSaturation.displayName = 'Saturation';\nexport default Saturation;","import _extends from \"@babel/runtime/helpers/extends\";\nvar RGB_MAX = 255;\nvar HUE_MAX = 360;\nvar SV_MAX = 100;\n/**\n * ```js\n * rgbaToHsva({ r: 255, g: 255, b: 255, a: 1 }) //=> { h: 0, s: 0, v: 100, a: 1 }\n * ```\n */\nexport var rgbaToHsva = _ref => {\n var {\n r,\n g,\n b,\n a\n } = _ref;\n var max = Math.max(r, g, b);\n var delta = max - Math.min(r, g, b);\n\n // prettier-ignore\n var hh = delta ? max === r ? (g - b) / delta : max === g ? 2 + (b - r) / delta : 4 + (r - g) / delta : 0;\n return {\n h: 60 * (hh < 0 ? hh + 6 : hh),\n s: max ? delta / max * SV_MAX : 0,\n v: max / RGB_MAX * SV_MAX,\n a\n };\n};\nexport var hsvaToHslString = hsva => {\n var {\n h,\n s,\n l\n } = hsvaToHsla(hsva);\n // return `hsl(${h}, ${s}%, ${l}%)`;\n return \"hsl(\" + h + \", \" + Math.round(s) + \"%, \" + Math.round(l) + \"%)\";\n};\nexport var hsvaToHsvString = _ref2 => {\n var {\n h,\n s,\n v\n } = _ref2;\n return \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\";\n};\nexport var hsvaToHsvaString = _ref3 => {\n var {\n h,\n s,\n v,\n a\n } = _ref3;\n return \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + a + \")\";\n};\nexport var hsvaToHslaString = hsva => {\n var {\n h,\n s,\n l,\n a\n } = hsvaToHsla(hsva);\n return \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + a + \")\";\n};\nexport var hslStringToHsla = str => {\n var [h, s, l, a] = (str.match(/\\d+/g) || []).map(Number);\n return {\n h,\n s,\n l,\n a\n };\n};\nexport var hslaStringToHsva = hslString => {\n var matcher = /hsla?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n var match = matcher.exec(hslString);\n if (!match) return {\n h: 0,\n s: 0,\n v: 0,\n a: 1\n };\n return hslaToHsva({\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n l: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? 100 : 1)\n });\n};\nexport var hslStringToHsva = hslaStringToHsva;\nexport var hslaToHsva = _ref4 => {\n var {\n h,\n s,\n l,\n a\n } = _ref4;\n s *= (l < 50 ? l : SV_MAX - l) / SV_MAX;\n return {\n h: h,\n s: s > 0 ? 2 * s / (l + s) * SV_MAX : 0,\n v: l + s,\n a\n };\n};\nexport var hsvaToHsla = _ref5 => {\n var {\n h,\n s,\n v,\n a\n } = _ref5;\n var hh = (200 - s) * v / SV_MAX;\n return {\n h,\n s: hh > 0 && hh < 200 ? s * v / SV_MAX / (hh <= SV_MAX ? hh : 200 - hh) * SV_MAX : 0,\n l: hh / 2,\n a\n };\n};\nexport var hsvaStringToHsva = hsvString => {\n var matcher = /hsva?\\(?\\s*(-?\\d*\\.?\\d+)(deg|rad|grad|turn)?[,\\s]+(-?\\d*\\.?\\d+)%?[,\\s]+(-?\\d*\\.?\\d+)%?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n var match = matcher.exec(hsvString);\n if (!match) return {\n h: 0,\n s: 0,\n v: 0,\n a: 1\n };\n return {\n h: parseHue(match[1], match[2]),\n s: Number(match[3]),\n v: Number(match[4]),\n a: match[5] === undefined ? 1 : Number(match[5]) / (match[6] ? SV_MAX : 1)\n };\n};\n\n/**\n * Valid CSS <angle> units.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/angle\n */\nvar angleUnits = {\n grad: HUE_MAX / 400,\n turn: HUE_MAX,\n rad: HUE_MAX / (Math.PI * 2)\n};\nexport var parseHue = function parseHue(value, unit) {\n if (unit === void 0) {\n unit = 'deg';\n }\n return Number(value) * (angleUnits[unit] || 1);\n};\nexport var hsvStringToHsva = hsvaStringToHsva;\nexport var rgbaStringToHsva = rgbaString => {\n var matcher = /rgba?\\(?\\s*(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?[,\\s]+(-?\\d*\\.?\\d+)(%)?,?\\s*[/\\s]*(-?\\d*\\.?\\d+)?(%)?\\s*\\)?/i;\n var match = matcher.exec(rgbaString);\n if (!match) return {\n h: 0,\n s: 0,\n v: 0,\n a: 1\n };\n return rgbaToHsva({\n r: Number(match[1]) / (match[2] ? SV_MAX / RGB_MAX : 1),\n g: Number(match[3]) / (match[4] ? SV_MAX / RGB_MAX : 1),\n b: Number(match[5]) / (match[6] ? SV_MAX / RGB_MAX : 1),\n a: match[7] === undefined ? 1 : Number(match[7]) / (match[8] ? SV_MAX : 1)\n });\n};\nexport var rgbStringToHsva = rgbaStringToHsva;\n\n/** Converts an RGBA color plus alpha transparency to hex */\nexport var rgbaToHex = _ref6 => {\n var {\n r,\n g,\n b\n } = _ref6;\n return rgbToHex({\n r,\n g,\n b\n });\n};\nexport var rgbToHex = _ref7 => {\n var {\n r,\n g,\n b\n } = _ref7;\n var bin = r << 16 | g << 8 | b;\n return \"#\" + (h => new Array(7 - h.length).join('0') + h)(bin.toString(16));\n};\nexport var rgbaToHexa = _ref8 => {\n var {\n r,\n g,\n b,\n a\n } = _ref8;\n var alpha = typeof a === 'number' && (a * 255 | 1 << 8).toString(16).slice(1);\n return \"\" + rgbToHex({\n r,\n g,\n b\n }) + (alpha ? alpha : '');\n};\nexport var hexToHsva = hex => rgbaToHsva(hexToRgba(hex));\nexport var hexToRgba = hex => {\n var htemp = hex.replace('#', '');\n if (/^#?/.test(hex) && htemp.length === 3) {\n hex = \"#\" + htemp.charAt(0) + htemp.charAt(0) + htemp.charAt(1) + htemp.charAt(1) + htemp.charAt(2) + htemp.charAt(2);\n }\n var reg = new RegExp(\"[A-Za-z0-9]{2}\", 'g');\n var [r, g, b = 0, a] = hex.match(reg).map(v => parseInt(v, 16));\n return {\n r,\n g,\n b,\n a: (a != null ? a : 255) / RGB_MAX\n };\n};\n\n/**\n * Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV\n * @param color HSVA color as an array [0-360, 0-1, 0-1, 0-1]\n */\nexport var hsvaToRgba = _ref9 => {\n var {\n h,\n s,\n v,\n a\n } = _ref9;\n var _h = h / 60,\n _s = s / SV_MAX,\n _v = v / SV_MAX,\n hi = Math.floor(_h) % 6;\n var f = _h - Math.floor(_h),\n _p = RGB_MAX * _v * (1 - _s),\n _q = RGB_MAX * _v * (1 - _s * f),\n _t = RGB_MAX * _v * (1 - _s * (1 - f));\n _v *= RGB_MAX;\n var rgba = {};\n switch (hi) {\n case 0:\n rgba.r = _v;\n rgba.g = _t;\n rgba.b = _p;\n break;\n case 1:\n rgba.r = _q;\n rgba.g = _v;\n rgba.b = _p;\n break;\n case 2:\n rgba.r = _p;\n rgba.g = _v;\n rgba.b = _t;\n break;\n case 3:\n rgba.r = _p;\n rgba.g = _q;\n rgba.b = _v;\n break;\n case 4:\n rgba.r = _t;\n rgba.g = _p;\n rgba.b = _v;\n break;\n case 5:\n rgba.r = _v;\n rgba.g = _p;\n rgba.b = _q;\n break;\n }\n rgba.r = Math.round(rgba.r);\n rgba.g = Math.round(rgba.g);\n rgba.b = Math.round(rgba.b);\n return _extends({}, rgba, {\n a\n });\n};\nexport var hsvaToRgbString = hsva => {\n var {\n r,\n g,\n b\n } = hsvaToRgba(hsva);\n return \"rgb(\" + r + \", \" + g + \", \" + b + \")\";\n};\nexport var hsvaToRgbaString = hsva => {\n var {\n r,\n g,\n b,\n a\n } = hsvaToRgba(hsva);\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + a + \")\";\n};\nexport var rgbaToRgb = _ref0 => {\n var {\n r,\n g,\n b\n } = _ref0;\n return {\n r,\n g,\n b\n };\n};\nexport var hslaToHsl = _ref1 => {\n var {\n h,\n s,\n l\n } = _ref1;\n return {\n h,\n s,\n l\n };\n};\nexport var hsvaToHex = hsva => rgbToHex(hsvaToRgba(hsva));\nexport var hsvaToHexa = hsva => rgbaToHexa(hsvaToRgba(hsva));\nexport var hsvaToHsv = _ref10 => {\n var {\n h,\n s,\n v\n } = _ref10;\n return {\n h,\n s,\n v\n };\n};\nexport var hexToXY = hex => rgbToXY(rgbaToRgb(hexToRgba(hex)));\nexport var xyToHex = xy => rgbToHex(_extends({}, xyToRgb(xy)));\n\n/**\n * Converts XY to RGB. Based on formula from https://developers.meethue.com/develop/application-design-guidance/color-conversion-formulas-rgb-to-xy-and-back/\n * @param color XY color and brightness as an array [0-1, 0-1, 0-1]\n */\nexport var xyToRgb = _ref11 => {\n var {\n x,\n y,\n bri = 255\n } = _ref11;\n var red = x * 3.2406255 + y * -1.537208 + bri * -0.4986286;\n var green = x * -0.9689307 + y * 1.8757561 + bri * 0.0415175;\n var blue = x * 0.0557101 + y * -0.2040211 + bri * 1.0569959;\n var translate = function translate(color) {\n return color <= 0.0031308 ? 12.92 * color : 1.055 * Math.pow(color, 1 / 2.4) - 0.055;\n };\n return {\n r: Math.round(255 * translate(red)),\n g: Math.round(255 * translate(green)),\n b: Math.round(255 * translate(blue))\n };\n};\n\n/**\n * Converts RGB to XY. Based on formula from https://developers.meethue.com/develop/application-design-guidance/color-conversion-formulas-rgb-to-xy-and-back/\n * @param color RGB color as an array [0-255, 0-255, 0-255]\n */\nexport var rgbToXY = _ref12 => {\n var {\n r,\n g,\n b\n } = _ref12;\n var translateColor = function translateColor(color) {\n return color <= 0.04045 ? color / 12.92 : Math.pow((color + 0.055) / 1.055, 2.4);\n };\n var red = translateColor(r / 255);\n var green = translateColor(g / 255);\n var blue = translateColor(b / 255);\n var xyz = {};\n xyz.x = red * 0.4124 + green * 0.3576 + blue * 0.1805;\n xyz.y = red * 0.2126 + green * 0.7152 + blue * 0.0722;\n xyz.bri = red * 0.0193 + green * 0.1192 + blue * 0.9505;\n return xyz;\n};\nexport var color = str => {\n var rgb;\n var hsl;\n var hsv;\n var rgba;\n var hsla;\n var hsva;\n var xy;\n var hex;\n var hexa;\n if (typeof str === 'string' && validHex(str)) {\n hsva = hexToHsva(str);\n hex = str;\n } else if (typeof str !== 'string') {\n hsva = str;\n }\n if (hsva) {\n hsv = hsvaToHsv(hsva);\n hsla = hsvaToHsla(hsva);\n rgba = hsvaToRgba(hsva);\n hexa = rgbaToHexa(rgba);\n hex = hsvaToHex(hsva);\n hsl = hslaToHsl(hsla);\n rgb = rgbaToRgb(rgba);\n xy = rgbToXY(rgb);\n }\n return {\n rgb,\n hsl,\n hsv,\n rgba,\n hsla,\n hsva,\n hex,\n hexa,\n xy\n };\n};\nexport var getContrastingColor = str => {\n if (!str) {\n return '#ffffff';\n }\n var col = color(str);\n var yiq = (col.rgb.r * 299 + col.rgb.g * 587 + col.rgb.b * 114) / 1000;\n return yiq >= 128 ? '#000000' : '#ffffff';\n};\nexport var equalColorObjects = (first, second) => {\n if (first === second) return true;\n for (var prop in first) {\n // The following allows for a type-safe calling of this function (first & second have to be HSL, HSV, or RGB)\n // with type-unsafe iterating over object keys. TS does not allow this without an index (`[key: string]: number`)\n // on an object to define how iteration is normally done. To ensure extra keys are not allowed on our types,\n // we must cast our object to unknown (as RGB demands `r` be a key, while `Record<string, x>` does not care if\n // there is or not), and then as a type TS can iterate over.\n if (first[prop] !== second[prop]) return false;\n }\n return true;\n};\nexport var equalColorString = (first, second) => {\n return first.replace(/\\s/g, '') === second.replace(/\\s/g, '');\n};\nexport var equalHex = (first, second) => {\n if (first.toLowerCase() === second.toLowerCase()) return true;\n\n // To compare colors like `#FFF` and `ffffff` we convert them into RGB objects\n return equalColorObjects(hexToRgba(first), hexToRgba(second));\n};\nexport var validHex = hex => /^#?([A-Fa-f0-9]{3,4}){1,2}$/.test(hex);","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"onMove\", \"onDown\"];\nimport React, { useRef, useState, useCallback, useEffect } from 'react';\nimport { isTouch, preventDefaultMove, getRelativePosition, useEventCallback } from \"./utils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport * from \"./utils.js\";\nvar Interactive = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n prefixCls = 'w-color-interactive',\n className,\n onMove,\n onDown\n } = props,\n reset = _objectWithoutPropertiesLoose(props, _excluded);\n var container = useRef(null);\n var hasTouched = useRef(false);\n var [isDragging, setDragging] = useState(false);\n var onMoveCallback = useEventCallback(onMove);\n var onKeyCallback = useEventCallback(onDown);\n\n // Prevent mobile browsers from handling mouse events (conflicting with touch ones).\n // If we detected a touch interaction before, we prefer reacting to touch events only.\n var isValid = event => {\n if (hasTouched.current && !isTouch(event)) return false;\n hasTouched.current = isTouch(event);\n return true;\n };\n var handleMove = useCallback(event => {\n preventDefaultMove(event);\n if (!container.current) return;\n var isDown = isTouch(event) ? event.touches.length > 0 : event.buttons > 0;\n if (!isDown) {\n setDragging(false);\n return;\n }\n onMoveCallback == null || onMoveCallback(getRelativePosition(container.current, event), event);\n }, [onMoveCallback]);\n var handleMoveEnd = useCallback(() => setDragging(false), []);\n var toggleDocumentEvents = useCallback(state => {\n if (state) {\n window.addEventListener(hasTouched.current ? 'touchmove' : 'mousemove', handleMove);\n window.addEventListener(hasTouched.current ? 'touchend' : 'mouseup', handleMoveEnd);\n } else {\n window.removeEventListener('mousemove', handleMove);\n window.removeEventListener('mouseup', handleMoveEnd);\n window.removeEventListener('touchmove', handleMove);\n window.removeEventListener('touchend', handleMoveEnd);\n }\n }, [handleMove, handleMoveEnd]);\n useEffect(() => {\n toggleDocumentEvents(isDragging);\n return () => {\n toggleDocumentEvents(false);\n };\n }, [isDragging, handleMove, handleMoveEnd, toggleDocumentEvents]);\n var handleMoveStart = useCallback(event => {\n var activeEl = document.activeElement;\n activeEl == null || activeEl.blur();\n preventDefaultMove(event.nativeEvent);\n if (!isValid(event.nativeEvent)) return;\n if (!container.current) return;\n onKeyCallback == null || onKeyCallback(getRelativePosition(container.current, event.nativeEvent), event.nativeEvent);\n setDragging(true);\n }, [onKeyCallback]);\n return /*#__PURE__*/_jsx(\"div\", _extends({}, reset, {\n className: [prefixCls, className || ''].filter(Boolean).join(' '),\n style: _extends({}, reset.style, {\n touchAction: 'none'\n }),\n ref: container,\n tabIndex: 0,\n onMouseDown: handleMoveStart,\n onTouchStart: handleMoveStart\n }));\n});\nInteractive.displayName = 'Interactive';\nexport default Interactive;","import { useRef, useEffect, useCallback } from 'react';\n\n// Saves incoming handler to the ref in order to avoid \"useCallback hell\"\nexport function useEventCallback(handler) {\n var callbackRef = useRef(handler);\n useEffect(() => {\n callbackRef.current = handler;\n });\n return useCallback((value, event) => callbackRef.current && callbackRef.current(value, event), []);\n}\n\n// Check if an event was triggered by touch\nexport var isTouch = event => 'touches' in event;\n\n// Browsers introduced an intervention, making touch events passive by default.\n// This workaround removes `preventDefault` call from the touch handlers.\n// https://github.com/facebook/react/issues/19651\nexport var preventDefaultMove = event => {\n !isTouch(event) && event.preventDefault && event.preventDefault();\n};\n// Clamps a value between an upper and lower bound.\n// We use ternary operators because it makes the minified code\n// 2 times shorter then `Math.min(Math.max(a,b),c)`\nexport var clamp = function clamp(number, min, max) {\n if (min === void 0) {\n min = 0;\n }\n if (max === void 0) {\n max = 1;\n }\n return number > max ? max : number < min ? min : number;\n};\n// Returns a relative position of the pointer inside the node's bounding box\nexport var getRelativePosition = (node, event) => {\n var rect = node.getBoundingClientRect();\n\n // Get user's pointer position from `touches` array if it's a `TouchEvent`\n var pointer = isTouch(event) ? event.touches[0] : event;\n return {\n left: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),\n top: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height),\n width: rect.width,\n height: rect.height,\n x: pointer.pageX - (rect.left + window.pageXOffset),\n y: pointer.pageY - (rect.top + window.pageYOffset)\n };\n};","import React, { useMemo } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Pointer = _ref => {\n var {\n className,\n color,\n left,\n top,\n prefixCls\n } = _ref;\n var style = {\n position: 'absolute',\n top,\n left\n };\n var stylePointer = {\n '--saturation-pointer-box-shadow': 'rgb(255 255 255) 0px 0px 0px 1.5px, rgb(0 0 0 / 30%) 0px 0px 1px 1px inset, rgb(0 0 0 / 40%) 0px 0px 1px 2px',\n width: 6,\n height: 6,\n transform: 'translate(-3px, -3px)',\n boxShadow: 'var(--saturation-pointer-box-shadow)',\n borderRadius: '50%',\n backgroundColor: color\n };\n return useMemo(() => /*#__PURE__*/_jsx(\"div\", {\n className: prefixCls + \"-pointer \" + (className || ''),\n style: style,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: prefixCls + \"-fill\",\n style: stylePointer\n })\n }), [top, left, color, className, prefixCls]);\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"hsva\", \"background\", \"bgProps\", \"innerProps\", \"pointerProps\", \"radius\", \"width\", \"height\", \"direction\", \"style\", \"onChange\", \"pointer\"];\nimport React, { useCallback } from 'react';\nimport { hsvaToHslaString } from '@uiw/color-convert';\nimport Interactive from '@uiw/react-drag-event-interactive';\nimport { Pointer } from \"./Pointer.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport * from \"./Pointer.js\";\nexport var BACKGROUND_IMG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==';\nvar Alpha = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n prefixCls = 'w-color-alpha',\n className,\n hsva,\n background,\n bgProps = {},\n innerProps = {},\n pointerProps = {},\n radius = 0,\n width,\n height = 16,\n direction = 'horizontal',\n style,\n onChange,\n pointer\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var handleChange = offset => {\n onChange && onChange(_extends({}, hsva, {\n a: direction === 'horizontal' ? offset.left : offset.top\n }), offset);\n };\n var colorTo = hsvaToHslaString(Object.assign({}, hsva, {\n a: 1\n }));\n var innerBackground = \"linear-gradient(to \" + (direction === 'horizontal' ? 'right' : 'bottom') + \", rgba(244, 67, 54, 0) 0%, \" + colorTo + \" 100%)\";\n var comProps = {};\n if (direction === 'horizontal') {\n comProps.left = hsva.a * 100 + \"%\";\n } else {\n comProps.top = hsva.a * 100 + \"%\";\n }\n var styleWrapper = _extends({\n '--alpha-background-color': '#fff',\n '--alpha-pointer-background-color': 'rgb(248, 248, 248)',\n '--alpha-pointer-box-shadow': 'rgb(0 0 0 / 37%) 0px 1px 4px 0px',\n borderRadius: radius,\n background: \"url(\" + BACKGROUND_IMG + \") left center\",\n backgroundColor: 'var(--alpha-background-color)'\n }, {\n width,\n height\n }, style, {\n position: 'relative'\n });\n var handleKeyDown = useCallback(event => {\n var step = 0.01; // 1% step\n var currentAlpha = hsva.a;\n var newAlpha = currentAlpha;\n switch (event.key) {\n case 'ArrowLeft':\n if (direction === 'horizontal') {\n newAlpha = Math.max(0, currentAlpha - step);\n event.preventDefault();\n }\n break;\n case 'ArrowRight':\n if (direction === 'horizontal') {\n newAlpha = Math.min(1, currentAlpha + step);\n event.preventDefault();\n }\n break;\n case 'ArrowUp':\n if (direction === 'vertical') {\n newAlpha = Math.max(0, currentAlpha - step);\n event.preventDefault();\n }\n break;\n case 'ArrowDown':\n if (direction === 'vertical') {\n newAlpha = Math.min(1, currentAlpha + step);\n event.preventDefault();\n }\n break;\n default:\n return;\n }\n if (newAlpha !== currentAlpha) {\n var syntheticOffset = {\n left: direction === 'horizontal' ? newAlpha : hsva.a,\n top: direction === 'vertical' ? newAlpha : hsva.a,\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n onChange && onChange(_extends({}, hsva, {\n a: newAlpha\n }), syntheticOffset);\n }\n }, [hsva, direction, onChange]);\n var handleClick = useCallback(event => {\n event.target.focus();\n }, []);\n var pointerElement = pointer && typeof pointer === 'function' ? pointer(_extends({\n prefixCls\n }, pointerProps, comProps)) : /*#__PURE__*/_jsx(Pointer, _extends({}, pointerProps, {\n prefixCls: prefixCls\n }, comProps));\n return /*#__PURE__*/_jsxs(\"div\", _extends({}, other, {\n className: [prefixCls, prefixCls + \"-\" + direction, className || ''].filter(Boolean).join(' '),\n style: styleWrapper,\n ref: ref,\n children: [/*#__PURE__*/_jsx(\"div\", _extends({}, bgProps, {\n style: _extends({\n inset: 0,\n position: 'absolute',\n background: background || innerBackground,\n borderRadius: radius\n }, bgProps.style)\n })), /*#__PURE__*/_jsx(Interactive, _extends({}, innerProps, {\n style: _extends({}, innerProps.style, {\n inset: 0,\n zIndex: 1,\n position: 'absolute',\n outline: 'none'\n }),\n onMove: handleChange,\n onDown: handleChange,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n children: pointerElement\n }))]\n }));\n});\nAlpha.displayName = 'Alpha';\nexport default Alpha;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"className\", \"prefixCls\", \"left\", \"top\", \"style\", \"fillProps\"];\nimport React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Pointer = _ref => {\n var {\n className,\n prefixCls,\n left,\n top,\n style,\n fillProps\n } = _ref,\n reset = _objectWithoutPropertiesLoose(_ref, _excluded);\n var styleWrapper = _extends({}, style, {\n position: 'absolute',\n left,\n top\n });\n var stylePointer = _extends({\n width: 18,\n height: 18,\n boxShadow: 'var(--alpha-pointer-box-shadow)',\n borderRadius: '50%',\n backgroundColor: 'var(--alpha-pointer-background-color)'\n }, fillProps == null ? void 0 : fillProps.style, {\n transform: left ? 'translate(-9px, -1px)' : 'translate(-1px, -9px)'\n });\n return /*#__PURE__*/_jsx(\"div\", _extends({\n className: prefixCls + \"-pointer \" + (className || ''),\n style: styleWrapper\n }, reset, {\n children: /*#__PURE__*/_jsx(\"div\", _extends({\n className: prefixCls + \"-fill\"\n }, fillProps, {\n style: stylePointer\n }))\n }));\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"placement\", \"label\", \"value\", \"className\", \"style\", \"labelStyle\", \"inputStyle\", \"onChange\", \"onBlur\", \"renderInput\"];\nimport React from 'react';\nimport { useRef, useEffect, useState } from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar validHex = hex => /^#?([A-Fa-f0-9]{3,4}){1,2}$/.test(hex);\nvar getNumberValue = value => Number(String(value).replace(/%/g, ''));\nvar EditableInput = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n prefixCls = 'w-color-editable-input',\n placement = 'bottom',\n label,\n value: initValue,\n className,\n style,\n labelStyle,\n inputStyle,\n onChange,\n onBlur,\n renderInput\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var [value, setValue] = useState(initValue);\n var isFocus = useRef(false);\n useEffect(() => {\n if (props.value !== value) {\n if (!isFocus.current) {\n setValue(props.value);\n }\n }\n }, [props.value]);\n function handleChange(evn, valInit) {\n var value = (valInit || evn.target.value).trim().replace(/^#/, '');\n if (validHex(value)) {\n onChange && onChange(evn, value);\n }\n var val = getNumberValue(value);\n if (!isNaN(val)) {\n onChange && onChange(evn, val);\n }\n setValue(value);\n }\n function handleBlur(evn) {\n isFocus.current = false;\n setValue(props.value);\n onBlur && onBlur(evn);\n }\n var placementStyle = {};\n if (placement === 'bottom') {\n placementStyle['flexDirection'] = 'column';\n }\n if (placement === 'top') {\n placementStyle['flexDirection'] = 'column-reverse';\n }\n if (placement === 'left') {\n placementStyle['flexDirection'] = 'row-reverse';\n }\n var wrapperStyle = _extends({\n '--editable-input-label-color': 'rgb(153, 153, 153)',\n '--editable-input-box-shadow': 'rgb(204 204 204) 0px 0px 0px 1px inset',\n '--editable-input-color': '#666',\n position: 'relative',\n alignItems: 'center',\n display: 'flex',\n fontSize: 11\n }, placementStyle, style);\n var editableStyle = _extends({\n width: '100%',\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: 3,\n paddingRight: 3,\n fontSize: 11,\n background: 'transparent',\n boxSizing: 'border-box',\n border: 'none',\n color: 'var(--editable-input-color)',\n boxShadow: 'var(--editable-input-box-shadow)'\n }, inputStyle);\n var inputProps = _extends({\n value,\n onChange: handleChange,\n onBlur: handleBlur,\n autoComplete: 'off',\n onFocus: () => isFocus.current = true\n }, other, {\n style: editableStyle,\n onFocusCapture: e => {\n var elm = e.target;\n elm.setSelectionRange(elm.value.length, elm.value.length);\n }\n });\n return /*#__PURE__*/_jsxs(\"div\", {\n className: [prefixCls, className || ''].filter(Boolean).join(' '),\n style: wrapperStyle,\n children: [renderInput ? renderInput(inputProps, ref) : /*#__PURE__*/_jsx(\"input\", _extends({\n ref: ref\n }, inputProps)), label && /*#__PURE__*/_jsx(\"span\", {\n style: _extends({\n color: 'var(--editable-input-label-color)',\n textTransform: 'capitalize'\n }, labelStyle),\n children: label\n })]\n });\n});\nEditableInput.displayName = 'EditableInput';\nexport default EditableInput;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"hsva\", \"placement\", \"rProps\", \"gProps\", \"bProps\", \"aProps\", \"className\", \"style\", \"onChange\"];\nimport React from 'react';\nimport EditableInput from '@uiw/react-color-editable-input';\nimport { color as handleColor, hsvaToRgba, rgbaToHsva } from '@uiw/color-convert';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar EditableInputRGBA = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n prefixCls = 'w-color-editable-input-rgba',\n hsva,\n placement = 'bottom',\n rProps = {},\n gProps = {},\n bProps = {},\n aProps = {},\n className,\n style,\n onChange\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var rgba = hsva ? hsvaToRgba(hsva) : {};\n function handleBlur(evn) {\n var value = Number(evn.target.value);\n if (value && value > 255) {\n evn.target.value = '255';\n }\n if (value && value < 0) {\n evn.target.value = '0';\n }\n }\n var handleAlphaBlur = evn => {\n var value = Number(evn.target.value);\n if (value && value > 100) {\n evn.target.value = '100';\n }\n if (value && value < 0) {\n evn.target.value = '0';\n }\n };\n var handleChange = (value, type, evn) => {\n if (typeof value === 'number') {\n if (type === 'a') {\n if (value < 0) value = 0;\n if (value > 100) value = 100;\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n a: value / 100\n }))));\n }\n if (value > 255) {\n value = 255;\n evn.target.value = '255';\n }\n if (value < 0) {\n value = 0;\n evn.target.value = '0';\n }\n if (type === 'r') {\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n r: value\n }))));\n }\n if (type === 'g') {\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n g: value\n }))));\n }\n if (type === 'b') {\n onChange && onChange(handleColor(rgbaToHsva(_extends({}, rgba, {\n b: value\n }))));\n }\n }\n };\n var roundedAlpha = rgba.a ? Math.round(rgba.a * 100) / 100 : 0;\n return /*#__PURE__*/_jsxs(\"div\", _extends({\n ref: ref,\n className: [prefixCls, className || ''].filter(Boolean).join(' ')\n }, other, {\n style: _extends({\n fontSize: 11,\n display: 'flex'\n }, style),\n children: [/*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"R\",\n value: rgba.r || 0,\n onBlur: handleBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'r', evn)\n }, rProps, {\n style: _extends({}, rProps.style)\n })), /*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"G\",\n value: rgba.g || 0,\n onBlur: handleBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'g', evn)\n }, gProps, {\n style: _extends({\n marginLeft: 5\n }, rProps.style)\n })), /*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"B\",\n value: rgba.b || 0,\n onBlur: handleBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'b', evn)\n }, bProps, {\n style: _extends({\n marginLeft: 5\n }, bProps.style)\n })), aProps && /*#__PURE__*/_jsx(EditableInput, _extends({\n label: \"A\",\n value: parseInt(String(roundedAlpha * 100), 10),\n onBlur: handleAlphaBlur,\n placement: placement,\n onChange: (evn, val) => handleChange(val, 'a', evn)\n }, aProps, {\n style: _extends({\n marginLeft: 5\n }, aProps.style)\n }))]\n }));\n});\nEditableInputRGBA.displayName = 'EditableInputRGBA';\nexport default EditableInputRGBA;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"hue\", \"onChange\", \"direction\"];\nimport React from 'react';\nimport Alpha from '@uiw/react-color-alpha';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar Hue = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n prefixCls = 'w-color-hue',\n className,\n hue = 0,\n onChange: _onChange,\n direction = 'horizontal'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n return /*#__PURE__*/_jsx(Alpha, _extends({\n ref: ref,\n className: prefixCls + \" \" + (className || '')\n }, other, {\n direction: direction,\n background: \"linear-gradient(to \" + (direction === 'horizontal' ? 'right' : 'bottom') + \", rgb(255, 0, 0) 0%, rgb(255, 255, 0) 17%, rgb(0, 255, 0) 33%, rgb(0, 255, 255) 50%, rgb(0, 0, 255) 67%, rgb(255, 0, 255) 83%, rgb(255, 0, 0) 100%)\",\n hsva: {\n h: hue,\n s: 100,\n v: 100,\n a: hue / 360\n },\n onChange: (_, interaction) => {\n _onChange && _onChange({\n h: direction === 'horizontal' ? 360 * interaction.left : 360 * interaction.top\n });\n }\n }));\n});\nHue.displayName = 'Hue';\nexport default Hue;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"prefixCls\", \"className\", \"color\", \"colors\", \"style\", \"rectProps\", \"onChange\", \"addonAfter\", \"addonBefore\", \"rectRender\"];\nimport React, { Fragment } from 'react';\nimport { hexToHsva, color as handleColor } from '@uiw/color-convert';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar Swatch = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n prefixCls = 'w-color-swatch',\n className,\n color,\n colors = [],\n style,\n rectProps = {},\n onChange,\n addonAfter,\n addonBefore,\n rectRender\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var rectStyle = _extends({\n '--swatch-background-color': 'rgb(144, 19, 254)',\n background: 'var(--swatch-background-color)',\n height: 15,\n width: 15,\n marginRight: 5,\n marginBottom: 5,\n cursor: 'pointer',\n position: 'relative',\n outline: 'none',\n borderRadius: 2\n }, rectProps.style);\n var handleClick = (hex, evn) => {\n onChange && onChange(hexToHsva(hex), handleColor(hexToHsva(hex)), evn);\n };\n return /*#__PURE__*/_jsxs(\"div\", _extends({\n ref: ref\n }, other, {\n className: [prefixCls, className || ''].filter(Boolean).join(' '),\n style: _extends({\n display: 'flex',\n flexWrap: 'wrap',\n position: 'relative'\n }, style),\n children: [addonBefore && /*#__PURE__*/React.isValidElement(addonBefore) && addonBefore, colors && Array.isArray(colors) && colors.map((item, idx) => {\n var title = '';\n var background = '';\n if (typeof item === 'string') {\n title = item;\n background = item;\n }\n if (typeof item === 'object' && item.color) {\n title = item.title || item.color;\n background = item.color;\n }\n var checked = color && color.toLocaleLowerCase() === background.toLocaleLowerCase();\n var render = rectRender && rectRender({\n title,\n color: background,\n checked: !!checked,\n style: _extends({}, rectStyle, {\n background\n }),\n onClick: evn => handleClick(background, evn)\n });\n if (render) {\n return /*#__PURE__*/_jsx(Fragment, {\n children: render\n }, idx);\n }\n var child = rectProps.children && /*#__PURE__*/React.isValidElement(rectProps.children) ? /*#__PURE__*/React.cloneElement(rectProps.children, {\n color: background,\n checked\n }) : null;\n return /*#__PURE__*/_jsx(\"div\", _extends({\n tabIndex: 0,\n title: title,\n onClick: evn => handleClick(background, evn)\n }, rectProps, {\n children: child,\n style: _extends({}, rectStyle, {\n background\n })\n }), idx);\n }), addonAfter && /*#__PURE__*/React.isValidElement(addonAfter) && addonAfter]\n }));\n});\nSwatch.displayName = 'Swatch';\nexport default Swatch;","/**\n * Hazo UI Rich Text Editor - Type Definitions\n *\n * Type definitions for the rich text editor component including\n * attachments, variables, and editor output interfaces.\n */\n\n/**\n * Represents a file attachment stored as base64\n */\nexport interface RteAttachment {\n filename: string;\n mime_type: string;\n data: string; // base64 encoded content\n}\n\n/**\n * Represents a template variable that can be inserted into the editor\n */\nexport interface RteVariable {\n name: string;\n description: string;\n}\n\n/**\n * Output structure returned by the editor on change\n */\nexport interface RteOutput {\n html: string;\n plain_text: string;\n attachments: RteAttachment[];\n}\n\n/**\n * Props for the HazoUiRte component\n */\nexport interface HazoUiRteProps {\n // Content (all optional)\n html?: string;\n plain_text?: string;\n attachments?: RteAttachment[];\n\n // Variables for email templates\n variables?: RteVariable[];\n\n // Callback fired when content changes\n on_change?: (output: RteOutput) => void;\n\n // Customization\n placeholder?: string;\n min_height?: string;\n max_height?: string;\n disabled?: boolean;\n className?: string;\n\n // Show output viewer tabs (HTML, Plain Text, Raw HTML)\n show_output_viewer?: boolean;\n}\n\n/**\n * Font family options available in the editor\n */\nexport const FONT_FAMILIES = [\n { label: \"Arial\", value: \"Arial, sans-serif\" },\n { label: \"Verdana\", value: \"Verdana, sans-serif\" },\n { label: \"Times New Roman\", value: \"Times New Roman, serif\" },\n { label: \"Georgia\", value: \"Georgia, serif\" },\n { label: \"Courier New\", value: \"Courier New, monospace\" },\n { label: \"Trebuchet MS\", value: \"Trebuchet MS, sans-serif\" },\n] as const;\n\n/**\n * Font size configuration\n */\nexport const FONT_SIZE_CONFIG = {\n default: 16,\n min: 8,\n max: 72,\n step: 2,\n} as const;\n\n/**\n * Block type options for the paragraph dropdown\n */\nexport const BLOCK_TYPES = [\n { label: \"Paragraph\", value: \"paragraph\", icon: \"paragraph\" },\n { label: \"Heading 1\", value: \"heading-1\", icon: \"h1\" },\n { label: \"Heading 2\", value: \"heading-2\", icon: \"h2\" },\n { label: \"Heading 3\", value: \"heading-3\", icon: \"h3\" },\n { label: \"Numbered List\", value: \"ordered-list\", icon: \"list-ordered\" },\n { label: \"Bulleted List\", value: \"bullet-list\", icon: \"list\" },\n { label: \"Check List\", value: \"task-list\", icon: \"list-checks\" },\n { label: \"Code Block\", value: \"code-block\", icon: \"code\" },\n { label: \"Quote\", value: \"blockquote\", icon: \"quote\" },\n] as const;\n\n/**\n * Text alignment options\n */\nexport const TEXT_ALIGNMENTS = [\n { label: \"Left\", value: \"left\", icon: \"align-left\" },\n { label: \"Center\", value: \"center\", icon: \"align-center\" },\n { label: \"Right\", value: \"right\", icon: \"align-right\" },\n { label: \"Justify\", value: \"justify\", icon: \"align-justify\" },\n] as const;\n","/**\n * Hazo UI Rich Text Editor - Utility Functions\n *\n * Helper functions for file handling, text extraction, and other utilities.\n */\n\nimport type { RteAttachment } from \"./types\";\n\n/**\n * Convert a File object to a base64 encoded string\n */\nexport function file_to_base64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n // Remove data URL prefix to get just the base64 content\n const base64 = result.split(\",\")[1];\n resolve(base64);\n };\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Convert a File object to an RteAttachment\n */\nexport async function file_to_attachment(file: File): Promise<RteAttachment> {\n const data = await file_to_base64(file);\n return {\n filename: file.name,\n mime_type: file.type || \"application/octet-stream\",\n data,\n };\n}\n\n/**\n * Convert a File object to a base64 data URL for inline embedding\n */\nexport function file_to_data_url(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Extract plain text from HTML content\n */\nexport function extract_plain_text(html: string): string {\n if (typeof document === \"undefined\") {\n // Server-side fallback - basic tag stripping\n return html\n .replace(/<[^>]*>/g, \"\")\n .replace(/ /g, \" \")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .trim();\n }\n\n // Client-side - use DOM parser\n const doc = new DOMParser().parseFromString(html, \"text/html\");\n return doc.body.textContent || \"\";\n}\n\n/**\n * Generate a unique ID for internal use\n */\nexport function generate_unique_id(): string {\n return `rte_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Debounce function for rate-limiting callbacks\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout_id: ReturnType<typeof setTimeout> | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout_id) {\n clearTimeout(timeout_id);\n }\n timeout_id = setTimeout(() => {\n func(...args);\n }, wait);\n };\n}\n\n/**\n * Format file size for display\n */\nexport function format_file_size(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n}\n\n/**\n * Get file extension from filename\n */\nexport function get_file_extension(filename: string): string {\n const parts = filename.split(\".\");\n return parts.length > 1 ? parts.pop()?.toLowerCase() || \"\" : \"\";\n}\n\n/**\n * Check if a file is an image based on MIME type\n */\nexport function is_image_file(mime_type: string): boolean {\n return mime_type.startsWith(\"image/\");\n}\n\n/**\n * Parse variable syntax {{variable_name}} from text\n */\nexport function parse_variables_from_text(text: string): string[] {\n const regex = /\\{\\{([^}]+)\\}\\}/g;\n const variables: string[] = [];\n let match;\n while ((match = regex.exec(text)) !== null) {\n variables.push(match[1]);\n }\n return variables;\n}\n","\"use client\";\n\n/**\n * RTE Toolbar Component\n *\n * Main toolbar container that orchestrates all formatting controls.\n */\n\nimport * as React from \"react\";\nimport { type Editor } from \"@tiptap/react\";\nimport { cn } from \"../../../lib/utils\";\nimport { TooltipProvider } from \"../../ui/tooltip\";\nimport { ToolbarButton } from \"./toolbar_button\";\nimport {\n LuUndo2,\n LuRedo2,\n LuBold,\n LuItalic,\n LuUnderline,\n LuStrikethrough,\n LuSubscript,\n LuSuperscript,\n LuLink,\n LuRemoveFormatting,\n LuAlignLeft,\n LuAlignCenter,\n LuAlignRight,\n LuAlignJustify,\n LuIndentIncrease,\n LuIndentDecrease,\n LuPalette,\n LuHighlighter,\n LuPlus,\n LuVariable,\n LuPaperclip,\n LuMinus,\n LuImage,\n LuTable,\n LuList,\n LuListOrdered,\n LuListChecks,\n LuTableRowsSplit,\n LuTableColumnsSplit,\n LuTrash2,\n LuGrid3X3,\n} from \"react-icons/lu\";\nimport { RxDividerHorizontal } from \"react-icons/rx\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../ui/select\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../../ui/popover\";\nimport { Input } from \"../../ui/input\";\nimport { Button } from \"../../ui/button\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../../ui/command\";\nimport Sketch from \"@uiw/react-color-sketch\";\nimport {\n FONT_FAMILIES,\n FONT_SIZE_CONFIG,\n BLOCK_TYPES,\n type RteVariable,\n type RteAttachment,\n} from \"../types\";\nimport { file_to_attachment, file_to_data_url } from \"../utils\";\n\ninterface ToolbarProps {\n editor: Editor | null;\n variables?: RteVariable[];\n attachments: RteAttachment[];\n on_attachments_change: (attachments: RteAttachment[]) => void;\n disabled?: boolean;\n}\n\n/**\n * Toolbar separator component\n */\nconst ToolbarSeparator = () => (\n <div className=\"cls_rte_toolbar_separator mx-1 h-6 w-px bg-border\" />\n);\n\nexport const Toolbar: React.FC<ToolbarProps> = ({\n editor,\n variables = [],\n attachments,\n on_attachments_change,\n disabled = false,\n}) => {\n const [link_url, set_link_url] = React.useState(\"https://\");\n const [link_popover_open, set_link_popover_open] = React.useState(false);\n const [text_color_open, set_text_color_open] = React.useState(false);\n const [highlight_color_open, set_highlight_color_open] = React.useState(false);\n const [variables_menu_open, set_variables_menu_open] = React.useState(false);\n const [table_menu_open, set_table_menu_open] = React.useState(false);\n const [text_color, set_text_color] = React.useState(\"#000000\");\n const [highlight_color, set_highlight_color] = React.useState(\"#ffff00\");\n const [table_rows, set_table_rows] = React.useState(3);\n const [table_cols, set_table_cols] = React.useState(3);\n const [hovered_cell, set_hovered_cell] = React.useState<{ row: number; col: number } | null>(null);\n\n const file_input_ref = React.useRef<HTMLInputElement>(null);\n const image_input_ref = React.useRef<HTMLInputElement>(null);\n\n if (!editor) {\n return null;\n }\n\n // Get current font size\n const get_current_font_size = (): number => {\n const attrs = editor.getAttributes(\"textStyle\");\n return attrs.fontSize || FONT_SIZE_CONFIG.default;\n };\n\n // Get current font family\n const get_current_font_family = (): string => {\n const attrs = editor.getAttributes(\"textStyle\");\n return attrs.fontFamily || FONT_FAMILIES[0].value;\n };\n\n // Get current block type\n const get_current_block_type = (): string => {\n if (editor.isActive(\"heading\", { level: 1 })) return \"heading-1\";\n if (editor.isActive(\"heading\", { level: 2 })) return \"heading-2\";\n if (editor.isActive(\"heading\", { level: 3 })) return \"heading-3\";\n if (editor.isActive(\"bulletList\")) return \"bullet-list\";\n if (editor.isActive(\"orderedList\")) return \"ordered-list\";\n if (editor.isActive(\"taskList\")) return \"task-list\";\n if (editor.isActive(\"codeBlock\")) return \"code-block\";\n if (editor.isActive(\"blockquote\")) return \"blockquote\";\n return \"paragraph\";\n };\n\n // Handle block type change\n const handle_block_type_change = (value: string) => {\n switch (value) {\n case \"paragraph\":\n editor.chain().focus().setParagraph().run();\n break;\n case \"heading-1\":\n editor.chain().focus().toggleHeading({ level: 1 }).run();\n break;\n case \"heading-2\":\n editor.chain().focus().toggleHeading({ level: 2 }).run();\n break;\n case \"heading-3\":\n editor.chain().focus().toggleHeading({ level: 3 }).run();\n break;\n case \"bullet-list\":\n editor.chain().focus().toggleBulletList().run();\n break;\n case \"ordered-list\":\n editor.chain().focus().toggleOrderedList().run();\n break;\n case \"task-list\":\n editor.chain().focus().toggleTaskList().run();\n break;\n case \"code-block\":\n editor.chain().focus().toggleCodeBlock().run();\n break;\n case \"blockquote\":\n editor.chain().focus().toggleBlockquote().run();\n break;\n }\n };\n\n // Handle font family change\n const handle_font_family_change = (value: string) => {\n editor.chain().focus().setFontFamily(value).run();\n };\n\n // Handle font size change\n const handle_font_size_change = (delta: number) => {\n const current = get_current_font_size();\n const new_size = Math.min(\n FONT_SIZE_CONFIG.max,\n Math.max(FONT_SIZE_CONFIG.min, current + delta)\n );\n editor.chain().focus().setFontSizeNum(new_size).run();\n };\n\n // Handle link\n const handle_set_link = () => {\n if (link_url && link_url !== \"https://\") {\n editor.chain().focus().setLink({ href: link_url }).run();\n set_link_url(\"https://\");\n set_link_popover_open(false);\n }\n };\n\n const handle_remove_link = () => {\n editor.chain().focus().unsetLink().run();\n set_link_popover_open(false);\n };\n\n // Handle text color\n const handle_text_color_change = (color: { hex: string }) => {\n set_text_color(color.hex);\n editor.chain().focus().setColor(color.hex).run();\n };\n\n // Handle highlight color\n const handle_highlight_color_change = (color: { hex: string }) => {\n set_highlight_color(color.hex);\n editor.chain().focus().setHighlight({ color: color.hex }).run();\n };\n\n // Handle image insert\n const handle_image_insert = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file && file.type.startsWith(\"image/\")) {\n const data_url = await file_to_data_url(file);\n editor.chain().focus().setImage({ src: data_url }).run();\n }\n if (image_input_ref.current) {\n image_input_ref.current.value = \"\";\n }\n };\n\n // Handle file attach\n const handle_file_attach = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const attachment = await file_to_attachment(file);\n on_attachments_change([...attachments, attachment]);\n }\n if (file_input_ref.current) {\n file_input_ref.current.value = \"\";\n }\n };\n\n // Handle table insert with custom size\n const handle_table_insert = (rows: number, cols: number) => {\n editor\n .chain()\n .focus()\n .insertTable({ rows, cols, withHeaderRow: true })\n .run();\n set_table_menu_open(false);\n set_table_rows(3);\n set_table_cols(3);\n set_hovered_cell(null);\n };\n\n // Handle table row/column operations\n const handle_add_row_before = () => {\n editor.chain().focus().addRowBefore().run();\n };\n\n const handle_add_row_after = () => {\n editor.chain().focus().addRowAfter().run();\n };\n\n const handle_delete_row = () => {\n editor.chain().focus().deleteRow().run();\n };\n\n const handle_add_col_before = () => {\n editor.chain().focus().addColumnBefore().run();\n };\n\n const handle_add_col_after = () => {\n editor.chain().focus().addColumnAfter().run();\n };\n\n const handle_delete_col = () => {\n editor.chain().focus().deleteColumn().run();\n };\n\n const handle_delete_table = () => {\n editor.chain().focus().deleteTable().run();\n };\n\n // Handle horizontal rule\n const handle_hr_insert = () => {\n editor.chain().focus().setHorizontalRule().run();\n };\n\n // Handle variable insert\n const handle_variable_insert = (variable_name: string) => {\n editor.chain().focus().insertVariable(variable_name).run();\n set_variables_menu_open(false);\n };\n\n return (\n <TooltipProvider delayDuration={300}>\n <div\n className={cn(\n \"cls_rte_toolbar\",\n \"flex flex-wrap items-center gap-0.5\",\n \"p-1.5 rounded-t-md\",\n \"bg-muted border-b border-border\",\n disabled && \"opacity-50 pointer-events-none\"\n )}\n >\n {/* Undo/Redo */}\n <ToolbarButton\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().undo()}\n tooltip=\"Undo\"\n >\n <LuUndo2 className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().redo()}\n tooltip=\"Redo\"\n >\n <LuRedo2 className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Block Type Dropdown */}\n <Select value={get_current_block_type()} onValueChange={handle_block_type_change}>\n <SelectTrigger className=\"h-8 w-[130px] text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {BLOCK_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value} className=\"text-xs\">\n {type.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <ToolbarSeparator />\n\n {/* Font Family */}\n <Select value={get_current_font_family()} onValueChange={handle_font_family_change}>\n <SelectTrigger className=\"h-8 w-[120px] text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {FONT_FAMILIES.map((font) => (\n <SelectItem\n key={font.value}\n value={font.value}\n className=\"text-xs\"\n style={{ fontFamily: font.value }}\n >\n {font.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n {/* Font Size */}\n <div className=\"flex items-center\">\n <ToolbarButton\n onClick={() => handle_font_size_change(-FONT_SIZE_CONFIG.step)}\n tooltip=\"Decrease font size\"\n >\n <LuMinus className=\"h-3 w-3\" />\n </ToolbarButton>\n <span className=\"w-8 text-center text-xs tabular-nums\">\n {get_current_font_size()}\n </span>\n <ToolbarButton\n onClick={() => handle_font_size_change(FONT_SIZE_CONFIG.step)}\n tooltip=\"Increase font size\"\n >\n <LuPlus className=\"h-3 w-3\" />\n </ToolbarButton>\n </div>\n\n <ToolbarSeparator />\n\n {/* Text Formatting */}\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n is_active={editor.isActive(\"bold\")}\n tooltip=\"Bold\"\n >\n <LuBold className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n is_active={editor.isActive(\"italic\")}\n tooltip=\"Italic\"\n >\n <LuItalic className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n is_active={editor.isActive(\"underline\")}\n tooltip=\"Underline\"\n >\n <LuUnderline className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n is_active={editor.isActive(\"strike\")}\n tooltip=\"Strikethrough\"\n >\n <LuStrikethrough className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSubscript().run()}\n is_active={editor.isActive(\"subscript\")}\n tooltip=\"Subscript\"\n >\n <LuSubscript className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleSuperscript().run()}\n is_active={editor.isActive(\"superscript\")}\n tooltip=\"Superscript\"\n >\n <LuSuperscript className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Link */}\n <Popover open={link_popover_open} onOpenChange={set_link_popover_open}>\n <PopoverTrigger asChild>\n <ToolbarButton is_active={editor.isActive(\"link\")} tooltip=\"Link\">\n <LuLink className=\"h-4 w-4\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-80 p-3\">\n <div className=\"flex flex-col gap-2\">\n <Input\n value={link_url}\n onChange={(e) => set_link_url(e.target.value)}\n placeholder=\"https://example.com\"\n className=\"h-8 text-sm\"\n />\n <div className=\"flex gap-2\">\n <Button size=\"sm\" onClick={handle_set_link} className=\"flex-1\">\n {editor.isActive(\"link\") ? \"Update\" : \"Add\"} Link\n </Button>\n {editor.isActive(\"link\") && (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n onClick={handle_remove_link}\n >\n Remove\n </Button>\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n\n {/* Clear Formatting */}\n <ToolbarButton\n onClick={() => editor.chain().focus().unsetAllMarks().clearNodes().run()}\n tooltip=\"Clear formatting\"\n >\n <LuRemoveFormatting className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Text Color */}\n <Popover open={text_color_open} onOpenChange={set_text_color_open}>\n <PopoverTrigger asChild>\n <ToolbarButton tooltip=\"Text color\">\n <div className=\"flex flex-col items-center\">\n <LuPalette className=\"h-4 w-4\" />\n <div\n className=\"h-0.5 w-4 mt-0.5 rounded-full\"\n style={{ backgroundColor: text_color }}\n />\n </div>\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Sketch\n color={text_color}\n onChange={handle_text_color_change}\n presetColors={[\n \"#000000\", \"#434343\", \"#666666\", \"#999999\", \"#cccccc\", \"#ffffff\",\n \"#ff0000\", \"#ff9900\", \"#ffff00\", \"#00ff00\", \"#00ffff\", \"#0000ff\",\n \"#9900ff\", \"#ff00ff\", \"#f4cccc\", \"#fce5cd\", \"#fff2cc\", \"#d9ead3\",\n ]}\n />\n </PopoverContent>\n </Popover>\n\n {/* Highlight Color */}\n <Popover open={highlight_color_open} onOpenChange={set_highlight_color_open}>\n <PopoverTrigger asChild>\n <ToolbarButton tooltip=\"Highlight color\">\n <div className=\"flex flex-col items-center\">\n <LuHighlighter className=\"h-4 w-4\" />\n <div\n className=\"h-0.5 w-4 mt-0.5 rounded-full\"\n style={{ backgroundColor: highlight_color }}\n />\n </div>\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Sketch\n color={highlight_color}\n onChange={handle_highlight_color_change}\n presetColors={[\n \"#ffff00\", \"#00ff00\", \"#00ffff\", \"#ff00ff\", \"#ff0000\", \"#0000ff\",\n \"#fff2cc\", \"#d9ead3\", \"#cfe2f3\", \"#ead1dc\", \"#fce5cd\", \"#d0e0e3\",\n ]}\n />\n </PopoverContent>\n </Popover>\n\n <ToolbarSeparator />\n\n {/* Alignment */}\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"left\").run()}\n is_active={editor.isActive({ textAlign: \"left\" })}\n tooltip=\"Align left\"\n >\n <LuAlignLeft className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"center\").run()}\n is_active={editor.isActive({ textAlign: \"center\" })}\n tooltip=\"Align center\"\n >\n <LuAlignCenter className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"right\").run()}\n is_active={editor.isActive({ textAlign: \"right\" })}\n tooltip=\"Align right\"\n >\n <LuAlignRight className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign(\"justify\").run()}\n is_active={editor.isActive({ textAlign: \"justify\" })}\n tooltip=\"Justify\"\n >\n <LuAlignJustify className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* List Types */}\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n is_active={editor.isActive(\"bulletList\")}\n tooltip=\"Bullet list\"\n >\n <LuList className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n is_active={editor.isActive(\"orderedList\")}\n tooltip=\"Numbered list\"\n >\n <LuListOrdered className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => editor.chain().focus().toggleTaskList().run()}\n is_active={editor.isActive(\"taskList\")}\n tooltip=\"Checklist\"\n >\n <LuListChecks className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Indent/Outdent */}\n <ToolbarButton\n onClick={() => {\n if (editor.isActive(\"listItem\")) {\n editor.chain().focus().liftListItem(\"listItem\").run();\n } else if (editor.isActive(\"taskItem\")) {\n editor.chain().focus().liftListItem(\"taskItem\").run();\n }\n }}\n disabled={!editor.can().liftListItem(\"listItem\") && !editor.can().liftListItem(\"taskItem\")}\n tooltip=\"Decrease indent\"\n >\n <LuIndentDecrease className=\"h-4 w-4\" />\n </ToolbarButton>\n <ToolbarButton\n onClick={() => {\n if (editor.isActive(\"listItem\")) {\n editor.chain().focus().sinkListItem(\"listItem\").run();\n } else if (editor.isActive(\"taskItem\")) {\n editor.chain().focus().sinkListItem(\"taskItem\").run();\n }\n }}\n disabled={!editor.can().sinkListItem(\"listItem\") && !editor.can().sinkListItem(\"taskItem\")}\n tooltip=\"Increase indent\"\n >\n <LuIndentIncrease className=\"h-4 w-4\" />\n </ToolbarButton>\n\n <ToolbarSeparator />\n\n {/* Horizontal Rule */}\n <ToolbarButton\n onClick={handle_hr_insert}\n tooltip=\"Horizontal rule\"\n >\n <RxDividerHorizontal className=\"h-4 w-4\" />\n </ToolbarButton>\n\n {/* Image */}\n <ToolbarButton\n onClick={() => image_input_ref.current?.click()}\n tooltip=\"Insert image\"\n >\n <LuImage className=\"h-4 w-4\" />\n </ToolbarButton>\n\n {/* Table Menu */}\n <Popover open={table_menu_open} onOpenChange={set_table_menu_open}>\n <PopoverTrigger asChild>\n <ToolbarButton\n is_active={editor.isActive(\"table\")}\n tooltip=\"Table\"\n >\n <LuTable className=\"h-4 w-4\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-3\" align=\"start\">\n {editor.isActive(\"table\") ? (\n // Table editing controls when inside a table\n <div className=\"flex flex-col gap-2\">\n <div className=\"text-xs font-medium mb-1\">Table Operations</div>\n <div className=\"grid grid-cols-2 gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_row_before}\n >\n <LuTableRowsSplit className=\"h-3 w-3 mr-1\" />\n Add row above\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_row_after}\n >\n <LuTableRowsSplit className=\"h-3 w-3 mr-1\" />\n Add row below\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_col_before}\n >\n <LuTableColumnsSplit className=\"h-3 w-3 mr-1\" />\n Add col left\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7\"\n onClick={handle_add_col_after}\n >\n <LuTableColumnsSplit className=\"h-3 w-3 mr-1\" />\n Add col right\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7 text-destructive hover:text-destructive\"\n onClick={handle_delete_row}\n >\n <LuTrash2 className=\"h-3 w-3 mr-1\" />\n Delete row\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs h-7 text-destructive hover:text-destructive\"\n onClick={handle_delete_col}\n >\n <LuTrash2 className=\"h-3 w-3 mr-1\" />\n Delete col\n </Button>\n </div>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"justify-center text-xs h-7 mt-1\"\n onClick={handle_delete_table}\n >\n <LuTrash2 className=\"h-3 w-3 mr-1\" />\n Delete table\n </Button>\n </div>\n ) : (\n // Table size picker when not in a table\n <div className=\"flex flex-col gap-2\">\n <div className=\"text-xs font-medium mb-1\">Insert Table</div>\n {/* Grid size picker */}\n <div className=\"grid gap-0.5\">\n {Array.from({ length: 6 }).map((_, row_idx) => (\n <div key={row_idx} className=\"flex gap-0.5\">\n {Array.from({ length: 6 }).map((_, col_idx) => (\n <div\n key={col_idx}\n className={cn(\n \"w-5 h-5 border rounded-sm cursor-pointer transition-colors\",\n hovered_cell && row_idx < hovered_cell.row && col_idx < hovered_cell.col\n ? \"bg-primary border-primary\"\n : \"border-border hover:border-primary/50\"\n )}\n onMouseEnter={() => set_hovered_cell({ row: row_idx + 1, col: col_idx + 1 })}\n onMouseLeave={() => set_hovered_cell(null)}\n onClick={() => handle_table_insert(row_idx + 1, col_idx + 1)}\n />\n ))}\n </div>\n ))}\n </div>\n <div className=\"text-xs text-center text-muted-foreground\">\n {hovered_cell ? `${hovered_cell.col} x ${hovered_cell.row}` : \"Select size\"}\n </div>\n <div className=\"border-t pt-2 mt-1\">\n <div className=\"text-xs text-muted-foreground mb-2\">Custom size</div>\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"number\"\n min={1}\n max={20}\n value={table_cols}\n onChange={(e) => set_table_cols(Math.max(1, Math.min(20, parseInt(e.target.value) || 1)))}\n className=\"h-7 w-14 text-xs\"\n />\n <span className=\"text-xs\">x</span>\n <Input\n type=\"number\"\n min={1}\n max={20}\n value={table_rows}\n onChange={(e) => set_table_rows(Math.max(1, Math.min(20, parseInt(e.target.value) || 1)))}\n className=\"h-7 w-14 text-xs\"\n />\n <Button\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => handle_table_insert(table_rows, table_cols)}\n >\n <LuGrid3X3 className=\"h-3 w-3 mr-1\" />\n Insert\n </Button>\n </div>\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n\n <ToolbarSeparator />\n\n {/* Variables Menu */}\n {variables.length > 0 && (\n <Popover open={variables_menu_open} onOpenChange={set_variables_menu_open}>\n <PopoverTrigger asChild>\n <ToolbarButton tooltip=\"Insert variable\">\n <LuVariable className=\"h-4 w-4\" />\n </ToolbarButton>\n </PopoverTrigger>\n <PopoverContent className=\"w-64 p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder=\"Search variables...\" className=\"h-8 text-xs\" />\n <CommandList>\n <CommandEmpty>No variables found.</CommandEmpty>\n <CommandGroup>\n {variables.map((variable) => (\n <CommandItem\n key={variable.name}\n value={variable.name}\n onSelect={() => handle_variable_insert(variable.name)}\n className=\"text-xs\"\n >\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">{`{{${variable.name}}}`}</span>\n {variable.description && (\n <span className=\"text-muted-foreground text-[10px]\">\n {variable.description}\n </span>\n )}\n </div>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )}\n\n {/* File Attach */}\n <ToolbarButton\n onClick={() => file_input_ref.current?.click()}\n tooltip=\"Attach file\"\n >\n <LuPaperclip className=\"h-4 w-4\" />\n </ToolbarButton>\n\n {/* Hidden file inputs */}\n <input\n ref={file_input_ref}\n type=\"file\"\n className=\"hidden\"\n onChange={handle_file_attach}\n />\n <input\n ref={image_input_ref}\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={handle_image_insert}\n />\n </div>\n </TooltipProvider>\n );\n};\n","\"use client\";\n\n/**\n * Attachments List Component\n *\n * Displays attached files with preview and remove functionality.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Button } from \"../../ui/button\";\nimport { LuX, LuFile, LuImage, LuFileText, LuFileCode } from \"react-icons/lu\";\nimport type { RteAttachment } from \"../types\";\nimport { format_file_size, get_file_extension, is_image_file } from \"../utils\";\n\ninterface AttachmentsListProps {\n attachments: RteAttachment[];\n on_remove: (index: number) => void;\n disabled?: boolean;\n}\n\n/**\n * Get icon for file type\n */\nconst get_file_icon = (mime_type: string, filename: string) => {\n if (is_image_file(mime_type)) {\n return <LuImage className=\"h-4 w-4\" />;\n }\n\n const ext = get_file_extension(filename);\n if ([\"txt\", \"md\", \"doc\", \"docx\", \"pdf\"].includes(ext)) {\n return <LuFileText className=\"h-4 w-4\" />;\n }\n if ([\"js\", \"ts\", \"jsx\", \"tsx\", \"json\", \"html\", \"css\"].includes(ext)) {\n return <LuFileCode className=\"h-4 w-4\" />;\n }\n\n return <LuFile className=\"h-4 w-4\" />;\n};\n\n/**\n * Calculate base64 file size in bytes\n */\nconst get_base64_size = (base64: string): number => {\n // Remove padding and calculate\n const padding = (base64.match(/=+$/) || [\"\"])[0].length;\n return Math.floor((base64.length * 3) / 4) - padding;\n};\n\nexport const AttachmentsList: React.FC<AttachmentsListProps> = ({\n attachments,\n on_remove,\n disabled = false,\n}) => {\n if (attachments.length === 0) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"cls_rte_attachments\",\n \"flex flex-wrap gap-2 p-2\",\n \"border-t border-border bg-muted/50 rounded-b-md\"\n )}\n >\n {attachments.map((attachment, index) => {\n const size = get_base64_size(attachment.data);\n const is_image = is_image_file(attachment.mime_type);\n\n return (\n <div\n key={`${attachment.filename}-${index}`}\n className={cn(\n \"cls_rte_attachment_item\",\n \"flex items-center gap-2\",\n \"px-2 py-1.5 rounded-md\",\n \"bg-background border border-border\",\n \"text-xs\"\n )}\n >\n {/* Preview thumbnail for images */}\n {is_image ? (\n <img\n src={`data:${attachment.mime_type};base64,${attachment.data}`}\n alt={attachment.filename}\n className=\"h-8 w-8 rounded object-cover\"\n />\n ) : (\n <div className=\"flex h-8 w-8 items-center justify-center rounded bg-muted\">\n {get_file_icon(attachment.mime_type, attachment.filename)}\n </div>\n )}\n\n {/* File info */}\n <div className=\"flex flex-col min-w-0\">\n <span className=\"truncate max-w-[120px] font-medium\">\n {attachment.filename}\n </span>\n <span className=\"text-muted-foreground text-[10px]\">\n {format_file_size(size)}\n </span>\n </div>\n\n {/* Remove button */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5 ml-1\"\n onClick={() => on_remove(index)}\n disabled={disabled}\n >\n <LuX className=\"h-3 w-3\" />\n </Button>\n </div>\n );\n })}\n </div>\n );\n};\n","/**\n * Font Size Extension for Tiptap\n *\n * Custom extension that adds font-size support through the TextStyle mark.\n * Uses setFontSizeNum to avoid conflicts with other font size extensions.\n */\n\nimport { Extension } from \"@tiptap/core\";\nimport \"@tiptap/extension-text-style\";\n\nexport interface FontSizeOptions {\n types: string[];\n default_size: number;\n min_size: number;\n max_size: number;\n step: number;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n fontSizeCustom: {\n /**\n * Set the font size (numeric)\n */\n setFontSizeNum: (size: number) => ReturnType;\n /**\n * Unset the font size\n */\n unsetFontSizeNum: () => ReturnType;\n };\n }\n}\n\nexport const FontSizeExtension = Extension.create<FontSizeOptions>({\n name: \"fontSizeCustom\",\n\n addOptions() {\n return {\n types: [\"textStyle\"],\n default_size: 16,\n min_size: 8,\n max_size: 72,\n step: 2,\n };\n },\n\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n fontSize: {\n default: null,\n parseHTML: (element) => {\n const size = element.style.fontSize?.replace(/['\"px]/g, \"\");\n return size ? parseInt(size, 10) : null;\n },\n renderHTML: (attributes) => {\n if (!attributes.fontSize) {\n return {};\n }\n return {\n style: `font-size: ${attributes.fontSize}px`,\n };\n },\n },\n },\n },\n ];\n },\n\n addCommands() {\n return {\n setFontSizeNum:\n (size: number) =>\n ({ chain }) => {\n const clampedSize = Math.min(\n this.options.max_size,\n Math.max(this.options.min_size, size)\n );\n return chain().setMark(\"textStyle\", { fontSize: clampedSize }).run();\n },\n unsetFontSizeNum:\n () =>\n ({ chain }) => {\n return chain()\n .setMark(\"textStyle\", { fontSize: null })\n .removeEmptyTextStyle()\n .run();\n },\n };\n },\n});\n","/**\n * Variable Extension for Tiptap\n *\n * Custom atomic node extension for template variables.\n * Variables are rendered as non-editable pills and serialize to {{variable_name}}.\n */\n\nimport { Node, mergeAttributes } from \"@tiptap/core\";\nimport { ReactNodeViewRenderer, NodeViewWrapper, type NodeViewProps } from \"@tiptap/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\n\n/**\n * React component for rendering variable pills in the editor\n */\nconst VariablePill: React.FC<NodeViewProps> = ({ node, selected }) => {\n return (\n <NodeViewWrapper as=\"span\" className=\"inline\">\n <span\n className={cn(\n \"cls_rte_variable_pill\",\n \"inline-flex items-center\",\n \"px-2 py-0.5 mx-0.5\",\n \"rounded-full\",\n \"text-sm font-medium\",\n \"bg-primary/10 text-primary\",\n \"border border-primary/20\",\n \"cursor-default select-none\",\n selected && \"ring-2 ring-primary ring-offset-1\"\n )}\n contentEditable={false}\n data-variable={node.attrs.name}\n >\n {`{{${node.attrs.name}}}`}\n </span>\n </NodeViewWrapper>\n );\n};\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n variable: {\n /**\n * Insert a variable node\n */\n insertVariable: (name: string) => ReturnType;\n };\n }\n}\n\nexport const VariableExtension = Node.create({\n name: \"variable\",\n\n group: \"inline\",\n\n inline: true,\n\n // Atomic means the node cannot be split or merged\n atom: true,\n\n // Draggable in the editor\n draggable: true,\n\n // Selectable as a whole unit\n selectable: true,\n\n addAttributes() {\n return {\n name: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-variable\"),\n renderHTML: (attributes) => ({\n \"data-variable\": attributes.name,\n }),\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"span[data-variable]\",\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\n \"span\",\n mergeAttributes(HTMLAttributes, {\n class: \"cls_rte_variable_pill\",\n contenteditable: \"false\",\n }),\n `{{${HTMLAttributes[\"data-variable\"]}}}`,\n ];\n },\n\n renderText({ node }) {\n return `{{${node.attrs.name}}}`;\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(VariablePill);\n },\n\n addCommands() {\n return {\n insertVariable:\n (name: string) =>\n ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: { name },\n });\n },\n };\n },\n\n // Keyboard behavior - delete entire node on backspace\n addKeyboardShortcuts() {\n return {\n Backspace: () =>\n this.editor.commands.command(({ tr, state }) => {\n let is_variable = false;\n const { selection } = state;\n const { empty, anchor } = selection;\n\n if (!empty) {\n return false;\n }\n\n state.doc.nodesBetween(anchor - 1, anchor, (node, pos) => {\n if (node.type.name === this.name) {\n is_variable = true;\n tr.insertText(\"\", pos, pos + node.nodeSize);\n return false;\n }\n });\n\n return is_variable;\n }),\n };\n },\n});\n","\"use client\";\n\n/**\n * Tabs component based on Radix UI\n * Provides tabbed interface for content switching\n */\n\nimport * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"../../lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","\"use client\";\n\n/**\n * Hazo UI Rich Text Editor Component\n *\n * A comprehensive rich text editor for email template generation with\n * variable insertion support, file attachments, and full formatting controls.\n */\n\nimport * as React from \"react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { TextStyle } from \"@tiptap/extension-text-style\";\nimport FontFamily from \"@tiptap/extension-font-family\";\nimport Underline from \"@tiptap/extension-underline\";\nimport Subscript from \"@tiptap/extension-subscript\";\nimport Superscript from \"@tiptap/extension-superscript\";\nimport Link from \"@tiptap/extension-link\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport Color from \"@tiptap/extension-color\";\nimport Image from \"@tiptap/extension-image\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport HorizontalRule from \"@tiptap/extension-horizontal-rule\";\nimport { Table } from \"@tiptap/extension-table\";\nimport TableRow from \"@tiptap/extension-table-row\";\nimport TableCell from \"@tiptap/extension-table-cell\";\nimport TableHeader from \"@tiptap/extension-table-header\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Toolbar } from \"./toolbar/toolbar\";\nimport { AttachmentsList } from \"./attachments/attachments_list\";\nimport { FontSizeExtension } from \"./extensions/font_size_extension\";\nimport { VariableExtension } from \"./extensions/variable_extension\";\nimport { Tabs, TabsList, TabsTrigger } from \"../ui/tabs\";\nimport type {\n HazoUiRteProps,\n RteOutput,\n RteAttachment,\n RteVariable,\n} from \"./types\";\n\n// Re-export types for external use\nexport type { HazoUiRteProps, RteOutput, RteAttachment, RteVariable };\n\n/**\n * Debounce utility for rate-limiting callbacks\n */\nfunction debounce_fn<T extends RteOutput>(\n func: (output: T) => void,\n wait: number\n): (output: T) => void {\n let timeout_id: ReturnType<typeof setTimeout> | null = null;\n\n return (output: T) => {\n if (timeout_id) {\n clearTimeout(timeout_id);\n }\n timeout_id = setTimeout(() => {\n func(output);\n }, wait);\n };\n}\n\n/**\n * HazoUiRte - Rich Text Editor Component\n */\nexport const HazoUiRte: React.FC<HazoUiRteProps> = ({\n html = \"\",\n attachments: initial_attachments = [],\n variables = [],\n on_change,\n placeholder = \"Start typing...\",\n min_height = \"200px\",\n max_height = \"400px\",\n disabled = false,\n className,\n show_output_viewer = false,\n}) => {\n const [attachments, set_attachments] = React.useState<RteAttachment[]>(\n initial_attachments\n );\n const [active_tab, set_active_tab] = React.useState<\"html\" | \"plain_text\" | \"raw_html\">(\"html\");\n\n // Determine if toolbar should be disabled (view-only modes)\n const is_view_only = active_tab !== \"html\";\n\n // Store latest attachments in a ref for the debounced callback\n const attachments_ref = React.useRef(attachments);\n attachments_ref.current = attachments;\n\n // Create debounced change handler\n const debounced_on_change = React.useMemo(\n () =>\n debounce_fn<RteOutput>((output: RteOutput) => {\n if (on_change) {\n on_change(output);\n }\n }, 300),\n [on_change]\n );\n\n // Initialize the editor\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: {\n levels: [1, 2, 3],\n },\n }),\n TextStyle,\n FontFamily,\n FontSizeExtension,\n Underline,\n Subscript,\n Superscript,\n Link.configure({\n openOnClick: false,\n HTMLAttributes: {\n class: \"cls_rte_link text-primary underline cursor-pointer\",\n },\n }),\n TextAlign.configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Highlight.configure({\n multicolor: true,\n }),\n Color,\n Image.configure({\n inline: true,\n allowBase64: true,\n HTMLAttributes: {\n class: \"cls_rte_image max-w-full h-auto rounded\",\n },\n }),\n Placeholder.configure({\n placeholder,\n }),\n HorizontalRule,\n Table.configure({\n resizable: true,\n HTMLAttributes: {\n class: \"cls_rte_table border-collapse w-full\",\n },\n }),\n TableRow,\n TableCell.configure({\n HTMLAttributes: {\n class: \"border border-border p-2\",\n },\n }),\n TableHeader.configure({\n HTMLAttributes: {\n class: \"border border-border p-2 bg-muted font-semibold\",\n },\n }),\n TaskList.configure({\n HTMLAttributes: {\n class: \"cls_rte_task_list list-none pl-0\",\n },\n }),\n TaskItem.configure({\n nested: true,\n HTMLAttributes: {\n class: \"cls_rte_task_item flex items-start gap-2\",\n },\n }),\n VariableExtension,\n ],\n content: html,\n editable: !disabled,\n immediatelyRender: false, // Prevent SSR hydration mismatch in Next.js\n editorProps: {\n attributes: {\n class: cn(\n \"cls_rte_editor\",\n \"prose prose-sm dark:prose-invert max-w-none\",\n \"p-4 focus:outline-none\",\n \"min-h-[inherit] overflow-auto\"\n ),\n style: `min-height: ${min_height}; max-height: ${max_height}`,\n },\n },\n onUpdate: ({ editor }) => {\n const output: RteOutput = {\n html: editor.getHTML(),\n plain_text: editor.getText(),\n attachments: attachments_ref.current,\n };\n debounced_on_change(output);\n },\n });\n\n // Update editor content when html prop changes externally\n React.useEffect(() => {\n if (editor && html !== undefined) {\n const current_html = editor.getHTML();\n // Only update if content is actually different to avoid cursor jumps\n if (html !== current_html && !editor.isFocused) {\n editor.commands.setContent(html, { emitUpdate: false });\n }\n }\n }, [html, editor]);\n\n // Update editor editable state when disabled changes\n React.useEffect(() => {\n if (editor) {\n editor.setEditable(!disabled);\n }\n }, [disabled, editor]);\n\n // Track if attachments were set from props to avoid circular updates\n const attachments_from_props_ref = React.useRef(false);\n const prev_initial_attachments_ref = React.useRef(initial_attachments);\n\n // Sync attachments with initial prop (only if changed externally)\n React.useEffect(() => {\n // Only update if initial_attachments actually changed (not from our own on_change)\n if (JSON.stringify(initial_attachments) !== JSON.stringify(prev_initial_attachments_ref.current)) {\n prev_initial_attachments_ref.current = initial_attachments;\n attachments_from_props_ref.current = true;\n set_attachments(initial_attachments);\n }\n }, [initial_attachments]);\n\n // Notify parent when attachments change (but not if set from props)\n React.useEffect(() => {\n if (attachments_from_props_ref.current) {\n attachments_from_props_ref.current = false;\n return;\n }\n if (editor && on_change) {\n const output: RteOutput = {\n html: editor.getHTML(),\n plain_text: editor.getText(),\n attachments,\n };\n on_change(output);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [attachments]);\n\n // Handle attachment removal\n const handle_remove_attachment = (index: number) => {\n set_attachments((prev) => prev.filter((_, i) => i !== index));\n };\n\n // Handle attachments change from toolbar\n const handle_attachments_change = (new_attachments: RteAttachment[]) => {\n set_attachments(new_attachments);\n };\n\n // Format HTML with indentation for raw view\n const format_html = (html_str: string): string => {\n let formatted = \"\";\n let indent = 0;\n const tags = html_str.split(/(<[^>]+>)/g).filter(Boolean);\n\n for (const tag of tags) {\n if (tag.startsWith(\"</\")) {\n indent = Math.max(0, indent - 1);\n formatted += \" \".repeat(indent) + tag + \"\\n\";\n } else if (tag.startsWith(\"<\") && !tag.startsWith(\"<!\") && !tag.endsWith(\"/>\")) {\n formatted += \" \".repeat(indent) + tag + \"\\n\";\n if (!tag.includes(\"br\") && !tag.includes(\"hr\") && !tag.includes(\"img\")) {\n indent++;\n }\n } else if (tag.startsWith(\"<\")) {\n formatted += \" \".repeat(indent) + tag + \"\\n\";\n } else if (tag.trim()) {\n formatted += \" \".repeat(indent) + tag.trim() + \"\\n\";\n }\n }\n return formatted.trim();\n };\n\n return (\n <div\n className={cn(\n \"cls_rte_container\",\n \"rounded-md border border-input bg-background\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n >\n {/* Toolbar - always visible, disabled in view-only modes */}\n <Toolbar\n editor={editor}\n variables={variables}\n attachments={attachments}\n on_attachments_change={handle_attachments_change}\n disabled={disabled || is_view_only}\n />\n\n {/* View Mode Tabs */}\n {show_output_viewer && editor && (\n <div className=\"cls_rte_tabs border-b border-border px-2 pt-2\">\n <Tabs value={active_tab} onValueChange={(v) => set_active_tab(v as typeof active_tab)}>\n <TabsList className=\"h-9\">\n <TabsTrigger value=\"html\" className=\"text-sm\">HTML</TabsTrigger>\n <TabsTrigger value=\"plain_text\" className=\"text-sm\">Plain Text</TabsTrigger>\n <TabsTrigger value=\"raw_html\" className=\"text-sm\">Raw HTML</TabsTrigger>\n </TabsList>\n </Tabs>\n </div>\n )}\n\n {/* Content Area */}\n <div style={{ minHeight: min_height, maxHeight: max_height }} className=\"overflow-auto\">\n {/* HTML Edit Mode */}\n {active_tab === \"html\" && (\n <EditorContent\n editor={editor}\n className={cn(\n \"cls_rte_content\",\n disabled && \"pointer-events-none\"\n )}\n />\n )}\n\n {/* Plain Text View */}\n {active_tab === \"plain_text\" && (\n <pre className=\"cls_rte_plain_text p-4 text-sm whitespace-pre-wrap font-mono h-full\">\n {editor?.getText() || \"(empty)\"}\n </pre>\n )}\n\n {/* Raw HTML View */}\n {active_tab === \"raw_html\" && (\n <pre className=\"cls_rte_raw_html p-4 text-xs whitespace-pre-wrap font-mono text-muted-foreground h-full\">\n {format_html(editor?.getHTML() || \"\") || \"(empty)\"}\n </pre>\n )}\n </div>\n\n {/* Attachments List */}\n <AttachmentsList\n attachments={attachments}\n on_remove={handle_remove_attachment}\n disabled={disabled}\n />\n </div>\n );\n};\n\nHazoUiRte.displayName = \"HazoUiRte\";\n"]}
|