Skip to content

Commit f0507ce

Browse files
committed
Merge branch 'main' into tailwind-v4-tailwind-merge
2 parents 81addf0 + d76a7e1 commit f0507ce

File tree

27 files changed

+207
-108
lines changed

27 files changed

+207
-108
lines changed

apps/website/src/components/navigation-docs/navigation-docs.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { PropsOf, component$ } from '@builder.io/qwik';
2-
import { Link, useLocation } from '@builder.io/qwik-city';
2+
import { useLocation } from '@builder.io/qwik-city';
33
import { ComponentStatus } from '~/_state/component-status.type';
44
import { StatusBadge } from '../component-status-badge/component-status-badge';
55
import { cn } from '@qwik-ui/utils';
@@ -60,7 +60,7 @@ export const DocsNavigation = component$(
6060
const isLinkActive = location.url.pathname === link.href;
6161
return (
6262
<li key={link.name + link.href}>
63-
<Link
63+
<a
6464
class={cn(
6565
buttonVariants({ look: 'ghost' }),
6666
'rounded-base flex h-10 items-center font-sans',
@@ -78,7 +78,7 @@ export const DocsNavigation = component$(
7878
<div>{link.name}</div>
7979
{link.status && <StatusBadge status={link.status} />}
8080
</div>
81-
</Link>
81+
</a>
8282
</li>
8383
);
8484
})}

apps/website/src/routes/docs/headless/popover/index.mdx

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,31 @@ title: Qwik UI | Popover
55
import { statusByComponent } from '~/_state/component-statuses';
66
import Styles from './examples/styles';
77

8-
import { ShowcaseHero, ShowcaseBasic, ShowcaseInspect, ShowcaseAuto, ShowcaseManual, ShowcaseProgrammatic, ShowcaseToggleEvent, ShowcaseFloating, ShowcasePlacement, ShowcaseCorners, ShowcaseFlip, ShowcaseGutter, ShowcaseStyling, ShowcaseAnimation, ShowcaseTransition } from './showcase-components';
9-
import { CodeSnippetFloatingCss, CodeSnippetPopoverCss, CodeSnippetBuildingBlocks } from './code-snippets';
8+
import {
9+
ShowcaseHero,
10+
ShowcaseBasic,
11+
ShowcaseInspect,
12+
ShowcaseAuto,
13+
ShowcaseManual,
14+
ShowcaseProgrammatic,
15+
ShowcaseToggleEvent,
16+
ShowcaseFloating,
17+
ShowcasePlacement,
18+
ShowcaseCorners,
19+
ShowcaseFlip,
20+
ShowcaseGutter,
21+
ShowcaseStyling,
22+
ShowcaseAnimation,
23+
ShowcaseTransition,
24+
} from './showcase-components';
25+
import {
26+
CodeSnippetFloatingCss,
27+
CodeSnippetPopoverCss,
28+
CodeSnippetBuildingBlocks,
29+
} from './code-snippets';
1030

1131
<StatusBanner status={statusByComponent.headless.Popover} />
1232

13-
1433
# Popover
1534

1635
A popup that goes above other content on the page. You can still interact with the rest of the page while the popover is open.
@@ -24,6 +43,7 @@ A popup that goes above other content on the page. You can still interact with t
2443
'Polyfill for unsupported browsers',
2544
'Executes code on interaction',
2645
'Float and position the popover',
46+
'Supports RTL',
2747
]}
2848
/>
2949

