@dillingerstaffing/strand-vue 0.4.0

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 (233) hide show
  1. package/dist/components/Alert/Alert.vue.d.ts +31 -0
  2. package/dist/components/Alert/Alert.vue.d.ts.map +1 -0
  3. package/dist/components/Alert/index.d.ts +3 -0
  4. package/dist/components/Alert/index.d.ts.map +1 -0
  5. package/dist/components/Avatar/Avatar.vue.d.ts +20 -0
  6. package/dist/components/Avatar/Avatar.vue.d.ts.map +1 -0
  7. package/dist/components/Avatar/index.d.ts +2 -0
  8. package/dist/components/Avatar/index.d.ts.map +1 -0
  9. package/dist/components/Badge/Badge.vue.d.ts +35 -0
  10. package/dist/components/Badge/Badge.vue.d.ts.map +1 -0
  11. package/dist/components/Badge/index.d.ts +2 -0
  12. package/dist/components/Badge/index.d.ts.map +1 -0
  13. package/dist/components/Breadcrumb/Breadcrumb.vue.d.ts +15 -0
  14. package/dist/components/Breadcrumb/Breadcrumb.vue.d.ts.map +1 -0
  15. package/dist/components/Breadcrumb/index.d.ts +3 -0
  16. package/dist/components/Breadcrumb/index.d.ts.map +1 -0
  17. package/dist/components/Button/Button.vue.d.ts +46 -0
  18. package/dist/components/Button/Button.vue.d.ts.map +1 -0
  19. package/dist/components/Button/index.d.ts +3 -0
  20. package/dist/components/Button/index.d.ts.map +1 -0
  21. package/dist/components/Card/Card.vue.d.ts +30 -0
  22. package/dist/components/Card/Card.vue.d.ts.map +1 -0
  23. package/dist/components/Card/index.d.ts +2 -0
  24. package/dist/components/Card/index.d.ts.map +1 -0
  25. package/dist/components/Checkbox/Checkbox.vue.d.ts +23 -0
  26. package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -0
  27. package/dist/components/Checkbox/index.d.ts +3 -0
  28. package/dist/components/Checkbox/index.d.ts.map +1 -0
  29. package/dist/components/Container/Container.vue.d.ts +27 -0
  30. package/dist/components/Container/Container.vue.d.ts.map +1 -0
  31. package/dist/components/Container/index.d.ts +2 -0
  32. package/dist/components/Container/index.d.ts.map +1 -0
  33. package/dist/components/DataReadout/DataReadout.vue.d.ts +15 -0
  34. package/dist/components/DataReadout/DataReadout.vue.d.ts.map +1 -0
  35. package/dist/components/DataReadout/index.d.ts +2 -0
  36. package/dist/components/DataReadout/index.d.ts.map +1 -0
  37. package/dist/components/Dialog/Dialog.vue.d.ts +39 -0
  38. package/dist/components/Dialog/Dialog.vue.d.ts.map +1 -0
  39. package/dist/components/Dialog/index.d.ts +3 -0
  40. package/dist/components/Dialog/index.d.ts.map +1 -0
  41. package/dist/components/Divider/Divider.vue.d.ts +14 -0
  42. package/dist/components/Divider/Divider.vue.d.ts.map +1 -0
  43. package/dist/components/Divider/index.d.ts +2 -0
  44. package/dist/components/Divider/index.d.ts.map +1 -0
  45. package/dist/components/FormField/FormField.vue.d.ts +32 -0
  46. package/dist/components/FormField/FormField.vue.d.ts.map +1 -0
  47. package/dist/components/FormField/index.d.ts +3 -0
  48. package/dist/components/FormField/index.d.ts.map +1 -0
  49. package/dist/components/Grid/Grid.vue.d.ts +30 -0
  50. package/dist/components/Grid/Grid.vue.d.ts.map +1 -0
  51. package/dist/components/Grid/index.d.ts +2 -0
  52. package/dist/components/Grid/index.d.ts.map +1 -0
  53. package/dist/components/Input/Input.vue.d.ts +37 -0
  54. package/dist/components/Input/Input.vue.d.ts.map +1 -0
  55. package/dist/components/Input/index.d.ts +3 -0
  56. package/dist/components/Input/index.d.ts.map +1 -0
  57. package/dist/components/Link/Link.vue.d.ts +29 -0
  58. package/dist/components/Link/Link.vue.d.ts.map +1 -0
  59. package/dist/components/Link/index.d.ts +2 -0
  60. package/dist/components/Link/index.d.ts.map +1 -0
  61. package/dist/components/Nav/Nav.vue.d.ts +30 -0
  62. package/dist/components/Nav/Nav.vue.d.ts.map +1 -0
  63. package/dist/components/Nav/index.d.ts +3 -0
  64. package/dist/components/Nav/index.d.ts.map +1 -0
  65. package/dist/components/Progress/Progress.vue.d.ts +17 -0
  66. package/dist/components/Progress/Progress.vue.d.ts.map +1 -0
  67. package/dist/components/Progress/index.d.ts +2 -0
  68. package/dist/components/Progress/index.d.ts.map +1 -0
  69. package/dist/components/Radio/Radio.vue.d.ts +22 -0
  70. package/dist/components/Radio/Radio.vue.d.ts.map +1 -0
  71. package/dist/components/Radio/index.d.ts +3 -0
  72. package/dist/components/Radio/index.d.ts.map +1 -0
  73. package/dist/components/Section/Section.vue.d.ts +30 -0
  74. package/dist/components/Section/Section.vue.d.ts.map +1 -0
  75. package/dist/components/Section/index.d.ts +2 -0
  76. package/dist/components/Section/index.d.ts.map +1 -0
  77. package/dist/components/Select/Select.vue.d.ts +26 -0
  78. package/dist/components/Select/Select.vue.d.ts.map +1 -0
  79. package/dist/components/Select/index.d.ts +3 -0
  80. package/dist/components/Select/index.d.ts.map +1 -0
  81. package/dist/components/Skeleton/Skeleton.vue.d.ts +16 -0
  82. package/dist/components/Skeleton/Skeleton.vue.d.ts.map +1 -0
  83. package/dist/components/Skeleton/index.d.ts +2 -0
  84. package/dist/components/Skeleton/index.d.ts.map +1 -0
  85. package/dist/components/Slider/Slider.vue.d.ts +24 -0
  86. package/dist/components/Slider/Slider.vue.d.ts.map +1 -0
  87. package/dist/components/Slider/index.d.ts +3 -0
  88. package/dist/components/Slider/index.d.ts.map +1 -0
  89. package/dist/components/Spinner/Spinner.vue.d.ts +12 -0
  90. package/dist/components/Spinner/Spinner.vue.d.ts.map +1 -0
  91. package/dist/components/Spinner/index.d.ts +2 -0
  92. package/dist/components/Spinner/index.d.ts.map +1 -0
  93. package/dist/components/Stack/Stack.vue.d.ts +38 -0
  94. package/dist/components/Stack/Stack.vue.d.ts.map +1 -0
  95. package/dist/components/Stack/index.d.ts +2 -0
  96. package/dist/components/Stack/index.d.ts.map +1 -0
  97. package/dist/components/Switch/Switch.vue.d.ts +18 -0
  98. package/dist/components/Switch/Switch.vue.d.ts.map +1 -0
  99. package/dist/components/Switch/index.d.ts +3 -0
  100. package/dist/components/Switch/index.d.ts.map +1 -0
  101. package/dist/components/Table/Table.vue.d.ts +23 -0
  102. package/dist/components/Table/Table.vue.d.ts.map +1 -0
  103. package/dist/components/Table/index.d.ts +3 -0
  104. package/dist/components/Table/index.d.ts.map +1 -0
  105. package/dist/components/Tabs/Tabs.vue.d.ts +34 -0
  106. package/dist/components/Tabs/Tabs.vue.d.ts.map +1 -0
  107. package/dist/components/Tabs/index.d.ts +3 -0
  108. package/dist/components/Tabs/index.d.ts.map +1 -0
  109. package/dist/components/Tag/Tag.vue.d.ts +37 -0
  110. package/dist/components/Tag/Tag.vue.d.ts.map +1 -0
  111. package/dist/components/Tag/index.d.ts +2 -0
  112. package/dist/components/Tag/index.d.ts.map +1 -0
  113. package/dist/components/Textarea/Textarea.vue.d.ts +29 -0
  114. package/dist/components/Textarea/Textarea.vue.d.ts.map +1 -0
  115. package/dist/components/Textarea/index.d.ts +3 -0
  116. package/dist/components/Textarea/index.d.ts.map +1 -0
  117. package/dist/components/Toast/Toast.vue.d.ts +16 -0
  118. package/dist/components/Toast/Toast.vue.d.ts.map +1 -0
  119. package/dist/components/Toast/ToastProvider.vue.d.ts +18 -0
  120. package/dist/components/Toast/ToastProvider.vue.d.ts.map +1 -0
  121. package/dist/components/Toast/index.d.ts +6 -0
  122. package/dist/components/Toast/index.d.ts.map +1 -0
  123. package/dist/components/Toast/useToast.d.ts +13 -0
  124. package/dist/components/Toast/useToast.d.ts.map +1 -0
  125. package/dist/components/Tooltip/Tooltip.vue.d.ts +29 -0
  126. package/dist/components/Tooltip/Tooltip.vue.d.ts.map +1 -0
  127. package/dist/components/Tooltip/index.d.ts +3 -0
  128. package/dist/components/Tooltip/index.d.ts.map +1 -0
  129. package/dist/css/strand-ui.css +2534 -0
  130. package/dist/index.d.ts +35 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +1413 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/test-setup.d.ts +1 -0
  135. package/dist/test-setup.d.ts.map +1 -0
  136. package/package.json +51 -0
  137. package/src/components/Alert/Alert.test.ts +100 -0
  138. package/src/components/Alert/Alert.vue +54 -0
  139. package/src/components/Alert/index.ts +2 -0
  140. package/src/components/Avatar/Avatar.test.ts +105 -0
  141. package/src/components/Avatar/Avatar.vue +56 -0
  142. package/src/components/Avatar/index.ts +1 -0
  143. package/src/components/Badge/Badge.test.ts +114 -0
  144. package/src/components/Badge/Badge.vue +66 -0
  145. package/src/components/Badge/index.ts +1 -0
  146. package/src/components/Breadcrumb/Breadcrumb.test.ts +119 -0
  147. package/src/components/Breadcrumb/Breadcrumb.vue +58 -0
  148. package/src/components/Breadcrumb/index.ts +2 -0
  149. package/src/components/Button/Button.test.ts +148 -0
  150. package/src/components/Button/Button.vue +75 -0
  151. package/src/components/Button/index.ts +2 -0
  152. package/src/components/Card/Card.test.ts +93 -0
  153. package/src/components/Card/Card.vue +36 -0
  154. package/src/components/Card/index.ts +1 -0
  155. package/src/components/Checkbox/Checkbox.test.ts +118 -0
  156. package/src/components/Checkbox/Checkbox.vue +117 -0
  157. package/src/components/Checkbox/index.ts +2 -0
  158. package/src/components/Container/Container.test.ts +70 -0
  159. package/src/components/Container/Container.vue +32 -0
  160. package/src/components/Container/index.ts +1 -0
  161. package/src/components/DataReadout/DataReadout.test.ts +99 -0
  162. package/src/components/DataReadout/DataReadout.vue +36 -0
  163. package/src/components/DataReadout/index.ts +1 -0
  164. package/src/components/Dialog/Dialog.test.ts +224 -0
  165. package/src/components/Dialog/Dialog.vue +146 -0
  166. package/src/components/Dialog/index.ts +2 -0
  167. package/src/components/Divider/Divider.test.ts +95 -0
  168. package/src/components/Divider/Divider.vue +63 -0
  169. package/src/components/Divider/index.ts +1 -0
  170. package/src/components/FormField/FormField.test.ts +98 -0
  171. package/src/components/FormField/FormField.vue +59 -0
  172. package/src/components/FormField/index.ts +2 -0
  173. package/src/components/Grid/Grid.test.ts +73 -0
  174. package/src/components/Grid/Grid.vue +34 -0
  175. package/src/components/Grid/index.ts +1 -0
  176. package/src/components/Input/Input.test.ts +102 -0
  177. package/src/components/Input/Input.vue +63 -0
  178. package/src/components/Input/index.ts +2 -0
  179. package/src/components/Link/Link.test.ts +92 -0
  180. package/src/components/Link/Link.vue +35 -0
  181. package/src/components/Link/index.ts +1 -0
  182. package/src/components/Nav/Nav.test.ts +171 -0
  183. package/src/components/Nav/Nav.vue +81 -0
  184. package/src/components/Nav/index.ts +2 -0
  185. package/src/components/Progress/Progress.test.ts +103 -0
  186. package/src/components/Progress/Progress.vue +96 -0
  187. package/src/components/Progress/index.ts +1 -0
  188. package/src/components/Radio/Radio.test.ts +92 -0
  189. package/src/components/Radio/Radio.vue +60 -0
  190. package/src/components/Radio/index.ts +2 -0
  191. package/src/components/Section/Section.test.ts +77 -0
  192. package/src/components/Section/Section.vue +36 -0
  193. package/src/components/Section/index.ts +1 -0
  194. package/src/components/Select/Select.test.ts +102 -0
  195. package/src/components/Select/Select.vue +70 -0
  196. package/src/components/Select/index.ts +2 -0
  197. package/src/components/Skeleton/Skeleton.test.ts +77 -0
  198. package/src/components/Skeleton/Skeleton.vue +48 -0
  199. package/src/components/Skeleton/index.ts +1 -0
  200. package/src/components/Slider/Slider.test.ts +73 -0
  201. package/src/components/Slider/Slider.vue +60 -0
  202. package/src/components/Slider/index.ts +2 -0
  203. package/src/components/Spinner/Spinner.test.ts +66 -0
  204. package/src/components/Spinner/Spinner.vue +33 -0
  205. package/src/components/Spinner/index.ts +1 -0
  206. package/src/components/Stack/Stack.test.ts +140 -0
  207. package/src/components/Stack/Stack.vue +50 -0
  208. package/src/components/Stack/index.ts +1 -0
  209. package/src/components/Switch/Switch.test.ts +116 -0
  210. package/src/components/Switch/Switch.vue +62 -0
  211. package/src/components/Switch/index.ts +2 -0
  212. package/src/components/Table/Table.test.ts +152 -0
  213. package/src/components/Table/Table.vue +98 -0
  214. package/src/components/Table/index.ts +2 -0
  215. package/src/components/Tabs/Tabs.test.ts +138 -0
  216. package/src/components/Tabs/Tabs.vue +96 -0
  217. package/src/components/Tabs/index.ts +2 -0
  218. package/src/components/Tag/Tag.test.ts +128 -0
  219. package/src/components/Tag/Tag.vue +65 -0
  220. package/src/components/Tag/index.ts +1 -0
  221. package/src/components/Textarea/Textarea.test.ts +107 -0
  222. package/src/components/Textarea/Textarea.vue +90 -0
  223. package/src/components/Textarea/index.ts +2 -0
  224. package/src/components/Toast/Toast.test.ts +204 -0
  225. package/src/components/Toast/Toast.vue +48 -0
  226. package/src/components/Toast/ToastProvider.vue +80 -0
  227. package/src/components/Toast/index.ts +5 -0
  228. package/src/components/Toast/useToast.ts +26 -0
  229. package/src/components/Tooltip/Tooltip.test.ts +145 -0
  230. package/src/components/Tooltip/Tooltip.vue +79 -0
  231. package/src/components/Tooltip/index.ts +2 -0
  232. package/src/index.ts +44 -0
  233. package/src/test-setup.ts +7 -0
