@bleakedev/bleake-components 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,19 +1,38 @@
1
1
  'use strict';
2
2
 
3
- var lucideReact = require('lucide-react');
3
+ var framerMotion = require('framer-motion');
4
+ var jsxRuntime = require('react/jsx-runtime');
4
5
  var bleakeCore = require('@bleakedev/bleake-core');
5
6
  var radixUi = require('radix-ui');
6
7
  var classVarianceAuthority = require('class-variance-authority');
7
- var jsxRuntime = require('react/jsx-runtime');
8
+ var lucideReact = require('lucide-react');
9
+ var reactRouter = require('react-router');
8
10
  var react$1 = require('react');
9
11
  var reactDayPicker = require('react-day-picker');
10
12
  var react = require('@base-ui/react');
11
13
  var cmdk = require('cmdk');
12
14
  var inputOtp = require('input-otp');
13
- var framerMotion = require('framer-motion');
14
15
  var sonner = require('sonner');
15
16
 
16
- // src/primitives/actions-menu/index.tsx
17
+ // src/patterns/animations/slide-up/index.tsx
18
+ var variants = {
19
+ hidden: { opacity: 0, y: 24 },
20
+ visible: { opacity: 1, y: 0 }
21
+ };
22
+ var transition = { duration: 0.35, ease: "easeOut" };
23
+ var SlideUp = ({ children, className }) => {
24
+ return /* @__PURE__ */ jsxRuntime.jsx(
25
+ framerMotion.motion.div,
26
+ {
27
+ variants,
28
+ initial: "hidden",
29
+ animate: "visible",
30
+ transition,
31
+ className,
32
+ children
33
+ }
34
+ );
35
+ };
17
36
  var buttonVariants = classVarianceAuthority.cva(
18
37
  "group/button inline-flex shrink-0 items-center justify-center rounded-xl border border-transparent bg-clip-padding text-sm/relaxed font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 active:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 cursor-pointer gap-2 transition-all duration-300 rounded-lg",
19
38
  {
@@ -59,6 +78,659 @@ var Button = ({
59
78
  }
60
79
  );
61
80
  };
81
+ var Empty = ({
82
+ title = "Sin resultados",
83
+ description = "No hay informaci\xF3n para mostrar.",
84
+ icon: Icon,
85
+ action,
86
+ className = ""
87
+ }) => {
88
+ return /* @__PURE__ */ jsxRuntime.jsxs(
89
+ "div",
90
+ {
91
+ className: bleakeCore.merge(
92
+ "flex h-full w-full flex-col items-center justify-center gap-3 py-16 text-center",
93
+ className
94
+ ),
95
+ children: [
96
+ Icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-14 w-14 items-center justify-center rounded-full border border-gray-500/15 bg-gray-100", children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-8 w-8 text-gray-500" }) }),
97
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
98
+ title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-gray-900", children: title }),
99
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-gray-500", children: description })
100
+ ] }),
101
+ action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2", children: /* @__PURE__ */ jsxRuntime.jsxs(
102
+ Button,
103
+ {
104
+ size: "sm",
105
+ onClick: action.onClick,
106
+ children: [
107
+ action.icon && /* @__PURE__ */ jsxRuntime.jsx(action.icon, { className: "mr-1 h-4 w-4" }),
108
+ action.label
109
+ ]
110
+ }
111
+ ) })
112
+ ]
113
+ }
114
+ );
115
+ };
116
+ function ErrorFallback({ error, resetError }) {
117
+ const errorMessage = error instanceof Error ? error.message : String(error);
118
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-50 w-full flex-col items-center justify-center gap-4 text-center", children: [
119
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-14 w-14 items-center justify-center rounded-full border border-red-500/15 bg-red-50", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "h-8 w-8 text-red-500" }) }),
120
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
121
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-gray-900", children: "Algo sali\xF3 mal" }),
122
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-gray-500", children: "Ocurri\xF3 un error inesperado. Intent\xE1 de nuevo." }),
123
+ undefined.DEV && errorMessage && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 max-w-md text-xs text-red-400", children: errorMessage })
124
+ ] }),
125
+ /* @__PURE__ */ jsxRuntime.jsx(
126
+ Button,
127
+ {
128
+ size: "sm",
129
+ variant: "outline",
130
+ onClick: resetError,
131
+ children: "Reintentar"
132
+ }
133
+ )
134
+ ] });
135
+ }
136
+ var Label = ({
137
+ className,
138
+ ...props
139
+ }) => {
140
+ return /* @__PURE__ */ jsxRuntime.jsx(
141
+ radixUi.Label.Root,
142
+ {
143
+ "data-slot": "label",
144
+ className: bleakeCore.merge(
145
+ "flex items-center gap-2 text-sm/relaxed leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
146
+ className
147
+ ),
148
+ ...props
149
+ }
150
+ );
151
+ };
152
+ var SelectScrollDownButton = ({
153
+ className,
154
+ ...props
155
+ }) => {
156
+ return /* @__PURE__ */ jsxRuntime.jsx(
157
+ radixUi.Select.ScrollDownButton,
158
+ {
159
+ "data-slot": "select-scroll-down-button",
160
+ className: bleakeCore.merge(
161
+ "z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5",
162
+ className
163
+ ),
164
+ ...props,
165
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, {})
166
+ }
167
+ );
168
+ };
169
+ var SelectScrollUpButton = ({
170
+ className,
171
+ ...props
172
+ }) => {
173
+ return /* @__PURE__ */ jsxRuntime.jsx(
174
+ radixUi.Select.ScrollUpButton,
175
+ {
176
+ "data-slot": "select-scroll-up-button",
177
+ className: bleakeCore.merge(
178
+ "z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5",
179
+ className
180
+ ),
181
+ ...props,
182
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, {})
183
+ }
184
+ );
185
+ };
186
+ var SelectContent = ({
187
+ className,
188
+ children,
189
+ position = "item-aligned",
190
+ align = "center",
191
+ ...props
192
+ }) => {
193
+ return /* @__PURE__ */ jsxRuntime.jsx(radixUi.Select.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
194
+ radixUi.Select.Content,
195
+ {
196
+ "data-slot": "select-content",
197
+ "data-align-trigger": position === "item-aligned",
198
+ className: bleakeCore.merge(
199
+ "relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
200
+ position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
201
+ className
202
+ ),
203
+ position,
204
+ align,
205
+ ...props,
206
+ children: [
207
+ /* @__PURE__ */ jsxRuntime.jsx(SelectScrollUpButton, {}),
208
+ /* @__PURE__ */ jsxRuntime.jsx(
209
+ radixUi.Select.Viewport,
210
+ {
211
+ "data-position": position,
212
+ className: bleakeCore.merge(
213
+ "data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)"
214
+ ),
215
+ children
216
+ }
217
+ ),
218
+ /* @__PURE__ */ jsxRuntime.jsx(SelectScrollDownButton, {})
219
+ ]
220
+ }
221
+ ) });
222
+ };
223
+ var SelectGroup = ({
224
+ className,
225
+ ...props
226
+ }) => {
227
+ return /* @__PURE__ */ jsxRuntime.jsx(
228
+ radixUi.Select.Group,
229
+ {
230
+ "data-slot": "select-group",
231
+ className: bleakeCore.merge("scroll-my-1 p-1", className),
232
+ ...props
233
+ }
234
+ );
235
+ };
236
+ var SelectItem = ({
237
+ className,
238
+ children,
239
+ ...props
240
+ }) => {
241
+ return /* @__PURE__ */ jsxRuntime.jsxs(
242
+ radixUi.Select.Item,
243
+ {
244
+ "data-slot": "select-item",
245
+ className: bleakeCore.merge(
246
+ "relative flex min-h-7 w-full cursor-default items-center gap-2 rounded-md px-2 py-1 text-xs/relaxed outline-hidden select-none border border-transparent focus:bg-orange-50 focus:border focus:border-orange-200/50 focus:text-orange-500! focus:cursor-pointer not-data-[variant=destructive]:focus:**:text-orange-500! data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
247
+ className
248
+ ),
249
+ ...props,
250
+ children: [
251
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pointer-events-none absolute right-2 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(radixUi.Select.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckIcon, { className: "pointer-events-none" }) }) }),
252
+ /* @__PURE__ */ jsxRuntime.jsx(radixUi.Select.ItemText, { children })
253
+ ]
254
+ }
255
+ );
256
+ };
257
+ var SelectLabel = ({
258
+ className,
259
+ ...props
260
+ }) => {
261
+ return /* @__PURE__ */ jsxRuntime.jsx(
262
+ radixUi.Select.Label,
263
+ {
264
+ "data-slot": "select-label",
265
+ className: bleakeCore.merge("px-2 py-1.5 text-xs text-muted-foreground", className),
266
+ ...props
267
+ }
268
+ );
269
+ };
270
+ var SelectSeparator = ({
271
+ className,
272
+ ...props
273
+ }) => {
274
+ return /* @__PURE__ */ jsxRuntime.jsx(
275
+ radixUi.Select.Separator,
276
+ {
277
+ "data-slot": "select-separator",
278
+ className: bleakeCore.merge("pointer-events-none -mx-1 my-1 h-px bg-border/50", className),
279
+ ...props
280
+ }
281
+ );
282
+ };
283
+ var SelectTrigger = ({
284
+ className,
285
+ size = "default",
286
+ children,
287
+ ...props
288
+ }) => {
289
+ return /* @__PURE__ */ jsxRuntime.jsxs(
290
+ radixUi.Select.Trigger,
291
+ {
292
+ "data-slot": "select-trigger",
293
+ "data-size": size,
294
+ className: bleakeCore.merge(
295
+ "flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-input/20 px-2 py-1.5 text-xs/relaxed whitespace-nowrap transition-colors outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-7 data-[size=sm]:h-6 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5",
296
+ className
297
+ ),
298
+ ...props,
299
+ children: [
300
+ children,
301
+ /* @__PURE__ */ jsxRuntime.jsx(radixUi.Select.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "pointer-events-none size-3.5 text-muted-foreground" }) })
302
+ ]
303
+ }
304
+ );
305
+ };
306
+ var SelectValue = (props) => {
307
+ return /* @__PURE__ */ jsxRuntime.jsx(
308
+ radixUi.Select.Value,
309
+ {
310
+ "data-slot": "select-value",
311
+ ...props
312
+ }
313
+ );
314
+ };
315
+ var Select = (props) => {
316
+ return /* @__PURE__ */ jsxRuntime.jsx(
317
+ radixUi.Select.Root,
318
+ {
319
+ "data-slot": "select",
320
+ ...props
321
+ }
322
+ );
323
+ };
324
+ var FilterSelect = ({
325
+ label,
326
+ options,
327
+ value,
328
+ onChange,
329
+ placeholder = "Seleccionar...",
330
+ disabled = false,
331
+ className,
332
+ labelClassName,
333
+ inputClassName
334
+ }) => {
335
+ const isActive = value && value !== "all" && value !== "";
336
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: bleakeCore.merge("flex flex-col gap-2", className), children: [
337
+ label && /* @__PURE__ */ jsxRuntime.jsx(
338
+ Label,
339
+ {
340
+ className: labelClassName,
341
+ htmlFor: label,
342
+ children: label
343
+ }
344
+ ),
345
+ /* @__PURE__ */ jsxRuntime.jsxs(
346
+ Select,
347
+ {
348
+ value: value ?? "",
349
+ onValueChange: onChange,
350
+ disabled,
351
+ children: [
352
+ /* @__PURE__ */ jsxRuntime.jsx(
353
+ SelectTrigger,
354
+ {
355
+ id: label,
356
+ className: bleakeCore.merge(
357
+ "min-w-40 bg-white! text-gray-900! cursor-pointer hover:border-gray-500",
358
+ isActive && "bg-orange-50! border-orange-200/50 **:text-orange-500! hover:border-orange-500!",
359
+ disabled && "cursor-not-allowed opacity-50",
360
+ inputClassName
361
+ ),
362
+ children: /* @__PURE__ */ jsxRuntime.jsx(SelectValue, { placeholder })
363
+ }
364
+ ),
365
+ /* @__PURE__ */ jsxRuntime.jsx(SelectContent, { position: "popper", children: /* @__PURE__ */ jsxRuntime.jsx(SelectGroup, { children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
366
+ SelectItem,
367
+ {
368
+ value: option.value,
369
+ children: option.label
370
+ },
371
+ option.value
372
+ )) }) })
373
+ ]
374
+ }
375
+ )
376
+ ] });
377
+ };
378
+ var SectionTitle = ({
379
+ icon: Icon,
380
+ title,
381
+ description,
382
+ action,
383
+ onEdit,
384
+ editLabel = "Editar"
385
+ }) => {
386
+ if (description !== void 0) {
387
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-row items-center justify-between gap-2 px-4", children: [
388
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-row items-center gap-4", children: [
389
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "text-orange-500 shrink-0 h-8 w-8" }),
390
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
391
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-base text-gray-900 font-medium", children: title }),
392
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-gray-500 font-medium", children: description })
393
+ ] })
394
+ ] }),
395
+ action
396
+ ] });
397
+ }
398
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-row items-center justify-between mb-3", children: [
399
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-row items-center gap-2", children: [
400
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-4 text-orange-500" }),
401
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-medium text-gray-900", children: title })
402
+ ] }),
403
+ onEdit && /* @__PURE__ */ jsxRuntime.jsx(
404
+ Button,
405
+ {
406
+ type: "button",
407
+ variant: "ghost",
408
+ size: "sm",
409
+ className: "size-7 p-0 text-orange-500 hover:text-orange-600 hover:bg-orange-50",
410
+ onClick: onEdit,
411
+ title: editLabel,
412
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PenLine, { className: "size-3.5" })
413
+ }
414
+ ),
415
+ action
416
+ ] });
417
+ };
418
+ var Breadcrumb = ({
419
+ className,
420
+ ...props
421
+ }) => {
422
+ return /* @__PURE__ */ jsxRuntime.jsx(
423
+ "nav",
424
+ {
425
+ "aria-label": "breadcrumb",
426
+ "data-slot": "breadcrumb",
427
+ className: bleakeCore.merge(className),
428
+ ...props
429
+ }
430
+ );
431
+ };
432
+ var BreadcrumbItem = ({
433
+ className,
434
+ ...props
435
+ }) => {
436
+ return /* @__PURE__ */ jsxRuntime.jsx(
437
+ "li",
438
+ {
439
+ "data-slot": "breadcrumb-item",
440
+ className: bleakeCore.merge("inline-flex items-center gap-1", className),
441
+ ...props
442
+ }
443
+ );
444
+ };
445
+ var BreadcrumbList = ({
446
+ className,
447
+ ...props
448
+ }) => {
449
+ return /* @__PURE__ */ jsxRuntime.jsx(
450
+ "ol",
451
+ {
452
+ "data-slot": "breadcrumb-list",
453
+ className: bleakeCore.merge(
454
+ "flex flex-wrap items-center gap-1.5 text-xs/relaxed wrap-break-word text-muted-foreground",
455
+ className
456
+ ),
457
+ ...props
458
+ }
459
+ );
460
+ };
461
+ var BreadcrumbPage = ({
462
+ className,
463
+ ...props
464
+ }) => {
465
+ return /* @__PURE__ */ jsxRuntime.jsx(
466
+ "span",
467
+ {
468
+ "data-slot": "breadcrumb-page",
469
+ "aria-disabled": "true",
470
+ "aria-current": "page",
471
+ className: bleakeCore.merge("font-normal text-foreground", className),
472
+ ...props
473
+ }
474
+ );
475
+ };
476
+ var BreadcrumbSeparator = ({
477
+ children,
478
+ className,
479
+ ...props
480
+ }) => {
481
+ return /* @__PURE__ */ jsxRuntime.jsx(
482
+ "li",
483
+ {
484
+ "data-slot": "breadcrumb-separator",
485
+ role: "presentation",
486
+ "aria-hidden": "true",
487
+ className: bleakeCore.merge("[&>svg]:size-3.5", className),
488
+ ...props,
489
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, {})
490
+ }
491
+ );
492
+ };
493
+ var BreadcrumbList2 = ({ items }) => {
494
+ return /* @__PURE__ */ jsxRuntime.jsx(Breadcrumb, { children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbList, { children: items.map((item, index) => {
495
+ const isLast = index === items.length - 1;
496
+ return /* @__PURE__ */ jsxRuntime.jsxs(react$1.Fragment, { children: [
497
+ /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbItem, { children: item.href ? /* @__PURE__ */ jsxRuntime.jsx(reactRouter.Link, { to: item.href, children: item.label }) : /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbPage, { children: item.label }) }),
498
+ !isLast && /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbSeparator, {})
499
+ ] }, `${item.label}-${index}`);
500
+ }) }) });
501
+ };
502
+ var AppBreadcrumbs = ({ backRoute, config }) => {
503
+ const navigate = reactRouter.useNavigate();
504
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-row items-center gap-3", children: [
505
+ /* @__PURE__ */ jsxRuntime.jsx(
506
+ Button,
507
+ {
508
+ type: "button",
509
+ variant: "link",
510
+ className: "px-0 w-fit h-fit",
511
+ onClick: () => navigate(backRoute),
512
+ "aria-label": "Volver",
513
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowLeftCircle, {})
514
+ }
515
+ ),
516
+ /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbList2, { items: config })
517
+ ] });
518
+ };
519
+ var Tabs = ({
520
+ className,
521
+ orientation = "horizontal",
522
+ ...props
523
+ }) => {
524
+ return /* @__PURE__ */ jsxRuntime.jsx(
525
+ radixUi.Tabs.Root,
526
+ {
527
+ "data-slot": "tabs",
528
+ "data-orientation": orientation,
529
+ className: bleakeCore.merge("group/tabs flex gap-3 data-horizontal:flex-col", className),
530
+ ...props
531
+ }
532
+ );
533
+ };
534
+ var TabsContent = ({
535
+ className,
536
+ ...props
537
+ }) => {
538
+ return /* @__PURE__ */ jsxRuntime.jsx(
539
+ radixUi.Tabs.Content,
540
+ {
541
+ "data-slot": "tabs-content",
542
+ className: bleakeCore.merge("flex-1 text-xs/relaxed outline-none", className),
543
+ ...props
544
+ }
545
+ );
546
+ };
547
+ var VARIANT_CLASSES = {
548
+ default: "bg-white border border-gray-200 rounded-xl p-1 gap-0.5 w-fit",
549
+ line: "gap-1 bg-transparent border-b border-gray-200 w-full rounded-none"
550
+ };
551
+ var TabsList = ({
552
+ className,
553
+ variant = "default",
554
+ size = "default",
555
+ ...props
556
+ }) => {
557
+ const variantClass = VARIANT_CLASSES[variant ?? "default"] ?? VARIANT_CLASSES.default;
558
+ return /* @__PURE__ */ jsxRuntime.jsx(
559
+ radixUi.Tabs.List,
560
+ {
561
+ "data-slot": "tabs-list",
562
+ "data-variant": variant,
563
+ "data-size": size,
564
+ className: bleakeCore.merge(
565
+ "group/tabs-list flex items-center overflow-x-auto max-w-full",
566
+ variantClass,
567
+ className
568
+ ),
569
+ ...props
570
+ }
571
+ );
572
+ };
573
+ var TabsTrigger = ({
574
+ className,
575
+ ...props
576
+ }) => {
577
+ return /* @__PURE__ */ jsxRuntime.jsx(
578
+ radixUi.Tabs.Trigger,
579
+ {
580
+ "data-slot": "tabs-trigger",
581
+ className: bleakeCore.merge(
582
+ // Base
583
+ "relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap transition-all cursor-pointer",
584
+ "disabled:pointer-events-none disabled:opacity-50",
585
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0",
586
+ // === SIZE — inherited from parent TabsList data-size ===
587
+ // default size
588
+ "group-data-[size=default]/tabs-list:px-4 group-data-[size=default]/tabs-list:py-2 group-data-[size=default]/tabs-list:text-sm",
589
+ "group-data-[size=default]/tabs-list:[&_svg:not([class*='size-'])]:size-4",
590
+ // sm size
591
+ "group-data-[size=sm]/tabs-list:px-3 group-data-[size=sm]/tabs-list:py-1.5 group-data-[size=sm]/tabs-list:text-xs",
592
+ "group-data-[size=sm]/tabs-list:[&_svg:not([class*='size-'])]:size-3.5",
593
+ // xs size
594
+ "group-data-[size=xs]/tabs-list:px-2 group-data-[size=xs]/tabs-list:py-1 group-data-[size=xs]/tabs-list:text-[0.65rem]",
595
+ "group-data-[size=xs]/tabs-list:[&_svg:not([class*='size-'])]:size-3",
596
+ // === VARIANT: default (pill) — inherited from parent ===
597
+ "group-data-[variant=default]/tabs-list:rounded-lg group-data-[variant=default]/tabs-list:text-gray-500",
598
+ "group-data-[variant=default]/tabs-list:hover:text-gray-700",
599
+ "group-data-[variant=default]/tabs-list:data-[state=active]:bg-orange-50",
600
+ "group-data-[variant=default]/tabs-list:data-[state=active]:text-orange-600",
601
+ "group-data-[variant=default]/tabs-list:data-[state=active]:ring-1",
602
+ "group-data-[variant=default]/tabs-list:data-[state=active]:ring-orange-200",
603
+ // === VARIANT: line (underline) — inherited from parent ===
604
+ "group-data-[variant=line]/tabs-list:rounded-none group-data-[variant=line]/tabs-list:text-gray-400",
605
+ "group-data-[variant=line]/tabs-list:border-b-2 group-data-[variant=line]/tabs-list:border-transparent",
606
+ "group-data-[variant=line]/tabs-list:hover:text-orange-500",
607
+ "group-data-[variant=line]/tabs-list:data-[state=active]:border-orange-500",
608
+ "group-data-[variant=line]/tabs-list:data-[state=active]:text-orange-600",
609
+ "group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent",
610
+ className
611
+ ),
612
+ ...props
613
+ }
614
+ );
615
+ };
616
+ var AppTabs = ({
617
+ config,
618
+ data,
619
+ defaultValue,
620
+ className,
621
+ tabListClassname,
622
+ variant = "default",
623
+ size = "default"
624
+ }) => {
625
+ return /* @__PURE__ */ jsxRuntime.jsxs(
626
+ Tabs,
627
+ {
628
+ defaultValue: defaultValue ?? config[0]?.value,
629
+ className,
630
+ children: [
631
+ /* @__PURE__ */ jsxRuntime.jsx(
632
+ TabsList,
633
+ {
634
+ className: bleakeCore.merge("", tabListClassname),
635
+ variant,
636
+ size,
637
+ children: config.map((tab) => {
638
+ const Icon = tab.icon;
639
+ return /* @__PURE__ */ jsxRuntime.jsxs(
640
+ TabsTrigger,
641
+ {
642
+ value: tab.value,
643
+ className: bleakeCore.merge(
644
+ "",
645
+ variant === "line" && "text-sm text-gray-400 data-[state=active]:text-orange-600 data-[state=active]:shadow-none pb-5 after:bg-orange-600!"
646
+ ),
647
+ children: [
648
+ Icon && /* @__PURE__ */ jsxRuntime.jsx(Icon, {}),
649
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: tab.label })
650
+ ]
651
+ },
652
+ tab.value
653
+ );
654
+ })
655
+ }
656
+ ),
657
+ config.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
658
+ TabsContent,
659
+ {
660
+ value: tab.value,
661
+ children: tab.content(data)
662
+ },
663
+ tab.value
664
+ ))
665
+ ]
666
+ }
667
+ );
668
+ };
669
+ var PAGE_SIZE_OPTIONS = [10, 20, 50];
670
+ var ARROW_CLASSES = "inline-flex items-center justify-center size-8 rounded-md border border-gray-200 bg-white shadow-xs cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed hover:bg-orange-50 hover:border-orange-400 hover:text-orange-600 active:bg-orange-100 transition-colors";
671
+ var TablePagination = ({
672
+ page,
673
+ totalPages,
674
+ onPageChange,
675
+ pageSize,
676
+ onPageSizeChange
677
+ }) => {
678
+ const showPageSizeSelector = pageSize !== void 0 && onPageSizeChange !== void 0;
679
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between pt-2", children: [
680
+ showPageSizeSelector ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
681
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "Mostrar" }),
682
+ /* @__PURE__ */ jsxRuntime.jsxs(
683
+ Select,
684
+ {
685
+ value: String(pageSize),
686
+ onValueChange: (value) => onPageSizeChange(Number(value)),
687
+ children: [
688
+ /* @__PURE__ */ jsxRuntime.jsx(SelectTrigger, { className: "h-8 w-17.5 text-xs", children: /* @__PURE__ */ jsxRuntime.jsx(SelectValue, {}) }),
689
+ /* @__PURE__ */ jsxRuntime.jsx(SelectContent, { children: PAGE_SIZE_OPTIONS.map((size) => /* @__PURE__ */ jsxRuntime.jsx(
690
+ SelectItem,
691
+ {
692
+ value: String(size),
693
+ children: size
694
+ },
695
+ size
696
+ )) })
697
+ ]
698
+ }
699
+ ),
700
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "por p\xE1gina" })
701
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", {}),
702
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
703
+ /* @__PURE__ */ jsxRuntime.jsx(
704
+ "button",
705
+ {
706
+ type: "button",
707
+ onClick: () => onPageChange(page - 1),
708
+ disabled: page <= 1,
709
+ className: ARROW_CLASSES,
710
+ "aria-label": "P\xE1gina anterior",
711
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "size-4" })
712
+ }
713
+ ),
714
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground px-1 select-none", children: [
715
+ "P\xE1gina ",
716
+ page,
717
+ " de ",
718
+ totalPages
719
+ ] }),
720
+ /* @__PURE__ */ jsxRuntime.jsx(
721
+ "button",
722
+ {
723
+ type: "button",
724
+ onClick: () => onPageChange(page + 1),
725
+ disabled: page >= totalPages,
726
+ className: ARROW_CLASSES,
727
+ "aria-label": "P\xE1gina siguiente",
728
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-4" })
729
+ }
730
+ )
731
+ ] })
732
+ ] });
733
+ };
62
734
  var DropdownMenu = ({
63
735
  ...props
64
736
  }) => {
@@ -991,20 +1663,6 @@ var Badge = ({
991
1663
  }
992
1664
  );
993
1665
  };