@@ -342,9 +362,15 @@ To read more about the popover API you can check it out on:
342362
},
343363
{
344364
name: 'floating',
345-
type: 'boolean | TPlacement',
365+
type: 'boolean | Placement',
346366
description: 'Enables extra JavaScript behavior for floating elements.',
347367
},
368+
{
369+
name: 'strategy',
370+
type: 'absolute | fixed',
371+
description:
372+
'The strategy to use when positioning the floating element. The default value is absolute, which suites most cases, while fixed position might be better in legacy browsers like iOS 15.4.',
373+
},
348374
{
349375
name: 'anchorRef',
350376
type: 'Signal',

apps/website/src/routes/docs/headless/tooltip/index.mdx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,19 @@ title: Qwik UI | Tooltip
44

55
import { statusByComponent } from '~/_state/component-statuses';
66

7-
import { ShowcaseHero, ShowcaseFloating, ShowcasePlacement, ShowcaseFlip, ShowcaseGutter, ShowcaseStyling, ShowcaseAnimation, ShowcaseTransition, ShowcaseOnChange, ShowcaseBasic, ShowcaseComplex } from './showcase-components';
7+
import {
8+
ShowcaseHero,
9+
ShowcaseFloating,
10+
ShowcasePlacement,
11+
ShowcaseFlip,
12+
ShowcaseGutter,
13+
ShowcaseStyling,
14+
ShowcaseAnimation,
15+
ShowcaseTransition,
16+
ShowcaseOnChange,
17+
ShowcaseBasic,
18+
ShowcaseComplex,
19+
} from './showcase-components';
820

921
<StatusBanner status={statusByComponent.headless.Tooltip} />
1022

@@ -25,6 +37,7 @@ A text label that appears when a user hovers, focuses, or touches an element.
2537
'Accessibility with ARIA roles and keyboard interactions',
2638
'Flipping to avoid overflow',
2739
'Automatic placement adjustment',
40+
'Supports RTL',
2841
]}
2942
/>
3043

@@ -42,9 +55,7 @@ export default component$(() => {
4255
<Tooltip.Trigger>
4356
<button>Hover or Focus me</button>
4457
</Tooltip.Trigger>
45-
<Tooltip.Panel aria-label="Tooltip content">
46-
Tooltip content here
47-
</Tooltip.Panel>
58+
<Tooltip.Panel aria-label="Tooltip content">Tooltip content here</Tooltip.Panel>
4859
</Tooltip.Root>
4960
);
5061
});

apps/website/src/routes/docs/styled/(getting-started)/install/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ pnpm qwik-ui add input
3535
### Step 1: Install the Headless Kit and qwikest icons
3636

3737
```zsh
38-
pnpm i -D @qwik-ui/headless @qwikest/icons tailwindcss-animate
38+
pnpm i -D @qwik-ui/headless @qwikest/icons tailwindcss-animate @qwik-ui/utils class-variance-authority
3939
```
4040

4141
### Step 2: copy/paste your theme config

apps/website/src/routes/docs/styled/checkbox/index.mdx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,23 @@ qwik-ui add checkbox
3030
import { $, type PropsOf, component$ } from '@builder.io/qwik';
3131
import { cn } from '@qwik-ui/utils';
3232

