@solostylist/ui-kit 1.0.111 → 1.0.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,9 @@
1
+ /*!
2
+ * OverlayScrollbars
3
+ * Version: 2.12.0
4
+ *
5
+ * Copyright (c) Rene Haas | KingSora.
6
+ * https://github.com/KingSora
7
+ *
8
+ * Released under the MIT license.
9
+ */.os-size-observer,.os-size-observer-listener{scroll-behavior:auto!important;direction:inherit;pointer-events:none;overflow:hidden;visibility:hidden;box-sizing:border-box}.os-size-observer,.os-size-observer-listener,.os-size-observer-listener-item,.os-size-observer-listener-item-final{writing-mode:horizontal-tb;position:absolute;left:0;top:0}.os-size-observer{z-index:-1;contain:strict;display:flex;flex-direction:row;flex-wrap:nowrap;padding:inherit;border:inherit;box-sizing:inherit;margin:-133px;top:0;right:0;bottom:0;left:0;transform:scale(.1)}.os-size-observer:before{content:"";flex:none;box-sizing:inherit;padding:10px;width:10px;height:10px}.os-size-observer-appear{animation:os-size-observer-appear-animation 1ms forwards}.os-size-observer-listener{box-sizing:border-box;position:relative;flex:auto;padding:inherit;border:inherit;margin:-133px;transform:scale(10)}.os-size-observer-listener.ltr{margin-right:-266px;margin-left:0}.os-size-observer-listener.rtl{margin-left:-266px;margin-right:0}.os-size-observer-listener:empty:before{content:"";width:100%;height:100%}.os-size-observer-listener:empty:before,.os-size-observer-listener>.os-size-observer-listener-item{display:block;position:relative;padding:inherit;border:inherit;box-sizing:content-box;flex:auto}.os-size-observer-listener-scroll{box-sizing:border-box;display:flex}.os-size-observer-listener-item{right:0;bottom:0;overflow:hidden;direction:ltr;flex:none}.os-size-observer-listener-item-final{transition:none}@keyframes os-size-observer-appear-animation{0%{cursor:auto}to{cursor:none}}.os-trinsic-observer{flex:none;box-sizing:border-box;position:relative;max-width:0px;max-height:1px;padding:0;margin:0;border:none;overflow:hidden;z-index:-1;height:0;top:calc(100% + 1px);contain:strict}.os-trinsic-observer:not(:empty){height:calc(100% + 1px);top:-1px}.os-trinsic-observer:not(:empty)>.os-size-observer{width:1000%;height:1000%;min-height:1px;min-width:1px}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars-viewport]),[data-overlayscrollbars-viewport~=scrollbarHidden],html[data-overlayscrollbars-viewport~=scrollbarHidden]>body{scrollbar-width:none!important}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars-viewport])::-webkit-scrollbar,[data-overlayscrollbars-initialize]:not([data-overlayscrollbars-viewport])::-webkit-scrollbar-corner,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar,[data-overlayscrollbars-viewport~=scrollbarHidden]::-webkit-scrollbar-corner,html[data-overlayscrollbars-viewport~=scrollbarHidden]>body::-webkit-scrollbar,html[data-overlayscrollbars-viewport~=scrollbarHidden]>body::-webkit-scrollbar-corner{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;display:none!important;width:0!important;height:0!important}[data-overlayscrollbars-initialize]:not([data-overlayscrollbars]):not(html):not(body){overflow:auto}html[data-overlayscrollbars-body]{overflow:hidden}html[data-overlayscrollbars-body],html[data-overlayscrollbars-body]>body{width:100%;height:100%;margin:0}html[data-overlayscrollbars-body]>body{overflow:visible;margin:0}[data-overlayscrollbars]{position:relative}[data-overlayscrollbars~=host],[data-overlayscrollbars-padding]{display:flex;align-items:stretch!important;flex-direction:row!important;flex-wrap:nowrap!important;scroll-behavior:auto!important}[data-overlayscrollbars-padding],[data-overlayscrollbars-viewport]:not([data-overlayscrollbars]){box-sizing:inherit;position:relative;flex:auto;height:auto;width:100%;min-width:0;padding:0;margin:0;border:none;z-index:0}[data-overlayscrollbars-viewport]:not([data-overlayscrollbars]){--os-vaw: 0;--os-vah: 0;outline:none}[data-overlayscrollbars-viewport]:not([data-overlayscrollbars]):focus{outline:none}[data-overlayscrollbars-viewport][data-overlayscrollbars-viewport~=arrange]:before{content:"";position:absolute;pointer-events:none;z-index:-1;min-width:1px;min-height:1px;width:var(--os-vaw);height:var(--os-vah)}[data-overlayscrollbars~=host],[data-overlayscrollbars-padding]{overflow:hidden!important}[data-overlayscrollbars~=host][data-overlayscrollbars~=noClipping],[data-overlayscrollbars-padding~=noClipping]{overflow:visible!important}[data-overlayscrollbars-viewport]{--os-viewport-overflow-x: hidden;--os-viewport-overflow-y: hidden;overflow-x:var(--os-viewport-overflow-x);overflow-y:var(--os-viewport-overflow-y)}[data-overlayscrollbars-viewport~=overflowXVisible]{--os-viewport-overflow-x: visible}[data-overlayscrollbars-viewport~=overflowXHidden]{--os-viewport-overflow-x: hidden}[data-overlayscrollbars-viewport~=overflowXScroll]{--os-viewport-overflow-x: scroll}[data-overlayscrollbars-viewport~=overflowYVisible]{--os-viewport-overflow-y: visible}[data-overlayscrollbars-viewport~=overflowYHidden]{--os-viewport-overflow-y: hidden}[data-overlayscrollbars-viewport~=overflowYScroll]{--os-viewport-overflow-y: scroll}[data-overlayscrollbars-viewport~=overflowImportant]{overflow-x:var(--os-viewport-overflow-x)!important;overflow-y:var(--os-viewport-overflow-y)!important}[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId){font-size:0!important;line-height:0!important}[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId):before,[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId):after,[data-overlayscrollbars-viewport~=noContent]:not(#osFakeId)>*{display:none!important;position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}[data-overlayscrollbars-viewport~=measuring],[data-overlayscrollbars-viewport~=scrolling]{scroll-behavior:auto!important;scroll-snap-type:none!important}[data-overlayscrollbars-viewport~=measuring][data-overlayscrollbars-viewport~=overflowXVisible]{overflow-x:hidden!important}[data-overlayscrollbars-viewport~=measuring][data-overlayscrollbars-viewport~=overflowYVisible]{overflow-y:hidden!important}[data-overlayscrollbars-content]{box-sizing:inherit}[data-overlayscrollbars-contents]:not(#osFakeId):not([data-overlayscrollbars-padding]):not([data-overlayscrollbars-viewport]):not([data-overlayscrollbars-content]){display:contents}[data-overlayscrollbars-grid],[data-overlayscrollbars-grid] [data-overlayscrollbars-padding]{display:grid;grid-template:1fr/1fr}[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding],[data-overlayscrollbars-grid]>[data-overlayscrollbars-viewport],[data-overlayscrollbars-grid]>[data-overlayscrollbars-padding]>[data-overlayscrollbars-viewport]{height:auto!important;width:auto!important}@property --os-scroll-percent{syntax: "<number>"; inherits: true; initial-value: 0;}@property --os-viewport-percent{syntax: "<number>"; inherits: true; initial-value: 0;}.os-scrollbar{--os-viewport-percent: 0;--os-scroll-percent: 0;--os-scroll-direction: 0;--os-scroll-percent-directional: calc( var(--os-scroll-percent) - (var(--os-scroll-percent) + (1 - var(--os-scroll-percent)) * -1) * var(--os-scroll-direction) )}.os-scrollbar{contain:size layout;contain:size layout style;transition:opacity .15s,visibility .15s,top .15s,right .15s,bottom .15s,left .15s;pointer-events:none;position:absolute;opacity:0;visibility:hidden}body>.os-scrollbar{position:fixed;z-index:99999}.os-scrollbar-transitionless{transition:none!important}.os-scrollbar-track{position:relative;padding:0!important;border:none!important}.os-scrollbar-handle{position:absolute}.os-scrollbar-track,.os-scrollbar-handle{pointer-events:none;width:100%;height:100%}.os-scrollbar.os-scrollbar-track-interactive .os-scrollbar-track,.os-scrollbar.os-scrollbar-handle-interactive .os-scrollbar-handle{pointer-events:auto;touch-action:none}.os-scrollbar-horizontal{bottom:0;left:0}.os-scrollbar-vertical{top:0;right:0}.os-scrollbar-rtl.os-scrollbar-horizontal{right:0}.os-scrollbar-rtl.os-scrollbar-vertical{right:auto;left:0}.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-auto-hide.os-scrollbar-auto-hide-hidden{opacity:0;visibility:hidden}.os-scrollbar-interaction.os-scrollbar-visible{opacity:1;visibility:visible}.os-scrollbar-unusable,.os-scrollbar-unusable *,.os-scrollbar-wheel,.os-scrollbar-wheel *{pointer-events:none!important}.os-scrollbar-unusable .os-scrollbar-handle{opacity:0!important;transition:none!important}.os-scrollbar-horizontal .os-scrollbar-handle{bottom:0;left:calc(var(--os-scroll-percent-directional) * 100%);transform:translate(calc(var(--os-scroll-percent-directional) * -100%));width:calc(var(--os-viewport-percent) * 100%)}.os-scrollbar-vertical .os-scrollbar-handle{right:0;top:calc(var(--os-scroll-percent-directional) * 100%);transform:translateY(calc(var(--os-scroll-percent-directional) * -100%));height:calc(var(--os-viewport-percent) * 100%)}@supports (container-type: size){.os-scrollbar-track{container-type:size}.os-scrollbar-horizontal .os-scrollbar-handle{left:auto;transform:translate(calc(var(--os-scroll-percent-directional) * 100cqw + var(--os-scroll-percent-directional) * -100%))}.os-scrollbar-vertical .os-scrollbar-handle{top:auto;transform:translateY(calc(var(--os-scroll-percent-directional) * 100cqh + var(--os-scroll-percent-directional) * -100%))}.os-scrollbar-rtl.os-scrollbar-horizontal .os-scrollbar-handle{right:auto;left:0}}.os-scrollbar-rtl.os-scrollbar-vertical .os-scrollbar-handle{right:auto;left:0}.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-horizontal.os-scrollbar-cornerless.os-scrollbar-rtl{left:0;right:0}.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless,.os-scrollbar.os-scrollbar-vertical.os-scrollbar-cornerless.os-scrollbar-rtl{top:0;bottom:0}@media print{.os-scrollbar{display:none}}.os-scrollbar{--os-size: 0;--os-padding-perpendicular: 0;--os-padding-axis: 0;--os-track-border-radius: 0;--os-track-bg: none;--os-track-bg-hover: none;--os-track-bg-active: none;--os-track-border: none;--os-track-border-hover: none;--os-track-border-active: none;--os-handle-border-radius: 0;--os-handle-bg: none;--os-handle-bg-hover: none;--os-handle-bg-active: none;--os-handle-border: none;--os-handle-border-hover: none;--os-handle-border-active: none;--os-handle-min-size: 33px;--os-handle-max-size: none;--os-handle-perpendicular-size: 100%;--os-handle-perpendicular-size-hover: 100%;--os-handle-perpendicular-size-active: 100%;--os-handle-interactive-area-offset: 0}.os-scrollbar-track{border:var(--os-track-border);border-radius:var(--os-track-border-radius);background:var(--os-track-bg);transition:opacity .15s,background-color .15s,border-color .15s}.os-scrollbar-track:hover{border:var(--os-track-border-hover);background:var(--os-track-bg-hover)}.os-scrollbar-track:active{border:var(--os-track-border-active);background:var(--os-track-bg-active)}.os-scrollbar-handle{border:var(--os-handle-border);border-radius:var(--os-handle-border-radius);background:var(--os-handle-bg)}.os-scrollbar-handle:hover{border:var(--os-handle-border-hover);background:var(--os-handle-bg-hover)}.os-scrollbar-handle:active{border:var(--os-handle-border-active);background:var(--os-handle-bg-active)}.os-scrollbar-track:before,.os-scrollbar-handle:before{content:"";position:absolute;left:0;right:0;top:0;bottom:0;display:block}.os-scrollbar-horizontal{padding:var(--os-padding-perpendicular) var(--os-padding-axis);right:var(--os-size);height:var(--os-size)}.os-scrollbar-horizontal.os-scrollbar-rtl{left:var(--os-size);right:0}.os-scrollbar-horizontal .os-scrollbar-track:before{top:calc(var(--os-padding-perpendicular) * -1);bottom:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-horizontal .os-scrollbar-handle{min-width:var(--os-handle-min-size);max-width:var(--os-handle-max-size);height:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,height .15s}.os-scrollbar-horizontal .os-scrollbar-handle:before{top:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);bottom:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-horizontal:hover .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-horizontal:active .os-scrollbar-handle{height:var(--os-handle-perpendicular-size-active)}.os-scrollbar-vertical{padding:var(--os-padding-axis) var(--os-padding-perpendicular);bottom:var(--os-size);width:var(--os-size)}.os-scrollbar-vertical .os-scrollbar-track:before{left:calc(var(--os-padding-perpendicular) * -1);right:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical .os-scrollbar-handle{min-height:var(--os-handle-min-size);max-height:var(--os-handle-max-size);width:var(--os-handle-perpendicular-size);transition:opacity .15s,background-color .15s,border-color .15s,width .15s}.os-scrollbar-vertical .os-scrollbar-handle:before{left:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);right:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical.os-scrollbar-rtl .os-scrollbar-handle:before{right:calc((var(--os-padding-perpendicular) + var(--os-handle-interactive-area-offset)) * -1);left:calc(var(--os-padding-perpendicular) * -1)}.os-scrollbar-vertical:hover .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-hover)}.os-scrollbar-vertical:active .os-scrollbar-handle{width:var(--os-handle-perpendicular-size-active)}[data-overlayscrollbars-viewport~=measuring]>.os-scrollbar,.os-theme-none.os-scrollbar{display:none!important}.os-theme-dark,.os-theme-light{box-sizing:border-box;--os-size: 10px;--os-padding-perpendicular: 2px;--os-padding-axis: 2px;--os-track-border-radius: 10px;--os-handle-interactive-area-offset: 4px;--os-handle-border-radius: 10px}.os-theme-dark{--os-handle-bg: rgba(0, 0, 0, .44);--os-handle-bg-hover: rgba(0, 0, 0, .55);--os-handle-bg-active: rgba(0, 0, 0, .66)}.os-theme-light{--os-handle-bg: rgba(255, 255, 255, .44);--os-handle-bg-hover: rgba(255, 255, 255, .55);--os-handle-bg-active: rgba(255, 255, 255, .66)}
@@ -1,2 +1,4 @@
1
1
  export * from './use-dialog';
2
2
  export * from './use-popover';
3
+ export * from './use-count-down';
4
+ export * from './use-scroll-animation';
@@ -1,6 +1,9 @@
1
- import { useDialog as r } from "./use-dialog.js";
2
- import { usePopover as f } from "./use-popover.js";
1
+ import { useDialog as m } from "./use-dialog.js";
2
+ import { usePopover as t } from "./use-popover.js";
3
+ import "react";
4
+ import { useScrollAnimation as f } from "./use-scroll-animation.js";
3
5
  export {
4
- r as useDialog,
5
- f as usePopover
6
+ m as useDialog,
7
+ t as usePopover,
8
+ f as useScrollAnimation
6
9
  };
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Time left object structure
3
+ */
4
+ export interface TimeLeft {
5
+ days: number;
6
+ hours: number;
7
+ minutes: number;
8
+ seconds: number;
9
+ }
10
+ /**
11
+ * Props for useCountDown hook
12
+ */
13
+ export interface UseCountDownProps {
14
+ /** Target date timestamp in milliseconds */
15
+ expireDate: number;
16
+ /** Callback fired when countdown reaches zero */
17
+ onComplete?: () => void;
18
+ /** Callback fired on each tick (every second) */
19
+ onTick?: (timeLeft: TimeLeft) => void;
20
+ /** Callback fired when countdown starts */
21
+ onStart?: () => void;
22
+ /** Whether the countdown is paused */
23
+ paused?: boolean;
24
+ /** Custom interval in milliseconds (default: 1000) */
25
+ interval?: number;
26
+ /** Whether to automatically start the countdown */
27
+ autoStart?: boolean;
28
+ }
29
+ /**
30
+ * Return type for useCountDown hook
31
+ */
32
+ export interface UseCountDownReturn {
33
+ /** Current time left */
34
+ timeLeft: TimeLeft;
35
+ /** Whether the countdown has expired */
36
+ isExpired: boolean;
37
+ /** Whether the countdown is currently running */
38
+ isRunning: boolean;
39
+ /** Whether the countdown is paused */
40
+ isPaused: boolean;
41
+ /** Start the countdown */
42
+ start: () => void;
43
+ /** Pause the countdown */
44
+ pause: () => void;
45
+ /** Resume the countdown */
46
+ resume: () => void;
47
+ /** Reset the countdown to initial state */
48
+ reset: () => void;
49
+ /** Get the total duration in milliseconds */
50
+ totalDuration: number;
51
+ /** Get the elapsed time in milliseconds */
52
+ elapsedTime: number;
53
+ /** Get the progress as a percentage (0-100) */
54
+ progress: number;
55
+ }
56
+ /**
57
+ * Enhanced countdown hook with comprehensive features
58
+ *
59
+ * Features:
60
+ * - Pause/resume functionality
61
+ * - Event callbacks (onComplete, onTick, onStart)
62
+ * - Custom intervals
63
+ * - Progress tracking
64
+ * - Manual start/stop controls
65
+ * - Expiration detection
66
+ *
67
+ * @param props - UseCountDownProps
68
+ * @returns UseCountDownReturn - Hook return value with time data and controls
69
+ */
70
+ declare const useCountDown: ({ expireDate, onComplete, onTick, onStart, paused, interval, autoStart, }: UseCountDownProps) => UseCountDownReturn;
71
+ export default useCountDown;
@@ -0,0 +1,77 @@
1
+ import { useState as o, useRef as c, useEffect as u, useCallback as f, useMemo as p } from "react";
2
+ const z = {
3
+ days: 0,
4
+ hours: 0,
5
+ minutes: 0,
6
+ seconds: 0
7
+ }, J = ({
8
+ expireDate: a,
9
+ onComplete: T,
10
+ onTick: L,
11
+ onStart: M,
12
+ paused: e = !1,
13
+ interval: S = 1e3,
14
+ autoStart: R = !0
15
+ }) => {
16
+ const [A, j] = o(z), [w, k] = o(!1), [g, i] = o(R && !e), [x, l] = o(e), [t, q] = o(null), s = c(null), I = c(T), E = c(L), v = c(M), y = c(!1), C = c(!1);
17
+ u(() => {
18
+ I.current = T;
19
+ }, [T]), u(() => {
20
+ E.current = L;
21
+ }, [L]), u(() => {
22
+ v.current = M;
23
+ }, [M]);
24
+ const m = f(() => {
25
+ const r = (/* @__PURE__ */ new Date()).getTime(), n = a - r;
26
+ return n < 0 ? { timeLeft: z, expired: !0 } : {
27
+ timeLeft: {
28
+ days: Math.floor(n / (1e3 * 60 * 60 * 24)),
29
+ hours: Math.floor(n % (1e3 * 60 * 60 * 24) / (1e3 * 60 * 60)),
30
+ minutes: Math.floor(n % (1e3 * 60 * 60) / (1e3 * 60)),
31
+ seconds: Math.floor(n % (1e3 * 60) / 1e3)
32
+ },
33
+ expired: !1
34
+ };
35
+ }, [a]), h = f(() => {
36
+ const { timeLeft: r, expired: n } = m();
37
+ j(r), k(n), E.current && E.current(r), n && !C.current && (C.current = !0, i(!1), I.current && I.current());
38
+ }, [m]), B = f(() => {
39
+ !y.current && v.current && (v.current(), y.current = !0), i(!0), l(!1), t || q((/* @__PURE__ */ new Date()).getTime());
40
+ }, [t]), D = f(() => {
41
+ i(!1), l(!0);
42
+ }, []), P = f(() => {
43
+ i(!0), l(!1);
44
+ }, []), F = f(() => {
45
+ i(R && !e), l(e), k(!1), q(null), y.current = !1, C.current = !1;
46
+ const { timeLeft: r } = m();
47
+ j(r);
48
+ }, [R, e, m]);
49
+ u(() => {
50
+ e ? D() : x && !e && P();
51
+ }, [e, x, D, P]), u(() => (g && !w ? s.current = setInterval(h, S) : s.current && (clearInterval(s.current), s.current = null), () => {
52
+ s.current && (clearInterval(s.current), s.current = null);
53
+ }), [g, w, S, h]), u(() => {
54
+ h();
55
+ }, [h]);
56
+ const d = p(() => t ? Math.max(0, a - t) : 0, [a, t]), b = p(() => {
57
+ if (!t) return 0;
58
+ const r = (/* @__PURE__ */ new Date()).getTime();
59
+ return Math.max(0, r - t);
60
+ }, [t]), G = p(() => d === 0 ? 0 : Math.min(100, Math.max(0, b / d * 100)), [b, d]);
61
+ return {
62
+ timeLeft: A,
63
+ isExpired: w,
64
+ isRunning: g,
65
+ isPaused: x,
66
+ start: B,
67
+ pause: D,
68
+ resume: P,
69
+ reset: F,
70
+ totalDuration: d,
71
+ elapsedTime: b,
72
+ progress: G
73
+ };
74
+ };
75
+ export {
76
+ J as default
77
+ };
package/dist/main.d.ts CHANGED
@@ -51,6 +51,8 @@ export { default as SMultiSelect } from './s-multi-select/index';
51
51
  export type { SMultiSelectProps } from './s-multi-select/index';
52
52
  export { default as SNoSsr } from './s-no-ssr/index';
53
53
  export type { SNoSsrProps } from './s-no-ssr/index';
54
+ export { default as SOverlayScrollbar } from './s-overlay-scrollbar/index';
55
+ export type { SOverlayScrollbarProps } from './s-overlay-scrollbar/index';
54
56
  export { default as STextField } from './s-text-field/index';
55
57
  export type { STextFieldProps } from './s-text-field/index';
56
58
  export { default as SPagination } from './s-pagination/index';
@@ -101,6 +103,8 @@ export { default as SLazyImage } from './s-lazy-image/index';
101
103
  export type { SLazyImageProps } from './s-lazy-image/index';
102
104
  export { default as SImageComparison } from './s-image-comparison/index';
103
105
  export type { SImageComparisonProps } from './s-image-comparison/index';
106
+ export { default as SCategoryCard } from './s-category-card/index';
107
+ export type { SCategoryCardProps } from './s-category-card/index';
104
108
  export { default as SRadialPulseAnimate } from './s-radial-pulse-animate/index';
105
109
  export type { SRadialPulseAnimateProps } from './s-radial-pulse-animate/index';
106
110
  export { default as SRating } from './s-rating/index';
package/dist/main.js CHANGED
@@ -1,148 +1,155 @@
1
- import { default as t } from "./s-accordion/s-accordion.js";
2
- import { default as f } from "./s-action-overlay/s-action-overlay.js";
1
+ import { default as a } from "./s-accordion/s-accordion.js";
2
+ import { default as l } from "./s-action-overlay/s-action-overlay.js";
3
3
  import { default as s } from "./s-autocomplete/s-autocomplete.js";
4
- import { default as p } from "./s-avatar/s-avatar.js";
5
- import { default as S } from "./s-button/s-button.js";
6
- import { default as u } from "./s-button-link/s-button-link.js";
7
- import { default as n } from "./s-carousel/s-carousel.js";
8
- import { default as c } from "./s-chat-input/s-chat-input.js";
4
+ import { default as S } from "./s-avatar/s-avatar.js";
5
+ import { default as d } from "./s-button/s-button.js";
6
+ import { default as i } from "./s-button-link/s-button-link.js";
7
+ import { default as g } from "./s-carousel/s-carousel.js";
8
+ import { default as T } from "./s-chat-input/s-chat-input.js";
9
9
  import { default as v } from "./s-chat-message/s-chat-message.js";
10
- import { default as P } from "./s-text-editor/s-text-editor.js";
10
+ import { default as b } from "./s-text-editor/s-text-editor.js";
11
11
  import "./s-text-editor/s-text-editor-toolbar.js";
12
- import { default as b } from "./s-checkbox/s-checkbox.js";
12
+ import { default as y } from "./s-checkbox/s-checkbox.js";
13
13
  import { default as I } from "./s-chip/s-chip.js";
14
- import { default as h } from "./s-chips/s-chips.js";
15
- import { default as L } from "./s-data-table/s-data-table.js";
16
- import { DialogConfirmProvider as B, default as A, useDialogConfirm as z } from "./s-dialog-confirm/s-dialog-confirm.js";
17
- import { DialogMessageProvider as R, default as w, useDialogMessage as G } from "./s-dialog-message/s-dialog-message.js";
14
+ import { default as k } from "./s-chips/s-chips.js";
15
+ import { default as F } from "./s-data-table/s-data-table.js";
16
+ import { DialogConfirmProvider as B, default as z, useDialogConfirm as E } from "./s-dialog-confirm/s-dialog-confirm.js";
17
+ import { DialogMessageProvider as w, default as G, useDialogMessage as N } from "./s-dialog-message/s-dialog-message.js";
18
18
  import { default as j } from "./s-error/s-error.js";
19
- import { default as O } from "./s-empty/s-empty.js";
20
- import { default as q } from "./s-flex-box/s-flex-box.js";
21
- import { default as J } from "./s-dialog/s-dialog.js";
22
- import { default as U } from "./s-file-dropzone/s-file-dropzone.js";
23
- import { default as X } from "./s-file-icon/s-file-icon.js";
24
- import { default as Z } from "./s-i18n-provider/s-i18n-provider.js";
25
- import { default as $ } from "./s-icon-button/s-icon-button.js";
26
- import { default as oe } from "./s-label/s-label.js";
27
- import { default as te } from "./s-multi-select/s-multi-select.js";
28
- import { default as fe } from "./s-no-ssr/s-no-ssr.js";
29
- import { default as se } from "./s-text-field/s-text-field.js";
30
- import { default as pe } from "./s-pagination/s-pagination.js";
31
- import { default as Se } from "./s-select/s-select.js";
32
- import { default as ue } from "./s-skeleton/s-skeleton.js";
33
- import { default as ne } from "./s-tip/s-tip.js";
34
- import { default as ce } from "./s-text-truncation/s-text-truncation.js";
35
- import { default as ve, SnackbarMessageProvider as Ce, useSnackbarMessage as Pe } from "./s-snackbar-message/s-snackbar-message.js";
36
- import { default as be } from "./s-form/s-form.js";
37
- import { SSmartTextField as Ie } from "./s-smart-text-field/s-smart-text-field.js";
38
- import { SCopilotKitProvider as he } from "./s-copilot-kit-provider/s-copilot-kit-provider.js";
39
- import { SStripeCVC as Le, SStripeExpiry as Fe, SStripeNumber as Be, StripeTextField as Ae } from "./s-stripe/s-stripe.js";
40
- import { default as Ee } from "./s-theme-provider/s-theme-provider.js";
41
- import { default as we } from "./s-datetime-picker/s-datetime-picker.js";
42
- import { default as Ne } from "./s-date-picker/s-date-picker.js";
43
- import { default as Ke } from "./s-localization-provider/s-localization-provider.js";
44
- import { default as Ve } from "./s-gradient-icon/s-gradient-icon.js";
45
- import { default as He } from "./s-glow-button/s-glow-button.js";
46
- import { default as Qe } from "./s-moving-border/s-moving-border.js";
47
- import { default as We } from "./s-scroll-reveal/s-scroll-reveal.js";
48
- import { default as Ye } from "./s-spotlight-cursor/s-spotlight-cursor.js";
49
- import { default as _e } from "./s-copyable-text/s-copyable-text.js";
50
- import { MediaItem as eo, default as oo } from "./s-interactive-gallery/s-interactive-gallery.js";
51
- import { default as to } from "./s-image-modal/s-image-modal.js";
52
- import { default as fo } from "./s-lazy-image/s-lazy-image.js";
53
- import { default as so } from "./s-image-comparison/s-image-comparison.js";
54
- import { default as po } from "./s-radial-pulse-animate/s-radial-pulse-animate.js";
55
- import { default as So } from "./s-rating/s-rating.js";
56
- import { default as io } from "./s-review/s-review.js";
57
- import { default as go } from "./s-tabs/s-tabs.js";
58
- import { default as To } from "./s-tabs/s-tab.js";
59
- import { default as Co } from "./s-tabs/s-tab-panel.js";
60
- import { default as Do } from "./s-text-shimmer/s-text-shimmer.js";
61
- import { default as Mo } from "./s-typewriter-text/s-typewriter-text.js";
62
- import { useDialog as yo } from "./hooks/use-dialog.js";
63
- import { usePopover as ko } from "./hooks/use-popover.js";
64
- import { formatDatePosted as Fo } from "./utils/dayjs.js";
65
- import { bytesToSize as Ao } from "./utils/bytes-to-size.js";
66
- import { LogLevel as Eo, Logger as Ro, createLogger as wo, logger as Go } from "./utils/logger.js";
67
- import { default as jo } from "dayjs";
19
+ import { default as V } from "./s-empty/s-empty.js";
20
+ import { default as H } from "./s-flex-box/s-flex-box.js";
21
+ import { default as Q } from "./s-dialog/s-dialog.js";
22
+ import { default as W } from "./s-file-dropzone/s-file-dropzone.js";
23
+ import { default as Y } from "./s-file-icon/s-file-icon.js";
24
+ import { default as _ } from "./s-i18n-provider/s-i18n-provider.js";
25
+ import { default as ee } from "./s-icon-button/s-icon-button.js";
26
+ import { default as re } from "./s-label/s-label.js";
27
+ import { default as ae } from "./s-multi-select/s-multi-select.js";
28
+ import { default as le } from "./s-no-ssr/s-no-ssr.js";
29
+ import { default as se } from "./s-overlay-scrollbar/s-overlay-scrollbar.js";
30
+ import { default as Se } from "./s-text-field/s-text-field.js";
31
+ import { default as de } from "./s-pagination/s-pagination.js";
32
+ import { default as ie } from "./s-select/s-select.js";
33
+ import { default as ge } from "./s-skeleton/s-skeleton.js";
34
+ import { default as Te } from "./s-tip/s-tip.js";
35
+ import { default as ve } from "./s-text-truncation/s-text-truncation.js";
36
+ import { default as be, SnackbarMessageProvider as De, useSnackbarMessage as ye } from "./s-snackbar-message/s-snackbar-message.js";
37
+ import { default as Ie } from "./s-form/s-form.js";
38
+ import { SSmartTextField as ke } from "./s-smart-text-field/s-smart-text-field.js";
39
+ import { SCopilotKitProvider as Fe } from "./s-copilot-kit-provider/s-copilot-kit-provider.js";
40
+ import { SStripeCVC as Be, SStripeExpiry as ze, SStripeNumber as Ee, StripeTextField as Re } from "./s-stripe/s-stripe.js";
41
+ import { default as Ge } from "./s-theme-provider/s-theme-provider.js";
42
+ import { default as Oe } from "./s-datetime-picker/s-datetime-picker.js";
43
+ import { default as Ke } from "./s-date-picker/s-date-picker.js";
44
+ import { default as qe } from "./s-localization-provider/s-localization-provider.js";
45
+ import { default as Je } from "./s-gradient-icon/s-gradient-icon.js";
46
+ import { default as Ue } from "./s-glow-button/s-glow-button.js";
47
+ import { default as Xe } from "./s-moving-border/s-moving-border.js";
48
+ import { default as Ze } from "./s-scroll-reveal/s-scroll-reveal.js";
49
+ import { default as $e } from "./s-spotlight-cursor/s-spotlight-cursor.js";
50
+ import { default as oo } from "./s-copyable-text/s-copyable-text.js";
51
+ import { MediaItem as to, default as ao } from "./s-interactive-gallery/s-interactive-gallery.js";
52
+ import { default as lo } from "./s-image-modal/s-image-modal.js";
53
+ import { default as so } from "./s-lazy-image/s-lazy-image.js";
54
+ import { default as So } from "./s-image-comparison/s-image-comparison.js";
55
+ import { default as uo } from "./s-category-card/s-category-card.js";
56
+ import { default as no } from "./s-radial-pulse-animate/s-radial-pulse-animate.js";
57
+ import { default as co } from "./s-rating/s-rating.js";
58
+ import { default as Co } from "./s-review/s-review.js";
59
+ import { default as Po } from "./s-tabs/s-tabs.js";
60
+ import { default as Do } from "./s-tabs/s-tab.js";
61
+ import { default as Mo } from "./s-tabs/s-tab-panel.js";
62
+ import { default as ho } from "./s-text-shimmer/s-text-shimmer.js";
63
+ import { default as Lo } from "./s-typewriter-text/s-typewriter-text.js";
64
+ import { useDialog as Ao } from "./hooks/use-dialog.js";
65
+ import { usePopover as zo } from "./hooks/use-popover.js";
66
+ import "react";
67
+ import { useScrollAnimation as Ro } from "./hooks/use-scroll-animation.js";
68
+ import { formatDatePosted as Go } from "./utils/dayjs.js";
69
+ import { bytesToSize as Oo } from "./utils/bytes-to-size.js";
70
+ import { LogLevel as Ko, Logger as Vo, createLogger as qo, logger as Ho } from "./utils/logger.js";
71
+ import { default as Qo } from "dayjs";
68
72
  export {
69
73
  B as DialogConfirmProvider,
70
- R as DialogMessageProvider,
71
- Eo as LogLevel,
72
- Ro as Logger,
73
- eo as MediaItem,
74
- t as SAccordion,
75
- f as SActionOverlay,
74
+ w as DialogMessageProvider,
75
+ Ko as LogLevel,
76
+ Vo as Logger,
77
+ to as MediaItem,
78
+ a as SAccordion,
79
+ l as SActionOverlay,
76
80
  s as SAutocomplete,
77
- p as SAvatar,
78
- S as SButton,
79
- u as SButtonLink,
80
- n as SCarousel,
81
- c as SChatInput,
81
+ S as SAvatar,
82
+ d as SButton,
83
+ i as SButtonLink,
84
+ g as SCarousel,
85
+ uo as SCategoryCard,
86
+ T as SChatInput,
82
87
  v as SChatMessage,
83
- b as SCheckbox,
88
+ y as SCheckbox,
84
89
  I as SChip,
85
- h as SChips,
86
- he as SCopilotKitProvider,
87
- _e as SCopyableText,
88
- L as SDataTable,
89
- Ne as SDatePicker,
90
- we as SDateTimePicker,
91
- J as SDialog,
92
- A as SDialogConfirm,
93
- w as SDialogMessage,
94
- O as SEmpty,
90
+ k as SChips,
91
+ Fe as SCopilotKitProvider,
92
+ oo as SCopyableText,
93
+ F as SDataTable,
94
+ Ke as SDatePicker,
95
+ Oe as SDateTimePicker,
96
+ Q as SDialog,
97
+ z as SDialogConfirm,
98
+ G as SDialogMessage,
99
+ V as SEmpty,
95
100
  j as SError,
96
- U as SFileDropzone,
97
- X as SFileIcon,
98
- q as SFlexBox,
99
- be as SForm,
100
- He as SGlowButton,
101
- Ve as SGradientIcon,
102
- Z as SI18nProvider,
103
- $ as SIconButton,
104
- so as SImageComparison,
105
- to as SImageModal,
106
- oo as SInteractiveGallery,
107
- oe as SLabel,
108
- fo as SLazyImage,
109
- Ke as SLocalizationProvider,
110
- Qe as SMovingBorder,
111
- te as SMultiSelect,
112
- fe as SNoSsr,
113
- pe as SPagination,
114
- po as SRadialPulseAnimate,
115
- So as SRating,
116
- io as SReview,
117
- We as SScrollReveal,
118
- Se as SSelect,
119
- ue as SSkeleton,
120
- Ie as SSmartTextField,
121
- ve as SSnackbarMessage,
122
- Ye as SSpotlightCursor,
123
- Le as SStripeCVC,
124
- Fe as SStripeExpiry,
125
- Be as SStripeNumber,
126
- To as STab,
127
- Co as STabPanel,
128
- go as STabs,
129
- P as STextEditor,
130
- se as STextField,
131
- Do as STextShimmer,
132
- ce as STextTruncation,
133
- Ee as SThemeProvider,
134
- ne as STip,
135
- Mo as STypewriterText,
136
- Ce as SnackbarMessageProvider,
137
- Ae as StripeTextField,
138
- Ao as bytesToSize,
139
- wo as createLogger,
140
- jo as dayjs,
141
- Fo as formatDatePosted,
142
- Go as logger,
143
- yo as useDialog,
144
- z as useDialogConfirm,
145
- G as useDialogMessage,
146
- ko as usePopover,
147
- Pe as useSnackbarMessage
101
+ W as SFileDropzone,
102
+ Y as SFileIcon,
103
+ H as SFlexBox,
104
+ Ie as SForm,
105
+ Ue as SGlowButton,
106
+ Je as SGradientIcon,
107
+ _ as SI18nProvider,
108
+ ee as SIconButton,
109
+ So as SImageComparison,
110
+ lo as SImageModal,
111
+ ao as SInteractiveGallery,
112
+ re as SLabel,
113
+ so as SLazyImage,
114
+ qe as SLocalizationProvider,
115
+ Xe as SMovingBorder,
116
+ ae as SMultiSelect,
117
+ le as SNoSsr,
118
+ se as SOverlayScrollbar,
119
+ de as SPagination,
120
+ no as SRadialPulseAnimate,
121
+ co as SRating,
122
+ Co as SReview,
123
+ Ze as SScrollReveal,
124
+ ie as SSelect,
125
+ ge as SSkeleton,
126
+ ke as SSmartTextField,
127
+ be as SSnackbarMessage,
128
+ $e as SSpotlightCursor,
129
+ Be as SStripeCVC,
130
+ ze as SStripeExpiry,
131
+ Ee as SStripeNumber,
132
+ Do as STab,
133
+ Mo as STabPanel,
134
+ Po as STabs,
135
+ b as STextEditor,
136
+ Se as STextField,
137
+ ho as STextShimmer,
138
+ ve as STextTruncation,
139
+ Ge as SThemeProvider,
140
+ Te as STip,
141
+ Lo as STypewriterText,
142
+ De as SnackbarMessageProvider,
143
+ Re as StripeTextField,
144
+ Oo as bytesToSize,
145
+ qo as createLogger,
146
+ Qo as dayjs,
147
+ Go as formatDatePosted,
148
+ Ho as logger,
149
+ Ao as useDialog,
150
+ E as useDialogConfirm,
151
+ N as useDialogMessage,
152
+ zo as usePopover,
153
+ Ro as useScrollAnimation,
154
+ ye as useSnackbarMessage
148
155
  };
@@ -0,0 +1,2 @@
1
+ export { default } from './s-category-card';
2
+ export type { SCategoryCardProps } from './s-category-card';
@@ -0,0 +1,4 @@
1
+ import { default as o } from "./s-category-card.js";
2
+ export {
3
+ o as default
4
+ };
@@ -0,0 +1,5 @@
1
+ {
2
+ "main": "./index.js",
3
+ "types": "./index.d.ts",
4
+ "sideEffects": false
5
+ }
@@ -0,0 +1,32 @@
1
+ import { default as React } from 'react';
2
+ import { SxProps, Theme } from '@mui/material';
3
+ export declare const Wrapper: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<Theme> & Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('@mui/system').BoxOwnProps<Theme>> & import('@mui/system').MUIStyledCommonProps<Theme> & {
4
+ disableHoverEffect?: boolean;
5
+ hoverScale?: number;
6
+ }, {}, {}>;
7
+ export declare const CategoryTitle: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<Theme> & Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('@mui/system').BoxOwnProps<Theme>> & import('@mui/system').MUIStyledCommonProps<Theme> & {
8
+ titlePosition?: "bottom" | "top" | "center";
9
+ titleAlignment?: "left" | "center" | "right";
10
+ }, {}, {}>;
11
+ export interface SCategoryCardProps {
12
+ image: string;
13
+ title: string;
14
+ width?: number | string;
15
+ height?: number | string;
16
+ alt?: string;
17
+ titlePosition?: 'bottom' | 'top' | 'center';
18
+ titleAlignment?: 'left' | 'center' | 'right';
19
+ titleVariant?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'subtitle1' | 'subtitle2' | 'body1' | 'body2' | 'caption' | 'button' | 'overline';
20
+ titleColor?: string;
21
+ titleBackgroundColor?: string;
22
+ titleOpacity?: number;
23
+ borderRadius?: number | string;
24
+ disableHoverEffect?: boolean;
25
+ hoverScale?: number;
26
+ onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;
27
+ sx?: SxProps<Theme>;
28
+ titleSx?: SxProps<Theme>;
29
+ imageSx?: SxProps<Theme>;
30
+ }
31
+ declare const SCategoryCard: ({ image, title, width, height, alt, titlePosition, titleAlignment, titleVariant, titleColor, titleBackgroundColor, titleOpacity, borderRadius, disableHoverEffect, hoverScale, onClick, sx, titleSx, imageSx, }: SCategoryCardProps) => import("react/jsx-runtime").JSX.Element;
32
+ export default SCategoryCard;
@@ -0,0 +1,103 @@
1
+ import { j as r } from "../jsx-runtime-DywqP_6a.js";
2
+ import { styled as c, Box as i, Typography as v } from "@mui/material";
3
+ import C from "../s-lazy-image/s-lazy-image.js";
4
+ const F = c(i)(
5
+ ({ disableHoverEffect: t = !1, hoverScale: o = 1.1 }) => ({
6
+ height: "100%",
7
+ cursor: "pointer",
8
+ overflow: "hidden",
9
+ borderRadius: 1,
10
+ position: "relative",
11
+ img: {
12
+ height: "100%",
13
+ objectFit: "cover",
14
+ transition: "all 0.3s",
15
+ objectPosition: "center center"
16
+ },
17
+ ...!t && {
18
+ ":hover": {
19
+ img: { transform: `scale(${o})` }
20
+ }
21
+ }
22
+ })
23
+ ), S = c(i)(({ titlePosition: t = "bottom", titleAlignment: o = "center" }) => ({
24
+ left: 10,
25
+ right: 10,
26
+ padding: 8,
27
+ textAlign: o,
28
+ position: "absolute",
29
+ transition: "all 0.3s",
30
+ ...t === "bottom" && { bottom: 10 },
31
+ ...t === "top" && { top: 10 },
32
+ ...t === "center" && {
33
+ top: "50%",
34
+ transform: "translateY(-50%)"
35
+ }
36
+ })), B = ({
37
+ image: t,
38
+ title: o,
39
+ width: e = 250,
40
+ height: a = 250,
41
+ alt: l = "category",
42
+ titlePosition: p = "bottom",
43
+ titleAlignment: m = "center",
44
+ titleVariant: g = "body1",
45
+ titleColor: d,
46
+ titleBackgroundColor: b = "background.paper",
47
+ titleOpacity: f = 1,
48
+ borderRadius: s = 2,
49
+ disableHoverEffect: x = !1,
50
+ hoverScale: y = 1.1,
51
+ onClick: n,
52
+ sx: j,
53
+ titleSx: h,
54
+ imageSx: u
55
+ }) => /* @__PURE__ */ r.jsxs(
56
+ F,
57
+ {
58
+ disableHoverEffect: x,
59
+ hoverScale: y,
60
+ onClick: n,
61
+ sx: {
62
+ borderRadius: s,
63
+ cursor: n ? "pointer" : "default",
64
+ width: e,
65
+ height: a,
66
+ ...j
67
+ },
68
+ children: [
69
+ /* @__PURE__ */ r.jsx(
70
+ C,
71
+ {
72
+ src: t,
73
+ width: e,
74
+ height: a,
75
+ alt: l,
76
+ style: {
77
+ objectFit: "cover",
78
+ ...u
79
+ }
80
+ }
81
+ ),
82
+ /* @__PURE__ */ r.jsx(
83
+ S,
84
+ {
85
+ titlePosition: p,
86
+ titleAlignment: m,
87
+ sx: {
88
+ borderRadius: s,
89
+ bgcolor: b,
90
+ opacity: f,
91
+ ...h
92
+ },
93
+ children: /* @__PURE__ */ r.jsx(v, { variant: g, color: d, children: o })
94
+ }
95
+ )
96
+ ]
97
+ }
98
+ );
99
+ export {
100
+ S as CategoryTitle,
101
+ F as Wrapper,
102
+ B as default
103
+ };
@@ -0,0 +1,3 @@
1
+ export { default as SCountdown } from './s-count-down';
2
+ export { SCountBox } from './s-count-down';
3
+ export type { SCountDownProps, SCountBoxProps } from './s-count-down';
@@ -0,0 +1,5 @@
1
+ import { SCountBox as n, default as u } from "./s-count-down.js";
2
+ export {
3
+ n as SCountBox,
4
+ u as SCountdown
5
+ };
@@ -0,0 +1,5 @@
1
+ {
2
+ "main": "./index.js",
3
+ "types": "./index.d.ts",
4
+ "sideEffects": false
5
+ }
@@ -0,0 +1,118 @@
1
+ import { default as React } from 'react';
2
+ import { SxProps, Theme } from '@mui/material';
3
+ /**
4
+ * Props for individual count box component
5
+ */
6
+ export interface SCountBoxProps {
7
+ /** The numeric value to display */
8
+ digit: number;
9
+ /** The label/title for this time unit */
10
+ title: string;
11
+ /** Size variant for the count box */
12
+ size?: 'small' | 'medium' | 'large';
13
+ /** Color variant for the count box */
14
+ color?: 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'inherit';
15
+ /** Animation type for value changes */
16
+ animation?: 'none' | 'fade' | 'slide';
17
+ /** Custom styling */
18
+ sx?: SxProps<Theme>;
19
+ /** Custom digit styling */
20
+ digitSx?: SxProps<Theme>;
21
+ /** Custom title styling */
22
+ titleSx?: SxProps<Theme>;
23
+ /** Show separator after this box */
24
+ showSeparator?: boolean;
25
+ /** Custom separator element */
26
+ separator?: React.ReactNode;
27
+ /** Format for displaying the digit (e.g., '00' for zero-padding) */
28
+ digitFormat?: 'default' | 'padded';
29
+ /** Whether this count box is hidden */
30
+ hidden?: boolean;
31
+ }
32
+ /**
33
+ * Individual count box component that displays a single time unit
34
+ */
35
+ export declare const SCountBox: ({ digit, title, size, color, animation, sx, digitSx, titleSx, showSeparator, separator, digitFormat, hidden, }: SCountBoxProps) => import("react/jsx-runtime").JSX.Element | null;
36
+ /**
37
+ * Props for the main countdown component
38
+ */
39
+ export interface SCountDownProps {
40
+ /** Target date timestamp in milliseconds (from Date.getTime()) */
41
+ expireDate: number;
42
+ /** Size variant for all count boxes */
43
+ size?: 'small' | 'medium' | 'large';
44
+ /** Color theme for the countdown */
45
+ color?: 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'inherit';
46
+ /** Layout orientation */
47
+ layout?: 'horizontal' | 'vertical' | 'grid';
48
+ /** Animation type for value changes */
49
+ animation?: 'none' | 'fade' | 'slide';
50
+ /** Whether to show separators between units */
51
+ showSeparators?: boolean;
52
+ /** Custom separator element */
53
+ separator?: React.ReactNode;
54
+ /** Which time units to display */
55
+ units?: {
56
+ days?: boolean;
57
+ hours?: boolean;
58
+ minutes?: boolean;
59
+ seconds?: boolean;
60
+ };
61
+ /** Custom labels for time units */
62
+ labels?: {
63
+ days?: string;
64
+ hours?: string;
65
+ minutes?: string;
66
+ seconds?: string;
67
+ };
68
+ /** Format for displaying digits */
69
+ digitFormat?: 'default' | 'padded';
70
+ /** Callback fired when countdown reaches zero */
71
+ onComplete?: () => void;
72
+ /** Callback fired on each tick (every second) */
73
+ onTick?: (timeLeft: {
74
+ days: number;
75
+ hours: number;
76
+ minutes: number;
77
+ seconds: number;
78
+ }) => void;
79
+ /** Callback fired when countdown starts */
80
+ onStart?: () => void;
81
+ /** What to display when countdown is complete */
82
+ completedText?: React.ReactNode;
83
+ /** Whether to auto-hide completed units (e.g., hide days when 0) */
84
+ autoHideZeroUnits?: boolean;
85
+ /** Custom styling for the container */
86
+ sx?: SxProps<Theme>;
87
+ /** ARIA label for accessibility */
88
+ 'aria-label'?: string;
89
+ /** Whether the countdown is paused */
90
+ paused?: boolean;
91
+ /** Responsive breakpoints for size changes */
92
+ responsive?: {
93
+ xs?: 'small' | 'medium' | 'large';
94
+ sm?: 'small' | 'medium' | 'large';
95
+ md?: 'small' | 'medium' | 'large';
96
+ lg?: 'small' | 'medium' | 'large';
97
+ xl?: 'small' | 'medium' | 'large';
98
+ };
99
+ }
100
+ /**
101
+ * SCountdown - A comprehensive countdown timer component with extensive customization options
102
+ *
103
+ * Features:
104
+ * - Multiple size variants and color themes
105
+ * - Flexible layout options (horizontal, vertical, grid)
106
+ * - Animation support for value changes
107
+ * - Customizable time units and labels
108
+ * - Auto-hide zero units option
109
+ * - Accessibility support with ARIA labels
110
+ * - Responsive design capabilities
111
+ * - Event callbacks for interaction
112
+ * - Pause/resume functionality
113
+ *
114
+ * @param props - SCountDownProps
115
+ * @returns JSX.Element - Countdown timer component
116
+ */
117
+ declare const SCountdown: ({ expireDate, size, color, layout, animation, showSeparators, separator, units, labels, digitFormat, onComplete, onTick, onStart, completedText, autoHideZeroUnits, sx, "aria-label": ariaLabel, paused, responsive, }: SCountDownProps) => import("react/jsx-runtime").JSX.Element;
118
+ export default SCountdown;
@@ -0,0 +1,248 @@
1
+ import { j as e } from "../jsx-runtime-DywqP_6a.js";
2
+ import { Typography as x, Fade as A, Slide as B } from "@mui/material";
3
+ import M from "../hooks/use-count-down.js";
4
+ import p from "../s-flex-box/s-flex-box.js";
5
+ const T = ({
6
+ digit: y = 0,
7
+ title: i = "",
8
+ size: m = "medium",
9
+ color: u = "inherit",
10
+ animation: h = "none",
11
+ sx: g,
12
+ digitSx: S,
13
+ titleSx: f,
14
+ showSeparator: r = !1,
15
+ separator: j = ":",
16
+ digitFormat: w = "default",
17
+ hidden: k = !1
18
+ }) => {
19
+ if (k) return null;
20
+ const v = (t) => w === "padded" ? t.toString().padStart(2, "0") : t.toString(), s = (() => {
21
+ switch (m) {
22
+ case "small":
23
+ return {
24
+ digit: { fontSize: "1.5rem", lineHeight: 1.2 },
25
+ title: { fontSize: "0.75rem", letterSpacing: "0.05em" }
26
+ };
27
+ case "large":
28
+ return {
29
+ digit: { fontSize: "3.5rem", lineHeight: 1.1 },
30
+ title: { fontSize: "1rem", letterSpacing: "0.1em" }
31
+ };
32
+ default:
33
+ return {
34
+ digit: { fontSize: "2.5rem", lineHeight: 1.15 },
35
+ title: { fontSize: "0.875rem", letterSpacing: "0.08em" }
36
+ };
37
+ }
38
+ })(), l = v(y), o = /* @__PURE__ */ e.jsx(
39
+ x,
40
+ {
41
+ variant: "h3",
42
+ component: "span",
43
+ sx: {
44
+ fontWeight: 700,
45
+ color: u === "inherit" ? "text.primary" : `${u}.main`,
46
+ width: "70px",
47
+ ...s.digit,
48
+ ...S
49
+ },
50
+ children: l
51
+ }
52
+ ), $ = /* @__PURE__ */ e.jsx(
53
+ x,
54
+ {
55
+ component: "span",
56
+ sx: {
57
+ color: "text.secondary",
58
+ fontWeight: 600,
59
+ textTransform: "uppercase",
60
+ display: "block",
61
+ mt: 0.5,
62
+ ...s.title,
63
+ ...f
64
+ },
65
+ children: i
66
+ }
67
+ ), n = /* @__PURE__ */ e.jsxs(
68
+ p,
69
+ {
70
+ flexDirection: "column",
71
+ alignItems: "center",
72
+ sx: {
73
+ textAlign: "center",
74
+ minWidth: "fit-content",
75
+ ...g
76
+ },
77
+ children: [
78
+ h === "fade" ? /* @__PURE__ */ e.jsx(A, { in: !0, timeout: 300, children: /* @__PURE__ */ e.jsx("div", { children: o }) }, l) : h === "slide" ? /* @__PURE__ */ e.jsx(B, { in: !0, direction: "up", timeout: 300, children: /* @__PURE__ */ e.jsx("div", { children: o }) }, l) : o,
79
+ $
80
+ ]
81
+ }
82
+ );
83
+ return r ? /* @__PURE__ */ e.jsxs(p, { alignItems: "center", children: [
84
+ n,
85
+ /* @__PURE__ */ e.jsx(
86
+ x,
87
+ {
88
+ variant: "h3",
89
+ sx: {
90
+ color: "text.secondary",
91
+ ...s.digit,
92
+ lineHeight: 1,
93
+ alignSelf: "flex-start",
94
+ mt: 0.5
95
+ },
96
+ children: j
97
+ }
98
+ )
99
+ ] }) : n;
100
+ }, V = ({
101
+ expireDate: y,
102
+ size: i = "medium",
103
+ color: m = "inherit",
104
+ layout: u = "horizontal",
105
+ animation: h = "none",
106
+ showSeparators: g = !1,
107
+ separator: S = ":",
108
+ units: f = {
109
+ days: !0,
110
+ hours: !0,
111
+ minutes: !0,
112
+ seconds: !0
113
+ },
114
+ labels: r = {
115
+ days: "DAYS",
116
+ hours: "HOURS",
117
+ minutes: "MINS",
118
+ seconds: "SECS"
119
+ },
120
+ digitFormat: j = "default",
121
+ onComplete: w,
122
+ onTick: k,
123
+ onStart: v,
124
+ completedText: c = "Time is up!",
125
+ autoHideZeroUnits: s = !1,
126
+ sx: l,
127
+ "aria-label": o = "Countdown timer",
128
+ paused: $ = !1,
129
+ responsive: n
130
+ }) => {
131
+ const { timeLeft: t, isExpired: E } = M({
132
+ expireDate: y,
133
+ onComplete: w,
134
+ onTick: k,
135
+ onStart: v,
136
+ paused: $
137
+ });
138
+ if (E && c)
139
+ return /* @__PURE__ */ e.jsx(
140
+ p,
141
+ {
142
+ justifyContent: "center",
143
+ alignItems: "center",
144
+ sx: { textAlign: "center", ...l },
145
+ role: "timer",
146
+ "aria-label": `${o} - completed`,
147
+ children: typeof c == "string" ? /* @__PURE__ */ e.jsx(
148
+ x,
149
+ {
150
+ variant: i === "large" ? "h4" : i === "small" ? "h6" : "h5",
151
+ color: m === "inherit" ? "text.primary" : `${m}.main`,
152
+ sx: { fontWeight: 600 },
153
+ children: c
154
+ }
155
+ ) : c
156
+ }
157
+ );
158
+ const C = [], I = [
159
+ { key: "days", value: t.days, label: r.days },
160
+ { key: "hours", value: t.hours, label: r.hours },
161
+ { key: "minutes", value: t.minutes, label: r.minutes },
162
+ { key: "seconds", value: t.seconds, label: r.seconds }
163
+ ];
164
+ I.forEach((a, D) => {
165
+ if (f[a.key] && (!s || a.value > 0 || a.key === "seconds")) {
166
+ const W = D === I.length - 1, H = g && !W && I.slice(D + 1).some(
167
+ (z) => f[z.key] && (!s || z.value > 0 || z.key === "seconds")
168
+ );
169
+ C.push(
170
+ /* @__PURE__ */ e.jsx(
171
+ T,
172
+ {
173
+ digit: a.value,
174
+ title: a.label || "",
175
+ size: i,
176
+ color: m,
177
+ animation: h,
178
+ digitFormat: j,
179
+ showSeparator: H,
180
+ separator: S
181
+ },
182
+ a.key
183
+ )
184
+ );
185
+ }
186
+ });
187
+ const b = () => {
188
+ switch (u) {
189
+ case "vertical":
190
+ return {
191
+ flexDirection: "column",
192
+ gap: 2,
193
+ alignItems: "center"
194
+ };
195
+ case "grid":
196
+ return {
197
+ display: "grid",
198
+ gridTemplateColumns: `repeat(${C.length}, 1fr)`,
199
+ gap: 2,
200
+ justifyItems: "center"
201
+ };
202
+ default:
203
+ return {
204
+ flexDirection: "row",
205
+ gap: g ? 0 : 2,
206
+ alignItems: "center",
207
+ justifyContent: "center",
208
+ flexWrap: "wrap"
209
+ };
210
+ }
211
+ }, d = n ? {
212
+ xs: n.xs || i,
213
+ sm: n.sm || i,
214
+ md: n.md || i,
215
+ lg: n.lg || i,
216
+ xl: n.xl || i
217
+ } : void 0;
218
+ return /* @__PURE__ */ e.jsx(
219
+ p,
220
+ {
221
+ sx: {
222
+ width: "fit-content",
223
+ ...b(),
224
+ ...l,
225
+ ...d && {
226
+ // Apply responsive sizing if provided
227
+ "@media (max-width: 600px)": {
228
+ "& .MuiTypography-h3": {
229
+ fontSize: d.xs === "small" ? "1.5rem" : d.xs === "large" ? "3.5rem" : "2.5rem"
230
+ }
231
+ },
232
+ "@media (min-width: 600px) and (max-width: 960px)": {
233
+ "& .MuiTypography-h3": {
234
+ fontSize: d.sm === "small" ? "1.5rem" : d.sm === "large" ? "3.5rem" : "2.5rem"
235
+ }
236
+ }
237
+ }
238
+ },
239
+ role: "timer",
240
+ "aria-label": `${o} - ${t.days} days, ${t.hours} hours, ${t.minutes} minutes, ${t.seconds} seconds remaining`,
241
+ children: C
242
+ }
243
+ );
244
+ };
245
+ export {
246
+ T as SCountBox,
247
+ V as default
248
+ };
@@ -0,0 +1,2 @@
1
+ export { default } from './s-overlay-scrollbar';
2
+ export type { SOverlayScrollbarProps } from './s-overlay-scrollbar';
@@ -0,0 +1,4 @@
1
+ import { default as o } from "./s-overlay-scrollbar.js";
2
+ export {
3
+ o as default
4
+ };
@@ -0,0 +1,5 @@
1
+ {
2
+ "main": "./index.js",
3
+ "types": "./index.d.ts",
4
+ "sideEffects": false
5
+ }
@@ -0,0 +1,8 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { SxProps, Theme } from '@mui/material/styles';
3
+ export interface SOverlayScrollbarProps extends PropsWithChildren {
4
+ className?: string;
5
+ sx?: SxProps<Theme>;
6
+ }
7
+ declare const SOverlayScrollbar: ({ sx, children, className }: SOverlayScrollbarProps) => import("react/jsx-runtime").JSX.Element;
8
+ export default SOverlayScrollbar;
@@ -0,0 +1,25 @@
1
+ import { j as t } from "../jsx-runtime-DywqP_6a.js";
2
+ import { OverlayScrollbarsComponent as l } from "overlayscrollbars-react";
3
+ import { s } from "../styled-DOEEZAON.js";
4
+ import { a as r } from "../colorManipulator-ep5lERxB.js";
5
+ import '../assets/s-overlay-scrollbar.css';const p = s(l)(({ theme: e }) => ({
6
+ maxHeight: "100%",
7
+ ".os-theme-dark": {
8
+ "--os-size": "9px",
9
+ "--os-handle-bg": r(e.palette.grey[400], 0.5),
10
+ "--os-handle-bg-hover": r(e.palette.grey[400], 0.6),
11
+ "--os-handle-bg-active": r(e.palette.grey[400], 0.6)
12
+ }
13
+ })), y = ({ sx: e, children: o, className: a }) => /* @__PURE__ */ t.jsx(
14
+ p,
15
+ {
16
+ defer: !0,
17
+ sx: e,
18
+ className: a,
19
+ options: { scrollbars: { autoHide: "leave", autoHideDelay: 100 } },
20
+ children: o
21
+ }
22
+ );
23
+ export {
24
+ y as default
25
+ };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "registry": "https://registry.npmjs.org"
5
5
  },
6
- "version": "1.0.111",
6
+ "version": "1.0.113",
7
7
  "description": "advanced ui kit for solostylist",
8
8
  "private": false,
9
9
  "type": "module",
@@ -45,6 +45,7 @@
45
45
  "@tiptap/react": "^2.11.9",
46
46
  "@tiptap/starter-kit": "^2.11.9",
47
47
  "dayjs": "^1.11.13",
48
+ "emoji-picker-react": "^4.13.3",
48
49
  "framer-motion": "^12.23.3",
49
50
  "i18next": "^25.0.2",
50
51
  "i18next-http-backend": "^3.0.2",
@@ -56,7 +57,7 @@
56
57
  "react-slick": "^0.31.0",
57
58
  "slick-carousel": "^1.8.1",
58
59
  "uuid": "^11.1.0",
59
- "emoji-picker-react": "^4.13.3"
60
+ "overlayscrollbars-react": "^0.5.6"
60
61
  },
61
62
  "devDependencies": {
62
63
  "@ianvs/prettier-plugin-sort-imports": "^4.4.2",