barati-ui 0.1.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 ADDED
@@ -0,0 +1,165 @@
1
+ # @barati/ui
2
+
3
+ یک کتابخانه کامپوننت **Vue 3** ساخته‌شده با **Vite + Tailwind CSS**. فعلاً شامل یک کامپوننت `Button` با کلی قابلیت است.
4
+
5
+ ## نصب
6
+
7
+ ```bash
8
+ npm install @barati/ui
9
+ ```
10
+
11
+ > نیازمندی: پروژه شما باید `vue@3` داشته باشد.
12
+
13
+ ## استفاده سریع
14
+
15
+ استایل‌ها **به‌صورت خودکار** هنگام import تزریق می‌شوند (نیازی به import جدا نیست):
16
+
17
+ ```vue
18
+ <script setup>
19
+ import { Button } from '@barati/ui'
20
+ </script>
21
+
22
+ <template>
23
+ <Button variant="gradient" size="lg" glow glossy>
24
+ دکمه شگفت‌انگیز ✨
25
+ </Button>
26
+ <Button variant="danger" :badge="7">حذف</Button>
27
+ <Button variant="primary" loading loading-text="در حال ذخیره...">ذخیره</Button>
28
+ </template>
29
+ ```
30
+
31
+ ### روش دوم (اگر خودت می‌خواهی CSS را جدا مدیریت کنی)
32
+
33
+ ```js
34
+ import { Button } from '@barati/ui'
35
+ import '@barati/ui/style.css'
36
+ ```
37
+
38
+ ### نصب سراسری کامپوننت
39
+
40
+ ```js
41
+ import { createApp } from 'vue'
42
+ import BaratiUI from '@barati/ui'
43
+
44
+ createApp(App).use(BaratiUI).mount('#app')
45
+ // حالا <Button> و <CButton> سراسری در دسترس است
46
+ ```
47
+
48
+ ## مثال‌ها
49
+
50
+ ```vue
51
+ <!-- لینک -->
52
+ <Button href="https://vuejs.org" target="_blank">برو به Vue</Button>
53
+
54
+ <!-- آیکون (متن/ایموجی یا slot) -->
55
+ <Button icon="🚀">شروع</Button>
56
+ <Button icon-position="right" icon="➡️">ادامه</Button>
57
+ <Button>
58
+ <template #icon>
59
+ <svg ... />
60
+ </template>
61
+ با آیکون SVG
62
+ </Button>
63
+
64
+ <!-- حالت‌ها -->
65
+ <Button disabled>غیرفعال</Button>
66
+ <Button loading loading-text="لطفاً صبر کنید...">دکمه</Button>
67
+ <Button :loading="isSaving">ذخیره</Button>
68
+
69
+ <!-- بج و نشان -->
70
+ <Button variant="info" :badge="count" badge-max="99">اعلان‌ها</Button>
71
+ <Button variant="dark" badge-type="dot">نقطه آنلاین</Button>
72
+
73
+ <!-- افکت‌ها -->
74
+ <Button glow>درخشش</Button>
75
+ <Button glossy>جلای عبور نور</Button>
76
+ <Button lift>بالا می‌آید</Button>
77
+ <Button :ripple="true">ریپل آب</Button>
78
+
79
+ <!-- اندازه و شکل -->
80
+ <Button size="xs">XS</Button>
81
+ <Button size="2xl">XXL</Button>
82
+ <Button rounded="full">کپسولی</Button>
83
+ <Button rounded="none">گوشه تیز</Button>
84
+
85
+ <!-- کل عرض -->
86
+ <Button full-width>تمام عرض</Button>
87
+ ```
88
+
89
+ ## Props
90
+
91
+ | Prop | نوع | پیش‌فرض | توضیح |
92
+ |---|---|---|---|
93
+ | `variant` | String | `primary` | `primary`, `gradient`, `secondary`, `dark`, `outline`, `ghost`, `danger`, `success`, `warning`, `info`, `light`, `link` |
94
+ | `size` | String | `md` | `xs`, `sm`, `md`, `lg`, `xl`, `2xl` |
95
+ | `rounded` | String | `md` | `none`, `sm`, `md`, `lg`, `xl`, `full` |
96
+ | `loading` | Boolean | `false` | نمایش اسپینر و غیرفعال‌کردن |
97
+ | `loading-text` | String | `''` | متن کنار اسپینر |
98
+ | `disabled` | Boolean | `false` | غیرفعال |
99
+ | `full-width` | Boolean | `false` | ۱۰۰٪ عرض |
100
+ | `uppercase` | Boolean | `false` | حروف بزرگ |
101
+ | `lift` | Boolean | `false` | بلند شدن در hover |
102
+ | `glow` | Boolean | `false` | هاله نورانی متحرک |
103
+ | `glossy` | Boolean | `false` | افکت عبور نور روی دکمه |
104
+ | `ripple` | Boolean | `true` | افکت ریپل روی کلیک |
105
+ | `press` | Boolean | `true` | کوچک‌شدن هنگام کلیک |
106
+ | `icon` | String | `''` | ایموجی/متن آیکون |
107
+ | `icon-position` | String | `left` | `left` یا `right` |
108
+ | `badge` | String/Number/null | `null` | مقدار بج |
109
+ | `badge-max` | Number | `99` | نمایش `99+` برای اعداد بزرگ‌تر |
110
+ | `badge-type` | String | `danger` | `danger`, `success`, `info`, `warning`, `violet`, `slate`, `dot` |
111
+ | `href` | String | `''` | اگر داده شود به `<a>` تبدیل می‌شود |
112
+ | `target` | String | `''` | برای لینک‌ها |
113
+ | `rel` | String | `''` | اگر `target=_blank` باشد به‌صورت خودکار `noopener noreferrer` می‌شود |
114
+ | `aria-label` | String | `''` | دسترسی‌پذیری |
115
+ | `type` | String | `button` | `button`, `submit`, `reset` |
116
+ | `component` | Object/Function | `null` | کامپوننت جایگزین مثلاً `RouterLink` از vue-router |
117
+
118
+ ## Slots و Events
119
+
120
+ | نام | توضیح |
121
+ |---|---|
122
+ | `default` | متن داخل دکمه |
123
+ | `icon` | آیکون سفارشی (ترجیحاً برای SVG) |
124
+ | `#click` | رویداد کلیک (`emits: ['click']`) |
125
+
126
+ ## اجرای پروژه به‌صورت محلی (Development)
127
+
128
+ ```bash
129
+ npm install
130
+ npm run dev # playground دمو
131
+ npm run build # ساخت خروجی نهایی در dist/
132
+ ```
133
+
134
+ ## تست پکیج قبل از انتشار (npm link)
135
+
136
+ در پوشه همین پکیج:
137
+
138
+ ```bash
139
+ npm link
140
+ ```
141
+
142
+ سپس در پروژه دیگر:
143
+
144
+ ```bash
145
+ npm link @barati/ui
146
+ ```
147
+
148
+ بعدش به‌صورت عادی:
149
+
150
+ ```js
151
+ import { Button } from '@barati/ui'
152
+ ```
153
+
154
+ ## انتشار روی npm
155
+
156
+ ```bash
157
+ npm login
158
+ npm publish --access public
159
+ ```
160
+
161
+ > توجه: چون نام پکیج scope شده (`@barati/ui`) است، برای داخل npm باید با `--access public` منتشر شود (مگر اینکه حساب سازمانی داشته باشید).
162
+
163
+ ## لایسنس
164
+
165
+ MIT
package/dist/index.js ADDED
@@ -0,0 +1,199 @@
1
+ (function(){"use strict";try{if(typeof document<"u"){var r=document.createElement("style");r.appendChild(document.createTextNode('.cs-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;margin:0;border:0;border-radius:.5rem;font-family:inherit;font-weight:600;line-height:inherit;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;overflow:hidden;text-decoration:none;-webkit-tap-highlight-color:transparent;transition:all .18s cubic-bezier(.4,0,.2,1)}.cs-btn.cs-link{overflow:visible}.cs-btn:focus-visible{outline:2px solid transparent;outline-offset:2px}.cs-btn:hover:not(:disabled):not(.is-disabled).cs-lift{transform:translateY(-2px)}.cs-btn:active:not(:disabled):not(.is-disabled).cs-press{transform:scale(.96)}.cs-btn:disabled,.cs-btn.is-disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.cs-ripple{position:absolute;border-radius:9999px;background:currentColor;opacity:.3;transform:scale(0);pointer-events:none;z-index:1;animation:cs-ripple .65s ease-out forwards}.cs-spinner{display:inline-block;width:1em;height:1em;border-radius:9999px;border:2px solid currentColor;border-top-color:transparent;animation:cs-spin .7s linear infinite}.cs-badge{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:1.125rem;height:1.125rem;padding:0 .25rem;border-radius:9999px;font-size:.65rem;font-weight:700;line-height:1;text-indent:0;text-align:center;color:#fff;box-shadow:0 1px 3px #0000004d;z-index:2}.cs-badge-dot{display:block;width:.55rem;height:.55rem;border-radius:9999px;box-shadow:0 0 0 2px #fff;z-index:2}.cs-shine:after{content:"";position:absolute;top:-60%;left:-80%;width:40%;height:220%;transform:rotate(25deg);background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent);pointer-events:none}.cs-shine:hover:after{animation:cs-shine .8s ease forwards}.cs-glow{animation:cs-glow-pulse 2.4s ease-in-out infinite}.absolute{position:absolute}.-right-0\\.5{right:-.125rem}.-right-1{right:-.25rem}.-top-0\\.5{top:-.125rem}.-top-1{top:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-4{margin-bottom:1rem}.mt-2{margin-top:.5rem}.flex{display:flex}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-8{height:2rem}.min-h-screen{min-height:100vh}.w-5{width:1.25rem}.w-full{width:100%}.max-w-6xl{max-width:72rem}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.gap-1{gap:.25rem}.gap-1\\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-violet-600{--tw-border-opacity: 1;border-color:rgb(124 58 237 / var(--tw-border-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-600{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-sky-600{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-600{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-violet-600{--tw-bg-opacity: 1;background-color:rgb(124 58 237 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-violet-600{--tw-gradient-from: #7c3aed var(--tw-gradient-from-position);--tw-gradient-to: rgb(124 58 237 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-fuchsia-500{--tw-gradient-to: rgb(217 70 239 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #d946ef var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-rose-500{--tw-gradient-to: #f43f5e var(--tw-gradient-to-position)}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-amber-950{--tw-text-opacity: 1;color:rgb(69 26 3 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-amber-500\\/30{--tw-shadow-color: rgb(245 158 11 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-emerald-600\\/25{--tw-shadow-color: rgb(5 150 105 / .25);--tw-shadow: var(--tw-shadow-colored)}.shadow-fuchsia-500\\/30{--tw-shadow-color: rgb(217 70 239 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-rose-600\\/25{--tw-shadow-color: rgb(225 29 72 / .25);--tw-shadow: var(--tw-shadow-colored)}.shadow-sky-600\\/25{--tw-shadow-color: rgb(2 132 199 / .25);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-900\\/25{--tw-shadow-color: rgb(15 23 42 / .25);--tw-shadow: var(--tw-shadow-colored)}.shadow-violet-600\\/25{--tw-shadow-color: rgb(124 58 237 / .25);--tw-shadow: var(--tw-shadow-colored)}.outline{outline-style:solid}@keyframes cs-ripple{to{transform:scale(1);opacity:0}}@keyframes cs-spin{to{transform:rotate(360deg)}}@keyframes cs-shine{to{left:130%}}@keyframes cs-glow-pulse{0%,to{box-shadow:0 0 8px 0 var(--cs-glow, rgba(139, 92, 246, .5))}50%{box-shadow:0 0 22px 6px var(--cs-glow, rgba(139, 92, 246, .5))}}.hover\\:bg-amber-400:hover{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.hover\\:bg-emerald-500:hover{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.hover\\:bg-rose-500:hover{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.hover\\:bg-sky-500:hover{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.hover\\:bg-slate-300:hover{--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity, 1))}.hover\\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.hover\\:bg-violet-50:hover{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.hover\\:bg-violet-500:hover{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.hover\\:bg-violet-500\\/10:hover{background-color:#8b5cf61a}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\\:shadow-fuchsia-500\\/40:hover{--tw-shadow-color: rgb(217 70 239 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\\:brightness-110:hover{--tw-brightness: brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus-visible\\:ring-amber-400\\/50:focus-visible{--tw-ring-color: rgb(251 191 36 / .5)}.focus-visible\\:ring-emerald-500\\/50:focus-visible{--tw-ring-color: rgb(16 185 129 / .5)}.focus-visible\\:ring-fuchsia-400\\/50:focus-visible{--tw-ring-color: rgb(232 121 249 / .5)}.focus-visible\\:ring-rose-500\\/50:focus-visible{--tw-ring-color: rgb(244 63 94 / .5)}.focus-visible\\:ring-sky-500\\/50:focus-visible{--tw-ring-color: rgb(14 165 233 / .5)}.focus-visible\\:ring-slate-400\\/40:focus-visible{--tw-ring-color: rgb(148 163 184 / .4)}.focus-visible\\:ring-slate-400\\/50:focus-visible{--tw-ring-color: rgb(148 163 184 / .5)}.focus-visible\\:ring-slate-500\\/50:focus-visible{--tw-ring-color: rgb(100 116 139 / .5)}.focus-visible\\:ring-violet-400\\/40:focus-visible{--tw-ring-color: rgb(167 139 250 / .4)}.focus-visible\\:ring-violet-500\\/40:focus-visible{--tw-ring-color: rgb(139 92 246 / .4)}.focus-visible\\:ring-violet-500\\/50:focus-visible{--tw-ring-color: rgb(139 92 246 / .5)}@media(prefers-color-scheme:dark){.dark\\:border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.dark\\:border-violet-400{--tw-border-opacity: 1;border-color:rgb(167 139 250 / var(--tw-border-opacity, 1))}.dark\\:bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.dark\\:bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\\:text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.dark\\:text-violet-300{--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\\:hover\\:bg-slate-600:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.dark\\:hover\\:bg-violet-500\\/10:hover{background-color:#8b5cf61a}}')),document.head.appendChild(r)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
2
+ import { ref as O, useAttrs as W, computed as n, openBlock as l, createBlock as X, resolveDynamicComponent as Y, mergeProps as q, unref as N, withCtx as G, createElementBlock as o, Fragment as v, createElementVNode as H, toDisplayString as c, createCommentVNode as d, renderSlot as T, normalizeClass as I, createTextVNode as J } from "vue";
3
+ const K = {
4
+ key: 0,
5
+ class: "whitespace-nowrap"
6
+ }, Q = {
7
+ key: 1,
8
+ "aria-hidden": "true"
9
+ }, U = {
10
+ key: 2,
11
+ "aria-hidden": "true"
12
+ }, ee = /* @__PURE__ */ Object.assign({ name: "CsisButton", inheritAttrs: !1 }, {
13
+ __name: "Button",
14
+ props: {
15
+ component: { type: [String, Object, Function], default: null },
16
+ tag: { type: String, default: "button" },
17
+ type: { type: String, default: "button" },
18
+ href: { type: String, default: "" },
19
+ target: { type: String, default: "" },
20
+ rel: { type: String, default: "" },
21
+ variant: {
22
+ type: String,
23
+ default: "primary",
24
+ validator: (e) => [
25
+ "primary",
26
+ "gradient",
27
+ "secondary",
28
+ "dark",
29
+ "outline",
30
+ "ghost",
31
+ "danger",
32
+ "success",
33
+ "warning",
34
+ "info",
35
+ "light",
36
+ "link"
37
+ ].includes(e)
38
+ },
39
+ size: {
40
+ type: String,
41
+ default: "md",
42
+ validator: (e) => ["xs", "sm", "md", "lg", "xl", "2xl"].includes(e)
43
+ },
44
+ rounded: {
45
+ type: String,
46
+ default: "md",
47
+ validator: (e) => ["none", "sm", "md", "lg", "xl", "full"].includes(e)
48
+ },
49
+ loading: { type: Boolean, default: !1 },
50
+ loadingText: { type: String, default: "" },
51
+ disabled: { type: Boolean, default: !1 },
52
+ fullWidth: { type: Boolean, default: !1 },
53
+ uppercase: { type: Boolean, default: !1 },
54
+ lift: { type: Boolean, default: !1 },
55
+ glow: { type: Boolean, default: !1 },
56
+ glossy: { type: Boolean, default: !1 },
57
+ ripple: { type: Boolean, default: !0 },
58
+ press: { type: Boolean, default: !0 },
59
+ icon: { type: String, default: "" },
60
+ iconPosition: { type: String, default: "left", validator: (e) => ["left", "right"].includes(e) },
61
+ badge: { type: [String, Number], default: null },
62
+ badgeMax: { type: [Number, String], default: 99 },
63
+ badgeType: {
64
+ type: String,
65
+ default: "danger",
66
+ validator: (e) => ["danger", "success", "info", "warning", "violet", "slate", "dot"].includes(e)
67
+ },
68
+ ariaLabel: { type: String, default: "" },
69
+ autofocus: { type: Boolean, default: !1 }
70
+ },
71
+ emits: ["click"],
72
+ setup(e, { emit: $ }) {
73
+ const t = e, z = $, p = O(null), f = W(), D = n(() => {
74
+ const { class: a, style: s, ...r } = f;
75
+ return r;
76
+ }), u = n(() => t.disabled || t.loading), m = n(() => t.variant === "link"), b = n(() => t.component ? t.component : t.href ? "a" : t.tag), y = n(() => b.value === "button"), h = n(() => b.value === "a"), L = n(() => {
77
+ if (t.rel) return t.rel;
78
+ if (t.target === "_blank") return "noopener noreferrer";
79
+ }), x = {
80
+ xs: "h-7 px-2.5 text-xs gap-1",
81
+ sm: "h-8 px-3.5 text-sm gap-1.5",
82
+ md: "h-10 px-5 text-sm gap-2",
83
+ lg: "h-11 px-6 text-base gap-2",
84
+ xl: "h-14 px-8 text-lg gap-2.5",
85
+ "2xl": "h-16 px-10 text-xl gap-3"
86
+ }, w = {
87
+ primary: "bg-violet-600 text-white shadow-md shadow-violet-600/25 hover:bg-violet-500 focus-visible:ring-violet-500/50",
88
+ gradient: "bg-gradient-to-br from-violet-600 via-fuchsia-500 to-rose-500 text-white shadow-md shadow-fuchsia-500/30 hover:brightness-110 hover:shadow-lg hover:shadow-fuchsia-500/40 focus-visible:ring-fuchsia-400/50",
89
+ secondary: "bg-slate-200 text-slate-800 shadow-sm hover:bg-slate-300 focus-visible:ring-slate-400/50 dark:bg-slate-700 dark:text-slate-100 dark:hover:bg-slate-600",
90
+ dark: "bg-slate-900 text-white shadow-md shadow-slate-900/25 hover:bg-slate-700 focus-visible:ring-slate-500/50 dark:bg-slate-800",
91
+ outline: "border-2 border-violet-600 text-violet-600 hover:bg-violet-50 focus-visible:ring-violet-500/40 dark:border-violet-400 dark:text-violet-300 dark:hover:bg-violet-500/10",
92
+ ghost: "text-violet-600 hover:bg-violet-500/10 focus-visible:ring-violet-500/40 dark:text-violet-300",
93
+ danger: "bg-rose-600 text-white shadow-md shadow-rose-600/25 hover:bg-rose-500 focus-visible:ring-rose-500/50",
94
+ success: "bg-emerald-600 text-white shadow-md shadow-emerald-600/25 hover:bg-emerald-500 focus-visible:ring-emerald-500/50",
95
+ warning: "bg-amber-500 text-amber-950 shadow-md shadow-amber-500/30 hover:bg-amber-400 focus-visible:ring-amber-400/50",
96
+ info: "bg-sky-600 text-white shadow-md shadow-sky-600/25 hover:bg-sky-500 focus-visible:ring-sky-500/50",
97
+ light: "bg-white text-slate-800 border border-slate-200 shadow-sm hover:bg-slate-50 focus-visible:ring-slate-400/40 dark:bg-slate-800 dark:text-slate-100 dark:border-slate-700",
98
+ link: "cs-link text-violet-600 underline-offset-4 hover:underline focus-visible:ring-violet-400/40 bg-transparent shadow-none"
99
+ }, k = {
100
+ none: "rounded-none",
101
+ sm: "rounded-sm",
102
+ md: "rounded-lg",
103
+ lg: "rounded-xl",
104
+ xl: "rounded-2xl",
105
+ full: "rounded-full"
106
+ }, B = {
107
+ primary: "rgba(139, 92, 246, 0.55)",
108
+ gradient: "rgba(217, 70, 239, 0.5)",
109
+ secondary: "rgba(148, 163, 184, 0.5)",
110
+ dark: "rgba(15, 23, 42, 0.6)",
111
+ outline: "rgba(139, 92, 246, 0.45)",
112
+ ghost: "rgba(139, 92, 246, 0.35)",
113
+ danger: "rgba(225, 29, 72, 0.55)",
114
+ success: "rgba(16, 185, 129, 0.55)",
115
+ warning: "rgba(245, 158, 11, 0.55)",
116
+ info: "rgba(2, 132, 199, 0.55)",
117
+ light: "rgba(15, 23, 42, 0.18)",
118
+ link: "rgba(139, 92, 246, 0.4)"
119
+ }, S = {
120
+ danger: "bg-rose-500",
121
+ success: "bg-emerald-500",
122
+ info: "bg-sky-500",
123
+ warning: "bg-amber-500",
124
+ violet: "bg-violet-500",
125
+ slate: "bg-slate-600"
126
+ }, P = n(() => {
127
+ const a = ["cs-btn", w[t.variant] || w.primary];
128
+ return m.value || (a.push(x[t.size] || x.md), a.push(k[t.rounded] || k.md)), t.uppercase && a.push("uppercase tracking-wide"), t.fullWidth && a.push("w-full"), t.lift && a.push("cs-lift"), t.press && a.push("cs-press"), t.glow && a.push("cs-glow"), t.glossy && a.push("cs-shine"), u.value && a.push("is-disabled"), a;
129
+ }), A = n(() => {
130
+ if (t.glow)
131
+ return { "--cs-glow": B[t.variant] || B.primary };
132
+ }), C = n(() => t.badgeType === "dot"), V = n(() => C.value ? ["cs-badge-dot", "absolute", "-top-0.5", "-right-0.5", "bg-rose-500"] : ["cs-badge", "absolute", "-top-1", "-right-1", S[t.badgeType] || S.danger]), E = n(() => {
133
+ const a = Number(t.badgeMax) || 99, s = Number(t.badge);
134
+ return Number.isFinite(s) ? s > a ? `${a}+` : String(s) : String(t.badge ?? "");
135
+ });
136
+ function F(a) {
137
+ const s = p.value;
138
+ if (!s || m.value) return;
139
+ const r = s.getBoundingClientRect(), g = Math.max(r.width, r.height) * 2, R = a.clientX - r.left - g / 2, j = a.clientY - r.top - g / 2, i = document.createElement("span");
140
+ i.className = "cs-ripple", i.style.width = `${g}px`, i.style.height = `${g}px`, i.style.left = `${R}px`, i.style.top = `${j}px`, s.appendChild(i), window.setTimeout(() => i.remove(), 650);
141
+ }
142
+ function M(a) {
143
+ if (u.value) {
144
+ a.preventDefault(), a.stopPropagation();
145
+ return;
146
+ }
147
+ t.ripple && F(a), z("click", a);
148
+ }
149
+ return (a, s) => (l(), X(Y(b.value), q({
150
+ ref_key: "root",
151
+ ref: p
152
+ }, D.value, {
153
+ type: y.value ? e.type : void 0,
154
+ href: h.value && e.href ? e.href : void 0,
155
+ target: h.value && e.target ? e.target : void 0,
156
+ rel: h.value ? L.value : void 0,
157
+ disabled: y.value ? u.value : void 0,
158
+ "aria-disabled": u.value || void 0,
159
+ "aria-busy": e.loading || void 0,
160
+ "aria-label": e.ariaLabel || void 0,
161
+ autofocus: e.autofocus || void 0,
162
+ class: [N(f).class, P.value],
163
+ style: [N(f).style, A.value],
164
+ onClick: M
165
+ }), {
166
+ default: G(() => [
167
+ e.loading ? (l(), o(v, { key: 0 }, [
168
+ s[0] || (s[0] = H("span", {
169
+ "aria-hidden": "true",
170
+ class: "cs-spinner"
171
+ }, null, -1)),
172
+ e.loadingText ? (l(), o("span", K, c(e.loadingText), 1)) : d("", !0)
173
+ ], 64)) : (l(), o(v, { key: 1 }, [
174
+ a.$slots.icon ? T(a.$slots, "icon", {}, void 0, void 0, 0) : e.icon && e.iconPosition === "left" ? (l(), o("span", Q, c(e.icon), 1)) : d("", !0),
175
+ T(a.$slots, "default"),
176
+ e.icon && e.iconPosition === "right" ? (l(), o("span", U, c(e.icon), 1)) : d("", !0)
177
+ ], 64)),
178
+ e.badge !== null && e.badge !== void 0 ? (l(), o("span", {
179
+ key: 2,
180
+ class: I(V.value)
181
+ }, [
182
+ C.value ? d("", !0) : (l(), o(v, { key: 0 }, [
183
+ J(c(E.value), 1)
184
+ ], 64))
185
+ ], 2)) : d("", !0)
186
+ ]),
187
+ _: 3
188
+ }, 16, ["type", "href", "target", "rel", "disabled", "aria-disabled", "aria-busy", "aria-label", "autofocus", "class", "style"]));
189
+ }
190
+ }), Z = (e) => {
191
+ e.component("Button", Button), e.component("CButton", Button);
192
+ }, te = { install: Z, Button }, ae = "0.1.0";
193
+ export {
194
+ ee as Button,
195
+ ee as CButton,
196
+ ee as XButton,
197
+ te as default,
198
+ ae as version
199
+ };
package/dist/style.css ADDED
@@ -0,0 +1,646 @@
1
+
2
+ .cs-btn {
3
+ position: relative;
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ box-sizing: border-box;
8
+ margin: 0;
9
+ border: 0;
10
+ border-radius: 0.5rem;
11
+ font-family: inherit;
12
+ font-weight: 600;
13
+ line-height: inherit;
14
+ white-space: nowrap;
15
+ vertical-align: middle;
16
+ cursor: pointer;
17
+ -webkit-user-select: none;
18
+ -moz-user-select: none;
19
+ user-select: none;
20
+ flex-shrink: 0;
21
+ overflow: hidden;
22
+ text-decoration: none;
23
+ -webkit-tap-highlight-color: transparent;
24
+ transition: all 0.18s cubic-bezier(0.4, 0, 0.2, 1);
25
+ }
26
+
27
+ .cs-btn.cs-link {
28
+ overflow: visible;
29
+ }
30
+
31
+ .cs-btn:focus-visible {
32
+ outline: 2px solid transparent;
33
+ outline-offset: 2px;
34
+ }
35
+
36
+ .cs-btn:hover:not(:disabled):not(.is-disabled).cs-lift {
37
+ transform: translateY(-2px);
38
+ }
39
+
40
+ .cs-btn:active:not(:disabled):not(.is-disabled).cs-press {
41
+ transform: scale(0.96);
42
+ }
43
+
44
+ .cs-btn:disabled,
45
+ .cs-btn.is-disabled {
46
+ opacity: 0.55;
47
+ cursor: not-allowed;
48
+ pointer-events: none;
49
+ }
50
+
51
+ .cs-ripple {
52
+ position: absolute;
53
+ border-radius: 9999px;
54
+ background: currentColor;
55
+ opacity: 0.3;
56
+ transform: scale(0);
57
+ pointer-events: none;
58
+ z-index: 1;
59
+ animation: cs-ripple 0.65s ease-out forwards;
60
+ }
61
+
62
+ .cs-spinner {
63
+ display: inline-block;
64
+ width: 1em;
65
+ height: 1em;
66
+ border-radius: 9999px;
67
+ border: 2px solid currentColor;
68
+ border-top-color: transparent;
69
+ animation: cs-spin 0.7s linear infinite;
70
+ }
71
+
72
+ .cs-badge {
73
+ display: inline-flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ box-sizing: border-box;
77
+ min-width: 1.125rem;
78
+ height: 1.125rem;
79
+ padding: 0 0.25rem;
80
+ border-radius: 9999px;
81
+ font-size: 0.65rem;
82
+ font-weight: 700;
83
+ line-height: 1;
84
+ text-indent: 0;
85
+ text-align: center;
86
+ color: #fff;
87
+ box-shadow: 0 1px 3px rgb(0 0 0 / 0.3);
88
+ z-index: 2;
89
+ }
90
+
91
+ .cs-badge-dot {
92
+ display: block;
93
+ width: 0.55rem;
94
+ height: 0.55rem;
95
+ border-radius: 9999px;
96
+ box-shadow: 0 0 0 2px #fff;
97
+ z-index: 2;
98
+ }
99
+
100
+ .cs-shine::after {
101
+ content: '';
102
+ position: absolute;
103
+ top: -60%;
104
+ left: -80%;
105
+ width: 40%;
106
+ height: 220%;
107
+ transform: rotate(25deg);
108
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.5), transparent);
109
+ pointer-events: none;
110
+ }
111
+
112
+ .cs-shine:hover::after {
113
+ animation: cs-shine 0.8s ease forwards;
114
+ }
115
+
116
+ .cs-glow {
117
+ animation: cs-glow-pulse 2.4s ease-in-out infinite;
118
+ }
119
+ .absolute {
120
+ position: absolute;
121
+ }
122
+ .-right-0\.5 {
123
+ right: -0.125rem;
124
+ }
125
+ .-right-1 {
126
+ right: -0.25rem;
127
+ }
128
+ .-top-0\.5 {
129
+ top: -0.125rem;
130
+ }
131
+ .-top-1 {
132
+ top: -0.25rem;
133
+ }
134
+ .mx-auto {
135
+ margin-left: auto;
136
+ margin-right: auto;
137
+ }
138
+ .mb-4 {
139
+ margin-bottom: 1rem;
140
+ }
141
+ .mt-2 {
142
+ margin-top: 0.5rem;
143
+ }
144
+ .flex {
145
+ display: flex;
146
+ }
147
+ .h-10 {
148
+ height: 2.5rem;
149
+ }
150
+ .h-11 {
151
+ height: 2.75rem;
152
+ }
153
+ .h-14 {
154
+ height: 3.5rem;
155
+ }
156
+ .h-16 {
157
+ height: 4rem;
158
+ }
159
+ .h-5 {
160
+ height: 1.25rem;
161
+ }
162
+ .h-7 {
163
+ height: 1.75rem;
164
+ }
165
+ .h-8 {
166
+ height: 2rem;
167
+ }
168
+ .min-h-screen {
169
+ min-height: 100vh;
170
+ }
171
+ .w-5 {
172
+ width: 1.25rem;
173
+ }
174
+ .w-full {
175
+ width: 100%;
176
+ }
177
+ .max-w-6xl {
178
+ max-width: 72rem;
179
+ }
180
+ .flex-wrap {
181
+ flex-wrap: wrap;
182
+ }
183
+ .items-center {
184
+ align-items: center;
185
+ }
186
+ .gap-1 {
187
+ gap: 0.25rem;
188
+ }
189
+ .gap-1\.5 {
190
+ gap: 0.375rem;
191
+ }
192
+ .gap-2 {
193
+ gap: 0.5rem;
194
+ }
195
+ .gap-2\.5 {
196
+ gap: 0.625rem;
197
+ }
198
+ .gap-3 {
199
+ gap: 0.75rem;
200
+ }
201
+ .gap-4 {
202
+ gap: 1rem;
203
+ }
204
+ .gap-6 {
205
+ gap: 1.5rem;
206
+ }
207
+ .space-y-12 > :not([hidden]) ~ :not([hidden]) {
208
+ --tw-space-y-reverse: 0;
209
+ margin-top: calc(3rem * calc(1 - var(--tw-space-y-reverse)));
210
+ margin-bottom: calc(3rem * var(--tw-space-y-reverse));
211
+ }
212
+ .whitespace-nowrap {
213
+ white-space: nowrap;
214
+ }
215
+ .rounded {
216
+ border-radius: 0.25rem;
217
+ }
218
+ .rounded-2xl {
219
+ border-radius: 1rem;
220
+ }
221
+ .rounded-full {
222
+ border-radius: 9999px;
223
+ }
224
+ .rounded-lg {
225
+ border-radius: 0.5rem;
226
+ }
227
+ .rounded-none {
228
+ border-radius: 0px;
229
+ }
230
+ .rounded-sm {
231
+ border-radius: 0.125rem;
232
+ }
233
+ .rounded-xl {
234
+ border-radius: 0.75rem;
235
+ }
236
+ .border {
237
+ border-width: 1px;
238
+ }
239
+ .border-2 {
240
+ border-width: 2px;
241
+ }
242
+ .border-slate-200 {
243
+ --tw-border-opacity: 1;
244
+ border-color: rgb(226 232 240 / var(--tw-border-opacity, 1));
245
+ }
246
+ .border-violet-600 {
247
+ --tw-border-opacity: 1;
248
+ border-color: rgb(124 58 237 / var(--tw-border-opacity, 1));
249
+ }
250
+ .bg-amber-500 {
251
+ --tw-bg-opacity: 1;
252
+ background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));
253
+ }
254
+ .bg-emerald-500 {
255
+ --tw-bg-opacity: 1;
256
+ background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));
257
+ }
258
+ .bg-emerald-600 {
259
+ --tw-bg-opacity: 1;
260
+ background-color: rgb(5 150 105 / var(--tw-bg-opacity, 1));
261
+ }
262
+ .bg-rose-500 {
263
+ --tw-bg-opacity: 1;
264
+ background-color: rgb(244 63 94 / var(--tw-bg-opacity, 1));
265
+ }
266
+ .bg-rose-600 {
267
+ --tw-bg-opacity: 1;
268
+ background-color: rgb(225 29 72 / var(--tw-bg-opacity, 1));
269
+ }
270
+ .bg-sky-500 {
271
+ --tw-bg-opacity: 1;
272
+ background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1));
273
+ }
274
+ .bg-sky-600 {
275
+ --tw-bg-opacity: 1;
276
+ background-color: rgb(2 132 199 / var(--tw-bg-opacity, 1));
277
+ }
278
+ .bg-slate-200 {
279
+ --tw-bg-opacity: 1;
280
+ background-color: rgb(226 232 240 / var(--tw-bg-opacity, 1));
281
+ }
282
+ .bg-slate-600 {
283
+ --tw-bg-opacity: 1;
284
+ background-color: rgb(71 85 105 / var(--tw-bg-opacity, 1));
285
+ }
286
+ .bg-slate-900 {
287
+ --tw-bg-opacity: 1;
288
+ background-color: rgb(15 23 42 / var(--tw-bg-opacity, 1));
289
+ }
290
+ .bg-slate-950 {
291
+ --tw-bg-opacity: 1;
292
+ background-color: rgb(2 6 23 / var(--tw-bg-opacity, 1));
293
+ }
294
+ .bg-transparent {
295
+ background-color: transparent;
296
+ }
297
+ .bg-violet-500 {
298
+ --tw-bg-opacity: 1;
299
+ background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1));
300
+ }
301
+ .bg-violet-600 {
302
+ --tw-bg-opacity: 1;
303
+ background-color: rgb(124 58 237 / var(--tw-bg-opacity, 1));
304
+ }
305
+ .bg-white {
306
+ --tw-bg-opacity: 1;
307
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
308
+ }
309
+ .bg-gradient-to-br {
310
+ background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));
311
+ }
312
+ .from-violet-600 {
313
+ --tw-gradient-from: #7c3aed var(--tw-gradient-from-position);
314
+ --tw-gradient-to: rgb(124 58 237 / 0) var(--tw-gradient-to-position);
315
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
316
+ }
317
+ .via-fuchsia-500 {
318
+ --tw-gradient-to: rgb(217 70 239 / 0) var(--tw-gradient-to-position);
319
+ --tw-gradient-stops: var(--tw-gradient-from), #d946ef var(--tw-gradient-via-position), var(--tw-gradient-to);
320
+ }
321
+ .to-rose-500 {
322
+ --tw-gradient-to: #f43f5e var(--tw-gradient-to-position);
323
+ }
324
+ .p-8 {
325
+ padding: 2rem;
326
+ }
327
+ .px-10 {
328
+ padding-left: 2.5rem;
329
+ padding-right: 2.5rem;
330
+ }
331
+ .px-2\.5 {
332
+ padding-left: 0.625rem;
333
+ padding-right: 0.625rem;
334
+ }
335
+ .px-3\.5 {
336
+ padding-left: 0.875rem;
337
+ padding-right: 0.875rem;
338
+ }
339
+ .px-5 {
340
+ padding-left: 1.25rem;
341
+ padding-right: 1.25rem;
342
+ }
343
+ .px-6 {
344
+ padding-left: 1.5rem;
345
+ padding-right: 1.5rem;
346
+ }
347
+ .px-8 {
348
+ padding-left: 2rem;
349
+ padding-right: 2rem;
350
+ }
351
+ .text-3xl {
352
+ font-size: 1.875rem;
353
+ line-height: 2.25rem;
354
+ }
355
+ .text-base {
356
+ font-size: 1rem;
357
+ line-height: 1.5rem;
358
+ }
359
+ .text-lg {
360
+ font-size: 1.125rem;
361
+ line-height: 1.75rem;
362
+ }
363
+ .text-sm {
364
+ font-size: 0.875rem;
365
+ line-height: 1.25rem;
366
+ }
367
+ .text-xl {
368
+ font-size: 1.25rem;
369
+ line-height: 1.75rem;
370
+ }
371
+ .text-xs {
372
+ font-size: 0.75rem;
373
+ line-height: 1rem;
374
+ }
375
+ .font-bold {
376
+ font-weight: 700;
377
+ }
378
+ .font-semibold {
379
+ font-weight: 600;
380
+ }
381
+ .uppercase {
382
+ text-transform: uppercase;
383
+ }
384
+ .tracking-wide {
385
+ letter-spacing: 0.025em;
386
+ }
387
+ .tracking-widest {
388
+ letter-spacing: 0.1em;
389
+ }
390
+ .text-amber-950 {
391
+ --tw-text-opacity: 1;
392
+ color: rgb(69 26 3 / var(--tw-text-opacity, 1));
393
+ }
394
+ .text-slate-100 {
395
+ --tw-text-opacity: 1;
396
+ color: rgb(241 245 249 / var(--tw-text-opacity, 1));
397
+ }
398
+ .text-slate-400 {
399
+ --tw-text-opacity: 1;
400
+ color: rgb(148 163 184 / var(--tw-text-opacity, 1));
401
+ }
402
+ .text-slate-800 {
403
+ --tw-text-opacity: 1;
404
+ color: rgb(30 41 59 / var(--tw-text-opacity, 1));
405
+ }
406
+ .text-violet-600 {
407
+ --tw-text-opacity: 1;
408
+ color: rgb(124 58 237 / var(--tw-text-opacity, 1));
409
+ }
410
+ .text-white {
411
+ --tw-text-opacity: 1;
412
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
413
+ }
414
+ .underline-offset-4 {
415
+ text-underline-offset: 4px;
416
+ }
417
+ .shadow-md {
418
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
419
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
420
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
421
+ }
422
+ .shadow-none {
423
+ --tw-shadow: 0 0 #0000;
424
+ --tw-shadow-colored: 0 0 #0000;
425
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
426
+ }
427
+ .shadow-sm {
428
+ --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
429
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
430
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
431
+ }
432
+ .shadow-amber-500\/30 {
433
+ --tw-shadow-color: rgb(245 158 11 / 0.3);
434
+ --tw-shadow: var(--tw-shadow-colored);
435
+ }
436
+ .shadow-emerald-600\/25 {
437
+ --tw-shadow-color: rgb(5 150 105 / 0.25);
438
+ --tw-shadow: var(--tw-shadow-colored);
439
+ }
440
+ .shadow-fuchsia-500\/30 {
441
+ --tw-shadow-color: rgb(217 70 239 / 0.3);
442
+ --tw-shadow: var(--tw-shadow-colored);
443
+ }
444
+ .shadow-rose-600\/25 {
445
+ --tw-shadow-color: rgb(225 29 72 / 0.25);
446
+ --tw-shadow: var(--tw-shadow-colored);
447
+ }
448
+ .shadow-sky-600\/25 {
449
+ --tw-shadow-color: rgb(2 132 199 / 0.25);
450
+ --tw-shadow: var(--tw-shadow-colored);
451
+ }
452
+ .shadow-slate-900\/25 {
453
+ --tw-shadow-color: rgb(15 23 42 / 0.25);
454
+ --tw-shadow: var(--tw-shadow-colored);
455
+ }
456
+ .shadow-violet-600\/25 {
457
+ --tw-shadow-color: rgb(124 58 237 / 0.25);
458
+ --tw-shadow: var(--tw-shadow-colored);
459
+ }
460
+ .outline {
461
+ outline-style: solid;
462
+ }
463
+
464
+ @keyframes cs-ripple {
465
+ to {
466
+ transform: scale(1);
467
+ opacity: 0;
468
+ }
469
+ }
470
+
471
+ @keyframes cs-spin {
472
+ to {
473
+ transform: rotate(360deg);
474
+ }
475
+ }
476
+
477
+ @keyframes cs-shine {
478
+ to {
479
+ left: 130%;
480
+ }
481
+ }
482
+
483
+ @keyframes cs-glow-pulse {
484
+ 0%,
485
+ 100% {
486
+ box-shadow: 0 0 8px 0 var(--cs-glow, rgba(139, 92, 246, 0.5));
487
+ }
488
+ 50% {
489
+ box-shadow: 0 0 22px 6px var(--cs-glow, rgba(139, 92, 246, 0.5));
490
+ }
491
+ }
492
+
493
+ .hover\:bg-amber-400:hover {
494
+ --tw-bg-opacity: 1;
495
+ background-color: rgb(251 191 36 / var(--tw-bg-opacity, 1));
496
+ }
497
+
498
+ .hover\:bg-emerald-500:hover {
499
+ --tw-bg-opacity: 1;
500
+ background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));
501
+ }
502
+
503
+ .hover\:bg-rose-500:hover {
504
+ --tw-bg-opacity: 1;
505
+ background-color: rgb(244 63 94 / var(--tw-bg-opacity, 1));
506
+ }
507
+
508
+ .hover\:bg-sky-500:hover {
509
+ --tw-bg-opacity: 1;
510
+ background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1));
511
+ }
512
+
513
+ .hover\:bg-slate-300:hover {
514
+ --tw-bg-opacity: 1;
515
+ background-color: rgb(203 213 225 / var(--tw-bg-opacity, 1));
516
+ }
517
+
518
+ .hover\:bg-slate-50:hover {
519
+ --tw-bg-opacity: 1;
520
+ background-color: rgb(248 250 252 / var(--tw-bg-opacity, 1));
521
+ }
522
+
523
+ .hover\:bg-slate-700:hover {
524
+ --tw-bg-opacity: 1;
525
+ background-color: rgb(51 65 85 / var(--tw-bg-opacity, 1));
526
+ }
527
+
528
+ .hover\:bg-violet-50:hover {
529
+ --tw-bg-opacity: 1;
530
+ background-color: rgb(245 243 255 / var(--tw-bg-opacity, 1));
531
+ }
532
+
533
+ .hover\:bg-violet-500:hover {
534
+ --tw-bg-opacity: 1;
535
+ background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1));
536
+ }
537
+
538
+ .hover\:bg-violet-500\/10:hover {
539
+ background-color: rgb(139 92 246 / 0.1);
540
+ }
541
+
542
+ .hover\:underline:hover {
543
+ text-decoration-line: underline;
544
+ }
545
+
546
+ .hover\:shadow-lg:hover {
547
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
548
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
549
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
550
+ }
551
+
552
+ .hover\:shadow-fuchsia-500\/40:hover {
553
+ --tw-shadow-color: rgb(217 70 239 / 0.4);
554
+ --tw-shadow: var(--tw-shadow-colored);
555
+ }
556
+
557
+ .hover\:brightness-110:hover {
558
+ --tw-brightness: brightness(1.1);
559
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
560
+ }
561
+
562
+ .focus-visible\:ring-amber-400\/50:focus-visible {
563
+ --tw-ring-color: rgb(251 191 36 / 0.5);
564
+ }
565
+
566
+ .focus-visible\:ring-emerald-500\/50:focus-visible {
567
+ --tw-ring-color: rgb(16 185 129 / 0.5);
568
+ }
569
+
570
+ .focus-visible\:ring-fuchsia-400\/50:focus-visible {
571
+ --tw-ring-color: rgb(232 121 249 / 0.5);
572
+ }
573
+
574
+ .focus-visible\:ring-rose-500\/50:focus-visible {
575
+ --tw-ring-color: rgb(244 63 94 / 0.5);
576
+ }
577
+
578
+ .focus-visible\:ring-sky-500\/50:focus-visible {
579
+ --tw-ring-color: rgb(14 165 233 / 0.5);
580
+ }
581
+
582
+ .focus-visible\:ring-slate-400\/40:focus-visible {
583
+ --tw-ring-color: rgb(148 163 184 / 0.4);
584
+ }
585
+
586
+ .focus-visible\:ring-slate-400\/50:focus-visible {
587
+ --tw-ring-color: rgb(148 163 184 / 0.5);
588
+ }
589
+
590
+ .focus-visible\:ring-slate-500\/50:focus-visible {
591
+ --tw-ring-color: rgb(100 116 139 / 0.5);
592
+ }
593
+
594
+ .focus-visible\:ring-violet-400\/40:focus-visible {
595
+ --tw-ring-color: rgb(167 139 250 / 0.4);
596
+ }
597
+
598
+ .focus-visible\:ring-violet-500\/40:focus-visible {
599
+ --tw-ring-color: rgb(139 92 246 / 0.4);
600
+ }
601
+
602
+ .focus-visible\:ring-violet-500\/50:focus-visible {
603
+ --tw-ring-color: rgb(139 92 246 / 0.5);
604
+ }
605
+
606
+ @media (prefers-color-scheme: dark) {
607
+
608
+ .dark\:border-slate-700 {
609
+ --tw-border-opacity: 1;
610
+ border-color: rgb(51 65 85 / var(--tw-border-opacity, 1));
611
+ }
612
+
613
+ .dark\:border-violet-400 {
614
+ --tw-border-opacity: 1;
615
+ border-color: rgb(167 139 250 / var(--tw-border-opacity, 1));
616
+ }
617
+
618
+ .dark\:bg-slate-700 {
619
+ --tw-bg-opacity: 1;
620
+ background-color: rgb(51 65 85 / var(--tw-bg-opacity, 1));
621
+ }
622
+
623
+ .dark\:bg-slate-800 {
624
+ --tw-bg-opacity: 1;
625
+ background-color: rgb(30 41 59 / var(--tw-bg-opacity, 1));
626
+ }
627
+
628
+ .dark\:text-slate-100 {
629
+ --tw-text-opacity: 1;
630
+ color: rgb(241 245 249 / var(--tw-text-opacity, 1));
631
+ }
632
+
633
+ .dark\:text-violet-300 {
634
+ --tw-text-opacity: 1;
635
+ color: rgb(196 181 253 / var(--tw-text-opacity, 1));
636
+ }
637
+
638
+ .dark\:hover\:bg-slate-600:hover {
639
+ --tw-bg-opacity: 1;
640
+ background-color: rgb(71 85 105 / var(--tw-bg-opacity, 1));
641
+ }
642
+
643
+ .dark\:hover\:bg-violet-500\/10:hover {
644
+ background-color: rgb(139 92 246 / 0.1);
645
+ }
646
+ }
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "barati-ui",
3
+ "version": "0.1.0",
4
+ "description": "A gorgeous, feature-rich Vue 3 button component library built with Vite and Tailwind CSS",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./style.css": "./dist/style.css",
15
+ "./package.json": "./package.json"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md"
20
+ ],
21
+ "sideEffects": [
22
+ "**/*.css"
23
+ ],
24
+ "keywords": [
25
+ "vue",
26
+ "vue3",
27
+ "button",
28
+ "component",
29
+ "library",
30
+ "ui",
31
+ "tailwindcss",
32
+ "vite"
33
+ ],
34
+ "license": "MIT",
35
+ "author": "barati",
36
+ "scripts": {
37
+ "dev": "vite",
38
+ "build": "vite build && npm run build:css",
39
+ "build:css": "postcss src/style.css -o dist/style.css",
40
+ "preview": "vite preview"
41
+ },
42
+ "peerDependencies": {
43
+ "vue": "^3.4.0"
44
+ },
45
+ "devDependencies": {
46
+ "@vitejs/plugin-vue": "^5.2.1",
47
+ "autoprefixer": "^10.4.20",
48
+ "postcss": "^8.4.49",
49
+ "postcss-cli": "^11.0.0",
50
+ "tailwindcss": "^3.4.17",
51
+ "vite": "^6.0.5",
52
+ "vite-plugin-css-injected-by-js": "^3.5.2",
53
+ "vue": "^3.5.13"
54
+ }
55
+ }