@max-ts/svelte 1.10.5 → 1.10.6

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 (27) hide show
  1. package/dist/assets/styles.css +48 -39
  2. package/dist/components/Portal/Portal.svelte.d.ts +9 -0
  3. package/dist/components/Portal/index.d.ts +1 -0
  4. package/dist/components/Tooltip/index.d.ts +1 -1
  5. package/dist/components/Tooltip/types.d.ts +8 -5
  6. package/dist/components/index.d.ts +2 -1
  7. package/dist/components/index.js +2 -1
  8. package/dist/src/components/Portal/Portal.js +40 -0
  9. package/dist/src/components/Tooltip/Tooltip.js +178 -101
  10. package/dist/src/components/Tooltip/index.d.ts +1 -1
  11. package/dist/src/components/Tooltip/styles.css.js +7 -0
  12. package/dist/src/components/Tooltip/types.d.ts +9 -6
  13. package/package.json +1 -1
  14. package/dist/components/Tooltip/Content/Content.svelte.d.ts +0 -12
  15. package/dist/components/Tooltip/Content/index.d.ts +0 -1
  16. package/dist/components/Tooltip/Portal/Portal.svelte.d.ts +0 -4
  17. package/dist/components/Tooltip/Portal/index.d.ts +0 -2
  18. package/dist/components/Tooltip/Provider/Provider.svelte.d.ts +0 -4
  19. package/dist/components/Tooltip/Provider/index.d.ts +0 -2
  20. package/dist/components/Tooltip/Trigger/Trigger.svelte.d.ts +0 -4
  21. package/dist/components/Tooltip/Trigger/index.d.ts +0 -1
  22. package/dist/src/components/Tooltip/Content/Content.js +0 -94
  23. package/dist/src/components/Tooltip/Content/styles.css.js +0 -7
  24. package/dist/src/components/Tooltip/Portal/Portal.js +0 -19
  25. package/dist/src/components/Tooltip/Provider/Provider.js +0 -19
  26. package/dist/src/components/Tooltip/Trigger/Trigger.js +0 -29
  27. /package/dist/components/Tooltip/{Content/styles.css.d.ts → styles.css.d.ts} +0 -0
@@ -3348,7 +3348,7 @@ img, picture, video, canvas {
3348
3348
  flex: 1;
3349
3349
  outline: none;
3350
3350
  }
