@onsvisual/svelte-components 1.1.39 → 1.1.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,23 @@
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+ import { withComponentDocs } from "../../js/withParams.js";
4
+ import Tooltip from "./Tooltip.svelte";
5
+ import Button from "../Button/Button.svelte";
6
+ import componentDocs from "./docs/component.md?raw";
7
+
8
+ const { Story } = defineMeta({
9
+ title: "Decorators/Tooltip",
10
+ component: Tooltip,
11
+ tags: ["autodocs"],
12
+ argTypes: {},
13
+ parameters: withComponentDocs(componentDocs)
14
+ });
15
+ </script>
16
+
17
+ {#snippet template(args)}
18
+ <Tooltip {...args}>
19
+ <Button icon="search" hideLabel>Search text</Button>
20
+ </Tooltip>
21
+ {/snippet}
22
+
23
+ <Story name="Default" args={{ text: "Search for something", position: "right" }} {template} />
@@ -0,0 +1,23 @@
1
+ /** @typedef {typeof __propDef.props} TooltipProps */
2
+ /** @typedef {typeof __propDef.events} TooltipEvents */
3
+ /** @typedef {typeof __propDef.slots} TooltipSlots */
4
+ export default class Tooltip extends SvelteComponentTyped<{
5
+ [x: string]: never;
6
+ }, {
7
+ [evt: string]: CustomEvent<any>;
8
+ }, {}> {
9
+ }
10
+ export type TooltipProps = typeof __propDef.props;
11
+ export type TooltipEvents = typeof __propDef.events;
12
+ export type TooltipSlots = typeof __propDef.slots;
13
+ import { SvelteComponentTyped } from "svelte";
14
+ declare const __propDef: {
15
+ props: {
16
+ [x: string]: never;
17
+ };
18
+ events: {
19
+ [evt: string]: CustomEvent<any>;
20
+ };
21
+ slots: {};
22
+ };
23
+ export {};
@@ -0,0 +1,139 @@
1
+ <script>
2
+ /**
3
+ * Define the text to be displayed on the tooltip
4
+ * @type {string}
5
+ */
6
+ export let text = "";
7
+ /**
8
+ * Define the position of the tooltip relative to the element
9
+ * @type {"top"|"bottom"|"left"|"right"|"middle"}
10
+ */
11
+ export let position = "bottom";
12
+ /**
13
+ * Set a maximum width for the tooltip (beyond this width text will wrap)
14
+ * @type {number|null}
15
+ */
16
+ export let maxWidth = null;
17
+
18
+ let isHovered = false;
19
+ let currentPos = {};
20
+
21
+ function mouseOver(event) {
22
+ const bboxEl = event.target.getBoundingClientRect();
23
+ const bboxPt = event?.target?.offsetParent?.getBoundingClientRect?.() || { top: 0, left: 0 };
24
+ const x = window.pageXOffset;
25
+ const y = window.pageYOffset;
26
+ const bbox = {
27
+ top: bboxEl.top - bboxPt.top - y,
28
+ bottom: bboxEl.bottom - bboxPt.top - y,
29
+ left: bboxEl.left - bboxPt.left - x,
30
+ right: bboxEl.right - bboxPt.left - x
31
+ };
32
+ currentPos = {
33
+ top:
34
+ (position === "bottom"
35
+ ? bbox.bottom
36
+ : position === "top"
37
+ ? bbox.top
38
+ : (bbox.top + bbox.bottom) / 2) + window.pageYOffset,
39
+ left:
40
+ (position === "right"
41
+ ? bbox.right
42
+ : position === "left"
43
+ ? bbox.left
44
+ : (bbox.left + bbox.right) / 2) + window.pageXOffset
45
+ };
46
+ isHovered = true;
47
+ }
48
+ function mouseLeave() {
49
+ isHovered = false;
50
+ }
51
+ function renderDim(dim) {
52
+ return dim ? `${dim}px` : null;
53
+ }
54
+ </script>
55
+
56
+ <div
57
+ class="tooltip-wrapper"
58
+ on:mouseenter={mouseOver}
59
+ on:mouseleave={mouseLeave}
60
+ on:focusin={mouseOver}
61
+ on:focusout={mouseLeave}
62
+ >
63
+ <slot />
64
+ </div>
65
+ {#if isHovered}
66
+ <div
67
+ class="tooltip tooltip-{position}"
68
+ style:left={renderDim(currentPos.left)}
69
+ style:right={renderDim(currentPos.right)}
70
+ style:top={renderDim(currentPos.top)}
71
+ style:bottom={renderDim(currentPos.bottom)}
72
+ style:max-width={renderDim(maxWidth)}
73
+ >
74
+ {text}
75
+ </div>
76
+ {/if}
77
+
78
+ <style>
79
+ .tooltip-wrapper {
80
+ display: inline-block;
81
+ }
82
+ .tooltip {
83
+ position: absolute;
84
+ pointer-events: none;
85
+ font-size: 14px;
86
+ line-height: 1.4;
87
+ color: var(--ons-color-page-light);
88
+ background: var(--ons-color-text);
89
+ padding: 4px 6px;
90
+ border-radius: 4px;
91
+ box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.25);
92
+ }
93
+ .tooltip-top {
94
+ transform: translate(-50%, -100%) translateY(-8px);
95
+ }
96
+ .tooltip-bottom {
97
+ transform: translate(-50%, 8px);
98
+ }
99
+ .tooltip-left {
100
+ transform: translate(-100%, -50%) translateX(-8px);
101
+ }
102
+ .tooltip-right {
103
+ transform: translate(8px, -50%);
104
+ }
105
+ .tooltip-middle {
106
+ transform: translate(-50%, 8px);
107
+ }
108
+ .tooltip::before {
109
+ content: " ";
110
+ position: absolute;
111
+ border-width: 8px;
112
+ border-style: solid;
113
+ }
114
+ .tooltip-bottom::before,
115
+ .tooltip-middle::before {
116
+ bottom: calc(100% - 1px);
117
+ right: 50%;
118
+ border-color: transparent transparent var(--ons-color-text) transparent;
119
+ transform: translateX(50%);
120
+ }
121
+ .tooltip-top::before {
122
+ top: calc(100% - 1px);
123
+ right: 50%;
124
+ border-color: var(--ons-color-text) transparent transparent transparent;
125
+ transform: translateX(50%);
126
+ }
127
+ .tooltip-left::before {
128
+ left: calc(100% - 1px);
129
+ top: 50%;
130
+ border-color: transparent transparent transparent var(--ons-color-text);
131
+ transform: translateY(-50%);
132
+ }
133
+ .tooltip-right::before {
134
+ right: calc(100% - 1px);
135
+ top: 50%;
136
+ border-color: transparent var(--ons-color-text) transparent transparent;
137
+ transform: translateY(-50%);
138
+ }
139
+ </style>
@@ -0,0 +1,31 @@
1
+ /** @typedef {typeof __propDef.props} TooltipProps */
2
+ /** @typedef {typeof __propDef.events} TooltipEvents */
3
+ /** @typedef {typeof __propDef.slots} TooltipSlots */
4
+ export default class Tooltip extends SvelteComponentTyped<{
5
+ text?: string | undefined;
6
+ position?: "top" | "bottom" | "left" | "right" | "middle" | undefined;
7
+ maxWidth?: number | null | undefined;
8
+ }, {
9
+ [evt: string]: CustomEvent<any>;
10
+ }, {
11
+ default: {};
12
+ }> {
13
+ }
14
+ export type TooltipProps = typeof __propDef.props;
15
+ export type TooltipEvents = typeof __propDef.events;
16
+ export type TooltipSlots = typeof __propDef.slots;
17
+ import { SvelteComponentTyped } from "svelte";
18
+ declare const __propDef: {
19
+ props: {
20
+ text?: string | undefined;
21
+ position?: "top" | "bottom" | "left" | "right" | "middle" | undefined;
22
+ maxWidth?: number | null | undefined;
23
+ };
24
+ events: {
25
+ [evt: string]: CustomEvent<any>;
26
+ };
27
+ slots: {
28
+ default: {};
29
+ };
30
+ };
31
+ export {};
@@ -0,0 +1,12 @@
1
+ A component that displays a tooltip when the element it is wrapped around is hovered over or focused on.
2
+
3
+ <!-- prettier-ignore -->
4
+ ```html
5
+ <script>
6
+ import { Tooltip } from "@onsvisual/svelte-components";
7
+ </script>
8
+
9
+ <Tooltip text="Tooltip text">
10
+ <!-- Child element -->
11
+ </Tooltip>
12
+ ```
package/dist/index.d.ts CHANGED
@@ -55,7 +55,6 @@ export { default as DocumentList } from "./components/DocumentList/DocumentList.
55
55
  export { default as Document } from "./components/DocumentList/Document.svelte";
56
56
  export { default as ErrorPage } from "./components/ErrorPage/ErrorPage.svelte";
57
57
  export { default as Image } from "./components/Image/Image.svelte";
58
- export { default as Indent } from "./components/Indent/Indent.svelte";
59
58
  export { default as Notice } from "./components/Notice/Notice.svelte";
60
59
  export { default as ShareButtons } from "./components/ShareButtons/ShareButtons.svelte";
61
60
  export { default as Summary } from "./components/Summary/Summary.svelte";
@@ -65,6 +64,8 @@ export { default as DataCard } from "./components/DataCard/DataCard.svelte";
65
64
  export { default as Table } from "./components/Table/Table.svelte";
66
65
  export { default as Em } from "./components/Em/Em.svelte";
67
66
  export { default as Icon } from "./components/Icon/Icon.svelte";
67
+ export { default as Indent } from "./components/Indent/Indent.svelte";
68
+ export { default as Tooltip } from "./components/Tooltip/Tooltip.svelte";
68
69
  export { default as Select, default as AccessibleSelect } from "./components/Select/Select.svelte";
69
70
  export { default as Details, default as Twisty } from "./components/Details/Details.svelte";
70
71
  export { default as Grid, default as Cards } from "./components/Grid/Grid.svelte";
package/dist/index.js CHANGED
@@ -76,7 +76,6 @@ export { default as DocumentList } from "./components/DocumentList/DocumentList.
76
76
  export { default as Document } from "./components/DocumentList/Document.svelte";
77
77
  export { default as ErrorPage } from "./components/ErrorPage/ErrorPage.svelte";
78
78
  export { default as Image } from "./components/Image/Image.svelte";
79
- export { default as Indent } from "./components/Indent/Indent.svelte";
80
79
  export { default as Notice } from "./components/Notice/Notice.svelte";
81
80
  export { default as ShareButtons } from "./components/ShareButtons/ShareButtons.svelte";
82
81
  export { default as Summary } from "./components/Summary/Summary.svelte";
@@ -90,3 +89,5 @@ export { default as Table } from "./components/Table/Table.svelte";
90
89
  // Decorators
91
90
  export { default as Em } from "./components/Em/Em.svelte";
92
91
  export { default as Icon } from "./components/Icon/Icon.svelte";
92
+ export { default as Indent } from "./components/Indent/Indent.svelte";
93
+ export { default as Tooltip } from "./components/Tooltip/Tooltip.svelte";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onsvisual/svelte-components",
3
- "version": "1.1.39",
3
+ "version": "1.1.40",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "build": "npm run build:package && npm run build:docs",