@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.
Files changed (141) hide show
  1. package/README.md +303 -104
  2. package/dist/base.css +1 -1
  3. package/dist/base.js.LICENSE.txt +1 -1
  4. package/dist/base.min.css +1 -1
  5. package/dist/base.min.js.LICENSE.txt +1 -1
  6. package/dist/saxvue.css +1 -1
  7. package/dist/saxvue.js +1 -1
  8. package/dist/saxvue.js.LICENSE.txt +1 -1
  9. package/dist/saxvue.min.css +1 -1
  10. package/dist/saxvue.min.js +1 -1
  11. package/dist/saxvue.min.js.LICENSE.txt +1 -1
  12. package/dist/svAlert/index.js.LICENSE.txt +1 -1
  13. package/dist/svAlert/style.css +1 -1
  14. package/dist/svAvatar/index.js.LICENSE.txt +1 -1
  15. package/dist/svAvatar/style.css +1 -1
  16. package/dist/svAvatarGroup/index.js.LICENSE.txt +1 -1
  17. package/dist/svAvatarGroup/style.css +1 -1
  18. package/dist/svButton/index.js.LICENSE.txt +1 -1
  19. package/dist/svButton/style.css +1 -1
  20. package/dist/svCard/index.js.LICENSE.txt +1 -1
  21. package/dist/svCard/style.css +1 -1
  22. package/dist/svCardGroup/index.js.LICENSE.txt +1 -1
  23. package/dist/svCardGroup/style.css +1 -1
  24. package/dist/svCheckbox/index.js.LICENSE.txt +1 -1
  25. package/dist/svCheckbox/style.css +1 -1
  26. package/dist/svDialog/index.js.LICENSE.txt +1 -1
  27. package/dist/svDialog/style.css +1 -1
  28. package/dist/svInput/index.js.LICENSE.txt +1 -1
  29. package/dist/svInput/style.css +1 -1
  30. package/dist/svNavbar/index.js.LICENSE.txt +1 -1
  31. package/dist/svNavbar/style.css +1 -1
  32. package/dist/svNavbarGroup/index.js.LICENSE.txt +1 -1
  33. package/dist/svNavbarGroup/style.css +1 -1
  34. package/dist/svNavbarItem/index.js.LICENSE.txt +1 -1
  35. package/dist/svOption/index.js.LICENSE.txt +1 -1
  36. package/dist/svOption/style.css +1 -1
  37. package/dist/svOptionGroup/index.js.LICENSE.txt +1 -1
  38. package/dist/svOptionGroup/style.css +1 -1
  39. package/dist/svPagination/index.js.LICENSE.txt +1 -1
  40. package/dist/svPagination/style.css +1 -1
  41. package/dist/svRadio/index.js.LICENSE.txt +1 -1
  42. package/dist/svRadio/style.css +1 -1
  43. package/dist/svSelect/index.js +1 -1
  44. package/dist/svSelect/index.js.LICENSE.txt +1 -1
  45. package/dist/svSelect/style.css +1 -1
  46. package/dist/svSidebar/index.js.LICENSE.txt +1 -1
  47. package/dist/svSidebar/style.css +1 -1
  48. package/dist/svSidebarGroup/index.js.LICENSE.txt +1 -1
  49. package/dist/svSidebarGroup/style.css +1 -1
  50. package/dist/svSidebarItem/index.js.LICENSE.txt +1 -1
  51. package/dist/svSidebarItem/style.css +1 -1
  52. package/dist/svSwitch/index.js.LICENSE.txt +1 -1
  53. package/dist/svSwitch/style.css +1 -1
  54. package/dist/svTable/index.js.LICENSE.txt +1 -1
  55. package/dist/svTable/style.css +1 -1
  56. package/dist/svTableTd/index.js.LICENSE.txt +1 -1
  57. package/dist/svTableTh/index.js.LICENSE.txt +1 -1
  58. package/dist/svTableTh/style.css +1 -1
  59. package/dist/svTableTr/index.js.LICENSE.txt +1 -1
  60. package/dist/svTableTr/style.css +1 -1
  61. package/dist/svTooltip/index.js.LICENSE.txt +1 -1
  62. package/dist/svTooltip/style.css +1 -1
  63. package/package.json +11 -32
  64. package/dist/vsAlert/index.js +0 -2
  65. package/dist/vsAlert/index.js.LICENSE.txt +0 -5
  66. package/dist/vsAlert/style.css +0 -1
  67. package/dist/vsAvatar/index.js +0 -2
  68. package/dist/vsAvatar/index.js.LICENSE.txt +0 -5
  69. package/dist/vsAvatar/style.css +0 -1
  70. package/dist/vsAvatarGroup/index.js +0 -2
  71. package/dist/vsAvatarGroup/index.js.LICENSE.txt +0 -5
  72. package/dist/vsAvatarGroup/style.css +0 -1
  73. package/dist/vsButton/index.js +0 -2
  74. package/dist/vsButton/index.js.LICENSE.txt +0 -5
  75. package/dist/vsButton/style.css +0 -1
  76. package/dist/vsCard/index.js +0 -2
  77. package/dist/vsCard/index.js.LICENSE.txt +0 -5
  78. package/dist/vsCard/style.css +0 -1
  79. package/dist/vsCardGroup/index.js +0 -2
  80. package/dist/vsCardGroup/index.js.LICENSE.txt +0 -5
  81. package/dist/vsCardGroup/style.css +0 -1
  82. package/dist/vsCheckbox/index.js +0 -2
  83. package/dist/vsCheckbox/index.js.LICENSE.txt +0 -5
  84. package/dist/vsCheckbox/style.css +0 -1
  85. package/dist/vsDialog/index.js +0 -2
  86. package/dist/vsDialog/index.js.LICENSE.txt +0 -5
  87. package/dist/vsDialog/style.css +0 -1
  88. package/dist/vsInput/index.js +0 -2
  89. package/dist/vsInput/index.js.LICENSE.txt +0 -5
  90. package/dist/vsInput/style.css +0 -1
  91. package/dist/vsNavbar/index.js +0 -2
  92. package/dist/vsNavbar/index.js.LICENSE.txt +0 -5
  93. package/dist/vsNavbar/style.css +0 -1
  94. package/dist/vsNavbarGroup/index.js +0 -2
  95. package/dist/vsNavbarGroup/index.js.LICENSE.txt +0 -5
  96. package/dist/vsNavbarGroup/style.css +0 -1
  97. package/dist/vsNavbarItem/index.js +0 -2
  98. package/dist/vsNavbarItem/index.js.LICENSE.txt +0 -5
  99. package/dist/vsNavbarItem/style.css +0 -1
  100. package/dist/vsOption/index.js +0 -2
  101. package/dist/vsOption/index.js.LICENSE.txt +0 -5
  102. package/dist/vsOption/style.css +0 -1
  103. package/dist/vsOptionGroup/index.js +0 -2
  104. package/dist/vsOptionGroup/index.js.LICENSE.txt +0 -5
  105. package/dist/vsOptionGroup/style.css +0 -1
  106. package/dist/vsPagination/index.js +0 -2
  107. package/dist/vsPagination/index.js.LICENSE.txt +0 -5
  108. package/dist/vsPagination/style.css +0 -1
  109. package/dist/vsRadio/index.js +0 -2
  110. package/dist/vsRadio/index.js.LICENSE.txt +0 -5
  111. package/dist/vsRadio/style.css +0 -1
  112. package/dist/vsSelect/index.js +0 -2
  113. package/dist/vsSelect/index.js.LICENSE.txt +0 -5
  114. package/dist/vsSelect/style.css +0 -1
  115. package/dist/vsSidebar/index.js +0 -2
  116. package/dist/vsSidebar/index.js.LICENSE.txt +0 -5
  117. package/dist/vsSidebar/style.css +0 -1
  118. package/dist/vsSidebarGroup/index.js +0 -2
  119. package/dist/vsSidebarGroup/index.js.LICENSE.txt +0 -5
  120. package/dist/vsSidebarGroup/style.css +0 -1
  121. package/dist/vsSidebarItem/index.js +0 -2
  122. package/dist/vsSidebarItem/index.js.LICENSE.txt +0 -5
  123. package/dist/vsSidebarItem/style.css +0 -1
  124. package/dist/vsSwitch/index.js +0 -2
  125. package/dist/vsSwitch/index.js.LICENSE.txt +0 -5
  126. package/dist/vsSwitch/style.css +0 -1
  127. package/dist/vsTable/index.js +0 -2
  128. package/dist/vsTable/index.js.LICENSE.txt +0 -5
  129. package/dist/vsTable/style.css +0 -1
  130. package/dist/vsTableTd/index.js +0 -2
  131. package/dist/vsTableTd/index.js.LICENSE.txt +0 -5
  132. package/dist/vsTableTd/style.css +0 -1
  133. package/dist/vsTableTh/index.js +0 -2
  134. package/dist/vsTableTh/index.js.LICENSE.txt +0 -5
  135. package/dist/vsTableTh/style.css +0 -1
  136. package/dist/vsTableTr/index.js +0 -2
  137. package/dist/vsTableTr/index.js.LICENSE.txt +0 -5
  138. package/dist/vsTableTr/style.css +0 -1
  139. package/dist/vsTooltip/index.js +0 -2
  140. package/dist/vsTooltip/index.js.LICENSE.txt +0 -5
  141. package/dist/vsTooltip/style.css +0 -1
