@bbki.ng/components 1.5.9 → 1.5.12

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.ts CHANGED
@@ -86,7 +86,7 @@ declare type PageProps = {
86
86
  declare const Page: (props: PageProps) => JSX.Element;
87
87
 
88
88
  declare type PopConfirmProps = {
89
- onOk?: EventHandler<React.MouseEvent<HTMLButtonElement>>;
89
+ onOk?: EventHandler<React.MouseEvent<HTMLButtonElement>> | (() => Promise<void>);
90
90
  onCancel?: EventHandler<React.MouseEvent<HTMLButtonElement>>;
91
91
  className?: string;
92
92
  content?: any;
@@ -116,14 +116,25 @@ declare const Table: {
116
116
  declare enum SkeletonColor {
117
117
  BLUE = "blue",
118
118
  RED = "red",
119
- GRAY = "gray"
119
+ GRAY = "gray",
120
+ BLACK = "black"
120
121
  }
121
- declare type SkeletonProps = {
122
+ interface SkeletonProps {
122
123
  width?: number;
123
124
  height?: number;
124
125
  bgColor?: SkeletonColor;
125
- };
126
- declare const Skeleton: (props: SkeletonProps) => JSX.Element;
126
+ }
127
+ interface ArticleSkeletonProps extends SkeletonProps {
128
+ titleLength: number;
129
+ descriptionLength?: number;
130
+ children?: any;
131
+ }
132
+ interface LinkListSkeletonProps extends ArticleSkeletonProps {
133
+ linksLength: number[];
134
+ }
135
+ declare const Skeleton: (props: SkeletonProps) => JSX.Element;
136
+ declare const ArticleSkeleton: (props: ArticleSkeletonProps) => JSX.Element;
137
+ declare const LinkListSkeleton: (props: LinkListSkeletonProps) => JSX.Element;
127
138
 
128
139
  interface ImagePreviewerProps {
129
140
  className?: string;
@@ -182,4 +193,4 @@ interface LinkListProps extends Omit<listProps, "itemRenderer" | "items"> {
182
193
  }
183
194
  declare const LinkList: (props: LinkListProps) => JSX.Element;
184
195
 
185
- export { Article, ArticleProps, BLinkDotProps, BlinkDot, Breadcrumb, BreadcrumbProps, Button, ButtonProps, ButtonType, DropImage, ImageDropProps, ImagePreviewerProps, Link, LinkColor, LinkList, LinkListProps, LinkProps, List, Logo, LogoProps, Nav, NavProps, Page, Panel, PanelProps, PathObj, PopConfirm, PopConfirmProps, Skeleton, SkeletonColor, SkeletonProps, Table, TableProps, Tag, TagProps, Tags, ThreeColLayout, TitledList, TitledListProps, listProps, threeColLayoutProps };
196
+ export { Article, ArticleProps, ArticleSkeleton, ArticleSkeletonProps, BLinkDotProps, BlinkDot, Breadcrumb, BreadcrumbProps, Button, ButtonProps, ButtonType, DropImage, ImageDropProps, ImagePreviewerProps, Link, LinkColor, LinkList, LinkListProps, LinkListSkeleton, LinkListSkeletonProps, LinkProps, List, Logo, LogoProps, Nav, NavProps, Page, Panel, PanelProps, PathObj, PopConfirm, PopConfirmProps, Skeleton, SkeletonColor, SkeletonProps, Table, TableProps, Tag, TagProps, Tags, ThreeColLayout, TitledList, TitledListProps, listProps, threeColLayoutProps };
package/dist/index.js CHANGED
@@ -59,6 +59,7 @@ var __toCommonJS = /* @__PURE__ */ ((cache) => {
59
59
  var src_exports = {};
60
60
  __export(src_exports, {
61
61
  Article: () => Article,
62
+ ArticleSkeleton: () => ArticleSkeleton,
62
63
  BlinkDot: () => BlinkDot,
63
64
  Breadcrumb: () => Breadcrumb,
64
65
  Button: () => Button,
@@ -67,6 +68,7 @@ __export(src_exports, {
67
68
  Link: () => Link,
68
69
  LinkColor: () => LinkColor,
69
70
  LinkList: () => LinkList,
71
+ LinkListSkeleton: () => LinkListSkeleton,
70
72
  List: () => List,
71
73
  Logo: () => Logo,
72
74
  Nav: () => Nav,
@@ -299,68 +301,163 @@ var Page = (props) => {
299
301
  };
300
302
 
301
303
  // src/pop-confirm/PopConfirm.tsx
304
+ var import_react10 = __toESM(require("react"));
305
+
306
+ // src/blink-dot/BlinkDot.tsx
307
+ var import_classnames5 = __toESM(require("classnames"));
302
308
  var import_react9 = __toESM(require("react"));
309
+ var BlinkDot = (props) => {
310
+ const { className } = props;
311
+ return /* @__PURE__ */ import_react9.default.createElement("span", {
312
+ className: (0, import_classnames5.default)("inline-flex h-1 w-1 justify-center items-center relative", className)
313
+ }, /* @__PURE__ */ import_react9.default.createElement("span", {
314
+ className: "animate-ping-fast absolute inline-flex h-full w-full rounded-full bg-red-600"
315
+ }));
316
+ };
317
+
318
+ // src/pop-confirm/PopConfirm.tsx
303
319
  var PopConfirm = (props) => {
320
+ const [loading, setLoading] = (0, import_react10.useState)(false);
304
321
  const { onOk, onCancel, children, content, className } = props;
305
- return /* @__PURE__ */ import_react9.default.createElement(Panel, {
322
+ return /* @__PURE__ */ import_react10.default.createElement(Panel, {
306
323
  className
307
- }, /* @__PURE__ */ import_react9.default.createElement("div", {
324
+ }, /* @__PURE__ */ import_react10.default.createElement("div", {
308
325
  className: "mb-32"
309
- }, children || content), /* @__PURE__ */ import_react9.default.createElement("div", {
326
+ }, children || content), /* @__PURE__ */ import_react10.default.createElement("div", {
310
327
  className: "flex justify-end"
311
- }, onCancel && /* @__PURE__ */ import_react9.default.createElement(Button, {
328
+ }, onCancel && /* @__PURE__ */ import_react10.default.createElement(Button, {
312
329
  onClick: onCancel,
313
330
  type: "normal" /* NORMAL */
314
- }, "Cancel"), onOk && /* @__PURE__ */ import_react9.default.createElement(Button, {
315
- onClick: onOk,
316
- className: "ml-16",
317
- type: "primary" /* PRIMARY */
318
- }, "OK")));
331
+ }, "Cancel"), onOk && /* @__PURE__ */ import_react10.default.createElement(Button, {
332
+ onClick: async (e) => {
333
+ setLoading(true);
334
+ await onOk(e);
335
+ setLoading(false);
336
+ },
337
+ className: "ml-16 relative",
338
+ type: loading ? "disabled" /* DISABLED */ : "primary" /* PRIMARY */
339
+ }, "OK", loading && /* @__PURE__ */ import_react10.default.createElement(BlinkDot, {
340
+ className: "!absolute top-2 right-2"
341
+ }))));
319
342
  };
320
343
 
321
344
  // src/table/Table.tsx
322
- var import_react10 = __toESM(require("react"));
345
+ var import_react11 = __toESM(require("react"));
323
346
  var Table = (props) => {
324
347
  const { rowCount, rowRenderer, headerRenderer, className } = props;
325
348
  const rows = [];
326
349
  for (let i = 0; i < rowCount; i++) {
327
- rows.push(/* @__PURE__ */ import_react10.default.createElement("tr", {
350
+ rows.push(/* @__PURE__ */ import_react11.default.createElement("tr", {
328
351
  key: i
329
352
  }, rowRenderer(i)));
330
353
  }
331
- return /* @__PURE__ */ import_react10.default.createElement("table", {
354
+ return /* @__PURE__ */ import_react11.default.createElement("table", {
332
355
  className
333
- }, headerRenderer && /* @__PURE__ */ import_react10.default.createElement("thead", null, /* @__PURE__ */ import_react10.default.createElement("tr", null, headerRenderer())), /* @__PURE__ */ import_react10.default.createElement("tbody", null, rows));
356
+ }, headerRenderer && /* @__PURE__ */ import_react11.default.createElement("thead", null, /* @__PURE__ */ import_react11.default.createElement("tr", null, headerRenderer())), /* @__PURE__ */ import_react11.default.createElement("tbody", null, rows));
357
+ };
358
+ Table.HCell = (props) => /* @__PURE__ */ import_react11.default.createElement("th", __spreadValues({}, props), props.children);
359
+ Table.Cell = (props) => /* @__PURE__ */ import_react11.default.createElement("td", __spreadValues({}, props), props.children);
360
+
361
+ // src/skeleton/Seleton.tsx
362
+ var import_classnames7 = __toESM(require("classnames"));
363
+ var import_react13 = __toESM(require("react"));
364
+
365
+ // src/list/list.tsx
366
+ var import_classnames6 = __toESM(require("classnames"));
367
+ var import_react12 = __toESM(require("react"));
368
+ var List = (props) => {
369
+ const { items, itemRenderer, className, horizontal, compact } = props;
370
+ const spaceCls = compact ? "" : horizontal ? "mr-3" : "mb-4";
371
+ return /* @__PURE__ */ import_react12.default.createElement("ul", {
372
+ className: (0, import_classnames6.default)(className, "list-style-none", {
373
+ flex: horizontal,
374
+ "align-center": horizontal
375
+ })
376
+ }, items.map((item, index) => {
377
+ return /* @__PURE__ */ import_react12.default.createElement("li", {
378
+ key: item.id || index,
379
+ className: (0, import_classnames6.default)(spaceCls, "flex-shrink-0")
380
+ }, itemRenderer(item, index));
381
+ }));
382
+ };
383
+ var TitledList = (props) => {
384
+ const _a = props, { title, description } = _a, rest = __objRest(_a, ["title", "description"]);
385
+ if (!title) {
386
+ return /* @__PURE__ */ import_react12.default.createElement(List, __spreadValues({}, rest));
387
+ }
388
+ return /* @__PURE__ */ import_react12.default.createElement(Article, {
389
+ title,
390
+ description
391
+ }, /* @__PURE__ */ import_react12.default.createElement(List, __spreadValues({}, rest)));
392
+ };
393
+ var LinkList = (props) => {
394
+ const _a = props, { title, description, links } = _a, rest = __objRest(_a, ["title", "description", "links"]);
395
+ const renderLink = ({ name, to }) => {
396
+ return /* @__PURE__ */ import_react12.default.createElement(Link, {
397
+ to,
398
+ key: name
399
+ }, name);
400
+ };
401
+ return /* @__PURE__ */ import_react12.default.createElement(TitledList, __spreadValues({
402
+ title,
403
+ description,
404
+ items: links,
405
+ itemRenderer: renderLink
406
+ }, rest));
334
407
  };
335
- Table.HCell = (props) => /* @__PURE__ */ import_react10.default.createElement("th", __spreadValues({}, props), props.children);
336
- Table.Cell = (props) => /* @__PURE__ */ import_react10.default.createElement("td", __spreadValues({}, props), props.children);
337
408
 
338
409
  // src/skeleton/Seleton.tsx
339
- var import_classnames5 = __toESM(require("classnames"));
340
- var import_react11 = __toESM(require("react"));
341
410
  var SkeletonColor = /* @__PURE__ */ ((SkeletonColor2) => {
342
411
  SkeletonColor2["BLUE"] = "blue";
343
412
  SkeletonColor2["RED"] = "red";
344
413
  SkeletonColor2["GRAY"] = "gray";
414
+ SkeletonColor2["BLACK"] = "black";
345
415
  return SkeletonColor2;
346
416
  })(SkeletonColor || {});
347
417
  var COLOR_MAPPING2 = {
348
418
  ["blue" /* BLUE */]: "bg-blue-100",
349
419
  ["red" /* RED */]: "bg-red-100",
350
- ["gray" /* GRAY */]: "bg-gray-100"
420
+ ["gray" /* GRAY */]: "bg-gray-100",
421
+ ["black" /* BLACK */]: "bg-gray-200"
351
422
  };
352
423
  var Skeleton = (props) => {
353
424
  const { bgColor = "gray" /* GRAY */, width = 26, height = 24 } = props;
354
- return /* @__PURE__ */ import_react11.default.createElement("div", {
355
- className: (0, import_classnames5.default)(COLOR_MAPPING2[bgColor], "animate-pulse", "rounded"),
425
+ return /* @__PURE__ */ import_react13.default.createElement("div", {
426
+ className: (0, import_classnames7.default)(COLOR_MAPPING2[bgColor], "animate-pulse", "rounded"),
356
427
  style: { width, height }
357
428
  });
358
429
  };
430
+ var ArticleSkeleton = (props) => {
431
+ const { children, titleLength, descriptionLength } = props;
432
+ return /* @__PURE__ */ import_react13.default.createElement(Article, {
433
+ title: /* @__PURE__ */ import_react13.default.createElement(Skeleton, {
434
+ width: 36 * titleLength,
435
+ height: 36,
436
+ bgColor: "black" /* BLACK */
437
+ }),
438
+ description: descriptionLength && /* @__PURE__ */ import_react13.default.createElement(Skeleton, {
439
+ width: 16 * descriptionLength
440
+ })
441
+ }, children);
442
+ };
443
+ var LinkListSkeleton = (props) => {
444
+ const _a = props, { linksLength } = _a, rest = __objRest(_a, ["linksLength"]);
445
+ const renderSkeleton = (length) => {
446
+ return /* @__PURE__ */ import_react13.default.createElement(Skeleton, {
447
+ width: length * 16,
448
+ bgColor: "blue" /* BLUE */
449
+ });
450
+ };
451
+ return /* @__PURE__ */ import_react13.default.createElement(ArticleSkeleton, __spreadValues({}, rest), /* @__PURE__ */ import_react13.default.createElement(List, {
452
+ items: linksLength,
453
+ itemRenderer: renderSkeleton
454
+ }));
455
+ };
359
456
 
360
457
  // src/drop-image/DropImage.tsx
361
- var import_classnames6 = __toESM(require("classnames"));
362
- var import_react13 = __toESM(require("react"));
363
- var import_react14 = require("react");
458
+ var import_classnames8 = __toESM(require("classnames"));
459
+ var import_react15 = __toESM(require("react"));
460
+ var import_react16 = require("react");
364
461
 
365
462
  // src/drop-image/utils.ts
366
463
  var wait = (d) => new Promise((r) => setTimeout(r, d));
@@ -368,12 +465,12 @@ var noop = () => {
368
465
  };
369
466
 
370
467
  // src/drop-image/useDropImage.ts
371
- var import_react12 = require("react");
468
+ var import_react14 = require("react");
372
469
  var useDropImage = (params) => {
373
- const [isDragOver, setIsDragOver] = (0, import_react12.useState)(false);
374
- const [imageSrc, setImageSrc] = (0, import_react12.useState)("");
375
- const [imageSize, setImageSize] = (0, import_react12.useState)({ width: 0, height: 0 });
376
- const imageFile = (0, import_react12.useRef)(null);
470
+ const [isDragOver, setIsDragOver] = (0, import_react14.useState)(false);
471
+ const [imageSrc, setImageSrc] = (0, import_react14.useState)("");
472
+ const [imageSize, setImageSize] = (0, import_react14.useState)({ width: 0, height: 0 });
473
+ const imageFile = (0, import_react14.useRef)(null);
377
474
  const {
378
475
  portraitImageWidth = 384,
379
476
  landscapeImageWidth = 500,
@@ -405,18 +502,21 @@ var useDropImage = (params) => {
405
502
  setImageSrc("");
406
503
  }
407
504
  };
408
- const handleDragOver = (0, import_react12.useCallback)((ev) => {
505
+ const handleDragOver = (0, import_react14.useCallback)((ev) => {
409
506
  ev.preventDefault();
410
507
  setIsDragOver(true);
411
508
  ev.dataTransfer.dropEffect = "move";
412
509
  }, []);
413
- const handleDragLeave = (0, import_react12.useCallback)(() => {
510
+ const handleDragLeave = (0, import_react14.useCallback)(() => {
414
511
  setIsDragOver(false);
415
512
  }, []);
416
- const handleDrop = (0, import_react12.useCallback)((ev) => {
513
+ const handleDrop = (0, import_react14.useCallback)((ev) => {
417
514
  ev.preventDefault();
418
515
  setIsDragOver(false);
419
516
  const file = ev.dataTransfer.files[0];
517
+ if (!file || !file.type.startsWith("image")) {
518
+ return;
519
+ }
420
520
  imageFile.current = file;
421
521
  setPreviewImageSrcByFile(file);
422
522
  onDrop(ev, file);
@@ -443,7 +543,7 @@ var useDropImage = (params) => {
443
543
  }
444
544
  img.onload = updateFunc;
445
545
  };
446
- const imageRef = (0, import_react12.useCallback)((input) => {
546
+ const imageRef = (0, import_react14.useCallback)((input) => {
447
547
  if (!input) {
448
548
  return;
449
549
  }
@@ -470,8 +570,8 @@ var ImagePreviewer = (props) => {
470
570
  imageSrc,
471
571
  className
472
572
  } = props;
473
- return /* @__PURE__ */ import_react13.default.createElement("img", {
474
- className: (0, import_classnames6.default)(className, "max-w-[100%]", "h-[auto]", "duration-300", "transition-opacity", "opacity-100", {
573
+ return /* @__PURE__ */ import_react15.default.createElement("img", {
574
+ className: (0, import_classnames8.default)(className, "max-w-[100%]", "h-[auto]", "duration-300", "transition-opacity", "opacity-100", {
475
575
  "opacity-0": !showImagePreviewer,
476
576
  "!m-0": !showImagePreviewer,
477
577
  "!p-0": !showImagePreviewer
@@ -492,9 +592,9 @@ var GhostDropImage = (props) => {
492
592
  children,
493
593
  placeholder
494
594
  } = props;
495
- const [coverVisible, setCoverVisible] = (0, import_react14.useState)(false);
496
- const [imageVisible, setImageVisible] = (0, import_react14.useState)(false);
497
- const handleDocDragEnter = (0, import_react13.useCallback)(() => {
595
+ const [coverVisible, setCoverVisible] = (0, import_react16.useState)(false);
596
+ const [imageVisible, setImageVisible] = (0, import_react16.useState)(false);
597
+ const handleDocDragEnter = (0, import_react15.useCallback)(() => {
498
598
  setCoverVisible(true);
499
599
  }, []);
500
600
  const {
@@ -519,19 +619,19 @@ var GhostDropImage = (props) => {
519
619
  reset();
520
620
  }
521
621
  });
522
- (0, import_react13.useEffect)(() => {
622
+ (0, import_react15.useEffect)(() => {
523
623
  document.addEventListener("dragenter", handleDocDragEnter);
524
624
  return () => {
525
625
  document.removeEventListener("dragenter", handleDocDragEnter);
526
626
  };
527
627
  }, []);
528
- const coverCls = (0, import_classnames6.default)("fixed", "top-0", "left-0", "h-full", "w-full", {
628
+ const coverCls = (0, import_classnames8.default)("fixed", "top-0", "left-0", "h-full", "w-full", {
529
629
  "lqip-blur": coverVisible,
530
630
  "z-[999]": coverVisible,
531
631
  block: coverVisible,
532
632
  hidden: !coverVisible
533
633
  });
534
- return /* @__PURE__ */ import_react13.default.createElement(import_react13.default.Fragment, null, /* @__PURE__ */ import_react13.default.createElement("div", {
634
+ return /* @__PURE__ */ import_react15.default.createElement(import_react15.default.Fragment, null, /* @__PURE__ */ import_react15.default.createElement("div", {
535
635
  className: coverCls,
536
636
  onDragLeave: () => {
537
637
  handleDragLeave();
@@ -544,7 +644,7 @@ var GhostDropImage = (props) => {
544
644
  imageRef,
545
645
  imageSize,
546
646
  imageSrc
547
- }) : /* @__PURE__ */ import_react13.default.createElement(ImagePreviewer, {
647
+ }) : /* @__PURE__ */ import_react15.default.createElement(ImagePreviewer, {
548
648
  className,
549
649
  visible: imageVisible,
550
650
  imageRef,
@@ -570,9 +670,9 @@ var DropImage = (props) => {
570
670
  }
571
671
  } = props;
572
672
  if (ghost) {
573
- return /* @__PURE__ */ import_react13.default.createElement(GhostDropImage, __spreadValues({}, props));
673
+ return /* @__PURE__ */ import_react15.default.createElement(GhostDropImage, __spreadValues({}, props));
574
674
  }
575
- const [showImagePreviewer, setShowImagePreviewer] = (0, import_react14.useState)(false);
675
+ const [showImagePreviewer, setShowImagePreviewer] = (0, import_react16.useState)(false);
576
676
  const {
577
677
  handleDragLeave,
578
678
  handleDragOver,
@@ -601,8 +701,8 @@ var DropImage = (props) => {
601
701
  height: imageSize.height || dropAreaStyle.height
602
702
  });
603
703
  };
604
- return /* @__PURE__ */ import_react13.default.createElement("div", {
605
- className: (0, import_classnames6.default)(className, "transition-all items-center justify-center flex duration-200 ease-in-out", {
704
+ return /* @__PURE__ */ import_react15.default.createElement("div", {
705
+ className: (0, import_classnames8.default)(className, "transition-all items-center justify-center flex duration-200 ease-in-out", {
606
706
  "shadow-input": !imageSrc,
607
707
  "shadow-empty": imageSrc
608
708
  }),
@@ -615,7 +715,7 @@ var DropImage = (props) => {
615
715
  imageRef,
616
716
  imageSize,
617
717
  imageSrc
618
- }) : /* @__PURE__ */ import_react13.default.createElement(ImagePreviewer, {
718
+ }) : /* @__PURE__ */ import_react15.default.createElement(ImagePreviewer, {
619
719
  visible: showImagePreviewer,
620
720
  imageRef,
621
721
  imageSrc,
@@ -623,84 +723,29 @@ var DropImage = (props) => {
623
723
  }), !imageSrc && placeholder);
624
724
  };
625
725
 
626
- // src/blink-dot/BlinkDot.tsx
627
- var import_classnames7 = __toESM(require("classnames"));
628
- var import_react15 = __toESM(require("react"));
629
- var BlinkDot = (props) => {
630
- const { className } = props;
631
- return /* @__PURE__ */ import_react15.default.createElement("span", {
632
- className: (0, import_classnames7.default)("inline-flex h-1 w-1 justify-center items-center relative", className)
633
- }, /* @__PURE__ */ import_react15.default.createElement("span", {
634
- className: "animate-ping-fast absolute inline-flex h-full w-full rounded-full bg-red-600"
635
- }));
636
- };
637
-
638
726
  // src/layout/layout.tsx
639
- var import_classnames8 = __toESM(require("classnames"));
640
- var import_react16 = __toESM(require("react"));
727
+ var import_classnames9 = __toESM(require("classnames"));
728
+ var import_react17 = __toESM(require("react"));
641
729
  var ThreeColLayout = (props) => {
642
730
  const { leftRenderer, middleRenderer, rightRenderer } = props;
643
- const colCls = (0, import_classnames8.default)("max-h-full overflow-auto md:block py-64");
644
- return /* @__PURE__ */ import_react16.default.createElement("div", {
731
+ const colCls = (0, import_classnames9.default)("max-h-full overflow-auto md:block py-64");
732
+ return /* @__PURE__ */ import_react17.default.createElement("div", {
645
733
  className: "grid grid-cols-1 xl:grid-cols-3 gap-4 h-full w-full"
646
- }, /* @__PURE__ */ import_react16.default.createElement("div", {
647
- className: (0, import_classnames8.default)("hidden", colCls)
648
- }, leftRenderer && leftRenderer()), /* @__PURE__ */ import_react16.default.createElement("div", {
649
- className: (0, import_classnames8.default)(colCls, "sm:px-128 xl:px-0 no-scrollbar", "relative", {
734
+ }, /* @__PURE__ */ import_react17.default.createElement("div", {
735
+ className: (0, import_classnames9.default)("hidden", colCls)
736
+ }, leftRenderer && leftRenderer()), /* @__PURE__ */ import_react17.default.createElement("div", {
737
+ className: (0, import_classnames9.default)(colCls, "sm:px-128 xl:px-0 no-scrollbar", "relative", {
650
738
  hidden: !middleRenderer
651
739
  })
652
- }, middleRenderer && middleRenderer()), /* @__PURE__ */ import_react16.default.createElement("div", {
653
- className: (0, import_classnames8.default)("hidden", colCls)
740
+ }, middleRenderer && middleRenderer()), /* @__PURE__ */ import_react17.default.createElement("div", {
741
+ className: (0, import_classnames9.default)("hidden", colCls)
654
742
  }, rightRenderer && rightRenderer()));
655
743
  };
656
-
657
- // src/list/list.tsx
658
- var import_classnames9 = __toESM(require("classnames"));
659
- var import_react17 = __toESM(require("react"));
660
- var List = (props) => {
661
- const { items, itemRenderer, className, horizontal, compact } = props;
662
- const spaceCls = compact ? "" : horizontal ? "mr-3" : "mb-4";
663
- return /* @__PURE__ */ import_react17.default.createElement("ul", {
664
- className: (0, import_classnames9.default)(className, "list-style-none", {
665
- flex: horizontal,
666
- "align-center": horizontal
667
- })
668
- }, items.map((item, index) => {
669
- return /* @__PURE__ */ import_react17.default.createElement("li", {
670
- key: item.id || index,
671
- className: (0, import_classnames9.default)(spaceCls, "flex-shrink-0")
672
- }, itemRenderer(item, index));
673
- }));
674
- };
675
- var TitledList = (props) => {
676
- const _a = props, { title, description } = _a, rest = __objRest(_a, ["title", "description"]);
677
- if (!title) {
678
- return /* @__PURE__ */ import_react17.default.createElement(List, __spreadValues({}, rest));
679
- }
680
- return /* @__PURE__ */ import_react17.default.createElement(Article, {
681
- title,
682
- description
683
- }, /* @__PURE__ */ import_react17.default.createElement(List, __spreadValues({}, rest)));
684
- };
685
- var LinkList = (props) => {
686
- const _a = props, { title, description, links } = _a, rest = __objRest(_a, ["title", "description", "links"]);
687
- const renderLink = ({ name, to }) => {
688
- return /* @__PURE__ */ import_react17.default.createElement(Link, {
689
- to,
690
- key: name
691
- }, name);
692
- };
693
- return /* @__PURE__ */ import_react17.default.createElement(TitledList, __spreadValues({
694
- title,
695
- description,
696
- items: links,
697
- itemRenderer: renderLink
698
- }, rest));
699
- };
700
744
  module.exports = __toCommonJS(src_exports);
701
745
  // Annotate the CommonJS export names for ESM import in node:
702
746
  0 && (module.exports = {
703
747
  Article,
748
+ ArticleSkeleton,
704
749
  BlinkDot,
705
750
  Breadcrumb,
706
751
  Button,
@@ -709,6 +754,7 @@ module.exports = __toCommonJS(src_exports);
709
754
  Link,
710
755
  LinkColor,
711
756
  LinkList,
757
+ LinkListSkeleton,
712
758
  List,
713
759
  Logo,
714
760
  Nav,
package/dist/index.mjs CHANGED
@@ -247,71 +247,166 @@ var Page = (props) => {
247
247
  };
248
248
 
249
249
  // src/pop-confirm/PopConfirm.tsx
250
+ import React11, { useState as useState2 } from "react";
251
+
252
+ // src/blink-dot/BlinkDot.tsx
253
+ import classNames5 from "classnames";
250
254
  import React10 from "react";
255
+ var BlinkDot = (props) => {
256
+ const { className } = props;
257
+ return /* @__PURE__ */ React10.createElement("span", {
258
+ className: classNames5("inline-flex h-1 w-1 justify-center items-center relative", className)
259
+ }, /* @__PURE__ */ React10.createElement("span", {
260
+ className: "animate-ping-fast absolute inline-flex h-full w-full rounded-full bg-red-600"
261
+ }));
262
+ };
263
+
264
+ // src/pop-confirm/PopConfirm.tsx
251
265
  var PopConfirm = (props) => {
266
+ const [loading, setLoading] = useState2(false);
252
267
  const { onOk, onCancel, children, content, className } = props;
253
- return /* @__PURE__ */ React10.createElement(Panel, {
268
+ return /* @__PURE__ */ React11.createElement(Panel, {
254
269
  className
255
- }, /* @__PURE__ */ React10.createElement("div", {
270
+ }, /* @__PURE__ */ React11.createElement("div", {
256
271
  className: "mb-32"
257
- }, children || content), /* @__PURE__ */ React10.createElement("div", {
272
+ }, children || content), /* @__PURE__ */ React11.createElement("div", {
258
273
  className: "flex justify-end"
259
- }, onCancel && /* @__PURE__ */ React10.createElement(Button, {
274
+ }, onCancel && /* @__PURE__ */ React11.createElement(Button, {
260
275
  onClick: onCancel,
261
276
  type: "normal" /* NORMAL */
262
- }, "Cancel"), onOk && /* @__PURE__ */ React10.createElement(Button, {
263
- onClick: onOk,
264
- className: "ml-16",
265
- type: "primary" /* PRIMARY */
266
- }, "OK")));
277
+ }, "Cancel"), onOk && /* @__PURE__ */ React11.createElement(Button, {
278
+ onClick: async (e) => {
279
+ setLoading(true);
280
+ await onOk(e);
281
+ setLoading(false);
282
+ },
283
+ className: "ml-16 relative",
284
+ type: loading ? "disabled" /* DISABLED */ : "primary" /* PRIMARY */
285
+ }, "OK", loading && /* @__PURE__ */ React11.createElement(BlinkDot, {
286
+ className: "!absolute top-2 right-2"
287
+ }))));
267
288
  };
268
289
 
269
290
  // src/table/Table.tsx
270
- import React11 from "react";
291
+ import React12 from "react";
271
292
  var Table = (props) => {
272
293
  const { rowCount, rowRenderer, headerRenderer, className } = props;
273
294
  const rows = [];
274
295
  for (let i = 0; i < rowCount; i++) {
275
- rows.push(/* @__PURE__ */ React11.createElement("tr", {
296
+ rows.push(/* @__PURE__ */ React12.createElement("tr", {
276
297
  key: i
277
298
  }, rowRenderer(i)));
278
299
  }
279
- return /* @__PURE__ */ React11.createElement("table", {
300
+ return /* @__PURE__ */ React12.createElement("table", {
280
301
  className
281
- }, headerRenderer && /* @__PURE__ */ React11.createElement("thead", null, /* @__PURE__ */ React11.createElement("tr", null, headerRenderer())), /* @__PURE__ */ React11.createElement("tbody", null, rows));
302
+ }, headerRenderer && /* @__PURE__ */ React12.createElement("thead", null, /* @__PURE__ */ React12.createElement("tr", null, headerRenderer())), /* @__PURE__ */ React12.createElement("tbody", null, rows));
303
+ };
304
+ Table.HCell = (props) => /* @__PURE__ */ React12.createElement("th", __spreadValues({}, props), props.children);
305
+ Table.Cell = (props) => /* @__PURE__ */ React12.createElement("td", __spreadValues({}, props), props.children);
306
+
307
+ // src/skeleton/Seleton.tsx
308
+ import classNames6 from "classnames";
309
+ import React14 from "react";
310
+
311
+ // src/list/list.tsx
312
+ import cls from "classnames";
313
+ import React13 from "react";
314
+ var List = (props) => {
315
+ const { items, itemRenderer, className, horizontal, compact } = props;
316
+ const spaceCls = compact ? "" : horizontal ? "mr-3" : "mb-4";
317
+ return /* @__PURE__ */ React13.createElement("ul", {
318
+ className: cls(className, "list-style-none", {
319
+ flex: horizontal,
320
+ "align-center": horizontal
321
+ })
322
+ }, items.map((item, index) => {
323
+ return /* @__PURE__ */ React13.createElement("li", {
324
+ key: item.id || index,
325
+ className: cls(spaceCls, "flex-shrink-0")
326
+ }, itemRenderer(item, index));
327
+ }));
328
+ };
329
+ var TitledList = (props) => {
330
+ const _a = props, { title, description } = _a, rest = __objRest(_a, ["title", "description"]);
331
+ if (!title) {
332
+ return /* @__PURE__ */ React13.createElement(List, __spreadValues({}, rest));
333
+ }
334
+ return /* @__PURE__ */ React13.createElement(Article, {
335
+ title,
336
+ description
337
+ }, /* @__PURE__ */ React13.createElement(List, __spreadValues({}, rest)));
338
+ };
339
+ var LinkList = (props) => {
340
+ const _a = props, { title, description, links } = _a, rest = __objRest(_a, ["title", "description", "links"]);
341
+ const renderLink = ({ name, to }) => {
342
+ return /* @__PURE__ */ React13.createElement(Link, {
343
+ to,
344
+ key: name
345
+ }, name);
346
+ };
347
+ return /* @__PURE__ */ React13.createElement(TitledList, __spreadValues({
348
+ title,
349
+ description,
350
+ items: links,
351
+ itemRenderer: renderLink
352
+ }, rest));
282
353
  };
283
- Table.HCell = (props) => /* @__PURE__ */ React11.createElement("th", __spreadValues({}, props), props.children);
284
- Table.Cell = (props) => /* @__PURE__ */ React11.createElement("td", __spreadValues({}, props), props.children);
285
354
 
286
355
  // src/skeleton/Seleton.tsx
287
- import classNames5 from "classnames";
288
- import React12 from "react";
289
356
  var SkeletonColor = /* @__PURE__ */ ((SkeletonColor2) => {
290
357
  SkeletonColor2["BLUE"] = "blue";
291
358
  SkeletonColor2["RED"] = "red";
292
359
  SkeletonColor2["GRAY"] = "gray";
360
+ SkeletonColor2["BLACK"] = "black";
293
361
  return SkeletonColor2;
294
362
  })(SkeletonColor || {});
295
363
  var COLOR_MAPPING2 = {
296
364
  ["blue" /* BLUE */]: "bg-blue-100",
297
365
  ["red" /* RED */]: "bg-red-100",
298
- ["gray" /* GRAY */]: "bg-gray-100"
366
+ ["gray" /* GRAY */]: "bg-gray-100",
367
+ ["black" /* BLACK */]: "bg-gray-200"
299
368
  };
300
369
  var Skeleton = (props) => {
301
370
  const { bgColor = "gray" /* GRAY */, width = 26, height = 24 } = props;
302
- return /* @__PURE__ */ React12.createElement("div", {
303
- className: classNames5(COLOR_MAPPING2[bgColor], "animate-pulse", "rounded"),
371
+ return /* @__PURE__ */ React14.createElement("div", {
372
+ className: classNames6(COLOR_MAPPING2[bgColor], "animate-pulse", "rounded"),
304
373
  style: { width, height }
305
374
  });
306
375
  };
376
+ var ArticleSkeleton = (props) => {
377
+ const { children, titleLength, descriptionLength } = props;
378
+ return /* @__PURE__ */ React14.createElement(Article, {
379
+ title: /* @__PURE__ */ React14.createElement(Skeleton, {
380
+ width: 36 * titleLength,
381
+ height: 36,
382
+ bgColor: "black" /* BLACK */
383
+ }),
384
+ description: descriptionLength && /* @__PURE__ */ React14.createElement(Skeleton, {
385
+ width: 16 * descriptionLength
386
+ })
387
+ }, children);
388
+ };
389
+ var LinkListSkeleton = (props) => {
390
+ const _a = props, { linksLength } = _a, rest = __objRest(_a, ["linksLength"]);
391
+ const renderSkeleton = (length) => {
392
+ return /* @__PURE__ */ React14.createElement(Skeleton, {
393
+ width: length * 16,
394
+ bgColor: "blue" /* BLUE */
395
+ });
396
+ };
397
+ return /* @__PURE__ */ React14.createElement(ArticleSkeleton, __spreadValues({}, rest), /* @__PURE__ */ React14.createElement(List, {
398
+ items: linksLength,
399
+ itemRenderer: renderSkeleton
400
+ }));
401
+ };
307
402
 
308
403
  // src/drop-image/DropImage.tsx
309
- import cls from "classnames";
310
- import React13, {
404
+ import cls2 from "classnames";
405
+ import React15, {
311
406
  useEffect as useEffect2,
312
407
  useCallback as useCallback2
313
408
  } from "react";
314
- import { useState as useState3 } from "react";
409
+ import { useState as useState4 } from "react";
315
410
 
316
411
  // src/drop-image/utils.ts
317
412
  var wait = (d) => new Promise((r) => setTimeout(r, d));
@@ -319,11 +414,11 @@ var noop = () => {
319
414
  };
320
415
 
321
416
  // src/drop-image/useDropImage.ts
322
- import { useState as useState2, useCallback, useRef } from "react";
417
+ import { useState as useState3, useCallback, useRef } from "react";
323
418
  var useDropImage = (params) => {
324
- const [isDragOver, setIsDragOver] = useState2(false);
325
- const [imageSrc, setImageSrc] = useState2("");
326
- const [imageSize, setImageSize] = useState2({ width: 0, height: 0 });
419
+ const [isDragOver, setIsDragOver] = useState3(false);
420
+ const [imageSrc, setImageSrc] = useState3("");
421
+ const [imageSize, setImageSize] = useState3({ width: 0, height: 0 });
327
422
  const imageFile = useRef(null);
328
423
  const {
329
424
  portraitImageWidth = 384,
@@ -368,6 +463,9 @@ var useDropImage = (params) => {
368
463
  ev.preventDefault();
369
464
  setIsDragOver(false);
370
465
  const file = ev.dataTransfer.files[0];
466
+ if (!file || !file.type.startsWith("image")) {
467
+ return;
468
+ }
371
469
  imageFile.current = file;
372
470
  setPreviewImageSrcByFile(file);
373
471
  onDrop(ev, file);
@@ -421,8 +519,8 @@ var ImagePreviewer = (props) => {
421
519
  imageSrc,
422
520
  className
423
521
  } = props;
424
- return /* @__PURE__ */ React13.createElement("img", {
425
- className: cls(className, "max-w-[100%]", "h-[auto]", "duration-300", "transition-opacity", "opacity-100", {
522
+ return /* @__PURE__ */ React15.createElement("img", {
523
+ className: cls2(className, "max-w-[100%]", "h-[auto]", "duration-300", "transition-opacity", "opacity-100", {
426
524
  "opacity-0": !showImagePreviewer,
427
525
  "!m-0": !showImagePreviewer,
428
526
  "!p-0": !showImagePreviewer
@@ -443,8 +541,8 @@ var GhostDropImage = (props) => {
443
541
  children,
444
542
  placeholder
445
543
  } = props;
446
- const [coverVisible, setCoverVisible] = useState3(false);
447
- const [imageVisible, setImageVisible] = useState3(false);
544
+ const [coverVisible, setCoverVisible] = useState4(false);
545
+ const [imageVisible, setImageVisible] = useState4(false);
448
546
  const handleDocDragEnter = useCallback2(() => {
449
547
  setCoverVisible(true);
450
548
  }, []);
@@ -476,13 +574,13 @@ var GhostDropImage = (props) => {
476
574
  document.removeEventListener("dragenter", handleDocDragEnter);
477
575
  };
478
576
  }, []);
479
- const coverCls = cls("fixed", "top-0", "left-0", "h-full", "w-full", {
577
+ const coverCls = cls2("fixed", "top-0", "left-0", "h-full", "w-full", {
480
578
  "lqip-blur": coverVisible,
481
579
  "z-[999]": coverVisible,
482
580
  block: coverVisible,
483
581
  hidden: !coverVisible
484
582
  });
485
- return /* @__PURE__ */ React13.createElement(React13.Fragment, null, /* @__PURE__ */ React13.createElement("div", {
583
+ return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement("div", {
486
584
  className: coverCls,
487
585
  onDragLeave: () => {
488
586
  handleDragLeave();
@@ -495,7 +593,7 @@ var GhostDropImage = (props) => {
495
593
  imageRef,
496
594
  imageSize,
497
595
  imageSrc
498
- }) : /* @__PURE__ */ React13.createElement(ImagePreviewer, {
596
+ }) : /* @__PURE__ */ React15.createElement(ImagePreviewer, {
499
597
  className,
500
598
  visible: imageVisible,
501
599
  imageRef,
@@ -521,9 +619,9 @@ var DropImage = (props) => {
521
619
  }
522
620
  } = props;
523
621
  if (ghost) {
524
- return /* @__PURE__ */ React13.createElement(GhostDropImage, __spreadValues({}, props));
622
+ return /* @__PURE__ */ React15.createElement(GhostDropImage, __spreadValues({}, props));
525
623
  }
526
- const [showImagePreviewer, setShowImagePreviewer] = useState3(false);
624
+ const [showImagePreviewer, setShowImagePreviewer] = useState4(false);
527
625
  const {
528
626
  handleDragLeave,
529
627
  handleDragOver,
@@ -552,8 +650,8 @@ var DropImage = (props) => {
552
650
  height: imageSize.height || dropAreaStyle.height
553
651
  });
554
652
  };
555
- return /* @__PURE__ */ React13.createElement("div", {
556
- className: cls(className, "transition-all items-center justify-center flex duration-200 ease-in-out", {
653
+ return /* @__PURE__ */ React15.createElement("div", {
654
+ className: cls2(className, "transition-all items-center justify-center flex duration-200 ease-in-out", {
557
655
  "shadow-input": !imageSrc,
558
656
  "shadow-empty": imageSrc
559
657
  }),
@@ -566,7 +664,7 @@ var DropImage = (props) => {
566
664
  imageRef,
567
665
  imageSize,
568
666
  imageSrc
569
- }) : /* @__PURE__ */ React13.createElement(ImagePreviewer, {
667
+ }) : /* @__PURE__ */ React15.createElement(ImagePreviewer, {
570
668
  visible: showImagePreviewer,
571
669
  imageRef,
572
670
  imageSrc,
@@ -574,82 +672,27 @@ var DropImage = (props) => {
574
672
  }), !imageSrc && placeholder);
575
673
  };
576
674
 
577
- // src/blink-dot/BlinkDot.tsx
578
- import classNames6 from "classnames";
579
- import React14 from "react";
580
- var BlinkDot = (props) => {
581
- const { className } = props;
582
- return /* @__PURE__ */ React14.createElement("span", {
583
- className: classNames6("inline-flex h-1 w-1 justify-center items-center relative", className)
584
- }, /* @__PURE__ */ React14.createElement("span", {
585
- className: "animate-ping-fast absolute inline-flex h-full w-full rounded-full bg-red-600"
586
- }));
587
- };
588
-
589
675
  // src/layout/layout.tsx
590
- import cls2 from "classnames";
591
- import React15 from "react";
676
+ import cls3 from "classnames";
677
+ import React16 from "react";
592
678
  var ThreeColLayout = (props) => {
593
679
  const { leftRenderer, middleRenderer, rightRenderer } = props;
594
- const colCls = cls2("max-h-full overflow-auto md:block py-64");
595
- return /* @__PURE__ */ React15.createElement("div", {
680
+ const colCls = cls3("max-h-full overflow-auto md:block py-64");
681
+ return /* @__PURE__ */ React16.createElement("div", {
596
682
  className: "grid grid-cols-1 xl:grid-cols-3 gap-4 h-full w-full"
597
- }, /* @__PURE__ */ React15.createElement("div", {
598
- className: cls2("hidden", colCls)
599
- }, leftRenderer && leftRenderer()), /* @__PURE__ */ React15.createElement("div", {
600
- className: cls2(colCls, "sm:px-128 xl:px-0 no-scrollbar", "relative", {
683
+ }, /* @__PURE__ */ React16.createElement("div", {
684
+ className: cls3("hidden", colCls)
685
+ }, leftRenderer && leftRenderer()), /* @__PURE__ */ React16.createElement("div", {
686
+ className: cls3(colCls, "sm:px-128 xl:px-0 no-scrollbar", "relative", {
601
687
  hidden: !middleRenderer
602
688
  })
603
- }, middleRenderer && middleRenderer()), /* @__PURE__ */ React15.createElement("div", {
604
- className: cls2("hidden", colCls)
689
+ }, middleRenderer && middleRenderer()), /* @__PURE__ */ React16.createElement("div", {
690
+ className: cls3("hidden", colCls)
605
691
  }, rightRenderer && rightRenderer()));
606
692
  };
607
-
608
- // src/list/list.tsx
609
- import cls3 from "classnames";
610
- import React16 from "react";
611
- var List = (props) => {
612
- const { items, itemRenderer, className, horizontal, compact } = props;
613
- const spaceCls = compact ? "" : horizontal ? "mr-3" : "mb-4";
614
- return /* @__PURE__ */ React16.createElement("ul", {
615
- className: cls3(className, "list-style-none", {
616
- flex: horizontal,
617
- "align-center": horizontal
618
- })
619
- }, items.map((item, index) => {
620
- return /* @__PURE__ */ React16.createElement("li", {
621
- key: item.id || index,
622
- className: cls3(spaceCls, "flex-shrink-0")
623
- }, itemRenderer(item, index));
624
- }));
625
- };
626
- var TitledList = (props) => {
627
- const _a = props, { title, description } = _a, rest = __objRest(_a, ["title", "description"]);
628
- if (!title) {
629
- return /* @__PURE__ */ React16.createElement(List, __spreadValues({}, rest));
630
- }
631
- return /* @__PURE__ */ React16.createElement(Article, {
632
- title,
633
- description
634
- }, /* @__PURE__ */ React16.createElement(List, __spreadValues({}, rest)));
635
- };
636
- var LinkList = (props) => {
637
- const _a = props, { title, description, links } = _a, rest = __objRest(_a, ["title", "description", "links"]);
638
- const renderLink = ({ name, to }) => {
639
- return /* @__PURE__ */ React16.createElement(Link, {
640
- to,
641
- key: name
642
- }, name);
643
- };
644
- return /* @__PURE__ */ React16.createElement(TitledList, __spreadValues({
645
- title,
646
- description,
647
- items: links,
648
- itemRenderer: renderLink
649
- }, rest));
650
- };
651
693
  export {
652
694
  Article,
695
+ ArticleSkeleton,
653
696
  BlinkDot,
654
697
  Breadcrumb,
655
698
  Button,
@@ -658,6 +701,7 @@ export {
658
701
  Link,
659
702
  LinkColor,
660
703
  LinkList,
704
+ LinkListSkeleton,
661
705
  List,
662
706
  Logo,
663
707
  Nav,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bbki.ng/components",
3
- "version": "1.5.9",
3
+ "version": "1.5.12",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",