994
- var Breadcrumb = ({
995
- className,
996
- ...props
997
- }) => {
998
- return /* @__PURE__ */ jsxRuntime.jsx(
999
- "nav",
1000
- {
1001
- "aria-label": "breadcrumb",
1002
- "data-slot": "breadcrumb",
1003
- className: bleakeCore.merge(className),
1004
- ...props
1005
- }
1006
- );
1007
- };
1008
1666
  var buttonGroupVariants = classVarianceAuthority.cva(
1009
1667
  "flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
1010
1668
  {
@@ -1536,22 +2194,6 @@ var Item = ({
1536
2194
  }
1537
2195
  );
1538
2196
  };
1539
- var Label = ({
1540
- className,
1541
- ...props
1542
- }) => {
1543
- return /* @__PURE__ */ jsxRuntime.jsx(
1544
- radixUi.Label.Root,
1545
- {
1546
- "data-slot": "label",
1547
- className: bleakeCore.merge(
1548
- "flex items-center gap-2 text-sm/relaxed leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
1549
- className
1550
- ),
1551
- ...props
1552
- }
1553
- );
1554
- };
1555
2197
  var Menubar = ({
1556
2198
  className,
1557
2199
  ...props
@@ -1733,178 +2375,6 @@ var SectionCard = ({
1733
2375
  ) })
1734
2376
  ] });
