@dillingerstaffing/strand-svelte 0.15.0 → 0.15.1

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 (38) hide show
  1. package/dist/css/strand-ui.css +1 -1
  2. package/dist/index.js.map +1 -1
  3. package/package.json +2 -2
  4. package/src/components/Alert/Alert.svelte +14 -0
  5. package/src/components/Avatar/Avatar.svelte +13 -0
  6. package/src/components/Badge/Badge.svelte +15 -0
  7. package/src/components/Breadcrumb/Breadcrumb.svelte +18 -0
  8. package/src/components/Button/Button.svelte +14 -0
  9. package/src/components/Card/Card.svelte +15 -0
  10. package/src/components/Checkbox/Checkbox.svelte +13 -0
  11. package/src/components/CodeBlock/CodeBlock.svelte +12 -0
  12. package/src/components/Container/Container.svelte +14 -0
  13. package/src/components/DataReadout/DataReadout.svelte +12 -0
  14. package/src/components/Dialog/Dialog.svelte +15 -0
  15. package/src/components/Divider/Divider.svelte +12 -0
  16. package/src/components/FormField/FormField.svelte +14 -0
  17. package/src/components/Grid/Grid.svelte +16 -0
  18. package/src/components/Input/Input.svelte +12 -0
  19. package/src/components/InstrumentViewport/InstrumentViewport.svelte +14 -0
  20. package/src/components/Link/Link.svelte +13 -0
  21. package/src/components/Nav/Nav.svelte +19 -0
  22. package/src/components/Progress/Progress.svelte +13 -0
  23. package/src/components/Radio/Radio.svelte +14 -0
  24. package/src/components/ScrollReveal/ScrollReveal.svelte +14 -0
  25. package/src/components/Section/Section.svelte +16 -0
  26. package/src/components/Select/Select.svelte +17 -0
  27. package/src/components/Skeleton/Skeleton.svelte +14 -0
  28. package/src/components/Slider/Slider.svelte +13 -0
  29. package/src/components/Spinner/Spinner.svelte +12 -0
  30. package/src/components/Stack/Stack.svelte +15 -0
  31. package/src/components/Switch/Switch.svelte +13 -0
  32. package/src/components/Table/Table.svelte +21 -0
  33. package/src/components/Tabs/Tabs.svelte +20 -0
  34. package/src/components/Tag/Tag.svelte +14 -0
  35. package/src/components/Textarea/Textarea.svelte +13 -0
  36. package/src/components/Toast/Toast.svelte +12 -0
  37. package/src/components/Toast/ToastProvider.svelte +14 -0
  38. package/src/components/Tooltip/Tooltip.svelte +14 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dillingerstaffing/strand-svelte",
3
- "version": "0.15.0",
3
+ "version": "0.15.1",
4
4
  "description": "Strand UI - Svelte component library built on the Strand Design Language",
5
5
  "author": "Dillinger Staffing <engineering@dillingerstaffing.com> (https://dillingerstaffing.com)",
6
6
  "license": "MIT",
@@ -55,7 +55,7 @@
55
55
  "svelte": "^4.0.0 || ^5.0.0"
56
56
  },
57
57
  "dependencies": {
58
- "@dillingerstaffing/strand": "^0.15.0"
58
+ "@dillingerstaffing/strand": "^0.15.1"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@sveltejs/vite-plugin-svelte": "^5.0.0",
@@ -1,4 +1,18 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Contextual feedback banner for status messages, warnings, and errors.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Alert } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Alert status="success" dismissible ondismiss={() => {}}>
12
+ Operation completed successfully.
13
+ </Alert>
14
+ ```
15
+ -->
2
16
  <script lang="ts">
3
17
  /** Visual status of the alert */
4
18
  export let status: 'info' | 'success' | 'warning' | 'error' = 'info'
@@ -1,4 +1,17 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Circular user representation with image, initials fallback, and multiple sizes.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Avatar } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Avatar src="/photo.jpg" alt="Jane Doe" size="lg" />
12
+ <Avatar initials="JD" size="md" />
13
+ ```
14
+ -->
2
15
  <script lang="ts">
3
16
  /** Image URL */
4
17
  export let src: string | undefined = undefined
