@robuust-digital/vue-components 1.0.0-rc.1 → 1.0.1-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -16,17 +16,21 @@ A modern and customizable component library built with **Vue 3** and **Tailwind
16
16
 
17
17
  ## Installation
18
18
 
19
- 1. **Install the component library via yarn:**
19
+ 1. **Install the component library via yarn or npm:**
20
20
 
21
21
  ```bash
22
- yarn add @robuust/vue-components
22
+ yarn add @robuust-digital/vue-components
23
+ ```
24
+
25
+ ```bash
26
+ npm i @robuust-digital/vue-components
23
27
  ```
24
28
 
25
29
  2. **Add the component library plugin to your `tailwind.config.js`:**
26
30
 
27
31
  ```javascript
28
32
  // tailwind.config.js
29
- import components from '@robuust/vue-components/src/tailwind';
33
+ import components from '@robuust-digital/vue-components/tailwind';
30
34
 
31
35
  export default {
32
36
  theme: {
@@ -56,7 +60,7 @@ export default {
56
60
 
57
61
  ```javascript
58
62
  export default defineNuxtConfig({
59
- modules: ['@robuust/vue-components/nuxt'],
63
+ modules: ['@robuust-digital/vue-components/nuxt'],
60
64
  });
61
65
  ```
62
66
 
@@ -72,7 +76,7 @@ Import and use components in your Vue 3 project with ease. Here’s an example o
72
76
  </template>
73
77
 
74
78
  <script setup>
75
- import { ButtonBase } from '@robuust/vue-components';
79
+ import { ButtonBase } from '@robuust-digital/vue-components';
76
80
  </script>
77
81
  ```
78
82
 
