@sabrenski/spire-ui 0.0.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 (237) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/dist/index.d.ts +4981 -0
  4. package/dist/spire-ui.css +1 -0
  5. package/dist/spire-ui.es.js +18403 -0
  6. package/dist/spire-ui.umd.js +45 -0
  7. package/package.json +83 -0
  8. package/src/components/Accordion/Accordion.test.ts +218 -0
  9. package/src/components/Accordion/AccordionContent.vue +112 -0
  10. package/src/components/Accordion/AccordionItem.vue +87 -0
  11. package/src/components/Accordion/AccordionRoot.vue +111 -0
  12. package/src/components/Accordion/AccordionTrigger.vue +125 -0
  13. package/src/components/Accordion/index.ts +11 -0
  14. package/src/components/Accordion/keys.ts +23 -0
  15. package/src/components/Avatar/Avatar.test.ts +181 -0
  16. package/src/components/Avatar/Avatar.vue +150 -0
  17. package/src/components/Avatar/index.ts +2 -0
  18. package/src/components/Badge/Badge.test.ts +141 -0
  19. package/src/components/Badge/Badge.vue +133 -0
  20. package/src/components/Badge/index.ts +2 -0
  21. package/src/components/BadgeContainer/BadgeContainer.test.ts +150 -0
  22. package/src/components/BadgeContainer/BadgeContainer.vue +90 -0
  23. package/src/components/BadgeContainer/index.ts +2 -0
  24. package/src/components/Breadcrumb/Breadcrumb.test.ts +342 -0
  25. package/src/components/Breadcrumb/BreadcrumbEllipsis.vue +96 -0
  26. package/src/components/Breadcrumb/BreadcrumbItem.vue +16 -0
  27. package/src/components/Breadcrumb/BreadcrumbLink.vue +67 -0
  28. package/src/components/Breadcrumb/BreadcrumbList.vue +20 -0
  29. package/src/components/Breadcrumb/BreadcrumbPage.vue +25 -0
  30. package/src/components/Breadcrumb/BreadcrumbRoot.vue +41 -0
  31. package/src/components/Breadcrumb/BreadcrumbSeparator.vue +63 -0
  32. package/src/components/Breadcrumb/index.ts +13 -0
  33. package/src/components/Breadcrumb/keys.ts +7 -0
  34. package/src/components/Button/Button.test.ts +231 -0
  35. package/src/components/Button/Button.vue +349 -0
  36. package/src/components/Button/index.ts +2 -0
  37. package/src/components/Callout/Callout.test.ts +260 -0
  38. package/src/components/Callout/Callout.vue +341 -0
  39. package/src/components/Callout/index.ts +2 -0
  40. package/src/components/Card/Card.test.ts +565 -0
  41. package/src/components/Card/Card.vue +209 -0
  42. package/src/components/Card/CardContent.vue +57 -0
  43. package/src/components/Card/CardFooter.vue +72 -0
  44. package/src/components/Card/CardHeader.vue +111 -0
  45. package/src/components/Card/CardImage.vue +124 -0
  46. package/src/components/Card/index.ts +14 -0
  47. package/src/components/Chart/BarChart.vue +208 -0
  48. package/src/components/Chart/BaseChart.vue +444 -0
  49. package/src/components/Chart/Chart.test.ts +359 -0
  50. package/src/components/Chart/DonutChart.vue +283 -0
  51. package/src/components/Chart/LineChart.vue +211 -0
  52. package/src/components/Chart/index.ts +20 -0
  53. package/src/components/Chart/useChartTheme.ts +192 -0
  54. package/src/components/Checkbox/Checkbox.test.ts +209 -0
  55. package/src/components/Checkbox/Checkbox.vue +285 -0
  56. package/src/components/Checkbox/index.ts +2 -0
  57. package/src/components/ChoiceChip/ChoiceChip.test.ts +142 -0
  58. package/src/components/ChoiceChip/ChoiceChip.vue +218 -0
  59. package/src/components/ChoiceChip/index.ts +2 -0
  60. package/src/components/ChoiceChipGroup/ChoiceChipGroup.test.ts +151 -0
  61. package/src/components/ChoiceChipGroup/ChoiceChipGroup.vue +70 -0
  62. package/src/components/ChoiceChipGroup/index.ts +2 -0
  63. package/src/components/ColorPicker/ColorArea.vue +159 -0
  64. package/src/components/ColorPicker/ColorPicker.test.ts +250 -0
  65. package/src/components/ColorPicker/ColorPicker.vue +339 -0
  66. package/src/components/ColorPicker/ColorSlider.vue +191 -0
  67. package/src/components/ColorPicker/index.ts +7 -0
  68. package/src/components/Combobox/Combobox.test.ts +891 -0
  69. package/src/components/Combobox/Combobox.vue +934 -0
  70. package/src/components/Combobox/index.ts +2 -0
  71. package/src/components/DataTable/DataTable.test.ts +1221 -0
  72. package/src/components/DataTable/DataTable.vue +1415 -0
  73. package/src/components/DataTable/index.ts +10 -0
  74. package/src/components/DatePicker/DatePicker.test.ts +625 -0
  75. package/src/components/DatePicker/DatePicker.vue +1586 -0
  76. package/src/components/DatePicker/index.ts +2 -0
  77. package/src/components/Drawer/Drawer.test.ts +336 -0
  78. package/src/components/Drawer/Drawer.vue +466 -0
  79. package/src/components/Drawer/index.ts +2 -0
  80. package/src/components/Dropdown/Dropdown.test.ts +607 -0
  81. package/src/components/Dropdown/Dropdown.vue +807 -0
  82. package/src/components/Dropdown/DropdownItem.vue +227 -0
  83. package/src/components/Dropdown/DropdownSeparator.vue +14 -0
  84. package/src/components/Dropdown/DropdownSub.vue +104 -0
  85. package/src/components/Dropdown/DropdownSubContent.vue +187 -0
  86. package/src/components/Dropdown/DropdownSubTrigger.vue +151 -0
  87. package/src/components/Dropdown/index.ts +14 -0
  88. package/src/components/EmptyState/EmptyState.test.ts +180 -0
  89. package/src/components/EmptyState/EmptyState.vue +137 -0
  90. package/src/components/EmptyState/index.ts +2 -0
  91. package/src/components/FileUpload/FileUpload.test.ts +1151 -0
  92. package/src/components/FileUpload/FileUpload.vue +1042 -0
  93. package/src/components/FileUpload/index.ts +2 -0
  94. package/src/components/Heading/Heading.test.ts +107 -0
  95. package/src/components/Heading/Heading.vue +67 -0
  96. package/src/components/Heading/index.ts +2 -0
  97. package/src/components/Icon/Icon.test.ts +157 -0
  98. package/src/components/Icon/Icon.vue +86 -0
  99. package/src/components/Icon/index.ts +2 -0
  100. package/src/components/Input/Input.test.ts +273 -0
  101. package/src/components/Input/Input.vue +388 -0
  102. package/src/components/Input/index.ts +2 -0
  103. package/src/components/Layout/Container.vue +67 -0
  104. package/src/components/Layout/Grid.vue +159 -0
  105. package/src/components/Layout/GridItem.vue +154 -0
  106. package/src/components/Layout/Layout.test.ts +202 -0
  107. package/src/components/Layout/Stack.vue +128 -0
  108. package/src/components/Layout/index.ts +9 -0
  109. package/src/components/Layout/keys.ts +7 -0
  110. package/src/components/Modal/Modal.test.ts +311 -0
  111. package/src/components/Modal/Modal.vue +336 -0
  112. package/src/components/Modal/index.ts +2 -0
  113. package/src/components/Pagination/Pagination.test.ts +303 -0
  114. package/src/components/Pagination/Pagination.vue +212 -0
  115. package/src/components/Pagination/index.ts +3 -0
  116. package/src/components/Pagination/utils.ts +86 -0
  117. package/src/components/Popover/Popover.test.ts +285 -0
  118. package/src/components/Popover/Popover.vue +441 -0
  119. package/src/components/Popover/index.ts +2 -0
  120. package/src/components/Progress/Progress.test.ts +361 -0
  121. package/src/components/Progress/Progress.vue +363 -0
  122. package/src/components/Progress/index.ts +7 -0
  123. package/src/components/Radio/Radio.test.ts +216 -0
  124. package/src/components/Radio/Radio.vue +214 -0
  125. package/src/components/Radio/index.ts +2 -0
  126. package/src/components/Rating/Rating.test.ts +319 -0
  127. package/src/components/Rating/Rating.vue +247 -0
  128. package/src/components/Rating/index.ts +2 -0
  129. package/src/components/SegmentedControl/SegmentedControl.test.ts +292 -0
  130. package/src/components/SegmentedControl/SegmentedControl.vue +288 -0
  131. package/src/components/SegmentedControl/index.ts +2 -0
  132. package/src/components/Select/Select.test.ts +589 -0
  133. package/src/components/Select/Select.vue +666 -0
  134. package/src/components/Select/index.ts +2 -0
  135. package/src/components/Sidebar/Sidebar.test.ts +301 -0
  136. package/src/components/Sidebar/SidebarGroup.vue +103 -0
  137. package/src/components/Sidebar/SidebarItem.vue +196 -0
  138. package/src/components/Sidebar/SidebarLayout.vue +42 -0
  139. package/src/components/Sidebar/SidebarRoot.vue +122 -0
  140. package/src/components/Sidebar/index.ts +11 -0
  141. package/src/components/Sidebar/keys.ts +14 -0
  142. package/src/components/Skeleton/Skeleton.test.ts +130 -0
  143. package/src/components/Skeleton/Skeleton.vue +104 -0
  144. package/src/components/Skeleton/index.ts +2 -0
  145. package/src/components/Slider/Slider.test.ts +416 -0
  146. package/src/components/Slider/Slider.vue +435 -0
  147. package/src/components/Slider/index.ts +2 -0
  148. package/src/components/Slider/utils.ts +91 -0
  149. package/src/components/Spinner/Spinner.test.ts +79 -0
  150. package/src/components/Spinner/Spinner.vue +159 -0
  151. package/src/components/Spinner/index.ts +2 -0
  152. package/src/components/SpireProvider/SpireProvider.vue +71 -0
  153. package/src/components/SpireProvider/index.ts +11 -0
  154. package/src/components/Stepper/Stepper.test.ts +221 -0
  155. package/src/components/Stepper/StepperContent.vue +51 -0
  156. package/src/components/Stepper/StepperItem.vue +89 -0
  157. package/src/components/Stepper/StepperRoot.vue +101 -0
  158. package/src/components/Stepper/StepperSeparator.vue +52 -0
  159. package/src/components/Stepper/StepperTrigger.vue +144 -0
  160. package/src/components/Stepper/index.ts +11 -0
  161. package/src/components/Stepper/keys.ts +27 -0
  162. package/src/components/Switch/Switch.test.ts +214 -0
  163. package/src/components/Switch/Switch.vue +235 -0
  164. package/src/components/Switch/index.ts +2 -0
  165. package/src/components/Tabs/Tabs.test.ts +363 -0
  166. package/src/components/Tabs/Tabs.vue +318 -0
  167. package/src/components/Tabs/index.ts +2 -0
  168. package/src/components/Text/Text.test.ts +154 -0
  169. package/src/components/Text/Text.vue +100 -0
  170. package/src/components/Text/index.ts +2 -0
  171. package/src/components/Textarea/Textarea.test.ts +432 -0
  172. package/src/components/Textarea/Textarea.vue +411 -0
  173. package/src/components/Textarea/index.ts +2 -0
  174. package/src/components/TimePicker/TimePicker.test.ts +352 -0
  175. package/src/components/TimePicker/TimePicker.vue +569 -0
  176. package/src/components/TimePicker/index.ts +2 -0
  177. package/src/components/Timeline/Timeline.test.ts +193 -0
  178. package/src/components/Timeline/Timeline.vue +111 -0
  179. package/src/components/Timeline/TimelineItem.vue +167 -0
  180. package/src/components/Timeline/index.ts +13 -0
  181. package/src/components/Timeline/keys.ts +21 -0
  182. package/src/components/Toast/ToastItem.test.ts +289 -0
  183. package/src/components/Toast/ToastItem.vue +370 -0
  184. package/src/components/Toast/ToastProvider.test.ts +158 -0
  185. package/src/components/Toast/ToastProvider.vue +181 -0
  186. package/src/components/Toast/index.ts +83 -0
  187. package/src/components/Toast/toastState.test.ts +165 -0
  188. package/src/components/Toast/toastState.ts +161 -0
  189. package/src/components/ToggleButton/ToggleButton.test.ts +166 -0
  190. package/src/components/ToggleButton/ToggleButton.vue +197 -0
  191. package/src/components/ToggleButton/index.ts +2 -0
  192. package/src/components/ToggleGroup/ToggleGroup.test.ts +181 -0
  193. package/src/components/ToggleGroup/ToggleGroup.vue +130 -0
  194. package/src/components/ToggleGroup/index.ts +2 -0
  195. package/src/components/Tooltip/Tooltip.test.ts +238 -0
  196. package/src/components/Tooltip/Tooltip.vue +217 -0
  197. package/src/components/Tooltip/index.ts +2 -0
  198. package/src/components/TreeView/TreeView.test.ts +357 -0
  199. package/src/components/TreeView/TreeView.vue +251 -0
  200. package/src/components/TreeView/TreeViewItem.vue +288 -0
  201. package/src/components/TreeView/index.ts +11 -0
  202. package/src/components/TreeView/keys.ts +35 -0
  203. package/src/composables/index.ts +12 -0
  204. package/src/composables/useClickOutside.ts +36 -0
  205. package/src/composables/useClipboard.ts +35 -0
  206. package/src/composables/useEventListener.ts +48 -0
  207. package/src/composables/useFocusTrap.ts +58 -0
  208. package/src/composables/useHoverReveal.ts +98 -0
  209. package/src/composables/useId.ts +10 -0
  210. package/src/composables/useMagnetic.ts +171 -0
  211. package/src/composables/useRelativePosition.ts +127 -0
  212. package/src/composables/useRipple.ts +146 -0
  213. package/src/composables/useScrollLock.ts +25 -0
  214. package/src/composables/useSpireConfig.ts +27 -0
  215. package/src/composables/useStagger.ts +224 -0
  216. package/src/config/icons.test.ts +115 -0
  217. package/src/config/icons.ts +170 -0
  218. package/src/index.ts +361 -0
  219. package/src/styles/depth.css +129 -0
  220. package/src/styles/effects.css +169 -0
  221. package/src/styles/fallback.css +152 -0
  222. package/src/styles/main.css +25 -0
  223. package/src/styles/mood.css +211 -0
  224. package/src/styles/motion.css +159 -0
  225. package/src/styles/reset.css +97 -0
  226. package/src/styles/theme.css +708 -0
  227. package/src/styles/tokens.css +183 -0
  228. package/src/utils/.gitkeep +0 -0
  229. package/src/utils/color.ts +277 -0
  230. package/src/utils/date.test.ts +522 -0
  231. package/src/utils/date.ts +380 -0
  232. package/src/utils/index.ts +23 -0
  233. package/src/utils/object.test.ts +80 -0
  234. package/src/utils/object.ts +25 -0
  235. package/src/utils/string.test.ts +64 -0
  236. package/src/utils/string.ts +32 -0
  237. package/src/utils/time.ts +156 -0