package/README.md CHANGED
@@ -1,8 +1,32 @@
1
1
  # SaxVue
2
2
 
3
- A Vue 3 UI component library. All components are globally available after `app.use(SaxVue)` and use the `sv-*` element naming convention.
3
+ <img src="assets/saxvue-preview.jpg" alt="SaxVue preview" width="900" />
4
4
 
5
- ## Install
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
- ## Setup
39
+ ---
16
40
 
17
- Register the plugin in your app entry point:
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
- import SaxVue from '@mrxploder/saxvue';
25
- import '@mrxploder/saxvue/dist/base.css';
76
+ Create `plugins/saxvue.ts`:
26
77
 
27
- const app = createApp(App);
28
- app.use(SaxVue);
29
- app.mount('#app');
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
- After `app.use(SaxVue)` every `sv-*` component is available globally — no per-component import needed.
107
+ ---
33
108
 
34
- ## Components
109
+ ## 🧩 Components
35
110
 
36
- ### Buttons
111
+ ### Button
37
112
 
38
- ```vue
113
+ ```html
39
114
  <sv-button color="primary">Primary</sv-button>
40
- <sv-button color="danger" flat>Danger flat</sv-button>
41
- <sv-button color="success" border>Success border</sv-button>
42
- <sv-button loading>Loading state</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
- ```vue
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
- ```vue
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
- ```vue
65
- <sv-checkbox v-model="checked" label="Accept terms" />
66
- <sv-switch v-model="active" label="Enable notifications" />
67
- <sv-radio v-model="picked" val="a" label="Option A" />
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
- ```vue
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 / Alert / Dialog
178
+ ### Tooltip
85
179
 
