@luscii-healthtech/web-ui 2.61.0 → 2.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import type { BreadcrumbDividerProps, Crumb } from "./Breadcrumbs.types";
3
+ export declare const BreadcrumbItem: React.FC<Crumb>;
4
+ export declare const BreadcrumbDividerItem: React.FC<BreadcrumbDividerProps>;
@@ -1,10 +1,3 @@
1
1
  import React from "react";
2
- export interface Crumb {
3
- name: string;
4
- key?: string;
5
- link?: string;
6
- }
7
- export interface BreadcrumbProps {
8
- crumbs: Crumb[];
9
- }
10
- export declare const Breadcrumbs: React.VoidFunctionComponent<BreadcrumbProps>;
2
+ import type { BreadcrumbProps } from "./Breadcrumbs.types";
3
+ export declare const Breadcrumbs: React.FC<BreadcrumbProps>;
@@ -0,0 +1,14 @@
1
+ export interface Crumb {
2
+ name: string;
3
+ key?: string;
4
+ link?: string;
5
+ }
6
+ export interface BreadcrumbProps {
7
+ crumbs: Crumb[];
8
+ truncateAfter?: number;
9
+ }
10
+ export declare type BreadcrumbDividerProps = {
11
+ onClick: () => void;
12
+ truncatedCrumbs: Crumb[];
13
+ };
14
+ export declare const isBreadcrumbDividerProps: (subject: unknown) => subject is BreadcrumbDividerProps;
@@ -0,0 +1,2 @@
1
+ export type { BreadcrumbProps, Crumb } from "./Breadcrumbs.types";
2
+ export { Breadcrumbs } from "./Breadcrumbs";
@@ -1,9 +1,10 @@
1
1
  /// <reference types="react" />
2
- import type { BreadcrumbProps } from "../Breadcrumbs/Breadcrumbs";
2
+ import type { BreadcrumbProps } from "../Breadcrumbs";
3
3
  import type { TabbarProps } from "../Tabbar/Tabbar";
4
4
  export interface PageHeaderProps {
5
5
  navigation?: Omit<TabbarProps, "withoutPadding">;
6
6
  breadcrumbs?: BreadcrumbProps["crumbs"];
7
+ truncateBreadcrumbsAfter?: number;
7
8
  dataTestId?: string;
8
9
  title: string;
9
10
  isPolling?: boolean;
@@ -1,4 +1,5 @@
1
1
  import { BaseButtonProps } from "../ButtonV2/ButtonProps.type";
2
+ import { CenteredHeroProps } from "../CenteredHero/CenteredHero";
2
3
  import { TimelineStepProps } from "./TimelineStep";
3
4
  import { TimelineHeaderProps } from "./TimelineHeader";
4
5
  export interface TimelineProps {
@@ -6,6 +7,7 @@ export interface TimelineProps {
6
7
  steps: TimelineStepProps[];
7
8
  loadMoreButtonProps?: BaseButtonProps;
8
9
  dataTestId?: string;
10
+ emptyHeroProps?: CenteredHeroProps;
9
11
  }
10
- export declare const Timeline: ({ headerProps, steps, loadMoreButtonProps, dataTestId, }: TimelineProps) => JSX.Element;
12
+ export declare const Timeline: ({ headerProps, steps, loadMoreButtonProps, dataTestId, emptyHeroProps, }: TimelineProps) => JSX.Element;
11
13
  export default Timeline;
package/dist/index.d.ts CHANGED
@@ -56,7 +56,7 @@ export { Steps } from "./components/Steps/Steps";
56
56
  export { default as Switcher } from "./components/Switcher/Switcher";
57
57
  export { ImagePicker, TargetProps } from "./components/ImagePicker/ImagePicker";
58
58
  export { default as Tabbar, TabbarProps, TabItemDetails, } from "./components/Tabbar/Tabbar";
59
- export { Breadcrumbs, BreadcrumbProps, } from "./components/Breadcrumbs/Breadcrumbs";
59
+ export { Breadcrumbs, BreadcrumbProps } from "./components/Breadcrumbs";
60
60
  export { PageHeader, PageHeaderProps } from "./components/PageHeader";
61
61
  export { default as TabLinks } from "./components/TabLinks/TabLinks";
62
62
  export { default as Tag } from "./components/Tag/Tag";
@@ -6545,29 +6545,90 @@ var Steps = function Steps(_ref) {
6545
6545
  }, renderedSteps);
6546
6546
  };
6547
6547
 
