@dillingerstaffing/strand-vue 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.
- package/dist/components/Alert/Alert.vue.d.ts.map +1 -1
- package/dist/components/Avatar/Avatar.vue.d.ts.map +1 -1
- package/dist/components/Badge/Badge.vue.d.ts.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.vue.d.ts.map +1 -1
- package/dist/components/Button/Button.vue.d.ts.map +1 -1
- package/dist/components/Card/Card.vue.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.vue.d.ts.map +1 -1
- package/dist/components/Container/Container.vue.d.ts.map +1 -1
- package/dist/components/DataReadout/DataReadout.vue.d.ts.map +1 -1
- package/dist/components/Dialog/Dialog.vue.d.ts.map +1 -1
- package/dist/components/Divider/Divider.vue.d.ts.map +1 -1
- package/dist/components/FormField/FormField.vue.d.ts.map +1 -1
- package/dist/components/Grid/Grid.vue.d.ts.map +1 -1
- package/dist/components/Input/Input.vue.d.ts.map +1 -1
- package/dist/components/InstrumentViewport/InstrumentViewport.vue.d.ts.map +1 -1
- package/dist/components/Link/Link.vue.d.ts.map +1 -1
- package/dist/components/Nav/Nav.vue.d.ts.map +1 -1
- package/dist/components/Progress/Progress.vue.d.ts.map +1 -1
- package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
- package/dist/components/ScrollReveal/ScrollReveal.vue.d.ts.map +1 -1
- package/dist/components/Section/Section.vue.d.ts.map +1 -1
- package/dist/components/Select/Select.vue.d.ts.map +1 -1
- package/dist/components/Skeleton/Skeleton.vue.d.ts.map +1 -1
- package/dist/components/Slider/Slider.vue.d.ts.map +1 -1
- package/dist/components/Spinner/Spinner.vue.d.ts.map +1 -1
- package/dist/components/Stack/Stack.vue.d.ts.map +1 -1
- package/dist/components/Switch/Switch.vue.d.ts.map +1 -1
- package/dist/components/Table/Table.vue.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.vue.d.ts.map +1 -1
- package/dist/components/Tag/Tag.vue.d.ts.map +1 -1
- package/dist/components/Textarea/Textarea.vue.d.ts.map +1 -1
- package/dist/components/Toast/Toast.vue.d.ts.map +1 -1
- package/dist/components/Toast/ToastProvider.vue.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.vue.d.ts.map +1 -1
- package/dist/css/strand-ui.css +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/Alert/Alert.vue +16 -0
- package/src/components/Avatar/Avatar.vue +15 -0
- package/src/components/Badge/Badge.vue +17 -0
- package/src/components/Breadcrumb/Breadcrumb.vue +20 -0
- package/src/components/Button/Button.vue +16 -0
- package/src/components/Card/Card.vue +17 -0
- package/src/components/Checkbox/Checkbox.vue +16 -0
- package/src/components/CodeBlock/CodeBlock.vue +14 -0
- package/src/components/Container/Container.vue +16 -0
- package/src/components/DataReadout/DataReadout.vue +14 -0
- package/src/components/Dialog/Dialog.vue +18 -0
- package/src/components/Divider/Divider.vue +14 -0
- package/src/components/FormField/FormField.vue +16 -0
- package/src/components/Grid/Grid.vue +18 -0
- package/src/components/Input/Input.vue +14 -0
- package/src/components/InstrumentViewport/InstrumentViewport.vue +16 -0
- package/src/components/Link/Link.vue +15 -0
- package/src/components/Nav/Nav.vue +23 -0
- package/src/components/Progress/Progress.vue +15 -0
- package/src/components/Radio/Radio.vue +17 -0
- package/src/components/ScrollReveal/ScrollReveal.vue +16 -0
- package/src/components/Section/Section.vue +18 -0
- package/src/components/Select/Select.vue +20 -0
- package/src/components/Skeleton/Skeleton.vue +16 -0
- package/src/components/Slider/Slider.vue +16 -0
- package/src/components/Spinner/Spinner.vue +14 -0
- package/src/components/Stack/Stack.vue +17 -0
- package/src/components/Switch/Switch.vue +16 -0
- package/src/components/Table/Table.vue +23 -0
- package/src/components/Tabs/Tabs.vue +23 -0
- package/src/components/Tag/Tag.vue +16 -0
- package/src/components/Textarea/Textarea.vue +16 -0
- package/src/components/Toast/Toast.vue +14 -0
- package/src/components/Toast/ToastProvider.vue +16 -0
- package/src/components/Tooltip/Tooltip.vue +16 -0
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Circular user representation with image, initials fallback, and multiple sizes.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Avatar } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Avatar src="/photo.jpg" alt="Jane Doe" size="lg" />
|
|
13
|
+
<Avatar initials="JD" size="md" />
|
|
14
|
+
</template>
|
|
15
|
+
```
|
|
16
|
+
-->
|
|
2
17
|
<script setup lang="ts">
|
|
3
18
|
import { computed, ref } from 'vue'
|
|
4
19
|
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Small status indicator or notification count, displayed inline or overlaid on content.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Badge } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Badge variant="count" status="red" :count="5">
|
|
13
|
+
<button>Notifications</button>
|
|
14
|
+
</Badge>
|
|
15
|
+
<Badge variant="dot" status="teal" />
|
|
16
|
+
</template>
|
|
17
|
+
```
|
|
18
|
+
-->
|
|
2
19
|
<script setup lang="ts">
|
|
3
20
|
import { computed, useSlots } from 'vue'
|
|
4
21
|
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Hierarchical navigation path showing the current page location.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Breadcrumb } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
|
|
10
|
+
const items = [
|
|
11
|
+
{ label: 'Home', href: '/' },
|
|
12
|
+
{ label: 'Settings', href: '/settings' },
|
|
13
|
+
{ label: 'Profile' },
|
|
14
|
+
];
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<Breadcrumb :items="items" />
|
|
19
|
+
</template>
|
|
20
|
+
```
|
|
21
|
+
-->
|
|
2
22
|
<script setup lang="ts">
|
|
3
23
|
import { computed } from 'vue'
|
|
4
24
|
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Primary action trigger with multiple visual variants and sizes.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Button } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Button variant="primary" size="md" @click="handleClick">
|
|
13
|
+
Submit
|
|
14
|
+
</Button>
|
|
15
|
+
</template>
|
|
16
|
+
```
|
|
17
|
+
-->
|
|
2
18
|
<script setup lang="ts">
|
|
3
19
|
import { computed } from 'vue'
|
|
4
20
|
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Contained surface for grouping related content with elevation and padding options.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Card } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Card variant="elevated" padding="lg">
|
|
13
|
+
<h3>Card Title</h3>
|
|
14
|
+
<p>Card content goes here.</p>
|
|
15
|
+
</Card>
|
|
16
|
+
</template>
|
|
17
|
+
```
|
|
18
|
+
-->
|
|
2
19
|
<script setup lang="ts">
|
|
3
20
|
import { computed } from 'vue'
|
|
4
21
|
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Toggle control for boolean or indeterminate selections with optional label.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { ref } from 'vue';
|
|
9
|
+
import { Checkbox } from '@dillingerstaffing/strand-vue';
|
|
10
|
+
const accepted = ref(false);
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<Checkbox v-model:checked="accepted" label="Accept terms" />
|
|
15
|
+
</template>
|
|
16
|
+
```
|
|
17
|
+
-->
|
|
2
18
|
<script setup lang="ts">
|
|
3
19
|
import { computed, ref, watch, onMounted } from 'vue'
|
|
4
20
|
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Syntax-highlighted code display with optional language label and copy-to-clipboard.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { CodeBlock } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<CodeBlock code="const x = 42;" language="js" copyable />
|
|
13
|
+
</template>
|
|
14
|
+
```
|
|
15
|
+
-->
|
|
2
16
|
<script setup lang="ts">
|
|
3
17
|
import { computed, onBeforeUnmount, ref } from 'vue'
|
|
4
18
|
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Centered max-width wrapper for constraining page content.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Container } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Container size="default">
|
|
13
|
+
<p>Content constrained to default max width.</p>
|
|
14
|
+
</Container>
|
|
15
|
+
</template>
|
|
16
|
+
```
|
|
17
|
+
-->
|
|
2
18
|
<script setup lang="ts">
|
|
3
19
|
import { computed } from 'vue'
|
|
4
20
|
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Instrument-panel metric display with overline label and prominent value.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { DataReadout } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<DataReadout label="Conversion Rate" value="94%" size="lg" />
|
|
13
|
+
</template>
|
|
14
|
+
```
|
|
15
|
+
-->
|
|
2
16
|
<script setup lang="ts">
|
|
3
17
|
import { computed } from 'vue'
|
|
4
18
|
|
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Modal overlay with focus trapping, scroll lock, and backdrop click dismissal.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { ref } from 'vue';
|
|
9
|
+
import { Dialog } from '@dillingerstaffing/strand-vue';
|
|
10
|
+
const isOpen = ref(false);
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<Dialog :open="isOpen" title="Confirm" @close="isOpen = false">
|
|
15
|
+
<p>Are you sure?</p>
|
|
16
|
+
</Dialog>
|
|
17
|
+
</template>
|
|
18
|
+
```
|
|
19
|
+
-->
|
|
2
20
|
<script setup lang="ts">
|
|
3
21
|
import { computed, ref, watch, onUnmounted, nextTick } from 'vue'
|
|
4
22
|
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Visual separator line between content sections, horizontal or vertical.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Divider } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Divider direction="horizontal" label="OR" />
|
|
13
|
+
</template>
|
|
14
|
+
```
|
|
15
|
+
-->
|
|
2
16
|
<script setup lang="ts">
|
|
3
17
|
import { computed } from 'vue'
|
|
4
18
|
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Form control wrapper providing label, hint text, error messaging, and required indicator.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { FormField, Input } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<FormField label="Email" html-for="email" hint="Work email preferred" required>
|
|
13
|
+
<Input id="email" type="email" />
|
|
14
|
+
</FormField>
|
|
15
|
+
</template>
|
|
16
|
+
```
|
|
17
|
+
-->
|
|
2
18
|
<script setup lang="ts">
|
|
3
19
|
import { computed } from 'vue'
|
|
4
20
|
|
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
CSS Grid layout with configurable column count and gap spacing.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Grid, Card } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Grid :columns="3" :gap="6">
|
|
13
|
+
<Card>Item 1</Card>
|
|
14
|
+
<Card>Item 2</Card>
|
|
15
|
+
<Card>Item 3</Card>
|
|
16
|
+
</Grid>
|
|
17
|
+
</template>
|
|
18
|
+
```
|
|
19
|
+
-->
|
|
2
20
|
<script setup lang="ts">
|
|
3
21
|
import { computed } from 'vue'
|
|
4
22
|
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Text input field with optional leading/trailing addons and error state.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Input } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Input type="email" placeholder="you@example.com" />
|
|
13
|
+
</template>
|
|
14
|
+
```
|
|
15
|
+
-->
|
|
2
16
|
<script setup lang="ts">
|
|
3
17
|
import { computed, useSlots } from 'vue'
|
|
4
18
|
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Recessed dark surface for displaying instrument-style UI components.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { InstrumentViewport, DataReadout } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<InstrumentViewport grid>
|
|
13
|
+
<DataReadout label="Uptime" value="99.9%" />
|
|
14
|
+
</InstrumentViewport>
|
|
15
|
+
</template>
|
|
16
|
+
```
|
|
17
|
+
-->
|
|
2
18
|
<script setup lang="ts">
|
|
3
19
|
import { computed } from 'vue'
|
|
4
20
|
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Styled anchor element with external-link handling and visual variants.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Link } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Link href="/docs" variant="cta">Read the docs</Link>
|
|
13
|
+
<Link href="https://example.com" external>External site</Link>
|
|
14
|
+
</template>
|
|
15
|
+
```
|
|
16
|
+
-->
|
|
2
17
|
<script setup lang="ts">
|
|
3
18
|
import { computed } from 'vue'
|
|
4
19
|
|
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Top-level navigation bar with logo slot, link items, actions, and responsive mobile menu.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Nav } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
|
|
10
|
+
const items = [
|
|
11
|
+
{ label: 'Home', href: '/', active: true },
|
|
12
|
+
{ label: 'About', href: '/about' },
|
|
13
|
+
];
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<Nav :items="items" glass>
|
|
18
|
+
<template #logo>
|
|
19
|
+
<img src="/logo.svg" alt="Brand" />
|
|
20
|
+
</template>
|
|
21
|
+
</Nav>
|
|
22
|
+
</template>
|
|
23
|
+
```
|
|
24
|
+
-->
|
|
2
25
|
<script setup lang="ts">
|
|
3
26
|
import { computed, ref } from 'vue'
|
|
4
27
|
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Determinate or indeterminate progress indicator in bar or ring form.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Progress } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Progress variant="bar" :value="65" size="md" />
|
|
13
|
+
<Progress variant="ring" size="lg" />
|
|
14
|
+
</template>
|
|
15
|
+
```
|
|
16
|
+
-->
|
|
2
17
|
<script setup lang="ts">
|
|
3
18
|
import { computed } from 'vue'
|
|
4
19
|
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Single-selection control for use within a radio group.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { ref } from 'vue';
|
|
9
|
+
import { Radio } from '@dillingerstaffing/strand-vue';
|
|
10
|
+
const selected = ref('pro');
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<Radio name="plan" value="pro" label="Pro" :checked="selected === 'pro'" @change="selected = 'pro'" />
|
|
15
|
+
<Radio name="plan" value="free" label="Free" :checked="selected === 'free'" @change="selected = 'free'" />
|
|
16
|
+
</template>
|
|
17
|
+
```
|
|
18
|
+
-->
|
|
2
19
|
<script setup lang="ts">
|
|
3
20
|
import { computed } from 'vue'
|
|
4
21
|
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Intersection Observer wrapper that reveals children with a transition on scroll.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { ScrollReveal } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<ScrollReveal :threshold="0.2" once>
|
|
13
|
+
<p>This content fades in on scroll.</p>
|
|
14
|
+
</ScrollReveal>
|
|
15
|
+
</template>
|
|
16
|
+
```
|
|
17
|
+
-->
|
|
2
18
|
<script setup lang="ts">
|
|
3
19
|
import { computed, ref, onMounted, onUnmounted } from 'vue'
|
|
4
20
|
|
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Page-level content region with padding, background, and optional top border.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Section, Container } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Section variant="hero" background="recessed">
|
|
13
|
+
<Container>
|
|
14
|
+
<h1>Hero Section</h1>
|
|
15
|
+
</Container>
|
|
16
|
+
</Section>
|
|
17
|
+
</template>
|
|
18
|
+
```
|
|
19
|
+
-->
|
|
2
20
|
<script setup lang="ts">
|
|
3
21
|
import { computed } from 'vue'
|
|
4
22
|
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Native select dropdown with styled wrapper, error state, and placeholder support.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { ref } from 'vue';
|
|
9
|
+
import { Select } from '@dillingerstaffing/strand-vue';
|
|
10
|
+
const role = ref('eng');
|
|
11
|
+
const options = [
|
|
12
|
+
{ value: 'eng', label: 'Engineer' },
|
|
13
|
+
{ value: 'design', label: 'Designer' },
|
|
14
|
+
];
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<Select placeholder="Choose a role" :options="options" v-model:value="role" />
|
|
19
|
+
</template>
|
|
20
|
+
```
|
|
21
|
+
-->
|
|
2
22
|
<script setup lang="ts">
|
|
3
23
|
import { computed } from 'vue'
|
|
4
24
|
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Placeholder shimmer shape used while content is loading.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Skeleton } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Skeleton variant="text" width="60%" />
|
|
13
|
+
<Skeleton variant="circle" width="48px" />
|
|
14
|
+
<Skeleton variant="rectangle" width="100%" height="200px" />
|
|
15
|
+
</template>
|
|
16
|
+
```
|
|
17
|
+
-->
|
|
2
18
|
<script setup lang="ts">
|
|
3
19
|
import { computed } from 'vue'
|
|
4
20
|
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Range input control for selecting a numeric value within a bounded interval.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { ref } from 'vue';
|
|
9
|
+
import { Slider } from '@dillingerstaffing/strand-vue';
|
|
10
|
+
const value = ref(50);
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<Slider :min="0" :max="100" :step="5" v-model:value="value" />
|
|
15
|
+
</template>
|
|
16
|
+
```
|
|
17
|
+
-->
|
|
2
18
|
<script setup lang="ts">
|
|
3
19
|
import { computed } from 'vue'
|
|
4
20
|
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Animated loading indicator with screen-reader-accessible status text.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Spinner } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Spinner size="lg" />
|
|
13
|
+
</template>
|
|
14
|
+
```
|
|
15
|
+
-->
|
|
2
16
|
<script setup lang="ts">
|
|
3
17
|
import { computed } from 'vue'
|
|
4
18
|
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Flexbox layout container for arranging children with consistent spacing.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Stack, Button } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Stack direction="horizontal" :gap="4" align="center">
|
|
13
|
+
<Button variant="primary">Save</Button>
|
|
14
|
+
<Button variant="secondary">Cancel</Button>
|
|
15
|
+
</Stack>
|
|
16
|
+
</template>
|
|
17
|
+
```
|
|
18
|
+
-->
|
|
2
19
|
<script setup lang="ts">
|
|
3
20
|
import { computed } from 'vue'
|
|
4
21
|
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Toggle switch for binary on/off settings with optional inline label.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { ref } from 'vue';
|
|
9
|
+
import { Switch } from '@dillingerstaffing/strand-vue';
|
|
10
|
+
const darkMode = ref(false);
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<Switch v-model:checked="darkMode" label="Dark mode" />
|
|
15
|
+
</template>
|
|
16
|
+
```
|
|
17
|
+
-->
|
|
2
18
|
<script setup lang="ts">
|
|
3
19
|
import { computed } from 'vue'
|
|
4
20
|
|
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Data table with column definitions, sortable headers, and row rendering.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Table } from '@dillingerstaffing/strand-vue';
|
|
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
|
+
<template>
|
|
21
|
+
<Table :columns="columns" :data="data" @sort="(key, dir) => console.log(key, dir)" />
|
|
22
|
+
</template>
|
|
23
|
+
```
|
|
24
|
+
-->
|
|
2
25
|
<script setup lang="ts">
|
|
3
26
|
import { computed, ref } from 'vue'
|
|
4
27
|
|
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Tabbed content switcher with keyboard navigation and ARIA tab pattern.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { ref } from 'vue';
|
|
9
|
+
import { Tabs } from '@dillingerstaffing/strand-vue';
|
|
10
|
+
const activeTab = ref('overview');
|
|
11
|
+
const tabs = [
|
|
12
|
+
{ id: 'overview', label: 'Overview' },
|
|
13
|
+
{ id: 'details', label: 'Details' },
|
|
14
|
+
];
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<Tabs :tabs="tabs" v-model:active-tab="activeTab">
|
|
19
|
+
<template #overview><p>Overview content</p></template>
|
|
20
|
+
<template #details><p>Details content</p></template>
|
|
21
|
+
</Tabs>
|
|
22
|
+
</template>
|
|
23
|
+
```
|
|
24
|
+
-->
|
|
2
25
|
<script setup lang="ts">
|
|
3
26
|
import { computed, ref } from 'vue'
|
|
4
27
|
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
<!--! Strand Vue | MIT License | dillingerstaffing.com -->
|
|
2
|
+
<!--
|
|
3
|
+
Compact label for categorization, filtering, or status display.
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```vue
|
|
7
|
+
<script setup>
|
|
8
|
+
import { Tag } from '@dillingerstaffing/strand-vue';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<Tag variant="solid" status="teal" removable @remove="handleRemove">
|
|
13
|
+
Active
|
|
14
|
+
</Tag>
|
|
15
|
+
</template>
|
|
16
|
+
```
|
|
17
|
+
-->
|
|
2
18
|
<script setup lang="ts">
|
|
3
19
|
import { computed } from 'vue'
|
|
4
20
|
|