@codecrib/ui 0.0.6 → 0.0.8

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.d.cts CHANGED
@@ -50,9 +50,40 @@ interface CountdownProps extends React.HTMLAttributes<HTMLDivElement> {
50
50
  }
51
51
  declare const Countdown: React.ForwardRefExoticComponent<CountdownProps & React.RefAttributes<HTMLDivElement>>;
52
52
 
53
+ interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {
54
+ variant?: "default" | "success" | "warning" | "error" | "info";
55
+ size?: "sm" | "md" | "lg";
56
+ removable?: boolean;
57
+ onRemove?: (e: React.MouseEvent<HTMLButtonElement>) => void;
58
+ removeLabel?: string;
59
+ }
60
+ declare const Tag: React.ForwardRefExoticComponent<TagProps & React.RefAttributes<HTMLSpanElement>>;
61
+
62
+ type SelectItem = {
63
+ value: string;
64
+ label: React.ReactNode;
65
+ icon?: string;
66
+ disabled?: boolean;
67
+ };
68
+ type SelectGroup = {
69
+ label: string;
70
+ items: SelectItem[];
71
+ };
72
+ type SelectSource = SelectItem | SelectGroup;
73
+ interface SelectProps {
74
+ items: SelectSource[];
75
+ placeholder?: string;
76
+ multiselect?: boolean;
77
+ multiline?: boolean;
78
+ value?: string | string[];
79
+ onChange?: (value: string | string[]) => void;
80
+ className?: string;
81
+ }
82
+ declare const Select: React.FC<SelectProps>;
83
+
53
84
  /**
54
85
  * Utility function to merge class names
55
86
  */
56
87
  declare function cn(...classes: (string | undefined | null | false)[]): string;
57
88
 
58
- export { Badge, type BadgeProps, Button, type ButtonProps, Card, type CardProps, Countdown, type CountdownProps, Icon, type IconProps, Input, type InputProps, cn };
89
+ export { Badge, type BadgeProps, Button, type ButtonProps, Card, type CardProps, Countdown, type CountdownProps, Icon, type IconProps, Input, type InputProps, Select, type SelectGroup, type SelectItem, type SelectProps, Tag, type TagProps, cn };
package/dist/index.d.ts CHANGED
@@ -50,9 +50,40 @@ interface CountdownProps extends React.HTMLAttributes<HTMLDivElement> {
50
50
  }
51
51
  declare const Countdown: React.ForwardRefExoticComponent<CountdownProps & React.RefAttributes<HTMLDivElement>>;
52
52
 
53
+ interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {
54
+ variant?: "default" | "success" | "warning" | "error" | "info";
55
+ size?: "sm" | "md" | "lg";
56
+ removable?: boolean;
57
+ onRemove?: (e: React.MouseEvent<HTMLButtonElement>) => void;
58
+ removeLabel?: string;
59
+ }
60
+ declare const Tag: React.ForwardRefExoticComponent<TagProps & React.RefAttributes<HTMLSpanElement>>;
61
+
62
+ type SelectItem = {
63
+ value: string;
64
+ label: React.ReactNode;
65
+ icon?: string;
66
+ disabled?: boolean;
67
+ };
68
+ type SelectGroup = {
69
+ label: string;
70
+ items: SelectItem[];
71
+ };
72
+ type SelectSource = SelectItem | SelectGroup;
73
+ interface SelectProps {
74
+ items: SelectSource[];
75
+ placeholder?: string;
76
+ multiselect?: boolean;
77
+ multiline?: boolean;
78
+ value?: string | string[];
79
+ onChange?: (value: string | string[]) => void;
80
+ className?: string;
81
+ }
82
+ declare const Select: React.FC<SelectProps>;
83
+
53
84
  /**
54
85
  * Utility function to merge class names
55
86
  */
56
87
  declare function cn(...classes: (string | undefined | null | false)[]): string;
57
88
 