6548
+ var isBreadcrumbDividerProps = function isBreadcrumbDividerProps(subject) {
6549
+ if (typeof subject !== "object" || typeof subject === null) {
6550
+ return false;
6551
+ }
6552
+
6553
+ var possibleSubject = subject;
6554
+ return typeof possibleSubject.onClick === "function" && Array.isArray(possibleSubject.truncatedCrumbs);
6555
+ };
6556
+
6557
+ var BreadcrumbItem = function BreadcrumbItem(_ref) {
6558
+ var name = _ref.name,
6559
+ link = _ref.link;
6560
+ return /*#__PURE__*/React__default.createElement("li", {
6561
+ className: "flex flex-row items-center slash-split"
6562
+ }, link ? /*#__PURE__*/React__default.createElement(router.Link, {
6563
+ to: link
6564
+ }, /*#__PURE__*/React__default.createElement(Text, {
6565
+ text: name,
6566
+ color: "blue-800"
6567
+ })) : /*#__PURE__*/React__default.createElement(Text, {
6568
+ text: name,
6569
+ type: "strong"
6570
+ }));
6571
+ };
6572
+ var BreadcrumbDividerItem = function BreadcrumbDividerItem(_ref2) {
6573
+ var onClick = _ref2.onClick,
6574
+ truncatedCrumbs = _ref2.truncatedCrumbs;
6575
+ return /*#__PURE__*/React__default.createElement("li", {
6576
+ className: "flex flex-row items-center slash-split"
6577
+ }, /*#__PURE__*/React__default.createElement("button", {
6578
+ onClick: onClick,
6579
+ title: truncatedCrumbs.map(function (crumb) {
6580
+ return crumb.name;
6581
+ }).join(" / "),
6582
+ className: "px-1"
6583
+ }, /*#__PURE__*/React__default.createElement(Text, {
6584
+ text: "\u2026",
6585
+ color: "blue-800",
6586
+ type: "strong"
6587
+ })));
6588
+ };
6589
+
6548
6590
  var Breadcrumbs = function Breadcrumbs(_ref) {
6549
- var crumbs = _ref.crumbs;
6550
- var breadcrumbItems = crumbs.map(function (_ref2) {
6551
- var name = _ref2.name,
6552
- link = _ref2.link,
6553
- key = _ref2.key;
6554
- return /*#__PURE__*/React__default.createElement("li", {
6555
- key: key || name,
6556
- className: "flex flex-row items-center slash-split "
6557
- }, link ? /*#__PURE__*/React__default.createElement(router.Link, {
6558
- to: link
6559
- }, /*#__PURE__*/React__default.createElement(Text, {
6560
- text: name,
6561
- color: "blue-800"
6562
- })) : /*#__PURE__*/React__default.createElement(Text, {
6563
- text: name,
6564
- type: "strong"
6565
- }));
6566
- });
6591
+ var crumbs = _ref.crumbs,
6592
+ _ref$truncateAfter = _ref.truncateAfter,
6593
+ truncateAfter = _ref$truncateAfter === void 0 ? Infinity : _ref$truncateAfter;
6594
+ var head = crumbs[0],
6595
+ tail = crumbs.slice(1);
6596
+
6597
+ var _useState = React.useState(tail.length > truncateAfter),
6598
+ isTruncated = _useState[0],
6599
+ setIsTruncated = _useState[1];
6600
+
6601
+ var truncatedCrumbs = [];
6602
+
6603
+ if (isTruncated) {
6604
+ while (tail.length > truncateAfter) {
6605
+ var shiftedCrumb = tail.shift();
6606
+
6607
+ if (shiftedCrumb) {
6608
+ truncatedCrumbs.push(shiftedCrumb);
6609
+ }
6610
+ }
6611
+ }
6612
+
6613
+ var dividerProps = {
6614
+ onClick: function onClick() {
6615
+ return setIsTruncated(false);
6616
+ },
6617
+ truncatedCrumbs: truncatedCrumbs
6618
+ };
6619
+ var crumbsAndDivider = [head, dividerProps].concat(tail);
6567
6620
  return /*#__PURE__*/React__default.createElement("ul", {
6568
6621
  "data-test-id": "breadcrumbs",
6569
6622
  className: "flex flex-row items-center space-x-2 "
6570
- }, breadcrumbItems);
6623
+ }, (isTruncated ? crumbsAndDivider : crumbs).map(function (crumbOrDividerProps) {
6624
+ return isBreadcrumbDividerProps(crumbOrDividerProps) ? /*#__PURE__*/React__default.createElement(BreadcrumbDividerItem, _extends({
6625
+ key: "divider-" + truncatedCrumbs.map(function (crumb) {
6626
+ return crumb.name;
6627
+ }).join("-")
6628
+ }, crumbOrDividerProps)) : /*#__PURE__*/React__default.createElement(BreadcrumbItem, _extends({
6629
+ key: crumbOrDividerProps.key || crumbOrDividerProps.name
6630
+ }, crumbOrDividerProps));
6631
+ }));
6571
6632
  };