@@ -156,7 +160,7 @@ module.exports = {
156
160
  </template>
157
161
 
158
162
  <script setup>
159
- import { ButtonBase } from '@robuust/vue-components';
163
+ import { ButtonBase } from '@robuust-digital/vue-components';
160
164
  </script>
161
165
  ```
162
166
 
@@ -190,4 +194,4 @@ yarn build
190
194
  MIT © Robuust Digital
191
195
 
192
196
 
193
- *With `@robuust/vue-components`, bring consistency, flexibility, and a polished look to all your Vue 3 applications.*
197
+ *With `@robuust-digital/vue-components`, bring consistency, flexibility, and a polished look to all your Vue 3 applications.*
@@ -1,5 +1,5 @@
1
1
  import { defineNuxtModule, addComponent } from '@nuxt/kit';
2
- import * as components from '@robuust/vue-components';
2
+ import * as components from '@robuust-digital/vue-components';
3
3
  import pkg from '../package.json';
4
4
 
5
5
  /**
@@ -17,7 +17,7 @@ export default defineNuxtModule({
17
17
  Object.keys(components).forEach((name) => {
18
18
  addComponent({
19
19
  name,
20
- filePath: '@robuust/vue-components',
20
+ filePath: '@robuust-digital/vue-components',
21
21
  export: name,
22
22
  global: true,
23
23
  });
@@ -29,13 +29,20 @@ export default (theme) => {
29
29
  gap: theme('gap.2'),
30
30
  borderRadius: theme('borderRadius.xl'),
31
31
  fontWeight: theme('fontWeight.medium'),
32
- fontSize: theme('fontSize.base'),
33
- whiteSpace: theme('whitespace.normal'),
32
+ fontSize: theme('fontSize.base.0'),
33
+ whiteSpace: 'nowrap',
34
34
  transitionProperty: theme('transitionProperty.colors'),
35
35
  transitionDuration: theme('transitionDuration.300'),
36
36
  transitionTimingFunction: theme('transitionTimingFunction.DEFAULT'),
37
37
  ...theme('components.button'),
38
38
 
39
+ // Disabled state
40
+ '&:disabled': {
41
+ '@apply pointer-events-none': {},
42
+ opacity: theme('opacity.50'),
43
+ ...theme('components.button.disabled'),
44
+ },
45
+
39
46
  // Icon styling
40
47
  '.button-icon': {
41
48
  '@apply block': {},
@@ -43,6 +50,16 @@ export default (theme) => {
43
50
  height: theme('height.5'),
44
51
  flexShrink: theme('flexShrink.0'),
45
52
  ...theme('components.button.icon'),
53
+
54
+ '&.button-icon-loading': {
55
+ '@apply animate-spin': {},
56
+ ...theme('components.button.icon.loading'),
57
+ },
58
+ },
59
+
60
+ // Reverse icon
61
+ '&.button-reverse': {
62
+ '@apply flex-row-reverse': {},
46
63
  },
47
64
 
48
65
  // Color variants
@@ -56,6 +73,14 @@ export default (theme) => {
56
73
  color: theme('colors.black'),
57
74
  ...theme('components.button.primary.hover'),
58
75
  },
76
+
77
+ '&:disabled': {
78
+ ...theme('components.button.primary.disabled'),
79
+ },
80
+
81
+ '.button-icon': {
82
+ ...theme('components.button.primary.icon'),
83
+ },
59
84
  },
60
85
  '&.button-primary-soft': {
61
86
  backgroundColor: theme('colors.lime.200'),
@@ -67,6 +92,14 @@ export default (theme) => {
67
92
  color: theme('colors.700'),
68
93
  ...theme('components.button.primary-soft.hover'),
69
94
  },
95
+
96
+ '&:disabled': {
97
+ ...theme('components.button.primary-soft.disabled'),
98
+ },
99
+
100
+ '.button-icon': {
101
+ ...theme('components.button.primary-soft.icon'),
102
+ },
70
103
  },
71
104
  '&.button-secondary': {
72
105
  backgroundColor: theme('colors.indigo.400'),
@@ -78,6 +111,14 @@ export default (theme) => {
78
111
  color: theme('colors.white'),
79
112
  ...theme('components.button.secondary.hover'),
80
113
  },
114
+
115
+ '&:disabled': {
116
+ ...theme('components.button.secondary.disabled'),
117
+ },
118
+
119
+ '.button-icon': {
120
+ ...theme('components.button.secondary.icon'),
121
+ },
81
122
  },
82
123
  '&.button-secondary-soft': {
83
124
  backgroundColor: theme('colors.indigo.200'),
@@ -89,6 +130,14 @@ export default (theme) => {
89
130
  color: theme('colors.700'),
90
131
  ...theme('components.button.secondary-soft.hover'),
91
132
  },
133
+
134
+ '&:disabled': {
135
+ ...theme('components.button.secondary-soft.disabled'),
136
+ },
137
+
138
+ '.button-icon': {
139
+ ...theme('components.button.secondary-soft.icon'),
140
+ },
92
141
  },
93
142
  '&.button-tertiary': {
94
143
  backgroundColor: theme('colors.orange.400'),
@@ -100,6 +149,14 @@ export default (theme) => {
100
149
  color: theme('colors.black'),
101
150
  ...theme('components.button.tertiary.hover'),
102
151
  },
152
+
153
+ '&:disabled': {
154
+ ...theme('components.button.tertiary.disabled'),
155
+ },
156
+
157
+ '.button-icon': {
158
+ ...theme('components.button.tertiary.icon'),
159
+ },
103
160
  },
104
161
  '&.button-tertiary-soft': {
105
162
  backgroundColor: theme('colors.orange.200'),
@@ -111,6 +168,14 @@ export default (theme) => {
111
168
  color: theme('colors.700'),
112
169
  ...theme('components.button.tertiary-soft.hover'),
113
170
  },
171
+
172
+ '&:disabled': {
173
+ ...theme('components.button.tertiary-soft.disabled'),
174
+ },
175
+
176
+ '.button-icon': {
177
+ ...theme('components.button.tertiary-soft.icon'),
178
+ },
114
179
  },
115
180
  '&.button-light': {
116
181
  backgroundColor: theme('colors.white'),
@@ -123,6 +188,14 @@ export default (theme) => {
123
188
  color: theme('colors.stone.900'),
124
189
  ...theme('components.button.light.hover'),
125
190
  },
191
+
192
+ '&:disabled': {
193
+ ...theme('components.button.light.disabled'),
194
+ },
195
+
196
+ '.button-icon': {
197
+ ...theme('components.button.light.icon'),
198
+ },
126
199
  },
127
200
  '&.button-dark': {
128
201
  backgroundColor: theme('colors.black'),
@@ -134,6 +207,14 @@ export default (theme) => {
134
207
  color: theme('colors.white'),
135
208
  ...theme('components.button.dark.hover'),
136
209
  },
210
+
211
+ '&:disabled': {
212
+ ...theme('components.button.dark.disabled'),
213
+ },
214
+
215
+ '.button-icon': {
216
+ ...theme('components.button.dark.icon'),
217
+ },
137
218
  },
138
219
  '&.button-danger': {
139
220
  backgroundColor: theme('colors.red.600'),
@@ -145,6 +226,14 @@ export default (theme) => {
145
226
  color: theme('colors.white'),
146
227
  ...theme('components.button.danger.hover'),
147
228
  },
229
+
230
+ '&:disabled': {
231
+ ...theme('components.button.danger.disabled'),
232
+ },
233
+
234
+ '.button-icon': {
235
+ ...theme('components.button.danger.icon'),
236
+ },
148
237
  },
149
238
  '&.button-danger-soft': {
150
239
  backgroundColor: theme('colors.red.200'),
@@ -156,6 +245,14 @@ export default (theme) => {
156
245
  color: theme('colors.700'),
157
246
  ...theme('components.button.danger-soft.hover'),
158
247
  },
248
+
249
+ '&:disabled': {
250
+ ...theme('components.button.danger-soft.disabled'),
251
+ },
252
+
253
+ '.button-icon': {
254
+ ...theme('components.button.danger-soft.icon'),
255
+ },
159
256
  },
160
257
  '&.button-warning': {
161
258
  backgroundColor: theme('colors.yellow.400'),
@@ -167,6 +264,14 @@ export default (theme) => {
167
264
  color: theme('colors.black'),
168
265
  ...theme('components.button.warning.hover'),
169
266
  },
267
+
268
+ '&:disabled': {
269
+ ...theme('components.button.warning.disabled'),
270
+ },
271
+
272
+ '.button-icon': {
273
+ ...theme('components.button.warning.icon'),
274
+ },
170
275
  },
171
276
  '&.button-warning-soft': {
172
277
  backgroundColor: theme('colors.yellow.200'),
@@ -178,6 +283,14 @@ export default (theme) => {
178
283
  color: theme('colors.700'),
179
284
  ...theme('components.button.warning-soft.hover'),
180
285
  },
286
+
287
+ '&:disabled': {
288
+ ...theme('components.button.warning-soft.disabled'),
289
+ },
290
+
291
+ '.button-icon': {
292
+ ...theme('components.button.warning-soft.icon'),
293
+ },
181
294
  },
182
295
  '&.button-success': {
183
296
  backgroundColor: theme('colors.green.500'),
@@ -189,6 +302,14 @@ export default (theme) => {
189
302
  color: theme('colors.white'),
190
303
  ...theme('components.button.success.hover'),
191
304
  },
305
+
306
+ '&:disabled': {
307
+ ...theme('components.button.success.disabled'),
308
+ },
309
+
310
+ '.button-icon': {
311
+ ...theme('components.button.success.icon'),
312
+ },
192
313
  },
193
314
  '&.button-success-soft': {
194
315
  backgroundColor: theme('colors.green.200'),
@@ -200,6 +321,14 @@ export default (theme) => {
200
321
  color: theme('colors.700'),
201
322
  ...theme('components.button.success-soft.hover'),
202
323
  },
324
+
325
+ '&:disabled': {
326
+ ...theme('components.button.success-soft.disabled'),
327
+ },
328
+
329
+ '.button-icon': {
330
+ ...theme('components.button.success-soft.icon'),
331
+ },
203
332
  },
204
333
  '&.button-clear': {
205
334
  '@apply bg-transparent px-0': {},
@@ -210,6 +339,14 @@ export default (theme) => {
210
339
  color: theme('colors.stone.800'),
211
340
  ...theme('components.button.clear.hover'),
212
341
  },
342
+
343
+ '&:disabled': {
344
+ ...theme('components.button.clear.disabled'),
345
+ },
346
+
347
+ '.button-icon': {
348
+ ...theme('components.button.clear.icon'),
349
+ },
213
350
  },
214
351
  ...customColorStyles,
215
352
 
@@ -222,7 +359,7 @@ export default (theme) => {
222
359
  gap: theme('gap[1.5]'),
223
360
  borderRadius: theme('borderRadius.md'),
224
361
  fontWeight: theme('fontWeight.medium'),
225
- fontSize: theme('fontSize.xs'),
362
+ fontSize: theme('fontSize.xs.0'),
226
363
  ...theme('components.button.xs'),
227
364
 
228
365
  '.button-icon': {
@@ -239,7 +376,7 @@ export default (theme) => {
239
376
  gap: theme('gap.2'),
240
377
  borderRadius: theme('borderRadius.lg'),
241
378
  fontWeight: theme('fontWeight.medium'),
242
- fontSize: theme('fontSize.sm'),
379
+ fontSize: theme('fontSize.sm.0'),
243
380
  ...theme('components.button.sm'),
244
381
 
245
382
  '.button-icon': {
@@ -256,7 +393,7 @@ export default (theme) => {
256
393
  gap: theme('gap.4'),
257
394
  borderRadius: theme('borderRadius.2xl'),
258
395
  fontWeight: theme('fontWeight.medium'),
259
- fontSize: theme('fontSize.lg'),
396
+ fontSize: theme('fontSize.lg.0'),
260
397
  ...theme('components.button.lg'),
261
398
 
262
399
  '.button-icon': {
@@ -1,11 +1,11 @@
1
- import { openBlock as n, createElementBlock as s, createElementVNode as r, createBlock as o, resolveDynamicComponent as l, normalizeClass as c, withCtx as u, createTextVNode as d, toDisplayString as m, renderSlot as i, createCommentVNode as a, unref as y } from "vue";
2
- const f = {
1
+ import { openBlock as n, createElementBlock as c, createElementVNode as r, createBlock as o, resolveDynamicComponent as l, normalizeClass as s, withCtx as u, createTextVNode as d, toDisplayString as y, renderSlot as i, createCommentVNode as a, unref as m } from "vue";
2
+ const g = {
3
3
  xmlns: "http://www.w3.org/2000/svg",
4
4
  fill: "none",
5
5
  viewBox: "0 0 24 24"
6
6
  };
7
- function g(t, e) {
8
- return n(), s("svg", f, e[0] || (e[0] = [
7
+ function f(t, e) {
8
+ return n(), c("svg", g, e[0] || (e[0] = [
9
9
  r("circle", {
10
10
  cx: "12",
11
11
  cy: "12",
@@ -20,7 +20,7 @@ function g(t, e) {
20
20
  }, null, -1)
21
21
  ]));
22
22
  }
23
- const b = { render: g }, w = {
23
+ const b = { render: f }, k = {
24
24
  __name: "ButtonBase",
25
25
  props: {
26
26
  as: {
@@ -53,11 +53,11 @@ const b = { render: g }, w = {
53
53
  }
54
54
  },
55
55
  setup(t) {
56
- return (e, p) => (n(), o(l(t.as), {
57
- class: c(["button", `button-${t.color}`, `button-${t.size}`, { "flex-row-reverse": t.iconLeft }])
56
+ return (e, B) => (n(), o(l(t.as), {
57
+ class: s(["button", `button-${t.color}`, `button-${t.size}`, { "button-reverse": t.iconLeft }])
58
58
  }, {
59
59
  default: u(() => [
60
- d(m(t.label) + " ", 1),
60
+ d(y(t.label) + " ", 1),
61
61
  i(e.$slots, "icon", {}, () => [
62
62
  t.icon && !t.spinning ? (n(), o(l(t.icon), {
63
63
  key: 0,
@@ -65,9 +65,9 @@ const b = { render: g }, w = {
65
65
  })) : a("", !0)
66
66
  ]),
67
67
  i(e.$slots, "spinner", {}, () => [
68
- t.spinning ? (n(), o(y(b), {
68
+ t.spinning ? (n(), o(m(b), {
69
69
  key: 0,
70
- class: "button-icon animate-spin"
70
+ class: "button-icon button-icon-loading"
71
71
  })) : a("", !0)
72
72
  ])
73
73
  ]),
@@ -76,5 +76,5 @@ const b = { render: g }, w = {
76
76
  }
77
77
  };
78
78
  export {
79
- w as ButtonBase
79
+ k as ButtonBase
80
80
  };
@@ -1 +1 @@
1
- (function(n,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(n=typeof globalThis<"u"?globalThis:n||self,e(n.VueComponents={},n.Vue))})(this,function(n,e){"use strict";const i={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"};function r(t,o){return e.openBlock(),e.createElementBlock("svg",i,o[0]||(o[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4",style:{opacity:".25"}},null,-1),e.createElementVNode("path",{fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8V0C5.373 0 0 5.373 0 12zm2 5.291A7.96 7.96 0 0 1 4 12H0c0 3.042 1.135 5.824 3 7.938z"},null,-1)]))}const l={render:r},c={__name:"ButtonBase",props:{as:{type:[String,Object,Function],default:"button"},label:{type:String,default:""},icon:{type:[Object,Function],default:null},iconLeft:{type:Boolean},size:{type:String,default:"base",validator:t=>["xs","sm","base","lg"].includes(t)},spinning:{type:Boolean},color:{type:String,default:"primary",validator:t=>/^(primary|secondary|tertiary|light|dark|danger|warning|success)(-soft)?$/.test(t)||t.startsWith("custom-")||"clear"}},setup(t){return(o,s)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.as),{class:e.normalizeClass(["button",`button-${t.color}`,`button-${t.size}`,{"flex-row-reverse":t.iconLeft}])},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.label)+" ",1),e.renderSlot(o.$slots,"icon",{},()=>[t.icon&&!t.spinning?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon),{key:0,class:"button-icon"})):e.createCommentVNode("",!0)]),e.renderSlot(o.$slots,"spinner",{},()=>[t.spinning?(e.openBlock(),e.createBlock(e.unref(l),{key:0,class:"button-icon animate-spin"})):e.createCommentVNode("",!0)])]),_:3},8,["class"]))}};n.ButtonBase=c,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})});
1
+ (function(n,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(n=typeof globalThis<"u"?globalThis:n||self,e(n.VueComponents={},n.Vue))})(this,function(n,e){"use strict";const i={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"};function r(t,o){return e.openBlock(),e.createElementBlock("svg",i,o[0]||(o[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4",style:{opacity:".25"}},null,-1),e.createElementVNode("path",{fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8V0C5.373 0 0 5.373 0 12zm2 5.291A7.96 7.96 0 0 1 4 12H0c0 3.042 1.135 5.824 3 7.938z"},null,-1)]))}const c={render:r},l={__name:"ButtonBase",props:{as:{type:[String,Object,Function],default:"button"},label:{type:String,default:""},icon:{type:[Object,Function],default:null},iconLeft:{type:Boolean},size:{type:String,default:"base",validator:t=>["xs","sm","base","lg"].includes(t)},spinning:{type:Boolean},color:{type:String,default:"primary",validator:t=>/^(primary|secondary|tertiary|light|dark|danger|warning|success)(-soft)?$/.test(t)||t.startsWith("custom-")||"clear"}},setup(t){return(o,s)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.as),{class:e.normalizeClass(["button",`button-${t.color}`,`button-${t.size}`,{"button-reverse":t.iconLeft}])},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.label)+" ",1),e.renderSlot(o.$slots,"icon",{},()=>[t.icon&&!t.spinning?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon),{key:0,class:"button-icon"})):e.createCommentVNode("",!0)]),e.renderSlot(o.$slots,"spinner",{},()=>[t.spinning?(e.openBlock(),e.createBlock(e.unref(c),{key:0,class:"button-icon button-icon-loading"})):e.createCommentVNode("",!0)])]),_:3},8,["class"]))}};n.ButtonBase=l,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robuust-digital/vue-components",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.1-rc.1",
4
4
  "type": "module",
5
5
  "description": "A modern and customizable component library built with **Vue 3** and **Tailwind CSS**, designed to deliver a flexible, cohesive UI experience across all projects. Quickly integrate reusable components with ease, and customize them to suit your unique branding needs.",
6
6
  "directories": {
@@ -38,8 +38,6 @@
38
38
  "preview": "vite preview",
39
39
  "test:unit": "vitest run",
40
40
  "lint": "eslint . --fix",
41
- "npm:login": "npm login",
42
- "npm:publish": "npm publish --access public",
43
41
  "docs:dev": "vitepress dev docs",
44
42
  "docs:build": "vitepress build docs",
45
43
  "docs:preview": "vitepress preview docs"