@clubmed/trident-ui 2.0.0-beta.4 → 2.0.0-beta.40

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 (206) hide show
  1. package/chunks/Carousel.context.js +1548 -0
  2. package/chunks/Carousel.context.js.map +1 -0
  3. package/chunks/ChatMessage.js +14395 -0
  4. package/chunks/ChatMessage.js.map +1 -0
  5. package/chunks/DateField.js +177 -63
  6. package/chunks/DateField.js.map +1 -1
  7. package/chunks/Tooltip.js +4461 -0
  8. package/chunks/Tooltip.js.map +1 -0
  9. package/chunks/chunk.js +11 -4
  10. package/chunks/client.js +18953 -0
  11. package/chunks/client.js.map +1 -0
  12. package/examples/button-demo.js +2 -2
  13. package/examples/button-demo.js.map +1 -1
  14. package/examples/chat-input-demo.d.ts +1 -0
  15. package/examples/chat-input-demo.js +21 -0
  16. package/examples/chat-input-demo.js.map +1 -0
  17. package/examples/chat-message-demo.d.ts +1 -0
  18. package/examples/chat-message-demo.js +20 -0
  19. package/examples/chat-message-demo.js.map +1 -0
  20. package/examples/chat-typing-indicator-demo.d.ts +1 -0
  21. package/examples/chat-typing-indicator-demo.js +14 -0
  22. package/examples/chat-typing-indicator-demo.js.map +1 -0
  23. package/examples/chat-window-demo.d.ts +1 -0
  24. package/examples/chat-window-demo.js +45 -0
  25. package/examples/chat-window-demo.js.map +1 -0
  26. package/examples/checkbox-demo.js +16 -20
  27. package/examples/checkbox-demo.js.map +1 -1
  28. package/examples/checkbox-select-demo.d.ts +1 -0
  29. package/examples/checkbox-select-demo.js +101 -0
  30. package/examples/checkbox-select-demo.js.map +1 -0
  31. package/examples/checkboxes-demo.js +6 -6
  32. package/examples/checkboxes-demo.js.map +1 -1
  33. package/examples/checkboxes-with-form-control-demo.js +4 -4
  34. package/examples/choice-expander-demo.js +4 -67
  35. package/examples/choice-expander-demo.js.map +1 -1
  36. package/examples/dropdown-demo.js +9 -1
  37. package/examples/dropdown-demo.js.map +1 -1
  38. package/examples/elastic-height-demo.js +2 -1
  39. package/examples/elastic-height-demo.js.map +1 -1
  40. package/examples/frame-demo.d.ts +1 -0
  41. package/examples/frame-demo.js +36 -0
  42. package/examples/frame-demo.js.map +1 -0
  43. package/examples/frame-horizontal-demo.d.ts +1 -0
  44. package/examples/frame-horizontal-demo.js +44 -0
  45. package/examples/frame-horizontal-demo.js.map +1 -0
  46. package/examples/frame-no-image-demo.d.ts +1 -0
  47. package/examples/frame-no-image-demo.js +47 -0
  48. package/examples/frame-no-image-demo.js.map +1 -0
  49. package/examples/frame-vertical-demo.d.ts +1 -0
  50. package/examples/frame-vertical-demo.js +44 -0
  51. package/examples/frame-vertical-demo.js.map +1 -0
  52. package/examples/frame-with-tag-demo.d.ts +1 -0
  53. package/examples/frame-with-tag-demo.js +48 -0
  54. package/examples/frame-with-tag-demo.js.map +1 -0
  55. package/examples/scrollbar-demo.d.ts +1 -0
  56. package/examples/scrollbar-demo.js +40 -0
  57. package/examples/scrollbar-demo.js.map +1 -0
  58. package/examples/slider-frame-demo.d.ts +1 -0
  59. package/examples/slider-frame-demo.js +38 -0
  60. package/examples/slider-frame-demo.js.map +1 -0
  61. package/examples/slider-frame-with-button-demo.d.ts +1 -0
  62. package/examples/slider-frame-with-button-demo.js +46 -0
  63. package/examples/slider-frame-with-button-demo.js.map +1 -0
  64. package/examples/slider-frame-with-tag-demo.d.ts +1 -0
  65. package/examples/slider-frame-with-tag-demo.js +50 -0
  66. package/examples/slider-frame-with-tag-demo.js.map +1 -0
  67. package/examples/switch-demo.js +1 -1
  68. package/examples/switch-demo.js.map +1 -1
  69. package/examples/tooltip-demo.d.ts +1 -0
  70. package/examples/tooltip-demo.js +103 -0
  71. package/examples/tooltip-demo.js.map +1 -0
  72. package/package.json +10 -3
  73. package/styles/animate.css +19 -19
  74. package/styles/components.css +82 -0
  75. package/styles/theme.css +23 -18
  76. package/styles/ui/button.css +19 -25
  77. package/styles/ui/chat-button.css +68 -1
  78. package/styles/ui/controls.css +9 -63
  79. package/styles/ui/range.css +1 -1
  80. package/styles/variants.css +0 -2
  81. package/ui/AdvancedToast.js +11 -11
  82. package/ui/AdvancedToast.js.map +1 -1
  83. package/ui/BasicToast.js +1 -1
  84. package/ui/BasicToast.js.map +1 -1
  85. package/ui/Breadcrumb.d.ts +2 -2
  86. package/ui/Breadcrumb.js +31 -35
  87. package/ui/Breadcrumb.js.map +1 -1
  88. package/ui/ChatButton.js +1 -1
  89. package/ui/ChatButton.js.map +1 -1
  90. package/ui/ChatInput.d.ts +10 -0
  91. package/ui/ChatInput.js +149 -0
  92. package/ui/ChatInput.js.map +1 -0
  93. package/ui/ChatMessage.d.ts +6 -0
  94. package/ui/ChatMessage.js +2 -0
  95. package/ui/ChatTypingIndicator.d.ts +2 -0
  96. package/ui/ChatTypingIndicator.js +30 -0
  97. package/ui/ChatTypingIndicator.js.map +1 -0
  98. package/ui/ChatWindow.d.ts +21 -0
  99. package/ui/ChatWindow.js +108 -0
  100. package/ui/ChatWindow.js.map +1 -0
  101. package/ui/ChoiceExpander.js +1 -1
  102. package/ui/ChoiceExpander.js.map +1 -1
  103. package/ui/Dropdown.d.ts +20 -3
  104. package/ui/Dropdown.js +57 -23
  105. package/ui/Dropdown.js.map +1 -1
  106. package/ui/ElasticHeight.d.ts +0 -1
  107. package/ui/ElasticHeight.js +14 -23
  108. package/ui/ElasticHeight.js.map +1 -1
  109. package/ui/Loader.d.ts +5 -4
  110. package/ui/Loader.js +11 -10
  111. package/ui/Loader.js.map +1 -1
  112. package/ui/Popin.js +2 -2
  113. package/ui/Popin.js.map +1 -1
  114. package/ui/Scrollbar.d.ts +14 -0
  115. package/ui/Scrollbar.js +68 -0
  116. package/ui/Scrollbar.js.map +1 -0
  117. package/ui/SidebarLayout.d.ts +3 -1
  118. package/ui/SidebarLayout.js +32 -24
  119. package/ui/SidebarLayout.js.map +1 -1
  120. package/ui/Tooltip.d.ts +8 -0
  121. package/ui/Tooltip.js +2 -0
  122. package/ui/arrows/Arrows.d.ts +1 -0
  123. package/ui/arrows/Arrows.js +19 -17
  124. package/ui/arrows/Arrows.js.map +1 -1
  125. package/ui/buttons/Button.type.d.ts +1 -1
  126. package/ui/buttons/Button.type.js.map +1 -1
  127. package/ui/carousel/Carousel.context.d.ts +27 -0
  128. package/ui/carousel/Carousel.context.js +2 -0
  129. package/ui/carousel/Carousel.d.ts +3 -0
  130. package/ui/carousel/Carousel.js +12 -0
  131. package/ui/carousel/Carousel.js.map +1 -0
  132. package/ui/carousel/CarouselBody.d.ts +6 -0
  133. package/ui/carousel/CarouselBody.js +21 -0
  134. package/ui/carousel/CarouselBody.js.map +1 -0
  135. package/ui/carousel/CarouselItem.d.ts +6 -0
  136. package/ui/carousel/CarouselItem.js +21 -0
  137. package/ui/carousel/CarouselItem.js.map +1 -0
  138. package/ui/carousel/CarouselNext.d.ts +8 -0
  139. package/ui/carousel/CarouselNext.js +23 -0
  140. package/ui/carousel/CarouselNext.js.map +1 -0
  141. package/ui/carousel/CarouselPrevious.d.ts +8 -0
  142. package/ui/carousel/CarouselPrevious.js +23 -0
  143. package/ui/carousel/CarouselPrevious.js.map +1 -0
  144. package/ui/contexts/TridentUIConfig.js +1 -1
  145. package/ui/forms/CheckboxSelect.d.ts +31 -0
  146. package/ui/forms/CheckboxSelect.js +119 -0
  147. package/ui/forms/CheckboxSelect.js.map +1 -0
  148. package/ui/forms/Filter.d.ts +8 -4
  149. package/ui/forms/Filter.js +23 -45
  150. package/ui/forms/Filter.js.map +1 -1
  151. package/ui/forms/FormControl.js +6 -6
  152. package/ui/forms/NumberField.d.ts +10 -10
  153. package/ui/forms/NumberField.js +8 -8
  154. package/ui/forms/PhoneField.d.ts +5 -10
  155. package/ui/forms/PhoneField.js +29 -211
  156. package/ui/forms/PhoneField.js.map +1 -1
  157. package/ui/forms/PhoneFieldFullInput.d.ts +16 -0
  158. package/ui/forms/PhoneFieldFullInput.js +116 -0
  159. package/ui/forms/PhoneFieldFullInput.js.map +1 -0
  160. package/ui/forms/PhoneFieldSplitInput.d.ts +19 -0
  161. package/ui/forms/PhoneFieldSplitInput.js +159 -0
  162. package/ui/forms/PhoneFieldSplitInput.js.map +1 -0
  163. package/ui/forms/Select.js +4 -4
  164. package/ui/forms/Switch.d.ts +3 -3
  165. package/ui/forms/Switch.js +51 -34
  166. package/ui/forms/Switch.js.map +1 -1
  167. package/ui/forms/TextField.js +4 -4
  168. package/ui/forms/TextField.js.map +1 -1
  169. package/ui/forms/checkboxes/Checkbox.d.ts +10 -12
  170. package/ui/forms/checkboxes/Checkbox.js +38 -55
  171. package/ui/forms/checkboxes/Checkbox.js.map +1 -1
  172. package/ui/forms/checkboxes/Checkboxes.js +2 -2
  173. package/ui/forms/checkboxes/Checkboxes.js.map +1 -1
  174. package/ui/forms/password/Password.js +4 -4
  175. package/ui/frame/Frame.d.ts +8 -0
  176. package/ui/frame/Frame.js +16 -0
  177. package/ui/frame/Frame.js.map +1 -0
  178. package/ui/frame/FrameLabelsWrapper.d.ts +5 -0
  179. package/ui/frame/FrameLabelsWrapper.js +12 -0
  180. package/ui/frame/FrameLabelsWrapper.js.map +1 -0
  181. package/ui/frame/FrameTitle.d.ts +7 -0
  182. package/ui/frame/FrameTitle.js +25 -0
  183. package/ui/frame/FrameTitle.js.map +1 -0
  184. package/ui/frame/FrameWrapper.d.ts +6 -0
  185. package/ui/frame/FrameWrapper.js +14 -0
  186. package/ui/frame/FrameWrapper.js.map +1 -0
  187. package/ui/frame/SliderFrame.d.ts +14 -0
  188. package/ui/frame/SliderFrame.js +50 -0
  189. package/ui/frame/SliderFrame.js.map +1 -0
  190. package/ui/helpers/colors/colors.d.ts +4 -0
  191. package/ui/helpers/colors/colors.js +6 -1
  192. package/ui/helpers/colors/colors.js.map +1 -1
  193. package/ui/helpers/phone/defaultPrefixes.js +28 -28
  194. package/ui/helpers/phone/defaultPrefixes.js.map +1 -1
  195. package/ui/helpers/phone/formatters.d.ts +11 -0
  196. package/ui/helpers/phone/formatters.js +32 -1
  197. package/ui/helpers/phone/formatters.js.map +1 -1
  198. package/ui/helpers/phone/index.d.ts +1 -1
  199. package/ui/helpers/phone/index.js +3 -3
  200. package/ui/hooks/useValue.js +1 -1
  201. package/ui/hooks/useValue.js.map +1 -1
  202. package/ui/tabs/Tabs.js +1 -1
  203. package/ui/tabs/Tabs.js.map +1 -1
  204. package/ui/Breadcrumb.themes.d.ts +0 -8
  205. package/ui/Breadcrumb.themes.js +0 -16
  206. package/ui/Breadcrumb.themes.js.map +0 -1
