Skip to content

Commit

Permalink
feat(tooltip): implement tooltip to beta phase
Browse files Browse the repository at this point in the history
  • Loading branch information
cwoolum committed Jul 13, 2024
1 parent 79d3b31 commit dd22ec2
Show file tree
Hide file tree
Showing 30 changed files with 1,184 additions and 60 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ npm install -D @qwik-ui/headless
| [Separator](https://qwikui.com/docs/headless/separator) | | || |
| [Tabs](https://qwikui.com/docs/headless/tabs) | | || |
| [Toggle](https://qwikui.com/docs/headless/toggle) || | | |
| [Tooltip](https://qwikui.com/docs/headless/tooltip) | | | | |
| [Tooltip](https://qwikui.com/docs/headless/tooltip) | | | | |

## Contributing

Expand Down
2 changes: 1 addition & 1 deletion apps/website/src/_state/component-statuses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,6 @@ export const statusByComponent: ComponentKitsStatuses = {
Select: ComponentStatus.Beta,
Separator: ComponentStatus.Beta,
Tabs: ComponentStatus.Beta,
Tooltip: ComponentStatus.Draft,
Tooltip: ComponentStatus.Beta,
},
};
19 changes: 12 additions & 7 deletions apps/website/src/components/showcase/showcase.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,18 @@ export const Showcase = component$<ShowcaseProps>(({ name, ...props }) => {
const componentCodeSig = useSignal<string>();

useTask$(async () => {
// eslint-disable-next-line qwik/valid-lexical-scope
MetaGlobComponentSig.value = isDev
? await metaGlobComponents[componentPath]() // We need to call `await metaGlobComponents[componentPath]()` in development as it is `eager:false`
: metaGlobComponents[componentPath]; // We need to directly access the `metaGlobComponents[componentPath]` expression in preview/production as it is `eager:true`
componentCodeSig.value = isDev
? await rawComponents[componentPath]()
: rawComponents[componentPath];
try {
// eslint-disable-next-line qwik/valid-lexical-scope
MetaGlobComponentSig.value = isDev
? await metaGlobComponents[componentPath]() // We need to call `await metaGlobComponents[componentPath]()` in development as it is `eager:false`
: metaGlobComponents[componentPath]; // We need to directly access the `metaGlobComponents[componentPath]` expression in preview/production as it is `eager:true`
componentCodeSig.value = isDev
? await rawComponents[componentPath]()
: rawComponents[componentPath];
} catch (e) {
console.error('Unable to load path %s', componentPath, e);
throw e;
}
});

return (
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { component$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
return (
<Tooltip.Root gutter={4} flip>
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel class="tooltip-animation">
Animated tooltip content here
</Tooltip.Panel>
</Tooltip.Root>
);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { component$, useStyles$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
useStyles$(`
.tooltip-panel {
background-color: #222;
color: #fff;
padding: 15px;
border-radius: 8px;
position: relative;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
transition: opacity 0.3s ease;
opacity: 0;
}
.tooltip-panel[data-state="open"] {
opacity: 1;
}
.tooltip-arrow {
position: absolute;
width: 20px;
height: 10px;
overflow: hidden;
}
.tooltip-arrow::before {
content: '';
position: absolute;
width: 10px;
height: 10px;
background-color: #222;
top: -5px;
left: calc(50% - 5px);
transform: rotate(45deg);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
transition: top 0.3s ease;
}
.tooltip-panel[data-state="open"] .tooltip-arrow::before {
top: -8px;
}
`);

return (
<Tooltip.Root gutter={4} flip>
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel aria-label="Tooltip content" class="tooltip-panel">
<Tooltip.Arrow class="tooltip-arrow" width={20} height={10} />
<div>
<h3 style="margin: 0 0 10px;">Tooltip Title</h3>
<p style="margin: 0;">This tooltip has a snazzy styled arrow!</p>
</div>
</Tooltip.Panel>
</Tooltip.Root>
);
});
11 changes: 11 additions & 0 deletions apps/website/src/routes/docs/headless/tooltip/examples/auto.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { component$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
return (
<Tooltip.Root gutter={4} flip>
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel class="tooltip-panel">Tooltip content here</Tooltip.Panel>
</Tooltip.Root>
);
});
14 changes: 14 additions & 0 deletions apps/website/src/routes/docs/headless/tooltip/examples/basic.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { component$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
return (
<Tooltip.Root gutter={4} flip>
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel aria-label="Tooltip content">
<Tooltip.Arrow width={10} height={5} />
Tooltip content here
</Tooltip.Panel>
</Tooltip.Root>
);
});
22 changes: 22 additions & 0 deletions apps/website/src/routes/docs/headless/tooltip/examples/complex.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { component$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
return (
<Tooltip.Root gutter={4} flip placement="bottom">
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel aria-label="Complex Tooltip content">
<Tooltip.Arrow width={10} height={5} />
<div>
<h3>Tooltip Title</h3>
<p>This is a tooltip with complex HTML content, including:</p>
<ul>
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
</ul>
</div>
</Tooltip.Panel>
</Tooltip.Root>
);
});
13 changes: 13 additions & 0 deletions apps/website/src/routes/docs/headless/tooltip/examples/flip.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { component$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
return (
<Tooltip.Root gutter={4} flip>
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel class="tooltip-panel">
Tooltip content with flip enabled
</Tooltip.Panel>
</Tooltip.Root>
);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { component$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
return (
<Tooltip.Root gutter={4} flip>
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel class="tooltip-panel">Floating Tooltip content here</Tooltip.Panel>
</Tooltip.Root>
);
});
11 changes: 11 additions & 0 deletions apps/website/src/routes/docs/headless/tooltip/examples/gutter.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { component$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
return (
<Tooltip.Root gutter={20} flip>
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel class="tooltip-panel">Tooltip content with gutter</Tooltip.Panel>
</Tooltip.Root>
);
});
13 changes: 4 additions & 9 deletions apps/website/src/routes/docs/headless/tooltip/examples/hero.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
import { component$, useStyles$ } from '@builder.io/qwik';
import { component$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
useStyles$(styles);

return (
<Tooltip.Root>
<Tooltip.Trigger class="tooltip-trigger">Hover over me</Tooltip.Trigger>
<Tooltip.Content class="tooltip-content">I'm a tooltip!</Tooltip.Content>
<Tooltip.Root gutter={4} flip>
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel class="tooltip-panel">Tooltip content here</Tooltip.Panel>
</Tooltip.Root>
);
});

// internal
import styles from '../snippets/tooltip.css?inline';
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { component$, useSignal } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
const placement = useSignal<'top' | 'right' | 'bottom' | 'left'>('top');

return (
<div>
<label for="placement">Select Tooltip Placement: </label>
<select
id="placement"
value={placement.value}
onChange$={(e) =>
(placement.value = (e.target as HTMLSelectElement).value as
| 'top'
| 'right'
| 'bottom'
| 'left')
}
>
<option value="top">Top</option>
<option value="right">Right</option>
<option value="bottom">Bottom</option>
<option value="left">Left</option>
</select>

<Tooltip.Root gutter={4} flip placement={placement.value}>
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel
aria-label={`Tooltip content on the ${placement.value}`}
class="tooltip-panel"
>
Tooltip content on the {placement.value}
</Tooltip.Panel>
</Tooltip.Root>
</div>
);
});
12 changes: 12 additions & 0 deletions apps/website/src/routes/docs/headless/tooltip/examples/styling.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { component$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';
import '../snippets/styling.css';

export default component$(() => {
return (
<Tooltip.Root delayDuration={800} gutter={4} flip>
<Tooltip.Trigger class="custom-trigger">Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel class="custom-tooltip-panel">Tooltip content here</Tooltip.Panel>
</Tooltip.Root>
);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { component$ } from '@builder.io/qwik';
import { Tooltip } from '@qwik-ui/headless';

export default component$(() => {
return (
<Tooltip.Root gutter={4} flip>
<Tooltip.Trigger>Hover or Focus me</Tooltip.Trigger>
<Tooltip.Panel class="tooltip-transition">
Tooltip content with transition
</Tooltip.Panel>
</Tooltip.Root>
);
});
Loading

0 comments on commit dd22ec2

Please sign in to comment.