1735
2377
  };
1736
- var SelectScrollDownButton = ({
1737
- className,
1738
- ...props
1739
- }) => {
1740
- return /* @__PURE__ */ jsxRuntime.jsx(
1741
- radixUi.Select.ScrollDownButton,
1742
- {
1743
- "data-slot": "select-scroll-down-button",
1744
- className: bleakeCore.merge(
1745
- "z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5",
1746
- className
1747
- ),
1748
- ...props,
1749
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, {})
1750
- }
1751
- );
1752
- };
1753
- var SelectScrollUpButton = ({
1754
- className,
1755
- ...props
1756
- }) => {
1757
- return /* @__PURE__ */ jsxRuntime.jsx(
1758
- radixUi.Select.ScrollUpButton,
1759
- {
1760
- "data-slot": "select-scroll-up-button",
1761
- className: bleakeCore.merge(
1762
- "z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5",
1763
- className
1764
- ),
1765
- ...props,
1766
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, {})
1767
- }
1768
- );
1769
- };
1770
- var SelectContent = ({
1771
- className,
1772
- children,
1773
- position = "item-aligned",
1774
- align = "center",
1775
- ...props
1776
- }) => {
1777
- return /* @__PURE__ */ jsxRuntime.jsx(radixUi.Select.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
1778
- radixUi.Select.Content,
1779
- {
1780
- "data-slot": "select-content",
1781
- "data-align-trigger": position === "item-aligned",
1782
- className: bleakeCore.merge(
1783
- "relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1784
- position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
1785
- className
1786
- ),
1787
- position,
1788
- align,
1789
- ...props,
1790
- children: [
1791
- /* @__PURE__ */ jsxRuntime.jsx(SelectScrollUpButton, {}),
1792
- /* @__PURE__ */ jsxRuntime.jsx(
1793
- radixUi.Select.Viewport,
1794
- {
1795
- "data-position": position,
1796
- className: bleakeCore.merge(
1797
- "data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)"
1798
- ),
1799
- children
1800
- }
1801
- ),
1802
- /* @__PURE__ */ jsxRuntime.jsx(SelectScrollDownButton, {})
1803
- ]
1804
- }
1805
- ) });
1806
- };
1807
- var SelectGroup = ({
1808
- className,
1809
- ...props
1810
- }) => {
1811
- return /* @__PURE__ */ jsxRuntime.jsx(
1812
- radixUi.Select.Group,
1813
- {
1814
- "data-slot": "select-group",
1815
- className: bleakeCore.merge("scroll-my-1 p-1", className),
1816
- ...props
1817
- }
1818
- );
1819
- };
1820
- var SelectItem = ({
1821
- className,
1822
- children,
1823
- ...props
1824
- }) => {
1825
- return /* @__PURE__ */ jsxRuntime.jsxs(
1826
- radixUi.Select.Item,
1827
- {
1828
- "data-slot": "select-item",
1829
- className: bleakeCore.merge(
1830
- "relative flex min-h-7 w-full cursor-default items-center gap-2 rounded-md px-2 py-1 text-xs/relaxed outline-hidden select-none border border-transparent focus:bg-orange-50 focus:border focus:border-orange-200/50 focus:text-orange-500! focus:cursor-pointer not-data-[variant=destructive]:focus:**:text-orange-500! data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
1831
- className
1832
- ),
1833
- ...props,
1834
- children: [
1835
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "pointer-events-none absolute right-2 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(radixUi.Select.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckIcon, { className: "pointer-events-none" }) }) }),
1836
- /* @__PURE__ */ jsxRuntime.jsx(radixUi.Select.ItemText, { children })
1837
- ]
1838
- }
1839
- );
1840
- };
1841
- var SelectLabel = ({
1842
- className,
1843
- ...props
1844
- }) => {
1845
- return /* @__PURE__ */ jsxRuntime.jsx(
1846
- radixUi.Select.Label,
1847
- {
1848
- "data-slot": "select-label",
1849
- className: bleakeCore.merge("px-2 py-1.5 text-xs text-muted-foreground", className),
1850
- ...props
1851
- }
1852
- );
1853
- };
1854
- var SelectSeparator = ({
1855
- className,
1856
- ...props
1857
- }) => {
1858
- return /* @__PURE__ */ jsxRuntime.jsx(
1859
- radixUi.Select.Separator,
1860
- {
1861
- "data-slot": "select-separator",
1862
- className: bleakeCore.merge("pointer-events-none -mx-1 my-1 h-px bg-border/50", className),
1863
- ...props
1864
- }
1865
- );
1866
- };
1867
- var SelectTrigger = ({
1868
- className,
1869
- size = "default",
1870
- children,
1871
- ...props
1872
- }) => {
1873
- return /* @__PURE__ */ jsxRuntime.jsxs(
1874
- radixUi.Select.Trigger,
1875
- {
1876
- "data-slot": "select-trigger",
1877
- "data-size": size,
1878
- className: bleakeCore.merge(
1879
- "flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-input/20 px-2 py-1.5 text-xs/relaxed whitespace-nowrap transition-colors outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-7 data-[size=sm]:h-6 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5",
1880
- className
1881
- ),
1882
- ...props,
1883
- children: [
1884
- children,
1885
- /* @__PURE__ */ jsxRuntime.jsx(radixUi.Select.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "pointer-events-none size-3.5 text-muted-foreground" }) })
1886
- ]
1887
- }
1888
- );
1889
- };
1890
- var SelectValue = (props) => {
1891
- return /* @__PURE__ */ jsxRuntime.jsx(
1892
- radixUi.Select.Value,
1893
- {
1894
- "data-slot": "select-value",
1895
- ...props
1896
- }
1897
- );
1898
- };
1899
- var Select = (props) => {
1900
- return /* @__PURE__ */ jsxRuntime.jsx(
1901
- radixUi.Select.Root,
1902
- {
1903
- "data-slot": "select",
1904
- ...props
1905
- }
1906
- );
1907
- };
1908
2378
  var Sheet = (props) => {
1909
2379
  return /* @__PURE__ */ jsxRuntime.jsx(
1910
2380
  radixUi.Dialog.Root,
@@ -2225,21 +2695,6 @@ var Table = ({
2225
2695
  }
2226
2696
  );
2227
2697
  };
2228
- var Tabs = ({
2229
- className,
2230
- orientation = "horizontal",
2231
- ...props
2232
- }) => {
2233
- return /* @__PURE__ */ jsxRuntime.jsx(
2234
- radixUi.Tabs.Root,
2235
- {
2236
- "data-slot": "tabs",
2237
- "data-orientation": orientation,
2238
- className: bleakeCore.merge("group/tabs flex gap-3 data-horizontal:flex-col", className),
2239
- ...props
2240
- }
2241
- );
2242
- };
2243
2698
  var toggleVariants = classVarianceAuthority.cva(
2244
2699
  "group/toggle inline-flex items-center justify-center gap-1 rounded-md text-xs font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5",
2245
2700
  {
@@ -2312,6 +2767,8 @@ var ToggleGroup = ({
2312
2767
  exports.Accordion = Accordion;
2313
2768
  exports.ActionsMenu = ActionsMenu;
2314
2769
  exports.AlertDialog = AlertDialog;
2770
+ exports.AppBreadcrumbs = AppBreadcrumbs;
2771
+ exports.AppTabs = AppTabs;
2315
2772
  exports.Avatar = Avatar;
2316
2773
  exports.Badge = Badge;
2317
2774
  exports.Breadcrumb = Breadcrumb;
@@ -2336,6 +2793,9 @@ exports.DialogPortal = DialogPortal;
2336
2793
  exports.DialogTitle = DialogTitle;
2337
2794
  exports.DialogTrigger = DialogTrigger;
2338
2795
  exports.DropdownMenu = DropdownMenu;
2796
+ exports.Empty = Empty;
2797
+ exports.ErrorFallback = ErrorFallback;
2798
+ exports.FilterSelect = FilterSelect;
2339
2799
  exports.Glow = Glow;
2340
2800
  exports.HoverCard = HoverCard;
2341
2801
  exports.Image = Image;
@@ -2356,6 +2816,7 @@ exports.Popover = Popover;
2356
2816
  exports.Progress = Progress;
2357
2817
  exports.RadioGroup = RadioGroup;
2358
2818
  exports.SectionCard = SectionCard;
2819
+ exports.SectionTitle = SectionTitle;
2359
2820
  exports.Select = Select;
2360
2821
  exports.SelectContent = SelectContent;
2361
2822
  exports.SelectGroup = SelectGroup;
@@ -2370,10 +2831,12 @@ exports.Separator = Separator;
2370
2831
  exports.Sheet = Sheet;
2371
2832
  exports.Sidebar = Sidebar;
2372
2833
  exports.Skeleton = Skeleton;
2834
+ exports.SlideUp = SlideUp;
2373
2835
  exports.Spinner = Spinner;
2374
2836
  exports.Steps = Steps;
2375
2837
  exports.Switch = Switch;
2376
2838
  exports.Table = Table;
2839
+ exports.TablePagination = TablePagination;
2377
2840
  exports.Tabs = Tabs;
2378
2841
  exports.Textarea = Textarea;
2379
2842
  exports.Toaster = Toaster;