@cloud-ru/ds-tooltip 1.0.0

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 (75) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/README.md +170 -0
  4. package/dist/cjs/components/QuestionTooltip/QuestionTooltip.d.ts +6 -0
  5. package/dist/cjs/components/QuestionTooltip/QuestionTooltip.js +26 -0
  6. package/dist/cjs/components/QuestionTooltip/index.d.ts +2 -0
  7. package/dist/cjs/components/QuestionTooltip/index.js +18 -0
  8. package/dist/cjs/components/QuestionTooltip/styles.module.css +39 -0
  9. package/dist/cjs/components/QuestionTooltip/types.d.ts +19 -0
  10. package/dist/cjs/components/QuestionTooltip/types.js +2 -0
  11. package/dist/cjs/components/Tooltip/Tooltip.d.ts +16 -0
  12. package/dist/cjs/components/Tooltip/Tooltip.js +20 -0
  13. package/dist/cjs/components/Tooltip/index.d.ts +1 -0
  14. package/dist/cjs/components/Tooltip/index.js +17 -0
  15. package/dist/cjs/components/Tooltip/styles.module.css +38 -0
  16. package/dist/cjs/components/WithTooltip/WithTooltip.d.ts +9 -0
  17. package/dist/cjs/components/WithTooltip/WithTooltip.js +11 -0
  18. package/dist/cjs/components/WithTooltip/index.d.ts +1 -0
  19. package/dist/cjs/components/WithTooltip/index.js +17 -0
  20. package/dist/cjs/components/index.d.ts +3 -0
  21. package/dist/cjs/components/index.js +19 -0
  22. package/dist/cjs/constants.d.ts +10 -0
  23. package/dist/cjs/constants.js +13 -0
  24. package/dist/cjs/index.d.ts +5 -0
  25. package/dist/cjs/index.js +23 -0
  26. package/dist/cjs/package.json +3 -0
  27. package/dist/cjs/style.css +77 -0
  28. package/dist/cjs/types.d.ts +5 -0
  29. package/dist/cjs/types.js +2 -0
  30. package/dist/cjs/utils.d.ts +2 -0
  31. package/dist/cjs/utils.js +15 -0
  32. package/dist/esm/components/QuestionTooltip/QuestionTooltip.d.ts +6 -0
  33. package/dist/esm/components/QuestionTooltip/QuestionTooltip.js +20 -0
  34. package/dist/esm/components/QuestionTooltip/index.d.ts +2 -0
  35. package/dist/esm/components/QuestionTooltip/index.js +2 -0
  36. package/dist/esm/components/QuestionTooltip/styles.module.css +39 -0
  37. package/dist/esm/components/QuestionTooltip/types.d.ts +19 -0
  38. package/dist/esm/components/QuestionTooltip/types.js +1 -0
  39. package/dist/esm/components/Tooltip/Tooltip.d.ts +16 -0
  40. package/dist/esm/components/Tooltip/Tooltip.js +13 -0
  41. package/dist/esm/components/Tooltip/index.d.ts +1 -0
  42. package/dist/esm/components/Tooltip/index.js +1 -0
  43. package/dist/esm/components/Tooltip/styles.module.css +38 -0
  44. package/dist/esm/components/WithTooltip/WithTooltip.d.ts +9 -0
  45. package/dist/esm/components/WithTooltip/WithTooltip.js +8 -0
  46. package/dist/esm/components/WithTooltip/index.d.ts +1 -0
  47. package/dist/esm/components/WithTooltip/index.js +1 -0
  48. package/dist/esm/components/index.d.ts +3 -0
  49. package/dist/esm/components/index.js +3 -0
  50. package/dist/esm/constants.d.ts +10 -0
  51. package/dist/esm/constants.js +10 -0
  52. package/dist/esm/index.d.ts +5 -0
  53. package/dist/esm/index.js +3 -0
  54. package/dist/esm/style.css +77 -0
  55. package/dist/esm/types.d.ts +5 -0
  56. package/dist/esm/types.js +1 -0
  57. package/dist/esm/utils.d.ts +2 -0
  58. package/dist/esm/utils.js +12 -0
  59. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  60. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  61. package/package.json +44 -0
  62. package/src/components/QuestionTooltip/QuestionTooltip.tsx +59 -0
  63. package/src/components/QuestionTooltip/index.ts +2 -0
  64. package/src/components/QuestionTooltip/styles.module.scss +51 -0
  65. package/src/components/QuestionTooltip/types.ts +20 -0
  66. package/src/components/Tooltip/Tooltip.tsx +69 -0
  67. package/src/components/Tooltip/index.ts +1 -0
  68. package/src/components/Tooltip/styles.module.scss +41 -0
  69. package/src/components/WithTooltip/WithTooltip.tsx +16 -0
  70. package/src/components/WithTooltip/index.ts +1 -0
  71. package/src/components/index.ts +3 -0
  72. package/src/constants.ts +11 -0
  73. package/src/index.ts +5 -0
  74. package/src/types.ts +7 -0
  75. package/src/utils.ts +14 -0
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./WithTooltip"), exports);
@@ -0,0 +1,3 @@
1
+ export * from './QuestionTooltip';
2
+ export * from './Tooltip';
3
+ export * from './WithTooltip';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./QuestionTooltip"), exports);
18
+ __exportStar(require("./Tooltip"), exports);
19
+ __exportStar(require("./WithTooltip"), exports);
@@ -0,0 +1,10 @@
1
+ export declare const SIZE: {
2
+ readonly XS: "xs";
3
+ readonly S: "s";
4
+ };
5
+ /** Стабильные `data-test-id` на внутренних слотах, которые компонент ставит сам. */
6
+ export declare const TEST_IDS: {
7
+ readonly questionTooltip: {
8
+ readonly triggerOpen: "question-tooltip-trigger";
9
+ };
10
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TEST_IDS = exports.SIZE = void 0;
4
+ exports.SIZE = {
5
+ XS: 'xs',
6
+ S: 's',
7
+ };
8
+ /** Стабильные `data-test-id` на внутренних слотах, которые компонент ставит сам. */
9
+ exports.TEST_IDS = {
10
+ questionTooltip: {
11
+ triggerOpen: 'question-tooltip-trigger',
12
+ },
13
+ };
@@ -0,0 +1,5 @@
1
+ export { TRIGGER, PLACEMENT } from '@cloud-ru/ds-popover-private';
2
+ export * from './components';
3
+ export type { Placement } from './types';
4
+ export { SIZE } from './constants';
5
+ export type { Size } from './types';
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.SIZE = exports.PLACEMENT = exports.TRIGGER = void 0;
18
+ var popover_private_1 = require("@cloud-ru/ds-popover-private");
19
+ Object.defineProperty(exports, "TRIGGER", { enumerable: true, get: function () { return popover_private_1.TRIGGER; } });
20
+ Object.defineProperty(exports, "PLACEMENT", { enumerable: true, get: function () { return popover_private_1.PLACEMENT; } });
21
+ __exportStar(require("./components"), exports);
22
+ var constants_1 = require("./constants");
23
+ Object.defineProperty(exports, "SIZE", { enumerable: true, get: function () { return constants_1.SIZE; } });
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,77 @@
1
+ .questionTooltipTrigger{
2
+ position:relative;
3
+ display:inline-flex;
4
+ align-items:center;
5
+ justify-content:center;
6
+ }
7
+
8
+ .button{
9
+ cursor:pointer;
10
+ position:relative;
11
+ display:inline-flex;
12
+ align-items:center;
13
+ justify-content:center;
14
+ margin:0;
15
+ padding:0;
16
+ border:none;
17
+ font:inherit;
18
+ color:var(--sn-theme-color-available-version-textTertiary, var(--sn-brand-color-text-version-tertiary, rgba(65, 66, 78, 0.5490196078)));
19
+ background:transparent;
20
+ }
21
+ .button:focus-visible{
22
+ outline:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px) solid var(--sn-theme-color-available-complementary, #000000);
23
+ }
24
+ .button:active{
25
+ color:var(--sn-theme-color-available-version-textMain, var(--sn-brand-color-text-version-main, #41424e));
26
+ }
27
+ @media (hover: hover){
28
+ .button:hover:not(:active){
29
+ color:var(--sn-theme-color-available-version-textSecondary, var(--sn-brand-color-text-version-secondary, rgba(65, 66, 78, 0.8)));
30
+ }
31
+ }
32
+ .button[data-size=xs]{
33
+ width:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
34
+ height:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
35
+ }
36
+ .button[data-size=s]{
37
+ width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
38
+ height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
39
+ }
40
+ .triggerClassName{
41
+ --offset:var(--sn-popover-anatomy-privatePopover-offset, var(--sn-primitive-dimension-4, 4px));
42
+ }
43
+
44
+ .tooltipContainer{
45
+ border-radius:var(--sn-tooltip-anatomy-container-borderRadius, var(--sn-brand-anatomy-radius-tooltip-xs, var(--sn-primitive-dimension-4, 4px)));
46
+ padding:var(--sn-tooltip-anatomy-container-padding, var(--sn-brand-anatomy-spacing-tooltip-padding, var(--sn-primitive-dimension-8, 8px)));
47
+ max-width:256px;
48
+ min-width:var(--sn-tooltip-anatomy-container-minWidth, var(--sn-primitive-dimension-32, 32px));
49
+ min-height:var(--sn-tooltip-anatomy-container-minHeight, var(--sn-primitive-dimension-32, 32px));
50
+ font-family:var(--sn-regular-body-s-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
51
+ font-weight:var(--sn-regular-body-s-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-s, var(--sn-brand-font-fontWeight-light-regular-body-s, var(--sn-primitive-font-fontWeightValue-400, 400))));
52
+ line-height:var(--sn-regular-body-s-lineHeight, var(--sn-density-typography-roleBody-lineHeightS, var(--sn-primitive-font-lineHeight-by14, 20px)));
53
+ font-size:var(--sn-regular-body-s-fontSize, var(--sn-density-typography-roleBody-fontSizeS, var(--sn-primitive-font-fontSize-14, 14px)));
54
+ letter-spacing:var(--sn-regular-body-s-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
55
+ paragraph-spacing:var(--sn-regular-body-s-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize12, 6px));
56
+ display:flex;
57
+ flex-direction:column;
58
+ box-sizing:border-box;
59
+ color:var(--sn-theme-color-available-inversion-textMain, var(--sn-brand-color-text-inversion-main, #e6e8ef));
60
+ overflow-wrap:break-word;
61
+ background:var(--sn-theme-color-invertNeutral-background2Level, var(--sn-brand-color-neutral-15, var(--sn-primitive-color-gray-15, #333342)));
62
+ }
63
+ .tooltipContainer[data-disable-max-width=true]{
64
+ max-width:calc(100vw - var(--sn-primitive-dimension-16, 16px));
65
+ }
66
+
67
+ .pointerWrapper{
68
+ position:absolute;
69
+ display:flex;
70
+ align-items:center;
71
+ justify-content:center;
72
+ color:var(--sn-theme-color-invertNeutral-background2Level, var(--sn-brand-color-neutral-15, var(--sn-primitive-color-gray-15, #333342)));
73
+ }
74
+
75
+ .pointerShape{
76
+ fill:currentcolor;
77
+ }
@@ -0,0 +1,5 @@
1
+ import { PLACEMENT } from '@cloud-ru/ds-popover-private';
2
+ import { ValueOf } from '@cloud-ru/ds-utils';
3
+ import { SIZE } from './constants';
4
+ export type Placement = (typeof PLACEMENT)[keyof typeof PLACEMENT];
5
+ export type Size = ValueOf<typeof SIZE>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ import { Size } from './types';
2
+ export declare function getIconSize(size?: Size): 16 | 24;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getIconSize = getIconSize;
4
+ const constants_1 = require("./constants");
5
+ function getIconSize(size) {
6
+ switch (size) {
7
+ case constants_1.SIZE.XS: {
8
+ return 16;
9
+ }
10
+ case constants_1.SIZE.S:
11
+ default: {
12
+ return 24;
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,6 @@
1
+ import { QuestionTooltipProps } from './types.js';
2
+ /**
3
+ * QuestionTooltip — иконка «?» с тултипом-popover для подсказок к полям форм.
4
+ * Поверхность одна на всех раскладках (по договорённости с дизайном mobile не свапается на BottomSheet).
5
+ */
6
+ export declare function QuestionTooltip({ tip, triggerLabel, trigger, className, tooltipClassname, open, onOpenChange, tabIndex, size, triggerRef, ...rest }: QuestionTooltipProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { QuestionSVG } from '@cloud-ru/ds-icons/interface/system';
3
+ import { TRIGGER } from '@cloud-ru/ds-popover-private';
4
+ import { useUncontrolledProp } from '@cloud-ru/ds-utils';
5
+ import cn from 'classnames';
6
+ import { SIZE, TEST_IDS } from '../../constants.js';
7
+ import { getIconSize } from '../../utils.js';
8
+ import { Tooltip } from '../Tooltip/index.js';
9
+ import styles from './styles.module.css';
10
+ /**
11
+ * QuestionTooltip — иконка «?» с тултипом-popover для подсказок к полям форм.
12
+ * Поверхность одна на всех раскладках (по договорённости с дизайном mobile не свапается на BottomSheet).
13
+ */
14
+ export function QuestionTooltip({ tip, triggerLabel = 'Подсказка', trigger = TRIGGER.Hover, className, tooltipClassname, open, onOpenChange, tabIndex = 0, size = SIZE.XS, triggerRef, ...rest }) {
15
+ const [isOpen, setIsOpen] = useUncontrolledProp(open, false, onOpenChange);
16
+ return (_jsx(Tooltip, { tip: tip, className: tooltipClassname, triggerClassName: styles.questionTooltipTrigger, open: isOpen, onOpenChange: setIsOpen, trigger: trigger, ...rest, children: _jsx("button", { type: 'button', "aria-label": triggerLabel, "data-opened": isOpen, "data-trigger": trigger, tabIndex: tabIndex, className: cn(styles.button, className), "data-size": size, "data-test-id": TEST_IDS.questionTooltip.triggerOpen,
17
+ // Ref ведёт на саму кнопку, а не на span-обёртку popover'а: потребителю
18
+ // нужен настоящий триггер (позиционирование, фокус).
19
+ ref: triggerRef, children: _jsx(QuestionSVG, { size: getIconSize(size) }) }) }));
20
+ }
@@ -0,0 +1,2 @@
1
+ export * from './QuestionTooltip.js';
2
+ export * from './types.js';
@@ -0,0 +1,2 @@
1
+ export * from './QuestionTooltip.js';
2
+ export * from './types.js';
@@ -0,0 +1,39 @@
1
+ .questionTooltipTrigger{
2
+ position:relative;
3
+ display:inline-flex;
4
+ align-items:center;
5
+ justify-content:center;
6
+ }
7
+
8
+ .button{
9
+ cursor:pointer;
10
+ position:relative;
11
+ display:inline-flex;
12
+ align-items:center;
13
+ justify-content:center;
14
+ margin:0;
15
+ padding:0;
16
+ border:none;
17
+ font:inherit;
18
+ color:var(--sn-theme-color-available-version-textTertiary, var(--sn-brand-color-text-version-tertiary, rgba(65, 66, 78, 0.5490196078)));
19
+ background:transparent;
20
+ }
21
+ .button:focus-visible{
22
+ outline:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px) solid var(--sn-theme-color-available-complementary, #000000);
23
+ }
24
+ .button:active{
25
+ color:var(--sn-theme-color-available-version-textMain, var(--sn-brand-color-text-version-main, #41424e));
26
+ }
27
+ @media (hover: hover){
28
+ .button:hover:not(:active){
29
+ color:var(--sn-theme-color-available-version-textSecondary, var(--sn-brand-color-text-version-secondary, rgba(65, 66, 78, 0.8)));
30
+ }
31
+ }
32
+ .button[data-size=xs]{
33
+ width:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
34
+ height:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
35
+ }
36
+ .button[data-size=s]{
37
+ width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
38
+ height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
39
+ }
@@ -0,0 +1,19 @@
1
+ import { Size } from '../../types.js';
2
+ import { TooltipProps } from '../Tooltip/index.js';
3
+ /**
4
+ * QuestionTooltip: иконка «?» с тултипом-popover. Поверхность одна на всех раскладках.
5
+ * `tooltipClassname` применяется к контейнеру подсказки.
6
+ */
7
+ export type QuestionTooltipProps = TooltipProps & {
8
+ /** CSS-класс контейнера подсказки */
9
+ tooltipClassname?: string;
10
+ /** Доступное имя для иконки-триггера */
11
+ triggerLabel?: string;
12
+ /** Tab index для кнопки-триггера */
13
+ tabIndex?: number;
14
+ /**
15
+ * Размер
16
+ * @default xs
17
+ */
18
+ size?: Size;
19
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import { PopoverPrivateProps } from '@cloud-ru/ds-popover-private';
2
+ import { WithSupportProps } from '@cloud-ru/ds-utils';
3
+ import { ReactNode } from 'react';
4
+ export type TooltipProps = WithSupportProps<{
5
+ /** Содержимое тултипа (текст или разметка) */
6
+ tip: ReactNode;
7
+ /** Отключение ограничения ширины тултипа @default false */
8
+ disableMaxWidth?: boolean;
9
+ }> & Pick<PopoverPrivateProps, 'className' | 'triggerClassName' | 'offset' | 'open' | 'onOpenChange' | 'hoverDelayOpen' | 'hoverDelayClose' | 'triggerRef' | 'disableSpanWrapper' | 'fallbackPlacements' | 'closeOnPopstate'> & Partial<Pick<PopoverPrivateProps, 'trigger' | 'placement' | 'children'>>;
10
+ export declare const DEFAULT_FALLBACK_PLACEMENTS: ("left" | "right" | "top" | "bottom")[];
11
+ /**
12
+ * Tooltip — всплывающая подсказка при наведении.
13
+ * Стили и анатомия (отступы, скругления, макс. ширина) из @cloud-ru/ds-figma-variables.
14
+ * DOM повторяет структуру из Figma: корневой контейнер и слои (фон, контейнер контента, указатель) с position: absolute.
15
+ */
16
+ export declare function Tooltip({ children, tip, placement, trigger, hoverDelayOpen, hoverDelayClose, triggerClassName, disableMaxWidth, ...otherProps }: TooltipProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { PLACEMENT, PopoverPrivate, TRIGGER } from '@cloud-ru/ds-popover-private';
3
+ import cn from 'classnames';
4
+ import styles from './styles.module.css';
5
+ export const DEFAULT_FALLBACK_PLACEMENTS = [PLACEMENT.Top, PLACEMENT.Right, PLACEMENT.Bottom, PLACEMENT.Left];
6
+ /**
7
+ * Tooltip — всплывающая подсказка при наведении.
8
+ * Стили и анатомия (отступы, скругления, макс. ширина) из @cloud-ru/ds-figma-variables.
9
+ * DOM повторяет структуру из Figma: корневой контейнер и слои (фон, контейнер контента, указатель) с position: absolute.
10
+ */
11
+ export function Tooltip({ children, tip, placement = PLACEMENT.Top, trigger = TRIGGER.HoverAndFocusVisible, hoverDelayOpen = 0, hoverDelayClose = 0, triggerClassName, disableMaxWidth = false, ...otherProps }) {
12
+ return (_jsx(PopoverPrivate, { trigger: trigger, placement: placement, hasArrow: true, arrowContainerClassName: styles.pointerWrapper, arrowElementClassName: styles.pointerShape, hoverDelayOpen: hoverDelayOpen, hoverDelayClose: hoverDelayClose, fallbackPlacements: DEFAULT_FALLBACK_PLACEMENTS, triggerClassName: cn(styles.triggerClassName, triggerClassName), popoverContent: _jsx("div", { className: styles.tooltipContainer, "data-disable-max-width": disableMaxWidth, role: 'tooltip', children: tip }), ...otherProps, children: children }));
13
+ }
@@ -0,0 +1 @@
1
+ export * from './Tooltip.js';
@@ -0,0 +1 @@
1
+ export * from './Tooltip.js';
@@ -0,0 +1,38 @@
1
+ .triggerClassName{
2
+ --offset:var(--sn-popover-anatomy-privatePopover-offset, var(--sn-primitive-dimension-4, 4px));
3
+ }
4
+
5
+ .tooltipContainer{
6
+ border-radius:var(--sn-tooltip-anatomy-container-borderRadius, var(--sn-brand-anatomy-radius-tooltip-xs, var(--sn-primitive-dimension-4, 4px)));
7
+ padding:var(--sn-tooltip-anatomy-container-padding, var(--sn-brand-anatomy-spacing-tooltip-padding, var(--sn-primitive-dimension-8, 8px)));
8
+ max-width:256px;
9
+ min-width:var(--sn-tooltip-anatomy-container-minWidth, var(--sn-primitive-dimension-32, 32px));
10
+ min-height:var(--sn-tooltip-anatomy-container-minHeight, var(--sn-primitive-dimension-32, 32px));
11
+ font-family:var(--sn-regular-body-s-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
12
+ font-weight:var(--sn-regular-body-s-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-s, var(--sn-brand-font-fontWeight-light-regular-body-s, var(--sn-primitive-font-fontWeightValue-400, 400))));
13
+ line-height:var(--sn-regular-body-s-lineHeight, var(--sn-density-typography-roleBody-lineHeightS, var(--sn-primitive-font-lineHeight-by14, 20px)));
14
+ font-size:var(--sn-regular-body-s-fontSize, var(--sn-density-typography-roleBody-fontSizeS, var(--sn-primitive-font-fontSize-14, 14px)));
15
+ letter-spacing:var(--sn-regular-body-s-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
16
+ paragraph-spacing:var(--sn-regular-body-s-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize12, 6px));
17
+ display:flex;
18
+ flex-direction:column;
19
+ box-sizing:border-box;
20
+ color:var(--sn-theme-color-available-inversion-textMain, var(--sn-brand-color-text-inversion-main, #e6e8ef));
21
+ overflow-wrap:break-word;
22
+ background:var(--sn-theme-color-invertNeutral-background2Level, var(--sn-brand-color-neutral-15, var(--sn-primitive-color-gray-15, #333342)));
23
+ }
24
+ .tooltipContainer[data-disable-max-width=true]{
25
+ max-width:calc(100vw - var(--sn-primitive-dimension-16, 16px));
26
+ }
27
+
28
+ .pointerWrapper{
29
+ position:absolute;
30
+ display:flex;
31
+ align-items:center;
32
+ justify-content:center;
33
+ color:var(--sn-theme-color-invertNeutral-background2Level, var(--sn-brand-color-neutral-15, var(--sn-primitive-color-gray-15, #333342)));
34
+ }
35
+
36
+ .pointerShape{
37
+ fill:currentcolor;
38
+ }
@@ -0,0 +1,9 @@
1
+ import { TooltipProps } from '../Tooltip/index.js';
2
+ type WithTooltipProps = {
3
+ /** Настройки для тултипа */
4
+ tooltip?: Omit<TooltipProps, 'children'>;
5
+ /** Триггер поповера (подробнее в TooltipProps) */
6
+ children: TooltipProps['children'];
7
+ };
8
+ export declare function WithTooltip({ tooltip, children }: WithTooltipProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,8 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Tooltip } from '../Tooltip/index.js';
3
+ export function WithTooltip({ tooltip, children }) {
4
+ if (!tooltip?.tip) {
5
+ return _jsx(_Fragment, { children: children });
6
+ }
7
+ return _jsx(Tooltip, { ...tooltip, children: children });
8
+ }
@@ -0,0 +1 @@
1
+ export * from './WithTooltip.js';
@@ -0,0 +1 @@
1
+ export * from './WithTooltip.js';
@@ -0,0 +1,3 @@
1
+ export * from './QuestionTooltip/index.js';
2
+ export * from './Tooltip/index.js';
3
+ export * from './WithTooltip/index.js';
@@ -0,0 +1,3 @@
1
+ export * from './QuestionTooltip/index.js';
2
+ export * from './Tooltip/index.js';
3
+ export * from './WithTooltip/index.js';
@@ -0,0 +1,10 @@
1
+ export declare const SIZE: {
2
+ readonly XS: "xs";
3
+ readonly S: "s";
4
+ };
5
+ /** Стабильные `data-test-id` на внутренних слотах, которые компонент ставит сам. */
6
+ export declare const TEST_IDS: {
7
+ readonly questionTooltip: {
8
+ readonly triggerOpen: "question-tooltip-trigger";
9
+ };
10
+ };
@@ -0,0 +1,10 @@
1
+ export const SIZE = {
2
+ XS: 'xs',
3
+ S: 's',
4
+ };
5
+ /** Стабильные `data-test-id` на внутренних слотах, которые компонент ставит сам. */
6
+ export const TEST_IDS = {
7
+ questionTooltip: {
8
+ triggerOpen: 'question-tooltip-trigger',
9
+ },
10
+ };
@@ -0,0 +1,5 @@
1
+ export { TRIGGER, PLACEMENT } from '@cloud-ru/ds-popover-private';
2
+ export * from './components/index.js';
3
+ export type { Placement } from './types.js';
4
+ export { SIZE } from './constants.js';
5
+ export type { Size } from './types.js';
@@ -0,0 +1,3 @@
1
+ export { TRIGGER, PLACEMENT } from '@cloud-ru/ds-popover-private';
2
+ export * from './components/index.js';
3
+ export { SIZE } from './constants.js';
@@ -0,0 +1,77 @@
1
+ .questionTooltipTrigger{
2
+ position:relative;
3
+ display:inline-flex;
4
+ align-items:center;
5
+ justify-content:center;
6
+ }
7
+
8
+ .button{
9
+ cursor:pointer;
10
+ position:relative;
11
+ display:inline-flex;
12
+ align-items:center;
13
+ justify-content:center;
14
+ margin:0;
15
+ padding:0;
16
+ border:none;
17
+ font:inherit;
18
+ color:var(--sn-theme-color-available-version-textTertiary, var(--sn-brand-color-text-version-tertiary, rgba(65, 66, 78, 0.5490196078)));
19
+ background:transparent;
20
+ }
21
+ .button:focus-visible{
22
+ outline:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px) solid var(--sn-theme-color-available-complementary, #000000);
23
+ }
24
+ .button:active{
25
+ color:var(--sn-theme-color-available-version-textMain, var(--sn-brand-color-text-version-main, #41424e));
26
+ }
27
+ @media (hover: hover){
28
+ .button:hover:not(:active){
29
+ color:var(--sn-theme-color-available-version-textSecondary, var(--sn-brand-color-text-version-secondary, rgba(65, 66, 78, 0.8)));
30
+ }
31
+ }
32
+ .button[data-size=xs]{
33
+ width:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
34
+ height:var(--sn-density-size-icon-xs, var(--sn-primitive-dimension-24, 24px));
35
+ }
36
+ .button[data-size=s]{
37
+ width:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
38
+ height:var(--sn-density-size-icon-s, var(--sn-primitive-dimension-24, 24px));
39
+ }
40
+ .triggerClassName{
41
+ --offset:var(--sn-popover-anatomy-privatePopover-offset, var(--sn-primitive-dimension-4, 4px));
42
+ }
43
+
44
+ .tooltipContainer{
45
+ border-radius:var(--sn-tooltip-anatomy-container-borderRadius, var(--sn-brand-anatomy-radius-tooltip-xs, var(--sn-primitive-dimension-4, 4px)));
46
+ padding:var(--sn-tooltip-anatomy-container-padding, var(--sn-brand-anatomy-spacing-tooltip-padding, var(--sn-primitive-dimension-8, 8px)));
47
+ max-width:256px;
48
+ min-width:var(--sn-tooltip-anatomy-container-minWidth, var(--sn-primitive-dimension-32, 32px));
49
+ min-height:var(--sn-tooltip-anatomy-container-minHeight, var(--sn-primitive-dimension-32, 32px));
50
+ font-family:var(--sn-regular-body-s-fontFamily, var(--sn-brand-font-fontFamily-regular-body, var(--sn-primitive-fontFamily-brandA-sans, SB Sans Interface)));
51
+ font-weight:var(--sn-regular-body-s-fontWeight, var(--sn-theme-typography-fontWeight-regular-body-s, var(--sn-brand-font-fontWeight-light-regular-body-s, var(--sn-primitive-font-fontWeightValue-400, 400))));
52
+ line-height:var(--sn-regular-body-s-lineHeight, var(--sn-density-typography-roleBody-lineHeightS, var(--sn-primitive-font-lineHeight-by14, 20px)));
53
+ font-size:var(--sn-regular-body-s-fontSize, var(--sn-density-typography-roleBody-fontSizeS, var(--sn-primitive-font-fontSize-14, 14px)));
54
+ letter-spacing:var(--sn-regular-body-s-letterSpacing, var(--sn-primitive-font-letterSpacing-m, 0.1px));
55
+ paragraph-spacing:var(--sn-regular-body-s-paragraphSpacing, var(--sn-primitive-font-paragraphSpacing-byFontSize12, 6px));
56
+ display:flex;
57
+ flex-direction:column;
58
+ box-sizing:border-box;
59
+ color:var(--sn-theme-color-available-inversion-textMain, var(--sn-brand-color-text-inversion-main, #e6e8ef));
60
+ overflow-wrap:break-word;
61
+ background:var(--sn-theme-color-invertNeutral-background2Level, var(--sn-brand-color-neutral-15, var(--sn-primitive-color-gray-15, #333342)));
62
+ }
63
+ .tooltipContainer[data-disable-max-width=true]{
64
+ max-width:calc(100vw - var(--sn-primitive-dimension-16, 16px));
65
+ }
66
+
67
+ .pointerWrapper{
68
+ position:absolute;
69
+ display:flex;
70
+ align-items:center;
71
+ justify-content:center;
72
+ color:var(--sn-theme-color-invertNeutral-background2Level, var(--sn-brand-color-neutral-15, var(--sn-primitive-color-gray-15, #333342)));
73
+ }
74
+
75
+ .pointerShape{
76
+ fill:currentcolor;
77
+ }
@@ -0,0 +1,5 @@
1
+ import { PLACEMENT } from '@cloud-ru/ds-popover-private';
2
+ import { ValueOf } from '@cloud-ru/ds-utils';
3
+ import { SIZE } from './constants.js';
4
+ export type Placement = (typeof PLACEMENT)[keyof typeof PLACEMENT];
5
+ export type Size = ValueOf<typeof SIZE>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { Size } from './types.js';
2
+ export declare function getIconSize(size?: Size): 16 | 24;
@@ -0,0 +1,12 @@
1
+ import { SIZE } from './constants.js';
2
+ export function getIconSize(size) {
3
+ switch (size) {
4
+ case SIZE.XS: {
5
+ return 16;
6
+ }
7
+ case SIZE.S:
8
+ default: {
9
+ return 24;
10
+ }
11
+ }
12
+ }