@yourbestsoft/studio-screen-ui-kit 0.0.14 → 0.0.16

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":"ToolIconButton--CJQ-oPC.js","sources":["../src/components/button/Button.tsx","../src/components/card/Card.tsx","../src/hooks/useKeyboardControls.ts","../src/hooks/useEscapeKey.ts","../src/hooks/useWindowEvents.ts","../src/components/drop-down/hooks/useDropdownPosition.ts","../src/components/drop-down/hooks/useDropDownStack.ts","../src/components/drop-down/DropDown.tsx","../src/components/dialog/Dialog.tsx","../src/components/sidebar/Sidebar.tsx","../src/components/switcher-buttons/SwitcherButtons.tsx","../src/components/table/Table.tsx","../src/components/text-field/text-field.tsx","../src/features/theme-provider/ThemeProvider.tsx","../src/components/toolbar/tool-icon-button/ToolIconButton.tsx"],"sourcesContent":["import classNames from 'classnames'\nimport {\n ComponentPropsWithoutRef,\n ElementRef,\n ElementType,\n ForwardedRef,\n ReactNode,\n forwardRef,\n} from 'react'\n\nimport { Replace } from '../../utils'\nimport s from './button.module.scss'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'text'\ntype OwnProps<T extends ElementType> = {\n children?: ReactNode\n className?: string\n component?: T\n disabled?: boolean\n fullWidth?: boolean\n variant?: ButtonVariant\n icon?: ReactNode\n shortcut?: string\n}\n\nexport type ButtonProps<T extends ElementType> = Replace<\n ComponentPropsWithoutRef<T>,\n OwnProps<T>\n>\n\ntype ButtonRenderType = {\n (\n props: ButtonProps<'button'>,\n ref?: ForwardedRef<ElementRef<'button'>>\n ): ReactNode\n (\n props: ButtonProps<ElementType>,\n ref?: ForwardedRef<ElementRef<ElementType>>\n ): ReactNode\n}\n\nexport type ButtonComponent = {\n <T extends ElementType = 'button'>(\n props: ButtonProps<T> & { ref?: ForwardedRef<ElementRef<T>> }\n ): ReactNode\n}\n\nexport const ButtonRender: ButtonRenderType = (\n {\n children,\n className,\n component: Component = 'button',\n disabled,\n fullWidth,\n icon,\n shortcut,\n variant = 'primary',\n ...props\n },\n ref\n) => {\n const content = (\n <div className={s.buttonWithIcon}>\n <div className={s.content}>\n {icon}\n {children}\n </div>\n <div className={s.shortcut}>{shortcut}</div>\n </div>\n )\n\n return (\n <Component\n className={classNames(\n s[variant],\n fullWidth && s.fullWidth,\n disabled && s.disabled,\n icon && s.icon,\n className\n )}\n children={icon ? content : children}\n disabled={disabled}\n ref={ref}\n {...props}\n />\n )\n}\n\nexport const Button: ButtonComponent = forwardRef(ButtonRender)\n","import classNames from 'classnames'\nimport { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react'\n\nimport s from './card.module.scss'\n\nexport type CardProps = ComponentPropsWithoutRef<'div'>\n\nexport const CardRoot = forwardRef<ElementRef<'div'>, CardProps>(\n ({ className, ...props }, ref) => (\n <div className={classNames(s.root, className)} ref={ref} {...props} />\n )\n)\n\nexport type CardContentProps = CardProps & { ignoreHeader?: boolean }\n\nexport const CardContent = forwardRef<ElementRef<'div'>, CardContentProps>(\n ({ className, ignoreHeader, ...props }, ref) => (\n <div\n className={classNames(\n s.content,\n !ignoreHeader && s.contentAfterHeader,\n className\n )}\n ref={ref}\n {...props}\n />\n )\n)\n\nexport const CardHeader = forwardRef<ElementRef<'div'>, CardProps>(\n ({ className, ...props }, ref) => (\n <div className={classNames(s.header, className)} ref={ref} {...props} />\n )\n)\n\nexport const Card = Object.assign(CardRoot, {\n Content: CardContent,\n Header: CardHeader,\n Root: CardRoot,\n})\n","import { useEffect } from 'react'\n\ntype KeyHandler = (event: KeyboardEvent) => void\n\ninterface KeyboardControlsOptions {\n enabled?: boolean\n preventDefault?: boolean\n stopPropagation?: boolean\n}\n\nexport const useKeyboardControls = (\n handlers: KeyHandler[],\n options: KeyboardControlsOptions = {}\n) => {\n const {\n enabled = true,\n preventDefault = false,\n stopPropagation = false,\n } = options\n\n useEffect(() => {\n if (!enabled) return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (preventDefault) event.preventDefault()\n if (stopPropagation) event.stopPropagation()\n\n handlers.forEach((handler) => handler(event))\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [handlers, enabled, preventDefault, stopPropagation])\n}\n\n// Удобные хелперы для создания handlers\nexport const createKeyHandler = (\n key: string,\n callback: (event: KeyboardEvent) => void,\n options: {\n ctrlKey?: boolean\n shiftKey?: boolean\n altKey?: boolean\n metaKey?: boolean\n } = {}\n): KeyHandler => {\n return (event: KeyboardEvent) => {\n const {\n ctrlKey = false,\n shiftKey = false,\n altKey = false,\n metaKey = false,\n } = options\n\n if (\n event.key === key &&\n event.ctrlKey === ctrlKey &&\n event.shiftKey === shiftKey &&\n event.altKey === altKey &&\n event.metaKey === metaKey\n ) {\n callback(event)\n }\n }\n}\n\nexport const createEscapeHandler = (callback: () => void): KeyHandler => {\n return createKeyHandler('Escape', callback)\n}\n\n// Хелпер для создания tab trap handler\nexport const createTabTrapHandler = (\n containerRef: React.RefObject<HTMLElement>,\n enabled: boolean = true\n): KeyHandler => {\n return (event: KeyboardEvent) => {\n if (!enabled || event.key !== 'Tab' || !containerRef.current) return\n\n const focusableElements = containerRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0] as HTMLElement\n const lastElement = focusableElements[\n focusableElements.length - 1\n ] as HTMLElement\n\n if (event.shiftKey) {\n if (document.activeElement === firstElement) {\n event.preventDefault()\n lastElement?.focus()\n }\n } else {\n if (document.activeElement === lastElement) {\n event.preventDefault()\n firstElement?.focus()\n }\n }\n }\n}\n","import { useEffect } from 'react'\n\nexport const useEscapeKey = (\n handler: () => void,\n enabled: boolean,\n shouldHandle: () => boolean\n) => {\n useEffect(() => {\n if (!enabled) return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && shouldHandle()) {\n handler()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n }\n }, [handler, enabled, shouldHandle])\n}\n","import { useEffect } from 'react'\n\nexport const useWindowEvents = (\n handler: () => void,\n onScroll: () => void,\n enabled: boolean\n) => {\n useEffect(() => {\n if (!enabled) return\n\n window.addEventListener('resize', handler)\n window.addEventListener('scroll', onScroll, true)\n\n return () => {\n window.removeEventListener('resize', handler)\n window.removeEventListener('scroll', onScroll, true)\n }\n }, [handler, onScroll, enabled])\n}\n","import { useCallback, useLayoutEffect, useState } from 'react'\n\ninterface Position {\n top: number\n left: number\n}\n\ninterface CalculatedPosition extends Position {\n vertical: 'top' | 'bottom'\n horizontal: 'left' | 'center' | 'right'\n}\n\nexport const useDropdownPosition = (\n contentRef: React.RefObject<HTMLDivElement>,\n rootRef: React.RefObject<HTMLDivElement>,\n visible: boolean,\n horizontal: 'left' | 'center' | 'right' = 'left',\n vertical: 'top' | 'bottom' = 'bottom',\n offset: number = 8\n) => {\n const [position, setPosition] = useState<CalculatedPosition>({\n horizontal,\n left: 0,\n top: 0,\n vertical,\n })\n\n const calculatePosition = useCallback(() => {\n const content = contentRef.current\n const trigger = rootRef.current\n\n if (!content || !trigger) return\n\n const triggerRect = trigger.getBoundingClientRect()\n const contentRect = content.getBoundingClientRect()\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n const padding = 16\n\n let finalVertical = vertical\n let finalHorizontal = horizontal\n let top = 0\n let left = 0\n\n // Вычисление вертикальной позиции\n const spaceBelow = viewportHeight - triggerRect.bottom\n const spaceAbove = triggerRect.top\n\n if (vertical === 'bottom') {\n if (spaceBelow >= contentRect.height + offset + padding) {\n finalVertical = 'bottom'\n top = triggerRect.bottom + offset\n } else if (spaceAbove >= contentRect.height + offset + padding) {\n finalVertical = 'top'\n top = triggerRect.top - contentRect.height - offset\n } else {\n // Контент не помещается — выбрать сторону с больше места\n finalVertical = spaceBelow > spaceAbove ? 'bottom' : 'top'\n top =\n finalVertical === 'bottom'\n ? triggerRect.bottom + offset\n : triggerRect.top - contentRect.height - offset\n }\n } else {\n // vertical === 'top'\n if (spaceAbove >= contentRect.height + offset + padding) {\n finalVertical = 'top'\n top = triggerRect.top - contentRect.height - offset\n } else if (spaceBelow >= contentRect.height + offset + padding) {\n finalVertical = 'bottom'\n top = triggerRect.bottom + offset\n } else {\n finalVertical = spaceAbove > spaceBelow ? 'top' : 'bottom'\n top =\n finalVertical === 'top'\n ? triggerRect.top - contentRect.height - offset\n : triggerRect.bottom + offset\n }\n }\n\n // Вычисление горизонтальной позиции\n if (horizontal === 'left') {\n left = triggerRect.left\n if (left + contentRect.width > viewportWidth - padding) {\n left = viewportWidth - contentRect.width - padding\n finalHorizontal = 'right'\n }\n if (left < padding) {\n left = padding\n finalHorizontal = 'left'\n }\n } else if (horizontal === 'right') {\n left = triggerRect.right - contentRect.width\n if (left < padding) {\n left = padding\n finalHorizontal = 'left'\n }\n if (left + contentRect.width > viewportWidth - padding) {\n left = viewportWidth - contentRect.width - padding\n finalHorizontal = 'right'\n }\n } else {\n // horizontal === 'center'\n left = triggerRect.left + (triggerRect.width - contentRect.width) / 2\n if (left < padding) {\n left = padding\n finalHorizontal = 'left'\n } else if (left + contentRect.width > viewportWidth - padding) {\n left = viewportWidth - contentRect.width - padding\n finalHorizontal = 'right'\n }\n }\n\n // Финальная коррекция top с учётом viewport\n top = Math.max(\n padding,\n Math.min(top, viewportHeight - contentRect.height - padding)\n )\n\n setPosition({\n horizontal: finalHorizontal,\n left,\n top,\n vertical: finalVertical,\n })\n }, [contentRef, rootRef, vertical, horizontal, offset])\n\n useLayoutEffect(() => {\n if (!visible) return\n calculatePosition()\n }, [visible, calculatePosition])\n\n return { calculatePosition, position }\n}\n","import { useCallback, useEffect } from 'react'\n\nconst openDropDownStack: HTMLElement[] = []\n\nexport const useDropDownStack = (\n rootRef: React.RefObject<HTMLElement>,\n visible: boolean\n) => {\n useEffect(() => {\n if (visible && rootRef.current) {\n openDropDownStack.push(rootRef.current)\n return () => {\n const index = openDropDownStack.indexOf(rootRef.current!)\n if (index !== -1) {\n openDropDownStack.splice(index, 1)\n }\n }\n }\n }, [visible, rootRef])\n\n const isTopOfStack = useCallback(() => {\n if (!rootRef.current) return false\n return openDropDownStack[openDropDownStack.length - 1] === rootRef.current\n }, [rootRef])\n\n return { isTopOfStack }\n}\n","import classNames from 'classnames'\nimport React, {\n createContext,\n ReactElement,\n ReactNode,\n RefObject,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { useEscapeKey, useWindowEvents } from '../../hooks'\nimport styles from './drop-down.module.scss'\nimport { useDropdownPosition } from './hooks'\nimport { useDropDownStack } from './hooks/useDropDownStack'\n\nconst swallow = (e: React.SyntheticEvent) => {\n e.stopPropagation()\n const ne = e.nativeEvent as any\n ne?.stopImmediatePropagation?.()\n}\n\nconst mergeClassName = (a?: string, b?: string) => {\n if (!a) return b\n if (!b) return a\n return `${a} ${b}`\n}\n\nconst mergeStyle = (\n a?: React.CSSProperties,\n b?: React.CSSProperties\n): React.CSSProperties | undefined => {\n if (!a) return b\n if (!b) return a\n return { ...a, ...b }\n}\n\nfunction mergeRefs<T>(...refs: Array<React.Ref<T> | undefined>) {\n return (node: T) => {\n refs.forEach((ref) => {\n if (!ref) return\n if (typeof ref === 'function') ref(node)\n else (ref as React.MutableRefObject<T | null>).current = node\n })\n }\n}\n\ntype SlotProps = React.HTMLAttributes<HTMLElement> & {\n children: ReactElement\n}\n\nconst Slot = React.forwardRef<HTMLElement, SlotProps>(\n ({ children, className, style, ...slotProps }, forwardedRef) => {\n if (!React.isValidElement(children)) return null\n\n const childProps = children.props as Record<string, any>\n\n const composedProps: Record<string, any> = { ...childProps, ...slotProps }\n\n for (const key of Object.keys(slotProps)) {\n if (!key.startsWith('on')) continue\n const ours = (slotProps as any)[key]\n const theirs = childProps[key]\n if (typeof ours === 'function' && typeof theirs === 'function') {\n composedProps[key] = (event: any) => {\n theirs(event)\n ours(event)\n }\n }\n }\n\n composedProps.className = mergeClassName(childProps.className, className)\n composedProps.style = mergeStyle(childProps.style, style)\n\n composedProps.ref = mergeRefs((children as any).ref, forwardedRef)\n\n return React.cloneElement(children, composedProps)\n }\n)\nSlot.displayName = 'Slot'\n\ninterface DropDownContextType {\n visible: boolean\n toggle: () => void\n close: () => void\n rootRef: RefObject<HTMLDivElement>\n contentRef: RefObject<HTMLDivElement>\n}\n\nconst DropDownContext = createContext<DropDownContextType | undefined>(\n undefined\n)\n\nconst useDropDownContext = (): DropDownContextType => {\n const ctx = useContext(DropDownContext)\n if (!ctx) {\n throw new Error('useDropDownContext must be used within a DropDown.Root')\n }\n return ctx\n}\n\ninterface RootProps {\n children: ReactNode\n defaultVisible?: boolean\n closeOnOutsideClick?: boolean\n closeOnEsc?: boolean\n consumeOutsideClick?: boolean\n}\n\nconst Root = ({\n children,\n closeOnEsc = true,\n closeOnOutsideClick = true,\n consumeOutsideClick = true,\n defaultVisible = false,\n}: RootProps) => {\n const [visible, setVisible] = useState(defaultVisible)\n const rootRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n\n const close = useCallback(() => setVisible(false), [])\n const toggle = useCallback(() => setVisible((p) => !p), [])\n\n const { isTopOfStack } = useDropDownStack(rootRef, visible)\n\n useEffect(() => {\n if (!visible || !closeOnOutsideClick) return\n\n const onPointerDownCapture = (e: PointerEvent) => {\n if (!isTopOfStack) return\n if (typeof e.button === 'number' && e.button !== 0) return\n\n const root = rootRef.current\n const content = contentRef.current\n const target = e.target as Node | null\n const path = (e.composedPath?.() ?? []) as EventTarget[]\n\n const insideRoot =\n !!root && (path.includes(root) || (!!target && root.contains(target)))\n const insideContent =\n !!content &&\n (path.includes(content) || (!!target && content.contains(target)))\n\n if (insideRoot || insideContent) return\n\n if (consumeOutsideClick) {\n e.preventDefault()\n e.stopPropagation()\n ;(e as any).stopImmediatePropagation?.()\n }\n\n close()\n }\n\n document.addEventListener('pointerdown', onPointerDownCapture, true)\n return () => {\n document.removeEventListener('pointerdown', onPointerDownCapture, true)\n }\n }, [visible, closeOnOutsideClick, consumeOutsideClick, close, isTopOfStack])\n\n useEscapeKey(close, closeOnEsc && visible, isTopOfStack)\n\n const ctx = useMemo<DropDownContextType>(\n () => ({ close, contentRef, rootRef, toggle, visible }),\n [close, toggle, visible]\n )\n\n return (\n <DropDownContext.Provider value={ctx}>\n <div ref={rootRef} className={styles.root}>\n {children}\n </div>\n </DropDownContext.Provider>\n )\n}\n\ninterface TriggerProps {\n children: ReactNode\n asChild?: boolean\n}\n\nconst Trigger = ({ asChild = false, children }: TriggerProps) => {\n const { toggle } = useDropDownContext()\n\n const onPointerDown = useCallback((e: React.PointerEvent) => {\n swallow(e)\n }, [])\n\n const onClick = useCallback(\n (e: React.MouseEvent) => {\n swallow(e)\n toggle()\n },\n [toggle]\n )\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n swallow(e)\n toggle()\n }\n },\n [toggle]\n )\n\n if (asChild) {\n return (\n <Slot onPointerDown={onPointerDown} onClick={onClick}>\n {children as ReactElement}\n </Slot>\n )\n }\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onPointerDown={onPointerDown}\n onClick={onClick}\n onKeyDown={onKeyDown}\n >\n {children}\n </div>\n )\n}\n\ninterface ContentProps {\n children: ReactNode\n horizontal?: 'left' | 'center' | 'right'\n vertical?: 'top' | 'bottom'\n className?: string\n offset?: number\n asChild?: boolean\n}\n\nconst Content = ({\n asChild = false,\n children,\n className,\n horizontal = 'left',\n offset = 8,\n vertical = 'bottom',\n}: ContentProps) => {\n const { close, contentRef, rootRef, visible } = useDropDownContext()\n\n const { calculatePosition, position } = useDropdownPosition(\n contentRef,\n rootRef,\n visible,\n horizontal,\n vertical,\n offset\n )\n\n useEffect(() => {\n const content = contentRef.current\n if (!content) return\n const observer = new ResizeObserver(() => calculatePosition())\n observer.observe(content)\n return () => observer.disconnect()\n }, [calculatePosition])\n\n useWindowEvents(calculatePosition, close, visible)\n\n if (!visible) return null\n\n const commonProps = {\n className: classNames(styles.dropdownContent, className),\n onClick: swallow as any,\n onPointerDown: swallow as any,\n style: { left: `${position.left}px`, top: `${position.top}px` },\n tabIndex: -1,\n }\n\n return createPortal(\n asChild ? (\n <Slot ref={contentRef as any} {...commonProps}>\n {children as ReactElement}\n </Slot>\n ) : (\n <div ref={contentRef} {...commonProps}>\n {children}\n </div>\n ),\n document.body\n )\n}\n\ninterface CloseProps {\n children: ReactNode\n onClick?: (event: React.MouseEvent) => void\n asChild?: boolean\n}\n\nconst Close = ({ asChild = false, children, onClick }: CloseProps) => {\n const { close } = useDropDownContext()\n\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n swallow(event)\n onClick?.(event)\n close()\n },\n [onClick, close]\n )\n\n if (asChild) {\n return <Slot onClick={handleClick}>{children as ReactElement}</Slot>\n }\n\n return <div onClick={handleClick}>{children}</div>\n}\n\nexport const DropDown = { Close, Content, Root, Trigger }\n","import classNames from 'classnames'\nimport React, {\n useState,\n useRef,\n ReactNode,\n forwardRef,\n MouseEvent,\n ElementType,\n useContext,\n useEffect,\n} from 'react'\n\nimport styles from './dialog.module.scss'\nimport {\n createEscapeHandler,\n createTabTrapHandler,\n useKeyboardControls,\n} from '../../hooks'\n\ninterface RootProps {\n children: React.ReactNode\n isOpen?: boolean\n onStateChange?: (isOpen: boolean) => void\n}\n\ninterface DialogContextProps {\n dialogRef: React.RefObject<HTMLDivElement>\n isOpen: boolean\n setIsOpen: (state: boolean) => void\n}\nconst DialogContext = React.createContext<DialogContextProps | null>(null)\n\nconst Root = ({\n children,\n isOpen: externalIsOpen,\n onStateChange,\n}: RootProps) => {\n const dialogRef = useRef<HTMLDivElement | null>(null)\n const [internalIsOpen, setInternalIsOpen] = useState(false)\n\n const isOpen = externalIsOpen !== undefined ? externalIsOpen : internalIsOpen\n const setIsOpen = (state: boolean) => {\n if (externalIsOpen === undefined) {\n setInternalIsOpen(state)\n }\n if (onStateChange) {\n onStateChange(state)\n }\n }\n\n const keyboardHandlers = [\n createEscapeHandler(() => setIsOpen(false)),\n createTabTrapHandler(dialogRef, isOpen),\n ]\n\n useKeyboardControls(keyboardHandlers, { enabled: isOpen })\n\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = 'unset'\n }\n\n return () => {\n document.body.style.overflow = 'unset'\n }\n }, [isOpen])\n\n useEffect(() => {\n if (isOpen && dialogRef.current) {\n const focusableElements = dialogRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0] as HTMLElement\n if (firstElement) {\n firstElement.focus()\n }\n }\n }, [isOpen])\n\n return (\n <DialogContext.Provider value={{ dialogRef, isOpen, setIsOpen }}>\n <div>{children}</div>\n </DialogContext.Provider>\n )\n}\n\ninterface TriggerProps<T extends ElementType = 'button'> {\n as?: T\n children: ReactNode\n}\n\nconst Trigger = <T extends ElementType = 'button'>({\n as,\n children,\n ...props\n}: TriggerProps<T> & React.ComponentPropsWithoutRef<T>) => {\n const context = useContext(DialogContext)\n if (!context) throw new Error('Trigger must be used within a Dialog.Root')\n\n const { setIsOpen } = context\n const Component = as || 'button'\n\n const handleClick = () => {\n setIsOpen(true)\n }\n\n return (\n <Component\n onClick={handleClick}\n {...props}\n className={styles.dialogTrigger}\n role={as && as !== 'button' ? 'button' : undefined}\n >\n {children}\n </Component>\n )\n}\n\ninterface ContentProps {\n children: ReactNode\n classNameOverlay?: string\n className?: string\n closeOnBackdropClick?: boolean\n}\n\nconst Content = forwardRef<HTMLDivElement, ContentProps>(\n (\n { children, classNameOverlay, className, closeOnBackdropClick = true },\n _\n ) => {\n const context = useContext(DialogContext)\n if (!context) throw new Error('Content must be used within a Dialog.Root')\n\n const { dialogRef, isOpen, setIsOpen } = context\n\n const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n if (closeOnBackdropClick && event.target === event.currentTarget) {\n setIsOpen(false)\n }\n }\n\n if (!isOpen) return null\n\n return (\n <div\n ref={dialogRef}\n className={classNames(styles.dialogOverlay, classNameOverlay)}\n onClick={handleBackdropClick}\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <div\n className={classNames(styles.dialogContent, className)}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>\n )\n }\n)\n\ninterface CloseProps<T extends ElementType = 'button'> {\n as?: T\n children?: ReactNode\n}\n\nconst Close = <T extends ElementType = 'button'>({\n as,\n children,\n ...props\n}: CloseProps<T> & React.ComponentPropsWithoutRef<T>) => {\n const context = useContext(DialogContext)\n if (!context) throw new Error('Close must be used within a Dialog.Root')\n\n const { setIsOpen } = context\n const Component = as || 'button'\n\n const handleClick = () => {\n setIsOpen(false)\n }\n\n return (\n <Component\n onClick={handleClick}\n {...props}\n className={classNames(styles.dialogClose, props.className)}\n role={as && as !== 'button' ? 'button' : undefined}\n >\n {children}\n </Component>\n )\n}\n\ninterface TitleProps {\n children: ReactNode\n className?: string\n}\n\nconst Title = ({ children, className }: TitleProps) => {\n return (\n <h2 className={classNames(styles.dialogTitle, className)}>{children}</h2>\n )\n}\n\ninterface SeparatorProps {}\n\nconst Separator = ({}: SeparatorProps) => {\n return <div className={styles.dialogSeparator} />\n}\n\nexport const Dialog = {\n Close,\n Content,\n Root,\n Separator,\n Title,\n Trigger,\n}\n","import classNames from 'classnames'\nimport {\n createContext,\n MouseEvent,\n ReactNode,\n useContext,\n useEffect,\n useRef,\n} from 'react'\n\nimport styles from './sidebar.module.scss'\n\ntype SidebarContextProps = {\n isOpen: boolean\n setIsOpen: (isOpen: boolean) => void\n}\n\nexport const SidebarContext = createContext<SidebarContextProps | undefined>(\n undefined\n)\n\nexport const useSidebarContext = () => {\n const context = useContext(SidebarContext)\n if (!context) {\n throw new Error('useSidebarContext must be used within a SidebarProvider')\n }\n return context\n}\n\ntype SidebarRootProps = {\n isOpen: boolean\n setIsOpen: (isOpen: boolean) => void\n children: ReactNode\n}\n\nconst Root = ({ children, isOpen, setIsOpen }: SidebarRootProps) => {\n return (\n <SidebarContext.Provider\n value={{\n isOpen: isOpen,\n setIsOpen: () => setIsOpen(!isOpen),\n }}\n >\n {children}\n </SidebarContext.Provider>\n )\n}\n\ntype SidebarTriggerProps = {\n children: ReactNode\n}\n\nconst Trigger = ({ children }: SidebarTriggerProps) => {\n const { setIsOpen } = useSidebarContext()\n\n const onClickHandler = (event: MouseEvent<HTMLDivElement>) => {\n event.preventDefault()\n setIsOpen(true)\n }\n\n return (\n <div className={styles.trigger} onClick={onClickHandler}>\n {children}\n </div>\n )\n}\n\ntype SidebarContentProps = {\n position?: 'left' | 'right' | 'bottom' | 'top'\n children: ReactNode\n className?: string\n closeOnOutsideClick?: boolean\n}\n\nconst Content = ({\n children,\n className,\n closeOnOutsideClick = true,\n position = 'right',\n}: SidebarContentProps) => {\n const { isOpen, setIsOpen } = useSidebarContext()\n const contentRef = useRef<HTMLDivElement | null>(null)\n\n useEffect(() => {\n if (!closeOnOutsideClick) return\n\n const handleClickOutside = (event: Event) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, setIsOpen, closeOnOutsideClick])\n\n return (\n <div\n ref={contentRef}\n className={classNames(\n styles[position],\n styles.content,\n {\n [styles.close]: !isOpen,\n [styles.open]: isOpen,\n },\n className\n )}\n >\n {children}\n </div>\n )\n}\n\ntype SidebarCloseProps = {\n children: ReactNode\n}\n\nconst Close = ({ children }: SidebarCloseProps) => {\n const { setIsOpen } = useSidebarContext()\n\n const onClickHandler = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault()\n setIsOpen(false)\n }\n\n return (\n <button className={styles.close} onClick={onClickHandler}>\n {children}\n </button>\n )\n}\n\nexport const Sidebar = {\n Close,\n Content,\n Root,\n Trigger,\n}\n","import classNames from 'classnames'\nimport React, { ElementType, forwardRef, ReactNode, useState } from 'react'\n\nimport style from './switcher-buttons.module.scss'\n\ninterface ComponentValues {\n value: string\n [key: string]: any\n}\n\ninterface SwitcherProps {\n componentValues: ComponentValues[]\n defaultValue?: string\n onChange?: (value: string) => void\n selectedValue?: string\n component: ElementType\n containerProps?: React.HTMLAttributes<HTMLDivElement>\n slot?: ReactNode\n className?: string\n}\n\nexport const SwitcherButtons = forwardRef<HTMLDivElement, SwitcherProps>(\n (\n {\n className,\n component: Component,\n componentValues,\n containerProps,\n onChange,\n selectedValue,\n slot,\n },\n ref\n ) => {\n const [activeValue, setActiveValue] = useState<string>(\n selectedValue || componentValues[0].value\n )\n\n const onChangeHandler = (value: string) => {\n setActiveValue(value)\n if (onChange) onChange(value)\n }\n\n return (\n <div ref={ref} className={style.switcher} {...containerProps}>\n <div className={classNames(style.buttons, className)}>\n {componentValues.map((button, index) => (\n <Component\n key={index}\n {...button}\n selected={activeValue === button.value}\n onClick={() => onChangeHandler(button.value)}\n />\n ))}\n </div>\n {slot && (\n <>\n <div className={style.separator} />\n {slot}\n </>\n )}\n </div>\n )\n }\n)\n","import classNames from 'classnames'\nimport { FocusEventHandler, MouseEventHandler, ReactNode } from 'react'\n\nimport s from './table.module.scss'\n\ninterface Props {\n children: ReactNode\n className?: string\n}\n\ntype RootProps = Props\nconst Root = ({ children, className }: RootProps) => {\n return <table className={classNames(s.root, className)}>{children}</table>\n}\n\ntype CaptionProps = Props\nconst Caption = ({ children, className }: CaptionProps) => {\n return (\n <caption className={classNames(s.caption, className)}>{children}</caption>\n )\n}\n\ntype HeaderProps = Props\nconst Header = ({ children, className }: HeaderProps) => {\n return <thead className={classNames(s.header, className)}>{children}</thead>\n}\n\ninterface RowProps extends Props {\n onClick?: MouseEventHandler<HTMLTableRowElement> | undefined\n onDoubleClick?: MouseEventHandler<HTMLTableRowElement> | undefined\n onBlur?: FocusEventHandler<HTMLTableRowElement> | undefined\n}\nconst Row = ({\n children,\n className,\n onBlur,\n onClick,\n onDoubleClick,\n}: RowProps) => {\n return (\n <tr\n className={classNames(s.row, className)}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onBlur={onBlur}\n >\n {children}\n </tr>\n )\n}\n\ntype HeadProps = Props\nconst Head = ({ children, className }: HeadProps) => {\n return <th className={classNames(s.head, className)}>{children}</th>\n}\n\ntype BodyProps = Props\nconst Body = ({ children, className }: BodyProps) => {\n return <tbody className={classNames(s.body, className)}>{children}</tbody>\n}\n\ntype CellProps = Props\nconst Cell = ({ children, className }: CellProps) => {\n return <td className={classNames(s.cell, className)}>{children}</td>\n}\n\ntype FooterProps = Props\nconst Footer = ({ children, className }: FooterProps) => {\n return <tfoot className={classNames(s.footer, className)}>{children}</tfoot>\n}\n\nexport const Table = Object.assign(Root, {\n Body,\n Caption,\n Cell,\n Footer,\n Head,\n Header,\n Root,\n Row,\n})\n","import classNames from 'classnames'\nimport { X, Eye, Search, EyeOff } from 'lucide-react'\nimport {\n ChangeEvent,\n ForwardedRef,\n ReactNode,\n forwardRef,\n useState,\n} from 'react'\n\nimport s from './text-field.module.scss'\n\ntype SharedProps = {\n className?: string\n disabled?: boolean\n error?: string\n label?: string\n onBlur?: () => void\n onChange: (value: string) => void\n onFocus?: () => void\n placeholder?: string\n required?: boolean\n type?: 'text' | 'password' | 'email' | 'url' | string\n value: string\n}\n\nexport type TextFieldProps =\n | (SharedProps & {\n as?: 'input'\n inputType?: 'password' | 'search' | 'text'\n })\n | (SharedProps & { as: 'textarea' })\n\nexport type TextFieldComponent = {\n (\n props: Extract<TextFieldProps, { as: 'textarea' }> & {\n ref?: ForwardedRef<HTMLTextAreaElement>\n }\n ): ReactNode\n (\n props: Extract<TextFieldProps, { as?: 'input' }> & {\n ref?: ForwardedRef<HTMLInputElement>\n }\n ): ReactNode\n}\n\nexport const TextField: TextFieldComponent = forwardRef<\n HTMLInputElement | HTMLTextAreaElement,\n TextFieldProps\n>(({ className, error, label, onChange, required, ...props }, ref) => {\n const [showPassword, setShowPassword] = useState(false)\n\n const handleChange = (\n e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => onChange(e.currentTarget.value)\n\n const sharedClassName = classNames(s.input, error && s.error, className)\n let resolvedFragment: ReactNode\n\n if (!props.as || props.as === 'input') {\n const { inputType, ...restProps } = props\n const isSearch = inputType === 'search'\n const isPassword = inputType === 'password'\n const passwordFieldNextType = showPassword ? 'text' : 'password'\n\n resolvedFragment = (\n <>\n <input\n className={classNames(sharedClassName, isSearch && s.inputSearch)}\n onChange={handleChange}\n ref={ref as unknown as ForwardedRef<HTMLInputElement>}\n type={isPassword ? passwordFieldNextType : inputType}\n {...restProps}\n />\n {isPassword &&\n (showPassword ? (\n <Eye\n strokeWidth={2.5}\n width={20}\n className={classNames(s.button, label && s.buttonWithLabel)}\n onClick={() => setShowPassword((prev) => !prev)}\n />\n ) : (\n <EyeOff\n strokeWidth={2.5}\n width={20}\n className={classNames(s.button, label && s.buttonWithLabel)}\n onClick={() => setShowPassword((prev) => !prev)}\n />\n ))}\n {isSearch && props.value && (\n <X\n onClick={() => onChange('')}\n className={classNames(\n s.button,\n label && s.buttonWithLabel,\n s.resetSearchValue\n )}\n strokeWidth={2.5}\n size={24}\n />\n )}\n {isSearch && (\n <Search\n className={classNames(\n s.searchOutline,\n label && s.searchOutlineWithLabel\n )}\n size={20}\n />\n )}\n </>\n )\n }\n\n if (props.as === 'textarea') {\n resolvedFragment = (\n <textarea\n className={sharedClassName}\n onChange={handleChange}\n ref={ref as unknown as ForwardedRef<HTMLTextAreaElement>}\n {...props}\n />\n )\n }\n\n return (\n <div className={s.root}>\n <span className={s.title}>\n {label}\n {required && <span className={s.titleError}>*</span>}\n </span>\n <div className={s.inputContainer}>{resolvedFragment}</div>\n <div className={s.errorMessage}>{error}</div>\n </div>\n )\n})\n","import { createContext, useContext, useState, ReactNode } from 'react'\n\nexport type Theme = 'light' | 'dark'\nexport type ThemeValue = Theme | 'system'\n\ninterface ThemeContextType {\n theme: ThemeValue\n setTheme: (theme: ThemeValue) => void\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined)\n\nexport const ThemeProvider = ({ children }: { children: ReactNode }) => {\n const defaultTheme = getTheme() || 'system'\n const [theme, setTheme] = useState<ThemeValue>(defaultTheme)\n\n return (\n <ThemeContext.Provider value={{ setTheme, theme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext)\n\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider')\n }\n\n setDataThemeHandler(context.theme)\n\n return context\n}\n\nconst setDataThemeHandler = (value: ThemeValue) => {\n const savedTheme = getTheme()\n\n saveTheme(value || savedTheme)\n}\n\nconst saveTheme = (theme: ThemeValue) => {\n const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)')\n\n if (theme === 'system') {\n const defaultTheme = prefersDarkScheme.matches ? 'dark' : 'light'\n localStorage.setItem('theme', theme)\n setTheme(defaultTheme)\n } else {\n localStorage.setItem('theme', theme)\n setTheme(theme)\n }\n}\n\nconst setTheme = (theme: Theme) => {\n document.documentElement.setAttribute('data-theme', theme)\n}\n\nconst getTheme = () => {\n const theme = localStorage.getItem('theme')\n if (theme) return theme as ThemeValue\n}\n","import classNames from 'classnames'\nimport { ReactNode, forwardRef } from 'react'\n\nimport s from './tool-icon-button.module.scss'\n\nexport type ToolbarSlot = 'icon' | 'keybinding'\nexport type ToolbarClasses = { [P in ToolbarSlot]?: string }\n\ninterface Props {\n title?: string\n icon: ReactNode\n keybinding?: string\n aria_label?: string\n aria_keyshortcuts?: string\n classes?: ToolbarClasses\n name?: string\n id?: string\n isActive?: boolean\n disabled?: boolean\n onClick?: () => void\n}\n\nexport const ToolIconButton = forwardRef<HTMLDivElement, Props>(\n (props, ref) => {\n const { classes, disabled, icon, isActive, keybinding, onClick, title } =\n props\n\n const styles = getClasses(classes, isActive, disabled)\n\n return (\n <label className={s.root} title={title}>\n <div\n className={styles.icon}\n ref={ref}\n tabIndex={disabled ? -1 : 0}\n role=\"button\"\n aria-pressed={isActive}\n aria-disabled={disabled}\n onClick={!disabled ? onClick : undefined}\n >\n {icon}\n </div>\n {keybinding && <span className={styles.keybinding}>{keybinding}</span>}\n </label>\n )\n }\n)\n\nconst getClasses = (\n classes?: ToolbarClasses,\n isActive?: boolean,\n disabled?: boolean\n): Required<ToolbarClasses> => ({\n icon: classNames(\n s.icon,\n {\n [s.active]: isActive,\n [s.disabled]: disabled,\n },\n classes?.icon\n ),\n keybinding: classNames(s.keybinding, classes?.keybinding),\n})\n"],"names":["ButtonRender","children","className","Component","disabled","fullWidth","icon","shortcut","variant","props","ref","content","jsxs","s","jsx","classNames","Button","forwardRef","CardRoot","CardContent","ignoreHeader","CardHeader","Card","useKeyboardControls","handlers","options","enabled","preventDefault","stopPropagation","useEffect","handleKeyDown","event","handler","createKeyHandler","key","callback","ctrlKey","shiftKey","altKey","metaKey","createEscapeHandler","createTabTrapHandler","containerRef","focusableElements","firstElement","lastElement","useEscapeKey","shouldHandle","useWindowEvents","onScroll","useDropdownPosition","contentRef","rootRef","visible","horizontal","vertical","offset","position","setPosition","useState","calculatePosition","useCallback","trigger","triggerRect","contentRect","viewportWidth","viewportHeight","padding","finalVertical","finalHorizontal","top","left","spaceBelow","spaceAbove","useLayoutEffect","openDropDownStack","useDropDownStack","index","swallow","e","mergeClassName","a","b","mergeStyle","mergeRefs","refs","node","Slot","React","style","slotProps","forwardedRef","childProps","composedProps","ours","theirs","DropDownContext","createContext","useDropDownContext","ctx","useContext","Root","closeOnEsc","closeOnOutsideClick","consumeOutsideClick","defaultVisible","setVisible","useRef","close","toggle","p","isTopOfStack","onPointerDownCapture","root","target","path","insideRoot","insideContent","useMemo","styles","Trigger","asChild","onPointerDown","onClick","onKeyDown","Content","observer","commonProps","createPortal","Close","handleClick","DropDown","DialogContext","externalIsOpen","onStateChange","dialogRef","internalIsOpen","setInternalIsOpen","isOpen","setIsOpen","state","keyboardHandlers","as","context","classNameOverlay","closeOnBackdropClick","_","handleBackdropClick","Title","Separator","Dialog","SidebarContext","useSidebarContext","onClickHandler","handleClickOutside","Sidebar","SwitcherButtons","componentValues","containerProps","onChange","selectedValue","slot","activeValue","setActiveValue","onChangeHandler","value","button","Fragment","Caption","Header","Row","onBlur","onDoubleClick","Head","Body","Cell","Footer","Table","TextField","error","label","required","showPassword","setShowPassword","handleChange","sharedClassName","resolvedFragment","inputType","restProps","isSearch","isPassword","passwordFieldNextType","Eye","prev","EyeOff","X","Search","ThemeContext","ThemeProvider","defaultTheme","getTheme","theme","setTheme","useTheme","setDataThemeHandler","savedTheme","saveTheme","prefersDarkScheme","ToolIconButton","classes","isActive","keybinding","title","getClasses"],"mappings":"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"}
@@ -1,12 +1,14 @@
1
- import { ReactNode } from 'react';
1
+ import React, { ReactNode } from 'react';
2
2
  interface RootProps {
3
3
  children: ReactNode;
4
4
  defaultVisible?: boolean;
5
5
  closeOnOutsideClick?: boolean;
6
6
  closeOnEsc?: boolean;
7
+ consumeOutsideClick?: boolean;
7
8
  }