@@ -0,0 +1,288 @@
1
+ <script setup lang="ts">
2
+ import { ref, computed, watch, onMounted, nextTick } from 'vue'
3
+ import { useId } from '../../composables'
4
+
5
+ export interface SegmentedOption {
6
+ label: string
7
+ value: string | number
8
+ disabled?: boolean
9
+ }
10
+
11
+ export interface SegmentedControlProps {
12
+ /** Array of options to display */
13
+ options: SegmentedOption[]
14
+ /** Selected value (v-model) */
15
+ modelValue?: string | number
16
+ /** Control size */
17
+ size?: 'sm' | 'md' | 'lg'
18
+ /** Disabled state */
19
+ disabled?: boolean
20
+ /** Accessible label for the group */
21
+ label?: string
22
+ /** HTML name for form submission */
23
+ name?: string
24
+ /** ID for the control */
25
+ id?: string
26
+ }
27
+
28
+ const props = withDefaults(defineProps<SegmentedControlProps>(), {
29
+ size: 'md',
30
+ disabled: false
31
+ })
32
+
33
+ const emit = defineEmits<{
34
+ (e: 'update:modelValue', value: string | number): void
35
+ (e: 'change', value: string | number): void
36
+ }>()
37
+
38
+ const containerRef = ref<HTMLElement | null>(null)
39
+ const itemRefs = ref<HTMLButtonElement[]>([])
40
+
41
+ const uid = useId('segmented')
42
+ const controlId = computed(() => props.id || uid)
43
+
44
+ const gliderStyle = ref({
45
+ transform: 'translateX(0px)',
46
+ width: '0px',
47
+ opacity: 0
48
+ })
49
+
50
+ const selectedIndex = computed(() =>
51
+ props.options.findIndex(opt => opt.value === props.modelValue)
52
+ )
53
+
54
+ function updateGlider() {
55
+ const index = selectedIndex.value
56
+ if (index === -1 || !itemRefs.value[index]) {
57
+ gliderStyle.value.opacity = 0
58
+ return
59
+ }
60
+
61
+ const item = itemRefs.value[index]
62
+ const container = containerRef.value
63
+ if (!container) return
64
+
65
+ const containerRect = container.getBoundingClientRect()
66
+ const itemRect = item.getBoundingClientRect()
67
+
68
+ const offsetX = itemRect.left - containerRect.left
69
+ const width = item.offsetWidth
70
+
71
+ gliderStyle.value = {
72
+ transform: `translateX(${offsetX}px)`,
73
+ width: `${width}px`,
74
+ opacity: 1
75
+ }
76
+ }
77
+
78
+ watch(() => props.modelValue, () => {
79
+ nextTick(updateGlider)
80
+ })
81
+
82
+ watch(() => props.options, () => {
83
+ nextTick(updateGlider)
84
+ }, { deep: true })
85
+
86
+ onMounted(() => {
87
+ requestAnimationFrame(() => {
88
+ updateGlider()
89
+ })
90
+ })
91
+
92
+ function selectOption(option: SegmentedOption) {
93
+ if (props.disabled || option.disabled) return
94
+ emit('update:modelValue', option.value)
95
+ emit('change', option.value)
96
+ }
97
+
98
+ function handleKeydown(event: KeyboardEvent, index: number) {
99
+ const enabledOptions = props.options
100
+ .map((opt, i) => ({ opt, i }))
101
+ .filter(({ opt }) => !opt.disabled)
102
+
103
+ const currentEnabledIndex = enabledOptions.findIndex(({ i }) => i === index)
104
+ if (currentEnabledIndex === -1) return
105
+
106
+ let nextIndex = -1
107
+
108
+ switch (event.key) {
109
+ case 'ArrowRight':
110
+ case 'ArrowDown':
111
+ event.preventDefault()
112
+ nextIndex = enabledOptions[(currentEnabledIndex + 1) % enabledOptions.length].i
113
+ break
114
+ case 'ArrowLeft':
115
+ case 'ArrowUp':
116
+ event.preventDefault()
117
+ nextIndex = enabledOptions[(currentEnabledIndex - 1 + enabledOptions.length) % enabledOptions.length].i
118
+ break
119
+ case 'Home':
120
+ event.preventDefault()
121
+ nextIndex = enabledOptions[0].i
122
+ break
123
+ case 'End':
124
+ event.preventDefault()
125
+ nextIndex = enabledOptions[enabledOptions.length - 1].i
126
+ break
127
+ }
128
+
129
+ if (nextIndex !== -1 && itemRefs.value[nextIndex]) {
130
+ itemRefs.value[nextIndex].focus()
131
+ selectOption(props.options[nextIndex])
132
+ }
133
+ }
134
+
135
+ function setItemRef(el: HTMLButtonElement | null, index: number) {
136
+ if (el) {
137
+ itemRefs.value[index] = el
138
+ }
139
+ }
140
+ </script>
141
+
142
+ <template>
143
+ <div
144
+ ref="containerRef"
145
+ :id="controlId"
146
+ role="radiogroup"
147
+ :aria-label="label"
148
+ :aria-disabled="disabled || undefined"
149
+ class="ui-segmented"
150
+ :class="[
151
+ `ui-segmented--${size}`,
152
+ { 'ui-segmented--disabled': disabled }
153
+ ]"
154
+ >
155
+ <div
156
+ class="ui-segmented__glider"
157
+ :style="gliderStyle"
158
+ aria-hidden="true"
159
+ />
160
+
161
+ <button
162
+ v-for="(option, index) in options"
163
+ :key="option.value"
164
+ :ref="(el) => setItemRef(el as HTMLButtonElement, index)"
165
+ type="button"
166
+ role="radio"
167
+ :aria-checked="modelValue === option.value"
168
+ :disabled="disabled || option.disabled"
169
+ :tabindex="modelValue === option.value ? 0 : -1"
170
+ class="ui-segmented__item"
171
+ :class="{
172
+ 'ui-segmented__item--selected': modelValue === option.value,
173
+ 'ui-segmented__item--disabled': option.disabled
174
+ }"
175
+ @click="selectOption(option)"
176
+ @keydown="handleKeydown($event, index)"
177
+ >
178
+ {{ option.label }}
179
+ </button>
180
+
181
+ <input
182
+ v-if="name"
183
+ type="hidden"
184
+ :name="name"
185
+ :value="modelValue"
186
+ />
187
+ </div>
188
+ </template>
189
+
190
+ <style scoped>
191
+ .ui-segmented {
192
+ position: relative;
193
+ display: inline-flex;
194
+ align-items: center;
195
+ background: var(--segmented-bg);
196
+ border-radius: var(--radius-md);
197
+ padding: var(--space-1);
198
+ gap: var(--space-0-5);
199
+ font-family: var(--font-sans);
200
+ }
201
+
202
+ .ui-segmented--disabled {
203
+ opacity: 0.5;
204
+ cursor: not-allowed;
205
+ }
206
+
207
+ .ui-segmented__glider {
208
+ position: absolute;
209
+ top: var(--space-1);
210
+ bottom: var(--space-1);
211
+ left: 0;
212
+ background: var(--segmented-glider);
213
+ border-radius: calc(var(--radius-md) - 2px);
214
+ box-shadow: var(--shadow-sm);
215
+ transition:
216
+ transform var(--duration-normal) var(--ease-out-back),
217
+ width var(--duration-normal) var(--ease-out-back),
218
+ opacity var(--duration-fast) var(--ease-default);
219
+ pointer-events: none;
220
+ }
221
+
222
+ .ui-segmented__item {
223
+ position: relative;
224
+ z-index: 1;
225
+ display: flex;
226
+ align-items: center;
227
+ justify-content: center;
228
+ flex: 1 1 0%;
229
+ min-width: 0;
230
+ padding: 0 var(--space-3);
231
+ background: transparent;
232
+ border: none;
233
+ border-radius: calc(var(--radius-md) - 2px);
234
+ font-family: inherit;
235
+ font-weight: var(--font-medium);
236
+ color: var(--segmented-text);
237
+ cursor: pointer;
238
+ transition: color var(--duration-fast) var(--ease-default);
239
+ -webkit-tap-highlight-color: transparent;
240
+ }
241
+
242
+ .ui-segmented__item:focus-visible {
243
+ outline: 2px solid var(--ring-color);
244
+ outline-offset: 2px;
245
+ }
246
+
247
+ .ui-segmented__item--selected {
248
+ color: var(--segmented-text-active);
249
+ }
250
+
251
+ .ui-segmented__item--disabled {
252
+ opacity: 0.5;
253
+ cursor: not-allowed;
254
+ }
255
+
256
+ .ui-segmented:not(.ui-segmented--disabled) .ui-segmented__item:not(.ui-segmented__item--disabled):hover {
257
+ color: var(--segmented-text-hover);
258
+ }
259
+
260
+ .ui-segmented--sm {
261
+ min-height: 32px;
262
+ }
263
+
264
+ .ui-segmented--sm .ui-segmented__item {
265
+ height: 24px;
266
+ font-size: var(--text-xs);
267
+ padding: 0 var(--space-2);
268
+ }
269
+
270
+ .ui-segmented--md {
271
+ min-height: 40px;
272
+ }
273
+
274
+ .ui-segmented--md .ui-segmented__item {
275
+ height: 32px;
276
+ font-size: var(--text-sm);
277
+ }
278
+
279
+ .ui-segmented--lg {
280
+ min-height: 48px;
281
+ }
282
+
283
+ .ui-segmented--lg .ui-segmented__item {
284
+ height: 40px;
285
+ font-size: var(--text-md);
286
+ padding: 0 var(--space-4);
287
+ }
288
+ </style>
@@ -0,0 +1,2 @@
1
+ export { default as SegmentedControl } from './SegmentedControl.vue'
2
+ export type { SegmentedControlProps, SegmentedOption } from './SegmentedControl.vue'