@abhivarde/svelte-drawer 1.0.4 → 1.0.5
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.
- package/README.md +31 -17
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -463,31 +463,34 @@ Automatically save and restore drawer state across page reloads.
|
|
|
463
463
|
|
|
464
464
|
### Auto Height (AI & Dynamic Content)
|
|
465
465
|
|
|
466
|
-
Use `autoHeight` on `DrawerContent` when your drawer content changes height at runtime
|
|
466
|
+
Use `autoHeight` on `DrawerContent` when your drawer content changes height at runtime like AI streaming responses, multi-step forms, search results, or dynamic lists.
|
|
467
467
|
|
|
468
468
|
```svelte
|
|
469
469
|
<script>
|
|
470
|
-
import {
|
|
470
|
+
import {
|
|
471
|
+
Drawer,
|
|
472
|
+
DrawerOverlay,
|
|
473
|
+
DrawerContent,
|
|
474
|
+
DrawerHandle
|
|
475
|
+
} from '@abhivarde/svelte-drawer';
|
|
471
476
|
|
|
472
477
|
let open = $state(false);
|
|
473
478
|
let streaming = $state(false);
|
|
474
479
|
let text = $state('');
|
|
475
480
|
|
|
476
|
-
const lines = [
|
|
477
|
-
'Sure! Here is what autoHeight does.',
|
|
478
|
-
'\n\nIt watches your content as it changes.',
|
|
479
|
-
'\n\nWhen content grows, the drawer follows automatically.',
|
|
480
|
-
'\n\nNo magic numbers. No hardcoded heights. Just works.',
|
|
481
|
-
];
|
|
482
|
-
|
|
483
481
|
async function simulate() {
|
|
484
482
|
open = true;
|
|
485
483
|
streaming = true;
|
|
486
484
|
text = '';
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
485
|
+
|
|
486
|
+
const content =
|
|
487
|
+
'Sure! Here is what autoHeight does. It watches your content with a ResizeObserver. When content grows, the drawer follows automatically. No magic numbers, no hardcoded heights, it just works smoothly with streaming UI like AI chat apps.';
|
|
488
|
+
|
|
489
|
+
for (let i = 0; i < content.length; i++) {
|
|
490
|
+
text += content[i];
|
|
491
|
+
await new Promise(r => setTimeout(r, 18));
|
|
490
492
|
}
|
|
493
|
+
|
|
491
494
|
streaming = false;
|
|
492
495
|
}
|
|
493
496
|
</script>
|
|
@@ -496,12 +499,22 @@ Use `autoHeight` on `DrawerContent` when your drawer content changes height at r
|
|
|
496
499
|
|
|
497
500
|
<Drawer bind:open>
|
|
498
501
|
<DrawerOverlay />
|
|
499
|
-
|
|
502
|
+
|
|
503
|
+
<DrawerContent
|
|
504
|
+
autoHeight
|
|
505
|
+
class="bg-gray-100 flex flex-col rounded-t-[10px] fixed bottom-0 left-0 right-0 outline-none"
|
|
506
|
+
>
|
|
500
507
|
<div class="p-4 bg-white rounded-t-[10px]">
|
|
501
508
|
<DrawerHandle class="mb-8" />
|
|
502
|
-
|
|
509
|
+
|
|
510
|
+
<p class="font-medium mb-2 text-gray-900">
|
|
511
|
+
AI Response
|
|
512
|
+
</p>
|
|
513
|
+
|
|
503
514
|
{#if text}
|
|
504
|
-
<p class="text-sm text-gray-600
|
|
515
|
+
<p class="text-sm text-gray-600 leading-relaxed">
|
|
516
|
+
{text}{streaming ? '▌' : ''}
|
|
517
|
+
</p>
|
|
505
518
|
{/if}
|
|
506
519
|
</div>
|
|
507
520
|
</DrawerContent>
|
|
@@ -512,8 +525,9 @@ Use `autoHeight` on `DrawerContent` when your drawer content changes height at r
|
|
|
512
525
|
|
|
513
526
|
- `height: auto` is applied to the drawer when `autoHeight` is true
|
|
514
527
|
- The drawer grows and shrinks naturally as content changes
|
|
515
|
-
-
|
|
516
|
-
-
|
|
528
|
+
- Perfect for AI streaming, dynamic lists, forms, and async content
|
|
529
|
+
- The slide animation remains smooth since it uses CSS transforms separately
|
|
530
|
+
- Fully compatible with snap points, portals, and existing props
|
|
517
531
|
- Zero impact on drawers that do not use `autoHeight` (opt-in, default `false`)
|
|
518
532
|
|
|
519
533
|
## Variants
|