8
9
  interface TriggerProps {
9
10
  children: ReactNode;
11
+ asChild?: boolean;
10
12
  }
11
13
  interface ContentProps {
12
14
  children: ReactNode;
@@ -14,15 +16,17 @@ interface ContentProps {
14
16
  vertical?: 'top' | 'bottom';
15
17
  className?: string;
16
18
  offset?: number;
19
+ asChild?: boolean;
17
20
  }
18
21
  interface CloseProps {
19
22
  children: ReactNode;
20
23
  onClick?: (event: React.MouseEvent) => void;
24
+ asChild?: boolean;
21
25
  }
22
26
  export declare const DropDown: {
23
- Close: ({ children, onClick }: CloseProps) => import("react/jsx-runtime").JSX.Element;
24
- Content: ({ children, className, horizontal, offset, vertical, }: ContentProps) => import("react").ReactPortal | null;
25
- Root: ({ children, closeOnEsc, closeOnOutsideClick, defaultVisible, }: RootProps) => import("react/jsx-runtime").JSX.Element;
26
- Trigger: ({ children }: TriggerProps) => import("react/jsx-runtime").JSX.Element;
27
+ Close: ({ asChild, children, onClick }: CloseProps) => import("react/jsx-runtime").JSX.Element;
28
+ Content: ({ asChild, children, className, horizontal, offset, vertical, }: ContentProps) => React.ReactPortal | null;
29
+ Root: ({ children, closeOnEsc, closeOnOutsideClick, consumeOutsideClick, defaultVisible, }: RootProps) => import("react/jsx-runtime").JSX.Element;
30
+ Trigger: ({ asChild, children }: TriggerProps) => import("react/jsx-runtime").JSX.Element;
27
31
  };
28
32
  export {};
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { u as J, D as H, B as G, a as Q } from "./ToolIconButton-CtrbbDcL.js";
2
- import { b as an, e as ln, c as rn, d as dn, C as hn, f as _n, h as un, S as mn, i as pn, T as gn, j as fn, k as yn, g as kn } from "./ToolIconButton-CtrbbDcL.js";
1
+ import { u as J, D as H, B as G, a as Q } from "./ToolIconButton--CJQ-oPC.js";
2
+ import { b as an, e as ln, c as rn, d as dn, C as hn, f as _n, h as un, S as mn, i as pn, T as gn, j as fn, k as yn, g as kn } from "./ToolIconButton--CJQ-oPC.js";
3
3
  import { jsx as s, jsxs as g, Fragment as X } from "react/jsx-runtime";
4
4
  import m from "classnames";
5
5
  import { useState as k, useEffect as $, useCallback as M, useRef as O } from "react";
package/dist/index2.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { jsx as e, jsxs as s } from "react/jsx-runtime";
2
2
  import m from "classnames";
3
3
  import { Image as h, Video as g, FileQuestion as p, HardDriveDownload as y, Share2 as I, PencilRuler as u } from "lucide-react";
4
- import { e as l, f as o, B as v } from "./ToolIconButton-CtrbbDcL.js";
5
- import { l as U, a as X } from "./ToolIconButton-CtrbbDcL.js";
4
+ import { e as l, f as o, B as v } from "./ToolIconButton--CJQ-oPC.js";
5
+ import { l as U, a as X } from "./ToolIconButton--CJQ-oPC.js";
6
6
  import "react";
7
7
  const f = [
8
8
  "png",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@yourbestsoft/studio-screen-ui-kit",
3
3
  "private": false,
4
- "version": "0.0.14",
4
+ "version": "0.0.16",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",