Skip to content

Commit 0eafb6f

Browse files
docs(update docs examples): updating the docs examples
n
1 parent b90d610 commit 0eafb6f

File tree

7 files changed

+320
-118
lines changed

7 files changed

+320
-118
lines changed

apps/website/src/routes/docs/_components/preview-code-example/preview-code-example.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { component$, Slot, useStyles$ } from '@builder.io/qwik';
22
import { Tab, TabList, TabPanel, Tabs } from '@qwik-ui/headless';
33

4-
export const PreviewCodeExample = component$(() => {
4+
export const PreviewCodeExample = component$(({ ...props }) => {
55
useStyles$(`
66
.dark .previewCodeExampleSelectedTab{
77
background-color: var(--qwikui-purple-600);
@@ -15,23 +15,24 @@ export const PreviewCodeExample = component$(() => {
1515
`);
1616
return (
1717
<Tabs
18+
{...props}
1819
class="mb-12 shadow-light-medium dark:shadow-dark-medium rounded-xl"
1920
selectedClassName="previewCodeExampleSelectedTab"
2021
>
21-
<TabList class="text-white flex rounded-t-xl bg-qwikui-blue-700 dark:bg-qwikui-purple-800 border-slate-600 dark:border-slate-400 border-[1.5px] border-b-0 shadow-light-medium dark:shadow-dark-medium">
22+
<TabList class="text-white flex rounded-t-xl bg-qwikui-blue-700 dark:bg-qwikui-purple-800 border-qwikui-blue-300 dark:border-qwikui-purple-200 border-[1.5px] border-b-0 shadow-light-medium dark:shadow-dark-medium">
2223
<Tab class="px-4 py-2 rounded-tl-[.625rem] hover:bg-qwikui-blue-500 dark:hover:bg-qwikui-purple-600">
2324
Preview
2425
</Tab>
2526
<Tab class="px-4 py-2 hover:bg-qwikui-blue-500 dark:hover:bg-qwikui-purple-600">
2627
Code
2728
</Tab>
2829
</TabList>
29-
<TabPanel class="rounded-b-xl shadow-light-medium bg-slate-800 dark:shadow-dark-medium border-slate-600 border-[1.5px] p-4 dark:border-slate-400 md:p-12 bg-slate-200 dark:bg-slate-950">
30+
<TabPanel class="rounded-b-xl shadow-light-medium bg-slate-800 dark:shadow-dark-medium border-qwikui-blue-300 border-[1.5px] p-4 dark:border-qwikui-purple-200 md:p-12 bg-slate-200 dark:bg-slate-950">
3031
<section class="flex flex-col items-center">
3132
<Slot name="actualComponent" />
3233
</section>
3334
</TabPanel>
34-
<TabPanel class="rounded-b-xl p-4 md:p-12 bg-slate-900 border-[1.5px] border-slate-600 dark:border-slate-400">
35+
<TabPanel class="rounded-b-xl p-4 md:p-12 bg-slate-900 border-[1.5px] border-qwikui-blue-300 dark:border-qwikui-purple-200">
3536
<section class="overflow-auto">
3637
<Slot name="codeExample" />
3738
</section>

apps/website/src/routes/docs/headless/(components)/combobox/examples.tsx

Lines changed: 184 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,16 @@ import {
77
ComboboxListbox,
88
ComboboxPortal,
99
ComboboxTrigger,
10-
Tooltip,
11-
} from '@qwik-ui/headless';
12-
13-
import {
1410
ComboboxOption,
1511
type ResolvedOption,
16-
} from '../../../../../../../../packages/kit-headless/src/components/combobox';
12+
} from '@qwik-ui/headless';
1713

18-
import { PreviewCodeExample } from '../../../_components/preview-code-example/preview-code-example';
14+
// import {
15+
// ComboboxOption,
16+
// type ResolvedOption,
17+
// } from '../../../../../../../../packages/kit-headless/src/components/combobox';
1918

20-
const stringsExample = [
21-
'Caleb',
22-
'Olivia',
23-
'James',
24-
'Ava',
25-
'Noah',
26-
'Emma',
27-
'Oliver',
28-
'Amelia',
29-
'Theodore',
30-
'Elizabeth',
31-
];
19+
import { PreviewCodeExample } from '../../../_components/preview-code-example/preview-code-example';
3220

3321
type Trainer = {
3422
testValue: string;
@@ -59,15 +47,15 @@ export const HeroExample = component$(() => {
5947
optionValueKey="testValue"
6048
optionLabelKey="testLabel"
6149
optionDisabledKey="disabled"
62-
renderOption$={(resolved, index: number) => (
50+
renderOption$={(option, index: number) => (
6351
<ComboboxOption
64-
key={resolved.key}
65-
resolved={resolved}
52+
key={option.key}
53+
resolved={option}
6654
index={index}
6755
class="aria-disabled:text-slate-600 aria-disabled:hover:bg-slate-700 rounded-sm px-2 hover:bg-slate-500 aria-selected:bg-slate-500 text-white border-2 border-transparent aria-selected:border-slate-200 group"
6856
>
6957
<span class="block group-aria-selected:translate-x-[3px] transition-transform duration-350">
70-
{resolved.option.testLabel}
58+
{option.option.testLabel}
7159
</span>
7260
</ComboboxOption>
7361
)}
@@ -142,14 +130,14 @@ export const StringCombobox = component$(() => {
142130
return option.toLowerCase().startsWith(value.toLowerCase());
143131
})
144132
}
145-
renderOption$={(resolved: ResolvedOption, index: number) => (
133+
renderOption$={(option: ResolvedOption, index: number) => (
146134
<ComboboxOption
147-
key={resolved.key}
135+
key={option.key}
148136
class="aria-disabled:text-slate-600 aria-disabled:hover:bg-slate-700 rounded-sm px-2 hover:bg-slate-500 aria-selected:bg-slate-500 text-white border-2 border-transparent aria-selected:border-slate-200 group"
149137
index={index}
150-
resolved={resolved}
138+
resolved={option}
151139
>
152-
{resolved.label}
140+
{option.label}
153141
</ComboboxOption>
154142
)}
155143
>
@@ -416,7 +404,7 @@ export const DisabledExample = component$(() => {
416404
myDisabledKey: boolean;
417405
};
418406

419-
const objectExample: Array<DisabledExample> = [
407+
const disabledExample: Array<DisabledExample> = [
420408
{ value: '0', label: 'Enabled', myDisabledKey: false },
421409
{ value: '1', label: 'Enabled', myDisabledKey: false },
422410
{ value: '2', label: 'Disabled', myDisabledKey: true },
@@ -433,7 +421,7 @@ export const DisabledExample = component$(() => {
433421
<div>
434422
<Combobox
435423
class="w-fit"
436-
options={objectExample}
424+
options={disabledExample}
437425
optionDisabledKey="myDisabledKey"
438426
renderOption$={(option: ResolvedOption, index: number) => (
439427
<ComboboxOption
@@ -489,58 +477,136 @@ export const CustomKeysExample = component$(() => {
489477
};
490478

491479
const pokemonExample: Array<Pokemon> = [
492-
{ pokedex: '1', pokemon: 'Bulbasaur', isPokemonCaught: false },
493-
{ pokedex: '2', pokemon: 'Ivysaur', isPokemonCaught: true },
480+
{ pokedex: '1', pokemon: 'Bulbasaur', isPokemonCaught: true },
481+
{ pokedex: '2', pokemon: 'Ivysaur', isPokemonCaught: false },
494482
{ pokedex: '3', pokemon: 'Venusaur', isPokemonCaught: false },
495483
{ pokedex: '4', pokemon: 'Charmander', isPokemonCaught: true },
496-
{ pokedex: '5', pokemon: 'Charmeleon', isPokemonCaught: false },
484+
{ pokedex: '5', pokemon: 'Charmeleon', isPokemonCaught: true },
497485
{ pokedex: '6', pokemon: 'Charizard', isPokemonCaught: true },
498486
{ pokedex: '7', pokemon: 'Squirtle', isPokemonCaught: false },
499-
{ pokedex: '8', pokemon: 'Wartortle', isPokemonCaught: true },
487+
{ pokedex: '8', pokemon: 'Wartortle', isPokemonCaught: false },
500488
];
501489

502-
const isTooltipVisibleSig = useSignal(false);
490+
const isPokemonCaught = useSignal(false);
503491

504492
useVisibleTask$(({ track }) => {
505-
track(() => isTooltipVisibleSig.value);
506-
507-
console.log(isTooltipVisibleSig.value);
493+
track(() => isPokemonCaught.value);
508494
});
509495

510496
return (
511497
<PreviewCodeExample>
512498
<div class="flex flex-col items-center gap-4 p-4" q:slot="actualComponent">
513-
<div>
499+
<div class="relative">
500+
{isPokemonCaught.value && (
501+
<p class="absolute translate-x-[-105%] w-full text-white bg-slate-800 p-4 shadow-dark-medium rounded-md border-2 border-slate-400">
502+
You've already caught this pokemon!
503+
</p>
504+
)}
514505
<Combobox
515506
class="w-fit"
516507
options={pokemonExample}
517508
optionValueKey="pokedex"
518509
optionLabelKey="pokemon"
519510
optionDisabledKey="isPokemonCaught"
511+
renderOption$={(option: ResolvedOption, index: number) => {
512+
const pokemonOption = option.option as Pokemon;
513+
return (
514+
<ComboboxOption
515+
key={option.key}
516+
class="aria-disabled:text-slate-600 aria-disabled:hover:bg-slate-700 rounded-sm px-2 hover:bg-slate-500 aria-selected:bg-slate-500 text-white border-2 border-transparent aria-selected:border-slate-200 group flex justify-between"
517+
index={index}
518+
resolved={option}
519+
onMouseEnter$={() => {
520+
if (option.disabled === true) {
521+
isPokemonCaught.value = true;
522+
}
523+
}}
524+
onMouseLeave$={() => {
525+
isPokemonCaught.value = false;
526+
}}
527+
>
528+
<span>{pokemonOption.pokemon}</span>
529+
<span>{pokemonOption.pokedex}</span>
530+
</ComboboxOption>
531+
);
532+
}}
533+
>
534+
<ComboboxLabel class=" font-semibold text-white">Pokemon 🦏</ComboboxLabel>
535+
<ComboboxControl class="bg-[#1f2532] flex items-center rounded-sm border-slate-400 border-[1px] relative">
536+
<ComboboxInput class="px-2 w-44 bg-slate-900 px-d2 pr-6 text-white placeholder:text-slate-500" />
537+
<ComboboxTrigger class="w-6 h-6 group absolute right-0">
538+
<svg
539+
xmlns="http://www.w3.org/2000/svg"
540+
viewBox="0 0 24 24"
541+
fill="none"
542+
class="stroke-white group-aria-expanded:-rotate-180 transition-transform duration-[450ms]"
543+
stroke-linecap="round"
544+
stroke-width="2"
545+
stroke-linejoin="round"
546+
>
547+
<polyline points="6 9 12 15 18 9"></polyline>
548+
</svg>
549+
</ComboboxTrigger>
550+
</ComboboxControl>
551+
<ComboboxPortal>
552+
<ComboboxListbox
553+
flip={true}
554+
offset={8}
555+
class="w-44 bg-slate-900 px-4 py-2 rounded-sm border-slate-400 border-[1px]"
556+
/>
557+
</ComboboxPortal>
558+
</Combobox>
559+
</div>
560+
</div>
561+
562+
<div q:slot="codeExample">
563+
<Slot />
564+
</div>
565+
</PreviewCodeExample>
566+
);
567+
});
568+
569+
export const FlipExample = component$(() => {
570+
type FlipExample = {
571+
value: string;
572+
label: string;
573+
};
574+
575+
const flipExample: Array<FlipExample> = [
576+
{ value: '0', label: 'Up! ☝️' },
577+
{ value: '1', label: 'Up! ☝️' },
578+
{ value: '2', label: 'Down! 👇' },
579+
{ value: '3', label: 'Up! ☝️' },
580+
{ value: '4', label: 'Down! 👇' },
581+
{ value: '5', label: 'Down! 👇' },
582+
{ value: '6', label: 'Down! 👇' },
583+
{ value: '7', label: 'Up! ☝️' },
584+
];
585+
586+
return (
587+
<PreviewCodeExample>
588+
<div class="flex flex-col items-center gap-4 p-4" q:slot="actualComponent">
589+
<div>
590+
<Combobox
591+
class="w-fit"
592+
options={flipExample}
593+
optionDisabledKey="myDisabledKey"
520594
renderOption$={(option: ResolvedOption, index: number) => (
521595
<ComboboxOption
522596
key={option.key}
523597
class="aria-disabled:text-slate-600 aria-disabled:hover:bg-slate-700 rounded-sm px-2 hover:bg-slate-500 aria-selected:bg-slate-500 text-white border-2 border-transparent aria-selected:border-slate-200 group"
524598
index={index}
525599
resolved={option}
526-
onMouseEnter$={() => {
527-
console.log('Mouse entered');
528-
if (option.disabled !== undefined && option.disabled === true) {
529-
isTooltipVisibleSig.value = true;
530-
}
531-
}}
532-
onMouseLeave$={() => {
533-
console.log('Mouse left');
534-
isTooltipVisibleSig.value = false;
535-
}}
536600
>
537601
{option.label}
538602
</ComboboxOption>
539603
)}
540604
>
541-
<ComboboxLabel class=" font-semibold text-white">Disabled ⛔</ComboboxLabel>
542-
<ComboboxControl class="bg-[#1f2532] flex items-center rounded-sm border-slate-400 border-[1px] relative">
543-
<ComboboxInput class="px-2 w-44 bg-slate-900 px-d2 pr-6 text-white placeholder:text-slate-500" />
605+
<ComboboxLabel class=" font-semibold text-white">
606+
☝️ Scroll up and down with me open! 👇
607+
</ComboboxLabel>
608+
<ComboboxControl class="bg-[#1f2532] flex items-center rounded-sm border-slate-400 border-[1px] relative mt-2">
609+
<ComboboxInput class="px-2 bg-slate-900 px-d2 pr-6 text-white placeholder:text-slate-500" />
544610
<ComboboxTrigger class="w-6 h-6 group absolute right-0">
545611
<svg
546612
xmlns="http://www.w3.org/2000/svg"
@@ -563,13 +629,71 @@ export const CustomKeysExample = component$(() => {
563629
/>
564630
</ComboboxPortal>
565631
</Combobox>
566-
{isTooltipVisibleSig.value && (
567-
<Tooltip
568-
class="w-fit bg-slate-400 text-slate-950 p-4"
569-
content="This Pokemon has already been caught!"
570-
position="top"
571-
/>
572-
)}
632+
</div>
633+
</div>
634+
635+
<div q:slot="codeExample">
636+
<Slot />
637+
</div>
638+
</PreviewCodeExample>
639+
);
640+
});
641+
642+
export const ShiftExample = component$(() => {
643+
const shiftExample = ['Example1', 'Example2', 'Example3'];
644+
const isListboxOpenSig = useSignal(true);
645+
646+
return (
647+
<PreviewCodeExample>
648+
<div
649+
class="flex flex-col items-center gap-4 p-4"
650+
style={{ overflow: 'auto', width: '100%' }}
651+
q:slot="actualComponent"
652+
>
653+
<div class="w-[5000px] flex-shrink-0 flex justify-center">
654+
<Combobox
655+
class="w-fit"
656+
options={shiftExample}
657+
bind:isListboxOpenSig={isListboxOpenSig}
658+
renderOption$={(option: ResolvedOption, index: number) => (
659+
<ComboboxOption
660+
key={option.key}
661+
class="aria-disabled:text-slate-600 aria-disabled:hover:bg-slate-700 rounded-sm px-2 hover:bg-slate-500 aria-selected:bg-slate-500 text-white border-2 border-transparent aria-selected:border-slate-200 group"
662+
index={index}
663+
resolved={option}
664+
>
665+
{option.label}
666+
</ComboboxOption>
667+
)}
668+
>
669+
<ComboboxLabel class=" font-semibold text-white">Fruits 🍓</ComboboxLabel>
670+
<ComboboxControl class="bg-[#1f2532] flex items-center rounded-sm border-slate-400 border-[1px] relative">
671+
<ComboboxInput
672+
class="px-2 w-44 bg-slate-900 px-d2 pr-6 text-white placeholder:text-slate-500"
673+
placeholder="Papaya"
674+
/>
675+
<ComboboxTrigger class="w-6 h-6 group absolute right-0">
676+
<svg
677+
xmlns="http://www.w3.org/2000/svg"
678+
viewBox="0 0 24 24"
679+
fill="none"
680+
class="stroke-white group-aria-expanded:-rotate-180 transition-transform duration-[450ms]"
681+
stroke-linecap="round"
682+
stroke-width="2"
683+
stroke-linejoin="round"
684+
>
685+
<polyline points="6 9 12 15 18 9"></polyline>
686+
</svg>
687+
</ComboboxTrigger>
688+
</ComboboxControl>
689+
<ComboboxPortal>
690+
<ComboboxListbox
691+
offset={8}
692+
shift={true}
693+
class="w-44 bg-slate-900 px-4 py-2 rounded-sm border-slate-400 border-[1px]"
694+
/>
695+
</ComboboxPortal>
696+
</Combobox>
573697
</div>
574698
</div>
575699

@@ -603,14 +727,14 @@ export const ContextExample = component$(() => {
603727
<div class="flex flex-col gap-4" q:slot="actualComponent">
604728
<Combobox
605729
options={animals}
606-
renderOption$={(resolved: ResolvedOption, index: number) => (
730+
renderOption$={(option: ResolvedOption, index: number) => (
607731
<ComboboxOption
608732
index={index}
609-
resolved={resolved}
733+
resolved={option}
610734
class="aria-disabled:text-slate-600 aria-disabled:hover:bg-slate-700 rounded-sm px-2 hover:bg-slate-500 aria-selected:bg-slate-500 text-white border-2 border-transparent aria-selected:border-slate-200 group"
611735
>
612736
<span class="block group-aria-selected:translate-x-[3px] transition-transform duration-350">
613-
{resolved.label}
737+
<span>{option.label}</span>
614738
</span>
615739
</ComboboxOption>
616740
)}

0 commit comments

Comments
 (0)