@@ -1,4 +1,19 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Small status indicator or notification count, displayed inline or overlaid on content.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Badge } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Badge variant="count" status="red" count={5}>
12
+ <button>Notifications</button>
13
+ </Badge>
14
+ <Badge variant="dot" status="teal" />
15
+ ```
16
+ -->
2
17
  <script lang="ts">
3
18
  /** Badge display mode */
4
19
  export let variant: 'dot' | 'count' = 'count'
@@ -1,4 +1,22 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Hierarchical navigation path showing the current page location.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Breadcrumb } from '@dillingerstaffing/strand-svelte';
9
+
10
+ const items = [
11
+ { label: 'Home', href: '/' },
12
+ { label: 'Settings', href: '/settings' },
13
+ { label: 'Profile' },
14
+ ];
15
+ </script>
16
+
17
+ <Breadcrumb {items} />
18
+ ```
19
+ -->
2
20
  <script lang="ts">
3
21
  export interface BreadcrumbItem {
4
22
  label: string
@@ -1,4 +1,18 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Primary action trigger with multiple visual variants and sizes.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Button } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Button variant="primary" size="md" onclick={() => {}}>
12
+ Submit
13
+ </Button>
14
+ ```
15
+ -->
2
16
  <script lang="ts">
3
17
  /** Visual style variant */
4
18
  export let variant: 'primary' | 'secondary' | 'ghost' | 'danger' = 'primary'
@@ -1,4 +1,19 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Contained surface for grouping related content with elevation and padding options.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Card } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Card variant="elevated" padding="lg">
12
+ <h3>Card Title</h3>
13
+ <p>Card content goes here.</p>
14
+ </Card>
15
+ ```
16
+ -->
2
17
  <script lang="ts">
3
18
  /** Visual style variant */
4
19
  export let variant: 'elevated' | 'outlined' | 'interactive' = 'elevated'
@@ -1,4 +1,17 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Toggle control for boolean or indeterminate selections with optional label.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Checkbox } from '@dillingerstaffing/strand-svelte';
9
+ let accepted = false;
10
+ </script>
11
+
12
+ <Checkbox bind:checked={accepted} label="Accept terms" />
13
+ ```
14
+ -->
2
15
  <script lang="ts">
3
16
  /** Controlled checked state */
4
17
  export let checked: boolean = false
@@ -1,4 +1,16 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Syntax-highlighted code display with optional language label and copy-to-clipboard.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { CodeBlock } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <CodeBlock code="const x = 42;" language="js" copyable />
12
+ ```
13
+ -->
2
14
  <script lang="ts">
3
15
  import { onDestroy } from 'svelte'
4
16
 
@@ -1,4 +1,18 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Centered max-width wrapper for constraining page content.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Container } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Container size="default">
12
+ <p>Content constrained to default max width.</p>
13
+ </Container>
14
+ ```
15
+ -->
2
16
  <script lang="ts">
3
17
  /** Max-width constraint */
4
18
  export let size: 'narrow' | 'default' | 'wide' | 'full' = 'default'
@@ -1,4 +1,16 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Instrument-panel metric display with overline label and prominent value.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { DataReadout } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <DataReadout label="Conversion Rate" value="94%" size="lg" />
12
+ ```
13
+ -->
2
14
  <script lang="ts">
3
15
  /** Overline label text */
4
16
  export let label: string
@@ -1,4 +1,19 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Modal overlay with focus trapping, scroll lock, and backdrop click dismissal.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Dialog } from '@dillingerstaffing/strand-svelte';
9
+ let isOpen = false;
10
+ </script>
11
+
12
+ <Dialog open={isOpen} title="Confirm" onclose={() => isOpen = false}>
13
+ <p>Are you sure?</p>
14
+ </Dialog>
15
+ ```
16
+ -->
2
17
  <script lang="ts">
3
18
  import { onDestroy, tick } from 'svelte'
4
19
 
@@ -1,4 +1,16 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Visual separator line between content sections, horizontal or vertical.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Divider } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Divider direction="horizontal" label="OR" />
12
+ ```
13
+ -->
2
14
  <script lang="ts">
3
15
  /** Separator direction */
4
16
  export let direction: 'horizontal' | 'vertical' = 'horizontal'
@@ -1,4 +1,18 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Form control wrapper providing label, hint text, error messaging, and required indicator.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { FormField, Input } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <FormField label="Email" htmlFor="email" hint="Work email preferred" required>
12
+ <Input id="email" type="email" />
13
+ </FormField>
14
+ ```
15
+ -->
2
16
  <script lang="ts">
3
17
  /** Label text */
4
18
  export let label: string
@@ -1,4 +1,20 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ CSS Grid layout with configurable column count and gap spacing.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Grid, Card } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Grid columns={3} gap={6}>
12
+ <Card>Item 1</Card>
13
+ <Card>Item 2</Card>
14
+ <Card>Item 3</Card>
15
+ </Grid>
16
+ ```
17
+ -->
2
18
  <script lang="ts">
