@clubmed/trident-ui 1.3.0-beta.9 → 1.3.0-rc.2

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 (171) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/README.md +8 -0
  3. package/assets/icons/ResortFill/PHUC_Fill.svg +287 -10
  4. package/assets/icons/ResortFill/TOMC_Fill.svg +199 -14
  5. package/assets/icons/ResortFill-EC/KIPC_EC_Fill.svg +499 -0
  6. package/assets/icons/ResortOutline/PHUC_Outline.svg +156 -6
  7. package/assets/icons/ResortOutline/TOMC_Outline.svg +99 -6
  8. package/assets/icons/ResortOutline-EC/KIPC_EC_Outline.svg +380 -0
  9. package/assets/icons/Transports/Taxi.svg +5 -0
  10. package/assets/icons/Utilities/Doorhanger.svg +5 -0
  11. package/assets/{style.css → trident-ui.css} +1 -1
  12. package/atoms/Clickable/Clickable.d.ts +5 -0
  13. package/atoms/Clickable/Clickable.js +25 -0
  14. package/atoms/Clickable/Clickable.js.map +1 -0
  15. package/atoms/Heading/Heading.d.ts +6 -0
  16. package/atoms/Heading/Heading.js +14 -0
  17. package/atoms/Heading/Heading.js.map +1 -0
  18. package/atoms/Heading/HeadingGroup.d.ts +7 -0
  19. package/atoms/Heading/HeadingGroup.js +15 -0
  20. package/atoms/Heading/HeadingGroup.js.map +1 -0
  21. package/atoms/Icons/Iconics.d.ts +1 -1
  22. package/atoms/Icons/IconsResolver.d.ts +1 -1
  23. package/atoms/Icons/contexts/IconsContext.d.ts +1 -1
  24. package/atoms/Icons/svg/SvgIcon.d.ts +1 -1
  25. package/atoms/Icons/svg-use/SvgUseIcon.d.ts +1 -1
  26. package/atoms/Image/Image.d.ts +7 -0
  27. package/atoms/Image/Image.js +18 -0
  28. package/atoms/Image/Image.js.map +1 -0
  29. package/atoms/Prose/Prose.d.ts +5 -0
  30. package/atoms/Prose/Prose.js +18 -0
  31. package/atoms/Prose/Prose.js.map +1 -0
  32. package/chunks/ResizeObserver.js +287 -0
  33. package/chunks/ResizeObserver.js.map +1 -0
  34. package/chunks/_commonjsHelpers.js +19 -14
  35. package/chunks/_commonjsHelpers.js.map +1 -1
  36. package/chunks/index.js +36 -33
  37. package/chunks/index.js.map +1 -1
  38. package/chunks/plugin.js +57 -46
  39. package/chunks/plugin.js.map +1 -1
  40. package/contexts/Devices/Device.d.ts +3 -3
  41. package/contexts/Devices/hooks/useQueries.d.ts +2 -2
  42. package/contexts/Devices/reducers/reducer.d.ts +2 -2
  43. package/contexts/TridentUIConfig.d.ts +1 -1
  44. package/contexts/TridentUIConfig.js +1265 -653
  45. package/contexts/TridentUIConfig.js.map +1 -1
  46. package/helpers/colors/colors.d.ts +108 -0
  47. package/helpers/colors/colors.js +132 -0
  48. package/helpers/colors/colors.js.map +1 -0
  49. package/hooks/useKeyboardControls.d.ts +1 -1
  50. package/hooks/useResizeObserver.d.ts +2 -0
  51. package/hooks/useResizeObserver.js +84 -0
  52. package/hooks/useResizeObserver.js.map +1 -0
  53. package/hooks/useSafeBoop.d.ts +2 -2
  54. package/molecules/Arrows/Arrows.d.ts +2 -2
  55. package/molecules/Avatar.d.ts +1 -1
  56. package/molecules/Avatar.js +24 -24
  57. package/molecules/Avatar.js.map +1 -1
  58. package/molecules/Backdrop.d.ts +1 -1
  59. package/molecules/Breadcrumb.d.ts +7 -11
  60. package/molecules/Breadcrumb.js +44 -36
  61. package/molecules/Breadcrumb.js.map +1 -1
  62. package/molecules/Breadcrumb.themes.d.ts +8 -0
  63. package/molecules/Breadcrumb.themes.js +15 -0
  64. package/molecules/Breadcrumb.themes.js.map +1 -0
  65. package/molecules/Buttons/ArrowButton.d.ts +1 -1
  66. package/molecules/Buttons/Button.d.ts +3 -3
  67. package/molecules/Buttons/ButtonAnchor.d.ts +2 -2
  68. package/molecules/Buttons/ButtonContent.d.ts +2 -2
  69. package/molecules/Buttons/FakeButton.d.ts +2 -3
  70. package/molecules/Buttons/InertButton.d.ts +2 -2
  71. package/molecules/Buttons/v2/Button.d.ts +2096 -2097
  72. package/molecules/Buttons/v2/Button.type.d.ts +5 -2
  73. package/molecules/Buttons/v2/Button.type.js +8 -5
  74. package/molecules/Buttons/v2/Button.type.js.map +1 -1
  75. package/molecules/Card.d.ts +1 -11
  76. package/molecules/Card.js +2 -34
  77. package/molecules/Card.js.map +1 -1
  78. package/molecules/Cards/Card.d.ts +13 -0
  79. package/molecules/Cards/Card.js +22 -0
  80. package/molecules/Cards/Card.js.map +1 -0
  81. package/molecules/Cards/CardAspectRatios.d.ts +6 -0
  82. package/molecules/Cards/CardAspectRatios.js +10 -0
  83. package/molecules/Cards/CardAspectRatios.js.map +1 -0
  84. package/molecules/Cards/CardBackground.d.ts +4 -0
  85. package/molecules/Cards/CardBackground.js +30 -0
  86. package/molecules/Cards/CardBackground.js.map +1 -0
  87. package/molecules/Cards/CardBackgroundContext.d.ts +6 -0
  88. package/molecules/Cards/CardBackgroundContext.js +10 -0
  89. package/molecules/Cards/CardBackgroundContext.js.map +1 -0
  90. package/molecules/Cards/CardClickable.d.ts +6 -0
  91. package/molecules/Cards/CardClickable.js +37 -0
  92. package/molecules/Cards/CardClickable.js.map +1 -0
  93. package/molecules/Cards/ExpandableCard.d.ts +14 -0
  94. package/molecules/Cards/ExpandableCard.js +80 -0
  95. package/molecules/Cards/ExpandableCard.js.map +1 -0
  96. package/molecules/Cards/v2/Card.d.ts +15 -0
  97. package/molecules/Cards/v2/Card.js +34 -0
  98. package/molecules/Cards/v2/Card.js.map +1 -0
  99. package/molecules/Chip.d.ts +9 -0
  100. package/molecules/Chip.js +31 -0
  101. package/molecules/Chip.js.map +1 -0
  102. package/molecules/Chip.themes.d.ts +12 -0
  103. package/molecules/Chip.themes.js +24 -0
  104. package/molecules/Chip.themes.js.map +1 -0
  105. package/molecules/ElasticHeight.d.ts +6 -27
  106. package/molecules/ElasticHeight.js +27 -33
  107. package/molecules/ElasticHeight.js.map +1 -1
  108. package/molecules/Forms/Checkboxes/Checkbox.d.ts +1 -1
  109. package/molecules/Forms/Checkboxes/Checkbox.js +43 -43
  110. package/molecules/Forms/Checkboxes/Checkbox.js.map +1 -1
  111. package/molecules/Forms/Checkboxes/Checkboxes.d.ts +2 -2
  112. package/molecules/Forms/DateField.d.ts +2 -2
  113. package/molecules/Forms/DateField.js +60 -61
  114. package/molecules/Forms/DateField.js.map +1 -1
  115. package/molecules/Forms/Filter.d.ts +1 -2
  116. package/molecules/Forms/Filter.js +29 -29
  117. package/molecules/Forms/Filter.js.map +1 -1
  118. package/molecules/Forms/FormControl.d.ts +4 -4
  119. package/molecules/Forms/FormLabel.d.ts +1 -1
  120. package/molecules/Forms/NumberField.d.ts +280 -280
  121. package/molecules/Forms/Password/Password.d.ts +1 -1
  122. package/molecules/Forms/Password/ValidationMessage.d.ts +1 -1
  123. package/molecules/Forms/Radios/Radio.d.ts +4 -2
  124. package/molecules/Forms/Radios/Radio.js +29 -28
  125. package/molecules/Forms/Radios/Radio.js.map +1 -1
  126. package/molecules/Forms/Radios/RadioGroup.d.ts +2 -2
  127. package/molecules/Forms/Radios/RadioGroup.js +70 -33
  128. package/molecules/Forms/Radios/RadioGroup.js.map +1 -1
  129. package/molecules/Forms/Range.d.ts +1 -2
  130. package/molecules/Forms/Range.js +144 -421
  131. package/molecules/Forms/Range.js.map +1 -1
  132. package/molecules/Forms/Select.d.ts +3 -3
  133. package/molecules/Forms/Switch.d.ts +1 -1
  134. package/molecules/Forms/TextField.d.ts +3 -3
  135. package/molecules/HamburgerIcon.d.ts +1 -1
  136. package/molecules/Link.d.ts +2 -2
  137. package/molecules/Loader.d.ts +1 -1
  138. package/molecules/Pagination.d.ts +2 -2
  139. package/molecules/Popin.d.ts +1 -1
  140. package/molecules/Spinner.d.ts +1 -1
  141. package/molecules/Tabs/Tab.d.ts +2 -3
  142. package/molecules/Tabs/Tab.js +41 -42
  143. package/molecules/Tabs/Tab.js.map +1 -1
  144. package/molecules/Tabs/TabList.d.ts +1 -1
  145. package/molecules/Tabs/TabList.js +21 -21
  146. package/molecules/Tabs/TabList.js.map +1 -1
  147. package/molecules/Tabs/TabPanel.d.ts +1 -1
  148. package/molecules/Tabs/TabPanel.js +13 -13
  149. package/molecules/Tabs/TabPanel.js.map +1 -1
  150. package/molecules/Tabs/Tabs.d.ts +1 -1
  151. package/molecules/Tabs/TabsBody.d.ts +1 -1
  152. package/molecules/Tabs/context/TabControl.d.ts +2 -2
  153. package/molecules/Tabs/hooks/tabControl.d.ts +5 -5
  154. package/molecules/Tag.d.ts +43 -0
  155. package/molecules/Tag.js +73 -0
  156. package/molecules/Tag.js.map +1 -0
  157. package/package.json +43 -40
  158. package/styles/index.css +1 -1
  159. package/tailwind/plugins/animationDelay.d.ts +2 -2
  160. package/tailwind/plugins/hocus.d.ts +2 -2
  161. package/tailwind/plugins/lineClampFix.d.ts +2 -2
  162. package/tailwind/plugins/popover.d.ts +2 -2
  163. package/tailwind/plugins/startingStyle.d.ts +2 -2
  164. package/tailwind/plugins/transitionBehavior.d.ts +2 -2
  165. package/tailwind/tailwind.preset.d.ts +50 -50
  166. package/types/LiteralUnion.d.js +2 -0
  167. package/types/LiteralUnion.d.js.map +1 -0
  168. package/types/Theme.d.js +2 -0
  169. package/types/Theme.d.js.map +1 -0
  170. package/assets/icons/ResortFill/KIPC_Fill.svg +0 -12
  171. package/assets/icons/ResortOutline/KIPC_Outline.svg +0 -7
