solid-tom-ui 1.0.7 → 1.0.8

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 (68) hide show
  1. package/README.md +246 -246
  2. package/components/avatar/avatar.js.map +1 -1
  3. package/components/badge/badge.js.map +1 -1
  4. package/components/breadcrumb/breadcrumb.js.map +1 -1
  5. package/components/button/button.js.map +1 -1
  6. package/components/carousel/carousel.js.map +1 -1
  7. package/components/chat-bubble/chatBubble.js.map +1 -1
  8. package/components/checkbox/checkbox.js.map +1 -1
  9. package/components/collapse/collapse.js.map +1 -1
  10. package/components/context-menu/context-menu.js.map +1 -1
  11. package/components/context-menu/context-menu.store.js.map +1 -1
  12. package/components/divider/divider.js.map +1 -1
  13. package/components/dropdown/dropdown.js.map +1 -1
  14. package/components/dropdown/dropdown.store.js.map +1 -1
  15. package/components/float-button/float-button.js.map +1 -1
  16. package/components/hover-3d-image/hover-3d-image.js.map +1 -1
  17. package/components/image-preview/image-preview.js.map +1 -1
  18. package/components/input/input.js.map +1 -1
  19. package/components/input/input.utils.js.map +1 -1
  20. package/components/input/variants/input-color.js.map +1 -1
  21. package/components/input/variants/input-date.js.map +1 -1
  22. package/components/input/variants/input-number.js.map +1 -1
  23. package/components/input/variants/input-otp.js.map +1 -1
  24. package/components/input/variants/input-password.js.map +1 -1
  25. package/components/input/variants/input-radio.js.map +1 -1
  26. package/components/input/variants/input-range.js.map +1 -1
  27. package/components/input/variants/input-text.js.map +1 -1
  28. package/components/input/variants/input-textarea.js.map +1 -1
  29. package/components/loading/loading.js.map +1 -1
  30. package/components/mansory/mansory.js.map +1 -1
  31. package/components/menu/menu.js.map +1 -1
  32. package/components/modal/modal.js.map +1 -1
  33. package/components/modal/modalContext.js.map +1 -1
  34. package/components/pagination/pagination.js.map +1 -1
  35. package/components/progress-bar/progress-bar.js.map +1 -1
  36. package/components/qr-code/qr-code.js.map +1 -1
  37. package/components/select/select.js.map +1 -1
  38. package/components/select-zone/select-zone.js.map +1 -1
  39. package/components/skeleton/skeleton.js.map +1 -1
  40. package/components/slider/slider.js.map +1 -1
  41. package/components/splitter/splitter.js.map +1 -1
  42. package/components/steps/steps.js.map +1 -1
  43. package/components/swap/swap.js.map +1 -1
  44. package/components/switch/switch.js.map +1 -1
  45. package/components/tab/tab.js.map +1 -1
  46. package/components/table/table.js.map +1 -1
  47. package/components/timeline/timeline.js.map +1 -1
  48. package/components/toast/icons/ErrorIcon.js.map +1 -1
  49. package/components/toast/icons/IconCircle.js.map +1 -1
  50. package/components/toast/icons/InfoIcon.js.map +1 -1
  51. package/components/toast/icons/LoaderIcon.js.map +1 -1
  52. package/components/toast/icons/SuccessIcon.js.map +1 -1
  53. package/components/toast/icons/WarningIcon.js.map +1 -1
  54. package/components/toast/toast.js.map +1 -1
  55. package/components/toast/toast.store.js.map +1 -1
  56. package/components/tooltip/tooltip.js.map +1 -1
  57. package/components/tour/tour.js.map +1 -1
  58. package/components/upload/upload.js.map +1 -1
  59. package/components/z-index/z-index.context.js.map +1 -1
  60. package/components/z-index/z-index.js.map +1 -1
  61. package/components/z-index/z-index.store.js.map +1 -1
  62. package/components/z-index/z-index.types.js.map +1 -1
  63. package/{workspace.code-workspace → macos.code-workspace} +0 -0
  64. package/package.json +8 -2
  65. package/utils/cn.js.map +1 -1
  66. package/utils/element-tracker.js.map +1 -1
  67. package/utils/helper.js.map +1 -1
  68. package/utils/hoc.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.js","names":["cn","ChevronLeft","ChevronRight","Component","createEffect","createMemo","createSignal","For","mergeProps","on","onCleanup","onMount","Show","CarouselFunction","CarouselProps","VARIANTS","horizontal","vertical","Carousel","_p","p","arrows","autoplay","autoplaySpeed","dots","infinite","effect","const","currentIndex","setCurrentIndex","isPlaying","setIsPlaying","isAnimating","setIsAnimating","containerRef","HTMLDivElement","slidesRef","autoplayTimer","ReturnType","setInterval","totalSlides","images","length","transitionDuration","clearAutoplay","clearInterval","undefined","animateTransition","from","to","slides","querySelectorAll","fromSlide","HTMLElement","toSlide","direction","translateProp","style","zIndex","transition","opacity","offsetHeight","transitionValue","setTimeout","forEach","slide","index","el","size","offsetWidth","isWrapping","actualDirection","transform","goToSlide","skipAnimation","current","targetIndex","beforeChange","afterChange","startAutoplay","next","prev","moveTo","pause","play","exportCarouselFunction","carouselFunction","setCarouselFunction","stopAutoplay","handleSlideClick","onClickSlide","showPrevArrow","showNextArrow","isVertical","dotPlacementClass","dotPlacement","hasDotDuration","dotDuration","_el$","_tmpl$4","_el$2","firstChild","_ref$","_$use","_ref$2","_$insert","_$createComponent","each","children","image","_el$6","_tmpl$5","_el$7","$$click","_$spread","_$mergeProps","class","_$effect","_$className","item","when","_el$3","_tmpl$","_el$4","_tmpl$2","_$memo","_el$5","_tmpl$3","_","_el$8","_tmpl$7","_tmpl$6","_p$","_v$3","_v$4","e","t","_$setAttribute","_v$","root","_v$2","_$setStyleProperty","_$delegateEvents"],"sources":["../../../src/components/carousel/carousel.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport ChevronLeft from 'lucide-solid/icons/chevron-left';\r\nimport ChevronRight from 'lucide-solid/icons/chevron-right';\r\nimport type { Component } from 'solid-js';\r\nimport {\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n For,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Show,\r\n} from 'solid-js';\r\nimport type { CarouselFunction, CarouselProps } from './carousel.types';\r\nconst VARIANTS = {\r\n horizontal: 'car17',\r\n vertical: 'car18',\r\n};\r\n\r\nexport const Carousel: Component<CarouselProps> = _p => {\r\n const p = mergeProps(\r\n {\r\n arrows: true,\r\n autoplay: true,\r\n autoplaySpeed: 3000,\r\n dots: true,\r\n infinite: true,\r\n effect: 'scrollx' as const,\r\n },\r\n _p,\r\n );\r\n\r\n const [currentIndex, setCurrentIndex] = createSignal(0);\r\n const [isPlaying, setIsPlaying] = createSignal(!!p.autoplay);\r\n const [isAnimating, setIsAnimating] = createSignal(false);\r\n\r\n let containerRef: HTMLDivElement | undefined;\r\n let slidesRef: HTMLDivElement | undefined;\r\n let autoplayTimer: ReturnType<typeof setInterval> | undefined;\r\n\r\n const totalSlides = () => p.images.length;\r\n\r\n // Animation duration for slide transitions\r\n const transitionDuration = 400;\r\n\r\n // Clear autoplay timer\r\n const clearAutoplay = () => {\r\n if (autoplayTimer) {\r\n clearInterval(autoplayTimer);\r\n autoplayTimer = undefined;\r\n }\r\n };\r\n\r\n // Animate slide transition using CSS transitions\r\n const animateTransition = (from: number, to: number) => {\r\n if (!slidesRef || isAnimating()) return;\r\n\r\n setIsAnimating(true);\r\n\r\n const slides = slidesRef.querySelectorAll('.car03');\r\n const fromSlide = slides[from] as HTMLElement;\r\n const toSlide = slides[to] as HTMLElement;\r\n\r\n if (!fromSlide || !toSlide) {\r\n setIsAnimating(false);\r\n return;\r\n }\r\n\r\n const vertical = p.direction === 'vertical';\r\n const translateProp = vertical ? 'translateY' : 'translateX';\r\n\r\n if (p.effect === 'fade') {\r\n // Fade effect\r\n fromSlide.style.zIndex = '1';\r\n toSlide.style.zIndex = '2';\r\n toSlide.style.transition = 'none';\r\n fromSlide.style.transition = 'none';\r\n toSlide.style.opacity = '0';\r\n\r\n // Force reflow to apply initial state\r\n void toSlide.offsetHeight;\r\n\r\n // Apply CSS transition and target values\r\n const transitionValue = 'opacity var(--carousel-transition-duration) ease-in-out';\r\n fromSlide.style.transition = transitionValue;\r\n toSlide.style.transition = transitionValue;\r\n\r\n fromSlide.style.opacity = '0';\r\n toSlide.style.opacity = '1';\r\n\r\n setTimeout(() => {\r\n slides.forEach((slide, index) => {\r\n const el = slide as HTMLElement;\r\n el.style.transition = 'none';\r\n el.style.opacity = index === to ? '1' : '0';\r\n el.style.zIndex = index === to ? '1' : '0';\r\n });\r\n setIsAnimating(false);\r\n }, transitionDuration);\r\n } else {\r\n // Scrollx effect (default)\r\n // Use pixel-based transforms with 1px overlap to eliminate sub-pixel gap\r\n const size = vertical ? slidesRef.offsetHeight : slidesRef.offsetWidth;\r\n const direction = to > from ? -1 : 1;\r\n const isWrapping =\r\n (from === 0 && to === totalSlides() - 1) || (from === totalSlides() - 1 && to === 0);\r\n\r\n let actualDirection = direction;\r\n if (isWrapping) {\r\n actualDirection = from === 0 ? 1 : -1;\r\n }\r\n\r\n // Position the target slide without transition (1px overlap to prevent gap)\r\n toSlide.style.transition = 'none';\r\n fromSlide.style.transition = 'none';\r\n toSlide.style.transform = `${translateProp}(${-actualDirection * (size - 1)}px)`;\r\n toSlide.style.opacity = '1';\r\n\r\n // Force reflow to apply initial position\r\n void toSlide.offsetHeight;\r\n\r\n // Apply CSS transition and target values\r\n const transitionValue = 'transform var(--carousel-transition-duration) ease-in-out';\r\n fromSlide.style.transition = transitionValue;\r\n toSlide.style.transition = transitionValue;\r\n\r\n fromSlide.style.transform = `${translateProp}(${actualDirection * size}px)`;\r\n toSlide.style.transform = `${translateProp}(0px)`;\r\n\r\n setTimeout(() => {\r\n slides.forEach((slide, index) => {\r\n const el = slide as HTMLElement;\r\n el.style.transition = 'none';\r\n if (index === to) {\r\n el.style.transform = `${translateProp}(0px)`;\r\n el.style.opacity = '1';\r\n } else {\r\n el.style.transform = `${translateProp}(${size}px)`;\r\n el.style.opacity = '0';\r\n }\r\n });\r\n setIsAnimating(false);\r\n }, transitionDuration);\r\n }\r\n };\r\n\r\n // Go to specific slide\r\n const goToSlide = (index: number, skipAnimation = false) => {\r\n if (isAnimating() && !skipAnimation) return;\r\n\r\n const current = currentIndex();\r\n let targetIndex = index;\r\n\r\n // Handle boundaries\r\n if (p.infinite) {\r\n if (targetIndex < 0) targetIndex = totalSlides() - 1;\r\n if (targetIndex >= totalSlides()) targetIndex = 0;\r\n } else {\r\n if (targetIndex < 0) targetIndex = 0;\r\n if (targetIndex >= totalSlides()) targetIndex = totalSlides() - 1;\r\n }\r\n\r\n if (targetIndex === current && !skipAnimation) return;\r\n\r\n p.beforeChange?.(current, targetIndex);\r\n\r\n if (skipAnimation) {\r\n setCurrentIndex(targetIndex);\r\n p.afterChange?.(targetIndex);\r\n } else {\r\n animateTransition(current, targetIndex);\r\n setCurrentIndex(targetIndex);\r\n p.afterChange?.(targetIndex);\r\n }\r\n\r\n // Reset autoplay timer and progress animation when slide changes\r\n if (isPlaying() && p.autoplay) {\r\n clearAutoplay();\r\n startAutoplay();\r\n }\r\n };\r\n\r\n // Navigation functions\r\n const next = () => goToSlide(currentIndex() + 1);\r\n const prev = () => goToSlide(currentIndex() - 1);\r\n const moveTo = (index: number) => goToSlide(index);\r\n\r\n const pause = () => {\r\n setIsPlaying(false);\r\n clearAutoplay();\r\n return {};\r\n };\r\n\r\n const play = () => {\r\n if (!p.autoplay) return {};\r\n setIsPlaying(true);\r\n startAutoplay();\r\n return {};\r\n };\r\n\r\n // Start autoplay\r\n const startAutoplay = () => {\r\n if (!p.autoplay || !isPlaying()) return;\r\n\r\n clearAutoplay();\r\n\r\n autoplayTimer = setInterval(() => {\r\n if (!isAnimating()) {\r\n next();\r\n }\r\n }, p.autoplaySpeed);\r\n };\r\n\r\n // Export carousel functions\r\n createEffect(function exportCarouselFunction() {\r\n const carouselFunction: CarouselFunction = {\r\n next,\r\n prev,\r\n moveTo,\r\n pause,\r\n play,\r\n };\r\n p.setCarouselFunction?.(carouselFunction);\r\n });\r\n\r\n // Handle autoplay\r\n createEffect(\r\n on(\r\n () => [p.autoplay, isPlaying()],\r\n () => {\r\n if (p.autoplay && isPlaying()) {\r\n startAutoplay();\r\n } else {\r\n clearAutoplay();\r\n }\r\n },\r\n ),\r\n );\r\n\r\n // Initialize slides\r\n onMount(() => {\r\n if (slidesRef) {\r\n const slides = slidesRef.querySelectorAll('.car03');\r\n const vertical = p.direction === 'vertical';\r\n const translateProp = vertical ? 'translateY' : 'translateX';\r\n\r\n slides.forEach((slide, index) => {\r\n const el = slide as HTMLElement;\r\n if (p.effect === 'fade') {\r\n el.style.opacity = index === 0 ? '1' : '0';\r\n el.style.zIndex = index === 0 ? '1' : '0';\r\n } else {\r\n el.style.transform = index === 0 ? `${translateProp}(0%)` : `${translateProp}(100%)`;\r\n el.style.opacity = index === 0 ? '1' : '0';\r\n }\r\n });\r\n }\r\n\r\n if (p.autoplay) {\r\n startAutoplay();\r\n }\r\n });\r\n\r\n // Cleanup\r\n onCleanup(function stopAutoplay() {\r\n clearAutoplay();\r\n });\r\n\r\n // Handle click on slide\r\n const handleSlideClick = (index: number) => {\r\n if (index === currentIndex()) {\r\n p.onClickSlide?.(index);\r\n }\r\n };\r\n\r\n const showPrevArrow = () => p.infinite || currentIndex() > 0;\r\n const showNextArrow = () => p.infinite || currentIndex() < totalSlides() - 1;\r\n\r\n const isVertical = () => p.direction === 'vertical';\r\n\r\n // Constrain dotPlacement based on direction\r\n const dotPlacementClass = () => {\r\n if (isVertical()) {\r\n // Vertical: only 'start' or 'end' allowed\r\n if (p.dotPlacement === 'start') return 'car15';\r\n return 'car16'; // default for vertical\r\n } else {\r\n // Horizontal: only 'top' or 'bottom' allowed\r\n if (p.dotPlacement === 'top') return 'car14';\r\n return 'car13'; // default for horizontal\r\n }\r\n };\r\n\r\n const hasDotDuration = createMemo(\r\n () => isPlaying() && p.autoplay && typeof p.autoplay === 'object' && p.autoplay.dotDuration,\r\n );\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n class={cn('car01', p.direction && VARIANTS[p.direction], dotPlacementClass(), p.class?.root)}\r\n style={{\r\n '--carousel-transition-duration': `${transitionDuration}ms`,\r\n '--carousel-autoplay-speed': `${p.autoplaySpeed}ms`,\r\n }}\r\n >\r\n {/* Slides container */}\r\n <div ref={slidesRef} class=\"car02\">\r\n <For each={p.images}>\r\n {(image, index) => (\r\n <div class={cn('car03', p.class?.item)} onClick={() => handleSlideClick(index())}>\r\n <img {...image} class={cn('car04', image.class)} draggable={false} />\r\n </div>\r\n )}\r\n </For>\r\n </div>\r\n\r\n {/* Arrows */}\r\n <Show when={p.arrows}>\r\n <Show when={showPrevArrow()}>\r\n <button type=\"button\" class=\"car05 car06\" onClick={prev} aria-label=\"Previous slide\">\r\n <ChevronLeft class=\"size-6\" />\r\n </button>\r\n </Show>\r\n <Show when={showNextArrow()}>\r\n <button type=\"button\" class=\"car05 car07\" onClick={next} aria-label=\"Next slide\">\r\n <ChevronRight class=\"size-6\" />\r\n </button>\r\n </Show>\r\n </Show>\r\n\r\n {/* Dots */}\r\n <Show when={p.dots && totalSlides() > 1}>\r\n <div class=\"car08\">\r\n <For each={p.images}>\r\n {(_, index) => (\r\n <button\r\n type=\"button\"\r\n class={cn(\r\n 'car09',\r\n currentIndex() === index() && 'car10',\r\n hasDotDuration() && 'car11',\r\n )}\r\n onClick={() => goToSlide(index())}\r\n aria-label={`Go to slide ${index() + 1}`}\r\n >\r\n <Show when={hasDotDuration()}>\r\n <div class=\"car12\" />\r\n </Show>\r\n </button>\r\n )}\r\n </For>\r\n </div>\r\n </Show>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"carousel.js","names":["cn","ChevronLeft","ChevronRight","Component","createEffect","createMemo","createSignal","For","mergeProps","on","onCleanup","onMount","Show","CarouselFunction","CarouselProps","VARIANTS","horizontal","vertical","Carousel","_p","p","arrows","autoplay","autoplaySpeed","dots","infinite","effect","const","currentIndex","setCurrentIndex","isPlaying","setIsPlaying","isAnimating","setIsAnimating","containerRef","HTMLDivElement","slidesRef","autoplayTimer","ReturnType","setInterval","totalSlides","images","length","transitionDuration","clearAutoplay","clearInterval","undefined","animateTransition","from","to","slides","querySelectorAll","fromSlide","HTMLElement","toSlide","direction","translateProp","style","zIndex","transition","opacity","offsetHeight","transitionValue","setTimeout","forEach","slide","index","el","size","offsetWidth","isWrapping","actualDirection","transform","goToSlide","skipAnimation","current","targetIndex","beforeChange","afterChange","startAutoplay","next","prev","moveTo","pause","play","exportCarouselFunction","carouselFunction","setCarouselFunction","stopAutoplay","handleSlideClick","onClickSlide","showPrevArrow","showNextArrow","isVertical","dotPlacementClass","dotPlacement","hasDotDuration","dotDuration","_el$","_tmpl$4","_el$2","firstChild","_ref$","_$use","_ref$2","_$insert","_$createComponent","each","children","image","_el$6","_tmpl$5","_el$7","$$click","_$spread","_$mergeProps","class","_$effect","_$className","item","when","_el$3","_tmpl$","_el$4","_tmpl$2","_$memo","_el$5","_tmpl$3","_","_el$8","_tmpl$7","_tmpl$6","_p$","_v$3","_v$4","e","t","_$setAttribute","_v$","root","_v$2","_$setStyleProperty","_$delegateEvents"],"sources":["../../../src/components/carousel/carousel.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport ChevronLeft from 'lucide-solid/icons/chevron-left';\nimport ChevronRight from 'lucide-solid/icons/chevron-right';\nimport type { Component } from 'solid-js';\nimport {\n createEffect,\n createMemo,\n createSignal,\n For,\n mergeProps,\n on,\n onCleanup,\n onMount,\n Show,\n} from 'solid-js';\nimport type { CarouselFunction, CarouselProps } from './carousel.types';\nconst VARIANTS = {\n horizontal: 'car17',\n vertical: 'car18',\n};\n\nexport const Carousel: Component<CarouselProps> = _p => {\n const p = mergeProps(\n {\n arrows: true,\n autoplay: true,\n autoplaySpeed: 3000,\n dots: true,\n infinite: true,\n effect: 'scrollx' as const,\n },\n _p,\n );\n\n const [currentIndex, setCurrentIndex] = createSignal(0);\n const [isPlaying, setIsPlaying] = createSignal(!!p.autoplay);\n const [isAnimating, setIsAnimating] = createSignal(false);\n\n let containerRef: HTMLDivElement | undefined;\n let slidesRef: HTMLDivElement | undefined;\n let autoplayTimer: ReturnType<typeof setInterval> | undefined;\n\n const totalSlides = () => p.images.length;\n\n // Animation duration for slide transitions\n const transitionDuration = 400;\n\n // Clear autoplay timer\n const clearAutoplay = () => {\n if (autoplayTimer) {\n clearInterval(autoplayTimer);\n autoplayTimer = undefined;\n }\n };\n\n // Animate slide transition using CSS transitions\n const animateTransition = (from: number, to: number) => {\n if (!slidesRef || isAnimating()) return;\n\n setIsAnimating(true);\n\n const slides = slidesRef.querySelectorAll('.car03');\n const fromSlide = slides[from] as HTMLElement;\n const toSlide = slides[to] as HTMLElement;\n\n if (!fromSlide || !toSlide) {\n setIsAnimating(false);\n return;\n }\n\n const vertical = p.direction === 'vertical';\n const translateProp = vertical ? 'translateY' : 'translateX';\n\n if (p.effect === 'fade') {\n // Fade effect\n fromSlide.style.zIndex = '1';\n toSlide.style.zIndex = '2';\n toSlide.style.transition = 'none';\n fromSlide.style.transition = 'none';\n toSlide.style.opacity = '0';\n\n // Force reflow to apply initial state\n void toSlide.offsetHeight;\n\n // Apply CSS transition and target values\n const transitionValue = 'opacity var(--carousel-transition-duration) ease-in-out';\n fromSlide.style.transition = transitionValue;\n toSlide.style.transition = transitionValue;\n\n fromSlide.style.opacity = '0';\n toSlide.style.opacity = '1';\n\n setTimeout(() => {\n slides.forEach((slide, index) => {\n const el = slide as HTMLElement;\n el.style.transition = 'none';\n el.style.opacity = index === to ? '1' : '0';\n el.style.zIndex = index === to ? '1' : '0';\n });\n setIsAnimating(false);\n }, transitionDuration);\n } else {\n // Scrollx effect (default)\n // Use pixel-based transforms with 1px overlap to eliminate sub-pixel gap\n const size = vertical ? slidesRef.offsetHeight : slidesRef.offsetWidth;\n const direction = to > from ? -1 : 1;\n const isWrapping =\n (from === 0 && to === totalSlides() - 1) || (from === totalSlides() - 1 && to === 0);\n\n let actualDirection = direction;\n if (isWrapping) {\n actualDirection = from === 0 ? 1 : -1;\n }\n\n // Position the target slide without transition (1px overlap to prevent gap)\n toSlide.style.transition = 'none';\n fromSlide.style.transition = 'none';\n toSlide.style.transform = `${translateProp}(${-actualDirection * (size - 1)}px)`;\n toSlide.style.opacity = '1';\n\n // Force reflow to apply initial position\n void toSlide.offsetHeight;\n\n // Apply CSS transition and target values\n const transitionValue = 'transform var(--carousel-transition-duration) ease-in-out';\n fromSlide.style.transition = transitionValue;\n toSlide.style.transition = transitionValue;\n\n fromSlide.style.transform = `${translateProp}(${actualDirection * size}px)`;\n toSlide.style.transform = `${translateProp}(0px)`;\n\n setTimeout(() => {\n slides.forEach((slide, index) => {\n const el = slide as HTMLElement;\n el.style.transition = 'none';\n if (index === to) {\n el.style.transform = `${translateProp}(0px)`;\n el.style.opacity = '1';\n } else {\n el.style.transform = `${translateProp}(${size}px)`;\n el.style.opacity = '0';\n }\n });\n setIsAnimating(false);\n }, transitionDuration);\n }\n };\n\n // Go to specific slide\n const goToSlide = (index: number, skipAnimation = false) => {\n if (isAnimating() && !skipAnimation) return;\n\n const current = currentIndex();\n let targetIndex = index;\n\n // Handle boundaries\n if (p.infinite) {\n if (targetIndex < 0) targetIndex = totalSlides() - 1;\n if (targetIndex >= totalSlides()) targetIndex = 0;\n } else {\n if (targetIndex < 0) targetIndex = 0;\n if (targetIndex >= totalSlides()) targetIndex = totalSlides() - 1;\n }\n\n if (targetIndex === current && !skipAnimation) return;\n\n p.beforeChange?.(current, targetIndex);\n\n if (skipAnimation) {\n setCurrentIndex(targetIndex);\n p.afterChange?.(targetIndex);\n } else {\n animateTransition(current, targetIndex);\n setCurrentIndex(targetIndex);\n p.afterChange?.(targetIndex);\n }\n\n // Reset autoplay timer and progress animation when slide changes\n if (isPlaying() && p.autoplay) {\n clearAutoplay();\n startAutoplay();\n }\n };\n\n // Navigation functions\n const next = () => goToSlide(currentIndex() + 1);\n const prev = () => goToSlide(currentIndex() - 1);\n const moveTo = (index: number) => goToSlide(index);\n\n const pause = () => {\n setIsPlaying(false);\n clearAutoplay();\n return {};\n };\n\n const play = () => {\n if (!p.autoplay) return {};\n setIsPlaying(true);\n startAutoplay();\n return {};\n };\n\n // Start autoplay\n const startAutoplay = () => {\n if (!p.autoplay || !isPlaying()) return;\n\n clearAutoplay();\n\n autoplayTimer = setInterval(() => {\n if (!isAnimating()) {\n next();\n }\n }, p.autoplaySpeed);\n };\n\n // Export carousel functions\n createEffect(function exportCarouselFunction() {\n const carouselFunction: CarouselFunction = {\n next,\n prev,\n moveTo,\n pause,\n play,\n };\n p.setCarouselFunction?.(carouselFunction);\n });\n\n // Handle autoplay\n createEffect(\n on(\n () => [p.autoplay, isPlaying()],\n () => {\n if (p.autoplay && isPlaying()) {\n startAutoplay();\n } else {\n clearAutoplay();\n }\n },\n ),\n );\n\n // Initialize slides\n onMount(() => {\n if (slidesRef) {\n const slides = slidesRef.querySelectorAll('.car03');\n const vertical = p.direction === 'vertical';\n const translateProp = vertical ? 'translateY' : 'translateX';\n\n slides.forEach((slide, index) => {\n const el = slide as HTMLElement;\n if (p.effect === 'fade') {\n el.style.opacity = index === 0 ? '1' : '0';\n el.style.zIndex = index === 0 ? '1' : '0';\n } else {\n el.style.transform = index === 0 ? `${translateProp}(0%)` : `${translateProp}(100%)`;\n el.style.opacity = index === 0 ? '1' : '0';\n }\n });\n }\n\n if (p.autoplay) {\n startAutoplay();\n }\n });\n\n // Cleanup\n onCleanup(function stopAutoplay() {\n clearAutoplay();\n });\n\n // Handle click on slide\n const handleSlideClick = (index: number) => {\n if (index === currentIndex()) {\n p.onClickSlide?.(index);\n }\n };\n\n const showPrevArrow = () => p.infinite || currentIndex() > 0;\n const showNextArrow = () => p.infinite || currentIndex() < totalSlides() - 1;\n\n const isVertical = () => p.direction === 'vertical';\n\n // Constrain dotPlacement based on direction\n const dotPlacementClass = () => {\n if (isVertical()) {\n // Vertical: only 'start' or 'end' allowed\n if (p.dotPlacement === 'start') return 'car15';\n return 'car16'; // default for vertical\n } else {\n // Horizontal: only 'top' or 'bottom' allowed\n if (p.dotPlacement === 'top') return 'car14';\n return 'car13'; // default for horizontal\n }\n };\n\n const hasDotDuration = createMemo(\n () => isPlaying() && p.autoplay && typeof p.autoplay === 'object' && p.autoplay.dotDuration,\n );\n\n return (\n <div\n ref={containerRef}\n class={cn('car01', p.direction && VARIANTS[p.direction], dotPlacementClass(), p.class?.root)}\n style={{\n '--carousel-transition-duration': `${transitionDuration}ms`,\n '--carousel-autoplay-speed': `${p.autoplaySpeed}ms`,\n }}\n >\n {/* Slides container */}\n <div ref={slidesRef} class=\"car02\">\n <For each={p.images}>\n {(image, index) => (\n <div class={cn('car03', p.class?.item)} onClick={() => handleSlideClick(index())}>\n <img {...image} class={cn('car04', image.class)} draggable={false} />\n </div>\n )}\n </For>\n </div>\n\n {/* Arrows */}\n <Show when={p.arrows}>\n <Show when={showPrevArrow()}>\n <button type=\"button\" class=\"car05 car06\" onClick={prev} aria-label=\"Previous slide\">\n <ChevronLeft class=\"size-6\" />\n </button>\n </Show>\n <Show when={showNextArrow()}>\n <button type=\"button\" class=\"car05 car07\" onClick={next} aria-label=\"Next slide\">\n <ChevronRight class=\"size-6\" />\n </button>\n </Show>\n </Show>\n\n {/* Dots */}\n <Show when={p.dots && totalSlides() > 1}>\n <div class=\"car08\">\n <For each={p.images}>\n {(_, index) => (\n <button\n type=\"button\"\n class={cn(\n 'car09',\n currentIndex() === index() && 'car10',\n hasDotDuration() && 'car11',\n )}\n onClick={() => goToSlide(index())}\n aria-label={`Go to slide ${index() + 1}`}\n >\n <Show when={hasDotDuration()}>\n <div class=\"car12\" />\n </Show>\n </button>\n )}\n </For>\n </div>\n </Show>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chatBubble.js","names":["cn","cva","VariantProps","Component","Show","ChatBubbleProps","variants","color","default","neutral","primary","secondary","accent","info","success","warning","error","align","start","end","ChatBubbleVariantsProps","ChatBubble","props","_el$","_tmpl$","_$insert","_$createComponent","when","avatar","children","_el$2","Element","_$effect","_$className","class","header","_el$3","bubble","_el$4","footer","_el$5"],"sources":["../../../src/components/chat-bubble/chatBubble.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport { Component, Show } from 'solid-js';\r\nimport { ChatBubbleProps } from './chatBubble.type';\r\n\r\nconst variants = cva('', {\r\n variants: {\r\n color: {\r\n default: '',\r\n neutral: 'chat-bubble-neutral',\r\n primary: 'chat-bubble-primary',\r\n secondary: 'chat-bubble-secondary',\r\n accent: 'chat-bubble-accent',\r\n info: 'chat-bubble-info',\r\n success: 'chat-bubble-success',\r\n warning: 'chat-bubble-warning',\r\n error: 'chat-bubble-error',\r\n },\r\n align: {\r\n start: 'chat-start',\r\n end: 'chat-end',\r\n },\r\n },\r\n});\r\nexport type ChatBubbleVariantsProps = VariantProps<typeof variants>;\r\nexport const ChatBubble: Component<ChatBubbleProps> = props => {\r\n return (\r\n <>\r\n <div class={cn('chat', variants({ align: props.align }))}>\r\n <Show when={props.avatar}>\r\n <div class={cn('chat-image', props.class?.avatar)}>{props.avatar as Element}</div>\r\n </Show>\r\n <Show when={props.header}>\r\n <div class={cn('chat-header', props.class?.header)}>{props.header as Element}</div>\r\n </Show>\r\n <Show when={props.bubble}>\r\n <div class={cn('chat-bubble', variants({ color: props.color }), props.class?.bubble)}>\r\n {props.bubble as Element}\r\n </div>\r\n </Show>\r\n <Show when={props.footer}>\r\n <div class={cn('chat-footer', props.class?.footer)}>{props.bubble as Element}</div>\r\n </Show>\r\n </div>\r\n </>\r\n );\r\n};\r\n"],"mappings":"2OAKMM,EAAWL,EAAI,GAAI,CACvBK,SAAU,CACRC,MAAO,CACLC,QAAS,GACTC,QAAS,sBACTC,QAAS,sBACTC,UAAW,wBACXC,OAAQ,qBACRC,KAAM,mBACNC,QAAS,sBACTC,QAAS,sBACTC,MAAO,oBACR,CACDC,MAAO,CACLC,MAAO,aACPC,IAAK,WACP,CACF,CACD,CAAC,CAEWE,EAAyCC,QACpD,CAAA,IAAAC,EAAAC,GAAA,CAE4D,OAF5DC,EAAAF,EAAAG,EAGOtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMM,QAAM,IAAAC,UAAA,CAAA,IAAAC,EAAAN,GAAA,CAC2B,OAD3BC,EAAAK,MAC8BR,EAAMM,OAAiB,CAAAI,MAAAC,EAAAH,EAA/D9B,EAAG,aAAcsB,EAAMY,OAAON,OAAO,CAAA,CAAA,CAAAE,GAAA,CAAA,CAAA,KAAA,CAAAL,EAAAF,EAAAG,EAElDtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMa,QAAM,IAAAN,UAAA,CAAA,IAAAO,EAAAZ,GAAA,CAC4B,OAD5BC,EAAAW,MAC+Bd,EAAMa,OAAiB,CAAAH,MAAAC,EAAAG,EAAhEpC,EAAG,cAAesB,EAAMY,OAAOC,OAAO,CAAA,CAAA,CAAAC,GAAA,CAAA,CAAA,KAAA,CAAAX,EAAAF,EAAAG,EAEnDtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMe,QAAM,IAAAR,UAAA,CAAA,IAAAS,EAAAd,GAAA,CAC8D,OAD9DC,EAAAa,MAEnBhB,EAAMe,OAAiB,CAAAL,MAAAC,EAAAK,EADdtC,EAAG,cAAeM,EAAS,CAAEC,MAAOe,EAAMf,MAAO,CAAC,CAAEe,EAAMY,OAAOG,OAAO,CAAA,CAAA,CAAAC,GAAA,CAAA,CAAA,KAAA,CAAAb,EAAAF,EAAAG,EAIrFtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMiB,QAAM,IAAAV,UAAA,CAAA,IAAAW,EAAAhB,GAAA,CAC4B,OAD5BC,EAAAe,MAC+BlB,EAAMe,OAAiB,CAAAL,MAAAC,EAAAO,EAAhExC,EAAG,cAAesB,EAAMY,OAAOK,OAAO,CAAA,CAAA,CAAAC,GAAA,CAAA,CAAA,KAAA,CAAAR,MAAAC,EAAAV,EAb1CvB,EAAG,OAAQM,EAAS,CAAEW,MAAOK,EAAML,MAAO,CAAC,CAAC,CAAA,CAAA,CAAAM,KAAA"}
1
+ {"version":3,"file":"chatBubble.js","names":["cn","cva","VariantProps","Component","Show","ChatBubbleProps","variants","color","default","neutral","primary","secondary","accent","info","success","warning","error","align","start","end","ChatBubbleVariantsProps","ChatBubble","props","_el$","_tmpl$","_$insert","_$createComponent","when","avatar","children","_el$2","Element","_$effect","_$className","class","header","_el$3","bubble","_el$4","footer","_el$5"],"sources":["../../../src/components/chat-bubble/chatBubble.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { Component, Show } from 'solid-js';\nimport { ChatBubbleProps } from './chatBubble.type';\n\nconst variants = cva('', {\n variants: {\n color: {\n default: '',\n neutral: 'chat-bubble-neutral',\n primary: 'chat-bubble-primary',\n secondary: 'chat-bubble-secondary',\n accent: 'chat-bubble-accent',\n info: 'chat-bubble-info',\n success: 'chat-bubble-success',\n warning: 'chat-bubble-warning',\n error: 'chat-bubble-error',\n },\n align: {\n start: 'chat-start',\n end: 'chat-end',\n },\n },\n});\nexport type ChatBubbleVariantsProps = VariantProps<typeof variants>;\nexport const ChatBubble: Component<ChatBubbleProps> = props => {\n return (\n <>\n <div class={cn('chat', variants({ align: props.align }))}>\n <Show when={props.avatar}>\n <div class={cn('chat-image', props.class?.avatar)}>{props.avatar as Element}</div>\n </Show>\n <Show when={props.header}>\n <div class={cn('chat-header', props.class?.header)}>{props.header as Element}</div>\n </Show>\n <Show when={props.bubble}>\n <div class={cn('chat-bubble', variants({ color: props.color }), props.class?.bubble)}>\n {props.bubble as Element}\n </div>\n </Show>\n <Show when={props.footer}>\n <div class={cn('chat-footer', props.class?.footer)}>{props.bubble as Element}</div>\n </Show>\n </div>\n </>\n );\n};\n"],"mappings":"2OAKMM,EAAWL,EAAI,GAAI,CACvBK,SAAU,CACRC,MAAO,CACLC,QAAS,GACTC,QAAS,sBACTC,QAAS,sBACTC,UAAW,wBACXC,OAAQ,qBACRC,KAAM,mBACNC,QAAS,sBACTC,QAAS,sBACTC,MAAO,oBACR,CACDC,MAAO,CACLC,MAAO,aACPC,IAAK,WACP,CACF,CACD,CAAC,CAEWE,EAAyCC,QACpD,CAAA,IAAAC,EAAAC,GAAA,CAE4D,OAF5DC,EAAAF,EAAAG,EAGOtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMM,QAAM,IAAAC,UAAA,CAAA,IAAAC,EAAAN,GAAA,CAC2B,OAD3BC,EAAAK,MAC8BR,EAAMM,OAAiB,CAAAI,MAAAC,EAAAH,EAA/D9B,EAAG,aAAcsB,EAAMY,OAAON,OAAO,CAAA,CAAA,CAAAE,GAAA,CAAA,CAAA,KAAA,CAAAL,EAAAF,EAAAG,EAElDtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMa,QAAM,IAAAN,UAAA,CAAA,IAAAO,EAAAZ,GAAA,CAC4B,OAD5BC,EAAAW,MAC+Bd,EAAMa,OAAiB,CAAAH,MAAAC,EAAAG,EAAhEpC,EAAG,cAAesB,EAAMY,OAAOC,OAAO,CAAA,CAAA,CAAAC,GAAA,CAAA,CAAA,KAAA,CAAAX,EAAAF,EAAAG,EAEnDtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMe,QAAM,IAAAR,UAAA,CAAA,IAAAS,EAAAd,GAAA,CAC8D,OAD9DC,EAAAa,MAEnBhB,EAAMe,OAAiB,CAAAL,MAAAC,EAAAK,EADdtC,EAAG,cAAeM,EAAS,CAAEC,MAAOe,EAAMf,MAAO,CAAC,CAAEe,EAAMY,OAAOG,OAAO,CAAA,CAAA,CAAAC,GAAA,CAAA,CAAA,KAAA,CAAAb,EAAAF,EAAAG,EAIrFtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMiB,QAAM,IAAAV,UAAA,CAAA,IAAAW,EAAAhB,GAAA,CAC4B,OAD5BC,EAAAe,MAC+BlB,EAAMe,OAAiB,CAAAL,MAAAC,EAAAO,EAAhExC,EAAG,cAAesB,EAAMY,OAAOK,OAAO,CAAA,CAAA,CAAAC,GAAA,CAAA,CAAA,KAAA,CAAAR,MAAAC,EAAAV,EAb1CvB,EAAG,OAAQM,EAAS,CAAEW,MAAOK,EAAML,MAAO,CAAC,CAAC,CAAA,CAAA,CAAAM,KAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","names":["cn","cva","VariantProps","Component","createEffect","createUniqueId","mergeProps","CheckboxProps","id","name","defaultChecked","indeterminate","class","size","CheckboxVariantsProps","color","disabled","onChange","checked","value","variants","xs","sm","md","lg","xl","default","neutral","primary","secondary","accent","info","success","warning","error","Checkbox","p","_el$","_tmpl$","_$use","ref","_$spread","_$mergeProps","e","preventDefault","target","_$memo"],"sources":["../../../src/components/checkbox/checkbox.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport { Component, createEffect, createUniqueId, mergeProps } from 'solid-js';\r\n\r\ntype CheckboxProps = {\r\n id?: string;\r\n name?: string;\r\n defaultChecked: boolean;\r\n indeterminate?: boolean;\r\n class?: string;\r\n size?: CheckboxVariantsProps['size'];\r\n color?: CheckboxVariantsProps['color'];\r\n disabled?: boolean;\r\n onChange?: (checked: boolean | null) => void;\r\n value?: string;\r\n};\r\n\r\nconst variants = cva('checkbox', {\r\n variants: {\r\n size: {\r\n xs: 'checkbox-xs',\r\n sm: 'checkbox-sm',\r\n md: 'checkbox-md',\r\n lg: 'checkbox-lg',\r\n xl: 'checkbox-xl',\r\n },\r\n color: {\r\n default: '',\r\n neutral: 'checkbox-neutral',\r\n primary: 'checkbox-primary',\r\n secondary: 'checkbox-secondary',\r\n accent: 'checkbox-accent',\r\n info: 'checkbox-info',\r\n success: 'checkbox-success',\r\n warning: 'checkbox-warning',\r\n error: 'checkbox-error',\r\n },\r\n },\r\n});\r\n\r\nexport type CheckboxVariantsProps = VariantProps<typeof variants>;\r\n\r\nexport const Checkbox: Component<CheckboxProps> = p => {\r\n p = mergeProps(\r\n { size: 'xs', color: 'primary', id: createUniqueId(), defaultChecked: false } as CheckboxProps,\r\n p,\r\n );\r\n\r\n return (\r\n <input\r\n ref={ref => {\r\n if (!ref) return;\r\n ref.checked = p.defaultChecked;\r\n p.indeterminate && (ref.value = 'inteterminate');\r\n }}\r\n type=\"checkbox\"\r\n id={p.id}\r\n class={cn(variants({ size: p.size, color: p.color }), p.class)}\r\n disabled={p.disabled}\r\n {...(p.name && { name: p.name })}\r\n {...(p.indeterminate && { 'data-indeterminate': true })}\r\n onClick={e => {\r\n if (p.indeterminate || p.disabled) e.preventDefault();\r\n }}\r\n onChange={e => p.onChange && p.onChange(e.target.checked)}\r\n value={p.indeterminate ? 'inteterminate' : p.value}\r\n />\r\n );\r\n};\r\n"],"mappings":"wQAiBMoB,EAAWnB,EAAI,WAAY,CAC/BmB,SAAU,CACRP,KAAM,CACJQ,GAAI,cACJC,GAAI,cACJC,GAAI,cACJC,GAAI,cACJC,GAAI,cACL,CACDV,MAAO,CACLW,QAAS,GACTC,QAAS,mBACTC,QAAS,mBACTC,UAAW,qBACXC,OAAQ,kBACRC,KAAM,gBACNC,QAAS,mBACTC,QAAS,mBACTC,MAAO,iBACT,CACF,CACD,CAAC,CAIWC,EAAqCC,IAChDA,EAAI9B,EACF,CAAEO,KAAM,KAAME,MAAO,UAAWP,GAAIH,GAAgB,CAAEK,eAAgB,GAAO,CAC7E0B,EACD,MAED,CAAA,IAAAC,EAAAC,GAAA,CAiBsD,OAjBtDC,EAESC,GAAO,CACLA,IACLA,EAAItB,QAAUkB,EAAE1B,eAChB0B,EAAEzB,gBAAkB6B,EAAIrB,MAAQ,mBACjCkB,EAAA,CAAAI,EAAAJ,EAAAK,EAAA,CAAA,IAEDlC,IAAE,CAAA,OAAE4B,EAAE5B,IAAE,IAAA,OAAA,CAAA,OACDR,EAAGoB,EAAS,CAAEP,KAAMuB,EAAEvB,KAAME,MAAOqB,EAAErB,MAAO,CAAC,CAAEqB,EAAExB,MAAM,EAAA,IAC9DI,UAAQ,CAAA,OAAEoB,EAAEpB,UAAQ,KACfoB,EAAE3B,MAAQ,CAAEA,KAAM2B,EAAE3B,KAAM,KAC1B2B,EAAEzB,eAAiB,CAAE,qBAAsB,GAAM,CAAA,CAAA,QAC7CgC,GAAK,EACRP,EAAEzB,eAAiByB,EAAEpB,WAAU2B,EAAEC,gBAAgB,EACtD,SACSD,GAAKP,EAAEnB,UAAYmB,EAAEnB,SAAS0B,EAAEE,OAAO3B,QAAQ,CAAA,IACzDC,OAAK,CAAA,OAAE2B,MAAA,CAAA,CAAAV,EAAEzB,cAAa,EAAA,CAAG,gBAAkByB,EAAEjB,OAAK,CAAA,CAAA,GAAA,GAAA,CAAAkB,KAAA"}
1
+ {"version":3,"file":"checkbox.js","names":["cn","cva","VariantProps","Component","createEffect","createUniqueId","mergeProps","CheckboxProps","id","name","defaultChecked","indeterminate","class","size","CheckboxVariantsProps","color","disabled","onChange","checked","value","variants","xs","sm","md","lg","xl","default","neutral","primary","secondary","accent","info","success","warning","error","Checkbox","p","_el$","_tmpl$","_$use","ref","_$spread","_$mergeProps","e","preventDefault","target","_$memo"],"sources":["../../../src/components/checkbox/checkbox.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { Component, createEffect, createUniqueId, mergeProps } from 'solid-js';\n\ntype CheckboxProps = {\n id?: string;\n name?: string;\n defaultChecked: boolean;\n indeterminate?: boolean;\n class?: string;\n size?: CheckboxVariantsProps['size'];\n color?: CheckboxVariantsProps['color'];\n disabled?: boolean;\n onChange?: (checked: boolean | null) => void;\n value?: string;\n};\n\nconst variants = cva('checkbox', {\n variants: {\n size: {\n xs: 'checkbox-xs',\n sm: 'checkbox-sm',\n md: 'checkbox-md',\n lg: 'checkbox-lg',\n xl: 'checkbox-xl',\n },\n color: {\n default: '',\n neutral: 'checkbox-neutral',\n primary: 'checkbox-primary',\n secondary: 'checkbox-secondary',\n accent: 'checkbox-accent',\n info: 'checkbox-info',\n success: 'checkbox-success',\n warning: 'checkbox-warning',\n error: 'checkbox-error',\n },\n },\n});\n\nexport type CheckboxVariantsProps = VariantProps<typeof variants>;\n\nexport const Checkbox: Component<CheckboxProps> = p => {\n p = mergeProps(\n { size: 'xs', color: 'primary', id: createUniqueId(), defaultChecked: false } as CheckboxProps,\n p,\n );\n\n return (\n <input\n ref={ref => {\n if (!ref) return;\n ref.checked = p.defaultChecked;\n p.indeterminate && (ref.value = 'inteterminate');\n }}\n type=\"checkbox\"\n id={p.id}\n class={cn(variants({ size: p.size, color: p.color }), p.class)}\n disabled={p.disabled}\n {...(p.name && { name: p.name })}\n {...(p.indeterminate && { 'data-indeterminate': true })}\n onClick={e => {\n if (p.indeterminate || p.disabled) e.preventDefault();\n }}\n onChange={e => p.onChange && p.onChange(e.target.checked)}\n value={p.indeterminate ? 'inteterminate' : p.value}\n />\n );\n};\n"],"mappings":"wQAiBMoB,EAAWnB,EAAI,WAAY,CAC/BmB,SAAU,CACRP,KAAM,CACJQ,GAAI,cACJC,GAAI,cACJC,GAAI,cACJC,GAAI,cACJC,GAAI,cACL,CACDV,MAAO,CACLW,QAAS,GACTC,QAAS,mBACTC,QAAS,mBACTC,UAAW,qBACXC,OAAQ,kBACRC,KAAM,gBACNC,QAAS,mBACTC,QAAS,mBACTC,MAAO,iBACT,CACF,CACD,CAAC,CAIWC,EAAqCC,IAChDA,EAAI9B,EACF,CAAEO,KAAM,KAAME,MAAO,UAAWP,GAAIH,GAAgB,CAAEK,eAAgB,GAAO,CAC7E0B,EACD,MAED,CAAA,IAAAC,EAAAC,GAAA,CAiBsD,OAjBtDC,EAESC,GAAO,CACLA,IACLA,EAAItB,QAAUkB,EAAE1B,eAChB0B,EAAEzB,gBAAkB6B,EAAIrB,MAAQ,mBACjCkB,EAAA,CAAAI,EAAAJ,EAAAK,EAAA,CAAA,IAEDlC,IAAE,CAAA,OAAE4B,EAAE5B,IAAE,IAAA,OAAA,CAAA,OACDR,EAAGoB,EAAS,CAAEP,KAAMuB,EAAEvB,KAAME,MAAOqB,EAAErB,MAAO,CAAC,CAAEqB,EAAExB,MAAM,EAAA,IAC9DI,UAAQ,CAAA,OAAEoB,EAAEpB,UAAQ,KACfoB,EAAE3B,MAAQ,CAAEA,KAAM2B,EAAE3B,KAAM,KAC1B2B,EAAEzB,eAAiB,CAAE,qBAAsB,GAAM,CAAA,CAAA,QAC7CgC,GAAK,EACRP,EAAEzB,eAAiByB,EAAEpB,WAAU2B,EAAEC,gBAAgB,EACtD,SACSD,GAAKP,EAAEnB,UAAYmB,EAAEnB,SAAS0B,EAAEE,OAAO3B,QAAQ,CAAA,IACzDC,OAAK,CAAA,OAAE2B,MAAA,CAAA,CAAAV,EAAEzB,cAAa,EAAA,CAAG,gBAAkByB,EAAEjB,OAAK,CAAA,CAAA,GAAA,GAAA,CAAAkB,KAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"collapse.js","names":["mergeProps","Show","Component","CollapseProps","cn","cva","VariantProps","getColor","variants","iconType","plus","arrow","iconPosition","start","end","forceStatus","open","close","CollapseVariantsProps","Collapse","p","icon","type","postion","color","_el$","_tmpl$2","_el$3","firstChild","_el$4","nextSibling","_$insert","_$createComponent","when","force","children","_el$2","_tmpl$","_$spread","_$mergeProps","onOpen","onClose","onChange","e","checked","currentTarget","id","class","title","onClick","content","Element","_$effect","_p$","_v$","root","_v$2","_$className","t","undefined"],"sources":["../../../src/components/collapse/collapse.tsx"],"sourcesContent":["import { mergeProps, Show, type Component } from 'solid-js';\r\nimport type { CollapseProps } from './collapse.types';\r\nimport { cn } from '@/utils/cn';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { getColor } from '@/utils/helper';\r\n\r\nconst variants = cva('', {\r\n variants: {\r\n iconType: {\r\n plus: 'collapse-plus',\r\n arrow: 'collapse-arrow',\r\n },\r\n iconPosition: {\r\n start: 'after:start-5 after:end-auto pe-4 ps-12',\r\n end: '',\r\n },\r\n forceStatus: {\r\n open: 'collapse-open',\r\n close: 'collapse-close',\r\n },\r\n },\r\n});\r\nexport type CollapseVariantsProps = VariantProps<typeof variants>;\r\n\r\nexport const Collapse: Component<CollapseProps> = p => {\r\n p = mergeProps(\r\n {\r\n icon: {\r\n type: 'arrow',\r\n postion: 'end',\r\n },\r\n color: 'transparent',\r\n } as CollapseProps,\r\n p,\r\n );\r\n\r\n return (\r\n <>\r\n <div\r\n class={cn(\r\n 'collapse border',\r\n variants({ iconType: p.icon?.type, forceStatus: p.force }),\r\n getColor(p.color, 'bg-base-100 border-base-300'),\r\n p.color && p.color !== 'transparent' && 'sui-collapse',\r\n p.class?.root,\r\n )}\r\n >\r\n <Show when={!p.force}>\r\n <input\r\n type=\"checkbox\"\r\n {...(p.onOpen || p.onClose\r\n ? {\r\n onChange: e => {\r\n const checked = e.currentTarget.checked;\r\n checked ? p.onOpen?.() : p.onClose?.();\r\n },\r\n }\r\n : {})}\r\n {...(p.id && { id: p.id })}\r\n />\r\n </Show>\r\n <div\r\n class={cn(\r\n 'collapse-title font-semibold',\r\n variants({ iconPosition: p.icon?.postion }),\r\n p.class?.title,\r\n p.force && (p.onOpen || p.onClose) ? 'cursor-pointer' : '',\r\n )}\r\n {...(p.force && (p.onOpen || p.onClose)\r\n ? {\r\n onClick: () => {\r\n p.force === 'open' ? p.onClose?.() : p.onOpen?.();\r\n },\r\n }\r\n : {})}\r\n >\r\n {p.title}\r\n </div>\r\n <div class={cn('collapse-content text-sm', p.class?.content)}>{p.content as Element}</div>\r\n </div>\r\n </>\r\n );\r\n};\r\n"],"mappings":"qXAMMQ,EAAWH,EAAI,GAAI,CACvBG,SAAU,CACRC,SAAU,CACRC,KAAM,gBACNC,MAAO,iBACR,CACDC,aAAc,CACZC,MAAO,0CACPC,IAAK,GACN,CACDC,YAAa,CACXC,KAAM,gBACNC,MAAO,iBACT,CACF,CACD,CAAC,CAGWE,EAAqCC,IAChDA,EAAIpB,EACF,CACEqB,KAAM,CACJC,KAAM,QACNC,QAAS,MACV,CACDC,MAAO,cACR,CACDJ,EACD,MAED,CAAA,IAAAK,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAG,YA0CkE,OA1ClEC,EAAAN,EAAAO,EAWO/B,EAAI,CAAA,IAACgC,MAAI,CAAA,MAAE,CAACb,EAAEc,OAAK,IAAAC,UAAA,CAAA,IAAAC,EAAAC,GAAA,CAWS,OAXTC,EAAAF,EAAAG,MAGXnB,EAAEoB,QAAUpB,EAAEqB,QACf,CACEC,SAAUC,GAAK,CACGA,EAAEE,cAAcD,QACtBxB,EAAEoB,UAAU,CAAGpB,EAAEqB,WAAW,EAEzC,CACD,EAAE,KACDrB,EAAE0B,IAAM,CAAEA,GAAI1B,EAAE0B,GAAI,CAAA,CAAA,GAAA,GAAA,CAAAV,GAAA,CAAA,CAAAT,EAAA,CAAAW,EAAAX,EAAAY,EAAA,CAAA,IAAA,OAAA,CAAA,OAIpBnC,EACL,+BACAI,EAAS,CAAEI,aAAcQ,EAAEC,MAAME,QAAS,CAAC,CAC3CH,EAAE2B,OAAOC,MACT5B,EAAEc,QAAUd,EAAEoB,QAAUpB,EAAEqB,SAAW,iBAAmB,GACzD,EAAA,KACIrB,EAAEc,QAAUd,EAAEoB,QAAUpB,EAAEqB,SAC3B,CACEQ,YAAe,CACb7B,EAAEc,QAAU,OAASd,EAAEqB,WAAW,CAAGrB,EAAEoB,UAAU,EAEpD,CACD,EAAE,CAAA,CAAA,GAAA,GAAA,CAAAT,EAAAJ,MAELP,EAAE4B,MAAK,CAAAjB,EAAAF,MAEqDT,EAAE8B,QAAkB,CAAAE,EAAAC,GAAA,CAAA,IAAAC,EAvC5ElD,EACL,kBACAI,EAAS,CAAEC,SAAUW,EAAEC,MAAMC,KAAMP,YAAaK,EAAEc,MAAO,CAAC,CAC1D3B,EAASa,EAAEI,MAAO,8BAA8B,CAChDJ,EAAEI,OAASJ,EAAEI,QAAU,eAAiB,eACxCJ,EAAE2B,OAAOQ,KACV,CAAAC,EAiCWpD,EAAG,2BAA4BgB,EAAE2B,OAAOG,QAAQ,CAAA,OAAAI,IAAAD,EAAAV,GAAAc,EAAAhC,EAAA4B,EAAAV,EAAAW,EAAA,CAAAE,IAAAH,EAAAK,GAAAD,EAAA5B,EAAAwB,EAAAK,EAAAF,EAAA,CAAAH,GAAA,CAAAV,EAAAgB,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAlC,KAAA"}
1
+ {"version":3,"file":"collapse.js","names":["mergeProps","Show","Component","CollapseProps","cn","cva","VariantProps","getColor","variants","iconType","plus","arrow","iconPosition","start","end","forceStatus","open","close","CollapseVariantsProps","Collapse","p","icon","type","postion","color","_el$","_tmpl$2","_el$3","firstChild","_el$4","nextSibling","_$insert","_$createComponent","when","force","children","_el$2","_tmpl$","_$spread","_$mergeProps","onOpen","onClose","onChange","e","checked","currentTarget","id","class","title","onClick","content","Element","_$effect","_p$","_v$","root","_v$2","_$className","t","undefined"],"sources":["../../../src/components/collapse/collapse.tsx"],"sourcesContent":["import { mergeProps, Show, type Component } from 'solid-js';\nimport type { CollapseProps } from './collapse.types';\nimport { cn } from '@/utils/cn';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { getColor } from '@/utils/helper';\n\nconst variants = cva('', {\n variants: {\n iconType: {\n plus: 'collapse-plus',\n arrow: 'collapse-arrow',\n },\n iconPosition: {\n start: 'after:start-5 after:end-auto pe-4 ps-12',\n end: '',\n },\n forceStatus: {\n open: 'collapse-open',\n close: 'collapse-close',\n },\n },\n});\nexport type CollapseVariantsProps = VariantProps<typeof variants>;\n\nexport const Collapse: Component<CollapseProps> = p => {\n p = mergeProps(\n {\n icon: {\n type: 'arrow',\n postion: 'end',\n },\n color: 'transparent',\n } as CollapseProps,\n p,\n );\n\n return (\n <>\n <div\n class={cn(\n 'collapse border',\n variants({ iconType: p.icon?.type, forceStatus: p.force }),\n getColor(p.color, 'bg-base-100 border-base-300'),\n p.color && p.color !== 'transparent' && 'sui-collapse',\n p.class?.root,\n )}\n >\n <Show when={!p.force}>\n <input\n type=\"checkbox\"\n {...(p.onOpen || p.onClose\n ? {\n onChange: e => {\n const checked = e.currentTarget.checked;\n checked ? p.onOpen?.() : p.onClose?.();\n },\n }\n : {})}\n {...(p.id && { id: p.id })}\n />\n </Show>\n <div\n class={cn(\n 'collapse-title font-semibold',\n variants({ iconPosition: p.icon?.postion }),\n p.class?.title,\n p.force && (p.onOpen || p.onClose) ? 'cursor-pointer' : '',\n )}\n {...(p.force && (p.onOpen || p.onClose)\n ? {\n onClick: () => {\n p.force === 'open' ? p.onClose?.() : p.onOpen?.();\n },\n }\n : {})}\n >\n {p.title}\n </div>\n <div class={cn('collapse-content text-sm', p.class?.content)}>{p.content as Element}</div>\n </div>\n </>\n );\n};\n"],"mappings":"qXAMMQ,EAAWH,EAAI,GAAI,CACvBG,SAAU,CACRC,SAAU,CACRC,KAAM,gBACNC,MAAO,iBACR,CACDC,aAAc,CACZC,MAAO,0CACPC,IAAK,GACN,CACDC,YAAa,CACXC,KAAM,gBACNC,MAAO,iBACT,CACF,CACD,CAAC,CAGWE,EAAqCC,IAChDA,EAAIpB,EACF,CACEqB,KAAM,CACJC,KAAM,QACNC,QAAS,MACV,CACDC,MAAO,cACR,CACDJ,EACD,MAED,CAAA,IAAAK,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAG,YA0CkE,OA1ClEC,EAAAN,EAAAO,EAWO/B,EAAI,CAAA,IAACgC,MAAI,CAAA,MAAE,CAACb,EAAEc,OAAK,IAAAC,UAAA,CAAA,IAAAC,EAAAC,GAAA,CAWS,OAXTC,EAAAF,EAAAG,MAGXnB,EAAEoB,QAAUpB,EAAEqB,QACf,CACEC,SAAUC,GAAK,CACGA,EAAEE,cAAcD,QACtBxB,EAAEoB,UAAU,CAAGpB,EAAEqB,WAAW,EAEzC,CACD,EAAE,KACDrB,EAAE0B,IAAM,CAAEA,GAAI1B,EAAE0B,GAAI,CAAA,CAAA,GAAA,GAAA,CAAAV,GAAA,CAAA,CAAAT,EAAA,CAAAW,EAAAX,EAAAY,EAAA,CAAA,IAAA,OAAA,CAAA,OAIpBnC,EACL,+BACAI,EAAS,CAAEI,aAAcQ,EAAEC,MAAME,QAAS,CAAC,CAC3CH,EAAE2B,OAAOC,MACT5B,EAAEc,QAAUd,EAAEoB,QAAUpB,EAAEqB,SAAW,iBAAmB,GACzD,EAAA,KACIrB,EAAEc,QAAUd,EAAEoB,QAAUpB,EAAEqB,SAC3B,CACEQ,YAAe,CACb7B,EAAEc,QAAU,OAASd,EAAEqB,WAAW,CAAGrB,EAAEoB,UAAU,EAEpD,CACD,EAAE,CAAA,CAAA,GAAA,GAAA,CAAAT,EAAAJ,MAELP,EAAE4B,MAAK,CAAAjB,EAAAF,MAEqDT,EAAE8B,QAAkB,CAAAE,EAAAC,GAAA,CAAA,IAAAC,EAvC5ElD,EACL,kBACAI,EAAS,CAAEC,SAAUW,EAAEC,MAAMC,KAAMP,YAAaK,EAAEc,MAAO,CAAC,CAC1D3B,EAASa,EAAEI,MAAO,8BAA8B,CAChDJ,EAAEI,OAASJ,EAAEI,QAAU,eAAiB,eACxCJ,EAAE2B,OAAOQ,KACV,CAAAC,EAiCWpD,EAAG,2BAA4BgB,EAAE2B,OAAOG,QAAQ,CAAA,OAAAI,IAAAD,EAAAV,GAAAc,EAAAhC,EAAA4B,EAAAV,EAAAW,EAAA,CAAAE,IAAAH,EAAAK,GAAAD,EAAA5B,EAAAwB,EAAAK,EAAAF,EAAA,CAAAH,GAAA,CAAAV,EAAAgB,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAlC,KAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.js","names":["Component","createEffect","createSignal","For","onCleanup","Show","cn","ZIndex","ZIndexType","contextMenuStore","ContextMenuProps","RenderedItem","ChevronRight","MenuItemProps","item","close","customClass","Partial","Record","MenuItem","props","type","_el$","_tmpl$","_$effect","_$className","separator","submenuRef","HTMLDivElement","flip","setFlip","detectSubmenuEdge","rafId","requestAnimationFrame","checkEdge","rect","getBoundingClientRect","right","window","innerWidth","cancelAnimationFrame","_el$2","_tmpl$3","_el$3","firstChild","_el$5","_el$6","nextSibling","_el$7","_$insert","_$createComponent","when","prefixIcon","children","_el$4","_tmpl$2","label","size","_$use","el","each","items","sub","_p$","_v$","disabled","submenu","_v$2","_v$3","e","t","_$setAttribute","a","undefined","_el$8","_tmpl$5","_el$0","$$click","onClick","_el$9","shortcut","_el$1","_tmpl$4","_v$4","_v$5","MenuContentProps","x","y","MenuContent","panelRef","style","setStyle","left","top","adjustPosition","computePosition","vw","vh","innerHeight","Math","max","width","bottom","height","_el$10","$$contextmenu","preventDefault","_v$6","content","_v$7","_$style","ContextMenu","state","menuState","registerGlobalListeners","onMouseDown","MouseEvent","target","Element","closest","onKeyDown","KeyboardEvent","key","document","addEventListener","removeGlobalListeners","removeEventListener","open","DROPDOWN","s","class","_$delegateEvents"],"sources":["../../../src/components/context-menu/context-menu.tsx"],"sourcesContent":["import { Component, createEffect, createSignal, For, onCleanup, Show } from 'solid-js';\r\nimport { cn } from '@utils/cn';\r\nimport { ZIndex, ZIndexType } from '@components/z-index';\r\nimport { contextMenuStore } from './context-menu.store';\r\nimport type { ContextMenuProps, RenderedItem } from './context-menu.types';\r\nimport ChevronRight from 'lucide-solid/icons/chevron-right';\r\n\r\ntype MenuItemProps = {\r\n item: RenderedItem;\r\n close: () => void;\r\n customClass?: Partial<Record<'item' | 'separator' | 'submenu', string>>;\r\n};\r\n\r\nconst MenuItem: Component<MenuItemProps> = props => {\r\n if (props.item.type === 'separator') {\r\n return <div class={cn('cm03', props.customClass?.separator)} />;\r\n }\r\n\r\n if (props.item.type === 'submenu') {\r\n const item = props.item;\r\n let submenuRef!: HTMLDivElement;\r\n const [flip, setFlip] = createSignal(false);\r\n\r\n createEffect(function detectSubmenuEdge() {\r\n const rafId = requestAnimationFrame(function checkEdge() {\r\n if (!submenuRef) return;\r\n const rect = submenuRef.getBoundingClientRect();\r\n if (rect.right > window.innerWidth) setFlip(true);\r\n else setFlip(false);\r\n });\r\n onCleanup(() => cancelAnimationFrame(rafId));\r\n });\r\n\r\n return (\r\n <div\r\n class={cn('cm04', item.disabled && 'cm04--disabled', props.customClass?.submenu)}\r\n aria-disabled={item.disabled}\r\n >\r\n <div class=\"cm05\">\r\n <Show when={item.prefixIcon}>\r\n <span class=\"cm06\">{item.prefixIcon}</span>\r\n </Show>\r\n <span class=\"cm07\">{item.label}</span>\r\n <span class=\"cm08\">\r\n <ChevronRight size={14} />\r\n </span>\r\n </div>\r\n <div ref={el => (submenuRef = el)} class={cn('cm09', flip() && 'cm09--flip')}>\r\n <For each={item.items}>\r\n {sub => <MenuItem item={sub} close={props.close} customClass={props.customClass} />}\r\n </For>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n const item = props.item;\r\n return (\r\n <button\r\n type=\"button\"\r\n class={cn('cm02', item.disabled && 'cm02--disabled', props.customClass?.item)}\r\n disabled={item.disabled}\r\n onClick={() => {\r\n if (item.disabled) return;\r\n item.onClick();\r\n props.close();\r\n }}\r\n >\r\n <Show when={item.prefixIcon}>\r\n <span class=\"cm06\">{item.prefixIcon}</span>\r\n </Show>\r\n <span class=\"cm07\">{item.label}</span>\r\n <Show when={item.shortcut}>\r\n <span class=\"cm10\">{item.shortcut}</span>\r\n </Show>\r\n </button>\r\n );\r\n};\r\n\r\ntype MenuContentProps = {\r\n x: number;\r\n y: number;\r\n items: RenderedItem[];\r\n close: () => void;\r\n customClass?: Partial<Record<'content' | 'item' | 'separator' | 'submenu', string>>;\r\n};\r\n\r\nconst MenuContent: Component<MenuContentProps> = props => {\r\n let panelRef!: HTMLDivElement;\r\n const [style, setStyle] = createSignal({ left: `${props.x}px`, top: `${props.y}px` });\r\n\r\n createEffect(function adjustPosition() {\r\n const rafId = requestAnimationFrame(function computePosition() {\r\n if (!panelRef) return;\r\n const rect = panelRef.getBoundingClientRect();\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n\r\n const left = rect.right > vw ? Math.max(0, props.x - rect.width) : props.x;\r\n const top = rect.bottom > vh ? Math.max(0, props.y - rect.height) : props.y;\r\n\r\n setStyle({ left: `${left}px`, top: `${top}px` });\r\n });\r\n onCleanup(() => cancelAnimationFrame(rafId));\r\n });\r\n\r\n return (\r\n <div\r\n ref={el => (panelRef = el)}\r\n class={cn('cm01', props.customClass?.content)}\r\n style={style()}\r\n onContextMenu={e => e.preventDefault()}\r\n >\r\n <For each={props.items}>\r\n {item => <MenuItem item={item} close={props.close} customClass={props.customClass} />}\r\n </For>\r\n </div>\r\n );\r\n};\r\n\r\nexport const ContextMenu: Component<ContextMenuProps> = props => {\r\n const state = () => contextMenuStore.menuState();\r\n const close = () => contextMenuStore.close();\r\n\r\n createEffect(function registerGlobalListeners() {\r\n if (!state()) return;\r\n\r\n function onMouseDown(e: MouseEvent) {\r\n const target = e.target as Element;\r\n if (!target.closest('.cm01')) close();\r\n }\r\n\r\n function onKeyDown(e: KeyboardEvent) {\r\n if (e.key === 'Escape') close();\r\n }\r\n\r\n document.addEventListener('mousedown', onMouseDown);\r\n document.addEventListener('keydown', onKeyDown);\r\n\r\n onCleanup(function removeGlobalListeners() {\r\n document.removeEventListener('mousedown', onMouseDown);\r\n document.removeEventListener('keydown', onKeyDown);\r\n });\r\n });\r\n\r\n return (\r\n <ZIndex open={!!state()} type={ZIndexType.DROPDOWN} class=\"inset-0\">\r\n <Show when={state()}>\r\n {s => (\r\n <MenuContent\r\n x={s().x}\r\n y={s().y}\r\n items={s().items}\r\n close={close}\r\n customClass={props.class}\r\n />\r\n )}\r\n </Show>\r\n </ZIndex>\r\n );\r\n};\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"context-menu.js","names":["Component","createEffect","createSignal","For","onCleanup","Show","cn","ZIndex","ZIndexType","contextMenuStore","ContextMenuProps","RenderedItem","ChevronRight","MenuItemProps","item","close","customClass","Partial","Record","MenuItem","props","type","_el$","_tmpl$","_$effect","_$className","separator","submenuRef","HTMLDivElement","flip","setFlip","detectSubmenuEdge","rafId","requestAnimationFrame","checkEdge","rect","getBoundingClientRect","right","window","innerWidth","cancelAnimationFrame","_el$2","_tmpl$3","_el$3","firstChild","_el$5","_el$6","nextSibling","_el$7","_$insert","_$createComponent","when","prefixIcon","children","_el$4","_tmpl$2","label","size","_$use","el","each","items","sub","_p$","_v$","disabled","submenu","_v$2","_v$3","e","t","_$setAttribute","a","undefined","_el$8","_tmpl$5","_el$0","$$click","onClick","_el$9","shortcut","_el$1","_tmpl$4","_v$4","_v$5","MenuContentProps","x","y","MenuContent","panelRef","style","setStyle","left","top","adjustPosition","computePosition","vw","vh","innerHeight","Math","max","width","bottom","height","_el$10","$$contextmenu","preventDefault","_v$6","content","_v$7","_$style","ContextMenu","state","menuState","registerGlobalListeners","onMouseDown","MouseEvent","target","Element","closest","onKeyDown","KeyboardEvent","key","document","addEventListener","removeGlobalListeners","removeEventListener","open","DROPDOWN","s","class","_$delegateEvents"],"sources":["../../../src/components/context-menu/context-menu.tsx"],"sourcesContent":["import { Component, createEffect, createSignal, For, onCleanup, Show } from 'solid-js';\nimport { cn } from '@utils/cn';\nimport { ZIndex, ZIndexType } from '@components/z-index';\nimport { contextMenuStore } from './context-menu.store';\nimport type { ContextMenuProps, RenderedItem } from './context-menu.types';\nimport ChevronRight from 'lucide-solid/icons/chevron-right';\n\ntype MenuItemProps = {\n item: RenderedItem;\n close: () => void;\n customClass?: Partial<Record<'item' | 'separator' | 'submenu', string>>;\n};\n\nconst MenuItem: Component<MenuItemProps> = props => {\n if (props.item.type === 'separator') {\n return <div class={cn('cm03', props.customClass?.separator)} />;\n }\n\n if (props.item.type === 'submenu') {\n const item = props.item;\n let submenuRef!: HTMLDivElement;\n const [flip, setFlip] = createSignal(false);\n\n createEffect(function detectSubmenuEdge() {\n const rafId = requestAnimationFrame(function checkEdge() {\n if (!submenuRef) return;\n const rect = submenuRef.getBoundingClientRect();\n if (rect.right > window.innerWidth) setFlip(true);\n else setFlip(false);\n });\n onCleanup(() => cancelAnimationFrame(rafId));\n });\n\n return (\n <div\n class={cn('cm04', item.disabled && 'cm04--disabled', props.customClass?.submenu)}\n aria-disabled={item.disabled}\n >\n <div class=\"cm05\">\n <Show when={item.prefixIcon}>\n <span class=\"cm06\">{item.prefixIcon}</span>\n </Show>\n <span class=\"cm07\">{item.label}</span>\n <span class=\"cm08\">\n <ChevronRight size={14} />\n </span>\n </div>\n <div ref={el => (submenuRef = el)} class={cn('cm09', flip() && 'cm09--flip')}>\n <For each={item.items}>\n {sub => <MenuItem item={sub} close={props.close} customClass={props.customClass} />}\n </For>\n </div>\n </div>\n );\n }\n\n const item = props.item;\n return (\n <button\n type=\"button\"\n class={cn('cm02', item.disabled && 'cm02--disabled', props.customClass?.item)}\n disabled={item.disabled}\n onClick={() => {\n if (item.disabled) return;\n item.onClick();\n props.close();\n }}\n >\n <Show when={item.prefixIcon}>\n <span class=\"cm06\">{item.prefixIcon}</span>\n </Show>\n <span class=\"cm07\">{item.label}</span>\n <Show when={item.shortcut}>\n <span class=\"cm10\">{item.shortcut}</span>\n </Show>\n </button>\n );\n};\n\ntype MenuContentProps = {\n x: number;\n y: number;\n items: RenderedItem[];\n close: () => void;\n customClass?: Partial<Record<'content' | 'item' | 'separator' | 'submenu', string>>;\n};\n\nconst MenuContent: Component<MenuContentProps> = props => {\n let panelRef!: HTMLDivElement;\n const [style, setStyle] = createSignal({ left: `${props.x}px`, top: `${props.y}px` });\n\n createEffect(function adjustPosition() {\n const rafId = requestAnimationFrame(function computePosition() {\n if (!panelRef) return;\n const rect = panelRef.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n const left = rect.right > vw ? Math.max(0, props.x - rect.width) : props.x;\n const top = rect.bottom > vh ? Math.max(0, props.y - rect.height) : props.y;\n\n setStyle({ left: `${left}px`, top: `${top}px` });\n });\n onCleanup(() => cancelAnimationFrame(rafId));\n });\n\n return (\n <div\n ref={el => (panelRef = el)}\n class={cn('cm01', props.customClass?.content)}\n style={style()}\n onContextMenu={e => e.preventDefault()}\n >\n <For each={props.items}>\n {item => <MenuItem item={item} close={props.close} customClass={props.customClass} />}\n </For>\n </div>\n );\n};\n\nexport const ContextMenu: Component<ContextMenuProps> = props => {\n const state = () => contextMenuStore.menuState();\n const close = () => contextMenuStore.close();\n\n createEffect(function registerGlobalListeners() {\n if (!state()) return;\n\n function onMouseDown(e: MouseEvent) {\n const target = e.target as Element;\n if (!target.closest('.cm01')) close();\n }\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') close();\n }\n\n document.addEventListener('mousedown', onMouseDown);\n document.addEventListener('keydown', onKeyDown);\n\n onCleanup(function removeGlobalListeners() {\n document.removeEventListener('mousedown', onMouseDown);\n document.removeEventListener('keydown', onKeyDown);\n });\n });\n\n return (\n <ZIndex open={!!state()} type={ZIndexType.DROPDOWN} class=\"inset-0\">\n <Show when={state()}>\n {s => (\n <MenuContent\n x={s().x}\n y={s().y}\n items={s().items}\n close={close}\n customClass={props.class}\n />\n )}\n </Show>\n </ZIndex>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.store.js","names":[],"sources":["../../../src/components/context-menu/context-menu.store.ts"],"sourcesContent":["import { createSignal } from 'solid-js';\r\nimport type {\r\n ContextRecord,\r\n RegistryItem,\r\n RenderedItem,\r\n ContextMenuHandle,\r\n} from './context-menu.types';\r\n\r\ntype MenuState = {\r\n x: number;\r\n y: number;\r\n items: RenderedItem[];\r\n} | null;\r\n\r\nconst [menuState, setMenuState] = createSignal<MenuState>(null);\r\n\r\nexport const contextMenuStore = {\r\n menuState,\r\n close: () => setMenuState(null),\r\n isOpen: () => menuState() !== null,\r\n};\r\n\r\nexport function createContextMenuHandle<\r\n TContext extends ContextRecord,\r\n>(): ContextMenuHandle<TContext> {\r\n const registry = new Map<string, RegistryItem<TContext>>();\r\n\r\n function register(item: RegistryItem<TContext>): void {\r\n registry.set(item.key, item);\r\n }\r\n\r\n function unregister(key: string): void {\r\n registry.delete(key);\r\n }\r\n\r\n function buildRenderedItems(ctx: TContext): RenderedItem[] {\r\n const visible = [...registry.values()]\r\n .filter(item => !item.when || item.when(ctx))\r\n .sort((a, b) => (a.order ?? 100) - (b.order ?? 100));\r\n\r\n if (visible.length === 0) return [];\r\n\r\n const groups: RegistryItem<TContext>[][] = [];\r\n const groupMap = new Map<string, RegistryItem<TContext>[]>();\r\n\r\n for (const item of visible) {\r\n const g = item.group ?? '__default__';\r\n if (!groupMap.has(g)) {\r\n const arr: RegistryItem<TContext>[] = [];\r\n groupMap.set(g, arr);\r\n groups.push(arr);\r\n }\r\n groupMap.get(g)!.push(item);\r\n }\r\n\r\n const result: RenderedItem[] = [];\r\n for (let i = 0; i < groups.length; i++) {\r\n if (i > 0) result.push({ type: 'separator' });\r\n for (const item of groups[i]) {\r\n if (item.type === 'item') {\r\n result.push({\r\n type: 'item',\r\n key: item.key,\r\n label: item.label,\r\n disabled: item.disabled?.(ctx),\r\n shortcut: item.shortcut,\r\n prefixIcon: item.prefixIcon,\r\n onClick: () => item.onClick(ctx),\r\n });\r\n } else {\r\n result.push({\r\n type: 'submenu',\r\n key: item.key,\r\n label: item.label,\r\n disabled: item.disabled?.(ctx),\r\n shortcut: item.shortcut,\r\n prefixIcon: item.prefixIcon,\r\n\r\n items: item.items\r\n .filter(sub => !sub.when || sub.when(ctx))\r\n .map(sub => {\r\n if (sub.type === 'item') {\r\n return {\r\n type: 'item' as const,\r\n key: sub.key,\r\n label: sub.label,\r\n disabled: sub.disabled?.(ctx),\r\n shortcut: sub.shortcut,\r\n prefixIcon: sub.prefixIcon,\r\n onClick: () => sub.onClick(ctx),\r\n };\r\n }\r\n return { type: 'separator' as const };\r\n }),\r\n });\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n function trigger(e: MouseEvent, ctx: TContext): void {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const items = buildRenderedItems(ctx);\r\n if (items.length === 0) return;\r\n setMenuState({ x: e.clientX, y: e.clientY, items });\r\n }\r\n\r\n return { register, unregister, trigger };\r\n}\r\n"],"mappings":"wCAcA,GAAM,CAAC,EAAW,GAAgB,EAAwB,KAAK,CAElD,EAAmB,CAC9B,YACA,UAAa,EAAa,KAAK,CAC/B,WAAc,GAAW,GAAK,KAC/B,CAED,SAAgB,GAEiB,CAC/B,IAAM,EAAW,IAAI,IAErB,SAAS,EAAS,EAAoC,CACpD,EAAS,IAAI,EAAK,IAAK,EAAK,CAG9B,SAAS,EAAW,EAAmB,CACrC,EAAS,OAAO,EAAI,CAGtB,SAAS,EAAmB,EAA+B,CACzD,IAAM,EAAU,CAAC,GAAG,EAAS,QAAQ,CAAC,CACnC,OAAO,GAAQ,CAAC,EAAK,MAAQ,EAAK,KAAK,EAAI,CAAC,CAC5C,MAAM,EAAG,KAAO,EAAE,OAAS,MAAQ,EAAE,OAAS,KAAK,CAEtD,GAAI,EAAQ,SAAW,EAAG,MAAO,EAAE,CAEnC,IAAM,EAAqC,EAAE,CACvC,EAAW,IAAI,IAErB,IAAK,IAAM,KAAQ,EAAS,CAC1B,IAAM,EAAI,EAAK,OAAS,cACxB,GAAI,CAAC,EAAS,IAAI,EAAE,CAAE,CACpB,IAAM,EAAgC,EAAE,CACxC,EAAS,IAAI,EAAG,EAAI,CACpB,EAAO,KAAK,EAAI,CAElB,EAAS,IAAI,EAAE,CAAE,KAAK,EAAK,CAG7B,IAAM,EAAyB,EAAE,CACjC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CAClC,EAAI,GAAG,EAAO,KAAK,CAAE,KAAM,YAAa,CAAC,CAC7C,IAAK,IAAM,KAAQ,EAAO,GACpB,EAAK,OAAS,OAChB,EAAO,KAAK,CACV,KAAM,OACN,IAAK,EAAK,IACV,MAAO,EAAK,MACZ,SAAU,EAAK,WAAW,EAAI,CAC9B,SAAU,EAAK,SACf,WAAY,EAAK,WACjB,YAAe,EAAK,QAAQ,EAAI,CACjC,CAAC,CAEF,EAAO,KAAK,CACV,KAAM,UACN,IAAK,EAAK,IACV,MAAO,EAAK,MACZ,SAAU,EAAK,WAAW,EAAI,CAC9B,SAAU,EAAK,SACf,WAAY,EAAK,WAEjB,MAAO,EAAK,MACT,OAAO,GAAO,CAAC,EAAI,MAAQ,EAAI,KAAK,EAAI,CAAC,CACzC,IAAI,GACC,EAAI,OAAS,OACR,CACL,KAAM,OACN,IAAK,EAAI,IACT,MAAO,EAAI,MACX,SAAU,EAAI,WAAW,EAAI,CAC7B,SAAU,EAAI,SACd,WAAY,EAAI,WAChB,YAAe,EAAI,QAAQ,EAAI,CAChC,CAEI,CAAE,KAAM,YAAsB,CACrC,CACL,CAAC,CAIR,OAAO,EAGT,SAAS,EAAQ,EAAe,EAAqB,CACnD,EAAE,gBAAgB,CAClB,EAAE,iBAAiB,CACnB,IAAM,EAAQ,EAAmB,EAAI,CACjC,EAAM,SAAW,GACrB,EAAa,CAAE,EAAG,EAAE,QAAS,EAAG,EAAE,QAAS,QAAO,CAAC,CAGrD,MAAO,CAAE,WAAU,aAAY,UAAS"}
1
+ {"version":3,"file":"context-menu.store.js","names":[],"sources":["../../../src/components/context-menu/context-menu.store.ts"],"sourcesContent":["import { createSignal } from 'solid-js';\nimport type {\n ContextRecord,\n RegistryItem,\n RenderedItem,\n ContextMenuHandle,\n} from './context-menu.types';\n\ntype MenuState = {\n x: number;\n y: number;\n items: RenderedItem[];\n} | null;\n\nconst [menuState, setMenuState] = createSignal<MenuState>(null);\n\nexport const contextMenuStore = {\n menuState,\n close: () => setMenuState(null),\n isOpen: () => menuState() !== null,\n};\n\nexport function createContextMenuHandle<\n TContext extends ContextRecord,\n>(): ContextMenuHandle<TContext> {\n const registry = new Map<string, RegistryItem<TContext>>();\n\n function register(item: RegistryItem<TContext>): void {\n registry.set(item.key, item);\n }\n\n function unregister(key: string): void {\n registry.delete(key);\n }\n\n function buildRenderedItems(ctx: TContext): RenderedItem[] {\n const visible = [...registry.values()]\n .filter(item => !item.when || item.when(ctx))\n .sort((a, b) => (a.order ?? 100) - (b.order ?? 100));\n\n if (visible.length === 0) return [];\n\n const groups: RegistryItem<TContext>[][] = [];\n const groupMap = new Map<string, RegistryItem<TContext>[]>();\n\n for (const item of visible) {\n const g = item.group ?? '__default__';\n if (!groupMap.has(g)) {\n const arr: RegistryItem<TContext>[] = [];\n groupMap.set(g, arr);\n groups.push(arr);\n }\n groupMap.get(g)!.push(item);\n }\n\n const result: RenderedItem[] = [];\n for (let i = 0; i < groups.length; i++) {\n if (i > 0) result.push({ type: 'separator' });\n for (const item of groups[i]) {\n if (item.type === 'item') {\n result.push({\n type: 'item',\n key: item.key,\n label: item.label,\n disabled: item.disabled?.(ctx),\n shortcut: item.shortcut,\n prefixIcon: item.prefixIcon,\n onClick: () => item.onClick(ctx),\n });\n } else {\n result.push({\n type: 'submenu',\n key: item.key,\n label: item.label,\n disabled: item.disabled?.(ctx),\n shortcut: item.shortcut,\n prefixIcon: item.prefixIcon,\n\n items: item.items\n .filter(sub => !sub.when || sub.when(ctx))\n .map(sub => {\n if (sub.type === 'item') {\n return {\n type: 'item' as const,\n key: sub.key,\n label: sub.label,\n disabled: sub.disabled?.(ctx),\n shortcut: sub.shortcut,\n prefixIcon: sub.prefixIcon,\n onClick: () => sub.onClick(ctx),\n };\n }\n return { type: 'separator' as const };\n }),\n });\n }\n }\n }\n return result;\n }\n\n function trigger(e: MouseEvent, ctx: TContext): void {\n e.preventDefault();\n e.stopPropagation();\n const items = buildRenderedItems(ctx);\n if (items.length === 0) return;\n setMenuState({ x: e.clientX, y: e.clientY, items });\n }\n\n return { register, unregister, trigger };\n}\n"],"mappings":"wCAcA,GAAM,CAAC,EAAW,GAAgB,EAAwB,KAAK,CAElD,EAAmB,CAC9B,YACA,UAAa,EAAa,KAAK,CAC/B,WAAc,GAAW,GAAK,KAC/B,CAED,SAAgB,GAEiB,CAC/B,IAAM,EAAW,IAAI,IAErB,SAAS,EAAS,EAAoC,CACpD,EAAS,IAAI,EAAK,IAAK,EAAK,CAG9B,SAAS,EAAW,EAAmB,CACrC,EAAS,OAAO,EAAI,CAGtB,SAAS,EAAmB,EAA+B,CACzD,IAAM,EAAU,CAAC,GAAG,EAAS,QAAQ,CAAC,CACnC,OAAO,GAAQ,CAAC,EAAK,MAAQ,EAAK,KAAK,EAAI,CAAC,CAC5C,MAAM,EAAG,KAAO,EAAE,OAAS,MAAQ,EAAE,OAAS,KAAK,CAEtD,GAAI,EAAQ,SAAW,EAAG,MAAO,EAAE,CAEnC,IAAM,EAAqC,EAAE,CACvC,EAAW,IAAI,IAErB,IAAK,IAAM,KAAQ,EAAS,CAC1B,IAAM,EAAI,EAAK,OAAS,cACxB,GAAI,CAAC,EAAS,IAAI,EAAE,CAAE,CACpB,IAAM,EAAgC,EAAE,CACxC,EAAS,IAAI,EAAG,EAAI,CACpB,EAAO,KAAK,EAAI,CAElB,EAAS,IAAI,EAAE,CAAE,KAAK,EAAK,CAG7B,IAAM,EAAyB,EAAE,CACjC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CAClC,EAAI,GAAG,EAAO,KAAK,CAAE,KAAM,YAAa,CAAC,CAC7C,IAAK,IAAM,KAAQ,EAAO,GACpB,EAAK,OAAS,OAChB,EAAO,KAAK,CACV,KAAM,OACN,IAAK,EAAK,IACV,MAAO,EAAK,MACZ,SAAU,EAAK,WAAW,EAAI,CAC9B,SAAU,EAAK,SACf,WAAY,EAAK,WACjB,YAAe,EAAK,QAAQ,EAAI,CACjC,CAAC,CAEF,EAAO,KAAK,CACV,KAAM,UACN,IAAK,EAAK,IACV,MAAO,EAAK,MACZ,SAAU,EAAK,WAAW,EAAI,CAC9B,SAAU,EAAK,SACf,WAAY,EAAK,WAEjB,MAAO,EAAK,MACT,OAAO,GAAO,CAAC,EAAI,MAAQ,EAAI,KAAK,EAAI,CAAC,CACzC,IAAI,GACC,EAAI,OAAS,OACR,CACL,KAAM,OACN,IAAK,EAAI,IACT,MAAO,EAAI,MACX,SAAU,EAAI,WAAW,EAAI,CAC7B,SAAU,EAAI,SACd,WAAY,EAAI,WAChB,YAAe,EAAI,QAAQ,EAAI,CAChC,CAEI,CAAE,KAAM,YAAsB,CACrC,CACL,CAAC,CAIR,OAAO,EAGT,SAAS,EAAQ,EAAe,EAAqB,CACnD,EAAE,gBAAgB,CAClB,EAAE,iBAAiB,CACnB,IAAM,EAAQ,EAAmB,EAAI,CACjC,EAAM,SAAW,GACrB,EAAa,CAAE,EAAG,EAAE,QAAS,EAAG,EAAE,QAAS,QAAO,CAAC,CAGrD,MAAO,CAAE,WAAU,aAAY,UAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"divider.js","names":["cn","getColor","mergeProps","ParentComponent","Show","DividerProps","thicknessClass","Record","NonNullable","Divider","p","orientation","const","variant","align","thickness","color","isVertical","lineClass","class","line","_$createComponent","when","children","fallback","_el$5","_tmpl$2","_$effect","_p$","_v$6","_v$7","root","e","_$setAttribute","t","_$className","undefined","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_$insert","_v$","_v$2","_v$3","_v$4","content","_v$5","a","o","i"],"sources":["../../../src/components/divider/divider.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { getColor } from '@utils/helper';\r\nimport { mergeProps, ParentComponent, Show } from 'solid-js';\r\nimport { DividerProps } from './divider.types';\r\n\r\nconst thicknessClass: Record<NonNullable<DividerProps['thickness']>, string> = {\r\n 1: 'border-px',\r\n 2: 'border-[2px]',\r\n 3: 'border-[3px]',\r\n 4: 'border-[4px]',\r\n};\r\n\r\nconst Divider: ParentComponent<DividerProps> = p => {\r\n p = mergeProps(\r\n {\r\n orientation: 'horizontal' as const,\r\n variant: 'solid' as const,\r\n align: 'center' as const,\r\n thickness: 1 as const,\r\n color: 'secondary' as const,\r\n },\r\n p,\r\n );\r\n\r\n const isVertical = () => p.orientation === 'vertical';\r\n\r\n const lineClass = () =>\r\n cn(\r\n p.color ? 'divi3' : 'divi4',\r\n isVertical() ? 'border-l' : 'border-t',\r\n thicknessClass[p.thickness!],\r\n p.variant === 'dashed' && 'border-dashed',\r\n p.variant === 'dotted' && 'border-dotted',\r\n p.class?.line,\r\n );\r\n\r\n return (\r\n <Show\r\n when={!!p.children}\r\n fallback={\r\n <hr\r\n role=\"separator\"\r\n aria-orientation={p.orientation}\r\n class={cn(\r\n 'divi1',\r\n p.color ? 'divi3' : 'divi4',\r\n isVertical() ? 'h-auto self-stretch border-l' : 'w-full border-t',\r\n thicknessClass[p.thickness!],\r\n p.variant === 'dashed' && 'border-dashed',\r\n p.variant === 'dotted' && 'border-dotted',\r\n getColor(p.color),\r\n p.class?.root,\r\n )}\r\n />\r\n }\r\n >\r\n <div\r\n role=\"separator\"\r\n aria-orientation={p.orientation}\r\n class={cn(\r\n 'divi2',\r\n isVertical() ? 'flex-col self-stretch' : 'w-full flex-row',\r\n getColor(p.color),\r\n p.class?.root,\r\n )}\r\n >\r\n <div\r\n class={cn(lineClass(), p.align === 'center' || p.align === 'end' ? 'flex-1' : 'w-4')}\r\n />\r\n\r\n <span\r\n class={cn(\r\n 'divi5',\r\n p.color ? 'divi6' : 'divi7',\r\n isVertical() ? 'py-3' : 'px-3',\r\n p.class?.content,\r\n )}\r\n >\r\n {p.children}\r\n </span>\r\n\r\n <div\r\n class={cn(lineClass(), p.align === 'center' || p.align === 'start' ? 'flex-1' : 'w-4')}\r\n />\r\n </div>\r\n </Show>\r\n );\r\n};\r\n\r\nexport { Divider };\r\n"],"mappings":"sVAKMM,EAAyE,CAC7E,EAAG,YACH,EAAG,eACH,EAAG,eACH,EAAG,eACJ,CAEKG,EAAyCC,GAAK,CAClDA,EAAIR,EACF,CACES,YAAa,aACbE,QAAS,QACTC,MAAO,SACPC,UAAW,EACXC,MAAO,YACR,CACDN,EACD,CAED,IAAMO,MAAmBP,EAAEC,cAAgB,WAErCO,MACJlB,EACEU,EAAEM,MAAQ,QAAU,QACpBC,GAAY,CAAG,WAAa,WAC5BX,EAAeI,EAAEK,WACjBL,EAAEG,UAAY,UAAY,gBAC1BH,EAAEG,UAAY,UAAY,gBAC1BH,EAAES,OAAOC,KACV,CAEH,OAAAC,EACGjB,EAAI,CAAA,IACHkB,MAAI,CAAA,MAAE,CAAC,CAACZ,EAAEa,UAAQ,IAClBC,UAAQ,CAAA,WAAA,CAAA,IAAAC,EAAAC,GAAA,CAaH,OAbGC,EAAAC,GAAA,CAAA,IAAAC,EAGcnB,EAAEC,YAAWmB,EACxB9B,EACL,QACAU,EAAEM,MAAQ,QAAU,QACpBC,GAAY,CAAG,+BAAiC,kBAChDX,EAAeI,EAAEK,WACjBL,EAAEG,UAAY,UAAY,gBAC1BH,EAAEG,UAAY,UAAY,gBAC1BZ,EAASS,EAAEM,MAAM,CACjBN,EAAES,OAAOY,KACV,CAAA,OAAAF,IAAAD,EAAAI,GAAAC,EAAAR,EAAA,mBAAAG,EAAAI,EAAAH,EAAA,CAAAC,IAAAF,EAAAM,GAAAC,EAAAV,EAAAG,EAAAM,EAAAJ,EAAA,CAAAF,GAAA,CAAAI,EAAAI,IAAAA,GAAAF,EAAAE,IAAAA,GAAA,CAAA,CAAAX,KAAA,EAAA,IAAAF,UAAA,CAAA,IAAAc,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAG,YAAAC,EAAAF,EAAAC,YA8BqF,OA9BrFE,EAAAH,MA0BA/B,EAAEa,SAAQ,CAAAI,EAAAC,GAAA,CAAA,IAAAiB,EApBKnC,EAAEC,YAAWmC,EACxB9C,EACL,QACAiB,GAAY,CAAG,wBAA0B,kBACzChB,EAASS,EAAEM,MAAM,CACjBN,EAAES,OAAOY,KACV,CAAAgB,EAGQ/C,EAAGkB,GAAW,CAAER,EAAEI,QAAU,UAAYJ,EAAEI,QAAU,MAAQ,SAAW,MAAM,CAAAkC,EAI7EhD,EACL,QACAU,EAAEM,MAAQ,QAAU,QACpBC,GAAY,CAAG,OAAS,OACxBP,EAAES,OAAO8B,QACV,CAAAC,EAMMlD,EAAGkB,GAAW,CAAER,EAAEI,QAAU,UAAYJ,EAAEI,QAAU,QAAU,SAAW,MAAM,CAAA,OAAA+B,IAAAjB,EAAAI,GAAAC,EAAAI,EAAA,mBAAAT,EAAAI,EAAAa,EAAA,CAAAC,IAAAlB,EAAAM,GAAAC,EAAAE,EAAAT,EAAAM,EAAAY,EAAA,CAAAC,IAAAnB,EAAAuB,GAAAhB,EAAAI,EAAAX,EAAAuB,EAAAJ,EAAA,CAAAC,IAAApB,EAAAwB,GAAAjB,EAAAM,EAAAb,EAAAwB,EAAAJ,EAAA,CAAAE,IAAAtB,EAAAyB,GAAAlB,EAAAQ,EAAAf,EAAAyB,EAAAH,EAAA,CAAAtB,GAAA,CAAAI,EAAAI,IAAAA,GAAAF,EAAAE,IAAAA,GAAAe,EAAAf,IAAAA,GAAAgB,EAAAhB,IAAAA,GAAAiB,EAAAjB,IAAAA,GAAA,CAAA,CAAAC,GAAA,CAAA"}
1
+ {"version":3,"file":"divider.js","names":["cn","getColor","mergeProps","ParentComponent","Show","DividerProps","thicknessClass","Record","NonNullable","Divider","p","orientation","const","variant","align","thickness","color","isVertical","lineClass","class","line","_$createComponent","when","children","fallback","_el$5","_tmpl$2","_$effect","_p$","_v$6","_v$7","root","e","_$setAttribute","t","_$className","undefined","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_$insert","_v$","_v$2","_v$3","_v$4","content","_v$5","a","o","i"],"sources":["../../../src/components/divider/divider.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { getColor } from '@utils/helper';\nimport { mergeProps, ParentComponent, Show } from 'solid-js';\nimport { DividerProps } from './divider.types';\n\nconst thicknessClass: Record<NonNullable<DividerProps['thickness']>, string> = {\n 1: 'border-px',\n 2: 'border-[2px]',\n 3: 'border-[3px]',\n 4: 'border-[4px]',\n};\n\nconst Divider: ParentComponent<DividerProps> = p => {\n p = mergeProps(\n {\n orientation: 'horizontal' as const,\n variant: 'solid' as const,\n align: 'center' as const,\n thickness: 1 as const,\n color: 'secondary' as const,\n },\n p,\n );\n\n const isVertical = () => p.orientation === 'vertical';\n\n const lineClass = () =>\n cn(\n p.color ? 'divi3' : 'divi4',\n isVertical() ? 'border-l' : 'border-t',\n thicknessClass[p.thickness!],\n p.variant === 'dashed' && 'border-dashed',\n p.variant === 'dotted' && 'border-dotted',\n p.class?.line,\n );\n\n return (\n <Show\n when={!!p.children}\n fallback={\n <hr\n role=\"separator\"\n aria-orientation={p.orientation}\n class={cn(\n 'divi1',\n p.color ? 'divi3' : 'divi4',\n isVertical() ? 'h-auto self-stretch border-l' : 'w-full border-t',\n thicknessClass[p.thickness!],\n p.variant === 'dashed' && 'border-dashed',\n p.variant === 'dotted' && 'border-dotted',\n getColor(p.color),\n p.class?.root,\n )}\n />\n }\n >\n <div\n role=\"separator\"\n aria-orientation={p.orientation}\n class={cn(\n 'divi2',\n isVertical() ? 'flex-col self-stretch' : 'w-full flex-row',\n getColor(p.color),\n p.class?.root,\n )}\n >\n <div\n class={cn(lineClass(), p.align === 'center' || p.align === 'end' ? 'flex-1' : 'w-4')}\n />\n\n <span\n class={cn(\n 'divi5',\n p.color ? 'divi6' : 'divi7',\n isVertical() ? 'py-3' : 'px-3',\n p.class?.content,\n )}\n >\n {p.children}\n </span>\n\n <div\n class={cn(lineClass(), p.align === 'center' || p.align === 'start' ? 'flex-1' : 'w-4')}\n />\n </div>\n </Show>\n );\n};\n\nexport { Divider };\n"],"mappings":"sVAKMM,EAAyE,CAC7E,EAAG,YACH,EAAG,eACH,EAAG,eACH,EAAG,eACJ,CAEKG,EAAyCC,GAAK,CAClDA,EAAIR,EACF,CACES,YAAa,aACbE,QAAS,QACTC,MAAO,SACPC,UAAW,EACXC,MAAO,YACR,CACDN,EACD,CAED,IAAMO,MAAmBP,EAAEC,cAAgB,WAErCO,MACJlB,EACEU,EAAEM,MAAQ,QAAU,QACpBC,GAAY,CAAG,WAAa,WAC5BX,EAAeI,EAAEK,WACjBL,EAAEG,UAAY,UAAY,gBAC1BH,EAAEG,UAAY,UAAY,gBAC1BH,EAAES,OAAOC,KACV,CAEH,OAAAC,EACGjB,EAAI,CAAA,IACHkB,MAAI,CAAA,MAAE,CAAC,CAACZ,EAAEa,UAAQ,IAClBC,UAAQ,CAAA,WAAA,CAAA,IAAAC,EAAAC,GAAA,CAaH,OAbGC,EAAAC,GAAA,CAAA,IAAAC,EAGcnB,EAAEC,YAAWmB,EACxB9B,EACL,QACAU,EAAEM,MAAQ,QAAU,QACpBC,GAAY,CAAG,+BAAiC,kBAChDX,EAAeI,EAAEK,WACjBL,EAAEG,UAAY,UAAY,gBAC1BH,EAAEG,UAAY,UAAY,gBAC1BZ,EAASS,EAAEM,MAAM,CACjBN,EAAES,OAAOY,KACV,CAAA,OAAAF,IAAAD,EAAAI,GAAAC,EAAAR,EAAA,mBAAAG,EAAAI,EAAAH,EAAA,CAAAC,IAAAF,EAAAM,GAAAC,EAAAV,EAAAG,EAAAM,EAAAJ,EAAA,CAAAF,GAAA,CAAAI,EAAAI,IAAAA,GAAAF,EAAAE,IAAAA,GAAA,CAAA,CAAAX,KAAA,EAAA,IAAAF,UAAA,CAAA,IAAAc,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAG,YAAAC,EAAAF,EAAAC,YA8BqF,OA9BrFE,EAAAH,MA0BA/B,EAAEa,SAAQ,CAAAI,EAAAC,GAAA,CAAA,IAAAiB,EApBKnC,EAAEC,YAAWmC,EACxB9C,EACL,QACAiB,GAAY,CAAG,wBAA0B,kBACzChB,EAASS,EAAEM,MAAM,CACjBN,EAAES,OAAOY,KACV,CAAAgB,EAGQ/C,EAAGkB,GAAW,CAAER,EAAEI,QAAU,UAAYJ,EAAEI,QAAU,MAAQ,SAAW,MAAM,CAAAkC,EAI7EhD,EACL,QACAU,EAAEM,MAAQ,QAAU,QACpBC,GAAY,CAAG,OAAS,OACxBP,EAAES,OAAO8B,QACV,CAAAC,EAMMlD,EAAGkB,GAAW,CAAER,EAAEI,QAAU,UAAYJ,EAAEI,QAAU,QAAU,SAAW,MAAM,CAAA,OAAA+B,IAAAjB,EAAAI,GAAAC,EAAAI,EAAA,mBAAAT,EAAAI,EAAAa,EAAA,CAAAC,IAAAlB,EAAAM,GAAAC,EAAAE,EAAAT,EAAAM,EAAAY,EAAA,CAAAC,IAAAnB,EAAAuB,GAAAhB,EAAAI,EAAAX,EAAAuB,EAAAJ,EAAA,CAAAC,IAAApB,EAAAwB,GAAAjB,EAAAM,EAAAb,EAAAwB,EAAAJ,EAAA,CAAAE,IAAAtB,EAAAyB,GAAAlB,EAAAQ,EAAAf,EAAAyB,EAAAH,EAAA,CAAAtB,GAAA,CAAAI,EAAAI,IAAAA,GAAAF,EAAAE,IAAAA,GAAAe,EAAAf,IAAAA,GAAAgB,EAAAhB,IAAAA,GAAAiB,EAAAjB,IAAAA,GAAA,CAAA,CAAAC,GAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.js","names":["cn","trackElement","untrackElement","ZIndex","ZIndexType","cva","VariantProps","createContext","createEffect","createSignal","createUniqueId","mergeProps","onCleanup","ParentComponent","useContext","dropdownStore","DropdownProps","CloseAllContext","variants","position","top","bottom","left","right","align","start","center","end","DropdownVariantsProps","TriggerRect","width","height","Dropdown","props","p","const","blockScroll","closeAll","parentCloseAll","shouldCloseAll","id","isControlled","open","undefined","triggerRef","HTMLDivElement","rect","setRect","captureRect","r","getBoundingClientRect","isOpen","trackTrigger","untrackTrigger","handleControlledOpen","close","closeDropdownOnUnmount","toggle","anchorStyle","Record","_el$","_tmpl$","_$addEventListener","_$use","el","ref","_$insert","triggerElement","Element","_$effect","_$className","class","trigger","_$createComponent","type","DROPDOWN","customValue","zIndex","children","_$memo","_el$4","_tmpl$3","$$click","_el$2","_tmpl$2","_el$3","firstChild","Provider","value","_p$","_v$","anchor","_v$2","_v$3","_v$4","_v$5","content","e","t","_$setAttribute","a","o","_$style","i","_$delegateEvents"],"sources":["../../../src/components/dropdown/dropdown.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { trackElement, untrackElement } from '@/utils/element-tracker';\r\nimport { ZIndex, ZIndexType } from '@components/z-index';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport {\r\n createContext,\r\n createEffect,\r\n createSignal,\r\n createUniqueId,\r\n mergeProps,\r\n onCleanup,\r\n ParentComponent,\r\n useContext,\r\n} from 'solid-js';\r\nimport { dropdownStore } from './dropdown.store';\r\nimport { DropdownProps } from './dropdown.types';\r\n\r\n/** Context truyền `closeAll` từ dropdown root xuống tất cả dropdown con */\r\nconst CloseAllContext = createContext(false);\r\n\r\nconst variants = cva('', {\r\n variants: {\r\n position: {\r\n top: 'dropdown-top',\r\n bottom: 'dropdown-bottom',\r\n left: 'dropdown-left',\r\n right: 'dropdown-right',\r\n },\r\n align: {\r\n start: 'dropdown-start',\r\n center: 'dropdown-center',\r\n end: 'dropdown-end',\r\n },\r\n },\r\n});\r\nexport type DropdownVariantsProps = VariantProps<typeof variants>;\r\n\r\ntype TriggerRect = {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n};\r\n\r\nexport const Dropdown: ParentComponent<DropdownProps> = props => {\r\n const p = mergeProps(\r\n {\r\n position: 'bottom' as const,\r\n align: 'start' as const,\r\n blockScroll: true,\r\n closeAll: false,\r\n },\r\n props,\r\n );\r\n\r\n // Kế thừa closeAll từ dropdown cha nếu có\r\n const parentCloseAll = useContext(CloseAllContext);\r\n const shouldCloseAll = () => p.closeAll || parentCloseAll;\r\n\r\n const id = createUniqueId();\r\n const isControlled = () => p.open !== undefined;\r\n\r\n let triggerRef!: HTMLDivElement;\r\n const [rect, setRect] = createSignal<TriggerRect | null>(null);\r\n\r\n const captureRect = () => {\r\n const r = triggerRef.getBoundingClientRect();\r\n setRect({ top: r.top, left: r.left, width: r.width, height: r.height });\r\n };\r\n\r\n const isOpen = () => {\r\n if (isControlled()) return !!p.open;\r\n return dropdownStore.isOpen(id);\r\n };\r\n\r\n createEffect(function trackTrigger() {\r\n if (!isOpen()) {\r\n untrackElement(triggerRef);\r\n return;\r\n }\r\n trackElement(triggerRef, r => setRect(r));\r\n onCleanup(function untrackTrigger() {\r\n untrackElement(triggerRef);\r\n });\r\n });\r\n\r\n createEffect(function handleControlledOpen() {\r\n if (!isControlled()) return;\r\n if (p.open) {\r\n captureRect();\r\n dropdownStore.open(id);\r\n } else {\r\n dropdownStore.close(id);\r\n }\r\n });\r\n\r\n onCleanup(function closeDropdownOnUnmount() {\r\n dropdownStore.close(id);\r\n untrackElement(triggerRef);\r\n });\r\n\r\n const toggle = () => {\r\n if (dropdownStore.isOpen(id)) {\r\n dropdownStore.close(id);\r\n } else {\r\n captureRect();\r\n dropdownStore.open(id);\r\n }\r\n };\r\n\r\n const close = () => (shouldCloseAll() ? dropdownStore.closeAll() : dropdownStore.close(id));\r\n\r\n const anchorStyle = () => {\r\n const r = rect();\r\n if (!r) return {};\r\n return {\r\n '--nd-t': `${r.top}px`,\r\n '--nd-l': `${r.left}px`,\r\n '--nd-w': `${r.width}px`,\r\n '--nd-h': `${r.height}px`,\r\n } as Record<string, string>;\r\n };\r\n return (\r\n <>\r\n <div\r\n ref={el => {\r\n triggerRef = el;\r\n const ref = p.ref;\r\n if (typeof ref === 'function') ref(el);\r\n }}\r\n class={cn('dp01', p.class?.trigger)}\r\n onClick={isControlled() ? undefined : toggle}\r\n >\r\n {p.triggerElement as Element}\r\n </div>\r\n\r\n <ZIndex\r\n open={isOpen()}\r\n type={ZIndexType.DROPDOWN}\r\n blockScroll={p.blockScroll}\r\n class={cn('inset-0', parentCloseAll && 'pointer-events-none')}\r\n customValue={p.zIndex}\r\n >\r\n {!parentCloseAll && <div class=\"dp02\" onClick={close} />}\r\n\r\n <div\r\n class={cn('dp03', p.class?.anchor)}\r\n data-pos={p.position}\r\n data-align={p.align}\r\n style={anchorStyle()}\r\n >\r\n <div class={cn('dp04', p.class?.content)}>\r\n <CloseAllContext.Provider value={shouldCloseAll()}>\r\n {p.children}\r\n </CloseAllContext.Provider>\r\n </div>\r\n </div>\r\n </ZIndex>\r\n </>\r\n );\r\n};\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"dropdown.js","names":["cn","trackElement","untrackElement","ZIndex","ZIndexType","cva","VariantProps","createContext","createEffect","createSignal","createUniqueId","mergeProps","onCleanup","ParentComponent","useContext","dropdownStore","DropdownProps","CloseAllContext","variants","position","top","bottom","left","right","align","start","center","end","DropdownVariantsProps","TriggerRect","width","height","Dropdown","props","p","const","blockScroll","closeAll","parentCloseAll","shouldCloseAll","id","isControlled","open","undefined","triggerRef","HTMLDivElement","rect","setRect","captureRect","r","getBoundingClientRect","isOpen","trackTrigger","untrackTrigger","handleControlledOpen","close","closeDropdownOnUnmount","toggle","anchorStyle","Record","_el$","_tmpl$","_$addEventListener","_$use","el","ref","_$insert","triggerElement","Element","_$effect","_$className","class","trigger","_$createComponent","type","DROPDOWN","customValue","zIndex","children","_$memo","_el$4","_tmpl$3","$$click","_el$2","_tmpl$2","_el$3","firstChild","Provider","value","_p$","_v$","anchor","_v$2","_v$3","_v$4","_v$5","content","e","t","_$setAttribute","a","o","_$style","i","_$delegateEvents"],"sources":["../../../src/components/dropdown/dropdown.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { trackElement, untrackElement } from '@/utils/element-tracker';\nimport { ZIndex, ZIndexType } from '@components/z-index';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport {\n createContext,\n createEffect,\n createSignal,\n createUniqueId,\n mergeProps,\n onCleanup,\n ParentComponent,\n useContext,\n} from 'solid-js';\nimport { dropdownStore } from './dropdown.store';\nimport { DropdownProps } from './dropdown.types';\n\n/** Context truyền `closeAll` từ dropdown root xuống tất cả dropdown con */\nconst CloseAllContext = createContext(false);\n\nconst variants = cva('', {\n variants: {\n position: {\n top: 'dropdown-top',\n bottom: 'dropdown-bottom',\n left: 'dropdown-left',\n right: 'dropdown-right',\n },\n align: {\n start: 'dropdown-start',\n center: 'dropdown-center',\n end: 'dropdown-end',\n },\n },\n});\nexport type DropdownVariantsProps = VariantProps<typeof variants>;\n\ntype TriggerRect = {\n top: number;\n left: number;\n width: number;\n height: number;\n};\n\nexport const Dropdown: ParentComponent<DropdownProps> = props => {\n const p = mergeProps(\n {\n position: 'bottom' as const,\n align: 'start' as const,\n blockScroll: true,\n closeAll: false,\n },\n props,\n );\n\n // Kế thừa closeAll từ dropdown cha nếu có\n const parentCloseAll = useContext(CloseAllContext);\n const shouldCloseAll = () => p.closeAll || parentCloseAll;\n\n const id = createUniqueId();\n const isControlled = () => p.open !== undefined;\n\n let triggerRef!: HTMLDivElement;\n const [rect, setRect] = createSignal<TriggerRect | null>(null);\n\n const captureRect = () => {\n const r = triggerRef.getBoundingClientRect();\n setRect({ top: r.top, left: r.left, width: r.width, height: r.height });\n };\n\n const isOpen = () => {\n if (isControlled()) return !!p.open;\n return dropdownStore.isOpen(id);\n };\n\n createEffect(function trackTrigger() {\n if (!isOpen()) {\n untrackElement(triggerRef);\n return;\n }\n trackElement(triggerRef, r => setRect(r));\n onCleanup(function untrackTrigger() {\n untrackElement(triggerRef);\n });\n });\n\n createEffect(function handleControlledOpen() {\n if (!isControlled()) return;\n if (p.open) {\n captureRect();\n dropdownStore.open(id);\n } else {\n dropdownStore.close(id);\n }\n });\n\n onCleanup(function closeDropdownOnUnmount() {\n dropdownStore.close(id);\n untrackElement(triggerRef);\n });\n\n const toggle = () => {\n if (dropdownStore.isOpen(id)) {\n dropdownStore.close(id);\n } else {\n captureRect();\n dropdownStore.open(id);\n }\n };\n\n const close = () => (shouldCloseAll() ? dropdownStore.closeAll() : dropdownStore.close(id));\n\n const anchorStyle = () => {\n const r = rect();\n if (!r) return {};\n return {\n '--nd-t': `${r.top}px`,\n '--nd-l': `${r.left}px`,\n '--nd-w': `${r.width}px`,\n '--nd-h': `${r.height}px`,\n } as Record<string, string>;\n };\n return (\n <>\n <div\n ref={el => {\n triggerRef = el;\n const ref = p.ref;\n if (typeof ref === 'function') ref(el);\n }}\n class={cn('dp01', p.class?.trigger)}\n onClick={isControlled() ? undefined : toggle}\n >\n {p.triggerElement as Element}\n </div>\n\n <ZIndex\n open={isOpen()}\n type={ZIndexType.DROPDOWN}\n blockScroll={p.blockScroll}\n class={cn('inset-0', parentCloseAll && 'pointer-events-none')}\n customValue={p.zIndex}\n >\n {!parentCloseAll && <div class=\"dp02\" onClick={close} />}\n\n <div\n class={cn('dp03', p.class?.anchor)}\n data-pos={p.position}\n data-align={p.align}\n style={anchorStyle()}\n >\n <div class={cn('dp04', p.class?.content)}>\n <CloseAllContext.Provider value={shouldCloseAll()}>\n {p.children}\n </CloseAllContext.Provider>\n </div>\n </div>\n </ZIndex>\n </>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.store.js","names":[],"sources":["../../../src/components/dropdown/dropdown.store.ts"],"sourcesContent":["import { createSignal } from 'solid-js';\r\n\r\nconst [openIds, setOpenIds] = createSignal<ReadonlySet<string>>(new Set(), { equals: false });\r\n\r\nexport const dropdownStore = {\r\n openIds,\r\n open: (id: string) =>\r\n setOpenIds(prev => {\r\n if (prev.has(id)) return prev;\r\n const next = new Set(prev);\r\n next.add(id);\r\n return next;\r\n }),\r\n close: (id: string) =>\r\n setOpenIds(prev => {\r\n if (!prev.has(id)) return prev;\r\n const next = new Set(prev);\r\n next.delete(id);\r\n return next;\r\n }),\r\n closeAll: () => setOpenIds(new Set<string>()),\r\n isOpen: (id: string) => openIds().has(id),\r\n};\r\n"],"mappings":"wCAEA,GAAM,CAAC,EAAS,GAAc,EAAkC,IAAI,IAAO,CAAE,OAAQ,GAAO,CAAC,CAEhF,EAAgB,CAC3B,UACA,KAAO,GACL,EAAW,GAAQ,CACjB,GAAI,EAAK,IAAI,EAAG,CAAE,OAAO,EACzB,IAAM,EAAO,IAAI,IAAI,EAAK,CAE1B,OADA,EAAK,IAAI,EAAG,CACL,GACP,CACJ,MAAQ,GACN,EAAW,GAAQ,CACjB,GAAI,CAAC,EAAK,IAAI,EAAG,CAAE,OAAO,EAC1B,IAAM,EAAO,IAAI,IAAI,EAAK,CAE1B,OADA,EAAK,OAAO,EAAG,CACR,GACP,CACJ,aAAgB,EAAW,IAAI,IAAc,CAC7C,OAAS,GAAe,GAAS,CAAC,IAAI,EAAG,CAC1C"}
1
+ {"version":3,"file":"dropdown.store.js","names":[],"sources":["../../../src/components/dropdown/dropdown.store.ts"],"sourcesContent":["import { createSignal } from 'solid-js';\n\nconst [openIds, setOpenIds] = createSignal<ReadonlySet<string>>(new Set(), { equals: false });\n\nexport const dropdownStore = {\n openIds,\n open: (id: string) =>\n setOpenIds(prev => {\n if (prev.has(id)) return prev;\n const next = new Set(prev);\n next.add(id);\n return next;\n }),\n close: (id: string) =>\n setOpenIds(prev => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n }),\n closeAll: () => setOpenIds(new Set<string>()),\n isOpen: (id: string) => openIds().has(id),\n};\n"],"mappings":"wCAEA,GAAM,CAAC,EAAS,GAAc,EAAkC,IAAI,IAAO,CAAE,OAAQ,GAAO,CAAC,CAEhF,EAAgB,CAC3B,UACA,KAAO,GACL,EAAW,GAAQ,CACjB,GAAI,EAAK,IAAI,EAAG,CAAE,OAAO,EACzB,IAAM,EAAO,IAAI,IAAI,EAAK,CAE1B,OADA,EAAK,IAAI,EAAG,CACL,GACP,CACJ,MAAQ,GACN,EAAW,GAAQ,CACjB,GAAI,CAAC,EAAK,IAAI,EAAG,CAAE,OAAO,EAC1B,IAAM,EAAO,IAAI,IAAI,EAAK,CAE1B,OADA,EAAK,OAAO,EAAG,CACR,GACP,CACJ,aAAgB,EAAW,IAAI,IAAc,CAC7C,OAAS,GAAe,GAAS,CAAC,IAAI,EAAG,CAC1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"float-button.js","names":["cn","For","Match","mergeProps","Show","Switch","Component","Button","FloatButtonProps","DEFAULT_PROPS","type","color","size","animate","closeIcon","label","icon","renderAnimateClass","AnimateInfinite","Record","ripple","pulse","bounce","heartBeat","headShake","swing","jello","renderBadgeWidth","count","FloatButtonBadge","badge","p","_el$","_tmpl$","_el$2","firstChild","_$insert","_c$","_$memo","_el$3","_tmpl$2","_$effect","_$className","class","FloatButton","props","_$createComponent","children","when","_el$4","_tmpl$3","_el$5","_$addEventListener","onClickOpen","variant","shape","tabIndex","style","width","height","_el$6","_tmpl$5","_el$7","_el$8","nextSibling","_el$9","_c$2","onClickClose","_$setStyleProperty","Element","_el$0","_tmpl$4","each","actions","item","_el$1","_tmpl$6","index","console","warn","_$delegateEvents"],"sources":["../../../src/components/float-button/float-button.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { For, Match, mergeProps, Show, Switch, type Component } from 'solid-js';\r\nimport { Button } from '../button';\r\nimport type { FloatButtonProps } from './float-button.types';\r\n\r\nconst DEFAULT_PROPS: FloatButtonProps = {\r\n type: 'default',\r\n color: 'var(--color-warning)',\r\n size: 24,\r\n animate: 'none',\r\n closeIcon: {\r\n label: 'Close',\r\n icon: 'X',\r\n },\r\n};\r\n\r\nexport function renderAnimateClass(animate: string | undefined) {\r\n const AnimateInfinite: Record<string, string> = {\r\n ripple: 'animate-ripple',\r\n pulse: 'animate-pulse',\r\n bounce: 'animate-bounce',\r\n heartBeat: 'animate-heartBeat',\r\n headShake: 'animate-headShake',\r\n swing: 'animate-swing',\r\n jello: 'animate-jello',\r\n };\r\n return animate ? AnimateInfinite[animate] : '';\r\n}\r\nfunction renderBadgeWidth(count: number): string {\r\n if (count >= 10_000) return 'px-1 translate-x-2';\r\n if (count >= 1000) return 'px-1 translate-x-1 -translate-y-1';\r\n if (count >= 100) return 'px-1';\r\n return 'w-5';\r\n}\r\nconst FloatButtonBadge: Component<{\r\n badge?: FloatButtonProps['badge'];\r\n}> = p => {\r\n return (\r\n <div class=\"absolute -top-2 -right-2\">\r\n <div\r\n class={cn(\r\n 'bg-error flex h-5 cursor-pointer rounded-full text-xs text-white *:m-auto',\r\n renderBadgeWidth(p.badge?.count!),\r\n p.badge?.animate && `animate-${p.badge?.animate}`,\r\n p.badge?.class,\r\n )}\r\n >\r\n {p.badge?.count && <div>{p.badge?.count}</div>}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport const FloatButton: Component<FloatButtonProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n const size = `${p.size}px`;\r\n\r\n return (\r\n <Switch>\r\n <Match when={p.type === 'single'}>\r\n <div class={cn('fab pointer-events-auto', p.class)} onClick={p.onClickOpen}>\r\n <div class=\"relative\">\r\n <Button\r\n icon={p.icon}\r\n variant=\"solid\"\r\n shape=\"circle\"\r\n class={cn('fab-open border-0', renderAnimateClass(p.animate))}\r\n tabIndex={0}\r\n style={{\r\n 'background-color': p.color,\r\n width: size,\r\n height: size,\r\n ['--innner-color']: p.color,\r\n ['--btn-color']: p.color,\r\n }}\r\n />\r\n <Show when={p.badge?.count}>\r\n <FloatButtonBadge badge={p.badge} />\r\n </Show>\r\n </div>\r\n </div>\r\n </Match>\r\n <Match when={p.type !== 'single'}>\r\n <div class={cn('fab', p.type === 'flower' && 'fab-flower', p.class)}>\r\n <div class=\"relative\" tabIndex={0}>\r\n <Button\r\n icon={p.icon}\r\n variant=\"solid\"\r\n shape=\"circle\"\r\n class={cn('fab-open border-0', renderAnimateClass(p.animate))}\r\n style={{\r\n 'background-color': p.color,\r\n width: size,\r\n height: size,\r\n ['--innner-color']: p.color,\r\n }}\r\n />\r\n <Show when={p.badge?.count}>\r\n <FloatButtonBadge badge={p.badge} />\r\n </Show>\r\n </div>\r\n\r\n <div class=\"fab-close\">\r\n {p.type === 'default' && p.closeIcon?.label}\r\n <div\r\n class=\"float-close btn btn-circle btn-error\"\r\n style={{ width: size, height: size }}\r\n onClick={p.closeIcon?.onClickClose}\r\n >\r\n {(p.closeIcon?.icon as Element) ?? 'orange'}\r\n </div>\r\n </div>\r\n <Switch>\r\n <Match when={p.type === 'default'}>\r\n <div class=\"float-menu flex flex-col items-end\">\r\n <For each={p.actions}>\r\n {item => {\r\n return <div class=\"flex gap-2\">{item as Element}</div>;\r\n }}\r\n </For>\r\n </div>\r\n </Match>\r\n <Match when={p.type === 'flower'}>\r\n <For each={p.actions}>\r\n {(item, index) => {\r\n if (index() > 3) {\r\n console.warn(\r\n 'Chỉ có thể nhận tối đa 4 component. Cần xóa các Component sau: ',\r\n item,\r\n );\r\n return;\r\n }\r\n return <>{item}</>;\r\n }}\r\n </For>\r\n </Match>\r\n </Switch>\r\n </div>\r\n </Match>\r\n </Switch>\r\n );\r\n};\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"float-button.js","names":["cn","For","Match","mergeProps","Show","Switch","Component","Button","FloatButtonProps","DEFAULT_PROPS","type","color","size","animate","closeIcon","label","icon","renderAnimateClass","AnimateInfinite","Record","ripple","pulse","bounce","heartBeat","headShake","swing","jello","renderBadgeWidth","count","FloatButtonBadge","badge","p","_el$","_tmpl$","_el$2","firstChild","_$insert","_c$","_$memo","_el$3","_tmpl$2","_$effect","_$className","class","FloatButton","props","_$createComponent","children","when","_el$4","_tmpl$3","_el$5","_$addEventListener","onClickOpen","variant","shape","tabIndex","style","width","height","_el$6","_tmpl$5","_el$7","_el$8","nextSibling","_el$9","_c$2","onClickClose","_$setStyleProperty","Element","_el$0","_tmpl$4","each","actions","item","_el$1","_tmpl$6","index","console","warn","_$delegateEvents"],"sources":["../../../src/components/float-button/float-button.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { For, Match, mergeProps, Show, Switch, type Component } from 'solid-js';\nimport { Button } from '../button';\nimport type { FloatButtonProps } from './float-button.types';\n\nconst DEFAULT_PROPS: FloatButtonProps = {\n type: 'default',\n color: 'var(--color-warning)',\n size: 24,\n animate: 'none',\n closeIcon: {\n label: 'Close',\n icon: 'X',\n },\n};\n\nexport function renderAnimateClass(animate: string | undefined) {\n const AnimateInfinite: Record<string, string> = {\n ripple: 'animate-ripple',\n pulse: 'animate-pulse',\n bounce: 'animate-bounce',\n heartBeat: 'animate-heartBeat',\n headShake: 'animate-headShake',\n swing: 'animate-swing',\n jello: 'animate-jello',\n };\n return animate ? AnimateInfinite[animate] : '';\n}\nfunction renderBadgeWidth(count: number): string {\n if (count >= 10_000) return 'px-1 translate-x-2';\n if (count >= 1000) return 'px-1 translate-x-1 -translate-y-1';\n if (count >= 100) return 'px-1';\n return 'w-5';\n}\nconst FloatButtonBadge: Component<{\n badge?: FloatButtonProps['badge'];\n}> = p => {\n return (\n <div class=\"absolute -top-2 -right-2\">\n <div\n class={cn(\n 'bg-error flex h-5 cursor-pointer rounded-full text-xs text-white *:m-auto',\n renderBadgeWidth(p.badge?.count!),\n p.badge?.animate && `animate-${p.badge?.animate}`,\n p.badge?.class,\n )}\n >\n {p.badge?.count && <div>{p.badge?.count}</div>}\n </div>\n </div>\n );\n};\n\nexport const FloatButton: Component<FloatButtonProps> = props => {\n const p = mergeProps(DEFAULT_PROPS, props);\n const size = `${p.size}px`;\n\n return (\n <Switch>\n <Match when={p.type === 'single'}>\n <div class={cn('fab pointer-events-auto', p.class)} onClick={p.onClickOpen}>\n <div class=\"relative\">\n <Button\n icon={p.icon}\n variant=\"solid\"\n shape=\"circle\"\n class={cn('fab-open border-0', renderAnimateClass(p.animate))}\n tabIndex={0}\n style={{\n 'background-color': p.color,\n width: size,\n height: size,\n ['--innner-color']: p.color,\n ['--btn-color']: p.color,\n }}\n />\n <Show when={p.badge?.count}>\n <FloatButtonBadge badge={p.badge} />\n </Show>\n </div>\n </div>\n </Match>\n <Match when={p.type !== 'single'}>\n <div class={cn('fab', p.type === 'flower' && 'fab-flower', p.class)}>\n <div class=\"relative\" tabIndex={0}>\n <Button\n icon={p.icon}\n variant=\"solid\"\n shape=\"circle\"\n class={cn('fab-open border-0', renderAnimateClass(p.animate))}\n style={{\n 'background-color': p.color,\n width: size,\n height: size,\n ['--innner-color']: p.color,\n }}\n />\n <Show when={p.badge?.count}>\n <FloatButtonBadge badge={p.badge} />\n </Show>\n </div>\n\n <div class=\"fab-close\">\n {p.type === 'default' && p.closeIcon?.label}\n <div\n class=\"float-close btn btn-circle btn-error\"\n style={{ width: size, height: size }}\n onClick={p.closeIcon?.onClickClose}\n >\n {(p.closeIcon?.icon as Element) ?? 'orange'}\n </div>\n </div>\n <Switch>\n <Match when={p.type === 'default'}>\n <div class=\"float-menu flex flex-col items-end\">\n <For each={p.actions}>\n {item => {\n return <div class=\"flex gap-2\">{item as Element}</div>;\n }}\n </For>\n </div>\n </Match>\n <Match when={p.type === 'flower'}>\n <For each={p.actions}>\n {(item, index) => {\n if (index() > 3) {\n console.warn(\n 'Chỉ có thể nhận tối đa 4 component. Cần xóa các Component sau: ',\n item,\n );\n return;\n }\n return <>{item}</>;\n }}\n </For>\n </Match>\n </Switch>\n </div>\n </Match>\n </Switch>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hover-3d-image.js","names":["cn","Image","ImagePreview","Component","createSignal","Show","ImagePreviewProps","Hover3DImage","image","preview","enabled","previewOptions","class","Partial","Record","p","open","setOpen","previewEnabled","_el$","_tmpl$","_el$2","firstChild","_el$3","$$click","_$spread","_$mergeProps","_$effect","_p$","_v$","root","_v$2","figure","e","_$className","t","undefined","_$createComponent","when","children","src","imageName","_$memo","alt","onClose","_$delegateEvents"],"sources":["../../../src/components/hover-3d-image/hover-3d-image.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { Image } from '@/utils/helper';\r\nimport { ImagePreview } from '@components/image-preview';\r\nimport { Component, createSignal, Show } from 'solid-js';\r\nimport { ImagePreviewProps } from '../image-preview/image-preview';\r\n\r\nexport const Hover3DImage: Component<{\r\n image: Image;\r\n /** Bật/tắt tính năng click để preview ảnh. @default true */\r\n preview?: boolean | { enabled: true; previewOptions?: ImagePreviewProps };\r\n class?: Partial<Record<'root' | 'figure' | 'image', string>>;\r\n}> = p => {\r\n const [open, setOpen] = createSignal(false);\r\n const previewEnabled = () => p.preview !== false;\r\n\r\n return (\r\n <>\r\n <div\r\n class={cn('hover-3d', previewEnabled() && 'cursor-zoom-in', p.class?.root)}\r\n onClick={() => previewEnabled() && setOpen(true)}\r\n >\r\n <figure class={cn('rounded-2xl', p.class?.figure)}>\r\n <img {...p.image} />\r\n </figure>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n\r\n <Show when={open()}>\r\n <ImagePreview\r\n src={p.image.src}\r\n imageName={typeof p.image.alt === 'string' ? p.image.alt : undefined}\r\n onClose={() => setOpen(false)}\r\n {...(typeof p.preview === 'object' ? p.preview.previewOptions : undefined)}\r\n />\r\n </Show>\r\n </>\r\n );\r\n};\r\n"],"mappings":"qaAMaO,EAKRQ,GAAK,CACR,GAAM,CAACC,EAAMC,GAAWb,EAAa,GAAM,CACrCc,MAAuBH,EAAEN,UAAY,GAE3C,MAAA,MAAA,CAAA,IAAAU,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAC,WAMuD,MANvDH,GAAAK,YAIqBN,GAAgB,EAAID,EAAQ,GAAK,CAAAQ,EAAAF,EAAAG,MAGrCX,EAAEP,MAAK,CAAA,GAAA,GAAA,CAAAmB,EAAAC,GAAA,CAAA,IAAAC,EAJX7B,EAAG,WAAYkB,GAAgB,EAAI,iBAAkBH,EAAEH,OAAOkB,KAAK,CAAAC,EAG3D/B,EAAG,cAAee,EAAEH,OAAOoB,OAAO,CAAA,OAAAH,IAAAD,EAAAK,GAAAC,EAAAf,EAAAS,EAAAK,EAAAJ,EAAA,CAAAE,IAAAH,EAAAO,GAAAD,EAAAb,EAAAO,EAAAO,EAAAJ,EAAA,CAAAH,GAAA,CAAAK,EAAAG,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAjB,KAAA,CAAAkB,EAalDhC,EAAI,CAAA,IAACiC,MAAI,CAAA,OAAEtB,GAAM,EAAA,IAAAuB,UAAA,CAAA,OAAAF,EACfnC,EAAYwB,EAAA,CAAA,IACXc,KAAG,CAAA,OAAEzB,EAAEP,MAAMgC,KAAG,IAChBC,WAAS,CAAA,OAAEC,MAAA,OAAO3B,EAAEP,MAAMmC,KAAQ,SAAQ,EAAA,CAAG5B,EAAEP,MAAMmC,IAAMP,IAAAA,IAC3DQ,YAAe3B,EAAQ,GAAK,CAAC,KACxB,OAAOF,EAAEN,SAAY,SAAWM,EAAEN,QAAQE,eAAiByB,IAAAA,GAAS,CAAA,EAAA,CAAA,CAAA,EAKjFS,EAAA,CAAA,QAAA,CAAA"}
1
+ {"version":3,"file":"hover-3d-image.js","names":["cn","Image","ImagePreview","Component","createSignal","Show","ImagePreviewProps","Hover3DImage","image","preview","enabled","previewOptions","class","Partial","Record","p","open","setOpen","previewEnabled","_el$","_tmpl$","_el$2","firstChild","_el$3","$$click","_$spread","_$mergeProps","_$effect","_p$","_v$","root","_v$2","figure","e","_$className","t","undefined","_$createComponent","when","children","src","imageName","_$memo","alt","onClose","_$delegateEvents"],"sources":["../../../src/components/hover-3d-image/hover-3d-image.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { Image } from '@/utils/helper';\nimport { ImagePreview } from '@components/image-preview';\nimport { Component, createSignal, Show } from 'solid-js';\nimport { ImagePreviewProps } from '../image-preview/image-preview';\n\nexport const Hover3DImage: Component<{\n image: Image;\n /** Bật/tắt tính năng click để preview ảnh. @default true */\n preview?: boolean | { enabled: true; previewOptions?: ImagePreviewProps };\n class?: Partial<Record<'root' | 'figure' | 'image', string>>;\n}> = p => {\n const [open, setOpen] = createSignal(false);\n const previewEnabled = () => p.preview !== false;\n\n return (\n <>\n <div\n class={cn('hover-3d', previewEnabled() && 'cursor-zoom-in', p.class?.root)}\n onClick={() => previewEnabled() && setOpen(true)}\n >\n <figure class={cn('rounded-2xl', p.class?.figure)}>\n <img {...p.image} />\n </figure>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n\n <Show when={open()}>\n <ImagePreview\n src={p.image.src}\n imageName={typeof p.image.alt === 'string' ? p.image.alt : undefined}\n onClose={() => setOpen(false)}\n {...(typeof p.preview === 'object' ? p.preview.previewOptions : undefined)}\n />\n </Show>\n </>\n );\n};\n"],"mappings":"qaAMaO,EAKRQ,GAAK,CACR,GAAM,CAACC,EAAMC,GAAWb,EAAa,GAAM,CACrCc,MAAuBH,EAAEN,UAAY,GAE3C,MAAA,MAAA,CAAA,IAAAU,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAC,WAMuD,MANvDH,GAAAK,YAIqBN,GAAgB,EAAID,EAAQ,GAAK,CAAAQ,EAAAF,EAAAG,MAGrCX,EAAEP,MAAK,CAAA,GAAA,GAAA,CAAAmB,EAAAC,GAAA,CAAA,IAAAC,EAJX7B,EAAG,WAAYkB,GAAgB,EAAI,iBAAkBH,EAAEH,OAAOkB,KAAK,CAAAC,EAG3D/B,EAAG,cAAee,EAAEH,OAAOoB,OAAO,CAAA,OAAAH,IAAAD,EAAAK,GAAAC,EAAAf,EAAAS,EAAAK,EAAAJ,EAAA,CAAAE,IAAAH,EAAAO,GAAAD,EAAAb,EAAAO,EAAAO,EAAAJ,EAAA,CAAAH,GAAA,CAAAK,EAAAG,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAjB,KAAA,CAAAkB,EAalDhC,EAAI,CAAA,IAACiC,MAAI,CAAA,OAAEtB,GAAM,EAAA,IAAAuB,UAAA,CAAA,OAAAF,EACfnC,EAAYwB,EAAA,CAAA,IACXc,KAAG,CAAA,OAAEzB,EAAEP,MAAMgC,KAAG,IAChBC,WAAS,CAAA,OAAEC,MAAA,OAAO3B,EAAEP,MAAMmC,KAAQ,SAAQ,EAAA,CAAG5B,EAAEP,MAAMmC,IAAMP,IAAAA,IAC3DQ,YAAe3B,EAAQ,GAAK,CAAC,KACxB,OAAOF,EAAEN,SAAY,SAAWM,EAAEN,QAAQE,eAAiByB,IAAAA,GAAS,CAAA,EAAA,CAAA,CAAA,EAKjFS,EAAA,CAAA,QAAA,CAAA"}