@yoopta/ui 6.0.0 → 6.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-menu-list.js","sources":["../src/action-menu-list/context.tsx","../src/action-menu-list/utils.ts","../src/action-menu-list/action-menu-list.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { CSSProperties, HTMLProps } from 'react';\n\nimport type { ActionMenuItem } from './types';\n\nexport type ActionMenuListContextValue = {\n /** Whether menu is open */\n isOpen: boolean;\n /** Current view mode */\n view: 'small' | 'default';\n /** Available actions from editor plugins */\n actions: ActionMenuItem[];\n /** Currently selected/hovered action */\n selectedAction: ActionMenuItem | null;\n /** Select an action (hover) */\n setSelectedAction: (action: ActionMenuItem) => void;\n /** Execute action (toggle block) */\n onSelect: (type: string) => void;\n /** Close the menu */\n close: () => void;\n /** Floating styles for positioning */\n floatingStyles: CSSProperties;\n /** Ref setter for floating element */\n setFloatingRef: (node: HTMLElement | null) => void;\n /** Props from useInteractions for dismiss handling */\n getFloatingProps: (userProps?: HTMLProps<HTMLElement>) => Record<string, unknown>;\n};\n\nexport const ActionMenuListContext = createContext<ActionMenuListContextValue | null>(null);\n\nexport const useActionMenuListContext = () => {\n const context = useContext(ActionMenuListContext);\n\n if (!context) {\n throw new Error('ActionMenuList components must be used within <ActionMenuList>');\n }\n\n return context;\n};\n","import { Blocks, getAllowedPluginsFromElement, getRootBlockElement } from '@yoopta/editor';\nimport type { Plugin, SlateElement, YooEditor, YooptaBlock, YooptaBlockData } from '@yoopta/editor';\n\nimport type { ActionMenuItem } from './types';\n\nconst filterBy = (\n item: YooptaBlockData | YooptaBlock['options'],\n text: string,\n field: string,\n): boolean => {\n if (!item || typeof item[field] === 'undefined') return false;\n\n const value = item[field];\n const searchText = text.toLowerCase().trim();\n\n if (Array.isArray(value)) {\n return value\n .filter(Boolean)\n .map((v) => String(v).toLowerCase())\n .some((v) => v.includes(searchText));\n }\n\n return String(value).toLowerCase().includes(searchText);\n};\n\nexport const filterActionMenuItems = (\n blockPlugin: Plugin<Record<string, SlateElement>, unknown>,\n searchText: string,\n): boolean => {\n if (!searchText.trim()) return true;\n if (!blockPlugin) return false;\n\n const searchTerms = searchText.toLowerCase().split(/\\s+/);\n\n return searchTerms.every((term) => {\n const typeMatch = filterBy(blockPlugin, term, 'type');\n if (typeMatch) return true;\n\n const titleMatch =\n blockPlugin.options?.display && filterBy(blockPlugin.options.display, term, 'title');\n if (titleMatch) return true;\n\n const shortcutMatch = blockPlugin.options && filterBy(blockPlugin.options, term, 'shortcuts');\n if (shortcutMatch) return true;\n\n const descriptionMatch =\n blockPlugin.options?.display && filterBy(blockPlugin.options.display, term, 'description');\n if (descriptionMatch) return true;\n\n return false;\n });\n};\n\nexport function mapActionMenuItems(editor: YooEditor): ActionMenuItem[] {\n const items: string[] | ActionMenuItem[] = Object.keys(editor.plugins);\n // Check if we're inside an element with injectElementsFromPlugins\n let injectElementsFromPlugins: string[] | null = null;\n\n if (typeof editor.path.current === 'number') {\n const slate = Blocks.getBlockSlate(editor, { at: editor.path.current });\n if (slate) {\n injectElementsFromPlugins = getAllowedPluginsFromElement(editor, slate);\n }\n }\n\n // Filter items based on injectElementsFromPlugins\n let filteredItems = items;\n\n if (injectElementsFromPlugins && injectElementsFromPlugins.length > 0) {\n if (typeof items[0] === 'string') {\n filteredItems = (items as string[]).filter((item) =>\n injectElementsFromPlugins!.includes(item),\n );\n } else {\n filteredItems = items.filter((item) => injectElementsFromPlugins!.includes(item.type));\n }\n }\n\n return filteredItems.map((item: string | ActionMenuItem) => {\n if (typeof item === 'string') {\n const title = editor.plugins[item].options?.display?.title || item;\n const description = editor.plugins[item].options?.display?.description;\n const icon = editor.plugins[item].options?.display?.icon;\n return { type: item, title, description, icon };\n }\n return item;\n });\n}\n\nexport function filterToggleActions(editor: YooEditor, type: string) {\n const block = editor.plugins[type];\n if (!block) return false;\n\n const rootBlock = getRootBlockElement(block.elements);\n if (rootBlock?.props?.nodeType === 'void') return false;\n return true;\n}\n\nexport function isSlashPressed(event: KeyboardEvent): boolean {\n return (\n event.key === '/' ||\n event.keyCode === 191 ||\n event.which === 191 ||\n event.code === 'Slash' ||\n event.key === '/' ||\n (event.key === '.' && event.shiftKey)\n );\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\nimport { cloneElement, forwardRef, isValidElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { Placement } from '@floating-ui/react';\nimport {\n FloatingPortal,\n autoUpdate,\n flip,\n offset,\n shift,\n useDismiss,\n useFloating,\n useInteractions,\n useMergeRefs,\n} from '@floating-ui/react';\nimport { getRootBlockElement, useYooptaEditor } from '@yoopta/editor';\n\nimport { ActionMenuListContext, useActionMenuListContext } from './context';\nimport type { ActionMenuItem } from './types';\nimport { filterToggleActions, mapActionMenuItems } from './utils';\nimport { Overlay } from '../overlay';\nimport './action-menu-list.css';\n\ntype ActionMenuListApi = {\n /** Available actions from editor plugins */\n actions: ActionMenuItem[];\n /** Currently selected action */\n selectedAction: ActionMenuItem | null;\n /** Execute action (toggle block type) */\n onSelect: (type: string) => void;\n /** Whether actions list is empty */\n empty: boolean;\n};\n\ntype ActionMenuListRootProps = {\n children: ReactNode | ((api: ActionMenuListApi) => ReactNode);\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Default open state for uncontrolled usage */\n defaultOpen?: boolean;\n /** Anchor element for positioning */\n anchor?: HTMLElement | null;\n /** View mode - 'small' for compact, 'default' for full */\n view?: 'small' | 'default';\n /** Placement relative to anchor */\n placement?: Placement;\n className?: string;\n};\n\nconst ActionMenuListRoot = ({\n children,\n open: controlledOpen,\n onOpenChange: controlledOnOpenChange,\n defaultOpen = false,\n anchor = null,\n view = 'default',\n placement = 'bottom-start',\n className = '',\n}: ActionMenuListRootProps) => {\n const editor = useYooptaEditor();\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const actions = useMemo(() => {\n // Skip computation when menu is closed\n if (!isOpen) return [];\n\n const baseActions = mapActionMenuItems(editor)\n .filter((item) => filterToggleActions(editor, item.type))\n .filter((item) => {\n const plugin = editor.plugins[item.type];\n const rootElement = getRootBlockElement(plugin.elements);\n return (\n rootElement?.props?.nodeType !== 'inline' &&\n rootElement?.props?.nodeType !== 'inlineVoid' &&\n rootElement?.props?.nodeType !== 'void'\n );\n });\n\n return baseActions;\n }, [editor, isOpen]);\n\n const [selectedAction, setSelectedAction] = useState<ActionMenuItem | null>(null);\n\n // Sync selectedAction when actions list changes (e.g. menu opens with new context)\n useEffect(() => {\n if (actions.length > 0) {\n setSelectedAction(actions[0]);\n }\n }, [actions]);\n\n const onOpenChange = useCallback(\n (newOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(newOpen);\n }\n controlledOnOpenChange?.(newOpen);\n },\n [isControlled, controlledOnOpenChange],\n );\n\n const { refs, floatingStyles, context } = useFloating({\n elements: { reference: anchor },\n placement,\n open: isOpen,\n onOpenChange,\n middleware: [flip(), shift(), offset(10)],\n whileElementsMounted: autoUpdate,\n });\n\n // Handle dismiss (escape key, outside press handled by Overlay)\n const dismiss = useDismiss(context, {\n escapeKey: true,\n outsidePress: false, // Overlay handles this\n });\n\n const { getFloatingProps } = useInteractions([dismiss]);\n\n const combinedStyles: CSSProperties = useMemo(\n () => ({\n ...floatingStyles,\n minWidth: view === 'small' ? 200 : 244,\n }),\n [floatingStyles, view],\n );\n\n const close = useCallback(() => {\n onOpenChange(false);\n setSelectedAction(actions[0] ?? null);\n }, [onOpenChange, actions]);\n\n const onSelect = useCallback(\n (type: string) => {\n if (Array.isArray(editor.path.selected) && editor.path.selected.length > 0) {\n editor.batchOperations(() => {\n editor.path.selected!.forEach((selected) => {\n editor.toggleBlock(type, { preserveContent: true, focus: true, at: selected });\n });\n });\n } else {\n editor.toggleBlock(type, { preserveContent: true, focus: true, at: editor.path.current });\n }\n\n close();\n },\n [editor, close],\n );\n\n // Context value\n const contextValue = useMemo(\n () => ({\n isOpen,\n view,\n actions,\n selectedAction,\n setSelectedAction,\n onSelect,\n close,\n floatingStyles: combinedStyles,\n setFloatingRef: refs.setFloating,\n getFloatingProps,\n }),\n [isOpen, view, actions, selectedAction, onSelect, close, combinedStyles, refs.setFloating, getFloatingProps],\n );\n\n // API for render props\n const api: ActionMenuListApi = {\n actions,\n selectedAction,\n onSelect,\n empty: actions.length === 0,\n };\n\n // Render props or regular children\n const content = typeof children === 'function' ? children(api) : children;\n\n return (\n <ActionMenuListContext.Provider value={contextValue}>\n <div className={className}>{content}</div>\n </ActionMenuListContext.Provider>\n );\n};\n\nActionMenuListRoot.displayName = 'ActionMenuList';\n\ntype ActionMenuListContentProps = {\n children?: ReactNode;\n className?: string;\n} & HTMLAttributes<HTMLDivElement>;\n\nconst ActionMenuListContent = forwardRef<HTMLDivElement, ActionMenuListContentProps>(\n ({ children, className = '', ...props }, forwardedRef) => {\n const {\n isOpen,\n floatingStyles,\n setFloatingRef,\n actions,\n selectedAction,\n setSelectedAction,\n onSelect,\n view,\n close,\n getFloatingProps,\n } = useActionMenuListContext();\n const internalRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([forwardedRef, setFloatingRef, internalRef]);\n const editor = useYooptaEditor();\n\n // Auto-focus content when it opens for proper escape key handling\n useEffect(() => {\n let raf;\n\n if (isOpen && internalRef.current) {\n // Use requestAnimationFrame to ensure DOM is ready\n raf = requestAnimationFrame(() => {\n internalRef.current?.focus();\n });\n }\n\n return () => cancelAnimationFrame(raf);\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n // Auto-generate items if no children provided\n const content =\n children ??\n (actions.length === 0 ? (\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n <ActionMenuListEmpty />\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n <ActionMenuListGroup>\n {actions.map((action) => (\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n <ActionMenuListItem\n key={action.type}\n action={action}\n selected={action.type === selectedAction?.type}\n onMouseEnter={() => setSelectedAction(action)}\n onClick={() => onSelect(action.type)}\n />\n ))}\n </ActionMenuListGroup>\n ));\n\n return (\n <FloatingPortal root={editor.refElement} id={`yoopta-ui-action-menu-list-portal-${editor.id}`}>\n <Overlay lockScroll={false} onClick={close} className=\"yoopta-ui-action-menu-list-overlay\">\n <div\n ref={mergedRef}\n role=\"listbox\"\n tabIndex={0}\n className={`yoopta-ui-action-menu-list-content yoopta-ui-action-menu-list-${view} ${className}`}\n style={floatingStyles}\n {...getFloatingProps({\n onMouseDown: (e) => {\n e.preventDefault();\n e.stopPropagation();\n },\n onClick: (e) => e.stopPropagation(),\n })}\n {...props}\n >\n {content}\n </div>\n </Overlay>\n </FloatingPortal>\n );\n },\n);\n\nActionMenuListContent.displayName = 'ActionMenuList.Content';\n\ntype ActionMenuListGroupProps = HTMLAttributes<HTMLDivElement>;\n\nconst ActionMenuListGroup = forwardRef<HTMLDivElement, ActionMenuListGroupProps>(\n ({ children, className = '', ...props }, ref) => (\n <div ref={ref} className={`yoopta-ui-action-menu-list-group ${className}`} {...props}>\n {children}\n </div>\n ),\n);\n\nActionMenuListGroup.displayName = 'ActionMenuList.Group';\n\ntype ActionMenuListItemProps = HTMLAttributes<HTMLButtonElement> & {\n action?: ActionMenuItem;\n selected?: boolean;\n icon?: string | ReactNode;\n};\n\nconst ActionMenuListItem = forwardRef<HTMLButtonElement, ActionMenuListItemProps>(\n ({ action, selected, icon: iconProp, className = '', children, ...props }, ref) => {\n const renderIcon = (icon: unknown) => {\n if (!icon) return null;\n\n if (typeof icon === 'string') {\n return <img src={icon} alt=\"icon\" />;\n }\n\n if (isValidElement(icon)) {\n return cloneElement(icon as React.ReactElement);\n }\n\n const IconComponent = icon as React.ComponentType;\n return <IconComponent />;\n };\n\n const iconToRender = iconProp ?? action?.icon;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={`yoopta-ui-action-menu-list-item ${selected ? 'selected' : ''} ${className}`}\n data-action-menu-item-type={action?.type}\n data-selected={selected}\n aria-pressed={selected}\n {...props}\n >\n {action && (\n <>\n {iconToRender && <div className=\"yoopta-ui-action-menu-list-item-icon\">{renderIcon(iconToRender)}</div>}\n <div className=\"yoopta-ui-action-menu-list-item-content\">\n <div className=\"yoopta-ui-action-menu-list-item-title\">{action?.title}</div>\n {action?.description && <div className=\"yoopta-ui-action-menu-list-item-description\">{action?.description}</div>}\n </div>\n </>\n )}\n {children}\n </button>\n );\n },\n);\n\nActionMenuListItem.displayName = 'ActionMenuList.Item';\n\ntype ActionMenuListEmptyProps = HTMLAttributes<HTMLDivElement>;\n\nconst ActionMenuListEmpty = forwardRef<HTMLDivElement, ActionMenuListEmptyProps>(\n ({ children, className = '', ...props }, ref) => (\n <div ref={ref} className={`yoopta-ui-action-menu-list-empty ${className}`} {...props}>\n {children ?? 'No actions available'}\n </div>\n ),\n);\n\nActionMenuListEmpty.displayName = 'ActionMenuList.Empty';\n\nexport const ActionMenuList = Object.assign(ActionMenuListRoot, {\n Root: ActionMenuListRoot,\n Content: ActionMenuListContent,\n Group: ActionMenuListGroup,\n Item: ActionMenuListItem,\n Empty: ActionMenuListEmpty,\n});\n\nexport type {\n ActionMenuListRootProps,\n ActionMenuListContentProps,\n ActionMenuListGroupProps,\n ActionMenuListItemProps,\n ActionMenuListEmptyProps,\n ActionMenuListApi,\n};\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}