6572
6633
 
6573
6634
  var TabbarItem = function TabbarItem(_ref) {
@@ -6662,7 +6723,8 @@ var PageHeader = function PageHeader(_ref) {
6662
6723
  isPolling = _ref.isPolling,
6663
6724
  title = _ref.title,
6664
6725
  contained = _ref.contained,
6665
- className = _ref.className;
6726
+ className = _ref.className,
6727
+ truncateBreadcrumbsAfter = _ref.truncateBreadcrumbsAfter;
6666
6728
  var withContained = {
6667
6729
  "max-w-3xl m-auto": contained
6668
6730
  };
@@ -6674,7 +6736,8 @@ var PageHeader = function PageHeader(_ref) {
6674
6736
  }, !!(breadcrumbs != null && breadcrumbs.length) && /*#__PURE__*/React__default.createElement("div", {
6675
6737
  className: classNames("mb-4 space-y-4", withContained)
6676
6738
  }, /*#__PURE__*/React__default.createElement(Breadcrumbs, {
6677
- crumbs: breadcrumbs
6739
+ crumbs: breadcrumbs,
6740
+ truncateAfter: truncateBreadcrumbsAfter
6678
6741
  }), /*#__PURE__*/React__default.createElement("div", {
6679
6742
  className: "mb-4 border-b border-slate-100"
6680
6743
  })), /*#__PURE__*/React__default.createElement("div", {
@@ -7963,7 +8026,8 @@ var TimelineStep = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) {
7963
8026
  var TimelineHeader = function TimelineHeader(_ref) {
7964
8027
  var title = _ref.title,
7965
8028
  buttons = _ref.buttons,
7966
- withBorder = _ref.withBorder;
8029
+ _ref$withBorder = _ref.withBorder,
8030
+ withBorder = _ref$withBorder === void 0 ? true : _ref$withBorder;
7967
8031
  var hasButtons = buttons && buttons.length > 0;
7968
8032
  var className = classNames("flex flex-row items-center space-x-4 rounded-t px-4", {
7969
8033
  "py-4": !hasButtons,
@@ -7994,11 +8058,15 @@ var Timeline = function Timeline(_ref) {
7994
8058
  steps = _ref.steps,
7995
8059
  loadMoreButtonProps = _ref.loadMoreButtonProps,
7996
8060
  _ref$dataTestId = _ref.dataTestId,
7997
- dataTestId = _ref$dataTestId === void 0 ? "timeline" : _ref$dataTestId;
8061
+ dataTestId = _ref$dataTestId === void 0 ? "timeline" : _ref$dataTestId,
8062
+ emptyHeroProps = _ref.emptyHeroProps;
8063
+ var isEmptyTimeline = !steps || steps.length === 0;
7998
8064
  return /*#__PURE__*/React__default.createElement("div", {
7999
8065
  className: "bg-white rounded-xl",
8000
8066
  "data-test-id": dataTestId
8001
- }, headerProps && /*#__PURE__*/React__default.createElement(TimelineHeader, _extends({}, headerProps)), /*#__PURE__*/React__default.createElement("div", {
8067
+ }, headerProps && /*#__PURE__*/React__default.createElement(TimelineHeader, _extends({}, headerProps)), isEmptyTimeline && emptyHeroProps && /*#__PURE__*/React__default.createElement(CenteredHero, _extends({
8068
+ background: "white"
8069
+ }, emptyHeroProps)), !isEmptyTimeline && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
8002
8070
  className: classNames("px-4 pb-4", {
8003
8071
  "pt-4": !headerProps
8004
8072
  })
@@ -8006,7 +8074,7 @@ var Timeline = function Timeline(_ref) {
8006
8074
  return /*#__PURE__*/React__default.createElement(TimelineStep, _extends({}, step));
8007
8075
  })), loadMoreButtonProps && /*#__PURE__*/React__default.createElement("div", {
8008
8076
  className: "text-center border-t py-6"
8009
- }, /*#__PURE__*/React__default.createElement(SecondaryButton, _extends({}, loadMoreButtonProps))));
8077
+ }, /*#__PURE__*/React__default.createElement(SecondaryButton, _extends({}, loadMoreButtonProps)))));
8010
8078
  };
8011
8079
 
8012
8080
  var _excluded$t = ["titleProps", "title", "titleAccessory", "contentProps", "content", "defaultContent", "className", "buttons"];