@moontra/moonui-pro 2.5.13 → 2.5.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1751,7 +1751,7 @@ function styleInject(css2, { insertAt } = {}) {
1751
1751
  }
1752
1752
 
1753
1753
  // src/styles/index.css
1754
- styleInject('.chart-animate-in {\n animation: chartFadeIn 0.5s ease-out;\n}\n.chart-point-pulse {\n animation: pointPulse 2s ease-in-out infinite;\n}\n.chart-gradient-shift {\n animation: gradientShift 3s ease-in-out infinite;\n}\n.recharts-tooltip-wrapper {\n outline: none !important;\n}\n.recharts-tooltip-cursor {\n fill: hsl(var(--muted) / 0.1);\n}\n.recharts-legend-item {\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.recharts-legend-item:hover {\n transform: translateY(-1px);\n}\n.recharts-line-curve,\n.recharts-area-curve {\n transition: all 0.3s ease;\n}\n.recharts-bar-rectangle {\n transition: all 0.2s ease;\n}\n.recharts-bar-rectangle:hover {\n filter: brightness(1.1);\n}\n.recharts-pie-sector {\n transition: all 0.2s ease;\n cursor: pointer;\n}\n.recharts-pie-sector:hover {\n filter: brightness(1.1);\n transform: scale(1.02);\n}\n.recharts-brush {\n fill: hsl(var(--primary) / 0.1);\n stroke: hsl(var(--primary) / 0.3);\n}\n.recharts-brush-slide {\n fill: hsl(var(--primary) / 0.2);\n fill-opacity: 0.5;\n}\n.recharts-cartesian-grid-horizontal line,\n.recharts-cartesian-grid-vertical line {\n stroke-dasharray: 3 3;\n opacity: 0.3;\n}\n.recharts-xAxis .recharts-cartesian-axis-tick-value,\n.recharts-yAxis .recharts-cartesian-axis-tick-value {\n fill: hsl(var(--muted-foreground));\n font-size: 11px;\n}\n.dark .recharts-tooltip-wrapper {\n filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.3));\n}\n.dark .recharts-cartesian-grid-horizontal line,\n.dark .recharts-cartesian-grid-vertical line {\n opacity: 0.2;\n}\n.sparkline-chart .recharts-surface {\n overflow: visible !important;\n}\n@keyframes chartSkeletonPulse {\n 0%, 100% {\n opacity: 0.5;\n transform: scaleY(0.8);\n }\n 50% {\n opacity: 1;\n transform: scaleY(1);\n }\n}\n@keyframes chartFadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n@keyframes pointPulse {\n 0%, 100% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(1.2);\n opacity: 0.8;\n }\n}\n@keyframes gradientShift {\n 0%, 100% {\n stop-opacity: 0.8;\n }\n 50% {\n stop-opacity: 0.4;\n }\n}\n.chart-legend-item {\n position: relative;\n overflow: hidden;\n}\n.chart-legend-item::before {\n content: "";\n position: absolute;\n top: 0;\n left: -100%;\n width: 100%;\n height: 100%;\n background: linear-gradient(90deg, transparent, hsl(var(--primary) / 0.1), transparent);\n transition: left 0.5s ease;\n}\n.chart-legend-item:hover::before {\n left: 100%;\n}\n.chart-crosshair {\n stroke: hsl(var(--muted-foreground));\n stroke-width: 1;\n stroke-dasharray: 5 5;\n opacity: 0.5;\n}\n.chart-minimap {\n border: 1px solid hsl(var(--border));\n border-radius: var(--radius-md);\n background: hsl(var(--background) / 0.8);\n -webkit-backdrop-filter: blur(8px);\n backdrop-filter: blur(8px);\n}\n.chart-export-menu {\n animation: slideDown 0.2s ease-out;\n}\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.chart-zoom-indicator {\n background: hsl(var(--background) / 0.9);\n -webkit-backdrop-filter: blur(8px);\n backdrop-filter: blur(8px);\n border: 1px solid hsl(var(--border));\n border-radius: var(--radius-full);\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n font-weight: 500;\n}\n.recharts-surface {\n will-change: transform;\n}\n.recharts-line,\n.recharts-area,\n.recharts-bar {\n will-change: opacity, transform;\n}\n@media (max-width: 640px) {\n .recharts-wrapper {\n font-size: 0.875rem;\n }\n .recharts-legend-wrapper {\n margin-top: 1rem !important;\n }\n}\n@media print {\n .chart-controls {\n display: none !important;\n }\n .recharts-tooltip-wrapper {\n display: none !important;\n }\n}\n.react-grid-layout {\n position: relative;\n transition: height 200ms ease;\n}\n.react-grid-item {\n transition: all 200ms ease;\n transition-property:\n left,\n top,\n width,\n height;\n}\n.react-grid-item img {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.react-grid-item.cssTransforms {\n transition-property:\n transform,\n width,\n height;\n}\n.react-grid-item.resizing {\n transition: none;\n z-index: 1;\n will-change: width, height;\n}\n.react-grid-item.react-draggable-dragging {\n transition: none;\n z-index: 3;\n will-change: transform;\n}\n.react-grid-item.dropping {\n visibility: hidden;\n}\n.react-grid-item.react-grid-placeholder {\n background: red;\n opacity: 0.2;\n transition-duration: 100ms;\n z-index: 2;\n -webkit-user-select: none;\n -moz-user-select: none;\n -o-user-select: none;\n user-select: none;\n}\n.react-grid-item.react-grid-placeholder.placeholder-resizing {\n transition: none;\n}\n.react-grid-item > .react-resizable-handle {\n position: absolute;\n width: 20px;\n height: 20px;\n}\n.react-grid-item > .react-resizable-handle::after {\n content: "";\n position: absolute;\n right: 3px;\n bottom: 3px;\n width: 5px;\n height: 5px;\n border-right: 2px solid rgba(0, 0, 0, 0.4);\n border-bottom: 2px solid rgba(0, 0, 0, 0.4);\n}\n.react-resizable-hide > .react-resizable-handle {\n display: none;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-sw {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n transform: rotate(90deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-se {\n bottom: 0;\n right: 0;\n cursor: se-resize;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-nw {\n top: 0;\n left: 0;\n cursor: nw-resize;\n transform: rotate(180deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-ne {\n top: 0;\n right: 0;\n cursor: ne-resize;\n transform: rotate(270deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-w,\n.react-grid-item > .react-resizable-handle.react-resizable-handle-e {\n top: 50%;\n margin-top: -10px;\n cursor: ew-resize;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-w {\n left: 0;\n transform: rotate(135deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-e {\n right: 0;\n transform: rotate(315deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-n,\n.react-grid-item > .react-resizable-handle.react-resizable-handle-s {\n left: 50%;\n margin-left: -10px;\n cursor: ns-resize;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-n {\n top: 0;\n transform: rotate(225deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-s {\n bottom: 0;\n transform: rotate(45deg);\n}\n.react-resizable {\n position: relative;\n}\n.react-resizable-handle {\n position: absolute;\n width: 20px;\n height: 20px;\n background-repeat: no-repeat;\n background-origin: content-box;\n box-sizing: border-box;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+);\n background-position: bottom right;\n padding: 0 3px 3px 0;\n}\n.react-resizable-handle-sw {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n transform: rotate(90deg);\n}\n.react-resizable-handle-se {\n bottom: 0;\n right: 0;\n cursor: se-resize;\n}\n.react-resizable-handle-nw {\n top: 0;\n left: 0;\n cursor: nw-resize;\n transform: rotate(180deg);\n}\n.react-resizable-handle-ne {\n top: 0;\n right: 0;\n cursor: ne-resize;\n transform: rotate(270deg);\n}\n.react-resizable-handle-w,\n.react-resizable-handle-e {\n top: 50%;\n margin-top: -10px;\n cursor: ew-resize;\n}\n.react-resizable-handle-w {\n left: 0;\n transform: rotate(135deg);\n}\n.react-resizable-handle-e {\n right: 0;\n transform: rotate(315deg);\n}\n.react-resizable-handle-n,\n.react-resizable-handle-s {\n left: 50%;\n margin-left: -10px;\n cursor: ns-resize;\n}\n.react-resizable-handle-n {\n top: 0;\n transform: rotate(225deg);\n}\n.react-resizable-handle-s {\n bottom: 0;\n transform: rotate(45deg);\n}\n.react-grid-layout {\n position: relative !important;\n transition: height 200ms ease;\n}\n.react-grid-item {\n transition: all 200ms ease;\n transition-property:\n left,\n top,\n width,\n height;\n}\n.react-grid-item > div {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n.react-grid-item.cssTransforms {\n transition-property:\n transform,\n width,\n height;\n}\n.react-grid-item.resizing {\n transition: none;\n z-index: 1;\n will-change: width, height;\n}\n.react-grid-item.react-draggable-dragging {\n transition: none;\n z-index: 3;\n will-change: transform;\n}\n@media (max-width: 768px) {\n .react-grid-layout {\n overflow-x: hidden !important;\n height: auto !important;\n }\n .react-grid-item {\n position: relative !important;\n transform: none !important;\n margin-bottom: 24px !important;\n width: 100% !important;\n left: 0 !important;\n right: 0 !important;\n }\n .react-grid-item:last-child {\n margin-bottom: 0 !important;\n }\n .react-grid-item.cssTransforms {\n position: relative !important;\n transform: none !important;\n }\n .react-grid-placeholder {\n display: none !important;\n }\n}\n');
1754
+ styleInject('.chart-animate-in {\n animation: chartFadeIn 0.5s ease-out;\n}\n.chart-point-pulse {\n animation: pointPulse 2s ease-in-out infinite;\n}\n.chart-gradient-shift {\n animation: gradientShift 3s ease-in-out infinite;\n}\n.recharts-tooltip-wrapper {\n outline: none !important;\n}\n.recharts-tooltip-cursor {\n fill: hsl(var(--muted) / 0.1);\n}\n.recharts-legend-item {\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.recharts-legend-item:hover {\n transform: translateY(-1px);\n}\n.recharts-line-curve,\n.recharts-area-curve {\n transition: all 0.3s ease;\n}\n.recharts-bar-rectangle {\n transition: all 0.2s ease;\n}\n.recharts-bar-rectangle:hover {\n filter: brightness(1.1);\n}\n.recharts-pie-sector {\n transition: all 0.2s ease;\n cursor: pointer;\n}\n.recharts-pie-sector:hover {\n filter: brightness(1.1);\n transform: scale(1.02);\n}\n.recharts-brush {\n fill: hsl(var(--primary) / 0.1);\n stroke: hsl(var(--primary) / 0.3);\n}\n.recharts-brush-slide {\n fill: hsl(var(--primary) / 0.2);\n fill-opacity: 0.5;\n}\n.recharts-cartesian-grid-horizontal line,\n.recharts-cartesian-grid-vertical line {\n stroke-dasharray: 3 3;\n opacity: 0.3;\n}\n.recharts-xAxis .recharts-cartesian-axis-tick-value,\n.recharts-yAxis .recharts-cartesian-axis-tick-value {\n fill: hsl(var(--muted-foreground));\n font-size: 11px;\n}\n.dark .recharts-tooltip-wrapper {\n filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.3));\n}\n.dark .recharts-cartesian-grid-horizontal line,\n.dark .recharts-cartesian-grid-vertical line {\n opacity: 0.2;\n}\n.sparkline-chart .recharts-surface {\n overflow: visible !important;\n}\n@keyframes chartSkeletonPulse {\n 0%, 100% {\n opacity: 0.5;\n transform: scaleY(0.8);\n }\n 50% {\n opacity: 1;\n transform: scaleY(1);\n }\n}\n@keyframes chartFadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n@keyframes pointPulse {\n 0%, 100% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(1.2);\n opacity: 0.8;\n }\n}\n@keyframes gradientShift {\n 0%, 100% {\n stop-opacity: 0.8;\n }\n 50% {\n stop-opacity: 0.4;\n }\n}\n.chart-legend-item {\n position: relative;\n overflow: hidden;\n}\n.chart-legend-item::before {\n content: "";\n position: absolute;\n top: 0;\n left: -100%;\n width: 100%;\n height: 100%;\n background: linear-gradient(90deg, transparent, hsl(var(--primary) / 0.1), transparent);\n transition: left 0.5s ease;\n}\n.chart-legend-item:hover::before {\n left: 100%;\n}\n.chart-crosshair {\n stroke: hsl(var(--muted-foreground));\n stroke-width: 1;\n stroke-dasharray: 5 5;\n opacity: 0.5;\n}\n.chart-minimap {\n border: 1px solid hsl(var(--border));\n border-radius: var(--radius-md);\n background: hsl(var(--background) / 0.8);\n -webkit-backdrop-filter: blur(8px);\n backdrop-filter: blur(8px);\n}\n.chart-export-menu {\n animation: slideDown 0.2s ease-out;\n}\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.chart-zoom-indicator {\n background: hsl(var(--background) / 0.9);\n -webkit-backdrop-filter: blur(8px);\n backdrop-filter: blur(8px);\n border: 1px solid hsl(var(--border));\n border-radius: var(--radius-full);\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n font-weight: 500;\n}\n.recharts-surface {\n will-change: transform;\n}\n.recharts-line,\n.recharts-area,\n.recharts-bar {\n will-change: opacity, transform;\n}\n@media (max-width: 640px) {\n .recharts-wrapper {\n font-size: 0.875rem;\n }\n .recharts-legend-wrapper {\n margin-top: 1rem !important;\n }\n}\n@media print {\n .chart-controls {\n display: none !important;\n }\n .recharts-tooltip-wrapper {\n display: none !important;\n }\n}\n.moonui-calendar {\n --calendar-cell-size: 2.25rem;\n --calendar-cell-size-sm: 2rem;\n}\n@media (max-width: 640px) {\n .moonui-calendar {\n --calendar-cell-size: var(--calendar-cell-size-sm);\n }\n .moonui-calendar .months {\n flex-direction: column !important;\n }\n .moonui-calendar .rdp-cell,\n .moonui-calendar .rdp-day {\n width: var(--calendar-cell-size) !important;\n height: var(--calendar-cell-size) !important;\n }\n}\n.moonui-calendar .rdp-head_cell {\n width: var(--calendar-cell-size);\n height: var(--calendar-cell-size);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.75rem;\n font-weight: 500;\n text-transform: uppercase;\n color: var(--muted-foreground);\n}\n.moonui-calendar .rdp-tbody {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n.moonui-calendar .rdp-row {\n display: flex;\n gap: 0.25rem;\n margin: 0;\n}\n.moonui-calendar .rdp-cell {\n width: var(--calendar-cell-size);\n height: var(--calendar-cell-size);\n padding: 0;\n text-align: center;\n}\n.moonui-calendar .rdp-day {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.375rem;\n font-size: 0.875rem;\n cursor: pointer;\n transition: all 0.2s;\n}\n.moonui-calendar .rdp-day_range_middle {\n border-radius: 0 !important;\n background-color: var(--accent);\n color: var(--accent-foreground);\n}\n.moonui-calendar .rdp-day_range_start {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n.moonui-calendar .rdp-day_range_end {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n@media (max-width: 640px) {\n .time-range-popover {\n max-width: calc(100vw - 2rem) !important;\n }\n .time-range-popover .preset-column {\n border-right: none !important;\n border-bottom: 1px solid var(--border) !important;\n min-width: 100% !important;\n }\n}\n.react-grid-layout {\n position: relative;\n transition: height 200ms ease;\n}\n.react-grid-item {\n transition: all 200ms ease;\n transition-property:\n left,\n top,\n width,\n height;\n}\n.react-grid-item img {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.react-grid-item.cssTransforms {\n transition-property:\n transform,\n width,\n height;\n}\n.react-grid-item.resizing {\n transition: none;\n z-index: 1;\n will-change: width, height;\n}\n.react-grid-item.react-draggable-dragging {\n transition: none;\n z-index: 3;\n will-change: transform;\n}\n.react-grid-item.dropping {\n visibility: hidden;\n}\n.react-grid-item.react-grid-placeholder {\n background: red;\n opacity: 0.2;\n transition-duration: 100ms;\n z-index: 2;\n -webkit-user-select: none;\n -moz-user-select: none;\n -o-user-select: none;\n user-select: none;\n}\n.react-grid-item.react-grid-placeholder.placeholder-resizing {\n transition: none;\n}\n.react-grid-item > .react-resizable-handle {\n position: absolute;\n width: 20px;\n height: 20px;\n}\n.react-grid-item > .react-resizable-handle::after {\n content: "";\n position: absolute;\n right: 3px;\n bottom: 3px;\n width: 5px;\n height: 5px;\n border-right: 2px solid rgba(0, 0, 0, 0.4);\n border-bottom: 2px solid rgba(0, 0, 0, 0.4);\n}\n.react-resizable-hide > .react-resizable-handle {\n display: none;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-sw {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n transform: rotate(90deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-se {\n bottom: 0;\n right: 0;\n cursor: se-resize;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-nw {\n top: 0;\n left: 0;\n cursor: nw-resize;\n transform: rotate(180deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-ne {\n top: 0;\n right: 0;\n cursor: ne-resize;\n transform: rotate(270deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-w,\n.react-grid-item > .react-resizable-handle.react-resizable-handle-e {\n top: 50%;\n margin-top: -10px;\n cursor: ew-resize;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-w {\n left: 0;\n transform: rotate(135deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-e {\n right: 0;\n transform: rotate(315deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-n,\n.react-grid-item > .react-resizable-handle.react-resizable-handle-s {\n left: 50%;\n margin-left: -10px;\n cursor: ns-resize;\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-n {\n top: 0;\n transform: rotate(225deg);\n}\n.react-grid-item > .react-resizable-handle.react-resizable-handle-s {\n bottom: 0;\n transform: rotate(45deg);\n}\n.react-resizable {\n position: relative;\n}\n.react-resizable-handle {\n position: absolute;\n width: 20px;\n height: 20px;\n background-repeat: no-repeat;\n background-origin: content-box;\n box-sizing: border-box;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+);\n background-position: bottom right;\n padding: 0 3px 3px 0;\n}\n.react-resizable-handle-sw {\n bottom: 0;\n left: 0;\n cursor: sw-resize;\n transform: rotate(90deg);\n}\n.react-resizable-handle-se {\n bottom: 0;\n right: 0;\n cursor: se-resize;\n}\n.react-resizable-handle-nw {\n top: 0;\n left: 0;\n cursor: nw-resize;\n transform: rotate(180deg);\n}\n.react-resizable-handle-ne {\n top: 0;\n right: 0;\n cursor: ne-resize;\n transform: rotate(270deg);\n}\n.react-resizable-handle-w,\n.react-resizable-handle-e {\n top: 50%;\n margin-top: -10px;\n cursor: ew-resize;\n}\n.react-resizable-handle-w {\n left: 0;\n transform: rotate(135deg);\n}\n.react-resizable-handle-e {\n right: 0;\n transform: rotate(315deg);\n}\n.react-resizable-handle-n,\n.react-resizable-handle-s {\n left: 50%;\n margin-left: -10px;\n cursor: ns-resize;\n}\n.react-resizable-handle-n {\n top: 0;\n transform: rotate(225deg);\n}\n.react-resizable-handle-s {\n bottom: 0;\n transform: rotate(45deg);\n}\n.react-grid-layout {\n position: relative !important;\n transition: height 200ms ease;\n}\n.react-grid-item {\n transition: all 200ms ease;\n transition-property:\n left,\n top,\n width,\n height;\n}\n.react-grid-item > div {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n.react-grid-item.cssTransforms {\n transition-property:\n transform,\n width,\n height;\n}\n.react-grid-item.resizing {\n transition: none;\n z-index: 1;\n will-change: width, height;\n}\n.react-grid-item.react-draggable-dragging {\n transition: none;\n z-index: 3;\n will-change: transform;\n}\n@media (max-width: 768px) {\n .react-grid-layout {\n overflow-x: hidden !important;\n height: auto !important;\n }\n .react-grid-item {\n position: relative !important;\n transform: none !important;\n margin-bottom: 24px !important;\n width: 100% !important;\n left: 0 !important;\n right: 0 !important;\n }\n .react-grid-item:last-child {\n margin-bottom: 0 !important;\n }\n .react-grid-item.cssTransforms {\n position: relative !important;\n transform: none !important;\n }\n .react-grid-placeholder {\n display: none !important;\n }\n}\n');
1755
1755
  function cn(...inputs) {
1756
1756
  return twMerge(clsx(inputs));
1757
1757
  }