@@ -0,0 +1,145 @@
1
+ /*! Strand Vue | MIT License | dillingerstaffing.com */
2
+
3
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
4
+ import { render, fireEvent } from '@testing-library/vue'
5
+ import Tooltip from './Tooltip.vue'
6
+
7
+ describe('Tooltip', () => {
8
+ beforeEach(() => {
9
+ vi.useFakeTimers()
10
+ })
11
+
12
+ afterEach(() => {
13
+ vi.useRealTimers()
14
+ })
15
+
16
+ function renderTooltip(props: Record<string, unknown> = {}) {
17
+ return render(Tooltip, {
18
+ props: { content: 'Hint', ...props },
19
+ slots: { default: '<button type="button">Hover me</button>' },
20
+ })
21
+ }
22
+
23
+ it('renders children', () => {
24
+ const { getByText } = renderTooltip()
25
+ expect(getByText('Hover me')).toBeTruthy()
26
+ })
27
+
28
+ it('renders tooltip content text', () => {
29
+ const { container } = renderTooltip({ content: 'Helpful tip' })
30
+ const tooltip = container.querySelector('[role="tooltip"]')
31
+ expect(tooltip).toBeTruthy()
32
+ expect(tooltip!.textContent).toBe('Helpful tip')
33
+ })
34
+
35
+ it('tooltip is hidden by default', () => {
36
+ const { container } = renderTooltip({ content: 'Hidden' })
37
+ const tooltip = container.querySelector('[role="tooltip"]')
38
+ expect(tooltip).toHaveAttribute('aria-hidden', 'true')
39
+ })
40
+
41
+ it('shows tooltip on mouseenter after delay', async () => {
42
+ const { container } = renderTooltip({ content: 'Visible', delay: 100 })
43
+ const wrapper = container.querySelector('.strand-tooltip__wrapper')!
44
+ const tooltip = container.querySelector('[role="tooltip"]')!
45
+
46
+ await fireEvent.mouseEnter(wrapper)
47
+ vi.advanceTimersByTime(100)
48
+ await vi.dynamicImportSettled()
49
+
50
+ expect(tooltip).toHaveAttribute('aria-hidden', 'false')
51
+ })
52
+
53
+ it('hides tooltip on mouseleave', async () => {
54
+ const { container } = renderTooltip({ content: 'Gone', delay: 100 })
55
+ const wrapper = container.querySelector('.strand-tooltip__wrapper')!
56
+ const tooltip = container.querySelector('[role="tooltip"]')!
57
+
58
+ await fireEvent.mouseEnter(wrapper)
59
+ vi.advanceTimersByTime(100)
60
+ await vi.dynamicImportSettled()
61
+ expect(tooltip).toHaveAttribute('aria-hidden', 'false')
62
+
63
+ await fireEvent.mouseLeave(wrapper)
64
+ await vi.dynamicImportSettled()
65
+ expect(tooltip).toHaveAttribute('aria-hidden', 'true')
66
+ })
67
+
68
+ it('wrapper has aria-describedby pointing to tooltip id', () => {
69
+ const { container } = renderTooltip({ content: 'Described' })
70
+ const wrapper = container.querySelector('.strand-tooltip__wrapper')!
71
+ const tooltip = container.querySelector('[role="tooltip"]')!
72
+ const tooltipId = tooltip.getAttribute('id')
73
+ expect(wrapper).toHaveAttribute('aria-describedby', tooltipId)
74
+ })
75
+
76
+ it('tooltip has role tooltip', () => {
77
+ const { container } = renderTooltip({ content: 'Accessible' })
78
+ expect(container.querySelector('[role="tooltip"]')).toBeTruthy()
79
+ })
80
+
81
+ it('applies top position class by default', () => {
82
+ const { container } = renderTooltip({ content: 'Top' })
83
+ const tooltip = container.querySelector('[role="tooltip"]')!
84
+ expect(tooltip.className).toContain('strand-tooltip--top')
85
+ })
86
+
87
+ it('applies right position class', () => {
88
+ const { container } = renderTooltip({ content: 'Right', position: 'right' })
89
+ const tooltip = container.querySelector('[role="tooltip"]')!
90
+ expect(tooltip.className).toContain('strand-tooltip--right')
91
+ })
92
+
93
+ it('applies bottom position class', () => {
94
+ const { container } = renderTooltip({ content: 'Bottom', position: 'bottom' })
95
+ const tooltip = container.querySelector('[role="tooltip"]')!
96
+ expect(tooltip.className).toContain('strand-tooltip--bottom')
97
+ })
98
+
99
+ it('applies left position class', () => {
100
+ const { container } = renderTooltip({ content: 'Left', position: 'left' })
101
+ const tooltip = container.querySelector('[role="tooltip"]')!
102
+ expect(tooltip.className).toContain('strand-tooltip--left')
103
+ })
104
+
105
+ it('cancels show if mouseleave before delay completes', async () => {
106
+ const { container } = renderTooltip({ content: 'Cancelled', delay: 300 })
107
+ const wrapper = container.querySelector('.strand-tooltip__wrapper')!
108
+ const tooltip = container.querySelector('[role="tooltip"]')!
109
+
110
+ await fireEvent.mouseEnter(wrapper)
111
+ vi.advanceTimersByTime(100)
112
+ await fireEvent.mouseLeave(wrapper)
113
+ vi.advanceTimersByTime(300)
114
+ await vi.dynamicImportSettled()
115
+
116
+ expect(tooltip).toHaveAttribute('aria-hidden', 'true')
117
+ })
118
+
119
+ it('shows on focus for keyboard accessibility', async () => {
120
+ const { container } = renderTooltip({ content: 'Focused', delay: 100 })
121
+ const wrapper = container.querySelector('.strand-tooltip__wrapper')!
122
+ const tooltip = container.querySelector('[role="tooltip"]')!
123
+
124
+ await fireEvent.focus(wrapper)
125
+ vi.advanceTimersByTime(100)
126
+ await vi.dynamicImportSettled()
127
+
128
+ expect(tooltip).toHaveAttribute('aria-hidden', 'false')
129
+ })
130
+
131
+ it('hides on blur', async () => {
132
+ const { container } = renderTooltip({ content: 'Blurred', delay: 100 })
133
+ const wrapper = container.querySelector('.strand-tooltip__wrapper')!
134
+ const tooltip = container.querySelector('[role="tooltip"]')!
135
+
136
+ await fireEvent.focus(wrapper)
137
+ vi.advanceTimersByTime(100)
138
+ await vi.dynamicImportSettled()
139
+ expect(tooltip).toHaveAttribute('aria-hidden', 'false')
140
+
141
+ await fireEvent.blur(wrapper)
142
+ await vi.dynamicImportSettled()
143
+ expect(tooltip).toHaveAttribute('aria-hidden', 'true')
144
+ })
145
+ })
@@ -0,0 +1,79 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed, ref, onUnmounted } from 'vue'
4
+
5
+ export interface TooltipProps {
6
+ /** Tooltip text */
7
+ content: string
8
+ /** Position relative to trigger */
9
+ position?: 'top' | 'right' | 'bottom' | 'left'
10
+ /** Delay in ms before showing */
11
+ delay?: number
12
+ }
13
+
14
+ const props = withDefaults(defineProps<TooltipProps>(), {
15
+ position: 'top',
16
+ delay: 200,
17
+ })
18
+
19
+ let tooltipIdCounter = 0
20
+ const tooltipId = `strand-tooltip-${++tooltipIdCounter}`
21
+
22
+ const visible = ref(false)
23
+ let timer: ReturnType<typeof setTimeout> | null = null
24
+
25
+ function show() {
26
+ timer = setTimeout(() => {
27
+ visible.value = true
28
+ }, props.delay)
29
+ }
30
+
31
+ function hide() {
32
+ if (timer !== null) {
33
+ clearTimeout(timer)
34
+ timer = null
35
+ }
36
+ visible.value = false
37
+ }
38
+
39
+ onUnmounted(() => {
40
+ if (timer !== null) {
41
+ clearTimeout(timer)
42
+ }
43
+ })
44
+
45
+ const wrapperClasses = computed(() =>
46
+ ['strand-tooltip__wrapper'].filter(Boolean).join(' '),
47
+ )
48
+
49
+ const tooltipClasses = computed(() =>
50
+ [
51
+ 'strand-tooltip',
52
+ `strand-tooltip--${props.position}`,
53
+ visible.value && 'strand-tooltip--visible',
54
+ ]
55
+ .filter(Boolean)
56
+ .join(' '),
57
+ )
58
+ </script>
59
+
60
+ <template>
61
+ <span
62
+ :class="wrapperClasses"
63
+ :aria-describedby="tooltipId"
64
+ @mouseenter="show"
65
+ @mouseleave="hide"
66
+ @focus="show"
67
+ @blur="hide"
68
+ >
69
+ <slot />
70
+ <span
71
+ :id="tooltipId"
72
+ :class="tooltipClasses"
73
+ role="tooltip"
74
+ :aria-hidden="!visible"
75
+ >
76
+ {{ content }}
77
+ </span>
78
+ </span>
79
+ </template>
@@ -0,0 +1,2 @@
1
+ /*! Strand Vue | MIT License | dillingerstaffing.com */
2
+ export { default as Tooltip } from './Tooltip.vue'
package/src/index.ts ADDED
@@ -0,0 +1,44 @@
1
+ /*! Strand Vue | MIT License | dillingerstaffing.com */
2
+
3
+ // Input
4
+ export { default as Button } from "./components/Button/Button.vue";
5
+ export { default as Input } from "./components/Input/Input.vue";
6
+ export { default as Textarea } from "./components/Textarea/Textarea.vue";
7
+ export { default as Select } from "./components/Select/Select.vue";
8
+ export { default as Checkbox } from "./components/Checkbox/Checkbox.vue";
9
+ export { default as Radio } from "./components/Radio/Radio.vue";
10
+ export { default as Switch } from "./components/Switch/Switch.vue";
11
+ export { default as Slider } from "./components/Slider/Slider.vue";
12
+ export { default as FormField } from "./components/FormField/FormField.vue";
13
+
14
+ // Display
15
+ export { default as Card } from "./components/Card/Card.vue";
16
+ export { default as Badge } from "./components/Badge/Badge.vue";
17
+ export { default as Avatar } from "./components/Avatar/Avatar.vue";
18
+ export { default as Tag } from "./components/Tag/Tag.vue";
19
+ export { default as Table } from "./components/Table/Table.vue";
20
+ export { default as DataReadout } from "./components/DataReadout/DataReadout.vue";
21
+
22
+ // Layout
23
+ export { default as Stack } from "./components/Stack/Stack.vue";
24
+ export { default as Grid } from "./components/Grid/Grid.vue";
25
+ export { default as Container } from "./components/Container/Container.vue";
26
+ export { default as Divider } from "./components/Divider/Divider.vue";
27
+ export { default as Section } from "./components/Section/Section.vue";
28
+
29
+ // Navigation
30
+ export { default as Link } from "./components/Link/Link.vue";
31
+ export { default as Tabs } from "./components/Tabs/Tabs.vue";
32
+ export { default as Breadcrumb } from "./components/Breadcrumb/Breadcrumb.vue";
33
+ export { default as Nav } from "./components/Nav/Nav.vue";
34
+
35
+ // Feedback
36
+ export { default as Toast } from "./components/Toast/Toast.vue";
37
+ export { default as ToastProvider } from "./components/Toast/ToastProvider.vue";
38
+ export { useToast } from "./components/Toast/useToast";
39
+ export { default as Alert } from "./components/Alert/Alert.vue";
40
+ export { default as Dialog } from "./components/Dialog/Dialog.vue";
41
+ export { default as Tooltip } from "./components/Tooltip/Tooltip.vue";
42
+ export { default as Progress } from "./components/Progress/Progress.vue";
43
+ export { default as Spinner } from "./components/Spinner/Spinner.vue";
44
+ export { default as Skeleton } from "./components/Skeleton/Skeleton.vue";
@@ -0,0 +1,7 @@
1
+ import "@testing-library/jest-dom/vitest";
2
+ import { cleanup } from "@testing-library/vue";
3
+ import { afterEach } from "vitest";
4
+
5
+ afterEach(() => {
6
+ cleanup();
7
+ });