@mrxploder/saxvue 0.1.0 → 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.
- package/README.md +303 -104
- package/dist/base.css +1 -1
- package/dist/base.js.LICENSE.txt +1 -1
- package/dist/base.min.css +1 -1
- package/dist/base.min.js.LICENSE.txt +1 -1
- package/dist/saxvue.css +1 -1
- package/dist/saxvue.js +1 -1
- package/dist/saxvue.js.LICENSE.txt +1 -1
- package/dist/saxvue.min.css +1 -1
- package/dist/saxvue.min.js +1 -1
- package/dist/saxvue.min.js.LICENSE.txt +1 -1
- package/dist/svAlert/index.js.LICENSE.txt +1 -1
- package/dist/svAlert/style.css +1 -1
- package/dist/svAvatar/index.js.LICENSE.txt +1 -1
- package/dist/svAvatar/style.css +1 -1
- package/dist/svAvatarGroup/index.js.LICENSE.txt +1 -1
- package/dist/svAvatarGroup/style.css +1 -1
- package/dist/svButton/index.js.LICENSE.txt +1 -1
- package/dist/svButton/style.css +1 -1
- package/dist/svCard/index.js.LICENSE.txt +1 -1
- package/dist/svCard/style.css +1 -1
- package/dist/svCardGroup/index.js.LICENSE.txt +1 -1
- package/dist/svCardGroup/style.css +1 -1
- package/dist/svCheckbox/index.js.LICENSE.txt +1 -1
- package/dist/svCheckbox/style.css +1 -1
- package/dist/svDialog/index.js.LICENSE.txt +1 -1
- package/dist/svDialog/style.css +1 -1
- package/dist/svInput/index.js.LICENSE.txt +1 -1
- package/dist/svInput/style.css +1 -1
- package/dist/svNavbar/index.js.LICENSE.txt +1 -1
- package/dist/svNavbar/style.css +1 -1
- package/dist/svNavbarGroup/index.js.LICENSE.txt +1 -1
- package/dist/svNavbarGroup/style.css +1 -1
- package/dist/svNavbarItem/index.js.LICENSE.txt +1 -1
- package/dist/svOption/index.js.LICENSE.txt +1 -1
- package/dist/svOption/style.css +1 -1
- package/dist/svOptionGroup/index.js.LICENSE.txt +1 -1
- package/dist/svOptionGroup/style.css +1 -1
- package/dist/svPagination/index.js.LICENSE.txt +1 -1
- package/dist/svPagination/style.css +1 -1
- package/dist/svRadio/index.js.LICENSE.txt +1 -1
- package/dist/svRadio/style.css +1 -1
- package/dist/svSelect/index.js +1 -1
- package/dist/svSelect/index.js.LICENSE.txt +1 -1
- package/dist/svSelect/style.css +1 -1
- package/dist/svSidebar/index.js.LICENSE.txt +1 -1
- package/dist/svSidebar/style.css +1 -1
- package/dist/svSidebarGroup/index.js.LICENSE.txt +1 -1
- package/dist/svSidebarGroup/style.css +1 -1
- package/dist/svSidebarItem/index.js.LICENSE.txt +1 -1
- package/dist/svSidebarItem/style.css +1 -1
- package/dist/svSwitch/index.js.LICENSE.txt +1 -1
- package/dist/svSwitch/style.css +1 -1
- package/dist/svTable/index.js.LICENSE.txt +1 -1
- package/dist/svTable/style.css +1 -1
- package/dist/svTableTd/index.js.LICENSE.txt +1 -1
- package/dist/svTableTh/index.js.LICENSE.txt +1 -1
- package/dist/svTableTh/style.css +1 -1
- package/dist/svTableTr/index.js.LICENSE.txt +1 -1
- package/dist/svTableTr/style.css +1 -1
- package/dist/svTooltip/index.js.LICENSE.txt +1 -1
- package/dist/svTooltip/style.css +1 -1
- package/package.json +11 -32
- package/dist/vsAlert/index.js +0 -2
- package/dist/vsAlert/index.js.LICENSE.txt +0 -5
- package/dist/vsAlert/style.css +0 -1
- package/dist/vsAvatar/index.js +0 -2
- package/dist/vsAvatar/index.js.LICENSE.txt +0 -5
- package/dist/vsAvatar/style.css +0 -1
- package/dist/vsAvatarGroup/index.js +0 -2
- package/dist/vsAvatarGroup/index.js.LICENSE.txt +0 -5
- package/dist/vsAvatarGroup/style.css +0 -1
- package/dist/vsButton/index.js +0 -2
- package/dist/vsButton/index.js.LICENSE.txt +0 -5
- package/dist/vsButton/style.css +0 -1
- package/dist/vsCard/index.js +0 -2
- package/dist/vsCard/index.js.LICENSE.txt +0 -5
- package/dist/vsCard/style.css +0 -1
- package/dist/vsCardGroup/index.js +0 -2
- package/dist/vsCardGroup/index.js.LICENSE.txt +0 -5
- package/dist/vsCardGroup/style.css +0 -1
- package/dist/vsCheckbox/index.js +0 -2
- package/dist/vsCheckbox/index.js.LICENSE.txt +0 -5
- package/dist/vsCheckbox/style.css +0 -1
- package/dist/vsDialog/index.js +0 -2
- package/dist/vsDialog/index.js.LICENSE.txt +0 -5
- package/dist/vsDialog/style.css +0 -1
- package/dist/vsInput/index.js +0 -2
- package/dist/vsInput/index.js.LICENSE.txt +0 -5
- package/dist/vsInput/style.css +0 -1
- package/dist/vsNavbar/index.js +0 -2
- package/dist/vsNavbar/index.js.LICENSE.txt +0 -5
- package/dist/vsNavbar/style.css +0 -1
- package/dist/vsNavbarGroup/index.js +0 -2
- package/dist/vsNavbarGroup/index.js.LICENSE.txt +0 -5
- package/dist/vsNavbarGroup/style.css +0 -1
- package/dist/vsNavbarItem/index.js +0 -2
- package/dist/vsNavbarItem/index.js.LICENSE.txt +0 -5
- package/dist/vsNavbarItem/style.css +0 -1
- package/dist/vsOption/index.js +0 -2
- package/dist/vsOption/index.js.LICENSE.txt +0 -5
- package/dist/vsOption/style.css +0 -1
- package/dist/vsOptionGroup/index.js +0 -2
- package/dist/vsOptionGroup/index.js.LICENSE.txt +0 -5
- package/dist/vsOptionGroup/style.css +0 -1
- package/dist/vsPagination/index.js +0 -2
- package/dist/vsPagination/index.js.LICENSE.txt +0 -5
- package/dist/vsPagination/style.css +0 -1
- package/dist/vsRadio/index.js +0 -2
- package/dist/vsRadio/index.js.LICENSE.txt +0 -5
- package/dist/vsRadio/style.css +0 -1
- package/dist/vsSelect/index.js +0 -2
- package/dist/vsSelect/index.js.LICENSE.txt +0 -5
- package/dist/vsSelect/style.css +0 -1
- package/dist/vsSidebar/index.js +0 -2
- package/dist/vsSidebar/index.js.LICENSE.txt +0 -5
- package/dist/vsSidebar/style.css +0 -1
- package/dist/vsSidebarGroup/index.js +0 -2
- package/dist/vsSidebarGroup/index.js.LICENSE.txt +0 -5
- package/dist/vsSidebarGroup/style.css +0 -1
- package/dist/vsSidebarItem/index.js +0 -2
- package/dist/vsSidebarItem/index.js.LICENSE.txt +0 -5
- package/dist/vsSidebarItem/style.css +0 -1
- package/dist/vsSwitch/index.js +0 -2
- package/dist/vsSwitch/index.js.LICENSE.txt +0 -5
- package/dist/vsSwitch/style.css +0 -1
- package/dist/vsTable/index.js +0 -2
- package/dist/vsTable/index.js.LICENSE.txt +0 -5
- package/dist/vsTable/style.css +0 -1
- package/dist/vsTableTd/index.js +0 -2
- package/dist/vsTableTd/index.js.LICENSE.txt +0 -5
- package/dist/vsTableTd/style.css +0 -1
- package/dist/vsTableTh/index.js +0 -2
- package/dist/vsTableTh/index.js.LICENSE.txt +0 -5
- package/dist/vsTableTh/style.css +0 -1
- package/dist/vsTableTr/index.js +0 -2
- package/dist/vsTableTr/index.js.LICENSE.txt +0 -5
- package/dist/vsTableTr/style.css +0 -1
- package/dist/vsTooltip/index.js +0 -2
- package/dist/vsTooltip/index.js.LICENSE.txt +0 -5
- package/dist/vsTooltip/style.css +0 -1
package/README.md
CHANGED
|
@@ -1,8 +1,32 @@
|
|
|
1
1
|
# SaxVue
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<img src="assets/saxvue-preview.jpg" alt="SaxVue preview" width="900" />
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Actively maintained** — this is a living project, built because I love Vuesax and want it to thrive in Vue 3.
|
|
6
|
+
|
|
7
|
+
> 💬 **Project status:** This is still baby steps and a **WIP**. Don't expect perfection yet — I'm improving it little by little and would **really, really** love any help from the community.
|
|
8
|
+
|
|
9
|
+
A Vue 3 UI component library with **15 components**, global functions, dark mode, CSS custom-property theming, and a full [VitePress documentation site](https://mrxploder.github.io/saxvue/) with 130+ live demos.
|
|
10
|
+
|
|
11
|
+
All components are globally available after `app.use(SaxVue)` and use the `sv-*` element naming convention.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## ✨ Features
|
|
16
|
+
|
|
17
|
+
- **15 components** — Button, Input, Select, Checkbox, Switch, Radio, Avatar, Tooltip, Alert, Dialog, Pagination, Table, Navbar, Sidebar, Card
|
|
18
|
+
- **Layout grid** — `<sv-row>` / `<sv-col>` with 12-column support, offsets, and responsive breakpoints
|
|
19
|
+
- **Global functions** — `$sv.loading()`, `$sv.notification()`, `$sv.toggleTheme()`, `$sv.setColor()`
|
|
20
|
+
- **Dark mode** — one-call toggle with CSS custom properties
|
|
21
|
+
- **Color system** — every component accepts `color`, `primary`, `success`, `danger`, `warn`, `dark` props
|
|
22
|
+
- **Tree-shakeable** — import the full bundle or individual components
|
|
23
|
+
- **TypeScript** — full type declarations included
|
|
24
|
+
- **Zero `.vue` SFCs** — all components use `defineComponent()` + `h()` render functions
|
|
25
|
+
- **VitePress docs** — 17 component pages, 130+ interactive demos, guide & theme pages
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 📦 Install
|
|
6
30
|
|
|
7
31
|
```bash
|
|
8
32
|
npm install @mrxploder/saxvue
|
|
@@ -12,46 +36,111 @@ pnpm add @mrxploder/saxvue
|
|
|
12
36
|
yarn add @mrxploder/saxvue
|
|
13
37
|
```
|
|
14
38
|
|
|
15
|
-
|
|
39
|
+
---
|
|
16
40
|
|
|
17
|
-
|
|
41
|
+
## 🚀 Quick Start
|
|
18
42
|
|
|
19
43
|
```ts
|
|
20
44
|
// main.ts
|
|
21
|
-
import { createApp } from 'vue'
|
|
22
|
-
import App from './App.vue'
|
|
45
|
+
import { createApp } from 'vue'
|
|
46
|
+
import App from './App.vue'
|
|
47
|
+
|
|
48
|
+
import SaxVue from '@mrxploder/saxvue'
|
|
49
|
+
import '@mrxploder/saxvue/dist/saxvue.css'
|
|
50
|
+
|
|
51
|
+
const app = createApp(App)
|
|
52
|
+
app.use(SaxVue)
|
|
53
|
+
app.mount('#app')
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
After `app.use(SaxVue)` every `sv-*` component is available globally — no per-component imports needed.
|
|
57
|
+
|
|
58
|
+
### Configuration
|
|
59
|
+
|
|
60
|
+
Pass an options object to customize theme colors:
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
app.use(SaxVue, {
|
|
64
|
+
colors: {
|
|
65
|
+
primary: '#5b3cc4',
|
|
66
|
+
success: 'rgb(23, 201, 100)',
|
|
67
|
+
danger: 'rgb(242, 19, 93)',
|
|
68
|
+
warn: 'rgb(255, 130, 0)',
|
|
69
|
+
dark: 'rgb(36, 33, 69)',
|
|
70
|
+
},
|
|
71
|
+
})
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Nuxt 3
|
|
23
75
|
|
|
24
|
-
|
|
25
|
-
import '@mrxploder/saxvue/dist/base.css';
|
|
76
|
+
Create `plugins/saxvue.ts`:
|
|
26
77
|
|
|
27
|
-
|
|
28
|
-
app
|
|
29
|
-
|
|
78
|
+
```ts
|
|
79
|
+
import { defineNuxtPlugin } from '#app'
|
|
80
|
+
import SaxVue from '@mrxploder/saxvue'
|
|
81
|
+
import '@mrxploder/saxvue/dist/saxvue.css'
|
|
82
|
+
|
|
83
|
+
export default defineNuxtPlugin((nuxtApp) => {
|
|
84
|
+
nuxtApp.vueApp.use(SaxVue)
|
|
85
|
+
})
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 📚 Documentation
|
|
91
|
+
|
|
92
|
+
Full documentation with live demos is available at **[mrxploder.github.io/saxvue](https://mrxploder.github.io/saxvue/)**.
|
|
93
|
+
|
|
94
|
+
| Section | Pages |
|
|
95
|
+
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
|
96
|
+
| **Guide** | Introduction, Getting Started, Configuration, Nuxt integration |
|
|
97
|
+
| **Theme** | Colors — default palette, JS/CSS/runtime customization |
|
|
98
|
+
| **Components** | Button, Alert, Avatar, Card, Checkbox, Dialog, Input, Loading, Navbar, Notification, Pagination, Radio, Select, Sidebar, Switch, Table, Tooltip |
|
|
99
|
+
| **Layout** | Grid system (`sv-row` / `sv-col`) |
|
|
100
|
+
|
|
101
|
+
Run the docs locally:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npm run docs:dev # http://localhost:5173/saxvue/
|
|
30
105
|
```
|
|
31
106
|
|
|
32
|
-
|
|
107
|
+
---
|
|
33
108
|
|
|
34
|
-
## Components
|
|
109
|
+
## 🧩 Components
|
|
35
110
|
|
|
36
|
-
###
|
|
111
|
+
### Button
|
|
37
112
|
|
|
38
|
-
```
|
|
113
|
+
```html
|
|
39
114
|
<sv-button color="primary">Primary</sv-button>
|
|
40
|
-
<sv-button
|
|
41
|
-
<sv-button
|
|
42
|
-
<sv-button
|
|
115
|
+
<sv-button flat>Flat</sv-button>
|
|
116
|
+
<sv-button border>Border</sv-button>
|
|
117
|
+
<sv-button gradient>Gradient</sv-button>
|
|
118
|
+
<sv-button relief>Relief</sv-button>
|
|
119
|
+
<sv-button transparent>Transparent</sv-button>
|
|
120
|
+
<sv-button shadow>Shadow</sv-button>
|
|
121
|
+
<sv-button loading>Loading</sv-button>
|
|
122
|
+
<sv-button icon><i class="bx bx-home-alt"></i></sv-button>
|
|
123
|
+
|
|
124
|
+
<!-- Button group -->
|
|
125
|
+
<sv-button-group>
|
|
126
|
+
<sv-button>One</sv-button>
|
|
127
|
+
<sv-button>Two</sv-button>
|
|
128
|
+
<sv-button>Three</sv-button>
|
|
129
|
+
</sv-button-group>
|
|
43
130
|
```
|
|
44
131
|
|
|
45
132
|
### Input
|
|
46
133
|
|
|
47
|
-
```
|
|
134
|
+
```html
|
|
48
135
|
<sv-input v-model="value" label="Name" placeholder="Enter your name" />
|
|
49
136
|
<sv-input v-model="value" label="Password" type="password" />
|
|
137
|
+
<sv-input v-model="value" state="success" />
|
|
138
|
+
<sv-input v-model="value" loading />
|
|
50
139
|
```
|
|
51
140
|
|
|
52
141
|
### Select
|
|
53
142
|
|
|
54
|
-
```
|
|
143
|
+
```html
|
|
55
144
|
<sv-select v-model="selected" label="Fruit">
|
|
56
145
|
<sv-option value="apple">Apple</sv-option>
|
|
57
146
|
<sv-option value="banana">Banana</sv-option>
|
|
@@ -59,18 +148,23 @@ After `app.use(SaxVue)` every `sv-*` component is available globally — no per-
|
|
|
59
148
|
</sv-select>
|
|
60
149
|
```
|
|
61
150
|
|
|
151
|
+
Supports multiple selection, filtering, option groups, loading, and state messages.
|
|
152
|
+
|
|
62
153
|
### Checkbox / Switch / Radio
|
|
63
154
|
|
|
64
|
-
```
|
|
65
|
-
<sv-checkbox v-model="checked"
|
|
66
|
-
|
|
67
|
-
<sv-
|
|
155
|
+
```html
|
|
156
|
+
<sv-checkbox v-model="checked">Accept terms</sv-checkbox>
|
|
157
|
+
|
|
158
|
+
<sv-switch v-model="active" />
|
|
159
|
+
|
|
160
|
+
<sv-radio v-model="picked" val="a">Option A</sv-radio>
|
|
161
|
+
<sv-radio v-model="picked" val="b">Option B</sv-radio>
|
|
68
162
|
```
|
|
69
163
|
|
|
70
164
|
### Avatar
|
|
71
165
|
|
|
72
|
-
```
|
|
73
|
-
<sv-avatar>
|
|
166
|
+
```html
|
|
167
|
+
<sv-avatar size="60">
|
|
74
168
|
<img src="/avatar.png" alt="User" />
|
|
75
169
|
</sv-avatar>
|
|
76
170
|
|
|
@@ -81,32 +175,52 @@ After `app.use(SaxVue)` every `sv-*` component is available globally — no per-
|
|
|
81
175
|
</sv-avatar-group>
|
|
82
176
|
```
|
|
83
177
|
|
|
84
|
-
### Tooltip
|
|
178
|
+
### Tooltip
|
|
85
179
|
|
|
86
|
-
```
|
|
87
|
-
<sv-tooltip
|
|
180
|
+
```html
|
|
181
|
+
<sv-tooltip>
|
|
182
|
+
<sv-button flat>Hover me</sv-button>
|
|
183
|
+
<template #tooltip>This is a tooltip</template>
|
|
184
|
+
</sv-tooltip>
|
|
185
|
+
```
|
|
88
186
|
|
|
89
|
-
|
|
187
|
+
### Alert
|
|
90
188
|
|
|
91
|
-
|
|
189
|
+
```html
|
|
190
|
+
<sv-alert>Default alert</sv-alert>
|
|
191
|
+
<sv-alert color="success" solid>Success</sv-alert>
|
|
192
|
+
<sv-alert color="danger" gradient>Danger gradient</sv-alert>
|
|
193
|
+
<sv-alert closable>Closable alert</sv-alert>
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Dialog
|
|
197
|
+
|
|
198
|
+
```html
|
|
199
|
+
<sv-dialog v-model="open">
|
|
200
|
+
<template #header>Confirm</template>
|
|
201
|
+
Are you sure?
|
|
202
|
+
<template #footer>
|
|
203
|
+
<sv-button @click="open = false">OK</sv-button>
|
|
204
|
+
</template>
|
|
205
|
+
</sv-dialog>
|
|
92
206
|
```
|
|
93
207
|
|
|
94
208
|
### Pagination
|
|
95
209
|
|
|
96
|
-
```
|
|
97
|
-
<sv-pagination v-model="page" :
|
|
210
|
+
```html
|
|
211
|
+
<sv-pagination v-model="page" :length="20" />
|
|
98
212
|
```
|
|
99
213
|
|
|
100
214
|
### Table
|
|
101
215
|
|
|
102
|
-
```
|
|
103
|
-
<sv-table
|
|
216
|
+
```html
|
|
217
|
+
<sv-table>
|
|
104
218
|
<template #header>
|
|
105
|
-
<sv-th sort
|
|
106
|
-
<sv-th sort
|
|
219
|
+
<sv-th sort>Name</sv-th>
|
|
220
|
+
<sv-th sort>Email</sv-th>
|
|
107
221
|
</template>
|
|
108
|
-
<template #
|
|
109
|
-
<sv-tr v-for="row in data" :key="row.id"
|
|
222
|
+
<template #body>
|
|
223
|
+
<sv-tr v-for="row in data" :key="row.id">
|
|
110
224
|
<sv-td>{{ row.name }}</sv-td>
|
|
111
225
|
<sv-td>{{ row.email }}</sv-td>
|
|
112
226
|
</sv-tr>
|
|
@@ -114,123 +228,208 @@ After `app.use(SaxVue)` every `sv-*` component is available globally — no per-
|
|
|
114
228
|
</sv-table>
|
|
115
229
|
```
|
|
116
230
|
|
|
231
|
+
Supports striped rows, single/multiple selection, search, sort, expand, and pagination.
|
|
232
|
+
|
|
233
|
+
### Card
|
|
234
|
+
|
|
235
|
+
```html
|
|
236
|
+
<sv-card>
|
|
237
|
+
<template #title>Card title</template>
|
|
238
|
+
<template #text>Card body content</template>
|
|
239
|
+
<template #interactions>
|
|
240
|
+
<sv-button flat icon><i class="bx bx-heart"></i></sv-button>
|
|
241
|
+
</template>
|
|
242
|
+
</sv-card>
|
|
243
|
+
```
|
|
244
|
+
|
|
117
245
|
### Navbar
|
|
118
246
|
|
|
119
|
-
```
|
|
247
|
+
```html
|
|
120
248
|
<sv-navbar>
|
|
121
249
|
<template #left>
|
|
122
|
-
<
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
250
|
+
<img src="/logo.svg" alt="Logo" />
|
|
251
|
+
</template>
|
|
252
|
+
<sv-navbar-item active>Home</sv-navbar-item>
|
|
253
|
+
<sv-navbar-item>About</sv-navbar-item>
|
|
254
|
+
<template #right>
|
|
255
|
+
<sv-button flat icon><i class="bx bx-bell"></i></sv-button>
|
|
126
256
|
</template>
|
|
127
257
|
</sv-navbar>
|
|
128
258
|
```
|
|
129
259
|
|
|
130
260
|
### Sidebar
|
|
131
261
|
|
|
132
|
-
```
|
|
133
|
-
<sv-sidebar v-model="
|
|
262
|
+
```html
|
|
263
|
+
<sv-sidebar v-model="active" :open.sync="open">
|
|
264
|
+
<template #logo>
|
|
265
|
+
<img src="/logo.svg" alt="Logo" />
|
|
266
|
+
</template>
|
|
267
|
+
<sv-sidebar-item id="home">
|
|
268
|
+
<template #icon><i class="bx bx-home"></i></template>
|
|
269
|
+
Home
|
|
270
|
+
</sv-sidebar-item>
|
|
134
271
|
<sv-sidebar-group>
|
|
135
|
-
<
|
|
136
|
-
|
|
272
|
+
<template #header>
|
|
273
|
+
<sv-sidebar-item arrow>
|
|
274
|
+
<template #icon><i class="bx bx-grid-alt"></i></template>
|
|
275
|
+
Components
|
|
276
|
+
</sv-sidebar-item>
|
|
277
|
+
</template>
|
|
278
|
+
<sv-sidebar-item id="button">Button</sv-sidebar-item>
|
|
137
279
|
</sv-sidebar-group>
|
|
138
280
|
</sv-sidebar>
|
|
139
281
|
```
|
|
140
282
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
```vue
|
|
144
|
-
<sv-card>
|
|
145
|
-
<template #title>Card title</template>
|
|
146
|
-
<template #text>Card body content</template>
|
|
147
|
-
<template #buttons>
|
|
148
|
-
<sv-button flat>Cancel</sv-button>
|
|
149
|
-
<sv-button color="primary">OK</sv-button>
|
|
150
|
-
</template>
|
|
151
|
-
</sv-card>
|
|
152
|
-
```
|
|
283
|
+
---
|
|
153
284
|
|
|
154
|
-
## Layout Grid
|
|
285
|
+
## 📐 Layout Grid
|
|
155
286
|
|
|
156
287
|
`SvRow` and `SvCol` are globally registered alongside all other components.
|
|
157
288
|
|
|
158
|
-
```
|
|
159
|
-
<sv-row justify="
|
|
160
|
-
<sv-col w="4">
|
|
161
|
-
<sv-col w="4">
|
|
162
|
-
<sv-col w="4">
|
|
289
|
+
```html
|
|
290
|
+
<sv-row justify="center">
|
|
291
|
+
<sv-col w="4">33.3%</sv-col>
|
|
292
|
+
<sv-col w="4">33.3%</sv-col>
|
|
293
|
+
<sv-col w="4">33.3%</sv-col>
|
|
163
294
|
</sv-row>
|
|
164
295
|
```
|
|
165
296
|
|
|
166
|
-
`SvCol` props: `w` (1
|
|
297
|
+
`SvCol` props: `w` (1-12), `offset`, `order`, `lg`, `sm`, `xs`.
|
|
298
|
+
|
|
299
|
+
---
|
|
167
300
|
|
|
168
|
-
## Global Helper
|
|
301
|
+
## ⚡ Global Helper — \$sv
|
|
169
302
|
|
|
170
303
|
After `app.use(SaxVue)` every component instance has access to `this.$sv`:
|
|
171
304
|
|
|
172
305
|
```ts
|
|
173
306
|
// Loading overlay
|
|
174
|
-
const handle = this.$sv.loading({ text: 'Saving
|
|
175
|
-
handle.close()
|
|
307
|
+
const handle = this.$sv.loading({ text: 'Saving...' })
|
|
308
|
+
handle.close()
|
|
176
309
|
|
|
177
310
|
// Notification toast
|
|
178
|
-
this.$sv.notification({
|
|
311
|
+
this.$sv.notification({
|
|
312
|
+
title: 'Saved',
|
|
313
|
+
text: 'Your changes have been saved.',
|
|
314
|
+
color: 'success',
|
|
315
|
+
})
|
|
179
316
|
|
|
180
317
|
// Theme
|
|
181
|
-
this.$sv.toggleTheme()
|
|
182
|
-
this.$sv.setTheme('dark')
|
|
318
|
+
this.$sv.toggleTheme() // toggle light <-> dark
|
|
319
|
+
this.$sv.setTheme('dark') // explicit
|
|
183
320
|
|
|
184
|
-
//
|
|
185
|
-
this.$sv.setColor('primary', '#6C63FF')
|
|
321
|
+
// Runtime color change
|
|
322
|
+
this.$sv.setColor('primary', '#6C63FF')
|
|
186
323
|
|
|
187
324
|
// Table helpers
|
|
188
|
-
const page
|
|
189
|
-
const total = this.$sv.getLength(data, 10)
|
|
190
|
-
const hits
|
|
325
|
+
const page = this.$sv.getPage(data, 1, 10)
|
|
326
|
+
const total = this.$sv.getLength(data, 10)
|
|
327
|
+
const hits = this.$sv.getSearch(data, 'alice')
|
|
328
|
+
const sorted = this.$sv.sortData(data, 'name', 'asc')
|
|
329
|
+
this.$sv.checkAll(data)
|
|
191
330
|
```
|
|
192
331
|
|
|
193
|
-
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 🎨 Color Props
|
|
335
|
+
|
|
336
|
+
All components accept these color props via the shared `svColorProps` mixin:
|
|
194
337
|
|
|
195
|
-
|
|
338
|
+
| Prop | Type | Description |
|
|
339
|
+
| --------- | ------- | ------------------------------------------------------------------ |
|
|
340
|
+
| `color` | String | Any CSS color — hex, rgb, or theme name (`primary`, `success`, …) |
|
|
341
|
+
| `primary` | Boolean | Shorthand for `color="primary"` |
|
|
342
|
+
| `success` | Boolean | Shorthand for `color="success"` |
|
|
343
|
+
| `danger` | Boolean | Shorthand for `color="danger"` |
|
|
344
|
+
| `warn` | Boolean | Shorthand for `color="warn"` |
|
|
345
|
+
| `dark` | Boolean | Shorthand for `color="dark"` |
|
|
346
|
+
| `active` | Boolean | Active state styling |
|
|
196
347
|
|
|
197
|
-
|
|
198
|
-
| --------- | ------------------------------- |
|
|
199
|
-
| `color` | Any CSS color, hex, or var name |
|
|
200
|
-
| `primary` | Boolean shorthand for primary |
|
|
201
|
-
| `success` | Boolean shorthand for success |
|
|
202
|
-
| `danger` | Boolean shorthand for danger |
|
|
203
|
-
| `warn` | Boolean shorthand for warn |
|
|
204
|
-
| `dark` | Boolean shorthand for dark |
|
|
348
|
+
---
|
|
205
349
|
|
|
206
|
-
## Dark Mode
|
|
350
|
+
## 🌙 Dark Mode
|
|
207
351
|
|
|
208
352
|
```ts
|
|
209
|
-
this.$sv.toggleTheme()
|
|
210
|
-
this.$sv.setTheme('dark')
|
|
211
|
-
this.$sv.setTheme('light')
|
|
353
|
+
this.$sv.toggleTheme() // toggle light <-> dark
|
|
354
|
+
this.$sv.setTheme('dark') // explicit set
|
|
355
|
+
this.$sv.setTheme('light')
|
|
212
356
|
```
|
|
213
357
|
|
|
214
|
-
|
|
358
|
+
Override theme colors via CSS custom properties:
|
|
359
|
+
|
|
360
|
+
```css
|
|
361
|
+
:root {
|
|
362
|
+
--sv-primary: 91, 60, 196;
|
|
363
|
+
--sv-success: 23, 201, 100;
|
|
364
|
+
--sv-danger: 242, 19, 93;
|
|
365
|
+
--sv-warn: 254, 130, 0;
|
|
366
|
+
--sv-dark: 36, 33, 69;
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## 🌳 Tree-Shaking (per-component imports)
|
|
373
|
+
|
|
374
|
+
Import only what you need instead of the full bundle:
|
|
215
375
|
|
|
216
376
|
```ts
|
|
217
|
-
import svButton from '@mrxploder/saxvue/dist/svButton/index.js'
|
|
218
|
-
import svInput
|
|
377
|
+
import svButton from '@mrxploder/saxvue/dist/svButton/index.js'
|
|
378
|
+
import svInput from '@mrxploder/saxvue/dist/svInput/index.js'
|
|
379
|
+
import '@mrxploder/saxvue/dist/base.css'
|
|
219
380
|
|
|
220
|
-
app.use(svButton)
|
|
221
|
-
app.use(svInput)
|
|
381
|
+
app.use(svButton)
|
|
382
|
+
app.use(svInput)
|
|
222
383
|
```
|
|
223
384
|
|
|
224
|
-
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## 🛠 Development
|
|
225
388
|
|
|
226
389
|
```bash
|
|
227
390
|
npm install
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
npm run
|
|
231
|
-
npm run
|
|
391
|
+
|
|
392
|
+
# Documentation site (VitePress)
|
|
393
|
+
npm run docs:dev # Dev server -> http://localhost:5173/saxvue/
|
|
394
|
+
npm run docs:build # Static build
|
|
395
|
+
npm run docs:preview # Preview static build
|
|
396
|
+
|
|
397
|
+
# Testing
|
|
398
|
+
npm test # Jest unit tests
|
|
399
|
+
npm run test:coverage # Jest with coverage report
|
|
400
|
+
|
|
401
|
+
# Build and quality
|
|
402
|
+
npm run build # Production build -> dist/
|
|
403
|
+
npm run lint # ESLint
|
|
404
|
+
npm run lint:fix # ESLint auto-fix
|
|
405
|
+
npm run verify:treeshake # Verify per-component bundle sizes
|
|
406
|
+
npm run test:types # Type-check declarations
|
|
232
407
|
```
|
|
233
408
|
|
|
234
|
-
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## 📁 Project Structure
|
|
412
|
+
|
|
413
|
+
```
|
|
414
|
+
src/
|
|
415
|
+
components/ 15 components (defineComponent + h() render functions)
|
|
416
|
+
functions/ $sv global functions (loading, notification, table helpers)
|
|
417
|
+
icons/ Render-function icon components
|
|
418
|
+
layout/ Grid system (SvRow, SvCol)
|
|
419
|
+
mixins/ Shared color props and useSvComponent composable
|
|
420
|
+
styles/ SCSS theme (_colors, _dark, _mixins, _vars)
|
|
421
|
+
util/ Color utilities, ripple effect
|
|
422
|
+
docs/ VitePress documentation site
|
|
423
|
+
docs/components/ 17 component doc pages with live demos
|
|
424
|
+
docs/guide/ Getting Started, Configuration, Nuxt
|
|
425
|
+
docs/theme/ Color system documentation
|
|
426
|
+
build/ Webpack build configs (UMD, per-component, styles)
|
|
427
|
+
test/ Unit tests
|
|
428
|
+
types/ TypeScript declarations
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## 📄 License
|
|
235
434
|
|
|
236
|
-
MIT © MrXploder
|
|
435
|
+
MIT © [MrXploder](https://github.com/MrXploder)
|
package/dist/base.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@import url(https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap);:root{--sv-primary:25,91,255;--sv-warn:255,186,0;--sv-danger:255,71,87;--sv-success:70,201,58;--sv-dark:30,30,30;--sv-light:244,247,248;--sv-color:17,18,20;--sv-facebook:59,89,153;--sv-twitter:29,161,242;--sv-youtube:255,0,0;--sv-pinterest:189,8,28;--sv-linkedin:0,119,181;--sv-snapchat:255,252,0;--sv-whatsapp:37,211,102;--sv-tumblr:54,70,93;--sv-reddit:255,69,0;--sv-spotify:30,215,96;--sv-amazon:255,153,0;--sv-medium:2,184,117;--sv-vimeo:26,183,234;--sv-skype:0,175,240;--sv-dribbble:234,76,137;--sv-slack:74,21,75;--sv-yahoo:67,2,151;--sv-twitch:100,65,164;--sv-discord:114,137,218;--sv-telegram:0,136,204;--sv-google-plus:219,68,55;--sv-messenger:0,132,255;--sv-background:255,255,255;--sv-text:44,62,80;--sv-gray-1:249,252,253;--sv-gray-2:244,247,248;--sv-gray-3:240,243,244;--sv-gray-4:230,233,234}[class*="--default"],[class*="--primary"]{--sv-color:var(--sv-primary)}[class*="--danger"]{--sv-color:var(--sv-danger)}[class*="--success"]{--sv-color:var(--sv-success)}[class*="--dark"]{--sv-color:var(--sv-dark)}[class*="--warn"]{--sv-color:var(--sv-warn)}:root{--sv-shadow-opacity:0.05;--sv-radius:20px;--sv-zindex-1:100000;--sv-zindex-2:99000;--sv-zindex-3:98000;--sv-zindex-4:97000;--sv-background-opacity:0.2;--sv-font-family:"Poppins",sans-serif}[vs-theme=dark]{--sv-background:30,32,35;--sv-text:255,255,255;--sv-gray-1:24,25,28;--sv-gray-2:20,20,23;--sv-gray-3:15,16,19;--sv-gray-4:10,11,14;--sv-shadow-opacity:0.3;--sv-dark:0,0,0;--sv-background-opacity:0.6}[vs-theme=dark] .sv-pagination-content.sv-component-dark .sv-pagination__active{--sv-color:255,255,255;color
|
|
1
|
+
@import url(https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap);:root{--sv-primary:25,91,255;--sv-warn:255,186,0;--sv-danger:255,71,87;--sv-success:70,201,58;--sv-dark:30,30,30;--sv-light:244,247,248;--sv-color:17,18,20;--sv-facebook:59,89,153;--sv-twitter:29,161,242;--sv-youtube:255,0,0;--sv-pinterest:189,8,28;--sv-linkedin:0,119,181;--sv-snapchat:255,252,0;--sv-whatsapp:37,211,102;--sv-tumblr:54,70,93;--sv-reddit:255,69,0;--sv-spotify:30,215,96;--sv-amazon:255,153,0;--sv-medium:2,184,117;--sv-vimeo:26,183,234;--sv-skype:0,175,240;--sv-dribbble:234,76,137;--sv-slack:74,21,75;--sv-yahoo:67,2,151;--sv-twitch:100,65,164;--sv-discord:114,137,218;--sv-telegram:0,136,204;--sv-google-plus:219,68,55;--sv-messenger:0,132,255;--sv-background:255,255,255;--sv-text:44,62,80;--sv-gray-1:249,252,253;--sv-gray-2:244,247,248;--sv-gray-3:240,243,244;--sv-gray-4:230,233,234}[class*="--default"],[class*="--primary"]{--sv-color:var(--sv-primary)}[class*="--danger"]{--sv-color:var(--sv-danger)}[class*="--success"]{--sv-color:var(--sv-success)}[class*="--dark"]{--sv-color:var(--sv-dark)}[class*="--warn"]{--sv-color:var(--sv-warn)}:root{--sv-shadow-opacity:0.05;--sv-radius:20px;--sv-zindex-1:100000;--sv-zindex-2:99000;--sv-zindex-3:98000;--sv-zindex-4:97000;--sv-background-opacity:0.2;--sv-font-family:"Poppins",sans-serif}[vs-theme=dark]{--sv-background:30,32,35;--sv-text:255,255,255;--sv-gray-1:24,25,28;--sv-gray-2:20,20,23;--sv-gray-3:15,16,19;--sv-gray-4:10,11,14;--sv-shadow-opacity:0.3;--sv-dark:0,0,0;--sv-background-opacity:0.6}[vs-theme=dark] .sv-pagination-content.sv-component-dark .sv-pagination__active{--sv-color:255,255,255;color:rgba(var(--sv-gray-3),1)}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent{color:rgba(var(--sv-text),1)!important}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent:hover:before{background:rgba(var(--sv-color),.2)}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent.sv-button--active:before{background:rgba(var(--sv-color),var(--sv-background-opacity))}[vs-theme=dark] .vs-ripple,[vs-theme=dark] .vs-ripple-content,[vs-theme=dark] .vs-ripple-invert{--sv-color:0,0,0}[vs-theme=dark] .sv-loading{--sv-background:0,0,0}[vs-theme=dark] .sv-input-parent--state-dark{--sv-dark:255,255,255!important}[vs-theme=dark] .sv-input-parent--state-dark .sv-input{background:#000!important}[vs-theme=dark] .sv-component-dark{--sv-color:0,0,0!important}[vs-theme=dark] .sv-component-dark .sv-avatar{color:#fff!important}[vs-theme=dark] .sv-component-dark.sv-alert{--sv-color:0,0,0!important;background:rgba(var(--sv-color),1)!important;color:rgba(var(--sv-text),1)!important}button{cursor:pointer;outline:none}[disabled]{opacity:.6}input{outline:none}a,button,input,select,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0)}[class*=vs-]{box-sizing:border-box;font-family:var(--sv-font-family);list-style:none;outline:none}.vs-ripple-content{--sv-color:inherit;border-radius:inherit;height:100px;height:100%;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0;width:100px;width:100%;z-index:-1}.vs-ripple-content .vs-ripple{background:radial-gradient(circle,rgba(var(--sv-color),.05),rgba(var(--sv-color),.6));border-radius:50%;height:0;opacity:0;position:absolute;transform:translate(-50%,-50%);transition:all .5s ease;width:0}.vs-ripple-content .vs-ripple--solid{background:rgba(var(--sv-color),1);opacity:1}.vs-ripple-content .vs-ripple-invert{background-image:radial-gradient(circle,rgba(var(--sv-color),.5),rgba(var(--sv-color),0));border-radius:50%;height:0;opacity:0;position:absolute;transform:translate(-50%,-50%);transition:all .5s ease;width:0}.vs-ripple-content .vs-ripple-cut-1{background-image:linear-gradient(270deg,hsla(0,0%,100%,.25),hsla(0,0%,100%,0));height:0;opacity:0;position:absolute;transform:translate(-100%,-50%) skew(20deg);transition:all .6s ease;width:0}.vs-ripple-content .vs-ripple-cut-2{background-image:linear-gradient(90deg,hsla(0,0%,100%,.25),hsla(0,0%,100%,0));height:0;opacity:0;position:absolute;transform:translateY(-50%) skew(20deg);transition:all .6s ease;width:0}.vs-remove-transition *,.vs-remove-transition :after,.vs-remove-transition :before{transition:all 0s!important}
|
package/dist/base.js.LICENSE.txt
CHANGED
package/dist/base.min.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@import url(https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap);:root{--sv-primary:25,91,255;--sv-warn:255,186,0;--sv-danger:255,71,87;--sv-success:70,201,58;--sv-dark:30,30,30;--sv-light:244,247,248;--sv-color:17,18,20;--sv-facebook:59,89,153;--sv-twitter:29,161,242;--sv-youtube:255,0,0;--sv-pinterest:189,8,28;--sv-linkedin:0,119,181;--sv-snapchat:255,252,0;--sv-whatsapp:37,211,102;--sv-tumblr:54,70,93;--sv-reddit:255,69,0;--sv-spotify:30,215,96;--sv-amazon:255,153,0;--sv-medium:2,184,117;--sv-vimeo:26,183,234;--sv-skype:0,175,240;--sv-dribbble:234,76,137;--sv-slack:74,21,75;--sv-yahoo:67,2,151;--sv-twitch:100,65,164;--sv-discord:114,137,218;--sv-telegram:0,136,204;--sv-google-plus:219,68,55;--sv-messenger:0,132,255;--sv-background:255,255,255;--sv-text:44,62,80;--sv-gray-1:249,252,253;--sv-gray-2:244,247,248;--sv-gray-3:240,243,244;--sv-gray-4:230,233,234}[class*="--default"],[class*="--primary"]{--sv-color:var(--sv-primary)}[class*="--danger"]{--sv-color:var(--sv-danger)}[class*="--success"]{--sv-color:var(--sv-success)}[class*="--dark"]{--sv-color:var(--sv-dark)}[class*="--warn"]{--sv-color:var(--sv-warn)}:root{--sv-shadow-opacity:0.05;--sv-radius:20px;--sv-zindex-1:100000;--sv-zindex-2:99000;--sv-zindex-3:98000;--sv-zindex-4:97000;--sv-background-opacity:0.2;--sv-font-family:"Poppins",sans-serif}[vs-theme=dark]{--sv-background:30,32,35;--sv-text:255,255,255;--sv-gray-1:24,25,28;--sv-gray-2:20,20,23;--sv-gray-3:15,16,19;--sv-gray-4:10,11,14;--sv-shadow-opacity:0.3;--sv-dark:0,0,0;--sv-background-opacity:0.6}[vs-theme=dark] .sv-pagination-content.sv-component-dark .sv-pagination__active{--sv-color:255,255,255;color
|
|
1
|
+
@import url(https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap);:root{--sv-primary:25,91,255;--sv-warn:255,186,0;--sv-danger:255,71,87;--sv-success:70,201,58;--sv-dark:30,30,30;--sv-light:244,247,248;--sv-color:17,18,20;--sv-facebook:59,89,153;--sv-twitter:29,161,242;--sv-youtube:255,0,0;--sv-pinterest:189,8,28;--sv-linkedin:0,119,181;--sv-snapchat:255,252,0;--sv-whatsapp:37,211,102;--sv-tumblr:54,70,93;--sv-reddit:255,69,0;--sv-spotify:30,215,96;--sv-amazon:255,153,0;--sv-medium:2,184,117;--sv-vimeo:26,183,234;--sv-skype:0,175,240;--sv-dribbble:234,76,137;--sv-slack:74,21,75;--sv-yahoo:67,2,151;--sv-twitch:100,65,164;--sv-discord:114,137,218;--sv-telegram:0,136,204;--sv-google-plus:219,68,55;--sv-messenger:0,132,255;--sv-background:255,255,255;--sv-text:44,62,80;--sv-gray-1:249,252,253;--sv-gray-2:244,247,248;--sv-gray-3:240,243,244;--sv-gray-4:230,233,234}[class*="--default"],[class*="--primary"]{--sv-color:var(--sv-primary)}[class*="--danger"]{--sv-color:var(--sv-danger)}[class*="--success"]{--sv-color:var(--sv-success)}[class*="--dark"]{--sv-color:var(--sv-dark)}[class*="--warn"]{--sv-color:var(--sv-warn)}:root{--sv-shadow-opacity:0.05;--sv-radius:20px;--sv-zindex-1:100000;--sv-zindex-2:99000;--sv-zindex-3:98000;--sv-zindex-4:97000;--sv-background-opacity:0.2;--sv-font-family:"Poppins",sans-serif}[vs-theme=dark]{--sv-background:30,32,35;--sv-text:255,255,255;--sv-gray-1:24,25,28;--sv-gray-2:20,20,23;--sv-gray-3:15,16,19;--sv-gray-4:10,11,14;--sv-shadow-opacity:0.3;--sv-dark:0,0,0;--sv-background-opacity:0.6}[vs-theme=dark] .sv-pagination-content.sv-component-dark .sv-pagination__active{--sv-color:255,255,255;color:rgba(var(--sv-gray-3),1)}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent{color:rgba(var(--sv-text),1)!important}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent:hover:before{background:rgba(var(--sv-color),.2)}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent.sv-button--active:before{background:rgba(var(--sv-color),var(--sv-background-opacity))}[vs-theme=dark] .vs-ripple,[vs-theme=dark] .vs-ripple-content,[vs-theme=dark] .vs-ripple-invert{--sv-color:0,0,0}[vs-theme=dark] .sv-loading{--sv-background:0,0,0}[vs-theme=dark] .sv-input-parent--state-dark{--sv-dark:255,255,255!important}[vs-theme=dark] .sv-input-parent--state-dark .sv-input{background:#000!important}[vs-theme=dark] .sv-component-dark{--sv-color:0,0,0!important}[vs-theme=dark] .sv-component-dark .sv-avatar{color:#fff!important}[vs-theme=dark] .sv-component-dark.sv-alert{--sv-color:0,0,0!important;background:rgba(var(--sv-color),1)!important;color:rgba(var(--sv-text),1)!important}button{cursor:pointer;outline:none}[disabled]{opacity:.6}input{outline:none}a,button,input,select,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0)}[class*=vs-]{box-sizing:border-box;font-family:var(--sv-font-family);list-style:none;outline:none}.vs-ripple-content{--sv-color:inherit;border-radius:inherit;height:100px;height:100%;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0;width:100px;width:100%;z-index:-1}.vs-ripple-content .vs-ripple{background:radial-gradient(circle,rgba(var(--sv-color),.05),rgba(var(--sv-color),.6));border-radius:50%;height:0;opacity:0;position:absolute;transform:translate(-50%,-50%);transition:all .5s ease;width:0}.vs-ripple-content .vs-ripple--solid{background:rgba(var(--sv-color),1);opacity:1}.vs-ripple-content .vs-ripple-invert{background-image:radial-gradient(circle,rgba(var(--sv-color),.5),rgba(var(--sv-color),0));border-radius:50%;height:0;opacity:0;position:absolute;transform:translate(-50%,-50%);transition:all .5s ease;width:0}.vs-ripple-content .vs-ripple-cut-1{background-image:linear-gradient(270deg,hsla(0,0%,100%,.25),hsla(0,0%,100%,0));height:0;opacity:0;position:absolute;transform:translate(-100%,-50%) skew(20deg);transition:all .6s ease;width:0}.vs-ripple-content .vs-ripple-cut-2{background-image:linear-gradient(90deg,hsla(0,0%,100%,.25),hsla(0,0%,100%,0));height:0;opacity:0;position:absolute;transform:translateY(-50%) skew(20deg);transition:all .6s ease;width:0}.vs-remove-transition *,.vs-remove-transition :after,.vs-remove-transition :before{transition:all 0s!important}
|