asterui 0.12.44 → 0.12.47

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.
Files changed (59) hide show
  1. package/dist/components/Button.d.ts +0 -1
  2. package/dist/components/Button.js +8 -9
  3. package/dist/components/Button.js.map +1 -1
  4. package/dist/components/Checkbox.d.ts +4 -1
  5. package/dist/components/Checkbox.js +106 -77
  6. package/dist/components/Checkbox.js.map +1 -1
  7. package/dist/components/ConfigProvider.d.ts +59 -0
  8. package/dist/components/ConfigProvider.js +46 -0
  9. package/dist/components/ConfigProvider.js.map +1 -0
  10. package/dist/components/CopyButton.d.ts +3 -0
  11. package/dist/components/CopyButton.js +90 -64
  12. package/dist/components/CopyButton.js.map +1 -1
  13. package/dist/components/Message.d.ts +20 -0
  14. package/dist/components/Message.js +56 -0
  15. package/dist/components/Message.js.map +1 -0
  16. package/dist/components/Notification.d.ts +8 -1
  17. package/dist/components/Notification.js +84 -60
  18. package/dist/components/Notification.js.map +1 -1
  19. package/dist/components/Tour.d.ts +71 -9
  20. package/dist/components/Tour.js +361 -198
  21. package/dist/components/Tour.js.map +1 -1
  22. package/dist/contexts/IconSizeContext.d.ts +2 -0
  23. package/dist/contexts/IconSizeContext.js +6 -0
  24. package/dist/contexts/IconSizeContext.js.map +1 -0
  25. package/dist/index.d.ts +14 -6
  26. package/dist/index.js +237 -207
  27. package/dist/index.js.map +1 -1
  28. package/dist/locale/de-DE.d.ts +3 -0
  29. package/dist/locale/de-DE.js +100 -0
  30. package/dist/locale/de-DE.js.map +1 -0
  31. package/dist/locale/en-CA.d.ts +3 -0
  32. package/dist/locale/en-CA.js +11 -0
  33. package/dist/locale/en-CA.js.map +1 -0
  34. package/dist/locale/en-GB.d.ts +3 -0
  35. package/dist/locale/en-GB.js +11 -0
  36. package/dist/locale/en-GB.js.map +1 -0
  37. package/dist/locale/en-US.d.ts +3 -0
  38. package/dist/locale/en-US.js +100 -0
  39. package/dist/locale/en-US.js.map +1 -0
  40. package/dist/locale/es-ES.d.ts +3 -0
  41. package/dist/locale/es-ES.js +100 -0
  42. package/dist/locale/es-ES.js.map +1 -0
  43. package/dist/locale/fr-FR.d.ts +3 -0
  44. package/dist/locale/fr-FR.js +100 -0
  45. package/dist/locale/fr-FR.js.map +1 -0
  46. package/dist/locale/index.d.ts +107 -0
  47. package/dist/locale/ja-JP.d.ts +3 -0
  48. package/dist/locale/ja-JP.js +100 -0
  49. package/dist/locale/ja-JP.js.map +1 -0
  50. package/dist/locale/ko-KR.d.ts +3 -0
  51. package/dist/locale/ko-KR.js +100 -0
  52. package/dist/locale/ko-KR.js.map +1 -0
  53. package/dist/locale/pt-BR.d.ts +3 -0
  54. package/dist/locale/pt-BR.js +100 -0
  55. package/dist/locale/pt-BR.js.map +1 -0
  56. package/dist/locale/zh-CN.d.ts +3 -0
  57. package/dist/locale/zh-CN.js +100 -0
  58. package/dist/locale/zh-CN.js.map +1 -0
  59. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Tour.js","sources":["../../src/components/Tour.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useRef } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport type TourPlacement =\n | 'top'\n | 'topLeft'\n | 'topRight'\n | 'bottom'\n | 'bottomLeft'\n | 'bottomRight'\n | 'left'\n | 'leftTop'\n | 'leftBottom'\n | 'right'\n | 'rightTop'\n | 'rightBottom'\n | 'center'\n\nexport interface TourStepProps {\n /** Target element ref or function returning element */\n target?: React.RefObject<HTMLElement | null> | (() => HTMLElement | null) | null\n /** Step title */\n title: React.ReactNode\n /** Step description */\n description?: React.ReactNode\n /** Cover image or content above title */\n cover?: React.ReactNode\n /** Placement of popover relative to target */\n placement?: TourPlacement\n /** Custom class for this step's popover */\n className?: string\n /** Called when this step becomes active */\n onOpen?: () => void\n /** Called when leaving this step */\n onClose?: () => void\n}\n\nexport interface TourProps {\n /** Whether tour is visible */\n open?: boolean\n /** Callback when tour closes */\n onClose?: () => void\n /** Callback when tour finishes (last step completed) */\n onFinish?: () => void\n /** Tour steps */\n steps: TourStepProps[]\n /** Current step (controlled) */\n current?: number\n /** Callback when step changes */\n onChange?: (current: number) => void\n /** Show mask overlay */\n mask?: boolean\n /** Type affects styling */\n type?: 'default' | 'primary'\n /** Gap between highlight and target [radius, offset] or single number */\n gap?: number | [number, number]\n /** Text for prev button */\n prevButtonText?: React.ReactNode\n /** Text for next button */\n nextButtonText?: React.ReactNode\n /** Text for finish button */\n finishButtonText?: React.ReactNode\n /** Text for skip button */\n skipButtonText?: React.ReactNode\n /** Show skip button */\n showSkip?: boolean\n /** Show step indicators */\n showIndicators?: boolean\n /** Close on mask click */\n closeOnMaskClick?: boolean\n /** Close on escape key */\n closeOnEscape?: boolean\n /** Scroll target into view */\n scrollIntoView?: boolean\n /** Z-index for tour overlay */\n zIndex?: number\n}\n\nconst getTargetElement = (\n target: TourStepProps['target']\n): HTMLElement | null => {\n if (!target) return null\n if (typeof target === 'function') return target()\n return target.current\n}\n\nconst getPopoverPosition = (\n targetRect: DOMRect | null,\n placement: TourPlacement,\n popoverRect: DOMRect,\n gap: number\n): { top: number; left: number } => {\n if (!targetRect || placement === 'center') {\n return {\n top: window.innerHeight / 2 - popoverRect.height / 2,\n left: window.innerWidth / 2 - popoverRect.width / 2,\n }\n }\n\n const scrollY = window.scrollY\n const scrollX = window.scrollX\n\n const positions: Record<TourPlacement, { top: number; left: number }> = {\n top: {\n top: targetRect.top + scrollY - popoverRect.height - gap,\n left: targetRect.left + scrollX + targetRect.width / 2 - popoverRect.width / 2,\n },\n topLeft: {\n top: targetRect.top + scrollY - popoverRect.height - gap,\n left: targetRect.left + scrollX,\n },\n topRight: {\n top: targetRect.top + scrollY - popoverRect.height - gap,\n left: targetRect.right + scrollX - popoverRect.width,\n },\n bottom: {\n top: targetRect.bottom + scrollY + gap,\n left: targetRect.left + scrollX + targetRect.width / 2 - popoverRect.width / 2,\n },\n bottomLeft: {\n top: targetRect.bottom + scrollY + gap,\n left: targetRect.left + scrollX,\n },\n bottomRight: {\n top: targetRect.bottom + scrollY + gap,\n left: targetRect.right + scrollX - popoverRect.width,\n },\n left: {\n top: targetRect.top + scrollY + targetRect.height / 2 - popoverRect.height / 2,\n left: targetRect.left + scrollX - popoverRect.width - gap,\n },\n leftTop: {\n top: targetRect.top + scrollY,\n left: targetRect.left + scrollX - popoverRect.width - gap,\n },\n leftBottom: {\n top: targetRect.bottom + scrollY - popoverRect.height,\n left: targetRect.left + scrollX - popoverRect.width - gap,\n },\n right: {\n top: targetRect.top + scrollY + targetRect.height / 2 - popoverRect.height / 2,\n left: targetRect.right + scrollX + gap,\n },\n rightTop: {\n top: targetRect.top + scrollY,\n left: targetRect.right + scrollX + gap,\n },\n rightBottom: {\n top: targetRect.bottom + scrollY - popoverRect.height,\n left: targetRect.right + scrollX + gap,\n },\n center: {\n top: window.innerHeight / 2 - popoverRect.height / 2,\n left: window.innerWidth / 2 - popoverRect.width / 2,\n },\n }\n\n return positions[placement]\n}\n\nexport const Tour: React.FC<TourProps> = ({\n open = false,\n onClose,\n onFinish,\n steps,\n current: controlledCurrent,\n onChange,\n mask = true,\n type = 'default',\n gap = 8,\n prevButtonText = 'Previous',\n nextButtonText = 'Next',\n finishButtonText = 'Finish',\n skipButtonText = 'Skip',\n showSkip = true,\n showIndicators = true,\n closeOnMaskClick = true,\n closeOnEscape = true,\n scrollIntoView = true,\n zIndex = 1000,\n}) => {\n const [internalCurrent, setInternalCurrent] = useState(0)\n const [targetRect, setTargetRect] = useState<DOMRect | null>(null)\n const [popoverPosition, setPopoverPosition] = useState({ top: 0, left: 0 })\n const popoverRef = useRef<HTMLDivElement>(null)\n\n const isControlled = controlledCurrent !== undefined\n const currentStep = isControlled ? controlledCurrent : internalCurrent\n const step = steps[currentStep]\n\n const gapRadius = Array.isArray(gap) ? gap[0] : gap\n const gapOffset = Array.isArray(gap) ? gap[1] : gap\n\n const updatePosition = useCallback(() => {\n if (!step) return\n\n const target = getTargetElement(step.target)\n const rect = target?.getBoundingClientRect() ?? null\n setTargetRect(rect)\n\n if (popoverRef.current) {\n const popoverRect = popoverRef.current.getBoundingClientRect()\n const placement = step.placement ?? 'bottom'\n const pos = getPopoverPosition(rect, placement, popoverRect, gapOffset + gapRadius)\n setPopoverPosition(pos)\n }\n }, [step, gapOffset, gapRadius])\n\n const goToStep = useCallback(\n (stepIndex: number) => {\n if (stepIndex < 0 || stepIndex >= steps.length) return\n\n // Call onClose for current step\n steps[currentStep]?.onClose?.()\n\n if (!isControlled) {\n setInternalCurrent(stepIndex)\n }\n onChange?.(stepIndex)\n\n // Call onOpen for new step\n steps[stepIndex]?.onOpen?.()\n },\n [steps, currentStep, isControlled, onChange]\n )\n\n const handlePrev = useCallback(() => {\n goToStep(currentStep - 1)\n }, [currentStep, goToStep])\n\n const handleNext = useCallback(() => {\n if (currentStep === steps.length - 1) {\n onFinish?.()\n onClose?.()\n } else {\n goToStep(currentStep + 1)\n }\n }, [currentStep, steps.length, goToStep, onFinish, onClose])\n\n const handleSkip = useCallback(() => {\n onClose?.()\n }, [onClose])\n\n const handleMaskClick = useCallback(() => {\n if (closeOnMaskClick) {\n onClose?.()\n }\n }, [closeOnMaskClick, onClose])\n\n // Reset to first step when opening\n useEffect(() => {\n if (open && !isControlled) {\n setInternalCurrent(0)\n }\n }, [open, isControlled])\n\n // Update position on step change or open\n useEffect(() => {\n if (!open) return\n\n updatePosition()\n\n // Scroll target into view\n if (scrollIntoView && step?.target) {\n const target = getTargetElement(step.target)\n target?.scrollIntoView({ behavior: 'smooth', block: 'center' })\n }\n\n // Call onOpen for first step\n if (currentStep === 0) {\n step?.onOpen?.()\n }\n }, [open, currentStep, step, scrollIntoView, updatePosition])\n\n // Update position on resize/scroll\n useEffect(() => {\n if (!open) return\n\n const handleUpdate = () => updatePosition()\n window.addEventListener('resize', handleUpdate)\n window.addEventListener('scroll', handleUpdate, true)\n\n // Initial position after popover renders\n requestAnimationFrame(updatePosition)\n\n return () => {\n window.removeEventListener('resize', handleUpdate)\n window.removeEventListener('scroll', handleUpdate, true)\n }\n }, [open, updatePosition])\n\n // Keyboard handling\n useEffect(() => {\n if (!open || !closeOnEscape) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose?.()\n } else if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n handleNext()\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n handlePrev()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, closeOnEscape, onClose, handleNext, handlePrev])\n\n if (!open || !step) return null\n\n const isFirstStep = currentStep === 0\n const isLastStep = currentStep === steps.length - 1\n\n const content = (\n <div\n className=\"fixed inset-0\"\n style={{ zIndex }}\n data-testid=\"tour\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n {/* Mask overlay with spotlight cutout */}\n {mask && (\n <svg\n className=\"absolute inset-0 w-full h-full pointer-events-auto\"\n onClick={handleMaskClick}\n style={{ zIndex }}\n >\n <defs>\n <mask id=\"tour-mask\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n {targetRect && (\n <rect\n x={targetRect.left - gapRadius}\n y={targetRect.top - gapRadius}\n width={targetRect.width + gapRadius * 2}\n height={targetRect.height + gapRadius * 2}\n rx={gapRadius}\n fill=\"black\"\n />\n )}\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0, 0, 0, 0.5)\"\n mask=\"url(#tour-mask)\"\n />\n </svg>\n )}\n\n {/* Popover */}\n <div\n ref={popoverRef}\n className={`absolute bg-base-100 rounded-lg shadow-xl border border-base-300 max-w-sm ${step.className ?? ''}`}\n style={{\n top: popoverPosition.top,\n left: popoverPosition.left,\n zIndex: zIndex + 1,\n }}\n onClick={(e) => e.stopPropagation()}\n data-testid=\"tour-popover\"\n >\n {/* Cover */}\n {step.cover && (\n <div className=\"rounded-t-lg overflow-hidden\">{step.cover}</div>\n )}\n\n {/* Content */}\n <div className=\"p-4\">\n <h3 className=\"font-semibold text-lg mb-1\">{step.title}</h3>\n {step.description && (\n <p className=\"text-base-content/70 text-sm mb-4\">{step.description}</p>\n )}\n\n {/* Indicators */}\n {showIndicators && steps.length > 1 && (\n <div className=\"flex gap-1 mb-4\">\n {steps.map((_, index) => (\n <button\n key={index}\n className={`w-2 h-2 rounded-full transition-colors ${\n index === currentStep\n ? 'bg-primary'\n : 'bg-base-300 hover:bg-base-content/30'\n }`}\n onClick={() => goToStep(index)}\n aria-label={`Go to step ${index + 1}`}\n />\n ))}\n </div>\n )}\n\n {/* Navigation */}\n <div className=\"flex items-center justify-between gap-2\">\n <div>\n {showSkip && !isLastStep && (\n <button\n className=\"btn btn-ghost btn-sm\"\n onClick={handleSkip}\n data-testid=\"tour-skip\"\n >\n {skipButtonText}\n </button>\n )}\n </div>\n <div className=\"flex gap-2\">\n {!isFirstStep && (\n <button\n className=\"btn btn-ghost btn-sm\"\n onClick={handlePrev}\n data-testid=\"tour-prev\"\n >\n {prevButtonText}\n </button>\n )}\n <button\n className={`btn btn-sm ${type === 'primary' ? 'btn-primary' : ''}`}\n onClick={handleNext}\n data-testid=\"tour-next\"\n >\n {isLastStep ? finishButtonText : nextButtonText}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n\n return createPortal(content, document.body)\n}\n"],"names":["getTargetElement","target","getPopoverPosition","targetRect","placement","popoverRect","gap","scrollY","scrollX","Tour","open","onClose","onFinish","steps","controlledCurrent","onChange","mask","type","prevButtonText","nextButtonText","finishButtonText","skipButtonText","showSkip","showIndicators","closeOnMaskClick","closeOnEscape","scrollIntoView","zIndex","internalCurrent","setInternalCurrent","useState","setTargetRect","popoverPosition","setPopoverPosition","popoverRef","useRef","isControlled","currentStep","step","gapRadius","gapOffset","updatePosition","useCallback","rect","pos","goToStep","stepIndex","handlePrev","handleNext","handleSkip","handleMaskClick","useEffect","handleUpdate","handleKeyDown","e","isFirstStep","isLastStep","content","jsxs","jsx","_","index","createPortal"],"mappings":"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"}
1
+ {"version":3,"file":"Tour.js","sources":["../../src/components/Tour.tsx"],"sourcesContent":["import React, {\n useState,\n useEffect,\n useCallback,\n useRef,\n forwardRef,\n useImperativeHandle,\n} from 'react'\nimport { createPortal } from 'react-dom'\n\nexport type TourPlacement =\n | 'top'\n | 'topLeft'\n | 'topRight'\n | 'bottom'\n | 'bottomLeft'\n | 'bottomRight'\n | 'left'\n | 'leftTop'\n | 'leftBottom'\n | 'right'\n | 'rightTop'\n | 'rightBottom'\n | 'center'\n\nexport type TourType = 'default' | 'primary'\n\nexport interface TourArrowConfig {\n pointAtCenter?: boolean\n}\n\nexport interface TourMaskConfig {\n style?: React.CSSProperties\n color?: string\n}\n\nexport interface TourButtonProps {\n children?: React.ReactNode\n onClick?: () => void\n}\n\nexport interface TourStepProps {\n /** Target element ref or function returning element */\n target?: React.RefObject<HTMLElement | null> | (() => HTMLElement | null) | null\n /** Step title */\n title: React.ReactNode\n /** Step description */\n description?: React.ReactNode\n /** Cover image or content above title */\n cover?: React.ReactNode\n /** Placement of popover relative to target */\n placement?: TourPlacement\n /** Whether to show arrow (overrides Tour setting) */\n arrow?: boolean | TourArrowConfig\n /** Custom close icon for this step */\n closeIcon?: React.ReactNode\n /** Show mask overlay (overrides Tour setting) */\n mask?: boolean | TourMaskConfig\n /** Type affects styling (overrides Tour setting) */\n type?: TourType\n /** Scroll into view options (overrides Tour setting) */\n scrollIntoViewOptions?: boolean | ScrollIntoViewOptions\n /** Next button props */\n nextButtonProps?: TourButtonProps\n /** Previous button props */\n prevButtonProps?: TourButtonProps\n /** Custom class for this step's popover */\n className?: string\n /** Custom style for this step's popover */\n style?: React.CSSProperties\n /** Called when this step becomes active */\n onClose?: () => void\n}\n\nexport type TourSemanticName = 'root' | 'mask' | 'popover' | 'header' | 'content' | 'footer' | 'indicator' | 'close'\n\nexport interface TourActionInfo {\n current: number\n total: number\n}\n\nexport interface TourRef {\n /** Go to a specific step */\n goTo: (step: number) => void\n /** Go to the next step */\n next: () => void\n /** Go to the previous step */\n prev: () => void\n /** Close the tour */\n close: () => void\n}\n\nexport interface TourProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Whether tour is visible */\n open?: boolean\n /** Callback when tour closes */\n onClose?: () => void\n /** Callback when tour finishes (last step completed) */\n onFinish?: () => void\n /** Tour steps */\n steps: TourStepProps[]\n /** Current step (controlled) */\n current?: number\n /** Callback when step changes */\n onChange?: (current: number) => void\n /** Whether to show arrow on popover */\n arrow?: boolean | TourArrowConfig\n /** Custom close icon */\n closeIcon?: React.ReactNode\n /** Show mask overlay */\n mask?: boolean | TourMaskConfig\n /** Disable interaction on highlighted area */\n disabledInteraction?: boolean\n /** Type affects styling */\n type?: TourType\n /** Gap between highlight and target */\n gap?: { offset?: number | [number, number]; radius?: number }\n /** Text for prev button */\n prevButtonText?: React.ReactNode\n /** Text for next button */\n nextButtonText?: React.ReactNode\n /** Text for finish button */\n finishButtonText?: React.ReactNode\n /** Text for skip button */\n skipButtonText?: React.ReactNode\n /** Show skip button */\n showSkip?: boolean\n /** Show step indicators */\n showIndicators?: boolean\n /** Close on mask click */\n closeOnMaskClick?: boolean\n /** Close on escape key */\n closeOnEscape?: boolean\n /** Scroll target into view */\n scrollIntoViewOptions?: boolean | ScrollIntoViewOptions\n /** Z-index for tour overlay */\n zIndex?: number\n /** Custom indicator renderer */\n indicatorsRender?: (current: number, total: number) => React.ReactNode\n /** Custom action buttons renderer */\n actionsRender?: (originNode: React.ReactNode, info: TourActionInfo) => React.ReactNode\n /** Rendering container for tour */\n getPopupContainer?: (node: HTMLElement) => HTMLElement\n /** Semantic class names */\n classNames?: Partial<Record<TourSemanticName, string>>\n /** Semantic styles */\n styles?: Partial<Record<TourSemanticName, React.CSSProperties>>\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nconst getTargetElement = (\n target: TourStepProps['target']\n): HTMLElement | null => {\n if (!target) return null\n if (typeof target === 'function') return target()\n return target.current\n}\n\nconst getPopoverPosition = (\n targetRect: DOMRect | null,\n placement: TourPlacement,\n popoverRect: DOMRect,\n gap: number,\n arrow: boolean | TourArrowConfig\n): { top: number; left: number } => {\n if (!targetRect || placement === 'center') {\n return {\n top: window.innerHeight / 2 - popoverRect.height / 2,\n left: window.innerWidth / 2 - popoverRect.width / 2,\n }\n }\n\n const scrollY = window.scrollY\n const scrollX = window.scrollX\n const pointAtCenter = typeof arrow === 'object' && arrow.pointAtCenter\n\n const positions: Record<TourPlacement, { top: number; left: number }> = {\n top: {\n top: targetRect.top + scrollY - popoverRect.height - gap,\n left: pointAtCenter\n ? targetRect.left + scrollX + targetRect.width / 2 - popoverRect.width / 2\n : targetRect.left + scrollX + targetRect.width / 2 - popoverRect.width / 2,\n },\n topLeft: {\n top: targetRect.top + scrollY - popoverRect.height - gap,\n left: targetRect.left + scrollX,\n },\n topRight: {\n top: targetRect.top + scrollY - popoverRect.height - gap,\n left: targetRect.right + scrollX - popoverRect.width,\n },\n bottom: {\n top: targetRect.bottom + scrollY + gap,\n left: targetRect.left + scrollX + targetRect.width / 2 - popoverRect.width / 2,\n },\n bottomLeft: {\n top: targetRect.bottom + scrollY + gap,\n left: targetRect.left + scrollX,\n },\n bottomRight: {\n top: targetRect.bottom + scrollY + gap,\n left: targetRect.right + scrollX - popoverRect.width,\n },\n left: {\n top: targetRect.top + scrollY + targetRect.height / 2 - popoverRect.height / 2,\n left: targetRect.left + scrollX - popoverRect.width - gap,\n },\n leftTop: {\n top: targetRect.top + scrollY,\n left: targetRect.left + scrollX - popoverRect.width - gap,\n },\n leftBottom: {\n top: targetRect.bottom + scrollY - popoverRect.height,\n left: targetRect.left + scrollX - popoverRect.width - gap,\n },\n right: {\n top: targetRect.top + scrollY + targetRect.height / 2 - popoverRect.height / 2,\n left: targetRect.right + scrollX + gap,\n },\n rightTop: {\n top: targetRect.top + scrollY,\n left: targetRect.right + scrollX + gap,\n },\n rightBottom: {\n top: targetRect.bottom + scrollY - popoverRect.height,\n left: targetRect.right + scrollX + gap,\n },\n center: {\n top: window.innerHeight / 2 - popoverRect.height / 2,\n left: window.innerWidth / 2 - popoverRect.width / 2,\n },\n }\n\n return positions[placement]\n}\n\nconst getArrowPosition = (\n placement: TourPlacement\n): { position: string; transform: string } => {\n const arrowPositions: Record<TourPlacement, { position: string; transform: string }> = {\n top: { position: 'bottom-0 left-1/2', transform: 'translate(-50%, 50%) rotate(45deg)' },\n topLeft: { position: 'bottom-0 left-4', transform: 'translate(0, 50%) rotate(45deg)' },\n topRight: { position: 'bottom-0 right-4', transform: 'translate(0, 50%) rotate(45deg)' },\n bottom: { position: 'top-0 left-1/2', transform: 'translate(-50%, -50%) rotate(45deg)' },\n bottomLeft: { position: 'top-0 left-4', transform: 'translate(0, -50%) rotate(45deg)' },\n bottomRight: { position: 'top-0 right-4', transform: 'translate(0, -50%) rotate(45deg)' },\n left: { position: 'right-0 top-1/2', transform: 'translate(50%, -50%) rotate(45deg)' },\n leftTop: { position: 'right-0 top-4', transform: 'translate(50%, 0) rotate(45deg)' },\n leftBottom: { position: 'right-0 bottom-4', transform: 'translate(50%, 0) rotate(45deg)' },\n right: { position: 'left-0 top-1/2', transform: 'translate(-50%, -50%) rotate(45deg)' },\n rightTop: { position: 'left-0 top-4', transform: 'translate(-50%, 0) rotate(45deg)' },\n rightBottom: { position: 'left-0 bottom-4', transform: 'translate(-50%, 0) rotate(45deg)' },\n center: { position: 'hidden', transform: '' },\n }\n return arrowPositions[placement]\n}\n\nconst defaultCloseIcon = (\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n)\n\nexport const Tour = forwardRef<TourRef, TourProps>(\n (\n {\n open = false,\n onClose,\n onFinish,\n steps,\n current: controlledCurrent,\n onChange,\n arrow = true,\n closeIcon,\n mask = true,\n disabledInteraction = false,\n type = 'default',\n gap = { offset: 6, radius: 2 },\n prevButtonText = 'Previous',\n nextButtonText = 'Next',\n finishButtonText = 'Finish',\n skipButtonText = 'Skip',\n showSkip = true,\n showIndicators = true,\n closeOnMaskClick = true,\n closeOnEscape = true,\n scrollIntoViewOptions = true,\n zIndex = 1001,\n indicatorsRender,\n actionsRender,\n getPopupContainer,\n classNames = {},\n styles = {},\n className,\n style,\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const [internalCurrent, setInternalCurrent] = useState(0)\n const [targetRect, setTargetRect] = useState<DOMRect | null>(null)\n const [popoverPosition, setPopoverPosition] = useState({ top: 0, left: 0 })\n const popoverRef = useRef<HTMLDivElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const liveRegionRef = useRef<HTMLDivElement>(null)\n\n const baseTestId = testId ?? 'tour'\n const getTestId = (suffix: string) => `${baseTestId}-${suffix}`\n\n const isControlled = controlledCurrent !== undefined\n const currentStep = isControlled ? controlledCurrent : internalCurrent\n const step = steps[currentStep]\n\n // Resolve gap values\n const gapOffset = gap.offset ?? 6\n const gapRadius = gap.radius ?? 2\n const gapOffsetValue = Array.isArray(gapOffset) ? gapOffset[0] : gapOffset\n\n // Resolve per-step overrides\n const resolvedArrow = step?.arrow ?? arrow\n const resolvedMask = step?.mask ?? mask\n const resolvedType = step?.type ?? type\n const resolvedScrollOptions = step?.scrollIntoViewOptions ?? scrollIntoViewOptions\n const resolvedCloseIcon = step?.closeIcon ?? closeIcon\n\n const showArrow = resolvedArrow !== false && step?.placement !== 'center'\n\n // Mask color\n const maskColor =\n typeof resolvedMask === 'object' && resolvedMask.color\n ? resolvedMask.color\n : 'rgba(0, 0, 0, 0.5)'\n const maskStyle =\n typeof resolvedMask === 'object' && resolvedMask.style ? resolvedMask.style : {}\n\n const updatePosition = useCallback(() => {\n if (!step) return\n\n const target = getTargetElement(step.target)\n const rect = target?.getBoundingClientRect() ?? null\n setTargetRect(rect)\n\n if (popoverRef.current) {\n const popoverRect = popoverRef.current.getBoundingClientRect()\n const placement = step.placement ?? 'bottom'\n const pos = getPopoverPosition(\n rect,\n placement,\n popoverRect,\n gapOffsetValue + gapRadius,\n resolvedArrow\n )\n setPopoverPosition(pos)\n }\n }, [step, gapOffsetValue, gapRadius, resolvedArrow])\n\n const goToStep = useCallback(\n (stepIndex: number) => {\n if (stepIndex < 0 || stepIndex >= steps.length) return\n\n // Call onClose for current step\n steps[currentStep]?.onClose?.()\n\n if (!isControlled) {\n setInternalCurrent(stepIndex)\n }\n onChange?.(stepIndex)\n\n // Announce step change\n if (liveRegionRef.current) {\n liveRegionRef.current.textContent = `Step ${stepIndex + 1} of ${steps.length}: ${\n typeof steps[stepIndex]?.title === 'string' ? steps[stepIndex]?.title : ''\n }`\n }\n },\n [steps, currentStep, isControlled, onChange]\n )\n\n const handleClose = useCallback(() => {\n onClose?.()\n }, [onClose])\n\n const handlePrev = useCallback(() => {\n step?.prevButtonProps?.onClick?.()\n goToStep(currentStep - 1)\n }, [currentStep, goToStep, step])\n\n const handleNext = useCallback(() => {\n step?.nextButtonProps?.onClick?.()\n if (currentStep === steps.length - 1) {\n onFinish?.()\n onClose?.()\n } else {\n goToStep(currentStep + 1)\n }\n }, [currentStep, steps.length, goToStep, onFinish, onClose, step])\n\n const handleSkip = useCallback(() => {\n onClose?.()\n }, [onClose])\n\n const handleMaskClick = useCallback(() => {\n if (closeOnMaskClick) {\n onClose?.()\n }\n }, [closeOnMaskClick, onClose])\n\n // Expose imperative methods\n useImperativeHandle(\n ref,\n () => ({\n goTo: goToStep,\n next: handleNext,\n prev: handlePrev,\n close: handleClose,\n }),\n [goToStep, handleNext, handlePrev, handleClose]\n )\n\n // Reset to first step when opening\n useEffect(() => {\n if (open && !isControlled) {\n setInternalCurrent(0)\n }\n }, [open, isControlled])\n\n // Update position on step change or open\n useEffect(() => {\n if (!open) return\n\n updatePosition()\n\n // Scroll target into view\n if (resolvedScrollOptions && step?.target) {\n const target = getTargetElement(step.target)\n if (target) {\n const scrollOptions: ScrollIntoViewOptions =\n typeof resolvedScrollOptions === 'object'\n ? resolvedScrollOptions\n : { behavior: 'smooth', block: 'center' }\n target.scrollIntoView(scrollOptions)\n }\n }\n\n // Announce first step\n if (currentStep === 0 && liveRegionRef.current) {\n liveRegionRef.current.textContent = `Tour started. Step 1 of ${steps.length}: ${\n typeof step?.title === 'string' ? step?.title : ''\n }`\n }\n }, [open, currentStep, step, resolvedScrollOptions, updatePosition, steps.length])\n\n // Update position on resize/scroll\n useEffect(() => {\n if (!open) return\n\n const handleUpdate = () => updatePosition()\n window.addEventListener('resize', handleUpdate)\n window.addEventListener('scroll', handleUpdate, true)\n\n // Initial position after popover renders\n requestAnimationFrame(updatePosition)\n\n return () => {\n window.removeEventListener('resize', handleUpdate)\n window.removeEventListener('scroll', handleUpdate, true)\n }\n }, [open, updatePosition])\n\n // Keyboard handling\n useEffect(() => {\n if (!open) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n onClose?.()\n } else if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n e.preventDefault()\n handleNext()\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n e.preventDefault()\n handlePrev()\n } else if (e.key === 'Tab') {\n // Focus trap within popover\n if (popoverRef.current) {\n const focusableElements = popoverRef.current.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, closeOnEscape, onClose, handleNext, handlePrev])\n\n // Focus management - focus first button when tour opens\n useEffect(() => {\n if (open && popoverRef.current) {\n requestAnimationFrame(() => {\n const firstButton = popoverRef.current?.querySelector<HTMLElement>('button')\n firstButton?.focus()\n })\n }\n }, [open, currentStep])\n\n if (!open || !step) return null\n\n const isFirstStep = currentStep === 0\n const isLastStep = currentStep === steps.length - 1\n const placement = step.placement ?? 'bottom'\n const arrowPos = getArrowPosition(placement)\n\n // Default indicators\n const defaultIndicators =\n showIndicators && steps.length > 1 ? (\n <div\n className={`flex gap-1 mb-4 ${classNames.indicator ?? ''}`}\n style={styles.indicator}\n data-testid={getTestId('indicators')}\n >\n {steps.map((_, index) => (\n <button\n key={index}\n className={`w-2 h-2 rounded-full transition-colors ${\n index === currentStep\n ? 'bg-primary'\n : 'bg-base-300 hover:bg-base-content/30'\n }`}\n onClick={() => goToStep(index)}\n aria-label={`Go to step ${index + 1}`}\n aria-current={index === currentStep ? 'step' : undefined}\n data-testid={getTestId(`indicator-${index}`)}\n />\n ))}\n </div>\n ) : null\n\n const indicators = indicatorsRender\n ? indicatorsRender(currentStep, steps.length)\n : defaultIndicators\n\n // Default action buttons\n const defaultActions = (\n <div\n className={`flex items-center justify-between gap-2 ${classNames.footer ?? ''}`}\n style={styles.footer}\n data-testid={getTestId('footer')}\n >\n <div>\n {showSkip && !isLastStep && (\n <button\n className=\"btn btn-ghost btn-sm\"\n onClick={handleSkip}\n data-testid={getTestId('skip')}\n >\n {skipButtonText}\n </button>\n )}\n </div>\n <div className=\"flex gap-2\">\n {!isFirstStep && (\n <button\n className=\"btn btn-ghost btn-sm\"\n onClick={handlePrev}\n data-testid={getTestId('prev')}\n >\n {step.prevButtonProps?.children ?? prevButtonText}\n </button>\n )}\n <button\n className={`btn btn-sm ${resolvedType === 'primary' ? 'btn-primary' : ''}`}\n onClick={handleNext}\n data-testid={getTestId('next')}\n >\n {step.nextButtonProps?.children ?? (isLastStep ? finishButtonText : nextButtonText)}\n </button>\n </div>\n </div>\n )\n\n const actions = actionsRender\n ? actionsRender(defaultActions, { current: currentStep, total: steps.length })\n : defaultActions\n\n const content = (\n <div\n ref={containerRef}\n className={`fixed inset-0 ${classNames.root ?? ''} ${className ?? ''}`}\n style={{ zIndex, ...styles.root, ...style }}\n data-testid={baseTestId}\n data-state={open ? 'open' : 'closed'}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={`Tour step ${currentStep + 1} of ${steps.length}`}\n {...rest}\n >\n {/* Live region for screen reader announcements */}\n <div\n ref={liveRegionRef}\n className=\"sr-only\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n />\n\n {/* Mask overlay with spotlight cutout */}\n {resolvedMask && (\n <svg\n className={`absolute inset-0 w-full h-full ${\n disabledInteraction ? 'pointer-events-auto' : 'pointer-events-auto'\n } ${classNames.mask ?? ''}`}\n style={{ zIndex, ...maskStyle, ...styles.mask }}\n onClick={handleMaskClick}\n data-testid={getTestId('mask')}\n aria-hidden=\"true\"\n >\n <defs>\n <mask id={`tour-mask-${baseTestId}`}>\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n {targetRect && (\n <rect\n x={targetRect.left - gapRadius}\n y={targetRect.top - gapRadius}\n width={targetRect.width + gapRadius * 2}\n height={targetRect.height + gapRadius * 2}\n rx={gapRadius}\n fill=\"black\"\n />\n )}\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill={maskColor}\n mask={`url(#tour-mask-${baseTestId})`}\n />\n </svg>\n )}\n\n {/* Interaction blocker for highlighted area */}\n {disabledInteraction && targetRect && (\n <div\n className=\"absolute pointer-events-auto\"\n style={{\n left: targetRect.left - gapRadius,\n top: targetRect.top - gapRadius,\n width: targetRect.width + gapRadius * 2,\n height: targetRect.height + gapRadius * 2,\n zIndex: zIndex + 1,\n }}\n data-testid={getTestId('blocker')}\n />\n )}\n\n {/* Popover */}\n <div\n ref={popoverRef}\n className={`absolute bg-base-100 rounded-lg shadow-xl border border-base-300 max-w-sm ${\n classNames.popover ?? ''\n } ${step.className ?? ''}`}\n style={{\n top: popoverPosition.top,\n left: popoverPosition.left,\n zIndex: zIndex + 2,\n ...styles.popover,\n ...step.style,\n }}\n onClick={(e) => e.stopPropagation()}\n data-testid={getTestId('popover')}\n data-placement={placement}\n >\n {/* Arrow */}\n {showArrow && (\n <div\n className={`absolute w-3 h-3 bg-base-100 border-base-300 ${arrowPos.position}`}\n style={{\n transform: arrowPos.transform,\n borderWidth: '1px',\n borderTopColor: 'transparent',\n borderLeftColor: 'transparent',\n }}\n data-testid={getTestId('arrow')}\n />\n )}\n\n {/* Close button */}\n {resolvedCloseIcon !== false && (\n <button\n className={`absolute top-2 right-2 btn btn-ghost btn-xs btn-circle ${\n classNames.close ?? ''\n }`}\n style={styles.close}\n onClick={handleClose}\n aria-label=\"Close tour\"\n data-testid={getTestId('close')}\n >\n {resolvedCloseIcon ?? defaultCloseIcon}\n </button>\n )}\n\n {/* Cover */}\n {step.cover && (\n <div className=\"rounded-t-lg overflow-hidden\" data-testid={getTestId('cover')}>\n {step.cover}\n </div>\n )}\n\n {/* Content */}\n <div\n className={`p-4 ${classNames.content ?? ''}`}\n style={styles.content}\n data-testid={getTestId('content')}\n >\n <div\n className={`${classNames.header ?? ''}`}\n style={styles.header}\n data-testid={getTestId('header')}\n >\n <h3 className=\"font-semibold text-lg mb-1 pr-6\">{step.title}</h3>\n {step.description && (\n <p className=\"text-base-content/70 text-sm mb-4\">{step.description}</p>\n )}\n </div>\n\n {/* Indicators */}\n {indicators}\n\n {/* Navigation */}\n {actions}\n </div>\n </div>\n </div>\n )\n\n // Get container for portal\n const container = getPopupContainer\n ? getPopupContainer(document.body)\n : document.body\n\n return createPortal(content, container)\n }\n)\n\nTour.displayName = 'Tour'\n"],"names":["getTargetElement","target","getPopoverPosition","targetRect","placement","popoverRect","gap","arrow","scrollY","scrollX","pointAtCenter","getArrowPosition","defaultCloseIcon","jsx","Tour","forwardRef","open","onClose","onFinish","steps","controlledCurrent","onChange","closeIcon","mask","disabledInteraction","type","prevButtonText","nextButtonText","finishButtonText","skipButtonText","showSkip","showIndicators","closeOnMaskClick","closeOnEscape","scrollIntoViewOptions","zIndex","indicatorsRender","actionsRender","getPopupContainer","classNames","styles","className","style","testId","rest","ref","internalCurrent","setInternalCurrent","useState","setTargetRect","popoverPosition","setPopoverPosition","popoverRef","useRef","containerRef","liveRegionRef","baseTestId","getTestId","suffix","isControlled","currentStep","step","gapOffset","gapRadius","gapOffsetValue","resolvedArrow","resolvedMask","resolvedType","resolvedScrollOptions","resolvedCloseIcon","showArrow","maskColor","maskStyle","updatePosition","useCallback","rect","pos","goToStep","stepIndex","handleClose","handlePrev","handleNext","handleSkip","handleMaskClick","useImperativeHandle","useEffect","scrollOptions","handleUpdate","handleKeyDown","e","focusableElements","firstElement","lastElement","isFirstStep","isLastStep","arrowPos","defaultIndicators","_","index","indicators","defaultActions","jsxs","actions","content","container","createPortal"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
2
+ export declare const IconSizeContext: import('react').Context<IconSize | undefined>;
@@ -0,0 +1,6 @@
1
+ import { createContext as o } from "react";
2
+ const e = o(void 0);
3
+ export {
4
+ e as IconSizeContext
5
+ };
6
+ //# sourceMappingURL=IconSizeContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconSizeContext.js","sources":["../../src/contexts/IconSizeContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport const IconSizeContext = createContext<IconSize | undefined>(undefined)\n"],"names":["IconSizeContext","createContext"],"mappings":";AAIO,MAAMA,IAAkBC,EAAoC,MAAS;"}
package/dist/index.d.ts CHANGED
@@ -12,10 +12,12 @@ export { Badge } from './components/Badge';
12
12
  export type { BadgeProps, BadgeRibbonProps, BadgePosition, BadgeStatus, BadgeType, BadgeVariant, BadgeSize } from './components/Badge';
13
13
  export { Breadcrumb } from './components/Breadcrumb';
14
14
  export type { BreadcrumbProps, BreadcrumbItemProps } from './components/Breadcrumb';
15
- export { Button, IconSizeContext } from './components/Button';
15
+ export { Button } from './components/Button';
16
16
  export type { ButtonProps } from './components/Button';
17
+ export { IconSizeContext } from './contexts/IconSizeContext';
18
+ export type { IconSize } from './contexts/IconSizeContext';
17
19
  export { CopyButton } from './components/CopyButton';
18
- export type { CopyButtonProps } from './components/CopyButton';
20
+ export type { CopyButtonProps, CopyButtonPosition } from './components/CopyButton';
19
21
  export { Checkbox } from './components/Checkbox';
20
22
  export type { CheckboxProps, CheckboxGroupProps, CheckboxOptionType, CheckboxSwapConfig } from './components/Checkbox';
21
23
  export { Chat } from './components/Chat';
@@ -24,10 +26,14 @@ export { ColorPicker } from './components/ColorPicker';
24
26
  export type { ColorPickerProps } from './components/ColorPicker';
25
27
  export { Card } from './components/Card';
26
28
  export type { CardProps, CardGridProps, CardMetaProps, CardSize, CardVariant, CardTabItem } from './components/Card';
27
- export { Cascader } from './components/Cascader';
28
- export type { CascaderProps, CascaderOption } from './components/Cascader';
29
29
  export { Carousel } from './components/Carousel';
30
30
  export type { CarouselProps, CarouselItemProps, CarouselRef, CarouselEffect, CarouselDotPlacement } from './components/Carousel';
31
+ export { Cascader } from './components/Cascader';
32
+ export type { CascaderProps, CascaderOption } from './components/Cascader';
33
+ export { ConfigProvider, useConfig, useLocale, useComponentLocale, ConfigContext } from './components/ConfigProvider';
34
+ export type { ConfigProviderProps, ConfigContextValue, ComponentSize, Direction } from './components/ConfigProvider';
35
+ export type { Locale } from './locale';
36
+ export { enUS, enGB, enCA, zhCN, esES, jaJP, ptBR, deDE, frFR, koKR } from './locale';
31
37
  export { Collapse } from './components/Collapse';
32
38
  export type { CollapseProps, CollapseItemType, CollapseSize, CollapseIconPosition, CollapseCollapsible } from './components/Collapse';
33
39
  export { Container } from './components/Container';
@@ -111,7 +117,9 @@ export type { ModalProps, ModalFuncProps, ModalPosition, ModalAlign, ResponsiveP
111
117
  export { Navbar } from './components/Navbar';
112
118
  export type { NavbarProps, NavbarColor, NavbarShadow, NavbarRounded } from './components/Navbar';
113
119
  export { notification } from './components/Notification';
114
- export type { NotificationConfig, NotificationType, NotificationPlacement } from './components/Notification';
120
+ export type { NotificationConfig, NotificationType, NotificationPlacement, NotificationVariant } from './components/Notification';
121
+ export { message, MessageManager } from './components/Message';
122
+ export type { MessageConfig } from './components/Message';
115
123
  export { OTPInput } from './components/OTPInput';
116
124
  export type { OTPInputProps, OTPInputRef } from './components/OTPInput';
117
125
  export { Pagination } from './components/Pagination';
@@ -167,7 +175,7 @@ export type { TimelineProps, TimelineItemProps, TimelineItemConfig, TimelineMode
167
175
  export { Toggle } from './components/Toggle';
168
176
  export type { ToggleProps } from './components/Toggle';
169
177
  export { Tour } from './components/Tour';
170
- export type { TourProps, TourStepProps, TourPlacement } from './components/Tour';
178
+ export type { TourProps, TourStepProps, TourPlacement, TourType, TourArrowConfig, TourMaskConfig, TourButtonProps, TourSemanticName, TourActionInfo, TourRef, } from './components/Tour';
171
179
  export { Tooltip } from './components/Tooltip';
172
180
  export type { TooltipProps } from './components/Tooltip';
173
181
  export { Transfer } from './components/Transfer';