asterui 0.12.2 → 0.12.4
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/components/Kbd.d.ts +2 -1
- package/dist/components/Modal.d.ts +7 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.js +196 -201
- package/dist/index.js.map +1 -1
- package/dist/index100.js +11 -44
- package/dist/index100.js.map +1 -1
- package/dist/index101.js +12 -10
- package/dist/index101.js.map +1 -1
- package/dist/index102.js +7 -14
- package/dist/index102.js.map +1 -1
- package/dist/index103.js +12 -7
- package/dist/index103.js.map +1 -1
- package/dist/index104.js +29 -11
- package/dist/index104.js.map +1 -1
- package/dist/index105.js +16 -29
- package/dist/index105.js.map +1 -1
- package/dist/index13.js +95 -35
- package/dist/index13.js.map +1 -1
- package/dist/index14.js +153 -90
- package/dist/index14.js.map +1 -1
- package/dist/index15.js +146 -154
- package/dist/index15.js.map +1 -1
- package/dist/index16.js +5 -150
- package/dist/index16.js.map +1 -1
- package/dist/index17.js +71 -5
- package/dist/index17.js.map +1 -1
- package/dist/index18.js +17 -71
- package/dist/index18.js.map +1 -1
- package/dist/index19.js +96 -15
- package/dist/index19.js.map +1 -1
- package/dist/index20.js +105 -89
- package/dist/index20.js.map +1 -1
- package/dist/index21.js +177 -107
- package/dist/index21.js.map +1 -1
- package/dist/index22.js +107 -181
- package/dist/index22.js.map +1 -1
- package/dist/index23.js +19 -110
- package/dist/index23.js.map +1 -1
- package/dist/index24.js +41 -17
- package/dist/index24.js.map +1 -1
- package/dist/index25.js +32 -43
- package/dist/index25.js.map +1 -1
- package/dist/index26.js +41 -32
- package/dist/index26.js.map +1 -1
- package/dist/index27.js +12 -41
- package/dist/index27.js.map +1 -1
- package/dist/index28.js +33 -12
- package/dist/index28.js.map +1 -1
- package/dist/index29.js +63 -33
- package/dist/index29.js.map +1 -1
- package/dist/index30.js +77 -60
- package/dist/index30.js.map +1 -1
- package/dist/index31.js +18 -80
- package/dist/index31.js.map +1 -1
- package/dist/index32.js +217 -15
- package/dist/index32.js.map +1 -1
- package/dist/index33.js +1078 -216
- package/dist/index33.js.map +1 -1
- package/dist/index34.js +17 -1081
- package/dist/index34.js.map +1 -1
- package/dist/index35.js +121 -17
- package/dist/index35.js.map +1 -1
- package/dist/index36.js +37 -119
- package/dist/index36.js.map +1 -1
- package/dist/index37.js +182 -31
- package/dist/index37.js.map +1 -1
- package/dist/index38.js +97 -191
- package/dist/index38.js.map +1 -1
- package/dist/index39.js +158 -93
- package/dist/index39.js.map +1 -1
- package/dist/index40.js +139 -155
- package/dist/index40.js.map +1 -1
- package/dist/index41.js +15 -146
- package/dist/index41.js.map +1 -1
- package/dist/index42.js +17 -15
- package/dist/index42.js.map +1 -1
- package/dist/index43.js +21 -18
- package/dist/index43.js.map +1 -1
- package/dist/index44.js +116 -18
- package/dist/index44.js.map +1 -1
- package/dist/index45.js +10 -116
- package/dist/index45.js.map +1 -1
- package/dist/index46.js +35 -13
- package/dist/index46.js.map +1 -1
- package/dist/index47.js +34 -35
- package/dist/index47.js.map +1 -1
- package/dist/index48.js +116 -10
- package/dist/index48.js.map +1 -1
- package/dist/index49.js +174 -114
- package/dist/index49.js.map +1 -1
- package/dist/index50.js +136 -165
- package/dist/index50.js.map +1 -1
- package/dist/index51.js +11 -146
- package/dist/index51.js.map +1 -1
- package/dist/index52.js +20 -10
- package/dist/index52.js.map +1 -1
- package/dist/index53.js +14 -22
- package/dist/index53.js.map +1 -1
- package/dist/index54.js +7 -14
- package/dist/index54.js.map +1 -1
- package/dist/index55.js +268 -6
- package/dist/index55.js.map +1 -1
- package/dist/index56.js +17 -266
- package/dist/index56.js.map +1 -1
- package/dist/index57.js +122 -17
- package/dist/index57.js.map +1 -1
- package/dist/index58.js +108 -120
- package/dist/index58.js.map +1 -1
- package/dist/index59.js +167 -107
- package/dist/index59.js.map +1 -1
- package/dist/index60.js +29 -167
- package/dist/index60.js.map +1 -1
- package/dist/index61.js +120 -30
- package/dist/index61.js.map +1 -1
- package/dist/index62.js +80 -116
- package/dist/index62.js.map +1 -1
- package/dist/index63.js +19 -85
- package/dist/index63.js.map +1 -1
- package/dist/index64.js +73 -19
- package/dist/index64.js.map +1 -1
- package/dist/index65.js +54 -71
- package/dist/index65.js.map +1 -1
- package/dist/index66.js +44 -56
- package/dist/index66.js.map +1 -1
- package/dist/index67.js +49 -42
- package/dist/index67.js.map +1 -1
- package/dist/index68.js +62 -52
- package/dist/index68.js.map +1 -1
- package/dist/index69.js +101 -56
- package/dist/index69.js.map +1 -1
- package/dist/index70.js +41 -107
- package/dist/index70.js.map +1 -1
- package/dist/index71.js +68 -41
- package/dist/index71.js.map +1 -1
- package/dist/index72.js +19 -66
- package/dist/index72.js.map +1 -1
- package/dist/index73.js +43 -18
- package/dist/index73.js.map +1 -1
- package/dist/index74.js +132 -44
- package/dist/index74.js.map +1 -1
- package/dist/index75.js +50 -132
- package/dist/index75.js.map +1 -1
- package/dist/index76.js +21 -51
- package/dist/index76.js.map +1 -1
- package/dist/index77.js +31 -22
- package/dist/index77.js.map +1 -1
- package/dist/index78.js +22 -31
- package/dist/index78.js.map +1 -1
- package/dist/index79.js +327 -20
- package/dist/index79.js.map +1 -1
- package/dist/index80.js +50 -323
- package/dist/index80.js.map +1 -1
- package/dist/index81.js +40 -56
- package/dist/index81.js.map +1 -1
- package/dist/index82.js +23 -40
- package/dist/index82.js.map +1 -1
- package/dist/index83.js +93 -21
- package/dist/index83.js.map +1 -1
- package/dist/index84.js +123 -88
- package/dist/index84.js.map +1 -1
- package/dist/index85.js +154 -123
- package/dist/index85.js.map +1 -1
- package/dist/index86.js +63 -159
- package/dist/index86.js.map +1 -1
- package/dist/index87.js +35 -65
- package/dist/index87.js.map +1 -1
- package/dist/index88.js +234 -35
- package/dist/index88.js.map +1 -1
- package/dist/index89.js +31 -231
- package/dist/index89.js.map +1 -1
- package/dist/index90.js +210 -34
- package/dist/index90.js.map +1 -1
- package/dist/index91.js +198 -195
- package/dist/index91.js.map +1 -1
- package/dist/index92.js +241 -159
- package/dist/index92.js.map +1 -1
- package/dist/index93.js +166 -283
- package/dist/index93.js.map +1 -1
- package/dist/index94.js +253 -173
- package/dist/index94.js.map +1 -1
- package/dist/index95.js +14 -258
- package/dist/index95.js.map +1 -1
- package/dist/index96.js +31 -12
- package/dist/index96.js.map +1 -1
- package/dist/index97.js +5 -32
- package/dist/index97.js.map +1 -1
- package/dist/index98.js +13 -5
- package/dist/index98.js.map +1 -1
- package/dist/index99.js +43 -11
- package/dist/index99.js.map +1 -1
- package/package.json +11 -5
- package/dist/components/Calendar.d.ts +0 -23
- package/dist/index.css +0 -1
- package/dist/index106.js +0 -21
- package/dist/index106.js.map +0 -1
- package/dist/index107.js +0 -177
- package/dist/index107.js.map +0 -1
- package/dist/index109.js +0 -10796
- package/dist/index109.js.map +0 -1
- package/dist/index110.js +0 -8
- package/dist/index110.js.map +0 -1
- package/dist/index111.js +0 -45
- package/dist/index111.js.map +0 -1
- package/dist/index112.js +0 -5
- package/dist/index112.js.map +0 -1
- package/dist/index113.js +0 -10
- package/dist/index113.js.map +0 -1
- package/dist/index114.js +0 -155
- package/dist/index114.js.map +0 -1
- package/dist/index115.js +0 -33
- package/dist/index115.js.map +0 -1
- package/dist/index116.js +0 -33
- package/dist/index116.js.map +0 -1
- package/dist/index117.js +0 -5
- package/dist/index117.js.map +0 -1
- package/dist/index118.js +0 -75
- package/dist/index118.js.map +0 -1
- package/dist/index119.js +0 -42
- package/dist/index119.js.map +0 -1
- package/dist/index120.js +0 -29
- package/dist/index120.js.map +0 -1
- package/dist/index121.js +0 -24
- package/dist/index121.js.map +0 -1
- package/dist/index122.js +0 -27
- package/dist/index122.js.map +0 -1
- package/dist/index123.js +0 -23
- package/dist/index123.js.map +0 -1
- package/dist/index124.js +0 -103
- package/dist/index124.js.map +0 -1
- package/dist/index125.js +0 -363
- package/dist/index125.js.map +0 -1
- package/dist/index126.js +0 -28
- package/dist/index126.js.map +0 -1
- package/dist/index127.js +0 -76
- package/dist/index127.js.map +0 -1
- package/dist/index128.js +0 -19
- package/dist/index128.js.map +0 -1
- package/dist/index129.js +0 -69
- package/dist/index129.js.map +0 -1
- package/dist/index130.js +0 -147
- package/dist/index130.js.map +0 -1
- package/dist/index131.js +0 -5
- package/dist/index131.js.map +0 -1
- package/dist/index132.js +0 -59
- package/dist/index132.js.map +0 -1
- package/dist/index133.js +0 -5
- package/dist/index133.js.map +0 -1
- package/dist/index134.js +0 -5
- package/dist/index134.js.map +0 -1
- package/dist/index135.js +0 -5
- package/dist/index135.js.map +0 -1
- package/dist/index136.js +0 -5
- package/dist/index136.js.map +0 -1
- package/dist/index137.js +0 -5
- package/dist/index137.js.map +0 -1
- package/dist/index138.js +0 -5
- package/dist/index138.js.map +0 -1
- package/dist/index139.js +0 -5
- package/dist/index139.js.map +0 -1
- package/dist/index140.js +0 -5
- package/dist/index140.js.map +0 -1
- package/dist/index141.js +0 -35
- package/dist/index141.js.map +0 -1
- package/dist/index142.js +0 -5
- package/dist/index142.js.map +0 -1
- package/dist/index143.js +0 -11
- package/dist/index143.js.map +0 -1
- package/dist/index144.js +0 -5
- package/dist/index144.js.map +0 -1
- package/dist/index145.js +0 -5
- package/dist/index145.js.map +0 -1
- package/dist/index146.js +0 -24
- package/dist/index146.js.map +0 -1
- package/dist/index147.js +0 -5
- package/dist/index147.js.map +0 -1
- package/dist/index148.js +0 -27
- package/dist/index148.js.map +0 -1
- package/dist/index149.js +0 -74
- package/dist/index149.js.map +0 -1
- package/dist/index150.js +0 -24
- package/dist/index150.js.map +0 -1
- package/dist/index151.js +0 -37
- package/dist/index151.js.map +0 -1
- package/dist/index152.js +0 -73
- package/dist/index152.js.map +0 -1
- package/dist/index153.js +0 -5
- package/dist/index153.js.map +0 -1
- package/dist/index154.js +0 -25
- package/dist/index154.js.map +0 -1
- package/dist/index155.js +0 -5
- package/dist/index155.js.map +0 -1
- package/dist/index156.js +0 -5
- package/dist/index156.js.map +0 -1
- package/dist/index157.js +0 -5
- package/dist/index157.js.map +0 -1
- package/dist/index158.js +0 -5
- package/dist/index158.js.map +0 -1
- package/dist/index159.js +0 -7
- package/dist/index159.js.map +0 -1
package/dist/index20.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index20.js","sources":["../src/components/
|
|
1
|
+
{"version":3,"file":"index20.js","sources":["../src/components/Countdown.tsx"],"sourcesContent":["import React, { useEffect, useState, useCallback } from 'react'\n\nexport interface CountdownProps {\n /** Target timestamp in milliseconds or Date object */\n value: number | Date\n /** Format string: 'D' days, 'H' hours, 'M' minutes, 'S' seconds */\n format?: string\n /** Callback when countdown reaches zero */\n onFinish?: () => void\n /** Callback on each tick with remaining time */\n onChange?: (value: number) => void\n /** Additional CSS classes */\n className?: string\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Show labels under each unit */\n showLabels?: boolean\n /** Custom labels */\n labels?: {\n days?: string\n hours?: string\n minutes?: string\n seconds?: string\n }\n /** Show box style around each unit */\n boxed?: boolean\n}\n\ninterface TimeLeft {\n days: number\n hours: number\n minutes: number\n seconds: number\n}\n\nconst calculateTimeLeft = (targetTime: number): TimeLeft => {\n const difference = targetTime - Date.now()\n\n if (difference <= 0) {\n return { days: 0, hours: 0, minutes: 0, seconds: 0 }\n }\n\n return {\n days: Math.floor(difference / (1000 * 60 * 60 * 24)),\n hours: Math.floor((difference / (1000 * 60 * 60)) % 24),\n minutes: Math.floor((difference / 1000 / 60) % 60),\n seconds: Math.floor((difference / 1000) % 60),\n }\n}\n\nconst CountdownUnit: React.FC<{\n value: number\n label?: string\n size?: CountdownProps['size']\n showLabel?: boolean\n boxed?: boolean\n}> = ({ value, label, size, showLabel, boxed }) => {\n const sizeClasses = {\n xs: 'text-lg',\n sm: 'text-2xl',\n md: 'text-4xl',\n lg: 'text-5xl',\n xl: 'text-6xl',\n }\n\n const content = (\n <span className={`countdown font-mono ${sizeClasses[size || 'md']}`}>\n <span\n style={{ '--value': value, '--digits': 2 } as React.CSSProperties}\n aria-live=\"polite\"\n aria-label={String(value)}\n >\n {String(value).padStart(2, '0')}\n </span>\n </span>\n )\n\n if (boxed) {\n return (\n <div className=\"flex flex-col items-center bg-neutral text-neutral-content rounded-box p-2\">\n {content}\n {showLabel && label && <span className=\"text-xs mt-1\">{label}</span>}\n </div>\n )\n }\n\n if (showLabel) {\n return (\n <div className=\"flex flex-col items-center\">\n {content}\n {label && <span className=\"text-xs text-base-content/70\">{label}</span>}\n </div>\n )\n }\n\n return content\n}\n\nexport const Countdown: React.FC<CountdownProps> = ({\n value,\n format = 'HH:MM:SS',\n onFinish,\n onChange,\n className = '',\n size = 'md',\n showLabels = false,\n labels = {},\n boxed = false,\n}) => {\n const targetTime = value instanceof Date ? value.getTime() : value\n const [timeLeft, setTimeLeft] = useState<TimeLeft>(() => calculateTimeLeft(targetTime))\n const [finished, setFinished] = useState(false)\n\n const defaultLabels = {\n days: labels.days || 'days',\n hours: labels.hours || 'hours',\n minutes: labels.minutes || 'min',\n seconds: labels.seconds || 'sec',\n }\n\n const tick = useCallback(() => {\n const newTimeLeft = calculateTimeLeft(targetTime)\n setTimeLeft(newTimeLeft)\n\n const remaining = targetTime - Date.now()\n onChange?.(Math.max(0, remaining))\n\n if (remaining <= 0 && !finished) {\n setFinished(true)\n onFinish?.()\n }\n }, [targetTime, onChange, onFinish, finished])\n\n useEffect(() => {\n const timer = setInterval(tick, 1000)\n tick() // Initial tick\n\n return () => clearInterval(timer)\n }, [tick])\n\n const showDays = format.includes('D')\n const showHours = format.includes('H')\n const showMinutes = format.includes('M')\n const showSeconds = format.includes('S')\n\n const separatorSize = size === 'lg' || size === 'xl' ? 'text-3xl' : size === 'md' ? 'text-2xl' : 'text-xl'\n const showSeparators = !showLabels && !boxed\n\n return (\n <div className={`flex gap-4 items-center ${className}`}>\n {showDays && (\n <>\n <CountdownUnit\n value={timeLeft.days}\n label={defaultLabels.days}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n {showSeparators && (showHours || showMinutes || showSeconds) && (\n <span className={separatorSize}>:</span>\n )}\n </>\n )}\n {showHours && (\n <>\n <CountdownUnit\n value={timeLeft.hours}\n label={defaultLabels.hours}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n {showSeparators && (showMinutes || showSeconds) && (\n <span className={separatorSize}>:</span>\n )}\n </>\n )}\n {showMinutes && (\n <>\n <CountdownUnit\n value={timeLeft.minutes}\n label={defaultLabels.minutes}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n {showSeparators && showSeconds && <span className={separatorSize}>:</span>}\n </>\n )}\n {showSeconds && (\n <CountdownUnit\n value={timeLeft.seconds}\n label={defaultLabels.seconds}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n )}\n </div>\n )\n}\n\nCountdown.displayName = 'Countdown'\n"],"names":["calculateTimeLeft","targetTime","difference","CountdownUnit","value","label","size","showLabel","boxed","content","jsx","jsxs","Countdown","format","onFinish","onChange","className","showLabels","labels","timeLeft","setTimeLeft","useState","finished","setFinished","defaultLabels","tick","useCallback","newTimeLeft","remaining","useEffect","timer","showDays","showHours","showMinutes","showSeconds","separatorSize","showSeparators","Fragment"],"mappings":"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"}
|
package/dist/index21.js
CHANGED
|
@@ -1,117 +1,187 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
className: f = "",
|
|
40
|
-
size: a = "md",
|
|
41
|
-
showLabels: n = !1,
|
|
42
|
-
labels: i = {},
|
|
43
|
-
boxed: o = !1
|
|
1
|
+
import { jsxs as m, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { useState as h, useRef as j, useEffect as y } from "react";
|
|
3
|
+
import { Input as T } from "./index39.js";
|
|
4
|
+
const $ = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], I = [
|
|
5
|
+
"January",
|
|
6
|
+
"February",
|
|
7
|
+
"March",
|
|
8
|
+
"April",
|
|
9
|
+
"May",
|
|
10
|
+
"June",
|
|
11
|
+
"July",
|
|
12
|
+
"August",
|
|
13
|
+
"September",
|
|
14
|
+
"October",
|
|
15
|
+
"November",
|
|
16
|
+
"December"
|
|
17
|
+
];
|
|
18
|
+
function L(t, l = "MM/DD/YYYY") {
|
|
19
|
+
if (!t) return "";
|
|
20
|
+
const u = t.getFullYear(), f = String(t.getMonth() + 1).padStart(2, "0"), g = String(t.getDate()).padStart(2, "0");
|
|
21
|
+
return l.replace("YYYY", String(u)).replace("MM", f).replace("DD", g);
|
|
22
|
+
}
|
|
23
|
+
function q(t, l) {
|
|
24
|
+
return new Date(t, l + 1, 0).getDate();
|
|
25
|
+
}
|
|
26
|
+
function z(t, l) {
|
|
27
|
+
return new Date(t, l, 1).getDay();
|
|
28
|
+
}
|
|
29
|
+
const B = ({
|
|
30
|
+
value: t,
|
|
31
|
+
defaultValue: l,
|
|
32
|
+
onChange: u,
|
|
33
|
+
format: f,
|
|
34
|
+
placeholder: g = "Select date",
|
|
35
|
+
disabled: v = !1,
|
|
36
|
+
className: x = "",
|
|
37
|
+
size: N = "md",
|
|
38
|
+
...Y
|
|
44
39
|
}) => {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
40
|
+
const [o, b] = h(
|
|
41
|
+
t || l || null
|
|
42
|
+
), [c, d] = h(!1), [r, i] = h(
|
|
43
|
+
o ? o.getMonth() : (/* @__PURE__ */ new Date()).getMonth()
|
|
44
|
+
), [a, p] = h(
|
|
45
|
+
o ? o.getFullYear() : (/* @__PURE__ */ new Date()).getFullYear()
|
|
46
|
+
), w = j(null);
|
|
47
|
+
y(() => {
|
|
48
|
+
t !== void 0 && b(t);
|
|
49
|
+
}, [t]), y(() => {
|
|
50
|
+
function e(s) {
|
|
51
|
+
w.current && !w.current.contains(s.target) && d(!1);
|
|
52
|
+
}
|
|
53
|
+
if (c)
|
|
54
|
+
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
55
|
+
}, [c]);
|
|
56
|
+
const S = (e) => {
|
|
57
|
+
const s = new Date(a, r, e);
|
|
58
|
+
b(s), u?.(s), d(!1);
|
|
59
|
+
}, F = () => {
|
|
60
|
+
r === 0 ? (i(11), p(a - 1)) : i(r - 1);
|
|
61
|
+
}, O = () => {
|
|
62
|
+
r === 11 ? (i(0), p(a + 1)) : i(r + 1);
|
|
63
|
+
}, k = q(a, r), C = z(a, r), D = [];
|
|
64
|
+
for (let e = 0; e < C; e++)
|
|
65
|
+
D.push(null);
|
|
66
|
+
for (let e = 1; e <= k; e++)
|
|
67
|
+
D.push(e);
|
|
68
|
+
const M = (e) => !e || !o ? !1 : o.getDate() === e && o.getMonth() === r && o.getFullYear() === a, R = (e) => {
|
|
69
|
+
if (!e) return !1;
|
|
70
|
+
const s = /* @__PURE__ */ new Date();
|
|
71
|
+
return s.getDate() === e && s.getMonth() === r && s.getFullYear() === a;
|
|
72
|
+
};
|
|
73
|
+
return /* @__PURE__ */ m("div", { ref: w, className: `relative ${x}`, "data-state": c ? "open" : "closed", ...Y, children: [
|
|
74
|
+
/* @__PURE__ */ n(
|
|
75
|
+
T,
|
|
76
|
+
{
|
|
77
|
+
value: L(o, f),
|
|
78
|
+
placeholder: g,
|
|
79
|
+
disabled: v,
|
|
80
|
+
size: N,
|
|
81
|
+
readOnly: !0,
|
|
82
|
+
onClick: () => !v && d(!c),
|
|
83
|
+
className: "cursor-pointer"
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
c && /* @__PURE__ */ m("div", { className: "absolute top-full left-0 mt-2 bg-base-100 border border-base-300 rounded-lg shadow-lg p-4 z-50 w-80", children: [
|
|
87
|
+
/* @__PURE__ */ m("div", { className: "flex items-center justify-between mb-4", children: [
|
|
88
|
+
/* @__PURE__ */ n(
|
|
89
|
+
"button",
|
|
90
|
+
{
|
|
91
|
+
type: "button",
|
|
92
|
+
onClick: F,
|
|
93
|
+
className: "btn btn-ghost btn-sm btn-square",
|
|
94
|
+
children: /* @__PURE__ */ n(
|
|
95
|
+
"svg",
|
|
96
|
+
{
|
|
97
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
98
|
+
className: "h-5 w-5",
|
|
99
|
+
viewBox: "0 0 20 20",
|
|
100
|
+
fill: "currentColor",
|
|
101
|
+
children: /* @__PURE__ */ n(
|
|
102
|
+
"path",
|
|
103
|
+
{
|
|
104
|
+
fillRule: "evenodd",
|
|
105
|
+
d: "M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z",
|
|
106
|
+
clipRule: "evenodd"
|
|
107
|
+
}
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
),
|
|
113
|
+
/* @__PURE__ */ m("div", { className: "text-base font-semibold", children: [
|
|
114
|
+
I[r],
|
|
115
|
+
" ",
|
|
116
|
+
a
|
|
117
|
+
] }),
|
|
118
|
+
/* @__PURE__ */ n(
|
|
119
|
+
"button",
|
|
120
|
+
{
|
|
121
|
+
type: "button",
|
|
122
|
+
onClick: O,
|
|
123
|
+
className: "btn btn-ghost btn-sm btn-square",
|
|
124
|
+
children: /* @__PURE__ */ n(
|
|
125
|
+
"svg",
|
|
126
|
+
{
|
|
127
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
128
|
+
className: "h-5 w-5",
|
|
129
|
+
viewBox: "0 0 20 20",
|
|
130
|
+
fill: "currentColor",
|
|
131
|
+
children: /* @__PURE__ */ n(
|
|
132
|
+
"path",
|
|
133
|
+
{
|
|
134
|
+
fillRule: "evenodd",
|
|
135
|
+
d: "M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z",
|
|
136
|
+
clipRule: "evenodd"
|
|
137
|
+
}
|
|
138
|
+
)
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
] }),
|
|
144
|
+
/* @__PURE__ */ n("div", { className: "grid grid-cols-7 gap-1 mb-2", children: $.map((e) => /* @__PURE__ */ n(
|
|
145
|
+
"div",
|
|
65
146
|
{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
y && (v || g || x) && /* @__PURE__ */ t("span", { className: w, children: ":" })
|
|
74
|
-
] }),
|
|
75
|
-
v && /* @__PURE__ */ c(S, { children: [
|
|
76
|
-
/* @__PURE__ */ t(
|
|
77
|
-
h,
|
|
147
|
+
className: "text-center text-xs font-semibold text-base-content/60 py-2",
|
|
148
|
+
children: e
|
|
149
|
+
},
|
|
150
|
+
e
|
|
151
|
+
)) }),
|
|
152
|
+
/* @__PURE__ */ n("div", { className: "grid grid-cols-7 gap-1", children: D.map((e, s) => /* @__PURE__ */ n(
|
|
153
|
+
"button",
|
|
78
154
|
{
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
155
|
+
type: "button",
|
|
156
|
+
disabled: !e,
|
|
157
|
+
onClick: () => e && S(e),
|
|
158
|
+
className: `
|
|
159
|
+
aspect-square flex items-center justify-center text-sm rounded-lg
|
|
160
|
+
${e ? "hover:bg-base-200" : "invisible"}
|
|
161
|
+
${M(e) ? "bg-primary text-primary-content hover:bg-primary/90" : ""}
|
|
162
|
+
${R(e) && !M(e) ? "border border-primary" : ""}
|
|
163
|
+
${e ? "cursor-pointer" : ""}
|
|
164
|
+
`,
|
|
165
|
+
children: e
|
|
166
|
+
},
|
|
167
|
+
s
|
|
168
|
+
)) }),
|
|
169
|
+
/* @__PURE__ */ n("div", { className: "mt-4 flex justify-end", children: /* @__PURE__ */ n(
|
|
170
|
+
"button",
|
|
91
171
|
{
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
172
|
+
type: "button",
|
|
173
|
+
onClick: () => {
|
|
174
|
+
const e = /* @__PURE__ */ new Date();
|
|
175
|
+
b(e), i(e.getMonth()), p(e.getFullYear()), u?.(e), d(!1);
|
|
176
|
+
},
|
|
177
|
+
className: "btn btn-ghost btn-sm",
|
|
178
|
+
children: "Today"
|
|
97
179
|
}
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
] }),
|
|
101
|
-
x && /* @__PURE__ */ t(
|
|
102
|
-
h,
|
|
103
|
-
{
|
|
104
|
-
value: u.seconds,
|
|
105
|
-
label: m.seconds,
|
|
106
|
-
size: a,
|
|
107
|
-
showLabel: n,
|
|
108
|
-
boxed: o
|
|
109
|
-
}
|
|
110
|
-
)
|
|
180
|
+
) })
|
|
181
|
+
] })
|
|
111
182
|
] });
|
|
112
183
|
};
|
|
113
|
-
$.displayName = "Countdown";
|
|
114
184
|
export {
|
|
115
|
-
|
|
185
|
+
B as DatePicker
|
|
116
186
|
};
|
|
117
187
|
//# sourceMappingURL=index21.js.map
|
package/dist/index21.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index21.js","sources":["../src/components/Countdown.tsx"],"sourcesContent":["import React, { useEffect, useState, useCallback } from 'react'\n\nexport interface CountdownProps {\n /** Target timestamp in milliseconds or Date object */\n value: number | Date\n /** Format string: 'D' days, 'H' hours, 'M' minutes, 'S' seconds */\n format?: string\n /** Callback when countdown reaches zero */\n onFinish?: () => void\n /** Callback on each tick with remaining time */\n onChange?: (value: number) => void\n /** Additional CSS classes */\n className?: string\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Show labels under each unit */\n showLabels?: boolean\n /** Custom labels */\n labels?: {\n days?: string\n hours?: string\n minutes?: string\n seconds?: string\n }\n /** Show box style around each unit */\n boxed?: boolean\n}\n\ninterface TimeLeft {\n days: number\n hours: number\n minutes: number\n seconds: number\n}\n\nconst calculateTimeLeft = (targetTime: number): TimeLeft => {\n const difference = targetTime - Date.now()\n\n if (difference <= 0) {\n return { days: 0, hours: 0, minutes: 0, seconds: 0 }\n }\n\n return {\n days: Math.floor(difference / (1000 * 60 * 60 * 24)),\n hours: Math.floor((difference / (1000 * 60 * 60)) % 24),\n minutes: Math.floor((difference / 1000 / 60) % 60),\n seconds: Math.floor((difference / 1000) % 60),\n }\n}\n\nconst CountdownUnit: React.FC<{\n value: number\n label?: string\n size?: CountdownProps['size']\n showLabel?: boolean\n boxed?: boolean\n}> = ({ value, label, size, showLabel, boxed }) => {\n const sizeClasses = {\n xs: 'text-lg',\n sm: 'text-2xl',\n md: 'text-4xl',\n lg: 'text-5xl',\n xl: 'text-6xl',\n }\n\n const content = (\n <span className={`countdown font-mono ${sizeClasses[size || 'md']}`}>\n <span\n style={{ '--value': value, '--digits': 2 } as React.CSSProperties}\n aria-live=\"polite\"\n aria-label={String(value)}\n >\n {String(value).padStart(2, '0')}\n </span>\n </span>\n )\n\n if (boxed) {\n return (\n <div className=\"flex flex-col items-center bg-neutral text-neutral-content rounded-box p-2\">\n {content}\n {showLabel && label && <span className=\"text-xs mt-1\">{label}</span>}\n </div>\n )\n }\n\n if (showLabel) {\n return (\n <div className=\"flex flex-col items-center\">\n {content}\n {label && <span className=\"text-xs text-base-content/70\">{label}</span>}\n </div>\n )\n }\n\n return content\n}\n\nexport const Countdown: React.FC<CountdownProps> = ({\n value,\n format = 'HH:MM:SS',\n onFinish,\n onChange,\n className = '',\n size = 'md',\n showLabels = false,\n labels = {},\n boxed = false,\n}) => {\n const targetTime = value instanceof Date ? value.getTime() : value\n const [timeLeft, setTimeLeft] = useState<TimeLeft>(() => calculateTimeLeft(targetTime))\n const [finished, setFinished] = useState(false)\n\n const defaultLabels = {\n days: labels.days || 'days',\n hours: labels.hours || 'hours',\n minutes: labels.minutes || 'min',\n seconds: labels.seconds || 'sec',\n }\n\n const tick = useCallback(() => {\n const newTimeLeft = calculateTimeLeft(targetTime)\n setTimeLeft(newTimeLeft)\n\n const remaining = targetTime - Date.now()\n onChange?.(Math.max(0, remaining))\n\n if (remaining <= 0 && !finished) {\n setFinished(true)\n onFinish?.()\n }\n }, [targetTime, onChange, onFinish, finished])\n\n useEffect(() => {\n const timer = setInterval(tick, 1000)\n tick() // Initial tick\n\n return () => clearInterval(timer)\n }, [tick])\n\n const showDays = format.includes('D')\n const showHours = format.includes('H')\n const showMinutes = format.includes('M')\n const showSeconds = format.includes('S')\n\n const separatorSize = size === 'lg' || size === 'xl' ? 'text-3xl' : size === 'md' ? 'text-2xl' : 'text-xl'\n const showSeparators = !showLabels && !boxed\n\n return (\n <div className={`flex gap-4 items-center ${className}`}>\n {showDays && (\n <>\n <CountdownUnit\n value={timeLeft.days}\n label={defaultLabels.days}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n {showSeparators && (showHours || showMinutes || showSeconds) && (\n <span className={separatorSize}>:</span>\n )}\n </>\n )}\n {showHours && (\n <>\n <CountdownUnit\n value={timeLeft.hours}\n label={defaultLabels.hours}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n {showSeparators && (showMinutes || showSeconds) && (\n <span className={separatorSize}>:</span>\n )}\n </>\n )}\n {showMinutes && (\n <>\n <CountdownUnit\n value={timeLeft.minutes}\n label={defaultLabels.minutes}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n {showSeparators && showSeconds && <span className={separatorSize}>:</span>}\n </>\n )}\n {showSeconds && (\n <CountdownUnit\n value={timeLeft.seconds}\n label={defaultLabels.seconds}\n size={size}\n showLabel={showLabels}\n boxed={boxed}\n />\n )}\n </div>\n )\n}\n\nCountdown.displayName = 'Countdown'\n"],"names":["calculateTimeLeft","targetTime","difference","CountdownUnit","value","label","size","showLabel","boxed","content","jsx","jsxs","Countdown","format","onFinish","onChange","className","showLabels","labels","timeLeft","setTimeLeft","useState","finished","setFinished","defaultLabels","tick","useCallback","newTimeLeft","remaining","useEffect","timer","showDays","showHours","showMinutes","showSeconds","separatorSize","showSeparators","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index21.js","sources":["../src/components/DatePicker.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react'\nimport { Input } from './Input'\n\nexport interface DatePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n value?: Date | null\n defaultValue?: Date | null\n onChange?: (date: Date | null) => void\n format?: string\n placeholder?: string\n disabled?: boolean\n size?: 'xs' | 'sm' | 'md' | 'lg'\n}\n\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n]\n\nfunction formatDate(date: Date | null, format: string = 'MM/DD/YYYY'): string {\n if (!date) return ''\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return format\n .replace('YYYY', String(year))\n .replace('MM', month)\n .replace('DD', day)\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate()\n}\n\nfunction getFirstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay()\n}\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n value,\n defaultValue,\n onChange,\n format,\n placeholder = 'Select date',\n disabled = false,\n className = '',\n size = 'md',\n ...rest\n}) => {\n const [selectedDate, setSelectedDate] = useState<Date | null>(\n value || defaultValue || null\n )\n const [isOpen, setIsOpen] = useState(false)\n const [viewMonth, setViewMonth] = useState(\n selectedDate ? selectedDate.getMonth() : new Date().getMonth()\n )\n const [viewYear, setViewYear] = useState(\n selectedDate ? selectedDate.getFullYear() : new Date().getFullYear()\n )\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (value !== undefined) {\n setSelectedDate(value)\n }\n }, [value])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const handleDateSelect = (day: number) => {\n const newDate = new Date(viewYear, viewMonth, day)\n setSelectedDate(newDate)\n onChange?.(newDate)\n setIsOpen(false)\n }\n\n const handlePrevMonth = () => {\n if (viewMonth === 0) {\n setViewMonth(11)\n setViewYear(viewYear - 1)\n } else {\n setViewMonth(viewMonth - 1)\n }\n }\n\n const handleNextMonth = () => {\n if (viewMonth === 11) {\n setViewMonth(0)\n setViewYear(viewYear + 1)\n } else {\n setViewMonth(viewMonth + 1)\n }\n }\n\n const daysInMonth = getDaysInMonth(viewYear, viewMonth)\n const firstDayOfMonth = getFirstDayOfMonth(viewYear, viewMonth)\n\n const calendarDays: (number | null)[] = []\n for (let i = 0; i < firstDayOfMonth; i++) {\n calendarDays.push(null)\n }\n for (let i = 1; i <= daysInMonth; i++) {\n calendarDays.push(i)\n }\n\n const isSelectedDay = (day: number | null): boolean => {\n if (!day || !selectedDate) return false\n return (\n selectedDate.getDate() === day &&\n selectedDate.getMonth() === viewMonth &&\n selectedDate.getFullYear() === viewYear\n )\n }\n\n const isToday = (day: number | null): boolean => {\n if (!day) return false\n const today = new Date()\n return (\n today.getDate() === day &&\n today.getMonth() === viewMonth &&\n today.getFullYear() === viewYear\n )\n }\n\n return (\n <div ref={containerRef} className={`relative ${className}`} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <Input\n value={formatDate(selectedDate, format)}\n placeholder={placeholder}\n disabled={disabled}\n size={size}\n readOnly\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className=\"cursor-pointer\"\n />\n\n {isOpen && (\n <div className=\"absolute top-full left-0 mt-2 bg-base-100 border border-base-300 rounded-lg shadow-lg p-4 z-50 w-80\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n type=\"button\"\n onClick={handlePrevMonth}\n className=\"btn btn-ghost btn-sm btn-square\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n <div className=\"text-base font-semibold\">\n {MONTHS[viewMonth]} {viewYear}\n </div>\n\n <button\n type=\"button\"\n onClick={handleNextMonth}\n className=\"btn btn-ghost btn-sm btn-square\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n\n {/* Days of week */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map((day) => (\n <div\n key={day}\n className=\"text-center text-xs font-semibold text-base-content/60 py-2\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((day, index) => (\n <button\n key={index}\n type=\"button\"\n disabled={!day}\n onClick={() => day && handleDateSelect(day)}\n className={`\n aspect-square flex items-center justify-center text-sm rounded-lg\n ${!day ? 'invisible' : 'hover:bg-base-200'}\n ${isSelectedDay(day) ? 'bg-primary text-primary-content hover:bg-primary/90' : ''}\n ${isToday(day) && !isSelectedDay(day) ? 'border border-primary' : ''}\n ${day ? 'cursor-pointer' : ''}\n `}\n >\n {day}\n </button>\n ))}\n </div>\n\n {/* Today button */}\n <div className=\"mt-4 flex justify-end\">\n <button\n type=\"button\"\n onClick={() => {\n const today = new Date()\n setSelectedDate(today)\n setViewMonth(today.getMonth())\n setViewYear(today.getFullYear())\n onChange?.(today)\n setIsOpen(false)\n }}\n className=\"btn btn-ghost btn-sm\"\n >\n Today\n </button>\n </div>\n </div>\n )}\n </div>\n )\n}\n"],"names":["DAYS","MONTHS","formatDate","date","format","year","month","day","getDaysInMonth","getFirstDayOfMonth","DatePicker","value","defaultValue","onChange","placeholder","disabled","className","size","rest","selectedDate","setSelectedDate","useState","isOpen","setIsOpen","viewMonth","setViewMonth","viewYear","setViewYear","containerRef","useRef","useEffect","handleClickOutside","event","handleDateSelect","newDate","handlePrevMonth","handleNextMonth","daysInMonth","firstDayOfMonth","calendarDays","i","isSelectedDay","isToday","today","jsxs","jsx","Input","index"],"mappings":"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"}
|