@clubmed/trident-ui 1.3.1-beta.1 → 1.4.0-beta.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +3 -3
  3. package/hooks/useSafeBoop.d.ts +3 -0
  4. package/hooks/useSafeBoop.js +2207 -42
  5. package/hooks/useSafeBoop.js.map +1 -1
  6. package/hooks/useValue.js +6 -6
  7. package/hooks/useValue.js.map +1 -1
  8. package/molecules/Backdrop.js +36 -40
  9. package/molecules/Backdrop.js.map +1 -1
  10. package/molecules/Cards/Card.js +9 -9
  11. package/molecules/Cards/Card.js.map +1 -1
  12. package/molecules/Forms/Checkboxes/Checkbox.js +1 -1
  13. package/molecules/Forms/Checkboxes/Checkbox.js.map +1 -1
  14. package/molecules/Forms/Filter.js +1 -1
  15. package/molecules/Forms/Filter.js.map +1 -1
  16. package/molecules/Forms/NumberField.d.ts +4 -4
  17. package/molecules/Forms/Radios/Radio.js +5 -5
  18. package/molecules/Forms/Radios/Radio.js.map +1 -1
  19. package/molecules/Forms/Range.js.map +1 -1
  20. package/molecules/Forms/Switch.js +5 -5
  21. package/molecules/Forms/Switch.js.map +1 -1
  22. package/molecules/HamburgerIcon.d.ts +3 -10
  23. package/molecules/HamburgerIcon.js +34 -30
  24. package/molecules/HamburgerIcon.js.map +1 -1
  25. package/molecules/Loader.js +32 -43
  26. package/molecules/Loader.js.map +1 -1
  27. package/molecules/Popin.d.ts +1 -2
  28. package/molecules/Popin.js +37 -43
  29. package/molecules/Popin.js.map +1 -1
  30. package/molecules/Tabs/Tab.d.ts +3 -4
  31. package/molecules/Tabs/Tab.js +90 -78
  32. package/molecules/Tabs/Tab.js.map +1 -1
  33. package/molecules/Tabs/TabList.js +28 -36
  34. package/molecules/Tabs/TabList.js.map +1 -1
  35. package/molecules/Tabs/TabPanel.js +30 -49
  36. package/molecules/Tabs/TabPanel.js.map +1 -1
  37. package/molecules/Tabs/context/TabControl.js +12 -7
  38. package/molecules/Tabs/context/TabControl.js.map +1 -1
  39. package/package.json +20 -19
  40. package/tailwind/tailwind.preset.d.ts +70 -0
  41. package/tailwind/tailwind.preset.js +75 -5
  42. package/tailwind/tailwind.preset.js.map +1 -1
  43. package/types/Theme.d.ts +1 -1
@@ -1,53 +1,45 @@
1
1
  "use client";