3
19
  /** Number of equal-width columns */
4
20
  export let columns: number = 1
@@ -1,4 +1,16 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Text input field with optional leading/trailing addons and error state.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Input } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Input type="email" placeholder="you@example.com" />
12
+ ```
13
+ -->
2
14
  <script lang="ts">
3
15
  /** Input type */
4
16
  export let type: 'text' | 'email' | 'password' | 'search' | 'number' = 'text'
@@ -1,4 +1,18 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Recessed dark surface for displaying instrument-style UI components.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { InstrumentViewport, DataReadout } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <InstrumentViewport grid>
12
+ <DataReadout label="Uptime" value="99.9%" />
13
+ </InstrumentViewport>
14
+ ```
15
+ -->
2
16
  <script lang="ts">
3
17
  /** Show grid overlay lines */
4
18
  export let grid: boolean = false
@@ -1,4 +1,17 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Styled anchor element with external-link handling and visual variants.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Link } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Link href="/docs" variant="cta">Read the docs</Link>
12
+ <Link href="https://example.com" external>External site</Link>
13
+ ```
14
+ -->
2
15
  <script lang="ts">
3
16
  /** URL destination */
4
17
  export let href: string
@@ -1,4 +1,23 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Top-level navigation bar with logo slot, link items, actions, and responsive mobile menu.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Nav } from '@dillingerstaffing/strand-svelte';
9
+
10
+ const items = [
11
+ { label: 'Home', href: '/', active: true },
12
+ { label: 'About', href: '/about' },
13
+ ];
14
+ </script>
15
+
16
+ <Nav {items} glass>
17
+ <img slot="logo" src="/logo.svg" alt="Brand" />
18
+ </Nav>
19
+ ```
20
+ -->
2
21
  <script lang="ts">
3
22
  export interface NavItem {
4
23
  label: string
@@ -1,4 +1,17 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Determinate or indeterminate progress indicator in bar or ring form.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Progress } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Progress variant="bar" value={65} size="md" />
12
+ <Progress variant="ring" size="lg" />
13
+ ```
14
+ -->
2
15
  <script lang="ts">
3
16
  /** Visual variant */
4
17
  export let variant: 'bar' | 'ring' = 'bar'
@@ -1,4 +1,18 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Single-selection control for use within a radio group.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Radio } from '@dillingerstaffing/strand-svelte';
9
+ let selected = 'pro';
10
+ </script>
11
+
12
+ <Radio name="plan" value="pro" label="Pro" checked={selected === 'pro'} />
13
+ <Radio name="plan" value="free" label="Free" checked={selected === 'free'} />
14
+ ```
15
+ -->
2
16
  <script lang="ts">
3
17
  /** Controlled checked state */
4
18
  export let checked: boolean = false
@@ -1,4 +1,18 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Intersection Observer wrapper that reveals children with a transition on scroll.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { ScrollReveal } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <ScrollReveal threshold={0.2} once>
12
+ <p>This content fades in on scroll.</p>
13
+ </ScrollReveal>
14
+ ```
15
+ -->
2
16
  <script lang="ts">
3
17
  import { onMount, onDestroy } from 'svelte'
4
18
 
@@ -1,4 +1,20 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Page-level content region with padding, background, and optional top border.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Section, Container } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Section variant="hero" background="recessed">
12
+ <Container>
13
+ <h1>Hero Section</h1>
14
+ </Container>
15
+ </Section>
16
+ ```
17
+ -->
2
18
  <script lang="ts">
3
19
  /** Padding variant */
4
20
  export let variant: 'standard' | 'hero' | 'compact' = 'standard'
@@ -1,4 +1,21 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Native select dropdown with styled wrapper, error state, and placeholder support.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Select } from '@dillingerstaffing/strand-svelte';
9
+ let role = 'eng';
10
+ const options = [
11
+ { value: 'eng', label: 'Engineer' },
12
+ { value: 'design', label: 'Designer' },
13
+ ];
14
+ </script>
15
+
16
+ <Select placeholder="Choose a role" {options} bind:value={role} />
17
+ ```
18
+ -->
2
19
  <script lang="ts">
3
20
  export interface SelectOption {
4
21
  value: string
@@ -1,4 +1,18 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Placeholder shimmer shape used while content is loading.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Skeleton } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Skeleton variant="text" width="60%" />
12
+ <Skeleton variant="circle" width="48px" />
13
+ <Skeleton variant="rectangle" width="100%" height="200px" />
14
+ ```
15
+ -->
2
16
  <script lang="ts">
