@abhivarde/svelte-drawer 1.0.3 → 1.0.4

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.
Files changed (2) hide show
  1. package/README.md +32 -14
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -21,7 +21,7 @@ A drawer component for Svelte 5, inspired by [Vaul](https://github.com/emilkowal
21
21
  - ✅ Fully accessible with keyboard navigation
22
22
  - ✅ Full **TypeScript** support
23
23
  - ✅ Customizable styling with **Tailwind CSS**
24
- - ✅ **Auto height** resizes to match content (AI streaming, forms, dynamic lists)
24
+ - ✅ **Auto height** for dynamic content (AI streaming, forms, dynamic lists)
25
25
 
26
26
  ## Installation
27
27
 
@@ -470,33 +470,51 @@ Use `autoHeight` on `DrawerContent` when your drawer content changes height at r
470
470
  import { Drawer, DrawerOverlay, DrawerContent, DrawerHandle } from '@abhivarde/svelte-drawer';
471
471
 
472
472
  let open = $state(false);
473
- let streamedText = $state('Thinking...');
473
+ let streaming = $state(false);
474
+ let text = $state('');
474
475
 
475
- // simulate streaming
476
- function openAndStream() {
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
+ async function simulate() {
477
484
  open = true;
478
- setTimeout(() => streamedText = 'Here is the AI response. It grows as tokens arrive, and the drawer follows automatically.', 1000);
485
+ streaming = true;
486
+ text = '';
487
+ for (const line of lines) {
488
+ await new Promise(r => setTimeout(r, 500));
489
+ text += line;
490
+ }
491
+ streaming = false;
479
492
  }
480
493
  </script>
481
494
 
482
- <button onclick={openAndStream}>Ask AI</button>
495
+ <button onclick={simulate}>Ask AI</button>
483
496
 
484
497
  <Drawer bind:open>
485
- <DrawerOverlay class="fixed inset-0 bg-black/40" />
486
- <DrawerContent autoHeight class="fixed bottom-0 left-0 right-0 bg-white rounded-t-lg p-4">
487
- <DrawerHandle class="mb-4" />
488
- <p>{streamedText}</p>
498
+ <DrawerOverlay />
499
+ <DrawerContent autoHeight class="bg-gray-100 flex flex-col rounded-t-[10px] fixed bottom-0 left-0 right-0 outline-none">
500
+ <div class="p-4 bg-white rounded-t-[10px]">
501
+ <DrawerHandle class="mb-8" />
502
+ <p class="font-medium mb-2 text-gray-900">AI Response</p>
503
+ {#if text}
504
+ <p class="text-sm text-gray-600 whitespace-pre-wrap leading-relaxed">{text}{streaming ? '▌' : ''}</p>
505
+ {/if}
506
+ </div>
489
507
  </DrawerContent>
490
508
  </Drawer>
491
509
  ```
492
510
 
493
511
  **How it works:**
494
512
 
495
- - A `ResizeObserver` watches the inner content element
496
- - When content height changes, it drives the existing `drawerPosition` tween
497
- - The drawer animates smoothly to the correct height no magic numbers needed
513
+ - `height: auto` is applied to the drawer when `autoHeight` is true
514
+ - The drawer grows and shrinks naturally as content changes
515
+ - The slide-in animation is unaffected since it runs via CSS transform separately
498
516
  - Fully compatible with snap points, portals, and all existing props
499
- - Zero impact on drawers that don't use `autoHeight` (opt-in, default `false`)
517
+ - Zero impact on drawers that do not use `autoHeight` (opt-in, default `false`)
500
518
 
501
519
  ## Variants
502
520
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abhivarde/svelte-drawer",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "A drawer component for Svelte 5, inspired by Vaul",
5
5
  "author": "Abhi Varde",
6
6
  "license": "MIT",