veloce-vue 0.9.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,114 @@
1
+ # Vue-Components
2
+
3
+ A modern Vue.js UI component library built with Vue, Typescript, Storybook and Tailwind CSS.
4
+
5
+ ## Installation
6
+
7
+ Install the library from NPM:
8
+
9
+ ```bash
10
+ pnpm add @sherazjutt/vue-components
11
+ ```
12
+
13
+ ## Setup
14
+
15
+ ### 1. Import the CSS
16
+
17
+ Import the library's styles in your main application file:
18
+
19
+ ```javascript
20
+ import "@sherazjutt/vue-components/style.css";
21
+ ```
22
+
23
+ ### 2. Import Components
24
+
25
+ Import the components you need in your Vue components:
26
+
27
+ ```javascript
28
+ import { Button } from "@sherazjutt/vue-components";
29
+ ```
30
+
31
+ ## Usage Example
32
+
33
+ ```vue
34
+ <template>
35
+ <div>
36
+ <!-- Primary Button -->
37
+ <Button label="Primary Button" />
38
+ </div>
39
+ </template>
40
+
41
+ <script setup>
42
+ import { Button } from "@sherazjutt/vue-components";
43
+ </script>
44
+ ```
45
+
46
+ ## Main Application Setup
47
+
48
+ In your main application file (e.g., `main.ts`):
49
+
50
+ ```javascript
51
+ import "@sherazjutt/vue-components/styles.css";
52
+ import "./style.css";
53
+
54
+ import { createApp } from "vue";
55
+ import App from "./App.vue";
56
+
57
+ const app = createApp(App);
58
+ app.mount("#app");
59
+ ```
60
+
61
+ ## Requirements
62
+
63
+ - Vue 3.5 or higher
64
+ - Tailwind CSS v4 (for styling)
65
+
66
+ ## Development
67
+
68
+ This library is built using:
69
+
70
+ - Vue 3
71
+ - Tailwind CSS v4
72
+ - Vite
73
+ - Storybook for component documentation
74
+ - TypeScript
75
+
76
+ ## Production
77
+
78
+ Run `pnpm build` to build the package.
79
+ Run `pnpm run build-storybook` to build storybook only.
80
+
81
+ To test the storybook locally, you can run `pnpm run preview-storybook`. This will start the storybook production build.
82
+
83
+ ### Consuming application UI configuration
84
+
85
+ Create `ui.config.ts` and add the following code:
86
+
87
+ ```javascript
88
+ import { config } from "@sherazjutt/vue-components";
89
+
90
+ const themeConfig = {
91
+ colors: {
92
+ primary: "#F5276C",
93
+ secondary: "#F54927",
94
+ accent: "#F5B027",
95
+ },
96
+ };
97
+
98
+ export default config(themeConfig);
99
+ ```
100
+
101
+ Import and use it in `main.ts`:
102
+
103
+ ```javascript
104
+ import UIConfig from "./ui.config";
105
+
106
+ // after creating your Vue app instance:
107
+ app.use(UIConfig);
108
+ ```
109
+
110
+ Use the UI colors in your components/styles:
111
+
112
+ ```html
113
+ <div :style="{ backgroundColor: 'var(--ui-color-primary)' }">...</div>
114
+ ```
@@ -0,0 +1,31 @@
1
+ declare var __VLS_7: string, __VLS_8: {};
2
+ type __VLS_Slots = {} & {
3
+ [K in NonNullable<typeof __VLS_7>]?: (props: typeof __VLS_8) => any;
4
+ };
5
+ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
6
+ items: {
7
+ type: () => {
8
+ title: string;
9
+ content: string;
10
+ slot?: string;
11
+ }[];
12
+ required: true;
13
+ };
14
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
15
+ items: {
16
+ type: () => {
17
+ title: string;
18
+ content: string;
19
+ slot?: string;
20
+ }[];
21
+ required: true;
22
+ };
23
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
24
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
25
+ declare const _default: typeof __VLS_export;
26
+ export default _default;
27
+ type __VLS_WithSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from "@storybook/vue3-vite";
2
+ import Accordion from "./Index.vue";
3
+ declare const meta: Meta<typeof Accordion>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const SingleItem: Story;
8
+ export declare const ManyItems: Story;
9
+ export declare const WithSlots: Story;
10
+ export declare const Empty: Story;
@@ -0,0 +1,82 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
+ readonly label: {
3
+ readonly type: StringConstructor;
4
+ readonly default: "";
5
+ };
6
+ readonly loading: {
7
+ readonly type: BooleanConstructor;
8
+ readonly default: false;
9
+ };
10
+ readonly disabled: {
11
+ readonly type: BooleanConstructor;
12
+ readonly default: false;
13
+ };
14
+ readonly variant: {
15
+ readonly type: import("vue").PropType<"outlined" | "text" | "ghost" | "solid">;
16
+ readonly default: "solid";
17
+ readonly options: readonly ["outlined", "text", "ghost", "solid"];
18
+ };
19
+ readonly icon: {
20
+ readonly type: StringConstructor;
21
+ readonly default: "";
22
+ };
23
+ readonly iconClass: {
24
+ readonly type: StringConstructor;
25
+ readonly default: "";
26
+ };
27
+ readonly iconPosition: {
28
+ readonly type: import("vue").PropType<"left" | "right">;
29
+ readonly default: "right";
30
+ readonly options: readonly ["left", "right"];
31
+ };
32
+ readonly rounded: {
33
+ readonly type: BooleanConstructor;
34
+ readonly default: false;
35
+ };
36
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
37
+ readonly label: {
38
+ readonly type: StringConstructor;
39
+ readonly default: "";
40
+ };
41
+ readonly loading: {
42
+ readonly type: BooleanConstructor;
43
+ readonly default: false;
44
+ };
45
+ readonly disabled: {
46
+ readonly type: BooleanConstructor;
47
+ readonly default: false;
48
+ };
49
+ readonly variant: {
50
+ readonly type: import("vue").PropType<"outlined" | "text" | "ghost" | "solid">;
51
+ readonly default: "solid";
52
+ readonly options: readonly ["outlined", "text", "ghost", "solid"];
53
+ };
54
+ readonly icon: {
55
+ readonly type: StringConstructor;
56
+ readonly default: "";
57
+ };
58
+ readonly iconClass: {
59
+ readonly type: StringConstructor;
60
+ readonly default: "";
61
+ };
62
+ readonly iconPosition: {
63
+ readonly type: import("vue").PropType<"left" | "right">;
64
+ readonly default: "right";
65
+ readonly options: readonly ["left", "right"];
66
+ };
67
+ readonly rounded: {
68
+ readonly type: BooleanConstructor;
69
+ readonly default: false;
70
+ };
71
+ }>> & Readonly<{}>, {
72
+ readonly label: string;
73
+ readonly loading: boolean;
74
+ readonly disabled: boolean;
75
+ readonly variant: "outlined" | "text" | "ghost" | "solid";
76
+ readonly icon: string;
77
+ readonly iconClass: string;
78
+ readonly iconPosition: "left" | "right";
79
+ readonly rounded: boolean;
80
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
81
+ declare const _default: typeof __VLS_export;
82
+ export default _default;
@@ -0,0 +1,37 @@
1
+ import type { PropType } from "vue";
2
+ export declare const props: {
3
+ readonly label: {
4
+ readonly type: StringConstructor;
5
+ readonly default: "";
6
+ };
7
+ readonly loading: {
8
+ readonly type: BooleanConstructor;
9
+ readonly default: false;
10
+ };
11
+ readonly disabled: {
12
+ readonly type: BooleanConstructor;
13
+ readonly default: false;
14
+ };
15
+ readonly variant: {
16
+ readonly type: PropType<"outlined" | "text" | "ghost" | "solid">;
17
+ readonly default: "solid";
18
+ readonly options: readonly ["outlined", "text", "ghost", "solid"];
19
+ };
20
+ readonly icon: {
21
+ readonly type: StringConstructor;
22
+ readonly default: "";
23
+ };
24
+ readonly iconClass: {
25
+ readonly type: StringConstructor;
26
+ readonly default: "";
27
+ };
28
+ readonly iconPosition: {
29
+ readonly type: PropType<"left" | "right">;
30
+ readonly default: "right";
31
+ readonly options: readonly ["left", "right"];
32
+ };
33
+ readonly rounded: {
34
+ readonly type: BooleanConstructor;
35
+ readonly default: false;
36
+ };
37
+ };
@@ -0,0 +1,23 @@
1
+ import type { Meta, StoryObj } from "@storybook/vue3-vite";
2
+ import Button from "./Index.vue";
3
+ declare const meta: Meta<typeof Button>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const WithIconLeft: Story;
8
+ export declare const WithIconRight: Story;
9
+ export declare const Loading: Story;
10
+ export declare const Disabled: Story;
11
+ export declare const Solid: Story;
12
+ export declare const Outlined: Story;
13
+ export declare const Text: Story;
14
+ export declare const Ghost: Story;
15
+ export declare const Rounded: Story;
16
+ export declare const OnlyIcon: Story;
17
+ export declare const CustomIconClass: {
18
+ args: {
19
+ label: string;
20
+ icon: string;
21
+ iconClass: string;
22
+ };
23
+ };
@@ -0,0 +1,9 @@
1
+ export declare const icons: {
2
+ readonly check: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
3
+ readonly close: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
4
+ readonly loading: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
5
+ readonly "chevron-down": import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
6
+ readonly alert: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
7
+ };
8
+ export type IconNames = keyof typeof icons;
9
+ export declare const IconsList: IconNames[];
@@ -0,0 +1,10 @@
1
+ import { type IconNames } from "./index.ts";
2
+ type __VLS_Props = {
3
+ icon: IconNames | (string & {});
4
+ fallbackIcon?: IconNames | (string & {});
5
+ class?: string;
6
+ size?: number | string;
7
+ };
8
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const _default: typeof __VLS_export;
10
+ export default _default;
@@ -0,0 +1 @@
1
+ export declare function useRandomId(length: number): string;
package/exports.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export { default as Button } from "./components/Button/Index.vue";
2
+ export { default as Accordion } from "./components/Accordion/Index.vue";
3
+ export { config } from "./utils/config";
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
package/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),i={label:{type:String,default:""},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},variant:{type:String,default:"solid",options:["outlined","text","ghost","solid"]},icon:{type:String,default:""},iconClass:{type:String,default:""},iconPosition:{type:String,default:"right",options:["left","right"]},rounded:{type:Boolean,default:!1}},c=["disabled"],d=e.defineComponent({__name:"Index",props:i,setup(o){const t=o,r=e.computed(()=>{switch(t.variant){case"outlined":return"!border-primary text-primary bg-transparent hover:bg-primary disabled:hover:bg-transparent disabled:hover:text-primary hover:text-white";case"text":return"bg-transparent text-primary hover:bg-gray-200 disabled:hover:bg-transparent disabled:hover:text-primary";case"ghost":return"text-primary bg-gray-100 hover:bg-gray-200 disabled:hover:bg-transparent disabled:hover:text-primary";default:return"bg-primary text-white hover:bg-primary/75 disabled:hover:bg-primary disabled:hover:text-white"}});return(s,l)=>{const n=e.resolveComponent("Icon");return e.openBlock(),e.createElementBlock("button",{type:"button",disabled:t.disabled||t.loading,class:e.normalizeClass([r.value,{"rounded-full":t.rounded},"flex cursor-pointer items-center justify-center gap-2 rounded border border-transparent px-3 py-2 transition duration-200 disabled:cursor-not-allowed disabled:opacity-75 "])},[e.createElementVNode("div",{class:e.normalizeClass([{"justify-center":!t.icon},"flex w-full items-center justify-between gap-2"])},[t.label?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass({"order-2":t.iconPosition==="left"})},e.toDisplayString(t.label),3)):e.createCommentVNode("",!0),t.icon&&!t.loading?(e.openBlock(),e.createBlock(n,{key:1,icon:t.icon,class:e.normalizeClass(t.iconClass)},null,8,["icon","class"])):e.createCommentVNode("",!0)],2),t.loading?(e.openBlock(),e.createBlock(n,{key:0,icon:"loading"})):e.createCommentVNode("",!0)],10,c)}}}),p={class:"w-full divide-y divide-gray-200 rounded border border-slate-200 bg-white"},u=["onClick"],m={class:"title text-gray-600"},y={key:0,class:"p-3 text-gray-500"},g={key:1,class:"px-3 py-6 text-center text-gray-500"},b=e.defineComponent({__name:"Index",props:{items:{type:Array,required:!0}},setup(o){const t=e.ref(null);return(r,s)=>{const l=e.resolveComponent("Icon");return e.openBlock(),e.createElementBlock("div",p,[o.items.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(o.items,(n,a)=>(e.openBlock(),e.createElementBlock("div",{key:a},[e.createElementVNode("div",{class:e.normalizeClass([{"bg-primary/5":t.value===a},"hover:bg-primary/5 relative flex cursor-pointer justify-between gap-4 p-3 font-medium duration-100"]),onClick:h=>t.value=t.value===a?null:a},[e.createElementVNode("span",m,e.toDisplayString(n.title),1),e.createVNode(l,{icon:"chevron-down",class:e.normalizeClass([{"rotate-180":t.value===a},"icon text-[1.4rem] text-gray-400 duration-200"])},null,8,["class"])],10,u),t.value===a?(e.openBlock(),e.createElementBlock("div",y,[n.slot?e.renderSlot(r.$slots,n.slot,{key:0}):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(n.content),1)],64))])):e.createCommentVNode("",!0)]))),128)):(e.openBlock(),e.createElementBlock("div",g,"No items to show"))])}}}),v=o=>({install(){if(!o||!o.colors){console.warn("No config provided for the theme settings");return}f(o.colors)}}),f=o=>{const t=document.documentElement;for(const r in o)o[r]&&t.style.setProperty(`--ui-color-${r}`,o[r])};exports.Accordion=b;exports.Button=d;exports.config=v;
2
+ //# sourceMappingURL=index.cjs.map
package/index.cjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/components/Button/props.ts","../../src/components/Button/Index.vue","../../src/components/Accordion/Index.vue","../../src/utils/config.ts"],"sourcesContent":["import type { PropType } from \"vue\";\n\nexport const props = {\n label: { type: String, default: \"\" },\n loading: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n variant: {\n type: String as PropType<\"outlined\" | \"text\" | \"ghost\" | \"solid\">,\n default: \"solid\",\n options: [\"outlined\", \"text\", \"ghost\", \"solid\"],\n },\n icon: { type: String, default: \"\" },\n iconClass: { type: String, default: \"\" },\n iconPosition: {\n type: String as PropType<\"left\" | \"right\">,\n default: \"right\",\n options: [\"left\", \"right\"],\n },\n rounded: { type: Boolean, default: false },\n} as const;\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { props as buttonProps } from \"./props\";\n\nconst props = defineProps(buttonProps);\n\nconst classes = computed(() => {\n switch (props.variant) {\n case \"outlined\":\n return \"!border-primary text-primary bg-transparent hover:bg-primary disabled:hover:bg-transparent disabled:hover:text-primary hover:text-white\";\n case \"text\":\n return \"bg-transparent text-primary hover:bg-gray-200 disabled:hover:bg-transparent disabled:hover:text-primary\";\n case \"ghost\":\n return \"text-primary bg-gray-100 hover:bg-gray-200 disabled:hover:bg-transparent disabled:hover:text-primary\";\n default:\n return \"bg-primary text-white hover:bg-primary/75 disabled:hover:bg-primary disabled:hover:text-white\"; // solid\n }\n});\n</script>\n\n<template>\n <!-- prettier-ignore -->\n <button \n type=\"button\" \n :disabled=\"props.disabled || props.loading\" \n :class=\"[\n classes, { 'rounded-full': props.rounded }, \n 'flex cursor-pointer items-center justify-center gap-2 rounded border border-transparent px-3 py-2 transition duration-200 disabled:cursor-not-allowed disabled:opacity-75 '\n ]\"\n >\n <div :class=\"{ 'justify-center': !props.icon }\" class=\"flex w-full items-center justify-between gap-2\">\n <span v-if=\"props.label\" :class=\"{ 'order-2': props.iconPosition === 'left' }\"> {{ props.label }} </span>\n <Icon v-if=\"props.icon && !props.loading\" :icon=\"props.icon\" :class=\"props.iconClass\" />\n </div>\n\n <Icon v-if=\"props.loading\" icon=\"loading\" />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { ref } from \"vue\";\n\n// Props definition\n// `items` is an array of objects where each object represents an accordion item.\n// Each item has a `title` (string), `content` (string), and an optional `slot` (string) for custom slot rendering.\ndefineProps({\n items: { type: Array as () => { title: string; content: string; slot?: string }[], required: true },\n});\n\n// This ref holds the index of the currently active (opened) accordion item.\n// If `null`, no accordion item is open.\nconst activeIndex = ref<Number | null>(null);\n</script>\n\n<template>\n <!-- Accordion Container -->\n <div class=\"w-full divide-y divide-gray-200 rounded border border-slate-200 bg-white\">\n <!-- Iterate through items array -->\n <div v-for=\"(item, index) in items\" :key=\"index\" v-if=\"items.length\">\n <!-- Accordion Header -->\n <!-- Clicking toggles activeIndex between `index` and `null` (for collapse) -->\n <div :class=\"{ 'bg-primary/5': activeIndex === index }\" class=\"hover:bg-primary/5 relative flex cursor-pointer justify-between gap-4 p-3 font-medium duration-100\" @click=\"activeIndex = activeIndex === index ? null : index\">\n <!-- Accordion Title -->\n <span class=\"title text-gray-600\">{{ item.title }}</span>\n <!-- Chevron Icon -->\n <Icon icon=\"chevron-down\" :class=\"{ 'rotate-180': activeIndex === index }\" class=\"icon text-[1.4rem] text-gray-400 duration-200\" />\n </div>\n\n <!-- Accordion Body -->\n <div v-if=\"activeIndex === index\" class=\"p-3 text-gray-500\">\n <!-- If slot name is provided, render slot content -->\n <template v-if=\"item.slot\">\n <slot :name=\"item.slot\" />\n </template>\n <!-- Otherwise, render static content -->\n <template v-else>\n {{ item.content }}\n </template>\n </div>\n </div>\n\n <!-- Fallback message if no items provided -->\n <div class=\"px-3 py-6 text-center text-gray-500\" v-else>No items to show</div>\n </div>\n</template>\n","import type { Colors, config as Config } from \"@/types/config\";\n\n// create theme settings\nexport const config = (config: Config) => {\n return {\n install() {\n if (!config || !config.colors) {\n console.warn(\"No config provided for the theme settings\");\n return;\n }\n\n // apply colors\n applyCSSVars(config.colors);\n },\n };\n};\n\n// apply the colors to the root element\nconst applyCSSVars = (colors: Colors) => {\n const root = document.documentElement;\n\n // apply the colors to the root element\n for (const color in colors) {\n if (colors[color as keyof Colors]) {\n root.style.setProperty(`--ui-color-${color}`, colors[color as keyof Colors]);\n }\n }\n};\n"],"names":["props","__props","classes","computed","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createBlock","_component_Icon","activeIndex","ref","_openBlock","_hoisted_1","_Fragment","_renderList","item","index","_hoisted_3","_createVNode","_hoisted_4","_renderSlot","_ctx","_createTextVNode","_hoisted_5","config","applyCSSVars","colors","root","color"],"mappings":"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"}
package/index.js ADDED
@@ -0,0 +1,120 @@
1
+ import { defineComponent as g, computed as h, resolveComponent as b, createElementBlock as o, openBlock as r, normalizeClass as i, createElementVNode as d, createBlock as p, createCommentVNode as l, toDisplayString as c, ref as v, Fragment as y, renderList as f, createVNode as _, renderSlot as x, createTextVNode as k } from "vue";
2
+ const w = {
3
+ label: { type: String, default: "" },
4
+ loading: { type: Boolean, default: !1 },
5
+ disabled: { type: Boolean, default: !1 },
6
+ variant: {
7
+ type: String,
8
+ default: "solid",
9
+ options: ["outlined", "text", "ghost", "solid"]
10
+ },
11
+ icon: { type: String, default: "" },
12
+ iconClass: { type: String, default: "" },
13
+ iconPosition: {
14
+ type: String,
15
+ default: "right",
16
+ options: ["left", "right"]
17
+ },
18
+ rounded: { type: Boolean, default: !1 }
19
+ }, C = ["disabled"], P = /* @__PURE__ */ g({
20
+ __name: "Index",
21
+ props: w,
22
+ setup(t) {
23
+ const e = t, n = h(() => {
24
+ switch (e.variant) {
25
+ case "outlined":
26
+ return "!border-primary text-primary bg-transparent hover:bg-primary disabled:hover:bg-transparent disabled:hover:text-primary hover:text-white";
27
+ case "text":
28
+ return "bg-transparent text-primary hover:bg-gray-200 disabled:hover:bg-transparent disabled:hover:text-primary";
29
+ case "ghost":
30
+ return "text-primary bg-gray-100 hover:bg-gray-200 disabled:hover:bg-transparent disabled:hover:text-primary";
31
+ default:
32
+ return "bg-primary text-white hover:bg-primary/75 disabled:hover:bg-primary disabled:hover:text-white";
33
+ }
34
+ });
35
+ return (m, u) => {
36
+ const a = b("Icon");
37
+ return r(), o("button", {
38
+ type: "button",
39
+ disabled: e.disabled || e.loading,
40
+ class: i([
41
+ n.value,
42
+ { "rounded-full": e.rounded },
43
+ "flex cursor-pointer items-center justify-center gap-2 rounded border border-transparent px-3 py-2 transition duration-200 disabled:cursor-not-allowed disabled:opacity-75 "
44
+ ])
45
+ }, [
46
+ d("div", {
47
+ class: i([{ "justify-center": !e.icon }, "flex w-full items-center justify-between gap-2"])
48
+ }, [
49
+ e.label ? (r(), o("span", {
50
+ key: 0,
51
+ class: i({ "order-2": e.iconPosition === "left" })
52
+ }, c(e.label), 3)) : l("", !0),
53
+ e.icon && !e.loading ? (r(), p(a, {
54
+ key: 1,
55
+ icon: e.icon,
56
+ class: i(e.iconClass)
57
+ }, null, 8, ["icon", "class"])) : l("", !0)
58
+ ], 2),
59
+ e.loading ? (r(), p(a, {
60
+ key: 0,
61
+ icon: "loading"
62
+ })) : l("", !0)
63
+ ], 10, C);
64
+ };
65
+ }
66
+ }), S = { class: "w-full divide-y divide-gray-200 rounded border border-slate-200 bg-white" }, B = ["onClick"], I = { class: "title text-gray-600" }, N = {
67
+ key: 0,
68
+ class: "p-3 text-gray-500"
69
+ }, V = {
70
+ key: 1,
71
+ class: "px-3 py-6 text-center text-gray-500"
72
+ }, A = /* @__PURE__ */ g({
73
+ __name: "Index",
74
+ props: {
75
+ items: { type: Array, required: !0 }
76
+ },
77
+ setup(t) {
78
+ const e = v(null);
79
+ return (n, m) => {
80
+ const u = b("Icon");
81
+ return r(), o("div", S, [
82
+ t.items.length ? (r(!0), o(y, { key: 0 }, f(t.items, (a, s) => (r(), o("div", { key: s }, [
83
+ d("div", {
84
+ class: i([{ "bg-primary/5": e.value === s }, "hover:bg-primary/5 relative flex cursor-pointer justify-between gap-4 p-3 font-medium duration-100"]),
85
+ onClick: (j) => e.value = e.value === s ? null : s
86
+ }, [
87
+ d("span", I, c(a.title), 1),
88
+ _(u, {
89
+ icon: "chevron-down",
90
+ class: i([{ "rotate-180": e.value === s }, "icon text-[1.4rem] text-gray-400 duration-200"])
91
+ }, null, 8, ["class"])
92
+ ], 10, B),
93
+ e.value === s ? (r(), o("div", N, [
94
+ a.slot ? x(n.$slots, a.slot, { key: 0 }) : (r(), o(y, { key: 1 }, [
95
+ k(c(a.content), 1)
96
+ ], 64))
97
+ ])) : l("", !0)
98
+ ]))), 128)) : (r(), o("div", V, "No items to show"))
99
+ ]);
100
+ };
101
+ }
102
+ }), q = (t) => ({
103
+ install() {
104
+ if (!t || !t.colors) {
105
+ console.warn("No config provided for the theme settings");
106
+ return;
107
+ }
108
+ $(t.colors);
109
+ }
110
+ }), $ = (t) => {
111
+ const e = document.documentElement;
112
+ for (const n in t)
113
+ t[n] && e.style.setProperty(`--ui-color-${n}`, t[n]);
114
+ };
115
+ export {
116
+ A as Accordion,
117
+ P as Button,
118
+ q as config
119
+ };
120
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/components/Button/props.ts","../../src/components/Button/Index.vue","../../src/components/Accordion/Index.vue","../../src/utils/config.ts"],"sourcesContent":["import type { PropType } from \"vue\";\n\nexport const props = {\n label: { type: String, default: \"\" },\n loading: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n variant: {\n type: String as PropType<\"outlined\" | \"text\" | \"ghost\" | \"solid\">,\n default: \"solid\",\n options: [\"outlined\", \"text\", \"ghost\", \"solid\"],\n },\n icon: { type: String, default: \"\" },\n iconClass: { type: String, default: \"\" },\n iconPosition: {\n type: String as PropType<\"left\" | \"right\">,\n default: \"right\",\n options: [\"left\", \"right\"],\n },\n rounded: { type: Boolean, default: false },\n} as const;\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { props as buttonProps } from \"./props\";\n\nconst props = defineProps(buttonProps);\n\nconst classes = computed(() => {\n switch (props.variant) {\n case \"outlined\":\n return \"!border-primary text-primary bg-transparent hover:bg-primary disabled:hover:bg-transparent disabled:hover:text-primary hover:text-white\";\n case \"text\":\n return \"bg-transparent text-primary hover:bg-gray-200 disabled:hover:bg-transparent disabled:hover:text-primary\";\n case \"ghost\":\n return \"text-primary bg-gray-100 hover:bg-gray-200 disabled:hover:bg-transparent disabled:hover:text-primary\";\n default:\n return \"bg-primary text-white hover:bg-primary/75 disabled:hover:bg-primary disabled:hover:text-white\"; // solid\n }\n});\n</script>\n\n<template>\n <!-- prettier-ignore -->\n <button \n type=\"button\" \n :disabled=\"props.disabled || props.loading\" \n :class=\"[\n classes, { 'rounded-full': props.rounded }, \n 'flex cursor-pointer items-center justify-center gap-2 rounded border border-transparent px-3 py-2 transition duration-200 disabled:cursor-not-allowed disabled:opacity-75 '\n ]\"\n >\n <div :class=\"{ 'justify-center': !props.icon }\" class=\"flex w-full items-center justify-between gap-2\">\n <span v-if=\"props.label\" :class=\"{ 'order-2': props.iconPosition === 'left' }\"> {{ props.label }} </span>\n <Icon v-if=\"props.icon && !props.loading\" :icon=\"props.icon\" :class=\"props.iconClass\" />\n </div>\n\n <Icon v-if=\"props.loading\" icon=\"loading\" />\n </button>\n</template>\n","<script setup lang=\"ts\">\nimport { ref } from \"vue\";\n\n// Props definition\n// `items` is an array of objects where each object represents an accordion item.\n// Each item has a `title` (string), `content` (string), and an optional `slot` (string) for custom slot rendering.\ndefineProps({\n items: { type: Array as () => { title: string; content: string; slot?: string }[], required: true },\n});\n\n// This ref holds the index of the currently active (opened) accordion item.\n// If `null`, no accordion item is open.\nconst activeIndex = ref<Number | null>(null);\n</script>\n\n<template>\n <!-- Accordion Container -->\n <div class=\"w-full divide-y divide-gray-200 rounded border border-slate-200 bg-white\">\n <!-- Iterate through items array -->\n <div v-for=\"(item, index) in items\" :key=\"index\" v-if=\"items.length\">\n <!-- Accordion Header -->\n <!-- Clicking toggles activeIndex between `index` and `null` (for collapse) -->\n <div :class=\"{ 'bg-primary/5': activeIndex === index }\" class=\"hover:bg-primary/5 relative flex cursor-pointer justify-between gap-4 p-3 font-medium duration-100\" @click=\"activeIndex = activeIndex === index ? null : index\">\n <!-- Accordion Title -->\n <span class=\"title text-gray-600\">{{ item.title }}</span>\n <!-- Chevron Icon -->\n <Icon icon=\"chevron-down\" :class=\"{ 'rotate-180': activeIndex === index }\" class=\"icon text-[1.4rem] text-gray-400 duration-200\" />\n </div>\n\n <!-- Accordion Body -->\n <div v-if=\"activeIndex === index\" class=\"p-3 text-gray-500\">\n <!-- If slot name is provided, render slot content -->\n <template v-if=\"item.slot\">\n <slot :name=\"item.slot\" />\n </template>\n <!-- Otherwise, render static content -->\n <template v-else>\n {{ item.content }}\n </template>\n </div>\n </div>\n\n <!-- Fallback message if no items provided -->\n <div class=\"px-3 py-6 text-center text-gray-500\" v-else>No items to show</div>\n </div>\n</template>\n","import type { Colors, config as Config } from \"@/types/config\";\n\n// create theme settings\nexport const config = (config: Config) => {\n return {\n install() {\n if (!config || !config.colors) {\n console.warn(\"No config provided for the theme settings\");\n return;\n }\n\n // apply colors\n applyCSSVars(config.colors);\n },\n };\n};\n\n// apply the colors to the root element\nconst applyCSSVars = (colors: Colors) => {\n const root = document.documentElement;\n\n // apply the colors to the root element\n for (const color in colors) {\n if (colors[color as keyof Colors]) {\n root.style.setProperty(`--ui-color-${color}`, colors[color as keyof Colors]);\n }\n }\n};\n"],"names":["props","__props","classes","computed","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createBlock","_component_Icon","activeIndex","ref","_openBlock","_hoisted_1","_Fragment","_renderList","item","index","_hoisted_3","_createVNode","_hoisted_4","_renderSlot","_ctx","_createTextVNode","_hoisted_5","config","applyCSSVars","colors","root","color"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "veloce-vue",
3
+ "version": "0.9.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "A Vue 3 library built with Vite + TypeScript + Tailwind CSS.",
7
+ "license": "MIT",
8
+ "author": "Sheraz <sherazarshad419@gmail.com>",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/SherazJutt/veloce-vue.git"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/SherazJutt/veloce-vue/issues"
15
+ },
16
+ "homepage": "https://github.com/SherazJutt/veloce-vue#readme",
17
+ "main": "./index.cjs",
18
+ "module": "./index.js",
19
+ "types": "./exports.d.ts",
20
+ "style": "./ui-library.css",
21
+ "exports": {
22
+ ".": {
23
+ "import": "./index.js",
24
+ "require": "./index.cjs",
25
+ "types": "./exports.d.ts",
26
+ "default": "./index.js"
27
+ },
28
+ "./styles.css": "./ui-library.css"
29
+ },
30
+ "files": [
31
+ "**/*"
32
+ ],
33
+ "sideEffects": [
34
+ "./styles.css"
35
+ ],
36
+ "peerDependencies": {
37
+ "vue": "^3.3.0"
38
+ },
39
+ "keywords": [
40
+ "vue3",
41
+ "tailwindcss",
42
+ "component library",
43
+ "vue",
44
+ "vuejs",
45
+ "vue.js",
46
+ "typescript",
47
+ "veloce-vue",
48
+ "ui",
49
+ "tailwind",
50
+ "framework",
51
+ "ui-framework"
52
+ ]
53
+ }
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
4
+ };
5
+ export default _default;
6
+ export declare const Home: {};
@@ -0,0 +1,9 @@
1
+ interface Colors {
2
+ primary: string;
3
+ secondary: string;
4
+ accent: string;
5
+ }
6
+ interface config {
7
+ colors: Colors;
8
+ }
9
+ export type { Colors, config };
@@ -0,0 +1,4 @@
1
+ import type { config as Config } from "@/types/config";
2
+ export declare const config: (config: Config) => {
3
+ install(): void;
4
+ };
@@ -0,0 +1,4 @@
1
+ export declare function generateStoryControls(props: Record<string, any>): {
2
+ args: Record<string, any>;
3
+ argTypes: Record<string, any>;
4
+ };
package/veloce-vue.css ADDED
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-700:oklch(37.2% .044 257.287);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-medium:500;--font-weight-semibold:600;--radius-sm:.25rem;--radius-md:.375rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary:var(--ui-color-primary)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.-top-2\.5{top:calc(var(--spacing)*-2.5)}.-top-9{top:calc(var(--spacing)*-9)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-\[9px\]{top:9px}.top-full{top:100%}.-right-full{right:-100%}.right-0{right:calc(var(--spacing)*0)}.right-full{right:100%}.-bottom-1{bottom:calc(var(--spacing)*-1)}.-bottom-full{bottom:-100%}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-full{bottom:100%}.-left-full{left:-100%}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-3{left:calc(var(--spacing)*3)}.left-full{left:100%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[49\]{z-index:49}.order-2{order:2}.m-0{margin:calc(var(--spacing)*0)}.mx-auto{margin-inline:auto}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-2{margin-left:calc(var(--spacing)*-2)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-auto{margin-left:auto}.flex{display:flex}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-full{width:100%;height:100%}.h-2{height:calc(var(--spacing)*2)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-\[1px\]{height:1px}.h-\[42px\]{height:42px}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[90dvh\]{max-height:90dvh}.max-h-\[calc\(100dvh-100px\)\]{max-height:calc(100dvh - 100px)}.w-2{width:calc(var(--spacing)*2)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-10{width:calc(var(--spacing)*10)}.w-\[1px\]{width:1px}.w-\[200px\]{width:200px}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-screen{width:100vw}.max-w-\[360px\]{max-width:360px}.max-w-\[600px\]{max-width:600px}.min-w-full{min-width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\!border-primary{border-color:var(--color-primary)!important}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-primary{border-color:var(--color-primary)}.border-slate-200{border-color:var(--color-slate-200)}.border-transparent{border-color:#0000}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-primary,.bg-primary\/5{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/5{background-color:color-mix(in oklab,var(--color-primary)5%,transparent)}}.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--color-primary)10%,transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.\!p-1{padding:calc(var(--spacing)*1)!important}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.\!px-3{padding-inline:calc(var(--spacing)*3)!important}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-\[2px\]{padding-inline:2px}.\!py-1{padding-block:calc(var(--spacing)*1)!important}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-3{padding-top:calc(var(--spacing)*3)}.pl-5{padding-left:calc(var(--spacing)*5)}.text-center{text-align:center}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[1\.4rem\]{font-size:1.4rem}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-black{color:var(--color-black)}.text-gray-200{color:var(--color-gray-200)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-primary{color:var(--color-primary)}.text-slate-500{color:var(--color-slate-500)}.text-white{color:var(--color-white)}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-slate-500\/10{--tw-shadow-color:#62748e1a}@supports (color:color-mix(in lab,red,red)){.shadow-slate-500\/10{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-slate-500)10%,transparent)var(--tw-shadow-alpha),transparent)}}.shadow-slate-700\/10{--tw-shadow-color:#3141581a}@supports (color:color-mix(in lab,red,red)){.shadow-slate-700\/10{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-slate-700)10%,transparent)var(--tw-shadow-alpha),transparent)}}.outline-primary{outline-color:var(--color-primary)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.select-none{-webkit-user-select:none;user-select:none}.peer-placeholder-shown\:text-gray-400:is(:where(.peer):placeholder-shown~*){color:var(--color-gray-400)}.peer-focus\:-top-2\.5:is(:where(.peer):focus~*){top:calc(var(--spacing)*-2.5)}.peer-focus\:text-sm:is(:where(.peer):focus~*){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.peer-focus\:text-black:is(:where(.peer):focus~*){color:var(--color-black)}@media (hover:hover){.hover\:border-primary\/60:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/60:hover{border-color:color-mix(in oklab,var(--color-primary)60%,transparent)}}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-primary:hover,.hover\:bg-primary\/5:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/5:hover{background-color:color-mix(in oklab,var(--color-primary)5%,transparent)}}.hover\:bg-primary\/75:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/75:hover{background-color:color-mix(in oklab,var(--color-primary)75%,transparent)}}.hover\:text-white:hover{color:var(--color-white)}}.focus\:border-primary:focus{border-color:var(--color-primary)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-75:disabled{opacity:.75}@media (hover:hover){.disabled\:hover\:bg-primary:disabled:hover{background-color:var(--color-primary)}.disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}.disabled\:hover\:text-primary:disabled:hover{color:var(--color-primary)}.disabled\:hover\:text-white:disabled:hover{color:var(--color-white)}}@media (min-width:576px){.sm\:max-h-\[75vh\]{max-height:75vh}.sm\:max-h-\[95dvh\]{max-height:95dvh}.sm\:w-\[90\%\]{width:90%}}}:root{--ui-color-primary:#523ae4;--ui-color-secondary:#0f0d0d;--ui-color-accent:#f59e0b}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background-color:var(--color-gray-200)}::-webkit-scrollbar-thumb{background-color:var(--color-primary)}::-webkit-scrollbar-thumb:hover{background-color:var(--color-gray-600)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}