33-
export const Checkbox = component$<PropsOf<'input'>>(
34-
({ id, name, ['bind:checked']: checkedSig, checked, onInput$, ...props }) => {
33+
export const Checkbox = component$<Partial<PropsOf<'input'> & { type?: 'checkbox' }>>(
34+
({ id, name, ['bind:checked']: bindSig, checked, onInput$, ...props }) => {
3535
const inputId = id || name;
3636
return (
3737
<input
38-
type="checkbox"
3938
{...props}
39+
type="checkbox"
4040
// workaround to support two way data-binding on the Input component (https://github.com/QwikDev/qwik/issues/3926)
41-
checked={checkedSig ? checkedSig.value : checked}
42-
onInput$={checkedSig ? $((_, el) => (checkedSig.value = el.checked)) : onInput$}
43-
data-checked={checked || checkedSig?.value || ''}
41+
checked={bindSig ? bindSig.value : checked}
42+
onInput$={[bindSig && $((_, el) => (bindSig.value = el.checked)), onInput$]}
43+
data-checked={checked || bindSig?.value || ''}
4444
class={cn(
4545
'peer h-4 w-4 shrink-0 border-primary text-primary accent-primary ring-offset-background focus:ring-ring focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',
4646
props.class,
4747
)}
4848
id={inputId}
49+
name={name}
4950
/>
5051
);
5152
},

apps/website/src/routes/docs/styled/input/index.mdx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,26 +31,27 @@ type InputProps = PropsOf<'input'> & {
3131
};
3232

3333
export const Input = component$<InputProps>(
34-
({ name, error, id, ['bind:value']: valueSig, value, onInput$, ...props }) => {
34+
({ name, error, id, ['bind:value']: bindSig, value, onInput$, ...props }) => {
3535
const inputId = id || name;
3636

3737
return (
3838
<>
3939
<input
4040
{...props}
4141
aria-errormessage={`${inputId}-error`}
42-
aria-invaid={!!error}
42+
aria-invalid={!!error}
4343
// workaround to support two way data-binding on the Input component (https://github.com/QwikDev/qwik/issues/3926)
44-
value={valueSig ? valueSig.value : value}
45-
onInput$={valueSig ? $((__, el) => (valueSig.value = el.value)) : onInput$}
44+
value={bindSig ? bindSig.value : value}
45+
onInput$={[bindSig && $((_, el) => (bindSig.value = el.value)), onInput$]}
4646
class={cn(
4747
'flex h-12 w-full rounded-base border border-input bg-background px-3 py-1 text-sm text-foreground shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',
4848
props.class,
4949
)}
5050
id={inputId}
51+
name={name}
5152
/>
5253
{error && (
53-
<div id={`${inputId}-error`} class="text-alert mt-1 text-sm">
54+
<div id={`${inputId}-error`} class="mt-1 text-sm text-alert">
5455
{error}
5556
</div>
5657
)}

apps/website/src/routes/docs/styled/textarea/index.mdx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,21 @@ type TextareaProps = PropsOf<'textarea'> & {
3131
};
3232

3333
export const Textarea = component$<TextareaProps>(
34-
({ id, name, error, ['bind:value']: valueSig, value, onInput$, ...props }) => {
34+
({ id, name, error, ['bind:value']: bindSig, value, onInput$, ...props }) => {
3535
const textareaId = id || name;
3636
return (
3737
<>
3838
<textarea
3939
{...props}
4040
// workaround to support two way data-binding on the Input component (https://github.com/QwikDev/qwik/issues/3926)
41-
value={valueSig ? valueSig.value : value}
42-
onInput$={valueSig ? $((__, el) => (valueSig.value = el.value)) : onInput$}
41+
value={bindSig ? bindSig.value : value}
42+
onInput$={[bindSig && $((_, el) => (bindSig.value = el.value)), onInput$]}
4343
class={cn(
4444
'[&::-webkit-scrollbar-track]:bg-blue flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',
4545
props.class,
4646
)}
4747
id={textareaId}
48+
name={name}
4849
/>
4950
{error && <div id={`${textareaId}-error`}>{error}</div>}
5051
</>

cla-signs/v1/cla.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,22 @@
591591
"created_at": "2025-06-14T18:27:16Z",
592592
"repoId": 545159943,
593593
"pullRequestNo": 1109
594+
},
595+
{
596+
"name": "Caesarovich",
597+
"id": 38408878,
598+
"comment_id": 3027890969,
599+
"created_at": "2025-07-02T13:27:28Z",
600+
"repoId": 545159943,
601+
"pullRequestNo": 1110
602+
},
603+
{
604+
"name": "ignatvilesov",
605+
"id": 4927804,
606+
"comment_id": 3061111709,
607+
"created_at": "2025-07-11T07:57:53Z",
608+
"repoId": 545159943,
609+
"pullRequestNo": 1114
594610
}
595611
]
596612
}

packages/kit-headless/CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# Changelog
22

3+
## 0.7.0
4+
5+
### Minor Changes
6+
7+
- minor: adds strategy prop to use when positioning the floating element in popover (by [@ignatvilesov](https://github.com/ignatvilesov) in [#1114](https://github.com/qwikifiers/qwik-ui/pull/1114))
8+
9+
### Patch Changes
10+
11+
- 🐞🩹 Modal.Close now of type button (by [@Caesarovich](https://github.com/Caesarovich) in [#1110](https://github.com/qwikifiers/qwik-ui/pull/1110))
12+
13+
- Support rtl for elements using floating ui (by [@omerman](https://github.com/omerman) in [#1109](https://github.com/qwikifiers/qwik-ui/pull/1109))
14+
315
## 0.6.8
416

517
### Patch Changes

packages/kit-headless/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@qwik-ui/headless",
3-
"version": "0.6.8",
3+
"version": "0.7.0",
44
"description": "Qwik UI headless components library",
55
"publishConfig": {
66
"access": "public"

0 commit comments

Comments
 (0)