86
- ```vue
87
- <sv-tooltip text="Helpful tip"><sv-button>Hover me</sv-button></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
- <sv-alert color="success">File saved successfully.</sv-alert>
187
+ ### Alert
90
188
 
91
- <sv-dialog v-model="open" title="Confirm">Are you sure?</sv-dialog>
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
- ```vue
97
- <sv-pagination v-model="page" :total-items="200" :items-per-page="10" />
210
+ ```html
211
+ <sv-pagination v-model="page" :length="20" />
98
212
  ```
99
213
 
100
214
  ### Table
101
215
 
102
- ```vue
103
- <sv-table :data="rows" v-model:search="search">
216
+ ```html
217
+ <sv-table>
104
218
  <template #header>
105
- <sv-th sort-key="name">Name</sv-th>
106
- <sv-th sort-key="email">Email</sv-th>
219
+ <sv-th sort>Name</sv-th>
220
+ <sv-th sort>Email</sv-th>
107
221
  </template>
108
- <template #tbody="{ data }">
109
- <sv-tr v-for="row in data" :key="row.id" :data="row">
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
- ```vue
247
+ ```html
120
248
  <sv-navbar>
121
249
  <template #left>
122
- <sv-navbar-group>
123
- <sv-navbar-item to="/">Home</sv-navbar-item>
124
- <sv-navbar-item to="/about">About</sv-navbar-item>
125
- </sv-navbar-group>
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
- ```vue
133
- <sv-sidebar v-model="sidebarOpen">
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
- <sv-sidebar-item>Dashboard</sv-sidebar-item>
136
- <sv-sidebar-item>Settings</sv-sidebar-item>
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
- ### Card
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
- ```vue
159
- <sv-row justify="space-between" align="stretch" style="gap: 12px">
160
- <sv-col w="4">Column 1</sv-col>
161
- <sv-col w="4">Column 2</sv-col>
162
- <sv-col w="4">Column 3</sv-col>
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` (112), `offset`, `order`, `lg`, `sm`, `xs`, `type`, `justify`.
297
+ `SvCol` props: `w` (1-12), `offset`, `order`, `lg`, `sm`, `xs`.
298
+
299
+ ---
167
300
 
168
- ## Global Helper `$sv`
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({ title: 'Saved', text: 'Your changes have been saved.' });
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
- // Set a named theme color
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 = this.$sv.getPage(data, 1, 10);
189
- const total = this.$sv.getLength(data, 10);
190
- const hits = this.$sv.getSearch(data, 'alice');
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
- ## Color Props
332
+ ---
333
+
334
+ ## 🎨 Color Props
335
+
336
+ All components accept these color props via the shared `svColorProps` mixin:
194
337
 
195
- All components accept these color props:
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
- | Prop | Description |
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(); // toggle
210
- this.$sv.setTheme('dark'); // explicit
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
- ## Tree-shaking (per-component imports)
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 from '@mrxploder/saxvue/dist/svInput/index.js';
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
- ## Development
385
+ ---
386
+
387
+ ## 🛠 Development
225
388
 
226
389
  ```bash