3351
- @keyframes styles_fadeIn__ly8gs70 {
3351
+ @keyframes styles_fadeIn__1ovcrev0 {
3352
3352
  0% {
3353
3353
  opacity: 0;
3354
3354
  }
@@ -3356,7 +3356,7 @@ img, picture, video, canvas {
3356
3356
  opacity: 1;
3357
3357
  }
3358
3358
  }
3359
- @keyframes styles_fadeOut__ly8gs71 {
3359
+ @keyframes styles_fadeOut__1ovcrev1 {
3360
3360
  0% {
3361
3361
  opacity: 1;
3362
3362
  }
@@ -3364,7 +3364,7 @@ img, picture, video, canvas {
3364
3364
  opacity: 0;
3365
3365
  }
3366
3366
  }
3367
- @keyframes styles_zoomIn__ly8gs72 {
3367
+ @keyframes styles_zoomIn__1ovcrev2 {
3368
3368
  0% {
3369
3369
  transform: scale(0.95);
3370
3370
  opacity: 0;
@@ -3374,7 +3374,7 @@ img, picture, video, canvas {
3374
3374
  opacity: 1;
3375
3375
  }
3376
3376
  }
3377
- @keyframes styles_zoomOut__ly8gs73 {
3377
+ @keyframes styles_zoomOut__1ovcrev3 {
3378
3378
  0% {
3379
3379
  transform: scale(1);
3380
3380
  opacity: 1;
@@ -3384,7 +3384,7 @@ img, picture, video, canvas {
3384
3384
  opacity: 0;
3385
3385
  }
3386
3386
  }
3387
- @keyframes styles_slideInFromTop__ly8gs74 {
3387
+ @keyframes styles_slideInFromTop__1ovcrev4 {
3388
3388
  0% {
3389
3389
  transform: translateY(8px);
3390
3390
  opacity: 0;
@@ -3394,7 +3394,7 @@ img, picture, video, canvas {
3394
3394
  opacity: 1;
3395
3395
  }
3396
3396
  }
3397
- @keyframes styles_slideInFromBottom__ly8gs75 {
3397
+ @keyframes styles_slideInFromBottom__1ovcrev5 {
3398
3398
  0% {
3399
3399
  transform: translateY(-8px);
3400
3400
  opacity: 0;
@@ -3404,7 +3404,7 @@ img, picture, video, canvas {
3404
3404
  opacity: 1;
3405
3405
  }
3406
3406
  }
3407
- @keyframes styles_slideInFromEnd__ly8gs76 {
3407
+ @keyframes styles_slideInFromEnd__1ovcrev6 {
3408
3408
  0% {
3409
3409
  transform: translateX(-8px);
3410
3410
  opacity: 0;
@@ -3414,7 +3414,7 @@ img, picture, video, canvas {
3414
3414
  opacity: 1;
3415
3415
  }
3416
3416
  }
3417
- @keyframes styles_slideInFromStart__ly8gs77 {
3417
+ @keyframes styles_slideInFromStart__1ovcrev7 {
3418
3418
  0% {
3419
3419
  transform: translateX(8px);
3420
3420
  opacity: 0;
@@ -3424,7 +3424,7 @@ img, picture, video, canvas {
3424
3424
  opacity: 1;
3425
3425
  }
3426
3426
  }
3427
- .styles_content__ly8gs78 {
3427
+ .styles_content__1ovcrev8 {
3428
3428
  z-index: 50;
3429
3429
  background-color: var(--colors-background-tooltip);
3430
3430
  color: var(--colors-background-paper);
@@ -3434,54 +3434,63 @@ img, picture, video, canvas {
3434
3434
  font-weight: var(--fontWeight-semibold);
3435
3435
  text-align: center;
3436
3436
  width: fit-content;
3437
- transform-origin: var(--bits-tooltip-content-transform-origin);
3438
- animation: styles_fadeIn__ly8gs70 150ms ease-out, styles_zoomIn__ly8gs72 150ms ease-out;
3437
+ animation: styles_fadeIn__1ovcrev0 150ms ease-out, styles_zoomIn__1ovcrev2 150ms ease-out;
3439
3438
  text-wrap: balance;
3440
3439
  line-height: var(--lineHeight-none);
3441
3440
  }
3442
- .styles_content__ly8gs78[data-state="closed"] {
3443
- animation: styles_fadeOut__ly8gs71 150ms ease-out, styles_zoomOut__ly8gs73 150ms ease-out;
3441
+ .styles_content__1ovcrev8[data-state="closed"] {
3442
+ animation: styles_fadeOut__1ovcrev1 150ms ease-out, styles_zoomOut__1ovcrev3 150ms ease-out;
3444
3443
  }
3445
- .styles_content__ly8gs78[data-side="bottom"] {
3446
- animation: styles_fadeIn__ly8gs70 150ms ease-out, styles_slideInFromTop__ly8gs74 150ms ease-out;
3444
+ .styles_content__1ovcrev8[data-side="bottom"] {
3445
+ animation: styles_fadeIn__1ovcrev0 150ms ease-out, styles_slideInFromTop__1ovcrev4 150ms ease-out;
3447
3446
  }
3448
- .styles_content__ly8gs78[data-side="left"] {
3449
- animation: styles_fadeIn__ly8gs70 150ms ease-out, styles_slideInFromEnd__ly8gs76 150ms ease-out;
3447
+ .styles_content__1ovcrev8[data-side="left"] {
3448
+ animation: styles_fadeIn__1ovcrev0 150ms ease-out, styles_slideInFromEnd__1ovcrev6 150ms ease-out;
3450
3449
  }
3451
- .styles_content__ly8gs78[data-side="right"] {
3452
- animation: styles_fadeIn__ly8gs70 150ms ease-out, styles_slideInFromStart__ly8gs77 150ms ease-out;
3450
+ .styles_content__1ovcrev8[data-side="right"] {
3451
+ animation: styles_fadeIn__1ovcrev0 150ms ease-out, styles_slideInFromStart__1ovcrev7 150ms ease-out;
3453
3452
  }
3454
- .styles_content__ly8gs78[data-side="top"] {
3455
- animation: styles_fadeIn__ly8gs70 150ms ease-out, styles_slideInFromBottom__ly8gs75 150ms ease-out;
3453
+ .styles_content__1ovcrev8[data-side="top"] {
3454
+ animation: styles_fadeIn__1ovcrev0 150ms ease-out, styles_slideInFromBottom__1ovcrev5 150ms ease-out;
3456
3455
  }
3457
- .styles_content__ly8gs78[data-side="bottom"][data-state="closed"] {
3458
- animation: styles_fadeOut__ly8gs71 150ms ease-out, styles_zoomOut__ly8gs73 150ms ease-out, styles_slideInFromTop__ly8gs74 150ms ease-out reverse;
3456
+ .styles_content__1ovcrev8[data-side="bottom"][data-state="closed"] {
3457
+ animation: styles_fadeOut__1ovcrev1 150ms ease-out, styles_zoomOut__1ovcrev3 150ms ease-out, styles_slideInFromTop__1ovcrev4 150ms ease-out reverse;
3459
3458
  }
3460
- .styles_content__ly8gs78[data-side="left"][data-state="closed"] {
3461
- animation: styles_fadeOut__ly8gs71 150ms ease-out, styles_zoomOut__ly8gs73 150ms ease-out, styles_slideInFromEnd__ly8gs76 150ms ease-out reverse;
3459
+ .styles_content__1ovcrev8[data-side="left"][data-state="closed"] {
3460
+ animation: styles_fadeOut__1ovcrev1 150ms ease-out, styles_zoomOut__1ovcrev3 150ms ease-out, styles_slideInFromEnd__1ovcrev6 150ms ease-out reverse;
3462
3461
  }
3463
- .styles_content__ly8gs78[data-side="right"][data-state="closed"] {
3464
- animation: styles_fadeOut__ly8gs71 150ms ease-out, styles_zoomOut__ly8gs73 150ms ease-out, styles_slideInFromStart__ly8gs77 150ms ease-out reverse;
3462
+ .styles_content__1ovcrev8[data-side="right"][data-state="closed"] {
3463
+ animation: styles_fadeOut__1ovcrev1 150ms ease-out, styles_zoomOut__1ovcrev3 150ms ease-out, styles_slideInFromStart__1ovcrev7 150ms ease-out reverse;
3465
3464
  }
3466
- .styles_content__ly8gs78[data-side="top"][data-state="closed"] {
3467
- animation: styles_fadeOut__ly8gs71 150ms ease-out, styles_zoomOut__ly8gs73 150ms ease-out, styles_slideInFromBottom__ly8gs75 150ms ease-out reverse;
3465
+ .styles_content__1ovcrev8[data-side="top"][data-state="closed"] {
3466
+ animation: styles_fadeOut__1ovcrev1 150ms ease-out, styles_zoomOut__1ovcrev3 150ms ease-out, styles_slideInFromBottom__1ovcrev5 150ms ease-out reverse;
3468
3467
  }
3469
- .styles_arrow__ly8gs79 {
3468
+ .styles_arrow__1ovcrev9 {
3470
3469
  fill: var(--colors-background-tooltip);
3471
3470
  width: 14px;
3472
- height: 14px;
3471
+ height: 8px;
3472
+ position: absolute;
3473
+ pointer-events: none;
3473
3474
  }
3474
- .styles_arrow__ly8gs79[data-side="top"] {
3475
- translate: 0 -5px;
3475
+ .styles_arrow__1ovcrev9[data-side="top"] {
3476
+ bottom: 1px;
3477
+ left: 50%;
3478
+ transform: translateX(-50%) translateY(100%);
3476
3479
  }
3477
- .styles_arrow__ly8gs79[data-side="bottom"] {
3478
- translate: 0 5px;
3480
+ .styles_arrow__1ovcrev9[data-side="bottom"] {
3481
+ top: 1px;
3482
+ left: 50%;
3483
+ transform: translateX(-50%) translateY(-100%) rotate(180deg);
3479
3484
  }
3480
- .styles_arrow__ly8gs79[data-side="right"] {
3481
- translate: 5px 0;
3485
+ .styles_arrow__1ovcrev9[data-side="left"] {
3486
+ right: 4px;
3487
+ top: 50%;
3488
+ transform: translateY(-50%) translateX(100%) rotate(-90deg);
3482
3489
  }
3483
- .styles_arrow__ly8gs79[data-side="left"] {
3484
- translate: -5px 0;
3490
+ .styles_arrow__1ovcrev9[data-side="right"] {
3491
+ left: 4px;
3492
+ top: 50%;
3493
+ transform: translateY(-50%) translateX(-100%) rotate(90deg);
3485
3494
  }
3486
3495
  .styles_variants_h1__13e75lj0 {
3487
3496
  font-size: var(--fontSize-4xl);
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ children?: Snippet;
4
+ target?: HTMLElement;
5
+ disabled?: boolean;
6
+ };
7
+ declare const Portal: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type Portal = ReturnType<typeof Portal>;
9
+ export default Portal;
@@ -0,0 +1 @@
1
+ export { default as Portal } from './Portal.svelte';
@@ -1,2 +1,2 @@
1
1
  export { default as Tooltip } from './Tooltip.svelte';
2
- export type { TooltipProps } from './types';
2
+ export type { TooltipAlign, TooltipProps, TooltipSide } from './types';
@@ -1,13 +1,16 @@
1
- import type { Tooltip } from 'bits-ui';
2
1
  import type { Snippet } from 'svelte';
3
- export type TooltipProps<Payload = never> = Tooltip.RootProps & {
2
+ export type TooltipSide = 'top' | 'bottom' | 'left' | 'right';
3
+ export type TooltipAlign = 'start' | 'center' | 'end';
4
+ export type TooltipProps = {
5
+ open?: boolean;
6
+ delayDuration?: number;
4
7
  content?: Snippet<[]> | string;
8
+ children?: Snippet<[]>;
5
9
  arrow?: boolean;
6
- align?: Tooltip.ContentProps['align'];
10
+ align?: TooltipAlign;
7
11
  sideOffset?: number;
8
12
  alignOffset?: number;
9
- side?: Tooltip.ContentProps['side'];
13
+ side?: TooltipSide;
10
14
  class?: string;
11
15
  arrowClass?: string;
12
- payload?: [Payload] extends [never] ? null : Payload | null;
13
16
  };
@@ -23,6 +23,7 @@ export { Item, type ItemProps, type ItemSize, type ItemVariant, } from './Item';
23
23
  export { Label } from './Label';
24
24
  export { Placeholder, type PlaceholderProps, type PlaceholderSize, } from './Placeholder';
25
25
  export { Popover, type PopoverProps } from './Popover';
26
+ export { Portal } from './Portal';
26
27
  export { RangeInput, type RangeInputProps, type RangeInputSize, } from './RangeInput';
27
28
  export { ScalableContainer, type ScalableContainerProps, } from './ScalableContainer';
28
29
  export { Select } from './Select';
@@ -31,5 +32,5 @@ export { Slider, type SliderProps } from './Slider';
31
32
  export { SliderInput, type SliderInputProps } from './SliderInput';
32
33
  export { Spinner, type SpinnerSize } from './Spinner';
33
34
  export { Tabs, type TabsProps } from './Tabs';
34
- export { Tooltip, type TooltipProps } from './Tooltip';
35
+ export { Tooltip, type TooltipAlign, type TooltipProps, type TooltipSide, } from './Tooltip';
35
36
  export { Typography, type TypographyAlign, type TypographyColor, type TypographyProps, type TypographyVariant, } from './Typography';
@@ -27,6 +27,7 @@ import Input from "../src/components/Input/Input.js";
27
27
  import { InputGroup } from "../src/components/InputGroup/index.js";
28
28
  import { Item } from "../src/components/Item/index.js";
29
29
  import { Popover } from "../src/components/Popover/index.js";
30
+ import Portal from "../src/components/Portal/Portal.js";
30
31
  import Slider from "../src/components/Slider/Slider.js";
31
32
  import RangeInput from "../src/components/RangeInput/RangeInput.js";
32
33
  import ScalableContainer from "../src/components/ScalableContainer/ScalableContainer.js";
@@ -34,4 +35,4 @@ import { Select } from "../src/components/Select/index.js";
34
35
  import SliderInput from "../src/components/SliderInput/SliderInput.js";
35
36
  import { Tabs } from "../src/components/Tabs/index.js";
36
37
  import Tooltip from "../src/components/Tooltip/Tooltip.js";
37
- export { Accordion, Alert, Badge, Button, ButtonGroup, Calendar, Card, Carousel, Checkbox, CircularProgress, ContentState, DataGrid, DataGridSortHeader, Dialog, Drawer, DropdownMenu_exports as DropdownMenu, Empty, Field, Input, InputGroup, Item, Label_1 as Label, Placeholder, Popover, RangeInput, ScalableContainer, Select, Separator, Slider, SliderInput, Spinner, Tabs, Tooltip, Typography, badgeVariants, buttonVariants };
38
+ export { Accordion, Alert, Badge, Button, ButtonGroup, Calendar, Card, Carousel, Checkbox, CircularProgress, ContentState, DataGrid, DataGridSortHeader, Dialog, Drawer, DropdownMenu_exports as DropdownMenu, Empty, Field, Input, InputGroup, Item, Label_1 as Label, Placeholder, Popover, Portal, RangeInput, ScalableContainer, Select, Separator, Slider, SliderInput, Spinner, Tabs, Tooltip, Typography, badgeVariants, buttonVariants };
@@ -0,0 +1,40 @@
1
+ import "svelte/internal/disclose-version";
2
+ import * as $ from "svelte/internal/client";
3
+ //#region src/components/Portal/Portal.svelte
4
+ var root_2 = $.from_html(`<div data-portal="" style="display: contents;"><!></div>`);
5
+ function Portal($$anchor, $$props) {
6
+ $.push($$props, true);
7
+ let disabled = $.prop($$props, "disabled", 3, false);
8
+ let portalEl = $.state(void 0);
9
+ $.user_effect(() => {
10
+ if (!$.get(portalEl) || disabled()) return;
11
+ ($$props.target ?? document.body).appendChild($.get(portalEl));
12
+ return () => {
13
+ $.get(portalEl)?.remove();
14
+ };
15
+ });
16
+ var fragment = $.comment();
17
+ var node = $.first_child(fragment);
18
+ var consequent = ($$anchor) => {
19
+ var fragment_1 = $.comment();
20
+ var node_1 = $.first_child(fragment_1);
21
+ $.snippet(node_1, () => $$props.children ?? $.noop);
22
+ $.append($$anchor, fragment_1);
23
+ };
24
+ var alternate = ($$anchor) => {
25
+ var div = root_2();
26
+ var node_2 = $.child(div);
27
+ $.snippet(node_2, () => $$props.children ?? $.noop);
28
+ $.reset(div);
29
+ $.bind_this(div, ($$value) => $.set(portalEl, $$value), () => $.get(portalEl));
30
+ $.append($$anchor, div);
31
+ };
32
+ $.if(node, ($$render) => {
33
+ if (disabled()) $$render(consequent);
34
+ else $$render(alternate, -1);
35
+ });
36
+ $.append($$anchor, fragment);
37
+ $.pop();
38
+ }
39
+ //#endregion
40
+ export { Portal as default };
@@ -1,109 +1,186 @@
1
- import Content from "./Content/Content.js";
2
- import Provider from "./Provider/Provider.js";
3
- import Trigger from "./Trigger/Trigger.js";
1
+ import Portal from "../Portal/Portal.js";
2
+ import __default__ from "./styles.css.js";
4
3
  import "svelte/internal/disclose-version";
5
4
  import * as $ from "svelte/internal/client";
6
- import { Tooltip } from "bits-ui";
5
+ import { tick, untrack } from "svelte";
7
6
  //#region src/components/Tooltip/Tooltip.svelte
8
- var root_2 = $.from_html(`<!> <!>`, 1);
9
- function Tooltip$1($$anchor, $$props) {
7
+ var root_5 = $.from_svg(`<svg viewBox="0 0 7.68 4.35" xmlns="http://www.w3.org/2000/svg"><path d="m 0.52372243,0.10910656 c -0.1676883,0 -0.3188698,0.10099765 -0.38304509,0.25594925 -0.0641698,0.1548964 -0.0287017,0.3332318 0.0898753,0.4518088 L 3.5473966,4.1337031 c 0.077725,0.07778 0.1832001,0.1214516 0.2931533,0.1214516 0.1099531,0 0.2154286,-0.043672 0.2932085,-0.1214516 L 7.4505968,0.81686461 c 0.118577,-0.118577 0.1540119,-0.2969124 0.089831,-0.4518088 C 7.476247,0.21010421 7.3251098,0.10910656 7.1573882,0.10910656 Z" fill="inherit"></path></svg>`);
8
+ var root_2 = $.from_html(`<div role="tooltip" data-slot="tooltip-content"><!> <!></div>`);
9
+ var root = $.from_html(`<span style="display: contents;" data-slot="tooltip-trigger"><!></span> <!>`, 1);
10
+ function Tooltip($$anchor, $$props) {
10
11
  $.push($$props, true);
11
- let open = $.prop($$props, "open", 15, false), alignOffset = $.prop($$props, "alignOffset", 3, 0), sideOffset = $.prop($$props, "sideOffset", 3, 4), side = $.prop($$props, "side", 3, "top"), triggerId = $.prop($$props, "triggerId", 3, null), payload = $.prop($$props, "payload", 3, null), restProps = $.rest_props($$props, [
12
- "$$slots",
13
- "$$events",
14
- "$$legacy",
15
- "open",
16
- "children",
17
- "content",
18
- "class",
19
- "alignOffset",
20
- "sideOffset",
21
- "side",
22
- "arrow",
23
- "arrowClass",
24
- "triggerId",
25
- "payload"
26
- ]);
27
- Provider($$anchor, {
28
- children: ($$anchor, $$slotProps) => {
29
- var fragment_1 = $.comment();
30
- var node = $.first_child(fragment_1);
31
- $.component(node, () => Tooltip.Root, ($$anchor, TooltipPrimitive_Root) => {
32
- TooltipPrimitive_Root($$anchor, $.spread_props(() => restProps, {
33
- get open() {
34
- return open();
35
- },
36
- set open($$value) {
37
- open($$value);
38
- },
39
- children: ($$anchor, $$slotProps) => {
40
- var fragment_2 = root_2();
41
- var node_1 = $.first_child(fragment_2);
42
- Trigger(node_1, {
43
- children: ($$anchor, $$slotProps) => {
44
- var fragment_3 = $.comment();
45
- var node_2 = $.first_child(fragment_3);
46
- $.snippet(node_2, () => $$props.children ?? $.noop, () => ({
47
- open: open(),
48
- triggerId: triggerId(),
49
- payload: payload()
50
- }));
51
- $.append($$anchor, fragment_3);
52
- },
53
- $$slots: { default: true }
54
- });
55
- Content($.sibling(node_1, 2), {
56
- get class() {
57
- return $$props.class;
58
- },
59
- get alignOffset() {
60
- return alignOffset();
61
- },
62
- get sideOffset() {
63
- return sideOffset();
64
- },
65
- get arrowClass() {
66
- return $$props.arrowClass;
67
- },
68
- get side() {
69
- return side();
70
- },
71
- get arrow() {
72
- return $$props.arrow;
73
- },
74
- hideWhenDetached: true,
75
- children: ($$anchor, $$slotProps) => {
76
- var fragment_4 = $.comment();
77
- var node_4 = $.first_child(fragment_4);
78
- var consequent = ($$anchor) => {
79
- var text = $.text();
80
- $.template_effect(() => $.set_text(text, $$props.content));
81
- $.append($$anchor, text);
82
- };
83
- var alternate = ($$anchor) => {
84
- var fragment_6 = $.comment();
85
- var node_5 = $.first_child(fragment_6);
86
- $.snippet(node_5, () => $$props.content ?? $.noop);
87
- $.append($$anchor, fragment_6);
88
- };
89
- $.if(node_4, ($$render) => {
90
- if (typeof $$props.content === "string") $$render(consequent);
91
- else $$render(alternate, -1);
92
- });
93
- $.append($$anchor, fragment_4);
94
- },
95
- $$slots: { default: true }
96
- });
97
- $.append($$anchor, fragment_2);
98
- },
99
- $$slots: { default: true }
100
- }));
101
- });
102
- $.append($$anchor, fragment_1);
103
- },
104
- $$slots: { default: true }
12
+ const ANIMATION_DURATION = 150;
13
+ let open = $.prop($$props, "open", 15, false), alignOffset = $.prop($$props, "alignOffset", 3, 0), sideOffset = $.prop($$props, "sideOffset", 3, 10), side = $.prop($$props, "side", 3, "top"), align = $.prop($$props, "align", 3, "center"), arrow = $.prop($$props, "arrow", 3, false), delayDuration = $.prop($$props, "delayDuration", 3, 200);
14
+ let triggerEl;
15
+ let contentEl = $.state(void 0);
16
+ let visible = $.state(false);
17
+ let delayTimer;
18
+ let closeTimer;
19
+ let position = $.state({
20
+ top: 0,
21
+ left: 0
105
22
  });
23
+ const tooltipId = `tooltip-${Math.random().toString(36).slice(2, 11)}`;
24
+ function updatePosition() {
25
+ if (!triggerEl || !$.get(contentEl)) return;
26
+ const triggerRect = triggerEl.getBoundingClientRect();
27
+ const contentRect = $.get(contentEl).getBoundingClientRect();
28
+ let top = 0;
29
+ let left = 0;
30
+ switch (side()) {
31
+ case "top":
32
+ top = triggerRect.top - contentRect.height - sideOffset();
33
+ left = triggerRect.left + (triggerRect.width - contentRect.width) / 2;
34
+ break;
35
+ case "bottom":
36
+ top = triggerRect.bottom + sideOffset();
37
+ left = triggerRect.left + (triggerRect.width - contentRect.width) / 2;
38
+ break;
39
+ case "left":
40
+ top = triggerRect.top + (triggerRect.height - contentRect.height) / 2;
41
+ left = triggerRect.left - contentRect.width - sideOffset();
42
+ break;
43
+ case "right":
44
+ top = triggerRect.top + (triggerRect.height - contentRect.height) / 2;
45
+ left = triggerRect.right + sideOffset();
46
+ break;
47
+ }
48
+ if (side() === "top" || side() === "bottom") if (align() === "start") left = triggerRect.left + alignOffset();
49
+ else if (align() === "end") left = triggerRect.right - contentRect.width - alignOffset();
50
+ else left += alignOffset();
51
+ else if (align() === "start") top = triggerRect.top + alignOffset();
52
+ else if (align() === "end") top = triggerRect.bottom - contentRect.height - alignOffset();
53
+ else top += alignOffset();
54
+ $.set(position, {
55
+ top,
56
+ left
57
+ });
58
+ }
59
+ function show() {
60
+ clearTimeout(closeTimer);
61
+ clearTimeout(delayTimer);
62
+ delayTimer = setTimeout(async () => {
63
+ open(true);
64
+ }, delayDuration());
65
+ }
66
+ function hide() {
67
+ clearTimeout(delayTimer);
68
+ open(false);
69
+ }
70
+ function handleKeydown(event) {
71
+ if (event.key === "Escape" && open()) hide();
72
+ }
73
+ $.user_effect(() => {
74
+ if (open()) {
75
+ clearTimeout(closeTimer);
76
+ $.set(visible, true);
77
+ tick().then(updatePosition);
78
+ } else if (untrack(() => $.get(visible))) closeTimer = setTimeout(() => {
79
+ $.set(visible, false);
80
+ }, ANIMATION_DURATION);
81
+ });
82
+ $.user_effect(() => {
83
+ if (!open()) return;
84
+ window.addEventListener("scroll", updatePosition, true);
85
+ window.addEventListener("resize", updatePosition);
86
+ return () => {
87
+ window.removeEventListener("scroll", updatePosition, true);
88
+ window.removeEventListener("resize", updatePosition);
89
+ };
90
+ });
91
+ $.user_effect(() => {
92
+ return () => {
93
+ clearTimeout(delayTimer);
94
+ clearTimeout(closeTimer);
95
+ };
96
+ });
97
+ function attachTrigger(node) {
98
+ const el = node.firstElementChild;
99
+ if (!el) return;
100
+ triggerEl = el;
101
+ el.addEventListener("mouseenter", show);
102
+ el.addEventListener("mouseleave", hide);
103
+ el.addEventListener("focusin", show);
104
+ el.addEventListener("focusout", hide);
105
+ el.setAttribute("aria-describedby", tooltipId);
106
+ return () => {
107
+ el.removeEventListener("mouseenter", show);
108
+ el.removeEventListener("mouseleave", hide);
109
+ el.removeEventListener("focusin", show);
110
+ el.removeEventListener("focusout", hide);
111
+ el.removeAttribute("aria-describedby");
112
+ triggerEl = void 0;
113
+ };
114
+ }
115
+ var fragment = root();
116
+ $.event("keydown", $.window, handleKeydown);
117
+ var span = $.first_child(fragment);
118
+ var node_1 = $.child(span);
119
+ $.snippet(node_1, () => $$props.children ?? $.noop);
120
+ $.reset(span);
121
+ $.attach(span, () => attachTrigger);
122
+ var node_2 = $.sibling(span, 2);
123
+ var consequent_2 = ($$anchor) => {
124
+ Portal($$anchor, {
125
+ children: ($$anchor, $$slotProps) => {
126
+ var div = root_2();
127
+ let styles_1;
128
+ var node_3 = $.child(div);
129
+ var consequent = ($$anchor) => {
130
+ var text = $.text();
131
+ $.template_effect(() => $.set_text(text, $$props.content));
132
+ $.append($$anchor, text);
133
+ };
134
+ var alternate = ($$anchor) => {
135
+ var fragment_3 = $.comment();
136
+ var node_4 = $.first_child(fragment_3);
137
+ $.snippet(node_4, () => $$props.content ?? $.noop);
138
+ $.append($$anchor, fragment_3);
139
+ };
140
+ $.if(node_3, ($$render) => {
141
+ if (typeof $$props.content === "string") $$render(consequent);
142
+ else $$render(alternate, -1);
143
+ });
144
+ var node_5 = $.sibling(node_3, 2);
145
+ var consequent_1 = ($$anchor) => {
146
+ var svg = root_5();
147
+ $.template_effect(() => {
148
+ $.set_class(svg, 0, $.clsx([__default__.arrow, $$props.arrowClass]));
149
+ $.set_attribute(svg, "data-side", side());
150
+ });
151
+ $.append($$anchor, svg);
152
+ };
153
+ $.if(node_5, ($$render) => {
154
+ if (arrow()) $$render(consequent_1);
155
+ });
156
+ $.reset(div);
157
+ $.bind_this(div, ($$value) => $.set(contentEl, $$value), () => $.get(contentEl));
158
+ $.template_effect(() => {
159
+ $.set_attribute(div, "id", tooltipId);
160
+ $.set_attribute(div, "data-state", open() ? "open" : "closed");
161
+ $.set_attribute(div, "data-side", side());
162
+ $.set_class(div, 1, $.clsx([__default__.content, $$props.class]));
163
+ styles_1 = $.set_style(div, "", styles_1, {
164
+ position: "fixed",
165
+ top: `${$.get(position).top ?? ""}px`,
166
+ left: `${$.get(position).left ?? ""}px`
167
+ });
168
+ });
169
+ $.event("mouseenter", div, () => {
170
+ clearTimeout(closeTimer);
171
+ clearTimeout(delayTimer);
172
+ });
173
+ $.event("mouseleave", div, hide);
174
+ $.append($$anchor, div);
175
+ },
176
+ $$slots: { default: true }
177
+ });
178
+ };
179
+ $.if(node_2, ($$render) => {
180
+ if ($.get(visible)) $$render(consequent_2);
181
+ });
182
+ $.append($$anchor, fragment);
106
183
  $.pop();
107
184
  }
108
185
  //#endregion
109
- export { Tooltip$1 as default };
186
+ export { Tooltip as default };
@@ -1,2 +1,2 @@
1
1
  import Tooltip from "./Tooltip.js";
2
- import { TooltipProps } from "./types.js";
2
+ import { TooltipAlign, TooltipProps, TooltipSide } from "./types.js";
@@ -0,0 +1,7 @@
1
+ //#region src/components/Tooltip/styles.css.ts
2
+ var __default__ = {
3
+ content: "styles_content__1ovcrev8",
4
+ arrow: "styles_arrow__1ovcrev9"
5
+ };
6
+ //#endregion
7
+ export { __default__ as default };
@@ -1,17 +1,20 @@
1
- import { Tooltip } from "bits-ui";
2
1
  import { Snippet } from "svelte";
3
2
 
4
3
  //#region src/components/Tooltip/types.d.ts
5
- type TooltipProps<Payload = never> = Tooltip.RootProps & {
4
+ type TooltipSide = 'top' | 'bottom' | 'left' | 'right';
5
+ type TooltipAlign = 'start' | 'center' | 'end';
6
+ type TooltipProps = {
7
+ open?: boolean;
8
+ delayDuration?: number;
6
9
  content?: Snippet<[]> | string;
10
+ children?: Snippet<[]>;
7
11
  arrow?: boolean;
8
- align?: Tooltip.ContentProps['align'];
12
+ align?: TooltipAlign;
9
13
  sideOffset?: number;
10
14
  alignOffset?: number;
11
- side?: Tooltip.ContentProps['side'];
15
+ side?: TooltipSide;
12
16
  class?: string;
13
17
  arrowClass?: string;
14
- payload?: [Payload] extends [never] ? null : Payload | null;
15
18
  };
16
19
  //#endregion
17
- export { TooltipProps };
20
+ export { TooltipAlign, TooltipProps, TooltipSide };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@max-ts/svelte",
3
- "version": "1.10.5",
3
+ "version": "1.10.6",
4
4
  "type": "module",
5
5
  "description": "Svelte component library.",
6
6
  "author": "Tsepelev Maksim",
@@ -1,12 +0,0 @@
1
- import { Tooltip as TooltipPrimitive } from 'bits-ui';
2
- import type { ComponentProps } from 'svelte';
3
- import type { WithoutChildrenOrChild } from '../../../types.ts';
4
- import { Portal } from '../Portal';
5
- type $$ComponentProps = TooltipPrimitive.ContentProps & {
6
- arrowClass?: string;
7
- arrow?: boolean;
8
- portalProps?: WithoutChildrenOrChild<ComponentProps<typeof Portal>>;
9
- };
10
- declare const Content: import("svelte").Component<$$ComponentProps, {}, "ref">;
11
- type Content = ReturnType<typeof Content>;
12
- export default Content;
@@ -1 +0,0 @@
1
- export { default as Content } from './Content.svelte';
@@ -1,4 +0,0 @@
1
- import { Tooltip as TooltipPrimitive } from 'bits-ui';
2
- declare const Portal: import("svelte").Component<TooltipPrimitive.PortalProps, {}, "">;
3
- type Portal = ReturnType<typeof Portal>;
4
- export default Portal;
@@ -1,2 +0,0 @@
1
- import Portal from './Portal.svelte';
2
- export { Portal };
@@ -1,4 +0,0 @@
1
- import { Tooltip as TooltipPrimitive } from 'bits-ui';
2
- declare const Provider: import("svelte").Component<TooltipPrimitive.ProviderProps, {}, "">;
3
- type Provider = ReturnType<typeof Provider>;
4
- export default Provider;
@@ -1,2 +0,0 @@
1
- import Provider from './Provider.svelte';
2
- export { Provider };
@@ -1,4 +0,0 @@
1
- import { Tooltip as TooltipPrimitive } from 'bits-ui';
2
- declare const Trigger: import("svelte").Component<TooltipPrimitive.TriggerProps, {}, "ref">;
3
- type Trigger = ReturnType<typeof Trigger>;
4
- export default Trigger;
@@ -1 +0,0 @@
1
- export { default as Trigger } from './Trigger.svelte';
@@ -1,94 +0,0 @@
1
- import Portal from "../Portal/Portal.js";
2
- import __default__ from "./styles.css.js";
3
- import "svelte/internal/disclose-version";
4
- import * as $ from "svelte/internal/client";
5
- import { Tooltip } from "bits-ui";
6
- //#region src/components/Tooltip/Content/Content.svelte
7
- var root_4 = $.from_svg(`<svg><path d="m 0.52372243,0.10910656 c -0.1676883,0 -0.3188698,0.10099765 -0.38304509,0.25594925 -0.0641698,0.1548964 -0.0287017,0.3332318 0.0898753,0.4518088 L 3.5473966,4.1337031 c 0.077725,0.07778 0.1832001,0.1214516 0.2931533,0.1214516 0.1099531,0 0.2154286,-0.043672 0.2932085,-0.1214516 L 7.4505968,0.81686461 c 0.118577,-0.118577 0.1540119,-0.2969124 0.089831,-0.4518088 C 7.476247,0.21010421 7.3251098,0.10910656 7.1573882,0.10910656 Z" fill="inherit"></path></svg>`);
8
- var root_2 = $.from_html(`<!> <!>`, 1);
9
- function Content($$anchor, $$props) {
10
- $.push($$props, true);
11
- let ref = $.prop($$props, "ref", 15, null), sideOffset = $.prop($$props, "sideOffset", 3, 0), side = $.prop($$props, "side", 3, "top"), restProps = $.rest_props($$props, [
12
- "$$slots",
13
- "$$events",
14
- "$$legacy",
15
- "ref",
16
- "class",
17
- "sideOffset",
18
- "side",
19
- "children",
20
- "arrowClass",
21
- "portalProps",
22
- "arrow"
23
- ]);
24
- Portal($$anchor, $.spread_props(() => $$props.portalProps, {
25
- children: ($$anchor, $$slotProps) => {
26
- var fragment_1 = $.comment();
27
- var node = $.first_child(fragment_1);
28
- {
29
- let $0 = $.derived(() => [__default__.content, $$props.class]);
30
- $.component(node, () => Tooltip.Content, ($$anchor, TooltipPrimitive_Content) => {
31
- TooltipPrimitive_Content($$anchor, $.spread_props({
32
- "data-slot": "tooltip-content",
33
- get sideOffset() {
34
- return sideOffset();
35
- },
36
- get side() {
37
- return side();
38
- },
39
- get class() {
40
- return $.get($0);
41
- }
42
- }, () => restProps, {
43
- get ref() {
44
- return ref();
45
- },
46
- set ref($$value) {
47
- ref($$value);
48
- },
49
- children: ($$anchor, $$slotProps) => {
50
- var fragment_2 = root_2();
51
- var node_1 = $.first_child(fragment_2);
52
- $.snippet(node_1, () => $$props.children ?? $.noop);
53
- var node_2 = $.sibling(node_1, 2);
54
- var consequent = ($$anchor) => {
55
- var fragment_3 = $.comment();
56
- var node_3 = $.first_child(fragment_3);
57
- {
58
- const child = ($$anchor, $$arg0) => {
59
- let props = () => $$arg0?.().props;
60
- var svg = root_4();
61
- $.attribute_effect(svg, () => ({
62
- class: [__default__.arrow, $$props.arrowClass],
63
- viewBox: "0 0 7.68 4.35",
64
- xmlns: "http://www.w3.org/2000/svg",
65
- ...props()
66
- }));
67
- $.append($$anchor, svg);
68
- };
69
- $.component(node_3, () => Tooltip.Arrow, ($$anchor, TooltipPrimitive_Arrow) => {
70
- TooltipPrimitive_Arrow($$anchor, {
71
- child,
72
- $$slots: { child: true }
73
- });
74
- });
75
- }
76
- $.append($$anchor, fragment_3);
77
- };
78
- $.if(node_2, ($$render) => {
79
- if ($$props.arrow) $$render(consequent);
80
- });
81
- $.append($$anchor, fragment_2);
82
- },
83
- $$slots: { default: true }
84
- }));
85
- });
86
- }
87
- $.append($$anchor, fragment_1);
88
- },
89
- $$slots: { default: true }
90
- }));
91
- $.pop();
92
- }
93
- //#endregion
94
- export { Content as default };
@@ -1,7 +0,0 @@
1
- //#region src/components/Tooltip/Content/styles.css.ts
2
- var __default__ = {
3
- content: "styles_content__ly8gs78",
4
- arrow: "styles_arrow__ly8gs79"
5
- };
6
- //#endregion
7
- export { __default__ as default };
@@ -1,19 +0,0 @@
1
- import "svelte/internal/disclose-version";
2
- import * as $ from "svelte/internal/client";
3
- import { Tooltip } from "bits-ui";
4
- //#region src/components/Tooltip/Portal/Portal.svelte
5
- function Portal($$anchor, $$props) {
6
- let restProps = $.rest_props($$props, [
7
- "$$slots",
8
- "$$events",
9
- "$$legacy"
10
- ]);
11
- var fragment = $.comment();
12
- var node = $.first_child(fragment);
13
- $.component(node, () => Tooltip.Portal, ($$anchor, TooltipPrimitive_Portal) => {
14
- TooltipPrimitive_Portal($$anchor, $.spread_props(() => restProps));
15
- });
16
- $.append($$anchor, fragment);
17
- }
18
- //#endregion
19
- export { Portal as default };
@@ -1,19 +0,0 @@
1
- import "svelte/internal/disclose-version";
2
- import * as $ from "svelte/internal/client";
3
- import { Tooltip } from "bits-ui";
4
- //#region src/components/Tooltip/Provider/Provider.svelte
5
- function Provider($$anchor, $$props) {
6
- let restProps = $.rest_props($$props, [
7
- "$$slots",
8
- "$$events",
9
- "$$legacy"
10
- ]);
11
- var fragment = $.comment();
12
- var node = $.first_child(fragment);
13
- $.component(node, () => Tooltip.Provider, ($$anchor, TooltipPrimitive_Provider) => {
14
- TooltipPrimitive_Provider($$anchor, $.spread_props(() => restProps));
15
- });
16
- $.append($$anchor, fragment);
17
- }
18
- //#endregion
19
- export { Provider as default };
@@ -1,29 +0,0 @@
1
- import "svelte/internal/disclose-version";
2
- import * as $ from "svelte/internal/client";
3
- import { Tooltip } from "bits-ui";
4
- //#region src/components/Tooltip/Trigger/Trigger.svelte
5
- function Trigger($$anchor, $$props) {
6
- $.push($$props, true);
7
- let ref = $.prop($$props, "ref", 15, null), restProps = $.rest_props($$props, [
8
- "$$slots",
9
- "$$events",
10
- "$$legacy",
11
- "ref"
12
- ]);
13
- var fragment = $.comment();
14
- var node = $.first_child(fragment);
15
- $.component(node, () => Tooltip.Trigger, ($$anchor, TooltipPrimitive_Trigger) => {
16
- TooltipPrimitive_Trigger($$anchor, $.spread_props({ "data-slot": "tooltip-trigger" }, () => restProps, {
17
- get ref() {
18
- return ref();
19
- },
20
- set ref($$value) {
21
- ref($$value);
22
- }
23
- }));
24
- });
25
- $.append($$anchor, fragment);
26
- $.pop();
27
- }
28
- //#endregion
29
- export { Trigger as default };