@agroshine/ags-web-ui-kit 1.0.0
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/README.md +75 -0
- package/dist/atoms/index.cjs +134 -0
- package/dist/atoms/index.cjs.map +1 -0
- package/dist/atoms/index.d.cts +583 -0
- package/dist/atoms/index.d.ts +583 -0
- package/dist/atoms/index.js +9 -0
- package/dist/atoms/index.js.map +1 -0
- package/dist/chunk-2KRMLIJQ.cjs +52 -0
- package/dist/chunk-2KRMLIJQ.cjs.map +1 -0
- package/dist/chunk-2TBYPKQ3.cjs +79 -0
- package/dist/chunk-2TBYPKQ3.cjs.map +1 -0
- package/dist/chunk-5FWELSEZ.js +1296 -0
- package/dist/chunk-5FWELSEZ.js.map +1 -0
- package/dist/chunk-5PEOJVY7.cjs +1502 -0
- package/dist/chunk-5PEOJVY7.cjs.map +1 -0
- package/dist/chunk-6LUGTNMH.js +259 -0
- package/dist/chunk-6LUGTNMH.js.map +1 -0
- package/dist/chunk-6O2IDBTX.js +112 -0
- package/dist/chunk-6O2IDBTX.js.map +1 -0
- package/dist/chunk-6YUNWKT3.js +26 -0
- package/dist/chunk-6YUNWKT3.js.map +1 -0
- package/dist/chunk-7R6OXNES.cjs +321 -0
- package/dist/chunk-7R6OXNES.cjs.map +1 -0
- package/dist/chunk-A3A7PJWG.cjs +13 -0
- package/dist/chunk-A3A7PJWG.cjs.map +1 -0
- package/dist/chunk-A7TDGQAB.js +557 -0
- package/dist/chunk-A7TDGQAB.js.map +1 -0
- package/dist/chunk-C4LX3XTN.cjs +1187 -0
- package/dist/chunk-C4LX3XTN.cjs.map +1 -0
- package/dist/chunk-DZW4GS2T.cjs +1340 -0
- package/dist/chunk-DZW4GS2T.cjs.map +1 -0
- package/dist/chunk-E3BTK736.cjs +174 -0
- package/dist/chunk-E3BTK736.cjs.map +1 -0
- package/dist/chunk-ERGKCXM2.cjs +267 -0
- package/dist/chunk-ERGKCXM2.cjs.map +1 -0
- package/dist/chunk-FOA46NSG.cjs +574 -0
- package/dist/chunk-FOA46NSG.cjs.map +1 -0
- package/dist/chunk-JTFCE6RA.js +1156 -0
- package/dist/chunk-JTFCE6RA.js.map +1 -0
- package/dist/chunk-KINOE57L.js +225 -0
- package/dist/chunk-KINOE57L.js.map +1 -0
- package/dist/chunk-MOED3QPY.js +11 -0
- package/dist/chunk-MOED3QPY.js.map +1 -0
- package/dist/chunk-NVR34DY2.cjs +4 -0
- package/dist/chunk-NVR34DY2.cjs.map +1 -0
- package/dist/chunk-PI3IJWBG.js +79 -0
- package/dist/chunk-PI3IJWBG.js.map +1 -0
- package/dist/chunk-PXAMTGYY.js +3 -0
- package/dist/chunk-PXAMTGYY.js.map +1 -0
- package/dist/chunk-QAZMI5VH.js +151 -0
- package/dist/chunk-QAZMI5VH.js.map +1 -0
- package/dist/chunk-QEG27NX6.js +30 -0
- package/dist/chunk-QEG27NX6.js.map +1 -0
- package/dist/chunk-THTOUSMG.cjs +52 -0
- package/dist/chunk-THTOUSMG.cjs.map +1 -0
- package/dist/chunk-UAXKB6IH.cjs +32 -0
- package/dist/chunk-UAXKB6IH.cjs.map +1 -0
- package/dist/chunk-W5IHWAMM.js +48 -0
- package/dist/chunk-W5IHWAMM.js.map +1 -0
- package/dist/chunk-X2UJQVZJ.cjs +139 -0
- package/dist/chunk-X2UJQVZJ.cjs.map +1 -0
- package/dist/chunk-X43C5OJD.js +1460 -0
- package/dist/chunk-X43C5OJD.js.map +1 -0
- package/dist/chunk-XCYSBWV4.js +56 -0
- package/dist/chunk-XCYSBWV4.js.map +1 -0
- package/dist/chunk-XX4CBCEB.cjs +102 -0
- package/dist/chunk-XX4CBCEB.cjs.map +1 -0
- package/dist/hooks/index.cjs +33 -0
- package/dist/hooks/index.cjs.map +1 -0
- package/dist/hooks/index.d.cts +59 -0
- package/dist/hooks/index.d.ts +59 -0
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.cjs +366 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +13 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/interface-DnK5S6ww.d.cts +51 -0
- package/dist/interface-DnK5S6ww.d.ts +51 -0
- package/dist/lib/index.cjs +13 -0
- package/dist/lib/index.cjs.map +1 -0
- package/dist/lib/index.d.cts +5 -0
- package/dist/lib/index.d.ts +5 -0
- package/dist/lib/index.js +4 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/molecules/index.cjs +123 -0
- package/dist/molecules/index.cjs.map +1 -0
- package/dist/molecules/index.d.cts +449 -0
- package/dist/molecules/index.d.ts +449 -0
- package/dist/molecules/index.js +10 -0
- package/dist/molecules/index.js.map +1 -0
- package/dist/organisms/index.cjs +102 -0
- package/dist/organisms/index.cjs.map +1 -0
- package/dist/organisms/index.d.cts +396 -0
- package/dist/organisms/index.d.ts +396 -0
- package/dist/organisms/index.js +9 -0
- package/dist/organisms/index.js.map +1 -0
- package/dist/tooltip-Bl2ZTtfg.d.cts +16 -0
- package/dist/tooltip-Bl2ZTtfg.d.ts +16 -0
- package/dist/ui/index.cjs +955 -0
- package/dist/ui/index.cjs.map +1 -0
- package/dist/ui/index.d.cts +252 -0
- package/dist/ui/index.d.ts +252 -0
- package/dist/ui/index.js +642 -0
- package/dist/ui/index.js.map +1 -0
- package/package.json +200 -0
- package/tailwind.preset.cjs +134 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
import React2, { useState, useCallback, useMemo } from 'react';
|
|
2
|
+
import clsx4 from 'clsx';
|
|
3
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
import RcDropdown from 'rc-dropdown';
|
|
5
|
+
import { faCaretDown, faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons';
|
|
6
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
7
|
+
import RCPagination from 'rc-pagination';
|
|
8
|
+
|
|
9
|
+
// src/atoms/Dropdown/DropdownMenu.tsx
|
|
10
|
+
var MENU_BASE = "min-w-[160px] max-w-[max-content] py-1 rounded-lg bg-content1 shadow-md border border-border list-none m-0 p-0 outline-none font-roboto text-sm";
|
|
11
|
+
function MenuItem({
|
|
12
|
+
item,
|
|
13
|
+
selected,
|
|
14
|
+
onClick
|
|
15
|
+
}) {
|
|
16
|
+
const key = item.key != null ? String(item.key) : "";
|
|
17
|
+
const { label, disabled, danger } = item;
|
|
18
|
+
const handleClick = (e) => {
|
|
19
|
+
if (disabled) return;
|
|
20
|
+
onClick?.(key, e);
|
|
21
|
+
};
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
"li",
|
|
24
|
+
{
|
|
25
|
+
role: "menuitem",
|
|
26
|
+
"aria-disabled": disabled,
|
|
27
|
+
className: clsx4(
|
|
28
|
+
"block px-4 py-2 cursor-pointer transition-colors",
|
|
29
|
+
"hover:bg-accent active:bg-accent",
|
|
30
|
+
selected && "bg-primary-50 text-primary-600",
|
|
31
|
+
disabled && "opacity-50 cursor-not-allowed pointer-events-none text-muted-foreground",
|
|
32
|
+
danger && "text-destructive",
|
|
33
|
+
danger && !disabled && "hover:text-danger-600"
|
|
34
|
+
),
|
|
35
|
+
onClick: handleClick,
|
|
36
|
+
onKeyDown: (e) => {
|
|
37
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
handleClick(e);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
children: label
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
function MenuDivider() {
|
|
47
|
+
return /* @__PURE__ */ jsx("li", { role: "separator", className: "h-px my-1 bg-border" });
|
|
48
|
+
}
|
|
49
|
+
function MenuItemGroup({ label, children }) {
|
|
50
|
+
return /* @__PURE__ */ jsxs("li", { role: "group", className: "list-none", children: [
|
|
51
|
+
label && /* @__PURE__ */ jsx("div", { className: "px-4 py-2 text-muted-foreground text-xs font-semibold border-b border-border", children: label }),
|
|
52
|
+
/* @__PURE__ */ jsx("ul", { className: "list-none p-0 m-0", children })
|
|
53
|
+
] });
|
|
54
|
+
}
|
|
55
|
+
function renderMenuItems(items, selectedKeys, onClick) {
|
|
56
|
+
return items.map((item, idx) => {
|
|
57
|
+
if (!item) return null;
|
|
58
|
+
if (item.type === "divider") return /* @__PURE__ */ jsx(MenuDivider, {}, `divider-${idx}`);
|
|
59
|
+
if (item.type === "group") {
|
|
60
|
+
return /* @__PURE__ */ jsx(MenuItemGroup, { label: item.label, children: item.children && renderMenuItems(item.children, selectedKeys, onClick) }, item.key ?? `group-${idx}`);
|
|
61
|
+
}
|
|
62
|
+
const key = String(item.key ?? `item-${idx}`);
|
|
63
|
+
return /* @__PURE__ */ jsx(MenuItem, { item, selected: selectedKeys.includes(key), onClick }, key);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function DropdownMenu({
|
|
67
|
+
items = [],
|
|
68
|
+
onClick,
|
|
69
|
+
onSelect,
|
|
70
|
+
selectable = false,
|
|
71
|
+
selectedKeys = [],
|
|
72
|
+
defaultSelectedKeys,
|
|
73
|
+
disabled,
|
|
74
|
+
style,
|
|
75
|
+
className,
|
|
76
|
+
children
|
|
77
|
+
}) {
|
|
78
|
+
const [internalSelected, setInternalSelected] = useState(
|
|
79
|
+
() => defaultSelectedKeys ?? []
|
|
80
|
+
);
|
|
81
|
+
const selected = selectedKeys.length > 0 ? selectedKeys : internalSelected;
|
|
82
|
+
const handleClick = (key, e) => {
|
|
83
|
+
if (selectable) {
|
|
84
|
+
const next = selected.includes(key) ? selected.filter((k) => k !== key) : [...selected, key];
|
|
85
|
+
setInternalSelected(next);
|
|
86
|
+
onSelect?.({ key, keyPath: [key], selectedKeys: next });
|
|
87
|
+
}
|
|
88
|
+
onClick?.({ key, keyPath: [key], domEvent: e });
|
|
89
|
+
};
|
|
90
|
+
const menuContent = items.length > 0 ? /* @__PURE__ */ jsx("ul", { role: "menu", className: clsx4(MENU_BASE, className), style, "aria-disabled": disabled, children: renderMenuItems(items, selected, handleClick) }) : children;
|
|
91
|
+
return menuContent;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// src/atoms/Dropdown/utils.ts
|
|
95
|
+
function mapTriggerToRc(trigger) {
|
|
96
|
+
if (!trigger) return ["hover"];
|
|
97
|
+
const arr = Array.isArray(trigger) ? trigger : [trigger];
|
|
98
|
+
return arr;
|
|
99
|
+
}
|
|
100
|
+
var PLACEMENT_MAP = {
|
|
101
|
+
topLeft: "topLeft",
|
|
102
|
+
top: "top",
|
|
103
|
+
topRight: "topRight",
|
|
104
|
+
topStart: "topLeft",
|
|
105
|
+
topEnd: "topRight",
|
|
106
|
+
bottomLeft: "bottomLeft",
|
|
107
|
+
bottom: "bottom",
|
|
108
|
+
bottomRight: "bottomRight",
|
|
109
|
+
bottomStart: "bottomLeft",
|
|
110
|
+
bottomEnd: "bottomRight"
|
|
111
|
+
};
|
|
112
|
+
function mapPlacementToRc(placement) {
|
|
113
|
+
if (placement && placement in PLACEMENT_MAP) return PLACEMENT_MAP[placement];
|
|
114
|
+
return "bottomLeft";
|
|
115
|
+
}
|
|
116
|
+
var PREFIX = "rc-dropdown";
|
|
117
|
+
var DEFAULT_OVERLAY_CLASS = "z-[9999] shadow-lg rounded-lg overflow-visible";
|
|
118
|
+
function Dropdown({
|
|
119
|
+
children,
|
|
120
|
+
menu,
|
|
121
|
+
trigger = ["hover"],
|
|
122
|
+
placement = "bottomLeft",
|
|
123
|
+
arrow = false,
|
|
124
|
+
open,
|
|
125
|
+
onOpenChange,
|
|
126
|
+
disabled,
|
|
127
|
+
destroyPopupOnHide,
|
|
128
|
+
destroyOnHidden,
|
|
129
|
+
getPopupContainer,
|
|
130
|
+
overlayClassName,
|
|
131
|
+
overlayStyle,
|
|
132
|
+
dropdownRender,
|
|
133
|
+
popupRender,
|
|
134
|
+
openClassName
|
|
135
|
+
}) {
|
|
136
|
+
const renderProp = dropdownRender ?? popupRender;
|
|
137
|
+
const destroyOnHide = destroyPopupOnHide ?? destroyOnHidden ?? false;
|
|
138
|
+
if (!menu && !renderProp) {
|
|
139
|
+
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
140
|
+
}
|
|
141
|
+
const menuContent = menu ? /* @__PURE__ */ jsx(
|
|
142
|
+
DropdownMenu,
|
|
143
|
+
{
|
|
144
|
+
items: menu.items,
|
|
145
|
+
onClick: menu.onClick,
|
|
146
|
+
onSelect: menu.onSelect,
|
|
147
|
+
selectable: menu.selectable,
|
|
148
|
+
selectedKeys: menu.selectedKeys,
|
|
149
|
+
defaultSelectedKeys: menu.defaultSelectedKeys,
|
|
150
|
+
disabled: menu.disabled,
|
|
151
|
+
style: menu.style,
|
|
152
|
+
className: menu.className
|
|
153
|
+
}
|
|
154
|
+
) : /* @__PURE__ */ jsx("div", {});
|
|
155
|
+
const overlayContent = renderProp ? renderProp(menuContent) : menuContent;
|
|
156
|
+
const triggerArr = mapTriggerToRc(trigger);
|
|
157
|
+
const placementRc = mapPlacementToRc(placement);
|
|
158
|
+
const childElement = React2.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
|
|
159
|
+
const effectiveVisible = disabled ? false : open;
|
|
160
|
+
const effectiveOverlay = disabled ? /* @__PURE__ */ jsx("div", {}) : overlayContent;
|
|
161
|
+
return /* @__PURE__ */ jsx(
|
|
162
|
+
RcDropdown,
|
|
163
|
+
{
|
|
164
|
+
prefixCls: PREFIX,
|
|
165
|
+
overlay: effectiveOverlay,
|
|
166
|
+
trigger: triggerArr,
|
|
167
|
+
placement: placementRc,
|
|
168
|
+
visible: effectiveVisible,
|
|
169
|
+
onVisibleChange: (visible) => !disabled && onOpenChange?.(visible),
|
|
170
|
+
overlayClassName: clsx4(DEFAULT_OVERLAY_CLASS, overlayClassName),
|
|
171
|
+
overlayStyle,
|
|
172
|
+
getPopupContainer,
|
|
173
|
+
openClassName: openClassName ?? `${PREFIX}-open`,
|
|
174
|
+
arrow: Boolean(arrow),
|
|
175
|
+
autoDestroy: destroyOnHide,
|
|
176
|
+
children: childElement
|
|
177
|
+
}
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
var TRIGGER_BASE = "rounded-lg px-4 flex items-center justify-between gap-2 font-roboto text-sm font-medium transition-colors outline-none";
|
|
181
|
+
var TRIGGER_SIZES = {
|
|
182
|
+
default: "h-12 min-h-[48px] min-w-[192px]",
|
|
183
|
+
compact: "h-9 min-h-9 min-w-0"
|
|
184
|
+
};
|
|
185
|
+
var TRIGGER_STATES = {
|
|
186
|
+
default: "bg-content1 border border-input text-foreground hover:border-ring hover:bg-content2",
|
|
187
|
+
focus: "focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-offset-2 focus-visible:border-transparent",
|
|
188
|
+
disabled: "opacity-60 cursor-not-allowed bg-content2 border-border",
|
|
189
|
+
error: "border-destructive"
|
|
190
|
+
};
|
|
191
|
+
function DropdownTrigger({
|
|
192
|
+
placeholder = "Seleccionar...",
|
|
193
|
+
value,
|
|
194
|
+
icon,
|
|
195
|
+
error,
|
|
196
|
+
width = "min",
|
|
197
|
+
size = "default",
|
|
198
|
+
className,
|
|
199
|
+
disabled,
|
|
200
|
+
...rest
|
|
201
|
+
}) {
|
|
202
|
+
const displayText = value ?? placeholder;
|
|
203
|
+
const isPlaceholder = !value;
|
|
204
|
+
return /* @__PURE__ */ jsxs(
|
|
205
|
+
"button",
|
|
206
|
+
{
|
|
207
|
+
type: "button",
|
|
208
|
+
"aria-haspopup": "listbox",
|
|
209
|
+
"aria-expanded": rest["aria-expanded"],
|
|
210
|
+
disabled,
|
|
211
|
+
className: clsx4(
|
|
212
|
+
TRIGGER_BASE,
|
|
213
|
+
TRIGGER_SIZES[size],
|
|
214
|
+
TRIGGER_STATES.default,
|
|
215
|
+
TRIGGER_STATES.focus,
|
|
216
|
+
error && TRIGGER_STATES.error,
|
|
217
|
+
disabled && TRIGGER_STATES.disabled,
|
|
218
|
+
width === "full" && "w-full",
|
|
219
|
+
width === "auto" && "w-auto min-w-0",
|
|
220
|
+
className
|
|
221
|
+
),
|
|
222
|
+
...rest,
|
|
223
|
+
children: [
|
|
224
|
+
/* @__PURE__ */ jsx(
|
|
225
|
+
"span",
|
|
226
|
+
{
|
|
227
|
+
className: clsx4(
|
|
228
|
+
"flex-1 min-w-0 text-left truncate",
|
|
229
|
+
isPlaceholder && "text-muted-foreground"
|
|
230
|
+
),
|
|
231
|
+
children: displayText
|
|
232
|
+
}
|
|
233
|
+
),
|
|
234
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2 shrink-0", children: [
|
|
235
|
+
icon && /* @__PURE__ */ jsx("span", { className: "flex items-center justify-center w-6 h-6 rounded-full bg-muted text-muted-foreground", children: icon }),
|
|
236
|
+
/* @__PURE__ */ jsx(FontAwesomeIcon, { icon: faCaretDown, className: "h-3 w-3 text-muted-foreground" })
|
|
237
|
+
] })
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
var SIZE_CLASSES = "min-w-9 h-9 flex items-center justify-center border border-border rounded-md font-roboto text-sm font-medium transition-colors";
|
|
243
|
+
function PaginationItem({
|
|
244
|
+
type,
|
|
245
|
+
page,
|
|
246
|
+
disabled,
|
|
247
|
+
active,
|
|
248
|
+
isEllipsis,
|
|
249
|
+
onClick,
|
|
250
|
+
children,
|
|
251
|
+
"aria-current": ariaCurrent,
|
|
252
|
+
"aria-label": ariaLabel
|
|
253
|
+
}) {
|
|
254
|
+
const isDisabled = disabled;
|
|
255
|
+
const baseClasses = clsx4(
|
|
256
|
+
SIZE_CLASSES,
|
|
257
|
+
"focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2"
|
|
258
|
+
);
|
|
259
|
+
if (isEllipsis) {
|
|
260
|
+
return /* @__PURE__ */ jsx(
|
|
261
|
+
"span",
|
|
262
|
+
{
|
|
263
|
+
className: clsx4(baseClasses, "text-muted-foreground cursor-default select-none"),
|
|
264
|
+
"aria-hidden": true,
|
|
265
|
+
children: children ?? "..."
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
if (type === "prev") {
|
|
270
|
+
return /* @__PURE__ */ jsx(
|
|
271
|
+
"button",
|
|
272
|
+
{
|
|
273
|
+
type: "button",
|
|
274
|
+
onClick,
|
|
275
|
+
disabled: isDisabled,
|
|
276
|
+
"aria-label": ariaLabel ?? "P\xE1gina anterior",
|
|
277
|
+
className: clsx4(
|
|
278
|
+
baseClasses,
|
|
279
|
+
isDisabled ? "text-muted-foreground opacity-60 cursor-not-allowed" : "text-primary-500 hover:bg-accent active:bg-accent"
|
|
280
|
+
),
|
|
281
|
+
children: /* @__PURE__ */ jsx(FontAwesomeIcon, { icon: faChevronLeft, className: "h-4 w-4" })
|
|
282
|
+
}
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
if (type === "next") {
|
|
286
|
+
return /* @__PURE__ */ jsx(
|
|
287
|
+
"button",
|
|
288
|
+
{
|
|
289
|
+
type: "button",
|
|
290
|
+
onClick,
|
|
291
|
+
disabled: isDisabled,
|
|
292
|
+
"aria-label": ariaLabel ?? "P\xE1gina siguiente",
|
|
293
|
+
className: clsx4(
|
|
294
|
+
baseClasses,
|
|
295
|
+
isDisabled ? "text-muted-foreground opacity-60 cursor-not-allowed" : "text-primary-500 hover:bg-accent active:bg-accent"
|
|
296
|
+
),
|
|
297
|
+
children: /* @__PURE__ */ jsx(FontAwesomeIcon, { icon: faChevronRight, className: "h-4 w-4" })
|
|
298
|
+
}
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
if (type === "jump-prev" || type === "jump-next") {
|
|
302
|
+
return /* @__PURE__ */ jsx(
|
|
303
|
+
"button",
|
|
304
|
+
{
|
|
305
|
+
type: "button",
|
|
306
|
+
onClick,
|
|
307
|
+
disabled: isDisabled,
|
|
308
|
+
className: clsx4(
|
|
309
|
+
baseClasses,
|
|
310
|
+
isDisabled ? "text-muted-foreground opacity-60 cursor-not-allowed" : "text-foreground hover:bg-accent active:bg-accent"
|
|
311
|
+
),
|
|
312
|
+
children
|
|
313
|
+
}
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
return /* @__PURE__ */ jsx(
|
|
317
|
+
"button",
|
|
318
|
+
{
|
|
319
|
+
type: "button",
|
|
320
|
+
onClick,
|
|
321
|
+
disabled: isDisabled,
|
|
322
|
+
"aria-current": ariaCurrent,
|
|
323
|
+
"aria-label": ariaLabel ?? (page ? `P\xE1gina ${page}` : void 0),
|
|
324
|
+
className: clsx4(
|
|
325
|
+
baseClasses,
|
|
326
|
+
active ? "bg-primary-500 text-primary-foreground cursor-default" : isDisabled ? "text-muted-foreground opacity-60 cursor-not-allowed" : "text-foreground hover:bg-accent active:bg-accent"
|
|
327
|
+
),
|
|
328
|
+
children: children ?? page
|
|
329
|
+
}
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
function PaginationSizeSelect({
|
|
333
|
+
pageSize,
|
|
334
|
+
pageSizeOptions,
|
|
335
|
+
disabled,
|
|
336
|
+
onChange,
|
|
337
|
+
responsive = true
|
|
338
|
+
}) {
|
|
339
|
+
const [open, setOpen] = useState(false);
|
|
340
|
+
const options = pageSizeOptions.length > 0 ? pageSizeOptions : [10, 15, 20];
|
|
341
|
+
const menuItems = options.map((opt) => ({
|
|
342
|
+
key: String(opt),
|
|
343
|
+
label: `${opt}/p\xE1gina`
|
|
344
|
+
}));
|
|
345
|
+
return /* @__PURE__ */ jsxs(
|
|
346
|
+
"div",
|
|
347
|
+
{
|
|
348
|
+
className: clsx4(
|
|
349
|
+
"flex items-center gap-2 font-roboto text-sm font-medium text-foreground",
|
|
350
|
+
responsive && "max-[360px]:hidden"
|
|
351
|
+
),
|
|
352
|
+
children: [
|
|
353
|
+
/* @__PURE__ */ jsx("span", { className: "text-foreground", children: "Mostrar" }),
|
|
354
|
+
/* @__PURE__ */ jsx(
|
|
355
|
+
Dropdown,
|
|
356
|
+
{
|
|
357
|
+
open,
|
|
358
|
+
onOpenChange: setOpen,
|
|
359
|
+
placement: "bottom",
|
|
360
|
+
trigger: ["click"],
|
|
361
|
+
disabled,
|
|
362
|
+
menu: {
|
|
363
|
+
items: menuItems,
|
|
364
|
+
selectedKeys: [String(pageSize)],
|
|
365
|
+
onClick: ({ key }) => {
|
|
366
|
+
onChange(Number(key));
|
|
367
|
+
setOpen(false);
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
children: /* @__PURE__ */ jsx(
|
|
371
|
+
DropdownTrigger,
|
|
372
|
+
{
|
|
373
|
+
placeholder: "Mostrar",
|
|
374
|
+
value: `${pageSize}/p\xE1gina`,
|
|
375
|
+
width: "auto",
|
|
376
|
+
size: "compact",
|
|
377
|
+
disabled
|
|
378
|
+
}
|
|
379
|
+
)
|
|
380
|
+
}
|
|
381
|
+
)
|
|
382
|
+
]
|
|
383
|
+
}
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
// src/atoms/Pagination/utils.ts
|
|
388
|
+
function getItemRange(current, pageSize, total) {
|
|
389
|
+
const from = total === 0 ? 0 : (current - 1) * pageSize + 1;
|
|
390
|
+
const to = Math.min(current * pageSize, total);
|
|
391
|
+
return [from, to];
|
|
392
|
+
}
|
|
393
|
+
var DEFAULT_PAGE_SIZE_OPTIONS = [10, 15, 20];
|
|
394
|
+
var DEFAULT_PAGE_SIZE = 10;
|
|
395
|
+
var Pagination = ({
|
|
396
|
+
current: controlledCurrent,
|
|
397
|
+
defaultCurrent = 1,
|
|
398
|
+
total = 0,
|
|
399
|
+
pageSize: controlledPageSize,
|
|
400
|
+
defaultPageSize = DEFAULT_PAGE_SIZE,
|
|
401
|
+
disabled = false,
|
|
402
|
+
hideOnSinglePage = false,
|
|
403
|
+
showLessItems = false,
|
|
404
|
+
showQuickJumper = false,
|
|
405
|
+
showSizeChanger = false,
|
|
406
|
+
pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,
|
|
407
|
+
showTitle = true,
|
|
408
|
+
showTotal,
|
|
409
|
+
simple,
|
|
410
|
+
size = "default",
|
|
411
|
+
responsive = true,
|
|
412
|
+
align = "start",
|
|
413
|
+
itemRender,
|
|
414
|
+
onChange,
|
|
415
|
+
onShowSizeChange,
|
|
416
|
+
className,
|
|
417
|
+
style
|
|
418
|
+
}) => {
|
|
419
|
+
const [internalCurrent, setInternalCurrent] = useState(defaultCurrent);
|
|
420
|
+
const [internalPageSize, setInternalPageSize] = useState(
|
|
421
|
+
defaultPageSize ?? pageSizeOptions[0] ?? DEFAULT_PAGE_SIZE
|
|
422
|
+
);
|
|
423
|
+
const isControlled = controlledCurrent !== void 0;
|
|
424
|
+
const isPageSizeControlled = controlledPageSize !== void 0;
|
|
425
|
+
const current = isControlled ? controlledCurrent : internalCurrent;
|
|
426
|
+
const pageSize = isPageSizeControlled ? controlledPageSize : internalPageSize;
|
|
427
|
+
const totalPages = Math.max(1, Math.ceil(total / pageSize));
|
|
428
|
+
const handleChange = useCallback(
|
|
429
|
+
(page, size2) => {
|
|
430
|
+
if (!isControlled) setInternalCurrent(page);
|
|
431
|
+
if (!isPageSizeControlled && size2 !== pageSize) setInternalPageSize(size2);
|
|
432
|
+
onChange?.(page, size2);
|
|
433
|
+
},
|
|
434
|
+
[isControlled, isPageSizeControlled, pageSize, onChange]
|
|
435
|
+
);
|
|
436
|
+
const handleShowSizeChange = useCallback(
|
|
437
|
+
(page, size2) => {
|
|
438
|
+
if (!isPageSizeControlled) setInternalPageSize(size2);
|
|
439
|
+
onShowSizeChange?.(page, size2);
|
|
440
|
+
onChange?.(page, size2);
|
|
441
|
+
},
|
|
442
|
+
[isPageSizeControlled, onShowSizeChange, onChange]
|
|
443
|
+
);
|
|
444
|
+
const handleSizeSelectChange = useCallback(
|
|
445
|
+
(newSize) => {
|
|
446
|
+
const newCurrent = Math.min(current, Math.ceil(total / newSize) || 1);
|
|
447
|
+
handleShowSizeChange(newCurrent, newSize);
|
|
448
|
+
if (!isControlled) setInternalCurrent(newCurrent);
|
|
449
|
+
},
|
|
450
|
+
[current, total, handleShowSizeChange, isControlled]
|
|
451
|
+
);
|
|
452
|
+
const customItemRender = useCallback(
|
|
453
|
+
(page, type, element) => {
|
|
454
|
+
if (itemRender) {
|
|
455
|
+
return itemRender(page, type, element);
|
|
456
|
+
}
|
|
457
|
+
const isEllipsis = false;
|
|
458
|
+
const isPrev = type === "prev";
|
|
459
|
+
const isNext = type === "next";
|
|
460
|
+
const isPage = type === "page";
|
|
461
|
+
const isDisabled = isPrev && current <= 1 || isNext && current >= totalPages;
|
|
462
|
+
const isActive = isPage && page === current;
|
|
463
|
+
const originalOnClick = React2.isValidElement(element) && element.props ? element.props.onClick : void 0;
|
|
464
|
+
return /* @__PURE__ */ jsx(
|
|
465
|
+
PaginationItem,
|
|
466
|
+
{
|
|
467
|
+
type,
|
|
468
|
+
page,
|
|
469
|
+
disabled: isDisabled,
|
|
470
|
+
active: isActive,
|
|
471
|
+
isEllipsis,
|
|
472
|
+
onClick: originalOnClick,
|
|
473
|
+
"aria-current": isActive ? "page" : void 0,
|
|
474
|
+
children: type === "page" ? page : element
|
|
475
|
+
}
|
|
476
|
+
);
|
|
477
|
+
},
|
|
478
|
+
[itemRender, current, totalPages]
|
|
479
|
+
);
|
|
480
|
+
const range = useMemo(() => getItemRange(current, pageSize, total), [current, pageSize, total]);
|
|
481
|
+
const sizeOptions = useMemo(
|
|
482
|
+
() => pageSizeOptions.length > 0 ? pageSizeOptions : DEFAULT_PAGE_SIZE_OPTIONS,
|
|
483
|
+
[pageSizeOptions]
|
|
484
|
+
);
|
|
485
|
+
if (hideOnSinglePage && totalPages <= 1) {
|
|
486
|
+
return null;
|
|
487
|
+
}
|
|
488
|
+
const alignClass = align === "center" ? "justify-center" : align === "end" ? "justify-end" : "justify-between";
|
|
489
|
+
const sizeClass = size === "small" ? "h-8 [&_.rc-pagination-item]:min-w-[32px] [&_.rc-pagination-item]:h-8" : size === "large" ? "h-14 [&_.rc-pagination-item]:min-w-[56px] [&_.rc-pagination-item]:h-14" : "h-12";
|
|
490
|
+
const hasLeftSection = showTotal || showSizeChanger;
|
|
491
|
+
return /* @__PURE__ */ jsxs(
|
|
492
|
+
"div",
|
|
493
|
+
{
|
|
494
|
+
className: clsx4(
|
|
495
|
+
"flex items-center w-full min-h-[48px] px-4 py-0 rounded-lg bg-content1 font-roboto",
|
|
496
|
+
sizeClass,
|
|
497
|
+
hasLeftSection ? "justify-between gap-2" : alignClass,
|
|
498
|
+
className
|
|
499
|
+
),
|
|
500
|
+
style,
|
|
501
|
+
children: [
|
|
502
|
+
hasLeftSection && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
503
|
+
showSizeChanger && /* @__PURE__ */ jsx(
|
|
504
|
+
PaginationSizeSelect,
|
|
505
|
+
{
|
|
506
|
+
pageSize,
|
|
507
|
+
pageSizeOptions: sizeOptions,
|
|
508
|
+
disabled,
|
|
509
|
+
onChange: handleSizeSelectChange,
|
|
510
|
+
responsive
|
|
511
|
+
}
|
|
512
|
+
),
|
|
513
|
+
showTotal && /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-foreground max-[360px]:hidden", children: showTotal(total, range) })
|
|
514
|
+
] }),
|
|
515
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsx(
|
|
516
|
+
RCPagination,
|
|
517
|
+
{
|
|
518
|
+
current,
|
|
519
|
+
total,
|
|
520
|
+
pageSize,
|
|
521
|
+
defaultCurrent,
|
|
522
|
+
defaultPageSize,
|
|
523
|
+
disabled,
|
|
524
|
+
hideOnSinglePage: false,
|
|
525
|
+
showLessItems,
|
|
526
|
+
showSizeChanger: false,
|
|
527
|
+
showQuickJumper,
|
|
528
|
+
showTitle,
|
|
529
|
+
simple,
|
|
530
|
+
locale: {
|
|
531
|
+
prev_page: "Anterior",
|
|
532
|
+
next_page: "Siguiente",
|
|
533
|
+
page: "P\xE1gina",
|
|
534
|
+
jump_to: "Ir a",
|
|
535
|
+
jump_to_confirm: "Confirmar"
|
|
536
|
+
},
|
|
537
|
+
itemRender: customItemRender,
|
|
538
|
+
onChange: handleChange,
|
|
539
|
+
onShowSizeChange: handleShowSizeChange,
|
|
540
|
+
pageSizeOptions: sizeOptions,
|
|
541
|
+
className: clsx4(
|
|
542
|
+
"rc-pagination-custom flex items-center gap-2 [&_ul]:flex [&_ul]:items-center [&_ul]:gap-2 [&_ul]:list-none [&_ul]:m-0 [&_ul]:p-0",
|
|
543
|
+
"[&_.rc-pagination-prev]:m-0 [&_.rc-pagination-next]:m-0",
|
|
544
|
+
"[&_.rc-pagination-item]:m-0 [&_.rc-pagination-item]:border-0",
|
|
545
|
+
"[&_.rc-pagination-jump-prev]:m-0 [&_.rc-pagination-jump-next]:m-0",
|
|
546
|
+
"[&_li]:inline-flex"
|
|
547
|
+
)
|
|
548
|
+
}
|
|
549
|
+
) })
|
|
550
|
+
]
|
|
551
|
+
}
|
|
552
|
+
);
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
export { Dropdown, DropdownMenu, DropdownTrigger, Pagination, PaginationItem, PaginationSizeSelect, getItemRange, mapPlacementToRc, mapTriggerToRc };
|
|
556
|
+
//# sourceMappingURL=chunk-A7TDGQAB.js.map
|
|
557
|
+
//# sourceMappingURL=chunk-A7TDGQAB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/atoms/Dropdown/DropdownMenu.tsx","../src/atoms/Dropdown/utils.ts","../src/atoms/Dropdown/Dropdown.tsx","../src/atoms/Dropdown/DropdownTrigger.tsx","../src/atoms/Pagination/PaginationItem.tsx","../src/atoms/Pagination/PaginationSizeSelect.tsx","../src/atoms/Pagination/utils.ts","../src/atoms/Pagination/Pagination.tsx"],"names":["clsx","jsx","React","jsxs","FontAwesomeIcon","useState","size"],"mappings":";;;;;;;;;AAKA,IAAM,SAAA,GACJ,iJAAA;AAKF,SAAS,QAAA,CAAS;AAAA,EAChB,IAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA,IAAO,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,GAAI,EAAA;AAClD,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,MAAA,EAAO,GAAI,IAAA;AACpC,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAwB;AAC3C,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,OAAA,GAAU,KAAK,CAAC,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,UAAA;AAAA,MACL,eAAA,EAAe,QAAA;AAAA,MACf,SAAA,EAAWA,KAAA;AAAA,QACT,kDAAA;AAAA,QACA,kCAAA;AAAA,QACA,QAAA,IAAY,gCAAA;AAAA,QACZ,QAAA,IAAY,yEAAA;AAAA,QACZ,MAAA,IAAU,kBAAA;AAAA,QACV,MAAA,IAAU,CAAC,QAAA,IAAY;AAAA,OACzB;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,WAAA,CAAY,CAAgC,CAAA;AAAA,QAC9C;AAAA,MACF,CAAA;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAKA,SAAS,WAAA,GAAc;AACrB,EAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAG,IAAA,EAAK,WAAA,EAAY,WAAU,qBAAA,EAAsB,CAAA;AAC9D;AAKA,SAAS,aAAA,CAAc,EAAE,KAAA,EAAO,QAAA,EAAS,EAA+C;AACtF,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,WAAU,WAAA,EACxB,QAAA,EAAA;AAAA,IAAA,KAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBAEF,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAS;AAAA,GAAA,EAC9C,CAAA;AAEJ;AAKA,SAAS,eAAA,CACP,KAAA,EACA,YAAA,EACA,OAAA,EACW;AACX,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,KAAQ;AAC9B,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW,2BAAQ,WAAA,EAAA,EAAA,EAAiB,CAAA,QAAA,EAAW,GAAG,CAAA,CAAI,CAAA;AACxE,IAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,MAAA,2BACG,aAAA,EAAA,EAA+C,KAAA,EAAO,IAAA,CAAK,KAAA,EACzD,eAAK,QAAA,IAAY,eAAA,CAAgB,IAAA,CAAK,QAAA,EAAU,cAAc,OAAO,CAAA,EAAA,EADpD,KAAK,GAAA,IAAO,CAAA,MAAA,EAAS,GAAG,CAAA,CAE5C,CAAA;AAAA,IAEJ;AACA,IAAA,MAAM,MAAM,MAAA,CAAO,IAAA,CAAK,GAAA,IAAO,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAAA;AAC5C,IAAA,uBACE,GAAA,CAAC,YAAmB,IAAA,EAAY,QAAA,EAAU,aAAa,QAAA,CAAS,GAAG,CAAA,EAAG,OAAA,EAAA,EAAvD,GAAyE,CAAA;AAAA,EAE5F,CAAC,CAAA;AACH;AAWO,SAAS,YAAA,CAAa;AAAA,EAC3B,QAAQ,EAAC;AAAA,EACT,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,eAAe,EAAC;AAAA,EAChB,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,QAAA;AAAA,IAC9C,MAAM,uBAAuB;AAAC,GAChC;AACA,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,YAAA,GAAe,gBAAA;AAE1D,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAa,CAAA,KAAwB;AACxD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,GAAG,IAAI,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,GAAG,CAAA,GAAI,CAAC,GAAG,UAAU,GAAG,CAAA;AAC3F,MAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,MAAA,QAAA,GAAW,EAAE,KAAK,OAAA,EAAS,CAAC,GAAG,CAAA,EAAG,YAAA,EAAc,MAAM,CAAA;AAAA,IACxD;AACA,IAAA,OAAA,GAAU,EAAE,KAAK,OAAA,EAAS,CAAC,GAAG,CAAA,EAAG,QAAA,EAAU,GAAG,CAAA;AAAA,EAChD,CAAA;AAEA,EAAA,MAAM,WAAA,GACJ,MAAM,MAAA,GAAS,CAAA,uBACZ,IAAA,EAAA,EAAG,IAAA,EAAK,QAAO,SAAA,EAAWA,KAAA,CAAK,WAAW,SAAS,CAAA,EAAG,OAAc,eAAA,EAAe,QAAA,EACjF,0BAAgB,KAAA,EAAO,QAAA,EAAU,WAAW,CAAA,EAC/C,CAAA,GAEA,QAAA;AAGJ,EAAA,OAAO,WAAA;AACT;;;AC1IO,SAAS,eACd,OAAA,EACuC;AACvC,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,CAAC,OAAO,CAAA;AAC7B,EAAA,MAAM,MAAM,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA,GAAU,CAAC,OAAO,CAAA;AACvD,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,aAAA,GAGF;AAAA,EACF,OAAA,EAAS,SAAA;AAAA,EACT,GAAA,EAAK,KAAA;AAAA,EACL,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,SAAA;AAAA,EACV,MAAA,EAAQ,UAAA;AAAA,EACR,UAAA,EAAY,YAAA;AAAA,EACZ,MAAA,EAAQ,QAAA;AAAA,EACR,WAAA,EAAa,aAAA;AAAA,EACb,WAAA,EAAa,YAAA;AAAA,EACb,SAAA,EAAW;AACb,CAAA;AAKO,SAAS,iBACd,SAAA,EAC0E;AAC1E,EAAA,IAAI,SAAA,IAAa,SAAA,IAAa,aAAA,EAAe,OAAO,cAAc,SAAS,CAAA;AAC3E,EAAA,OAAO,YAAA;AACT;AC/BA,IAAM,MAAA,GAAS,aAAA;AAEf,IAAM,qBAAA,GAAwB,gDAAA;AAevB,SAAS,QAAA,CAAS;AAAA,EACvB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA,GAAU,CAAC,OAAO,CAAA;AAAA,EAClB,SAAA,GAAY,YAAA;AAAA,EACZ,KAAA,GAAQ,KAAA;AAAA,EACR,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,aAAa,cAAA,IAAkB,WAAA;AACrC,EAAA,MAAM,aAAA,GAAgB,sBAAsB,eAAA,IAAmB,KAAA;AAE/D,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,UAAA,EAAY;AACxB,IAAA,uBAAOC,GAAAA,CAAA,QAAA,EAAA,EAAG,QAAA,EAAS,CAAA;AAAA,EACrB;AAEA,EAAA,MAAM,WAAA,GAAc,uBAClBA,GAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,qBAAqB,IAAA,CAAK,mBAAA;AAAA,MAC1B,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA;AAAA,GAClB,mBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,CAAA;AAGP,EAAA,MAAM,cAAA,GAAqC,UAAA,GACtC,UAAA,CAAW,WAAW,CAAA,GACvB,WAAA;AAEJ,EAAA,MAAM,UAAA,GAAa,eAAe,OAAO,CAAA;AACzC,EAAA,MAAM,WAAA,GAAc,iBAAiB,SAAS,CAAA;AAE9C,EAAA,MAAM,YAAA,GAAeC,OAAM,cAAA,CAAe,QAAQ,IAAI,QAAA,mBAAWD,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAS,CAAA;AAEjF,EAAA,MAAM,gBAAA,GAAmB,WAAW,KAAA,GAAQ,IAAA;AAC5C,EAAA,MAAM,gBAAA,GAAmB,QAAA,mBAAWA,GAAAA,CAAC,SAAI,CAAA,GAAK,cAAA;AAE9C,EAAA,uBACEA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,MAAA;AAAA,MACX,OAAA,EAAS,gBAAA;AAAA,MACT,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW,WAAA;AAAA,MACX,OAAA,EAAS,gBAAA;AAAA,MACT,iBAAiB,CAAC,OAAA,KAAY,CAAC,QAAA,IAAY,eAAe,OAAO,CAAA;AAAA,MACjE,gBAAA,EAAkBD,KAAAA,CAAK,qBAAA,EAAuB,gBAAgB,CAAA;AAAA,MAC9D,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,aAAA,EAAe,aAAA,IAAiB,CAAA,EAAG,MAAM,CAAA,KAAA,CAAA;AAAA,MACzC,KAAA,EAAO,QAAQ,KAAK,CAAA;AAAA,MACpB,WAAA,EAAa,aAAA;AAAA,MAEZ,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;ACzFA,IAAM,YAAA,GACJ,wHAAA;AAEF,IAAM,aAAA,GAAgB;AAAA,EACpB,OAAA,EAAS,iCAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,cAAA,GAAiB;AAAA,EACrB,OAAA,EAAS,qFAAA;AAAA,EACT,KAAA,EACE,4GAAA;AAAA,EAEF,QAAA,EAAU,yDAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAA;AAWO,SAAS,eAAA,CAAgB;AAAA,EAC9B,WAAA,GAAc,gBAAA;AAAA,EACd,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,KAAA;AAAA,EACR,IAAA,GAAO,SAAA;AAAA,EACP,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyB;AACvB,EAAA,MAAM,cAAc,KAAA,IAAS,WAAA;AAC7B,EAAA,MAAM,gBAAgB,CAAC,KAAA;AAEvB,EAAA,uBACEG,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,eAAA,EAAc,SAAA;AAAA,MACd,eAAA,EAAe,KAAK,eAAe,CAAA;AAAA,MACnC,QAAA;AAAA,MACA,SAAA,EAAWH,KAAAA;AAAA,QACT,YAAA;AAAA,QACA,cAAc,IAAI,CAAA;AAAA,QAClB,cAAA,CAAe,OAAA;AAAA,QACf,cAAA,CAAe,KAAA;AAAA,QACf,SAAS,cAAA,CAAe,KAAA;AAAA,QACxB,YAAY,cAAA,CAAe,QAAA;AAAA,QAC3B,UAAU,MAAA,IAAU,QAAA;AAAA,QACpB,UAAU,MAAA,IAAU,gBAAA;AAAA,QACpB;AAAA,OACF;AAAA,MACC,GAAI,IAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAAAC,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWD,KAAAA;AAAA,cACT,mCAAA;AAAA,cACA,aAAA,IAAiB;AAAA,aACnB;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,wBACAG,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,UAAA,IAAA,oBACCF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wFACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,0BAEFA,GAAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAM,WAAA,EAAa,WAAU,+BAAA,EAAgC;AAAA,SAAA,EAChF;AAAA;AAAA;AAAA,GACF;AAEJ;AClEA,IAAM,YAAA,GACJ,gIAAA;AAEK,SAAS,cAAA,CAAe;AAAA,EAC7B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,EAAgB,WAAA;AAAA,EAChB,YAAA,EAAc;AAChB,CAAA,EAAwB;AACtB,EAAA,MAAM,UAAA,GAAa,QAAA;AAEnB,EAAA,MAAM,WAAA,GAAcD,KAAAA;AAAA,IAClB,YAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBACEC,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWD,KAAAA,CAAK,WAAA,EAAa,kDAAkD,CAAA;AAAA,QAC/E,aAAA,EAAW,IAAA;AAAA,QAEV,QAAA,EAAA,QAAA,IAAY;AAAA;AAAA,KACf;AAAA,EAEJ;AAEA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,uBACEC,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA;AAAA,QACA,QAAA,EAAU,UAAA;AAAA,QACV,cAAY,SAAA,IAAa,oBAAA;AAAA,QACzB,SAAA,EAAWD,KAAAA;AAAA,UACT,WAAA;AAAA,UACA,aACI,qDAAA,GACA;AAAA,SACN;AAAA,QAEA,0BAAAC,GAAAA,CAACG,eAAAA,EAAA,EAAgB,IAAA,EAAM,aAAA,EAAe,WAAU,SAAA,EAAU;AAAA;AAAA,KAC5D;AAAA,EAEJ;AAEA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,uBACEH,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA;AAAA,QACA,QAAA,EAAU,UAAA;AAAA,QACV,cAAY,SAAA,IAAa,qBAAA;AAAA,QACzB,SAAA,EAAWD,KAAAA;AAAA,UACT,WAAA;AAAA,UACA,aACI,qDAAA,GACA;AAAA,SACN;AAAA,QAEA,0BAAAC,GAAAA,CAACG,eAAAA,EAAA,EAAgB,IAAA,EAAM,cAAA,EAAgB,WAAU,SAAA,EAAU;AAAA;AAAA,KAC7D;AAAA,EAEJ;AAEA,EAAA,IAAI,IAAA,KAAS,WAAA,IAAe,IAAA,KAAS,WAAA,EAAa;AAChD,IAAA,uBACEH,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA;AAAA,QACA,QAAA,EAAU,UAAA;AAAA,QACV,SAAA,EAAWD,KAAAA;AAAA,UACT,WAAA;AAAA,UACA,aACI,qDAAA,GACA;AAAA,SACN;AAAA,QAEC;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,uBACEC,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,cAAA,EAAc,WAAA;AAAA,MACd,YAAA,EAAY,SAAA,KAAc,IAAA,GAAO,CAAA,UAAA,EAAU,IAAI,CAAA,CAAA,GAAK,MAAA,CAAA;AAAA,MACpD,SAAA,EAAWD,KAAAA;AAAA,QACT,WAAA;AAAA,QACA,MAAA,GACI,uDAAA,GACA,UAAA,GACE,qDAAA,GACA;AAAA,OACR;AAAA,MAEC,QAAA,EAAA,QAAA,IAAY;AAAA;AAAA,GACf;AAEJ;AC/GO,SAAS,oBAAA,CAAqB;AAAA,EACnC,QAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAA8B;AAC5B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIK,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,OAAA,GAAU,gBAAgB,MAAA,GAAS,CAAA,GAAI,kBAAkB,CAAC,EAAA,EAAI,IAAI,EAAE,CAAA;AAE1E,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,IACtC,GAAA,EAAK,OAAO,GAAG,CAAA;AAAA,IACf,KAAA,EAAO,GAAG,GAAG,CAAA,UAAA;AAAA,GACf,CAAE,CAAA;AAEF,EAAA,uBACEF,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWH,KAAAA;AAAA,QACT,yEAAA;AAAA,QACA,UAAA,IAAc;AAAA,OAChB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAkB,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,wBACzCA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA;AAAA,YACA,YAAA,EAAc,OAAA;AAAA,YACd,SAAA,EAAU,QAAA;AAAA,YACV,OAAA,EAAS,CAAC,OAAO,CAAA;AAAA,YACjB,QAAA;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,KAAA,EAAO,SAAA;AAAA,cACP,YAAA,EAAc,CAAC,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,cAC/B,OAAA,EAAS,CAAC,EAAE,GAAA,EAAI,KAAM;AACpB,gBAAA,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA;AACpB,gBAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,cACf;AAAA,aACF;AAAA,YAEA,QAAA,kBAAAA,GAAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,WAAA,EAAY,SAAA;AAAA,gBACZ,KAAA,EAAO,GAAG,QAAQ,CAAA,UAAA,CAAA;AAAA,gBAClB,KAAA,EAAM,MAAA;AAAA,gBACN,IAAA,EAAK,SAAA;AAAA,gBACL;AAAA;AAAA;AACF;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;;;AC3DO,SAAS,YAAA,CAAa,OAAA,EAAiB,QAAA,EAAkB,KAAA,EAAiC;AAC/F,EAAA,MAAM,OAAO,KAAA,KAAU,CAAA,GAAI,CAAA,GAAA,CAAK,OAAA,GAAU,KAAK,QAAA,GAAW,CAAA;AAC1D,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,OAAA,GAAU,UAAU,KAAK,CAAA;AAC7C,EAAA,OAAO,CAAC,MAAM,EAAE,CAAA;AAClB;ACEA,IAAM,yBAAA,GAA4B,CAAC,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA;AAC7C,IAAM,iBAAA,GAAoB,EAAA;AAEnB,IAAM,aAAwC,CAAC;AAAA,EACpD,OAAA,EAAS,iBAAA;AAAA,EACT,cAAA,GAAiB,CAAA;AAAA,EACjB,KAAA,GAAQ,CAAA;AAAA,EACR,QAAA,EAAU,kBAAA;AAAA,EACV,eAAA,GAAkB,iBAAA;AAAA,EAClB,QAAA,GAAW,KAAA;AAAA,EACX,gBAAA,GAAmB,KAAA;AAAA,EACnB,aAAA,GAAgB,KAAA;AAAA,EAChB,eAAA,GAAkB,KAAA;AAAA,EAClB,eAAA,GAAkB,KAAA;AAAA,EAClB,eAAA,GAAkB,yBAAA;AAAA,EAClB,SAAA,GAAY,IAAA;AAAA,EACZ,SAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,UAAA,GAAa,IAAA;AAAA,EACb,KAAA,GAAQ,OAAA;AAAA,EACR,UAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAII,SAAS,cAAc,CAAA;AACrE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,QAAAA;AAAA,IAC9C,eAAA,IAAmB,eAAA,CAAgB,CAAC,CAAA,IAAK;AAAA,GAC3C;AAEA,EAAA,MAAM,eAAe,iBAAA,KAAsB,MAAA;AAC3C,EAAA,MAAM,uBAAuB,kBAAA,KAAuB,MAAA;AAEpD,EAAA,MAAM,OAAA,GAAU,eAAe,iBAAA,GAAqB,eAAA;AACpD,EAAA,MAAM,QAAA,GAAW,uBAAuB,kBAAA,GAAsB,gBAAA;AAE9D,EAAA,MAAM,UAAA,GAAa,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,KAAA,GAAQ,QAAQ,CAAC,CAAA;AAE1D,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CAAC,MAAcC,KAAAA,KAAiB;AAC9B,MAAA,IAAI,CAAC,YAAA,EAAc,kBAAA,CAAmB,IAAI,CAAA;AAC1C,MAAA,IAAI,CAAC,oBAAA,IAAwBA,KAAAA,KAAS,QAAA,sBAA8BA,KAAI,CAAA;AACxE,MAAA,QAAA,GAAW,MAAMA,KAAI,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,oBAAA,EAAsB,QAAA,EAAU,QAAQ;AAAA,GACzD;AAEA,EAAA,MAAM,oBAAA,GAAuB,WAAA;AAAA,IAC3B,CAAC,MAAcA,KAAAA,KAAiB;AAC9B,MAAA,IAAI,CAAC,oBAAA,EAAsB,mBAAA,CAAoBA,KAAI,CAAA;AACnD,MAAA,gBAAA,GAAmB,MAAMA,KAAI,CAAA;AAC7B,MAAA,QAAA,GAAW,MAAMA,KAAI,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,oBAAA,EAAsB,gBAAA,EAAkB,QAAQ;AAAA,GACnD;AAEA,EAAA,MAAM,sBAAA,GAAyB,WAAA;AAAA,IAC7B,CAAC,OAAA,KAAoB;AACnB,MAAA,MAAM,UAAA,GAAa,KAAK,GAAA,CAAI,OAAA,EAAS,KAAK,IAAA,CAAK,KAAA,GAAQ,OAAO,CAAA,IAAK,CAAC,CAAA;AACpE,MAAA,oBAAA,CAAqB,YAAY,OAAO,CAAA;AACxC,MAAA,IAAI,CAAC,YAAA,EAAc,kBAAA,CAAmB,UAAU,CAAA;AAAA,IAClD,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,KAAA,EAAO,oBAAA,EAAsB,YAAY;AAAA,GACrD;AAEA,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACvB,CAAC,IAAA,EAAc,IAAA,EAA0B,OAAA,KAA6B;AACpE,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAO,UAAA,CAAW,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,MACvC;AACA,MAAA,MAAM,UAAA,GAAa,KAAA;AACnB,MAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AACxB,MAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AACxB,MAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AACxB,MAAA,MAAM,UAAA,GAAc,MAAA,IAAU,OAAA,IAAW,CAAA,IAAO,UAAU,OAAA,IAAW,UAAA;AACrE,MAAA,MAAM,QAAA,GAAW,UAAU,IAAA,KAAS,OAAA;AACpC,MAAA,MAAM,eAAA,GACJJ,OAAM,cAAA,CAAe,OAAO,KAAK,OAAA,CAAQ,KAAA,GACpC,OAAA,CAAQ,KAAA,CAAmC,OAAA,GAC5C,MAAA;AAEN,MAAA,uBACED,GAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,IAAA;AAAA,UACA,QAAA,EAAU,UAAA;AAAA,UACV,MAAA,EAAQ,QAAA;AAAA,UACR,UAAA;AAAA,UACA,OAAA,EAAS,eAAA;AAAA,UACT,cAAA,EAAc,WAAW,MAAA,GAAS,MAAA;AAAA,UAEjC,QAAA,EAAA,IAAA,KAAS,SAAS,IAAA,GAAO;AAAA;AAAA,OAC5B;AAAA,IAEJ,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,OAAA,EAAS,UAAU;AAAA,GAClC;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAM,YAAA,CAAa,OAAA,EAAS,QAAA,EAAU,KAAK,CAAA,EAAG,CAAC,OAAA,EAAS,QAAA,EAAU,KAAK,CAAC,CAAA;AAE9F,EAAA,MAAM,WAAA,GAAc,OAAA;AAAA,IAClB,MAAO,eAAA,CAAgB,MAAA,GAAS,CAAA,GAAI,eAAA,GAAkB,yBAAA;AAAA,IACtD,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,IAAI,gBAAA,IAAoB,cAAc,CAAA,EAAG;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,aACJ,KAAA,KAAU,QAAA,GAAW,gBAAA,GAAmB,KAAA,KAAU,QAAQ,aAAA,GAAgB,iBAAA;AAE5E,EAAA,MAAM,YACJ,IAAA,KAAS,OAAA,GACL,sEAAA,GACA,IAAA,KAAS,UACP,wEAAA,GACA,MAAA;AAER,EAAA,MAAM,iBAAiB,SAAA,IAAa,eAAA;AAEpC,EAAA,uBACEE,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWH,KAAAA;AAAA,QACT,oFAAA;AAAA,QACA,SAAA;AAAA,QACA,iBAAiB,uBAAA,GAA0B,UAAA;AAAA,QAC3C;AAAA,OACF;AAAA,MACA,KAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,cAAA,oBACCG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,eAAA,oBACCF,GAAAA;AAAA,YAAC,oBAAA;AAAA,YAAA;AAAA,cACC,QAAA;AAAA,cACA,eAAA,EAAiB,WAAA;AAAA,cACjB,QAAA;AAAA,cACA,QAAA,EAAU,sBAAA;AAAA,cACV;AAAA;AAAA,WACF;AAAA,UAED,SAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wDAAA,EACZ,QAAA,EAAA,SAAA,CAAU,KAAA,EAAO,KAAK,CAAA,EACzB;AAAA,SAAA,EAEJ,CAAA;AAAA,wBAGFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BACb,QAAA,kBAAAA,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,KAAA;AAAA,YACA,QAAA;AAAA,YACA,cAAA;AAAA,YACA,eAAA;AAAA,YACA,QAAA;AAAA,YACA,gBAAA,EAAkB,KAAA;AAAA,YAClB,aAAA;AAAA,YACA,eAAA,EAAiB,KAAA;AAAA,YACjB,eAAA;AAAA,YACA,SAAA;AAAA,YACA,MAAA;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW,UAAA;AAAA,cACX,SAAA,EAAW,WAAA;AAAA,cACX,IAAA,EAAM,WAAA;AAAA,cACN,OAAA,EAAS,MAAA;AAAA,cACT,eAAA,EAAiB;AAAA,aACnB;AAAA,YACA,UAAA,EAAY,gBAAA;AAAA,YACZ,QAAA,EAAU,YAAA;AAAA,YACV,gBAAA,EAAkB,oBAAA;AAAA,YAClB,eAAA,EAAiB,WAAA;AAAA,YACjB,SAAA,EAAWD,KAAAA;AAAA,cACT,kIAAA;AAAA,cACA,yDAAA;AAAA,cACA,8DAAA;AAAA,cACA,mEAAA;AAAA,cACA;AAAA;AACF;AAAA,SACF,EACF;AAAA;AAAA;AAAA,GACF;AAEJ","file":"chunk-A7TDGQAB.js","sourcesContent":["import React, { type ReactNode, useState } from 'react';\nimport clsx from 'clsx';\n\nimport type { DropdownMenuProps, MenuItemType } from './types';\n\nconst MENU_BASE =\n 'min-w-[160px] max-w-[max-content] py-1 rounded-lg bg-content1 shadow-md border border-border list-none m-0 p-0 outline-none font-roboto text-sm';\n\n/**\n * Renderiza un item de menú (no submenu, no group, no divider).\n */\nfunction MenuItem({\n item,\n selected,\n onClick,\n}: {\n item: MenuItemType;\n selected?: boolean;\n onClick?: (key: string, e: React.MouseEvent) => void;\n}) {\n const key = item.key != null ? String(item.key) : '';\n const { label, disabled, danger } = item;\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) return;\n onClick?.(key, e);\n };\n\n return (\n <li\n role=\"menuitem\"\n aria-disabled={disabled}\n className={clsx(\n 'block px-4 py-2 cursor-pointer transition-colors',\n 'hover:bg-accent active:bg-accent',\n selected && 'bg-primary-50 text-primary-600',\n disabled && 'opacity-50 cursor-not-allowed pointer-events-none text-muted-foreground',\n danger && 'text-destructive',\n danger && !disabled && 'hover:text-danger-600',\n )}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick(e as unknown as React.MouseEvent);\n }\n }}\n >\n {label}\n </li>\n );\n}\n\n/**\n * Renderiza un divider.\n */\nfunction MenuDivider() {\n return <li role=\"separator\" className=\"h-px my-1 bg-border\" />;\n}\n\n/**\n * Renderiza un grupo de items.\n */\nfunction MenuItemGroup({ label, children }: { label?: ReactNode; children: ReactNode }) {\n return (\n <li role=\"group\" className=\"list-none\">\n {label && (\n <div className=\"px-4 py-2 text-muted-foreground text-xs font-semibold border-b border-border\">\n {label}\n </div>\n )}\n <ul className=\"list-none p-0 m-0\">{children}</ul>\n </li>\n );\n}\n\n/**\n * Convierte items a elementos React.\n */\nfunction renderMenuItems(\n items: MenuItemType[],\n selectedKeys: string[],\n onClick?: (key: string, e: React.MouseEvent) => void,\n): ReactNode {\n return items.map((item, idx) => {\n if (!item) return null;\n if (item.type === 'divider') return <MenuDivider key={`divider-${idx}`} />;\n if (item.type === 'group') {\n return (\n <MenuItemGroup key={item.key ?? `group-${idx}`} label={item.label}>\n {item.children && renderMenuItems(item.children, selectedKeys, onClick)}\n </MenuItemGroup>\n );\n }\n const key = String(item.key ?? `item-${idx}`);\n return (\n <MenuItem key={key} item={item} selected={selectedKeys.includes(key)} onClick={onClick} />\n );\n });\n}\n\nexport interface DropdownMenuComponentProps extends DropdownMenuProps {\n /** Render custom (dropdownRender) envuelve este contenido */\n children?: ReactNode;\n}\n\n/**\n * Menú del dropdown con estilos Tailwind.\n * Compatible con API de Ant Design Menu (items, onClick, selectable, etc.)\n */\nexport function DropdownMenu({\n items = [],\n onClick,\n onSelect,\n selectable = false,\n selectedKeys = [],\n defaultSelectedKeys,\n disabled,\n style,\n className,\n children,\n}: DropdownMenuComponentProps) {\n const [internalSelected, setInternalSelected] = useState<string[]>(\n () => defaultSelectedKeys ?? [],\n );\n const selected = selectedKeys.length > 0 ? selectedKeys : internalSelected;\n\n const handleClick = (key: string, e: React.MouseEvent) => {\n if (selectable) {\n const next = selected.includes(key) ? selected.filter((k) => k !== key) : [...selected, key];\n setInternalSelected(next);\n onSelect?.({ key, keyPath: [key], selectedKeys: next });\n }\n onClick?.({ key, keyPath: [key], domEvent: e });\n };\n\n const menuContent =\n items.length > 0 ? (\n <ul role=\"menu\" className={clsx(MENU_BASE, className)} style={style} aria-disabled={disabled}>\n {renderMenuItems(items, selected, handleClick)}\n </ul>\n ) : (\n children\n );\n\n return menuContent;\n}\n","import type { DropdownPlacement, DropdownTrigger } from './types';\n\n/**\n * Mapea el trigger de Ant Design al formato de rc-dropdown.\n * Ant Design: ['click'] | ['hover'] | ['contextMenu'] | combinaciones\n * rc-dropdown: action = 'click' | 'hover' | 'contextMenu' (array)\n */\nexport function mapTriggerToRc(\n trigger?: DropdownTrigger | DropdownTrigger[],\n): ('click' | 'hover' | 'contextMenu')[] {\n if (!trigger) return ['hover'];\n const arr = Array.isArray(trigger) ? trigger : [trigger];\n return arr as ('click' | 'hover' | 'contextMenu')[];\n}\n\nconst PLACEMENT_MAP: Record<\n string,\n 'topLeft' | 'top' | 'topRight' | 'bottomLeft' | 'bottom' | 'bottomRight'\n> = {\n topLeft: 'topLeft',\n top: 'top',\n topRight: 'topRight',\n topStart: 'topLeft',\n topEnd: 'topRight',\n bottomLeft: 'bottomLeft',\n bottom: 'bottom',\n bottomRight: 'bottomRight',\n bottomStart: 'bottomLeft',\n bottomEnd: 'bottomRight',\n};\n\n/**\n * Placement de Ant Design / HeroUI a rc-dropdown.\n */\nexport function mapPlacementToRc(\n placement?: DropdownPlacement,\n): 'topLeft' | 'top' | 'topRight' | 'bottomLeft' | 'bottom' | 'bottomRight' {\n if (placement && placement in PLACEMENT_MAP) return PLACEMENT_MAP[placement];\n return 'bottomLeft';\n}\n","import React from 'react';\nimport clsx from 'clsx';\nimport RcDropdown from 'rc-dropdown';\n\nimport { DropdownMenu } from './DropdownMenu';\nimport type { DropdownProps } from './types';\nimport { mapPlacementToRc, mapTriggerToRc } from './utils';\n\nconst PREFIX = 'rc-dropdown';\n\nconst DEFAULT_OVERLAY_CLASS = 'z-[9999] shadow-lg rounded-lg overflow-visible';\n\n/**\n * Dropdown con API compatible con Ant Design.\n * Usa rc-dropdown internamente y Tailwind para estilos.\n *\n * @see https://ant.design/components/dropdown#api\n *\n * Notas de compatibilidad:\n * - overlayClassName/overlayStyle: soportados (rc-dropdown nativo)\n * - destroyPopupOnHide: mapeado a autoDestroy de rc-trigger\n * - destroyOnHidden: alias de destroyPopupOnHide (Ant Design 5.25+)\n * - dropdownRender/popupRender: soportados (custom overlay)\n * - autoAdjustOverflow: rc-dropdown ya lo hace por defecto en placements\n */\nexport function Dropdown({\n children,\n menu,\n trigger = ['hover'],\n placement = 'bottomLeft',\n arrow = false,\n open,\n onOpenChange,\n disabled,\n destroyPopupOnHide,\n destroyOnHidden,\n getPopupContainer,\n overlayClassName,\n overlayStyle,\n dropdownRender,\n popupRender,\n openClassName,\n}: DropdownProps) {\n const renderProp = dropdownRender ?? popupRender;\n const destroyOnHide = destroyPopupOnHide ?? destroyOnHidden ?? false;\n\n if (!menu && !renderProp) {\n return <>{children}</>;\n }\n\n const menuContent = menu ? (\n <DropdownMenu\n items={menu.items}\n onClick={menu.onClick}\n onSelect={menu.onSelect}\n selectable={menu.selectable}\n selectedKeys={menu.selectedKeys}\n defaultSelectedKeys={menu.defaultSelectedKeys}\n disabled={menu.disabled}\n style={menu.style}\n className={menu.className}\n />\n ) : (\n <div />\n );\n\n const overlayContent: React.ReactElement = renderProp\n ? (renderProp(menuContent) as React.ReactElement)\n : menuContent;\n\n const triggerArr = mapTriggerToRc(trigger);\n const placementRc = mapPlacementToRc(placement);\n\n const childElement = React.isValidElement(children) ? children : <span>{children}</span>;\n\n const effectiveVisible = disabled ? false : open;\n const effectiveOverlay = disabled ? <div /> : overlayContent;\n\n return (\n <RcDropdown\n prefixCls={PREFIX}\n overlay={effectiveOverlay}\n trigger={triggerArr}\n placement={placementRc}\n visible={effectiveVisible}\n onVisibleChange={(visible) => !disabled && onOpenChange?.(visible)}\n overlayClassName={clsx(DEFAULT_OVERLAY_CLASS, overlayClassName)}\n overlayStyle={overlayStyle}\n getPopupContainer={getPopupContainer}\n openClassName={openClassName ?? `${PREFIX}-open`}\n arrow={Boolean(arrow)}\n autoDestroy={destroyOnHide}\n >\n {childElement}\n </RcDropdown>\n );\n}\n","import type { ButtonHTMLAttributes } from 'react';\nimport { faCaretDown } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport clsx from 'clsx';\n\nimport type { DropdownTriggerProps } from './types';\n\nconst TRIGGER_BASE =\n 'rounded-lg px-4 flex items-center justify-between gap-2 font-roboto text-sm font-medium transition-colors outline-none';\n\nconst TRIGGER_SIZES = {\n default: 'h-12 min-h-[48px] min-w-[192px]',\n compact: 'h-9 min-h-9 min-w-0',\n};\n\nconst TRIGGER_STATES = {\n default: 'bg-content1 border border-input text-foreground hover:border-ring hover:bg-content2',\n focus:\n 'focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-offset-2 focus-visible:border-transparent',\n active: 'border-primary-500 bg-primary-50',\n disabled: 'opacity-60 cursor-not-allowed bg-content2 border-border',\n error: 'border-destructive',\n};\n\ntype TriggerButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, keyof DropdownTriggerProps>;\n\n/**\n * Trigger del dropdown con diseño blueprint.\n * - Altura: 48px\n * - Border radius: 8px\n * - Fondo content1, borde gris\n * - Placeholder/value a la izquierda, icono + caret a la derecha\n */\nexport function DropdownTrigger({\n placeholder = 'Seleccionar...',\n value,\n icon,\n error,\n width = 'min',\n size = 'default',\n className,\n disabled,\n ...rest\n}: DropdownTriggerProps) {\n const displayText = value ?? placeholder;\n const isPlaceholder = !value;\n\n return (\n <button\n type=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={rest['aria-expanded']}\n disabled={disabled}\n className={clsx(\n TRIGGER_BASE,\n TRIGGER_SIZES[size],\n TRIGGER_STATES.default,\n TRIGGER_STATES.focus,\n error && TRIGGER_STATES.error,\n disabled && TRIGGER_STATES.disabled,\n width === 'full' && 'w-full',\n width === 'auto' && 'w-auto min-w-0',\n className,\n )}\n {...(rest as TriggerButtonProps)}\n >\n <span\n className={clsx(\n 'flex-1 min-w-0 text-left truncate',\n isPlaceholder && 'text-muted-foreground',\n )}\n >\n {displayText}\n </span>\n <span className=\"flex items-center gap-2 shrink-0\">\n {icon && (\n <span className=\"flex items-center justify-center w-6 h-6 rounded-full bg-muted text-muted-foreground\">\n {icon}\n </span>\n )}\n <FontAwesomeIcon icon={faCaretDown} className=\"h-3 w-3 text-muted-foreground\" />\n </span>\n </button>\n );\n}\n","import { faChevronLeft, faChevronRight } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport clsx from 'clsx';\n\nimport type { PaginationItemType } from './types';\n\ninterface PaginationItemProps {\n type: PaginationItemType;\n page?: number;\n disabled?: boolean;\n active?: boolean;\n isEllipsis?: boolean;\n onClick?: () => void;\n children?: React.ReactNode;\n 'aria-current'?: 'page';\n 'aria-label'?: string;\n}\n\nconst SIZE_CLASSES =\n 'min-w-9 h-9 flex items-center justify-center border border-border rounded-md font-roboto text-sm font-medium transition-colors';\n\nexport function PaginationItem({\n type,\n page,\n disabled,\n active,\n isEllipsis,\n onClick,\n children,\n 'aria-current': ariaCurrent,\n 'aria-label': ariaLabel,\n}: PaginationItemProps) {\n const isDisabled = disabled;\n\n const baseClasses = clsx(\n SIZE_CLASSES,\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2',\n );\n\n if (isEllipsis) {\n return (\n <span\n className={clsx(baseClasses, 'text-muted-foreground cursor-default select-none')}\n aria-hidden\n >\n {children ?? '...'}\n </span>\n );\n }\n\n if (type === 'prev') {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled}\n aria-label={ariaLabel ?? 'Página anterior'}\n className={clsx(\n baseClasses,\n isDisabled\n ? 'text-muted-foreground opacity-60 cursor-not-allowed'\n : 'text-primary-500 hover:bg-accent active:bg-accent',\n )}\n >\n <FontAwesomeIcon icon={faChevronLeft} className=\"h-4 w-4\" />\n </button>\n );\n }\n\n if (type === 'next') {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled}\n aria-label={ariaLabel ?? 'Página siguiente'}\n className={clsx(\n baseClasses,\n isDisabled\n ? 'text-muted-foreground opacity-60 cursor-not-allowed'\n : 'text-primary-500 hover:bg-accent active:bg-accent',\n )}\n >\n <FontAwesomeIcon icon={faChevronRight} className=\"h-4 w-4\" />\n </button>\n );\n }\n\n if (type === 'jump-prev' || type === 'jump-next') {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled}\n className={clsx(\n baseClasses,\n isDisabled\n ? 'text-muted-foreground opacity-60 cursor-not-allowed'\n : 'text-foreground hover:bg-accent active:bg-accent',\n )}\n >\n {children}\n </button>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled}\n aria-current={ariaCurrent}\n aria-label={ariaLabel ?? (page ? `Página ${page}` : undefined)}\n className={clsx(\n baseClasses,\n active\n ? 'bg-primary-500 text-primary-foreground cursor-default'\n : isDisabled\n ? 'text-muted-foreground opacity-60 cursor-not-allowed'\n : 'text-foreground hover:bg-accent active:bg-accent',\n )}\n >\n {children ?? page}\n </button>\n );\n}\n","import { useState } from 'react';\nimport clsx from 'clsx';\n\nimport { Dropdown, DropdownTrigger } from '../Dropdown';\n\ninterface PaginationSizeSelectProps {\n pageSize: number;\n pageSizeOptions: number[];\n disabled?: boolean;\n onChange: (size: number) => void;\n /** Ocultar en viewports <= 360px cuando responsive=true */\n responsive?: boolean;\n}\n\nexport function PaginationSizeSelect({\n pageSize,\n pageSizeOptions,\n disabled,\n onChange,\n responsive = true,\n}: PaginationSizeSelectProps) {\n const [open, setOpen] = useState(false);\n const options = pageSizeOptions.length > 0 ? pageSizeOptions : [10, 15, 20];\n\n const menuItems = options.map((opt) => ({\n key: String(opt),\n label: `${opt}/página`,\n }));\n\n return (\n <div\n className={clsx(\n 'flex items-center gap-2 font-roboto text-sm font-medium text-foreground',\n responsive && 'max-[360px]:hidden',\n )}\n >\n <span className=\"text-foreground\">Mostrar</span>\n <Dropdown\n open={open}\n onOpenChange={setOpen}\n placement=\"bottom\"\n trigger={['click']}\n disabled={disabled}\n menu={{\n items: menuItems,\n selectedKeys: [String(pageSize)],\n onClick: ({ key }) => {\n onChange(Number(key));\n setOpen(false);\n },\n }}\n >\n <DropdownTrigger\n placeholder=\"Mostrar\"\n value={`${pageSize}/página`}\n width=\"auto\"\n size=\"compact\"\n disabled={disabled}\n />\n </Dropdown>\n </div>\n );\n}\n","/**\n * Calcula el rango [from, to] de items mostrados en la página actual\n */\nexport function getItemRange(current: number, pageSize: number, total: number): [number, number] {\n const from = total === 0 ? 0 : (current - 1) * pageSize + 1;\n const to = Math.min(current * pageSize, total);\n return [from, to];\n}\n","import React, { useCallback, useMemo, useState } from 'react';\nimport clsx from 'clsx';\nimport RCPagination from 'rc-pagination';\n\nimport { PaginationItem } from './PaginationItem';\nimport { PaginationSizeSelect } from './PaginationSizeSelect';\nimport type { PaginationItemType, PaginationProps } from './types';\nimport { getItemRange } from './utils';\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 15, 20];\nconst DEFAULT_PAGE_SIZE = 10;\n\nexport const Pagination: React.FC<PaginationProps> = ({\n current: controlledCurrent,\n defaultCurrent = 1,\n total = 0,\n pageSize: controlledPageSize,\n defaultPageSize = DEFAULT_PAGE_SIZE,\n disabled = false,\n hideOnSinglePage = false,\n showLessItems = false,\n showQuickJumper = false,\n showSizeChanger = false,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n showTitle = true,\n showTotal,\n simple,\n size = 'default',\n responsive = true,\n align = 'start',\n itemRender,\n onChange,\n onShowSizeChange,\n className,\n style,\n}) => {\n const [internalCurrent, setInternalCurrent] = useState(defaultCurrent);\n const [internalPageSize, setInternalPageSize] = useState(\n defaultPageSize ?? pageSizeOptions[0] ?? DEFAULT_PAGE_SIZE,\n );\n\n const isControlled = controlledCurrent !== undefined;\n const isPageSizeControlled = controlledPageSize !== undefined;\n\n const current = isControlled ? controlledCurrent! : internalCurrent;\n const pageSize = isPageSizeControlled ? controlledPageSize! : internalPageSize;\n\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\n\n const handleChange = useCallback(\n (page: number, size: number) => {\n if (!isControlled) setInternalCurrent(page);\n if (!isPageSizeControlled && size !== pageSize) setInternalPageSize(size);\n onChange?.(page, size);\n },\n [isControlled, isPageSizeControlled, pageSize, onChange],\n );\n\n const handleShowSizeChange = useCallback(\n (page: number, size: number) => {\n if (!isPageSizeControlled) setInternalPageSize(size);\n onShowSizeChange?.(page, size);\n onChange?.(page, size);\n },\n [isPageSizeControlled, onShowSizeChange, onChange],\n );\n\n const handleSizeSelectChange = useCallback(\n (newSize: number) => {\n const newCurrent = Math.min(current, Math.ceil(total / newSize) || 1);\n handleShowSizeChange(newCurrent, newSize);\n if (!isControlled) setInternalCurrent(newCurrent);\n },\n [current, total, handleShowSizeChange, isControlled],\n );\n\n const customItemRender = useCallback(\n (page: number, type: PaginationItemType, element: React.ReactNode) => {\n if (itemRender) {\n return itemRender(page, type, element);\n }\n const isEllipsis = false;\n const isPrev = type === 'prev';\n const isNext = type === 'next';\n const isPage = type === 'page';\n const isDisabled = (isPrev && current <= 1) || (isNext && current >= totalPages);\n const isActive = isPage && page === current;\n const originalOnClick =\n React.isValidElement(element) && element.props\n ? (element.props as { onClick?: () => void }).onClick\n : undefined;\n\n return (\n <PaginationItem\n type={type}\n page={page}\n disabled={isDisabled}\n active={isActive}\n isEllipsis={isEllipsis}\n onClick={originalOnClick}\n aria-current={isActive ? 'page' : undefined}\n >\n {type === 'page' ? page : element}\n </PaginationItem>\n );\n },\n [itemRender, current, totalPages],\n );\n\n const range = useMemo(() => getItemRange(current, pageSize, total), [current, pageSize, total]);\n\n const sizeOptions = useMemo(\n () => (pageSizeOptions.length > 0 ? pageSizeOptions : DEFAULT_PAGE_SIZE_OPTIONS),\n [pageSizeOptions],\n );\n\n if (hideOnSinglePage && totalPages <= 1) {\n return null;\n }\n\n const alignClass =\n align === 'center' ? 'justify-center' : align === 'end' ? 'justify-end' : 'justify-between';\n\n const sizeClass =\n size === 'small'\n ? 'h-8 [&_.rc-pagination-item]:min-w-[32px] [&_.rc-pagination-item]:h-8'\n : size === 'large'\n ? 'h-14 [&_.rc-pagination-item]:min-w-[56px] [&_.rc-pagination-item]:h-14'\n : 'h-12';\n\n const hasLeftSection = showTotal || showSizeChanger;\n\n return (\n <div\n className={clsx(\n 'flex items-center w-full min-h-[48px] px-4 py-0 rounded-lg bg-content1 font-roboto',\n sizeClass,\n hasLeftSection ? 'justify-between gap-2' : alignClass,\n className,\n )}\n style={style}\n >\n {hasLeftSection && (\n <div className=\"flex items-center gap-2\">\n {showSizeChanger && (\n <PaginationSizeSelect\n pageSize={pageSize}\n pageSizeOptions={sizeOptions}\n disabled={disabled}\n onChange={handleSizeSelectChange}\n responsive={responsive}\n />\n )}\n {showTotal && (\n <div className=\"text-sm font-medium text-foreground max-[360px]:hidden\">\n {showTotal(total, range)}\n </div>\n )}\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n <RCPagination\n current={current}\n total={total}\n pageSize={pageSize}\n defaultCurrent={defaultCurrent}\n defaultPageSize={defaultPageSize}\n disabled={disabled}\n hideOnSinglePage={false}\n showLessItems={showLessItems}\n showSizeChanger={false}\n showQuickJumper={showQuickJumper}\n showTitle={showTitle}\n simple={simple}\n locale={{\n prev_page: 'Anterior',\n next_page: 'Siguiente',\n page: 'Página',\n jump_to: 'Ir a',\n jump_to_confirm: 'Confirmar',\n }}\n itemRender={customItemRender}\n onChange={handleChange}\n onShowSizeChange={handleShowSizeChange}\n pageSizeOptions={sizeOptions}\n className={clsx(\n 'rc-pagination-custom flex items-center gap-2 [&_ul]:flex [&_ul]:items-center [&_ul]:gap-2 [&_ul]:list-none [&_ul]:m-0 [&_ul]:p-0',\n '[&_.rc-pagination-prev]:m-0 [&_.rc-pagination-next]:m-0',\n '[&_.rc-pagination-item]:m-0 [&_.rc-pagination-item]:border-0',\n '[&_.rc-pagination-jump-prev]:m-0 [&_.rc-pagination-jump-next]:m-0',\n '[&_li]:inline-flex',\n )}\n />\n </div>\n </div>\n );\n};\n"]}
|