227
390
  npm install
228
- npm run storybook:dev # Storybook dev server → http://localhost:6006
229
- npm test # Jest unit tests (384 tests, 18 suites)
230
- npm run build # Production build dist/
231
- npm run lint # ESLint
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
- ## License
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:-color("gray-3")}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent{color:-color("text")!important}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent:hover:before{background:-color("color",.2)}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent.sv-button--active:before{background:-color("color",-var("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:-color("color",1)!important;color:-color("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,-color(color,.05),-color(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:-color(color,1);opacity:1}.vs-ripple-content .vs-ripple-invert{background-image:radial-gradient(circle,-color(color,.5),-color(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}
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}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * SaxVue v0.1.0 by MrXploder 🖖 (https://github.com/MrXploder/saxvue)
2
+ * SaxVue v0.2.0 by MrXploder 🖖 (https://github.com/MrXploder/saxvue)
3
3
  * Original proyect by Luis Daniel Rovira (https://lusaxweb.github.io/saxvue/)
4
4
  * Released under the MIT License.
5
5
  */
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:-color("gray-3")}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent{color:-color("text")!important}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent:hover:before{background:-color("color",.2)}[vs-theme=dark] .sv-button.sv-component-dark.sv-button--transparent.sv-button--active:before{background:-color("color",-var("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:-color("color",1)!important;color:-color("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,-color(color,.05),-color(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:-color(color,1);opacity:1}.vs-ripple-content .vs-ripple-invert{background-image:radial-gradient(circle,-color(color,.5),-color(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}
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}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * SaxVue v0.1.0 by MrXploder 🖖 (https://github.com/MrXploder/saxvue)
2
+ * SaxVue v0.2.0 by MrXploder 🖖 (https://github.com/MrXploder/saxvue)
3
3
  * Original proyect by Luis Daniel Rovira (https://lusaxweb.github.io/saxvue/)
4
4
  * Released under the MIT License.
5
5
  */