58
- export { Badge, type BadgeProps, Button, type ButtonProps, Card, type CardProps, Countdown, type CountdownProps, Icon, type IconProps, Input, type InputProps, cn };
89
+ export { Badge, type BadgeProps, Button, type ButtonProps, Card, type CardProps, Countdown, type CountdownProps, Icon, type IconProps, Input, type InputProps, Select, type SelectGroup, type SelectItem, type SelectProps, Tag, type TagProps, cn };
package/dist/index.js CHANGED
@@ -44,8 +44,8 @@ var Button = React.forwardRef(
44
44
  const renderIcon = () => {
45
45
  if (!icon) return null;
46
46
  if (React.isValidElement(icon)) {
47
- const sizeProp = (icon.props && icon.props.size) ?? void 0;
48
- const weightProp = (icon.props && icon.props.weight) ?? void 0;
47
+ const sizeProp = icon.props?.size;
48
+ const weightProp = icon.props?.weight;
49
49
  const key = size;
50
50
  const desired = {
51
51
  size: sizeProp ?? iconSizeMap[key],
@@ -114,6 +114,21 @@ Button.displayName = "Button";
114
114
 
115
115
  // src/components/Card/Card.tsx
116
116
  import * as React2 from "react";
117
+
118
+ // src/styles/borders.ts
119
+ var radius = {
120
+ default: "rounded-lg",
121
+ pill: "rounded-full"
122
+ };
123
+ var border = {
124
+ base: "border",
125
+ color: "border-gray-300",
126
+ focus: "focus:border-primary-500 focus:ring-primary-500",
127
+ ring: "focus:outline-none focus:ring-2 focus:ring-offset-0"
128
+ };
129
+ var input = `${border.base} ${border.color}`;
130
+
131
+ // src/components/Card/Card.tsx
117
132
  import { jsx as jsx2 } from "react/jsx-runtime";
118
133
  var variantStyles2 = {
119
134
  default: "bg-white",
@@ -126,7 +141,7 @@ var Card = React2.forwardRef(
126
141
  "div",
127
142
  {
128
143
  ref,
129
- className: cn("rounded-xl p-6", variantStyles2[variant], className),
144
+ className: cn(radius.default, "p-6", variantStyles2[variant], className),
130
145
  ...props,
131
146
  children
132
147
  }
@@ -188,8 +203,10 @@ var Input = React3.forwardRef(
188
203
  id: inputId,
189
204
  ref,
190
205
  className: cn(
191
- "block w-full rounded-lg border px-4 py-2 text-gray-900 placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-0 transition-colors",
192
- error ? "border-red-500 focus:border-red-500 focus:ring-red-500" : "border-gray-300 focus:border-primary-500 focus:ring-primary-500",
206
+ "block w-full px-4 py-2 text-gray-900 placeholder:text-gray-400 transition-colors",
207
+ radius.default,
208
+ border.base,
209
+ error ? "border-red-500 focus:border-red-500 focus:ring-red-500" : `${border.color} ${border.focus} ${border.ring}`,
193
210
  className
194
211
  ),
195
212
  ...props
@@ -284,7 +301,7 @@ function formatRemaining(ms) {
284
301
  var Countdown = React6.forwardRef(
285
302
  ({ deadline, onComplete, className, variant = "primary", size = "md", ...props }, ref) => {
286
303
  const target = React6.useMemo(() => parseDeadline(deadline), [deadline]);
287
- const variantStyles4 = {
304
+ const variantStyles5 = {
288
305
  primary: "bg-primary-600 text-white",
289
306
  secondary: "bg-secondary-600 text-white",
290
307
  outline: "border-2 border-primary-600 text-primary-600 bg-transparent",
@@ -313,7 +330,7 @@ var Countdown = React6.forwardRef(
313
330
  const remaining = formatRemaining(target - now);
314
331
  const appliedVariant = expired ? "expired" : variant;
315
332
  const expiredClass = variant === "ghost" ? "text-red-600 bg-transparent" : variant === "outline" ? "border-2 border-red-600 text-red-600 bg-transparent" : "bg-red-600 text-white";
316
- const variantClass = expired ? expiredClass : variantStyles4[variant];
333
+ const variantClass = expired ? expiredClass : variantStyles5[variant];
317
334
  return /* @__PURE__ */ jsx6(
318
335
  "div",
319
336
  {
@@ -331,6 +348,378 @@ var Countdown = React6.forwardRef(
331
348
  }
332
349
  );
333
350
  Countdown.displayName = "Countdown";
351
+
352
+ // src/components/Tag/Tag.tsx
353
+ import * as React7 from "react";
354
+ import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
355
+ var variantStyles4 = {
356
+ default: "bg-gray-100 text-gray-800",
357
+ success: "bg-green-100 text-green-800",
358
+ warning: "bg-yellow-100 text-yellow-800",
359
+ error: "bg-red-100 text-red-800",
360
+ info: "bg-blue-100 text-blue-800"
361
+ };
362
+ var sizeStyles3 = {
363
+ sm: "px-2 py-0.5 text-xs",
364
+ md: "px-2.5 py-1 text-sm",
365
+ lg: "px-3 py-1.5 text-base"
366
+ };
367
+ var Tag = React7.forwardRef(
368
+ ({
369
+ className,
370
+ variant = "default",
371
+ size = "md",
372
+ removable = false,
373
+ onRemove,
374
+ removeLabel = "Remove",
375
+ children,
376
+ ...props
377
+ }, ref) => {
378
+ return /* @__PURE__ */ jsxs3(
379
+ "span",
380
+ {
381
+ ref,
382
+ className: cn(
383
+ "inline-flex items-center font-medium",
384
+ radius.pill,
385
+ variantStyles4[variant],
386
+ sizeStyles3[size],
387
+ className
388
+ ),
389
+ ...props,
390
+ children: [
391
+ /* @__PURE__ */ jsx7("span", { children }),
392
+ removable && /* @__PURE__ */ jsx7(
393
+ "button",
394
+ {
395
+ type: "button",
396
+ "aria-label": removeLabel,
397
+ onClick: onRemove,
398
+ className: cn(
399
+ "ml-2 inline-flex items-center justify-center",
400
+ radius.pill,
401
+ border.ring,
402
+ size === "sm" ? "h-4 w-4" : size === "md" ? "h-5 w-5" : "h-6 w-6"
403
+ ),
404
+ children: /* @__PURE__ */ jsx7(
405
+ "svg",
406
+ {
407
+ xmlns: "http://www.w3.org/2000/svg",
408
+ viewBox: "0 0 24 24",
409
+ fill: "none",
410
+ stroke: "currentColor",
411
+ strokeWidth: 2,
412
+ className: cn(size === "sm" ? "h-3 w-3" : size === "md" ? "h-4 w-4" : "h-5 w-5"),
413
+ children: /* @__PURE__ */ jsx7("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" })
414
+ }
415
+ )
416
+ }
417
+ )
418
+ ]
419
+ }
420
+ );
421
+ }
422
+ );
423
+ Tag.displayName = "Tag";
424
+
425
+ // src/components/Select/Select.tsx
426
+ import * as React8 from "react";
427
+ import { jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
428
+ var Select = ({
429
+ items,
430
+ placeholder = "Select...",
431
+ multiselect = false,
432
+ multiline = false,
433
+ value,
434
+ onChange,
435
+ className
436
+ }) => {
437
+ const [open, setOpen] = React8.useState(false);
438
+ const [internalValue, setInternalValue] = React8.useState(
439
+ Array.isArray(value) ? value : value ? [value] : []
440
+ );
441
+ React8.useEffect(() => {
442
+ if (value !== void 0) {
443
+ setInternalValue(Array.isArray(value) ? value : value ? [value] : []);
444
+ }
445
+ }, [value]);
446
+ const containerRef = React8.useRef(null);
447
+ React8.useEffect(() => {
448
+ const onDoc = (e) => {
449
+ if (!containerRef.current) return;
450
+ if (!containerRef.current.contains(e.target)) setOpen(false);
451
+ };
452
+ document.addEventListener("mousedown", onDoc);
453
+ return () => document.removeEventListener("mousedown", onDoc);
454
+ }, []);
455
+ const isSelected = (v) => internalValue.includes(v);
456
+ const toggleSelect = (v) => {
457
+ let next;
458
+ if (multiselect) {
459
+ next = isSelected(v) ? internalValue.filter((x) => x !== v) : [...internalValue, v];
460
+ } else {
461
+ next = isSelected(v) ? [] : [v];
462
+ setOpen(false);
463
+ }
464
+ if (onChange) onChange(multiselect ? next : next[0] || "");
465
+ if (value === void 0) setInternalValue(next);
466
+ };
467
+ const removeValue = (v) => {
468
+ const next = internalValue.filter((x) => x !== v);
469
+ if (onChange) onChange(multiselect ? next : next[0] || "");
470
+ if (value === void 0) setInternalValue(next);
471
+ };
472
+ const selectedItemsMap = React8.useMemo(() => {
473
+ const map = /* @__PURE__ */ new Map();
474
+ const collect = (src) => {
475
+ src.forEach((s) => {
476
+ if ("items" in s) s.items.forEach((it) => map.set(it.value, it));
477
+ else map.set(s.value, s);
478
+ });
479
+ };
480
+ collect(items);
481
+ return map;
482
+ }, [items]);
483
+ const tagsContainerRef = React8.useRef(null);
484
+ const [visibleCount, setVisibleCount] = React8.useState(null);
485
+ React8.useEffect(() => {
486
+ if (multiline) {
487
+ setVisibleCount(null);
488
+ return;
489
+ }
490
+ let raf;
491
+ let timeout;
492
+ const measure = () => {
493
+ if (raf) cancelAnimationFrame(raf);
494
+ raf = requestAnimationFrame(() => {
495
+ const container = tagsContainerRef.current;
496
+ if (!container) {
497
+ setVisibleCount(null);
498
+ return;
499
+ }
500
+ const containerWidth = container.clientWidth;
501
+ if (containerWidth === 0) {
502
+ setVisibleCount(null);
503
+ return;
504
+ }
505
+ const tagEls = Array.from(
506
+ container.querySelectorAll('[data-role="select-tag"]')
507
+ );
508
+ if (!tagEls.length) {
509
+ setVisibleCount(null);
510
+ return;
511
+ }
512
+ const badgeEl = container.querySelector('[data-role="count-badge"]');
513
+ const containerStyle = window.getComputedStyle(container);
514
+ const gap = parseFloat(containerStyle.gap || containerStyle.columnGap || "0") || 0;
515
+ const tagWidths = tagEls.map((el) => el.offsetWidth);
516
+ let totalWidthAllTags = 0;
517
+ for (const [i, w] of tagWidths.entries()) {
518
+ totalWidthAllTags += w + (i > 0 ? gap : 0);
519
+ }
520
+ if (totalWidthAllTags <= containerWidth) {
521
+ setVisibleCount(tagEls.length);
522
+ return;
523
+ }
524
+ let badgeWidth = badgeEl ? badgeEl.offsetWidth : 40;
525
+ let usedWidth = 0;
526
+ let fitCount = 0;
527
+ for (const [i, tagWidth] of tagWidths.entries()) {
528
+ const gapBeforeTag = i > 0 ? gap : 0;
529
+ const gapBeforeBadge = gap;
530
+ const effectiveTagWidth = tagWidth ?? 0;
531
+ const spaceNeeded = usedWidth + gapBeforeTag + effectiveTagWidth + gapBeforeBadge + badgeWidth;
532
+ if (spaceNeeded <= containerWidth) {
533
+ usedWidth += gapBeforeTag + effectiveTagWidth;
534
+ fitCount = i + 1;
535
+ } else {
536
+ break;
537
+ }
538
+ }
539
+ fitCount = Math.max(1, fitCount);
540
+ setVisibleCount(fitCount);
541
+ });
542
+ };
543
+ measure();
544
+ const onResize = () => {
545
+ if (timeout) clearTimeout(timeout);
546
+ timeout = window.setTimeout(measure, 50);
547
+ };
548
+ window.addEventListener("resize", onResize);
549
+ let ro;
550
+ if (typeof ResizeObserver !== "undefined" && tagsContainerRef.current) {
551
+ ro = new ResizeObserver(onResize);
552
+ ro.observe(tagsContainerRef.current);
553
+ }
554
+ return () => {
555
+ if (raf) cancelAnimationFrame(raf);
556
+ if (timeout) clearTimeout(timeout);
557
+ window.removeEventListener("resize", onResize);
558
+ ro?.disconnect();
559
+ };
560
+ }, [internalValue, multiline]);
561
+ return /* @__PURE__ */ jsxs4("div", { ref: containerRef, className: cn("relative inline-block w-full", className), children: [
562
+ /* @__PURE__ */ jsx8("div", { className: "flex items-center", children: /* @__PURE__ */ jsxs4(
563
+ "div",
564
+ {
565
+ role: "combobox",
566
+ tabIndex: 0,
567
+ "aria-expanded": open,
568
+ onClick: () => setOpen((s) => !s),
569
+ onKeyDown: (e) => {
570
+ if (e.key === "Enter" || e.key === " ") {
571
+ e.preventDefault();
572
+ setOpen((s) => !s);
573
+ }
574
+ if (e.key === "Escape") setOpen(false);
575
+ },
576
+ className: cn(
577
+ "w-full inline-flex items-center justify-between rounded-lg border bg-white px-4 py-2 text-gray-900 text-left cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary-500",
578
+ multiselect ? "" : "",
579
+ open ? "ring-1 ring-gray-300" : ""
580
+ ),
581
+ children: [
582
+ /* @__PURE__ */ jsx8("div", { className: "flex-1", children: multiselect && internalValue.length > 0 ? /* @__PURE__ */ jsxs4(
583
+ "span",
584
+ {
585
+ ref: tagsContainerRef,
586
+ className: cn(
587
+ "relative flex gap-1 items-center",
588
+ multiline ? "flex-wrap" : "overflow-hidden whitespace-nowrap"
589
+ ),
590
+ children: [
591
+ internalValue.map((v, index) => {
592
+ const isHidden = !multiline && visibleCount !== null && index >= visibleCount;
593
+ return /* @__PURE__ */ jsx8(
594
+ "span",
595
+ {
596
+ "data-role": "select-tag",
597
+ className: cn(
598
+ "flex-shrink-0 inline-block",
599
+ isHidden && "invisible absolute pointer-events-none"
600
+ ),
601
+ children: /* @__PURE__ */ jsx8(
602
+ Tag,
603
+ {
604
+ size: "sm",
605
+ removable: true,
606
+ removeLabel: `Remove ${selectedItemsMap.get(v)?.label ?? v}`,
607
+ onRemove: (e) => {
608
+ e.stopPropagation();
609
+ removeValue(v);
610
+ },
611
+ children: selectedItemsMap.get(v)?.label ?? v
612
+ }
613
+ )
614
+ },
615
+ v
616
+ );
617
+ }),
618
+ !multiline && visibleCount !== null && visibleCount < internalValue.length && /* @__PURE__ */ jsx8("span", { "data-role": "count-badge", className: "flex-shrink-0 inline-block", children: /* @__PURE__ */ jsxs4(Badge, { size: "sm", variant: "info", children: [
619
+ "+",
620
+ internalValue.length - visibleCount
621
+ ] }) })
622
+ ]
623
+ }
624
+ ) : internalValue.length > 0 ? /* @__PURE__ */ jsx8("span", { className: "text-sm text-gray-900", children: selectedItemsMap.get(internalValue[0])?.label ?? placeholder }) : /* @__PURE__ */ jsx8("span", { className: "text-sm text-gray-400", children: placeholder }) }),
625
+ /* @__PURE__ */ jsx8("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", className: "ml-2 h-4 w-4 text-gray-600", children: /* @__PURE__ */ jsx8("path", { d: "M5.5 7.5L10 12l4.5-4.5", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) })
626
+ ]
627
+ }
628
+ ) }),
629
+ open && /* @__PURE__ */ jsx8("div", { className: "absolute z-40 mt-2 w-56 bg-white border rounded shadow-lg", children: /* @__PURE__ */ jsx8("div", { className: "p-1", children: items.map((groupOrItem, gi) => {
630
+ if ("items" in groupOrItem) {
631
+ return /* @__PURE__ */ jsxs4("div", { className: "mb-2", children: [
632
+ /* @__PURE__ */ jsxs4("div", { className: "flex items-center justify-between px-2 py-1 text-xs text-gray-500 font-medium", children: [
633
+ /* @__PURE__ */ jsx8("div", { children: groupOrItem.label }),
634
+ /* @__PURE__ */ jsx8("div", { children: multiselect && /* @__PURE__ */ jsx8(
635
+ "input",
636
+ {
637
+ type: "checkbox",
638
+ "aria-label": `Select all ${groupOrItem.label}`,
639
+ checked: groupOrItem.items.every((it) => isSelected(it.value)),
640
+ onChange: () => {
641
+ const all = groupOrItem.items.map((it) => it.value);
642
+ const allSelected = all.every((v) => isSelected(v));
643
+ let next;
644
+ if (multiselect) {
645
+ if (allSelected) {
646
+ next = internalValue.filter((v) => !all.includes(v));
647
+ } else {
648
+ next = [...internalValue, ...all.filter((v) => !internalValue.includes(v))];
649
+ }
650
+ } else {
651
+ next = allSelected ? [] : all[0] ? [all[0]] : [];
652
+ setOpen(false);
653
+ }
654
+ if (onChange) onChange(multiselect ? next : next[0] || "");
655
+ if (value === void 0) setInternalValue(next);
656
+ }
657
+ }
658
+ ) })
659
+ ] }),
660
+ groupOrItem.items.map((it) => /* @__PURE__ */ jsxs4(
661
+ "button",
662
+ {
663
+ type: "button",
664
+ disabled: it.disabled,
665
+ onClick: () => toggleSelect(it.value),
666
+ className: cn(
667
+ "w-full text-left px-2 py-2 rounded hover:bg-gray-50 flex items-center gap-2",
668
+ isSelected(it.value) ? "bg-gray-100" : ""
669
+ ),
670
+ children: [
671
+ it.icon && /* @__PURE__ */ jsx8("img", { src: it.icon, alt: "", className: "h-4 w-4 rounded" }),
672
+ /* @__PURE__ */ jsx8("span", { className: "flex-1", children: it.label }),
673
+ /* @__PURE__ */ jsx8("span", { className: "w-6 flex items-center justify-end", children: isSelected(it.value) && /* @__PURE__ */ jsx8(
674
+ "svg",
675
+ {
676
+ xmlns: "http://www.w3.org/2000/svg",
677
+ viewBox: "0 0 24 24",
678
+ fill: "none",
679
+ stroke: "currentColor",
680
+ strokeWidth: 2,
681
+ className: "h-4 w-4",
682
+ children: /* @__PURE__ */ jsx8("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" })
683
+ }
684
+ ) })
685
+ ]
686
+ },
687
+ it.value
688
+ ))
689
+ ] }, gi);
690
+ }
691
+ return /* @__PURE__ */ jsxs4(
692
+ "button",
693
+ {
694
+ type: "button",
695
+ disabled: groupOrItem.disabled,
696
+ onClick: () => toggleSelect(groupOrItem.value),
697
+ className: cn(
698
+ "w-full text-left px-2 py-2 rounded hover:bg-gray-50 flex items-center gap-2",
699
+ isSelected(groupOrItem.value) ? "bg-gray-100" : ""
700
+ ),
701
+ children: [
702
+ groupOrItem.icon && /* @__PURE__ */ jsx8("img", { src: groupOrItem.icon, alt: "", className: "h-4 w-4 rounded" }),
703
+ /* @__PURE__ */ jsx8("span", { className: "flex-1", children: groupOrItem.label }),
704
+ /* @__PURE__ */ jsx8("span", { className: "w-6 flex items-center justify-end", children: isSelected(groupOrItem.value) && /* @__PURE__ */ jsx8(
705
+ "svg",
706
+ {
707
+ xmlns: "http://www.w3.org/2000/svg",
708
+ viewBox: "0 0 24 24",
709
+ fill: "none",
710
+ stroke: "currentColor",
711
+ strokeWidth: 2,
712
+ className: "h-4 w-4",
713
+ children: /* @__PURE__ */ jsx8("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" })
714
+ }
715
+ ) })
716
+ ]
717
+ },
718
+ groupOrItem.value
719
+ );
720
+ }) }) })
721
+ ] });
722
+ };
334
723
  export {
335
724
  Badge,
336
725
  Button,
@@ -338,6 +727,8 @@ export {
338
727
  Countdown,
339
728
  Icon,
340
729
  Input,
730
+ Select,
731
+ Tag,
341
732
  cn
342
733
  };
343
734
  //# sourceMappingURL=index.js.map