Skip to content

Commit 570c2dc

Browse files
committed
feat(component): add wrapped headless toggle to daisy implementation
1 parent 8b21de7 commit 570c2dc

File tree

4 files changed

+44
-6
lines changed

4 files changed

+44
-6
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { component$, PropFunction, QwikMouseEvent } from '@builder.io/qwik';
2+
import { Toggle as HeadlessToggle } from '@qwik-ui/headless';
3+
4+
interface ToggleProps {
5+
class?: string;
6+
checked: boolean;
7+
label?: string;
8+
onClick$: PropFunction<(evt: QwikMouseEvent) => void>;
9+
}
10+
11+
export const Toggle = component$(
12+
({ checked, label, ...props }: ToggleProps) => {
13+
return (
14+
<div class="form-control">
15+
<label class="label cursor-pointer">
16+
{label && <span class="label-text">{label}</span>}
17+
<HeadlessToggle class="toggle" pressed={checked} {...props} />
18+
</label>
19+
</div>
20+
);
21+
}
22+
);

packages/daisy/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export * from './components/collapse/collapse';
22
export * from './components/tabs';
3+
export * from './components/toggle/toggle';

packages/headless/src/components/toggle/toggle.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { component$, PropFunction, useSignal } from '@builder.io/qwik';
1+
import {
2+
component$,
3+
PropFunction,
4+
QwikMouseEvent,
5+
useSignal,
6+
} from '@builder.io/qwik';
27

38
interface ToggleProps {
49
value?: string;
@@ -14,7 +19,7 @@ interface ToggleProps {
1419
*/
1520
defaultPressed?: boolean;
1621

17-
onClick$: PropFunction<(evt: Event) => void>;
22+
onClick$: PropFunction<(evt: QwikMouseEvent) => void>;
1823
}
1924

2025
export const Toggle = component$((props: ToggleProps) => {
@@ -35,12 +40,12 @@ export const Toggle = component$((props: ToggleProps) => {
3540
aria-pressed={pressedState.value}
3641
data-state={pressedState.value ? 'on' : 'off'}
3742
data-disabled={disabled ? '' : undefined}
38-
onClick$={(event) => {
43+
onClick$={(event: QwikMouseEvent<HTMLInputElement>) => {
3944
if (!disabled) {
4045
pressedState.value = !pressedState.value;
4146
if (onClick$) {
4247
// REPORT MISSING QwikMouseEvent to Qwik github
43-
onClick$(event as any);
48+
onClick$(event);
4449
}
4550
}
4651
}}

packages/website/src/routes/daisy-example/index.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { component$, useSignal } from '@builder.io/qwik';
22
import type { DocumentHead } from '@builder.io/qwik-city';
3-
import { Collapse, Tabs, Tab, TabPanel } from '@qwik-ui/daisy';
3+
import { Collapse, Tabs, Tab, TabPanel, Toggle } from '@qwik-ui/daisy';
44

55
export default component$(() => {
66
const tabs = ['Tab 1', 'Tab 2', 'Tab 3'];
77
const activeTab = useSignal(0);
8+
const toggleChecked = useSignal(false);
89

910
return (
1011
<div>
@@ -42,10 +43,19 @@ export default component$(() => {
4243
</Tabs>
4344
</div>
4445

46+
<div>
47+
<Toggle
48+
checked={toggleChecked.value}
49+
onClick$={() => {
50+
toggleChecked.value = !toggleChecked.value;
51+
}}
52+
/>
53+
</div>
54+
4555
{/* hack to prevent tailwind purge */}
4656
<div
4757
style={{ display: 'none' }}
48-
class="collapse collapse-title text-xl font-medium collapse-content max-h-fit tabs tabs-boxed tab tab-active tab-bordered tab-lifted"
58+
class="collapse collapse-title text-xl font-medium collapse-content max-h-fit tabs tabs-boxed tab tab-active tab-bordered tab-lifted form-control abel cursor-pointer toggle label-text"
4959
/>
5060
</div>
5161
);

0 commit comments

Comments
 (0)