@phillips/seldon 1.76.0 → 1.77.1

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.
@@ -1,111 +1,112 @@
1
- import { jsxs as g, jsx as o, Fragment as f } from "react/jsx-runtime";
2
- import { getCommonProps as v } from "../../utils/index.js";
3
- import $ from "../../assets/plus.svg.js";
4
- import I from "../../assets/minus.svg.js";
5
- import _ from "../../assets/lock.svg.js";
6
- import d from "../../node_modules/classnames/index.js";
7
- import { Item as C, Trigger as x, Content as N } from "../../node_modules/@radix-ui/react-accordion/dist/index.js";
1
+ import { jsxs as $, jsx as t } from "react/jsx-runtime";
2
+ import { getCommonProps as f } from "../../utils/index.js";
3
+ import g from "../../assets/plus.svg.js";
4
+ import v from "../../assets/minus.svg.js";
5
+ import I from "../../assets/lock.svg.js";
6
+ import a from "../../node_modules/classnames/index.js";
7
+ import { Item as _, Trigger as x, Content as C } from "../../node_modules/@radix-ui/react-accordion/dist/index.js";
8
8
  import { AccordionItemVariant as h } from "./types.js";
9
9
  import { getIconClasses as u } from "./utils.js";
10
10
  const A = ({
11
11
  children: n,
12
- className: s,
13
- baseClassName: t,
14
- disable: c,
15
- isLargeVariation: e,
16
- id: r
12
+ className: e,
13
+ baseClassName: o,
14
+ disable: s,
15
+ isLargeVariation: r,
16
+ id: c
17
17
  }) => {
18
- const i = c, l = /* @__PURE__ */ o("div", { children: /* @__PURE__ */ o(
19
- _,
18
+ const i = s, l = /* @__PURE__ */ t("div", { children: /* @__PURE__ */ t(
19
+ I,
20
20
  {
21
- className: u(t, e, "lock"),
22
- "data-testid": `${r}-lockedIcon`,
21
+ className: u(o, r, "lock"),
22
+ "data-testid": `${c}-lockedIcon`,
23
23
  "aria-hidden": !0
24
24
  }
25
- ) }), p = /* @__PURE__ */ o("div", { children: /* @__PURE__ */ o(
26
- $,
25
+ ) }), p = /* @__PURE__ */ t("div", { children: /* @__PURE__ */ t(
26
+ g,
27
27
  {
28
- className: u(t, e, "plus"),
29
- "data-testid": `${r}-plusIcon`,
28
+ className: u(o, r, "plus"),
29
+ "data-testid": `${c}-plusIcon`,
30
30
  "aria-hidden": !0
31
31
  }
32
- ) }), a = /* @__PURE__ */ o("div", { children: /* @__PURE__ */ o(
33
- I,
32
+ ) }), d = /* @__PURE__ */ t("div", { children: /* @__PURE__ */ t(
33
+ v,
34
34
  {
35
- className: u(t, e, "minus"),
36
- "data-testid": `${r}-minusIcon`,
35
+ className: u(o, r, "minus"),
36
+ "data-testid": `${c}-minusIcon`,
37
37
  "aria-hidden": !0
38
38
  }
39
39
  ) });
40
- return /* @__PURE__ */ o(
40
+ return /* @__PURE__ */ t(
41
41
  x,
42
42
  {
43
- "data-disabled": c,
43
+ "data-disabled": s,
44
44
  asChild: !0,
45
- className: d(t, { [`${t}--hoverable`]: !c }, s),
46
- children: /* @__PURE__ */ g("div", { "data-testid": `${r}-trigger`, children: [
47
- /* @__PURE__ */ o("div", { className: d(`${t}__text`, { [`${t}__text--lg`]: e }), children: n }),
45
+ className: a(o, { [`${o}--hoverable`]: !s }, e),
46
+ children: /* @__PURE__ */ $("div", { "data-testid": `${c}-trigger`, children: [
47
+ /* @__PURE__ */ t("div", { className: a(`${o}__text`, { [`${o}__text--lg`]: r }), children: n }),
48
48
  i && l,
49
49
  !i && p,
50
- !i && a
50
+ !i && d
51
51
  ] })
52
52
  }
53
53
  );
54
- }, k = ({
54
+ }, N = ({
55
55
  children: n,
56
- baseClassName: s,
57
- disable: t,
58
- hasTransition: c,
59
- isLargeVariation: e,
60
- className: r
61
- }) => /* @__PURE__ */ o(f, { children: t && n ? /* @__PURE__ */ o("div", { children: n }) : /* @__PURE__ */ o(
62
- N,
56
+ baseClassName: e,
57
+ disable: o,
58
+ hasTransition: s,
59
+ isLargeVariation: r,
60
+ className: c
61
+ }) => o && n ? /* @__PURE__ */ t("div", { children: n }) : /* @__PURE__ */ t(
62
+ C,
63
63
  {
64
64
  asChild: !0,
65
- className: d(
66
- { [`${s}__content--lg`]: e },
67
- { [`${s}--transition`]: c },
68
- r
65
+ className: a(
66
+ `${e}__content`,
67
+ { [`${e}__content--lg`]: r },
68
+ { [`${e}--transition`]: s },
69
+ c
69
70
  ),
70
71
  children: n
71
72
  }
72
- ) }), q = ({
73
+ ), q = ({
73
74
  isLocked: n = !1,
74
- variant: s = h.sm,
75
- id: t,
76
- label: c,
77
- isLastItem: e,
78
- hasTransition: r = !1,
75
+ variant: e = h.sm,
76
+ id: o,
77
+ label: s,
78
+ isLastItem: r,
79
+ hasTransition: c = !1,
79
80
  children: i,
80
81
  ...l
81
82
  }) => {
82
- const { className: p } = v({ id: t }, "Accordion"), a = s === h.lg, m = `${p}-item`;
83
- return /* @__PURE__ */ g(
84
- C,
83
+ const { className: p } = f({ id: o }, "Accordion"), d = e === h.lg, m = `${p}-item`;
84
+ return /* @__PURE__ */ $(
85
+ _,
85
86
  {
86
87
  disabled: n,
87
- value: t,
88
- className: d(m, { [`${m}__border-bottom`]: !e }),
88
+ value: o,
89
+ className: a(m, { [`${m}__border-bottom`]: !r }),
89
90
  ...l,
90
91
  children: [
91
- /* @__PURE__ */ o(
92
+ /* @__PURE__ */ t(
92
93
  A,
93
94
  {
94
95
  disable: n,
95
- isLargeVariation: a,
96
- id: t,
96
+ isLargeVariation: d,
97
+ id: o,
97
98
  baseClassName: `${m}-label`,
98
- children: c
99
+ children: s
99
100
  }
100
101
  ),
101
- /* @__PURE__ */ o(
102
- k,
102
+ /* @__PURE__ */ t(
103
+ N,
103
104
  {
104
105
  disable: n,
105
- hasTransition: r,
106
- isLargeVariation: a,
106
+ hasTransition: c,
107
+ isLargeVariation: d,
107
108
  baseClassName: m,
108
- children: /* @__PURE__ */ o("div", { className: "radix-accordion-content", children: i })
109
+ children: /* @__PURE__ */ t("div", { className: "radix-accordion-content", children: i })
109
110
  }
110
111
  )
111
112
  ]
@@ -0,0 +1,25 @@
1
+ import { ComponentProps } from 'react';
2
+ export interface TabTriggerProps extends ComponentProps<'div'> {
3
+ /**
4
+ * Value corresponding to the tab
5
+ */
6
+ value: string;
7
+ /**
8
+ * Optional onClick handler
9
+ * @param value
10
+ * @returns
11
+ */
12
+ onTabClick?: (value: string) => void;
13
+ /**
14
+ * Tab label
15
+ */
16
+ children?: React.ReactNode;
17
+ }
18
+ /**
19
+ * TabTrigger component that serves as the clickable tab.
20
+ *
21
+ * @param {TabTriggerProps} props - The props for the TabTrigger component.
22
+ * @returns {JSX.Element} The rendered TabTrigger component.
23
+ */
24
+ declare const TabTrigger: import("react").ForwardRefExoticComponent<Omit<TabTriggerProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
25
+ export default TabTrigger;
@@ -0,0 +1,14 @@
1
+ import { jsx as i } from "react/jsx-runtime";
2
+ import { forwardRef as g } from "react";
3
+ import { getCommonProps as f } from "../../utils/index.js";
4
+ import { Trigger as n } from "../../node_modules/@radix-ui/react-tabs/dist/index.js";
5
+ const p = g(({ value: r, onTabClick: o, children: a, ...s }, e) => {
6
+ const m = () => {
7
+ o && o(r);
8
+ }, { className: t } = f(s, "TabsContainer");
9
+ return /* @__PURE__ */ i(n, { value: r, className: `${t}__tabs-trigger`, onClick: m, ref: e, children: a });
10
+ });
11
+ p.displayName = "TabTrigger";
12
+ export {
13
+ p as default
14
+ };
@@ -0,0 +1,47 @@
1
+ import { ComponentProps } from 'react';
2
+ export interface Tab {
3
+ /**
4
+ * button label
5
+ */
6
+ label: React.ReactNode;
7
+ /**
8
+ * Button value
9
+ */
10
+ value: string;
11
+ }
12
+ /**
13
+ * TabsContainer renders a tab interface allowing switching between different content.
14
+ *
15
+ * @param {TabsContainerProps} props - The component props containing an array of tabs.
16
+ * @returns {JSX.Element} The rendered tab component.
17
+ */
18
+ export interface TabsContainerProps extends ComponentProps<'div'> {
19
+ tabs: Tab[];
20
+ /**
21
+ * Specify the default tab
22
+ */
23
+ defaultValue?: string;
24
+ /**
25
+ * Aria-label for specific tab list view
26
+ */
27
+ tabListLabel?: string;
28
+ /**
29
+ * Optional handler when a tab is clicked
30
+ */
31
+ onTabClick?: (value: string) => void;
32
+ /**
33
+ * TabContent components will be passed here
34
+ */
35
+ children?: React.ReactNode;
36
+ }
37
+ /**
38
+ * ## Overview
39
+ *
40
+ * Overview of Tabs component
41
+ *
42
+ * [Figma Link](https://www.figma.com/file/hMu9IWH5N3KamJy8tLFdyV?type=design&node-id=10838%3A22184&mode=dev)
43
+ *
44
+ * [Storybook Link](https://phillips-seldon.netlify.app/?path=/docs/components-tabs--overview)
45
+ */
46
+ declare const TabsContainer: import("react").ForwardRefExoticComponent<Omit<TabsContainerProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
47
+ export default TabsContainer;
@@ -0,0 +1,42 @@
1
+ import { jsxs as o, jsx as r } from "react/jsx-runtime";
2
+ import { forwardRef as d } from "react";
3
+ import { getCommonProps as u } from "../../utils/index.js";
4
+ import b from "../../node_modules/classnames/index.js";
5
+ import { Root as T, List as N } from "../../node_modules/@radix-ui/react-tabs/dist/index.js";
6
+ import g from "./TabTrigger.js";
7
+ import { TextVariants as v } from "../Text/types.js";
8
+ import _ from "../Text/Text.js";
9
+ const x = d(
10
+ ({ className: l, tabs: s = [], tabListLabel: m = "Sale Page Tabs", children: t, defaultValue: i, onTabClick: n, ...c }, f) => {
11
+ const { className: a, ...p } = u(c, "TabsContainer");
12
+ return /* @__PURE__ */ o(
13
+ T,
14
+ {
15
+ defaultValue: i || s[0].value,
16
+ ...p,
17
+ className: b(`${a}`, l),
18
+ ref: f,
19
+ children: [
20
+ /* @__PURE__ */ o(N, { "aria-label": m, className: `${a}__tabs-list`, children: [
21
+ s.map((e) => /* @__PURE__ */ r(
22
+ g,
23
+ {
24
+ value: e.value,
25
+ className: `${a}__tabs-trigger`,
26
+ onTabClick: n,
27
+ children: /* @__PURE__ */ r(_, { variant: v.label, children: e.label })
28
+ },
29
+ e.value
30
+ )),
31
+ /* @__PURE__ */ r("div", { className: `${a}__full-bleed-underline` })
32
+ ] }),
33
+ t
34
+ ]
35
+ }
36
+ );
37
+ }
38
+ );
39
+ x.displayName = "TabsContainer";
40
+ export {
41
+ x as default
42
+ };
@@ -0,0 +1,23 @@
1
+ import { ComponentProps } from 'react';
2
+ export interface TabContentProps extends ComponentProps<'div'> {
3
+ /**
4
+ * The value that corresponds to the Trigger
5
+ */
6
+ value: string;
7
+ /**
8
+ * Content to be displayed when this tab is active
9
+ */
10
+ children: React.ReactNode;
11
+ /**
12
+ * The className for the Tab content container.
13
+ */
14
+ containerClassName?: string;
15
+ }
16
+ /**
17
+ * TabContent component renders the content for a specific tab.
18
+ *
19
+ * @param {TabContentProps} props - The props for the TabContent component.
20
+ * @returns {JSX.Element} The rendered TabContent component.
21
+ */
22
+ declare const TabsContent: import("react").ForwardRefExoticComponent<Omit<TabContentProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
23
+ export default TabsContent;
@@ -0,0 +1,26 @@
1
+ import { jsx as n } from "react/jsx-runtime";
2
+ import { Content as i } from "../../node_modules/@radix-ui/react-tabs/dist/index.js";
3
+ import { forwardRef as p } from "react";
4
+ import { getCommonProps as c } from "../../utils/index.js";
5
+ import f from "../../node_modules/classnames/index.js";
6
+ const l = p(
7
+ ({ className: b, value: o, containerClassName: a, children: s, ...t }, e) => {
8
+ const { className: m, ...r } = c(t, "TabsContainer");
9
+ return /* @__PURE__ */ n(
10
+ i,
11
+ {
12
+ value: o,
13
+ className: f(`${m}__tabs-content`, a),
14
+ ...r,
15
+ ref: e,
16
+ tabIndex: -1,
17
+ "aria-hidden": !0,
18
+ children: s
19
+ }
20
+ );
21
+ }
22
+ );
23
+ l.displayName = "TabsContent";
24
+ export {
25
+ l as default
26
+ };
@@ -0,0 +1,2 @@
1
+ export { default as TabsContainer, type TabsContainerProps } from './TabsContainer';
2
+ export { default as TabsContent, type TabContentProps } from './TabsContent';
package/dist/index.d.ts CHANGED
@@ -49,5 +49,6 @@ export * from './components/Carousel';
49
49
  export * from './components/Detail';
50
50
  export * from './patterns/DetailList';
51
51
  export * from './components/PinchZoom';
52
+ export * from './components/Tabs';
52
53
  export * from './components/SeldonImage';
53
54
  export * from './patterns/SaleHeaderBanner';
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { PaddingTokens as f, SpacingTokens as l, defaultYear as m, emailValidation as s, encodeURLSearchParams as p, findChildrenExcludingTypes as d, findChildrenOfType as u, generatePaddingClassName as n, getCommonProps as i, noOp as x, px as g, useNormalizedInputProps as c } from "./utils/index.js";
1
+ import { PaddingTokens as f, SpacingTokens as l, defaultYear as s, emailValidation as m, encodeURLSearchParams as p, findChildrenExcludingTypes as d, findChildrenOfType as u, generatePaddingClassName as n, getCommonProps as x, noOp as i, px as g, useNormalizedInputProps as c } from "./utils/index.js";
2
2
  import { default as C } from "./pages/Page.js";
3
3
  import { default as P } from "./components/Button/Button.js";
4
- import { ButtonVariants as T } from "./components/Button/types.js";
5
- import { default as b } from "./components/IconButton/IconButton.js";
4
+ import { ButtonVariants as b } from "./components/Button/types.js";
5
+ import { default as V } from "./components/IconButton/IconButton.js";
6
6
  import { default as B } from "./components/ErrorBoundary/ErrorBoundary.js";
7
7
  import { default as w } from "./site-furniture/Footer/Footer.js";
8
8
  import { Grid as D } from "./components/Grid/Grid.js";
@@ -18,18 +18,18 @@ import { LinkVariants as J } from "./components/Link/types.js";
18
18
  import { default as Q } from "./components/LinkBlock/LinkBlock.js";
19
19
  import { default as _ } from "./components/LinkList/LinkList.js";
20
20
  import { default as ee } from "./components/Row/Row.js";
21
- import { default as re } from "./components/GridItem/GridItem.js";
21
+ import { default as te } from "./components/GridItem/GridItem.js";
22
22
  import { GridItemAlign as ae } from "./components/GridItem/types.js";
23
23
  import { default as le } from "./components/Search/Search.js";
24
- import { default as se } from "./components/Select/Select.js";
24
+ import { default as me } from "./components/Select/Select.js";
25
25
  import { default as de } from "./components/SplitPanel/SplitPanel.js";
26
26
  import { default as ne } from "./patterns/Subscribe/Subscribe.js";
27
- import { SubscriptionState as xe } from "./patterns/Subscribe/types.js";
27
+ import { SubscriptionState as ie } from "./patterns/Subscribe/types.js";
28
28
  import { default as ce } from "./patterns/Social/Social.js";
29
29
  import { default as Ce } from "./patterns/ViewingsList/ViewingsList.js";
30
30
  import { default as Pe } from "./components/Modal/Modal.js";
31
- import { default as Te } from "./components/Drawer/Drawer.js";
32
- import { default as be } from "./components/Pagination/Pagination.js";
31
+ import { default as be } from "./components/Drawer/Drawer.js";
32
+ import { default as Ve } from "./components/Pagination/Pagination.js";
33
33
  import { default as Be } from "./patterns/ViewingsList/StatefulViewingsList.js";
34
34
  import { TextVariants as we } from "./components/Text/types.js";
35
35
  import { default as De } from "./components/Text/Text.js";
@@ -48,56 +48,58 @@ import "react";
48
48
  import { default as Xe } from "./components/Dropdown/Dropdown.js";
49
49
  import { default as $e } from "./components/Video/Video.js";
50
50
  import { default as oo } from "./patterns/LanguageSelector/LanguageSelector.js";
51
- import { default as to } from "./components/ContentPeek/ContentPeek.js";
51
+ import { default as ro } from "./components/ContentPeek/ContentPeek.js";
52
52
  import { default as fo } from "./components/Collapsible/Collapsible.js";
53
- import { default as mo } from "./components/Collapsible/CollapsibleContent.js";
53
+ import { default as so } from "./components/Collapsible/CollapsibleContent.js";
54
54
  import { default as po } from "./components/Collapsible/CollapsibleTrigger.js";
55
55
  import { SeldonProvider as no } from "./providers/SeldonProvider/SeldonProvider.js";
56
- import { default as xo } from "./components/PageContentWrapper/PageContentWrapper.js";
56
+ import { default as io } from "./components/PageContentWrapper/PageContentWrapper.js";
57
57
  import { default as co } from "./components/Carousel/Carousel.js";
58
58
  import { default as Co } from "./components/Carousel/CarouselContent.js";
59
59
  import { default as Po } from "./components/Carousel/CarouselItem.js";
60
- import { default as To } from "./components/Carousel/CarouselDots.js";
61
- import { default as bo } from "./components/Detail/Detail.js";
60
+ import { default as bo } from "./components/Carousel/CarouselDots.js";
61
+ import { default as Vo } from "./components/Detail/Detail.js";
62
62
  import { default as Bo } from "./patterns/DetailList/DetailList.js";
63
63
  import { DetailListAlignment as wo } from "./patterns/DetailList/types.js";
64
64
  import { default as Do } from "./components/PinchZoom/PinchZoom.js";
65
- import { default as vo } from "./components/SeldonImage/SeldonImage.js";
66
- import { default as Ho } from "./patterns/SaleHeaderBanner/SaleHeaderBanner.js";
67
- import { default as Eo } from "./patterns/SaleHeaderBanner/SaleHeaderBrowseAuctions.js";
68
- import { default as Oo } from "./patterns/SaleHeaderBanner/SaleHeaderCountdown.js";
69
- import { AuctionState as Uo } from "./patterns/SaleHeaderBanner/types.js";
65
+ import { default as vo } from "./components/Tabs/TabsContainer.js";
66
+ import { default as Ho } from "./components/Tabs/TabsContent.js";
67
+ import { default as Eo } from "./components/SeldonImage/SeldonImage.js";
68
+ import { default as Oo } from "./patterns/SaleHeaderBanner/SaleHeaderBanner.js";
69
+ import { default as Uo } from "./patterns/SaleHeaderBanner/SaleHeaderBrowseAuctions.js";
70
+ import { default as Fo } from "./patterns/SaleHeaderBanner/SaleHeaderCountdown.js";
71
+ import { AuctionState as Yo } from "./patterns/SaleHeaderBanner/types.js";
70
72
  export {
71
73
  Ee as Accordion,
72
74
  Oe as AccordionItem,
73
75
  Ue as AccordionItemVariant,
74
76
  ze as AccordionVariants,
75
- Uo as AuctionState,
77
+ Yo as AuctionState,
76
78
  Ze as AuthState,
77
79
  Ke as Breadcrumb,
78
80
  P as Button,
79
- T as ButtonVariants,
81
+ b as ButtonVariants,
80
82
  co as Carousel,
81
83
  Co as CarouselContent,
82
- To as CarouselDots,
84
+ bo as CarouselDots,
83
85
  Po as CarouselItem,
84
86
  fo as Collapsible,
85
- mo as CollapsibleContent,
87
+ so as CollapsibleContent,
86
88
  po as CollapsibleTrigger,
87
- to as ContentPeek,
88
- bo as Detail,
89
+ ro as ContentPeek,
90
+ Vo as Detail,
89
91
  Bo as DetailList,
90
92
  wo as DetailListAlignment,
91
- Te as Drawer,
93
+ be as Drawer,
92
94
  Xe as Dropdown,
93
95
  B as ErrorBoundary,
94
96
  w as Footer,
95
97
  D as Grid,
96
- re as GridItem,
98
+ te as GridItem,
97
99
  ae as GridItemAlign,
98
100
  v as Header,
99
101
  F as HeroBanner,
100
- b as IconButton,
102
+ V as IconButton,
101
103
  Y as Input,
102
104
  oo as LanguageSelector,
103
105
  j as Link,
@@ -111,24 +113,26 @@ export {
111
113
  U as NavigationList,
112
114
  f as PaddingTokens,
113
115
  C as Page,
114
- xo as PageContentWrapper,
115
- be as Pagination,
116
+ io as PageContentWrapper,
117
+ Ve as Pagination,
116
118
  Do as PinchZoom,
117
119
  ee as Row,
118
- Ho as SaleHeaderBanner,
119
- Eo as SaleHeaderBrowseAuctions,
120
- Oo as SaleHeaderCountdown,
120
+ Oo as SaleHeaderBanner,
121
+ Uo as SaleHeaderBrowseAuctions,
122
+ Fo as SaleHeaderCountdown,
121
123
  le as Search,
122
- vo as SeldonImage,
124
+ Eo as SeldonImage,
123
125
  no as SeldonProvider,
124
- se as Select,
126
+ me as Select,
125
127
  ce as Social,
126
128
  l as SpacingTokens,
127
129
  de as SplitPanel,
128
130
  Be as StatefulViewingsList,
129
131
  ne as Subscribe,
130
- xe as SubscriptionState,
132
+ ie as SubscriptionState,
131
133
  qe as SupportedLanguages,
134
+ vo as TabsContainer,
135
+ Ho as TabsContent,
132
136
  De as Text,
133
137
  ve as TextSymbolVariants,
134
138
  He as TextSymbols,
@@ -136,14 +140,14 @@ export {
136
140
  We as UserManagement,
137
141
  $e as Video,
138
142
  Ce as ViewingsList,
139
- m as defaultYear,
140
- s as emailValidation,
143
+ s as defaultYear,
144
+ m as emailValidation,
141
145
  p as encodeURLSearchParams,
142
146
  d as findChildrenExcludingTypes,
143
147
  u as findChildrenOfType,
144
148
  n as generatePaddingClassName,
145
- i as getCommonProps,
146
- x as noOp,
149
+ x as getCommonProps,
150
+ i as noOp,
147
151
  g as px,
148
152
  c as useNormalizedInputProps
149
153
  };
@@ -0,0 +1,180 @@
1
+ import * as s from "react";
2
+ import { composeEventHandlers as p } from "../../primitive/dist/index.js";
3
+ import { createCollection as V } from "../../react-collection/dist/index.js";
4
+ import { useComposedRefs as j } from "../../react-compose-refs/dist/index.js";
5
+ import { createContextScope as z } from "../../react-context/dist/index.js";
6
+ import { useId as q } from "../../react-id/dist/index.js";
7
+ import { Primitive as x } from "../../react-primitive/dist/index.js";
8
+ import { useCallbackRef as J } from "../../react-use-callback-ref/dist/index.js";
9
+ import { useControllableState as Q } from "../../react-use-controllable-state/dist/index.js";
10
+ import { useDirection as W } from "../../react-direction/dist/index.js";
11
+ import { jsx as d } from "react/jsx-runtime";
12
+ var h = "rovingFocusGroup.onEntryFocus", X = { bubbles: !1, cancelable: !0 }, b = "RovingFocusGroup", [y, G, Z] = V(b), [$, Fe] = z(
13
+ b,
14
+ [Z]
15
+ ), [ee, oe] = $(b), N = s.forwardRef(
16
+ (e, r) => /* @__PURE__ */ d(y.Provider, { scope: e.__scopeRovingFocusGroup, children: /* @__PURE__ */ d(y.Slot, { scope: e.__scopeRovingFocusGroup, children: /* @__PURE__ */ d(te, { ...e, ref: r }) }) })
17
+ );
18
+ N.displayName = b;
19
+ var te = s.forwardRef((e, r) => {
20
+ const {
21
+ __scopeRovingFocusGroup: c,
22
+ orientation: o,
23
+ loop: F = !1,
24
+ dir: g,
25
+ currentTabStopId: R,
26
+ defaultCurrentTabStopId: E,
27
+ onCurrentTabStopIdChange: m,
28
+ onEntryFocus: u,
29
+ preventScrollOnEntryFocus: w = !1,
30
+ ...C
31
+ } = e, v = s.useRef(null), I = j(r, v), t = W(g), [f = null, T] = Q({
32
+ prop: R,
33
+ defaultProp: E,
34
+ onChange: m
35
+ }), [a, i] = s.useState(!1), S = J(u), k = G(c), A = s.useRef(!1), [L, D] = s.useState(0);
36
+ return s.useEffect(() => {
37
+ const n = v.current;
38
+ if (n)
39
+ return n.addEventListener(h, S), () => n.removeEventListener(h, S);
40
+ }, [S]), /* @__PURE__ */ d(
41
+ ee,
42
+ {
43
+ scope: c,
44
+ orientation: o,
45
+ dir: t,
46
+ loop: F,
47
+ currentTabStopId: f,
48
+ onItemFocus: s.useCallback(
49
+ (n) => T(n),
50
+ [T]
51
+ ),
52
+ onItemShiftTab: s.useCallback(() => i(!0), []),
53
+ onFocusableItemAdd: s.useCallback(
54
+ () => D((n) => n + 1),
55
+ []
56
+ ),
57
+ onFocusableItemRemove: s.useCallback(
58
+ () => D((n) => n - 1),
59
+ []
60
+ ),
61
+ children: /* @__PURE__ */ d(
62
+ x.div,
63
+ {
64
+ tabIndex: a || L === 0 ? -1 : 0,
65
+ "data-orientation": o,
66
+ ...C,
67
+ ref: I,
68
+ style: { outline: "none", ...e.style },
69
+ onMouseDown: p(e.onMouseDown, () => {
70
+ A.current = !0;
71
+ }),
72
+ onFocus: p(e.onFocus, (n) => {
73
+ const U = !A.current;
74
+ if (n.target === n.currentTarget && U && !a) {
75
+ const P = new CustomEvent(h, X);
76
+ if (n.currentTarget.dispatchEvent(P), !P.defaultPrevented) {
77
+ const _ = k().filter((l) => l.focusable), B = _.find((l) => l.active), Y = _.find((l) => l.id === f), H = [B, Y, ..._].filter(
78
+ Boolean
79
+ ).map((l) => l.ref.current);
80
+ M(H, w);
81
+ }
82
+ }
83
+ A.current = !1;
84
+ }),
85
+ onBlur: p(e.onBlur, () => i(!1))
86
+ }
87
+ )
88
+ }
89
+ );
90
+ }), O = "RovingFocusGroupItem", K = s.forwardRef(
91
+ (e, r) => {
92
+ const {
93
+ __scopeRovingFocusGroup: c,
94
+ focusable: o = !0,
95
+ active: F = !1,
96
+ tabStopId: g,
97
+ ...R
98
+ } = e, E = q(), m = g || E, u = oe(O, c), w = u.currentTabStopId === m, C = G(c), { onFocusableItemAdd: v, onFocusableItemRemove: I } = u;
99
+ return s.useEffect(() => {
100
+ if (o)
101
+ return v(), () => I();
102
+ }, [o, v, I]), /* @__PURE__ */ d(
103
+ y.ItemSlot,
104
+ {
105
+ scope: c,
106
+ id: m,
107
+ focusable: o,
108
+ active: F,
109
+ children: /* @__PURE__ */ d(
110
+ x.span,
111
+ {
112
+ tabIndex: w ? 0 : -1,
113
+ "data-orientation": u.orientation,
114
+ ...R,
115
+ ref: r,
116
+ onMouseDown: p(e.onMouseDown, (t) => {
117
+ o ? u.onItemFocus(m) : t.preventDefault();
118
+ }),
119
+ onFocus: p(e.onFocus, () => u.onItemFocus(m)),
120
+ onKeyDown: p(e.onKeyDown, (t) => {
121
+ if (t.key === "Tab" && t.shiftKey) {
122
+ u.onItemShiftTab();
123
+ return;
124
+ }
125
+ if (t.target !== t.currentTarget) return;
126
+ const f = se(t, u.orientation, u.dir);
127
+ if (f !== void 0) {
128
+ if (t.metaKey || t.ctrlKey || t.altKey || t.shiftKey) return;
129
+ t.preventDefault();
130
+ let a = C().filter((i) => i.focusable).map((i) => i.ref.current);
131
+ if (f === "last") a.reverse();
132
+ else if (f === "prev" || f === "next") {
133
+ f === "prev" && a.reverse();
134
+ const i = a.indexOf(t.currentTarget);
135
+ a = u.loop ? ce(a, i + 1) : a.slice(i + 1);
136
+ }
137
+ setTimeout(() => M(a));
138
+ }
139
+ })
140
+ }
141
+ )
142
+ }
143
+ );
144
+ }
145
+ );
146
+ K.displayName = O;
147
+ var re = {
148
+ ArrowLeft: "prev",
149
+ ArrowUp: "prev",
150
+ ArrowRight: "next",
151
+ ArrowDown: "next",
152
+ PageUp: "first",
153
+ Home: "first",
154
+ PageDown: "last",
155
+ End: "last"
156
+ };
157
+ function ne(e, r) {
158
+ return r !== "rtl" ? e : e === "ArrowLeft" ? "ArrowRight" : e === "ArrowRight" ? "ArrowLeft" : e;
159
+ }
160
+ function se(e, r, c) {
161
+ const o = ne(e.key, c);
162
+ if (!(r === "vertical" && ["ArrowLeft", "ArrowRight"].includes(o)) && !(r === "horizontal" && ["ArrowUp", "ArrowDown"].includes(o)))
163
+ return re[o];
164
+ }
165
+ function M(e, r = !1) {
166
+ const c = document.activeElement;
167
+ for (const o of e)
168
+ if (o === c || (o.focus({ preventScroll: r }), document.activeElement !== c)) return;
169
+ }
170
+ function ce(e, r) {
171
+ return e.map((c, o) => e[(r + o) % e.length]);
172
+ }
173
+ var ge = N, Re = K;
174
+ export {
175
+ Re as Item,
176
+ ge as Root,
177
+ N as RovingFocusGroup,
178
+ K as RovingFocusGroupItem,
179
+ Fe as createRovingFocusGroupScope
180
+ };
@@ -0,0 +1,163 @@
1
+ import * as v from "react";
2
+ import { composeEventHandlers as p } from "../../primitive/dist/index.js";
3
+ import { createContextScope as x } from "../node_modules/@radix-ui/react-context/dist/index.js";
4
+ import { createRovingFocusGroupScope as C, Root as E, Item as F } from "../../react-roving-focus/dist/index.js";
5
+ import { Presence as w } from "../node_modules/@radix-ui/react-presence/dist/index.js";
6
+ import { Primitive as b } from "../../react-primitive/dist/index.js";
7
+ import { useDirection as D } from "../../react-direction/dist/index.js";
8
+ import { useControllableState as V } from "../../react-use-controllable-state/dist/index.js";
9
+ import { useId as G } from "../../react-id/dist/index.js";
10
+ import { jsx as u } from "react/jsx-runtime";
11
+ var g = "Tabs", [L, Q] = x(g, [
12
+ C
13
+ ]), h = C(), [$, T] = L(g), I = v.forwardRef(
14
+ (e, r) => {
15
+ const {
16
+ __scopeTabs: s,
17
+ value: t,
18
+ onValueChange: n,
19
+ defaultValue: c,
20
+ orientation: o = "horizontal",
21
+ dir: d,
22
+ activationMode: f = "automatic",
23
+ ...m
24
+ } = e, i = D(d), [a, l] = V({
25
+ prop: t,
26
+ onChange: n,
27
+ defaultProp: c
28
+ });
29
+ return /* @__PURE__ */ u(
30
+ $,
31
+ {
32
+ scope: s,
33
+ baseId: G(),
34
+ value: a,
35
+ onValueChange: l,
36
+ orientation: o,
37
+ dir: i,
38
+ activationMode: f,
39
+ children: /* @__PURE__ */ u(
40
+ b.div,
41
+ {
42
+ dir: i,
43
+ "data-orientation": o,
44
+ ...m,
45
+ ref: r
46
+ }
47
+ )
48
+ }
49
+ );
50
+ }
51
+ );
52
+ I.displayName = g;
53
+ var R = "TabsList", _ = v.forwardRef(
54
+ (e, r) => {
55
+ const { __scopeTabs: s, loop: t = !0, ...n } = e, c = T(R, s), o = h(s);
56
+ return /* @__PURE__ */ u(
57
+ E,
58
+ {
59
+ asChild: !0,
60
+ ...o,
61
+ orientation: c.orientation,
62
+ dir: c.dir,
63
+ loop: t,
64
+ children: /* @__PURE__ */ u(
65
+ b.div,
66
+ {
67
+ role: "tablist",
68
+ "aria-orientation": c.orientation,
69
+ ...n,
70
+ ref: r
71
+ }
72
+ )
73
+ }
74
+ );
75
+ }
76
+ );
77
+ _.displayName = R;
78
+ var y = "TabsTrigger", A = v.forwardRef(
79
+ (e, r) => {
80
+ const { __scopeTabs: s, value: t, disabled: n = !1, ...c } = e, o = T(y, s), d = h(s), f = N(o.baseId, t), m = P(o.baseId, t), i = t === o.value;
81
+ return /* @__PURE__ */ u(
82
+ F,
83
+ {
84
+ asChild: !0,
85
+ ...d,
86
+ focusable: !n,
87
+ active: i,
88
+ children: /* @__PURE__ */ u(
89
+ b.button,
90
+ {
91
+ type: "button",
92
+ role: "tab",
93
+ "aria-selected": i,
94
+ "aria-controls": m,
95
+ "data-state": i ? "active" : "inactive",
96
+ "data-disabled": n ? "" : void 0,
97
+ disabled: n,
98
+ id: f,
99
+ ...c,
100
+ ref: r,
101
+ onMouseDown: p(e.onMouseDown, (a) => {
102
+ !n && a.button === 0 && a.ctrlKey === !1 ? o.onValueChange(t) : a.preventDefault();
103
+ }),
104
+ onKeyDown: p(e.onKeyDown, (a) => {
105
+ [" ", "Enter"].includes(a.key) && o.onValueChange(t);
106
+ }),
107
+ onFocus: p(e.onFocus, () => {
108
+ const a = o.activationMode !== "manual";
109
+ !i && !n && a && o.onValueChange(t);
110
+ })
111
+ }
112
+ )
113
+ }
114
+ );
115
+ }
116
+ );
117
+ A.displayName = y;
118
+ var S = "TabsContent", M = v.forwardRef(
119
+ (e, r) => {
120
+ const { __scopeTabs: s, value: t, forceMount: n, children: c, ...o } = e, d = T(S, s), f = N(d.baseId, t), m = P(d.baseId, t), i = t === d.value, a = v.useRef(i);
121
+ return v.useEffect(() => {
122
+ const l = requestAnimationFrame(() => a.current = !1);
123
+ return () => cancelAnimationFrame(l);
124
+ }, []), /* @__PURE__ */ u(w, { present: n || i, children: ({ present: l }) => /* @__PURE__ */ u(
125
+ b.div,
126
+ {
127
+ "data-state": i ? "active" : "inactive",
128
+ "data-orientation": d.orientation,
129
+ role: "tabpanel",
130
+ "aria-labelledby": f,
131
+ hidden: !l,
132
+ id: m,
133
+ tabIndex: 0,
134
+ ...o,
135
+ ref: r,
136
+ style: {
137
+ ...e.style,
138
+ animationDuration: a.current ? "0s" : void 0
139
+ },
140
+ children: l && c
141
+ }
142
+ ) });
143
+ }
144
+ );
145
+ M.displayName = S;
146
+ function N(e, r) {
147
+ return `${e}-trigger-${r}`;
148
+ }
149
+ function P(e, r) {
150
+ return `${e}-content-${r}`;
151
+ }
152
+ var U = I, W = _, X = A, Y = M;
153
+ export {
154
+ Y as Content,
155
+ W as List,
156
+ U as Root,
157
+ I as Tabs,
158
+ M as TabsContent,
159
+ _ as TabsList,
160
+ A as TabsTrigger,
161
+ X as Trigger,
162
+ Q as createTabsScope
163
+ };
@@ -0,0 +1,55 @@
1
+ import * as i from "react";
2
+ import { jsx as h } from "react/jsx-runtime";
3
+ function $(t, x = []) {
4
+ let o = [];
5
+ function C(u, e) {
6
+ const n = i.createContext(e), r = o.length;
7
+ o = [...o, e];
8
+ const m = (a) => {
9
+ var v;
10
+ const { scope: c, children: S, ...p } = a, f = ((v = c == null ? void 0 : c[t]) == null ? void 0 : v[r]) || n, _ = i.useMemo(() => p, Object.values(p));
11
+ return /* @__PURE__ */ h(f.Provider, { value: _, children: S });
12
+ };
13
+ m.displayName = u + "Provider";
14
+ function d(a, c) {
15
+ var f;
16
+ const S = ((f = c == null ? void 0 : c[t]) == null ? void 0 : f[r]) || n, p = i.useContext(S);
17
+ if (p) return p;
18
+ if (e !== void 0) return e;
19
+ throw new Error(`\`${a}\` must be used within \`${u}\``);
20
+ }
21
+ return [m, d];
22
+ }
23
+ const s = () => {
24
+ const u = o.map((e) => i.createContext(e));
25
+ return function(n) {
26
+ const r = (n == null ? void 0 : n[t]) || u;
27
+ return i.useMemo(
28
+ () => ({ [`__scope${t}`]: { ...n, [t]: r } }),
29
+ [n, r]
30
+ );
31
+ };
32
+ };
33
+ return s.scopeName = t, [C, l(s, ...x)];
34
+ }
35
+ function l(...t) {
36
+ const x = t[0];
37
+ if (t.length === 1) return x;
38
+ const o = () => {
39
+ const C = t.map((s) => ({
40
+ useScope: s(),
41
+ scopeName: s.scopeName
42
+ }));
43
+ return function(u) {
44
+ const e = C.reduce((n, { useScope: r, scopeName: m }) => {
45
+ const a = r(u)[`__scope${m}`];
46
+ return { ...n, ...a };
47
+ }, {});
48
+ return i.useMemo(() => ({ [`__scope${x.scopeName}`]: e }), [e]);
49
+ };
50
+ };
51
+ return o.scopeName = x.scopeName, o;
52
+ }
53
+ export {
54
+ $ as createContextScope
55
+ };
@@ -0,0 +1,75 @@
1
+ import * as a from "react";
2
+ import { useComposedRefs as E } from "../../../../../react-compose-refs/dist/index.js";
3
+ import { useLayoutEffect as M } from "../../../../../react-use-layout-effect/dist/index.js";
4
+ function T(n, e) {
5
+ return a.useReducer((r, t) => {
6
+ const o = e[r][t];
7
+ return o != null ? o : r;
8
+ }, n);
9
+ }
10
+ var R = (n) => {
11
+ const { present: e, children: r } = n, t = v(e), o = typeof r == "function" ? r({ present: t.isPresent }) : a.Children.only(r), c = E(t.ref, P(o));
12
+ return typeof r == "function" || t.isPresent ? a.cloneElement(o, { ref: c }) : null;
13
+ };
14
+ R.displayName = "Presence";
15
+ function v(n) {
16
+ const [e, r] = a.useState(), t = a.useRef({}), o = a.useRef(n), c = a.useRef("none"), A = n ? "mounted" : "unmounted", [N, s] = T(A, {
17
+ mounted: {
18
+ UNMOUNT: "unmounted",
19
+ ANIMATION_OUT: "unmountSuspended"
20
+ },
21
+ unmountSuspended: {
22
+ MOUNT: "mounted",
23
+ ANIMATION_END: "unmounted"
24
+ },
25
+ unmounted: {
26
+ MOUNT: "mounted"
27
+ }
28
+ });
29
+ return a.useEffect(() => {
30
+ const i = l(t.current);
31
+ c.current = N === "mounted" ? i : "none";
32
+ }, [N]), M(() => {
33
+ const i = t.current, m = o.current;
34
+ if (m !== n) {
35
+ const u = c.current, d = l(i);
36
+ n ? s("MOUNT") : d === "none" || (i == null ? void 0 : i.display) === "none" ? s("UNMOUNT") : s(m && u !== d ? "ANIMATION_OUT" : "UNMOUNT"), o.current = n;
37
+ }
38
+ }, [n, s]), M(() => {
39
+ var i;
40
+ if (e) {
41
+ let m;
42
+ const p = (i = e.ownerDocument.defaultView) != null ? i : window, u = (f) => {
43
+ const g = l(t.current).includes(f.animationName);
44
+ if (f.target === e && g && (s("ANIMATION_END"), !o.current)) {
45
+ const O = e.style.animationFillMode;
46
+ e.style.animationFillMode = "forwards", m = p.setTimeout(() => {
47
+ e.style.animationFillMode === "forwards" && (e.style.animationFillMode = O);
48
+ });
49
+ }
50
+ }, d = (f) => {
51
+ f.target === e && (c.current = l(t.current));
52
+ };
53
+ return e.addEventListener("animationstart", d), e.addEventListener("animationcancel", u), e.addEventListener("animationend", u), () => {
54
+ p.clearTimeout(m), e.removeEventListener("animationstart", d), e.removeEventListener("animationcancel", u), e.removeEventListener("animationend", u);
55
+ };
56
+ } else
57
+ s("ANIMATION_END");
58
+ }, [e, s]), {
59
+ isPresent: ["mounted", "unmountSuspended"].includes(N),
60
+ ref: a.useCallback((i) => {
61
+ i && (t.current = getComputedStyle(i)), r(i);
62
+ }, [])
63
+ };
64
+ }
65
+ function l(n) {
66
+ return (n == null ? void 0 : n.animationName) || "none";
67
+ }
68
+ function P(n) {
69
+ var t, o;
70
+ let e = (t = Object.getOwnPropertyDescriptor(n.props, "ref")) == null ? void 0 : t.get, r = e && "isReactWarning" in e && e.isReactWarning;
71
+ return r ? n.ref : (e = (o = Object.getOwnPropertyDescriptor(n, "ref")) == null ? void 0 : o.get, r = e && "isReactWarning" in e && e.isReactWarning, r ? n.props.ref : n.props.ref || n.ref);
72
+ }
73
+ export {
74
+ R as Presence
75
+ };
@@ -1,4 +1,4 @@
1
- import { __module as t } from "../../_virtual/index5.js";
1
+ import { __module as t } from "../../_virtual/index6.js";
2
2
  /*!
3
3
  Copyright (c) 2015 Jed Watson.
4
4
  Based on code that is Copyright 2013-2015, Facebook, Inc.
@@ -1,4 +1,4 @@
1
- import { __module as e } from "../../../../_virtual/index6.js";
1
+ import { __module as e } from "../../../../_virtual/index5.js";
2
2
  import { __require as o } from "./cjs/react-is.production.min.js";
3
3
  import { __require as t } from "./cjs/react-is.development.js";
4
4
  var r;
@@ -52,4 +52,5 @@
52
52
  @use 'components/Detail/detail';
53
53
  @use 'patterns/DetailList/detailList';
54
54
  @use 'components/PinchZoom/pinchZoom';
55
+ @use 'components/Tabs/tabs';
55
56
  @use 'components/SeldonImage/seldonImage';
@@ -23,10 +23,12 @@
23
23
  height: auto;
24
24
  }
25
25
 
26
+ &__content {
27
+ margin: $spacing-sm 0;
28
+ }
29
+
26
30
  &__content--lg {
27
31
  @include text($body2);
28
-
29
- margin: 1.25rem 0;
30
32
  }
31
33
 
32
34
  &--transition {
@@ -0,0 +1,75 @@
1
+ @use '../../allPartials' as *;
2
+
3
+ .#{$px}-tabs-container {
4
+ @include text($body2);
5
+
6
+ width: 100%;
7
+
8
+ &__tabs-list {
9
+ display: flex;
10
+ gap: 1rem;
11
+ overflow: hidden; /* Prevent overflow */
12
+ padding: 0 $padding-md;
13
+ position: relative;
14
+ }
15
+
16
+ &__tabs-trigger {
17
+ background: none;
18
+ border: none;
19
+ border-bottom: 2px solid transparent;
20
+ padding: 0 0 $padding-sm;
21
+ transition:
22
+ background 0.2s ease,
23
+ font-weight 0.2s ease-out,
24
+ border-bottom 0.2s ease-out;
25
+
26
+ &:focus-visible {
27
+ box-shadow: rgb(11, 11, 12) 0 0 0 1px inset;
28
+ outline: none;
29
+ }
30
+
31
+ .#{$px}-text {
32
+ color: $button-hover;
33
+ cursor: pointer;
34
+ font-size: $body-size2;
35
+ line-height: $body-line-height-size2;
36
+
37
+ &:hover {
38
+ color: $pure-black;
39
+ }
40
+ }
41
+ }
42
+
43
+ &__tabs-trigger[data-state='active'] {
44
+ border-bottom: 2px solid $pure-black;
45
+ color: $pure-black;
46
+
47
+ &:focus-visible {
48
+ box-shadow: rgb(11, 11, 12) 0 0 0 1px inset;
49
+ outline: none;
50
+ }
51
+ .#{$px}-text {
52
+ color: $pure-black;
53
+ font-variation-settings: 'wght' 600;
54
+
55
+ &:hover {
56
+ color: $button-hover;
57
+ }
58
+ }
59
+ }
60
+
61
+ /* Underline effect for active tab */
62
+ &__full-bleed-underline {
63
+ background: $light-gray;
64
+ bottom: 0;
65
+ height: 1px;
66
+ left: 0;
67
+ position: absolute;
68
+ right: 0;
69
+ transition: transform 0.2s ease; /* Underline animation */
70
+ }
71
+
72
+ &__tabs-content {
73
+ padding: 20px 0;
74
+ }
75
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phillips/seldon",
3
- "version": "1.76.0",
3
+ "version": "1.77.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/PhillipsAuctionHouse/seldon"
@@ -45,6 +45,7 @@
45
45
  "@radix-ui/react-collapsible": "^1.1.0",
46
46
  "@radix-ui/react-dialog": "^1.1.1",
47
47
  "@radix-ui/react-select": "^2.1.1",
48
+ "@radix-ui/react-tabs": "^1.1.1",
48
49
  "@types/dompurify": "^3.0.5",
49
50
  "change-case": "^5.4.4",
50
51
  "classnames": "^2.5.1",