@surgeui/ds-vue 3.0.0 → 3.0.2

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/README.md CHANGED
@@ -1,373 +1,268 @@
1
- # SurgeUI Vue Design System
2
-
3
- A modern **Vue.js 3** component library with Composition API, designed to create beautiful and consistent user interfaces.
4
-
5
- [![npm](https://img.shields.io/npm/v/@surgeui/ds-vue)](https://www.npmjs.com/package/@surgeui/ds-vue)
6
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
- [![Vue 3](https://img.shields.io/badge/Vue-3.x-4FC08D.svg)](https://vuejs.org/)
8
- [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-3178C6.svg)](https://www.typescriptlang.org/)
9
-
10
-
11
- ## ✨ Features
12
-
13
- - 🎨 **Modern Design** - Polished and professional components
14
- - 🎯 **Composition API** - Built with Vue 3 Composition API
15
- - 🔧 **TypeScript** - Full TypeScript support for better developer experience
16
- - 🎨 **Customizable** - Global configuration and theming support
17
- - 📱 **Responsive** - Components adapted to all screen sizes
18
- - ♿ **Accessible** - WCAG 2.1 AA compliant with complete accessibility support
19
- - 🌙 **Dark Mode** - Native dark mode support
20
- - ⚡ **Performance** - Optimized for best performance
21
-
22
-
23
- ## Quick Start
24
-
25
- ### Installation
26
-
27
- ```bash
28
- npm install @surgeui/ds-vue
29
- ```
30
-
31
- ### Basic Usage
32
-
33
- ```vue
34
- <script setup lang="ts" >
35
- import '@surgeui/ds-vue/style.css'
36
- import { SuButton } from '@surgeui/ds-vue'
37
- import type { ButtonProps } from '@surgeui/ds-vue/types'
38
- </script>
39
-
40
- <template>
41
- <SuButton variant="primary">
42
- My first button
43
- </SuButton>
44
- </template>
45
- ```
46
-
47
- ### Global Installation
48
-
49
- ```ts
50
- // main.js
51
- import { createApp } from 'vue'
52
- import SurgeUpDS from '@surgeui/ds-vue'
53
- import '@surgeui/ds-vue/style.css'
54
- import App from './App.vue'
55
-
56
- const app = createApp(App)
57
- app.use(SurgeUpDS)
58
- app.mount('#app')
59
- ```
60
-
61
- ## 🎨 Customization & Theming
62
-
63
- SurgeUI provides a **declarative, CSS-based theming system** that allows you to customize colors and styles by defining custom CSS variables.
64
-
65
- ### How It Works
66
-
67
- The customization system automatically converts theme properties into CSS variables with the `--su-custom-` prefix. These variables can override the default theme tokens when defined.
68
-
69
- ### Global Configuration
70
-
71
- Configure the design system when installing:
72
-
73
- ```ts
74
- import { createApp } from 'vue'
75
- import SurgeUpDS from '@surgeui/ds-vue'
76
- import '@surgeui/ds-vue/style.css'
77
- import App from './App.vue'
78
-
79
- const app = createApp(App)
80
-
81
- const themeConfig = {
82
- // Component prefix (default: 'Su')
83
- prefix: 'My', // Components become MyButton, MyInput, etc.
84
-
85
- // Theme customization via CSS variables
86
- theme: {
87
- // Text colors
88
- textPrimary: '#1f2937',
89
- textSecondary: '#6b7280',
90
- textTertiary: '#9ca3af',
91
- textDisabled: '#d1d5db',
92
-
93
- // Background colors
94
- bgCanvas: '#ffffff',
95
- bgSurface: '#f9fafb',
96
- bgOverlay: 'rgba(0, 0, 0, 0.5)',
97
-
98
- // Border colors
99
- borderDefault: '#e5e7eb',
100
- borderFocus: '#3b82f6',
101
-
102
- // Action colors
103
- primaryDefault: '#3b82f6',
104
- primaryHover: '#2563eb',
105
- primaryText: '#ffffff',
106
-
107
- // State colors
108
- stateSuccess: '#10b981',
109
- stateWarning: '#f59e0b',
110
- stateError: '#ef4444',
111
- }
112
- }
113
-
114
- app.use(SurgeUpDS, themeConfig)
115
- app.mount('#app')
116
- ```
117
-
118
- ### CSS Variable Generation
119
-
120
- All theme properties are automatically converted to CSS custom properties with the `--su-custom-` prefix:
121
-
122
- ```ts
123
- theme: {
124
- textPrimary: '#1f2937' // → --su-custom-text-primary
125
- bgSurface: '#f9fafb' // → --su-custom-bg-surface
126
- primaryDefault: '#3b82f6' // → --su-custom-primary-default
127
- stateSuccessBg: '#d1fae5' // → --su-custom-state-success-bg
128
- }
129
- ```
130
-
131
- ### Using Custom Variables in CSS
132
-
133
- Define custom variables in your CSS and they will automatically take precedence over default theme tokens:
134
-
135
- ```css
136
- /* In your global CSS file */
137
- :root {
138
- /* Text customization */
139
- --su-custom-text-primary: #1f2937;
140
- --su-custom-text-secondary: #6b7280;
141
-
142
- /* Background customization */
143
- --su-custom-bg-canvas: #ffffff;
144
- --su-custom-bg-surface: #f9fafb;
145
-
146
- /* Button customization */
147
- --su-custom-primary-default: #3b82f6;
148
- --su-custom-primary-hover: #2563eb;
149
- --su-custom-primary-text: #ffffff;
150
-
151
- /* State customization */
152
- --su-custom-state-success: #10b981;
153
- --su-custom-state-error: #ef4444;
154
- }
155
-
156
- /* Dark mode example */
157
- @media (prefers-color-scheme: dark) {
158
- :root {
159
- --su-custom-text-primary: #f3f4f6;
160
- --su-custom-bg-canvas: #111827;
161
- --su-custom-bg-surface: #1f2937;
162
- }
163
- }
164
- ```
165
-
166
- ### Available Theme Tokens
167
-
168
- #### Text Tokens
169
- - `textPrimary` - Primary text color
170
- - `textSecondary` - Secondary text color
171
- - `textTertiary` - Tertiary text color
172
- - `textDisabled` - Disabled text color
173
- - `textInverse` - Inverse text color (for contrast backgrounds)
174
-
175
- #### Background Tokens
176
- - `bgCanvas` - Canvas/page background
177
- - `bgSurface` - Card and modal backgrounds
178
- - `bgSurfaceElevated` - Elevated surface backgrounds
179
- - `bgHover` - Hover state background
180
- - `bgActive` - Active state background
181
- - `bgSelected` - Selected state background
182
- - `bgOverlay` - Overlay/backdrop background
183
-
184
- #### Border Tokens
185
- - `borderDefault` - Default border color
186
- - `borderSubtle` - Subtle border color
187
- - `borderStrong` - Strong border color
188
- - `borderFocus` - Focus state border
189
- - `borderDisabled` - Disabled border
190
-
191
- #### Action Tokens
192
- - `primaryDefault` - Primary action default
193
- - `primaryHover` - Primary action hover
194
- - `primaryActive` - Primary action active
195
- - `primaryDisabled` - Primary action disabled
196
- - `primaryText` - Primary action text
197
- - `secondaryDefault` - Secondary action default
198
- - `secondaryHover` - Secondary action hover
199
- - `secondaryText` - Secondary action text
200
-
201
- #### State Tokens
202
- - `stateSuccess` - Success state color
203
- - `stateSuccessBg` - Success background
204
- - `stateWarning` - Warning state color
205
- - `stateWarningBg` - Warning background
206
- - `stateError` - Error state color
207
- - `stateErrorBg` - Error background
208
- - `stateInfo` - Info state color
209
- - `stateInfoBg` - Info background
210
-
211
- #### Link Tokens (legacy configuration)
212
- - `linkVariant` - Default link variant
213
- - `linkSize` - Default link size
214
- - `linkUnderline` - Default underline style
215
- - `dialogDisplay` - Default dialog display mode
216
-
217
- ### Variable Priority & Fallback
218
-
219
- Variables follow this priority order:
220
-
221
- 1. **Custom CSS variables** (`--su-custom-*`) - Highest priority
222
- 2. **Theme configuration** - Applied during plugin initialization
223
- 3. **Default theme tokens** - Fallbacks from theme definitions
224
-
225
- This means:
226
- - CSS variables defined in `:root` or element styles always take precedence
227
- - Variables not defined in the theme config fall back to default tokens
228
- - You can override specific tokens without defining the entire theme
229
-
230
- ### Scoped Customization
231
-
232
- Apply different themes to different parts of your application:
233
-
234
- ```vue
235
- <template>
236
- <!-- Light theme section -->
237
- <section class="light-section">
238
- <SuButton>Light Button</SuButton>
239
- </section>
240
-
241
- <!-- Dark theme section -->
242
- <section class="dark-section">
243
- <SuButton>Dark Button</SuButton>
244
- </section>
245
- </template>
246
-
247
- <style scoped>
248
- .light-section {
249
- --su-custom-text-primary: #1f2937;
250
- --su-custom-bg-surface: #ffffff;
251
- }
252
-
253
- .dark-section {
254
- --su-custom-text-primary: #f3f4f6;
255
- --su-custom-bg-surface: #1f2937;
256
- }
257
- </style>
258
- ```
259
-
260
- ### With Icons
261
-
262
- SurgeUI use **Heroicons** for add and display icons
263
-
264
- ```vue
265
- <script setup>
266
- import { informationCircleIcon, HeartIcon } from '@heroicons/vue/24/outline'
267
- </script>
268
-
269
- <template>
270
- <SuHeading>
271
- <informationCircleIcon /> User informations
272
- </SuHeading>
273
- <SuButton variant="primary" :icon="HeartIcon" iconDisplay="left">
274
- I like it
275
- </SuButton>
276
- </template>
277
- ```
278
-
279
- ## ♿ Accessibility
280
-
281
- All components follow WCAG 2.1 AA standards:
282
-
283
- - **Focus Management** - Clear focus indicators and logical tab order
284
- - **Keyboard Navigation** - Full keyboard support
285
- - **Screen Readers** - Proper ARIA attributes and announcements
286
- - **Color Contrast** - WCAG AA compliant contrast ratios (4.5:1 minimum)
287
- - **Touch Targets** - Minimum 44px touch targets
288
- - **Reduced Motion** - Respects `prefers-reduced-motion`
289
- - **High Contrast** - Supports `prefers-contrast: high`
290
- - **RTL Support** - Right-to-left language support
291
-
292
- ## 🌙 Dark Mode
293
-
294
- Dark mode is automatically supported through CSS media queries:
295
-
296
- ```css
297
- @media (prefers-color-scheme: dark) {
298
- /* Dark mode styles are automatically applied */
299
- }
300
-
301
- .dark, [theme="dark"] * {
302
- /* Dark mode styles are automatically applied */
303
- }
304
- ```
305
-
306
- ## 📱 Responsive Design
307
-
308
- All components are responsive by default:
309
-
310
- - **Mobile-first** approach
311
- - **Flexible layouts** that adapt to screen size
312
- - **Touch-friendly** interactions
313
- - **Automatic responsive behavior** (e.g., FormFields switches to vertical on mobile)
314
-
315
- ## 🎭 Storybook
316
-
317
- Explore all components interactively in Storybook:
318
-
319
- ```bash
320
- npm run storybook
321
- ```
322
-
323
- ## 🛠️ Development
324
-
325
- ### Prerequisites
326
-
327
- - Node.js 16+
328
- - Vue.js 3.3+
329
-
330
- ### Build the library
331
-
332
- ```bash
333
- npm run build
334
- ```
335
-
336
- ### Development mode
337
-
338
- ```bash
339
- npm run dev
340
- ```
341
-
342
- ### Run Storybook
343
-
344
- ```bash
345
- npm run storybook
346
- ```
347
-
348
- ## 📖 Documentation
349
-
350
- Visit our [complete documentation](https://surgeui.com/) for:
351
-
352
- - **Component API** - Detailed props, events, and slots
353
- - **Usage examples** - Real-world implementation examples
354
- - **Accessibility guide** - Best practices for inclusive design
355
- - **Customization** - Theming and configuration options
356
-
357
- ## 🤝 Contributing
358
-
359
- We welcome contributions! Please see our [Contributing Guide](https://github.com/mahmoud-nb/surge.ui/blob/main/package/CONTRIBUTING.md) for details.
360
-
361
- ## 📄 License
362
-
363
- MIT License - see the [LICENSE](https://github.com/mahmoud-nb/surge.ui/blob/main/package/LICENSE.md) file for details.
364
-
365
- ## 🔗 Links
366
-
367
- - [Documentation](https://surgeui.com/)
368
- - [Storybook](https://surgeui.com/storybook/)
369
- - [GitHub Repository](https://github.com/mahmoud-nb/surge.ui)
370
-
371
- ---
372
-
373
- Made with ❤️ by the SurgeUp team
1
+ # SurgeUI Vue Design System
2
+
3
+ An accessible **Vue 3** component library: components, layouts and composables built with the Composition API and TypeScript, themable through CSS custom properties.
4
+
5
+ [![npm](https://img.shields.io/npm/v/@surgeui/ds-vue)](https://www.npmjs.com/package/@surgeui/ds-vue)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![Vue 3](https://img.shields.io/badge/Vue-3.5+-4FC08D.svg)](https://vuejs.org/)
8
+ [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-3178C6.svg)](https://www.typescriptlang.org/)
9
+
10
+ ## ✨ Features
11
+
12
+ - 🧩 **50+ components** - Display, actions, forms and 9 mobile-first layouts
13
+ - ♿ **Accessible** - WAI-ARIA patterns (combobox, menu button, tabs, accordion, dialog), full keyboard support, screen reader announcements
14
+ - 🎨 **Themable** - 4 built-in themes × light / dark mode, CSS custom properties (`--su-*`)
15
+ - 🌍 **Translatable** - Default texts in French and English, customizable messages
16
+ - 🔧 **TypeScript** - Typed props, emits and composables
17
+ - 📱 **Responsive** - Mobile first; layouts adapt to their **container** width (container queries)
18
+ - 🔄 **RTL & LTR** - Right-to-left support, including keyboard navigation
19
+
20
+ ## Quick Start
21
+
22
+ ### Requirements
23
+
24
+ - Vue **3.5+**
25
+
26
+ ### Installation
27
+
28
+ ```bash
29
+ npm install @surgeui/ds-vue
30
+ ```
31
+
32
+ ### Global installation (recommended)
33
+
34
+ Registers every component with the `Su` prefix (`SuButton`, `SuInputField`, …):
35
+
36
+ ```ts
37
+ // main.ts
38
+ import { createApp } from 'vue'
39
+ import SurgeUI from '@surgeui/ds-vue'
40
+ import '@surgeui/ds-vue/style.css'
41
+ import App from './App.vue'
42
+
43
+ createApp(App)
44
+ .use(SurgeUI)
45
+ .mount('#app')
46
+ ```
47
+
48
+ ```vue
49
+ <template>
50
+ <SuButton variant="primary">My first button</SuButton>
51
+ </template>
52
+ ```
53
+
54
+ ### Selective import
55
+
56
+ Components are exported **without** the prefix:
57
+
58
+ ```vue
59
+ <script setup lang="ts">
60
+ import '@surgeui/ds-vue/style.css'
61
+ import { Button as SuButton, InputField as SuInputField } from '@surgeui/ds-vue'
62
+ import type { ButtonProps } from '@surgeui/ds-vue'
63
+ </script>
64
+
65
+ <template>
66
+ <SuInputField label="Email" type="email" />
67
+ <SuButton variant="primary">Subscribe</SuButton>
68
+ </template>
69
+ ```
70
+
71
+ ### Plugin options
72
+
73
+ ```ts
74
+ import SurgeUI, { locales } from '@surgeui/ds-vue'
75
+
76
+ app.use(SurgeUI, {
77
+ prefix: 'Su', // Component prefix: SuButton, SuDialog…
78
+ locale: locales.en, // Default texts language (French by default)
79
+ theme: { // Theme overrides (see Customization)
80
+ primaryDefault: '#2563eb'
81
+ }
82
+ })
83
+ ```
84
+
85
+ ## 🧩 What's inside
86
+
87
+ | Category | Components |
88
+ |----------|------------|
89
+ | Display | Heading, Panel, Icon, Image, Avatar, AvatarGroup, Badge, Card, Alert, Tabs, Accordion, Dialog, Popover, Progress, Spinner, Price |
90
+ | Actions | Button, ButtonGroup, Link, LinkGroup, Toggle, ToggleGroup, Dropdown, FloatButton |
91
+ | Forms | Input, Textarea, Password, SelectBox, RadioGroup, CheckboxGroup, Switch, Slider, FileUpload, OtpInput, FormField, FormFieldGroup, and a `*Field` version of each control (label + message) |
92
+ | Layouts | SingleColumnLayout, SidebarLayout, SplitLayout, HolyGrailLayout, MagazineLayout, GridLayout, MasonryLayout, HeroLayout, FullScreenLayout |
93
+
94
+ ### Composables
95
+
96
+ | Composable | Purpose |
97
+ |------------|---------|
98
+ | `useTheme` | Theme and light / dark mode, system preference, persistence |
99
+ | `useCustomTheme` | Runtime CSS variable overrides |
100
+ | `useBreakpoint` | Reactive breakpoints |
101
+ | `usePrice` | Localized price formatting |
102
+ | `useLocale` | Default component texts (`provideLocale`, `defineLocale`) |
103
+ | `useFormField` | Links a custom control to `SuFormField` (id, label, message, states) |
104
+ | `useAnnouncer` | Screen reader announcements through persistent live regions |
105
+ | `useFocusTrap` | Stacked focus traps for panels and modal popovers |
106
+ | `useDismiss` | Layered dismissal: Escape, pointer down outside, focus loss |
107
+ | `useListNavigation` / `useTypeahead` | Arrow keys, Home / End and typeahead for lists, menus and tabs |
108
+ | `useFloatingPosition` | Positions a floating element against its trigger (flip, shift, arrow) |
109
+
110
+ ## 📝 Forms
111
+
112
+ A control placed in `SuFormField` links itself to the field: label, help message, `aria-describedby`, error state, `required` and `disabled`. No slot props needed:
113
+
114
+ ```vue
115
+ <SuFormField label="Country" message="Country of residence" state="error" required>
116
+ <SuSelectBox :options="countries" v-model="country" />
117
+ </SuFormField>
118
+ ```
119
+
120
+ The `*Field` components (`SuInputField`, `SuSelectBoxField`…) bundle the field and the control in one component.
121
+
122
+ ## 🎨 Themes and dark mode
123
+
124
+ Four themes (`default`, `ocean`, `forest`, `sunset`), each in light and dark mode. They are applied through the `data-theme` and `data-theme-mode` attributes on the root element; `useTheme` sets them for you, follows the system preference and remembers the user's choice:
125
+
126
+ ```vue
127
+ <script setup>
128
+ import { useTheme } from '@surgeui/ds-vue'
129
+
130
+ const { setTheme, setThemeMode, toggleMode, isDarkMode } = useTheme()
131
+ </script>
132
+
133
+ <template>
134
+ <SuButton @click="toggleMode">{{ isDarkMode ? 'Light' : 'Dark' }} mode</SuButton>
135
+ <SuButton @click="setTheme('ocean')">Ocean theme</SuButton>
136
+ </template>
137
+ ```
138
+
139
+ `setThemeMode` accepts `'light'`, `'dark'` or `'system'`. Without `useTheme`, set the attributes yourself:
140
+
141
+ ```html
142
+ <html data-theme="default" data-theme-mode="dark">
143
+ ```
144
+
145
+ ## 🎨 Customization
146
+
147
+ ### Theme configuration
148
+
149
+ Theme properties passed to the plugin become CSS variables with the `--su-custom-` prefix, which override the default tokens:
150
+
151
+ ```ts
152
+ app.use(SurgeUI, {
153
+ theme: {
154
+ textPrimary: '#1f2937', // → --su-custom-text-primary
155
+ bgSurface: '#f9fafb', // → --su-custom-bg-surface
156
+ primaryDefault: '#3b82f6', // → --su-custom-primary-default
157
+ primaryHover: '#2563eb',
158
+ stateError: '#ef4444'
159
+ }
160
+ })
161
+ ```
162
+
163
+ ### CSS variables
164
+
165
+ You can also define the variables directly, globally or on a section of the page:
166
+
167
+ ```css
168
+ :root {
169
+ --su-custom-primary-default: #3b82f6;
170
+ --su-custom-primary-hover: #2563eb;
171
+ --su-custom-primary-text: #ffffff;
172
+ }
173
+
174
+ /* Values for the dark mode */
175
+ [data-theme-mode='dark'] {
176
+ --su-custom-bg-canvas: #111827;
177
+ --su-custom-bg-surface: #1f2937;
178
+ }
179
+
180
+ /* A section with its own colors */
181
+ .promo {
182
+ --su-custom-primary-default: #db2777;
183
+ }
184
+ ```
185
+
186
+ Priority: `--su-custom-*` variables (CSS or plugin `theme` option) → theme tokens.
187
+
188
+ ### Available theme keys
189
+
190
+ - **Text** - `textPrimary`, `textSecondary`, `textTertiary`, `textDisabled`, `textInverse`
191
+ - **Links** - `linkDefault`, `linkHover`, `linkVisited`, `linkMuted`
192
+ - **Backgrounds** - `bgCanvas`, `bgSurface`, `bgSurfaceElevated`, `bgOverlay`, `bgDisabled`, `bgHover`, `bgActive`, `bgSelected`
193
+ - **Borders** - `borderDefault`, `borderSubtle`, `borderStrong`, `borderFocus`, `borderDisabled`
194
+ - **Primary actions** - `primaryDefault`, `primaryHover`, `primaryActive`, `primaryDisabled`, `primaryText`
195
+ - **Secondary actions** - `secondaryDefault`, `secondaryHover`, `secondaryActive`, `secondaryDisabled`, `secondaryText`
196
+ - **States** - `stateSuccess`, `stateWarning`, `stateError`, `stateInfo` and their `…Bg` variants
197
+ - **Shadow** - `shadowColor`
198
+
199
+ ## 🌍 Languages
200
+
201
+ Default component texts (accessible labels, placeholders, error messages, announcements) are in French; English is provided. An explicit prop always wins.
202
+
203
+ ```ts
204
+ import SurgeUI, { defineLocale, locales } from '@surgeui/ds-vue'
205
+
206
+ app.use(SurgeUI, {
207
+ locale: defineLocale(locales.en, {
208
+ messages: { selectBox: { placeholder: 'Pick one…' } }
209
+ })
210
+ })
211
+ ```
212
+
213
+ The `locale` option also accepts a ref, and `provideLocale()` switches the language of a subtree at runtime.
214
+
215
+ ## 🖼️ Icons
216
+
217
+ Components accept any Vue component as an icon; the examples use [Heroicons](https://heroicons.com/):
218
+
219
+ ```vue
220
+ <script setup>
221
+ import { HeartIcon } from '@heroicons/vue/24/outline'
222
+ </script>
223
+
224
+ <template>
225
+ <SuButton variant="primary" :icon="HeartIcon" icon-display="left">I like it</SuButton>
226
+ </template>
227
+ ```
228
+
229
+ ## ♿ Accessibility
230
+
231
+ Components are built to meet **WCAG 2.1 AA**:
232
+
233
+ - **WAI-ARIA patterns** - combobox + listbox (SelectBox), menu button (Dropdown), tabs, accordion, modal dialog (native `<dialog>`)
234
+ - **Keyboard** - arrow keys, Home / End, typeahead, Escape; RTL-aware arrows
235
+ - **Focus** - visible focus rings, focus returned to the trigger, focus trap for modal popovers
236
+ - **Forms** - labels, messages and states linked automatically to the control
237
+ - **Screen readers** - persistent live regions for announcements, named landmarks (HolyGrailLayout, with skip link)
238
+ - **Preferences** - `prefers-reduced-motion`, `prefers-contrast: more`, minimum touch targets
239
+
240
+ ## ⬆️ Upgrading to 3.0
241
+
242
+ Version 3.0 contains breaking changes:
243
+
244
+ - `SuButton` has `type="button"` by default: pass `type="submit"` to submit a form.
245
+ - `SuSwitch` renders a `<button>` instead of a `<div>`.
246
+ - `SuDialog` uses the native `<dialog>` element: the `zIndex` prop has no effect and the backdrop is `::backdrop`.
247
+ - Vue **3.5+** is required.
248
+ - `accessibility.announceToScreenReader()` and `accessibility.trapFocus()` are deprecated in favor of `announce()` / `useAnnouncer()` and `useFocusTrap()`.
249
+
250
+ See the [CHANGELOG](https://github.com/mahmoud-nb/surge.ui/blob/main/CHANGELOG.md) for the full list.
251
+
252
+ ## 📖 Documentation
253
+
254
+ - [Documentation](https://surgeui.com/) - Guides, component API, live examples (French and English)
255
+ - [Storybook](https://surgeui.com/storybook/) - Interactive examples and accessibility checks
256
+ - [GitHub Repository](https://github.com/mahmoud-nb/surge.ui)
257
+
258
+ ## 🤝 Contributing
259
+
260
+ Contributions are welcome! See the [Contributing Guide](https://github.com/mahmoud-nb/surge.ui/blob/main/package/CONTRIBUTING.md).
261
+
262
+ ## 📄 License
263
+
264
+ MIT - see the [LICENSE](https://github.com/mahmoud-nb/surge.ui/blob/main/package/LICENSE.md) file.
265
+
266
+ ---
267
+
268
+ Made with ❤️ by the SurgeUI team
@@ -1 +1 @@
1
- {"version":3,"file":"Price.vue.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/Price.vue"],"names":[],"mappings":"AA+WA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AA+HzC,iBAAS,cAAc;WAqFT,OAAO,IAA6B;;QAnMhD,uDAAuD;mBAC5C,GAAG;QACd,gDAAgD;yBAC/B;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,GAAG;QAC5D,wDAAwD;mBAC7C,GAAG;;QALd,uDAAuD;mBAC5C,GAAG;QACd,gDAAgD;yBAC/B;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,GAAG;QAC5D,wDAAwD;mBAC7C,GAAG;;;;EAmMf;AAgBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;;yFAQnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"Price.vue.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/Price.vue"],"names":[],"mappings":"AAyUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AA+HzC,iBAAS,cAAc;WA8ET,OAAO,IAA6B;;QA5LhD,uDAAuD;mBAC5C,GAAG;QACd,gDAAgD;yBAC/B;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,GAAG;QAC5D,wDAAwD;mBAC7C,GAAG;;QALd,uDAAuD;mBAC5C,GAAG;QACd,gDAAgD;yBAC/B;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,GAAG,GAAG;QAC5D,wDAAwD;mBAC7C,GAAG;;;;EA4Lf;AAgBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;;yFAQnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectBox.vue.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/SelectBox.vue"],"names":[],"mappings":"AA8uCA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAS3D,KAAK,WAAW,GAAG,cAAc,CAAC;AA2hBlC,KAAK,iBAAiB,GAAG;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;CAC9D,GAAG,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkahB,wBAUG"}
1
+ {"version":3,"file":"SelectBox.vue.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/SelectBox.vue"],"names":[],"mappings":"AA2uCA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAS3D,KAAK,WAAW,GAAG,cAAc,CAAC;AA2hBlC,KAAK,iBAAiB,GAAG;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;CAC9D,GAAG,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkahB,wBAUG"}