@@ -2550,7 +2550,7 @@ function Calendar({
2550
2550
  DayPicker,
2551
2551
  {
2552
2552
  showOutsideDays,
2553
- className: cn("p-3", className),
2553
+ className: cn("moonui-calendar p-3", className),
2554
2554
  classNames: {
2555
2555
  months: "flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",
2556
2556
  month: "space-y-4",
@@ -2563,10 +2563,10 @@ function Calendar({
2563
2563
  ),
2564
2564
  nav_button_previous: "absolute left-1",
2565
2565
  nav_button_next: "absolute right-1",
2566
- table: "w-full border-collapse",
2567
- head_row: "grid grid-cols-7",
2568
- head_cell: "text-muted-foreground rounded-md w-9 h-9 font-normal text-[0.8rem] flex items-center justify-center",
2569
- row: "grid grid-cols-7 gap-1 mt-1",
2566
+ table: "w-full border-collapse space-y-1",
2567
+ head_row: "flex w-full",
2568
+ head_cell: "text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]",
2569
+ row: "flex w-full mt-2",
2570
2570
  cell: "h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20",
2571
2571
  day: cn(
2572
2572
  moonUIButtonProVariants({ variant: "ghost" }),
@@ -51461,6 +51461,13 @@ function TimeRangePicker({
51461
51461
  const [isOpen, setIsOpen] = t__default.useState(false);
51462
51462
  const [customRange, setCustomRange] = t__default.useState({});
51463
51463
  const [comparisonEnabled, setComparisonEnabled] = t__default.useState(false);
51464
+ const [isMobile, setIsMobile] = t__default.useState(false);
51465
+ t__default.useEffect(() => {
51466
+ const checkMobile = () => setIsMobile(window.innerWidth < 640);
51467
+ checkMobile();
51468
+ window.addEventListener("resize", checkMobile);
51469
+ return () => window.removeEventListener("resize", checkMobile);
51470
+ }, []);
51464
51471
  const currentRange = value || PRESET_RANGES[2].getRange();
51465
51472
  const formatRange = (range) => {
51466
51473
  if (range.preset && range.preset !== "custom") {
@@ -51506,20 +51513,21 @@ function TimeRangePicker({
51506
51513
  MoonUIPopoverContentPro,
51507
51514
  {
51508
51515
  className: cn(
51509
- "w-auto p-0",
51516
+ "time-range-popover w-auto max-w-[95vw] p-0 overflow-hidden",
51510
51517
  glassmorphism && "bg-background/95 backdrop-blur-md border-white/10"
51511
51518
  ),
51512
51519
  align: "end",
51513
51520
  side: "bottom",
51514
51521
  sideOffset: 4,
51522
+ collisionPadding: 8,
51515
51523
  children: /* @__PURE__ */ jsx(
51516
51524
  motion.div,
51517
51525
  {
51518
51526
  initial: { opacity: 0, y: -10 },
51519
51527
  animate: { opacity: 1, y: 0 },
51520
51528
  transition: { duration: 0.2 },
51521
- children: /* @__PURE__ */ jsxs("div", { className: "flex", children: [
51522
- showPresets && /* @__PURE__ */ jsxs("div", { className: "border-r p-3", children: [
51529
+ children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row", children: [
51530
+ showPresets && /* @__PURE__ */ jsxs("div", { className: "preset-column border-b sm:border-b-0 sm:border-r p-3 min-w-[140px]", children: [
51523
51531
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-2 pb-2", children: [
51524
51532
  /* @__PURE__ */ jsx(Clock, { className: "h-4 w-4 text-muted-foreground" }),
51525
51533
  /* @__PURE__ */ jsx("h4", { className: "text-sm font-medium", children: "Quick Select" })
@@ -51531,7 +51539,7 @@ function TimeRangePicker({
51531
51539
  whileTap: { scale: 0.98 },
51532
51540
  onClick: () => handlePresetSelect(preset),
51533
51541
  className: cn(
51534
- "w-full text-left px-2 py-1.5 text-sm rounded-md transition-colors",
51542
+ "w-full text-left px-2 py-1.5 text-sm rounded-md transition-colors whitespace-nowrap",
51535
51543
  "hover:bg-muted",
51536
51544
  currentRange.preset === preset.value && "bg-primary text-primary-foreground"
51537
51545
  ),
@@ -51557,7 +51565,7 @@ function TimeRangePicker({
51557
51565
  /* @__PURE__ */ jsx(CalendarIcon, { className: "h-4 w-4 text-muted-foreground" }),
51558
51566
  /* @__PURE__ */ jsx("h4", { className: "text-sm font-medium", children: "Custom Range" })
51559
51567
  ] }),
51560
- /* @__PURE__ */ jsx(
51568
+ /* @__PURE__ */ jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsx(
51561
51569
  Calendar,
51562
51570
  {
51563
51571
  mode: "range",
@@ -51566,10 +51574,10 @@ function TimeRangePicker({
51566
51574
  to: customRange.to
51567
51575
  },
51568
51576
  onSelect: (range) => setCustomRange(range || {}),
51569
- numberOfMonths: 2,
51577
+ numberOfMonths: isMobile ? 1 : 2,
51570
51578
  className: "rounded-md"
51571
51579
  }
51572
- ),
51580
+ ) }),
51573
51581
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between pt-3 px-2", children: [
51574
51582
  /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: customRange.from && customRange.to && /* @__PURE__ */ jsxs("span", { children: [
51575
51583
  Math.ceil((customRange.to.getTime() - customRange.from.getTime()) / (1e3 * 60 * 60 * 24)),
@@ -56314,7 +56322,7 @@ var SearchInput = t__default.memo(({
56314
56322
  keyboardShortcuts
56315
56323
  }) => {
56316
56324
  const [localValue, setLocalValue] = useState(initialValue || "");
56317
- const timeoutRef = useRef();
56325
+ const timeoutRef = useRef(void 0);
56318
56326
  useEffect(() => {
56319
56327
  setLocalValue(initialValue);
56320
56328
  }, [initialValue]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moontra/moonui-pro",
3
- "version": "2.5.13",
3
+ "version": "2.5.14",
4
4
  "description": "Premium React components for MoonUI - Advanced UI library with 50+ pro components including performance, interactive, and gesture components",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -107,6 +107,14 @@ export function TimeRangePicker({
107
107
  const [isOpen, setIsOpen] = React.useState(false)
108
108
  const [customRange, setCustomRange] = React.useState<{ from?: Date; to?: Date }>({})
109
109
  const [comparisonEnabled, setComparisonEnabled] = React.useState(false)
110
+ const [isMobile, setIsMobile] = React.useState(false)
111
+
112
+ React.useEffect(() => {
113
+ const checkMobile = () => setIsMobile(window.innerWidth < 640)
114
+ checkMobile()
115
+ window.addEventListener('resize', checkMobile)
116
+ return () => window.removeEventListener('resize', checkMobile)
117
+ }, [])
110
118
 
111
119
  const currentRange = value || PRESET_RANGES[2].getRange() // Default: Last 7 days
112
120
 
@@ -157,22 +165,23 @@ export function TimeRangePicker({
157
165
  </PopoverTrigger>
158
166
  <PopoverContent
159
167
  className={cn(
160
- "w-auto p-0",
168
+ "time-range-popover w-auto max-w-[95vw] p-0 overflow-hidden",
161
169
  glassmorphism && "bg-background/95 backdrop-blur-md border-white/10"
162
170
  )}
163
171
  align="end"
164
172
  side="bottom"
165
173
  sideOffset={4}
174
+ collisionPadding={8}
166
175
  >
167
176
  <motion.div
168
177
  initial={{ opacity: 0, y: -10 }}
169
178
  animate={{ opacity: 1, y: 0 }}
170
179
  transition={{ duration: 0.2 }}
171
180
  >
172
- <div className="flex">
181
+ <div className="flex flex-col sm:flex-row">
173
182
  {/* Preset'ler */}
174
183
  {showPresets && (
175
- <div className="border-r p-3">
184
+ <div className="preset-column border-b sm:border-b-0 sm:border-r p-3 min-w-[140px]">
176
185
  <div className="flex items-center gap-2 px-2 pb-2">
177
186
  <Clock className="h-4 w-4 text-muted-foreground" />
178
187
  <h4 className="text-sm font-medium">Quick Select</h4>
@@ -185,7 +194,7 @@ export function TimeRangePicker({
185
194
  whileTap={{ scale: 0.98 }}
186
195
  onClick={() => handlePresetSelect(preset)}
187
196
  className={cn(
188
- "w-full text-left px-2 py-1.5 text-sm rounded-md transition-colors",
197
+ "w-full text-left px-2 py-1.5 text-sm rounded-md transition-colors whitespace-nowrap",
189
198
  "hover:bg-muted",
190
199
  currentRange.preset === preset.value && "bg-primary text-primary-foreground"
191
200
  )}
@@ -219,16 +228,18 @@ export function TimeRangePicker({
219
228
  <h4 className="text-sm font-medium">Custom Range</h4>
220
229
  </div>
221
230
 
222
- <Calendar
223
- mode="range"
224
- selected={{
225
- from: customRange.from,
226
- to: customRange.to
227
- }}
228
- onSelect={(range: any) => setCustomRange(range || {})}
229
- numberOfMonths={2}
230
- className="rounded-md"
231
- />
231
+ <div className="overflow-x-auto">
232
+ <Calendar
233
+ mode="range"
234
+ selected={{
235
+ from: customRange.from,
236
+ to: customRange.to
237
+ }}
238
+ onSelect={(range: any) => setCustomRange(range || {})}
239
+ numberOfMonths={isMobile ? 1 : 2}
240
+ className="rounded-md"
241
+ />
242
+ </div>
232
243
 
233
244
  <div className="flex items-center justify-between pt-3 px-2">
234
245
  <div className="text-sm text-muted-foreground">
@@ -52,7 +52,7 @@ const SearchInput = React.memo(({
52
52
  }) => {
53
53
  // Local state to prevent focus loss
54
54
  const [localValue, setLocalValue] = useState<string>(initialValue || '')
55
- const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>()
55
+ const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)
56
56
 
57
57
  // Update local value when initial value changes from parent
58
58
  useEffect(() => {
@@ -17,7 +17,7 @@ function Calendar({
17
17
  return (
18
18
  <DayPicker
19
19
  showOutsideDays={showOutsideDays}
20
- className={cn("p-3", className)}
20
+ className={cn("moonui-calendar p-3", className)}
21
21
  classNames={{
22
22
  months: "flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",
23
23
  month: "space-y-4",
@@ -30,11 +30,11 @@ function Calendar({
30
30
  ),
31
31
  nav_button_previous: "absolute left-1",
32
32
  nav_button_next: "absolute right-1",
33
- table: "w-full border-collapse",
34
- head_row: "grid grid-cols-7",
33
+ table: "w-full border-collapse space-y-1",
34
+ head_row: "flex w-full",
35
35
  head_cell:
36
- "text-muted-foreground rounded-md w-9 h-9 font-normal text-[0.8rem] flex items-center justify-center",
37
- row: "grid grid-cols-7 gap-1 mt-1",
36
+ "text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]",
37
+ row: "flex w-full mt-2",
38
38
  cell: "h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20",
39
39
  day: cn(
40
40
  buttonVariants({ variant: "ghost" }),
@@ -0,0 +1,99 @@
1
+ /* Calendar Component Styles */
2
+ .moonui-calendar {
3
+ --calendar-cell-size: 2.25rem; /* 36px */
4
+ --calendar-cell-size-sm: 2rem; /* 32px on mobile */
5
+ }
6
+
7
+ /* Mobile responsive calendar */
8
+ @media (max-width: 640px) {
9
+ .moonui-calendar {
10
+ --calendar-cell-size: var(--calendar-cell-size-sm);
11
+ }
12
+
13
+ /* Stack months vertically on mobile */
14
+ .moonui-calendar .months {
15
+ flex-direction: column !important;
16
+ }
17
+
18
+ /* Adjust cell sizes for mobile */
19
+ .moonui-calendar .rdp-cell,
20
+ .moonui-calendar .rdp-day {
21
+ width: var(--calendar-cell-size) !important;
22
+ height: var(--calendar-cell-size) !important;
23
+ }
24
+ }
25
+
26
+ /* Fix day names alignment */
27
+ .moonui-calendar .rdp-head_cell {
28
+ width: var(--calendar-cell-size);
29
+ height: var(--calendar-cell-size);
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ font-size: 0.75rem;
34
+ font-weight: 500;
35
+ text-transform: uppercase;
36
+ color: var(--muted-foreground);
37
+ }
38
+
39
+ /* Fix calendar grid */
40
+ .moonui-calendar .rdp-tbody {
41
+ display: flex;
42
+ flex-direction: column;
43
+ gap: 0.25rem;
44
+ }
45
+
46
+ .moonui-calendar .rdp-row {
47
+ display: flex;
48
+ gap: 0.25rem;
49
+ margin: 0;
50
+ }
51
+
52
+ .moonui-calendar .rdp-cell {
53
+ width: var(--calendar-cell-size);
54
+ height: var(--calendar-cell-size);
55
+ padding: 0;
56
+ text-align: center;
57
+ }
58
+
59
+ .moonui-calendar .rdp-day {
60
+ width: 100%;
61
+ height: 100%;
62
+ display: flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ border-radius: 0.375rem;
66
+ font-size: 0.875rem;
67
+ cursor: pointer;
68
+ transition: all 0.2s;
69
+ }
70
+
71
+ /* Range selection styles */
72
+ .moonui-calendar .rdp-day_range_middle {
73
+ border-radius: 0 !important;
74
+ background-color: var(--accent);
75
+ color: var(--accent-foreground);
76
+ }
77
+
78
+ .moonui-calendar .rdp-day_range_start {
79
+ border-top-right-radius: 0 !important;
80
+ border-bottom-right-radius: 0 !important;
81
+ }
82
+
83
+ .moonui-calendar .rdp-day_range_end {
84
+ border-top-left-radius: 0 !important;
85
+ border-bottom-left-radius: 0 !important;
86
+ }
87
+
88
+ /* Popover responsive */
89
+ @media (max-width: 640px) {
90
+ .time-range-popover {
91
+ max-width: calc(100vw - 2rem) !important;
92
+ }
93
+
94
+ .time-range-popover .preset-column {
95
+ border-right: none !important;
96
+ border-bottom: 1px solid var(--border) !important;
97
+ min-width: 100% !important;
98
+ }
99
+ }
@@ -4,6 +4,7 @@
4
4
  /* @import "./tokens.css"; */
5
5
  /* @import "./design-system.css"; */
6
6
  @import "./advanced-chart.css";
7
+ @import "./calendar.css";
7
8
 
8
9
  /* React Grid Layout - Required for Dashboard component */
9
10
  @import "react-grid-layout/css/styles.css";