ics-ui-kit 1.0.0-alpha.0 → 1.0.0-alpha.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 (134) hide show
  1. package/dist/CalendarPreviousMonthButton-CHMp8bkd.js +2964 -0
  2. package/dist/CalendarPreviousMonthButton-CHMp8bkd.js.map +1 -0
  3. package/dist/{CheckboxField-Ca48ZYoX.js → CheckboxField-xDqHgXHh.js} +2 -2
  4. package/dist/{CheckboxField-Ca48ZYoX.js.map → CheckboxField-xDqHgXHh.js.map} +1 -1
  5. package/dist/{Command-CsW4aK7M.js → Command-WsAKNQrY.js} +2 -2
  6. package/dist/{Command-CsW4aK7M.js.map → Command-WsAKNQrY.js.map} +1 -1
  7. package/dist/{Dialog-BT_775Iz.js → Dialog-i_Y-phdM.js} +42 -43
  8. package/dist/Dialog-i_Y-phdM.js.map +1 -0
  9. package/dist/{Field-BRPdaQ8D.js → Field-BcwUtgGr.js} +2 -2
  10. package/dist/{Field-BRPdaQ8D.js.map → Field-BcwUtgGr.js.map} +1 -1
  11. package/dist/{FieldLabel-ic0eq9Un.js → FieldLabel-DYu1AcGH.js} +2 -2
  12. package/dist/{FieldLabel-ic0eq9Un.js.map → FieldLabel-DYu1AcGH.js.map} +1 -1
  13. package/dist/{FormFooterTemplate-BIwnBQhL.js → FormFooterTemplate-CHlas_Pp.js} +2 -2
  14. package/dist/{FormFooterTemplate-BIwnBQhL.js.map → FormFooterTemplate-CHlas_Pp.js.map} +1 -1
  15. package/dist/FormStack-DfoaOry7.js +1205 -0
  16. package/dist/FormStack-DfoaOry7.js.map +1 -0
  17. package/dist/{IconTooltip-CgbefRXG.js → IconTooltip-R6_6_f40.js} +2 -2
  18. package/dist/{IconTooltip-CgbefRXG.js.map → IconTooltip-R6_6_f40.js.map} +1 -1
  19. package/dist/{Popover-Dz2eNsXh.js → Popover-XrJa7lyb.js} +49 -50
  20. package/dist/Popover-XrJa7lyb.js.map +1 -0
  21. package/dist/{Select-Bfbtj5zt.js → Select-DO02vXt3.js} +185 -186
  22. package/dist/{Select-Bfbtj5zt.js.map → Select-DO02vXt3.js.map} +1 -1
  23. package/dist/{Sheet-aLBPtE1k.js → Sheet-C2UoHLL0.js} +35 -36
  24. package/dist/Sheet-C2UoHLL0.js.map +1 -0
  25. package/dist/{TextOverflowTooltip-BaNPKqnO.js → TextOverflowTooltip-XPDdO9Dz.js} +2 -2
  26. package/dist/{TextOverflowTooltip-BaNPKqnO.js.map → TextOverflowTooltip-XPDdO9Dz.js.map} +1 -1
  27. package/dist/{Tooltip-DOgKy50D.js → Tooltip-D2XvRS0c.js} +63 -64
  28. package/dist/Tooltip-D2XvRS0c.js.map +1 -0
  29. package/dist/blocks/auth/otp-form.js +3240 -204
  30. package/dist/blocks/auth/otp-form.js.map +1 -1
  31. package/dist/components/alert-dialog/AlertDialog.d.ts +2 -4
  32. package/dist/components/alert-dialog.js +70 -71
  33. package/dist/components/alert-dialog.js.map +1 -1
  34. package/dist/components/calendar/components/calendar-dropdown/CalendarDropdown.d.ts +24 -0
  35. package/dist/components/calendar/styles.d.ts +61 -0
  36. package/dist/components/calendar-scroll/CalendarScroll.d.ts +21 -0
  37. package/dist/components/calendar-scroll/CalendarScroll.stories.d.ts +16 -0
  38. package/dist/components/calendar-scroll/index.d.ts +3 -0
  39. package/dist/components/calendar-scroll.d.ts +2 -0
  40. package/dist/components/calendar-scroll.js +181 -0
  41. package/dist/components/calendar-scroll.js.map +1 -0
  42. package/dist/components/calendar.js +51 -147
  43. package/dist/components/calendar.js.map +1 -1
  44. package/dist/components/checkbox.js +1 -1
  45. package/dist/components/command.js +1 -1
  46. package/dist/components/dialog/Dialog.d.ts +2 -4
  47. package/dist/components/dialog.js +3 -3
  48. package/dist/components/drawer/components/drawer-content/DrawerContent.d.ts +1 -2
  49. package/dist/components/drawer.js +96 -97
  50. package/dist/components/drawer.js.map +1 -1
  51. package/dist/components/dropdown/Dropdown.d.ts +2 -4
  52. package/dist/components/dropdown.js +251 -252
  53. package/dist/components/dropdown.js.map +1 -1
  54. package/dist/components/field.js +1 -1
  55. package/dist/components/file-upload.js +1 -1
  56. package/dist/components/form/Form.d.ts +14 -0
  57. package/dist/components/form/components/form-field/FormField.d.ts +4 -0
  58. package/dist/components/form.js +3 -3
  59. package/dist/components/icon-tooltip.js +1 -1
  60. package/dist/components/label.js +1 -1
  61. package/dist/components/overflow-tooltip.js +1 -1
  62. package/dist/components/popover/Popover.d.ts +1 -2
  63. package/dist/components/popover.js +1 -1
  64. package/dist/components/resizable/Resizable.d.ts +1 -1
  65. package/dist/components/scheduler.js +1 -1
  66. package/dist/components/search-select/multi-select/MultiSelect.d.ts +1 -1
  67. package/dist/components/search-select.js +3 -3
  68. package/dist/components/search-select.js.map +1 -1
  69. package/dist/components/select/Select.d.ts +1 -2
  70. package/dist/components/select.js +1 -1
  71. package/dist/components/sheet/Sheet.d.ts +1 -2
  72. package/dist/components/sheet.js +1 -1
  73. package/dist/components/sidebar.js +2 -2
  74. package/dist/components/switch.js +1 -1
  75. package/dist/components/tag-input.js +1 -1
  76. package/dist/components/tooltip/Tooltip.d.ts +2 -4
  77. package/dist/components/tooltip.js +1 -1
  78. package/dist/tailwind.css +406 -361
  79. package/package.json +22 -18
  80. package/dist/DayPicker-4hE1QEvO.js +0 -2452
  81. package/dist/DayPicker-4hE1QEvO.js.map +0 -1
  82. package/dist/Dialog-BT_775Iz.js.map +0 -1
  83. package/dist/FormStack-CxiZhx1n.js +0 -127
  84. package/dist/FormStack-CxiZhx1n.js.map +0 -1
  85. package/dist/Popover-Dz2eNsXh.js.map +0 -1
  86. package/dist/Sheet-aLBPtE1k.js.map +0 -1
  87. package/dist/Tooltip-DOgKy50D.js.map +0 -1
  88. package/dist/buildMatchPatternFn-d7GTeGl_.js +0 -68
  89. package/dist/buildMatchPatternFn-d7GTeGl_.js.map +0 -1
  90. package/dist/components/portal-container/PortalContainer.d.ts +0 -10
  91. package/dist/components/portal-container/index.d.ts +0 -2
  92. package/dist/components/portal-container/portalContainerEvents.d.ts +0 -12
  93. package/dist/components/portal-container/usePortalContainer.d.ts +0 -11
  94. package/dist/components/portal-container.d.ts +0 -2
  95. package/dist/components/portal-container.js +0 -14
  96. package/dist/components/portal-container.js.map +0 -1
  97. package/dist/index.esm-CXA6i4d7.js +0 -1282
  98. package/dist/index.esm-CXA6i4d7.js.map +0 -1
  99. package/dist/normalizeDates-9A3c9WYM.js +0 -32
  100. package/dist/normalizeDates-9A3c9WYM.js.map +0 -1
  101. package/dist/styles.css +0 -9064
  102. package/dist/styles.d.ts +0 -1
  103. package/dist/usePortalContainer-B1xla842.js +0 -33
  104. package/dist/usePortalContainer-B1xla842.js.map +0 -1
  105. package/dist/vendors/date-fns/index.d.ts +0 -12
  106. package/dist/vendors/date-fns/locale/en-US/index.d.ts +0 -5
  107. package/dist/vendors/date-fns/locale/en-US.d.ts +0 -2
  108. package/dist/vendors/date-fns/locale/en-US.js +0 -372
  109. package/dist/vendors/date-fns/locale/en-US.js.map +0 -1
  110. package/dist/vendors/date-fns/locale/ru/index.d.ts +0 -5
  111. package/dist/vendors/date-fns/locale/ru.d.ts +0 -2
  112. package/dist/vendors/date-fns/locale/ru.js +0 -569
  113. package/dist/vendors/date-fns/locale/ru.js.map +0 -1
  114. package/dist/vendors/date-fns.d.ts +0 -2
  115. package/dist/vendors/date-fns.js +0 -2
  116. package/dist/vendors/date-fns.js.map +0 -1
  117. package/dist/vendors/react-day-picker/index.d.ts +0 -13
  118. package/dist/vendors/react-day-picker.d.ts +0 -2
  119. package/dist/vendors/react-day-picker.js +0 -87
  120. package/dist/vendors/react-day-picker.js.map +0 -1
  121. package/dist/vendors/react-hook-form/index.d.ts +0 -14
  122. package/dist/vendors/react-hook-form.d.ts +0 -2
  123. package/dist/vendors/react-hook-form.js +0 -19
  124. package/dist/vendors/react-hook-form.js.map +0 -1
  125. package/dist/vendors/tanstack/react-table/index.d.ts +0 -13
  126. package/dist/vendors/tanstack/react-table.d.ts +0 -2
  127. package/dist/vendors/tanstack/react-table.js +0 -2090
  128. package/dist/vendors/tanstack/react-table.js.map +0 -1
  129. package/dist/vendors/zod/index.d.ts +0 -13
  130. package/dist/vendors/zod.d.ts +0 -2
  131. package/dist/vendors/zod.js +0 -3080
  132. package/dist/vendors/zod.js.map +0 -1
  133. package/dist/zod-BMNoK3aM.js +0 -75
  134. package/dist/zod-BMNoK3aM.js.map +0 -1
