@skyservice-developers/vue-dev-kit 1.5.6 → 1.5.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyservice-developers/vue-dev-kit",
3
- "version": "1.5.6",
3
+ "version": "1.5.8",
4
4
  "description": "Vue 2 and Vue 3 developer toolkit - components and helpers",
5
5
  "type": "module",
6
6
  "main": "./dist/vue3/vue-dev-kit.cjs",
@@ -55,3 +55,18 @@ export interface DialogEmits {
55
55
  }
56
56
 
57
57
  export declare const Dialog: DefineComponent<DialogProps>
58
+
59
+ // SkyButton component
60
+ export interface SkyButtonProps {
61
+ variant?: 'primary' | 'danger' | 'secondary' | 'outline'
62
+ loading?: boolean
63
+ disabled?: boolean
64
+ block?: boolean
65
+ icon?: boolean
66
+ }
67
+
68
+ export interface SkyButtonSlots {
69
+ 'default'?: () => any
70
+ }
71
+
72
+ export declare const SkyButton: DefineComponent<SkyButtonProps>
@@ -0,0 +1,144 @@
1
+ <template>
2
+ <button
3
+ class="sky-btn"
4
+ :class="[
5
+ `sky-btn-${variant}`,
6
+ {
7
+ 'sky-btn-block': block,
8
+ 'sky-btn-loading': loading,
9
+ 'sky-btn-icon': icon,
10
+ }
11
+ ]"
12
+ :disabled="disabled || loading"
13
+ v-bind="$attrs"
14
+ >
15
+ <span v-if="loading" class="sky-btn-spinner"></span>
16
+ <slot></slot>
17
+ </button>
18
+ </template>
19
+
20
+ <script>
21
+ export default {
22
+ name: 'SkyButton',
23
+ inheritAttrs: false,
24
+ props: {
25
+ variant: {
26
+ type: String,
27
+ default: 'primary',
28
+ validator: (v) => ['primary', 'danger', 'secondary', 'outline'].includes(v)
29
+ },
30
+ loading: {
31
+ type: Boolean,
32
+ default: false
33
+ },
34
+ disabled: {
35
+ type: Boolean,
36
+ default: false
37
+ },
38
+ block: {
39
+ type: Boolean,
40
+ default: false
41
+ },
42
+ icon: {
43
+ type: Boolean,
44
+ default: false
45
+ }
46
+ }
47
+ }
48
+ </script>
49
+
50
+ <style scoped>
51
+ .sky-btn {
52
+ display: inline-flex;
53
+ align-items: center;
54
+ justify-content: center;
55
+ gap: 8px;
56
+ padding: var(--sky-btn-padding, 16px 20px);
57
+ border: var(--sky-btn-border, none);
58
+ border-radius: var(--sky-btn-radius, 6px);
59
+ font-size: var(--sky-btn-font-size, 14px);
60
+ font-weight: var(--sky-btn-font-weight, 500);
61
+ line-height: 1;
62
+ cursor: pointer;
63
+ white-space: nowrap;
64
+ user-select: none;
65
+ }
66
+
67
+ .sky-btn-icon {
68
+ padding: var(--sky-btn-icon-padding, 10px);
69
+ border-radius: var(--sky-btn-icon-radius, 6px);
70
+ }
71
+
72
+ .sky-btn-block {
73
+ width: 100%;
74
+ }
75
+
76
+ .sky-btn:disabled {
77
+ opacity: 0.6;
78
+ cursor: not-allowed;
79
+ }
80
+
81
+ /* Primary */
82
+ .sky-btn-primary {
83
+ background: var(--sky-btn-primary-bg, #24973f);
84
+ color: var(--sky-btn-primary-color, #fff);
85
+ }
86
+ .sky-btn-primary:hover:not(:disabled) {
87
+ background: var(--sky-btn-primary-hover-bg, #1e7a33);
88
+ }
89
+ .sky-btn-primary:active:not(:disabled) {
90
+ background: var(--sky-btn-primary-active-bg, #196b2c);
91
+ }
92
+
93
+ /* Danger */
94
+ .sky-btn-danger {
95
+ background: var(--sky-btn-danger-bg, #dc2626);
96
+ color: var(--sky-btn-danger-color, #fff);
97
+ }
98
+ .sky-btn-danger:hover:not(:disabled) {
99
+ background: var(--sky-btn-danger-hover-bg, #b91c1c);
100
+ }
101
+ .sky-btn-danger:active:not(:disabled) {
102
+ background: var(--sky-btn-danger-active-bg, #991b1b);
103
+ }
104
+
105
+ /* Secondary */
106
+ .sky-btn-secondary {
107
+ background: var(--sky-btn-secondary-bg, #f3f4f6);
108
+ color: var(--sky-btn-secondary-color, #374151);
109
+ }
110
+ .sky-btn-secondary:hover:not(:disabled) {
111
+ background: var(--sky-btn-secondary-hover-bg, #e5e7eb);
112
+ }
113
+ .sky-btn-secondary:active:not(:disabled) {
114
+ background: var(--sky-btn-secondary-active-bg, #d1d5db);
115
+ }
116
+
117
+ /* Outline */
118
+ .sky-btn-outline {
119
+ background: var(--sky-btn-outline-bg, transparent);
120
+ color: var(--sky-btn-outline-color, #374151);
121
+ border: var(--sky-btn-border, 1px solid #d1d5db);
122
+ }
123
+ .sky-btn-outline:hover:not(:disabled) {
124
+ background: var(--sky-btn-outline-hover-bg, #f3f4f6);
125
+ }
126
+ .sky-btn-outline:active:not(:disabled) {
127
+ background: var(--sky-btn-outline-active-bg, #e5e7eb);
128
+ }
129
+
130
+ /* Loading spinner */
131
+ .sky-btn-spinner {
132
+ width: 14px;
133
+ height: 14px;
134
+ border: 2px solid currentColor;
135
+ border-top-color: transparent;
136
+ border-radius: 50%;
137
+ animation: sky-btn-spin 0.6s linear infinite;
138
+ flex-shrink: 0;
139
+ }
140
+
141
+ @keyframes sky-btn-spin {
142
+ to { transform: rotate(360deg); }
143
+ }
144
+ </style>
@@ -1,5 +1,5 @@
1
1
  export { default as Header } from './Header.vue'
2
2
  export { default as Modal } from './Modal.vue'
3
3
  export { default as Dialog } from './Dialog.vue'
4
-
5
- export {default as BaseTeleport} from './BaseTeleport.vue'
4
+ export { default as SkyButton } from './SkyButton.vue'
5
+ export { default as BaseTeleport } from './BaseTeleport.vue'
@@ -0,0 +1,140 @@
1
+ <template>
2
+ <button
3
+ class="sky-btn"
4
+ :class="[
5
+ `sky-btn-${variant}`,
6
+ {
7
+ 'sky-btn-block': block,
8
+ 'sky-btn-loading': loading,
9
+ 'sky-btn-icon': icon,
10
+ }
11
+ ]"
12
+ :disabled="disabled || loading"
13
+ v-bind="$attrs"
14
+ >
15
+ <span v-if="loading" class="sky-btn-spinner"></span>
16
+ <slot></slot>
17
+ </button>
18
+ </template>
19
+
20
+ <script setup>
21
+ defineProps({
22
+ variant: {
23
+ type: String,
24
+ default: 'primary',
25
+ validator: (v) => ['primary', 'danger', 'secondary', 'outline'].includes(v)
26
+ },
27
+ loading: {
28
+ type: Boolean,
29
+ default: false
30
+ },
31
+ disabled: {
32
+ type: Boolean,
33
+ default: false
34
+ },
35
+ block: {
36
+ type: Boolean,
37
+ default: false
38
+ },
39
+ icon: {
40
+ type: Boolean,
41
+ default: false
42
+ }
43
+ })
44
+ </script>
45
+
46
+ <style scoped>
47
+ .sky-btn {
48
+ display: inline-flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+ gap: 8px;
52
+ padding: var(--sky-btn-padding, 16px 20px);
53
+ border: var(--sky-btn-border, none);
54
+ border-radius: var(--sky-btn-radius, 6px);
55
+ font-size: var(--sky-btn-font-size, 14px);
56
+ font-weight: var(--sky-btn-font-weight, 500);
57
+ line-height: 1;
58
+ cursor: pointer;
59
+ white-space: nowrap;
60
+ user-select: none;
61
+ }
62
+
63
+ .sky-btn-icon {
64
+ padding: var(--sky-btn-icon-padding, 10px);
65
+ border-radius: var(--sky-btn-icon-radius, 6px);
66
+ }
67
+
68
+ .sky-btn-block {
69
+ width: 100%;
70
+ }
71
+
72
+ .sky-btn:disabled {
73
+ opacity: 0.6;
74
+ cursor: not-allowed;
75
+ }
76
+
77
+ /* Primary */
78
+ .sky-btn-primary {
79
+ background: var(--sky-btn-primary-bg, #24973f);
80
+ color: var(--sky-btn-primary-color, #fff);
81
+ }
82
+ .sky-btn-primary:hover:not(:disabled) {
83
+ background: var(--sky-btn-primary-hover-bg, #1e7a33);
84
+ }
85
+ .sky-btn-primary:active:not(:disabled) {
86
+ background: var(--sky-btn-primary-active-bg, #196b2c);
87
+ }
88
+
89
+ /* Danger */
90
+ .sky-btn-danger {
91
+ background: var(--sky-btn-danger-bg, #dc2626);
92
+ color: var(--sky-btn-danger-color, #fff);
93
+ }
94
+ .sky-btn-danger:hover:not(:disabled) {
95
+ background: var(--sky-btn-danger-hover-bg, #b91c1c);
96
+ }
97
+ .sky-btn-danger:active:not(:disabled) {
98
+ background: var(--sky-btn-danger-active-bg, #991b1b);
99
+ }
100
+
101
+ /* Secondary */
102
+ .sky-btn-secondary {
103
+ background: var(--sky-btn-secondary-bg, #f3f4f6);
104
+ color: var(--sky-btn-secondary-color, #374151);
105
+ }
106
+ .sky-btn-secondary:hover:not(:disabled) {
107
+ background: var(--sky-btn-secondary-hover-bg, #e5e7eb);
108
+ }
109
+ .sky-btn-secondary:active:not(:disabled) {
110
+ background: var(--sky-btn-secondary-active-bg, #d1d5db);
111
+ }
112
+
113
+ /* Outline */
114
+ .sky-btn-outline {
115
+ background: var(--sky-btn-outline-bg, transparent);
116
+ color: var(--sky-btn-outline-color, #374151);
117
+ border: var(--sky-btn-border, 1px solid #d1d5db);
118
+ }
119
+ .sky-btn-outline:hover:not(:disabled) {
120
+ background: var(--sky-btn-outline-hover-bg, #f3f4f6);
121
+ }
122
+ .sky-btn-outline:active:not(:disabled) {
123
+ background: var(--sky-btn-outline-active-bg, #e5e7eb);
124
+ }
125
+
126
+ /* Loading spinner */
127
+ .sky-btn-spinner {
128
+ width: 14px;
129
+ height: 14px;
130
+ border: 2px solid currentColor;
131
+ border-top-color: transparent;
132
+ border-radius: 50%;
133
+ animation: sky-btn-spin 0.6s linear infinite;
134
+ flex-shrink: 0;
135
+ }
136
+
137
+ @keyframes sky-btn-spin {
138
+ to { transform: rotate(360deg); }
139
+ }
140
+ </style>
@@ -1,8 +1,7 @@
1
1
  export { default as Header } from './Header.vue'
2
2
  export { default as Dialog } from './Dialog.vue'
3
-
4
3
  export { default as Modal } from './Modal.vue'
5
-
6
- export {default as BaseTeleport} from './BaseTeleport.vue'
4
+ export { default as SkyButton } from './SkyButton.vue'
5
+ export { default as BaseTeleport } from './BaseTeleport.vue'
7
6
 
8
7