@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.d.ts +1997 -0
- package/dist/index.mjs +22 -14
- package/package.json +1 -1
- package/src/components/dashboard/time-range-picker.tsx +25 -14
- package/src/components/sidebar/index.tsx +1 -1
- package/src/components/ui/calendar.tsx +5 -5
- package/src/styles/calendar.css +99 -0
- package/src/styles/index.css +1 -0
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: "
|
|
2568
|
-
head_cell: "text-muted-foreground rounded-md w-9
|
|
2569
|
-
row: "
|
|
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.
|
|
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
|
-
<
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
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: "
|
|
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
|
|
37
|
-
row: "
|
|
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
|
+
}
|
package/src/styles/index.css
CHANGED