framepexls-ui-lib 0.1.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/ActionIconButton.d.mts +11 -0
- package/dist/ActionIconButton.d.ts +11 -0
- package/dist/ActionIconButton.js +71 -0
- package/dist/ActionIconButton.mjs +41 -0
- package/dist/AppTopbar.d.mts +17 -0
- package/dist/AppTopbar.d.ts +17 -0
- package/dist/AppTopbar.js +51 -0
- package/dist/AppTopbar.mjs +31 -0
- package/dist/AvatarSquare.d.mts +16 -0
- package/dist/AvatarSquare.d.ts +16 -0
- package/dist/AvatarSquare.js +82 -0
- package/dist/AvatarSquare.mjs +52 -0
- package/dist/Badge.d.mts +13 -0
- package/dist/Badge.d.ts +13 -0
- package/dist/Badge.js +65 -0
- package/dist/Badge.mjs +45 -0
- package/dist/BadgeCluster.d.mts +17 -0
- package/dist/BadgeCluster.d.ts +17 -0
- package/dist/BadgeCluster.js +125 -0
- package/dist/BadgeCluster.mjs +95 -0
- package/dist/Breadcrumb.d.mts +11 -0
- package/dist/Breadcrumb.d.ts +11 -0
- package/dist/Breadcrumb.js +42 -0
- package/dist/Breadcrumb.mjs +12 -0
- package/dist/Button.d.mts +15 -0
- package/dist/Button.d.ts +15 -0
- package/dist/Button.js +72 -0
- package/dist/Button.mjs +52 -0
- package/dist/CalendarPanel.d.mts +13 -0
- package/dist/CalendarPanel.d.ts +13 -0
- package/dist/CalendarPanel.js +110 -0
- package/dist/CalendarPanel.mjs +90 -0
- package/dist/ChartCard.d.mts +15 -0
- package/dist/ChartCard.d.ts +15 -0
- package/dist/ChartCard.js +44 -0
- package/dist/ChartCard.mjs +24 -0
- package/dist/CheckboxPillsGroup.d.mts +28 -0
- package/dist/CheckboxPillsGroup.d.ts +28 -0
- package/dist/CheckboxPillsGroup.js +186 -0
- package/dist/CheckboxPillsGroup.mjs +156 -0
- package/dist/ColumnSelector.d.mts +17 -0
- package/dist/ColumnSelector.d.ts +17 -0
- package/dist/ColumnSelector.js +74 -0
- package/dist/ColumnSelector.mjs +54 -0
- package/dist/ComboSelect.d.mts +46 -0
- package/dist/ComboSelect.d.ts +46 -0
- package/dist/ComboSelect.js +442 -0
- package/dist/ComboSelect.mjs +412 -0
- package/dist/DateTimeField.d.mts +22 -0
- package/dist/DateTimeField.d.ts +22 -0
- package/dist/DateTimeField.js +409 -0
- package/dist/DateTimeField.mjs +379 -0
- package/dist/Dialog.d.mts +82 -0
- package/dist/Dialog.d.ts +82 -0
- package/dist/Dialog.js +408 -0
- package/dist/Dialog.mjs +368 -0
- package/dist/Dropdown.d.mts +52 -0
- package/dist/Dropdown.d.ts +52 -0
- package/dist/Dropdown.js +333 -0
- package/dist/Dropdown.mjs +313 -0
- package/dist/EmptyState.d.mts +8 -0
- package/dist/EmptyState.d.ts +8 -0
- package/dist/EmptyState.js +35 -0
- package/dist/EmptyState.mjs +15 -0
- package/dist/InfoGrid.d.mts +20 -0
- package/dist/InfoGrid.d.ts +20 -0
- package/dist/InfoGrid.js +67 -0
- package/dist/InfoGrid.mjs +47 -0
- package/dist/Input.d.mts +20 -0
- package/dist/Input.d.ts +20 -0
- package/dist/Input.js +85 -0
- package/dist/Input.mjs +55 -0
- package/dist/Money.d.mts +8 -0
- package/dist/Money.d.ts +8 -0
- package/dist/Money.js +30 -0
- package/dist/Money.mjs +10 -0
- package/dist/OrderButton.d.mts +11 -0
- package/dist/OrderButton.d.ts +11 -0
- package/dist/OrderButton.js +39 -0
- package/dist/OrderButton.mjs +19 -0
- package/dist/Pagination.d.mts +12 -0
- package/dist/Pagination.d.ts +12 -0
- package/dist/Pagination.js +71 -0
- package/dist/Pagination.mjs +51 -0
- package/dist/SearchInput.d.mts +17 -0
- package/dist/SearchInput.d.ts +17 -0
- package/dist/SearchInput.js +116 -0
- package/dist/SearchInput.mjs +86 -0
- package/dist/Select.d.mts +31 -0
- package/dist/Select.d.ts +31 -0
- package/dist/Select.js +293 -0
- package/dist/Select.mjs +263 -0
- package/dist/StatCard.d.mts +15 -0
- package/dist/StatCard.d.ts +15 -0
- package/dist/StatCard.js +47 -0
- package/dist/StatCard.mjs +27 -0
- package/dist/Steps.d.mts +31 -0
- package/dist/Steps.d.ts +31 -0
- package/dist/Steps.js +123 -0
- package/dist/Steps.mjs +99 -0
- package/dist/Table.d.mts +31 -0
- package/dist/Table.d.ts +31 -0
- package/dist/Table.js +153 -0
- package/dist/Table.mjs +117 -0
- package/dist/TimeAgo.d.mts +12 -0
- package/dist/TimeAgo.d.ts +12 -0
- package/dist/TimeAgo.js +104 -0
- package/dist/TimeAgo.mjs +74 -0
- package/dist/TimePanel.d.mts +14 -0
- package/dist/TimePanel.d.ts +14 -0
- package/dist/TimePanel.js +145 -0
- package/dist/TimePanel.mjs +125 -0
- package/dist/TimePopover.d.mts +33 -0
- package/dist/TimePopover.d.ts +33 -0
- package/dist/TimePopover.js +441 -0
- package/dist/TimePopover.mjs +406 -0
- package/dist/iconos/index.d.mts +60 -0
- package/dist/iconos/index.d.ts +60 -0
- package/dist/iconos/index.js +621 -0
- package/dist/iconos/index.mjs +548 -0
- package/dist/index.d.mts +32 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.js +141 -0
- package/dist/index.mjs +70 -0
- package/package.json +178 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var DateTimeField_exports = {};
|
|
31
|
+
__export(DateTimeField_exports, {
|
|
32
|
+
default: () => DateTimeField
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(DateTimeField_exports);
|
|
35
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
|
+
var import_react = require("react");
|
|
37
|
+
var import_react_dom = require("react-dom");
|
|
38
|
+
var import_Input = __toESM(require("./Input"));
|
|
39
|
+
var import_CalendarPanel = __toESM(require("./CalendarPanel"));
|
|
40
|
+
var import_TimePopover = __toESM(require("./TimePopover"));
|
|
41
|
+
const pad2 = (n) => n < 10 ? `0${n}` : String(n);
|
|
42
|
+
const DATE_ONLY_REGEX = /^\d{4}-\d{2}-\d{2}$/;
|
|
43
|
+
const fmtISODate = (d) => `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;
|
|
44
|
+
const fmtISODateTimeLocal = (d) => `${fmtISODate(d)}T${pad2(d.getHours())}:${pad2(d.getMinutes())}`;
|
|
45
|
+
const parseDateOnly = (value) => {
|
|
46
|
+
if (!DATE_ONLY_REGEX.test(value)) return null;
|
|
47
|
+
const [y, m, d] = value.split("-").map(Number);
|
|
48
|
+
if ([y, m, d].some((n) => Number.isNaN(n))) return null;
|
|
49
|
+
return new Date(y, (m != null ? m : 1) - 1, d != null ? d : 1, 0, 0, 0, 0);
|
|
50
|
+
};
|
|
51
|
+
const parseTimeOnly = (value) => {
|
|
52
|
+
const parts = value.split(":").map(Number);
|
|
53
|
+
if (parts.length < 2) return null;
|
|
54
|
+
const [h, m] = parts;
|
|
55
|
+
if (Number.isNaN(h) || Number.isNaN(m)) return null;
|
|
56
|
+
const now = /* @__PURE__ */ new Date();
|
|
57
|
+
now.setSeconds(0, 0);
|
|
58
|
+
now.setHours(Math.max(0, Math.min(23, h)), Math.max(0, Math.min(59, m)));
|
|
59
|
+
return now;
|
|
60
|
+
};
|
|
61
|
+
const parseValueByType = (value, mode) => {
|
|
62
|
+
if (!value) return null;
|
|
63
|
+
if (mode === "date") return parseDateOnly(value);
|
|
64
|
+
if (mode === "time") return parseTimeOnly(value);
|
|
65
|
+
const dt = new Date(value);
|
|
66
|
+
return Number.isNaN(dt.getTime()) ? null : dt;
|
|
67
|
+
};
|
|
68
|
+
const parseBoundValue = (value) => {
|
|
69
|
+
if (!value) return null;
|
|
70
|
+
if (DATE_ONLY_REGEX.test(value)) return parseDateOnly(value);
|
|
71
|
+
const dt = new Date(value);
|
|
72
|
+
return Number.isNaN(dt.getTime()) ? null : dt;
|
|
73
|
+
};
|
|
74
|
+
const withinBounds = (d, min, max) => {
|
|
75
|
+
const t = d.getTime();
|
|
76
|
+
const minDate = parseBoundValue(min);
|
|
77
|
+
if (minDate) {
|
|
78
|
+
const minTime = min && DATE_ONLY_REGEX.test(min) ? minDate.getTime() : minDate.getTime();
|
|
79
|
+
if (t < minTime) return false;
|
|
80
|
+
}
|
|
81
|
+
const maxDate = parseBoundValue(max);
|
|
82
|
+
if (maxDate) {
|
|
83
|
+
let maxTime = maxDate.getTime();
|
|
84
|
+
if (max && DATE_ONLY_REGEX.test(max)) {
|
|
85
|
+
maxTime += 24 * 60 * 60 * 1e3 - 1;
|
|
86
|
+
}
|
|
87
|
+
if (t > maxTime) return false;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
};
|
|
91
|
+
const formatDisplayValue = (value, mode) => {
|
|
92
|
+
if (!value) return "";
|
|
93
|
+
if (mode === "time") return value;
|
|
94
|
+
const parsed = parseValueByType(value, mode);
|
|
95
|
+
if (!parsed) return value;
|
|
96
|
+
if (mode === "date") {
|
|
97
|
+
try {
|
|
98
|
+
return parsed.toLocaleDateString("es-MX", { day: "2-digit", month: "short", year: "numeric" });
|
|
99
|
+
} catch {
|
|
100
|
+
return fmtISODate(parsed);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
return parsed.toLocaleString("es-MX", {
|
|
105
|
+
day: "2-digit",
|
|
106
|
+
month: "short",
|
|
107
|
+
year: "numeric",
|
|
108
|
+
hour: "2-digit",
|
|
109
|
+
minute: "2-digit"
|
|
110
|
+
});
|
|
111
|
+
} catch {
|
|
112
|
+
return fmtISODateTimeLocal(parsed);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
const CalendarIcon = () => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { viewBox: "0 0 24 24", className: "h-4.5 w-4.5", fill: "none", stroke: "currentColor", strokeWidth: 1.8, children: [
|
|
116
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", { x: "3", y: "4.5", width: "18", height: "16", rx: "2" }),
|
|
117
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M16 2.5v4M8 2.5v4M3 10.5h18" })
|
|
118
|
+
] });
|
|
119
|
+
function DateTimeField({
|
|
120
|
+
type = "datetime-local",
|
|
121
|
+
value,
|
|
122
|
+
min,
|
|
123
|
+
max,
|
|
124
|
+
onValueChange,
|
|
125
|
+
portal = true,
|
|
126
|
+
portalId,
|
|
127
|
+
clearable = true,
|
|
128
|
+
...inputProps
|
|
129
|
+
}) {
|
|
130
|
+
var _a;
|
|
131
|
+
const htmlOnChange = inputProps.onChange;
|
|
132
|
+
const [open, setOpen] = (0, import_react.useState)(false);
|
|
133
|
+
const [anchorRect, setAnchorRect] = (0, import_react.useState)(null);
|
|
134
|
+
const anchorRef = (0, import_react.useRef)(null);
|
|
135
|
+
const popRef = (0, import_react.useRef)(null);
|
|
136
|
+
const [portalRoot, setPortalRoot] = (0, import_react.useState)(null);
|
|
137
|
+
(0, import_react.useEffect)(() => {
|
|
138
|
+
if (!portal) return;
|
|
139
|
+
const el = portalId ? document.getElementById(portalId) : null;
|
|
140
|
+
setPortalRoot(el != null ? el : document.body);
|
|
141
|
+
}, [portal, portalId]);
|
|
142
|
+
const openPopover = () => {
|
|
143
|
+
if (!anchorRef.current) return;
|
|
144
|
+
setAnchorRect(anchorRef.current.getBoundingClientRect());
|
|
145
|
+
setOpen(true);
|
|
146
|
+
};
|
|
147
|
+
(0, import_react.useEffect)(() => {
|
|
148
|
+
if (!open) return;
|
|
149
|
+
const onDown = (e) => {
|
|
150
|
+
var _a2, _b;
|
|
151
|
+
const t = e.target;
|
|
152
|
+
if (t.closest("[data-dtf-pop]")) return;
|
|
153
|
+
if ((_a2 = popRef.current) == null ? void 0 : _a2.contains(t)) return;
|
|
154
|
+
if ((_b = anchorRef.current) == null ? void 0 : _b.contains(t)) return;
|
|
155
|
+
setOpen(false);
|
|
156
|
+
};
|
|
157
|
+
const update = () => {
|
|
158
|
+
if (!anchorRef.current) return;
|
|
159
|
+
setAnchorRect(anchorRef.current.getBoundingClientRect());
|
|
160
|
+
};
|
|
161
|
+
const onEsc = (e) => {
|
|
162
|
+
if (e.key === "Escape") setOpen(false);
|
|
163
|
+
};
|
|
164
|
+
window.addEventListener("pointerdown", onDown, true);
|
|
165
|
+
window.addEventListener("scroll", update, true);
|
|
166
|
+
window.addEventListener("resize", update);
|
|
167
|
+
window.addEventListener("keydown", onEsc);
|
|
168
|
+
update();
|
|
169
|
+
return () => {
|
|
170
|
+
window.removeEventListener("pointerdown", onDown, true);
|
|
171
|
+
window.removeEventListener("scroll", update, true);
|
|
172
|
+
window.removeEventListener("resize", update);
|
|
173
|
+
window.removeEventListener("keydown", onEsc);
|
|
174
|
+
};
|
|
175
|
+
}, [open]);
|
|
176
|
+
const stylePop = (() => {
|
|
177
|
+
if (!anchorRect) return { visibility: "hidden" };
|
|
178
|
+
const W = 360, GAP = 8, MARGIN = 8, H = 420;
|
|
179
|
+
let left = anchorRect.right - W;
|
|
180
|
+
left = Math.max(MARGIN, Math.min(left, window.innerWidth - (W + MARGIN)));
|
|
181
|
+
let top = anchorRect.bottom + GAP;
|
|
182
|
+
if (top + H > window.innerHeight) top = Math.max(MARGIN, anchorRect.top - GAP - H);
|
|
183
|
+
return { position: "fixed", top, left, zIndex: 1e5 };
|
|
184
|
+
})();
|
|
185
|
+
const parsed = (0, import_react.useMemo)(() => value ? parseValueByType(value, type) : null, [value, type]);
|
|
186
|
+
const [cursor, setCursor] = (0, import_react.useState)(() => parsed != null ? parsed : /* @__PURE__ */ new Date());
|
|
187
|
+
(0, import_react.useEffect)(() => {
|
|
188
|
+
if (parsed) setCursor(parsed);
|
|
189
|
+
}, [parsed]);
|
|
190
|
+
const baseForTime = (_a = parsed != null ? parsed : cursor) != null ? _a : /* @__PURE__ */ new Date();
|
|
191
|
+
const [hh, setHh] = (0, import_react.useState)(baseForTime.getHours());
|
|
192
|
+
const [mm, setMm] = (0, import_react.useState)(baseForTime.getMinutes());
|
|
193
|
+
(0, import_react.useEffect)(() => {
|
|
194
|
+
const t = parsed != null ? parsed : /* @__PURE__ */ new Date();
|
|
195
|
+
setHh(t.getHours());
|
|
196
|
+
setMm(t.getMinutes());
|
|
197
|
+
}, [parsed]);
|
|
198
|
+
const emit = (next) => {
|
|
199
|
+
onValueChange == null ? void 0 : onValueChange(next);
|
|
200
|
+
if (htmlOnChange) {
|
|
201
|
+
const ev = { target: { value: next != null ? next : "" } };
|
|
202
|
+
htmlOnChange(ev);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
const commitDate = (d) => {
|
|
206
|
+
if (type === "date") {
|
|
207
|
+
if (withinBounds(d, min, max)) emit(fmtISODate(d));
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (type === "time") {
|
|
211
|
+
emit(`${pad2(hh)}:${pad2(mm)}`);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const next = new Date(d);
|
|
215
|
+
next.setHours(hh, mm, 0, 0);
|
|
216
|
+
if (withinBounds(next, min, max)) emit(fmtISODateTimeLocal(next));
|
|
217
|
+
};
|
|
218
|
+
const commitTime = (H, M) => {
|
|
219
|
+
var _a2;
|
|
220
|
+
setHh(H);
|
|
221
|
+
setMm(M);
|
|
222
|
+
if (type === "time") {
|
|
223
|
+
emit(`${pad2(H)}:${pad2(M)}`);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (type === "datetime-local") {
|
|
227
|
+
const base = (_a2 = parsed != null ? parsed : cursor) != null ? _a2 : /* @__PURE__ */ new Date();
|
|
228
|
+
const next = new Date(base);
|
|
229
|
+
next.setHours(H, M, 0, 0);
|
|
230
|
+
if (withinBounds(next, min, max)) emit(fmtISODateTimeLocal(next));
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
const display = (0, import_react.useMemo)(() => formatDisplayValue(value != null ? value : "", type), [value, type]);
|
|
234
|
+
const timeBtnRef = (0, import_react.useRef)(null);
|
|
235
|
+
const [showTimePop, setShowTimePop] = (0, import_react.useState)(false);
|
|
236
|
+
const popover = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
237
|
+
"div",
|
|
238
|
+
{
|
|
239
|
+
ref: popRef,
|
|
240
|
+
style: stylePop,
|
|
241
|
+
"data-dtf-pop": true,
|
|
242
|
+
className: "w-1/3 overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-[#0e0d0e]",
|
|
243
|
+
children: [
|
|
244
|
+
type !== "time" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
245
|
+
import_CalendarPanel.default,
|
|
246
|
+
{
|
|
247
|
+
cursor,
|
|
248
|
+
value: parsed != null ? parsed : null,
|
|
249
|
+
min,
|
|
250
|
+
max,
|
|
251
|
+
onCursorChange: setCursor,
|
|
252
|
+
onPick: (d) => {
|
|
253
|
+
setCursor(d);
|
|
254
|
+
commitDate(d);
|
|
255
|
+
if (type === "date") setOpen(false);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
),
|
|
259
|
+
(type === "time" || type === "datetime-local") && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-2 border-t border-slate-100 px-3 py-2 text-sm dark:border-white/10", children: [
|
|
260
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
261
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
262
|
+
"button",
|
|
263
|
+
{
|
|
264
|
+
ref: timeBtnRef,
|
|
265
|
+
type: "button",
|
|
266
|
+
className: "rounded-xl ring-1 ring-slate-200 px-2.5 py-1.5 font-medium tracking-wide hover:bg-slate-50 active:scale-[0.98] dark:ring-white/10 dark:hover:bg-white/10",
|
|
267
|
+
onClick: () => setShowTimePop((v) => !v),
|
|
268
|
+
"aria-haspopup": "dialog",
|
|
269
|
+
"aria-expanded": showTimePop,
|
|
270
|
+
title: "Editar hora",
|
|
271
|
+
children: [
|
|
272
|
+
pad2(hh),
|
|
273
|
+
":",
|
|
274
|
+
pad2(mm)
|
|
275
|
+
]
|
|
276
|
+
}
|
|
277
|
+
),
|
|
278
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
279
|
+
"button",
|
|
280
|
+
{
|
|
281
|
+
type: "button",
|
|
282
|
+
className: "rounded-xl ring-1 ring-slate-200 px-2.5 py-1.5 hover:bg-slate-50 active:scale-[0.98] dark:ring-white/10 dark:hover:bg-white/10",
|
|
283
|
+
onClick: () => {
|
|
284
|
+
const t = /* @__PURE__ */ new Date();
|
|
285
|
+
const H = t.getHours();
|
|
286
|
+
const M = t.getMinutes();
|
|
287
|
+
setHh(H);
|
|
288
|
+
setMm(M);
|
|
289
|
+
commitTime(H, M);
|
|
290
|
+
},
|
|
291
|
+
children: "Ahora"
|
|
292
|
+
}
|
|
293
|
+
)
|
|
294
|
+
] }),
|
|
295
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
296
|
+
"button",
|
|
297
|
+
{
|
|
298
|
+
type: "button",
|
|
299
|
+
className: "rounded-xl bg-slate-900 px-3 py-1.5 text-white hover:opacity-95 active:scale-[0.98] dark:bg-white dark:text-slate-900",
|
|
300
|
+
onClick: () => setOpen(false),
|
|
301
|
+
children: "Aplicar"
|
|
302
|
+
}
|
|
303
|
+
)
|
|
304
|
+
] }),
|
|
305
|
+
type !== "time" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-2 border-t border-slate-100 px-3 py-2 text-sm dark:border-white/10", children: [
|
|
306
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex gap-1.5", children: [
|
|
307
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
308
|
+
"button",
|
|
309
|
+
{
|
|
310
|
+
className: "rounded-lg px-2 py-1 hover:bg-slate-100 dark:hover:bg-white/10",
|
|
311
|
+
onClick: () => {
|
|
312
|
+
const t = /* @__PURE__ */ new Date();
|
|
313
|
+
setCursor(t);
|
|
314
|
+
commitDate(t);
|
|
315
|
+
if (type === "date") setOpen(false);
|
|
316
|
+
},
|
|
317
|
+
children: "Hoy"
|
|
318
|
+
}
|
|
319
|
+
),
|
|
320
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
321
|
+
"button",
|
|
322
|
+
{
|
|
323
|
+
className: "rounded-lg px-2 py-1 hover:bg-slate-100 dark:hover:bg-white/10",
|
|
324
|
+
onClick: () => {
|
|
325
|
+
const t = /* @__PURE__ */ new Date();
|
|
326
|
+
t.setDate(t.getDate() + 1);
|
|
327
|
+
setCursor(t);
|
|
328
|
+
commitDate(t);
|
|
329
|
+
if (type === "date") setOpen(false);
|
|
330
|
+
},
|
|
331
|
+
children: "Ma\xF1ana"
|
|
332
|
+
}
|
|
333
|
+
),
|
|
334
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
335
|
+
"button",
|
|
336
|
+
{
|
|
337
|
+
className: "rounded-lg px-2 py-1 hover:bg-slate-100 dark:hover:bg-white/10",
|
|
338
|
+
onClick: () => {
|
|
339
|
+
const t = /* @__PURE__ */ new Date();
|
|
340
|
+
t.setDate(t.getDate() + 7);
|
|
341
|
+
setCursor(t);
|
|
342
|
+
commitDate(t);
|
|
343
|
+
if (type === "date") setOpen(false);
|
|
344
|
+
},
|
|
345
|
+
children: "+1 semana"
|
|
346
|
+
}
|
|
347
|
+
)
|
|
348
|
+
] }),
|
|
349
|
+
value && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
350
|
+
"button",
|
|
351
|
+
{
|
|
352
|
+
className: "rounded-lg px-2 py-1 text-blue-600 hover:bg-blue-50 dark:hover:bg-blue-500/10",
|
|
353
|
+
onClick: () => {
|
|
354
|
+
emit(null);
|
|
355
|
+
setOpen(false);
|
|
356
|
+
},
|
|
357
|
+
children: "Limpiar"
|
|
358
|
+
}
|
|
359
|
+
)
|
|
360
|
+
] })
|
|
361
|
+
]
|
|
362
|
+
}
|
|
363
|
+
);
|
|
364
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { ref: anchorRef, className: "relative", children: [
|
|
365
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
366
|
+
import_Input.default,
|
|
367
|
+
{
|
|
368
|
+
readOnly: true,
|
|
369
|
+
leftSlot: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CalendarIcon, {}),
|
|
370
|
+
rightSlot: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
371
|
+
"button",
|
|
372
|
+
{
|
|
373
|
+
type: "button",
|
|
374
|
+
className: "pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 active:scale-95 dark:border-white/10 dark:bg-white/5",
|
|
375
|
+
onClick: (e) => {
|
|
376
|
+
e.preventDefault();
|
|
377
|
+
openPopover();
|
|
378
|
+
},
|
|
379
|
+
title: "Abrir selector",
|
|
380
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { viewBox: "0 0 24 24", className: "h-4.5 w-4.5", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M8 10h8M8 14h5" }) })
|
|
381
|
+
}
|
|
382
|
+
),
|
|
383
|
+
value: display,
|
|
384
|
+
onClick: openPopover,
|
|
385
|
+
clearable,
|
|
386
|
+
onClear: () => emit(null),
|
|
387
|
+
"aria-haspopup": "dialog",
|
|
388
|
+
"aria-expanded": open,
|
|
389
|
+
...inputProps
|
|
390
|
+
}
|
|
391
|
+
),
|
|
392
|
+
open && (portal ? portalRoot && (0, import_react_dom.createPortal)(popover, portalRoot) : popover),
|
|
393
|
+
open && (type === "datetime-local" || type === "time") && showTimePop && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
394
|
+
import_TimePopover.default,
|
|
395
|
+
{
|
|
396
|
+
anchorEl: timeBtnRef.current,
|
|
397
|
+
hh,
|
|
398
|
+
mm,
|
|
399
|
+
onChange: (H, M) => {
|
|
400
|
+
setHh(H);
|
|
401
|
+
setMm(M);
|
|
402
|
+
commitTime(H, M);
|
|
403
|
+
},
|
|
404
|
+
onClose: () => setShowTimePop(false),
|
|
405
|
+
step: 1
|
|
406
|
+
}
|
|
407
|
+
)
|
|
408
|
+
] });
|
|
409
|
+
}
|