@@ -2,13 +2,13 @@
2
2
  import { jsx as p } from "react/jsx-runtime";
3
3
  import { c as u } from "../../chunks/index.js";
4
4
  import { useRef as b, useEffect as f } from "react";
5
- import { useSpring as h, animated as l } from "@react-spring/web";
5
+ import { useSpring as l, animated as h } from "@react-spring/web";
6
6
  import { useTabsUid as T, useActiveTab as g } from "./hooks/tabControl.js";
7
- const i = {
7
+ const n = {
8
8
  opacity: 0,
9
9
  pointerEvents: "none",
10
10
  height: 0
11
- }, n = {
11
+ }, i = {
12
12
  opacity: 1,
13
13
  pointerEvents: "auto",
14
14
  height: "auto"
@@ -18,35 +18,35 @@ const i = {
18
18
  onSelect: a,
19
19
  children: m
20
20
  }) => {
21
- const o = T(), s = b(!1), t = g() === e, [d, r] = h(() => ({
22
- from: t ? n : i
21
+ const r = T(), s = b(!1), t = g() === e, [d, o] = l(() => ({
22
+ from: t ? i : n
23
23
  }));
24
24
  return f(() => {
25
25
  if (!s.current) {
26
26
  s.current = !0;
27
27
  return;
28
28
  }
29
- r.start({
29
+ o.start({
30
30
  to: {
31
- ...t ? n : i,
31
+ ...t ? i : n,
32
32
  height: "auto"
33
33
  },
34
34
  onRest: () => {
35
- r.start({
35
+ o.start({
36
36
  to: { height: t ? "auto" : 0 },
37
37
  immediate: !0
38
38
  });
39
39
  }
40
- }), t && (a == null || a({ value: e }));
41
- }, [t, r, e, a]), /* @__PURE__ */ p(
42
- l.div,
40
+ }), t && a?.({ value: e });
41
+ }, [t, o, e, a]), /* @__PURE__ */ p(
42
+ h.div,
43
43
  {
44
44
  style: d,
45
- id: `TabPanel_${e}_${o}`,
45
+ id: `TabPanel_${e}_${r}`,
46
46
  "data-name": `TabPanel_${e}`,
47
47
  role: "tabpanel",
48
48
  "aria-hidden": !t,
49
- "aria-labelledby": `Tab_${e}_${o}`,
49
+ "aria-labelledby": `Tab_${e}_${r}`,
50
50
  tabIndex: t ? 0 : -1,
51
51
  className: u(c, "col-start-1 col-end-1 row-start-1 row-end-1", {
52
52
  "z-0": !t,
@@ -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,MACFN,KAAA,QAAAA,EAAW,EAAE,OAAAF;EAEjB,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';\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,4 +1,4 @@
1
- import type { ComponentProps, FunctionComponent, PropsWithChildren } from 'react';
1
+ import { ComponentProps, FunctionComponent, PropsWithChildren } from 'react';
2
2
  import { TabsProvider } from './context/TabControl';
3
3
  type ProviderProps = ComponentProps<typeof TabsProvider>;
4
4
  interface Props extends ProviderProps {
@@ -1,4 +1,4 @@
1
- import type { FunctionComponent, PropsWithChildren } from 'react';
1
+ import { FunctionComponent, PropsWithChildren } from 'react';
2
2
  interface Props {
3
3
  className?: string;
4
4
  }
@@ -1,4 +1,4 @@
1
- import { type Dispatch, type PropsWithChildren, type RefObject } from 'react';
1
+ import { Dispatch, PropsWithChildren, RefObject } from 'react';
2
2
  type RefTab<T extends HTMLElement = HTMLElement> = RefObject<T>;
3
3
  type RefTabs<T extends HTMLElement = HTMLElement> = Map<number, RefTab<T>>;
4
4
  type TabsUpdateAction = {
@@ -34,7 +34,7 @@ interface TabControl<T extends HTMLElement = HTMLElement> extends TabsState<T> {
34
34
  register: (value: number, ref: RefTab<T>) => void;
35
35
  unregister: (value: number) => void;
36
36
  }
37
- export declare const TabControlContext: import("react").Context<TabControl<HTMLElement>>;
37
+ export declare const TabControlContext: import('react').Context<TabControl<HTMLElement>>;
38
38
  export interface TabsProviderProps {
39
39
  selected?: number;
40
40
  /**
@@ -1,6 +1,6 @@
1
- import { type RefObject } from 'react';
1
+ import { RefObject } from 'react';
2
2
  export declare const useActiveTab: () => number;
3
- export declare const useTabDispatch: () => import("react").Dispatch<{
3
+ export declare const useTabDispatch: () => import('react').Dispatch<{
4
4
  type: "update";
5
5
  payload: number;
6
6
  } | {
@@ -9,7 +9,7 @@ export declare const useTabDispatch: () => import("react").Dispatch<{
9
9
  value: number;
10
10
  };
11
11
  } | {
12
- type: "start" | "end" | "next" | "previous";
12
+ type: "start" | "end" | "previous" | "next";
13
13
  } | {
14
14
  type: "register";
15
15
  payload: {
@@ -22,7 +22,7 @@ interface Props<T extends HTMLElement> {
22
22
  value: number;
23
23
  ref: RefObject<T>;
24
24
  }
25
- export declare function useRegisterTabControl<T extends HTMLElement>({ value, ref }: Props<T>): import("react").Dispatch<{
25
+ export declare function useRegisterTabControl<T extends HTMLElement>({ value, ref }: Props<T>): import('react').Dispatch<{
26
26
  type: "update";
27
27
  payload: number;
28
28
  } | {
@@ -31,7 +31,7 @@ export declare function useRegisterTabControl<T extends HTMLElement>({ value, re
31
31
  value: number;
32
32
  };
33
33
  } | {
34
- type: "start" | "end" | "next" | "previous";
34
+ type: "start" | "end" | "previous" | "next";
35
35
  } | {
36
36
  type: "register";
37
37
  payload: {
@@ -0,0 +1,43 @@
1
+ import { IconicNames } from '@clubmed/trident-icons';
2
+ import { FunctionComponent } from 'react';
3
+ import { BgColor, BorderColor, TextColor } from '../helpers/colors/colors.js';
4
+ import { LiteralUnion } from '../types/LiteralUnion';
5
+ export interface TagProps {
6
+ /**
7
+ * Additional class names
8
+ */
9
+ className?: string;
10
+ /**
11
+ * Background color
12
+ */
13
+ backgroundColor?: LiteralUnion<BgColor>;
14
+ /**
15
+ * Text color
16
+ */
17
+ color?: LiteralUnion<TextColor>;
18
+ /**
19
+ * Border color
20
+ */
21
+ border?: LiteralUnion<BorderColor>;
22
+ /**
23
+ * Optional icon name
24
+ */
25
+ icon?: IconicNames;
26
+ /**
27
+ * Tag label
28
+ */
29
+ label?: string;
30
+ /**
31
+ * theme mode
32
+ */
33
+ theme?: 'icon' | 'label' | 'both' | 'swap' | 'unfold' | 'monogram' | 'pill' | 'none';
34
+ /**
35
+ * Icon class name
36
+ */
37
+ iconClassName?: string;
38
+ /**
39
+ * Label class name
40
+ */
41
+ labelClassName?: string;
42
+ }
43
+ export declare const Tag: FunctionComponent<TagProps>;
@@ -0,0 +1,73 @@
1
+ import { jsxs as u, jsx as s } from "react/jsx-runtime";
2
+ import { Icon as C } from "@clubmed/trident-icons";
3
+ import { c as n } from "../chunks/index.js";
4
+ import { getBorderColor as y, getBgColor as N, getTextColor as j } from "../helpers/colors/colors.js";
5
+ const z = ({
6
+ className: i,
7
+ backgroundColor: l = "saffron",
8
+ border: m = l,
9
+ color: c = "black",
10
+ icon: t,
11
+ label: e = "",
12
+ theme: r = "both",
13
+ iconClassName: d,
14
+ labelClassName: b
15
+ }) => {
16
+ if (!e && !t)
17
+ return null;
18
+ const h = y(m), f = N(l), x = j(c), a = !!t, o = r === "both" && !a ? "label" : r, p = o === "both" || o === "swap" || o === "unfold" || o === "none", g = a && (o === "icon" || p), w = o === "label" || o === "pill" || p;
19
+ return /* @__PURE__ */ u(
20
+ "span",
21
+ {
22
+ "data-name": "Tag",
23
+ className: n(
24
+ "box-border inline-flex items-center justify-center gap-x-4 whitespace-nowrap rounded-pill border align-middle font-sans font-semibold",
25
+ {
26
+ "text-b4": o !== "pill",
27
+ "text-b5": o === "pill"
28
+ },
29
+ {
30
+ "p-4": o !== "label" && o !== "both",
31
+ "px-16 py-6": o === "label",
32
+ "py-4 pe-16 ps-12": o === "both",
33
+ "px-8 py-4": o === "pill",
34
+ "sm:px-16": o === "swap",
35
+ "sm:pe-16 sm:ps-12": o === "unfold"
36
+ },
37
+ h,
38
+ f,
39
+ x,
40
+ i
41
+ ),
42
+ title: e,
43
+ role: "note",
44
+ children: [
45
+ o === "monogram" && /* @__PURE__ */ s("span", { className: "size-24 text-center leading-[1.5rem]", children: e }),
46
+ g && /* @__PURE__ */ s(
47
+ C,
48
+ {
49
+ width: "1.5rem",
50
+ name: t,
51
+ className: n({ "sm:hidden": o === "swap" }, d)
52
+ }
53
+ ),
54
+ w && /* @__PURE__ */ s(
55
+ "span",
56
+ {
57
+ className: n(
58
+ {
59
+ "hidden sm:block": o === "swap" || o === "unfold"
60
+ },
61
+ b
62
+ ),
63
+ children: e
64
+ }
65
+ )
66
+ ]
67
+ }
68
+ );
69
+ };
70
+ export {
71
+ z as Tag
72
+ };
73
+ //# sourceMappingURL=Tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tag.js","sources":["../../lib/molecules/Tag.tsx"],"sourcesContent":["import { Icon, type IconicNames } from '@clubmed/trident-icons';\nimport classNames from 'classnames';\nimport type { FunctionComponent } from 'react';\n\nimport {\n type BgColor,\n type BorderColor,\n getBgColor,\n getBorderColor,\n getTextColor,\n type TextColor,\n} from '@/helpers/colors/colors.js';\nimport type { LiteralUnion } from '@/types/LiteralUnion';\n\nexport interface TagProps {\n /**\n * Additional class names\n */\n className?: string;\n /**\n * Background color\n */\n backgroundColor?: LiteralUnion<BgColor>;\n /**\n * Text color\n */\n color?: LiteralUnion<TextColor>;\n /**\n * Border color\n */\n border?: LiteralUnion<BorderColor>;\n /**\n * Optional icon name\n */\n icon?: IconicNames;\n /**\n * Tag label\n */\n label?: string;\n /**\n * theme mode\n */\n theme?: 'icon' | 'label' | 'both' | 'swap' | 'unfold' | 'monogram' | 'pill' | 'none';\n /**\n * Icon class name\n */\n iconClassName?: string;\n /**\n * Label class name\n */\n labelClassName?: string;\n}\n\nexport const Tag: FunctionComponent<TagProps> = ({\n className,\n backgroundColor = 'saffron',\n border = backgroundColor,\n color = 'black',\n icon,\n label = '',\n theme = 'both',\n iconClassName,\n labelClassName,\n}) => {\n if (!label && !icon) {\n return null;\n }\n\n const borderColor = getBorderColor(border);\n const bgColor = getBgColor(backgroundColor);\n const textColor = getTextColor(color);\n\n const hasIcon = !!icon;\n const mode = theme === 'both' && !hasIcon ? 'label' : theme;\n\n const withBoth = mode === 'both' || mode === 'swap' || mode === 'unfold' || mode === 'none';\n const withIcon = hasIcon && (mode === 'icon' || withBoth);\n const withLabel = mode === 'label' || mode === 'pill' || withBoth;\n\n return (\n <span\n data-name=\"Tag\"\n className={classNames(\n 'box-border inline-flex items-center justify-center gap-x-4 whitespace-nowrap rounded-pill border align-middle font-sans font-semibold',\n {\n 'text-b4': mode !== 'pill',\n 'text-b5': mode === 'pill',\n },\n {\n 'p-4': mode !== 'label' && mode !== 'both',\n 'px-16 py-6': mode === 'label',\n 'py-4 pe-16 ps-12': mode === 'both',\n 'px-8 py-4': mode === 'pill',\n 'sm:px-16': mode === 'swap',\n 'sm:pe-16 sm:ps-12': mode === 'unfold',\n },\n borderColor,\n bgColor,\n textColor,\n className,\n )}\n title={label}\n role=\"note\"\n >\n {mode === 'monogram' && <span className=\"size-24 text-center leading-[1.5rem]\">{label}</span>}\n {withIcon && (\n <Icon\n width=\"1.5rem\"\n name={icon}\n className={classNames({ 'sm:hidden': mode === 'swap' }, iconClassName)}\n />\n )}\n {withLabel && (\n <span\n className={classNames(\n {\n 'hidden sm:block': mode === 'swap' || mode === 'unfold',\n },\n labelClassName,\n )}\n >\n {label}\n </span>\n )}\n </span>\n );\n};\n"],"names":["Tag","className","backgroundColor","border","color","icon","label","theme","iconClassName","labelClassName","borderColor","getBorderColor","bgColor","getBgColor","textColor","getTextColor","hasIcon","mode","withBoth","withIcon","withLabel","jsxs","classNames","jsx","Icon"],"mappings":";;;;AAqDO,MAAMA,IAAmC,CAAC;AAAA,EAC/C,WAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,QAAAC,IAASD;AAAA,EACT,OAAAE,IAAQ;AAAA,EACR,MAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,OAAAC,IAAQ;AAAA,EACR,eAAAC;AAAA,EACA,gBAAAC;AACF,MAAM;AACJ,MAAI,CAACH,KAAS,CAACD;AACb,WAAO;AAGT,QAAMK,IAAcC,EAAeR,CAAM,GACnCS,IAAUC,EAAWX,CAAe,GACpCY,IAAYC,EAAaX,CAAK,GAE9BY,IAAU,CAAC,CAACX,GACZY,IAAOV,MAAU,UAAU,CAACS,IAAU,UAAUT,GAEhDW,IAAWD,MAAS,UAAUA,MAAS,UAAUA,MAAS,YAAYA,MAAS,QAC/EE,IAAWH,MAAYC,MAAS,UAAUC,IAC1CE,IAAYH,MAAS,WAAWA,MAAS,UAAUC;AAEzD,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC;AAAAA,QACT;AAAA,QACA;AAAA,UACE,WAAWL,MAAS;AAAA,UACpB,WAAWA,MAAS;AAAA,QAAA;AAAA,QAEtB;AAAA,UACE,OAAOA,MAAS,WAAWA,MAAS;AAAA,UACpC,cAAcA,MAAS;AAAA,UACvB,oBAAoBA,MAAS;AAAA,UAC7B,aAAaA,MAAS;AAAA,UACtB,YAAYA,MAAS;AAAA,UACrB,qBAAqBA,MAAS;AAAA,QAAA;AAAA,QAEhCP;AAAA,QACAE;AAAA,QACAE;AAAA,QACAb;AAAA,MAAA;AAAA,MAEF,OAAOK;AAAA,MACP,MAAK;AAAA,MAEJ,UAAA;AAAA,QAAAW,MAAS,cAAc,gBAAAM,EAAC,QAAA,EAAK,WAAU,wCAAwC,UAAAjB,GAAM;AAAA,QACrFa,KACC,gBAAAI;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAMnB;AAAA,YACN,WAAWiB,EAAW,EAAE,aAAaL,MAAS,OAAA,GAAUT,CAAa;AAAA,UAAA;AAAA,QAAA;AAAA,QAGxEY,KACC,gBAAAG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWD;AAAAA,cACT;AAAA,gBACE,mBAAmBL,MAAS,UAAUA,MAAS;AAAA,cAAA;AAAA,cAEjDR;AAAA,YAAA;AAAA,YAGD,UAAAH;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clubmed/trident-ui",
3
- "version": "1.3.0-beta.9",
3
+ "version": "1.3.0-rc.2",
4
4
  "type": "module",
5
5
  "description": "Shared ClubMed React UI components",
6
6
  "keywords": [
@@ -51,16 +51,16 @@
51
51
  "import": "./molecules/Forms/Checkboxes/index.js",
52
52
  "default": "./molecules/Forms/Checkboxes/index.js"
53
53
  },
54
- "./molecules/Forms/Password": {
55
- "types": "./molecules/Forms/Password/index.d.ts",
56
- "import": "./molecules/Forms/Password/index.js",
57
- "default": "./molecules/Forms/Password/index.js"
58
- },
59
54
  "./molecules/Forms/Radios": {
60
55
  "types": "./molecules/Forms/Radios/index.d.ts",
61
56
  "import": "./molecules/Forms/Radios/index.js",
62
57
  "default": "./molecules/Forms/Radios/index.js"
63
58
  },
59
+ "./molecules/Forms/Password": {
60
+ "types": "./molecules/Forms/Password/index.d.ts",
61
+ "import": "./molecules/Forms/Password/index.js",
62
+ "default": "./molecules/Forms/Password/index.js"
63
+ },
64
64
  "./fonts/*": "./fonts/*",
65
65
  "./atoms/*": {
66
66
  "types": "./atoms/*.d.ts",
@@ -82,10 +82,15 @@
82
82
  "import": "./hooks/*.js",
83
83
  "default": "./hooks/*.js"
84
84
  },
85
- "./tests/*": {
86
- "types": "./tests/*.d.ts",
87
- "import": "./tests/*.js",
88
- "default": "./tests/*.js"
85
+ "./types/*": {
86
+ "types": "./types/*.d.ts",
87
+ "import": "./types/*.js",
88
+ "default": "./types/*.js"
89
+ },
90
+ "./utils/*": {
91
+ "types": "./utils/*.d.ts",
92
+ "import": "./utils/*.js",
93
+ "default": "./utils/*.js"
89
94
  }
90
95
  },
91
96
  "scripts": {
@@ -104,86 +109,84 @@
104
109
  "dependencies": {
105
110
  "@juggle/resize-observer": "^3.4.0",
106
111
  "@use-gesture/react": "^10.2.26",
107
- "@whitespace/storybook-addon-html": "6.0.5",
108
- "build": "^0.1.4",
109
112
  "classnames": "^2.3.2",
110
113
  "date-fns": "^2.30.0",
111
114
  "react-day-picker": "^8.10.0",
112
115
  "react-hot-toast": "^2.4.1",
113
116
  "react-use-measure": "^2.1.1",
114
- "run": "^1.5.0",
115
117
  "use-boop": "^1.1.1",
116
118
  "use-resize-observer": "^9.1.0"
117
119
  },
118
120
  "devDependencies": {
119
- "@react-spring/web": "^9.7.3",
120
- "@clubmed/trident-icons": ">=1.0.1",
121
+ "@clubmed/trident-icons": ">=1.3.3",
121
122
  "@commitlint/cli": "18.6.1",
122
123
  "@commitlint/config-conventional": "18.6.2",
123
- "@netsells/storybook-mockdate": "^0.3.2",
124
- "@storybook/addon-a11y": "8.3.5",
125
- "@storybook/addon-actions": "8.3.5",
126
- "@storybook/addon-essentials": "8.3.5",
127
- "@storybook/addon-interactions": "8.3.5",
128
- "@storybook/addon-links": "8.3.5",
129
- "@storybook/addon-mdx-gfm": "8.3.5",
130
- "@storybook/addon-styling": "1.3.7",
131
- "@storybook/addon-viewport": "8.3.5",
132
- "@storybook/blocks": "8.3.5",
133
- "@storybook/react": "8.3.5",
134
- "@storybook/react-vite": "8.3.5",
135
- "@storybook/test": "8.3.5",
124
+ "@netsells/storybook-mockdate": "0.3.3",
125
+ "@react-spring/web": "^9.7.3",
126
+ "@storybook/addon-a11y": "9.1.1",
127
+ "@storybook/addon-docs": "9.1.1",
128
+ "@storybook/addon-links": "9.1.1",
129
+ "@storybook/addon-onboarding": "9.1.1",
130
+ "@storybook/addon-themes": "9.1.1",
131
+ "@storybook/addon-vitest": "^9.1.1",
132
+ "@storybook/react-vite": "9.1.1",
136
133
  "@svgr/rollup": "8.1.0",
137
134
  "@testing-library/jest-dom": "^6.3.0",
138
135
  "@testing-library/react": "^14.1.2",
139
136
  "@testing-library/user-event": "^14.5.2",
140
137
  "@types/fs-extra": "^11.0.4",
141
138
  "@types/picomatch": "^2.3.3",
139
+ "@types/lodash": "^4.17.20",
142
140
  "@types/react": "^18.2.48",
143
141
  "@types/react-dom": "^18.2.18",
144
142
  "@typescript-eslint/eslint-plugin": "^6.19.1",
145
143
  "@typescript-eslint/parser": "^6.19.1",
146
- "@vitejs/plugin-react": "^4.2.1",
147
- "@vitest/coverage-v8": "2.1.2",
144
+ "@vitejs/plugin-react-swc": "^4.0.0",
145
+ "@vitest/browser": "3.2.4",
146
+ "@vitest/coverage-v8": "3.2.4",
148
147
  "add": "^2.0.6",
149
148
  "autoprefixer": "^10.4.17",
150
149
  "change-case": "^5.4.3",
151
150
  "eslint": "^8.56.0",
152
151
  "eslint-config-prettier": "9.1.0",
152
+ "eslint-formatter-gitlab": "5.1.0",
153
153
  "eslint-plugin-prettier": "5.1.3",
154
154
  "eslint-plugin-react-hooks": "^4.6.0",
155
155
  "eslint-plugin-react-refresh": "^0.4.5",
156
- "eslint-plugin-storybook": "^0.6.15",
156
+ "eslint-plugin-storybook": "^9.1.1",
157
157
  "figures": "^6.1.0",
158
158
  "fs-extra": "^11.2.0",
159
159
  "globby": "^14.0.1",
160
160
  "husky": "^9.0.11",
161
+ "jest-axe": "^10.0.0",
161
162
  "jsdom": "^22.1.0",
162
163
  "lint-staged": "^15.2.2",
163
164
  "picomatch": "^4.0.1",
165
+ "playwright": "^1.54.2",
164
166
  "postcss": "^8.4.32",
165
167
  "prettier": "3.2.5",
166
168
  "react": "^18.2.0",
167
169
  "react-dom": "^18.2.0",
168
170
  "react-syntax-highlighter": "^15.5.0",
169
171
  "rollup-preserve-directives": "^1.1.1",
170
- "storybook": "8.3.5",
172
+ "storybook": "9.1.1",
171
173
  "svgtofont": "^4.2.0",
172
174
  "tailwindcss": "^3.3.5",
173
175
  "ts-node": "^10.9.2",
174
176
  "typescript": "^5.2.2",
175
- "vite": "5.4.8",
176
- "vite-plugin-dts": "^3.6.4",
177
- "vite-plugin-static-copy": "1.0.1",
178
- "vite-plugin-svgr": "^4.2.0",
179
- "vitest": "^2.1.2"
177
+ "vite": "7.1.1",
178
+ "vite-plugin-dts": "4.5.4",
179
+ "vite-plugin-static-copy": "3.1.1",
180
+ "vite-plugin-svgr": "4.3.0",
181
+ "vite-tsconfig-paths": "^5.1.4",
182
+ "vitest": "3.2.4"
180
183
  },
181
184
  "peerDependencies": {
185
+ "@clubmed/trident-icons": ">=1.3.3",
186
+ "@react-spring/web": ">=9",
182
187
  "react": ">=17.0.2",
183
188
  "react-dom": ">=17.0.2",
184
- "tailwindcss": ">=3.3.5",
185
- "@clubmed/trident-icons": ">=1.0.1",
186
- "@react-spring/web": ">=9"
189
+ "tailwindcss": ">=3.3.5"
187
190
  },
188
191
  "peerDependenciesMeta": {
189
192
  "@clubmed/trident-icons": {
package/styles/index.css CHANGED
@@ -1,4 +1,4 @@
1
1
  /* This file is used to import all the stylesheets */
2
2
  @import './globals.css';
3
3
  /* do not remove the line below */
4
- @import '../assets/style.css';
4
+ @import '../assets/trident-ui.css';
@@ -1,4 +1,4 @@
1
1
  export declare const animationDelay: {
2
- handler: import("tailwindcss/types/config").PluginCreator;
3
- config?: Partial<import("tailwindcss/types/config").Config> | undefined;
2
+ handler: import('tailwindcss/types/config').PluginCreator;
3
+ config?: Partial<import('tailwindcss/types/config').Config>;
4
4
  };
@@ -1,4 +1,4 @@
1
1
  export declare const hocus: {
2
- handler: import("tailwindcss/types/config").PluginCreator;
3
- config?: Partial<import("tailwindcss/types/config").Config> | undefined;
2
+ handler: import('tailwindcss/types/config').PluginCreator;
3
+ config?: Partial<import('tailwindcss/types/config').Config>;
4
4
  };
@@ -1,4 +1,4 @@
1
1
  export declare const lineClampSafariFix: {
2
- handler: import("tailwindcss/types/config").PluginCreator;
3
- config?: Partial<import("tailwindcss/types/config").Config> | undefined;
2
+ handler: import('tailwindcss/types/config').PluginCreator;
3
+ config?: Partial<import('tailwindcss/types/config').Config>;
4
4
  };
@@ -1,4 +1,4 @@
1
1
  export declare const popover: {
2
- handler: import("tailwindcss/types/config").PluginCreator;
3
- config?: Partial<import("tailwindcss/types/config").Config> | undefined;
2
+ handler: import('tailwindcss/types/config').PluginCreator;
3
+ config?: Partial<import('tailwindcss/types/config').Config>;
4
4
  };
@@ -1,4 +1,4 @@
1
1
  export declare const startingStyle: {
2
- handler: import("tailwindcss/types/config").PluginCreator;
3
- config?: Partial<import("tailwindcss/types/config").Config> | undefined;
2
+ handler: import('tailwindcss/types/config').PluginCreator;
3
+ config?: Partial<import('tailwindcss/types/config').Config>;
4
4
  };
@@ -1,4 +1,4 @@
1
1
  export declare const transitionBehavior: {
2
- handler: import("tailwindcss/types/config").PluginCreator;
3
- config?: Partial<import("tailwindcss/types/config").Config> | undefined;
2
+ handler: import('tailwindcss/types/config').PluginCreator;
3
+ config?: Partial<import('tailwindcss/types/config').Config>;
4
4
  };