2
- import { jsx as t, jsxs as d } from "react/jsx-runtime";
3
- import { c as e } from "../../chunks/index.js";
4
- import { useRef as n, useEffect as v } from "react";
5
- import { useSpring as b, animated as h } from "@react-spring/web";
6
- import { useActiveTabControl as L } from "./hooks/tabControl.js";
7
- const j = ({
8
- className: f,
2
+ import { jsx as r, jsxs as d } from "react/jsx-runtime";
3
+ import { c } from "../../chunks/index.js";
4
+ import { useRef as n, useEffect as w } from "react";
5
+ import { useActiveTabControl as v } from "./hooks/tabControl.js";
6
+ const C = ({
7
+ className: o,
9
8
  constrained: l = !1,
10
- children: i
9
+ children: a
11
10
  }) => {
12
- const s = n(null), c = n(null), [m, r] = L(), [{ scrollLeft: a }, o] = b(() => ({
13
- from: { scrollLeft: 0 }
14
- }));
15
- v(() => {
16
- if (!r?.current)
11
+ const e = n(null), s = n(null), [i, t] = v();
12
+ w(() => {
13
+ if (!t?.current || !e.current)
17
14
  return;
18
- const p = r.current.getBoundingClientRect().left, u = s.current.scrollLeft, w = c.current.offsetWidth;
19
- o.start({
20
- to: {
21
- scrollLeft: u + p - w
22
- }
23
- });
24
- }, [a, r, o]);
25
- const x = { "--active-tab": m };
26
- return /* @__PURE__ */ t(
27
- h.div,
15
+ const x = s.current.offsetWidth ?? 0, u = t.current.getBoundingClientRect(), m = e.current.getBoundingClientRect(), p = e.current.scrollLeft;
16
+ e.current.scrollLeft = p + (u.left - m.left) - x;
17
+ }, [t]);
18
+ const f = { "--active-tab": i };
19
+ return /* @__PURE__ */ r(
20
+ "div",
28
21
  {
29
- ref: s,
30
22
  "data-name": "TabsHeader",
31
- className: e(
32
- "scrollbar-hide relative flex max-w-full overflow-x-scroll py-20",
33
- f
23
+ className: c(
24
+ "scrollbar-hidden relative isolate flex max-w-full overflow-x-scroll scroll-smooth py-20",
25
+ o
34
26
  ),
35
- scrollLeft: a,
36
- children: /* @__PURE__ */ d("div", { role: "tablist", className: e("flex flex-row"), style: x, children: [
37
- /* @__PURE__ */ t(
27
+ ref: e,
28
+ children: /* @__PURE__ */ d("div", { role: "tablist", className: "flex flex-row", style: f, children: [
29
+ /* @__PURE__ */ r(
38
30
  "div",
39
31
  {
40
- ref: c,
41
- className: e("shrink-0", {
32
+ ref: s,
33
+ className: c("shrink-0", {
42
34
  "w-16 lg:w-[max(calc((100vw-1212px)/2),116px)] xl:w-[max(calc((100vw-1212px)/2),156px)]": !l
43
35
  })
44
36
  }
45
37
  ),
46
- i,
47
- /* @__PURE__ */ t(
38
+ a,
39
+ /* @__PURE__ */ r(
48
40
  "div",
49
41
  {
50
- className: e("shrink-0", {
42
+ className: c("shrink-0", {
51
43
  "w-16 lg:w-[max(calc((100vw-1212px)/2),116px)] xl:w-[max(calc((100vw-1212px)/2),156px)]": !l
52
44
  })
53
45
  }
@@ -57,6 +49,6 @@ const j = ({
57
49
  );
58
50
  };
59
51
  export {
60
- j as TabList
52
+ C as TabList
61
53
  };
62
54
  //# sourceMappingURL=TabList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabList.js","sources":["../../../lib/molecules/Tabs/TabList.tsx"],"sourcesContent":["'use client';\n\nimport classnames from 'classnames';\nimport {\n type CSSProperties,\n useEffect,\n useRef,\n type FunctionComponent,\n type PropsWithChildren,\n} from 'react';\nimport { animated, useSpring } from '@react-spring/web';\n\nimport { useActiveTabControl } from './hooks/tabControl';\n\ninterface Props {\n className?: string;\n /**\n * Remove filler placeholders\n */\n constrained?: boolean;\n}\n\nexport const TabList: FunctionComponent<PropsWithChildren<Props>> = ({\n className,\n constrained = false,\n children,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const spacerRef = useRef<HTMLDivElement>(null);\n const [currentTab, currentControl] = useActiveTabControl();\n\n const [{ scrollLeft }, scrollApi] = useSpring(() => ({\n from: { scrollLeft: 0 },\n }));\n\n useEffect(() => {\n if (!currentControl?.current) {\n return;\n }\n\n const tabLeft = currentControl.current.getBoundingClientRect().left;\n const scrollLeft = containerRef.current!.scrollLeft;\n const spacerWidth = spacerRef.current!.offsetWidth;\n\n scrollApi.start({\n to: {\n scrollLeft: scrollLeft + tabLeft - spacerWidth,\n },\n });\n }, [scrollLeft, currentControl, scrollApi]);\n\n const style = { '--active-tab': currentTab } as CSSProperties;\n\n return (\n <animated.div\n ref={containerRef}\n data-name=\"TabsHeader\"\n className={classnames(\n 'scrollbar-hide relative flex max-w-full overflow-x-scroll py-20',\n className,\n )}\n scrollLeft={scrollLeft}\n >\n <div role=\"tablist\" className={classnames('flex flex-row')} style={style}>\n <div\n ref={spacerRef}\n className={classnames('shrink-0', {\n 'w-16 lg:w-[max(calc((100vw-1212px)/2),116px)] xl:w-[max(calc((100vw-1212px)/2),156px)]':\n !constrained,\n })}\n />\n {children}\n <div\n className={classnames('shrink-0', {\n 'w-16 lg:w-[max(calc((100vw-1212px)/2),116px)] xl:w-[max(calc((100vw-1212px)/2),156px)]':\n !constrained,\n })}\n />\n </div>\n </animated.div>\n );\n};\n"],"names":["TabList","className","constrained","children","containerRef","useRef","spacerRef","currentTab","currentControl","useActiveTabControl","scrollLeft","scrollApi","useSpring","useEffect","tabLeft","spacerWidth","style","jsx","animated","classnames","jsxs"],"mappings":";;;;;;AAsBO,MAAMA,IAAuD,CAAC;AAAA,EACnE,WAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AACF,MAAM;AACJ,QAAMC,IAAeC,EAAuB,IAAI,GAC1CC,IAAYD,EAAuB,IAAI,GACvC,CAACE,GAAYC,CAAc,IAAIC,EAAA,GAE/B,CAAC,EAAE,YAAAC,EAAA,GAAcC,CAAS,IAAIC,EAAU,OAAO;AAAA,IACnD,MAAM,EAAE,YAAY,EAAA;AAAA,EAAE,EACtB;AAEF,EAAAC,EAAU,MAAM;AACd,QAAI,CAACL,GAAgB;AACnB;AAGF,UAAMM,IAAUN,EAAe,QAAQ,sBAAA,EAAwB,MACzDE,IAAaN,EAAa,QAAS,YACnCW,IAAcT,EAAU,QAAS;AAEvC,IAAAK,EAAU,MAAM;AAAA,MACd,IAAI;AAAA,QACF,YAAYD,IAAaI,IAAUC;AAAA,MAAA;AAAA,IACrC,CACD;AAAA,EACH,GAAG,CAACL,GAAYF,GAAgBG,CAAS,CAAC;AAE1C,QAAMK,IAAQ,EAAE,gBAAgBT,EAAA;AAEhC,SACE,gBAAAU;AAAA,IAACC,EAAS;AAAA,IAAT;AAAA,MACC,KAAKd;AAAA,MACL,aAAU;AAAA,MACV,WAAWe;AAAA,QACT;AAAA,QACAlB;AAAA,MAAA;AAAA,MAEF,YAAAS;AAAA,MAEA,UAAA,gBAAAU,EAAC,SAAI,MAAK,WAAU,WAAWD,EAAW,eAAe,GAAG,OAAAH,GAC1D,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAKX;AAAA,YACL,WAAWa,EAAW,YAAY;AAAA,cAChC,0FACE,CAACjB;AAAA,YAAA,CACJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEFC;AAAA,QACD,gBAAAc;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWE,EAAW,YAAY;AAAA,cAChC,0FACE,CAACjB;AAAA,YAAA,CACJ;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"TabList.js","sources":["../../../lib/molecules/Tabs/TabList.tsx"],"sourcesContent":["'use client';\n\nimport classnames from 'classnames';\nimport {\n type CSSProperties,\n useEffect,\n useRef,\n type FunctionComponent,\n type PropsWithChildren,\n} from 'react';\n\nimport { useActiveTabControl } from './hooks/tabControl';\n\ninterface Props {\n className?: string;\n /**\n * Remove filler placeholders\n */\n constrained?: boolean;\n}\n\nexport const TabList: FunctionComponent<PropsWithChildren<Props>> = ({\n className,\n constrained = false,\n children,\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n const spacerRef = useRef<HTMLDivElement>(null);\n const [currentTab, currentControl] = useActiveTabControl();\n\n useEffect(() => {\n if (!currentControl?.current || !ref.current) {\n return;\n }\n\n const spacerWidth = spacerRef.current!.offsetWidth ?? 0;\n const currentRect = currentControl.current.getBoundingClientRect();\n const containerRect = ref.current!.getBoundingClientRect();\n const scroll = ref.current!.scrollLeft;\n\n ref.current.scrollLeft = scroll + (currentRect.left - containerRect.left) - spacerWidth;\n }, [currentControl]);\n\n const style = { '--active-tab': currentTab } as CSSProperties;\n\n return (\n <div\n data-name=\"TabsHeader\"\n className={classnames(\n 'scrollbar-hidden relative isolate flex max-w-full overflow-x-scroll scroll-smooth py-20',\n className,\n )}\n ref={ref}\n >\n <div role=\"tablist\" className=\"flex flex-row\" style={style}>\n <div\n ref={spacerRef}\n className={classnames('shrink-0', {\n 'w-16 lg:w-[max(calc((100vw-1212px)/2),116px)] xl:w-[max(calc((100vw-1212px)/2),156px)]':\n !constrained,\n })}\n />\n {children}\n <div\n className={classnames('shrink-0', {\n 'w-16 lg:w-[max(calc((100vw-1212px)/2),116px)] xl:w-[max(calc((100vw-1212px)/2),156px)]':\n !constrained,\n })}\n />\n </div>\n </div>\n );\n};\n"],"names":["TabList","className","constrained","children","ref","useRef","spacerRef","currentTab","currentControl","useActiveTabControl","useEffect","spacerWidth","currentRect","containerRect","scroll","style","jsx","classnames"],"mappings":";;;;;AAqBO,MAAMA,IAAuD,CAAC;AAAA,EACnE,WAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AACF,MAAM;AACJ,QAAMC,IAAMC,EAAuB,IAAI,GACjCC,IAAYD,EAAuB,IAAI,GACvC,CAACE,GAAYC,CAAc,IAAIC,EAAA;AAErC,EAAAC,EAAU,MAAM;AACd,QAAI,CAACF,GAAgB,WAAW,CAACJ,EAAI;AACnC;AAGF,UAAMO,IAAcL,EAAU,QAAS,eAAe,GAChDM,IAAcJ,EAAe,QAAQ,sBAAA,GACrCK,IAAgBT,EAAI,QAAS,sBAAA,GAC7BU,IAASV,EAAI,QAAS;AAE5B,IAAAA,EAAI,QAAQ,aAAaU,KAAUF,EAAY,OAAOC,EAAc,QAAQF;AAAA,EAC9E,GAAG,CAACH,CAAc,CAAC;AAEnB,QAAMO,IAAQ,EAAE,gBAAgBR,EAAA;AAEhC,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC;AAAA,QACT;AAAA,QACAhB;AAAA,MAAA;AAAA,MAEF,KAAAG;AAAA,MAEA,4BAAC,OAAA,EAAI,MAAK,WAAU,WAAU,iBAAgB,OAAAW,GAC5C,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAKV;AAAA,YACL,WAAWW,EAAW,YAAY;AAAA,cAChC,0FACE,CAACf;AAAA,YAAA,CACJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEFC;AAAA,QACD,gBAAAa;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC,EAAW,YAAY;AAAA,cAChC,0FACE,CAACf;AAAA,YAAA,CACJ;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,62 +1,43 @@
1
1
  "use client";
2
- import { jsx as p } from "react/jsx-runtime";
3
- import { c as u } from "../../chunks/index.js";
4
- import { useRef as b, useEffect as f } from "react";
5
- import { useSpring as l, animated as h } from "@react-spring/web";
6
- import { useTabsUid as T, useActiveTab as g } from "./hooks/tabControl.js";
7
- const n = {
8
- opacity: 0,
9
- pointerEvents: "none",
10
- height: 0
11
- }, i = {
12
- opacity: 1,
13
- pointerEvents: "auto",
14
- height: "auto"
15
- }, P = ({
16
- value: e,
17
- className: c,
2
+ import { jsx as s } from "react/jsx-runtime";
3
+ import { c } from "../../chunks/index.js";
4
+ import { useRef as d, useEffect as b } from "react";
5
+ import { useTabsUid as m, useActiveTab as p } from "./hooks/tabControl.js";
6
+ const $ = ({
7
+ value: t,
8
+ className: o,
18
9
  onSelect: a,
19
- children: m
10
+ children: i
20
11
  }) => {
21
- const r = T(), s = b(!1), t = g() === e, [d, o] = l(() => ({
22
- from: t ? i : n
23
- }));
24
- return f(() => {
25
- if (!s.current) {
26
- s.current = !0;
12
+ const r = m(), n = d(!1), e = p() === t;
13
+ return b(() => {
14
+ if (!n.current) {
15
+ n.current = !0;
27
16
  return;
28
17
  }
29
- o.start({
30
- to: {
31
- ...t ? i : n,
32
- height: "auto"
33
- },
34
- onRest: () => {
35
- o.start({
36
- to: { height: t ? "auto" : 0 },
37
- immediate: !0
38
- });
39
- }
40
- }), t && a?.({ value: e });
41
- }, [t, o, e, a]), /* @__PURE__ */ p(
42
- h.div,
18
+ e && a?.({ value: t });
19
+ }, [e, t, a]), /* @__PURE__ */ s(
20
+ "div",
43
21
  {
44
- style: d,
45
- id: `TabPanel_${e}_${r}`,
46
- "data-name": `TabPanel_${e}`,
22
+ id: `TabPanel_${t}_${r}`,
23
+ "data-name": `TabPanel_${t}`,
47
24
  role: "tabpanel",
48
- "aria-hidden": !t,
49
- "aria-labelledby": `Tab_${e}_${r}`,
50
- tabIndex: t ? 0 : -1,
51
- className: u(c, "col-start-1 col-end-1 row-start-1 row-end-1", {
52
- "z-0": !t,
53
- "z-1": t
54
- }),
55
- children: m
25
+ "aria-hidden": !e,
26
+ "aria-labelledby": `Tab_${t}_${r}`,
27
+ tabIndex: e ? 0 : -1,
28
+ className: c(
29
+ o,
30
+ "relative col-start-1 row-start-1 transition-opacity duration-500",
31
+ {
32
+ "pointer-events-none z-0 h-0 opacity-0": !e,
33
+ "pointer-events-auto z-1 h-auto opacity-100": e
34
+ }
35
+ ),
36
+ children: i
56
37
  }
57
38
  );
58
39
  };
59
40
  export {
60
- P as TabPanel
41
+ $ as TabPanel
61
42
  };
62
43
  //# sourceMappingURL=TabPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabPanel.js","sources":["../../../lib/molecules/Tabs/TabPanel.tsx"],"sourcesContent":["'use client';\n\nimport classnames from 'classnames';\nimport { type FunctionComponent, type PropsWithChildren, useEffect, useRef } from 'react';\nimport { animated, useSpring } from '@react-spring/web';\n\nimport { useActiveTab, useTabsUid } from './hooks/tabControl';\n\ninterface Props {\n className?: string;\n /**\n * Tab panel index<br/>\n * _Can be **0** or **1** indexed_\n */\n value: number;\n /**\n * on panel select handler\n */\n onSelect?: (context: { value: Props['value'] }) => void;\n}\n\ninterface TabStyle {\n pointerEvents: 'none' | 'auto';\n opacity: number;\n height?: number | 'auto';\n}\n\nconst FROM: TabStyle = {\n opacity: 0,\n pointerEvents: 'none',\n height: 0,\n};\n\nconst TO: TabStyle = {\n opacity: 1,\n pointerEvents: 'auto',\n height: 'auto',\n};\n\nexport const TabPanel: FunctionComponent<PropsWithChildren<Props>> = ({\n value,\n className,\n onSelect,\n children,\n}) => {\n const uid = useTabsUid();\n const mounted = useRef(false);\n const tabSelected = useActiveTab();\n const isActive = tabSelected === value;\n\n const [style, styleApi] = useSpring<TabStyle>(() => ({\n from: isActive ? TO : FROM,\n }));\n\n useEffect(() => {\n if (!mounted.current) {\n mounted.current = true;\n return;\n }\n\n styleApi.start({\n to: {\n ...(isActive ? TO : FROM),\n height: 'auto',\n },\n onRest: () => {\n styleApi.start({\n to: { height: isActive ? 'auto' : 0 },\n immediate: true,\n });\n },\n });\n\n if (isActive) {\n onSelect?.({ value });\n }\n }, [isActive, styleApi, value, onSelect]);\n\n return (\n <animated.div\n style={style}\n id={`TabPanel_${value}_${uid}`}\n data-name={`TabPanel_${value}`}\n role=\"tabpanel\"\n aria-hidden={!isActive}\n aria-labelledby={`Tab_${value}_${uid}`}\n tabIndex={isActive ? 0 : -1}\n className={classnames(className, 'col-start-1 col-end-1 row-start-1 row-end-1', {\n 'z-0': !isActive,\n 'z-1': isActive,\n })}\n >\n {children}\n </animated.div>\n );\n};\n"],"names":["FROM","TO","TabPanel","value","className","onSelect","children","uid","useTabsUid","mounted","useRef","isActive","useActiveTab","style","styleApi","useSpring","useEffect","jsx","animated","classnames"],"mappings":";;;;;;AA2BA,MAAMA,IAAiB;AAAA,EACrB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,QAAQ;AACV,GAEMC,IAAe;AAAA,EACnB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,QAAQ;AACV,GAEaC,IAAwD,CAAC;AAAA,EACpE,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACJ,QAAMC,IAAMC,EAAA,GACNC,IAAUC,EAAO,EAAK,GAEtBC,IADcC,EAAA,MACaT,GAE3B,CAACU,GAAOC,CAAQ,IAAIC,EAAoB,OAAO;AAAA,IACnD,MAAMJ,IAAWV,IAAKD;AAAA,EAAA,EACtB;AAEF,SAAAgB,EAAU,MAAM;AACd,QAAI,CAACP,EAAQ,SAAS;AACpB,MAAAA,EAAQ,UAAU;AAClB;AAAA,IACF;AAEA,IAAAK,EAAS,MAAM;AAAA,MACb,IAAI;AAAA,QACF,GAAIH,IAAWV,IAAKD;AAAA,QACpB,QAAQ;AAAA,MAAA;AAAA,MAEV,QAAQ,MAAM;AACZ,QAAAc,EAAS,MAAM;AAAA,UACb,IAAI,EAAE,QAAQH,IAAW,SAAS,EAAA;AAAA,UAClC,WAAW;AAAA,QAAA,CACZ;AAAA,MACH;AAAA,IAAA,CACD,GAEGA,KACFN,IAAW,EAAE,OAAAF,GAAO;AAAA,EAExB,GAAG,CAACQ,GAAUG,GAAUX,GAAOE,CAAQ,CAAC,GAGtC,gBAAAY;AAAA,IAACC,EAAS;AAAA,IAAT;AAAA,MACC,OAAAL;AAAA,MACA,IAAI,YAAYV,CAAK,IAAII,CAAG;AAAA,MAC5B,aAAW,YAAYJ,CAAK;AAAA,MAC5B,MAAK;AAAA,MACL,eAAa,CAACQ;AAAA,MACd,mBAAiB,OAAOR,CAAK,IAAII,CAAG;AAAA,MACpC,UAAUI,IAAW,IAAI;AAAA,MACzB,WAAWQ,EAAWf,GAAW,+CAA+C;AAAA,QAC9E,OAAO,CAACO;AAAA,QACR,OAAOA;AAAA,MAAA,CACR;AAAA,MAEA,UAAAL;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"TabPanel.js","sources":["../../../lib/molecules/Tabs/TabPanel.tsx"],"sourcesContent":["'use client';\n\nimport classnames from 'classnames';\nimport { type FunctionComponent, type PropsWithChildren, useEffect, useRef } from 'react';\n\nimport { useActiveTab, useTabsUid } from './hooks/tabControl';\n\ninterface Props {\n className?: string;\n /**\n * Tab panel index<br/>\n * _Can be **0** or **1** indexed_\n */\n value: number;\n /**\n * on panel select handler\n */\n onSelect?: (context: { value: Props['value'] }) => void;\n}\n\nexport const TabPanel: FunctionComponent<PropsWithChildren<Props>> = ({\n value,\n className,\n onSelect,\n children,\n}) => {\n const uid = useTabsUid();\n const mounted = useRef(false);\n const tabSelected = useActiveTab();\n const isActive = tabSelected === value;\n\n useEffect(() => {\n if (!mounted.current) {\n mounted.current = true;\n return;\n }\n\n if (isActive) {\n onSelect?.({ value });\n }\n }, [isActive, value, onSelect]);\n\n return (\n <div\n id={`TabPanel_${value}_${uid}`}\n data-name={`TabPanel_${value}`}\n role=\"tabpanel\"\n aria-hidden={!isActive}\n aria-labelledby={`Tab_${value}_${uid}`}\n tabIndex={isActive ? 0 : -1}\n className={classnames(\n className,\n 'relative col-start-1 row-start-1 transition-opacity duration-500',\n {\n 'pointer-events-none z-0 h-0 opacity-0': !isActive,\n 'pointer-events-auto z-1 h-auto opacity-100': isActive,\n },\n )}\n >\n {children}\n </div>\n );\n};\n"],"names":["TabPanel","value","className","onSelect","children","uid","useTabsUid","mounted","useRef","isActive","useActiveTab","useEffect","jsx","classnames"],"mappings":";;;;;AAoBO,MAAMA,IAAwD,CAAC;AAAA,EACpE,OAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACJ,QAAMC,IAAMC,EAAA,GACNC,IAAUC,EAAO,EAAK,GAEtBC,IADcC,EAAA,MACaT;AAEjC,SAAAU,EAAU,MAAM;AACd,QAAI,CAACJ,EAAQ,SAAS;AACpB,MAAAA,EAAQ,UAAU;AAClB;AAAA,IACF;AAEA,IAAIE,KACFN,IAAW,EAAE,OAAAF,GAAO;AAAA,EAExB,GAAG,CAACQ,GAAUR,GAAOE,CAAQ,CAAC,GAG5B,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAI,YAAYX,CAAK,IAAII,CAAG;AAAA,MAC5B,aAAW,YAAYJ,CAAK;AAAA,MAC5B,MAAK;AAAA,MACL,eAAa,CAACQ;AAAA,MACd,mBAAiB,OAAOR,CAAK,IAAII,CAAG;AAAA,MACpC,UAAUI,IAAW,IAAI;AAAA,MACzB,WAAWI;AAAA,QACTX;AAAA,QACA;AAAA,QACA;AAAA,UACE,yCAAyC,CAACO;AAAA,UAC1C,8CAA8CA;AAAA,QAAA;AAAA,MAChD;AAAA,MAGD,UAAAL;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as f } from "react/jsx-runtime";
3
- import { createContext as p, useId as x, useReducer as y, useCallback as u } from "react";
4
- function v(e) {
3
+ import { createContext as p, useId as v, useReducer as y, useCallback as u } from "react";
4
+ function x(e) {
5
5
  const n = [...e.refs.keys()], o = (n.findIndex((t) => t === e.value) + 1) % n.length;
6
6
  return { ...e, value: n[o] };
7
7
  }
@@ -33,6 +33,7 @@ function b(e, n) {
33
33
  function h(e, n) {
34
34
  return {
35
35
  ...e,
36
+ ...e.value === -1 && { value: n.payload.value },
36
37
  refs: new Map(e.refs).set(n.payload.value, n.payload.ref)
37
38
  };
38
39
  }
@@ -40,7 +41,7 @@ function w(e, n) {
40
41
  return { ...e, value: n.payload };
41
42
  }
42
43
  const i = {
43
- next: v,
44
+ next: x,
44
45
  previous: g,
45
46
  start: C,
46
47
  end: k,
@@ -70,13 +71,17 @@ const d = p({
70
71
  }
71
72
  });
72
73
  d.displayName = "TabControlContext";
73
- function P({ selected: e = 0, children: n }) {
74
- const r = x(), [o, t] = y(I, { uid: r, value: e, refs: /* @__PURE__ */ new Map() }), a = u((s, c) => {
74
+ function P({ selected: e, children: n }) {
75
+ const r = v(), [o, t] = y(I, {
76
+ uid: r,
77
+ value: e || -1,
78
+ refs: /* @__PURE__ */ new Map()
79
+ }), l = u((s, c) => {
75
80
  t({ type: "register", payload: { value: s, ref: c } });
76
- }, []), l = u((s) => {
81
+ }, []), a = u((s) => {
77
82
  t({ type: "unregister", payload: { value: s } });
78
83
  }, []);
79
- return /* @__PURE__ */ f(d.Provider, { value: { ...o, dispatch: t, register: a, unregister: l }, children: n });
84
+ return /* @__PURE__ */ f(d.Provider, { value: { ...o, dispatch: t, register: l, unregister: a }, children: n });
80
85
  }
81
86
  export {
82
87
  d as TabControlContext,
@@ -1 +1 @@
1
- {"version":3,"file":"TabControl.js","sources":["../../../../lib/molecules/Tabs/context/TabControl.tsx"],"sourcesContent":["'use client';\n\nimport {\n createContext,\n type Dispatch,\n type PropsWithChildren,\n type RefObject,\n useCallback,\n useId,\n useReducer,\n} from 'react';\n\ntype RefTab<T extends HTMLElement = HTMLElement> = RefObject<T>;\ntype RefTabs<T extends HTMLElement = HTMLElement> = Map<number, RefTab<T>>;\n\ntype TabsUpdateAction = {\n type: 'update';\n payload: number;\n};\n\ntype TabsRegisterAction<T extends HTMLElement = HTMLElement> = {\n type: 'register';\n payload: { value: number; ref: RefObject<T> };\n};\n\ntype TabsUnregisterAction = {\n type: 'unregister';\n payload: { value: number };\n};\n\ntype TabsAction<T extends HTMLElement = HTMLElement> =\n | { type: 'start' | 'end' | 'previous' | 'next' }\n | TabsUpdateAction\n | TabsRegisterAction<T>\n | TabsUnregisterAction;\n\ninterface TabsState<T extends HTMLElement = HTMLElement> {\n uid: string;\n value: number;\n refs: RefTabs<T>;\n}\n\ninterface TabControl<T extends HTMLElement = HTMLElement> extends TabsState<T> {\n uid: string;\n value: number;\n refs: RefTabs<T>;\n dispatch: Dispatch<TabsAction>;\n register: (value: number, ref: RefTab<T>) => void;\n unregister: (value: number) => void;\n}\n\nfunction next(state: TabsState) {\n const keys = [...state.refs.keys()];\n const index = keys.findIndex((value) => value === state.value);\n const nextIndex = (index + 1) % keys.length;\n\n return { ...state, value: keys[nextIndex] };\n}\n\nfunction previous(state: TabsState) {\n const keys = [...state.refs.keys()];\n const index = keys.findIndex((value) => value === state.value);\n const previousIndex = (index - 1 + keys.length) % keys.length;\n\n return { ...state, value: keys[previousIndex] };\n}\n\nfunction start(state: TabsState) {\n const keys = [...state.refs.keys()];\n const firstIndex = keys[0];\n\n return {\n ...state,\n value: firstIndex,\n };\n}\n\nfunction end(state: TabsState) {\n const keys = [...state.refs.keys()];\n const lastIndex = keys[keys.length - 1];\n\n return {\n ...state,\n value: lastIndex,\n };\n}\n\nfunction unregister(state: TabsState, action: TabsUnregisterAction) {\n const deletedRefs = new Map(state.refs);\n deletedRefs.delete(action.payload.value);\n\n return {\n ...state,\n refs: deletedRefs,\n };\n}\n\nfunction register(state: TabsState, action: TabsRegisterAction) {\n return {\n ...state,\n refs: new Map(state.refs).set(action.payload.value, action.payload.ref),\n };\n}\n\nfunction update(state: TabsState, action: TabsUpdateAction) {\n return { ...state, value: action.payload };\n}\n\nconst actions = {\n next,\n previous,\n start,\n end,\n register,\n unregister,\n update,\n} as const;\n\nfunction tabsReducer(state: TabsState, action: TabsAction): TabsState {\n if (action.type in actions) {\n const actionFunction = actions[action.type] as (\n state: TabsState,\n action: TabsAction,\n ) => TabsState;\n\n return actionFunction(state, action);\n }\n\n return state;\n}\n\nexport const TabControlContext = createContext<TabControl>({\n uid: '',\n value: 0,\n refs: new Map(),\n dispatch: () => {\n console.warn('Tab Controller Context dispatch used outside of Provider');\n },\n register: () => {\n console.warn('Tab Controller Context register used outside of Provider');\n },\n unregister: () => {\n console.warn('Tab Controller Context unregister used outside of Provider');\n },\n});\n\nTabControlContext.displayName = 'TabControlContext';\n\nexport interface TabsProviderProps {\n selected?: number;\n /**\n * The selected tab value\n * @deprecated Min props as no effect on the Tabs component and will be removed in future versions\n */\n min?: number;\n\n /**\n * The selected tab value\n * @deprecated Max props as no effect on the Tabs component and will be removed in future versions\n */\n max?: number;\n}\n\nexport function TabsProvider({ selected = 0, children }: PropsWithChildren<TabsProviderProps>) {\n const uid = useId();\n const [state, dispatch] = useReducer(tabsReducer, { uid, value: selected, refs: new Map() });\n\n const register = useCallback(<T extends HTMLElement>(value: number, ref: RefTab<T>) => {\n dispatch({ type: 'register', payload: { value, ref } });\n }, []);\n\n const unregister = useCallback((value: number) => {\n dispatch({ type: 'unregister', payload: { value } });\n }, []);\n\n return (\n <TabControlContext.Provider value={{ ...state, dispatch, register, unregister }}>\n {children}\n </TabControlContext.Provider>\n );\n}\n"],"names":["next","state","keys","nextIndex","value","previous","previousIndex","start","firstIndex","end","lastIndex","unregister","action","deletedRefs","register","update","actions","tabsReducer","actionFunction","TabControlContext","createContext","TabsProvider","selected","children","uid","useId","dispatch","useReducer","useCallback","ref","jsx"],"mappings":";;;AAmDA,SAASA,EAAKC,GAAkB;AAC9B,QAAMC,IAAO,CAAC,GAAGD,EAAM,KAAK,MAAM,GAE5BE,KADQD,EAAK,UAAU,CAACE,MAAUA,MAAUH,EAAM,KAAK,IAClC,KAAKC,EAAK;AAErC,SAAO,EAAE,GAAGD,GAAO,OAAOC,EAAKC,CAAS,EAAA;AAC1C;AAEA,SAASE,EAASJ,GAAkB;AAClC,QAAMC,IAAO,CAAC,GAAGD,EAAM,KAAK,MAAM,GAE5BK,KADQJ,EAAK,UAAU,CAACE,MAAUA,MAAUH,EAAM,KAAK,IAC9B,IAAIC,EAAK,UAAUA,EAAK;AAEvD,SAAO,EAAE,GAAGD,GAAO,OAAOC,EAAKI,CAAa,EAAA;AAC9C;AAEA,SAASC,EAAMN,GAAkB;AAE/B,QAAMO,IADO,CAAC,GAAGP,EAAM,KAAK,MAAM,EACV,CAAC;AAEzB,SAAO;AAAA,IACL,GAAGA;AAAA,IACH,OAAOO;AAAA,EAAA;AAEX;AAEA,SAASC,EAAIR,GAAkB;AAC7B,QAAMC,IAAO,CAAC,GAAGD,EAAM,KAAK,MAAM,GAC5BS,IAAYR,EAAKA,EAAK,SAAS,CAAC;AAEtC,SAAO;AAAA,IACL,GAAGD;AAAA,IACH,OAAOS;AAAA,EAAA;AAEX;AAEA,SAASC,EAAWV,GAAkBW,GAA8B;AAClE,QAAMC,IAAc,IAAI,IAAIZ,EAAM,IAAI;AACtC,SAAAY,EAAY,OAAOD,EAAO,QAAQ,KAAK,GAEhC;AAAA,IACL,GAAGX;AAAA,IACH,MAAMY;AAAA,EAAA;AAEV;AAEA,SAASC,EAASb,GAAkBW,GAA4B;AAC9D,SAAO;AAAA,IACL,GAAGX;AAAA,IACH,MAAM,IAAI,IAAIA,EAAM,IAAI,EAAE,IAAIW,EAAO,QAAQ,OAAOA,EAAO,QAAQ,GAAG;AAAA,EAAA;AAE1E;AAEA,SAASG,EAAOd,GAAkBW,GAA0B;AAC1D,SAAO,EAAE,GAAGX,GAAO,OAAOW,EAAO,QAAA;AACnC;AAEA,MAAMI,IAAU;AAAA,EACd,MAAAhB;AAAA,EACA,UAAAK;AAAA,EACA,OAAAE;AAAA,EACA,KAAAE;AAAA,EACA,UAAAK;AAAA,EACA,YAAAH;AAAA,EACA,QAAAI;AACF;AAEA,SAASE,EAAYhB,GAAkBW,GAA+B;AACpE,MAAIA,EAAO,QAAQI,GAAS;AAC1B,UAAME,IAAiBF,EAAQJ,EAAO,IAAI;AAK1C,WAAOM,EAAejB,GAAOW,CAAM;AAAA,EACrC;AAEA,SAAOX;AACT;AAEO,MAAMkB,IAAoBC,EAA0B;AAAA,EACzD,KAAK;AAAA,EACL,OAAO;AAAA,EACP,0BAAU,IAAA;AAAA,EACV,UAAU,MAAM;AACd,YAAQ,KAAK,0DAA0D;AAAA,EACzE;AAAA,EACA,UAAU,MAAM;AACd,YAAQ,KAAK,0DAA0D;AAAA,EACzE;AAAA,EACA,YAAY,MAAM;AAChB,YAAQ,KAAK,4DAA4D;AAAA,EAC3E;AACF,CAAC;AAEDD,EAAkB,cAAc;AAiBzB,SAASE,EAAa,EAAE,UAAAC,IAAW,GAAG,UAAAC,KAAkD;AAC7F,QAAMC,IAAMC,EAAA,GACN,CAACxB,GAAOyB,CAAQ,IAAIC,EAAWV,GAAa,EAAE,KAAAO,GAAK,OAAOF,GAAU,MAAM,oBAAI,IAAA,GAAO,GAErFR,IAAWc,EAAY,CAAwBxB,GAAeyB,MAAmB;AACrF,IAAAH,EAAS,EAAE,MAAM,YAAY,SAAS,EAAE,OAAAtB,GAAO,KAAAyB,EAAA,GAAO;AAAA,EACxD,GAAG,CAAA,CAAE,GAEClB,IAAaiB,EAAY,CAACxB,MAAkB;AAChD,IAAAsB,EAAS,EAAE,MAAM,cAAc,SAAS,EAAE,OAAAtB,EAAA,GAAS;AAAA,EACrD,GAAG,CAAA,CAAE;AAEL,SACE,gBAAA0B,EAACX,EAAkB,UAAlB,EAA2B,OAAO,EAAE,GAAGlB,GAAO,UAAAyB,GAAU,UAAAZ,GAAU,YAAAH,EAAAA,GAChE,UAAAY,EAAA,CACH;AAEJ;"}
1
+ {"version":3,"file":"TabControl.js","sources":["../../../../lib/molecules/Tabs/context/TabControl.tsx"],"sourcesContent":["'use client';\n\nimport {\n createContext,\n type Dispatch,\n type PropsWithChildren,\n type RefObject,\n useCallback,\n useId,\n useReducer,\n} from 'react';\n\ntype RefTab<T extends HTMLElement = HTMLElement> = RefObject<T>;\ntype RefTabs<T extends HTMLElement = HTMLElement> = Map<number, RefTab<T>>;\n\ntype TabsUpdateAction = {\n type: 'update';\n payload: number;\n};\n\ntype TabsRegisterAction<T extends HTMLElement = HTMLElement> = {\n type: 'register';\n payload: { value: number; ref: RefObject<T> };\n};\n\ntype TabsUnregisterAction = {\n type: 'unregister';\n payload: { value: number };\n};\n\ntype TabsAction<T extends HTMLElement = HTMLElement> =\n | { type: 'start' | 'end' | 'previous' | 'next' }\n | TabsUpdateAction\n | TabsRegisterAction<T>\n | TabsUnregisterAction;\n\ninterface TabsState<T extends HTMLElement = HTMLElement> {\n uid: string;\n value: number;\n refs: RefTabs<T>;\n}\n\ninterface TabControl<T extends HTMLElement = HTMLElement> extends TabsState<T> {\n uid: string;\n value: number;\n refs: RefTabs<T>;\n dispatch: Dispatch<TabsAction>;\n register: (value: number, ref: RefTab<T>) => void;\n unregister: (value: number) => void;\n}\n\nfunction next(state: TabsState) {\n const keys = [...state.refs.keys()];\n const index = keys.findIndex((value) => value === state.value);\n const nextIndex = (index + 1) % keys.length;\n\n return { ...state, value: keys[nextIndex] };\n}\n\nfunction previous(state: TabsState) {\n const keys = [...state.refs.keys()];\n const index = keys.findIndex((value) => value === state.value);\n const previousIndex = (index - 1 + keys.length) % keys.length;\n\n return { ...state, value: keys[previousIndex] };\n}\n\nfunction start(state: TabsState) {\n const keys = [...state.refs.keys()];\n const firstIndex = keys[0];\n\n return {\n ...state,\n value: firstIndex,\n };\n}\n\nfunction end(state: TabsState) {\n const keys = [...state.refs.keys()];\n const lastIndex = keys[keys.length - 1];\n\n return {\n ...state,\n value: lastIndex,\n };\n}\n\nfunction unregister(state: TabsState, action: TabsUnregisterAction) {\n const deletedRefs = new Map(state.refs);\n deletedRefs.delete(action.payload.value);\n\n return {\n ...state,\n refs: deletedRefs,\n };\n}\n\nfunction register(state: TabsState, action: TabsRegisterAction) {\n return {\n ...state,\n ...(state.value === -1 && { value: action.payload.value }),\n refs: new Map(state.refs).set(action.payload.value, action.payload.ref),\n };\n}\n\nfunction update(state: TabsState, action: TabsUpdateAction) {\n return { ...state, value: action.payload };\n}\n\nconst actions = {\n next,\n previous,\n start,\n end,\n register,\n unregister,\n update,\n} as const;\n\nfunction tabsReducer(state: TabsState, action: TabsAction): TabsState {\n if (action.type in actions) {\n const actionFunction = actions[action.type] as (\n state: TabsState,\n action: TabsAction,\n ) => TabsState;\n\n return actionFunction(state, action);\n }\n\n return state;\n}\n\nexport const TabControlContext = createContext<TabControl>({\n uid: '',\n value: 0,\n refs: new Map(),\n dispatch: () => {\n console.warn('Tab Controller Context dispatch used outside of Provider');\n },\n register: () => {\n console.warn('Tab Controller Context register used outside of Provider');\n },\n unregister: () => {\n console.warn('Tab Controller Context unregister used outside of Provider');\n },\n});\n\nTabControlContext.displayName = 'TabControlContext';\n\nexport interface TabsProviderProps {\n selected?: number;\n /**\n * The selected tab value\n * @deprecated Min props as no effect on the Tabs component and will be removed in future versions\n */\n min?: number;\n\n /**\n * The selected tab value\n * @deprecated Max props as no effect on the Tabs component and will be removed in future versions\n */\n max?: number;\n}\n\nexport function TabsProvider({ selected, children }: PropsWithChildren<TabsProviderProps>) {\n const uid = useId();\n const [state, dispatch] = useReducer(tabsReducer, {\n uid,\n value: selected || -1,\n refs: new Map(),\n });\n\n const register = useCallback(<T extends HTMLElement>(value: number, ref: RefTab<T>) => {\n dispatch({ type: 'register', payload: { value, ref } });\n }, []);\n\n const unregister = useCallback((value: number) => {\n dispatch({ type: 'unregister', payload: { value } });\n }, []);\n\n return (\n <TabControlContext.Provider value={{ ...state, dispatch, register, unregister }}>\n {children}\n </TabControlContext.Provider>\n );\n}\n"],"names":["next","state","keys","nextIndex","value","previous","previousIndex","start","firstIndex","end","lastIndex","unregister","action","deletedRefs","register","update","actions","tabsReducer","actionFunction","TabControlContext","createContext","TabsProvider","selected","children","uid","useId","dispatch","useReducer","useCallback","ref","jsx"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clubmed/trident-ui",
3
- "version": "1.3.1-beta.1",
3
+ "version": "1.4.0-beta.1",
4
4
  "type": "module",
5
5
  "description": "Shared ClubMed React UI components",
6
6
  "keywords": [
@@ -102,14 +102,18 @@
102
102
  "dev": "storybook dev -p 6006",
103
103
  "build": "vite build && npm run build:exports",
104
104
  "build:storybook": "storybook build",
105
+ "build-storybook": "storybook build",
106
+ "build:check": "tsc -b",
105
107
  "lint": "eslint . --report-unused-disable-directives",
106
108
  "lint:fix": "eslint . --fix",
107
109
  "prettier:write": "prettier . --write --ignore-unknown",
108
110
  "test": "vitest run",
109
111
  "test:dev": "vitest watch",
110
112
  "test:update": "vitest -u",
113
+ "update": "npx update-browserslist-db@latest",
111
114
  "prepare": "husky",
112
- "build:exports": "NODE_NO_WARNINGS=1 node --loader ts-node/esm tools/exports-builder/index.ts"
115
+ "build:exports": "NODE_NO_WARNINGS=1 node --loader ts-node/esm tools/exports-builder/index.ts",
116
+ "chromatic": "chromatic"
113
117
  },
114
118
  "dependencies": {
115
119
  "@juggle/resize-observer": "^3.4.0",
@@ -123,32 +127,33 @@
123
127
  "use-resize-observer": "^9.1.0"
124
128
  },
125
129
  "devDependencies": {
130
+ "@chromatic-com/storybook": "^4.1.1",
126
131
  "@clubmed/trident-icons": ">=1.3.3",
127
132
  "@commitlint/cli": "18.6.1",
128
133
  "@commitlint/config-conventional": "18.6.2",
129
134
  "@netsells/storybook-mockdate": "0.3.3",
130
- "@react-spring/web": "^9.7.3",
131
- "@storybook/addon-a11y": "9.1.1",
132
- "@storybook/addon-docs": "9.1.1",
133
- "@storybook/addon-links": "9.1.1",
134
- "@storybook/addon-onboarding": "9.1.1",
135
- "@storybook/addon-themes": "9.1.1",
136
- "@storybook/addon-vitest": "^9.1.1",
137
- "@storybook/react-vite": "9.1.1",
135
+ "@storybook/addon-a11y": "9.1.7",
136
+ "@storybook/addon-docs": "9.1.7",
137
+ "@storybook/addon-links": "9.1.7",
138
+ "@storybook/addon-onboarding": "9.1.7",
139
+ "@storybook/addon-themes": "9.1.7",
140
+ "@storybook/addon-vitest": "9.1.7",
141
+ "@storybook/react-vite": "9.1.7",
138
142
  "@svgr/rollup": "8.1.0",
139
143
  "@testing-library/jest-dom": "^6.3.0",
140
144
  "@testing-library/react": "^14.1.2",
141
145
  "@testing-library/user-event": "^14.5.2",
142
146
  "@types/fs-extra": "^11.0.4",
143
- "@types/picomatch": "^2.3.3",
144
147
  "@types/lodash": "^4.17.20",
148
+ "@types/picomatch": "^2.3.3",
145
149
  "@types/react": "^18.2.48",
146
150
  "@types/react-dom": "^18.2.18",
147
- "@typescript-eslint/eslint-plugin": "^6.19.1",
148
- "@typescript-eslint/parser": "^6.19.1",
151
+ "@typescript-eslint/eslint-plugin": "8.45.0",
152
+ "@typescript-eslint/parser": "8.45.0",
149
153
  "@vitejs/plugin-react-swc": "^4.0.0",
150
154
  "@vitest/browser": "3.2.4",
151
155
  "@vitest/coverage-v8": "3.2.4",
156
+ "chromatic": "^13.2.1",
152
157
  "add": "^2.0.6",
153
158
  "autoprefixer": "^10.4.17",
154
159
  "change-case": "^5.4.3",
@@ -158,7 +163,7 @@
158
163
  "eslint-plugin-prettier": "5.1.3",
159
164
  "eslint-plugin-react-hooks": "^4.6.0",
160
165
  "eslint-plugin-react-refresh": "^0.4.5",
161
- "eslint-plugin-storybook": "^9.1.1",
166
+ "eslint-plugin-storybook": "9.1.7",
162
167
  "figures": "^6.1.0",
163
168
  "fs-extra": "^11.2.0",
164
169
  "globby": "^14.0.1",
@@ -174,7 +179,7 @@
174
179
  "react-dom": "^18.2.0",
175
180
  "react-syntax-highlighter": "^15.5.0",
176
181
  "rollup-preserve-directives": "^1.1.1",
177
- "storybook": "9.1.1",
182
+ "storybook": "9.1.7",
178
183
  "svgtofont": "^4.2.0",
179
184
  "tailwindcss": "^3.3.5",
180
185
  "ts-node": "^10.9.2",
@@ -188,7 +193,6 @@
188
193
  },
189
194
  "peerDependencies": {
190
195
  "@clubmed/trident-icons": ">=1.3.3",
191
- "@react-spring/web": ">=9",
192
196
  "react": ">=17.0.2",
193
197
  "react-dom": ">=17.0.2",
194
198
  "tailwindcss": ">=3.3.5"
@@ -205,9 +209,6 @@
205
209
  },
206
210
  "tailwindcss": {
207
211
  "optional": false
208
- },
209
- "@react-spring/web": {
210
- "optional": false
211
212
  }
212
213
  },
213
214
  "sideEffects": [
@@ -166,6 +166,12 @@ export declare const tailwindPreset: {
166
166
  tick: string;
167
167
  tock: string;
168
168
  boop: string;
169
+ backdropFadeIn: string;
170
+ backdropFadeOut: string;
171
+ backdropSweepIn: string;
172
+ backdropSweepOut: string;
173
+ zoomIn: string;
174
+ zoomOut: string;
169
175
  };
170
176
  animationDelay: {
171
177
  300: string;
@@ -367,6 +373,70 @@ export declare const tailwindPreset: {
367
373
  transform: string;
368
374
  };
369
375
  };
376
+ backdropFadeIn: {
377
+ '0%': {
378
+ 'backdrop-filter': string;
379
+ opacity: string;
380
+ };
381
+ '100%': {
382
+ 'backdrop-filter': string;
383
+ opacity: string;
384
+ };
385
+ };
386
+ backdropFadeOut: {
387
+ '0%': {
388
+ 'backdrop-filter': string;
389
+ opacity: string;
390
+ };
391
+ '100%': {
392
+ 'backdrop-filter': string;
393
+ opacity: string;
394
+ };
395
+ };
396
+ backdropSweepIn: {
397
+ '0%': {
398
+ 'backdrop-filter': string;
399
+ opacity: string;
400
+ transform: string;
401
+ };
402
+ '100%': {
403
+ 'backdrop-filter': string;
404
+ opacity: string;
405
+ transform: string;
406
+ };
407
+ };
408
+ backdropSweepOut: {
409
+ '0%': {
410
+ 'backdrop-filter': string;
411
+ opacity: string;
412
+ transform: string;
413
+ };
414
+ '100%': {
415
+ 'backdrop-filter': string;
416
+ opacity: string;
417
+ transform: string;
418
+ };
419
+ };
420
+ zoomIn: {
421
+ '0%': {
422
+ transform: string;
423
+ opacity: string;
424
+ };
425
+ '100%': {
426
+ transform: string;
427
+ opacity: string;
428
+ };
429
+ };
430
+ zoomOut: {
431
+ '0%': {
432
+ transform: string;
433
+ opacity: string;
434
+ };
435
+ '100%': {
436
+ transform: string;
437
+ opacity: string;
438
+ };
439
+ };
370
440
  };
371
441
  aspectRatio: {
372
442
  auto: string;
@@ -3,8 +3,8 @@ import { hocus as a } from "./plugins/hocus.js";
3
3
  import { lineClampSafariFix as n } from "./plugins/lineClampFix.js";
4
4
  import { popover as i } from "./plugins/popover.js";
5
5
  import { startingStyle as s } from "./plugins/startingStyle.js";
6
- import { transitionBehavior as m } from "./plugins/transitionBehavior.js";
7
- import { COLORS as p } from "./colors.js";
6
+ import { transitionBehavior as p } from "./plugins/transitionBehavior.js";
7
+ import { COLORS as m } from "./colors.js";
8
8
  const l = {
9
9
  fit: "fit-content",
10
10
  min: "min-content",
@@ -50,7 +50,7 @@ const l = {
50
50
  a,
51
51
  o,
52
52
  i,
53
- m,
53
+ p,
54
54
  s
55
55
  ],
56
56
  corePlugins: {
@@ -82,7 +82,7 @@ const l = {
82
82
  380: "380px"
83
83
  }
84
84
  },
85
- colors: p,
85
+ colors: m,
86
86
  screens: {
87
87
  sm: "40rem",
88
88
  // '640px',
@@ -170,7 +170,13 @@ const l = {
170
170
  slideUp: "slideUp 0.5s ease-out",
171
171
  tick: "tick 0.6s cubic-bezier(0.455, 0.03, 0.515, 0.955) 0s 1 normal forwards",
172
172
  tock: "tock 0.6s cubic-bezier(0.455, 0.03, 0.515, 0.955) 0s 1 normal forwards",
173
- boop: "boop 230ms cubic-bezier(.76,.24,.65,.85) normal both"
173
+ boop: "boop 230ms cubic-bezier(.76,.24,.65,.85) normal both",
174
+ backdropFadeIn: "backdropFadeIn 220ms cubic-bezier(0.2, 0.8, 0.2, 1) forwards",
175
+ backdropFadeOut: "backdropFadeOut 180ms cubic-bezier(0.4, 0, 1, 1) forwards",
176
+ backdropSweepIn: "backdropSweepIn 300ms cubic-bezier(0.2, 0.8, 0.2, 1) forwards",
177
+ backdropSweepOut: "backdropSweepOut 260ms cubic-bezier(0.4, 0, 1, 1) forwards",
178
+ zoomIn: "zoomIn 220ms cubic-bezier(0.2, 0.8, 0.2, 1) forwards",
179
+ zoomOut: "zoomOut 180ms cubic-bezier(0.4, 0, 1, 1) forwards"
174
180
  },
175
181
  animationDelay: {
176
182
  300: "300ms",
@@ -364,6 +370,70 @@ const l = {
364
370
  "100%": {
365
371
  transform: "translateX(101%)"
366
372
  }
373
+ },
374
+ backdropFadeIn: {
375
+ "0%": {
376
+ "backdrop-filter": "blur(0px)",
377
+ opacity: "0"
378
+ },
379
+ "100%": {
380
+ "backdrop-filter": "blur(10px)",
381
+ opacity: "0.8"
382
+ }
383
+ },
384
+ backdropFadeOut: {
385
+ "0%": {
386
+ "backdrop-filter": "blur(10px)",
387
+ opacity: "0.8"
388
+ },
389
+ "100%": {
390
+ "backdrop-filter": "blur(0px)",
391
+ opacity: "0"
392
+ }
393
+ },
394
+ backdropSweepIn: {
395
+ "0%": {
396
+ "backdrop-filter": "blur(0px)",
397
+ opacity: "0",
398
+ transform: "translateX(-100%)"
399
+ },
400
+ "100%": {
401
+ "backdrop-filter": "blur(10px)",
402
+ opacity: "0.8",
403
+ transform: "translateX(0%)"
404
+ }
405
+ },
406
+ backdropSweepOut: {
407
+ "0%": {
408
+ "backdrop-filter": "blur(10px)",
409
+ opacity: "0.8",
410
+ transform: "translateX(0%)"
411
+ },
412
+ "100%": {
413
+ "backdrop-filter": "blur(0px)",
414
+ opacity: "0",
415
+ transform: "translateX(100%)"
416
+ }
417
+ },
418
+ zoomIn: {
419
+ "0%": {
420
+ transform: "scale(0.3)",
421
+ opacity: "0.3"
422
+ },
423
+ "100%": {
424
+ transform: "scale(1)",
425
+ opacity: "1"
426
+ }
427
+ },
428
+ zoomOut: {
429
+ "0%": {
430
+ transform: "scale(1)",
431
+ opacity: "1"
432
+ },
433
+ "100%": {
434
+ transform: "scale(0.9)",
435
+ opacity: "0"
436
+ }
367
437
  }
368
438
  },
369
439
  aspectRatio: {