@@ -1,23 +1,22 @@
1
1
  import { jsx as a, jsxs as l } from "react/jsx-runtime";
2
2
  import * as r from "react";
3
- import { R as w, T as v, C as d, P as C, a as c, b as m, D as f, O as p } from "./index-CMxHunQ4.js";
3
+ import { R as N, T as w, C as d, P as v, a as c, b as m, D as f, O as p } from "./index-CMxHunQ4.js";
4
4
  import { T as o } from "./index-BVqs-uqP.js";
5
- import { o as R } from "./Overlay-E0UvxzIc.js";
6
- import { u as T } from "./usePortalContainer-B1xla842.js";
7
- import { I as D } from "./Icon-DH3ev9GK.js";
8
- import { X as O } from "./x-tDTt7hTQ.js";
9
- const W = w, Y = v, Z = d, P = C, j = o({ extend: R }), h = r.forwardRef(
10
- ({ className: e, blur: t, type: s, ...i }, n) => /* @__PURE__ */ a(p, { className: j({ blur: t, type: s, className: e }), ...i, ref: n })
5
+ import { o as C } from "./Overlay-E0UvxzIc.js";
6
+ import { I as R } from "./Icon-DH3ev9GK.js";
7
+ import { X as T } from "./x-tDTt7hTQ.js";
8
+ const Q = N, U = w, W = d, D = v, O = o({ extend: C }), h = r.forwardRef(
9
+ ({ className: e, blur: t, type: s, ...i }, n) => /* @__PURE__ */ a(p, { className: O({ blur: t, type: s, className: e }), ...i, ref: n })
11
10
  );
12
11
  h.displayName = p.displayName;
13
- const F = o({
12
+ const j = o({
14
13
  base: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary"
15
- }), y = r.forwardRef(({ className: e, ...t }, s) => /* @__PURE__ */ l(d, { ref: s, className: F({ className: e }), ...t, children: [
16
- /* @__PURE__ */ a(D, { icon: O }),
14
+ }), y = r.forwardRef(({ className: e, ...t }, s) => /* @__PURE__ */ l(d, { ref: s, className: j({ className: e }), ...t, children: [
15
+ /* @__PURE__ */ a(R, { icon: T }),
17
16
  /* @__PURE__ */ a("span", { className: "sr-only", children: "Close" })
18
17
  ] }));
19
18
  y.displayName = d.displayName;
20
- const H = o({
19
+ const F = o({
21
20
  base: "shadow-soft-lg fixed z-50 flex flex-col bg-background transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out",
22
21
  variants: {
23
22
  side: {
@@ -30,7 +29,7 @@ const H = o({
30
29
  defaultVariants: {
31
30
  side: "right"
32
31
  }
33
- }), k = r.forwardRef(
32
+ }), H = r.forwardRef(
34
33
  ({
35
34
  side: e = "right",
36
35
  className: t,
@@ -41,8 +40,8 @@ const H = o({
41
40
  portalContainer: b,
42
41
  ...g
43
42
  }, x) => {
44
- const S = H({ side: e, className: t }), N = T(b);
45
- return /* @__PURE__ */ l(P, { container: N, children: [
43
+ const S = F({ side: e, className: t });
44
+ return /* @__PURE__ */ l(D, { container: b, children: [
46
45
  /* @__PURE__ */ a(h, { type: n, blur: u }),
47
46
  /* @__PURE__ */ l(c, { ref: x, className: S, ...g, children: [
48
47
  s,
@@ -51,33 +50,33 @@ const H = o({
51
50
  ] });
52
51
  }
53
52
  );
54
- k.displayName = c.displayName;
55
- const B = o({
53
+ H.displayName = c.displayName;
54
+ const P = o({
56
55
  base: "flex flex-col space-y-2 p-6 text-center sm:text-left"
56
+ }), k = ({ className: e, ...t }) => /* @__PURE__ */ a("div", { className: P({ className: e }), ...t });
57
+ k.displayName = "SheetHeader";
58
+ const B = o({
59
+ base: "flex flex-col-reverse p-6 pt-0 sm:flex-row sm:justify-end sm:space-x-2"
57
60
  }), I = ({ className: e, ...t }) => /* @__PURE__ */ a("div", { className: B({ className: e }), ...t });
58
- I.displayName = "SheetHeader";
61
+ I.displayName = "SheetFooter";
59
62
  const z = o({
60
- base: "flex flex-col-reverse p-6 pt-0 sm:flex-row sm:justify-end sm:space-x-2"
61
- }), V = ({ className: e, ...t }) => /* @__PURE__ */ a("div", { className: z({ className: e }), ...t });
62
- V.displayName = "SheetFooter";
63
- const X = o({
64
63
  base: "text-lg font-semibold text-foreground"
65
- }), q = r.forwardRef(({ className: e, ...t }, s) => /* @__PURE__ */ a(m, { ref: s, className: X({ className: e }), ...t }));
66
- q.displayName = m.displayName;
67
- const A = o({
64
+ }), V = r.forwardRef(({ className: e, ...t }, s) => /* @__PURE__ */ a(m, { ref: s, className: z({ className: e }), ...t }));
65
+ V.displayName = m.displayName;
66
+ const X = o({
68
67
  base: "text-sm text-muted-foreground"
69
- }), E = r.forwardRef(({ className: e, ...t }, s) => /* @__PURE__ */ a(f, { ref: s, className: A({ className: e }), ...t }));
70
- E.displayName = f.displayName;
68
+ }), q = r.forwardRef(({ className: e, ...t }, s) => /* @__PURE__ */ a(f, { ref: s, className: X({ className: e }), ...t }));
69
+ q.displayName = f.displayName;
71
70
  export {
72
- W as S,
73
- k as a,
74
- I as b,
75
- V as c,
76
- q as d,
77
- E as e,
78
- Y as f,
79
- Z as g,
80
- P as h,
71
+ Q as S,
72
+ H as a,
73
+ k as b,
74
+ I as c,
75
+ V as d,
76
+ q as e,
77
+ U as f,
78
+ W as g,
79
+ D as h,
81
80
  h as i
82
81
  };
83
- //# sourceMappingURL=Sheet-aLBPtE1k.js.map
82
+ //# sourceMappingURL=Sheet-C2UoHLL0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sheet-C2UoHLL0.js","sources":["../src/components/sheet/Sheet.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { X } from \"lucide-react\";\r\nimport { overlayStyles, OverlayVariants } from \"../overlay/Overlay\";\r\nimport { Icon } from \"../icon\";\r\nimport { VariantsConfig } from \"@/lib/utils/variants\";\r\n\r\nconst Sheet = SheetPrimitive.Root;\r\n\r\nconst SheetTrigger = SheetPrimitive.Trigger;\r\n\r\nconst SheetClose = SheetPrimitive.Close;\r\n\r\nconst SheetPortal = SheetPrimitive.Portal;\r\n\r\nconst sheetOverlayStyles = tv({ extend: overlayStyles });\r\n\r\ninterface SheetOverlayProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>, OverlayVariants {}\r\n\r\nconst SheetOverlay = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Overlay>, SheetOverlayProps>(\r\n\t({ className, blur, type, ...props }, ref) => (\r\n\t\t<SheetPrimitive.Overlay className={sheetOverlayStyles({ blur, type, className })} {...props} ref={ref} />\r\n\t)\r\n);\r\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\r\n\r\nconst sheetCloseButtonStyles = tv({\r\n\tbase: \"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\"\r\n});\r\n\r\nconst SheetCloseButton = React.forwardRef<\r\n\tReact.ElementRef<typeof SheetPrimitive.Close>,\r\n\tReact.ComponentPropsWithoutRef<typeof SheetPrimitive.Close>\r\n>(({ className, ...props }, ref) => (\r\n\t<SheetPrimitive.Close ref={ref} className={sheetCloseButtonStyles({ className })} {...props}>\r\n\t\t<Icon icon={X} />\r\n\t\t<span className=\"sr-only\">Close</span>\r\n\t</SheetPrimitive.Close>\r\n));\r\n\r\nSheetCloseButton.displayName = SheetPrimitive.Close.displayName;\r\n\r\nexport interface SheetContentVariants {\r\n\tside?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n}\r\n\r\nconst sheetContentStyles = tv({\r\n\tbase: \"shadow-soft-lg fixed z-50 flex flex-col bg-background transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out\",\r\n\tvariants: {\r\n\t\tside: {\r\n\t\t\ttop: \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\r\n\t\t\tbottom: \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\r\n\t\t\tleft: \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\r\n\t\t\tright: \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\"\r\n\t\t}\r\n\t} satisfies VariantsConfig<SheetContentVariants>,\r\n\tdefaultVariants: {\r\n\t\tside: \"right\"\r\n\t}\r\n});\r\n\r\ninterface SheetContentProps\r\n\textends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\r\n\t\tSheetContentVariants {\r\n\tshowCloseButton?: boolean;\r\n\toverlayType?: OverlayVariants[\"type\"];\r\n\toverlayBlur?: OverlayVariants[\"blur\"];\r\n\t/**\r\n\t * Контейнер для портала. Если не указан, портал рендерится в document.body\r\n\t */\r\n\tportalContainer?: HTMLElement;\r\n}\r\n\r\nconst SheetContent = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Content>, SheetContentProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tside = \"right\",\r\n\t\t\tclassName,\r\n\t\t\tchildren,\r\n\t\t\tshowCloseButton = true,\r\n\t\t\toverlayType,\r\n\t\t\toverlayBlur,\r\n\t\t\tportalContainer,\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tconst styles = sheetContentStyles({ side, className });\r\n\t\tconst container = portalContainer;\r\n\r\n\t\treturn (\r\n\t\t\t<SheetPortal container={container}>\r\n\t\t\t\t<SheetOverlay type={overlayType} blur={overlayBlur} />\r\n\t\t\t\t<SheetPrimitive.Content ref={ref} className={styles} {...props}>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t\t{showCloseButton && <SheetCloseButton />}\r\n\t\t\t\t</SheetPrimitive.Content>\r\n\t\t\t</SheetPortal>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nSheetContent.displayName = SheetPrimitive.Content.displayName;\r\n\r\nconst sheetHeaderStyles = tv({\r\n\tbase: \"flex flex-col space-y-2 p-6 text-center sm:text-left\"\r\n});\r\n\r\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\r\n\t<div className={sheetHeaderStyles({ className })} {...props} />\r\n);\r\n\r\nSheetHeader.displayName = \"SheetHeader\";\r\n\r\nconst sheetFooterStyles = tv({\r\n\tbase: \"flex flex-col-reverse p-6 pt-0 sm:flex-row sm:justify-end sm:space-x-2\"\r\n});\r\n\r\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\r\n\t<div className={sheetFooterStyles({ className })} {...props} />\r\n);\r\n\r\nSheetFooter.displayName = \"SheetFooter\";\r\n\r\nconst sheetTitleStyles = tv({\r\n\tbase: \"text-lg font-semibold text-foreground\"\r\n});\r\n\r\nconst SheetTitle = React.forwardRef<\r\n\tReact.ElementRef<typeof SheetPrimitive.Title>,\r\n\tReact.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\r\n>(({ className, ...props }, ref) => (\r\n\t<SheetPrimitive.Title ref={ref} className={sheetTitleStyles({ className })} {...props} />\r\n));\r\n\r\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\r\n\r\nconst sheetDescriptionStyles = tv({\r\n\tbase: \"text-sm text-muted-foreground\"\r\n});\r\n\r\nconst SheetDescription = React.forwardRef<\r\n\tReact.ElementRef<typeof SheetPrimitive.Description>,\r\n\tReact.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\r\n>(({ className, ...props }, ref) => (\r\n\t<SheetPrimitive.Description ref={ref} className={sheetDescriptionStyles({ className })} {...props} />\r\n));\r\n\r\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\r\n\r\nexport {\r\n\tSheet,\r\n\tSheetPortal,\r\n\tSheetOverlay,\r\n\tSheetTrigger,\r\n\tSheetClose,\r\n\tSheetContent,\r\n\tSheetHeader,\r\n\tSheetFooter,\r\n\tSheetTitle,\r\n\tSheetDescription\r\n};\r\n"],"names":["Sheet","SheetPrimitive.Root","SheetTrigger","SheetPrimitive.Trigger","SheetClose","SheetPrimitive.Close","SheetPortal","SheetPrimitive.Portal","sheetOverlayStyles","tv","overlayStyles","SheetOverlay","React","className","blur","type","props","ref","jsx","SheetPrimitive.Overlay","sheetCloseButtonStyles","SheetCloseButton","jsxs","Icon","X","sheetContentStyles","SheetContent","side","children","showCloseButton","overlayType","overlayBlur","portalContainer","styles","SheetPrimitive.Content","sheetHeaderStyles","SheetHeader","sheetFooterStyles","SheetFooter","sheetTitleStyles","SheetTitle","SheetPrimitive.Title","sheetDescriptionStyles","SheetDescription","SheetPrimitive.Description"],"mappings":";;;;;;;AAQA,MAAMA,IAAQC,GAERC,IAAeC,GAEfC,IAAaC,GAEbC,IAAcC,GAEdC,IAAqBC,EAAG,EAAE,QAAQC,GAAe,GAIjDC,IAAeC,EAAM;AAAA,EAC1B,CAAC,EAAE,WAAAC,GAAW,MAAAC,GAAM,MAAAC,GAAM,GAAGC,KAASC,MACpC,gBAAAC,EAAAC,GAAA,EAAuB,WAAWX,EAAmB,EAAE,MAAAM,GAAM,MAAAC,GAAM,WAAAF,GAAW,GAAI,GAAGG,GAAO,KAAAC,EAAU,CAAA;AAEzG;AACAN,EAAa,cAAcQ,EAAuB;AAElD,MAAMC,IAAyBX,EAAG;AAAA,EACjC,MAAM;AACP,CAAC,GAEKY,IAAmBT,EAAM,WAG7B,CAAC,EAAE,WAAAC,GAAW,GAAGG,EAAM,GAAGC,MAC3B,gBAAAK,EAACjB,GAAA,EAAqB,KAAAY,GAAU,WAAWG,EAAuB,EAAE,WAAAP,EAAU,CAAC,GAAI,GAAGG,GACrF,UAAA;AAAA,EAAC,gBAAAE,EAAAK,GAAA,EAAK,MAAMC,EAAG,CAAA;AAAA,EACd,gBAAAN,EAAA,QAAA,EAAK,WAAU,WAAU,UAAK,QAAA,CAAA;AAAA,EAAA,CAChC,CACA;AAEDG,EAAiB,cAAchB,EAAqB;AAMpD,MAAMoB,IAAqBhB,EAAG;AAAA,EAC7B,MAAM;AAAA,EACN,UAAU;AAAA,IACT,MAAM;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EAET;AAAA,EACA,iBAAiB;AAAA,IAChB,MAAM;AAAA,EAAA;AAER,CAAC,GAcKiB,IAAed,EAAM;AAAA,EAC1B,CACC;AAAA,IACC,MAAAe,IAAO;AAAA,IACP,WAAAd;AAAA,IACA,UAAAe;AAAA,IACA,iBAAAC,IAAkB;AAAA,IAClB,aAAAC;AAAA,IACA,aAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,GAAGhB;AAAA,KAEJC,MACI;AACJ,UAAMgB,IAASR,EAAmB,EAAE,MAAAE,GAAM,WAAAd,GAAW;AAIpD,WAAA,gBAAAS,EAAChB,KAAY,WAHI0B,GAIhB,UAAA;AAAA,MAAA,gBAAAd,EAACP,GAAa,EAAA,MAAMmB,GAAa,MAAMC,GAAa;AAAA,MACpD,gBAAAT,EAACY,GAAA,EAAuB,KAAAjB,GAAU,WAAWgB,GAAS,GAAGjB,GACvD,UAAA;AAAA,QAAAY;AAAA,QACAC,uBAAoBR,GAAiB,CAAA,CAAA;AAAA,MAAA,EACvC,CAAA;AAAA,IAAA,GACD;AAAA,EAAA;AAGH;AAEAK,EAAa,cAAcQ,EAAuB;AAElD,MAAMC,IAAoB1B,EAAG;AAAA,EAC5B,MAAM;AACP,CAAC,GAEK2B,IAAc,CAAC,EAAE,WAAAvB,GAAW,GAAGG,QACpC,gBAAAE,EAAC,OAAI,EAAA,WAAWiB,EAAkB,EAAE,WAAAtB,EAAA,CAAW,GAAI,GAAGG,EAAO,CAAA;AAG9DoB,EAAY,cAAc;AAE1B,MAAMC,IAAoB5B,EAAG;AAAA,EAC5B,MAAM;AACP,CAAC,GAEK6B,IAAc,CAAC,EAAE,WAAAzB,GAAW,GAAGG,QACpC,gBAAAE,EAAC,OAAI,EAAA,WAAWmB,EAAkB,EAAE,WAAAxB,EAAA,CAAW,GAAI,GAAGG,EAAO,CAAA;AAG9DsB,EAAY,cAAc;AAE1B,MAAMC,IAAmB9B,EAAG;AAAA,EAC3B,MAAM;AACP,CAAC,GAEK+B,IAAa5B,EAAM,WAGvB,CAAC,EAAE,WAAAC,GAAW,GAAGG,EAAM,GAAGC,MAC3B,gBAAAC,EAACuB,GAAA,EAAqB,KAAAxB,GAAU,WAAWsB,EAAiB,EAAE,WAAA1B,GAAW,GAAI,GAAGG,GAAO,CACvF;AAEDwB,EAAW,cAAcC,EAAqB;AAE9C,MAAMC,IAAyBjC,EAAG;AAAA,EACjC,MAAM;AACP,CAAC,GAEKkC,IAAmB/B,EAAM,WAG7B,CAAC,EAAE,WAAAC,GAAW,GAAGG,EAAM,GAAGC,MAC3B,gBAAAC,EAAC0B,GAAA,EAA2B,KAAA3B,GAAU,WAAWyB,EAAuB,EAAE,WAAA7B,GAAW,GAAI,GAAGG,GAAO,CACnG;AAED2B,EAAiB,cAAcC,EAA2B;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as t, jsxs as p } from "react/jsx-runtime";
2
2
  import { c as n } from "./cn-dsXlqdJg.js";
3
- import { a as u, T, b as g, c as m } from "./Tooltip-DOgKy50D.js";
3
+ import { a as u, T, b as g, c as m } from "./Tooltip-D2XvRS0c.js";
4
4
  import { useState as O, useRef as h, useCallback as d } from "react";
5
5
  const w = (o) => o.scrollWidth > o.offsetWidth || o.scrollHeight > o.offsetHeight, x = () => {
6
6
  const [o, r] = O(!1), e = h(null), s = d((l) => {
@@ -33,4 +33,4 @@ export {
33
33
  v as T,
34
34
  x as u
35
35
  };
36
- //# sourceMappingURL=TextOverflowTooltip-BaNPKqnO.js.map
36
+ //# sourceMappingURL=TextOverflowTooltip-XPDdO9Dz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextOverflowTooltip-BaNPKqnO.js","sources":["../src/lib/utils/dom.ts","../src/components/overflow-tooltip/useOverflowTooltip.ts","../src/components/overflow-tooltip/OverflowTooltip.tsx","../src/components/overflow-tooltip/TextOverflowTooltip.tsx"],"sourcesContent":["/**\n * Проверяет, переполнен ли элемент (дочерние элементы выходят за пределы родительского элемента)\n * @param element - HTML элемент для проверки\n * @returns true, если элемент переполнен по ширине или высоте\n *\n * @example\n * // подсказку показываем только там, где текст обрезан\n * const truncated = isElementOverflowing(labelRef.current);\n */\nexport const isElementOverflowing = (element: HTMLElement): boolean => {\n\treturn element.scrollWidth > element.offsetWidth || element.scrollHeight > element.offsetHeight;\n};\n\n/**\n * Canvas для измерения текста переиспользуется: на каждый вызов создавать его расточительно.\n *\n * Контекст один на все поля страницы, и это безопасно ровно до тех пор, пока каждое\n * измерение выставляет **все** влияющие на ширину свойства. Условное присваивание оставило бы\n * настройку от предыдущего поля: соседняя таблица со своим `letter-spacing` мерила бы текст\n * чужим трекингом. Поэтому свойства ниже пишутся всегда, а сам canvas остаётся приватным\n * для этого модуля — иначе инвариант незаметно нарушит следующий пользователь.\n */\nlet measureContext: CanvasRenderingContext2D | null | undefined;\n\nconst getMeasureContext = () => {\n\tif (measureContext === undefined) measureContext = document.createElement(\"canvas\").getContext(\"2d\");\n\treturn measureContext;\n};\n\n/**\n * Ставит каретку в `input`/`textarea` по горизонтальной координате указателя (`clientX`).\n *\n * Нужно там, где поле появляется по клику уже после самого клика — например, при переходе\n * ячейки таблицы в режим редактирования по двойному щелчку: без этого каретка встаёт\n * в начало или конец, а не туда, куда целился пользователь.\n *\n * `caretPositionFromPoint` / `caretRangeFromPoint` здесь бесполезны: содержимое `input`\n * не является частью DOM-дерева, и Range/Selection API до него не достаёт — вернётся сам\n * элемент, а не позиция в тексте. Поэтому индекс считается вручную: текст измеряется\n * на offscreen canvas тем же шрифтом, и выбирается ближайшая к точке граница символа.\n * Ширины префиксов монотонно растут, так что перебор обрывается, как только начал удаляться\n * от цели.\n *\n * Учитывается только горизонталь, поэтому для многострочного текста функция не годится —\n * там нужен `placeCaretAtClientPoint` по `contenteditable`.\n *\n * Возвращает `false`, если поставить каретку не удалось (поле пустое, тип поля не поддерживает\n * выделение или canvas недоступен) — вызывающему коду в этом случае стоит оставить поведение\n * по умолчанию.\n *\n * @example\n * // координата запоминается на dblclick, применяется, когда поле получило фокус\n * <input\n * autoFocus\n * onFocus={(event) => {\n * const input = event.currentTarget;\n * if (!placeCaretAtPoint(input, caretX)) placeCaretAtEnd(input);\n * }}\n * />\n */\nexport const placeCaretAtPoint = (element: HTMLInputElement | HTMLTextAreaElement, clientX: number): boolean => {\n\tconst value = element.value;\n\tif (!value) return false;\n\n\t// У `type=number|email|date|time|color` выделения нет, а `setSelectionRange` на них кидает\n\t// `InvalidStateError`. Тип полей задаёт прикладной код, поэтому проверяем, а не полагаемся.\n\tif (element.selectionStart === null) return false;\n\n\tconst context = getMeasureContext();\n\tif (!context) return false;\n\n\tconst style = window.getComputedStyle(element);\n\tcontext.font = `${style.fontStyle} ${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;\n\t// `letterSpacing` у canvas принимает только длину: `normal` из вычисленных стилей его сломает.\n\t// Пишется на каждом вызове — иначе значение утечёт в следующее поле, см. `measureContext`.\n\tif (\"letterSpacing\" in context) {\n\t\tcontext.letterSpacing = style.letterSpacing.endsWith(\"px\") ? style.letterSpacing : \"0px\";\n\t}\n\n\tconst rect = element.getBoundingClientRect();\n\tconst borderLeft = parseFloat(style.borderLeftWidth) || 0;\n\tconst borderRight = parseFloat(style.borderRightWidth) || 0;\n\tconst paddingLeft = parseFloat(style.paddingLeft) || 0;\n\tconst paddingRight = parseFloat(style.paddingRight) || 0;\n\tconst contentLeft = rect.left + borderLeft + paddingLeft;\n\tconst contentWidth = rect.width - borderLeft - borderRight - paddingLeft - paddingRight;\n\n\t// Текст короче поля прижимается по `text-align`, и отсчитывать позицию от левого края\n\t// нельзя — у выровненного вправо поля это промах на всю свободную ширину.\n\tconst slack = contentWidth - context.measureText(value).width;\n\tlet originX = contentLeft - element.scrollLeft;\n\tif (slack > 0) {\n\t\tif (style.textAlign === \"right\" || style.textAlign === \"end\") originX += slack;\n\t\telse if (style.textAlign === \"center\") originX += slack / 2;\n\t}\n\n\tconst targetX = clientX - originX;\n\tlet bestIndex = 0;\n\tlet bestDistance = Infinity;\n\tfor (let index = 0; index <= value.length; index++) {\n\t\tconst distance = Math.abs(context.measureText(value.slice(0, index)).width - targetX);\n\t\tif (distance > bestDistance) break;\n\t\tbestDistance = distance;\n\t\tbestIndex = index;\n\t}\n\n\telement.setSelectionRange(bestIndex, bestIndex);\n\treturn true;\n};\n\n/**\n * Ставит каретку в `contenteditable` по точке указателя.\n *\n * В отличие от `input`, текст здесь — обычные узлы DOM, поэтому измерять ничего не нужно:\n * браузер сам отдаёт позицию по координатам. Работает и с переносами, так что это тот случай,\n * когда многострочная правка делается редактируемым `div`, а не `textarea`.\n *\n * Возвращает `false`, если точка не попала в текст элемента, — вызывающему коду стоит\n * поставить каретку в конец через `placeCaretAtEnd`.\n *\n * @example\n * const editor = event.currentTarget;\n * if (!placeCaretAtClientPoint(editor, event.clientX, event.clientY)) placeCaretAtEnd(editor);\n */\nexport const placeCaretAtClientPoint = (element: HTMLElement, clientX: number, clientY: number): boolean => {\n\tconst selection = window.getSelection();\n\tif (!selection) return false;\n\n\tconst range = caretRangeAtPoint(clientX, clientY);\n\t// Точка могла прийтись на отступ ячейки или на соседний узел: чужую позицию не ставим.\n\tif (!range || !element.contains(range.startContainer)) return false;\n\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n\treturn true;\n};\n\n/**\n * Оба способа спросить у браузера позицию каретки по координатам — объявлены здесь сами.\n *\n * `caretPositionFromPoint` — стандартный, но в `lib.dom` TS 5.6 его ещё нет.\n * `caretRangeFromPoint` — легаси WebKit, в `lib.dom` он помечен `@deprecated`; берётся\n * только фолбэком для Safari до 17.4, где стандартного метода ещё не было. Объявление\n * собрано в одном месте намеренно: обращение идёт к нему, а не к устаревшему члену `Document`,\n * и причина использования легаси видна рядом, а не прячется за подавленной подсказкой.\n */\ntype DocumentWithCaretApi = Document & {\n\tcaretPositionFromPoint?: (x: number, y: number) => { offsetNode: Node; offset: number } | null;\n\tcaretRangeFromPoint?: (x: number, y: number) => Range | null;\n};\n\nconst caretRangeAtPoint = (clientX: number, clientY: number): Range | null => {\n\tconst doc = document as DocumentWithCaretApi;\n\n\tif (doc.caretPositionFromPoint) {\n\t\tconst position = doc.caretPositionFromPoint(clientX, clientY);\n\t\tif (!position) return null;\n\t\tconst range = document.createRange();\n\t\trange.setStart(position.offsetNode, position.offset);\n\t\trange.collapse(true);\n\t\treturn range;\n\t}\n\n\treturn doc.caretRangeFromPoint?.(clientX, clientY) ?? null;\n};\n\n/**\n * Ставит каретку в конец содержимого `contenteditable` — поведение F2 в Excel.\n *\n * @example\n * // F2 открывает правку с кареткой в конце\n * if (event.key === \"F2\") placeCaretAtEnd(editorRef.current);\n */\nexport const placeCaretAtEnd = (element: HTMLElement): void => {\n\tconst selection = window.getSelection();\n\tif (!selection) return;\n\n\tconst range = document.createRange();\n\trange.selectNodeContents(element);\n\trange.collapse(false);\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n};\n\n/**\n * Вставляет текст в текущую позицию каретки внутри `contenteditable`, заменяя выделенное.\n *\n * Нужно на вставке из буфера: по умолчанию `contenteditable` принимает разметку, и в ячейку\n * приезжает чужое форматирование вместе с текстом.\n *\n * @example\n * onPaste={(event) => {\n * event.preventDefault();\n * insertTextAtCaret(event.currentTarget, event.clipboardData.getData(\"text/plain\"));\n * }}\n */\nexport const insertTextAtCaret = (element: HTMLElement, text: string): void => {\n\tconst selection = window.getSelection();\n\tif (!selection?.rangeCount) return;\n\n\tconst range = selection.getRangeAt(0);\n\tif (!element.contains(range.startContainer)) return;\n\n\trange.deleteContents();\n\tconst node = document.createTextNode(text);\n\trange.insertNode(node);\n\trange.setStartAfter(node);\n\trange.collapse(true);\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n};\n","import { useCallback, useRef, useState } from \"react\";\r\nimport { isElementOverflowing } from \"../../lib/utils/dom\";\r\n\r\nexport const useOverflowTooltip = <T extends HTMLElement>() => {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst ref = useRef<T>(null);\r\n\r\n\tconst onOpenChange = useCallback((newOpen: boolean) => {\r\n\t\tif (newOpen === false) {\r\n\t\t\tsetOpen(false);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!ref.current) return;\r\n\t\tif (isElementOverflowing(ref.current)) {\r\n\t\t\tsetOpen(true);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn { open, onOpenChange, ref };\r\n};\r\n","import { cn } from \"@/lib/utils\";\r\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"../tooltip\";\r\nimport { useOverflowTooltip } from \"./useOverflowTooltip\";\r\nimport React from \"react\";\r\n\r\ntype OverflowTooltipProps = {\r\n\tchildren: React.ReactNode;\r\n\t/**\r\n\t * HTML-элемент для обертки содержимого.\r\n\t * Используется для соблюдения правильной HTML-семантики.\r\n\t * Например:\r\n\t * - span (по умолчанию) для текста и инлайн-элементов\r\n\t * - div для блочного содержимого и сложных структур\r\n\t * @default span\r\n\t */\r\n\ttriggerTag?: React.ElementType;\r\n\t/**\r\n\t * Классы для обработки переполненного содержимого.\r\n\t * Например: \"truncate\", \"line-clamp-3\" и т.д.\r\n\t */\r\n\tclassName?: string;\r\n\t/**\r\n\t * Классы для содержимого тултипа.\r\n\t * С помощью них можно управлять стилями тултипа, например шириной, переносом текста и т.д.\r\n\t */\r\n\ttooltipClassName?: string;\r\n\tfocus?: \"high\";\r\n};\r\n\r\nexport const OverflowTooltip = ({ children, className, focus, triggerTag, tooltipClassName }: OverflowTooltipProps) => {\r\n\tconst { open, onOpenChange, ref } = useOverflowTooltip<HTMLDivElement>();\r\n\tconst TriggerTag = triggerTag || \"span\";\r\n\treturn (\r\n\t\t<TooltipProvider>\r\n\t\t\t<Tooltip open={open} onOpenChange={onOpenChange}>\r\n\t\t\t\t<TooltipTrigger asChild>\r\n\t\t\t\t\t<TriggerTag ref={ref} className={cn(className)}>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</TriggerTag>\r\n\t\t\t\t</TooltipTrigger>\r\n\t\t\t\t<TooltipContent focus={focus} className={cn(\"max-w-xs\", tooltipClassName)}>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</TooltipContent>\r\n\t\t\t</Tooltip>\r\n\t\t</TooltipProvider>\r\n\t);\r\n};\r\n\r\nOverflowTooltip.displayName = \"OverflowTooltip\";\r\n","import { cn } from \"@/lib/utils\";\r\nimport React from \"react\";\r\nimport { OverflowTooltip } from \"./OverflowTooltip\";\r\n\r\ntype TextOverflowTooltipProps = {\r\n\tchildren?: React.ReactNode;\r\n\tclassName?: string;\r\n\ttooltipClassName?: string;\r\n};\r\n\r\nexport const TextOverflowTooltip = ({ children, className, tooltipClassName }: TextOverflowTooltipProps) => {\r\n\treturn (\r\n\t\t<OverflowTooltip\r\n\t\t\tclassName={cn(\"inline-block max-w-full truncate\", className)}\r\n\t\t\ttooltipClassName={tooltipClassName}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</OverflowTooltip>\r\n\t);\r\n};\r\n\r\nTextOverflowTooltip.displayName = \"TextOverflowTooltip\";\r\n"],"names":["isElementOverflowing","element","useOverflowTooltip","open","setOpen","useState","ref","useRef","onOpenChange","useCallback","newOpen","OverflowTooltip","children","className","focus","triggerTag","tooltipClassName","jsx","TooltipProvider","jsxs","Tooltip","TooltipTrigger","cn","TooltipContent","TextOverflowTooltip"],"mappings":";;;;AASa,MAAAA,IAAuB,CAACC,MAC7BA,EAAQ,cAAcA,EAAQ,eAAeA,EAAQ,eAAeA,EAAQ,cCPvEC,IAAqB,MAA6B;AAC9D,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChCC,IAAMC,EAAU,IAAI,GAEpBC,IAAeC,EAAY,CAACC,MAAqB;AACtD,QAAIA,MAAY,IAAO;AACtB,MAAAN,EAAQ,EAAK;AACb;AAAA,IAAA;AAEG,IAACE,EAAI,WACLN,EAAqBM,EAAI,OAAO,KACnCF,EAAQ,EAAI;AAAA,EAEd,GAAG,EAAE;AAEE,SAAA,EAAE,MAAAD,GAAM,cAAAK,GAAc,KAAAF,EAAI;AAClC,GCUaK,IAAkB,CAAC,EAAE,UAAAC,GAAU,WAAAC,GAAW,OAAAC,GAAO,YAAAC,GAAY,kBAAAC,QAA6C;AACtH,QAAM,EAAE,MAAAb,GAAM,cAAAK,GAAc,KAAAF,EAAA,IAAQJ,EAAmC;AAEvE,SACE,gBAAAe,EAAAC,GAAA,EACA,UAAC,gBAAAC,EAAAC,GAAA,EAAQ,MAAAjB,GAAY,cAAAK,GACpB,UAAA;AAAA,IAAC,gBAAAS,EAAAI,GAAA,EAAe,SAAO,IACtB,UAAC,gBAAAJ,EALcF,KAAc,QAK5B,EAAW,KAAAT,GAAU,WAAWgB,EAAGT,CAAS,GAC3C,UAAAD,EACF,CAAA,GACD;AAAA,IACA,gBAAAK,EAACM,KAAe,OAAAT,GAAc,WAAWQ,EAAG,YAAYN,CAAgB,GACtE,UAAAJ,EACF,CAAA;AAAA,EAAA,EAAA,CACD,EACD,CAAA;AAEF;AAEAD,EAAgB,cAAc;ACtCvB,MAAMa,IAAsB,CAAC,EAAE,UAAAZ,GAAU,WAAAC,GAAW,kBAAAG,QAEzD,gBAAAC;AAAA,EAACN;AAAA,EAAA;AAAA,IACA,WAAWW,EAAG,oCAAoCT,CAAS;AAAA,IAC3D,kBAAAG;AAAA,IAEC,UAAAJ;AAAA,EAAA;AACF;AAIFY,EAAoB,cAAc;"}
1
+ {"version":3,"file":"TextOverflowTooltip-XPDdO9Dz.js","sources":["../src/lib/utils/dom.ts","../src/components/overflow-tooltip/useOverflowTooltip.ts","../src/components/overflow-tooltip/OverflowTooltip.tsx","../src/components/overflow-tooltip/TextOverflowTooltip.tsx"],"sourcesContent":["/**\n * Проверяет, переполнен ли элемент (дочерние элементы выходят за пределы родительского элемента)\n * @param element - HTML элемент для проверки\n * @returns true, если элемент переполнен по ширине или высоте\n *\n * @example\n * // подсказку показываем только там, где текст обрезан\n * const truncated = isElementOverflowing(labelRef.current);\n */\nexport const isElementOverflowing = (element: HTMLElement): boolean => {\n\treturn element.scrollWidth > element.offsetWidth || element.scrollHeight > element.offsetHeight;\n};\n\n/**\n * Canvas для измерения текста переиспользуется: на каждый вызов создавать его расточительно.\n *\n * Контекст один на все поля страницы, и это безопасно ровно до тех пор, пока каждое\n * измерение выставляет **все** влияющие на ширину свойства. Условное присваивание оставило бы\n * настройку от предыдущего поля: соседняя таблица со своим `letter-spacing` мерила бы текст\n * чужим трекингом. Поэтому свойства ниже пишутся всегда, а сам canvas остаётся приватным\n * для этого модуля — иначе инвариант незаметно нарушит следующий пользователь.\n */\nlet measureContext: CanvasRenderingContext2D | null | undefined;\n\nconst getMeasureContext = () => {\n\tif (measureContext === undefined) measureContext = document.createElement(\"canvas\").getContext(\"2d\");\n\treturn measureContext;\n};\n\n/**\n * Ставит каретку в `input`/`textarea` по горизонтальной координате указателя (`clientX`).\n *\n * Нужно там, где поле появляется по клику уже после самого клика — например, при переходе\n * ячейки таблицы в режим редактирования по двойному щелчку: без этого каретка встаёт\n * в начало или конец, а не туда, куда целился пользователь.\n *\n * `caretPositionFromPoint` / `caretRangeFromPoint` здесь бесполезны: содержимое `input`\n * не является частью DOM-дерева, и Range/Selection API до него не достаёт — вернётся сам\n * элемент, а не позиция в тексте. Поэтому индекс считается вручную: текст измеряется\n * на offscreen canvas тем же шрифтом, и выбирается ближайшая к точке граница символа.\n * Ширины префиксов монотонно растут, так что перебор обрывается, как только начал удаляться\n * от цели.\n *\n * Учитывается только горизонталь, поэтому для многострочного текста функция не годится —\n * там нужен `placeCaretAtClientPoint` по `contenteditable`.\n *\n * Возвращает `false`, если поставить каретку не удалось (поле пустое, тип поля не поддерживает\n * выделение или canvas недоступен) — вызывающему коду в этом случае стоит оставить поведение\n * по умолчанию.\n *\n * @example\n * // координата запоминается на dblclick, применяется, когда поле получило фокус\n * <input\n * autoFocus\n * onFocus={(event) => {\n * const input = event.currentTarget;\n * if (!placeCaretAtPoint(input, caretX)) placeCaretAtEnd(input);\n * }}\n * />\n */\nexport const placeCaretAtPoint = (element: HTMLInputElement | HTMLTextAreaElement, clientX: number): boolean => {\n\tconst value = element.value;\n\tif (!value) return false;\n\n\t// У `type=number|email|date|time|color` выделения нет, а `setSelectionRange` на них кидает\n\t// `InvalidStateError`. Тип полей задаёт прикладной код, поэтому проверяем, а не полагаемся.\n\tif (element.selectionStart === null) return false;\n\n\tconst context = getMeasureContext();\n\tif (!context) return false;\n\n\tconst style = window.getComputedStyle(element);\n\tcontext.font = `${style.fontStyle} ${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;\n\t// `letterSpacing` у canvas принимает только длину: `normal` из вычисленных стилей его сломает.\n\t// Пишется на каждом вызове — иначе значение утечёт в следующее поле, см. `measureContext`.\n\tif (\"letterSpacing\" in context) {\n\t\tcontext.letterSpacing = style.letterSpacing.endsWith(\"px\") ? style.letterSpacing : \"0px\";\n\t}\n\n\tconst rect = element.getBoundingClientRect();\n\tconst borderLeft = parseFloat(style.borderLeftWidth) || 0;\n\tconst borderRight = parseFloat(style.borderRightWidth) || 0;\n\tconst paddingLeft = parseFloat(style.paddingLeft) || 0;\n\tconst paddingRight = parseFloat(style.paddingRight) || 0;\n\tconst contentLeft = rect.left + borderLeft + paddingLeft;\n\tconst contentWidth = rect.width - borderLeft - borderRight - paddingLeft - paddingRight;\n\n\t// Текст короче поля прижимается по `text-align`, и отсчитывать позицию от левого края\n\t// нельзя — у выровненного вправо поля это промах на всю свободную ширину.\n\tconst slack = contentWidth - context.measureText(value).width;\n\tlet originX = contentLeft - element.scrollLeft;\n\tif (slack > 0) {\n\t\tif (style.textAlign === \"right\" || style.textAlign === \"end\") originX += slack;\n\t\telse if (style.textAlign === \"center\") originX += slack / 2;\n\t}\n\n\tconst targetX = clientX - originX;\n\tlet bestIndex = 0;\n\tlet bestDistance = Infinity;\n\tfor (let index = 0; index <= value.length; index++) {\n\t\tconst distance = Math.abs(context.measureText(value.slice(0, index)).width - targetX);\n\t\tif (distance > bestDistance) break;\n\t\tbestDistance = distance;\n\t\tbestIndex = index;\n\t}\n\n\telement.setSelectionRange(bestIndex, bestIndex);\n\treturn true;\n};\n\n/**\n * Ставит каретку в `contenteditable` по точке указателя.\n *\n * В отличие от `input`, текст здесь — обычные узлы DOM, поэтому измерять ничего не нужно:\n * браузер сам отдаёт позицию по координатам. Работает и с переносами, так что это тот случай,\n * когда многострочная правка делается редактируемым `div`, а не `textarea`.\n *\n * Возвращает `false`, если точка не попала в текст элемента, — вызывающему коду стоит\n * поставить каретку в конец через `placeCaretAtEnd`.\n *\n * @example\n * const editor = event.currentTarget;\n * if (!placeCaretAtClientPoint(editor, event.clientX, event.clientY)) placeCaretAtEnd(editor);\n */\nexport const placeCaretAtClientPoint = (element: HTMLElement, clientX: number, clientY: number): boolean => {\n\tconst selection = window.getSelection();\n\tif (!selection) return false;\n\n\tconst range = caretRangeAtPoint(clientX, clientY);\n\t// Точка могла прийтись на отступ ячейки или на соседний узел: чужую позицию не ставим.\n\tif (!range || !element.contains(range.startContainer)) return false;\n\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n\treturn true;\n};\n\n/**\n * Оба способа спросить у браузера позицию каретки по координатам — объявлены здесь сами.\n *\n * `caretPositionFromPoint` — стандартный, но в `lib.dom` TS 5.6 его ещё нет.\n * `caretRangeFromPoint` — легаси WebKit, в `lib.dom` он помечен `@deprecated`; берётся\n * только фолбэком для Safari до 17.4, где стандартного метода ещё не было. Объявление\n * собрано в одном месте намеренно: обращение идёт к нему, а не к устаревшему члену `Document`,\n * и причина использования легаси видна рядом, а не прячется за подавленной подсказкой.\n */\ntype DocumentWithCaretApi = Document & {\n\tcaretPositionFromPoint?: (x: number, y: number) => { offsetNode: Node; offset: number } | null;\n\tcaretRangeFromPoint?: (x: number, y: number) => Range | null;\n};\n\nconst caretRangeAtPoint = (clientX: number, clientY: number): Range | null => {\n\tconst doc = document as DocumentWithCaretApi;\n\n\tif (doc.caretPositionFromPoint) {\n\t\tconst position = doc.caretPositionFromPoint(clientX, clientY);\n\t\tif (!position) return null;\n\t\tconst range = document.createRange();\n\t\trange.setStart(position.offsetNode, position.offset);\n\t\trange.collapse(true);\n\t\treturn range;\n\t}\n\n\treturn doc.caretRangeFromPoint?.(clientX, clientY) ?? null;\n};\n\n/**\n * Ставит каретку в конец содержимого `contenteditable` — поведение F2 в Excel.\n *\n * @example\n * // F2 открывает правку с кареткой в конце\n * if (event.key === \"F2\") placeCaretAtEnd(editorRef.current);\n */\nexport const placeCaretAtEnd = (element: HTMLElement): void => {\n\tconst selection = window.getSelection();\n\tif (!selection) return;\n\n\tconst range = document.createRange();\n\trange.selectNodeContents(element);\n\trange.collapse(false);\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n};\n\n/**\n * Вставляет текст в текущую позицию каретки внутри `contenteditable`, заменяя выделенное.\n *\n * Нужно на вставке из буфера: по умолчанию `contenteditable` принимает разметку, и в ячейку\n * приезжает чужое форматирование вместе с текстом.\n *\n * @example\n * onPaste={(event) => {\n * event.preventDefault();\n * insertTextAtCaret(event.currentTarget, event.clipboardData.getData(\"text/plain\"));\n * }}\n */\nexport const insertTextAtCaret = (element: HTMLElement, text: string): void => {\n\tconst selection = window.getSelection();\n\tif (!selection?.rangeCount) return;\n\n\tconst range = selection.getRangeAt(0);\n\tif (!element.contains(range.startContainer)) return;\n\n\trange.deleteContents();\n\tconst node = document.createTextNode(text);\n\trange.insertNode(node);\n\trange.setStartAfter(node);\n\trange.collapse(true);\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n};\n","import { useCallback, useRef, useState } from \"react\";\r\nimport { isElementOverflowing } from \"../../lib/utils/dom\";\r\n\r\nexport const useOverflowTooltip = <T extends HTMLElement>() => {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst ref = useRef<T>(null);\r\n\r\n\tconst onOpenChange = useCallback((newOpen: boolean) => {\r\n\t\tif (newOpen === false) {\r\n\t\t\tsetOpen(false);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!ref.current) return;\r\n\t\tif (isElementOverflowing(ref.current)) {\r\n\t\t\tsetOpen(true);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn { open, onOpenChange, ref };\r\n};\r\n","import { cn } from \"@/lib/utils\";\r\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"../tooltip\";\r\nimport { useOverflowTooltip } from \"./useOverflowTooltip\";\r\nimport React from \"react\";\r\n\r\ntype OverflowTooltipProps = {\r\n\tchildren: React.ReactNode;\r\n\t/**\r\n\t * HTML-элемент для обертки содержимого.\r\n\t * Используется для соблюдения правильной HTML-семантики.\r\n\t * Например:\r\n\t * - span (по умолчанию) для текста и инлайн-элементов\r\n\t * - div для блочного содержимого и сложных структур\r\n\t * @default span\r\n\t */\r\n\ttriggerTag?: React.ElementType;\r\n\t/**\r\n\t * Классы для обработки переполненного содержимого.\r\n\t * Например: \"truncate\", \"line-clamp-3\" и т.д.\r\n\t */\r\n\tclassName?: string;\r\n\t/**\r\n\t * Классы для содержимого тултипа.\r\n\t * С помощью них можно управлять стилями тултипа, например шириной, переносом текста и т.д.\r\n\t */\r\n\ttooltipClassName?: string;\r\n\tfocus?: \"high\";\r\n};\r\n\r\nexport const OverflowTooltip = ({ children, className, focus, triggerTag, tooltipClassName }: OverflowTooltipProps) => {\r\n\tconst { open, onOpenChange, ref } = useOverflowTooltip<HTMLDivElement>();\r\n\tconst TriggerTag = triggerTag || \"span\";\r\n\treturn (\r\n\t\t<TooltipProvider>\r\n\t\t\t<Tooltip open={open} onOpenChange={onOpenChange}>\r\n\t\t\t\t<TooltipTrigger asChild>\r\n\t\t\t\t\t<TriggerTag ref={ref} className={cn(className)}>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</TriggerTag>\r\n\t\t\t\t</TooltipTrigger>\r\n\t\t\t\t<TooltipContent focus={focus} className={cn(\"max-w-xs\", tooltipClassName)}>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</TooltipContent>\r\n\t\t\t</Tooltip>\r\n\t\t</TooltipProvider>\r\n\t);\r\n};\r\n\r\nOverflowTooltip.displayName = \"OverflowTooltip\";\r\n","import { cn } from \"@/lib/utils\";\r\nimport React from \"react\";\r\nimport { OverflowTooltip } from \"./OverflowTooltip\";\r\n\r\ntype TextOverflowTooltipProps = {\r\n\tchildren?: React.ReactNode;\r\n\tclassName?: string;\r\n\ttooltipClassName?: string;\r\n};\r\n\r\nexport const TextOverflowTooltip = ({ children, className, tooltipClassName }: TextOverflowTooltipProps) => {\r\n\treturn (\r\n\t\t<OverflowTooltip\r\n\t\t\tclassName={cn(\"inline-block max-w-full truncate\", className)}\r\n\t\t\ttooltipClassName={tooltipClassName}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</OverflowTooltip>\r\n\t);\r\n};\r\n\r\nTextOverflowTooltip.displayName = \"TextOverflowTooltip\";\r\n"],"names":["isElementOverflowing","element","useOverflowTooltip","open","setOpen","useState","ref","useRef","onOpenChange","useCallback","newOpen","OverflowTooltip","children","className","focus","triggerTag","tooltipClassName","jsx","TooltipProvider","jsxs","Tooltip","TooltipTrigger","cn","TooltipContent","TextOverflowTooltip"],"mappings":";;;;AASa,MAAAA,IAAuB,CAACC,MAC7BA,EAAQ,cAAcA,EAAQ,eAAeA,EAAQ,eAAeA,EAAQ,cCPvEC,IAAqB,MAA6B;AAC9D,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChCC,IAAMC,EAAU,IAAI,GAEpBC,IAAeC,EAAY,CAACC,MAAqB;AACtD,QAAIA,MAAY,IAAO;AACtB,MAAAN,EAAQ,EAAK;AACb;AAAA,IAAA;AAEG,IAACE,EAAI,WACLN,EAAqBM,EAAI,OAAO,KACnCF,EAAQ,EAAI;AAAA,EAEd,GAAG,EAAE;AAEE,SAAA,EAAE,MAAAD,GAAM,cAAAK,GAAc,KAAAF,EAAI;AAClC,GCUaK,IAAkB,CAAC,EAAE,UAAAC,GAAU,WAAAC,GAAW,OAAAC,GAAO,YAAAC,GAAY,kBAAAC,QAA6C;AACtH,QAAM,EAAE,MAAAb,GAAM,cAAAK,GAAc,KAAAF,EAAA,IAAQJ,EAAmC;AAEvE,SACE,gBAAAe,EAAAC,GAAA,EACA,UAAC,gBAAAC,EAAAC,GAAA,EAAQ,MAAAjB,GAAY,cAAAK,GACpB,UAAA;AAAA,IAAC,gBAAAS,EAAAI,GAAA,EAAe,SAAO,IACtB,UAAC,gBAAAJ,EALcF,KAAc,QAK5B,EAAW,KAAAT,GAAU,WAAWgB,EAAGT,CAAS,GAC3C,UAAAD,EACF,CAAA,GACD;AAAA,IACA,gBAAAK,EAACM,KAAe,OAAAT,GAAc,WAAWQ,EAAG,YAAYN,CAAgB,GACtE,UAAAJ,EACF,CAAA;AAAA,EAAA,EAAA,CACD,EACD,CAAA;AAEF;AAEAD,EAAgB,cAAc;ACtCvB,MAAMa,IAAsB,CAAC,EAAE,UAAAZ,GAAU,WAAAC,GAAW,kBAAAG,QAEzD,gBAAAC;AAAA,EAACN;AAAA,EAAA;AAAA,IACA,WAAWW,EAAG,oCAAoCT,CAAS;AAAA,IAC3D,kBAAAG;AAAA,IAEC,UAAAJ;AAAA,EAAA;AACF;AAIFY,EAAoB,cAAc;"}
@@ -12,14 +12,13 @@ import { R as me } from "./index-Uiy0Xwy2.js";
12
12
  import { T as w } from "./index-BVqs-uqP.js";
13
13
  import { I as ve } from "./Icon-DH3ev9GK.js";
14
14
  import { S as Te } from "./Shortcut-D8L15_ed.js";
15
- import { u as ge } from "./usePortalContainer-B1xla842.js";
16
- import { T as xe } from "./Text-DeBE8AKl.js";
17
- var [L, ye] = ae("Tooltip", [
15
+ import { T as ge } from "./Text-DeBE8AKl.js";
16
+ var [L, xe] = ae("Tooltip", [
18
17
  X
19
- ]), A = X(), W = "TooltipProvider", Ce = 700, O = "tooltip.open", [be, D] = L(W), I = (t) => {
18
+ ]), A = X(), W = "TooltipProvider", ye = 700, O = "tooltip.open", [Ce, D] = L(W), I = (t) => {
20
19
  const {
21
20
  __scopeTooltip: o,
22
- delayDuration: e = Ce,
21
+ delayDuration: e = ye,
23
22
  skipDelayDuration: r = 300,
24
23
  disableHoverableContent: n = !1,
25
24
  children: i
@@ -28,7 +27,7 @@ var [L, ye] = ae("Tooltip", [
28
27
  const d = l.current;
29
28
  return () => window.clearTimeout(d);
30
29
  }, []), /* @__PURE__ */ c(
31
- be,
30
+ Ce,
32
31
  {
33
32
  scope: o,
34
33
  isOpenDelayedRef: a,
@@ -52,7 +51,7 @@ var [L, ye] = ae("Tooltip", [
52
51
  );
53
52
  };
54
53
  I.displayName = W;
55
- var _ = "Tooltip", [we, k] = L(_), M = (t) => {
54
+ var _ = "Tooltip", [be, k] = L(_), M = (t) => {
56
55
  const {
57
56
  __scopeTooltip: o,
58
57
  children: e,
@@ -80,7 +79,7 @@ var _ = "Tooltip", [we, k] = L(_), M = (t) => {
80
79
  return s.useEffect(() => () => {
81
80
  p.current && (window.clearTimeout(p.current), p.current = 0);
82
81
  }, []), /* @__PURE__ */ c(ue, { ...d, children: /* @__PURE__ */ c(
83
- we,
82
+ be,
84
83
  {
85
84
  scope: o,
86
85
  contentId: m,
@@ -131,24 +130,24 @@ var S = "TooltipTrigger", H = s.forwardRef(
131
130
  }
132
131
  );
133
132
  H.displayName = S;
134
- var j = "TooltipPortal", [Pe, Re] = L(j, {
133
+ var j = "TooltipPortal", [we, Pe] = L(j, {
135
134
  forceMount: void 0
136
135
  }), G = (t) => {
137
136
  const { __scopeTooltip: o, forceMount: e, children: r, container: n } = t, i = k(j, o);
138
- return /* @__PURE__ */ c(Pe, { scope: o, forceMount: e, children: /* @__PURE__ */ c(K, { present: e || i.open, children: /* @__PURE__ */ c(ie, { asChild: !0, container: n, children: r }) }) });
137
+ return /* @__PURE__ */ c(we, { scope: o, forceMount: e, children: /* @__PURE__ */ c(K, { present: e || i.open, children: /* @__PURE__ */ c(ie, { asChild: !0, container: n, children: r }) }) });
139
138
  };
140
139
  G.displayName = j;
141
140
  var b = "TooltipContent", $ = s.forwardRef(
142
141
  (t, o) => {
143
- const e = Re(b, t.__scopeTooltip), { forceMount: r = e.forceMount, side: n = "top", ...i } = t, a = k(b, t.__scopeTooltip);
144
- return /* @__PURE__ */ c(K, { present: r || a.open, children: a.disableHoverableContent ? /* @__PURE__ */ c(Z, { side: n, ...i, ref: o }) : /* @__PURE__ */ c(Ee, { side: n, ...i, ref: o }) });
142
+ const e = Pe(b, t.__scopeTooltip), { forceMount: r = e.forceMount, side: n = "top", ...i } = t, a = k(b, t.__scopeTooltip);
143
+ return /* @__PURE__ */ c(K, { present: r || a.open, children: a.disableHoverableContent ? /* @__PURE__ */ c(Z, { side: n, ...i, ref: o }) : /* @__PURE__ */ c(Re, { side: n, ...i, ref: o }) });
145
144
  }
146
- ), Ee = s.forwardRef((t, o) => {
145
+ ), Re = s.forwardRef((t, o) => {
147
146
  const e = k(b, t.__scopeTooltip), r = D(b, t.__scopeTooltip), n = s.useRef(null), i = q(o, n), [a, h] = s.useState(null), { trigger: l, onClose: d } = e, u = n.current, { onPointerInTransitChange: f } = r, m = s.useCallback(() => {
148
147
  h(null), f(!1);
149
148
  }, [f]), p = s.useCallback(
150
149
  (v, g) => {
151
- const T = v.currentTarget, y = { x: v.clientX, y: v.clientY }, x = Le(y, T.getBoundingClientRect()), P = Ae(y, x), R = Oe(g.getBoundingClientRect()), E = De([...P, ...R]);
150
+ const T = v.currentTarget, y = { x: v.clientX, y: v.clientY }, x = Ne(y, T.getBoundingClientRect()), P = Le(y, x), R = Ae(g.getBoundingClientRect()), E = Se([...P, ...R]);
152
151
  h(E), f(!0);
153
152
  },
154
153
  [f]
@@ -163,13 +162,13 @@ var b = "TooltipContent", $ = s.forwardRef(
163
162
  }, [l, u, p, m]), s.useEffect(() => {
164
163
  if (a) {
165
164
  const v = (g) => {
166
- const T = g.target, y = { x: g.clientX, y: g.clientY }, x = l?.contains(T) || u?.contains(T), P = !Se(y, a);
165
+ const T = g.target, y = { x: g.clientX, y: g.clientY }, x = l?.contains(T) || u?.contains(T), P = !Oe(y, a);
167
166
  x ? m() : P && (m(), d());
168
167
  };
169
168
  return document.addEventListener("pointermove", v), () => document.removeEventListener("pointermove", v);
170
169
  }
171
170
  }, [l, u, a, d, m]), /* @__PURE__ */ c(Z, { ...t, ref: i });
172
- }), [_e, ke] = L(_, { isInside: !1 }), Ne = se("TooltipContent"), Z = s.forwardRef(
171
+ }), [Ee, _e] = L(_, { isInside: !1 }), ke = se("TooltipContent"), Z = s.forwardRef(
173
172
  (t, o) => {
174
173
  const {
175
174
  __scopeTooltip: e,
@@ -211,8 +210,8 @@ var b = "TooltipContent", $ = s.forwardRef(
211
210
  "--radix-tooltip-trigger-height": "var(--radix-popper-anchor-height)"
212
211
  },
213
212
  children: [
214
- /* @__PURE__ */ c(Ne, { children: r }),
215
- /* @__PURE__ */ c(_e, { scope: e, isInside: !0, children: /* @__PURE__ */ c(me, { id: l.contentId, role: "tooltip", children: n || r }) })
213
+ /* @__PURE__ */ c(ke, { children: r }),
214
+ /* @__PURE__ */ c(Ee, { scope: e, isInside: !0, children: /* @__PURE__ */ c(me, { id: l.contentId, role: "tooltip", children: n || r }) })
216
215
  ]
217
216
  }
218
217
  )
@@ -224,14 +223,14 @@ $.displayName = b;
224
223
  var J = "TooltipArrow", z = s.forwardRef(
225
224
  (t, o) => {
226
225
  const { __scopeTooltip: e, ...r } = t, n = A(e);
227
- return ke(
226
+ return _e(
228
227
  J,
229
228
  e
230
229
  ).isInside ? null : /* @__PURE__ */ c(de, { ...n, ...r, ref: o });
231
230
  }
232
231
  );
233
232
  z.displayName = J;
234
- function Le(t, o) {
233
+ function Ne(t, o) {
235
234
  const e = Math.abs(o.top - t.y), r = Math.abs(o.bottom - t.y), n = Math.abs(o.right - t.x), i = Math.abs(o.left - t.x);
236
235
  switch (Math.min(e, r, n, i)) {
237
236
  case i:
@@ -246,7 +245,7 @@ function Le(t, o) {
246
245
  throw new Error("unreachable");
247
246
  }
248
247
  }
249
- function Ae(t, o, e = 5) {
248
+ function Le(t, o, e = 5) {
250
249
  const r = [];
251
250
  switch (o) {
252
251
  case "top":
@@ -276,7 +275,7 @@ function Ae(t, o, e = 5) {
276
275
  }
277
276
  return r;
278
277
  }
279
- function Oe(t) {
278
+ function Ae(t) {
280
279
  const { top: o, right: e, bottom: r, left: n } = t;
281
280
  return [
282
281
  { x: n, y: o },
@@ -285,7 +284,7 @@ function Oe(t) {
285
284
  { x: n, y: r }
286
285
  ];
287
286
  }
288
- function Se(t, o) {
287
+ function Oe(t, o) {
289
288
  const { x: e, y: r } = t;
290
289
  let n = !1;
291
290
  for (let i = 0, a = o.length - 1; i < o.length; a = i++) {
@@ -294,11 +293,11 @@ function Se(t, o) {
294
293
  }
295
294
  return n;
296
295
  }
297
- function De(t) {
296
+ function Se(t) {
298
297
  const o = t.slice();
299
- return o.sort((e, r) => e.x < r.x ? -1 : e.x > r.x ? 1 : e.y < r.y ? -1 : e.y > r.y ? 1 : 0), Ie(o);
298
+ return o.sort((e, r) => e.x < r.x ? -1 : e.x > r.x ? 1 : e.y < r.y ? -1 : e.y > r.y ? 1 : 0), De(o);
300
299
  }
301
- function Ie(t) {
300
+ function De(t) {
302
301
  if (t.length <= 1) return t.slice();
303
302
  const o = [];
304
303
  for (let r = 0; r < t.length; r++) {
@@ -324,7 +323,7 @@ function Ie(t) {
324
323
  return e.pop(), o.length === 1 && e.length === 1 && o[0].x === e[0].x && o[0].y === e[0].y ? o : o.concat(e);
325
324
  }
326
325
  var Q = I, ee = M, te = H, oe = G, F = $, B = z;
327
- const ct = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
326
+ const it = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
328
327
  __proto__: null,
329
328
  Arrow: B,
330
329
  Content: F,
@@ -338,8 +337,8 @@ const ct = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
338
337
  TooltipProvider: I,
339
338
  TooltipTrigger: H,
340
339
  Trigger: te,
341
- createTooltipScope: ye
342
- }, Symbol.toStringTag, { value: "Module" })), re = s.createContext({}), N = () => s.useContext(re), ut = Q, pt = ee, dt = te, Me = w({
340
+ createTooltipScope: xe
341
+ }, Symbol.toStringTag, { value: "Module" })), re = s.createContext({}), N = () => s.useContext(re), lt = Q, ct = ee, ut = te, Ie = w({
343
342
  slots: {
344
343
  fill: "fill-status-neutral-fg",
345
344
  stroke: "stroke-primary-border stroke-[0.5px]",
@@ -353,9 +352,9 @@ const ct = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
353
352
  }
354
353
  }
355
354
  }
356
- }), He = s.forwardRef(
355
+ }), Me = s.forwardRef(
357
356
  ({ width: t, height: o, className: e, ...r }, n) => {
358
- const { focus: i } = N(), a = Me({ focus: i });
357
+ const { focus: i } = N(), a = Ie({ focus: i });
359
358
  return /* @__PURE__ */ c(B, { ref: n, asChild: !0, ...r, children: /* @__PURE__ */ Y(
360
359
  "svg",
361
360
  {
@@ -380,8 +379,8 @@ const ct = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
380
379
  ) });
381
380
  }
382
381
  );
383
- He.displayName = B.displayName;
384
- const je = w({
382
+ Me.displayName = B.displayName;
383
+ const He = w({
385
384
  base: [
386
385
  "z-50 rounded-lg border-[0.5px] px-2 py-1.5 text-xs backdrop-blur animate-in fade-in-0 zoom-in-95",
387
386
  "border-primary-border bg-alpha-30 text-primary-fg shadow-soft-sm",
@@ -393,81 +392,81 @@ const je = w({
393
392
  high: "border-0 bg-alpha-high-20 text-inverse-primary-fg shadow-soft-base"
394
393
  }
395
394
  }
396
- }), Ge = s.forwardRef(
395
+ }), je = s.forwardRef(
397
396
  ({ className: t, sideOffset: o = 8, portalContainer: e, focus: r, ...n }, i) => {
398
- const a = ge(e);
397
+ const a = e;
399
398
  return /* @__PURE__ */ c(re.Provider, { value: { focus: r }, children: /* @__PURE__ */ c(oe, { container: a, children: /* @__PURE__ */ c(
400
399
  F,
401
400
  {
402
401
  ref: i,
403
402
  sideOffset: o,
404
- className: je({ className: t, focus: r }),
403
+ className: He({ className: t, focus: r }),
405
404
  ...n
406
405
  }
407
406
  ) }) });
408
407
  }
409
408
  );
410
- Ge.displayName = F.displayName;
411
- const $e = w({
409
+ je.displayName = F.displayName;
410
+ const Ge = w({
412
411
  base: "text-sm font-medium text-primary-fg",
413
412
  variants: {
414
413
  focus: {
415
414
  high: "text-inverse-primary-fg"
416
415
  }
417
416
  }
418
- }), ze = s.forwardRef(({ className: t, children: o, ...e }, r) => {
417
+ }), $e = s.forwardRef(({ className: t, children: o, ...e }, r) => {
419
418
  const { focus: n } = N();
420
- return /* @__PURE__ */ c("div", { ref: r, className: $e({ className: t, focus: n }), ...e, children: o });
419
+ return /* @__PURE__ */ c("div", { ref: r, className: Ge({ className: t, focus: n }), ...e, children: o });
421
420
  });
422
- ze.displayName = "TooltipTitle";
423
- const Fe = w({
421
+ $e.displayName = "TooltipTitle";
422
+ const ze = w({
424
423
  base: "",
425
424
  variants: {
426
425
  focus: {
427
426
  high: "text-inverse-secondary-fg"
428
427
  }
429
428
  }
430
- }), Be = s.forwardRef(({ className: t, children: o, ...e }, r) => {
429
+ }), Fe = s.forwardRef(({ className: t, children: o, ...e }, r) => {
431
430
  const { focus: n } = N();
432
- return /* @__PURE__ */ c(xe, { ref: r, size: "xs", className: Fe({ className: t, focus: n }), ...e, children: o });
431
+ return /* @__PURE__ */ c(ge, { ref: r, size: "xs", className: ze({ className: t, focus: n }), ...e, children: o });
433
432
  });
434
- Be.displayName = "TooltipText";
435
- const Ue = w({
433
+ Fe.displayName = "TooltipText";
434
+ const Be = w({
436
435
  base: "shrink-0 text-xs text-primary-fg",
437
436
  variants: {
438
437
  focus: {
439
438
  high: "text-inverse-primary-fg"
440
439
  }
441
440
  }
442
- }), Ve = s.forwardRef(({ className: t, ...o }, e) => {
441
+ }), Ue = s.forwardRef(({ className: t, ...o }, e) => {
443
442
  const { focus: r } = N();
444
- return /* @__PURE__ */ c(ve, { size: "lg", className: Ue({ className: t, focus: r }), ref: e, ...o });
443
+ return /* @__PURE__ */ c(ve, { size: "lg", className: Be({ className: t, focus: r }), ref: e, ...o });
445
444
  });
446
- Ve.displayName = "TooltipIcon";
447
- const Ye = w({
445
+ Ue.displayName = "TooltipIcon";
446
+ const Ve = w({
448
447
  base: "h-auto p-0 text-xs text-muted",
449
448
  variants: {
450
449
  focus: {
451
450
  high: "text-inverse-secondary-fg opacity-70"
452
451
  }
453
452
  }
454
- }), qe = s.forwardRef(({ className: t, ...o }, e) => {
453
+ }), Ye = s.forwardRef(({ className: t, ...o }, e) => {
455
454
  const { focus: r } = N();
456
- return /* @__PURE__ */ c(Te, { variant: "ghost", className: Ye({ className: t, focus: r }), ref: e, ...o });
455
+ return /* @__PURE__ */ c(Te, { variant: "ghost", className: Ve({ className: t, focus: r }), ref: e, ...o });
457
456
  });
458
- qe.displayName = "TooltipShortcut";
457
+ Ye.displayName = "TooltipShortcut";
459
458
  export {
460
- pt as T,
461
- ut as a,
462
- dt as b,
463
- Ge as c,
464
- He as d,
465
- ze as e,
466
- Be as f,
467
- Ve as g,
468
- qe as h,
459
+ ct as T,
460
+ lt as a,
461
+ ut as b,
462
+ je as c,
463
+ Me as d,
464
+ $e as e,
465
+ Fe as f,
466
+ Ue as g,
467
+ Ye as h,
469
468
  re as i,
470
- ct as j,
469
+ it as j,
471
470
  N as u
472
471
  };
473
- //# sourceMappingURL=Tooltip-DOgKy50D.js.map
472
+ //# sourceMappingURL=Tooltip-D2XvRS0c.js.map