@@ -0,0 +1,14 @@
1
+ import { FunctionComponent } from 'react';
2
+ import { ImageProps } from '../Image';
3
+ import { FrameWrapperProps } from './FrameWrapper';
4
+ interface SliderLabels {
5
+ next: string;
6
+ previous: string;
7
+ }
8
+ export interface SliderFrameProps extends FrameWrapperProps {
9
+ describedby?: string;
10
+ items: ImageProps[];
11
+ labels: SliderLabels;
12
+ }
13
+ export declare const SliderFrame: FunctionComponent<SliderFrameProps>;
14
+ export {};
@@ -0,0 +1,50 @@
1
+ "use client";
2
+ import { Image as e } from "../Image.js";
3
+ import { FrameWrapper as t } from "./FrameWrapper.js";
4
+ import { Carousel as n } from "../carousel/Carousel.js";
5
+ import { CarouselBody as r } from "../carousel/CarouselBody.js";
6
+ import { CarouselItem as i } from "../carousel/CarouselItem.js";
7
+ import { CarouselNext as a } from "../carousel/CarouselNext.js";
8
+ import { CarouselPrevious as o } from "../carousel/CarouselPrevious.js";
9
+ import { useMemo as s } from "react";
10
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
11
+ //#region lib/ui/frame/SliderFrame.tsx
12
+ var u = ({ children: u, describedby: d, items: f, labels: p, ...m }) => {
13
+ let h = f.length > 1, g = s(() => f.map((t) => /* @__PURE__ */ c(e, {
14
+ ...t,
15
+ className: "pointer-events-none size-full object-cover"
16
+ }, t.src)), [f]);
17
+ return /* @__PURE__ */ l(t, {
18
+ ...m,
19
+ children: [h ? /* @__PURE__ */ l(n, {
20
+ className: "rounded-16 h-full select-none",
21
+ children: [/* @__PURE__ */ c(r, {
22
+ className: "h-full",
23
+ scrollClassName: "h-full auto-cols-full",
24
+ children: g.map((e, t) => /* @__PURE__ */ c(i, {
25
+ index: t,
26
+ children: /* @__PURE__ */ c("div", {
27
+ className: "h-full overflow-hidden",
28
+ children: e
29
+ })
30
+ }, t))
31
+ }), /* @__PURE__ */ l("div", {
32
+ className: "pointer-events-none absolute inset-0 z-1 -mx-70 flex items-center justify-between gap-x-20 px-12 opacity-0 transition-all group-hover:mx-0 group-hover:opacity-100",
33
+ children: [/* @__PURE__ */ c(o, {
34
+ "aria-describedby": d,
35
+ label: p.previous
36
+ }), /* @__PURE__ */ c(a, {
37
+ "aria-describedby": d,
38
+ label: p.next
39
+ })]
40
+ })]
41
+ }) : /* @__PURE__ */ c(e, {
42
+ ...f[0],
43
+ className: "size-full object-cover"
44
+ }), u]
45
+ });
46
+ };
47
+ //#endregion
48
+ export { u as SliderFrame };
49
+
50
+ //# sourceMappingURL=SliderFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SliderFrame.js","names":[],"sources":["../../../lib/ui/frame/SliderFrame.tsx"],"sourcesContent":["'use client';\nimport { type FunctionComponent, useMemo } from 'react';\n\nimport { Image, type ImageProps } from '../Image';\nimport { Carousel } from '../carousel/Carousel';\nimport { CarouselBody } from '../carousel/CarouselBody';\nimport { CarouselItem } from '../carousel/CarouselItem';\nimport { CarouselNext } from '../carousel/CarouselNext';\nimport { CarouselPrevious } from '../carousel/CarouselPrevious';\n\nimport { FrameWrapper, type FrameWrapperProps } from './FrameWrapper';\n\ninterface SliderLabels {\n next: string;\n previous: string;\n}\n\nexport interface SliderFrameProps extends FrameWrapperProps {\n describedby?: string;\n items: ImageProps[];\n labels: SliderLabels;\n}\n\nexport const SliderFrame: FunctionComponent<SliderFrameProps> = ({\n children,\n describedby,\n items,\n labels,\n ...props\n}) => {\n const hasScroll = items.length > 1;\n\n const sliderItems = useMemo(\n () =>\n items.map((item) => (\n <Image key={item.src} {...item} className=\"pointer-events-none size-full object-cover\" />\n )),\n [items],\n );\n\n return (\n <FrameWrapper {...props}>\n {hasScroll ? (\n <Carousel className=\"rounded-16 h-full select-none\">\n <CarouselBody className=\"h-full\" scrollClassName=\"h-full auto-cols-full\">\n {sliderItems.map((item, i) => (\n <CarouselItem index={i} key={i}>\n <div className=\"h-full overflow-hidden\">{item}</div>\n </CarouselItem>\n ))}\n </CarouselBody>\n <div className=\"pointer-events-none absolute inset-0 z-1 -mx-70 flex items-center justify-between gap-x-20 px-12 opacity-0 transition-all group-hover:mx-0 group-hover:opacity-100\">\n <CarouselPrevious aria-describedby={describedby} label={labels.previous} />\n <CarouselNext aria-describedby={describedby} label={labels.next} />\n </div>\n </Carousel>\n ) : (\n <Image {...items[0]} className=\"size-full object-cover\" />\n )}\n {children}\n </FrameWrapper>\n );\n};\n"],"mappings":";;;;;;;;;;;AAuBA,IAAa,KAAoD,EAC/D,aACA,gBACA,UACA,WACA,GAAG,QACC;CACJ,IAAM,IAAY,EAAM,SAAS,GAE3B,IAAc,QAEhB,EAAM,KAAK,MACT,kBAAC,GAAD;EAAsB,GAAI;EAAM,WAAU;EAA+C,EAA7E,EAAK,IAAwE,CACzF,EACJ,CAAC,EAAM,CACR;AAED,QACE,kBAAC,GAAD;EAAc,GAAI;YAAlB,CACG,IACC,kBAAC,GAAD;GAAU,WAAU;aAApB,CACE,kBAAC,GAAD;IAAc,WAAU;IAAS,iBAAgB;cAC9C,EAAY,KAAK,GAAM,MACtB,kBAAC,GAAD;KAAc,OAAO;eACnB,kBAAC,OAAD;MAAK,WAAU;gBAA0B;MAAW,CAAA;KACvC,EAFc,EAEd,CAAA;IAEJ,CAAA,EACf,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAkB,oBAAkB;KAAa,OAAO,EAAO;KAAY,CAAA,EAC3E,kBAAC,GAAD;KAAc,oBAAkB;KAAa,OAAO,EAAO;KAAQ,CAAA,CAAA;;OAIvE,kBAAC,GAAD;GAAO,GAAI,EAAM;GAAI,WAAU;GAA2B,CAAA,EAE3D,EAAA"}
@@ -8,6 +8,7 @@ export declare enum Colors {
8
8
  lightSand = "lightSand",
9
9
  marygold = "marygold",
10
10
  orange = "orange",
11
+ pearl = "pearl",
11
12
  red = "red",
12
13
  saffron = "saffron",
13
14
  sand = "sand",
@@ -47,6 +48,7 @@ declare const BG_COLORS: {
47
48
  readonly lightSand: "bg-lightSand";
48
49
  readonly marygold: "bg-marygold";
49
50
  readonly orange: "bg-orange";
51
+ readonly pearl: "bg-pearl";
50
52
  readonly red: "bg-red";
51
53
  readonly saffron: "bg-saffron";
52
54
  readonly sand: "bg-sand";
@@ -65,6 +67,7 @@ declare const TEXT_COLORS: {
65
67
  readonly lightSand: "text-lightSand";
66
68
  readonly marygold: "text-marygold";
67
69
  readonly orange: "text-orange";
70
+ readonly pearl: "text-pearl";
68
71
  readonly red: "text-red";
69
72
  readonly saffron: "text-saffron";
70
73
  readonly sand: "text-sand";
@@ -85,6 +88,7 @@ declare const TO_COLORS: {
85
88
  readonly lightSand: "to-lightSand";
86
89
  readonly marygold: "to-marygold";
87
90
  readonly orange: "to-orange";
91
+ readonly pearl: "to-pearl";
88
92
  readonly red: "to-red";
89
93
  readonly saffron: "to-saffron";
90
94
  readonly sand: "to-sand";
@@ -1,6 +1,6 @@
1
1
  //#region lib/ui/helpers/colors/colors.ts
2
2
  var e = /* @__PURE__ */ function(e) {
3
- return e.black = "black", e.darkGrey = "darkGrey", e.green = "green", e.lavender = "lavender", e.lightGrey = "lightGrey", e.lightSand = "lightSand", e.marygold = "marygold", e.orange = "orange", e.red = "red", e.saffron = "saffron", e.sand = "sand", e.sienna = "sienna", e.ultramarine = "ultramarine", e.verdigris = "verdigris", e.wave = "wave", e.white = "white", e.current = "current", e;
3
+ return e.black = "black", e.darkGrey = "darkGrey", e.green = "green", e.lavender = "lavender", e.lightGrey = "lightGrey", e.lightSand = "lightSand", e.marygold = "marygold", e.orange = "orange", e.pearl = "pearl", e.red = "red", e.saffron = "saffron", e.sand = "sand", e.sienna = "sienna", e.ultramarine = "ultramarine", e.verdigris = "verdigris", e.wave = "wave", e.white = "white", e.current = "current", e;
4
4
  }({}), t = {
5
5
  [e.black]: "border-black",
6
6
  [e.darkGrey]: "border-darkGrey",
@@ -28,6 +28,7 @@ var e = /* @__PURE__ */ function(e) {
28
28
  [e.lightSand]: "bg-lightSand",
29
29
  [e.marygold]: "bg-marygold",
30
30
  [e.orange]: "bg-orange",
31
+ [e.pearl]: "bg-pearl",
31
32
  [e.red]: "bg-red",
32
33
  [e.saffron]: "bg-saffron",
33
34
  [e.sand]: "bg-sand",
@@ -44,6 +45,7 @@ var e = /* @__PURE__ */ function(e) {
44
45
  [e.lightSand]: "text-lightSand",
45
46
  [e.marygold]: "text-marygold",
46
47
  [e.orange]: "text-orange",
48
+ [e.pearl]: "text-pearl",
47
49
  [e.red]: "text-red",
48
50
  [e.saffron]: "text-saffron",
49
51
  [e.sand]: "text-sand",
@@ -62,6 +64,7 @@ var e = /* @__PURE__ */ function(e) {
62
64
  [e.lightSand]: "to-lightSand",
63
65
  [e.marygold]: "to-marygold",
64
66
  [e.orange]: "to-orange",
67
+ [e.pearl]: "to-pearl",
65
68
  [e.red]: "to-red",
66
69
  [e.saffron]: "to-saffron",
67
70
  [e.sand]: "to-sand",
@@ -80,6 +83,7 @@ var e = /* @__PURE__ */ function(e) {
80
83
  [e.sand]: e.black,
81
84
  [e.verdigris]: e.black,
82
85
  [e.white]: e.black,
86
+ [e.pearl]: e.black,
83
87
  [e.black]: e.white,
84
88
  [e.green]: e.white,
85
89
  [e.lavender]: e.white,
@@ -111,6 +115,7 @@ var e = /* @__PURE__ */ function(e) {
111
115
  [e.green]: "text-white",
112
116
  [e.lavender]: "text-white",
113
117
  [e.orange]: "text-white",
118
+ [e.pearl]: "text-white",
114
119
  [e.red]: "text-white",
115
120
  [e.sienna]: "text-white",
116
121
  [e.ultramarine]: "text-white",
@@ -1 +1 @@
1
- {"version":3,"file":"colors.js","names":[],"sources":["../../../../lib/ui/helpers/colors/colors.ts"],"sourcesContent":["import type { Theme } from '../../types/Theme';\n\nexport enum Colors {\n black = 'black',\n darkGrey = 'darkGrey',\n green = 'green',\n lavender = 'lavender',\n lightGrey = 'lightGrey',\n lightSand = 'lightSand',\n marygold = 'marygold',\n orange = 'orange',\n red = 'red',\n saffron = 'saffron',\n sand = 'sand',\n sienna = 'sienna',\n ultramarine = 'ultramarine',\n verdigris = 'verdigris',\n wave = 'wave',\n white = 'white',\n current = 'current',\n}\n\nconst BORDER_COLORS = {\n [Colors.black]: 'border-black',\n [Colors.darkGrey]: 'border-darkGrey',\n [Colors.green]: 'border-green',\n [Colors.lavender]: 'border-lavender',\n [Colors.lightGrey]: 'border-lightGrey',\n [Colors.lightSand]: 'border-lightSand',\n [Colors.marygold]: 'border-marygold',\n [Colors.orange]: 'border-orange',\n [Colors.red]: 'border-red',\n [Colors.saffron]: 'border-saffron',\n [Colors.sand]: 'border-sand',\n [Colors.sienna]: 'border-sienna',\n [Colors.ultramarine]: 'border-ultramarine',\n [Colors.verdigris]: 'border-verdigris',\n [Colors.wave]: 'border-wave',\n [Colors.white]: 'border-white',\n [Colors.current]: 'border-current',\n} as const satisfies Record<string, `border-${string}`>;\n\nexport type BorderColor = keyof typeof BORDER_COLORS;\n\nconst BG_COLORS = {\n [Colors.black]: 'bg-black',\n [Colors.darkGrey]: 'bg-darkGrey',\n [Colors.green]: 'bg-green',\n [Colors.lavender]: 'bg-lavender',\n [Colors.lightGrey]: 'bg-lightGrey',\n [Colors.lightSand]: 'bg-lightSand',\n [Colors.marygold]: 'bg-marygold',\n [Colors.orange]: 'bg-orange',\n [Colors.red]: 'bg-red',\n [Colors.saffron]: 'bg-saffron',\n [Colors.sand]: 'bg-sand',\n [Colors.sienna]: 'bg-sienna',\n [Colors.ultramarine]: 'bg-ultramarine',\n [Colors.verdigris]: 'bg-verdigris',\n [Colors.wave]: 'bg-wave',\n [Colors.white]: 'bg-white',\n [Colors.current]: 'bg-current',\n} as const satisfies Record<Colors, `bg-${string}`>;\n\nexport type BgColor = keyof typeof BG_COLORS;\n\nconst TEXT_COLORS = {\n [Colors.black]: 'text-black',\n [Colors.green]: 'text-green',\n [Colors.lavender]: 'text-lavender',\n [Colors.lightSand]: 'text-lightSand',\n [Colors.marygold]: 'text-marygold',\n [Colors.orange]: 'text-orange',\n [Colors.red]: 'text-red',\n [Colors.saffron]: 'text-saffron',\n [Colors.sand]: 'text-sand',\n [Colors.sienna]: 'text-sienna',\n [Colors.ultramarine]: 'text-ultramarine',\n [Colors.verdigris]: 'text-verdigris',\n [Colors.wave]: 'text-wave',\n [Colors.white]: 'text-white',\n [Colors.darkGrey]: 'text-darkGrey',\n [Colors.lightGrey]: 'text-lightGrey',\n [Colors.current]: 'text-current',\n} as const satisfies Record<Colors, `text-${string}`>;\n\nexport type TextColor = keyof typeof TEXT_COLORS;\n\nconst TO_COLORS = {\n [Colors.black]: `to-black`,\n [Colors.green]: `to-green`,\n [Colors.lavender]: `to-lavender`,\n [Colors.lightSand]: `to-lightSand`,\n [Colors.marygold]: `to-marygold`,\n [Colors.orange]: `to-orange`,\n [Colors.red]: `to-red`,\n [Colors.saffron]: `to-saffron`,\n [Colors.sand]: `to-sand`,\n [Colors.sienna]: `to-sienna`,\n [Colors.ultramarine]: `to-ultramarine`,\n [Colors.verdigris]: `to-verdigris`,\n [Colors.wave]: `to-wave`,\n [Colors.white]: `to-white`,\n [Colors.darkGrey]: `to-darkGrey`,\n [Colors.lightGrey]: `to-lightGrey`,\n [Colors.current]: `to-current`,\n} as const satisfies Record<keyof typeof Colors, `to-${string}`>;\n\nexport type ToColor = keyof typeof TO_COLORS;\n\nconst COMPLEMENTARY_COLORS = {\n [Colors.lightSand]: Colors.black,\n [Colors.marygold]: Colors.black,\n [Colors.saffron]: Colors.black,\n [Colors.sand]: Colors.black,\n [Colors.verdigris]: Colors.black,\n [Colors.white]: Colors.black,\n [Colors.black]: Colors.white,\n [Colors.green]: Colors.white,\n [Colors.lavender]: Colors.white,\n [Colors.orange]: Colors.white,\n [Colors.red]: Colors.white,\n [Colors.sienna]: Colors.white,\n [Colors.ultramarine]: Colors.white,\n [Colors.wave]: Colors.white,\n [Colors.darkGrey]: Colors.white,\n [Colors.lightGrey]: Colors.black,\n [Colors.current]: Colors.white,\n} as const satisfies Record<keyof typeof Colors, Colors.white | Colors.black>;\n\nconst THEME_TO_COLOR: Record<string, Colors> = {\n dark: Colors.ultramarine,\n exclusiveCollection: Colors.ultramarine,\n coreRange: Colors.lightSand,\n light: Colors.lightSand,\n happyToCare: Colors.verdigris,\n joyview: Colors.wave,\n urbanOasis: Colors.marygold,\n yellow: Colors.saffron,\n};\n\nconst COMPLEMENTARY_TEXT_COLOR_CONFIG = {\n [Colors.lightSand]: 'text-black',\n [Colors.marygold]: 'text-black',\n [Colors.saffron]: 'text-black',\n [Colors.sand]: 'text-black',\n [Colors.verdigris]: 'text-black',\n [Colors.white]: 'text-black',\n [Colors.black]: 'text-white',\n [Colors.green]: 'text-white',\n [Colors.lavender]: 'text-white',\n [Colors.orange]: 'text-white',\n [Colors.red]: 'text-white',\n [Colors.sienna]: 'text-white',\n [Colors.ultramarine]: 'text-white',\n [Colors.wave]: 'text-white',\n [Colors.darkGrey]: 'text-white',\n [Colors.lightGrey]: 'text-black',\n [Colors.current]: 'text-current',\n} as const satisfies Record<keyof typeof Colors, `text-${string}`>;\n\nconst colorGuard = <T extends Record<string, string>, K extends keyof T>(\n color: string | K,\n obj: T,\n): color is K => {\n return color in obj;\n};\n\nexport const getBorderColor = (color: string): `border-${string}` => {\n if (colorGuard(color, BORDER_COLORS)) {\n return BORDER_COLORS[color];\n }\n\n return `border-${color}`;\n};\n\nexport const getBgColor = (color: string): `bg-${string}` => {\n if (colorGuard(color, BG_COLORS)) {\n return BG_COLORS[color];\n }\n\n return `bg-${color}`;\n};\n\nexport const getTextColor = (color: string): `text-${string}` => {\n if (colorGuard(color, TEXT_COLORS)) {\n return TEXT_COLORS[color];\n }\n\n return `text-${color}`;\n};\n\nexport const getGradientToColor = (color: string): `to-${string}` => {\n if (colorGuard(color, TO_COLORS)) {\n return TO_COLORS[color];\n }\n\n return `to-${color}`;\n};\n\nexport const getComplementaryTextColor = (color: string): `text-${string}` => {\n return COMPLEMENTARY_TEXT_COLOR_CONFIG[color as Colors] || 'text-white';\n};\n\nexport const getComplementaryColor = (color: string): Colors => {\n return COMPLEMENTARY_COLORS[color as Colors] || 'white';\n};\n\nexport const getThemeColor = (theme: Theme): Colors => {\n return THEME_TO_COLOR[theme] || theme;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"colors.js","names":[],"sources":["../../../../lib/ui/helpers/colors/colors.ts"],"sourcesContent":["import type { Theme } from '../../types/Theme';\n\nexport enum Colors {\n black = 'black',\n darkGrey = 'darkGrey',\n green = 'green',\n lavender = 'lavender',\n lightGrey = 'lightGrey',\n lightSand = 'lightSand',\n marygold = 'marygold',\n orange = 'orange',\n pearl = 'pearl',\n red = 'red',\n saffron = 'saffron',\n sand = 'sand',\n sienna = 'sienna',\n ultramarine = 'ultramarine',\n verdigris = 'verdigris',\n wave = 'wave',\n white = 'white',\n current = 'current',\n}\n\nconst BORDER_COLORS = {\n [Colors.black]: 'border-black',\n [Colors.darkGrey]: 'border-darkGrey',\n [Colors.green]: 'border-green',\n [Colors.lavender]: 'border-lavender',\n [Colors.lightGrey]: 'border-lightGrey',\n [Colors.lightSand]: 'border-lightSand',\n [Colors.marygold]: 'border-marygold',\n [Colors.orange]: 'border-orange',\n [Colors.red]: 'border-red',\n [Colors.saffron]: 'border-saffron',\n [Colors.sand]: 'border-sand',\n [Colors.sienna]: 'border-sienna',\n [Colors.ultramarine]: 'border-ultramarine',\n [Colors.verdigris]: 'border-verdigris',\n [Colors.wave]: 'border-wave',\n [Colors.white]: 'border-white',\n [Colors.current]: 'border-current',\n} as const satisfies Record<string, `border-${string}`>;\n\nexport type BorderColor = keyof typeof BORDER_COLORS;\n\nconst BG_COLORS = {\n [Colors.black]: 'bg-black',\n [Colors.darkGrey]: 'bg-darkGrey',\n [Colors.green]: 'bg-green',\n [Colors.lavender]: 'bg-lavender',\n [Colors.lightGrey]: 'bg-lightGrey',\n [Colors.lightSand]: 'bg-lightSand',\n [Colors.marygold]: 'bg-marygold',\n [Colors.orange]: 'bg-orange',\n [Colors.pearl]: 'bg-pearl',\n [Colors.red]: 'bg-red',\n [Colors.saffron]: 'bg-saffron',\n [Colors.sand]: 'bg-sand',\n [Colors.sienna]: 'bg-sienna',\n [Colors.ultramarine]: 'bg-ultramarine',\n [Colors.verdigris]: 'bg-verdigris',\n [Colors.wave]: 'bg-wave',\n [Colors.white]: 'bg-white',\n [Colors.current]: 'bg-current',\n} as const satisfies Record<Colors, `bg-${string}`>;\n\nexport type BgColor = keyof typeof BG_COLORS;\n\nconst TEXT_COLORS = {\n [Colors.black]: 'text-black',\n [Colors.green]: 'text-green',\n [Colors.lavender]: 'text-lavender',\n [Colors.lightSand]: 'text-lightSand',\n [Colors.marygold]: 'text-marygold',\n [Colors.orange]: 'text-orange',\n [Colors.pearl]: 'text-pearl',\n [Colors.red]: 'text-red',\n [Colors.saffron]: 'text-saffron',\n [Colors.sand]: 'text-sand',\n [Colors.sienna]: 'text-sienna',\n [Colors.ultramarine]: 'text-ultramarine',\n [Colors.verdigris]: 'text-verdigris',\n [Colors.wave]: 'text-wave',\n [Colors.white]: 'text-white',\n [Colors.darkGrey]: 'text-darkGrey',\n [Colors.lightGrey]: 'text-lightGrey',\n [Colors.current]: 'text-current',\n} as const satisfies Record<Colors, `text-${string}`>;\n\nexport type TextColor = keyof typeof TEXT_COLORS;\n\nconst TO_COLORS = {\n [Colors.black]: `to-black`,\n [Colors.green]: `to-green`,\n [Colors.lavender]: `to-lavender`,\n [Colors.lightSand]: `to-lightSand`,\n [Colors.marygold]: `to-marygold`,\n [Colors.orange]: `to-orange`,\n [Colors.pearl]: `to-pearl`,\n [Colors.red]: `to-red`,\n [Colors.saffron]: `to-saffron`,\n [Colors.sand]: `to-sand`,\n [Colors.sienna]: `to-sienna`,\n [Colors.ultramarine]: `to-ultramarine`,\n [Colors.verdigris]: `to-verdigris`,\n [Colors.wave]: `to-wave`,\n [Colors.white]: `to-white`,\n [Colors.darkGrey]: `to-darkGrey`,\n [Colors.lightGrey]: `to-lightGrey`,\n [Colors.current]: `to-current`,\n} as const satisfies Record<keyof typeof Colors, `to-${string}`>;\n\nexport type ToColor = keyof typeof TO_COLORS;\n\nconst COMPLEMENTARY_COLORS = {\n [Colors.lightSand]: Colors.black,\n [Colors.marygold]: Colors.black,\n [Colors.saffron]: Colors.black,\n [Colors.sand]: Colors.black,\n [Colors.verdigris]: Colors.black,\n [Colors.white]: Colors.black,\n [Colors.pearl]: Colors.black,\n [Colors.black]: Colors.white,\n [Colors.green]: Colors.white,\n [Colors.lavender]: Colors.white,\n [Colors.orange]: Colors.white,\n [Colors.red]: Colors.white,\n [Colors.sienna]: Colors.white,\n [Colors.ultramarine]: Colors.white,\n [Colors.wave]: Colors.white,\n [Colors.darkGrey]: Colors.white,\n [Colors.lightGrey]: Colors.black,\n [Colors.current]: Colors.white,\n} as const satisfies Record<keyof typeof Colors, Colors.white | Colors.black>;\n\nconst THEME_TO_COLOR: Record<string, Colors> = {\n dark: Colors.ultramarine,\n exclusiveCollection: Colors.ultramarine,\n coreRange: Colors.lightSand,\n light: Colors.lightSand,\n happyToCare: Colors.verdigris,\n joyview: Colors.wave,\n urbanOasis: Colors.marygold,\n yellow: Colors.saffron,\n};\n\nconst COMPLEMENTARY_TEXT_COLOR_CONFIG = {\n [Colors.lightSand]: 'text-black',\n [Colors.marygold]: 'text-black',\n [Colors.saffron]: 'text-black',\n [Colors.sand]: 'text-black',\n [Colors.verdigris]: 'text-black',\n [Colors.white]: 'text-black',\n [Colors.black]: 'text-white',\n [Colors.green]: 'text-white',\n [Colors.lavender]: 'text-white',\n [Colors.orange]: 'text-white',\n [Colors.pearl]: 'text-white',\n [Colors.red]: 'text-white',\n [Colors.sienna]: 'text-white',\n [Colors.ultramarine]: 'text-white',\n [Colors.wave]: 'text-white',\n [Colors.darkGrey]: 'text-white',\n [Colors.lightGrey]: 'text-black',\n [Colors.current]: 'text-current',\n} as const satisfies Record<keyof typeof Colors, `text-${string}`>;\n\nconst colorGuard = <T extends Record<string, string>, K extends keyof T>(\n color: string | K,\n obj: T,\n): color is K => {\n return color in obj;\n};\n\nexport const getBorderColor = (color: string): `border-${string}` => {\n if (colorGuard(color, BORDER_COLORS)) {\n return BORDER_COLORS[color];\n }\n\n return `border-${color}`;\n};\n\nexport const getBgColor = (color: string): `bg-${string}` => {\n if (colorGuard(color, BG_COLORS)) {\n return BG_COLORS[color];\n }\n\n return `bg-${color}`;\n};\n\nexport const getTextColor = (color: string): `text-${string}` => {\n if (colorGuard(color, TEXT_COLORS)) {\n return TEXT_COLORS[color];\n }\n\n return `text-${color}`;\n};\n\nexport const getGradientToColor = (color: string): `to-${string}` => {\n if (colorGuard(color, TO_COLORS)) {\n return TO_COLORS[color];\n }\n\n return `to-${color}`;\n};\n\nexport const getComplementaryTextColor = (color: string): `text-${string}` => {\n return COMPLEMENTARY_TEXT_COLOR_CONFIG[color as Colors] || 'text-white';\n};\n\nexport const getComplementaryColor = (color: string): Colors => {\n return COMPLEMENTARY_COLORS[color as Colors] || 'white';\n};\n\nexport const getThemeColor = (theme: Theme): Colors => {\n return THEME_TO_COLOR[theme] || theme;\n};\n"],"mappings":"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"}
@@ -1,123 +1,123 @@
1
1
  //#region lib/ui/helpers/phone/defaultPrefixes.ts
2
2
  var e = [
3
+ {
4
+ code: "+33",
5
+ label: "Fra +33",
6
+ country: "FR"
7
+ },
3
8
  {
4
9
  code: "+1",
5
- label: "US/Canada (+1)",
10
+ label: "USA +1",
6
11
  country: "US"
7
12
  },
8
13
  {
9
14
  code: "+44",
10
- label: "UK (+44)",
15
+ label: "UK +44",
11
16
  country: "GB"
12
17
  },
13
- {
14
- code: "+33",
15
- label: "France (+33)",
16
- country: "FR"
17
- },
18
18
  {
19
19
  code: "+49",
20
- label: "Germany (+49)",
20
+ label: "Ger +49",
21
21
  country: "DE"
22
22
  },
23
23
  {
24
24
  code: "+39",
25
- label: "Italy (+39)",
25
+ label: "Ita +39",
26
26
  country: "IT"
27
27
  },
28
28
  {
29
29
  code: "+34",
30
- label: "Spain (+34)",
30
+ label: "Spn +34",
31
31
  country: "ES"
32
32
  },
33
33
  {
34
34
  code: "+86",
35
- label: "China (+86)",
35
+ label: "Chn +86",
36
36
  country: "CN"
37
37
  },
38
38
  {
39
39
  code: "+91",
40
- label: "India (+91)",
40
+ label: "Ind +91",
41
41
  country: "IN"
42
42
  },
43
43
  {
44
44
  code: "+81",
45
- label: "Japan (+81)",
45
+ label: "JP +81",
46
46
  country: "JP"
47
47
  },
48
48
  {
49
49
  code: "+82",
50
- label: "South Korea (+82)",
50
+ label: "Kr +82",
51
51
  country: "KR"
52
52
  },
53
53
  {
54
54
  code: "+7",
55
- label: "Russia (+7)",
55
+ label: "Rus +7",
56
56
  country: "RU"
57
57
  },
58
58
  {
59
59
  code: "+61",
60
- label: "Australia (+61)",
60
+ label: "Aus +61",
61
61
  country: "AU"
62
62
  },
63
63
  {
64
64
  code: "+55",
65
- label: "Brazil (+55)",
65
+ label: "Bra +55",
66
66
  country: "BR"
67
67
  },
68
68
  {
69
69
  code: "+52",
70
- label: "Mexico (+52)",
70
+ label: "Mex +52",
71
71
  country: "MX"
72
72
  },
73
73
  {
74
74
  code: "+31",
75
- label: "Netherlands (+31)",
75
+ label: "NL +31",
76
76
  country: "NL"
77
77
  },
78
78
  {
79
79
  code: "+46",
80
- label: "Sweden (+46)",
80
+ label: "Swe +46",
81
81
  country: "SE"
82
82
  },
83
83
  {
84
84
  code: "+41",
85
- label: "Switzerland (+41)",
85
+ label: "Swi +41",
86
86
  country: "CH"
87
87
  },
88
88
  {
89
89
  code: "+32",
90
- label: "Belgium (+32)",
90
+ label: "Bel +32",
91
91
  country: "BE"
92
92
  },
93
93
  {
94
94
  code: "+48",
95
- label: "Poland (+48)",
95
+ label: "Pol +48",
96
96
  country: "PL"
97
97
  },
98
98
  {
99
99
  code: "+351",
100
- label: "Portugal (+351)",
100
+ label: "Por +351",
101
101
  country: "PT"
102
102
  },
103
103
  {
104
104
  code: "+30",
105
- label: "Greece (+30)",
105
+ label: "Gre +30",
106
106
  country: "GR"
107
107
  },
108
108
  {
109
109
  code: "+47",
110
- label: "Norway (+47)",
110
+ label: "Nor +47",
111
111
  country: "NO"
112
112
  },
113
113
  {
114
114
  code: "+45",
115
- label: "Denmark (+45)",
115
+ label: "Den +45",
116
116
  country: "DK"
117
117
  },
118
118
  {
119
119
  code: "+358",
120
- label: "Finland (+358)",
120
+ label: "Fin +358",
121
121
  country: "FI"
122
122
  }
123
123
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"defaultPrefixes.js","names":[],"sources":["../../../../lib/ui/helpers/phone/defaultPrefixes.ts"],"sourcesContent":["/**\n * Default phone number prefixes for common countries\n */\n\nexport interface PhonePrefix {\n code: string;\n label?: string;\n country?: string;\n}\n\n/**\n * List of common country phone prefixes\n * Sorted by popularity/usage frequency\n */\nexport const DEFAULT_PHONE_PREFIXES: PhonePrefix[] = [\n { code: '+1', label: 'US/Canada (+1)', country: 'US' },\n { code: '+44', label: 'UK (+44)', country: 'GB' },\n { code: '+33', label: 'France (+33)', country: 'FR' },\n { code: '+49', label: 'Germany (+49)', country: 'DE' },\n { code: '+39', label: 'Italy (+39)', country: 'IT' },\n { code: '+34', label: 'Spain (+34)', country: 'ES' },\n { code: '+86', label: 'China (+86)', country: 'CN' },\n { code: '+91', label: 'India (+91)', country: 'IN' },\n { code: '+81', label: 'Japan (+81)', country: 'JP' },\n { code: '+82', label: 'South Korea (+82)', country: 'KR' },\n { code: '+7', label: 'Russia (+7)', country: 'RU' },\n { code: '+61', label: 'Australia (+61)', country: 'AU' },\n { code: '+55', label: 'Brazil (+55)', country: 'BR' },\n { code: '+52', label: 'Mexico (+52)', country: 'MX' },\n { code: '+31', label: 'Netherlands (+31)', country: 'NL' },\n { code: '+46', label: 'Sweden (+46)', country: 'SE' },\n { code: '+41', label: 'Switzerland (+41)', country: 'CH' },\n { code: '+32', label: 'Belgium (+32)', country: 'BE' },\n { code: '+48', label: 'Poland (+48)', country: 'PL' },\n { code: '+351', label: 'Portugal (+351)', country: 'PT' },\n { code: '+30', label: 'Greece (+30)', country: 'GR' },\n { code: '+47', label: 'Norway (+47)', country: 'NO' },\n { code: '+45', label: 'Denmark (+45)', country: 'DK' },\n { code: '+358', label: 'Finland (+358)', country: 'FI' },\n];\n"],"mappings":";AAcA,IAAa,IAAwC;CACnD;EAAE,MAAM;EAAM,OAAO;EAAkB,SAAS;EAAM;CACtD;EAAE,MAAM;EAAO,OAAO;EAAY,SAAS;EAAM;CACjD;EAAE,MAAM;EAAO,OAAO;EAAgB,SAAS;EAAM;CACrD;EAAE,MAAM;EAAO,OAAO;EAAiB,SAAS;EAAM;CACtD;EAAE,MAAM;EAAO,OAAO;EAAe,SAAS;EAAM;CACpD;EAAE,MAAM;EAAO,OAAO;EAAe,SAAS;EAAM;CACpD;EAAE,MAAM;EAAO,OAAO;EAAe,SAAS;EAAM;CACpD;EAAE,MAAM;EAAO,OAAO;EAAe,SAAS;EAAM;CACpD;EAAE,MAAM;EAAO,OAAO;EAAe,SAAS;EAAM;CACpD;EAAE,MAAM;EAAO,OAAO;EAAqB,SAAS;EAAM;CAC1D;EAAE,MAAM;EAAM,OAAO;EAAe,SAAS;EAAM;CACnD;EAAE,MAAM;EAAO,OAAO;EAAmB,SAAS;EAAM;CACxD;EAAE,MAAM;EAAO,OAAO;EAAgB,SAAS;EAAM;CACrD;EAAE,MAAM;EAAO,OAAO;EAAgB,SAAS;EAAM;CACrD;EAAE,MAAM;EAAO,OAAO;EAAqB,SAAS;EAAM;CAC1D;EAAE,MAAM;EAAO,OAAO;EAAgB,SAAS;EAAM;CACrD;EAAE,MAAM;EAAO,OAAO;EAAqB,SAAS;EAAM;CAC1D;EAAE,MAAM;EAAO,OAAO;EAAiB,SAAS;EAAM;CACtD;EAAE,MAAM;EAAO,OAAO;EAAgB,SAAS;EAAM;CACrD;EAAE,MAAM;EAAQ,OAAO;EAAmB,SAAS;EAAM;CACzD;EAAE,MAAM;EAAO,OAAO;EAAgB,SAAS;EAAM;CACrD;EAAE,MAAM;EAAO,OAAO;EAAgB,SAAS;EAAM;CACrD;EAAE,MAAM;EAAO,OAAO;EAAiB,SAAS;EAAM;CACtD;EAAE,MAAM;EAAQ,OAAO;EAAkB,SAAS;EAAM;CACzD"}
1
+ {"version":3,"file":"defaultPrefixes.js","names":[],"sources":["../../../../lib/ui/helpers/phone/defaultPrefixes.ts"],"sourcesContent":["/**\n * Default phone number prefixes for common countries\n */\n\nexport interface PhonePrefix {\n code: string;\n label?: string;\n country?: string;\n}\n\n/**\n * List of common country phone prefixes\n * Sorted by popularity/usage frequency\n */\nexport const DEFAULT_PHONE_PREFIXES: PhonePrefix[] = [\n { code: '+33', label: 'Fra +33', country: 'FR' },\n { code: '+1', label: 'USA +1', country: 'US' },\n { code: '+44', label: 'UK +44', country: 'GB' },\n { code: '+49', label: 'Ger +49', country: 'DE' },\n { code: '+39', label: 'Ita +39', country: 'IT' },\n { code: '+34', label: 'Spn +34', country: 'ES' },\n { code: '+86', label: 'Chn +86', country: 'CN' },\n { code: '+91', label: 'Ind +91', country: 'IN' },\n { code: '+81', label: 'JP +81', country: 'JP' },\n { code: '+82', label: 'Kr +82', country: 'KR' },\n { code: '+7', label: 'Rus +7', country: 'RU' },\n { code: '+61', label: 'Aus +61', country: 'AU' },\n { code: '+55', label: 'Bra +55', country: 'BR' },\n { code: '+52', label: 'Mex +52', country: 'MX' },\n { code: '+31', label: 'NL +31', country: 'NL' },\n { code: '+46', label: 'Swe +46', country: 'SE' },\n { code: '+41', label: 'Swi +41', country: 'CH' },\n { code: '+32', label: 'Bel +32', country: 'BE' },\n { code: '+48', label: 'Pol +48', country: 'PL' },\n { code: '+351', label: 'Por +351', country: 'PT' },\n { code: '+30', label: 'Gre +30', country: 'GR' },\n { code: '+47', label: 'Nor +47', country: 'NO' },\n { code: '+45', label: 'Den +45', country: 'DK' },\n { code: '+358', label: 'Fin +358', country: 'FI' },\n];\n"],"mappings":";AAcA,IAAa,IAAwC;CACnD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAM,OAAO;EAAU,SAAS;EAAM;CAC9C;EAAE,MAAM;EAAO,OAAO;EAAU,SAAS;EAAM;CAC/C;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAU,SAAS;EAAM;CAC/C;EAAE,MAAM;EAAO,OAAO;EAAU,SAAS;EAAM;CAC/C;EAAE,MAAM;EAAM,OAAO;EAAU,SAAS;EAAM;CAC9C;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAU,SAAS;EAAM;CAC/C;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAQ,OAAO;EAAY,SAAS;EAAM;CAClD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAO,OAAO;EAAW,SAAS;EAAM;CAChD;EAAE,MAAM;EAAQ,OAAO;EAAY,SAAS;EAAM;CACnD"}
@@ -44,3 +44,14 @@ export declare function getCursorPosition(oldValue: string, newValue: string, ol
44
44
  * @returns Number of '#' characters in pattern
45
45
  */
46
46
  export declare function countDigitPlaceholders(pattern: string): number;
47
+ export declare function getLiteralPrefixInfo(pattern: string): {
48
+ literalPrefix: string;
49
+ literalPrefixDigits: string;
50
+ };
51
+ export declare function stripLiteralPrefix(allDigits: string, literalPrefixDigits: string): string;
52
+ export declare function calculateCursorPosition(digitsBeforeCursor: number, formatted: string, literalPrefixDigits: string): number;
53
+ export declare function formatPhoneDigits(inputValue: string, pattern: string, cursorPosition: number): {
54
+ formatted: string;
55
+ nextCursor: number;
56
+ literalPrefixDigits: string;
57
+ } | null;
@@ -27,7 +27,38 @@ function n(t, n, r) {
27
27
  function r(e) {
28
28
  return (e.match(/#/g) || []).length;
29
29
  }
30
+ function i(t) {
31
+ let n = t.indexOf("#"), r = n > 0 ? t.substring(0, n) : "";
32
+ return {
33
+ literalPrefix: r,
34
+ literalPrefixDigits: e(r)
35
+ };
36
+ }
37
+ function a(e, t) {
38
+ return t.length > 0 && e.startsWith(t) ? e.substring(t.length) : e;
39
+ }
40
+ function o(e, t, n) {
41
+ let r = 0, i = 0;
42
+ for (let a = 0; a < t.length; a++) if (/\d/.test(t[a])) {
43
+ if (i < n.length) {
44
+ i++;
45
+ continue;
46
+ }
47
+ if (r++, r === e) return a + 1;
48
+ }
49
+ return t.length;
50
+ }
51
+ function s(n, s, c) {
52
+ let { literalPrefixDigits: l } = i(s), u = a(e(n), l), d = r(s);
53
+ if (u.length > d) return null;
54
+ let f = a(e(n.substring(0, c)), l).length, p = t(u, s);
55
+ return {
56
+ formatted: p,
57
+ nextCursor: o(f, p, l),
58
+ literalPrefixDigits: l
59
+ };
60
+ }
30
61
  //#endregion
31
- export { r as countDigitPlaceholders, e as extractDigits, t as formatWithPattern, n as getCursorPosition };
62
+ export { o as calculateCursorPosition, r as countDigitPlaceholders, e as extractDigits, s as formatPhoneDigits, t as formatWithPattern, n as getCursorPosition, i as getLiteralPrefixInfo, a as stripLiteralPrefix };
32
63
 
33
64
  //# sourceMappingURL=formatters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatters.js","names":[],"sources":["../../../../lib/ui/helpers/phone/formatters.ts"],"sourcesContent":["/**\n * Phone number formatting utilities\n * Provides pattern-based formatting without external dependencies\n */\n\n/**\n * Extract only digits from a string\n * @param value - Input string that may contain non-digit characters\n * @returns String containing only digits (0-9)\n */\nexport function extractDigits(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\n/**\n * Apply a pattern to input digits\n * Pattern uses '#' as placeholder for digits, other characters are literals\n *\n * @example\n * formatWithPattern(\"5551234567\", \"+1 (###) ###-####\")\n * // returns \"+1 (555) 123-4567\"\n *\n * @param value - String containing the digits to format\n * @param pattern - Format pattern where '#' represents a digit placeholder\n * @returns Formatted string according to pattern\n */\nexport function formatWithPattern(value: string, pattern: string): string {\n const digits = extractDigits(value);\n if (digits.length === 0) return '';\n\n let digitIndex = 0;\n let result = '';\n let started = false;\n\n for (let i = 0; i < pattern.length; i++) {\n if (pattern[i] === '#') {\n if (digitIndex < digits.length) {\n // Add any leading literals before the first digit\n if (!started) {\n // Add all literals from start until this digit\n for (let j = 0; j < i; j++) {\n if (pattern[j] !== '#') {\n result += pattern[j];\n }\n }\n started = true;\n }\n\n result += digits[digitIndex];\n digitIndex++;\n } else {\n // No more digits available\n break;\n }\n } else if (started) {\n // Literal character after we've started\n result += pattern[i];\n }\n }\n\n return result;\n}\n\n/**\n * Calculate cursor position after formatting\n * Critical for UX - ensures cursor stays in correct position relative to digits\n *\n * @example\n * // User types \"4\" at position: \"1|23\" → \"1423\"\n * // After formatting: \"(14) 23\"\n * // Cursor should be: \"(14|) 23\" (after the 4, not at end)\n *\n * @param oldValue - Previous input value\n * @param newValue - New formatted value\n * @param oldCursor - Cursor position before formatting\n * @returns New cursor position after formatting\n */\nexport function getCursorPosition(oldValue: string, newValue: string, oldCursor: number): number {\n // Count digits before cursor in old value\n const digitsBeforeCursor = extractDigits(oldValue.substring(0, oldCursor)).length;\n\n // Find position in new value where we have the same number of digits\n let digitCount = 0;\n let newCursor = 0;\n\n for (let i = 0; i < newValue.length; i++) {\n if (/\\d/.test(newValue[i])) {\n digitCount++;\n if (digitCount === digitsBeforeCursor) {\n newCursor = i + 1;\n break;\n }\n }\n }\n\n // If we didn't find enough digits, cursor goes to end\n if (digitCount < digitsBeforeCursor) {\n newCursor = newValue.length;\n }\n\n return newCursor;\n}\n\n/**\n * Count digit placeholders in a pattern\n * Used to determine maximum number of digits allowed\n *\n * @param pattern - Format pattern\n * @returns Number of '#' characters in pattern\n */\nexport function countDigitPlaceholders(pattern: string): number {\n return (pattern.match(/#/g) || []).length;\n}\n"],"mappings":";AAUA,SAAgB,EAAc,GAAuB;AACnD,QAAO,EAAM,QAAQ,OAAO,GAAG;;AAejC,SAAgB,EAAkB,GAAe,GAAyB;CACxE,IAAM,IAAS,EAAc,EAAM;AACnC,KAAI,EAAO,WAAW,EAAG,QAAO;CAEhC,IAAI,IAAa,GACb,IAAS,IACT,IAAU;AAEd,MAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,QAAQ,IAClC,KAAI,EAAQ,OAAO,IACjB,KAAI,IAAa,EAAO,QAAQ;AAE9B,MAAI,CAAC,GAAS;AAEZ,QAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,CAAI,EAAQ,OAAO,QACjB,KAAU,EAAQ;AAGtB,OAAU;;AAIZ,EADA,KAAU,EAAO,IACjB;OAGA;MAEO,MAET,KAAU,EAAQ;AAItB,QAAO;;AAiBT,SAAgB,EAAkB,GAAkB,GAAkB,GAA2B;CAE/F,IAAM,IAAqB,EAAc,EAAS,UAAU,GAAG,EAAU,CAAC,CAAC,QAGvE,IAAa,GACb,IAAY;AAEhB,MAAK,IAAI,IAAI,GAAG,IAAI,EAAS,QAAQ,IACnC,KAAI,KAAK,KAAK,EAAS,GAAG,KACxB,KACI,MAAe,IAAoB;AACrC,MAAY,IAAI;AAChB;;AAUN,QAJI,IAAa,MACf,IAAY,EAAS,SAGhB;;AAUT,SAAgB,EAAuB,GAAyB;AAC9D,SAAQ,EAAQ,MAAM,KAAK,IAAI,EAAE,EAAE"}
1
+ {"version":3,"file":"formatters.js","names":[],"sources":["../../../../lib/ui/helpers/phone/formatters.ts"],"sourcesContent":["/**\n * Phone number formatting utilities\n * Provides pattern-based formatting without external dependencies\n */\n\n/**\n * Extract only digits from a string\n * @param value - Input string that may contain non-digit characters\n * @returns String containing only digits (0-9)\n */\nexport function extractDigits(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\n/**\n * Apply a pattern to input digits\n * Pattern uses '#' as placeholder for digits, other characters are literals\n *\n * @example\n * formatWithPattern(\"5551234567\", \"+1 (###) ###-####\")\n * // returns \"+1 (555) 123-4567\"\n *\n * @param value - String containing the digits to format\n * @param pattern - Format pattern where '#' represents a digit placeholder\n * @returns Formatted string according to pattern\n */\nexport function formatWithPattern(value: string, pattern: string): string {\n const digits = extractDigits(value);\n if (digits.length === 0) return '';\n\n let digitIndex = 0;\n let result = '';\n let started = false;\n\n for (let i = 0; i < pattern.length; i++) {\n if (pattern[i] === '#') {\n if (digitIndex < digits.length) {\n // Add any leading literals before the first digit\n if (!started) {\n // Add all literals from start until this digit\n for (let j = 0; j < i; j++) {\n if (pattern[j] !== '#') {\n result += pattern[j];\n }\n }\n started = true;\n }\n\n result += digits[digitIndex];\n digitIndex++;\n } else {\n // No more digits available\n break;\n }\n } else if (started) {\n // Literal character after we've started\n result += pattern[i];\n }\n }\n\n return result;\n}\n\n/**\n * Calculate cursor position after formatting\n * Critical for UX - ensures cursor stays in correct position relative to digits\n *\n * @example\n * // User types \"4\" at position: \"1|23\" → \"1423\"\n * // After formatting: \"(14) 23\"\n * // Cursor should be: \"(14|) 23\" (after the 4, not at end)\n *\n * @param oldValue - Previous input value\n * @param newValue - New formatted value\n * @param oldCursor - Cursor position before formatting\n * @returns New cursor position after formatting\n */\nexport function getCursorPosition(oldValue: string, newValue: string, oldCursor: number): number {\n // Count digits before cursor in old value\n const digitsBeforeCursor = extractDigits(oldValue.substring(0, oldCursor)).length;\n\n // Find position in new value where we have the same number of digits\n let digitCount = 0;\n let newCursor = 0;\n\n for (let i = 0; i < newValue.length; i++) {\n if (/\\d/.test(newValue[i])) {\n digitCount++;\n if (digitCount === digitsBeforeCursor) {\n newCursor = i + 1;\n break;\n }\n }\n }\n\n // If we didn't find enough digits, cursor goes to end\n if (digitCount < digitsBeforeCursor) {\n newCursor = newValue.length;\n }\n\n return newCursor;\n}\n\n/**\n * Count digit placeholders in a pattern\n * Used to determine maximum number of digits allowed\n *\n * @param pattern - Format pattern\n * @returns Number of '#' characters in pattern\n */\nexport function countDigitPlaceholders(pattern: string): number {\n return (pattern.match(/#/g) || []).length;\n}\n\nexport function getLiteralPrefixInfo(pattern: string): {\n literalPrefix: string;\n literalPrefixDigits: string;\n} {\n const firstHashIndex = pattern.indexOf('#');\n const literalPrefix = firstHashIndex > 0 ? pattern.substring(0, firstHashIndex) : '';\n const literalPrefixDigits = extractDigits(literalPrefix);\n return { literalPrefix, literalPrefixDigits };\n}\n\nexport function stripLiteralPrefix(allDigits: string, literalPrefixDigits: string): string {\n if (literalPrefixDigits.length > 0 && allDigits.startsWith(literalPrefixDigits)) {\n return allDigits.substring(literalPrefixDigits.length);\n }\n return allDigits;\n}\n\nexport function calculateCursorPosition(\n digitsBeforeCursor: number,\n formatted: string,\n literalPrefixDigits: string,\n): number {\n let digitCount = 0;\n let skippedPrefixDigits = 0;\n\n for (let i = 0; i < formatted.length; i++) {\n if (/\\d/.test(formatted[i])) {\n if (skippedPrefixDigits < literalPrefixDigits.length) {\n skippedPrefixDigits++;\n continue;\n }\n digitCount++;\n if (digitCount === digitsBeforeCursor) {\n return i + 1;\n }\n }\n }\n\n return formatted.length;\n}\n\nexport function formatPhoneDigits(\n inputValue: string,\n pattern: string,\n cursorPosition: number,\n): { formatted: string; nextCursor: number; literalPrefixDigits: string } | null {\n const { literalPrefixDigits } = getLiteralPrefixInfo(pattern);\n const allDigits = stripLiteralPrefix(extractDigits(inputValue), literalPrefixDigits);\n const maxDigits = countDigitPlaceholders(pattern);\n if (allDigits.length > maxDigits) return null;\n\n const digitsBeforeCursorInInput = stripLiteralPrefix(\n extractDigits(inputValue.substring(0, cursorPosition)),\n literalPrefixDigits,\n );\n const digitsBeforeCursor = digitsBeforeCursorInInput.length;\n const formatted = formatWithPattern(allDigits, pattern);\n const nextCursor = calculateCursorPosition(digitsBeforeCursor, formatted, literalPrefixDigits);\n return { formatted, nextCursor, literalPrefixDigits };\n}\n"],"mappings":";AAUA,SAAgB,EAAc,GAAuB;AACnD,QAAO,EAAM,QAAQ,OAAO,GAAG;;AAejC,SAAgB,EAAkB,GAAe,GAAyB;CACxE,IAAM,IAAS,EAAc,EAAM;AACnC,KAAI,EAAO,WAAW,EAAG,QAAO;CAEhC,IAAI,IAAa,GACb,IAAS,IACT,IAAU;AAEd,MAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,QAAQ,IAClC,KAAI,EAAQ,OAAO,IACjB,KAAI,IAAa,EAAO,QAAQ;AAE9B,MAAI,CAAC,GAAS;AAEZ,QAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,CAAI,EAAQ,OAAO,QACjB,KAAU,EAAQ;AAGtB,OAAU;;AAIZ,EADA,KAAU,EAAO,IACjB;OAGA;MAEO,MAET,KAAU,EAAQ;AAItB,QAAO;;AAiBT,SAAgB,EAAkB,GAAkB,GAAkB,GAA2B;CAE/F,IAAM,IAAqB,EAAc,EAAS,UAAU,GAAG,EAAU,CAAC,CAAC,QAGvE,IAAa,GACb,IAAY;AAEhB,MAAK,IAAI,IAAI,GAAG,IAAI,EAAS,QAAQ,IACnC,KAAI,KAAK,KAAK,EAAS,GAAG,KACxB,KACI,MAAe,IAAoB;AACrC,MAAY,IAAI;AAChB;;AAUN,QAJI,IAAa,MACf,IAAY,EAAS,SAGhB;;AAUT,SAAgB,EAAuB,GAAyB;AAC9D,SAAQ,EAAQ,MAAM,KAAK,IAAI,EAAE,EAAE;;AAGrC,SAAgB,EAAqB,GAGnC;CACA,IAAM,IAAiB,EAAQ,QAAQ,IAAI,EACrC,IAAgB,IAAiB,IAAI,EAAQ,UAAU,GAAG,EAAe,GAAG;AAElF,QAAO;EAAE;EAAe,qBADI,EAAc,EAAc;EACX;;AAG/C,SAAgB,EAAmB,GAAmB,GAAqC;AAIzF,QAHI,EAAoB,SAAS,KAAK,EAAU,WAAW,EAAoB,GACtE,EAAU,UAAU,EAAoB,OAAO,GAEjD;;AAGT,SAAgB,EACd,GACA,GACA,GACQ;CACR,IAAI,IAAa,GACb,IAAsB;AAE1B,MAAK,IAAI,IAAI,GAAG,IAAI,EAAU,QAAQ,IACpC,KAAI,KAAK,KAAK,EAAU,GAAG,EAAE;AAC3B,MAAI,IAAsB,EAAoB,QAAQ;AACpD;AACA;;AAGF,MADA,KACI,MAAe,EACjB,QAAO,IAAI;;AAKjB,QAAO,EAAU;;AAGnB,SAAgB,EACd,GACA,GACA,GAC+E;CAC/E,IAAM,EAAE,2BAAwB,EAAqB,EAAQ,EACvD,IAAY,EAAmB,EAAc,EAAW,EAAE,EAAoB,EAC9E,IAAY,EAAuB,EAAQ;AACjD,KAAI,EAAU,SAAS,EAAW,QAAO;CAMzC,IAAM,IAJ4B,EAChC,EAAc,EAAW,UAAU,GAAG,EAAe,CAAC,EACtD,EACD,CACoD,QAC/C,IAAY,EAAkB,GAAW,EAAQ;AAEvD,QAAO;EAAE;EAAW,YADD,EAAwB,GAAoB,GAAW,EAAoB;EAC9D;EAAqB"}
@@ -2,5 +2,5 @@
2
2
  * Phone number utilities
3
3
  * Provides formatting, validation, and default prefixes for phone number inputs
4
4
  */
5
- export { extractDigits, formatWithPattern, getCursorPosition, countDigitPlaceholders, } from './formatters';
5
+ export { extractDigits, formatWithPattern, getCursorPosition, countDigitPlaceholders, getLiteralPrefixInfo, stripLiteralPrefix, calculateCursorPosition, formatPhoneDigits, } from './formatters';
6
6
  export { DEFAULT_PHONE_PREFIXES, type PhonePrefix } from './defaultPrefixes';
@@ -1,3 +1,3 @@
1
- import { countDigitPlaceholders as e, extractDigits as t, formatWithPattern as n, getCursorPosition as r } from "./formatters.js";
2
- import { DEFAULT_PHONE_PREFIXES as i } from "./defaultPrefixes.js";
3
- export { i as DEFAULT_PHONE_PREFIXES, e as countDigitPlaceholders, t as extractDigits, n as formatWithPattern, r as getCursorPosition };
1
+ import { calculateCursorPosition as e, countDigitPlaceholders as t, extractDigits as n, formatPhoneDigits as r, formatWithPattern as i, getCursorPosition as a, getLiteralPrefixInfo as o, stripLiteralPrefix as s } from "./formatters.js";
2
+ import { DEFAULT_PHONE_PREFIXES as c } from "./defaultPrefixes.js";
3
+ export { c as DEFAULT_PHONE_PREFIXES, e as calculateCursorPosition, t as countDigitPlaceholders, n as extractDigits, r as formatPhoneDigits, i as formatWithPattern, a as getCursorPosition, o as getLiteralPrefixInfo, s as stripLiteralPrefix };
@@ -3,7 +3,7 @@ import { useEffect as e, useState as t } from "react";
3
3
  function n({ name: n, initialValue: r, onChange: i, defaultValue: a = "", formatter: o = (e) => e }) {
4
4
  let [s, c] = t(o(r || a));
5
5
  e(() => {
6
- r !== void 0 && c(o(r));
6
+ c(o(r ?? a));
7
7
  }, [r]);
8
8
  function l(e) {
9
9
  e = o(e), c(e), i && i(n, e);
@@ -1 +1 @@
1
- {"version":3,"file":"useValue.js","names":[],"sources":["../../../lib/ui/hooks/useValue.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface UseValueProps<Value = string, InitialValue = Value> {\n name: string;\n initialValue?: InitialValue;\n defaultValue?: Value | string;\n formatter?: (v: Value) => Value;\n onChange?: (name: string, value: Value) => void;\n}\n\nexport function useValue<Value = string, InitialValue = Value>({\n name,\n initialValue,\n onChange,\n defaultValue = '',\n formatter = (v: Value) => v as unknown as Value,\n}: UseValueProps<Value, InitialValue>) {\n const [value, setValue] = useState<Value>(formatter((initialValue || defaultValue) as Value));\n\n useEffect(() => {\n if (initialValue !== undefined) {\n setValue(formatter(initialValue as Value));\n }\n }, [initialValue]);\n\n function setNewValue(newValue: Value) {\n newValue = formatter(newValue);\n setValue(newValue);\n if (onChange) onChange(name, newValue);\n }\n\n function resetValue() {\n setValue(defaultValue as Value);\n }\n\n return {\n value,\n setValue: setNewValue,\n resetValue,\n };\n}\n"],"mappings":";;AAUA,SAAgB,EAA+C,EAC7D,SACA,iBACA,aACA,kBAAe,IACf,gBAAa,MAAa,KACW;CACrC,IAAM,CAAC,GAAO,KAAY,EAAgB,EAAW,KAAgB,EAAuB,CAAC;AAE7F,SAAgB;AACd,EAAI,MAAiB,KAAA,KACnB,EAAS,EAAU,EAAsB,CAAC;IAE3C,CAAC,EAAa,CAAC;CAElB,SAAS,EAAY,GAAiB;AAGpC,EAFA,IAAW,EAAU,EAAS,EAC9B,EAAS,EAAS,EACd,KAAU,EAAS,GAAM,EAAS;;CAGxC,SAAS,IAAa;AACpB,IAAS,EAAsB;;AAGjC,QAAO;EACL;EACA,UAAU;EACV;EACD"}
1
+ {"version":3,"file":"useValue.js","names":[],"sources":["../../../lib/ui/hooks/useValue.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface UseValueProps<Value = string, InitialValue = Value> {\n name: string;\n initialValue?: InitialValue;\n defaultValue?: Value | string;\n formatter?: (v: Value) => Value;\n onChange?: (name: string, value: Value) => void;\n}\n\nexport function useValue<Value = string, InitialValue = Value>({\n name,\n initialValue,\n onChange,\n defaultValue = '',\n formatter = (v: Value) => v as unknown as Value,\n}: UseValueProps<Value, InitialValue>) {\n const [value, setValue] = useState<Value>(formatter((initialValue || defaultValue) as Value));\n\n useEffect(() => {\n // Use ?? operator to fallback to defaultValue when initialValue is undefined/null\n // This ensures the component resets properly when controlled value becomes undefined\n setValue(formatter((initialValue ?? defaultValue) as Value));\n }, [initialValue]);\n\n function setNewValue(newValue: Value) {\n newValue = formatter(newValue);\n setValue(newValue);\n if (onChange) onChange(name, newValue);\n }\n\n function resetValue() {\n setValue(defaultValue as Value);\n }\n\n return {\n value,\n setValue: setNewValue,\n resetValue,\n };\n}\n"],"mappings":";;AAUA,SAAgB,EAA+C,EAC7D,SACA,iBACA,aACA,kBAAe,IACf,gBAAa,MAAa,KACW;CACrC,IAAM,CAAC,GAAO,KAAY,EAAgB,EAAW,KAAgB,EAAuB,CAAC;AAE7F,SAAgB;AAGd,IAAS,EAAW,KAAgB,EAAuB,CAAC;IAC3D,CAAC,EAAa,CAAC;CAElB,SAAS,EAAY,GAAiB;AAGpC,EAFA,IAAW,EAAU,EAAS,EAC9B,EAAS,EAAS,EACd,KAAU,EAAS,GAAM,EAAS;;CAGxC,SAAS,IAAa;AACpB,IAAS,EAAsB;;AAGjC,QAAO;EACL;EACA,UAAU;EACV;EACD"}
package/ui/tabs/Tabs.js CHANGED
@@ -55,7 +55,7 @@ var m = ({ className: t, compacted: r = !1, selected: i, children: a }) => /* @_
55
55
  let l = { "--active-tab": s };
56
56
  return /* @__PURE__ */ f("div", {
57
57
  "data-name": "TabsHeader",
58
- className: e("scrollbar-hidden relative isolate flex max-w-full overflow-x-scroll scroll-smooth py-20", t),
58
+ className: e("scrollbar-hidden relative isolate flex max-w-full overflow-x-auto scroll-smooth py-20", t),
59
59
  ref: a,
60
60
  children: /* @__PURE__ */ p("div", {
61
61
  role: "tablist",
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","names":[],"sources":["../../../lib/ui/tabs/Tabs.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport {\n type ComponentProps,\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type FunctionComponent,\n type PropsWithChildren,\n type RefObject,\n type KeyboardEvent,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\n\nimport { TabsProvider } from '../contexts/TabControl';\nimport {\n useActiveTab,\n useActiveTabControl,\n useRegisterTabControl,\n useTabDispatch,\n useTabsUid,\n} from '../hooks/tabControl';\nimport { useKeyboardControls } from '../hooks/useKeyboardControls';\nimport { Select } from '../forms/Select';\n\ntype ProviderProps = ComponentProps<typeof TabsProvider>;\n\ninterface Props extends ProviderProps {\n className?: string;\n /**\n * Shrink the spacing between tabs and panels\n */\n compacted?: boolean;\n}\n\nexport const Tabs: FunctionComponent<PropsWithChildren<Props>> = ({\n className,\n compacted = false,\n selected,\n children,\n}) => {\n return (\n <div\n className={clsx('flex flex-col', className, {\n 'sm:gap-y-20': !compacted,\n })}\n data-name=\"Tabs\"\n >\n <TabsProvider selected={selected}>{children}</TabsProvider>\n </div>\n );\n};\n\ninterface TabsBodyProps {\n className?: string;\n}\n\nexport const TabsBody: FunctionComponent<PropsWithChildren<TabsBodyProps>> = ({\n className,\n children,\n}) => {\n return (\n <div data-name=\"TabsBody\" className={clsx('grid grid-rows-1 overflow-hidden', className)}>\n {children}\n </div>\n );\n};\n\ninterface TabPanelProps {\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: TabPanelProps['value'] }) => void;\n}\n\nexport const TabPanel: FunctionComponent<PropsWithChildren<TabPanelProps>> = ({\n value,\n className,\n onSelect,\n children,\n ...attrs\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 {...attrs}\n aria-hidden={!isActive}\n className={clsx(\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 inert={isActive ? undefined : true}\n tabIndex={isActive ? 0 : -1}\n id={`TabPanel_${value}_${uid}`}\n data-name={`TabPanel_${value}`}\n role=\"tabpanel\"\n aria-labelledby={`Tab_${value}_${uid}`}\n >\n {children}\n </div>\n );\n};\n\ninterface TabListProps {\n className?: string;\n /**\n * Remove filler placeholders\n */\n constrained?: boolean;\n}\n\nexport const TabList: FunctionComponent<PropsWithChildren<TabListProps>> = ({\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={clsx(\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={clsx('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={clsx('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\nexport interface TabSelectProps {\n items: { label: string; value: number }[];\n className?: string;\n 'aria-label'?: string;\n}\n\nexport const TabSelect: FunctionComponent<TabSelectProps> = ({\n items,\n className,\n 'aria-label': ariaLabel = 'Select tab',\n}) => {\n const activeTab = useActiveTab();\n const dispatch = useTabDispatch();\n\n const handleChange = (_name: string, value: string) => {\n dispatch({ type: 'update', payload: Number(value) });\n };\n\n const selectValue = activeTab === -1 ? undefined : activeTab;\n\n return (\n <Select\n value={selectValue?.toString()}\n onChange={handleChange}\n name={ariaLabel}\n className={clsx(className)}\n >\n {items.map((item) => (\n <option key={item.value} value={item.value}>\n {item.label}\n </option>\n ))}\n </Select>\n );\n};\n\ninterface TabProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onSelect'> {\n /**\n * Tab Heading text\n */\n label?: string;\n /**\n * Tab heading index<br/>\n * _Can be **0** or **1** indexed_\n */\n value: number;\n /**\n * on tab select handler\n */\n onSelect?: (context: { value: TabProps['value']; label: TabProps['label'] }) => void;\n /**\n * Heading type\n * _default: **h2**_\n */\n as?: 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5';\n}\n\nexport const Tab: FunctionComponent<PropsWithChildren<TabProps>> = ({\n as: TagName = 'h2',\n label,\n children,\n value,\n onSelect,\n className,\n ...attr\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n const activeTab = useActiveTab();\n const uid = useTabsUid();\n const dispatch = useRegisterTabControl({ value, ref: ref as RefObject<HTMLDivElement> });\n const previousActiveTab = useRef(activeTab);\n\n const isActive = useRef(activeTab === value);\n isActive.current = activeTab === value;\n\n const pillStyle = { '--tab-index': value } as CSSProperties;\n\n useEffect(() => {\n if (previousActiveTab.current !== activeTab && value === activeTab) {\n ref.current?.focus();\n onSelect?.({ value, label });\n }\n if (previousActiveTab.current !== activeTab) {\n previousActiveTab.current = activeTab;\n }\n }, [label, value, onSelect, activeTab]);\n\n const start = useCallback(() => {\n dispatch({ type: 'start' });\n }, [dispatch]);\n\n const end = useCallback(() => {\n dispatch({ type: 'end' });\n }, [dispatch]);\n\n const up = useCallback(() => {\n dispatch({ type: 'previous' });\n }, [dispatch]);\n\n const down = useCallback(() => {\n dispatch({ type: 'next' });\n }, [dispatch]);\n\n const left = useCallback(() => {\n const isRTL = document.documentElement.dir === 'rtl';\n\n dispatch({ type: isRTL ? 'next' : 'previous' });\n }, [dispatch]);\n\n const right = useCallback(() => {\n const isRTL = document.documentElement.dir === 'rtl';\n\n dispatch({ type: isRTL ? 'previous' : 'next' });\n }, [dispatch]);\n\n const keyboardHandler = useKeyboardControls({\n start,\n end,\n up,\n down,\n left,\n right,\n });\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n const isSpace = e.key === ' ' || e.key === 'Spacebar' || e.code === 'Space';\n const isEnter = e.key === 'Enter' || e.code === 'Enter';\n\n if (isActive.current && (isSpace || isEnter)) {\n e.preventDefault();\n return;\n }\n\n keyboardHandler(e);\n },\n [keyboardHandler],\n );\n\n const handleClick = () => {\n if (isActive.current) {\n return;\n }\n\n dispatch({ type: 'update', payload: value });\n };\n\n return (\n <div\n {...attr}\n id={attr.id || `Tab_${value}_${uid}`}\n data-name=\"Tab\"\n ref={ref}\n role=\"tab\"\n aria-selected={isActive.current}\n aria-controls={`TabPanel_${value}_${uid}`}\n tabIndex={isActive.current ? 0 : -1}\n className={clsx(\n 'group text-b3 inline-block cursor-pointer overflow-hidden bg-transparent pe-4 align-middle font-semibold whitespace-nowrap outline-none',\n {\n 'text-white': isActive.current,\n 'text-black': !isActive.current,\n 'transition-transform active:scale-[1.03]': isActive.current,\n },\n )}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n >\n <TagName\n className={clsx(\n 'relative inline-block px-20 py-12',\n 'before:rounded-pill before:transition-colors/opacity before:absolute before:inset-0 before:-z-1 before:duration-300 group-focus-within:before:bg-(--color-pearl) group-hover:before:bg-(--color-pearl) group-focus:before:bg-(--color-pearl)',\n className,\n )}\n {...(!isActive ? { role: 'presentation' } : {})}\n >\n <span\n className={clsx(\n 'tab-focus-pill ease transition-transform/colors',\n 'rounded-pill absolute inset-0 -z-1 duration-300',\n 'bg-black',\n )}\n style={pillStyle}\n />\n {children ?? label}\n </TagName>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Tabs.js","names":[],"sources":["../../../lib/ui/tabs/Tabs.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport {\n type ComponentProps,\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type FunctionComponent,\n type PropsWithChildren,\n type RefObject,\n type KeyboardEvent,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\n\nimport { TabsProvider } from '../contexts/TabControl';\nimport {\n useActiveTab,\n useActiveTabControl,\n useRegisterTabControl,\n useTabDispatch,\n useTabsUid,\n} from '../hooks/tabControl';\nimport { useKeyboardControls } from '../hooks/useKeyboardControls';\nimport { Select } from '../forms/Select';\n\ntype ProviderProps = ComponentProps<typeof TabsProvider>;\n\ninterface Props extends ProviderProps {\n className?: string;\n /**\n * Shrink the spacing between tabs and panels\n */\n compacted?: boolean;\n}\n\nexport const Tabs: FunctionComponent<PropsWithChildren<Props>> = ({\n className,\n compacted = false,\n selected,\n children,\n}) => {\n return (\n <div\n className={clsx('flex flex-col', className, {\n 'sm:gap-y-20': !compacted,\n })}\n data-name=\"Tabs\"\n >\n <TabsProvider selected={selected}>{children}</TabsProvider>\n </div>\n );\n};\n\ninterface TabsBodyProps {\n className?: string;\n}\n\nexport const TabsBody: FunctionComponent<PropsWithChildren<TabsBodyProps>> = ({\n className,\n children,\n}) => {\n return (\n <div data-name=\"TabsBody\" className={clsx('grid grid-rows-1 overflow-hidden', className)}>\n {children}\n </div>\n );\n};\n\ninterface TabPanelProps {\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: TabPanelProps['value'] }) => void;\n}\n\nexport const TabPanel: FunctionComponent<PropsWithChildren<TabPanelProps>> = ({\n value,\n className,\n onSelect,\n children,\n ...attrs\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 {...attrs}\n aria-hidden={!isActive}\n className={clsx(\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 inert={isActive ? undefined : true}\n tabIndex={isActive ? 0 : -1}\n id={`TabPanel_${value}_${uid}`}\n data-name={`TabPanel_${value}`}\n role=\"tabpanel\"\n aria-labelledby={`Tab_${value}_${uid}`}\n >\n {children}\n </div>\n );\n};\n\ninterface TabListProps {\n className?: string;\n /**\n * Remove filler placeholders\n */\n constrained?: boolean;\n}\n\nexport const TabList: FunctionComponent<PropsWithChildren<TabListProps>> = ({\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={clsx(\n 'scrollbar-hidden relative isolate flex max-w-full overflow-x-auto 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={clsx('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={clsx('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\nexport interface TabSelectProps {\n items: { label: string; value: number }[];\n className?: string;\n 'aria-label'?: string;\n}\n\nexport const TabSelect: FunctionComponent<TabSelectProps> = ({\n items,\n className,\n 'aria-label': ariaLabel = 'Select tab',\n}) => {\n const activeTab = useActiveTab();\n const dispatch = useTabDispatch();\n\n const handleChange = (_name: string, value: string) => {\n dispatch({ type: 'update', payload: Number(value) });\n };\n\n const selectValue = activeTab === -1 ? undefined : activeTab;\n\n return (\n <Select\n value={selectValue?.toString()}\n onChange={handleChange}\n name={ariaLabel}\n className={clsx(className)}\n >\n {items.map((item) => (\n <option key={item.value} value={item.value}>\n {item.label}\n </option>\n ))}\n </Select>\n );\n};\n\ninterface TabProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onSelect'> {\n /**\n * Tab Heading text\n */\n label?: string;\n /**\n * Tab heading index<br/>\n * _Can be **0** or **1** indexed_\n */\n value: number;\n /**\n * on tab select handler\n */\n onSelect?: (context: { value: TabProps['value']; label: TabProps['label'] }) => void;\n /**\n * Heading type\n * _default: **h2**_\n */\n as?: 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5';\n}\n\nexport const Tab: FunctionComponent<PropsWithChildren<TabProps>> = ({\n as: TagName = 'h2',\n label,\n children,\n value,\n onSelect,\n className,\n ...attr\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n const activeTab = useActiveTab();\n const uid = useTabsUid();\n const dispatch = useRegisterTabControl({ value, ref: ref as RefObject<HTMLDivElement> });\n const previousActiveTab = useRef(activeTab);\n\n const isActive = useRef(activeTab === value);\n isActive.current = activeTab === value;\n\n const pillStyle = { '--tab-index': value } as CSSProperties;\n\n useEffect(() => {\n if (previousActiveTab.current !== activeTab && value === activeTab) {\n ref.current?.focus();\n onSelect?.({ value, label });\n }\n if (previousActiveTab.current !== activeTab) {\n previousActiveTab.current = activeTab;\n }\n }, [label, value, onSelect, activeTab]);\n\n const start = useCallback(() => {\n dispatch({ type: 'start' });\n }, [dispatch]);\n\n const end = useCallback(() => {\n dispatch({ type: 'end' });\n }, [dispatch]);\n\n const up = useCallback(() => {\n dispatch({ type: 'previous' });\n }, [dispatch]);\n\n const down = useCallback(() => {\n dispatch({ type: 'next' });\n }, [dispatch]);\n\n const left = useCallback(() => {\n const isRTL = document.documentElement.dir === 'rtl';\n\n dispatch({ type: isRTL ? 'next' : 'previous' });\n }, [dispatch]);\n\n const right = useCallback(() => {\n const isRTL = document.documentElement.dir === 'rtl';\n\n dispatch({ type: isRTL ? 'previous' : 'next' });\n }, [dispatch]);\n\n const keyboardHandler = useKeyboardControls({\n start,\n end,\n up,\n down,\n left,\n right,\n });\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n const isSpace = e.key === ' ' || e.key === 'Spacebar' || e.code === 'Space';\n const isEnter = e.key === 'Enter' || e.code === 'Enter';\n\n if (isActive.current && (isSpace || isEnter)) {\n e.preventDefault();\n return;\n }\n\n keyboardHandler(e);\n },\n [keyboardHandler],\n );\n\n const handleClick = () => {\n if (isActive.current) {\n return;\n }\n\n dispatch({ type: 'update', payload: value });\n };\n\n return (\n <div\n {...attr}\n id={attr.id || `Tab_${value}_${uid}`}\n data-name=\"Tab\"\n ref={ref}\n role=\"tab\"\n aria-selected={isActive.current}\n aria-controls={`TabPanel_${value}_${uid}`}\n tabIndex={isActive.current ? 0 : -1}\n className={clsx(\n 'group text-b3 inline-block cursor-pointer overflow-hidden bg-transparent pe-4 align-middle font-semibold whitespace-nowrap outline-none',\n {\n 'text-white': isActive.current,\n 'text-black': !isActive.current,\n 'transition-transform active:scale-[1.03]': isActive.current,\n },\n )}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n >\n <TagName\n className={clsx(\n 'relative inline-block px-20 py-12',\n 'before:rounded-pill before:transition-colors/opacity before:absolute before:inset-0 before:-z-1 before:duration-300 group-focus-within:before:bg-(--color-pearl) group-hover:before:bg-(--color-pearl) group-focus:before:bg-(--color-pearl)',\n className,\n )}\n {...(!isActive ? { role: 'presentation' } : {})}\n >\n <span\n className={clsx(\n 'tab-focus-pill ease transition-transform/colors',\n 'rounded-pill absolute inset-0 -z-1 duration-300',\n 'bg-black',\n )}\n style={pillStyle}\n />\n {children ?? label}\n </TagName>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { Theme } from './types/Theme';
2
- export declare const getTheme: (theme: Theme) => {
3
- thStart: string;
4
- thEnd: string;
5
- } | {
6
- readonly thStart: "text-middleGrey";
7
- readonly thEnd: "text-black font-bold";
8
- };
@@ -1,16 +0,0 @@
1
- //#region lib/ui/Breadcrumb.themes.ts
2
- var e = {
3
- thStart: "bg-ultramarine",
4
- thEnd: "bg-ultramarine font-bold"
5
- }, t = {
6
- dark: e,
7
- wave: e,
8
- light: {
9
- thStart: "text-middleGrey",
10
- thEnd: "text-black font-bold"
11
- }
12
- }, n = (e) => t[e] || t.light;
13
- //#endregion
14
- export { n as getTheme };
15
-
16
- //# sourceMappingURL=Breadcrumb.themes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Breadcrumb.themes.js","names":[],"sources":["../../lib/ui/Breadcrumb.themes.ts"],"sourcesContent":["import type { Theme } from './types/Theme';\nconst dark = {\n thStart: 'bg-ultramarine',\n thEnd: 'bg-ultramarine font-bold',\n};\n\nconst THEME = {\n dark,\n wave: dark,\n light: {\n thStart: 'text-middleGrey',\n thEnd: 'text-black font-bold',\n },\n} as const satisfies Record<string, { thStart: string; thEnd: string }>;\n\nexport const getTheme = (theme: Theme) => {\n return THEME[theme as keyof typeof THEME] || THEME.light;\n};\n"],"mappings":";AACA,IAAM,IAAO;CACX,SAAS;CACT,OAAO;CACR,EAEK,IAAQ;CACZ;CACA,MAAM;CACN,OAAO;EACL,SAAS;EACT,OAAO;EACR;CACF,EAEY,KAAY,MAChB,EAAM,MAAgC,EAAM"}