3
17
  /** Shape variant */
4
18
  export let variant: 'text' | 'rectangle' | 'circle' = 'text'
@@ -1,4 +1,17 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Range input control for selecting a numeric value within a bounded interval.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Slider } from '@dillingerstaffing/strand-svelte';
9
+ let value = 50;
10
+ </script>
11
+
12
+ <Slider min={0} max={100} step={5} bind:value />
13
+ ```
14
+ -->
2
15
  <script lang="ts">
3
16
  /** Minimum value */
4
17
  export let min: number = 0
@@ -1,4 +1,16 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Animated loading indicator with screen-reader-accessible status text.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Spinner } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Spinner size="lg" />
12
+ ```
13
+ -->
2
14
  <script lang="ts">
3
15
  /** Size of the spinner */
4
16
  export let size: 'sm' | 'md' | 'lg' = 'md'
@@ -1,4 +1,19 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Flexbox layout container for arranging children with consistent spacing.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Stack, Button } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Stack direction="horizontal" gap={4} align="center">
12
+ <Button variant="primary">Save</Button>
13
+ <Button variant="secondary">Cancel</Button>
14
+ </Stack>
15
+ ```
16
+ -->
2
17
  <script lang="ts">
3
18
  /** Flex direction */
4
19
  export let direction: 'vertical' | 'horizontal' = 'vertical'
@@ -1,4 +1,17 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Toggle switch for binary on/off settings with optional inline label.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Switch } from '@dillingerstaffing/strand-svelte';
9
+ let darkMode = false;
10
+ </script>
11
+
12
+ <Switch bind:checked={darkMode} label="Dark mode" />
13
+ ```
14
+ -->
2
15
  <script lang="ts">
3
16
  /** Controlled checked state */
4
17
  export let checked: boolean = false
@@ -1,4 +1,25 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Data table with column definitions, sortable headers, and row rendering.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Table } from '@dillingerstaffing/strand-svelte';
9
+
10
+ const columns = [
11
+ { key: 'name', header: 'Name', sortable: true },
12
+ { key: 'role', header: 'Role' },
13
+ ];
14
+ const data = [
15
+ { name: 'Jane', role: 'Engineer' },
16
+ { name: 'Alex', role: 'Designer' },
17
+ ];
18
+ </script>
19
+
20
+ <Table {columns} {data} onsort={(key, dir) => console.log(key, dir)} />
21
+ ```
22
+ -->
2
23
  <script lang="ts">
3
24
  export interface TableColumn {
4
25
  /** Unique key matching the data field */
@@ -1,4 +1,24 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Tabbed content switcher with keyboard navigation and ARIA tab pattern.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Tabs } from '@dillingerstaffing/strand-svelte';
9
+ let activeTab = 'overview';
10
+ const tabs = [
11
+ { id: 'overview', label: 'Overview' },
12
+ { id: 'details', label: 'Details' },
13
+ ];
14
+ </script>
15
+
16
+ <Tabs {tabs} bind:activeTab>
17
+ <div slot="overview"><p>Overview content</p></div>
18
+ <div slot="details"><p>Details content</p></div>
19
+ </Tabs>
20
+ ```
21
+ -->
2
22
  <script lang="ts">
3
23
  export interface TabItem {
4
24
  id: string
@@ -1,4 +1,18 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Compact label for categorization, filtering, or status display.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Tag } from '@dillingerstaffing/strand-svelte';
9
+ </script>
10
+
11
+ <Tag variant="solid" status="teal" removable onremove={() => {}}>
12
+ Active
13
+ </Tag>
14
+ ```
15
+ -->
2
16
  <script lang="ts">
3
17
  /** Visual style variant */
4
18
  export let variant: 'solid' | 'outlined' = 'solid'
@@ -1,4 +1,17 @@
1
1
  <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Multi-line text input with auto-resize, character count, and error state.
4
+
5
+ @example
6
+ ```svelte
7
+ <script>
8
+ import { Textarea } from '@dillingerstaffing/strand-svelte';
9
+ let text = '';
10
+ </script>
11
+
12
+ <Textarea bind:value={text} maxLength={500} showCount autoResize />
13
+ ```
14
+ -->
2
15
  <script lang="ts">
3
16
  /** Auto-resize to fit content */
4
17
  export let autoResize: boolean = false